Autor Téma: Číslování objednávek ve VM 2  (Přečteno 18940 krát)

0 uživatelů a 1 Host prohlíží toto téma.

Offline Frkal

  • Nováček
  • *
  • Příspěvků: 24
  • Počet poděkování: 35
Číslování objednávek ve VM 2
« kdy: 11. Duben 2012, 00:35:23 dopoledne »
Nepřišel někdo z vás na to, jak změnit číslování objednávek ve VM 2? Systém posledního stoupajícího čísla s náhodnými znaky před tím není zrovna ideální pro VS na platbu. Ve VM na to existoval malý hack, ale tady jsem zatím bezradný.

Potřeboval bych změnit iedálně na tvar 2012-XX-YYYY, kde XX je pevně dané číslo a YYYY přirůstá po jednom. Na fóru Virtuemartu se sice píše o vznikajícím pluginu, ten ale zatím nevyšel. Předem díky za tipy.

Offline Ondrej

  • Nováček
  • *
  • Příspěvků: 19
  • Počet poděkování: 75
Re:Číslování objednávek ve VM 2
« Odpověď #1 kdy: 11. Duben 2012, 23:11:23 odpoledne »
"/administrator/components/com_virtuemart/models/orders.php" Na riadku 596 zmeníš "$_orderData->order_number =' ';" na
Citace
$_orderData->order_number = $this->generateOrderNumber($_usr->get('id'),0,$_orderData->virtuemart_vendor_id);
Alebo si to nahradíš takou premennou, akú potrebuješ.
http://www.holdysoftware.sk

Offline Frkal

  • Nováček
  • *
  • Příspěvků: 24
  • Počet poděkování: 35
Re:Číslování objednávek ve VM 2
« Odpověď #2 kdy: 12. Duben 2012, 14:17:42 odpoledne »
Díky za tip, funguje, jen jsem kód našel na řádku 560 :)
« Poslední změna: 12. Duben 2012, 14:25:18 odpoledne od fRKAL »

Offline Frkal

  • Nováček
  • *
  • Příspěvků: 24
  • Počet poděkování: 35
Re:Číslování objednávek ve VM 2
« Odpověď #3 kdy: 12. Duben 2012, 14:32:23 odpoledne »
Ještě dotaz - nyní chodí objednávky ve tvaru XXX (X číslo). Jak by měl ten kód vypadat, aby chodily ve tvaru 201200XXX? Nejsem bohužel programátor a když jsem zkusil tu 0 v kódu přepsat, tak se z čísla objednávky stalo něco strašného :) Předem díky

Offline misiak

  • Nováček
  • *
  • Příspěvků: 17
  • Počet poděkování: 0
Re:Číslování objednávek ve VM 2
« Odpověď #4 kdy: 12. Duben 2012, 14:47:41 odpoledne »
vo VM 2.0.2 je to v subore orders.php vo funkcii generateOrderNumber. tam si zistis posledne order number v databaze a zdvihnes ho o 1.

nevie niekto ako nahodit vlastne id_order vo VM 2.0.2
viem ze zaznam sa uklada vo funkcii _createOrder() v subore orders.php. ale zial to nefunguje, objednavka neprejde aj ked som odstranil v dtb autoinrement pre tabulky orders a zmenil som aj velkost int z 1 na 10 ale zaznam sa neulozi.
Dakujem za odpoved

Offline Frkal

  • Nováček
  • *
  • Příspěvků: 24
  • Počet poděkování: 35
Re:Číslování objednávek ve VM 2
« Odpověď #5 kdy: 12. Duben 2012, 15:32:22 odpoledne »
Zkusil jsem v databázi přepsat číslo poslední objednávky z 012 na 201200012 a udělat další objednávku. Výsledek se ale bohužel nedostavil - nová objednávka má číslo 013. Je to samozřejmě lepší, než ty původní klikyháky co se generovaly původně, ale pořád to není ono.

Offline misiak

  • Nováček
  • *
  • Příspěvků: 17
  • Počet poděkování: 0
Re:Číslování objednávek ve VM 2
« Odpověď #6 kdy: 12. Duben 2012, 18:30:06 odpoledne »
asi nejak takto

Kód: [Vybrat]
  $q= 'SELECT order_number FROM #__virtuemart_orders order by created_on desc LIMIT 1';
      $db->setQuery($q);
      $order_num = $db->loadResult();
       
      $datum = StrFTime("%Y", Time());
     
      if (strpos ($order_num, $datum) === false){
      $order_num = 0;
      }
     
      $order_num = $order_num+1;
      if(strlen($order_num)==1){
      $order_num= $datum.'000'.$order_num;
     
      }else if(strlen($order_num)==2){
      $order_num= $datum.'00'.$order_num;
      }
      else if(strlen($order_num)==3){
      $order_num= $datum.'0'.$order_num;
      }

kazdy rok sa ti budu menit prve styri cisla ....2012xxxx , 2013xxxx
« Poslední změna: 12. Duben 2012, 18:31:51 odpoledne od misiak »

Offline Mário

  • Nováček
  • *
  • Příspěvků: 10
  • Počet poděkování: 20
Re:Číslování objednávek ve VM 2
« Odpověď #7 kdy: 13. Duben 2012, 20:51:35 odpoledne »
"/administrator/components/com_virtuemart/models/orders.php" Na riadku 596 zmeníš "$_orderData->order_number =' ';" na
Citace
$_orderData->order_number = $this->generateOrderNumber($_usr->get('id'),0,$_orderData->virtuemart_vendor_id);
Alebo si to nahradíš takou premennou, akú potrebuješ.
http://www.holdysoftware.sk

Potreboval by som aby mi číslovalo od 224, kde dosadím tú 224 ?

Offline Frkal

  • Nováček
  • *
  • Příspěvků: 24
  • Počet poděkování: 35
Re:Číslování objednávek ve VM 2
« Odpověď #8 kdy: 15. Duben 2012, 01:00:58 dopoledne »
Díky za odpověď, ale neuvědomil jsem si, že vzhledem ke starému systému potřebuji čísla objednávek ve tvaru 300XXXX (X je číslo objednávky, které by mělo startovat na čísle 1135).  300 by mělo být neměnné.

Ještě jednou díky a omlouvám se, že jsem to nenapsal rovnou. Při tom přechodu na VM2 člověk na leccos zapomene.

Offline misiak

  • Nováček
  • *
  • Příspěvků: 17
  • Počet poděkování: 0
Re:Číslování objednávek ve VM 2
« Odpověď #9 kdy: 15. Duben 2012, 02:05:03 dopoledne »
to si doplnis do tych porovnani... je jedno z akeho cislovania zacnes staci si to len doplnit do tych porovnani co som vlozil... to co som vlozil zacina od 20120001 a zdviha sa vzdy o jedna. plus kazdy rok sa zmeni zaciatok z 2012xxxx na 2013xxxx atd.... staci si len algoritmus prisposobit.

Offline Frkal

  • Nováček
  • *
  • Příspěvků: 24
  • Počet poděkování: 35
Re:Číslování objednávek ve VM 2
« Odpověď #10 kdy: 16. Duben 2012, 14:52:02 odpoledne »
Tak jsem asi fakt blbej :-( Zkusil jsem dát následující kód na řádek 560, kde se nacházela původní funkce na číslování objednávek a kde začalo fungovat obyčejné číslování, ale výsledek je "Fatal error: Call to a member function setQuery() on a non-object in....orders.php"

Jak říkám, nejsem programátor takže jestli byste našel ještě chvilku a daný kód přepsal přesně na to, co tam vložit, aby byla objednávka ve tvaru 300XXXX (stačilo by, aby první číslo bylo neměnné - určuje shop, z něhož je udělaná objednávka), tak by mi to moc pomohlo. POkud by tam šlo ještě nastavit číslo první objednávky, k němuž se pak bude následně přičítat +1, tak by to bylo úplně dokonalé (např. 30001153 - ale i bez toho by to bylo velmi použitelné). Předem díky.

Mnou vložený kód:

      $_orderData->order_number = $this->generateOrderNumber($_usr->get('id'),0,$_orderData->virtuemart_vendor_id);
      
   $q= 'SELECT order_number FROM #__virtuemart_orders order by created_on desc LIMIT 1';
      $db->setQuery($q);
      $order_num = $db->loadResult();
       
      $datum = StrFTime("%Y", Time());
     
      if (strpos ($order_num, $datum) === false){
      $order_num = 0;
      }
     
      $order_num = $order_num+1;
      if(strlen($order_num)==1){
      $order_num= $datum.'000'.$order_num;
     
      }else if(strlen($order_num)==2){
      $order_num= $datum.'00'.$order_num;
      }
      else if(strlen($order_num)==3){
      $order_num= $datum.'0'.$order_num;
      }

Offline misiak

  • Nováček
  • *
  • Příspěvků: 17
  • Počet poděkování: 0
Re:Číslování objednávek ve VM 2
« Odpověď #11 kdy: 16. Duben 2012, 23:24:17 odpoledne »
Kód: [Vybrat]
$_orderData->order_number = $this->generateOrderNumber($_usr->get('id'),0,$_orderData->virtuemart_vendor_id);
tymto predsa volas funkciu ktora vygeneruje dane order number a vrati ho a ulozi do $_orderData->order_number , kod musis umiestnit do tej funkcie a zakomentovat ten povodny kod.

chyba ti tam inicializacia databazoveho objektu dopln si na zaciatok mojho kodu
Kód: [Vybrat]
$db = JFactory::getDBO();
uprava pre tvoje potreby
Kód: [Vybrat]

$db = JFactory::getDBO();
 $q= 'SELECT order_number FROM #__virtuemart_orders order by created_on desc LIMIT 1';
      $db->setQuery($q);
      $order_num = $db->loadResult();
       

     $cislo = 300;
      if (strpos ($order_num, $cislo) === false){
      $order_num = 0;
      }
     
      $order_num = $order_num+1;
      if(strlen($order_num)==1){
      $order_num= $cislo.'000'.$order_num;
     
      }else if(strlen($order_num)==2){
      $order_num= $cislo.'00'.$order_num;
      }
      else if(strlen($order_num)==3){
      $order_num= $cislo.'0'.$order_num;
      }


ak si to umiestnil do tej funkcie tak nezabudni na navratovu hodnotu na konci metody
Kód: [Vybrat]
return $order_num;
malo by to vytvorit kod vo tvare 300xxxx, prvy  bude 3000001.
ak chces zacat na konkretnom cislo napr. 30015555 nahrad si riadok   $order_num= $cislo.'000'.$order_num; za $order_num =30015555;




Offline Frkal

  • Nováček
  • *
  • Příspěvků: 24
  • Počet poděkování: 35
Re:Číslování objednávek ve VM 2
« Odpověď #12 kdy: 17. Duben 2012, 23:12:33 odpoledne »
Tak nevím, jsem asi fakt natvrdlej :-( Tady je kód, který jsem vložil do orders.php i s mírným okolím, ale výsledek jsou jen tyto hlášky:

        createInvoiceNumber $orderDetails has no virtuemart_order_id
        Musíte zadat alespoň jednu adresu příjemce.
        Info: Zpráva byla odeslána na ,

Na mail pak přijde prázdná objednávka bez zboží. A nyní ten vložený kód (je to od řádku 556 - VM 2.0.2):

Kód: [Vybrat]
$_filter = JFilterInput::getInstance (array('br', 'i', 'em', 'b', 'strong'), array(), 0, 0, 1);
$_orderData->customer_note = $_filter->clean($_cart->customer_comment);
$_orderData->ip_address = $_SERVER['REMOTE_ADDR'];

$_orderData->order_number = $this->generateOrderNumber($_usr->get('id'),0,$_orderData->virtuemart_vendor_id);

$db = JFactory::getDBO();
$q= 'SELECT order_number FROM #__virtuemart_orders order by created_on desc LIMIT 1';
$db->setQuery($q);
$order_num = $db->loadResult();
       
$cislo = 300;
if (strpos ($order_num, $cislo) === false){$order_num = 0;}
     
$order_num = $order_num+1;
if(strlen($order_num)==1){$order_num= $cislo.'000'.$order_num;} else
if(strlen($order_num)==2){$order_num= $cislo.'00'.$order_num;} else
if(strlen($order_num)==3){$order_num= $cislo.'0'.$order_num;}

return $order_num;


JPluginHelper::importPlugin('vmshopper');
$dispatcher = JDispatcher::getInstance();
$plg_datas = $dispatcher->trigger('plgVmOnUserOrder',$_orderData);
foreach($plg_datas as $plg_data){

Offline misiak

  • Nováček
  • *
  • Příspěvků: 17
  • Počet poděkování: 0
Re:Číslování objednávek ve VM 2
« Odpověď #13 kdy: 17. Duben 2012, 23:20:20 odpoledne »
pises ten kod na blby riadok a tym returnom si prerusis riadne ulozenie objednavky...
Kód: [Vybrat]
$_orderData->order_number = $this->generateOrderNumber($_usr->get('id'),0,$_orderData->virtuemart_vendor_id);
tato funkcia ma implementaciu na riadku cca 943 a jej inicializacia vypada takto
Kód: [Vybrat]
private function generateOrderNumber($uid = 0,$length=10, $virtuemart_vendor_id)
{}

to co je medzi zatvorkami {} vymen za kod ktory som ti dal a mas to hotovo ;) nezabudni si zmazat ten return z miesta kam si ho vlozil inak ti to uz nepojde ;) a nezabudni ho vlozit na koniec tej funkcie ;)

Offline rencha

  • Nováček
  • *
  • Příspěvků: 10
  • Počet poděkování: 0
Re:Číslování objednávek ve VM 2
« Odpověď #14 kdy: 24. Květen 2012, 13:52:37 odpoledne »
Zdravim. Potrebovala bych pomoc, uz zacinam byt bezradna. Jedna se mi o to, ze chci, aby cisla objednavek (order number) byly cisla a ne kombinace cisel a znaku (to, jak uz nekdo psal vyse, je pro VS nepouzitelne).

Bohuzel navod, ze se ma cosi zmenit v "/administrator/components/com_virtuemart/models/orders.php" mi j ek nicemu, protoze v "com_virtuemart" nemam slozku models  :-\

Hrabu se i v tabulkach, ale netusim, jak a kde to nastavit.

Ostatni navody zde na foru jsou ke zmene ID objednavky, ale ja proste potrebuju zmenit cislo objednakvy neboli order_number.

Moc diky za pomoc.