Ehandel.se

Ehandel.se (https://www.ehandel.se/forum/)
-   Logistik (https://www.ehandel.se/forum/logistik/)
-   -   Script för packsoft online (https://www.ehandel.se/forum/logistik/5103-script-foer-packsoft-online.html)

Fractronics 2012-09-21 11:45

Script för packsoft online
 
Hej!

Har länge stört mig på det manuella arbetet att klippa och klistra in adresser i packsoft online.
Idag fick jag nog och knåpade ihop ett Greasemonkey script som gör mitt jobb.
(Eftersom jag kör chrome så kör jag egentligen inte Greasemonkey utan Tampermonkey men det borde fungera med Greasemonkey)

Scriptet startar när jag öppnar min sida med packsedlar (en eller flera), om jag klickar på ett visst objekt på sidan så sparas alla adresser och packsoft online öppnas, man loggas in, flyttas till utskriftsfavoriten varubrev, alla uppgifter fylls i automatiskt för alla insamlade adresser, och man flyttas slutligen till lagrade utskrifter där man kan trycka på skriv ut.
(Scriptet skulle kunna trycka på "skriv ut" också men jag stoppar här)

Äntligen slipper jag klippa och klistra.

Jag slängde ihop scriptet på en halvtimme (det går att göra bättre på alla sätt) och det är gjort för att fungera för mig och min utskriftsfavorit "varubrev", men om någon vill ha det att utgå ifrån så bifogar jag det här.

Kod:

// ==UserScript==
// @name          varubrev
// @namespace    www.fractalposter.com
// @author        Mikael Backlund
// @description  Varubrev
// @include      https://po.unifaun.se*
// @include      http://www.nesconnector.se*
// @require            http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
// @version                    001
// ==/UserScript==



// Base url of page to collect addresses on.
var customer_info_url_base = "http://www.nesconnector.se/admin/index.php?route=sale/order/packinginv";
// When object of this class is clicked on the above page addresses are collected
var object_class_to_click = ".customer_addr2";
// Pacsoft online user id
var my_pacsoft_uid = "123456";
// Pacsoft online password
var my_pacsoft_pwd = "abcdef";
// Name on image next to favorite <img name="xxxxxxxx">
var favorite_html_name = "act_ShipmentJobFavoriteSearchActions_SearchResultEdit_RowId_7249";
// Senders packsoft customer number
var my_packsoft_customer_nr = "987654321";
// Class of <p> with customer name etc...
var customer_name_class      = ".customer_name";
var customer_address1_class  = ".customer_address1";
var customer_address2_class  = ".customer_address2";
var customer_postcode_class  = ".customer_postcode";
var customer_email_class    = ".customer_email";
var customer_telephone_class = ".customer_telephone";
var customer_order_id_class  = ".customer_order_id";


var customer_names      = new Array();
var customer_address1s  = new Array();
var customer_address2s  = new Array();
var customer_postcodes  = new Array();
var customer_emails    = new Array();
var customer_telephones = new Array();
var customer_order_ids  = new Array();

// Attach the collect_addresses function to a object on the page with addresses
if (window.location.href.indexOf(customer_info_url_base) > -1){
  $(object_class_to_click).click(collect_addresses);
}
// The login page of packsoft online
else if (GM_getValue("trigger")=="1" && $('input[name="act_LoginActions_Login"]')[0]) {
  $('input[name="CompanyLogin"]').val(my_pacsoft_uid);
  $('input[name="UserPass"]').val(my_pacsoft_pwd);
  GM_setValue("trigger", "2");
  setTimeout(function() {$('input[name="act_LoginActions_Login"]').trigger("click");},100);
}
// Packsoft home screen, go to my favorite named Varubrev
else if (GM_getValue("trigger")=="2" && document.location.href.indexOf("Action=act_SystemActions_Body")>-1) {
  GM_setValue("trigger", "3");
  GM_setValue("session_link", document.location.href.split("&")[0].split("?")[1]);
  document.location = "webapp?"+GM_getValue("session_link")+"&Action="+favorite_html_name; 
}
// Fill the first page of the form press next (do while there is addresses left)
else if (GM_getValue("trigger")=="3" && GM_getValue("no_of_customers")>0 && $('input[name="act_ShipmentJobEdit1Actions_Next"]')[0]) { 
  $('input[name="RECEIVERName"]').val(GM_getValue("customer_names").split("¤")[GM_getValue("no_of_customers")-1]);
  $('input[name="RECEIVERDeliveryAddress1"]').val(GM_getValue("customer_address1s").split("¤")[GM_getValue("no_of_customers")-1]);
  $('input[name="RECEIVERDeliveryAddress2"]').val(GM_getValue("customer_address2s").split("¤")[GM_getValue("no_of_customers")-1]);
  $('input[name="RECEIVERDeliveryZipcode"]').focus();
  $('input[name="RECEIVERDeliveryZipcode"]').val(GM_getValue("customer_postcodes").split("¤")[GM_getValue("no_of_customers")-1]);
  $('input[name="RECEIVERDeliveryZipcode"]').blur();
  $('input[name="RECEIVERPhone"]').focus();
  $('input[name="RECEIVERPhone"]').val(GM_getValue("customer_telephones").split("¤")[GM_getValue("no_of_customers")-1]);
  $('input[name="RECEIVEREmail"]').val(GM_getValue("customer_emails").split("¤")[GM_getValue("no_of_customers")-1]);
  setTimeout(function() {$('input[name="act_ShipmentJobEdit1Actions_Next"]').trigger("click");},100);
}
// Fill the second page of the form click "lagra" (do while there is addresses left)
else if (GM_getValue("trigger")=="3" && GM_getValue("no_of_customers")>0 && $('input[name="act_ShipmentJobEdit2Actions_Store"]')[0]) {   
  $('input[name="ShipmentSndReference"]').val(GM_getValue("customer_order_ids").split("¤")[GM_getValue("no_of_customers")-1]);   
  $('select[name="SenderCustNo"]').val(my_packsoft_customer_nr);       
  $('input[name="AddonsNOTEMAIL"]').attr('checked', true);   
  GM_setValue("no_of_customers", GM_getValue("no_of_customers")-1);
  if (GM_getValue("no_of_customers")==0)
    GM_setValue("trigger", "4");
  setTimeout(function() {$('input[name="act_ShipmentJobEdit2Actions_Store"]').trigger("click");},100);                       
}
// Go to "Lagrade utskrifter"
else if (GM_getValue("trigger")=="4" && $('input[name="act_ShipmentJobEdit1Actions_Next"]')[0]) {   
  GM_setValue("trigger", "0");
  document.location = "webapp?"+GM_getValue("session_link")+"&Action=act_MenuActions_Item&Target=body&ItemHandler=ShipmentJobSearchActions"; 
}

// This function collects addresses stores them and then opens packsoft online
// This function is attached to a object on the page with addresses
// It is triggered when the user clicks the object
function collect_addresses() {     
  $(customer_name_class).each(function (i, elem)  { customer_names[i]=$(elem).text().replace("¤",""); });
  $('.customer_address1').each(function (i, elem)  { customer_address1s[i]=$(elem).text().replace("¤",""); });
  $('.customer_address2').each(function (i, elem)  { customer_address2s[i]=$(elem).text().replace("¤",""); });
  $('.customer_postcode').each(function (i, elem)  { customer_postcodes[i]=$(elem).text().replace("¤",""); });
  $('.customer_email').each(function (i, elem)    { customer_emails[i]=$(elem).text().replace("¤",""); });
  $('.customer_telephone').each(function (i, elem) { customer_telephones[i]=$(elem).text().replace("¤",""); });
  $('.customer_order_id').each(function (i, elem)  { customer_order_ids[i]=$(elem).text().replace("¤",""); });
   
  GM_setValue("customer_names", customer_names.join("¤"));
  GM_setValue("customer_address1s", customer_address1s.join("¤"));
  GM_setValue("customer_address2s", customer_address2s.join("¤"));
  GM_setValue("customer_postcodes", customer_postcodes.join("¤"));
  GM_setValue("customer_emails", customer_emails.join("¤"));
  GM_setValue("customer_telephones", customer_telephones.join("¤"));
  GM_setValue("customer_order_ids", customer_order_ids.join("¤"));
   
  GM_setValue("no_of_customers", customer_names.length);
  GM_setValue("trigger", "1");
  alert("Collected " + customer_names.length + " customer addresses.");
  window.open("https://po.unifaun.se");
}


DavidWigg 2012-09-21 14:05

Precis vad jag skulle ha till min opencart-installation.

Har du någon speciell modul i Opencart som denna går till?

Fractronics 2012-09-21 16:04

Citat:

Ursprungligen postat av DavidWigg (Inlägg 52361)
Precis vad jag skulle ha till min opencart-installation.

Har du någon speciell modul i Opencart som denna går till?

Hej!

Nej det är ett script (javascript) som körs av ett browseplugin (Greasemonkey för FF eller Tampermonkey for chrome). Men installerar först browserpluginet och lägger sedan till dom script man vill köra. Det spelar ingen roll vad man kör sin ehandel på.

Detta script känner av när man besöker en viss sida (sidan med dom adresser man vill skriva ut).
Scriptet lägger då till en function på denna sidan som körs när man klickar på ett objekt med en viss class. Detta ställs in med följande i scriptet:
Kod:

var customer_info_url_base = "http://www.nesconnector.se/admin/index.php?route=sale/order/packinginv";
var object_class_to_click = ".customer_addr2";

När man klickar på detta object samlas addressinformation in från alla <p> taggar på sidan med följande classer:
Kod:

// Class of <p> with customer name etc... (these are collected)
var customer_name_class      = ".customer_name";
var customer_address1_class  = ".customer_address1";
var customer_address2_class  = ".customer_address2";
var customer_postcode_class  = ".customer_postcode";
var customer_email_class    = ".customer_email";
var customer_telephone_class = ".customer_telephone";
var customer_order_id_class  = ".customer_order_id";

Så om det finns en
Kod:

<p class="customer_name">Ove Vovve</p>
så samlas det namnet in.

Sedan öppnar scriptet packsoft online och loggar in och öppnar en utskriftsfavorit länken till min utskriftsfavorit sätts i scriptet
Kod:

// Link to favorite for varubrev in packsoft
var varubrev_link = "webapp?Env=po.regionse_SE_WOSF7O3S4BM6DXJP_0&Action=act_ShipmentJobFavoriteSearchActions_SearchResultEdit_RowId_7249";

Scriptet kommer nu fylla i namn adress mm för alla dom addresser den samlat in och lagra dessa utskrifter.

Sist går scriptet till lagrade utskrifter.

Scriptet behöver säkert ändras eftersom någon annans utskriftsfavorit kanske har andra fältnamn jämfört med min.
Någon annan kan säkert skapa ett mer generiskt script.

DavidWigg 2012-09-21 17:09

Detta var väldigt intressant. Jag ska sätta tänderna i det :)

Men det är alltså att jag ändrar lite i min "/admin/index.php?route=sale/order/invoice" så kan det gå?

Nu är så här:


PHP-kod:

<table class="address">
    <
tr class="heading">
      <
td width="50%"><b>Till</b></td>
      <
td width="50%"><b>Leveransadress (om annan än fakturaadress)</b></td>
    </
tr>
    <
tr>
      <
td>Kalle Anka<br />Ankeborgsvägern 1<br />1234 Ankeborg<br />Sweden<br/>
        
Anka@hotmail.se<br/>
        
070xxxxxx</td

Då kan jag sätta in dessa klasser i denna kod(?) Typ så?

PHP-kod:

<table class="address">
    <
tr class="heading">
      <
td width="50%"><b>Till</b></td>
      <
td width="50%"><b>Leveransadress (om annan än fakturaadress)</b></td>
    </
tr>
    <
tr>
      <
td><class="customer_name">Kalle Anka</p><br /><class=".customer_address1">Ankeborgsvägen 1</p><br /><class=".customer_postcode">12345</p>Ankeborg<br />Sweden<br/>
        
anka@hotmail.se<br/>
        
070xxxxxxx</td


DavidWigg 2012-09-21 18:04

En fråga till bara :)

Hur hittade du sökvägen till din utskriftfavorit?

Jag har en utskriftfavorit som ligger under "Utskriftsfavoriter - Påbörja utskrift".

Men jag får inte upp en länk till den.

Fractronics 2012-09-22 09:18

Citat:

Ursprungligen postat av DavidWigg (Inlägg 52371)
Detta var väldigt intressant. Jag ska sätta tänderna i det :)
Då kan jag sätta in dessa klasser i denna kod(?) Typ så?

Ja så borde fungera, jag tror inte att det behöver vara just <p> det borde fungera även med <span> eller liknande.


Citat:

Ursprungligen postat av DavidWigg (Inlägg 52371)
Jag har en utskriftfavorit som ligger under "Utskriftsfavoriter - Påbörja utskrift".

Men jag får inte upp en länk till den.

Jag hittade ett fel i scriptet som berodde på session beroende länkar, det är fixat nu och scriptet är uppdaterat i första posten.
Länken du letade efter är nu ändrad lite i scriptet, man skriver nu in namnet på den bild (liten pil) som syns till vänster om utskriftsfavoriten.
I chrome högerklicka och välj insect element och se vad den har för "name".

DavidWigg 2012-09-22 10:20

Citat:

Ursprungligen postat av Fractronics (Inlägg 52392)
Ja så borde fungera, jag tror inte att det behöver vara just <p> det borde fungera även med <span> eller liknande.




Jag hittade ett fel i scriptet som berodde på session beroende länkar, det är fixat nu och scriptet är uppdaterat i första posten.
Länken du letade efter är nu ändrad lite i scriptet, man skriver nu in namnet på den bild (liten pil) som syns till vänster om utskriftsfavoriten.
I chrome högerklicka och välj insect element och se vad den har för "name".

Perfekt. Hittade länken :)

Ska försöka att få detta att fungera. Fungerar det, är du årets hjälte :D

Det är så jä*la kul att lära sig något nytt också :)

peanut 2012-09-23 16:40

Grymt, ska försöka knåpa ihop något liknande mellan våran OpenCart-butik och DHL Multishipping :)

DavidWigg 2012-09-25 14:35

Jag kan bekräfta att detta fungerar alldeles utmärkt nu. Har kopplat det från min Open Cart-installation till Unifaun. Den hämtar adresserna från den inbyggda "invoice" (faktura).

I admin har jag också en modul som gör att jag kan skriva ut "invoice" på alla beställningar samtidigt. Det resulterar i att jag också kan exportera alla adresser till Unifaun med ett knapptryck nu.

puttedge 2012-09-25 14:55

Nu väntar man bara på en youtube tutorial så kommer alla ehandlare köra med script:)


Alla tider är GMT +1. Klockan är nu 13:53.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
Search Engine Optimisation provided by DragonByte SEO (Lite) - vBulletin Mods & Addons Copyright © 2019 DragonByte Technologies Ltd.
Ad Management plugin by RedTyger