Przejdź do treści
Wszystkie realizacje

System dedykowany

PlantPol — dedykowany system zamówień B2B

Zaprojektowaliśmy i wdrożyliśmy dedykowany system zamówień B2B dla PlantPol. Aplikacja porządkuje rozbudowany katalog produktów, ich stadia i dostępność w tygodniach sezonu, a następnie prowadzi użytkownika od wyboru asortymentu przez koszyk i checkout aż po dokument zamówienia. Rozwiązanie składa się z interaktywnego frontendu Blazor oraz osobnego API w ASP.NET Core. Logika biznesowa została rozdzielona zgodnie z CQRS i wykorzystuje mediator, dzięki czemu procesy katalogowe, administracyjne i zamówieniowe pozostają czytelnie odseparowane. System wymienia dane z ENOVA 365 w ściśle określonych kierunkach i wykorzystuje trwałą kolejkę do bezpiecznego przekazywania dokumentów zamówień.

Projekt we współpracy z Solvet Robert Mazurczyk — otwiera się w nowej karcie

Zrzut ekranu projektu PlantPol — dedykowany system zamówień B2B

System, który łączy katalog, zamówienia i ENOVA 365

Mobilny widok katalogu B2B — dane demonstracyjne
Mobilny widok katalogu B2B — dane demonstracyjne

Proces B2B zapisany w jednej aplikacji

System powstał wokół rzeczywistego procesu zamawiania roślin, w którym sama lista produktów nie wystarcza. Znaczenie mają również stadia produktu, dostępność w konkretnych tygodniach, sezon, sposób pakowania oraz zasady transportowe. Dlatego rozwiązanie prowadzi użytkownika przez cały uporządkowany scenariusz: od katalogu, przez wybór właściwego wariantu i terminu, aż po złożenie zamówienia.

Interfejs został przygotowany jako aplikacja B2B, a nie klasyczny sklep internetowy. Klient otrzymuje dostęp do funkcji potrzebnych do złożenia poprawnego zamówienia, natomiast zespół PlantPol może zarządzać ofertą, użytkownikami, ustawieniami i przebiegiem integracji z poziomu tego samego środowiska.

Blazor na froncie, osobne API i CQRS

Warstwę użytkową zbudowaliśmy w .NET 9 jako aplikację Blazor Interactive Server. Osobne API w ASP.NET Core udostępnia operacje katalogowe, zamówieniowe i administracyjne, dzięki czemu prezentacja danych pozostaje oddzielona od reguł biznesowych i dostępu do bazy.

W API zastosowaliśmy mediator oraz podział CQRS na komendy, zapytania i ich handlery. Odczyt katalogu, zmiana koszyka, złożenie zamówienia czy uruchomienie zadania integracyjnego mają własne, jasno zdefiniowane ścieżki. Taka architektura ułatwia rozwijanie systemu bez mieszania logiki różnych modułów i pozwala testować kluczowe procesy w izolacji.

Katalog produktów dopasowany do branży roślinnej

Katalog obsługuje kategorie, gatunki i warianty produktów, zdjęcia, kody, ceny oraz dostępność. Ważną częścią modelu są stadia SU, PP i FI, które pozwalają rozróżnić formę oferowanego materiału i zastosować właściwe dane handlowe oraz logistyczne.

  • prezentacja produktów według kategorii i widoczności oferty,
  • obsługa zdjęć, kodów, cen i cech produktu,
  • dostępność określana dla tygodni i sezonów,
  • uwzględnienie tygodni wykluczonych oraz finalności wybranych wariantów,
  • administracyjne zarządzanie katalogiem i plikami katalogów PDF.

Dzięki temu użytkownik widzi ofertę w kontekście konkretnego sezonu i terminu, zamiast pracować na oderwanej od procesu, statycznej liście produktów.

Reguły ilościowe i logistyka przed dodaniem do koszyka

System uwzględnia sposób, w jaki produkty są faktycznie przygotowywane do sprzedaży i transportu. Mnożniki ilościowe związane z półką, wózkiem lub paletą pomagają wyznaczyć poprawną liczbę sztuk, a reguły tygodniowe ograniczają wybór do terminów dostępnych dla danego produktu i stadium.

Walidacja nie kończy się w momencie kliknięcia „dodaj”. Koszyk ponownie sprawdza cenę, dostępność i dopuszczalną ilość, aby wychwycić zmiany przed finalizacją. Dzięki temu logika handlowa działa spójnie zarówno w katalogu, jak i na dalszych etapach zamówienia.

Koszyk i checkout z kontrolą kompletności

Ścieżka zakupowa prowadzi użytkownika przez podsumowanie pozycji oraz wybór danych potrzebnych do realizacji. Checkout obejmuje sposób transportu lub odbioru z depotu, adres, notatkę do zamówienia i wymagane zgody. Przed zapisem system wykonuje końcową rewalidację koszyka.

Złożenie zamówienia odbywa się w transakcji o poziomie izolacji Serializable. System nadaje numer, zapisuje migawkę istotnych danych i — tam, gdzie wymagają tego reguły procesu — rozdziela zawartość na właściwe zamówienia. Dzięki temu późniejsza zmiana danych katalogowych nie zaciera obrazu tego, co użytkownik faktycznie zatwierdził.

Dokument PDF generowany z danych zamówienia

Po złożeniu zamówienia system generuje czytelny dokument PDF na podstawie zapisanego stanu procesu. Dokument zawiera pozycje zamówienia, tydzień realizacji, ilości i ceny, a także podsumowania logistyczne — między innymi liczbę sztuk oraz palet wynikającą z zawartości.

PDF nie jest ręcznie przygotowywanym załącznikiem. Powstaje bezpośrednio z danych zamówienia, dlatego stanowi spójne podsumowanie dla klienta i zespołu obsługującego dalszą realizację.

ENOVA 365: dwa kierunki, jasno określony zakres

Integracja z ENOVA 365 obsługuje przepływ danych w dwóch kierunkach, ale każdy z nich ma precyzyjnie zdefiniowaną odpowiedzialność. Do aplikacji trafiają dane produktów i kontrahentów potrzebne w katalogu oraz procesie zamówieniowym. W przeciwnym kierunku system przekazuje dokumenty zamówień ZO.

Wymiana jest realizowana zadaniowo i nadzorowana — nie przedstawiamy jej jako uniwersalnej synchronizacji wszystkich danych w czasie rzeczywistym. Panel integratora pokazuje postęp uruchomionych zadań z użyciem SignalR, a logi rejestrują wykonane zmiany i ewentualne problemy.

Dokumenty wychodzące trafiają do trwałej kolejki. Mechanizmy ponawiania, deduplikacji i sprawdzania numeru zewnętrznego ograniczają ryzyko podwójnego przekazania zamówienia. Niepowodzenia są widoczne w logach i mogą uruchomić alert lub powiadomienie e-mail, dzięki czemu obsługa ma możliwość bezpiecznej reakcji.

Role, uprawnienia i kontrola operacyjna

Dostęp do systemu opiera się na ASP.NET Core Identity, uwierzytelnianiu dwuskładnikowym oraz grupach i szczegółowych uprawnieniach. Pozwala to rozdzielić funkcje klienta, administratora katalogu i osób nadzorujących integrację bez udostępniania każdemu całego zaplecza.

Moduły administracyjne obejmują między innymi zarządzanie użytkownikami i grupami, ustawieniami firmy, stawkami VAT, numeracją dokumentów, tygodniami wykluczonymi oraz materiałami katalogowymi. Logi wewnętrzne i logi integratora tworzą techniczny ślad operacji potrzebny przy diagnostyce i dalszym rozwoju.

Kluczowe ścieżki systemu są objęte testami API, integracyjnymi i E2E — od pracy z katalogiem i koszykiem po checkout, kolejkę zamówień oraz zadania integracyjne.

Jeden proces zamiast rozproszonych kroków

Powstała dedykowana platforma B2B, która łączy specyfikę sezonowej oferty PlantPol z kontrolowanym procesem zamówieniowym. Katalog, terminy, reguły logistyczne, koszyk, checkout i dokument PDF pracują na wspólnym modelu danych, a obsługa otrzymuje narzędzia administracyjne oraz czytelny ślad wykonanych operacji.

Integracja z ENOVA 365 ma wyraźnie rozdzielone kierunki: dane produktów i kontrahentów zasilają system, a dokumenty ZO są przekazywane przez odporną kolejkę. To ogranicza ręczne przenoszenie informacji i daje możliwość nadzorowania procesu bez deklarowania pełnej synchronizacji w czasie rzeczywistym.

Architektura wykorzystująca Blazor, osobne API, mediator i CQRS pozostawia przestrzeń do dalszego rozwijania modułów, jednocześnie utrzymując reguły katalogowe, zamówieniowe i integracyjne w przejrzystych granicach.

Twój projekt

Chcesz podobną realizację?

Opowiedz nam o celu, zakresie i terminie. Wrócimy z dopasowaną propozycją.