W aplikacji Comarch Mobile mPOS 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 mPOS, 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
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.
<?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
- 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
- Parametry wejściowe:
- 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
- Parametry wejściowe
- 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.)
- Parametry wejściowe
- 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;”
- Parametry wejściowe
- 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;”
- Parametry wejściowe
- 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;”
- Parametry wejściowe
- 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;”
- Parametry wejściowe
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.
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.