Konfiguracja wyjątków transmisji z POS

Moderator: jacqueline

Awatar użytkownika
jevkoo
Administrator
Posty: 482
Rejestracja: 2009-05-17, 19:28
Lokalizacja: Skoczów

Konfiguracja wyjątków transmisji z POS

Post autor: jevkoo »

Usługi przesyłane z POS zawsze są oznaczone jako usługa Gastronomiczna nazwa usługi. Jeśli sprzedajemy usługę SPA z POS będzie ona nazwana np. Usługa gastronomiczna Masaż klasyczny. Aby usługa nazywała się dokładnie jak w DM Plaza musi zostać przypisany wyjątek w konfiguracji interfejsu.



Jeśli film się nie pojawia, proszę kliknąć w link: http://www.dmplaza.eu/img/wyjatkiPOS.mp4
Awatar użytkownika
jevkoo
Administrator
Posty: 482
Rejestracja: 2009-05-17, 19:28
Lokalizacja: Skoczów

Re: Konfiguracja wyjątków transmisji z POS

Post autor: jevkoo »

DM Plaza 2019 umożliwia poszerzenie konfiguracji wyjątków.
Proszę pamiętać, że wymiana danych opiera sie na procedura SQL zainstalowanych na serwerze. Bez poprawnej procedury wyjątki nie będą działać.
Przykład pełnej procedury na końcu tekstu.
Ważne, aby Państwa procedura zawierała fragment:

Kod: Zaznacz cały

   /*sprawdzenie wyjątków zawierających znak %*/
               select PA.ASORT_ID, PA.ASORT_KOD
        from POSASSOCIATION PA
        where position('%' in PA.POSTRANS_NAZWA) > 0 and
              (:APOSTRANS_NAZWA like PA.POSTRANS_NAZWA) and
              ((PA.POSTRANS_POS_ID = :APOSTRANS_POS_ID) or (PA.POSTRANS_POS_ID is null))
        into :AASORT_ID, :AASORT_KOD;
        /*sprawdzenie wyjątków nie zawierajacych %*/
        if ((:AASORT_ID <= 0) or (:AASORT_ID is null)) then
        select PA.ASORT_ID, PA.ASORT_KOD
        from POSASSOCIATION PA
        where position('%' in PA.POSTRANS_NAZWA) = 0 and
              (PA.POSTRANS_NAZWA = :APOSTRANS_NAZWA) and
              ((PA.POSTRANS_POS_ID = :APOSTRANS_POS_ID) or (PA.POSTRANS_POS_ID is null))
        into :AASORT_ID, :AASORT_KOD;
       
Oczywiście - jeśli nei korzystają Państwo z rozszerzonej funkcjonalności warto ten fragment, jako spowalniający, usunąć.

Jak Państwo widzą - kluczowym jest zastosowanie w formularzu znaku %, jako znaku zastępującego dowolny ciąg.

Obrazek

Użyta w definicji wyjątku nazwa POS %danie% będzie zastępnikiem zarówno dla asortymentów Śniadanie, danie dnia, danie z wołowiny etc.
Odpowiadać to będzie asortymentowi Usługa gastronomiczna

Tak możemy wyróżnić np asortymenty konferencyjne. W S4H będzie to np Przerwa kawowa konferencja, obsługa konferencji a w definicji DM Plaza %konfer%.*
Wyjątek można ograniczyć tylko do jednego stanowiska. Numer stanowiska jest numerem stanowiska POS, zdefiniowanym w S4H.

Pełna treść procedury:

Kod: Zaznacz cały

SET TERM ^ ;

create or alter procedure pos_dodaj_obciazenie (
    transakcja_id integer)
as
declare variable apostrans_id integer;
declare variable apostrans_transakcja_id integer;
declare variable apokoj_id integer;
declare variable aosoba_id integer;
declare variable agrupa_id integer;
declare variable apostrans_l_id integer;
declare variable apostrans_pos_id integer;
declare variable apostrans_nazwa varchar(50);
declare variable apostrans_ilosc decimal(9,2);
declare variable apostrans_cena decimal(9,2);
declare variable apostrans_cena_eur decimal(9,2);
declare variable apostrans_wal_symbol char(3);
declare variable apostrans_stawka_vat char(3);
declare variable apostrans_status_fiskalny integer;
declare variable ameldunek_id integer;
declare variable akonferencja_id integer;
declare variable apostrans_dataczas date;
declare variable afirma_id integer;
declare variable aasort_kod varchar(20);
declare variable aasort_id integer;
declare variable astawka decimal(3,1);
declare variable awartosc decimal(9,2);
declare variable awartosc_eur decimal(9,2);
declare variable awartoscnetto decimal(9,2);
declare variable awartoscpodatku decimal(9,2);
declare variable awaluta_id integer;
declare variable awartoscnetto_eur decimal(9,2);
declare variable awartoscpodatku_eur decimal(9,2);
declare variable apostrans_cenanetto decimal(9,2);
declare variable apostrans_cenanetto_eur decimal(9,2);
declare variable apostrans_nr_karty varchar(50);
declare variable osobakartaid integer;
declare variable statusrachunku integer;
begin
  for select P.POSTRANS_ID, P.POSTRANS_TRANSAKCJA_ID, P.OSOBA_ID, P.POKOJ_ID, P.GRUPA_ID, P.MELDUNEK_ID,
             P.KONFERENCJA_ID, P.POSTRANS_L_ID, P.POSTRANS_POS_ID, P.POSTRANS_NAZWA, P.POSTRANS_ILOSC, P.POSTRANS_CENA,
             P.POSTRANS_CENA_EUR, P.POSTRANS_WAL_SYMBOL, P.POSTRANS_STAWKA_VAT, P.POSTRANS_STATUS_FISKALNY,
             P.POSTRANS_DATACZAS, M.FIRMA_ID, P.POSTRANS_NR_KARTY
      from POSTRANS P
      left outer join MELDUNEK M on P.MELDUNEK_ID = M.MELDUNEK_ID
      where P.POSTRANS_TRANSAKCJA_ID = :TRANSAKCJA_ID and
            P.POSTRANS_STATUS = 0
      order by P.POSTRANS_L_ID
      into :APOSTRANS_ID, :APOSTRANS_TRANSAKCJA_ID, :AOSOBA_ID, :APOKOJ_ID, :AGRUPA_ID, :AMELDUNEK_ID, :AKONFERENCJA_ID,
           :APOSTRANS_L_ID, :APOSTRANS_POS_ID, :APOSTRANS_NAZWA, :APOSTRANS_ILOSC, :APOSTRANS_CENA, :APOSTRANS_CENA_EUR,
           :APOSTRANS_WAL_SYMBOL, :APOSTRANS_STAWKA_VAT, :APOSTRANS_STATUS_FISKALNY, :APOSTRANS_DATACZAS, :AFIRMA_ID,
           :APOSTRANS_NR_KARTY
  do
  begin
    /*parametry powiazane gastronomii*/
    if (:APOSTRANS_STAWKA_VAT is not null) then
    begin
      if ((:APOSTRANS_POS_ID > 1) and
          (:APOSTRANS_POS_ID is not null)) then
      begin

        /*sprawdzenie wyj�tk�w zawierajacych asterisk*/
        select PA.ASORT_ID, PA.ASORT_KOD
        from POSASSOCIATION PA
        where position('%' in PA.POSTRANS_NAZWA) > 0 and
              (:APOSTRANS_NAZWA like PA.POSTRANS_NAZWA) and
              ((PA.POSTRANS_POS_ID = :APOSTRANS_POS_ID) or (PA.POSTRANS_POS_ID is null))
        into :AASORT_ID, :AASORT_KOD;
        /*sprawdzenie wyj�tk�w nie zawierajacych asterisk*/
        if ((:AASORT_ID <= 0) or (:AASORT_ID is null)) then
        select PA.ASORT_ID, PA.ASORT_KOD
        from POSASSOCIATION PA
        where position('%' in PA.POSTRANS_NAZWA) = 0 and
              (PA.POSTRANS_NAZWA = :APOSTRANS_NAZWA) and
              ((PA.POSTRANS_POS_ID = :APOSTRANS_POS_ID) or (PA.POSTRANS_POS_ID is null))
        into :AASORT_ID, :AASORT_KOD;
        /*standardowe przyporzadkowania*/
        if ((:AASORT_ID <= 0) or (:AASORT_ID is null)) then
        begin
          select ASORT_ID, PARAM_WARTOSC
          from PARAM
          where PARAM_NAZWA = 'DomyslnyKodAsortymentuGastroPOSDlaStawki' || cast(:APOSTRANS_STAWKA_VAT as char(2)) || 'NRPOS' || cast(:APOSTRANS_POS_ID as varchar(2))
          into :AASORT_ID, :AASORT_KOD;
          if ((:AASORT_ID is null) and
              (:AASORT_KOD is null)) then
            select ASORT_ID, PARAM_WARTOSC
            from PARAM
            where PARAM_NAZWA = 'DomyslnyKodAsortymentuGastroPOSDlaStawki' || cast(:APOSTRANS_STAWKA_VAT as char(2))
            into :AASORT_ID, :AASORT_KOD;
        end
        /*else
          select ASORT_ID, PARAM_WARTOSC
          from PARAM
          where PARAM_NAZWA = 'DomyslnyKodAsortymentuGastroPOSDlaStawki' || cast(:APOSTRANS_STAWKA_VAT as char(2))
          into :AASORT_ID, :AASORT_KOD;*/
      end
      else
        select ASORT_ID, PARAM_WARTOSC
        from PARAM
        where PARAM_NAZWA = 'DomyslnyKodAsortymentuGastroPOSDlaStawki23'
        into :AASORT_ID, :AASORT_KOD;
      if ((:AASORT_ID <= 0) or (:AASORT_ID is null)) then
        select ASORT_ID
        from ASORT
        where ASORT_KOD = :AASORT_KOD
        into :AASORT_ID;
      if (:AASORT_ID is null) then
        exception DO_BRAK_ASORT;
    end
    /*stawka VAT*/
    if ((APOSTRANS_STAWKA_VAT = 'ZW') or (APOSTRANS_STAWKA_VAT = '**')) then
      ASTAWKA = 0;
    else
      ASTAWKA = cast(APOSTRANS_STAWKA_VAT as decimal(2,0));
    /*waluta*/
    if (:APOSTRANS_WAL_SYMBOL is not null) then
      select W.WALUTA_ID
      from WALUTA W
      where W.WALUTA_SYMBOL = :APOSTRANS_WAL_SYMBOL
      into :AWALUTA_ID;
    else
      AWALUTA_ID = 1;
    /*konferencja*/
    if (AKONFERENCJA_ID is null) then
      AKONFERENCJA_ID = -1;
    /*zaokr�glenia*/
    AWARTOSC_EUR = 0;
    execute procedure DM_ROUNDCURR APOSTRANS_CENA_EUR * APOSTRANS_ILOSC
        returning_values :AWARTOSC_EUR;
    execute procedure DM_ROUNDCURR(AWARTOSC_EUR * ASTAWKA) / (100 + ASTAWKA)
        returning_values :AWARTOSCPODATKU_EUR;
    execute procedure DM_ROUNDCURR AWARTOSC_EUR - AWARTOSCPODATKU_EUR
        returning_values :AWARTOSCNETTO_EUR;
    execute procedure DM_ROUNDCURR APOSTRANS_CENA_EUR - ((APOSTRANS_CENA_EUR * ASTAWKA) / (100 + ASTAWKA))
        returning_values :APOSTRANS_CENANETTO_EUR;
    AWARTOSC = 0;
    execute procedure DM_ROUNDCURR APOSTRANS_CENA * APOSTRANS_ILOSC
        returning_values :AWARTOSC;
    execute procedure DM_ROUNDCURR(AWARTOSC * ASTAWKA) / (100 + ASTAWKA)
        returning_values :AWARTOSCPODATKU;
    execute procedure DM_ROUNDCURR AWARTOSC - AWARTOSCPODATKU
        returning_values :AWARTOSCNETTO;
    execute procedure DM_ROUNDCURR APOSTRANS_CENA_EUR - ((APOSTRANS_CENA * ASTAWKA) / (100 + ASTAWKA))
        returning_values :APOSTRANS_CENANETTO;
    /*znalezienie id karty*/
    if (:APOSTRANS_NR_KARTY is not null) then
    begin
      select max(OSK.OSOBAKARTA_ID)
      from OSOBAKARTA OSK
      where OSK.OSOBAKARTA_NUMER = :APOSTRANS_NR_KARTY and
            OSK.OSOBAKARTA_AKTYWNA = 1
      into :OSOBAKARTAID;
    end
    /*status rachunki - dodane*/
    if (APOSTRANS_STATUS_FISKALNY = 1) then
      STATUSRACHUNKU = 6;/* rach. zewn. aktywny */
    else
      STATUSRACHUNKU = 6;
    /*dodanie rachunku*/
    insert into RACHOTW (RACHOTW_ID, RACHOTW_KOD_SYSTEMU, OSOBA_ID, USLUGA_ID, POKOJ_ID, GRUPA_ID, MELDUNEK_ID,
                         MELDUNEKOSOBA_ID, REZERWACJA_ID, CENNIK_ID, FIRMA_ID, PARKING_ID, RACHOTW_INDYWIDUALNY,
                         ASORT_ID, WALUTA_ID, ROZMOWA_ID, RACHOTW_ILOSC, RACHOTW_VAT_SYMBOL, RACHOTW_STATUS,
                         RACHOTW_CENA_JEDN_BRUTTO, RACHOTW_CENA_JEDN_NETTO, RACHOTW_VAT_STAWKA, RACHOTW_KWOTA_BRUTTO,
                         RACHOTW_KWOTA_NETTO, RACHOTW_CENA_BRUTTO_EUR, RACHOTW_CENA_NETTO_EUR, RACHOTW_KWOTA_BRUTTO_EUR,
                         RACHOTW_KWOTA_NETTO_EUR, RACHOTW_DATA_OTWARCIA, RACHOTW_UWAGI, RACHOTW_PROC_RABATU,
                         RACHOTW_ILOSC_DOB, OSOBAZAJECIE_ID, RACHOTW_STATUS_FISKALNY, RACHOTW_STATUS_RABATU,
                         KONFERENCJA_ID, KONFPOKOJ_ID, RACHOTW_NRTRANS, RACHOTW_USED, SESSION_ID,
                         RACHOTW_STATUS_UZNANIE, RACHOTW_STATUS_STANU, RACHOTW_STATUS_DOB, EMPLOYEE_ID, ZMIANA_ID,
                         ZMIANAG_ID, RACHPOS_ID, DEPOZYT_ID, STOLREZHOUR_ID, RACHOTW_DOROSLY, SPAAPPT_ID,
                         OSOBAKARTA_NUMER, OSOBAKARTA_ID)
    values (gen_id(SEQ_RACHOTW, 1), 4, :AOSOBA_ID, -1, :APOKOJ_ID, :AGRUPA_ID, :AMELDUNEK_ID, -1, -1, -1, :AFIRMA_ID,
            -1, 1, /*RACHOTW_INDYWIDUALNY*/
            :AASORT_ID, :AWALUTA_ID, -1, :APOSTRANS_ILOSC, :APOSTRANS_STAWKA_VAT, :STATUSRACHUNKU, /*status zewn*/
            :APOSTRANS_CENA, :APOSTRANS_CENANETTO, :ASTAWKA, :AWARTOSC, :AWARTOSCNETTO, :APOSTRANS_CENA_EUR,
            :APOSTRANS_CENANETTO_EUR, :AWARTOSC_EUR, :AWARTOSCNETTO_EUR, :APOSTRANS_DATACZAS, :APOSTRANS_NAZWA, 0, /*procent rabatu*/
            1, /*RACHOTW_ILOSC_DOB*/
            -1, :APOSTRANS_STATUS_FISKALNY, 0, /*:RACHOTW_STATUS_RABATU*/
            :AKONFERENCJA_ID, -1, :APOSTRANS_TRANSAKCJA_ID, 0, :APOSTRANS_TRANSAKCJA_ID, 0, 0, 0, 0, 0, /*:EMPLOYEE_ID,:ZMIANA_ID,*/
            :APOSTRANS_ID, -1, -1, 0, 0, 0, :APOSTRANS_NR_KARTY, :OSOBAKARTAID);

    if (:APOSTRANS_NR_KARTY is not null) then
    begin
      update OSOBAKARTA OK
      set OK.OSOBAKARTA_LIMIT = OK.OSOBAKARTA_LIMIT - :AWARTOSC
      where OK.OSOBAKARTA_NUMER = :APOSTRANS_NR_KARTY and
            OK.OSOBAKARTA_AKTYWNA = 1;
    end
  end
  /*aktualizacja statusu*/
  update POSTRANS
  set POSTRANS_STATUS = -1 * POSTRANS_STATUS
  where POSTRANS_TRANSAKCJA_ID = :APOSTRANS_TRANSAKCJA_ID;
end^

SET TERM ; ^

/* Nastêpuj¹ce instrukcje GRANT zosta³y wygenerowane automatycznie */

GRANT SELECT,UPDATE ON POSTRANS TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON MELDUNEK TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON POSASSOCIATION TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON PARAM TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON ASORT TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON WALUTA TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT EXECUTE ON PROCEDURE DM_ROUNDCURR TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT,UPDATE ON OSOBAKARTA TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT INSERT ON RACHOTW TO PROCEDURE POS_DODAJ_OBCIAZENIE;

/* Przywileje wystêpuj¹ce dla tej procedury */

GRANT EXECUTE ON PROCEDURE POS_DODAJ_OBCIAZENIE TO SYSDBA;
-------
*nie "konf", bo to oznacza też konfiturę - przykład z życia wzięty
ODPOWIEDZ