Szablony wydruków, email oraz SMS

Niektóre elementy aplikacji mają możliwość samodzielnej modyfikacji. Dotyczy to przede wszystkim elementów widocznych dla klienta, czyli:

  • wydruków,
  • plików PDF,
  • etykiety dla drukarki etykiet,
  • wiadomości e-mail wysyłanych do klientów
  • wiadomości SMS.

Modyfikacja powyższych treści opiera się na samodzielnej edycji szablonów, które można znaleźć w panelu opcji konfiguracyjnych.

Szablony, to fragmenty kodu HTML wraz ze specjalnymi znacznikami, które nazwijmy 'tokenami’, które zostaną zastąpione odpowiednimi danymi, numerem naprawy, nazwą klienta, etc. Listę dostępnych tokenów znajdziesz niżej.

SKŁADNIA

Jak wspomniałem szablony używają tokenów. Tokeny mają następującą postać: <%= nazwa_tokenu %>. Ważne jest aby dokładnie tak wyglądały. Istnieją także specyficzne konstrukcje typu <% if (nazwa_tokenu) { %> <%= nazwa_tokenu %> <% } %>, które służą do warunkowego wyświetlania pewnych elementów: token 'nazwa_tokenu’ nie wyświetli się, jeśli nie będzie miał wartości.

PODPOWIEDŹ
Szablony bazują na mechanizmie EJS, który jest połączeniem HTMLa i JavaScript. W niektórych miejscach, na przykład na wydrukach możesz korzystać z bogactwa HTMLa używając wszystkich znaczników i CSSów – szablony maili są najczęściej redukowane do podstawowego HTMLa poprzez klienty pocztowe, tak więc nie ma większego sensu aby osadzać w nich CSS

EDYCJA

Najłatwiej, jeśli zaczniesz od przyjrzenia się domyślnym szablonom. Każda opcja konfigurująca szablon poniżej okna edycyjnego, w szarym polu, pokazuje domyślną postać szablonu. Rozpoczynając modyfikację skopiuj po prostu domyślny szablon do okna edycji (ctrl+c ctrl+v) i zacznij na nim pracować powoli go rozwijając. Zwróć uwagę na poprawność osadzania tokenów i używania nazw tokenów. Użycie niepoprawnej nazwy spowoduje błąd. Jeśli chcesz przywrócić domyślny szablon wyczyść po prostu zawartość okna edycji i zapisz opcję.

UWAGA
Błąd w szablonie lub użycie nieistniejącego tokena spowoduje iż otrzymasz pusty wydruk (plik PDF) lub w przypadku e-maili list nie zostanie wysłany (status wysyłki listów znajdziesz w historii danej naprawy). Po każdej modyfikacji sprawdź czy otrzymujesz poprawne wydruki, lub czy listy się wysyłają. Trudno nam odpowiadać za błędy w samodzielnej konfiguracji

INFORMACJA
Postać domyślnych szablonów czasem ulega zmianie z uwagi na zmiany w aplikacjach. Użycie własnego szablonu lub choćby przekopiowanie domyślnego szablonu do opcji zamrozi wszelkie zmiany. Z jednej strony masz cały czas takie same szablony, z innej przeglądaj czasem tę sekcję pomocy, ponieważ będziemy aktualizowali ją o nowe tokeny, etc.

 

Tokeny dostępne w każdym szablonie wydruku, emaila lub SMSa (naprawy, zgłoszenia, etc.)

Token Jakie dane zostaną użyte w jego miejscu?
current_time aktualna na moment wydruku data i czas
currency symbol waluty, odpowiedni dla Twojego kraju
application_url Adres URL aplikacji Serwisant Online
current_user nazwa zalogowanego użytkownika (pracownika serwisu, imię i nazwisko)
application_holder_name Nazwa głównego oddziału firmy (zazwyczaj handlowa nazwa firmy)
application_holder_address Adres głównego oddziału firmy
application_holder_phone Numer telefonu głównego oddziału firmy
application_holder_email Email głównego oddziału firmy
application_holder_logo_url URL do logo głównego oddziału firmy, powinno zostać użyte jako źródło obrazka, zazwyczaj:
  <img src="<%= application_holder_logo_url %>" />
  
customer_login_url/ca_login_url link logowania do panelu klienta, o ile aktywny jest moduł internetowy.
service_supplier_name Nazwa serwisu w którym dokonywana jest naprawa lub do którego przynależy aktualny użytkownik – w większości przypadków są to dane Twojej firmy, jeśli masz więcej oddziałów i zlecenie zostało przyjęte w jednym z nich, będą to dane oddziału.
service_supplier_address adres serwisu
service_supplier_phone numer telefonu serwisu
service_supplier_phone2 alternatywny numer telefonu serwisu
service_supplier_email e-mail serwisu
service_supplier_logo_url URL do pliku z logo serwisu, , powinno zostać użyte jako źródło obrazka, zazwyczaj:

 

  <img src="<%= service_supplier_logo_url %>" />
  
customer_person imię i nazwisko klienta lub osoby kontaktowej w przypadku firmy
customer_company_name nazwa firmy
customer_name nazwa klienta, imię i nazwisko w przypadku klienta indywidualnego, lub nazwa firmy
customer_is_company Prawda, jeśli klient jest firmą, powinno zostać obsłużone przez poniższy fragment kodu:

 

  <p> typ klienta:
    <% if (customer_is_company) { %>
    firma
    <% } else { %>
    klient indywidualny
    <% } %>
    </p>
  
customer_nip Numer NIP jeśli podano
customer_phone telefon klienta
customer_phone_2 alternatywny telefon klienta
customer_email email klienta
customer_address_names lista adresów klienta. Aby wyświetlić wszystkie adresy wstaw do swojego szablonu:

 

  <% if (customer_address_names.length > 0) { %>
    <% for(var i=0; i<customer_address_names.length; i++) { %>
    <%= customer_address_names[i] %><br />
    <% } %>
    <% } %>
  

Jeśli chcesz dowolny, pierwszy adres, wstaw:

  <% if (customer_address_names.length > 0) { %><%= customer_address_names[0] %><% } %>
  

Tokeny dostępne w szablonach wydruku, email lub SMSa związanych z naprawą w dowolnym stanie

Token Jakie dane zostaną użyte w jego miejscu?
customer_order_url link, którego klient może użyć do sprawdzenia statusu naprawy – jeśli klient ma aktywny dostęp przez internet link prowadzi do strony logowania, jeśli nie jest aktywny, prowadzi do karty statusu
customer_status_url link, którego klient może użyć do sprawdzenia statusu naprawy – karta statusu naprawy
order_rma numer naprawy (RMA)
order_secret_code kod naprawy, umożliwiający sprawdzenie jego statusu – zastąp link 'customer_order_url’ kodem, jeśli integrujesz własną stronę z Serwisantem
order_qr_code_img URL do grafiki z QR code, prowadzącego do strony z informacją o naprawie, przydatny dla klienta, ale także dla serwisu. Aby poprawnie użyć tokenu należy użyć go w tagu HTML
<img />

 

  <img src="<%= order_qr_code_img %>" />
  
order_internal_qr_code_img URL do grafiki z QR code, prowadzącego do karty naprawy. Token przydatny jest wyłącznie dla serwisu, aby móc szybko nawigować do szczegółów naprawy. Aby poprawnie użyć tokenu należy użyć go w tagu HTML
<img />

 

  <img src="<%= order_internal_qr_code_img %>" />
  
order_128_code_img URL do grafiki z kodem kreskowym zawierającym numer RMA naprawy (code 128) – jest to przydatne wyłącznie dla dla serwisu. Aby poprawnie użyć tokenu należy użyć go w tagu HTML
<img />

 

  <img src="<%= order_128_code_img %>" />
  
order_created_time data utworzenia rekordu z informacją o naprawie w bazie danych
order_arrival_time data przyjęcia naprawy – jest to data, którą określisz jako 'data rozpoczęcia naprawy’ i tak też powinna być rozumiana: moment od którego zaczyna biec czas naprawy
order_estimated_time przewidywana data zwrotu naprawy
order_object_name nazwa przedmiotu naprawy: rodzaj, producent, etc, możesz użyć także samodzielnych elementów nazwy, patrz tokeny poniżej
order_object_type rodzaj przedmiotu naprawy
order_object_avatar_url url awatara rodzaju przedmiotu naprawy, jeśli podano, jeśli nie podano będzie pusty
order_object_vendor producent
order_object_model model
order_object_serial numer seryjny
order_estimated_price szacowany koszt naprawy, na który akceptuje klient, może być równy zero, co oznacza, że klientowi nie podano kosztów w momencie przyjęcia naprawy. To jest liczba zmiennoprzecinkowa, można wykonywać na niej obliczenia.
order_estimated_price_f to samo co order_estimated_price, przy czym jest to sformatowana zgodnie ze standardami wyświetlania cen liczba.
order_advance_amount kwota wpłaconej zaliczki, puste jeśli nie wpłacono. To jest liczba zmiennoprzecinkowa, można wykonywać na niej obliczenia.
order_advance_amount_f To samo co order_advance_amount, zy czym jest to sformatowana zgodnie ze standardami wyświetlania cen liczba.
order_items: [lista] dodatkowe elementy naprawy, obiekty zawierające:

 

  • type: rodzaj dodatkowego elementu naprawy
  • description: opis słowny, tak, jak podano w formularzu
  • serial: numer seryjny dodatkowego elementu naprawy
order_issue opis problemu, tak, jak podano w formularzu
order_collection opis sposobu odbioru naprawy przez klienta po zakoczeniu naprawy – w ten sposób naprawa powinna zostać zwrócona klientowi
order_collection_required flaga, mówiąca, że naprawa przed rozpoczęciem wymaga odbioru od klienta (kurier, własne środki)
order_collection_address adres, z którego powinna zostać odebrana naprawa
order_delivery_required flaga, mówiąca, że naprawa po zakoczeniu wymaga dostarczenia do klienta (kurier, własne środki)
order_delivery_address adres, pod który powinna zostać odesłana naprawa
order_archive_data
Opcja wycofana, proszę użyć własnych pól formularza

flaga, mówi, że zaznaczono opcję archiwizacji danych

order_device_password
Opcja wycofana, proszę użyć własnych pól formularza

hasło do urządzenia

Proszę używać rozsądnie – istnieje możliwość ujawnienia hasła klienta osobom postronnym
order_remarks uwagi wewnętrzne

 

Proszę używać rozsądnie – pole na uwagi wewnętrzne nie jest przewidziane do prezentacji dla klienta, token powinien być używany jedynie na wydrukach wewnętrznych
order_employee Nazwa pracownika realizującego naprawę – jeśli pracownik jest nieprzypisany token token nic nie zwróci
order_employee_phone Numer telefonu do pracownika realizującego naprawę – jeśli pracownik jest nieprzypisany token token nic nie zwróci
order_warranty_repair flaga, mówi, że zaznaczono opcję naprawy gwarancyjnej
order_warranty_purchase_date data wystawienia dokumenty zakupu, tak jak podał klient – może być puste jeśli klient nic nie określił
order_warranty_purchase_document numer/opis dokumentu sprzedaży, tak jak podał klient
order_custom_fields [lista] zawiera obiekty opisujące dodatkowe, konfigurowalne pola zdefiniowane dla naprawy:

 

  • name: nazwa pola
  • value: podana wartość

Przykładowy kod, umożliwiający wyświetlenie wszystkich pól:

<% if (order_custom_fields.length > 0) { %>
    <% for(var i=0; i<order_custom_fields.length; i++) { %>
    <p><%= order_custom_fields[i].name %>: <%= order_custom_fields[i].value %></p>
    <% } %>
  <% } %>
  

Przykładowy kod umożliwiający wyświetlenie pojedynczego pola, które nazywa się 'Pole X’:

<% if (order_custom_fields.length > 0) { %>
    <% for(var i=0; i<order_custom_fields.length; i++) { %>
      <% if (order_custom_fields[i].name == 'pole x') { %>
        <p><%= order_custom_fields[i].value %></p>
      <% } %>
    <% } %>
  <% } %>
  
order_images Niewidoczne w domyślnej konfiguracji. Lista załączonych do naprawy zdjęć, oznaczonych jako widoczne dla klienta. Wszelkie inne rodzaje plików są ignorowane. Aby dodać listę zdjęc należy użyć kodu podobnego do tego poniżej:

 

<% if (order_images.length > 0) { %>
    <% for(var i=0; i<order_images.length; i++) { %>
      <a href="<%= order_images[i].url %>" target="_blank">
        <img src="<%= order_images[i].url_small %>" class="img-thumbnail">
      </a>
    <% } %>
  <% } %>
  

Tokeny dostępne wyłącznie na wydrukach i mailach po wydaniu diagnozy.

Token Jakie dane zostaną użyte w jego miejscu?
diagnosis_price_estimated koszt naprawy brutto dla klienta, liczba zmiennoprzecinkowa
diagnosis_price_estimated_f to samo co diagnosis_price_estimated, tyle, że sformatowane
diagnosis_remarks opis wyniku diagnozy – opis usterki – z pola widocznego dla klienta

Tokeny dostępne wyłącznie na potwierdzeniach wydania sprzętu

Oprócz poniższych tokenów dostępne są również wszystkie z listy wcześniejszej.

Token Jakie dane zostaną użyte w jego miejscu?
order_repair_summary podsumowanie wykonanej naprawy
order_price koszt naprawy tak jak podano w podsumowaniu
order_repair_warranty ilość miesięcy gwarancji na naprawę, domyślnie zero
order_canceled wartość logiczna, informująca o fakcie anulowania naprawy. Może sterować widocznością opisu wydania, eg,:

 

<% if (order_canceled) { %>
    ta naprawa została anulowana
  <% } else { %>
    ta naprawa została ukończona
  <% } %>
  
components Niewidoczne w domyślnej konfiguracji. Lista podzespołów użytych podczas naprawy – format identyczny jak dla karty gwarancyjnej, opisany poniżej
order_repair_actions Niewidoczne w domyślnej konfiguracji. [lista] zawiera obiekty opisujące wszystkie czynności serwisowe, wraz z kosztami. Zwróć uwagę, ze koszt, w zależności od konfiguracji aplikacji może być kosztem dla klienta (domyślne ustawienie)
lub kosztem serwisu. Zwróć także uwagę, że lista zawiera opisy czynności naprawczych tak jak podano – jeśli używasz wewnętrznych opisów czynności nie powinieneś wystawiać ten lisy dla klientów, w zamian korzystać z podsumowania naprawy i tokenu
order_repair_summary
.

 

  • remarks: opis czynności naprawczej
  • cost_net: cena netto
  • vat: stawka podatku VAT
  • cost_gross: cena brutto

Przykładowy kod, umożliwiający wyświetlenie wszystkich pól:

<% if (!order_canceled && order_repair_actions.length > 0) { %>
    <table class="table table-striped">
    <% for(var i=0; i<order_repair_actions.length; i++) { %>
    <tr>
      <td><%= order_repair_actions[i].remarks %></td>
      <td><%= order_repair_actions[i].cost_net %></td>
      <td><%= order_repair_actions[i].vat %></td>
      <td><%= order_repair_actions[i].cost_gross %></td>
    </tr>
    <% } %>
    </table>
  <% } %>
  

Tokeny dostępne dla karty gwarancyjnej

Oprócz poniższych tokenów dostępne są również wszystkie z listy dla szablonu wydruku wydania naprawy.

Token Jakie dane zostaną użyte w jego miejscu?
components: [lista] wszystkie dołączone z magazynu podzespoły, obiekty zawierające:

 

  • warranty_period: ilość miesięcy gwarancji na podzespół
  • serial: numer seryjny podzespołu
  • name: rodzaj dodatkowego elementu naprawy, nazwa
  • sale_date: data sprzedaży. Zwróć uwagę iż data sprzedaży generowana jest w momencie zamknięcia naprawy, do czasu zamknięcia data sprzedaży jest pusta.
  • quantity: ilość
  • price_net: cena netto (sumaryczna)
  • vat: stawka VAT, procenty
  • price_gross: cena brutto, sumaryczna

Przykładowy kod, umożliwiający wyświetlenie wszystkich pól:

  <% if (components.length > 0) { %>
    <table class="table table-striped">
    <% for(var i=0; i<components.length; i++) { %>
    <tr>
      <td><%= components[i].name %></td>
      <td><%= components[i].sale_date %></td>
      <td><%= components[i].warranty_period %></td>
      <td><%= components[i].serial %></td>
    </tr>
    <% } %>
    </table>
  <% } %>
  
components_price_net Sumaryczna cena netto podzespołów, sformatowana
components_price_gross Sumaryczna cena brutto podzespołów, sformatowana
components_price_net_n Sumaryczna cena netto podzespołów, liczba zmiennoprzecinkowa
components_price_gross_n Sumaryczna cena brutto podzespołów, liczba zmiennoprzecinkowa

Tokeny dostępne wyłącznie dla protokołu przekazania sprzętu do serwisu zewnętrznego

Token Jakie dane zostaną użyte w jego miejscu?
delegation_supplier_name Nazwa serwisu, do którego została oddelegowana naprawa
delegation_supplier_address Adres serwisu, do którego została oddelegowana naprawa
delegation_supplier_phone Numer telefonu serwisu, do którego została oddelegowana naprawa
delegation_rma Numer naprawy w zewnętrznym serwisie. Numer wpisujesz w formularzu delegacji naprawy.
delegation_remarks Uwagi dla zewnętrznego serwisu. Uwagi wpisujesz w formularzu delegacji naprawy.
delegation_date Data przekazania sprzętu (zazwyczaj data wydrukowania protokołu)

Tokeny dostępne wyłącznie maila z informacją o rejestracji konta klienta przez internet

Token Jakie dane zostaną użyte w jego miejscu?
activation_url URL który aktywuje nowe konto. Powinien zostać zaprezentowany jako link gotowy do kliknięcia. Bez aktywacji konta klient nie będzie mógł się zalogować.

Tokeny dostępne wyłącznie maila z informacją zmianie hasła

password_reset_url URL do strony na której klient może ustawić zapomniane hasło. Powinien zostać zaprezentowany jako link gotowy do kliknięcia.

Tokeny dostępne dla wydruków związanych ze zgłoszeniem

Token Jakie dane zostaną użyte w jego miejscu?
ticket_number Numer zgłoszenia, np
ticket_employee Nazwa pracownika realizującego zgłoszenie – jeśli pracownik jest nieprzypisany token token nic nie zwróci
ticket_employee_phone Numer telefonu do pracownika realizującego zgłoszenie – jeśli pracownik jest nieprzypisany token token nic nie zwróci
ticket_created_time Data utworzenia zgłoszenia
ticket_scheduled_from Data oczekiwanego rozpoczęcia pracy nad zgłoszeniem
ticket_scheduled_to Data oczekiwanego zamknięcia zgłoszenia
ticket_started_on Data rzeczywistego rozpoczęcia pracy nad zgłoszeniem
ticket_finished_at Data rzeczywistego zakończenia pracy nad zgłoszeniem
ticket_issue Opis problemu
ticket_category_name Nazwa kategorii do której przyporządkowano zgłoszenie
ticket_address Adres realizacji zgłoszenia – może być pusty, jeśli wybrano dowolny adres – pojawi się wówczas w tokenie
ticket_address_remarks.
ticket_address_remarks Adres realizacji zgłoszenia podany odręcznie.
ticket_actions

[lista] Akcje podjęte dla zgłoszenia. Każdy z elementów zawiera następujace pola

  • employee: pracownik realizujący czynność
  • remarks: uwagi, opis czynności
  • hours_spend: ilośc czasu spędzonego na danej czynności, czas wyrażony w godzinach
  • created_at: data i godzina dodania czynności

Przykładowy sposób renderowania listy czynności:

<% for(var i=0; i<ticket_actions.length; i++) { %>
    <tr>
      <td><%= ticket_actions[i].employee %></td>
      <td><%= ticket_actions[i].remarks %></td>
    </tr>
  <% } %>