Obsługa programów lojalnościowych

W aplikacji Comarch Mobile Zakupy jest możliwość obsługi programów lojalnościowych. Umożliwiono pobieranie z systemu ERP punktów lojalnościowych zgromadzonych na kontach określonych kontrahentów za zakup poszczególnych towarów. Zebrane punkty mogą zostać wykorzystane w aplikacji mobilnej do nadania rabatów. Aby umożliwić rozliczanie punktów lojalnościowych z poziomu aplikacji Comarch Mobile Zakupy, należy:

  • stworzyć definicję programu lojalnościowego zgodnego ze swoimi założeniami oraz wymaganiami opisanymi w dalszej części dokumentu,
  • obsłużyć synchronizację punktów lojalnościowych kontrahentów,
  • włączyć obsługę programu lojalnościowego w pliku configuration.*.statement, poprzez zmianę wartości klucza [IsLoyaltyEnabled] na 1.

Struktura definicji programu lojalnościowego

Przygotowane definicje programów lojalnościowych należy umieścić w pliku z rozszerzeniem XML w katalogu [LoyaltyProgramsDefinitions] katalogu głównego serwera synchronizacji Mobile. Nazwa pliku musi składać się z

<IdProgramuLojalnosciowego>#<NazwaProgramuLojalnosciowego>.xml

Przyklad
12#NaszaLojalnosc.xml

Synchronizacja definicji do urządzeń mobilnych odbywa się po każdej modyfikacji w plikach definicji. Aby usunąć już zsynchronizowaną definicję z urządzeń mobilnych należy zmienić id programu na wartość ujemną. Taka definicja zostanie usunięta przy następnej synchronizacji.

Przyklad
-12#NaszaLojalnosc.xml

<?xml version=”1.0″ encoding=”UTF-8″?>

<LoyaltyProgram>

<Name>…</Name>

<SettleDocumentsValue>…</SettleDocumentsValue>

<CheckContractorStatusQuery>

</CheckContractorStatusQuery>

<CheckArticleStatusQuery>

</CheckArticleStatusQuery>

<InitialMessageQuery>

</InitialMessageQuery>

<AfterRemovePositionLoyaltyProgramQuery>

</AfterRemovePositionLoyaltyProgramQuery>

<AfterAddPositionLoyaltyProgramQuery>

</AfterAddPositionLoyaltyProgramQuery>

<AfterRemoveDocumentLoyaltyProgramQuery>

</AfterRemoveDocumentLoyaltyProgramQuery>

<AfterAddDocumentLoyaltyProgramQuery>

</AfterAddDocumentLoyaltyProgramQuery>

</LoyaltyProgram>

Elementy w definicji program lojalnościowego

  • Name – Nazwa program lojalnościowego
  • SettleDocumentsValue – flaga bitowa określająca, na jakich dokumentach bierze udział program lojalnościowy. Poszczególne typy dokumentów będą miały przyporządkowane wartości:

1 – OS

2 – ZS

4 – FS

8 – PA

16 – WZ

32 – WM

Wskazówka
Wartość pola 5 oznaczać będzie, że rozliczenie punktów dostępne będzie na dokumentach OS i FS (1+4).
  • CheckContractorStatusQuery – Zapytanie sprawdzające czy dany kontrahent bierze udział w programie lojalnościowym oraz zwraca liczbę punktów dostępnych dla kontrahenta. Zwrócenie wiersza oznacza, że kontrahent bierze udział w programie lojalnościowym.
    • Parametry wejściowe:
      • @DocumentType – typ dokumentu. Wartość zgodna z wartościami z punktu drugiego.
      • @ContractorId – identyfikator kontrahenta
      • @LoyaltyProgramId – identyfikator programu lojalnościowego
      • @EditedDocumentId – identyfikator dokumentu, który jest teraz aktualnie reedytowany (został tylko zapisany wcześniej, został cofnięty do bufora)
    • Kolumny wyjściowe:
      • Liczba punktów dostępnych do zużycia przez kontrahenta
  • CheckArticleStatusQuery – Zapytanie sprawdzające czy dany towar jest dostępny w danym programie lojalnościowym oraz zwraca liczbę punktów do rozliczenia na pozycji.
    • Parametry wejściowe
      • @ArticleId – identyfikator towaru na który wystawiana jest pozycja
      • @StartGrossPrice – początkowa cena brutto
      • @StartNetPrice – początkowa cena netto
      • @Quantity – ilość w jednostce bazowej
      • @AvailablePoints – liczba dostępnych punktów kontrahenta
      • @EditedDocumentId – identyfikator edytowanego dokumentu
      • @VatRate – stawka VAT (np. dla 23% – parametr ten będzie miał wartość 23)
      • @VatDirection – kierunek VAT (0 – Netto, 1 – Brutto)
    • Kolumny wyjściowe
      • MaxPointsToSettleValue – maksymalna liczba punktów możliwa do rozliczenia na pozycji
      • EndGrossPrice – końcowa cena brutto na pozycji po rozliczeniu punktów MaxPointsToSettleValue
  • InitialMessageQuery – Zapytanie tworzące komunikat powitalny.
    • Parametry wejściowe
      • @DocumentType – typ dokumentu. Wartość zgodna z wartościami z punktu drugiego.
      • @ContractorId – identyfikator kontrahenta
      • @LoyaltyProgramId – identyfikator programu lojalnościowego
      • @EditedDocumentId – identyfikator dokumentu, który jest teraz aktualnie reedytowany (został tylko zapisany wcześniej, został cofnięty do bufora)
    • Kolumny wyjściowe
      • InitialMessageText – komunikat powitalny. Może zawierać proste tagi html’owe w celu sformatowania tekstu. (np. Dodanie nowej linii <br />, Zmiana koloru fragmentu tekstu <font color=”#FF0000″></font>, itd.)
  • AfterRemovePositionLoyaltyProgramQuery – Zapytanie wykonywane po usunięciu rozliczenia programu lojalnościowego na pozycji. Służy do wycofania zmian wykonanych w AfterAddPositionLoyaltyProgramQuery.
    • Parametry wejściowe
      • @LoyaltyProgramId – identyfikator programu lojalnościowego
      • @ProgramName – nazwa programu lojalnościowego
      • @AttributeObjectType – typ atrybutów dla pozycji
      • @ObjectId – identyfikator dokumentu
      • @ObjectIsLocal – identyfikator dokumentu
      • @ObjectSubId – identyfikator pozycji
      • @ObjectSubIsLocal – identyfikator pozycji
    • Obsługiwane jest wiele zapytań w ramach tej samej definicji. Separator skryptów „;GO;
  • AfterAddPositionLoyaltyProgramQuery – Zapytanie wykonywane po zapisie dokumentu – dla każdej pozycji, która zostaje rozliczona za pomocą programu lojalnościowego.
    • Parametry wejściowe
      • @LoyaltyProgramId
      • @ProgramName
      • @SettledPoints
      • @AttributeObjectType
      • @ObjectId
      • @ObjectIsLocal
      • @ObjectSubId
      • @ObjectSubIsLocal
      • @StartGrossPrice – cena początkowa brutto
      • @StartNetPrice – cena początkowa netto
      • @StartGrossValue – wartość brutto
      • @StartNetValue – wartość netto
    • Obsługiwane jest wiele zapytań w ramach tej samej definicji. Separator skryptów „;GO;
  • AfterRemoveDocumentLoyaltyProgramQuery – Zapytanie wykonywane po usunięciu rozliczenia programu lojalnościowego z dokumentu. Służy do wycofywania zmian wykonanych w
    • Parametry wejściowe
      • @LoyaltyProgramId
      • @ProgramName
      • @SettledPoints
      • @AttributeObjectType
      • @ObjectId
      • @ObjectIsLocal
      • @ObjectSubId
      • @ObjectSubIsLocal
    • Obsługiwane jest wiele zapytań w ramach tej samej definicji. Separator skryptów „;GO;
  • AfterAddDocumentLoyaltyProgramQuery – Zapytanie wykonywane po zapisie dokumentu z rozliczeniem programu lojalnościowego.
    • Parametry wejściowe
      • LoyaltyProgramId
      • ProgramName
      • SettledPoints
      • AttributeObjectType
      • ObjectId
      • ObjectIsLocal
      • ObjectSubId
      • ObjectSubIsLocal
    • Obsługiwane jest wiele zapytań w ramach tej samej definicji. Separator skryptów „;GO;

Synchronizacja punktów lojalnościowych kontrahentów

Aby umożliwić synchronizację punktów lojalnościowych kontrahentów należy zaimplementować metody synchronizacji obiektu [contractorsloyaltypoints]:

  • *.statement – zapytanie pobierające aktualne stany punktów kontrahentów. Zwracane kolumny:
    • OperationType – typ operacji (dodawanie, usuwanie, edycja),
    • OperationTS – timestamp synchronizacji,
    • LoyaltyProgramId – identyfikator programu lojalnościowego,
    • ContractorId – identyfikator kontrahenta,
    • Points – liczba dostępnych punktów do rozliczenia przez kontrahenta,
    • LockedPoints – liczba punktów dostępnych lecz zablokowanych do rozliczenia. Obecnie parametr ten nie jest jeszcze obsługiwany, dlatego zawsze kolumna ta powinna zwracać wartość 0.
  • contractorsloyaltypoints*.xml – definicja metody synchronizacji, triggery aktualizujące timestampy wierszy

Rozliczanie punktów w systemie Comarch ERP Altum

Rozliczanie punktów należy obsłużyć po stronie systemu Comarch ERP Altum za pomocą triggera wdrożeniowego aktywowanego np. potwierdzeniem dokumentu. Dokładny sposób rozliczenia jest zależny od  mechanizmów zaimplementowanych w programie lojalnościowym po stronie systemu Comarch ERP Altum.

Program lojalnościowy może zostać oparty poprzez atrybuty zdefiniowane w systemie Comarch ERP Altum. W takiej obsłudze będą brani pod uwagę Kontrahenci, którzy posiadają zdefiniowany atrybut ze wskazaniem programu lojalnościowego (np. Nasza Lojalność), a przedstawiciel będzie mógł nadać rabat tylko na pozycjach towarów oznaczonych też odpowiednim atrybutem.

Dodanie atrybuty na karcie towaru i karcie kontrahenta

Obecne implementacje do przesyłania informacji o liczbie rozliczonych punktów, korzystają z atrybutów (klasa atrybutu tylko do odczytu) ustawianych na pozycjach dokumentów (za pomocą AfterAddPositionLoyaltyProgramQuery) z wartością rozliczonych na pozycji punktów. Podczas synchronizacji do systemu ERP dokumentów, w momencie ich potwierdzenia, w triggerze sprawdzone powinno zostać istnienie atrybutu rozliczającego punkty na pozycjach. Wartość rozliczonych punktów powinna zostać odjęta z puli punktowej kontrahenta. Dodatkowo rozliczenie takie powinno spowodować podbicie odpowiednich timestampów w [contractorsloyaltypoints] w celu wymuszenia synchronizacji aktualnego stanu punktów kontrahenta.

Czy ten artykuł był pomocny?