 /*!40101 SET NAMES utf8 */;
DELIMITER $$

DROP PROCEDURE IF EXISTS `ht_ef_xml`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_ef_xml`(
    IN _MODE VARCHAR(150),
    IN _GUID VARCHAR(255),
    IN _XML LONGTEXT,
    IN _Param_A VARCHAR(255),
    IN _Param_B VARCHAR(255),
    IN _Param_C TEXT, 
    IN _Param_D VARCHAR(255),
    IN _Param_E VARCHAR(255),
    IN _Param_F VARCHAR(255),
    IN _Param_G VARCHAR(255)
)
SPROC: BEGIN 
/*
procedura przygotowujaca plik xml elektronicznej faktury
w przyslosci takze import do naszego systemu pliku xml efaktury
*/

    DECLARE _S LONGTEXT;
    DECLARE _XML LONGTEXT;
    DECLARE _XMLnag LONGTEXT;
    DECLARE _XMLnag2 LONGTEXT;
    DECLARE _XMLpoz LONGTEXT;
    DECLARE _XMLpoz1 LONGTEXT;
    DECLARE _XMLpoz_s LONGTEXT;
    DECLARE _XMLpoz_z LONGTEXT;
    DECLARE _XMLpoz_p LONGTEXT;
    DECLARE _KodUS VARCHAR(50);
    DECLARE _NIP VARCHAR(50);
    DECLARE _REGON VARCHAR(50);
    DECLARE _zm01 VARCHAR(255);
    DECLARE _zm02 VARCHAR(255);
    DECLARE cSL INT(11);
    DECLARE _LP INT(11);
    DECLARE _nowe_adresy INT(11);
    DECLARE _liczba_wierszy INT(11);
    DECLARE _wartosc_faktury VARCHAR(18);
    DECLARE _wartosc_faktury2 VARCHAR(18);
    DECLARE _PelnaNazwa, _Adres, _Miasto, _Kod, _Platnik_imie, _Platnik_nazwisko VARCHAR(200);
    DECLARE _Platnik_data_urodzenia DATE;
    DECLARE _DEBUG INT;
    DECLARE _RodzPodat INTEGER;
    DECLARE _email VARCHAR(50);
    DECLARE _nazwa_xml VARCHAR(150);


    SET _DEBUG=_MODE LIKE "%.DEBUG",_MODE=REPLACE(_MODE,".DEBUG","");

    SET cSL := 2;

    SET _GUID = IFNULL(_GUID, '');
    SET SESSION group_concat_max_len = 1024*1024*1024;

    IF @session.globals.Owner IN ('CRIST') THEN
        SET _nowe_adresy = 1;
    ELSE
        SET _nowe_adresy = 0;
    END IF;

/*
SET @session.globals.Owner = 'CRIST';
call ht_ef_xml('create.ef.xml','HT069d3689-5606-11ee-8f1f-00155d00dc94','','','','','','','','');

select @a492, @a458;

select * from t_xml;
select * from t_faktura;
select * from t_dod;
select * from t_fa_podmioty;
select * from t_faktura_poz;
*/

IF (_MODE = 'NAGLOWEK') THEN
    BEGIN
    DECLARE _REGON, _NIP     VARCHAR(20);

    DROP TABLE IF EXISTS t_xml;
    CREATE TEMPORARY TABLE t_xml (
                    guid VARCHAR(255),
                    xmlnag LONGTEXT,    -- naglowek
                    xmlnag2 LONGTEXT,    -- dane firmy wystawcy (podmiot1) i dane klienta (podmiot2)
                    xmlpoz1 LONGTEXT,    -- naglowek faktury
                    xmlpoz2 LONGTEXT,    -- pozycje faktury
                    xmlpoz3 LONGTEXT,    -- info o platnosci
                    xmlpoz4 LONGTEXT,    -- stopka dokumentu (w tym tez dodatkowe dane firmy podmiot1)
                    XML LONGTEXT,
    KEY guid (guid)) DEFAULT CHARSET=utf8;

    INSERT INTO t_xml VALUES (_Param_G,'','','','','','','');

    -- SET NAMES "utf8";

    SET @xml.IC = 1;
    SET _XMLnag = '<?xml version="1.0" encoding="UTF-8"?>\n';
    SET _XMLnag = CONCAT(_XMLnag, CONCAT('<Faktura xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://crd.gov.pl/wzor/2023/06/29/12648/">\n'));

    SET _XMLnag = CONCAT(_XMLnag,'\n',
'<Naglowek>
    <KodFormularza kodSystemowy="FA (2)" wersjaSchemy="1-0E">FA</KodFormularza>
    <WariantFormularza>2</WariantFormularza>
    <DataWytworzeniaFa>',CURRENT_DATE,'T',CURRENT_TIME,'Z</DataWytworzeniaFa>
    <SystemInfo>', 'Pakiet Motława', '</SystemInfo>
</Naglowek>');


    UPDATE t_xml SET xmlnag = _XMLnag;
    END;
END IF; -- NAGLOWEK

-- osobna sekcja dla podmiotow, z czasem moze bedzie z innych miejsc brana i w roznych wariantach
IF (_MODE = 'NAGLOWEK_PODMIOTY') THEN

    DROP TABLE IF EXISTS t_fa_podmioty;
    CREATE TEMPORARY TABLE t_fa_podmioty (
    guid VARCHAR(38),
    kontrguid VARCHAR(38),
    -- dane podmiot1, czyli sprzedawcy (wystawcy?) faktury
    PrefiksPodatnika VARCHAR(5), -- tutaj na razie pusto name="PrefiksPodatnika" type="tns:TKodyKrajowUE" fixed="PL" minOccurs="0"
    NrEORI VARCHAR(20),
    NIP VARCHAR(15),
    Nazwa VARCHAR(150),

    KodKraju VARCHAR(10),
    AdresL1  VARCHAR(50),
    AdresL2 VARCHAR(50),
    GLN VARCHAR(50),

    Email VARCHAR(50),
    Telefon VARCHAR(50),
    StatusInfoPodatnika VARCHAR(50),

    -- dane podmiot2 czyli nabywca
    NrEORI_2 VARCHAR(20),
    -- name="DaneIdentyfikacyjne" type="tns:TPodmiot2"
    NIP_2 VARCHAR(15),
    KodUE_2 VARCHAR(15),
    NrVatUE_2 VARCHAR(15),
    NrID_2 VARCHAR(15),
    BrakID_2 VARCHAR(1),
    Nazwa_2 VARCHAR(150),
    -- name="Adres" type="tns:TAdres" minOccurs="0", Adres nabywcy. Pola opcjonalne dla przypadków określonych w art. 106e ust. 5 pkt 3 ustawy
    KodKraju_2 VARCHAR(10),
    AdresL1_2  VARCHAR(50),
    AdresL2_2 VARCHAR(50),
    GLN_2 VARCHAR(50),
    -- tutaj adres koresp, na razie olewamy, ale...
    -- dane kontaktowe
    Email_2 VARCHAR(50),
    Telefon_2 VARCHAR(50),
    NrKlienta_2 VARCHAR(50),
    IDNabywcy_2 VARCHAR(50),
    xml TEXT,
    KEY guid (guid),
    KEY kontrguid (kontrguid)
    ) DEFAULT CHARSET=utf8;

    /*
    select valuea INTO _Adres from IReg where idkey='Ulica_Pit4' and Idpath like '%DaneFirmy'; -- to troche do bani, moze sa lepsze dane, ale nie chce mi sie skladac z kawalkow
    */

    select substring_index(valuea, ', ', -1) INTO _Adres
    from IReg where idkey='Address Info' and Idpath like '%DaneFirmy';


    select valuea INTO _Miasto from IReg where idkey='Miasto' and Idpath like '%DaneFirmy';
    select valuea INTO _Kod from IReg where idkey='Kod_poczt' and Idpath like '%DaneFirmy';
    -- _PelnaNazwa, _Adres, _Miasto, _Kod

        -- <Podmiot1>
        SET @tmp :=     @xml.IC * cSL;
        SET @P1.xml = '';
        SET @P1.xml = CONCAT(@P1.xml,  SPACE(@xml.IC*cSL), '<Podmiot1">\n');

        CALL _IReg_Get('DaneFirmy', 'NIP', '0', 'STRING', _NIP, '(brak danych)');
        SET _NIP = REPLACE(_NIP, '-', '');
        SET _RodzPodat = 0;
        CALL _IReg_Get('DaneFirmy', 'Rodzaj_platnika', '0', 'INTEGER', _RodzPodat, '0');
        -- CALL _IReg_Get('DeklaracjeVAT', 'JPK_email', '0', 'STRING',_email, '(brak danych)');
        SET _email = (SELECT email FROM ht_dekl_jpkv7 WHERE guid = _GUID);

        SET @xml.IC = @xml.IC + 1;
        SET @RodzPodat = _RodzPodat;

        IF _RodzPodat = 0 THEN  -- osoba nie-fiz.
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<OsobaNiefizyczna>\n');

            SET @xml.IC = @xml.IC + 1;
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<NIP>');
            SET @P1.xml = CONCAT(@P1.xml, IFNULL(_NIP, ''));
            SET @P1.xml = CONCAT(@P1.xml, '</NIP>\n');

            CALL _IReg_Get('DaneFirmy', 'pelna_nazwa', '0', 'STRING', _PelnaNazwa, '');
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<PelnaNazwa>');

            SET @P1.xml = CONCAT(@P1.xml, _to_utf_xml(_PelnaNazwa));    -- _PelnaNazwa
            -- SET @P1.xml = CONCAT(@P1.xml, _to_utf_xml(REPLACE(_PelnaNazwa, '&', '&#x26;')));    -- _PelnaNazwa, dla tej wersji problem kolacji
            -- SET @P1.xml = CONCAT(@P1.xml, REPLACE(_PelnaNazwa, '&', '&#x26;'));    -- _PelnaNazwa
            SET @P1.xml = CONCAT(@P1.xml, '</PelnaNazwa>\n');

            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<Email>');
            SET @P1.xml = CONCAT(@P1.xml, IFNULL(_email, ''));
            SET @P1.xml = CONCAT(@P1.xml, '</Email>\n');

            SET @xml.IC = @xml.IC - 1;
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '</OsobaNiefizyczna>\n');

        END IF;

        IF _RodzPodat = 1 THEN  -- osoba fiz.
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<OsobaFizyczna>\n');

            -- wstawiamy TIdentyfikatorOsobyFizycznej2 : NIP, imie, nazwisko, data urodz.
            SET @xml.IC = @xml.IC + 1;
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<etd:NIP>');
            SET @P1.xml = CONCAT(@P1.xml, _NIP);
            SET @P1.xml = CONCAT(@P1.xml, '</etd:NIP>\n');

            CALL _IReg_Get('DaneFirmy', 'Platnik_imie', '0', 'STRING', _Platnik_imie, '');
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<etd:ImiePierwsze>');
            SET @P1.xml = CONCAT(@P1.xml, _to_utf_xml(_Platnik_imie));
            SET @P1.xml = CONCAT(@P1.xml, '</etd:ImiePierwsze>\n');

            CALL _IReg_Get('DaneFirmy', 'Platnik_nazwisko', '0', 'STRING', _Platnik_nazwisko, '');
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<etd:Nazwisko>');
            SET @P1.xml = CONCAT(@P1.xml, _to_utf_xml(_Platnik_nazwisko));
            SET @P1.xml = CONCAT(@P1.xml, '</etd:Nazwisko>\n');

            CALL _IReg_Get('DaneFirmy', 'Platnik_data_urodzenia', '0', 'DATE', _Platnik_data_urodzenia, '');
            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<etd:DataUrodzenia>');
            SET @P1.xml = CONCAT(@P1.xml, _Platnik_data_urodzenia);
            SET @P1.xml = CONCAT(@P1.xml, '</etd:DataUrodzenia>\n');

            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '<Email>');
            SET @P1.xml = CONCAT(@P1.xml, IFNULL(_email, ''));
            SET @P1.xml = CONCAT(@P1.xml, '</Email>\n');

            SET @xml.IC = @xml.IC - 1;

            SET @P1.xml = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '</OsobaFizyczna>\n');
        END IF;

        -- SET _XMLnag2 = CONCAT(@P1.xml, SPACE(@xml.IC*cSL), '</Podmiot1>\n');
--  </Podmiot1>

--  <Podmiot2>

    INSERT INTO t_fa_podmioty (guid, kontrguid,
    NIP, Nazwa, KodKraju, AdresL1, AdresL2,
    NIP_2, Nazwa_2, KodKraju_2, BrakID_2, AdresL1_2, AdresL2_2, Email_2,Telefon_2, NrKlienta_2,
    xml)
    SELECT n.guid, n.kontrguid,
    _NIP, _PelnaNazwa, 'PL',
    _Adres,
    CONCAT(_Kod,' ',_miasto),
    IF(n.kontrnip = 'brak', '', n.kontrnip) AS NIP_2,
    n.kontrnazwa,
    CASE WHEN kontrnip = 'brak' THEN 'PL'
    ELSE
        IF(LEFT(kontrnip,1) NOT REGEXP '^[0-9]',LEFT(kontrnip,2),'PL')
    END AS KodKraju_2, -- to jest do bani, ale nie ma lepszej metody na razie

    IF(n.kontrnip IN ('brak',''), 1, 0) AS BrakID_2,

    k.ulica AS AdresL1_2,
    CONCAT(k.zipcode, ' ', k.NazwaMiasta) AS AdresL2_2,
    '' AS Email_2,
    '' AS Telefon_2,
    '' AS NrKlienta_2,
    '' AS xml
    FROM opng n
    inner join kontrah k ON k.GUID = n.kontrGUID
    WHERE n.GUID = _GUID
    AND n.deleted = 0
    GROUP BY n.guid
    ;


    UPDATE t_fa_podmioty SET xml =
    CONCAT('<Podmiot1>\n',
        '<DaneIdentyfikacyjne>\n',
            '<NIP>',NIP,'</NIP>\n',
            '<Nazwa>',Nazwa,'</Nazwa>\n',
        '</DaneIdentyfikacyjne>\n',
        '<Adres>\n',
            '<KodKraju>',KodKraju,'</KodKraju>\n',
            '<AdresL1>',AdresL1,'</AdresL1>\n',
            '<AdresL2>',AdresL2,'</AdresL2>\n',
        '</Adres>\n',
        '</Podmiot1>\n',
        '<Podmiot2>\n',
        '<DaneIdentyfikacyjne>\n',
            IF(NIP_2 = '','',CONCAT('<NIP>',NIP_2,'</NIP>\n')),
            IF(BrakID_2 = '0','',CONCAT('<BrakID>',BrakID_2,'</BrakID>\n')),
            '<Nazwa>',Nazwa_2,'</Nazwa>\n',
        '</DaneIdentyfikacyjne>\n',
        '<Adres>\n',
            '<KodKraju>',KodKraju_2,'</KodKraju>\n',
            '<AdresL1>',AdresL1_2,'</AdresL1>\n',
            '<AdresL2>',AdresL2_2,'</AdresL2>\n',
        '</Adres>\n',
        -- <NrKlienta>fdfd778343</NrKlienta>
        '</Podmiot2>\n'
    );

    UPDATE t_xml SET xmlnag2 = (SELECT GROUP_CONCAT(xml SEPARATOR '') FROM t_fa_podmioty);


END IF; -- NAGLOWEK_PODMIOTY

IF (_MODE = 'create.ef.xml') THEN

    CALL ht_ef_xml('NAGLOWEK', '', '', '', '', '', '', '', '', _MODE);
    CALL ht_ef_xml('NAGLOWEK_PODMIOTY', _GUID, '', '', '', '', '', '', '', _MODE);

    DROP TABLE IF EXISTS t_faktura;
    CREATE TEMPORARY TABLE t_faktura (
    guid VARCHAR(38),
    rodzaj INT(11),
    kontrguid VARCHAR(38),
    kurs VARCHAR(18), -- pole pomocnicze, bo kurs jest docelowo w pozycjach, ale zeby byl pod reka

    KodWaluty VARCHAR(3), -- kod waluty
    P_1 VARCHAR(10), -- data wystawienia
    P_1M VARCHAR(50), -- miejsce wystawienia
    P_2 VARCHAR(50), -- nr faktury, nrdokfin
    WZ VARCHAR(256), -- nr WZ zwiazane z faktura
    P_6 VARCHAR(10), -- data sprzedazy/wplywu
    -- tutaj sekcja OkresFa
    P_6_Od VARCHAR(10), -- data sprzedazy/wplywu
    P_6_Do VARCHAR(10), -- data sprzedazy/wplywu

    P_13_1 DOUBLE(16,2) DEFAULT 0, -- suma netto stawki podstawowej 23 w walucie dokuemntu
    P_14_1 DOUBLE(16,2) DEFAULT 0, -- suma vat stawki podstawowej 23 w walucie dokumentu
    P_14_1W DOUBLE(16,2) DEFAULT 0, -- suma vat stawki podstawowej 23 przeliczona na pln
    P_13_2 DOUBLE(16,2) DEFAULT 0, -- suma netto stawki obnizonej 8
    P_14_2 DOUBLE(16,2) DEFAULT 0, -- suma vat stawki obnizonej 8
    P_14_2W DOUBLE(16,2) DEFAULT 0, -- suma vat stawki obnizonej 8 w pln
    P_13_3 DOUBLE(16,2) DEFAULT 0, -- suma netto stawki obnizonej drugiej 5
    P_14_3 DOUBLE(16,2) DEFAULT 0, -- suma vat stawki obnizonej drugiej 5
    P_14_3W DOUBLE(16,2) DEFAULT 0, -- suma vat stawki obnizonej drugiej 5
    P_13_4 DOUBLE(16,2) DEFAULT 0, -- suma netto stawki obnizonej trzeciej - odwrotne obciazenie i stawka 4%
    P_14_4 DOUBLE(16,2) DEFAULT 0, -- suma vat stawki obnizonej trzeciej
    P_14_4W DOUBLE(16,2) DEFAULT 0, -- suma vat stawki obnizonej trzeciej
    P_13_5 DOUBLE(16,2) DEFAULT 0, -- Suma wartości sprzedaży netto dla transakcji dostawy towarów oraz świadczenia usług poza terytorium kraju. W przypadku faktur zaliczkowych, kwota zaliczki netto. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy
    P_14_5 DOUBLE(16,2) DEFAULT 0, -- Kwota podatku od wartości dodanej w przypadku procedury szczególnej, o której mowa w dziale XII w rozdziale 6a ustawy. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy

    P_13_6_1 DOUBLE(16,2) DEFAULT 0, -- Suma wartości sprzedaży objętej stawką 0% z wyłączeniem wewnątrzwspólnotowej dostawy towarów i eksportu. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy
    P_13_6_2 DOUBLE(16,2) DEFAULT 0, -- Suma wartości sprzedaży objętej stawką 0% w przypadku wewnątrzwspólnotowej dostawy towarów. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy
    P_13_6_3 DOUBLE(16,2) DEFAULT 0, -- Suma wartości sprzedaży objętej stawką 0% w przypadku eksportu. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy
    P_13_7 DOUBLE(16,2) DEFAULT 0, -- Suma wartości sprzedaży zwolnionej od podatku. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy wartości sprzedaży

    P_13_8 DOUBLE(16,2) DEFAULT 0, -- Suma wartości sprzedaży w przypadku dostawy towarów oraz świadczenia usług poza terytorium kraju, z wyłączeniem kwot wykazanych w polach P_13_5 i P_13_9. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy wartości sprzedaży

    P_13_9 DOUBLE(16,2) DEFAULT 0, -- Suma wartości świadczenia usług, o których mowa w art. 100 ust. 1 pkt 4 ustawy. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy wartości sprzedaży

    P_13_10 DOUBLE(16,2) DEFAULT 0, -- Suma wartości sprzedaży w procedurze odwrotnego obciążenia, dla której podatnikiem jest nabywca zgodnie z art. 17 ust. 1 pkt 7 i 8 ustawy oraz innych przypadków odwrotnego obciążenia występujących w obrocie krajowym. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy

    P_13_11 DOUBLE(16,2) DEFAULT 0, -- Suma wartości sprzedaży w procedurze marży, o której mowa w art. 119 i art. 120 ustawy. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy wartości sprzedaży

    P_15 DOUBLE(16,2) DEFAULT 0, -- naleznosc ogolem
    KursWalutyZ DOUBLE(16,4), -- Kurs waluty stosowany do wyliczenia kwoty podatku w przypadkach, o których mowa w przepisach Działu VI ustawy na fakturach, o których mowa w art. 106b ust. 1 pkt 4 ustawy

    -- teraz sekcja Adnotacje
    P_16 VARCHAR(5), -- true/false, true jezeli "metoda kasowa" z ustawy
    P_17 VARCHAR(5), -- true/false, true jezeli samofakturowanie
    P_18 VARCHAR(5), -- true/false, true jezeli odwrotne obciazenie
    P_18A VARCHAR(5), -- true/false, true jezeli MPP

    -- sekcja Zwolnienie
    P_19 VARCHAR(5), -- Znacznik dostawy towarów lub świadczenia usług zwolnionych od podatku na podstawie art. 43 ust. 1, art. 113 ust. 1 i 9 albo przepisów wydanych na podstawie art. 82 ust. 3 ustawy lub na podstawie innych przepisów
    P_19A VARCHAR(256), -- Jeśli pole P_19 równa się "1" - należy wskazać przepis ustawy albo aktu wydanego na podstawie ustawy, na podstawie którego podatnik stosuje zwolnienie od podatku
    P_19B VARCHAR(256), -- Jeśli pole P_19 równa się "1" - należy wskazać przepis dyrektywy 2006/112/WE, który zwalnia od podatku taką dostawę towarów lub takie świadczenie usług
    P_19C VARCHAR(256), -- Jeśli pole P_19 równa się "1" - należy wskazać inną podstawę prawną wskazującą na to, że dostawa towarów lub świadczenie usług korzysta ze zwolnienia od podatku
    P_19N VARCHAR(5), -- Znacznik braku dostawy towarów lub świadczenia usług zwolnionych od podatku na podstawie art. 43 ust. 1, art. 113 ust. 1 i 9 ustawy albo przepisów wydanych na podstawie art. 82 ust. 3 ustawy lub na podstawie innych przepisów

    -- sekcja NoweSrodkiTransportu
    P_22 VARCHAR(1), -- dostawa nowego środka transportu (tak 1/nie 2)
    P_42_5 VARCHAR(1), -- Jeśli występuje obowiązek, o którym mowa w art. 42 ust. 5 ustawy, należy podać wartość "1", w przeciwnym przypadku - wartość "2"

    -- podsekcja NowySrodekTransportu
    P_22A VARCHAR(10), -- data dopuszczenia nowego środka transportu do użytku
    P_NrWierszaNST INT, -- Numer wiersza faktury, w którym wykazano dostawę nowego środka transportu

    P_22BMK VARCHAR(256), -- marka
    P_22BMD VARCHAR(256), -- model
    P_22BK VARCHAR(256), -- kolor
    P_22BNR VARCHAR(256), -- nr rej
    P_22BRP VARCHAR(256), -- rok produkcji
    P_22B VARCHAR(256), -- przebieg pojazdu  - w przypadku pojazdów lądowych, o których mowa w art. 2 pkt 10 lit. a ustawy
    P_22B1 VARCHAR(256), -- nr vin pojazdu
    P_22B2 VARCHAR(256), -- nr nadwozia
    P_22B3 VARCHAR(256), -- nr podwozia
    P_22B4 VARCHAR(256), -- nr ramy
    P_22BT VARCHAR(256), -- typ srodka transportu

    P_22C VARCHAR(256), -- Jeśli dostawa dotyczy jednostek pływających, o których mowa w art. 2 pkt 10 lit. b ustawy, należy podać liczbę godzin roboczych używania nowego środka transportu
    P_22C1 VARCHAR(256), -- nr kadluba
    P_22D VARCHAR(256), -- eśli pole P_22 równa się "1" a dostawa dotyczy statków powietrznych, o których mowa w art. 2 pkt 10 lit. c ustawy, należy podać liczbę godzin roboczych używania nowego środka transportu
    P_22D1 VARCHAR(256), -- nr fabryczny

    P_22N VARCHAR(5), -- Znacznik braku wewnątrzwspólnotowej dostawy nowych środków transportu

    P_23 VARCHAR(5), -- W przypadku faktur wystawianych w procedurze uproszczonej przez drugiego w kolejności podatnika, o którym mowa w art. 135 ust. 1 pkt 4 lit. b i c oraz ust. 2, zawierającej adnotację, o której mowa w art. 136 ust. 1 pkt 1 i stwierdzenie, o którym mowa w art. 136 ust. 1 pkt 2 ustawy należy podać wartość "1", w przeciwnym przypadku - wartość "2"

    P_PMarzy VARCHAR(1), -- W przypadku wystąpienia procedur marży, o których mowa w art. 119 lub 120 ustawy należy podać wartość "1", w przeciwnym przypadku - wartość "2"
    P_PMarzy_2 VARCHAR(1), -- to dawne pola P_106...
    P_PMarzy_3_1 VARCHAR(1),
    P_PMarzy_3_2 VARCHAR(1),
    P_PMarzy_3_3 VARCHAR(1),

    P_PMarzyN VARCHAR(1), -- Znacznik braku wystąpienia procedur marży, o których mowa w art. 119 lub art. 120 ustawy

    RodzajFaktury VARCHAR(256), -- Rodzaj faktury: VAT - podstawowa; KOR - korygująca; ZAL - faktura dokumentująca otrzymanie zapłaty lub jej części przed dokonaniem czynności (art.106b ust. 1 pkt 4 ustawy)
    PrzyczynaKorekty VARCHAR(256),
    TypKorekty VARCHAR(256), -- Typ skutku korekty w ewidencji
    -- sekcja DaneFakturyKorygowanej
    DataWystFaKorygowanej VARCHAR(10),
    NrFaKorygowanej VARCHAR(256),
    NrKSeF VARCHAR(1), -- Znacznik numeru KSeF faktury korygowanej
    NrKSeFFaKorygowanej VARCHAR(256), -- Numer identyfikujący fakturę korygowaną w Krajowym Systemie e-Faktur (KSeF)

    NrKSeFN VARCHAR(1), -- Znacznik faktury korygowanej wystawionej poza KSeF

    OkresFaKorygowanej VARCHAR(256), -- Dla faktury korygującej - okres, do którego odnosi się udzielany opust lub obniżka, w przypadku gdy podatnik udziela opustu lub obniżki ceny w odniesieniu do wszystkich dostaw towarów lub usług dokonanych lub świadczonych na rzecz jednego odbiorcy w danym okresie
    NrFaKorygowany VARCHAR(256), -- Poprawny numer faktury korygowanej w przypadku, gdy przyczyną korekty jest błędny numer faktury korygowanej. W polu NrFaKorygowanej należy wówczas wskazać ten błędny numer

    -- tutaj powinna byc sekcja danych kontrahenta, gdy korekta jest z powodu danych kontrahenta wlasnie - Podmiot1K, Podmiot2K

    -- takze tutaj powinna byc sekcja korekt faktur zaliczkowych
    -- P_15ZK DOUBLE(16,2) DEFAULT 0, -- naleznosc ogolem
    -- zaliczki czesciowe

    FP VARCHAR(1), -- znaczniki wiadome
    TP VARCHAR(1),
    DodatkowyOpis TEXT, -- Pola przeznaczone dla wykazywania dodatkowych danych na fakturze, w tym wymaganych przepisami prawa, dla których nie przewidziano innych pól/elementów

    FakturaZaliczkowa VARCHAR(256), -- Numery faktur zaliczkowych lub ich numery KSeF, jeśli zostały wystawione z użyciem KSeF
    NrKSeFZN VARCHAR(1), -- znaczniki wiadome

    NrFaZaliczkowej VARCHAR(256), -- Pole obowiązkowe dla faktury wystawianej po wydaniu towaru lub wykonaniu usługi, o której mowa w art. 106f ust. 3 i ostatniej z faktur, o której mowa w art. 106f ust. 4 ustawy
    NrKSeFFaZaliczkowej VARCHAR(256), -- Numer identyfikujący fakturę zaliczkową w KSeF. Pole obowiązkowe w przypadku, gdy faktura zaliczkowa była wystawiona za pomocą KSeF

    ZwrotAkcyzy VARCHAR(1), -- Informacja dodatkowa niezbędna dla rolników ubiegających się o zwrot podatku akcyzowego zawartego w cenie oleju napędowego
    xml TEXT,
    KEY guid (guid),
    KEY kontrguid (kontrguid),
    KEY P_2 (P_2)
    ) DEFAULT CHARSET=utf8;

    -- dodatkowe dane do nalgowka faktury, na razie platnosc, stopka i dane z rejestrow, rozliczenia i wiele innych od wiersza 3126, w tym rachunki bankowe, platnosci
    DROP TABLE IF EXISTS t_faktura_dod;
    CREATE TEMPORARY TABLE t_faktura_dod (
    guid VARCHAR(38),
    Zaplacono VARCHAR(1),
    DataZaplaty VARCHAR(10),
    FormaPlatnosci VARCHAR(1),
    KRS VARCHAR(50),
    REGON VARCHAR(50),
    BDO VARCHAR(50),
    xml TEXT,
    KEY guid (guid)
    ) DEFAULT CHARSET=utf8;


    DROP TABLE IF EXISTS t_faktura_poz;
    CREATE TEMPORARY TABLE t_faktura_poz (
    guid_poz VARCHAR(38), -- guid oppo
    guid VARCHAR(38), -- guid opng
    idntowr VARCHAR(38), -- guid towaru
    NrWierszaFa INTEGER,
    UU_ID VARCHAR(38), -- uniwersalny unikalny numer wiersza faktury (czyli jakby nasz guid oppo)
    P_6A VARCHAR(10), -- Data dokonania lub zakończenia dostawy towarów lub wykonania usługi lub data otrzymania zapłaty, o której mowa w art. 106b ust. 1 pkt 4 ustawy, o ile taka data jest określona i różni się od daty wystawienia faktury. Pole wypełnia się dla przypadku, gdy dla poszczególnych pozycji faktury występują różne daty
    P_7 VARCHAR(256), -- nazwa towaru
    Indeks VARCHAR(20), -- Pole przeznaczone do wpisania wewnętrznego kodu towaru lub usługi nadanego przez podatnika albo dodatkowego opisu

    GTIN VARCHAR(20),
    PKWiU VARCHAR(50),
    CN VARCHAR(50),
    PKOB VARCHAR(50),
    P_8A VARCHAR(256), -- jednostka miary
    P_8B VARCHAR(18), -- ilosc towaru
    P_9A VARCHAR(18), -- cena netto
    P_9B VARCHAR(18), -- cena brutto
    P_10 VARCHAR(18), -- kwoty obnizek/rabatow
    P_11 DOUBLE(16,2) DEFAULT 0, -- wartosc netto
    P_11A DOUBLE(16,2) DEFAULT 0, -- wartosc brutto
    P_11Vat DOUBLE(16,2) DEFAULT 0, -- Kwota podatku w przypadku, o którym mowa w art. 106e ust. 10 ustawy
    P_12 VARCHAR(18), -- stawka podatku
    P_12_XII VARCHAR(18), -- Stawka podatku od wartości dodanej w przypadku, o którym mowa w dziale XII w rozdziale 6a ustawy
    P_12_Zal_15 VARCHAR(1), -- Znacznik dla towaru lub usługi wymienionych w załączniku nr 15 do ustawy - wartość "1"
    KwotaAkcyzy VARCHAR(18),
    GTU VARCHAR(20),
    Procedura VARCHAR(18), -- Oznaczenie dotyczące procedury
    KursWaluty VARCHAR(18), -- Kurs waluty stosowany do wyliczenia kwoty podatku w przypadkach, o których mowa w Dziale VI ustawy
    StanPrzed VARCHAR(1), -- Znacznik stanu przed korektą w przypadku faktury korygującej lub faktury korygującej fakturę wystawioną w związku z art. 106f ust. 3 ustawy, w przypadku gdy korekta dotyczy danych wykazanych w pozycjach faktury i jest dokonywana w sposób polegający na wykazaniu danych przed korektą i po korekcie jako osobnych wierszy z odrębną numeracją oraz w przypadku potwierdzania braku zmiany wartości danej pozycji

    xml TEXT,
    KEY guid_poz (guid_poz),
    KEY guid (guid)
    ) DEFAULT CHARSET=utf8;

/* zamowienia na razie olewamy

    DROP TABLE IF EXISTS t_zamowienie;
    CREATE TEMPORARY TABLE t_zamowienie (
    guid_poz VARCHAR(38), -- guid zmpo
    guid VARCHAR(38), -- guid zmng
    guid_opng VARCHAR(38), -- guid faktury, do ktorej jest to zamowienie
    P_2AZ VARCHAR(50), -- nr faktury, nrdokfin
    WartoscZamowienia DOUBLE(16,2) DEFAULT 0, -- wartosc brutto calego zamowienia
    idntowr VARCHAR(38), -- guid towaru
    P_7Z VARCHAR(256), -- nazwa towaru
    P_8AZ VARCHAR(256), -- jednostka miary
    P_8BZ VARCHAR(18), -- ilosc towaru
    P_9AZ VARCHAR(18), -- cena netto
    P_11NettoZ VARCHAR(18), -- wartosc pozycji netto
    P_11VatZ VARCHAR(18), -- wartosc podatku
    P_12Z VARCHAR(18), -- stawka podatku
    P_12_XII VARCHAR(18), -- Stawka podatku od wartości dodanej w przypadku procedur szczególnych, o których mowa w dziale XII w rozdziałach 6a, 7 i 9 ustawy VAT
    xml TEXT,
    KEY guid_poz (guid_poz),
    KEY guid (guid)
    ) DEFAULT CHARSET=utf8;
*/

    INSERT INTO t_faktura
    SELECT n.guid, n.rodzaj, n.kontrguid,
    n.kurs,
    w.symbol AS KodWaluty,
    datawystaw AS P_1,
    (select valuea from IReg where idkey='Miasto' and Idpath like '%DaneFirmy') AS P_1M,
    nrdokfin AS P_2,
    '' AS WZ,
    datawplywu AS P_6 , -- data sprzedazy/wplywu
    '' AS P_6_Od , -- data sprzedazy/wplywu
    '' AS P_6_Do , -- data sprzedazy/wplywu

    SUM(IF(v.idvat IN (15),v.nettowal,'')) AS P_13_1, -- suma netto stawki podstawowej 23
    SUM(IF(v.idvat IN (15),v.vatwal,'')) AS P_14_1, -- suma vat stawki podstawowej 23
    SUM(IF(v.idvat IN (15),v.vat,0)) AS P_14_1W, -- vat dla stawki podstawowej w pln
    SUM(IF(v.idvat IN (16),v.nettowal,'')) AS P_13_2, -- suma netto stawki obnizonej 8
    SUM(IF(v.idvat IN (16),v.vatwal,'')) P_14_2, -- suma vat stawki obnizonej 8
    SUM(IF(v.idvat IN (16),v.vat,0)) AS P_14_2W, -- vat dla stawki obnizonej w pln
    SUM(IF(v.idvat IN (8),v.nettowal,'')) AS P_13_3, -- suma netto stawki obnizonej drugiej 5
    SUM(IF(v.idvat IN (8),v.vatwal,'')) AS P_14_3, -- suma vat stawki obnizonej drugiej 5
    SUM(IF(v.idvat IN (8),v.vat,0)) AS P_14_3W, -- suma vat stawki obnizonej drugiej 5
    SUM(IF(v.idvat IN (17,19),v.nettowal,'')) AS P_13_4, -- suma netto stawki obnizonej trzeciej 4% oraz odwrotne obc.
    SUM(IF(v.idvat IN (17,19),v.vatwal,'')) AS P_14_4, -- suma vat stawki obnizonej trzeciej
    SUM(IF(v.idvat IN (17,19),v.vat,0)) AS P_14_4W, -- suma vat stawki obnizonej trzeciej w pln
    0 AS P_13_5, -- Suma wartości sprzedaży netto dla transakcji dostawy towarów oraz świadczenia usług poza terytorium kraju. W przypadku faktur zaliczkowych, kwota zaliczki netto. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy
    0 AS P_14_5, -- Kwota podatku od wartości dodanej w przypadku procedur szczególnych, o których mowa w dziale XII w rozdziałach 6a, 7 i 9 ustawy

    -- te pola trzeba wariantowac w zaleznosci od rodzaju dok. (a jak zaliczkowe?)
    SUM(IF(v.idvat IN (2),v.netto,'')) AS P_13_6_1, -- Suma wartości sprzedaży objętej stawką 0% z wyłączeniem wewnątrzwspólnotowej dostawy towarów i eksportu. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy
    SUM(IF(v.idvat IN (2),v.netto,'')) AS P_13_6_2, -- Suma wartości sprzedaży objętej stawką 0% w przypadku wewnątrzwspólnotowej dostawy towarów. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy
    SUM(IF(v.idvat IN (2),v.netto,'')) AS P_13_6_3, -- -- Suma wartości sprzedaży objętej stawką 0% w przypadku eksportu. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy
    SUM(IF(v.idvat IN (3),v.netto,'')) AS P_13_7,  -- Suma wartości sprzedaży zwolnionej od podatku. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy wartości sprzedaży

    0 AS P_13_8, -- Suma wartości sprzedaży w przypadku dostawy towarów oraz świadczenia usług poza terytorium kraju, z wyłączeniem kwot wykazanych w polach P_13_5 i P_13_9. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy wartości sprzedaży

    0 AS P_13_9, -- Suma wartości świadczenia usług, o których mowa w art. 100 ust. 1 pkt 4 ustawy. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy wartości sprzedaży

    0 AS P_13_10, -- Suma wartości sprzedaży w procedurze odwrotnego obciążenia, dla której podatnikiem jest nabywca zgodnie z art. 17 ust. 1 pkt 7 i 8 ustawy oraz innych przypadków odwrotnego obciążenia występujących w obrocie krajowym. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy, o której mowa w art. 106j ust. 2 pkt 5 ustawy

    0 AS P_13_11, -- Suma wartości sprzedaży w procedurze marży, o której mowa w art. 119 i art. 120 ustawy. W przypadku faktur zaliczkowych, kwota zaliczki. W przypadku faktur korygujących, kwota różnicy wartości sprzedaży

    SUM(_Rnd2(v.bruttowal)) AS P_15, -- naleznosc ogolem
    n.kurs AS KursWalutyZ,
    IF(n.jpktyp =101 ,2,1) AS P_16, --  1 jezeli "metoda kasowa" z ustawy, 2 gdy nie

    2 AS P_17, -- 1 jezeli samofakturowanie, mamy na to znacznik?

    IF((SELECT COUNT(*) FROM opng_vat v1 WHERE v1.idvat=19 AND v1.idnoper = n.guid)>0,2,1) AS P_18,
    -- IF(n.jpkflags like '%MPP%',2,1) AS P_18, -- 1 jezeli odwrotne obciazenie
    IF(n.split_payment=1, 2, 1) AS P_18A, -- 1 true jezeli MPP

    IF(IFNULL(e1.jpkP19,0)>0,1,0) AS P_19, -- Znacznik dostawy towarów lub świadczenia usług zwolnionych od podatku na podstawie art. 43 ust. 1, art. 113 ust. 1 i 9 albo przepisów wydanych na podstawie art. 82 ust. 3 ustawy lub na podstawie innych przepisów
    IFNULL(e1.jpkP19A,'') AS P_19A,
    -- '' AS P_19A, -- Jeśli pole P_19 równa się "1" - należy wskazać przepis ustawy albo aktu wydanego na podstawie ustawy, na podstawie którego podatnik stosuje zwolnienie od podatku
    IFNULL(e1.jpkP19B,'') AS P_19B,
    -- '' AS P_19B, -- Jeśli pole P_19 równa się "1" - należy wskazać przepis dyrektywy 2006/112/WE, który zwalnia od podatku taką dostawę towarów lub takie świadczenie usług
    IFNULL(e1.jpkP19C,'') AS P_19C, -- Jeśli pole P_19 równa się "1" - należy wskazać inną podstawę prawną wskazującą na to, że dostawa towarów lub świadczenie usług korzysta ze zwolnienia

    1 AS P_19N,-- Znacznik braku dostawy towarów lub świadczenia usług zwolnionych od podatku na podstawie art. 43 ust. 1, art. 113 ust. 1 i 9 ustawy albo przepisów wydanych na podstawie art. 82 ust. 3 ustawy lub na podstawie innych przepisów

    0 AS P_22, -- Znacznik wewnątrzwspólnotowej dostawy nowych środków transportu
    2 AS P_42_5, -- Jeśli występuje obowiązek, o którym mowa w art. 42 ust. 5 ustawy, należy podać wartość "1", w przeciwnym przypadku - wartość "2"

    IFNULL(e1.jpkP22A,'') AS P_22A,
    0 AS P_NrWierszaNST, -- Numer wiersza faktury, w którym wykazano dostawę nowego środka transportu
    '' AS P_22BMK, -- dane nowego srodka transportu
    '' AS P_22BMD,
    '' AS P_22BK,
    '' AS P_22BNR,
    '' AS P_22BRP,
    IFNULL(e1.jpkP22B,'') AS P_22B,
    '' AS P_22B1,
    '' AS P_22B2,
    '' AS P_22B3,
    '' AS P_22B4,
    '' AS P_22BT,
    IFNULL(e1.jpkP22C,'') AS P_22C,
    '' AS P_22C1,
    '' AS P_22D,
    '' AS P_22D1,
    1 AS P_22N, -- Znacznik braku wewnątrzwspólnotowej dostawy nowych środków transportu
    2 AS P_23, -- W przypadku faktur wystawianych w procedurze uproszczonej przez drugiego w kolejności podatnika, o którym mowa w art. 135 ust. 1 pkt 4 lit. b i c oraz ust. 2, zawierającej adnotację, o której mowa w art. 136 ust. 1 pkt 1 i stwierdzenie, o którym mowa w art. 136 ust. 1 pkt 2 ustawy należy podać wartość "1", w przeciwnym przypadku - wartość "2"

    -- marze sa do sprawdzenia, gdzie to jest w danych, bo nie pamietam
    0 AS P_PMarzy, -- W przypadku wystąpienia procedur marży, o których mowa w art. 119 lub 120 ustawy należy podać wartość "1", w przeciwnym przypadku - wartość "2"
    0 AS P_PMarzy_2, -- to dawne pola P_106...
    0 AS P_PMarzy_3_1,
    0 AS P_PMarzy_3_2,
    0 AS P_PMarzy_3_3,
    1 AS P_PMarzyN, -- Znacznik braku wystąpienia procedur marży, o których mowa w art. 119 lub art. 120 ustawy, odwrotnosc P_PMarzy

    -- tutaj mamy urposzczenie, bo typow faktur jest wiecej; ZAL, ROZ, UPR, KOR_ZAL, KOR_ROZ,
    -- do uzupelnienia w programie?
    CASE WHEN n.rodzaj IN (1,2,50,80,69) THEN 'VAT' -- 69 to faktura spedycyjna
            WHEN n.rodzaj IN (3,4,85,90,105) THEN 'KOR' -- 105 to korekta zbiorcza
    END AS RodzajFaktury,

    n.korektatytulem AS PrzyczynaKorekty,

    1 AS TypKorekty, -- t jest dla mmnie zupeline niejasne, sa typy 1,2,3

    IFNULL(n.korektadata,'') AS DataWystFaKorygowanej,
    IFNULL(n.korektanrdokfin,'') AS NrFaKorygowanej,
    0 AS NrKSeF, -- Znacznik numeru KSeF faktury korygowanej
    '' AS NrKSeFFaKorygowanej, -- Numer identyfikujący fakturę korygowaną w Krajowym Systemie e-Faktur (KSeF)
    1 AS NrKSeFN, -- Znacznik faktury korygowanej wystawionej poza KSeF
    '' AS OkresFaKorygowanej,
    '' AS NrFaKorygowany, -- -- Poprawny numer faktury korygowanej w przypadku, gdy przyczyną korekty jest błędny numer faktury korygowanej. W polu NrFaKorygowanej należy wówczas wskazać ten błędny numer

    IF(n.jpkflags like '%FP%',2,1) AS FP,
    IF(n.jpktyp = 3 ,2,1) AS TP,

    -- z uwag?
    '' AS DodatkowyOpis, -- Pola przeznaczone dla wykazywania dodatkowych danych na fakturze, w tym wymaganych przepisami prawa, dla których nie przewidziano innych pól/elementów - uwaga, pole jest typu klucz-wartosc, co trzeba bedzie obsluzyc osobno
    /*<DodatkowyOpis>
            <Klucz>preferowane godziny dowozu</Klucz>
            <Wartosc>dni robocze 17:00 - 20:00</Wartosc>
        </DodatkowyOpis>
    */

    '' AS FakturaZaliczkowa, -- Numery faktur zaliczkowych lub ich numery KSeF, jeśli zostały wystawione z użyciem KSeF
    1 NrKSeFZN, -- Znacznik faktury zaliczkowej wystawionej poza KSeF
    '' AS NrFaZaliczkowej, -- Numer faktury zaliczkowej wystawionej poza KSeF. Pole obowiązkowe dla faktury wystawianej po wydaniu towaru lub wykonaniu usługi, o której mowa w art. 106f ust. 3 ustawy i ostatniej z faktur, o której mowa w art. 106f ust. 4 ustawy
    '' NrKSeFFaZaliczkowej, -- Numer identyfikujący fakturę zaliczkową w KSeF. Pole obowiązkowe w przypadku, gdy faktura zaliczkowa była wystawiona za pomocą KSeF
    0 AS ZwrotAkcyzy, -- -- Informacja dodatkowa niezbędna dla rolników ubiegających się o zwrot podatku akcyzowego zawartego w cenie oleju napędowego

    '' AS xml
    FROM opng n
    INNER JOIN opng_vat v ON v.idnoper = n.guid
    INNER JOIN operdoc op ON op.rodzaj = n.rodzaj
    INNER JOIN waluty w ON w.idn = n.waluta
    LEFT JOIN opng_ext e1 ON e1.guid = n.guid
    WHERE n.GUID = _GUID
    AND n.deleted = 0
    GROUP BY n.guid
    ORDER BY n.datawplywu, n.idn;
    -- limit 5;


    -- dane dodatkowe, ale tutaj jest sporo watpliwosci, np co do form platnosci, daty zaplaty (rozliczenia?)
    INSERT INTO t_faktura_dod
    SELECT n.guid,
    IF(n.nierozliczony=0, 1, 0) AS Zaplacono,
    n.dataplatnosci AS DataZaplaty,
    CASE WHEN pl.rodzaj = 0 THEN '1' -- gotowka
    WHEN pl.rodzaj = 1 THEN '6' -- przelew
    WHEN pl.rodzaj = 3 THEN '5' -- faktoring na kredyt
    ELSE '6'
    END AS FormaPlatnosci,
    IFNULL((select valuea from IReg where idkey='KRS'),'') AS KRS,
    (select valuea from IReg where idkey='REGON' and Idpath like '%DaneFirmy') AS REGON,
    (select valuea from IReg where idkey='BDO') AS BDO,
    '' AS xml
    FROM opng n
    LEFT JOIN platnosc pl ON pl.Idn = n.sposobplatn
    WHERE n.GUID = _GUID
    AND n.deleted = 0
    GROUP BY n.guid
    ;



-- dane podmiotow, w innej tabeli
/*
    UPDATE t_faktura SET
                P_3A = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(P_3A,'<',''),'>',''),'&','and'),'\n',''),CHAR(31),''),'\r',' '),
                P_3B = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(P_3B,'<',''),'>',''),'&','and'),'\n',''),CHAR(31),''),'\r',' '),
                P_3C = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(P_3C,'<',''),'>',''),'&','and'),'\n',''),CHAR(31),''),'\r',' '),
                P_3D = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(P_3D,'<',''),'>',''),'&','and'),'\n',''),CHAR(31),''),'\r',' '),
                P_5B = REPLACE(REPLACE(P_5B,' ',''),'-','')
    ;
        UPDATE t_faktura SET
                P_5B = IF(LEFT(P_5B,1) NOT REGEXP '^[0-9]',RIGHT(P_5B, LENGTH(P_4B)-1),P_5B);
        UPDATE t_faktura SET
                P_5B = IF(LEFT(P_5B,1) NOT REGEXP '^[0-9]',RIGHT(P_5B, LENGTH(P_4B)-1),P_5B);

    -- przekodowanie prefiksow nipow wg krajow - tutaj problemem jest burdel w bazach krajow/miast w firmach
    UPDATE t_faktura t, kontrah k, Miasta m
        SET t.P_5A = m.idnkraju
        WHERE m.nazwamiasta=k.nazwamiasta AND k.guid = kontrguid AND P_5A = '' AND P_5B <> '';

        UPDATE t_faktura SET
            P_5A = '', P_5B = ''
        WHERE P_5A NOT IN ('AT', 'BE', 'BG', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'EL', 'HR',
            'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'GB', 'IC', 'XI', 'XJ', 'MC');
*/
    SET @a588 = 'za naglowkiem';



    --  sprawdzenie czy grupowac zwyczajnie czy nie
    CALL _IReg_Get('OPNGINFOPATH', 'Dok. drukować grupując towary', 0, 'INT', @session.grupowanie.pozycji, '0');

    -- sprawdzenie czy nie grupowanie internalne i wtedy inna sciezka
    IF (select count(*) from oppo where (idnoper = _GUID OR idnoperfin = _GUID) and grp_GUID <> '') > 0 THEN
        SET @session.grupowanie.pozycji = '10';
    END IF;










    INSERT INTO t_faktura_poz
        SELECT p.guid AS guid_poz,
        t.guid AS guid,
        p.idntowr,
        p.lp, p.guid,
        '' AS P_6A, -- data dostawy pozycji
        p.towrnazwa AS P_7, -- nazwa towaru
        p.guid as Indeks,
        '' AS GTIN,
        p.pkwiu,
        tow.pcn AS CN,
        '' AS PKOB,
        j.nazwa AS P_8A, -- jednostka miary
        p.ilosc AS P_8B, -- ilosc towaru
        IF(p.ilosc=0,_Rnd2(p.wartnetwal),_Rnd2(p.wartnetwal/p.ilosc)) AS P_9A, -- cena netto
        IF(p.ilosc=0,_Rnd2(p.wartbrtwal),_Rnd2(p.wartbrtwal/p.ilosc)) AS P_9B, -- cena brutto
        0 AS P_10, -- rabaty o ile nie sa w cenie netto
        _Rnd2(p.wartnetwal) AS P_11, -- wartosc netto
        _Rnd2(p.wartbrtwal) AS P_11A, -- wartosc brutto
        -- _Rnd2(p.wartvat/t.kurs) AS P_11Vat, -- wartosc podatku vat, tutaj troche lipa, jest tylko w pln, nie wiem ktora wersja jest sluszniejsza
        _Rnd2(p.wartbrtwal-p.wartnetwal) AS P_11Vat,
        CASE WHEN ev.shortname='NP' THEN 'np'
            WHEN ev.shortname='odwr.obc.' THEN 'oo'
            ELSE LEFT(REPLACE(ev.shortname,'%',''),2)
        END AS P_12, -- stawka podatku
        '' AS P_12_XII,
        0 AS P_12_Zal_15, -- -- Znacznik dla towaru lub usługi wymienionych w załączniku nr 15 do ustawy - wartość "1"
        '' AS KwotaAkcyzy,
        '' AS GTU,
        '' AS Procedura,
        t.kurs AS KursWaluty,
        -- za diabla nie wiem o co chodzi
        0 AS StanPrzed, -- Znacznik stanu przed korektą w przypadku faktury korygującej lub faktury korygującej fakturę wystawioną w związku z art. 106f ust. 3 ustawy, w przypadku gdy korekta dotyczy danych wykazanych w pozycjach faktury i jest dokonywana w sposób polegający na wykazaniu danych przed korektą i po korekcie jako osobnych wierszy z odrębną numeracją oraz w przypadku potwierdzania braku zmiany wartości danej pozycji
        '' AS xml
        FROM oppo p, t_faktura t, Jednostki j, v_erp_vat ev, TowrNg tow
        WHERE (p.idnoper = t.guid OR p.idnoperfin = t.guid) AND p.jednostka = j.idn AND ev.ID = p.idnvat AND tow.GUID = p.idntowr
        ;


    SET @a625 = 'za pozycjami';

    UPDATE t_faktura SET xml =
        CONCAT('<Fa>\n',
        '<KodWaluty>',KodWaluty,'</KodWaluty>\n',
        '<P_1>',P_1,'</P_1>\n',
        '<P_1M>',P_1M,'</P_1M>\n',
        '<P_2>',P_2,'</P_2>\n',
        IF(WZ='','',CONCAT('<WZ>',WZ,'</WZ>\n')),
        '<P_6>',P_6,'</P_6>\n',
        --  tutaj powinno byc OkresFa, ale pomijam
        IF(P_14_1W=0,'',CONCAT('<P_13_1>',P_13_1,'</P_13_1>\n')),
        IF(P_14_1W=0,'',CONCAT('<P_14_1>',P_14_1,'</P_14_1>\n')),
        IF(P_14_1W=0,'',CONCAT('<P_14_1W>',P_14_1W,'</P_14_1W>\n')),
        IF(P_14_2W=0,'',CONCAT('<P_13_2>',P_13_2,'</P_13_2>\n')),
        IF(P_14_2W=0,'',CONCAT('<P_14_2>',P_14_2,'</P_14_2>\n')),
        IF(P_14_2W=0,'',CONCAT('<P_14_2W>',P_14_2W,'</P_14_2W>\n')),
        IF(P_14_3W=0,'',CONCAT('<P_13_3>',P_13_3,'</P_13_3>\n')),
        IF(P_14_3W=0,'',CONCAT('<P_14_3>',P_14_3,'</P_14_3>\n')),
        IF(P_14_3W=0,'',CONCAT('<P_14_3W>',P_14_3W,'</P_14_3W>\n')),
        IF(P_14_4W=0,'',CONCAT('<P_13_4>',P_13_4,'</P_13_4>\n')),
        IF(P_14_4W=0,'',CONCAT('<P_14_4>',P_14_4,'</P_14_4>\n')),
        IF(P_14_4W=0,'',CONCAT('<P_14_4W>',P_14_4W,'</P_14_4W>\n')),
        IF(P_14_5=0,'',CONCAT('<P_13_5>',P_13_5,'</P_13_5>\n')),
        IF(P_14_5=0,'',CONCAT('<P_14_5>',P_14_5,'</P_14_5>\n')),
        IF(P_13_6_1=0,'',CONCAT('<P_13_6_1>',P_13_6_1,'</P_13_6_1>\n')),
        IF(P_13_6_2=0,'',CONCAT('<P_13_6_2>',P_13_6_2,'</P_13_6_2>\n')),
        IF(P_13_6_3=0,'',CONCAT('<P_13_6_3>',P_13_6_3,'</P_13_6_3>\n')),
        IF(P_13_7=0,'',CONCAT('<P_13_7>',P_13_7,'</P_13_7>\n')),
        IF(P_13_8=0,'',CONCAT('<P_13_8>',P_13_8,'</P_13_8>\n')),
        IF(P_13_9=0,'',CONCAT('<P_13_9>',P_13_9,'</P_13_9>\n')),
        IF(P_13_10=0,'',CONCAT('<P_13_10>',P_13_10,'</P_13_10>\n')),
        IF(P_13_11=0,'',CONCAT('<P_13_11>',P_13_11,'</P_13_11>\n')),
        '<P_15>',P_15,'</P_15>\n',
        IF(KursWalutyZ=0,'',CONCAT('<KursWalutyZ>',KursWalutyZ,'</KursWalutyZ>\n')),
        '<Adnotacje>\n',
        '<P_16>',P_16,'</P_16>\n',
        '<P_17>',P_17,'</P_17>\n',
        '<P_18>',P_18,'</P_18>\n',
        '<P_18A>',P_18A,'</P_18A>\n',
        '<Zwolnienie>\n',
            IF(P_19=0,'',CONCAT('<P_19>',P_19,'</P_19>\n')),
            IF(P_19A=0,'',CONCAT('<P_19A>',P_19A,'</P_19A>\n')),
            IF(P_19B=0,'',CONCAT('<P_19B>',P_19B,'</P_19B>\n')),
            IF(P_19C=0,'',CONCAT('<P_19C>',P_19C,'</P_19C>\n')),
            IF(P_19N=0,'',CONCAT('<P_19N>',P_19N,'</P_19N>\n')),
        '</Zwolnienie>\n',
        '<NoweSrodkiTransportu>\n',
            '<P_22N>',P_22N,'</P_22N>\n',
        '</NoweSrodkiTransportu>\n',
        '<P_23>',P_23,'</P_23>\n',
        '<PMarzy>\n',
            '<P_PMarzyN>',P_PMarzyN,'</P_PMarzyN>\n',
        '</PMarzy>\n',
        '</Adnotacje>\n',
        '<RodzajFaktury>',RodzajFaktury,'</RodzajFaktury>\n',
        IF(FP=0,'',CONCAT('<FP>',FP,'</FP>\n')),
        IF(TP=0,'',CONCAT('<TP>',TP,'</TP>\n'))
        )
        ;

        UPDATE t_xml SET xmlpoz1 = (SELECT GROUP_CONCAT(xml SEPARATOR '') FROM t_faktura);

-- sekcja pozycji faktury
        UPDATE t_faktura_poz SET xml =
            CONCAT('<FaWiersz>\n',
            '<NrWierszaFa>',NrWierszaFa,'</NrWierszaFa>\n',
            IF(UU_ID = '','',CONCAT('<UU_ID>',UU_ID,'</UU_ID>\n')),
            IF(P_6A = '','',CONCAT('<P_6A>',P_6A,'</P_6A>\n')),
            IF(P_7 = '','',CONCAT('<P_7>',P_7,'</P_7>\n')),
            IF(Indeks = '','',CONCAT('<Indeks>',Indeks,'</Indeks>\n')),
            IF(GTIN = '','',CONCAT('<GTIN>',GTIN,'</GTIN>\n')),
            IF(PKWiU = '','',CONCAT('<PKWiU>',PKWiU,'</PKWiU>\n')),
            IF(CN = '','',CONCAT('<CN>',CN,'</CN>\n')),
            IF(PKOB = '','',CONCAT('<PKOB>',PKOB,'</PKOB>\n')),
            '<P_8A>',P_8A,'</P_8A>\n',
            '<P_8B>',P_8B,'</P_8B>\n',
            IF(P_9A = 0,'',CONCAT('<P_9A>',P_9A,'</P_9A>\n')),
            IF(P_9B = 0,'',CONCAT('<P_9B>',P_9B,'</P_9B>\n')),
            IF(P_10 = 0,'',CONCAT('<P_10>',P_10,'</P_10>\n')),
            IF(P_11 = 0,'',CONCAT('<P_11>',P_11,'</P_11>\n')),
            IF(P_11A = 0,'',CONCAT('<P_11A>',P_11A,'</P_11A>\n')),
            IF(P_11Vat = 0,'',CONCAT('<P_11Vat>',P_11Vat,'</P_11Vat>\n')),
            IF(P_12 = 0,'',CONCAT('<P_12>',P_12,'</P_12>\n')),
            IF(P_12_XII = 0,'',CONCAT('<P_12_XII>',P_12_XII,'</P_12_XII>\n')),
            IF(P_12_Zal_15 = 0,'',CONCAT('<P_12_Zal_15>',P_12_Zal_15,'</P_12_Zal_15>\n')),
            IF(KwotaAkcyzy = '','',CONCAT('<KwotaAkcyzy>',KwotaAkcyzy,'</KwotaAkcyzy>\n')),
            IF(GTU = '','',CONCAT('<GTU>',GTU,'</GTU>\n')),
            IF(Procedura = '','',CONCAT('<Procedura>',Procedura,'</Procedura>\n')),
            IF(KursWaluty = 0,'',CONCAT('<KursWaluty>',KursWaluty,'</KursWaluty>\n')),
            '</FaWiersz>\n')
        ;

            UPDATE t_xml SET xmlpoz2 = (SELECT GROUP_CONCAT(xml ORDER BY NrWierszaFa SEPARATOR '') FROM t_faktura_poz);

            -- SET _XMLpoz = '';
            -- SET _XMLpoz = CONCAT(_XMLpoz, SPACE(@xml.IC*cSL), '</FaWiersze>\n');

            -- UPDATE t_xml SET xmlpoz2 = CONCAT('\n',xmlpoz2,IFNULL(_XMLpoz,'brak2'),'\n');



-- tutaj warunki platnosci, warunki transkacji i stopka - wszystko z naglowka, z tabeli t_faktura_dod, na razie w wersji podstawowej

        UPDATE t_faktura_dod SET xml =
        CONCAT('<Platnosc>\n',
            IF(Zaplacono = 0,'',CONCAT('<Zaplacono>',Zaplacono,'</Zaplacono>\n')),
            IF(DataZaplaty = '' OR Zaplacono = 0,'',CONCAT('<DataZaplaty>',DataZaplaty,'</DataZaplaty>\n')),
            '<FormaPlatnosci>',FormaPlatnosci,'</FormaPlatnosci>\n',
            '</Platnosc>\n',

/*
        <WarunkiTransakcji>
            <Zamowienia>
                <DataZamowienia>2022-01-26</DataZamowienia>
                <NrZamowienia>4354343</NrZamowienia>
            </Zamowienia>
        </WarunkiTransakcji>
*/
        '</Fa>\n',
        '<Stopka>\n',
/*             <Informacje>
                <StopkaFaktury>Kapiał zakładowy 5 000 000</StopkaFaktury>
            </Informacje>
*/
            '<Rejestry>\n',
                IF(KRS = '','',CONCAT('<KRS>',KRS,'</KRS>\n')),
                IF(REGON = '','',CONCAT('<REGON>',REGON,'</REGON>\n')),
                IF(BDO = '','',CONCAT('<BDO>',BDO,'</BDO>\n')),
            '</Rejestry>\n',
        '</Stopka>'
        );

        UPDATE t_xml SET xmlpoz3 = (SELECT GROUP_CONCAT(xml SEPARATOR '') FROM t_faktura_dod);

            /*
-- sekcja zamowien
        SELECT COUNT(*) INTO _liczba_wierszy FROM t_zamowienie;

        IF _liczba_wierszy > 0 THEN
            SELECT SUM(_Rnd2(WartoscZamowienia)) INTO _wartosc_faktury FROM t_zamowienie;

            UPDATE t_zamowienie SET xml =
            CONCAT('<ZamowienieWiersz>\n',
            '<P_7Z>',P_7Z,'</P_7Z>\n',
            '<P_8AZ>',P_8AZ,'</P_8AZ>\n',
            '<P_8BZ>',P_8BZ,'</P_8BZ>\n',
            '<P_9AZ>',P_9AZ,'</P_9AZ>\n',
            '<P_11NettoZ>',P_11NettoZ,'</P_11NettoZ>\n',
            '<P_11VatZ>',P_11VatZ,'</P_11VatZ>\n',
            '<P_12Z>',P_12Z,'</P_12Z>\n',
            IF(P_12_XII = 0,'',CONCAT('<P_12_XII>',P_12_XII,'</P_12_XII>\n')),
            '</ZamowienieWiersz>\n')
            ;

            UPDATE t_xml SET xmlpoz3 = (SELECT CONCAT('<Zamowienie>\n<P_2AZ>',P_2AZ,'</P_2AZ>\n','<WartoscZamowienia>',WartoscZamowienia,'</WartoscZamowienia>\n',
            GROUP_CONCAT(xml ORDER BY P_7Z SEPARATOR ''),
            '\n</Zamowienie>\n'
            ) FROM t_zamowienie GROUP BY P_2AZ);


            SET _XMLpoz = '';
            SET _XMLpoz = CONCAT( SPACE(@xml.IC*cSL), '<ZamowienieCtrl>\n');
            SET _XMLpoz = CONCAT(_XMLpoz, SPACE(@xml.IC*cSL), '<LiczbaZamowien>',_liczba_wierszy,'</LiczbaZamowien>\n');
            SET _XMLpoz = CONCAT(_XMLpoz, SPACE(@xml.IC*cSL), '<WartoscZamowien>',IFNULL(_wartosc_faktury,0),'</WartoscZamowien>\n');
            SET _XMLpoz = CONCAT(_XMLpoz, SPACE(@xml.IC*cSL), '</ZamowienieCtrl>\n');

            UPDATE t_xml SET xmlpoz3 = CONCAT('\n',xmlpoz3,IFNULL(_XMLpoz,'brak3'),'\n');

        ELSE
            UPDATE t_xml SET xmlpoz3 = '';
        END IF;
*/


            
    /*
    -- wpis do logu
    INSERT INTO `log` (useridn, ip, miejsce, czynnosc, GUIDlink, info, osobaguid) 
    SELECT @session.CurrLogin, @session.CurrMyIPOnly, 5087, 120, guid, 'Wygenerowanie pliku RUD dla ZUS', -- kartoteka zleceń, Export
    (SELECT guid FROM osoby WHERE idnuser = @session.CurrLogin LIMIT 1)
    FROM t_umowy;  
    */


    update t_xml set
        xml = CONCAT(xmlnag,'\n',xmlnag2,IFNULL(xmlpoz1,''),xmlpoz2,IFNULL(xmlpoz3,''),xmlpoz4,'\n</Faktura>');

    -- CALL fr_ht_zest_jpk('ZAPIS', '', '', '', '', _OdDnia,_DoDnia, '', '', _Param_B, '',_MODE);

    select CONCAT('KSEF_',P_2) INTO _nazwa_xml FROM t_faktura;

    SELECT 0 AS status_xml, _nazwa_xml AS nazwa_xml, `xml` AS _XML FROM t_xml;


/*
    DROP TABLE IF EXISTS t_xml;
    DROP TABLE IF EXISTS t_faktura;
    DROP TABLE IF EXISTS t_faktura_dod;
    DROP TABLE IF EXISTS t_faktura_poz;
    DROP TABLE IF EXISTS t_zamowienie;
*/

END IF;    --    IF _MODE = 'create.ef.xml_old'

-- tutaj nowsza wersja, korzystajaca juz z danych z innej procedury, chwilowo wylaczona, zeby staroc uruchomic.
IF (_MODE = 'create.ef.xml_nowy') THEN

    CALL e_dekl_print_tools('DANE_KSEF_FA2','',_GUID,'','','','','','','','');

        UPDATE t_fa SET xml =
        CONCAT('<Fa>\n',
        '<KodWaluty>',KodWaluty,'</KodWaluty>\n',
        '<P_1>',P_1,'</P_1>\n',
        '<P_1M>',P_1M,'</P_1M>\n',
        '<P_2>',P_2,'</P_2>\n',
        IF(WZ='','',CONCAT('<WZ>',WZ,'</WZ>\n')),
        '<P_6>',P_6,'</P_6>\n',
        --  tutaj powinno byc OkresFa, ale pomijam
        '<P_13_1>',P_13_1,'</P_13_1>\n',
        '<P_14_1>',P_14_1,'</P_14_1>\n',
        IF(P_14_1W=0,'',CONCAT('<P_14_1W>',P_14_1W,'</P_14_1W>\n')),
        '<P_13_2>',P_13_2,'</P_13_2>\n',
        '<P_14_2>',P_14_2,'</P_14_2>\n',
        IF(P_14_2W=0,'',CONCAT('<P_14_2W>',P_14_2W,'</P_14_2W>\n')),
        '<P_13_3>',P_13_3,'</P_13_3>\n',
        '<P_14_3>',P_14_3,'</P_14_3>\n',
        IF(P_14_3W=0,'',CONCAT('<P_14_3W>',P_14_3W,'</P_14_3W>\n')),
        '<P_13_4>',P_13_4,'</P_13_4>\n',
        '<P_14_4>',P_14_4,'</P_14_4>\n',
        IF(P_14_4W=0,'',CONCAT('<P_14_4W>',P_14_4W,'</P_14_4W>\n')),
        '<P_13_5>',P_13_5,'</P_13_5>\n',
        IF(P_14_5=0,'',CONCAT('<P_14_5>',P_14_5,'</P_14_5>\n')),
        IF(P_13_6_1=0,'',CONCAT('<P_13_6_1>',P_13_6_1,'</P_13_6_1>\n')),
        IF(P_13_6_2=0,'',CONCAT('<P_13_6_2>',P_13_6_2,'</P_13_6_2>\n')),
        IF(P_13_6_3=0,'',CONCAT('<P_13_6_3>',P_13_6_3,'</P_13_6_3>\n')),
        IF(P_13_7=0,'',CONCAT('<P_13_7>',P_13_7,'</P_13_7>\n')),
        IF(P_13_8=0,'',CONCAT('<P_13_8>',P_13_8,'</P_13_8>\n')),
        IF(P_13_9=0,'',CONCAT('<P_13_9>',P_13_9,'</P_13_9>\n')),
        IF(P_13_10=0,'',CONCAT('<P_13_10>',P_13_10,'</P_13_10>\n')),
        IF(P_13_11=0,'',CONCAT('<P_13_11>',P_13_11,'</P_13_11>\n')),
        '<P_15>',P_15,'</P_15>\n',
        IF(KursWalutyZ=0,'',CONCAT('<KursWalutyZ>',KursWalutyZ,'</KursWalutyZ>\n')),
        '<Adnotacje>\n',
        '<P_16>',P_16,'</P_16>\n',
        '<P_17>',P_17,'</P_17>\n',
        '<P_18>',P_18,'</P_18>\n',
        '<P_18A>',P_18A,'</P_18A>\n',
        '<Zwolnienie>\n',
            IF(P_19=0,'',CONCAT('<P_19>',P_19,'</P_19>\n')),
            IF(P_19A=0,'',CONCAT('<P_19A>',P_19A,'</P_19A>\n')),
            IF(P_19B=0,'',CONCAT('<P_19B>',P_19B,'</P_19B>\n')),
            IF(P_19C=0,'',CONCAT('<P_19C>',P_19C,'</P_19C>\n')),
            IF(P_19N=0,'',CONCAT('<P_19N>',P_19N,'</P_19N>\n')),
        '</Zwolnienie>\n',
        '<NoweSrodkiTransportu>\n',
            '<P_22N>',P_22N,'</P_22N>\n',
        '</NoweSrodkiTransportu>\n',
        '<P_23>',P_23,'</P_23>\n',
        '<PMarzy>\n',
            '<P_PMarzyN>',P_PMarzyN,'</P_PMarzyN>\n',
        '</PMarzy>\n',
        '</Adnotacje>\n',
        '<RodzajFaktury>',RodzajFaktury,'</RodzajFaktury>\n',
        IF(FP=0,'',CONCAT('<FP>',FP,'</FP>\n')),
        IF(TP=0,'',CONCAT('<TP>',TP,'</TP>\n'))
        )
        ;

        UPDATE t_xml SET xmlpoz1 = (SELECT GROUP_CONCAT(xml SEPARATOR '') FROM t_fa);

-- sekcja pozycji faktury
        UPDATE t_fa_poz SET xml =
            CONCAT('<FaWiersz>\n',
            '<NrWierszaFa>',NrWierszaFa,'</NrWierszaFa>\n',
            '<UU_ID>',UU_ID,'</UU_ID>\n',
            IF(P_6A = '','',CONCAT('<P_6A>',P_6A,'</P_6A>\n')),
            '<P_7>',P_7,'</P_7>\n',
            IF(Indeks = '','',CONCAT('<Indeks>',Indeks,'</Indeks>\n')),
            IF(GTIN = '','',CONCAT('<GTIN>',GTIN,'</GTIN>\n')),
            IF(PKWiU = '','',CONCAT('<PKWiU>',PKWiU,'</PKWiU>\n')),
            IF(CN = '','',CONCAT('<CN>',CN,'</CN>\n')),
            IF(PKOB = '','',CONCAT('<PKOB>',PKOB,'</PKOB>\n')),
            '<P_8A>',P_8A,'</P_8A>\n',
            '<P_8B>',P_8B,'</P_8B>\n',
            '<P_9A>',P_9A,'</P_9A>\n',
            '<P_9B>',P_9B,'</P_9B>\n',
            IF(P_10 = 0,'',CONCAT('<P_10>',P_10,'</P_10>\n')),
            IF(P_11 = 0,'',CONCAT('<P_11>',P_11,'</P_11>\n')),
            IF(P_11A = 0,'',CONCAT('<P_11A>',P_11A,'</P_11A>\n')),
            IF(P_11Vat = 0,'',CONCAT('<P_11Vat>',P_11Vat,'</P_11Vat>\n')),
            '<P_12>',P_12,'</P_12>\n',
            IF(P_12_XII = 0,'',CONCAT('<P_12_XII>',P_12_XII,'</P_12_XII>\n')),
            IF(P_12_Zal_15 = 0,'',CONCAT('<P_12_Zal_15>',P_12_Zal_15,'</P_12_Zal_15>\n')),
            IF(KwotaAkcyzy = '','',CONCAT('<KwotaAkcyzy>',KwotaAkcyzy,'</KwotaAkcyzy>\n')),
            IF(GTU = '','',CONCAT('<GTU>',GTU,'</GTU>\n')),
            IF(Procedura = '','',CONCAT('<Procedura>',Procedura,'</Procedura>\n')),
            '<KursWaluty>',KursWaluty,'</KursWaluty>\n',
            '</FaWiersz>\n')
        ;

            UPDATE t_xml SET xmlpoz2 = (SELECT GROUP_CONCAT(xml ORDER BY NrWierszaFa SEPARATOR '') FROM t_fa_poz);

            -- SET _XMLpoz = '';
            -- SET _XMLpoz = CONCAT(_XMLpoz, SPACE(@xml.IC*cSL), '</FaWiersze>\n');

            -- UPDATE t_xml SET xmlpoz2 = CONCAT('\n',xmlpoz2,IFNULL(_XMLpoz,'brak2'),'\n');



-- tutaj warunki platnosci, warunki transkacji i stopka - wszystko z naglowka, z tabeli t_faktura_dod, na razie w wersji podstawowej

        UPDATE t_faktura_dod SET xml =
        CONCAT('<Platnosc>\n',
            IF(Zaplacono = 0,'',CONCAT('<Zaplacono>',Zaplacono,'</Zaplacono>\n')),
            IF(DataZaplaty = '' OR Zaplacono = 0,'',CONCAT('<DataZaplaty>',DataZaplaty,'</DataZaplaty>\n')),
            '<FormaPlatnosci>',FormaPlatnosci,'</FormaPlatnosci>\n',
            '</Platnosc>\n',

/*
        <WarunkiTransakcji>
            <Zamowienia>
                <DataZamowienia>2022-01-26</DataZamowienia>
                <NrZamowienia>4354343</NrZamowienia>
            </Zamowienia>
        </WarunkiTransakcji>
*/
        '</Fa>\n',
        '<Stopka>\n',
/*             <Informacje>
                <StopkaFaktury>Kapiał zakładowy 5 000 000</StopkaFaktury>
            </Informacje>
*/
            '<Rejestry>\n',
                IF(KRS = '','',CONCAT('<KRS>',KRS,'</KRS>\n')),
                IF(REGON = '','',CONCAT('<REGON>',REGON,'</REGON>\n')),
                IF(BDO = '','',CONCAT('<BDO>',BDO,'</BDO>\n')),
            '</Rejestry>\n',
        '</Stopka>'
        );

        UPDATE t_xml SET xmlpoz3 = (SELECT GROUP_CONCAT(xml SEPARATOR '') FROM t_fa_dod);


        update t_xml set
        xml = CONCAT(xmlnag,'\n',xmlnag2,IFNULL(xmlpoz1,''),xmlpoz2,IFNULL(xmlpoz3,''),xmlpoz4,'\n</Faktura>');

    -- CALL fr_ht_zest_jpk('ZAPIS', '', '', '', '', _OdDnia,_DoDnia, '', '', _Param_B, '',_MODE);

    select CONCAT('KSEF_',P_2) INTO _nazwa_xml FROM t_fa;

    SELECT 0 AS status_xml, _nazwa_xml AS nazwa_xml, `xml` AS _XML FROM t_xml;


    IF NOT _DEBUG THEN
        DROP TABLE IF EXISTS t_xml;
        DROP TABLE IF EXISTS t_faktura;
        DROP TABLE IF EXISTS t_faktura_dod;
        DROP TABLE IF EXISTS t_faktura_poz;
        DROP TABLE IF EXISTS t_zamowienie;
    END IF;

END IF;    --    IF _MODE = 'create.ef.xml'


END$$

DELIMITER ;

/*
$Log: ht_ef_xml.sql,v $
Revision 1.8  2025/02/14 11:29:21  apro
brakujące pola, debug

*/
