Číslování faktur a objednávek ve virtuemart2 ve tvaru rok-číslo

Virtuemart 2 (VM 2) používá jako default dost hloupé číslování faktur. Jako číslo objednávky to vygenruje sice unikátní, ale totálně nepřehledný kód. Pokud to chcete změnit na obvyklejší tvar jako třeba rok-pořadí_faktury_v_roce, pomůže Vám následující hack.

Najděte si soubor /administrator/components/com_virtuemart/models/orders.php

V něm si vyhledejte řádek s řetězcem:

$_orderData->order_number ='';     //měl by být ve funkci createOrder -- pozor tento řetězec může být v souboru vícekrát

A pod něj vložte tento kód:

#---nastavení vlastního číslování VM2----------------------------------------------------------
    $rok = date('Y');   
    $rok2 = date('y');  //pro dvoumístné předčíslí objednávky dle roku        
    $db = JFactory::getDbo();
    $query = "SELECT max(order_number) FROM `#__virtuemart_orders` WHERE `order_number` REGEXP '^$rok2' AND `created_on` >= '$rok-01-01' AND `created_on` <= '$rok-12-31' ";
    $db->setQuery($query);
    $cislo = $db->loadResult();
    $cislo_pom = $rok2."000000";
    $cislo = $cislo - $cislo_pom + 1;
    
    if($cislo < 1) $cislo = 1;
    
    $_orderData->order_number =  $rok2.str_pad($cislo,6,0, STR_PAD_LEFT);
    #-------------------------------------------------------nastavení vlastního číslování VM2------

a vyzkoušejte.

Pokud je vše v pořádku, nově definovaný kód nastaví vlastní číslování objednávek a defaultní způsob generování čísla objednávky VM nebude použitý. Bohužel se ale jedná o hack core souboru, takže je třeba hlídat, zda po upgradu VM2 nedojde k přepsání.

Sjednocení čísel objednávek s čísly faktury ve Virtuemart 2

pokud se Vám nové číslování objednávek líbí, můžete ještě zjistit, že VM používá vlastní generování čísel faktur, které nesouhlasí s čísly objednávek. Pokud to chcete sjednotit, dá se číslo objednávky podstrčit i jako číslo faktury.

Opět otevřete soubor /administrator/components/com_virtuemart/models/orders.php

V něm si vyhledejte řádek s řetězcem:

if(empty($data['invoice_number'])) {

a pod ním je mechanismus tvorby čísla faktury, řádky zakomentujte a připište na konec nový, tohle bude výsledek:

if(empty($data['invoice_number'])) {
   //               $variable_fixed=sprintf("%05s",$num_rows);
   //               $date = date("Y-m-d");
   //               $date = JFactory::getDate()->toMySQL();
   //               $data['invoice_number'] = str_replace('-', '', //substr($date,2,8)).substr(md5($orderDetails['order_number'].$orderDetails['order_status']),0,3).'0'.$count;
  
                  $data['invoice_number'] = $orderDetails['order_number']; //toto je nový řádek, kterým přepíšete stávající tvorbu čísla faktury
 

Jmenuji se Radek Pelikán, bydlím v Ledči nad Sázavou. Mám 3 krásné děti.

Mezi mé velké koníčky patří desková hra Go a nově jsem začal cvičit Kendó v Ledči nad Sázavou.