 SET NAMES utf8;
DELIMITER $$

DROP PROCEDURE IF EXISTS `m_api`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `m_api`(
IN _MODE VARCHAR(200),
IN _GUID VARCHAR(38),
IN _ParamA VARCHAR(255),
IN _ParamB VARCHAR(255),
IN _ParamC VARCHAR(255),
IN _ParamD VARCHAR(255),
IN _ParamE VARCHAR(255),
IN _ParamF TEXT
)

/*


Testowy komentarz z żęąćiami
set @guid=CONCAT('OBC',uuid_short());
CALL m_api('UPDATE_OPNG_INIT',@guid,'ZP NN','','','','','DEBUG');
CALL m_api('UPDATE_TE_OPNG_KURSY',@guid,'','','','','','DEBUG');
CALL m_api('UPDATE_OPNG',@guid,'','waluta','nrrachunku','sposobplatn','','DEBUG');
CALL m_api('GET_OPPO_B',@guid,'','','','','','DEBUG');
CALL m_api('TEST','','','','','','','DEBUG');

CALL m_api('UPDATE_OPNG_DONE','','','','','','','DEBUG');
CALL m_api('GET_PDF',@guid,'','','','','','DEBUG');

CALL m_api('GET_ABSENCJE',@guid,@localtime,'','','','','DEBUG');
dodaje kontrahenta o ile taki już nie istnieje
CALL m_api('ADD_KONTRAH',@nip,@nazwa,@miasto,@zipcode,@ulica,@nrdomu,@nrlok);
CALL m_api('GET_KONTRAH',@nip,@nrrachunku,'','','','','DEBUG');

*/

sproc: BEGIN

DECLARE _TGUID VARCHAR(38);
DECLARE _PLATNIKGUID VARCHAR(38);
DECLARE _KONTRGUID VARCHAR(38);
DECLARE _NRRACHUNKU VARCHAR(38);
DECLARE _WALUTA, _rodzaj, _korekta INT;
DECLARE _KURS DOUBLE(16,4);
DECLARE _NR_TAB_KURS VARCHAR(38);
DECLARE _NIP VARCHAR(20);
DECLARE _DATA DATE;
DECLARE _TIMESTAMP TIMESTAMP;
DECLARE _DEBUG BOOLEAN;
DECLARE _WEBDOC BOOLEAN;
DECLARE _dl, _dl_max, _i, _lp, _lp_oppo INT; -- dlugosc uwag do pociecia, dlugosc maksymalna, iteracja, nr pozycji po kolei, numer lp w oppo
DECLARE _kurs_op DECIMAL(16,4); -- kurs faktury, potrzebny w tabelce vat
DECLARE _uwagi TEXT;
DECLARE _czesc TEXT; -- uwaga na maksymalna dlugosc, gdyby sie miala zmienic

SET _DEBUG=_ParamF LIKE "%DEBUG%",_WEBDOC=FALSE;
SET _ParamF=REPLACE(_ParamF,"DEBUG","");

-- alternatywa - dodac do mode .DEBUG
IF NOT _DEBUG THEN
  SET _DEBUG=_MODE LIKE "%.DEBUG",_WEBDOC=FALSE;
SET _MODE=REPLACE(_MODE,".DEBUG","");
END IF;

-- bez ownera wiele rzeczy nie dziala dobrze, na pewno wybor konta i fr_ht_OP
SELECT value INTO @session.globals.Owner FROM _db_globals g WHERE g.key='Owner';

IF (@session.globals.Owner IN ('SEVENET')) THEN
  SET _WEBDOC=TRUE;
END IF;

/*
jeśli nie istnieje kontrahent o takim nip to jest dodawany do bazy
uwaga - nie badamy numeru rach bankowego w tym przypadku - "rozmnożenie" kontrahentów to już decyzja użytkownika
SET @nip='00000000000',@nazwa='test',@miasto='Gdańsk',@zipcode='80-410',@ulica='Konwalii',@nrdomu='9',@nrlok='7';
CALL m_api('ADD_KONTRAH',@nip,@nazwa,@miasto,@zipcode,@ulica,@nrdomu,@nrlok);
CALL m_api('ADD_KONTRAH.DEBUG',@nip,@nazwa,@miasto,@zipcode,@ulica,@nrdomu,@nrlok);
SET @nip='00000000000',@nazwa='test',@kraj='PL',@adres1='Konwalii 9/7',@adres2='80-034 Trąbki Wielkie';
CALL m_api('ADD_KONTRAH.KSEF',@nip,@nazwa,@kraj,@adres1,@adres2,'');
CALL m_api('ADD_KONTRAH.KSEF.DEBUG',@nip,@nazwa,@kraj,@adres1,@adres2,'','');
*/

IF _MODE IN ('ADD_KONTRAH', 'ADD_KONTRAH.KSEF') THEN
    SET _NIP=_GUID,@m_api.nazwa=_ParamA,@m_api.kraj='PL';
    SELECT guid INTO _KONTRGUID
    FROM kontrah WHERE nip in (_NIP,CONCAT('PL',_NIP),replace(_NIP,'PL','')) and deleted=0 and nip<>''
    ORDER BY idn desc LIMIT 1;
    IF IFNULL(_KONTRGUID,'')='' THEN
      SET _KONTRGUID=CONCAT('KSef',uuid());
      SET @m_api.symbol=TRIM(REPLACE(REPLACE(REPLACE(REPLACE(@m_api.nazwa,'sp.',''),'spółka',''),' z o.o.',''),'komandytowa',''));
      SET @m_api.symbol=SUBSTRING_INDEX(@m_api.symbol,' ',4); -- TODO jakieś czyszczenie heurystyczne
      IF _MODE='ADD_KONTRAH.KSEF' THEN
        SET @m_api.kraj=_ParamB;
        -- ParamD czyli adres2 jest w postaci "80-410 Trąbki Bardzo Wielkie", czyli zawiera kod pocztowy i miasto zawierające kilka członów
        SET @m_api.zipcode=SUBSTRING_INDEX(_ParamD,' ',1),@m_api.miasto=MID(_ParamD,LOCATE(' ',_ParamD)+1,100);
        SET @m_api.ulica=_ParamC;
      ELSE
        SET _ParamF=IF(_ParamF='','',CONCAT('/',_ParamF));
        SET @m_api.miasto=_ParamB;
        SET @m_api.zipcode=_ParamC;
        SET @m_api.ulica=CONCAT(_ParamD,' ',_ParamE,_ParamF);
      END IF;
      INSERT IGNORE INTO Miasta (NazwaMiasta,AlterName,IDNKraju) VALUES (@m_api.miasto,@m_api.miasto,@m_api.kraj); 
      INSERT INTO kontrah (guid,platnikguid,nip,symbol,nazwa,nazwamiasta,zipcode,ulica)
      VALUES (_KONTRGUID,_KONTRGUID,_NIP,@m_api.symbol,@m_api.nazwa,@m_api.miasto,@m_api.zipcode,@m_api.ulica);
      SELECT _KONTRGUID AS guid, "NEW" AS status;
    ELSE
      SELECT _KONTRGUID AS guid, "EXISTS" AS status;
    END IF;
    SET @m_api.kontrguid=_KONTRGUID;
    IF _DEBUG THEN
      SELECT guid,platnikguid,nip,nazwa,symbol,nazwamiasta,zipcode,ulica FROM kontrah WHERE guid=_KONTRGUID;
    END IF;
   
END IF;

/*
ID dokumentu
rodzaj operacji (ZP FV, ZP-FV, ZT FV, ZT-FV itp)
data wystawienia
data sprzedaży
termin płatności
*sposób płatności
numer dokumentu
numer dokumentu korygowanego (dla korekt)
NIP kontrahenta (pozostałe dane pobierane z kart. kontrahentów)
*nr rachunku bankowego
waluta dokumentu
opis dokumentu
wartości netto,vat podzielone wg stawek (tabelka VAT)
nr dok. PZ
status zatwierdzenia dokumentu
status zatwierdzenia płatności dokumentu
zaakceptowana kwota płatności

pozycje:
ID dokumentu
liczba porządkowa pozycji
kwota netto
opis
# select vname,nazwa,user_vname from v_katcol_names where user_vname<>'';
# +--------+-----------------+----------------+
# | vname  | nazwa           | user_vname     |
# +--------+-----------------+----------------+
# | v_kpk2 | Pracownik       | v_pracownicy   | katcol2 2778 | P Gmur Jakub 
# | v_kza0 | zlecenie        | v_mpk          | katcol5 ZO/31894/2022-0
# | v_kza1 | delegacje       | v_delegacje    | katcol6 018/03/2022
# | v_kza2 | rodzaj kosztów  | v_rodz_kosztow | katcol7 45603
# | v_kza4 | Samochód        | v_pojazdy      | katcol9 GD239VW
# +--------+-----------------+----------------+

*/


IF _MODE='UPDATE_OPNG_INIT' THEN
    CALL _Session_Refresh_Variables('', '', '');
    SELECT COUNT(*) INTO @ile FROM opng WHERE guid=_GUID AND _GUID<>"" AND deleted=0 ;
    -- AND zaksiegowana=1
    SET @nrwewn=''; -- zachowanie nrwewn przy usuwaniu i ponownym tworzeniu dok.
    SELECT nrwewn INTO @nrwewn FROM opng WHERE guid=_GUID AND _GUID<>"" AND deleted=1 ;
    SET @nrwewn=IFNULL(@nrwewn,''),@rodzaj=-1;

    IF _ParamA LIKE 'Z%' THEN 
      SELECT rodzaj INTO @rodzaj FROM operdoc WHERE nazwa=_ParamA and nazwa like "Z%";
    ELSE
      SET @rodzaj=_VarINT(_ParamA);
    END IF;

    IF (@ile>0 AND _GUID NOT LIKE "TEST%") THEN 
      UPDATE opng SET akcept_platn=_VarInt(_ParamB),akcept_platn_kwota=_VarDouble(_ParamC) WHERE guid=_GUID;
      SELECT "EXISTS" AS status;
      LEAVE sproc;
    END IF;
    IF IFNULL(@rodzaj,-1)=-1 THEN 
      SELECT "RODZAJ" AS status;
      LEAVE sproc;
    END IF;
    
    IF _WEBDOC THEN
      DELETE b FROM oppo_budzet b WHERE b.idnoper=_GUID;
    END IF;
    DELETE o FROM oppo o WHERE o.idnoper=_GUID;
    DELETE v FROM opng_vat v WHERE v.idnoper=_GUID;
    DELETE n FROM opng n WHERE n.guid=_GUID;
    
    SET @Params=CONCAT("Rodzaj=",_VarStr(@rodzaj),"&AutoNum=0");
    CALL C_HT_OPZM('recreate.`TE_xxxx`', '', 'OP', 'TE', '', '' ,'', '', '', '' ,'');
    CALL C_HT_OPZM('INIT.NEW(CLEAR)', '', 'OP', 'TE', _GUID, '', '', '', '', '' , @Params);
    CALL C_HT_OPZM('START', '', 'OP', 'TE', _GUID, '', '', '', '' ,'', '');
    UPDATE TE_opng SET nrwewn=@nrwewn WHERE guid=_GUID;
    SELECT "OK" as status;
END IF;

IF _MODE = 'UPDATE_TE_OPNG_KURSY' THEN
    SET @mode=_MODE;
    SELECT waluta,datawystaw INTO _WALUTA,_DATA FROM TE_opng;
    SET _WALUTA=IFNULL(_WALUTA,0);
    -- Jeśli kurs przekazany wprost z XML faktury (KursWalutyZ dla zaliczkowych, KursWaluty z wiersza)
    -- przekaż go w _ParamA; dla PLN (_WALUTA=0) zawsze używamy kursu 1
    IF _WALUTA != 0 AND _VarDouble(_ParamA) > 0 THEN
        SET _KURS = _VarDouble(_ParamA), _NR_TAB_KURS = 'KSeF';
    ELSE
        SELECT kurs,numer_tab_kurs
        INTO _KURS,_NR_TAB_KURS
        FROM kursy
        WHERE DATA BETWEEN _DATA - interval 7 day 
          AND _DATA - interval 1 day AND idnwaluty=_WALUTA
          ORDER BY DATA DESC LIMIT 1
          ;
        SET  _KURS=IFNULL(_KURS,1);
    END IF;
    UPDATE TE_opng SET kurs=_KURS,kurs_rozliczen=_KURS,tabela_kursow=IFNULL(_NR_TAB_KURS,'?') WHERE guid=_GUID;
END IF;


/*
CALL m_api('GET_KONTRAH',@nip,'','',@nrrachunku,'','','DEBUG');
*/

IF _MODE='GET_KONTRAH' THEN
  SET _NRRACHUNKU=REPLACE(REPLACE(IFNULL(_ParamC,''),' ',''),'PL',''),_NIP=_GUID,_KONTRGUID='';
  SET @m_api.idnrachunku_get=0;
  IF  isValidIBAN(_NRRACHUNKU) THEN
    SELECT k.guid, r.idn INTO _KONTRGUID,@m_api.idnrachunku_get
    FROM kontrah k, rachbankowe r 
    WHERE k.guid=r.kontrguid and k.nip in (_NIP,CONCAT('PL',_NIP),replace(_NIP,'PL','')) and k.deleted=0 and k.nip<>'' AND REPLACE(REPLACE(r.nrrachunku,' ',''),'PL','')=_NRRACHUNKU
-- TODO: uwzględnic PL w badaniu
    ORDER BY dostawca desc, idn desc LIMIT 1;
  END IF;
  SET _KONTRGUID=IFNULL(_KONTRGUID,'');
  IF _KONTRGUID='' THEN
    SELECT guid INTO _KONTRGUID
    FROM kontrah WHERE nip in (_NIP,replace(_NIP,'PL','')) and deleted=0 and nip<>''
    ORDER BY dostawca desc, idn desc LIMIT 1;
  END IF;
  SET @m_api.kontrguid=_KONTRGUID;
  IF _DEBUG THEN
    SELECT _NIP,_NRRACHUNKU,@m_api.kontrguid,@m_api.idnrachunku_get;
  END IF;
END IF;

/*
deduplikacja rachbankowych:
create table rachbankowe_kopia20260210 select * From rachbankowe;
create table rachbankoweuni like rachbankowe;
alter table rachbankoweuni add unique(nrrachunku);
insert ignore into rachbankoweuni 
select idn,nazwakonta,left(replace(nrrachunku,' ',''),28),bankguid,kontrguid,rodzaj,r.localtime,r.remotetime,swift,status_weryfikacji,data_weryfikacji,nieaktywny,waluta 
from rachbankowe r order by idn desc ;
truncate rachbankowe;insert into rachbankowe select * from rachbankoweuni;


CALL m_api('INSERT_RACHBANKOWE',@kontrguid,'','',@nrrachunku,@swift,@waluta,'');
CALL m_api('INSERT_RACHBANKOWE_SELECT',@kontrguid,'','',@nrrachunku,@swift,@waluta,'');
*/


IF _MODE IN ('INSERT_RACHBANKOWE','INSERT_RACHBANKOWE_SELECT') THEN
    SET @mode=_MODE,_PLATNIKGUID=_GUID;
    SET _NRRACHUNKU=REPLACE(IFNULL(_ParamC,''),' ',''),@m_api.idnrachunku=0;
    SET @walutastr=IF(_ParamE='','PLN',_ParamE);
    SET @swift=IF(@walutastr<>'PLN',_ParamD,'');
    SELECT idn INTO @waluta FROM waluty WHERE symbol=@walutastr;
    SET @waluta=IFNULL(@waluta,0);
    SELECT idn,count(*) as ile INTO @m_api.idnrachunku,@m_api.ile 
    FROM rachbankowe 
    WHERE nrrachunku IN (_NRRACHUNKU,REPLACE(_NRRACHUNKU,'PL',''),CONCAT('PL',_NRRACHUNKU)) AND kontrguid=_PLATNIKGUID
    ORDER BY idn desc LIMIT 1;
    IF @m_api.ile=0 THEN
      SELECT max(idn) as idn,count(*) as ile
      INTO @m_api.idnrachunku,@m_api.ile
      FROM rachbankowe WHERE REPLACE(nrrachunku,' ','')=_NRRACHUNKU AND kontrguid=_PLATNIKGUID;
    END IF;
    IF @m_api.ile=0 THEN
      IF  isValidIBAN(_NRRACHUNKU) AND _PLATNIKGUID<>'INNI' THEN
        INSERT IGNORE INTO rachbankowe (NrRachunku,bankguid,kontrguid,rodzaj,NazwaKonta,swift,waluta)
        SELECT _NRRACHUNKU,mid(_NRRACHUNKU,3,8),guid,1,'r.biez.',@swift,@waluta FROM kontrah k 
        WHERE k.guid<>'' and k.guid=_PLATNIKGUID;
        SELECT idn INTO @m_api.idnrachunku FROM rachbankowe WHERE nrrachunku=_NRRACHUNKU AND kontrguid=_PLATNIKGUID;
      END IF;
    ELSE
      UPDATE rachbankowe set waluta=@waluta WHERE idn=@m_api.idnrachunku;
    END IF;
    
    IF _MODE IN ('INSERT_RACHBANKOWE_SELECT') THEN
      SELECT @m_api.idnrachunku AS idn;
    END IF;
END IF;
    
IF _MODE = 'UPDATE_OPNG' THEN
    SET @_GUID=_GUID;
    SET _NRRACHUNKU=REPLACE(IFNULL(_ParamC,''),' ',''),@idnrachunku=0;
    -- update IReg set ValueA='KANCELARIA' where IdKey='KSeF-domyslny_ugrpguid';
    SELECT ValueI into @split_wymuszony from IReg where IdKey = 'KSeF-wymus_split_payment_powyzej_15K';
    SELECT kontrnip,IFNULL(kontrguid,''),IFNULL(platnikguid,''),split_payment INTO @nip,_KONTRGUID,_PLATNIKGUID,@split FROM TE_opng;
    SELECT if(ifnull(wzordekr,'') ='','WEBDOC',wzordekr) INTO @default_wzordekr FROM operdoc where rodzaj = 104;
    IF ifnull(@split_wymuszony,0) = 1 THEN SET @split = IFNULL(@split,0); END IF;
    IF _KONTRGUID='' THEN
      CALL m_api('GET_KONTRAH',@nip,'','',_NRRACHUNKU,'','','');
      SET _KONTRGUID=@m_api.kontrguid;
    END IF;
    SET _KONTRGUID=IF(IFNULL(_KONTRGUID,'')='','INNI',_KONTRGUID);

    IF _PLATNIKGUID='' THEN
      SET _PLATNIKGUID=_KONTRGUID;
    END IF;

    -- jeśli @webdoc jest false i @nie_importuj_z_ksef=1 to sprzatamy po sobie i wychodzimy z procedury
    IF NOT _WEBDOC THEN
      SELECT nie_importuj_z_ksef into @nie_importuj_z_ksef FROM kontrah WHERE guid=_KONTRGUID;
      IF @nie_importuj_z_ksef=1 THEN
        DELETE b FROM oppo_budzet b WHERE b.idnoper=_GUID;
        DELETE o FROM TE_oppo o WHERE o.idnoper=_GUID;
        DELETE v FROM TE_opng_vat v WHERE v.idnoper=_GUID;
        DELETE n FROM TE_opng n WHERE n.guid=_GUID;
        SELECT "KSEF_BLOCKED" AS status;
        LEAVE sproc;
      END IF;
    END IF;

    SELECT datawystaw,IFNULL(nrwewn,'') INTO _DATA,@nrwewn from TE_opng;
    SELECT idn INTO _WALUTA FROM waluty WHERE symbol=_ParamB;
    SET _WALUTA=IFNULL(_WALUTA,0);
    -- Jeśli kurs przekazany wprost z XML faktury (KursWalutyZ dla zaliczkowych, KursWaluty z wiersza)
    -- przekaż go w _ParamA; dla PLN (_WALUTA=0) zawsze używamy kursu 1
    IF _WALUTA != 0 AND _VarDouble(_ParamA) > 0 THEN
        SET _KURS = _VarDouble(_ParamA), _NR_TAB_KURS = 'KSeF';
    ELSE
        SELECT kurs,numer_tab_kurs INTO _KURS,_NR_TAB_KURS
        FROM kursy
        WHERE DATA BETWEEN _DATA - interval 7 day 
          AND _DATA - interval 1 day AND idnwaluty=_WALUTA
          ORDER BY DATA DESC LIMIT 1
          ;
        SET _KURS=IFNULL(_KURS,1),_NR_TAB_KURS=IFNULL(_NR_TAB_KURS,'');
    END IF;
    SET @sposobplatnosci=IFNULL(_ParamD,''),@sposobplatn=-1;

    IF(@session.globals.Owner IN ('SEVENET')) THEN
      IF @sposobplatnosci LIKE "GOT%" OR @sposobplatnosci=1 THEN SET @sposobplatn=1; END IF;
      IF @sposobplatnosci LIKE "_rodki%pryw%" THEN SET @sposobplatn=1; END IF;
      IF @sposobplatnosci LIKE "Karta%" OR @sposobplatnosci=2 THEN SET @sposobplatn=39; END IF;
      IF @sposobplatnosci LIKE "PRZEDP%" THEN SET @sposobplatn=99; END IF;
    ELSE  
      IF @sposobplatnosci=1 THEN SET @sposobplatn=(select min(idn) from platnosc where rodzaj = 0); END IF; -- gotowka
      IF @sposobplatnosci=2 THEN SET @sposobplatn=(select min(idn) from platnosc where rodzaj = 2); END IF; -- karta
      IF @sposobplatnosci=7 THEN SET @sposobplatn=(select ifnull(min(idn),-1) from platnosc where rodzaj = 4); END IF; -- platnosc mobilna - paylink jak brak to przelew
      IF @sposobplatnosci=6 THEN SET @sposobplatn=-1; END IF; -- przelew
    END IF;

    IF  isValidIBAN(_NRRACHUNKU) AND _KONTRGUID<>'INNI' THEN
      SET @idnrachunku=NULL;
      SELECT idn INTO @idnrachunku FROM rachbankowe 
      WHERE kontrguid=_KONTRGUID 
        AND nrrachunku IN (_NRRACHUNKU,REPLACE(_NRRACHUNKU,'PL',''),CONCAT('PL',_NRRACHUNKU))
      ORDER BY status_weryfikacji like "OK%" desc,nrrachunku=_NRRACHUNKU desc limit 1;
      IF @idnrachunku IS NULL THEN
        INSERT IGNORE INTO rachbankowe (NrRachunku,bankguid,kontrguid,rodzaj,NazwaKonta)
        SELECT _NRRACHUNKU,mid(REPLACE(_NRRACHUNKU,'PL',''),3,8),guid,1,'r.biez.' FROM kontrah k 
        WHERE k.guid<>'' and k.guid=_KONTRGUID;
        SET @idnrachunku=IFNULL(LAST_INSERT_ID(),0);
      END IF;
    END IF;

    UPDATE TE_opng n SET 
      n.domagazynu=1,n.zmagazynu=0,n.kancelaria_kierunek=1,n.calc_ver=3,n.przeliczenie_B_N=0,
      n.kontrguid=_KONTRGUID,n.platnikguid=_PLATNIKGUID, 
      n.ExtFlags = concat_WS('', IFNULL(n.ExtFlags,''), '(NG<-Kontrah)'),
      n.waluta=_WALUTA,n.waluta_rozliczen=_WALUTA, n.kurs=_KURS,n.kurs_rozliczen=_KURS,
      n.tabela_kursow=_NR_TAB_KURS, n.datawaluty=_DATA,n.dataplatnosci_oczekiwana=n.dataplatnosci,
      n.data_vat=n.datawplywu,n.datawplywu_rzeczywista=n.datawplywu,
      n.wzordekr=@default_wzordekr,n.idnrachunku=@idnrachunku,
      n.statusEMail=3 --  sposób odbioru dok. = KSef (slowniki_pierwotne guid='STATUSY_EMAIL_Z')
    WHERE n.guid=_GUID;
    
    IF _WEBDOC THEN
      UPDATE TE_opng_vat  SET fixed=1;
    ELSE
      UPDATE TE_opng_vat  SET fixed=2;
    END IF;
    UPDATE TE_opng_vat  SET idvat=15 where idvat=0; -- mail p.Sadowska 20240411
    UPDATE TE_opng_vat  SET netto=_RND2(nettoWal*_KURS),vat=_RND2(vatWal*_KURS);
    UPDATE TE_opng_vat  SET brutto=netto+vat,bruttoWal=nettoWal+vatWal;
    
    -- SELECT * from TE_opng_vat;

    CALL C_HT_OPZM('NG<-Kontrah', '', 'OP', 'TE', _GUID, '', '', '', '' ,'', '');
    UPDATE TE_opng n SET n.sposobplatn=@sposobplatn WHERE n.guid=_GUID;
    CALL C_HT_OPZM('TE.NG.POST', '', 'OP', 'TE', _GUID, '', '', '', '' ,'', '');
--    tutaj są oczywiście przed APPLY jeszcze inne możliwe dodatki np. wsatwienie cen etc.
    -- CALL C_HT_OPZM('TE.xxpo<-POZYCJE_CENYRABAT', '', 'OP', 'TE', _GUID, '', '', '', '' ,'', '');
    CALL C_HT_OPZM('APPLY', '', 'OP', 'TE', _GUID, '', '', '', '' ,'', '');
    CALL C_HT_OPZM('END', '', 'OP', 'TE', _GUID, '', '', '', '' ,'', '');

    IF _WEBDOC THEN
      SET @ilepoz=IFNULL((SELECT count(DISTINCT katcol5,katcol2,katcol1,katcol9) FROM oppo_budzet WHERE idnoper=_GUID),0);
      SET @ilepoz_zlec=IFNULL((SELECT COUNT(DISTINCT katcol5) FROM oppo_budzet WHERE idnoper=_GUID),0);
      SET @ilepoz_del =IFNULL((SELECT COUNT(DISTINCT katcol6) FROM oppo_budzet WHERE idnoper=_GUID),0);

      UPDATE opng n,oppo_budzet b SET n.katcol0=b.katcol5,n.katcol2=b.katcol2,n.katcol3=b.katcol1,n.katcol4=b.katcol9
      WHERE b.idnoper=n.guid and n.guid=_GUID AND @ilepoz=1;
      
      UPDATE opng n,oppo_budzet b SET n.katcol0=b.katcol5
      WHERE b.idnoper=n.guid AND n.guid=_GUID AND @ilepoz_zlec=1;
    
      UPDATE opng n,oppo_budzet b SET n.katcol1=b.katcol6
      WHERE b.idnoper=n.guid AND n.guid=_GUID AND @ilepoz_del=1;
      
      UPDATE opng n SET n.katcol1=-1 -- podzial na poziomie pozycji
      WHERE n.guid=_GUID AND @ilepoz_del>1;
      IF @nrwewn='' THEN 
        CALL m_api('SET_NRWEWN',_GUID,'','','','','','');
      END IF;
    END IF;
  -- obejście/test
    SELECT ValueA into @default_ugrpguid from IReg where IdKey = 'KSeF-domyslny_ugrpguid';
    -- jeśli @default_ugrpguid jest pusty albo ALL  i dodatkowo jeśli klucz przepisz_ugrpGUID_z_kontrah jest ustawiony na 1 to wtedy pobieramy ugrpguid z kontrahenta (Simex używa do wszystkich jednej grupy)
    -- IF (IFNULL(@default_ugrpguid,'')='' OR @default_ugrpguid='ALL') AND (SELECT ValueB FROM IReg WHERE IdKey='przepisz_ugrpGUID_z_kontrah')=1 THEN
    IF (SELECT ValueB FROM IReg WHERE IdKey='przepisz_ugrpGUID_z_kontrah')=1 THEN -- bez fantazji, wczesniej bylo to wyzej
      SELECT ugrpguid INTO @default_ugrpguid FROM kontrah WHERE guid=_KONTRGUID;
    END IF;

    UPDATE opng SET split_payment=IFNULL(@split,0),status_obieg=1, kontrnip = @nip, ugrpguid=IFNULL(@default_ugrpguid,'ALL') WHERE guid=_GUID;
    IF @session.globals.Owner IN ('PLISZKA') THEN
      UPDATE opng SET rozrachunek=1 WHERE guid=_GUID;
    ELSEIF @session.globals.Owner IN ('JARZEBINSCY','HYDROMEGA','COMEX') THEN
      UPDATE opng SET opis='' WHERE guid=_GUID;
    ELSEIF @session.globals.Owner IN ('COMEX') THEN
      UPDATE opng SET uwagi='' WHERE guid=_GUID;
    END IF;

    SELECT nrwewn, "OK" as status FROM opng WHERE guid=_GUID;
END IF;

/*
tylko SEVENET
-- CALL m_api('SET_NRWEWN',@guid,'','','','','','DEBUG');
*/


IF _MODE = 'SET_NRWEWN' THEN
    IF _DEBUG THEN
        SELECT "PRZED:",n.nrwewn,c.nr from opng n 
        LEFT JOIN erp_obj_counters c ON c.objtype='opng.nrwewn' and c.rodzaj=n.rodzaj and c.y=year(n.datasprzed) and c.m=month(n.datasprzed)
        WHERE n.guid=_GUID;
        DELETE FROM erp_obj_counters_values WHERE objtype in ('opng.nrwewn','') AND ID=_GUID;
    END IF;

    INSERT IGNORE INTO erp_obj_counters_values (id,objtype,input_number,number_text) 
    SELECT n.guid,'opng.nrwewn',ifnull(c.nr,0)+1,
    CONCAT(LPAD(ifnull(c.nr,0)+1,6,'0'),'/',lpad(month(n.datasprzed),2,'0'),'/',left(n.datasprzed,4))
    FROM opng n
    LEFT JOIN erp_obj_counters c ON c.objtype='opng.nrwewn' and c.rodzaj=n.rodzaj and c.y=year(n.datasprzed) and c.m=month(n.datasprzed) 
    WHERE n.guid=_GUID;

    INSERT IGNORE INTO erp_obj_counters (objtype,nr,rodzaj,y,m) 
    SELECT 'opng.nrwewn',0,rodzaj,year(n.datasprzed),month(n.datasprzed) FROM opng n WHERE guid=_GUID;
    UPDATE erp_obj_counters c, opng n SET c.nr=c.nr+1 
    WHERE c.objtype='opng.nrwewn' and c.rodzaj=n.rodzaj and c.y=year(n.datasprzed) and c.m=month(n.datasprzed) AND n.guid=_GUID;

    UPDATE opng n,erp_obj_counters_values c SET n.nrwewn=c.number_text WHERE c.id=n.guid and n.guid=_GUID;
    IF _DEBUG THEN
        SELECT * from erp_obj_counters_values WHERE id=_GUID;
        SELECT n.nrwewn,c.nr from opng n,erp_obj_counters c 
        WHERE n.guid=_GUID and c.objtype='opng.nrwewn' and c.rodzaj=n.rodzaj and c.y=year(n.datasprzed) and c.m=month(n.datasprzed);
    END IF;
END IF;

-- CALL m_api('GET_OPPO_B',@guid,'','','','','','DEBUG');
IF _MODE = 'GET_OPPO_B' THEN
    SELECT b.netto,b.info,  
    (SELECT valuex FROM v_lok_fk v       WHERE v.klucz=b.katcol1) as lokalizacja,
    (SELECT valuex FROM v_pracownicy v   WHERE v.klucz=b.katcol2) as pracownik,
    (SELECT valuex FROM v_mpk v          WHERE v.klucz=b.katcol5) as zlecenie,
--    (SELECT valuex FROM v_delegacje v    WHERE v.klucz=b.katcol6) as delegacja,
-- tymczasowo - pierwsza synchroniowana
    (SELECT valuex FROM v_kkn1 v    WHERE v.klucz=b.katcol6) as delegacja,
    (SELECT valuex FROM v_rodz_kosztow v WHERE v.klucz=b.katcol7) as rodzaj,
    (SELECT valuex FROM v_pojazdy      v WHERE v.klucz=b.katcol9) as pojazd
    FROM oppo_budzet b
    WHERE b.idnoper=_GUID; 
END IF;

IF _MODE = 'TEST' THEN
    SET @guid='TEST1';
    UPDATE opng SET deleted=1 WHERE guid=@guid;
    CALL m_api('UPDATE_OPNG_INIT',@guid,'ZP NN','','','','','DEBUG');
    UPDATE TE_opng set datawystaw='2026-02-24',nrdokfin='TEST',kontrnip='8371655490';
    CALL m_api('UPDATE_OPNG','KSEF_3a03be50489ccf2ff247c2135a525e26','','PLN','23124018221111001000275254','6','','DEBUG');
END IF;

/*
@guid opcjonalny
@localtime opcjonalny
CALL m_api('GET_ABSENCJE',@guid,@localtime,'','','','','DEBUG');
wszystkie niewysłane zmiany
CALL m_api('GET_ABSENCJE','','new','','','','','DEBUG');
nieuzywany
*/

IF _MODE = 'GET_ABSENCJE' THEN
    SET _TIMESTAMP=IFNULL(_ParamA,'0000-00-00 00:00:00');

    SELECT
        IF(u.login IS NULL, o.idnuser, u.login) AS user_name,
        IF(firma_wspolprac = 0, IF(d.external_id = '', 'xxx', d.external_id), d.external_id_b2b) AS event_type,
        a.guid AS id,
        d.definicja AS name,
        0 AS whole_day,
        CASE
          WHEN a.absencjaod = a.absencjado AND fp.kp_godziny <> a.godz_absencji THEN CONCAT(a.absencjaod, 'T08:00:00')
          ELSE CONCAT(a.absencjaod, 'T00:00:00')
        END AS date_start,
        
        CASE
          WHEN a.absencjaod = a.absencjado AND fp.kp_godziny <> a.godz_absencji THEN CONCAT(a.absencjaod, 'T', ADDTIME('08:00:00', SEC_TO_TIME(a.godz_absencji * 60)))
          ELSE CONCAT(a.absencjado, 'T23:59:00')
        END AS date_end,
        
        '' AS date,
        a.opis AS description,
        0 as deleted,
        a.ModifyAt AS erp_date_modified
    FROM absencje a
    INNER JOIN absencje_dict d ON d.idn = a.rodzaj
    INNER JOIN osoby o ON o.guid = a.GUIDpr
    INNER JOIN Pracownicy p ON p.guid = a.GUIDpr
    LEFT JOIN _user_accounts u ON u.osobaGUID = o.GUID
    INNER JOIN frekw_po fp ON fp.frekwguid = a.frekwguid AND fp.rok_msc_dzien = a.absencjaod
    WHERE   a.ModifyAt>_TIMESTAMP AND a.absencjaod>'2025-04-20' AND
            (_ParamA<>'new' OR a.ModifyAT>IFNULL(a.RemoteTime,'0000-00-00 00:00:00')) AND
            (_GUID='' OR a.guid=_GUID) 
    -- AND a.absencjaod = a.absencjado AND a.godz_absencji <> fp.kp_godziny
    -- HAVING date_start LIKE '%T08%'
    ;

--        (SELECT count(*)>0 FROM log l WHERE l.table_link='absencje' AND l.info='Usuwam' AND l.guidlink=a.guid) AS deleted,

END IF;

IF _MODE = 'GET_ABSENCJE_DELETED' THEN
  SELECT idn, czas, guidlink, LEFT(info, 30) AS info 
  FROM log l 
  WHERE table_link = 'absencje' 
    AND NOT EXISTS ( SELECT 1 FROM absencje a WHERE a.guid = l.guidlink
    ) 
    AND info LIKE 'Usu%' 
    AND czas > '2025-07-01';
END IF;

/*
CALL m_api('KSEF_UPDATE_KOREKTA_DATA',@guid,@datakor,'','','','','DEBUG');
ustawienie daty vat i daty potwierdzenia koretky według daty wstawienia do ksef (wołane w API w momencie nadania numeru ksef)
*/

IF _MODE = 'KSEF_UPDATE_KOREKTA_DATA' THEN
  SET @mode=_MODE;
  SELECT rodzaj into @rodzaj from opng where guid = _GUID;
  UPDATE opng set korekta_data_potw = _ParamA, data_vat = _ParamA where guid=_GUID and rodzaj in (3,85,90);
END IF;

/*
CALL m_api('KSEF_GET_LIST','','','','','','','DEBUG');
pobranie listy dokumentów do wysyłki do ksef
czy na pewno tu ma być *?
*/

IF _MODE = 'KSEF_GET_LIST' THEN
  SET @mode=_MODE;
  IF @session.globals.Owner IN ('CDG') THEN
    SELECT * FROM opng n WHERE n.statusKSeF in (10,11,20,30) AND n.datawystaw >= '2026-01-01' and not (n.rodzaj=1 and n.brutto=0) and tymczasowa = 0 and ifnull(nrdokfin,'') != '' and deleted = 0
    and exists (select guid from oppo where idnoper=n.guid or idnoperfin = n.guid)
    ORDER BY n.datawystaw,n.idn LIMIT 30;
  ELSE
    SELECT * FROM opng WHERE statusKSeF in (10,11,20,30) AND datawystaw >= '2026-01-01' ORDER BY datawystaw,idn LIMIT 30;
  END IF;
END IF;


/*
CALL m_api('KSEF_GET_KONTO',@guid,'','','','','','DEBUG');
pobranie kont wystawcy faktury - zwraca liste kont jako SELECT (moze byc wiele)
Konto glowne pochodzi z fr_ht_konto (tak samo jak w KSEF_GET_OPNG).
Konto dodatkowe (np. dla faktur dwuwalutowych) pochodzi z banki.idn wskazanego
przez IReg.idkey = 'KSeF-idn_konta_dla_dwuwalutowych'.
*/

IF _MODE = 'KSEF_GET_KONTO' THEN
    SET @mode = _MODE, @_walutabanku = '';

    CALL fr_ht_konto('OP', _GUID, 'KSEF', '', 0, '', '', '', '');
    SET @nrKontaKSeF = IF(@_konto <> '', @_konto, @_KontoBankowe);

    SELECT
        LEFT(@nrKontaKSeF, 255) AS NrRb,
        LEFT(@_swift, 20)       AS swift,
        LEFT(@_nazwabanku, 255) AS NazwaBanku,
        (select symbol from waluty where idn = @_walutabanku) as OpisRachunku
    FROM DUAL
    WHERE IFNULL(@nrKontaKSeF, '') <> ''

    UNION ALL

    SELECT
        konto      AS NrRb,
        swift      AS swift,
        nazwabanku AS NazwaBanku,
        (select symbol from waluty where idn = waluta) as OpisRachunku
    FROM banki
    WHERE idn = (SELECT valueI FROM IReg WHERE idkey = 'KSeF-idn_konta_dla_dwuwalutowych')
      AND IFNULL(konto, '') <> '' and IFNULL(@waluta_dok,0)!=0;

END IF;


/*
CALL m_api('KSEF_GET_OPNG',@guid,'','','','','','DEBUG');
pobranie danych dokumentu opng do ksef
*/
IF _MODE = 'KSEF_GET_OPNG' THEN

  SET @mode=_MODE;

  CALL fr_ht_OP ('OP_NG_VAT', _GUID,'','',0,'KSEF','','','');
  select sum(bruttowal) into @bruttowalsuma from t_vat;
  SELECT '', '', NULL, NULL
  INTO @rodzajFaktury, @guidzaliczki, @zaliczka, @zalwartnet;

  SELECT rodzaj, kontrguid, platnikguid, kurs
  INTO @rodzaj, @kontrguid, @platnikguid, _kurs_op
  FROM opng WHERE guid = _GUID LIMIT 1;
  SELECT k.idn INTO @tytulkorekty FROM powody_korekty k, opng n WHERE n.guid = _GUID AND n.korektatytulem = k.nazwa LIMIT 1;
  SELECT 'VAT', '', usluga, wartnet INTO @rodzajFaktury, @guidzaliczki, @zaliczka, @zalwartnet
  FROM oppo p,  opng n 
  WHERE n.guid = p.idnoperfin AND usluga = 8 AND n.guid = _GUID LIMIT 1;

  SELECT jst INTO @platnik_JST FROM kontrah WHERE guid = @platnikguid LIMIT 1;
  SELECT gv INTO @platnik_gv FROM kontrah WHERE guid = @platnikguid LIMIT 1;
  SELECT ifnull(ValueI,0) into @zrodlo_podm2 from IReg where idkey = 'KSeF-Dane_do_Podmiot2' limit 1;

  -- CALL m_api('KSEF_GET_KONTO',_GUID,'','','','','','');
  CALL fr_ht_konto('OP', _GUID, 'KSEF', '',0,'','','','');
  -- SET @nrKontaKSeF = @_KontoBankowe;
  SET @nrKontaKSeF = IF(@_konto <> '', @_konto, @_KontoBankowe);
   -- SET @nrKontaKSeF = @_konto; powinno byc tak, ale dopiero, gdy w ht_konto bedzie ta zmienna dla wszystkich

  IF @rodzaj in (1,80,50) and @zaliczka = 8 and @zalwartnet > 0 THEN
    SET @rodzajFaktury = 'ZAL';
  ELSEIF @rodzaj in (1,80,50) and @zaliczka = 8 and @zalwartnet < 0 THEN
    SET @rodzajFaktury = 'ROZ';
  ELSEIF @rodzaj in (3,85,90) and @zaliczka = 8 and @zalwartnet < 0 THEN
    SET @rodzajFaktury = 'KOR_ZAL';
  ELSEIF @rodzaj in (3,85,90) and @zaliczka = 8 and @zalwartnet > 0 THEN
    SET @rodzajFaktury = 'KOR_ROZ';
  ELSEIF @rodzaj in (1,80,50,5,6) THEN
    SET @rodzajFaktury = 'VAT';
  ELSEIF @rodzaj in (3,85,90,7,8,105) THEN
    SET @rodzajFaktury = 'KOR';
  END IF;

  IF @rodzaj in (3,85,90,7,8,24,26) THEN
    select 
      _VarStr(if(@rodzaj in (3,7,8,24,26) and @tytulkorekty = -10, p3.P2K_NIP,'') ) as P2K_NIP,
      _VarStr(if(@rodzaj in (85) and @tytulkorekty = -10, IF(LEFT(p3.P2K_NIP,1) NOT REGEXP '^[0-9]' AND p3.P2K_NIP <> 'brak',LEFT(p3.P2K_NIP,2),''),'')) as P2K_KodUE,
      _VarStr(if(@rodzaj in (85) and @tytulkorekty = -10, IF(LEFT(p3.P2K_NIP,1) NOT REGEXP '^[0-9]' AND p3.P2K_NIP <> 'brak',SUBSTRING(p3.P2K_NIP,2),''),'') ) as P2K_NrVatUe,
      _VarStr(if(@rodzaj in (90) and @tytulkorekty = -10, p3.P2K_NIP,'') ) as P2K_NrID,
      _VarStr(if(@rodzaj in (90) and @tytulkorekty = -10, if(p3.P2K_NIP='','1',''),'') ) as P2K_BrakID,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, p3.P2K_Nazwa,'') ) as P2K_Nazwa,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, p3.P2K_KodKraju,'') ) as P2K_KodKraju,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, p3.P2K_AdresL1,'') ) as P2K_AdresL1,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, p3.P2K_AdresL2,'') ) as P2K_AdresL2,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, (SELECT k2.idn FROM kontrah k2 WHERE k2.guid = p3.kontrguid LIMIT 1),'') ) as P2K_IDNabywcy
    into @P2K_NIP, @P2K_KodUE, @P2K_NrVatUe, @P2K_NrID, @P2K_BrakID, @P2K_Nazwa, @P2K_KodKraju, @P2K_AdresL1, @P2K_AdresL2, @P2K_IDNabywcy
    from opng n
    join opng_podmioty_3 p3 on p3.opngguid = n.korektaGUID
    where n.guid = _GUID and p3.rola = -1 and p3.idn = (select min(pp3.idn) from opng_podmioty_3 pp3 where pp3.opngguid = n.korektaGUID and pp3.rola = -1);
  END IF;


  IF @rodzajFaktury in ('ROZ', 'KOR_ROZ') THEN
    SELECT op2.idnoper INTO @guidzaliczki
    FROM opng n
    JOIN oppo op1 ON op1.idnoperfin = n.guid AND op1.usluga = 8
    JOIN zmpo p1 ON p1.guid = op1.guidzm AND p1.usluga = 8
    JOIN zmpo p2 ON p1.idnng = p2.idnng AND p2.usluga = 8 AND p1.guid != p2.guid
    JOIN oppo op2 ON op2.guidzm = p2.guid
    WHERE n.guid = _GUID LIMIT 1;

    SELECT numerksef, nrdokfin, if(ifnull(numerksef,'')='','1','') INTO @numerKsefZaliczki, @nrdokfinZaliczki, @znacznikPozaKsefZaliczki FROM opng WHERE guid = @guidzaliczki LIMIT 1;
  END IF;

  -- Podmiot1 dane
    IF @session.globals.Owner = "AMICUS" THEN
    SELECT edev2.nazwa
    INTO @MiejsceWystawienia
    FROM erp_division_schema edev2
    JOIN Magazyny M ON 1=1
    JOIN opng N ON N.zmagazynu = M.IdnMagazynu
    WHERE M.Param5 = edev2.GUID
      AND N.GUID = _GUID
    LIMIT 1;
    END IF;
    IF @session.globals.Owner = "TRANSBUD" THEN
    SELECT edev2.nazwa
    INTO @MiejsceWystawienia
    FROM erp_division_schema edev2
    JOIN Magazyny M ON 1=1
    JOIN opng N ON (N.zmagazynu = M.IdnMagazynu or N.domagazynu = M.IdnMagazynu)
    WHERE M.ugrpguid = edev2.GUID
      AND N.GUID = _GUID
    LIMIT 1;
    END IF;

    SELECT valuea INTO @Nip FROM IReg WHERE idkey='NIP' AND Idpath LIKE '%DaneFirmy' LIMIT 1;
    SELECT valuea INTO @PelnaNazwa FROM IReg WHERE idkey='Pelna_nazwa' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    SELECT valuea INTO @KodKraju FROM IReg WHERE idkey='Kraj' AND Idpath LIKE '%DaneFirmy' AND length(valuea) = 2 LIMIT 1;
    SELECT valuea INTO @Ulica FROM IReg WHERE idkey='Ulica' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    SELECT valuea INTO @NrDomu FROM IReg WHERE idkey='Nr_domu' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    SELECT valuea INTO @NrLokalu FROM IReg WHERE idkey='Nr_lokalu' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    SELECT valuea INTO @KodPocztowy FROM IReg WHERE idkey='Kod_poczt' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;

    SELECT valuea INTO @Miasto FROM IReg WHERE idkey='Miasto' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    IF IFNULL(@Miasto,'')='' THEN
      SELECT valuea INTO @Miasto FROM IReg WHERE idkey='Miasto' AND Idpath LIKE '%Owner' AND IFNULL(valuea,'')!='' LIMIT 1;
    END IF;


    SELECT valuea INTO @BDO FROM IReg WHERE idkey='BDO' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    SELECT valuea INTO @REGON FROM IReg WHERE idkey='REGON' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    SELECT valuea INTO @KRS FROM IReg WHERE idkey='KRS' AND Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    SELECT valuea INTO @NazwaSkrocona FROM IReg WHERE idkey='Nazwa_skrocona' and Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    SELECT valuea INTO @GLN_Firmy FROM IReg WHERE idkey='GLN_Firmy' and Idpath LIKE '%DaneFirmy' AND IFNULL(valuea,'')!='' LIMIT 1;
    
  IF @zrodlo_podm2=1 THEN
    SELECT
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), if(ifnull(kp.nip,'BRAK') like '%BRAK%','',kp.nip), @Nip))  as P1_NIP, -- samofakturowanie - w przypadku zakupow podmiotem pierwszym jest kontrahent wystawiajacego (dzialacz-sprzedajacy), w innym przypadku noramlnie
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), left(kp.nazwa,512), left(@PelnaNazwa,512))) as P1_Nazwa,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), 'PL', @KodKraju)) as P1_KodKraju,
      CASE WHEN ifnull(@Nrlokalu,'') = '' THEN
        _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), kp.ulica, concat(@Ulica, ' ', @NrDomu)))
      ELSE
        _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), kp.ulica, concat(@Ulica, ' ', @NrDomu, '/', @NrLokalu)))
      END as P1_AdresL1,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), concat(kp.zipcode, ' ', kp.NazwaMiasta), concat(@KodPocztowy, ' ', @Miasto))) as P1_AdresL2,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '', @BDO)) as P1_BDO,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '', @REGON)) as P1_REGON,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '', @KRS)) as P1_KRS,

    -- Podmiot2 dane
      _VarStr(if(n.rodzaj in (1,3,105), if(ifnull(kp.nip,'BRAK') like '%BRAK%','',kp.nip), if(@rodzaj in (5,6,7,8,23,24,25,26),@Nip,''))) as P2_NIP, -- samofakturowanie - w przypadku zakupowych podmiotem drugim jest wystawca (kupujacy)
      _VarStr(if(n.rodzaj in (80,85), IF(LEFT(kp.nip,1) NOT REGEXP '^[0-9]' AND kp.nip <> 'brak',LEFT(kp.nip,2),''),'')) as P2_KodUE,
      _VarStr(if(n.rodzaj in (80,85), IF(LEFT(kp.nip,1) NOT REGEXP '^[0-9]' AND kp.nip <> 'brak',SUBSTRING(kp.nip,3),kp.nip),'')) as P2_NrVatUe,
      _VarStr(if(n.rodzaj in (50,90), IF(LEFT(kp.nip,1) NOT REGEXP '^[0-9]' AND kp.nip <> 'brak',SUBSTRING(kp.nip,3),kp.nip),'')) as P2_NrID,
      _VarStr(if(n.rodzaj in (1,3,80,85,50,90) and (kp.nip like '%brak%' or kp.nip = ''),'1','')) as P2_BrakID,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26),left(@PelnaNazwa,512),left(kp.nazwa,512))) as P2_Nazwa,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), @KodKraju, kp.isocountrycode)) as P2_KodKraju,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), concat(@Ulica, ' ', @NrDomu), kp.ulica)) as P2_AdresL1,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), concat(@KodPocztowy, ' ', @Miasto), concat(kp.zipcode, ' ', kp.NazwaMiasta))) as P2_AdresL2,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), @NazwaSkrocona, kp.symbol)) as NrKlienta,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), @GLN_Firmy, kp.GLN)) as P2_GLN,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '2', if(kp.jst=1,1,2))) as P2_JST,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '2', if(kp.gv=1,1,2))) as P2_GV,
      kp.nie_jest_kontrahentem_ksef as P2_nie_jest_kontrahentem_ksef,

    -- Podmiot3 dane
      -- Bylo na rozruch, obecnie na podstawie  kontrah_ksef_jst i kontrah_ksef_gv w osobnym modzie bo zwraca liste
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (1,3), k.nip,''),'') as P3_NIP,
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (80,90),IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',LEFT(k.nip,2),''),''),'') as P3_KodUE,
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (80,90), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,2),''),''),'') as P3_NrVatUe,
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (50,90), k.nip,''),'') as P3_NrID,
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (50,90) and k.nip='','1',''),'') as P3_BrakID,
        -- if(@platnikguid!=@kontrguid, if(_DEBUG,'Testowa - nazwa podmiotu3 Sp.z o.o.',k.nazwa),'') as P3_Nazwa,
        -- if(@platnikguid!=@kontrguid, k.isocountrycode,'') as P3_KodKraju,
        -- if(@platnikguid!=@kontrguid, k.ulica,'') as P3_AdresL1,
        -- if(@platnikguid!=@kontrguid, concat(k.zipcode, ' ', k.NazwaMiasta),'') as P3_AdresL2,
        -- if(@platnikguid!=@kontrguid, 8,'') as Rola,

    -- FA-naglowek faktury
      w.symbol as KodWaluty,
      n.datawystaw as P_1,
      _VarStr(if(@session.globals.Owner in ('AMICUS','TRANSBUD'), @MiejsceWystawienia, @Miasto)) as P_1M, -- miejsce wystawienia faktury, pole nieobowiazkowe
      n.nrdokfin as P_2,
      _VarStr(n.datasprzed) as P_6,
      -- n.bruttowal as P_15,
      IF(_kurs_op = 1, _Rnd2(n.brutto), ifnull(_Rnd2(@bruttowalsuma),0)) AS P_15,
      case when 
        -- (if(n.CWN,1,-1)*n.CKwota-n.CRozliczone=0 or if(n.CWN,1,-1)*n.CKwotaWal-n.CRozliczoneWal=0)
        ((if(n.CWN,1,-1)*n.CKwota-n.CRozliczone=0 or if(n.CWN,1,-1)*n.CKwotaWal-n.CRozliczoneWal=0) and (n.ckwota !=0 or n.ckwotawal!=0))
        or (select ifnull(param1,'') from platnosc p where p.idn = n.sposobplatn) like '%KSEF_ZAPLACONO%'
        or ((@rodzajFaktury='ZAL' or ifnull(@bruttowalsuma,0)=0) and @session.globals.Owner not in ("HYDROMEGA","COMEX"))
        then 1 else ''
      end as Zaplacono,

      case 
        when (@rodzajFaktury='ZAL' or ifnull(@bruttowalsuma,0)=0)  and @session.globals.Owner not in ("HYDROMEGA","COMEX") then n.dataplatnosci
        when (if(n.CWN,1,-1)*n.CKwota-n.CRozliczone=0 or if(n.CWN,1,-1)*n.CKwotaWal-n.CRozliczoneWal=0) then n.datarozliczenia
        when (select ifnull(param1,'') from platnosc p where p.idn = n.sposobplatn) like '%KSEF_ZAPLACONO%' then n.dataplatnosci
        else ''
      end as DataZaplaty,

      n.dataplatnosci as TerminPlatnosci,
      ifnull(n.opis,'') AS TerminOpis,
      CASE
        WHEN p.Param1 like '%KSEF_INNA%' THEN ''
        WHEN p.rodzaj = 0 THEN '1' -- gotowka
        WHEN p.rodzaj in (1,-1)  THEN '6' -- przelew
        WHEN p.rodzaj = 2 THEN '2' -- karta
        WHEN p.rodzaj = 4 THEN '7' -- platnosc mobilna - u nas paylink
        ELSE '6'
      END AS FormaPlatnosci,
      if(p.Param1 like '%KSEF_INNA%',1,'') as PlatnoscInna,
      if(p.Param1 like '%KSEF_INNA%',p.nazwa,'') as OpisPlatnosci,

      LEFT(@nrKontaKSeF, 255) AS NrRB,
      LEFT(@_swift, 20) AS SWIFT,
      LEFT(@_nazwabanku, 255) AS NazwaBanku,

      -- 'PLN Konto: PKOBP SA Oddzial 27 w GdanskuNumer: 29 1440 1169 0000 0000 0181 8503' AS NrRB,
      2 as P_16, -- metoda kasowa (1=tak 2=nie)
      _VarStr(if (@rodzaj in (5,6,7,8,23,24,25,26) and k.samofakturowanie = '1', 1, 2)) as P_17, -- samowfakturowanie (1=tak 2=nie) (tylko dla zp i zt fv ru oraz ich korekt)
      2 as P_18, -- odwrotne obciazenie (1=tak 2=nie)

      _VarStr(
        IF(
          @session.globals.Owner = 'TRANSBUD',
          IF(n.brutto >= 15000 OR n.split_payment = 1, 1, 2),
          IF(n.split_payment = 1, 1, 2)
        )
      ) AS P_18A,

      1 as P_19N, 
      1 as P_22N, -- pola P_22 informacja Wewnatrzwspolnotowej dostawie srodka transportu - brak informacji
      2 as P_23, 
      1 as P_MarzyN,
      @rodzajFaktury as RodzajFaktury,
      _VarStr(if(@rodzajFaktury in ('ROZ','KOR_ROZ'),if(@znacznikPozaKsefZaliczki='1','1',''),'') ) as NrKSeFZN,  -- znacznik poza ksef fv zaliczki
      _VarStr(if(@rodzajFaktury in ('ROZ','KOR_ROZ'),if(@znacznikPozaKsefZaliczki='1',@nrdokfinZaliczki,''),'') ) as NrFaZaliczkowej,  -- nrdokfin fv zaliczki je艣li poza ksef
      _VarStr(if(@rodzajFaktury in ('ROZ','KOR_ROZ'),if(@znacznikPozaKsefZaliczki='1','',@numerKsefZaliczki),'') ) as NrKSeFFaZaliczkowej,  
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),if(ifnull(n.numerksef,'')='',1,''), '') ) as NrKSeFN,  -- znacznik 偶e fv korygowana nie mia艂a nadanego numeru ksef
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),n.korektatytulem, '') ) as PrzyczynaKorekty,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),n.korektadata, '') ) as DataWystFaKorygowanej,  
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),n.korektanrdokfin, '') ) as NrFaKorygowanej,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),(select if(ifnull(n2.numerksef,'') = '','',1) from opng n2 where guid = n.korektaguid), '') ) as NrKSeF,  -- znacznik istnienia numeru ksef
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),(select n2.numerksef from opng n2 where guid = n.korektaguid), '') ) as NrKSeFFaKorygowanej,  -- numer ksef fv korygowanej
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),(select if(ifnull(n2.numerksef,'') = '',1,'') from opng n2 where guid = n.korektaguid), '') ) as NrKSeFN,  -- znacznik fv korygowana nie miala nadanego numeru ksef
      _VarStr(if(@rodzaj in (105),dotyczy,'')) as OkresFaKorygowanej,
  -- FA-podmiot2K - dane kontrahenta po poprawie (pomimo 偶e w Podmiot2 i tak s膮 poprawne)
      _VarStr(if(@rodzaj in (3,7,8,24,26) and @tytulkorekty = -10, @P2K_NIP,'')) as P2K_NIP,
      _VarStr(if(@rodzaj in (85) and @tytulkorekty = -10, @P2K_KodUE,'')) as P2K_KodUE,
      _VarStr(if(@rodzaj in (85) and @tytulkorekty = -10, @P2K_NrVatUe,'')) as P2K_NrVatUe,
      _VarStr(if(@rodzaj in (90) and @tytulkorekty = -10, @P2K_NrID,'')) as P2K_NrID,
      _VarStr(if(@rodzaj in (90) and @tytulkorekty = -10, @P2K_BrakID,'')) as P2K_BrakID,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_Nazwa,'')) as P2K_Nazwa,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_KodKraju,'')) as P2K_KodKraju,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_AdresL1,'')) as P2K_AdresL1,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_AdresL2,'')) as P2K_AdresL2,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_IDNabywcy,'')) as P2K_IDNabywcy,
      IF(@rodzaj in (5,6,7,8,23,24,25,26), NULL, IF(@zrodlo_podm2=1, kp.guid, k.guid)) as P2_KontrahGuid

      FROM opng n 
      JOIN kontrah kp ON kp.guid = n.platnikguid
      JOIN kontrah k ON k.guid = n.kontrguid
      JOIN waluty w ON w.idn = n.waluta
      JOIN platnosc p ON n.sposobplatn = p.idn
      WHERE n.guid = _GUID;
  
  ELSE

    SELECT
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), kp.nip, @Nip))  as P1_NIP, -- samofakturowanie - w przypadku zakup贸w podmiotem pierwszym jest kontrahent wystawiaj膮cego (dzialacz-sprzedaj膮cy), w innym przypadku noramlnie
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), left(kp.nazwa,512), left(@PelnaNazwa,512))) as P1_Nazwa,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), 'PL', @KodKraju)) as P1_KodKraju,
      CASE WHEN ifnull(@Nrlokalu,'') = '' THEN
        _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), kp.ulica, concat(@Ulica, ' ', @NrDomu)))
      ELSE
        _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), kp.ulica, concat(@Ulica, ' ', @NrDomu, '/', @NrLokalu)))
      END as P1_AdresL1,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), concat(kp.zipcode, ' ', kp.NazwaMiasta), concat(@KodPocztowy, ' ', @Miasto))) as P1_AdresL2,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '', @BDO)) as P1_BDO,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '', @REGON)) as P1_REGON,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '', @KRS)) as P1_KRS,

    -- Podmiot2 dane
      _VarStr(if(n.rodzaj in (1,3,105), if(ifnull(k.nip,'BRAK') like '%BRAK%','',k.nip), if(@rodzaj in (5,6,7,8,23,24,25,26),@Nip,''))) as P2_NIP, -- samofakturowanie - w przypadku zakupowych podmiotem drugim jest wystawca (kupujacy)
      _VarStr(if(n.rodzaj in (80,85),IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',LEFT(k.nip,2),''),'')) as P2_KodUE,
      _VarStr(if(n.rodzaj in (80,85), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,3),k.nip),'')) as P2_NrVatUe,
      _VarStr(if(n.rodzaj in (50,90), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,3),k.nip),'')) as P2_NrID,
      _VarStr(if(n.rodzaj in (1,3,80,85,50,90) and (k.nip='' or k.nip like '%brak%'),'1','')) as P2_BrakID,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26),left(@PelnaNazwa,512),left(k.nazwa,512))) as P2_Nazwa,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), @KodKraju, k.isocountrycode)) as P2_KodKraju,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), concat(@Ulica, ' ', @NrDomu), k.ulica)) as P2_AdresL1,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), concat(@KodPocztowy, ' ', @Miasto), concat(k.zipcode, ' ', k.NazwaMiasta))) as P2_AdresL2,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), @NazwaSkrocona, k.symbol)) as NrKlienta,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '2', if(n.kontrah_ksef_jst=1,1,2))) as P2_JST,
      _VarStr(if(@rodzaj in (5,6,7,8,23,24,25,26), '2', if(n.kontrah_ksef_gv=1,1,2))) as P2_GV,
      k.nie_jest_kontrahentem_ksef as P2_nie_jest_kontrahentem_ksef,

    -- Podmiot3 dane
      -- By艂o na rozruch, obecnie na podstawie  kontrah_ksef_jst i kontrah_ksef_gv w osobnym modzie bo zwraca list臋
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (1,3), k.nip,''),'') as P3_NIP,
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (80,90),IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',LEFT(k.nip,2),''),''),'') as P3_KodUE,
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (80,90), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,2),''),''),'') as P3_NrVatUe,
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (50,90), k.nip,''),'') as P3_NrID,
        -- if(@platnikguid!=@kontrguid, if(n.rodzaj in (50,90) and k.nip='','1',''),'') as P3_BrakID,
        -- if(@platnikguid!=@kontrguid, if(_DEBUG,'Testowa - nazwa podmiotu3 Sp.z o.o.',k.nazwa),'') as P3_Nazwa,
        -- if(@platnikguid!=@kontrguid, k.isocountrycode,'') as P3_KodKraju,
        -- if(@platnikguid!=@kontrguid, k.ulica,'') as P3_AdresL1,
        -- if(@platnikguid!=@kontrguid, concat(k.zipcode, ' ', k.NazwaMiasta),'') as P3_AdresL2,
        -- if(@platnikguid!=@kontrguid, 8,'') as Rola,

    -- FA-naglowek faktury
      w.symbol as KodWaluty,
      n.datawystaw as P_1,
      _VarStr(if(@session.globals.Owner = "AMICUS", @MiejsceWystawienia, @Miasto)) as P_1M, -- miejsce wystawienia faktury, pole nieobowiazkowe
      n.nrdokfin as P_2,
      _VarStr(n.datasprzed) as P_6,
      -- n.bruttowal as P_15,
      IF(_kurs_op = 1, _Rnd2(n.brutto), ifnull(_Rnd2(@bruttowalsuma),0))  AS P_15,
      case when 
        -- (if(n.CWN,1,-1)*n.CKwota-n.CRozliczone=0 or if(n.CWN,1,-1)*n.CKwotaWal-n.CRozliczoneWal=0)
        ((if(n.CWN,1,-1)*n.CKwota-n.CRozliczone=0 or if(n.CWN,1,-1)*n.CKwotaWal-n.CRozliczoneWal=0) and (n.ckwota !=0 or n.ckwotawal!=0))
        or (select ifnull(param1,'') from platnosc p where p.idn = n.sposobplatn) like '%KSEF_ZAPLACONO%'
        or ((@rodzajFaktury='ZAL' or ifnull(@bruttowalsuma,0)=0) and @session.globals.Owner not in ("HYDROMEGA","COMEX"))
        then 1 else ''
      end as Zaplacono,

      case 
        when (@rodzajFaktury='ZAL' or ifnull(@bruttowalsuma,0)=0)  and @session.globals.Owner not in ("HYDROMEGA","COMEX") then n.dataplatnosci
        when (if(n.CWN,1,-1)*n.CKwota-n.CRozliczone=0 or if(n.CWN,1,-1)*n.CKwotaWal-n.CRozliczoneWal=0) then n.datarozliczenia
        when (select ifnull(param1,'') from platnosc p where p.idn = n.sposobplatn) like '%KSEF_ZAPLACONO%' then n.dataplatnosci
        else ''
      end as DataZaplaty,
      n.dataplatnosci as TerminPlatnosci,
      ifnull(n.opis,'') AS TerminOpis,
      CASE
        WHEN p.Param1 like '%KSEF_INNA%' THEN ''
        WHEN p.rodzaj = 0 THEN '1' -- gotowka
        WHEN p.rodzaj in (1,-1)  THEN '6' -- przelew
        WHEN p.rodzaj = 2 THEN '2' -- karta
        WHEN p.rodzaj = 4 THEN '7' -- platnosc mobilna - u nas paylink
        ELSE '6'
      END AS FormaPlatnosci,
      if(p.Param1 like '%KSEF_INNA%',1,'') as PlatnoscInna,
      if(p.Param1 like '%KSEF_INNA%',p.nazwa,'') as OpisPlatnosci,
      LEFT(@nrKontaKSeF, 255) AS NrRB,
      LEFT(@_swift, 20) AS SWIFT,
      LEFT(@_nazwabanku, 255) AS NazwaBanku,

      -- 'PLN Konto: PKOBP SA Oddzial 27 w Gdansku Numer: 29 1440 1169 0000 0000 0181 8503' AS NrRB,
      2 as P_16, -- metoda kasowa (1=tak 2=nie)
      _VarStr(if (@rodzaj in (5,6,7,8,23,24,25,26) and k.samofakturowanie = '1', 1, 2)) as P_17, -- samo fakturowanie (1=tak 2=nie) (tylko dla zp i zt fv ru oraz ich korekt)
      2 as P_18, -- odwrotne obciazenie (1=tak 2=nie)
      _VarStr(
        IF(
          @session.globals.Owner = 'TRANSBUD',
          IF(n.brutto >= 15000 OR n.split_payment = 1, 1, 2),
          IF(n.split_payment = 1, 1, 2)
        )
      ) AS P_18A,
      1 as P_19N, 
      1 as P_22N, -- pola P_22 informacja Wewnatrzwspolnotowej dostawie srodka transportu - brak informacji
      2 as P_23, 
      1 as P_MarzyN,
      @rodzajFaktury as RodzajFaktury,
      _VarStr(if(@rodzajFaktury in ('ROZ','KOR_ROZ'),if(@znacznikPozaKsefZaliczki='1','1',''),'') ) as NrKSeFZN,  -- znacznik poza ksef fv zaliczki
      _VarStr(if(@rodzajFaktury in ('ROZ','KOR_ROZ'),if(@znacznikPozaKsefZaliczki='1',@nrdokfinZaliczki,''),'') ) as NrFaZaliczkowej,  -- nrdokfin fv zaliczki jesli poza ksef
      _VarStr(if(@rodzajFaktury in ('ROZ','KOR_ROZ'),if(@znacznikPozaKsefZaliczki='1','',@numerKsefZaliczki),'') ) as NrKSeFFaZaliczkowej,  
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),if(ifnull(n.numerksef,'')='',1,''), '') ) as NrKSeFN,  -- znacznik fv korygowana nie miala nadanego numeru ksef
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),n.korektatytulem, '') ) as PrzyczynaKorekty,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),n.korektadata, '') ) as DataWystFaKorygowanej,  
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),n.korektanrdokfin, '') ) as NrFaKorygowanej,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),(select if(ifnull(n2.numerksef,'') = '','',1) from opng n2 where guid = n.korektaguid), '') ) as NrKSeF,  -- znacznik istnienia numeru ksef
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),(select n2.numerksef from opng n2 where guid = n.korektaguid), '') ) as NrKSeFFaKorygowanej,  -- numer ksef fv korygowanej
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),(select if(ifnull(n2.numerksef,'') = '',1,'') from opng n2 where guid = n.korektaguid), '') ) as NrKSeFN,  -- znacznik fv korygowana nie miala nadanego numeru ksef
      _VarStr(if(@rodzaj in (105),dotyczy,'')) as OkresFaKorygowanej,
  -- FA-podmiot2K - dane kontrahenta po poprawie (pomimo ze w Podmiot2 i tak sa poprawne)
      _VarStr(if(@rodzaj in (3,7,8,24,26) and @tytulkorekty = -10, @P2K_NIP,'')) as P2K_NIP,
      _VarStr(if(@rodzaj in (85) and @tytulkorekty = -10, @P2K_KodUE,'')) as P2K_KodUE,
      _VarStr(if(@rodzaj in (85) and @tytulkorekty = -10, @P2K_NrVatUe,'')) as P2K_NrVatUe,
      _VarStr(if(@rodzaj in (90) and @tytulkorekty = -10, @P2K_NrID,'')) as P2K_NrID,
      _VarStr(if(@rodzaj in (90) and @tytulkorekty = -10, @P2K_BrakID,'')) as P2K_BrakID,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_Nazwa,'')) as P2K_Nazwa,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_KodKraju,'')) as P2K_KodKraju,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_AdresL1,'')) as P2K_AdresL1,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_AdresL2,'')) as P2K_AdresL2,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26) and @tytulkorekty = -10, @P2K_IDNabywcy,'')) as P2K_IDNabywcy,
      IF(@rodzaj in (5,6,7,8,23,24,25,26), NULL, IF(@zrodlo_podm2=1, kp.guid, k.guid)) as P2_KontrahGuid



    FROM opng n 
    JOIN kontrah kp ON kp.guid = n.platnikguid
    JOIN kontrah k ON k.guid = n.kontrguid
    JOIN waluty w ON w.idn = n.waluta
    JOIN platnosc p ON n.sposobplatn = p.idn
    WHERE n.guid = _GUID;
  END IF;

END IF;


/*
CALL m_api('KSEF_GET_KORYGOWANE',@guid,'','','','','','DEBUG');
pobranie danych o dokumentach korygowanych
*/
IF _MODE = 'KSEF_GET_KORYGOWANE' THEN

  SET @mode=_MODE;
  select datawystaw, platnikguid, rodzaj into @datawystaw, @platnikguid, @rodzaj from opng where guid = _GUID;
  IF @rodzaj = 105 THEN
    SELECT n.datawystaw as DataWystFaKorygowanej, n.nrdokfin as NrFaKorygowanej, 
    if(ifnull(n.numerksef,'') = '','',1) as NrKSeF, 
    ifnull(n.numerksef,'') as NrKSeFFaKorygowanej, 
    if(ifnull(n.numerksef,'') = '',1,'') as NrKSeFN from opng n
    where n.rodzaj in (1,80,50) and n.platnikguid = @platnikguid
    AND (
      (@session.globals.Owner IN ('KONKOL') AND
        n.datawystaw BETWEEN DATE_FORMAT(DATE_SUB(@datawystaw, INTERVAL 1 MONTH), '%Y-%m-01')
                        AND LAST_DAY(DATE_SUB(@datawystaw, INTERVAL 1 MONTH))
      )
      OR
      (@session.globals.Owner IN ('ATM','PARAQUA') AND
        n.datawystaw BETWEEN DATE_FORMAT(DATE_SUB(@datawystaw, INTERVAL 3 MONTH), '%Y-%m-01')
                        AND LAST_DAY(DATE_SUB(@datawystaw, INTERVAL 1 MONTH))
      )
    );

  ELSE
    CALL ht_pr_STCorr('GetCorrPoz', _GUID, 'KSEF', '', '', '');
    SELECT rodzaj INTO @rodzaj FROM opng WHERE guid = _GUID LIMIT 1;

    SELECT
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),n.datawystaw, '') ) as DataWystFaKorygowanej,  
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),n.nrdokfin, '') ) as NrFaKorygowanej,
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),if(ifnull(n.numerksef,'') = '','',1) , '') ) as NrKSeF,  -- znacznik istnienia numeru ksef
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),ifnull(n.numerksef,''), '') ) as NrKSeFFaKorygowanej,  -- numer ksef fv korygowanej
      _VarStr(if(@rodzaj in (3,85,90,7,8,24,26),if(ifnull(n.numerksef,'') = '',1,''), '') ) as NrKSeFN  -- znacznik fv korygowana nie miala nadanego numeru ksef
    from t_korpoz k
    join opng n on n.guid = k.idnoperfin
    group by n.numerksef;
  END IF;

END IF;

/*
CALL m_api('KSEF_GET_PODMIOTY_3',@guid,'','','','','','DEBUG');
pobranie danych vat dokumentu opng do ksef
*/
IF _MODE = 'KSEF_GET_PODMIOTY_3' THEN
  SET @mode=_MODE;
  
  
  SELECT ifnull(ValueI,0) into @zrodlo_podm2 from IReg where idkey = 'KSeF-Dane_do_Podmiot2' limit 1;
  IF @zrodlo_podm2=1 THEN
    --  dodajemy kontrahenta z danyc z opng - nie jest on w tabeli KSEF_GET_PODMIOTY_3
    SELECT
      _VarStr(if(n.rodzaj in (1,3), if(ifnull(k.IDWew,'') != '',k.IDWew, ''),'')) AS P3_IDWew,
      _VarStr(if(n.rodzaj in (1,3), if(ifnull(k.IDWew,'') != '','', k.nip),'')) AS P3_NIP,
      _VarStr(if(n.rodzaj in (80,90),IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',LEFT(k.nip,2),''),'')) as P3_KodUE,
      _VarStr(if(n.rodzaj in (80,90), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,3),''),'')) as P3_NrVatUe,
      _VarStr(if(n.rodzaj in (50,90), k.nip,''))as P3_NrID,
      _VarStr(if(n.rodzaj in (50,90) and k.nip='','1','')) as P3_BrakID,
      _VarStr(k.nazwa) AS P3_Nazwa,
      _VarStr(k.isocountrycode) as P3_KodKraju,
      _VarStr(k.ulica) as P3_AdresL1,
      _VarStr(concat(k.zipcode, ' ', k.NazwaMiasta))  as P3_AdresL2,
      _VarStr(k.GLN) as P3_GLN,
      if(ifnull(k.domyslna_rola_ksef,0) != 0, k.domyslna_rola_ksef, 2) as Rola, -- ustawiamy rolę a domyślną jest 2 czyli odbiorca
      k.guid as P3_KontrahGuid,
      k.nie_jest_kontrahentem_ksef as P3_nie_jest_kontrahentem_ksef
    FROM opng n
    join kontrah k on k.guid = n.kontrguid
    WHERE n.GUID = _GUID AND (n.kontrGUID <> n.platnikGUID OR IFNULL(k.IDWew,'') <> '')

    UNION
    -- plus wszyscy z uzupelnionych w operacji
    SELECT 
      _VarStr(if(n.rodzaj in (1,3,105), if(ifnull(k.IDWew,'') != '',k.IDWew, ''),'')) AS P3_IDWew,
      _VarStr(if(n.rodzaj in (1,3,105), if(ifnull(k.IDWew,'') != '','', k.nip),'')) AS P3_NIP,
      _VarStr(if(n.rodzaj in (80,90),IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',LEFT(k.nip,2),''),'')) as P3_KodUE,
      _VarStr(if(n.rodzaj in (80,90), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,3),''),'')) as P3_NrVatUe,
      _VarStr(if(n.rodzaj in (50,90), k.nip,'')) as P3_NrID,
      _VarStr(if(n.rodzaj in (50,90) and k.nip='','1',''))  as P3_BrakID,
      _VarStr(left(k.nazwa,512)) as P3_Nazwa,
      _VarStr(k.isocountrycode) as P3_KodKraju,
      _VarStr(k.ulica) as P3_AdresL1,
      _VarStr(concat(k.zipcode, ' ', k.NazwaMiasta)) as P3_AdresL2,
      _VarStr(k.GLN) as P3_GLN,
      _VarStr(p3.rola) as Rola,
      k.guid as P3_KontrahGuid,
      k.nie_jest_kontrahentem_ksef as P3_nie_jest_kontrahentem_ksef
    FROM opng_podmioty_3 p3
    join opng n on n.guid = p3.opngguid
    join kontrah k on k.guid = p3.kontrguid
    WHERE p3.opngguid = _GUID and p3.rola > 0
    ;
  ELSE
    -- jeśli zrodlem podmiotu2 jest kontrahent to pobieramy z listy w operacjach
    SELECT 
      _VarStr(if(n.rodzaj in (1,3,105), if(ifnull(k.IDWew,'') != '',k.IDWew, ''),'')) AS P3_IDWew,
      _VarStr(if(n.rodzaj in (1,3,105), if(ifnull(k.IDWew,'') != '','', k.nip),'')) AS P3_NIP,
      _VarStr(if(n.rodzaj in (80,90),IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',LEFT(k.nip,2),''),'')) as P3_KodUE,
      _VarStr(if(n.rodzaj in (80,90), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,3),''),'')) as P3_NrVatUe,
      _VarStr(if(n.rodzaj in (50,90), k.nip,'')) as P3_NrID,
      _VarStr(if(n.rodzaj in (50,90) and k.nip='','1',''))  as P3_BrakID,
      _VarStr(left(k.nazwa,512)) as P3_Nazwa,
      _VarStr(k.isocountrycode) as P3_KodKraju,
      _VarStr(k.ulica) as P3_AdresL1,
      _VarStr(concat(k.zipcode, ' ', k.NazwaMiasta)) as P3_AdresL2,
      _VarStr(k.GLN) as P3_GLN,
      _VarStr(p3.rola) as Rola,
      k.guid as P3_KontrahGuid,
      k.nie_jest_kontrahentem_ksef as P3_nie_jest_kontrahentem_ksef
    FROM opng_podmioty_3 p3
    join opng n on n.guid = p3.opngguid
    join kontrah k on k.guid = p3.kontrguid
    WHERE p3.opngguid = _GUID and p3.rola > 0

    UNION
    -- i gdy odbiorca jest tak naprawde miejscem dostawy (areaguid w opng)
    SELECT
      _VarStr(if(n.rodzaj in (1,3), if(ifnull(ean.IDWew,'') != '',ean.IDWew, ''),'')) AS P3_IDWew,
      -- _VarStr(if(n.rodzaj in (1,3), if(ifnull(ean.IDWew,'') != '','', k.nip),'')) AS P3_NIP,
      _VarStr(if(n.rodzaj in (1,3), if(ifnull(ean.IDWew,'') = '',k.nip, ean.IDWew),'')) AS P3_NIP,
      _VarStr(if(n.rodzaj in (80,90),IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',LEFT(k.nip,2),''),'')) as P3_KodUE,
      _VarStr(if(n.rodzaj in (80,90), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,3),''),'')) as P3_NrVatUe,
      _VarStr(if(n.rodzaj in (50,90), k.nip,'')) as P3_NrID,
      _VarStr(if(n.rodzaj in (50,90) and k.nip='','1','')) as P3_BrakID,
      ean.nazwa AS P3_Nazwa,
      -- todo jezeli w ean jest adres, to go podawac, na razie adres z kontrahenta, podmieniamy tylko nazwe i role
      k.isocountrycode as P3_KodKraju,
      IF(IFNULL(a.adres,'') = '', k.ulica, a.adres) as P3_AdresL1,
      _VarStr('') as P3_AdresL2, -- sevenet ma zawsze pusto w drugiej linijce, kod pocztowy jest w L1
      IF(IFNULL(ean.GLN,'') = '', k.GLN, ean.GLN) as P3_GLN,
      '2' as Rola,
      NULL as P3_KontrahGuid,
      0 as P3_nie_jest_kontrahentem_ksef
    FROM opng n
    join kontrah k on k.guid = n.kontrguid
    join erp_area_nodes ean on ean.GUID = n.areaGUID
    LEFT JOIN geo_int_adr_link a ON a.ObjGUID = ean.GUID AND a.objTable = 'erp_area_nodes'
    WHERE n.GUID = _GUID

    UNION
    --  dodajemy platnika z danych z opng - nie jest on w tabeli KSEF_GET_PODMIOTY_3
    SELECT
      -- _VarStr(if(n.kontrah_ksef_jst=1 or n.kontrah_ksef_gv=1, if(n.rodzaj in (1,3), k.nip,''),'') ) as P3_NIP,
      _VarStr('') AS P3_IDWew,
      k.nip AS P3_NIP,
      _VarStr(if(n.rodzaj in (80,90),IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',LEFT(k.nip,2),''),'')) as P3_KodUE,
      _VarStr(if(n.rodzaj in (80,90), IF(LEFT(k.nip,1) NOT REGEXP '^[0-9]' AND k.nip <> 'brak',SUBSTRING(k.nip,3),''),'')) as P3_NrVatUe,
      _VarStr(if(n.rodzaj in (50,90), k.nip,'')) as P3_NrID,
      _VarStr(if(n.rodzaj in (50,90) and k.nip='','1','')) as P3_BrakID,
      -- _VarStr(if(n.kontrah_ksef_jst=1 or n.kontrah_ksef_gv=1, left(k.nazwa,512),'') ) as P3_Nazwa,
      k.nazwa AS P3_Nazwa,
      -- _VarStr(if(n.kontrah_ksef_jst=1 or n.kontrah_ksef_gv=1, k.isocountrycode,'') ) as P3_KodKraju,
      k.isocountrycode as P3_KodKraju,
      -- _VarStr(if(n.kontrah_ksef_jst=1 or n.kontrah_ksef_gv=1, k.ulica,'') ) as P3_AdresL1,
      k.ulica as P3_AdresL1,
      _VarStr(if(n.kontrah_ksef_jst=1 or n.kontrah_ksef_gv=1, concat(k.zipcode, ' ', k.NazwaMiasta),'')) as P3_AdresL2,
      _VarStr(k.GLN) as P3_GLN,
      '6' as Rola, -- 6 to platnik, tak wynika ze specyfikacji, ale glowy nie dam
      k.guid as P3_KontrahGuid,
      k.nie_jest_kontrahentem_ksef as P3_nie_jest_kontrahentem_ksef
    FROM opng n
    join kontrah k on k.guid = n.platnikguid
    WHERE n.GUID = _GUID AND n.kontrGUID <> n.platnikGUID
    ;
  END IF;

END IF;

/*
CALL m_api('KSEF_GET_OPNG_VAT',@guid,'','','','','','DEBUG');
pobranie danych vat dokumentu opng do ksef
*/
IF _MODE = 'KSEF_GET_OPNG_VAT' THEN
    SET @mode=_MODE;

    SELECT kurs, rodzaj, waluta into _kurs_op, _rodzaj, @waluta_dok FROM opng where GUID = _GUID;

    IF _rodzaj IN (3,4,85,90) THEN
        SET _korekta = 1;
    ELSE
        SET _korekta = 0;
    END IF;

    -- SET @nowy_naglowek_op = IFNULL(@nowy_naglowek_op,'nie'); tego raczej nie powinno byc, ale moze do zaliczkowych

    DROP TEMPORARY TABLE IF EXISTS t_opng_vat;
	CREATE TEMPORARY TABLE t_opng_vat (
	-- IdnOper VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'GUID operacji',
    IdVat INT(11) NOT NULL DEFAULT '0' COMMENT 'ID stawki VAT',
    Netto DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'Wart. Netto',
    Vat DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'Wart. Vat',
    Brutto DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'Wart. Brutto',
    NettoWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'Wart. Netto w walucie',
    VatWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'Wart. Vat w walucie',
    BruttoWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'Wart. Brutto w walucie',
    stawka DECIMAL(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'stawka vat w sensie wartosci liczbowej',
    -- OperCount INT(11) NOT NULL DEFAULT '0' COMMENT 'Ile operacji',
    -- Fixed INT(11) NOT NULL DEFAULT '0' COMMENT '0 - normalnie naliczony rekord, 1 - ustalony/skorygowany przez uzytkownika',
    -- PRIMARY KEY (IdnOper,IdVat),
    KEY IdVat (IdVat)
    ) DEFAULT CHARSET=utf8
	;

    IF _korekta = 0 THEN
    -- czolgowe obejscie problemu zaokraglen przy braku kwot walutowych, dla kursu=1
        if (_kurs_op = 1) then
            insert into t_opng_vat
            SELECT n.IdVat, n.Netto, n.Vat, n.Brutto,
                if(n.NettoWal=0, n.Netto, n.NettoWal) as NettoWal,
                if(n.VatWal=0, n.Vat, n.VatWal) as VatWal,
                if(n.BruttoWal=0, n.Brutto, n.BruttoWal) as BruttoWal,
                -- v.name as name, v.shortname as idnVatStr,
                v.value as stawka
            FROM opng_vat n
            INNER JOIN v_erp_vat v ON v.id = n.idvat
            INNER JOIN oppo p ON (p.idnoper = n.idnoper OR p.idnoperfin = n.idnoper) AND n.idvat = p.idnvat
            WHERE n.idnoper = _GUID
            GROUP BY n.IdVat;
        end if;


        if (_kurs_op <> 1) then
            insert into t_opng_vat
            SELECT n.IdVat, n.Netto, n.Vat, n.Brutto,
                if(n.NettoWal=0 and n.Netto<>0, sum(p.wartnetwal), n.NettoWal) as NettoWal,
                if(n.VatWal=0 and n.Vat<>0, _Rnd2(sum(p.wartnetwal)*(v.value)), n.VatWal) as VatWal,
                if(n.BruttoWal=0 and n.Brutto<>0, _Rnd2(sum(p.wartnetwal) + _Rnd2(sum(p.wartnetwal)*(v.value))), n.BruttoWal) as BruttoWal,
                -- v.name as name, v.shortname as idnVatStr,
                v.value as stawka
            FROM opng_vat n
            INNER JOIN v_erp_vat v ON v.id = n.idvat
            INNER JOIN oppo p ON (p.idnoper = n.idnoper OR p.idnoperfin = n.idnoper) AND n.idvat = p.idnvat
            WHERE n.idnoper = _GUID
            GROUP BY n.IdVat;
        end if;
    END IF; -- _korekta = 0

   -- dla korekt trzeba zupelnie inaczej, z drugiej strony nie ma czesciowych pozycji i braku kwot walutowych
    IF _korekta = 1 THEN
        insert into t_opng_vat

        SELECT n.IdVat, n.Netto, n.Vat, n.Brutto, n.NettoWal, n.VatWal, n.BruttoWal,
            -- v.name as name, v.shortname as idnVatStr,
            v.value as stawka
        FROM opng_vat n
        INNER JOIN v_erp_vat v ON v.id = n.idvat
        WHERE n.idnoper = _GUID
        GROUP BY n.IdVat;

    END IF;

    SELECT
    -- 23% i 22%
    MAX(if(v.idvat in (15,0),if(@waluta_dok != 0,v.nettowal,v.netto),'')) as P_13_1,
    MAX(if(v.idvat in (15,0),if(@waluta_dok != 0,v.vatwal,v.vat),'')) as P_14_1,
    MAX(if(v.idvat in (15,0) and @waluta_dok != 0,v.vat,'')) as P_14_1W,
    -- 8%
    MAX(if(v.idvat in (16,1),if(@waluta_dok != 0,v.nettowal,v.netto),'')) as P_13_2,
    MAX(if(v.idvat in (16,1),if(@waluta_dok != 0,v.vatwal,v.vat),'')) as P_14_2,
    MAX(if(v.idvat in (16,1) and @waluta_dok != 0,v.vat,'')) as P_14_2W,
    -- 5%
    MAX(if(v.idvat in (8),if(@waluta_dok != 0,v.nettowal,v.netto),'')) as P_13_3,
    MAX(if(v.idvat in (8),if(@waluta_dok != 0,v.vatwal,v.vat),'')) as P_14_3,
    MAX(if(v.idvat in (8) and @waluta_dok != 0,v.vat,'')) as P_14_3W,
    -- 0%
    CASE WHEN @session.globals.Owner IN ('CRIST') THEN
      if(@rodzaj in (1,3,50,90), MAX(if(v.idvat in (2),v.nettowal,'')),'')
    ELSE
      if(@rodzaj in (1,3), MAX(if(v.idvat in (2),v.nettowal,'')),'') 
    END as P_13_6_1,   
    
    if(@rodzaj in (80,85), MAX(if(v.idvat in (2),v.nettowal,'')),'') as P_13_6_2,

    CASE WHEN @session.globals.Owner not IN ('CRIST') THEN
      if(@rodzaj in (50,90), MAX(if(v.idvat in (2),v.nettowal,'')),'') 
    END as P_13_6_3,


    -- zw
    MAX(if(v.idvat in (3),v.nettowal,'')) as P_13_7,
    -- np
    -- case when @session.globals.Owner IN ('CRIST') then
    --   MAX(if(v.idvat in (6),v.netto,''))
    -- else
    --   MAX(if(v.idvat in (5),v.netto,'')) end as P_13_8,
    CASE WHEN @session.globals.Owner IN ('LACZPOL') THEN
      ''
    ELSE
      MAX(if(v.idvat in (5) and @rodzaj in (50,90),v.nettowal,''))
    END as P_13_8,

    CASE WHEN @session.globals.Owner IN ('LACZPOL') THEN
    MAX(if(v.idvat in (5),v.nettowal,''))
    when @session.globals.Owner IN ('CRIST') THEN
    MAX(if(v.idvat in (6),v.nettowal,''))
    ELSE
    MAX(if(v.idvat in (5) and @rodzaj not in (50,90),v.nettowal,''))
    END as P_13_9,
    -- oo
    MAX(if(v.idvat in (19),v.nettowal,'')) as P_13_10
    FROM t_opng_vat v
    ORDER BY v.stawka DESC
    ;

    DROP TEMPORARY TABLE IF EXISTS t_opng_vat;

/*
    IF @rodzaj in (1,3) THEN
      SELECT 
          -- 23% i 22%
          MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.nettowal,'')) as P_13_1,
          MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.vatwal,'')) as P_14_1,
          MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.vat,'')) as P_14_1W,
          -- 8%
          MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.nettowal,'')) as P_13_2,
          MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.vatwal,'')) as P_14_2,
          MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.vat,'')) as P_14_2W,
          -- 5%
          MAX(if(v.idvat in (8) and e.country_code = 'PL',v.nettowal,'')) as P_13_3,
          MAX(if(v.idvat in (8) and e.country_code = 'PL',v.vatwal,'')) as P_14_3,
          MAX(if(v.idvat in (8) and e.country_code = 'PL',v.vat,'')) as P_14_3W,
          -- 0%
          MAX(if(v.idvat in (2) and e.country_code = 'PL',v.netto,'')) as P_13_6_1,
          -- zw
          MAX(if(v.idvat in (3) and e.country_code = 'PL',v.netto,'')) as P_13_7,
          -- np
          MAX(if(v.idvat in (5) and e.country_code = 'PL',v.netto,'')) as P_13_8,
          -- oo
          MAX(if(v.idvat in (19) and e.country_code = 'PL',v.netto,'')) as P_13_10
      FROM opng_vat v
      JOIN erp_vat e ON e.id = v.idvat
      WHERE idnoper = _GUID
      GROUP BY v.idnoper;
    ELSEIF @rodzaj IN (80,85) THEN
      SELECT 
          -- 23%
          MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.nettowal,'')) as P_13_1,
          MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.vatwal,'')) as P_14_1,
          MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.vat,'')) as P_14_1W,
          -- 8%
          MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.nettowal,'')) as P_13_2,
          MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.vatwal,'')) as P_14_2,
          MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.vat,'')) as P_14_2W,
          -- 5%
          MAX(if(v.idvat in (8) and e.country_code = 'PL',v.nettowal,'')) as P_13_3,
          MAX(if(v.idvat in (8) and e.country_code = 'PL',v.vatwal,'')) as P_14_3,
          MAX(if(v.idvat in (8) and e.country_code = 'PL',v.vat,'')) as P_14_3W,
          -- 0%
          MAX(if(v.idvat in (2) and e.country_code = 'PL',v.netto,'')) as P_13_6_2,
          -- zw
          MAX(if(v.idvat in (3) and e.country_code = 'PL',v.netto,'')) as P_13_7,
          -- np
          MAX(if(v.idvat in (5) and e.country_code = 'PL',v.netto,'')) as P_13_8,
          -- oo
          MAX(if(v.idvat in (19) and e.country_code = 'PL',v.netto,'')) as P_13_9
      FROM opng_vat v
      JOIN erp_vat e ON e.id = v.idvat
      WHERE idnoper = _GUID
      GROUP BY v.idnoper;
      ELSEIF @rodzaj IN (50,90) THEN
        SELECT 
            -- 23%
            MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.nettowal,'')) as P_13_1,
            MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.vatwal,'')) as P_14_1,
            MAX(if(v.idvat in (15,0) and e.country_code = 'PL',v.vat,'')) as P_14_1W,
            -- 8%
            MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.nettowal,'')) as P_13_2,
            MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.vatwal,'')) as P_14_2,
            MAX(if(v.idvat in (16,1) and e.country_code = 'PL',v.vat,'')) as P_14_2W,
            -- 5%
            MAX(if(v.idvat in (8) and e.country_code = 'PL',v.nettowal,'')) as P_13_3,
            MAX(if(v.idvat in (8) and e.country_code = 'PL',v.vatwal,'')) as P_14_3,
            MAX(if(v.idvat in (8) and e.country_code = 'PL',v.vat,'')) as P_14_3W,
            -- 0%
            MAX(if(v.idvat in (2) and e.country_code = 'PL',v.netto,'')) as P_13_6_3,
            -- zw
            MAX(if(v.idvat in (3) and e.country_code = 'PL',v.netto,'')) as P_13_7,
            -- np
            MAX(if(v.idvat in (5) and e.country_code = 'PL',v.netto,'')) as P_13_8,
            -- oo
            MAX(if(v.idvat in (19) and e.country_code = 'PL',v.netto,'')) as P_13_9
        FROM opng_vat v
        JOIN erp_vat e ON e.id = v.idvat
        WHERE idnoper = _GUID
        GROUP BY v.idnoper;
    END IF;
*/

END IF;

/*
CALL m_api('KSEF_GET_OPPO',@guid,'','','','','','DEBUG');
pobranie danych pozycji dokumentu do ksef
*/
-- pozycje zupełnie po nowemu, z wykorzystaniem fr_ht_OP
IF _MODE = 'KSEF_GET_OPPO' THEN
    SET @session.grupowanie.pozycji = NULL;

    SELECT rodzaj, kurs INTO @rodzaj, _kurs_op
    FROM opng WHERE guid = _GUID LIMIT 1;

    SELECT k.idn INTO @tytulkorekty
    FROM powody_korekty k, opng n WHERE n.guid = _GUID AND n.korektatytulem = k.nazwa LIMIT 1;

    SET @tytulkorekty = IFNULL(@tytulkorekty, 0);

    -- tytul korekty -1 oznacza korygowanie tylko danych kontrahenta (dawniej przez note korygujaca), bez ruszania pozycji 
    -- do ksef ida wtedy dwa wiersze bez zmian w ogole, - to jest do dorobienia

    -- korekty maja zupełnie osobna sciezke
    IF @rodzaj in (3, 4, 85,90) and @tytulkorekty != -10 THEN
        CALL ht_pr_STCorr('GetCorrPoz', _GUID, 'KSEF', '', '', '');
        -- select * from t_korpoz;

      SET @r_numeration := 0;
      UPDATE t_korpoz t
      JOIN (
        SELECT 
          GUID_orig,
          (@r_numeration := @r_numeration + 1) AS new_lp
        FROM t_korpoz
        ORDER BY GUID_orig
      ) x ON x.GUID_orig = t.GUID_orig
      SET t.lp = x.new_lp;

      SELECT * from (
        SELECT
        c.LP as NrWierszaFa,
        c.idnoperfin,
        c.towrGUID as UU_ID,

        case when @session.globals.Owner IN ('SEVENET') then
        c.b_towrnazwa2
        when @session.globals.Owner IN ('TRANSBUD') then
        concat(c.b_towrnazwa, ' ', c.katcol5str)
        else
        c.b_towrnazwa
        end as P_7,

        -- c.b_towrsymb as Indeks,
        case when @session.globals.Owner IN ('SEVENET','LACZPOL','ZREMB','AXIS','TRANSBUD','SECURITY', 'PLISZKA','WEGA','COMEX') then
        ''
        else
        left(c.b_towrsymb,50)
        end as Indeks,

        -- c.b_kod_kreskowy as GTIN,
        case when @session.globals.Owner IN ('KONKOL') then t.kod_kreskowy1
        when @session.globals.Owner IN ('AMICUS','WEGA') then ''
        ELSE IFNULL(c.b_kod_kreskowy,'')
        END as GTIN,
        -- c.b_pkwiu as PKWiU,
        case when @session.globals.Owner IN ('KONKOL','JARZEBINSCY') then ''
        else IFNULL(c.b_pkwiu, '')
        END as PKWiU,
        case when @session.globals.Owner IN ('AMICUS','SIMEX','JARZEBINSCY','AXIS','COMEX') then ''
        else IFNULL(c.pcn, '')
        end as CN,
        c.b_jednostkaStr as P_8A,
        c.b_ilosc as P_8B,
        _RND2(c.b_cenanetwal) as P_9A,
        -- c.b_wartnet as P_11,
        _RND2(c.b_wartnetwal) as P_11,
        -- c.b_wartbrt as  P_11A,
        _RND2(c.b_wartbrtwal) as  P_11A,
        -- _Rnd2(c.b_wartvat) as  P_11Vat, -- podatek w PLN
        case when @session.globals.Owner IN ('SEVENET') then
        ''
        else
        _Rnd2(c.b_wartvat)
        end AS P_11Vat,

        CASE
          WHEN LOWER(e.shortname) like '0%' THEN
            CASE
              WHEN @rodzaj IN (85) THEN '0 WDT'
              WHEN @session.globals.Owner not in ('CRIST') and @rodzaj IN (50,90) THEN '0 EX'
              ELSE '0 KR'
            END
          WHEN LOWER(e.shortname) LIKE 'zw%' THEN 'zw'
          WHEN LOWER(e.shortname) LIKE 'odw%' THEN 'oo'
          WHEN LOWER(e.shortname) LIKE 'np%' THEN
            CASE
              WHEN @session.globals.Owner IN ('LACZPOL') THEN 'np II'
              WHEN @rodzaj IN (50,90) THEN 'np I'
              ELSE 'np II'
            END
          ELSE replace(e.shortname,'%','')
        END as P_12,
        IF(c.b_kurs <> 1, c.b_kurs, '') AS KursWaluty,
        '1' as StanPrzed
      FROM t_korpoz c
      -- JOIN oppo p ON p.guid = c.guid_orig AND c.changed = 1
      JOIN TowrNg t ON t.guid = c.towrguid
      -- JOIN Jednostki j ON j.idn = c.b_jednostka
      JOIN erp_vat e ON e.id = c.b_idnvat AND e.country_code = 'PL'
      -- GROUP BY c.LP, c.idnoperfin
      -- WHERE c.idnoper_corr = _GUID AND e.country_code = 'PL'

      UNION
      SELECT
        c.LP as NrWierszaFa,
        c.idnoperfin,
        c.towrGUID as UU_ID,

        case when @session.globals.Owner IN ('SEVENET') then
        c.j_towrnazwa2
        when @session.globals.Owner IN ('TRANSBUD') then
        concat(c.j_towrnazwa, ' ', c.katcol5str)
        else
        c.j_towrnazwa
        end as P_7,

        -- c.j_towrsymb as Indeks,
        case when @session.globals.Owner IN ('SEVENET','LACZPOL','ZREMB','AXIS','TRANSBUD','SECURITY', 'PLISZKA','WEGA','COMEX') then
        ''
        else
        left(c.j_towrsymb,50)
        end as Indeks,

        -- c.j_kod_kreskowy as GTIN,
        case when @session.globals.Owner IN ('KONKOL') then t.kod_kreskowy1
        when @session.globals.Owner IN ('AMICUS','WEGA') then ''
        ELSE IFNULL(c.j_kod_kreskowy,'')
        END as GTIN,

        -- c.j_pkwiu as PKWiU,
        case when @session.globals.Owner IN ('KONKOL','JARZEBINSCY') then ''
        else IFNULL(c.j_pkwiu, '')
        END as PKWiU,

        case when @session.globals.Owner IN ('AMICUS','SIMEX','JARZEBINSCY','AXIS','COMEX') then ''
        else IFNULL(c.pcn, '')
        end as CN,
        c.j_jednostkaStr AS P_8A,
        c.j_ilosc as P_8B,
        _RND2(c.j_cenanetwal) as P_9A,
        _RND2(c.j_wartnetwal) as P_11,
        _RND2(c.j_wartbrtwal) as  P_11A,
        -- _Rnd2(c.j_wartvat) as  P_11Vat, -- podatek w PLN
        case when @session.globals.Owner IN ('SEVENET') then
        ''
        else
        _Rnd2(c.j_wartvat)
        end AS P_11Vat,

        CASE
          WHEN LOWER(e.shortname) like '0%' THEN
            CASE
              WHEN @rodzaj IN (85) THEN '0 WDT'
              WHEN @session.globals.Owner not in ('CRIST') and @rodzaj IN (50,90) THEN '0 EX'
              ELSE '0 KR'
            END
          WHEN LOWER(e.shortname) LIKE 'zw%' THEN 'zw'
          WHEN LOWER(e.shortname) LIKE 'odw%' THEN 'oo'
          WHEN LOWER(e.shortname) LIKE 'np%' THEN
            CASE
              WHEN @session.globals.Owner IN ('LACZPOL') THEN 'np II'
              WHEN @rodzaj IN (50,90) THEN 'np I'
              ELSE 'np II'
            END
          ELSE replace(e.shortname,'%','')
        END as P_12,
        IF(c.j_kurs <> 1, c.j_kurs, '') AS KursWaluty,
        '' as StanPrzed
      FROM t_korpoz c
      -- JOIN oppo p ON p.guid = c.guid_orig AND c.changed = 1
      JOIN TowrNg t ON t.guid = c.towrguid
      -- JOIN Jednostki j ON j.idn = c.j_jednostka
      JOIN erp_vat e ON e.id = c.j_idnvat AND e.country_code = 'PL'
      -- GROUP BY c.LP, c.idnoperfin
      
      ORDER BY NrWierszaFa, StanPrzed DESC) as a
      group by a.NrWierszaFa, a.idnoperfin,  a.StanPrzed
      order by a.NrWierszaFa asc,a.idnoperfin asc, a.StanPrzed desc

      ;

    END IF; -- koniec korekt

    -- faktury, nie korekty
    IF NOT (@rodzaj in (3,85,90) and @tytulkorekty != -10) THEN
    -- wywolujemy pozycje, co ustawia od razu klucz grupowania
        CALL fr_ht_OP ('OP_PO_DEFAULT', _GUID,'','',0,'KSEF','','','');

        IF @session.grupowanie.pozycji = '10' THEN -- grupowanie internalne jest robione tylko dla NIE korekt
            -- CALL fr_ht_OPZM('GRUPOWANIE_INTERNALNE', _GUID, _scenario, _translate, 'KSEF', _Param_B, _Param_C, _Param_D);
            -- z parametrem KSEF procedura tylko przygotowuje tabele tymczasowe, do wykorzystania dalej
            -- CALL fr_ht_OPZM('GRUPOWANIE_INTERNALNE', _GUID, '', '', 'KSEF', '', '', '');

            -- select * from t_oppo_grp_prn;

            SET @r_numeration := 0;
              UPDATE t_oppo_grp_prn t
              JOIN (
                SELECT 
                  GUID,
                  (@r_numeration := @r_numeration + 1) AS new_lp
                FROM t_oppo_grp_prn
                ORDER BY GUID
              ) x ON x.GUID = t.GUID
              SET t.lp = x.new_lp;

            SELECT
            p.lp as NrWierszaFa,
            -- p.guid as UU_ID,
            '' as UU_ID, -- wyrzucamy jako zbedne
            -- p.datasprzed as P_6A,
            '' as P_6A, -- indywidualna data sprzedazy, nie obslugujemy tego na razie

            case when @session.globals.Owner IN ('SEVENET') then
            p.towrnazwa2
            when @session.globals.Owner IN ('SEVENET') and ifnull(p.grp_towrnazwa,'') != '' then
            p.grp_towrnazwa
            when @session.globals.Owner IN ('TRANSBUD') then
            concat(if(ifnull(p.grp_towrnazwa,'')='', p.towrnazwa,p.grp_towrnazwa), ' ', ifnull((select kc.valuex from katcols kc where kc.typ=1 and kc.colnr=1 and kc.klucz = p.kat5),''))
            else p.towrnazwa
            end as P_7,

            case when @session.globals.Owner IN ('SEVENET','LACZPOL','ZREMB','AXIS','TRANSBUD','SECURITY', 'PLISZKA','WEGA','COMEX') then
            ''
            else
            left(p.towrsymb,50)
            end as Indeks,
            
            case when @session.globals.Owner IN ('KONKOL') then IFNULL(t.kod_kreskowy1,'')
            when @session.globals.Owner IN ('AMICUS','WEGA') then ''
            ELSE IFNULL(t.kod_kreskowy,'')
            END as GTIN,

            case when @session.globals.Owner IN ('KONKOL','JARZEBINSCY') then ''
            else IFNULL(t.pkwiu, '') 
            END as PKWiU,

            case when @session.globals.Owner IN ('AMICUS','SIMEX','JARZEBINSCY','AXIS','COMEX') then ''
            else IFNULL(t.pcn,'')
            end as CN,
            IF(IFNULL(j.nazwa,'')='','szt.',j.nazwa) AS P_8A,
            p.ilosc as P_8B,
            -- p.cenanet as P_9A,
            _RND2(p.cenanetwal) as P_9A,
            -- p.wartnet as P_11,
            _RND2(p.wartnetwal) as P_11,
            -- wartbrt as  P_11A,
            _RND2(p.wartbrtwal) as  P_11A,
            -- _Rnd2(p.wartvat) as  P_11Vat, -- podatek w PLN
            case when @session.globals.Owner IN ('SEVENET') then
            ''
            else
            _Rnd2(p.wartvat)
            end AS P_11Vat,
            CASE
                WHEN LOWER(e.shortname) like '0%' THEN
                CASE
                    WHEN @rodzaj IN (80,85) THEN '0 WDT'
                    WHEN @session.globals.Owner not in ('CRIST') and @rodzaj IN (50,90) THEN '0 EX'
                    ELSE '0 KR'
                END
                WHEN LOWER(e.shortname) LIKE 'zw%' THEN 'zw'
                WHEN LOWER(e.shortname) LIKE 'odw%' THEN 'oo'
                WHEN LOWER(e.shortname) LIKE 'np%' THEN
                  CASE
                    WHEN @session.globals.Owner IN ('LACZPOL') THEN 'np II'
                    WHEN @rodzaj IN (50,90) THEN 'np I'
                    ELSE 'np II'
                  END
                ELSE replace(e.shortname,'%','')
            END as P_12,
            IF(kurs <> 1, kurs, '') AS KursWaluty
            FROM t_oppo_grp_prn p
            LEFT JOIN TowrNg t ON t.guid = p.idntowr -- tutaj moze byc problem, bo bez left wycina pozycje grupowane
            -- ale za to teraz brakuje czesci danych z kartoteki towarow
            LEFT JOIN Jednostki j ON j.idn = p.jednostka
            JOIN erp_vat e ON e.id = p.idnvat AND e.country_code = 'PL'
            WHERE p.idnoperfin = _GUID
            ORDER BY NrWierszaFa;

        END IF; -- grupowanie internalne

        IF @session.grupowanie.pozycji in ('0','1','2') THEN
            SET @rn := 0;

            -- wymuszenie przenumerowania pozycji faktury
            IF @session.globals.Owner IN ('SECURITY') THEN
              SET @rownum := 0;
              UPDATE t_poz t
              JOIN (
                  SELECT idn, (@rownum := @rownum + 1) AS new_lp
                  FROM t_poz
                  ORDER BY lp
              ) x ON t.idn = x.idn
              SET t.lp = x.new_lp;
            END IF;

            SELECT
            case when @session.globals.Owner IN ('KONKOL') then
            -- ROW_NUMBER() OVER (ORDER BY p.towrsymb) -- nie w starych serwerach
            (@rn := @rn + 1) 
            else
            p.lp end as NrWierszaFa,
            p.guid as UU_ID,
            -- p.datasprzed as P_6A,
            '' as P_6A, -- indywidualna data sprzedazy, nie obslugujemy tego na razie

            case when @session.globals.Owner IN ('SEVENET') then
            p.towrnazwa2
            when @session.globals.Owner IN ('TRANSBUD') then
            concat(p.towrnazwa, ' ', ifnull((select kc.valuex from katcols kc where kc.typ=1 and kc.colnr=1 and kc.klucz = p.kat5),''))
            else p.towrnazwa
            end as P_7,

            case when @session.globals.Owner IN ('SEVENET','LACZPOL','ZREMB','AXIS', 'TRANSBUD','SECURITY', 'PLISZKA','WEGA','COMEX') then
            ''
            else
            left(p.towrsymb,50)
            end as Indeks,

            case when @session.globals.Owner IN ('KONKOL') then IFNULL(t.kod_kreskowy1,'')
            when @session.globals.Owner IN ('AMICUS','WEGA') then ''
            ELSE IFNULL(t.kod_kreskowy,'') 
            END as GTIN,

            case when @session.globals.Owner IN ('KONKOL','JARZEBINSCY') then ''
            else IFNULL(t.pkwiu, '') 
            END as PKWiU,
            case when @session.globals.Owner IN ('AMICUS','SIMEX','JARZEBINSCY','AXIS','COMEX') then ''
            else IFNULL(t.pcn, '') 
            end as CN,
            -- IF(IFNULL(j.nazwa,'')='','szt.',j.nazwa) AS P_8A,
            p.Jednostka AS P_8A,
            p.ilosc as P_8B,
            -- p.cenanet as P_9A,
            _Rnd2(if(p.cenanetwalzrab=0, if(p.wartnetwal!=0,p.wartnetwal/p.ilosc,0), p.cenanetwalzrab)) as P_9A,
            -- p.wartnet as P_11,
            _RND2(p.wartnetwal) as P_11,
            -- wartbrt as  P_11A,
            _RND2(p.wartbrtwal) as  P_11A,
            -- IF(_kurs_op <> 1, _Rnd2(p.wartvat), '') as P_11Vat, -- podatek w PLN
            case when @session.globals.Owner IN ('SEVENET') then
            ''
            else
            _Rnd2(p.wartvat)
            end AS P_11Vat,

            CASE
                WHEN LOWER(e.shortname) like '0%' THEN
                CASE
                    WHEN @rodzaj IN (80,85) THEN '0 WDT'
                    WHEN @session.globals.Owner not in ('CRIST') and @rodzaj IN (50,90) THEN '0 EX'
                    ELSE '0 KR'
                END
                WHEN LOWER(e.shortname) LIKE 'zw%' THEN 'zw'
                WHEN LOWER(e.shortname) LIKE 'odw%' THEN 'oo'
                WHEN LOWER(e.shortname) LIKE 'np%' THEN
                  CASE
                    WHEN @session.globals.Owner IN ('LACZPOL') THEN 'np II'
                    WHEN @rodzaj IN (50,90) THEN 'np I'
                    ELSE 'np II'
                  END
                ELSE replace(e.shortname,'%','')
            END as P_12,
            IF(kurs <> 1, kurs, '') AS KursWaluty
            FROM t_poz p
            JOIN TowrNg t ON t.guid = p.idntowr
            -- LEFT JOIN Jednostki j ON j.idn = p.jednostka
            JOIN erp_vat e ON e.id = p.idnvat AND e.country_code = 'PL'
            -- WHERE p.idnoperfin = _GUID
            ORDER BY NrWierszaFa;
        END IF; -- grupowanie 0, 1, 2

    END IF; -- koniec faktur

END IF; -- koniec KSEF_GET_OPPO

/*
CALL m_api('KSEF_GET_UWAGI',@guid,'','','','','','DEBUG');
pobranie uwag do faktury i do pozycji do ksef
uwagi potem sa w jednej sekcji DodatkowyOpis, z numerem wiersza (dla pozycji) i bez numeru (dla uwag faktury)
co ze znakami zakazanymi w xml? robic to tutaj czy caly plik jest potem sprawdzany?
*/
IF _MODE = 'KSEF_GET_UWAGI' THEN
    SET @mode=_MODE;

    DROP TABLE IF EXISTS tt_ksef_uwagi;
    CREATE TEMPORARY TABLE tt_ksef_uwagi (
    NrWiersza VARCHAR(10) DEFAULT '',
    Klucz VARCHAR(256) DEFAULT '',
    Wartosc VARCHAR(256) DEFAULT '',
    lp INT DEFAULT NULL -- wewnetrzna numeracja czesci uwagi, do sortowania
    ) DEFAULT CHARSET=utf8;

    SET _dl_max = 256; -- maksymalna dlugosc sekcji, wynika ze sepcyfikacji ksef, uwaga z deklaracja zmiennej _czesc

    -- na razie uwagi do calej faktury

    SELECT IFNULL(CHAR_LENGTH(if(@session.globals.Owner IN ('SIMEX'),uwagi2, uwagi)), 0), 
    if(@session.globals.Owner IN ('SIMEX'),uwagi2, uwagi)
    INTO _dl, _uwagi
    FROM opng
    WHERE guid = _GUID;
    SET _i = 1, _lp = 1;

    WHILE _i <= _dl DO
        -- 1. Wycinamy czyste 256 znakow
        SET _czesc = SUBSTRING(_uwagi, _i, _dl_max);

        -- 2. Escapujemy znaki specjalne
        SET _czesc = _escape_to_xml(_czesc);

        -- 3. wstawiamy do tabeli tymczasowej
        insert into tt_ksef_uwagi
        SELECT
        '' AS NrWiersza,
        'Uwagi_do_faktury' AS Klucz,
        _czesc AS Wartosc,
        _lp as lp
        ;
        SET _i = _i + _dl_max;
        SET _lp = _lp +1;
    END WHILE;

    -- NrKlienta dla SECURITY - poza pętlą, niezależnie od tego czy są uwagi do faktury
    IF (@session.globals.Owner IN ('SECURITY')) THEN
        INSERT INTO tt_ksef_uwagi
        SELECT
        '' AS NrWiersza,
        'NrKlienta' AS Klucz,
        concat('NrKlienta: ', kontrsymbol) AS Wartosc,
        99 AS lp FROM opng WHERE guid = _GUID;
    END IF;

    IF @session.globals.Owner IN ('TRANSBUD') THEN

      SELECT DATABASE() into @ksef_db;
      IF @ksef_db = 'ht' THEN
        SELECT IFNULL(CHAR_LENGTH(if(ifnull(k.valuex,'')='ppw','Pośredniczący podmiot węglowy',k.valuex)), 0), if(ifnull(k.valuex,'')='ppw','Pośredniczący podmiot węglowy',
            concat('Przeznaczenie nabywanych wyrobów węglowych - ',k.valuex))
          INTO _dl, _uwagi
          FROM opng n
          join katcols k on k.typ = 0 and k.colnr = 1 and k.klucz = n.katcol0 and k.valuex != 'Akcyza'
          WHERE n.guid = _GUID;
          SET _i = 1, _lp = 1;
      ELSEIF @ksef_db = 'skweglazoosk' THEN
        SELECT IFNULL(CHAR_LENGTH(if(ifnull(k.valuex,'')='ppw','Pośredniczący podmiot węglowy',k.valuex)), 0), if(ifnull(k.valuex,'')='ppw','Pośredniczący podmiot węglowy',
            concat('Przeznaczenie nabywanych wyrobów węglowych - ',k.valuex))
          INTO _dl, _uwagi
          FROM opng n
          join katcols k on k.typ = 0 and k.colnr = 5 and k.klucz = n.katcol4 and k.valuex != 'Akcyza'
          WHERE n.guid = _GUID;
          SET _i = 1, _lp = 1;
      END IF;


        WHILE _i <= _dl DO
            -- 1. Wycinamy czyste 256 znakow
            SET _czesc = SUBSTRING(_uwagi, _i, _dl_max);

            -- 2. Escapujemy znaki specjalne
            SET _czesc = _escape_to_xml(_czesc);

            -- 3. wstawiamy do tabeli tymczasowej
            insert into tt_ksef_uwagi
            SELECT
            '' AS NrWiersza,
            'Przeznaczenie' AS Klucz,
            _czesc AS Wartosc,
            _lp as lp
            ;

            SET _i = _i + _dl_max;
            SET _lp = _lp +1;
        END WHILE;
    END IF;


    -- uwagi do pozycji, moze ich byc wiele, wybieramy te, ktore istnieja do kursora, potem jak wyzej, ale z nr wiersza

    IF @session.globals.Owner IN ('SECURITY') THEN
      IF @rodzaj IN (3,4,85,90) THEN
        INSERT INTO tt_ksef_uwagi
        SELECT lp as NrWiersza, 'lokalizacja' AS typ, left(concat(areasymbol,' ',areanazwa),256) AS wartosc, lp as lp
        FROM t_korpoz
        UNION ALL
        SELECT lp as NrWiersza, 'uwagi było' AS typ, left(b_uwagi,256) AS wartosc, lp as lp
        FROM t_korpoz 
        UNION
        SELECT lp as NrWiersza, 'lokalizacja' AS typ, left(concat(areasymbol,' ',areanazwa),256) AS wartosc, lp as lp
        FROM t_korpoz
        UNION ALL
        SELECT lp as NrWiersza, 'uwagi jest' AS typ, left(j_uwagi,256) AS wartosc, lp as lp
        FROM t_korpoz 
        ORDER BY NrWiersza, typ;
      ELSE
        INSERT INTO tt_ksef_uwagi
        SELECT lp as NrWiersza, 'lokalizacja' AS klucz, left(concat(areasymbol,' ',areanazwa),256) AS wartosc, lp as lp
        FROM t_poz
        UNION ALL
        SELECT lp as NrWiersza, 'uwagi' AS klucz, left(uwagi,256) AS wartosc, lp as lp
        FROM t_poz
        ORDER BY NrWiersza, klucz;
      END IF;
    
    ELSE

      BEGIN
          DECLARE done BOOL DEFAULT FALSE;
          DECLARE _GUIDoppo VARCHAR(38);
          DECLARE c_proc CURSOR FOR
          SELECT GUID FROM oppo WHERE idnoperfin = _GUID AND (IFNULL(CHAR_LENGTH(uwagi), 0) > 1 or (@session.globals.Owner IN ('TRANSBUD') and jednostka = 13));
          DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
          OPEN c_proc;
          loop1: LOOP
              FETCH c_proc INTO _GUIDoppo;
              IF done THEN
              LEAVE loop1;
              END IF;

              SELECT IFNULL(CHAR_LENGTH(uwagi), 0), uwagi, lp
              INTO _dl, _uwagi, _lp_oppo
              FROM oppo
              WHERE guid = _GUIDoppo;
              SET _i = 1, _lp = 1;

              WHILE _i <= _dl DO
                  -- 1. Wycinamy czyste 256 znak贸w
                  SET _czesc = SUBSTRING(_uwagi, _i, _dl_max);

                  -- 2. Escapujemy znaki specjalne
                  SET _czesc = _escape_to_xml(_czesc);

                  -- 3. wstawiamy do tabeli tymczasowej
                  insert into tt_ksef_uwagi
                  SELECT
                  _lp_oppo AS NrWiersza,
                  'Uwagi_do_poz' AS Klucz,
                  _czesc AS Wartosc,
                  _lp as lp
                  ;

                  SET _i = _i + _dl_max;
                  SET _lp = _lp +1;
              END WHILE;

              IF @session.globals.Owner IN ('TRANSBUD') THEN
                SELECT if(jednostka = 13,IFNULL(CHAR_LENGTH(ilosc), 0),0), 
                  if(jednostka = 13, ilosc*1000,0),
                  if(jednostka = 13, lp, 0)
                
                  INTO _dl, _uwagi, _lp_oppo
                  FROM oppo
                  WHERE guid = _GUIDoppo;
                  SET _i = 1, _lp = 1;

                  WHILE _i <= _dl DO
                      -- 1. Wycinamy czyste 256 znak贸w
                      SET _czesc = SUBSTRING(_uwagi, _i, _dl_max);

                      -- 2. Escapujemy znaki specjalne
                      SET _czesc = _escape_to_xml(_czesc);

                      -- 3. wstawiamy do tabeli tymczasowej
                      insert into tt_ksef_uwagi
                      SELECT
                      _lp_oppo AS NrWiersza,
                      'Ilość w kg' AS Klucz,
                      _czesc AS Wartosc,
                      _lp as lp
                      ;

                      SET _i = _i + _dl_max;
                      SET _lp = _lp +1;
                  END WHILE;
              END IF;


          END LOOP;
          CLOSE c_proc;
      END;
    END IF;
    /*
    SELECT
      lp AS NrWiersza,
      'Uwagi_do_poz' AS Klucz,
      uwagi AS Wartosc
    FROM oppo
    WHERE idnoperfin = _GUID AND length(uwagi) > 3
    ORDER BY NrWiersza+0
    ;
    */

    SELECT NrWiersza, Klucz, Wartosc FROM tt_ksef_uwagi WHERE IFNULL(Wartosc, '') != '' ORDER BY NrWiersza + 0, lp;


END IF;


/*
CALL m_api('KSEF_GET_ZAMOWIENIA',@guid,'','','','','','DEBUG');
Pobieranie listy zamówień których dotyczy faktura ksef
  IF @rodzaj in (1,80,50) and @zaliczka = 8 and @zalwartnet > 0 THEN
    SET @rodzajFaktury = 'ZAL';
  ELSEIF @rodzaj in (1,80,50) and @zaliczka = 8 and @zalwartnet < 0 THEN
    SET @rodzajFaktury = 'ROZ';
  ELSEIF @rodzaj in (3,85,90) and @zaliczka = 8 and @zalwartnet < 0 THEN
    SET @rodzajFaktury = 'KOR_ZAL';
  ELSEIF @rodzaj in (3,85,90) and @zaliczka = 8 and @zalwartnet > 0 THEN
    SET @rodzajFaktury = 'KOR_ROZ';
  ELSEIF @rodzaj in (1,80,50,5,6) THEN
    SET @rodzajFaktury = 'VAT';
  ELSEIF @rodzaj in (3,85,90,7,8,105) THEN
    SET @rodzajFaktury = 'KOR';
  END IF;
*/
IF _MODE = 'KSEF_GET_ZAMOWIENIA' THEN
  SET @mode=_MODE;

  IF @rodzajFaktury in ('VAT','ZAL','ROZ') THEN
    select
    case when @rodzajFaktury in ('VAT') then
      if(ifnull(zn.nrzamwkontr,'')='',zn.nrzamw,zn.nrzamwkontr)
    when @rodzajFaktury in ('ZAL', 'ROZ') then
      zn.nrzamw -- w przypadku zaliczek zawsze tylko nasz numer
    end as numerzam,
    zn.datawystaw as DataZamowienia,
    (select sum(wartbrtwal) from zmpo zn2 where zn2.idnng = zn.guid and zn2.usluga != 8 ) as WartoscZamowienia
    from oppo P 
    LEFT JOIN zmpo zp ON zp.GUID = P.GUIDzm and ifnull(zp.guid,'')!=''
    LEFT JOIN zmng zn ON zn.GUID = zp.IdnNG
    where P.idnoper = _GUID OR P.idnoperfin =  _GUID
    group by numerzam
    HAVING numerzam IS NOT NULL AND numerzam != '';
  ELSE
    select
    case when @rodzajFaktury in ('KOR') then
      if(ifnull(zn.nrzamwkontr,'')='',zn.nrzamw,zn.nrzamwkontr)
    when @rodzajFaktury in ('KOR_ZAL', 'KOR_ROZ') then
      zn.nrzamw -- w przypadku zaliczek zawsze tylko nasz numer
    end as numerzam,
    zn.datawystaw as DataZamowienia,
    (select sum(wartbrtwal) from zmpo zn2 where zn2.idnng = zn.guid and zn2.usluga != 8 ) as WartoscZamowienia
    from opng n
    LEFT JOIN oppo P on P.idnoper = n.korektaguid or P.idnoperfin = n.korektaguid
    LEFT JOIN zmpo zp ON zp.GUID = P.GUIDzm and ifnull(zp.guid,'')!=''
    LEFT JOIN zmng zn ON zn.GUID = zp.IdnNG
    where n.guid = _GUID
    group by numerzam
    HAVING numerzam IS NOT NULL AND numerzam != '';
  END IF;

END IF;


/*
CALL m_api('KSEF_GET_POZYCJE_ZAMOWIENIA',@guid,'','','','','','DEBUG');
Pobieranie listy zamówień których dotyczy faktura ksef
*/
IF _MODE = 'KSEF_GET_POZYCJE_ZAMOWIENIA' AND @session.globals.Owner NOT IN ('MARINE','CONRAD') THEN  -- Marine i Conrad nie chcą pozycji zamowien bo to tajemnica (info od TS 2026-05-06)
  SET @mode=_MODE;

  SELECT p2.lp as nrWierszaZam, p2.towrnazwa as P_7Z, j.nazwa as P_8AZ, p2.ilosc as P_8BZ, _RND2(p2.cenanet) as P_9AZ,
    CASE
      WHEN LOWER(e.shortname) like '0%' THEN
        CASE -- brak stawki WDT wedlug dokumentacji pola P_12Z
          WHEN @session.globals.Owner not in ('CRIST') and @rodzaj IN (50,90) THEN '0 EX'
          ELSE '0 KR'
        END
      WHEN LOWER(e.shortname) LIKE 'zw%' THEN 'zw'
      -- OO tylko dla krajowych wedlug dokumentacji pola P_12Z
      WHEN LOWER(e.shortname) LIKE 'odw%' and @rodzaj in (1,3) THEN 'oo'
      WHEN LOWER(e.shortname) LIKE 'np%' or (LOWER(e.shortname) LIKE 'odw%' and @rodzaj not in (1,3)) THEN
        CASE
          WHEN @session.globals.Owner IN ('LACZPOL') THEN 'np II'
          WHEN @rodzaj IN (50,90) THEN 'np I'
          ELSE 'np II'
        END
      ELSE replace(e.shortname,'%','')
    END as P_12Z
	from oppo op1
    JOIN zmpo p1 ON p1.guid = op1.guidzm # AND p1.usluga = 8
    join zmpo p2 on p1.idnng = p2.idnng and p2.usluga != 8
    join Jednostki j on j.idn = p2.jednostka
    join erp_vat e on e.id = p2.idnvat
    WHERE op1.idnoper = _GUID or op1.idnoperfin = _GUID
    order by nrWierszaZam;

END IF;

/*
CALL m_api('KSEF_GET_WZKI',@guid,'','','','','','DEBUG');
Pobieranie listy zamówień których dotyczy faktura ksef.
*/
IF _MODE = 'KSEF_GET_WZKI' THEN
  SET @mode=_MODE;

  SELECT z.nrdokmag as nr_WZ, z.datasprzed as data_WZ
  FROM oppo o INNER JOIN opng z ON z.guid=o.idnoper 
  AND o.idnoper != o.idnoperfin and o.rodzaj = 10
  WHERE o.idnoperfin = _GUID
  group by nrdokmag;

END IF;


/*
CALL m_api('KSEF_GET_ZALICZKI',@guid,'','','','','','DEBUG');
pobranie kont wystawcy faktury - zwraca liste kont jako SELECT (moze byc wiele)
Konto glowne pochodzi z fr_ht_konto (tak samo jak w KSEF_GET_OPNG).
Konto dodatkowe (np. dla faktur dwuwalutowych) pochodzi z banki.idn wskazanego
przez IReg.idkey = 'KSeF-idn_konta_dla_dwuwalutowych'.
*/

IF _MODE = 'KSEF_GET_ZALICZKI' THEN
    SET @mode = _MODE, @_walutabanku = '';

    SELECT op1.guid, op2.idnoper, n2.guid, n2.nrdokfin, n2.numerksef,
    if(ifnull(numerksef,'')='','1','') as NrKSeFZN, n2.numerksef as NrKSeFFaZaliczkowej,  n2.nrdokfin as NrFaZaliczkowej
    from oppo op1
    JOIN zmpo p1 ON p1.guid = op1.guidzm AND p1.usluga = 8 -- poz zal konc
    JOIN zmpo p2 ON p1.idnng = p2.idnng AND p2.usluga = 8 AND p1.guid != p2.guid and p2.wartnet > 0 -- poz zam zal zaliczkowych
    JOIN oppo op2 ON op2.guidzm = p2.guid
    join opng n2 on n2.guid = op2.idnoper
    WHERE op1.idnoper = _GUID or op1.idnoperfin = _GUID;

END IF;

/*
CALL m_api('KSEF_SET_TRYB_WYSYLKI',@guid,'','','','','','DEBUG');
Dostepne tryby na 2026-04
0 - brak (tylko załączniki)
1 - nasza FV
2 - wizualizacja KSEF
3 - tylko info o FV (np z nr ksef)
*/
IF _MODE = 'KSEF_SET_TRYB_WYSYLKI' THEN
  SET @mode=_MODE;

  select ifnull(valuei,0) into @ksef_tryb_wysylki from IReg where idkey = 'KSEF_tryb_wysylki_mail_fv';
  IF @ksef_tryb_wysylki in (2) THEN
    update dokumenty set doc_status = -10 where klucz = _GUID and nazwa like 'KSeF_faktura%' and nazwa not like '%OFFLINE%';
  END IF;


END IF;




END $$

DELIMITER ;

/*
$Log: m_api.sql,v $
Revision 1.110  2026/05/19 10:23:00  robert
Testowe zmiany dla odkladania podmiotow

Revision 1.108  2026/05/08 13:59:55  robert
Wstepna poprawka pobierania kontrahentow pierwotnych do korekty

Revision 1.107  2026/05/08 09:53:38  robert
Przenumerowania i wylaczenia klientow z pol nieobowiazkowych

Revision 1.106  2026/04/27 13:45:11  robert
$SEND$
Poprawka - Modyfikacja pod zmian� danych kontrahenta

Revision 1.105  2026/04/27 12:07:10  robert
$SEND$
Platnosci rozliczone i Modyfikacja pod zmian� danych kontrahenta

Revision 1.104  2026/04/22 12:28:21  robert
$SEND$
Zabezpieczenie wartosci przed blednie wystawiona zaliczka
i warunki wysylki dla cdg

Revision 1.103  2026/04/21 12:43:41  robert
Tryb wysylki zalacznika ksef

Revision 1.102  2026/04/21 11:16:40  robert
Sevenet nazwa pozycji

Revision 1.101  2026/04/20 13:30:45  robert
$SEND$
Dane do faktury zaliczkowej

Revision 1.100  2026/04/17 08:00:42  robert
$SEND$
NPII te� do innych ni� korekty

Revision 1.99  2026/04/16 13:23:19  robert
$SEND$
Warunki NPII, cdg - inne warunki pobierania do wysylki

Revision 1.98  2026/04/15 12:11:16  robert
$SEND$
Biezace poprawki (nazwy towarow, wartosc do zaplacono itp)

Revision 1.97  2026/04/10 07:11:26  robert
Nazwa towaru na korekcie gruopwanej (sevenet)

Revision 1.96  2026/04/10 06:43:01  robert
numer klienta dla security przywrocony z cofki

Revision 1.95  2026/04/09 17:13:56  robert
$SEND$
brak_zaplaty, platnosc_inna, inne drobne

Revision 1.94  2026/04/07 13:02:48  robert
$SEND$

Revision 1.93  2026/04/07 13:02:08  robert
Lokalizacje  i uwagi dla Security

Revision 1.92  2026/04/01 15:36:25  robert
$SEND$
zabezpieczenie miasta, zmiany transbud, zabezpieczenie venska i inne

Revision 1.91  2026/03/30 10:29:33  robert
split-payment ustawiany powyzej 15000 dla transbud

Revision 1.90  2026/03/23 12:55:37  robert
$SEND$
Wyjatek wylaczenie pkwiu i pcn dla jarzebinscy

Revision 1.89  2026/03/23 12:43:43  robert
$SEND$
Wyjatek na opis dla jarzebinscy

Revision 1.88  2026/03/19 11:50:33  robert
$SEND$
Wylaczenie indeksu dla wybranych

Revision 1.87  2026/03/19 09:26:11  robert
$SEND$
KRS do danych, walutowe wartosci do opng_vat i inne

Revision 1.86  2026/03/12 14:00:09  robert
$SEND$

Revision 1.85  2026/03/12 13:38:09  robert
rodzaj 105 konkol, platnosc mobilna simex, inne drobne.

Revision 1.84  2026/03/06 09:46:56  robert
Rodzaj 105 korekta zbiorcza - dodanie okresu faktury

Revision 1.83  2026/03/06 09:18:32  robert
Grupowanie dla Sevenet (fv i koretkty)

Revision 1.82  2026/03/04 15:35:17  robert
$SEND$
NIP w update opng i zmiana warunku dla BrakId

Revision 1.81  2026/03/04 14:08:37  apro
rachbankowe

Revision 1.80  2026/03/02 14:06:19  robert
$SEND$

Revision 1.79  2026/03/02 14:01:07  apro
..

Revision 1.78  2026/03/02 13:57:50  apro
zabezpieczenie przed nip z PL w karcie kontrahenta

Revision 1.77  2026/03/02 10:00:45  robert
Niekonsekwencja dla tabeli vat w walucie poprawiona

Revision 1.76  2026/02/27 12:44:24  robert
Inne sortowanie w get_list

Revision 1.75  2026/02/27 12:36:36  apro
-hyd

Revision 1.74  2026/02/27 10:09:48  robert
Na wniosek MPGK - do wyboru kontrahenta pierwszenswto maja dostawcy

Revision 1.73  2026/02/27 08:27:20  robert
Zmiany dla Konkol, Crist, Hydromega + rozwojowe

Revision 1.72  2026/02/20 09:09:17  robert
$SEND$
datasprze na korekcie

Revision 1.71  2026/02/19 13:58:06  apro
pliszka - wyjątek z rozrachunkiem dla ZP NN w KSeF

Revision 1.70  2026/02/17 14:28:41  robert
$SEND$
zmiany nazwy towaru zgrupowanego i podm3 (sevenet)

Revision 1.69  2026/02/17 14:24:24  apro
ugrpguid

Revision 1.68  2026/02/17 13:05:39  apro
datawplywu_rzeczywista

Revision 1.67  2026/02/17 08:12:47  robert
usuniete get_oppo_stare i zmiany korekt

Revision 1.66  2026/02/13 14:50:51  robert
Mod na numery zamowien i wzek. Poprawka na platnosc karta.

Revision 1.65  2026/02/13 06:23:24  apro
status_obieg

Revision 1.64  2026/02/11 13:37:26  robert
$SEND$
Poprawka na numer ksef faktury korygowanej

Revision 1.63  2026/02/11 12:34:31  robert
$SEND$
Get_rachbankowe

Revision 1.61  2026/02/10 13:53:19  apro
koment - unikalność rachbankowe

Revision 1.60  2026/02/10 13:37:58  apro
GET_KONTRAH z uwzgl. numeru rachunku

Revision 1.59  2026/02/06 14:21:38  apro
statusEMail - sposób odbioru dok.

Revision 1.58  2026/02/06 12:44:45  apro
kosmetyka

Revision 1.57  2026/02/06 12:31:56  robert
Obsluga platnik-kontrahent (uruchomione w konkol)

Revision 1.56  2026/02/05 13:37:17  robert
Obsluga platnik-kontrahent

Revision 1.55  2026/02/05 10:48:39  apro
kontrah ksef

Revision 1.54  2026/02/05 09:39:47  apro
ADD_KONTRAH

Revision 1.53  2026/02/05 08:45:02  waliant
test

Revision 1.52  2026/02/05 08:43:39  apro
polskie znaki - naprawa

Revision 1.51  2026/02/04 14:32:52  robert
Zmiany dla Crist

Revision 1.50  2026/02/04 07:38:14  waliant
$SEND$ kod kreskowy dla korekt

Revision 1.49  2026/02/04 06:31:46  robert
Symbol do nazwy dla konkola

Revision 1.48  2026/02/03 17:14:02  waliant
poprawka dla konkola

Revision 1.47  2026/02/03 17:07:32  waliant
poprawki dla Konkola

Revision 1.46  2026/02/03 15:05:23  waliant
$SEND$ przebudowa pozycji

Revision 1.44  2026/02/03 09:53:21  waliant
$SEND$ poprawka dla kont bankowych

Revision 1.43  2026/02/02 12:50:52  waliant
$SEND$ Pozycje po nowemu, przez fr_ht_OP

Revision 1.42  2026/01/30 13:49:19  robert
Zaokraglenie brutto - poprawny _RND

Revision 1.41  2026/01/30 13:46:10  robert
Zaokraglenie brutto

Revision 1.40  2026/01/30 12:07:15  waliant
$SEND$ pozycje w kazdym wariancie, plus drobne inne

Revision 1.39  2026/01/29 13:44:57  waliant
$SEND$ Kolejna rozbudowa

Revision 1.38  2026/01/29 09:13:22  waliant
$SEND$ P_15 i indeksy w korektach

Revision 1.37  2026/01/29 08:02:43  robert
Zabezpieczenie przed brakiem split_payment w opng z TE_opng

Revision 1.36  2026/01/28 13:57:42  waliant
platnik i numery rach

Revision 1.35  2026/01/28 09:24:28  waliant
Zmiana w tablece vat, cen wal dla pozycji dla grupowanych

Revision 1.34  2026/01/26 12:48:36  waliant
Rozbudowa cd

Revision 1.33  2026/01/22 13:50:54  waliant
Grupowanie internalne i dzielone uwagi

Revision 1.32  2026/01/21 13:25:44  waliant
Rozbudowa

Revision 1.31  2026/01/21 08:58:30  waliant
Rozbudowa

Revision 1.30  2026/01/16 08:17:31  apro
idnoperfin

Revision 1.29  2026/01/15 11:12:07  robert
Zmiany pod KSeF
$SEND$

Revision 1.28  2026/01/12 06:21:22  robert
Poprawki - zabezpieczenia

Revision 1.27  2026/01/10 10:47:04  robert
Pomijanie importu z ksef kontrahentow do pominiecia
Generowanie listy podmiotow trzecich
Inne pod KSeF

Revision 1.26  2026/01/08 06:07:01  apro
rodzaj

Revision 1.25  2026/01/05 13:27:32  apro
Rodzaj - alternatywnie wg id

Revision 1.24  2026/01/02 08:14:43  apro
reformat, wyjatki dla SEV

Revision 1.23  2026/01/02 07:29:16  robert
sposoby zaplaty w update_opng

Revision 1.22  2025/12/16 09:24:06  robert
Podstawowa czesc KSEFowa gotowa, import i eksport dziala.

Revision 1.21  2025/11/06 13:20:25  robert
Zmiany dla korekty ksef

Revision 1.20  2025/10/24 14:01:11  robert
Poprawki do ksef

Revision 1.19  2025/10/24 11:45:11  robert
Pierwsze elementy pod API KSEF (absolutna podstawa)

Revision 1.18  2025/10/24 10:13:43  robert
Pierwsze elementy pod API KSEF

Revision 1.17  2025/10/22 07:29:44  apro
ksef 0.1

Revision 1.16  2025/10/22 07:28:15  apro
ksef 0

Revision 1.15  2025/10/07 12:44:59  apro
usuwanie z zachowanie nrwewn - c.d.

Revision 1.14  2025/10/07 05:20:46  apro
zachowanie nrwewn

Revision 1.13  2025/09/05 13:00:26  apro
SEV - absencje

Revision 1.12  2025/03/10 09:01:15  waliant
$SEND$ Warningi

Revision 1.11  2024/04/16 12:53:07  apro
..literowka

Revision 1.10  2024/04/15 13:02:36  apro
default 23%

Revision 1.9  2023/08/24 12:39:43  rafalg
opis vat sevenet

Revision 1.8  2023/06/27 05:49:50  apro
*** empty log message ***

Revision 1.7  2023/06/12 12:18:13  apro
*** empty log message ***

Revision 1.6  2023/04/19 06:51:08  rafalg
uzupelnianie cvs

Revision 1.5  2023/02/24 08:57:04  apro
liter贸wka

Revision 1.4  2022/07/11 06:06:54  apro
*** empty log message ***

Revision 1.3  2022/05/26 04:59:20  apro
..

Revision 1.2  2022/05/18 06:34:02  apro
waluta

Revision 1.1  2022/05/17 06:10:58  apro
0

*/
