Press "Enter" to skip to content

Numer zamówienia jako cyfra a nie ciąg losowych znaków

Admin 4

W PrestaShop domyślnie nowe zamówienia nie są oznaczone cyfrą a losowym ciągiem znaków. Wg twórców mogło mieć to na celu zaciemnienie dla klientów wielkości sprzedaży, którą generuje sklep. Jednak jest uciążliwe w zarządzaniu sprzedażą, bo znacznie wygodniej operuje się liczbą zamówienia jako cyfrą.

Aby kolejne zamówienie było cyfrą tworzone są płatne moduły na wielu platformach. Okazuje się, że można ten sam efekt osiągnąć poprzez prostą modyfikację kodu PrestaShop. A na dodatek to rozwiązanie zadziała z każdą wersją PrestaShop 1.6 i PrestaShop 1.7.

Otwórz plik:

classes/order/Order.php

Przed grzebaniem w kodzie PHP najlepiej wykonaj kopię bezpieczeństwa tego pliku. Np. skopiuj go w tym samym miejscu pod zmienioną nazwą 🙂

Znajdź metodę (funkcję PHP) o nazwie:

generateReference()

Będą to okolice 1600-1700 linii

i zamień jej kod:

public static function generateReference()
    {
        return strtoupper(Tools::passwdGen(9, 'NO_NUMERIC'));
    }

na:

public static function generateReference()
    {
        $last_id = Db::getInstance()->getValue('
            SELECT MAX(id_order)
            FROM '._DB_PREFIX_.'orders');
            return str_pad((int)$last_id + 1, 9, '000000000', STR_PAD_LEFT);
    }

Gotowe. Odtąd kolejne zamówienia będą już numeryczne:

Co istotne, numer zamówienia jest wyświetlany także w mailach do klienta oraz właściciela sklepu. Możesz np. dopisać w wiadomości do klienta, w przypadku przelewu tradycyjnego aby zatytułował przelew używając tego indeksu itd.

Jedyne o czym musisz pamiętać, to wdrożenie tej modyfikacji po wykonywaniu np. aktualizacji systemu. Z racji, że kod jest zmieniany bezpośrednio w kontrolerze PHP, po wykonaniu aktualizacji – zostanie zastąpiony domyślną funkcją generateReference()

 

grafika: freepik.com

  1. Krystian Krystian

    Jeśli ktoś przenosi sklep, i ma potrzebę kontynuowania numeracji zamówień, oto kod (zamiast xxx, wpisz numer zamówienia, do którego Presta doda 1):

    {
    $reference = Hook::exec(’actionGenerateDocumentReference’, [
    'type’ => 'order’,
    ]);
    $last = 5000;
    return !empty($reference) ? $reference : str_pad((int)$last + 1, STR_PAD_LEFT);
    }

  2. Krystian Krystian

    {
    $reference = Hook::exec(’actionGenerateDocumentReference’, [
    'type’ => 'order’,
    ]);
    $last = xxx;
    return !empty($reference) ? $reference : str_pad((int)$last + 1, STR_PAD_LEFT);
    }

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Zobacz także !
Problem Cannot redeclare upgrade_module_1_10_0 przy aktualizacji. Jak sobie z tym…