W aplikacji Comarch Mobile 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, 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 XL
Rozliczanie punktów należy obsłużyć po stronie systemu Comarch ERP XL 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 XL.
Program lojalnościowy może zostać oparty poprzez atrybuty zdefiniowane w systemie Comarch ERP XL. 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.
                        

