*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    
*  generuje z vydejky, uz zapsane v doklay/obraty, soubor EDI ve formatu ED  96A DESADV
*  soubor se jmenuje edi_[m.ean_kupujiciho]_[c_dokl]_[RRRRMMDD-hhmmss].txt, takze i kdyz je budeme davat do jednoho adresari, 
*  prijemci si mohou stahnout jen ty sve, aniz by je museli parsovat
*  
*  2020-03-27 - aby se nam dobre pocitaly sloupce pro kontrolu, vygeneruju na konci 2 radky s cislovanim sloupcu.
*               protoze nezacinaj definovanymi typy radku (SYS, HDR, LIN), parsery by je mely ignorovat (vyni vykomentovano)
*  2020-06-03 - generuje se log vygenerovanych vydejek do stejneho adresare jako vydejky
*  2020-09-18 - pokud uz existuje vygenerovany soubor se stejnym ean_kupujiciho a c_dokl, je prejmenovan pridanim timestampu; to se stane pri volani z opravy
*  2022-07-24 - jako cislo faktury se posila doklady.pz2
*             - zapisuje se poznamkovy radek REM s verzi
*  2024-01-03 - log se generuje spriponou log, aby nematl parsery edi
*
*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    

PARAMETERS c_dokl

#DEFINE CRLF CHR(13)+CHR(10)
#DEFINE KOMENTAR "2022-07-24"


DO CASE 
CASE m.issql
    *nic
CASE m.machine = "evzenpc" .or. ATC("d_vinodir", m.gchom_path) + ATC("d_cekal", m.gchom_path) + ATC("d_masek", m.gchom_path) > 0

    SELECT doklady
    LOCATE FOR c_dokl = m.c_dokl
    c_partnera = doklady.c_partner
    SELECT partneri
    LOCATE FOR c_partner = m.c_partnera

    IF FOUND()
        ean_kupujiciho   = ALLTRIM(partneri.ico)
        ean_mista_dodani = ALLTRIM(IIF(EMPTY(partneri.edi_kod), ean_kupujiciho, partneri.edi_kod))
        ean_dodavatele   = ALLTRIM(m.hotel_ico)
        volny_text       = partneri.partner


        jmeno_edi_souboru  = m.gcexportpath + "edi_" + LOWER(m.ean_kupujiciho) + "_" + ALLTRIM(STR(m.c_dokl)) + "-"
        timestamp          = LEFT(SUBSTR(CHRTRAN(TTOC(DATETIME(),3), "T-:", ""), 3), 10)
        pocet_existujicich = ADIR(qqqq, m.jmeno_edi_souboru + "*.txt")
        FOR gev_iii = 1 TO m.pocet_existujicich
            RENAME     (m.gcexportpath + qqqq(gev_iii, 1))        TO        (m.gcexportpath + qqqq(gev_iii, 1) + "-" + m.timestamp)
            edi_zurnal (m.gcexportpath + qqqq(gev_iii, 1) + " renamed to " + m.gcexportpath + qqqq(gev_iii, 1) + "-" + m.timestamp)
        ENDFOR 

        jmeno_edi_souboru  = jmeno_edi_souboru + timestamp + ".txt"
        WAIT "generuji " + m.jmeno_edi_souboru WINDOW NOWAIT 
        txt_zurnal = " ean_kup:" + m.ean_kupujiciho + " ean_dodani:" + m.ean_mista_dodani + " " + ALLTRIM(m.volny_text) + " dodavatel:" + m.ean_dodavatele + " " + ALLTRIM(hotel_name) + " " + ALLTRIM(hotel_ico) + " soubor:" + m.jmeno_edi_souboru

        STRTOFILE("SYS" + PADR(m.ean_kupujiciho, 14) + "ED  96ADESADVP" + CRLF, m.jmeno_edi_souboru)

        DO zapis_radek_hlavicky

        SET ORDER TO c_karty IN karty
        SELECT * FROM obraty WHERE c_dokl = m.c_dokl INTO CURSOR doklad1
        SET RELATION TO c_karty INTO karty
        poradi = 0
        SCAN
            poradi = m.poradi + 1
            DO zapis_radek_telicka
        ENDSCAN 

*        DO cislovani_sloupcu
         STRTOFILE(CRLF + CRLF + "REM " + KOMENTAR, m.jmeno_edi_souboru, 1)

    ELSE 
        txt_zurnal = " partner nenalezen"
    ENDIF 
    edi_zurnal ( " c_dokl: " + ALLTRIM(STR(m.c_dokl,9)) + " c_partner:" + STR(m.c_partnera, 6) + m.txt_zurnal )
    WAIT CLEAR 
ENDCASE 


*    *    *    *    *    *    *    *    *    *    *    *    *    *
PROCEDURE  zapis_radek_hlavicky
radek = "HDR"                                            &&  1 C3  P

*radek = m.radek + PADR(nx(doklady.c_dokl)         , 15) &&  2 C15 P cislo dodaciho listu
radek = m.radek + PADR(doklady.pz2                , 15)  &&  2 C15 P cislo dodaciho listu

radek = m.radek + PADR(DTOS(doklady.datum_dokl)   ,  8)  &&  3 C8  P datum vystaveni
radek = m.radek + SPACE(                             8)  &&  4 C8  N datum odjezdu dodavky  - nic 
radek = m.radek + SPACE(                             4)  &&  5 C4  N cas odjezdu dodavky  - nic
radek = m.radek + SPACE(                             8)  &&  6 C8  P datum ocekavane dodavky - nic
radek = m.radek + SPACE(                             4)  &&  7 C4  N cas ocekavanedodavky - nic
radek = m.radek + SPACE(                            17)  &&  8 C17 N doprava - nic
radek = m.radek + SPACE(                            15)  &&  9 C15 P cislo objednavky zakaznika  - nic
radek = m.radek + PADR(nx(doklady.doklad)         , 15)  && 10 C15 N cislo faktury

radek = m.radek + PADR(ean_kupujiciho             , 17)  && 11 C17 P ean kupujiciho - ICO
radek = m.radek + PADR(ean_mista_dodani           , 17)  && 12 C17 P ean provozovny - partneri.edikod nebo pokud je prazdny, tak partneri.ico
radek = m.radek + SPACE(                            17)  && 13 C17 N ean fakturacniho mista - nic
radek = m.radek + PADR(ean_dodavatele             , 17)  && 14 C17 P ean dodavatele - ICO
radek = m.radek + SPACE(                            17)  && 15 C17 N ean distribuc.skladu dodavatele - nic
radek = m.radek + PADR(volny_text                 , 70)  && 16 C70 N nazev kupujiciho
radek = m.radek + SPACE(                            17)  && 17 C17 N ean objednatele - nic 
radek = m.radek + SPACE(                            15)  && 18 C15 N int. cislo dodavatele - nic
radek = m.radek + SPACE(                             8)  && 19 C8  N datum vystaveni objednavky - nic
radek = m.radek + PADR(m.hotel_name               , 35)  && 20 C35 N obch jmeno dodavatele
radek = m.radek + PADR(m.hotel_ico                , 15)  && 21 C15 N ICO dodavatele 
STRTOFILE(m.radek + CRLF, m.jmeno_edi_souboru, 1)


*    *    *    *    *    *    *    *    *    *    *    *    *    *
PROCEDURE  zapis_radek_telicka
radek = "LIN"                                      &&  1 C3
radek = m.radek + nx(m.poradi,      0 ,  6)       &&  2 N6    cislo radku
radek = m.radek + PADR(karty.bar_kod1, 25)         &&  3 C25   EAN zbozi
radek = m.radek + PADR(nx(c_karty)   , 25)         &&  4 C25   cislo zbozi dodavatele
radek = m.radek + PADR("Z"           ,  4)         &&  5 C4    typ polozky: Z:zbozi, O:obal
radek = m.radek + nx(1.0         , 3, 12)         &&  6 N12,3 pocet jednotek v baleni
radek = m.radek + nx(cena_part   , 2, 12)         &&  7 N12,2 cena za jednotku
radek = m.radek + nx(dan*100-100 , 2,  5)         &&  8 N5,2  sazba dph
radek = m.radek + nx(-mnozstvi   , 3, 12)         &&  9 N12,3 dodane mnozstvi
radek = m.radek + SPACE(3)                         && 10 C3    merna jednotka mnozstvi
radek = m.radek + SPACE(15)                        && 11 C15   cislo sarze
radek = m.radek + SPACE(8)                         && 12 C8    datum vyroby
radek = m.radek + SPACE(8)                         && 13 C8    datum trvanlivosti
radek = m.radek + SPACE(8)                         && 14 C8    datum pouzitelnosti
radek = m.radek + SPACE(15)                        && 15 C15   cislo objednavky zakaznika
radek = m.radek + SPACE(15)                        && 16 C15   cislo faktury
radek = m.radek + PADR(karty.nazev,    45)         && 17 C45   specifikace
radek = m.radek + SPACE(18)                        && 18 C18   sscc kod palety
STRTOFILE(m.radek + CRLF, m.jmeno_edi_souboru, 1)


*    *    *    *    *    *    *    *    *    *    *    *    *    *
PROCEDURE cislovani_sloupcu
STORE CRLF + "XXX " TO radek1, radek2
FOR gii = 5 TO 360
    IF m.gii % 10 = 0
        radek1 = radek1 + " "
        radek2 = radek2 + STR(INT(m.gii/10), 10)
    ELSE
        radek1 = radek1 + STR(m.gii % 10, 1)
    ENDIF     
ENDFOR 
STRTOFILE(CRLF + m.radek1 + m.radek2, m.jmeno_edi_souboru, 1)


*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    
*     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     *     
FUNCTION edi_zurnal (texticek)
small_log(m.texticek, "edi")
STRTOFILE( LEFT(TTOC(DATETIME(),3), 16) + PADC(m.gcuser_id, 5) + m.texticek + CHR(13)+CHR(10), m.gcexportpath + "edi_log_generovanych_vydejek.log", 1)
