W rozmowach z klientami B2B prędzej czy później wraca temat cen. Ktoś ma kilka tysięcy pozycji z ceną jednostkową podaną do czwartego miejsca po przecinku. Ktoś inny zauważył, że suma VAT w koszyku różni się o grosz od tej na fakturze. Wersja 0.108.0 zajmuje się właśnie takimi sprawami: przebudowaliśmy cenniki i to, jak platforma liczy każdą kwotę.
Poniżej opisuję to, co moim zdaniem najważniejsze. Pełna lista zmian, z podziałem na pakiety, jest na stronie wydania 0.108.0 na GitHubie.
Nowy model cenników
Największa zmiana w tym wydaniu, i jedyna oznaczona jako zmiana niekompatybilna. Dotychczasowe cenniki oparte na regułach zastosowania zastąpiliśmy nowym modelem. Cennik określa ceny bazowe, katalogowe, dla konkretnych kupujących i promocyjne, osobno dla każdej waluty, kanału sprzedaży i grupy odbiorców.
Razem z modelem dostajecie nowy edytor cenników:
- Siatka cen jak w arkuszu. Ceny edytuje się bezpośrednio w tabeli, można wkleić duży blok danych z Excela, a zapis wielu wierszy naraz nadal działa szybko.
- Import i eksport CSV. Cały cennik można pobrać do pliku, poprawić go poza platformą i wgrać z powrotem.
- Duplikowanie cennika. Nowy cennik, np. na kolejny sezon, tworzy się z kopii istniejącego.
- Wyjaśnienie ceny. Panel pokazuje, dlaczego klient widzi daną cenę: który cennik wygrał i które przegrały. Handlowiec widzi przy tym tylko cenniki ze swojego zakresu.
- Uprawnienia handlowców. Handlowiec nie może rozszerzyć odbiorców cennika poza organizacje, którymi się opiekuje.
- Ustawienia cenowe w jednym miejscu, razem z domyślnym sposobem prezentacji cen.
Zadbaliśmy też o wydajność. Odczyt linii cennika mieści się w 150 ms (p95) przy 50 000 pozycji, a pełna przebudowa indeksu cen, z którego korzysta sortowanie po cenie, jest około trzy razy szybsza.
Feed produktowy przypięty do cennika publikuje ceny z tego cennika tylko wtedy, gdy cennik obowiązuje anonimowego kupującego w kanale feedu. Jeśli w chwili generowania przestaje obowiązywać, feed wycofuje opublikowany plik zamiast pokazywać nieaktualne ceny.
Istniejące cenniki przechodzą do nowego modelu przy aktualizacji. Jeśli Wasza integracja korzysta z dawnego API cenników, przejrzyjcie listę zmian niekompatybilnych na stronie wydania: przy każdym usuniętym elemencie wskazaliśmy jego zamiennik.
Dokładne liczenie kwot i VAT
Druga duża zmiana jest mniej widoczna, a dla księgowości chyba nawet ważniejsza. Każda kwota liczona z ceny jest teraz liczona dokładnie, w arytmetyce dziesiętnej, a nie na liczbach zmiennoprzecinkowych. W praktyce:
- Cena jednostkowa ma do czterech miejsc po przecinku, od cennika aż po pozycję faktury, np.
0,0125 złlub1,505 zł. Do dwóch miejsc zaokrąglamy dopiero wartość pozycji i sumy. - VAT liczymy od sumy netto w danej stawce i zaokrąglamy go raz, zgodnie z art. 106e ust. 1 pkt 13–14 ustawy o VAT. Tę samą metodę stosują zamówienie, podgląd w kasie, podgląd w panelu i faktura, więc kwoty na wszystkich dokumentach są zgodne.
- Kwota z więcej niż dwoma miejscami po przecinku jest odrzucana komunikatem błędu, a nie po cichu zaokrąglana. Dotyczy to m.in. kosztu dostawy, dopłaty do płatności i kwoty zwrotu.
- Promocje, limity kupieckie i zwroty liczą się bez groszowych przekłamań. Wcześniej 10% z 1,45 zł dawało 0,14 zł, a teraz daje 0,15 zł.
- Korekty i zwroty uwzględniają rabat naliczony na całe zamówienie i rozliczają się narastająco. Zamówienie zwrócone w całości przed wystawieniem faktury nie jest już fakturowane.
To spora zmiana pod spodem, ale reguły biznesowe zostały takie same. Zmieniło się tylko zaokrąglanie, które teraz jest wszędzie jednakowe.
Pola dodatkowe: filtry i przenoszenie wartości
Pola dodatkowe robią się coraz bardziej przydatne w codziennej pracy:
- Filtry na listach Zamówień, Zapytań Ofertowych i Szans Sprzedażowych. Pole oznaczone jako filtr pojawia się wśród filtrów listy, a ustawiony filtr trafia do adresu strony, więc można go wysłać współpracownikowi i zapisać w widoku.
- Przenoszenie wartości między dokumentami. Wartość pola wpisana w Zapytaniu Ofertowym przechodzi do Zamówienia i do Szansy Sprzedażowej. Zamówienie utworzone z Szansy Sprzedażowej dostaje jej wartości. Ekran pól dodatkowych pokazuje, dokąd trafiają wartości, i ostrzega, zanim zmiana definicji przerwie przenoszenie.
- Edycja istniejących definicji pól bezpośrednio w panelu.
Pozostałe zmiany warte uwagi
- Minimalne ilości zamówienia i informacja, czy produkt podlega zwrotowi, ustawiane dla każdego produktu.
- Grupy pozycji w zapytaniach ofertowych i zamówieniach tworzonych w panelu. Grupy są widoczne na wydrukach dokumentów, a ten sam produkt może wystąpić w kilku pozycjach.
- Ponowne zamówienie informuje, które pozycje nie mają już ceny.
- Złożenie zamówienia z zaakceptowanego Zapytania Ofertowego w panelu znów działa. Wcześniej wylogowywało administratora.
- Wyślij opinię w menu bocznym panelu: uwagi do platformy można przekazać bez wychodzenia z panelu administracyjnego.
Jak zaktualizować?
Instancję aktualizuje się poleceniem upgrade z CLI Endora Commerce. Szczegóły są w dokumentacji aktualizacji instancji. Opisy wszystkich zmian, porównanie z wersją 0.107.0 i notatki dla każdego pakietu znajdziecie na stronie wydania na GitHubie.
Planujecie wdrożenie z rozbudowanymi cennikami kontraktowymi albo migrację cen z obecnej platformy? Napiszcie do nas, chętnie pomożemy to zaplanować.