 SET NAMES utf8;

DELIMITER $$

DROP PROCEDURE IF EXISTS `com_mailer`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `com_mailer`(
    IN _MODE VARCHAR(38), 
    IN _GUID VARCHAR(38),
    IN _Param_A VARCHAR(1024),
    IN _Param_B VARCHAR(255),
    IN _Param_C VARCHAR(255),
    IN _Param_D VARCHAR(255)
    )

/*
update IReg set valueb=1 where idkey like "SerwerMailSender";
call com_mailer('GET_ATTACHMENT',@guid,'','','','');
call com_mailer('UNSET_SENT',@guid,'','','','');
call com_mailer('SEND_OPER',@guid,'','','','');
call com_mailer('SEND_OPER.DEBUG',@guid,'','','','');
call com_mailer('SEND_ZMNG',@guid,'','','','');
oferta testowa COMEX
SET @guid=_CP1250'{07D13F28-2E4F-4DCA-BB69-34670F2A7DCB}',@SYSTEM.Client.Session.log_USER_GUID='DBF9'; -- jreliszko
SET @guid=_CP1250'{07D13F28-2E4F-4DCA-BB69-34670F2A7DCB}',@SYSTEM.Client.Session.log_USER_GUID='{6A3D3393-C50D-4D7E-93DE-E2DE50D78C6E}'; -- pserkowski
update dokumenty set doc_status=-10 where klucz=@guid order by idn desc limit 1;
CALL com_mailer('internal.set.sender',@GUID,'','','','');select @user_fullname,@user_email,@user_admail,@user_tel,@user_job_pos,@user_loc_name,@user_street,@user_city,@mail_from,@mail_from_user,@mail_from_faktury\G
*/

sproc:BEGIN 
    DECLARE _DUMPFILE VARCHAR(255);
    DECLARE _LIMIT INT;
    DECLARE _ScenarioGUID VARCHAR(38);
    DECLARE _GUIDpom VARCHAR(38);
    DECLARE _DEBUG INT;
    
    SET _DEBUG=_Param_D LIKE "%DEBUG%",_Param_D=REPLACE(_Param_D,'DEBUG','');
    -- przechodzimy na opcję "MODE.DEBUG"
    IF NOT _DEBUG THEN 
        SET _DEBUG=_MODE LIKE "%.DEBUG%",_MODE=REPLACE(_MODE,'.DEBUG',''); 
    END IF;

    SET @zamknijoper=0;
    
    IF _PARAM_D<>'' THEN
        SELECT GUID INTO _ScenarioGUID FROM rep_scenariusze WHERE guid=_Param_D;
    END IF;

    SET _ScenarioGUID = IFNULL(_ScenarioGUID, _Param_D);

    CALL _Globals_Get('Owner', @session.globals.Owner, NULL);

    SET 
      @.Sender.UserGUID = (@UG := IFNULL(@SYSTEM.Client.Session.log_USER_GUID, IFNULL(@session.INFO.User_GUID, @session.Registration.UserGUID))),
      @.Sender.UserLogin = IFNULL(@SYSTEM.Client.Session.log_USER, IFNULL(@session.INFO.User_Login, @session.Registration.UserLogin))
    ;

    IF @.Sender.UserGUID IS NULL THEN
        SELECT log_user,log_USER_GUID INTO @.Sender.UserLogin,@.Sender.UserGUID FROM _sys_db_logons WHERE guid=@SYSTEM.Client.Session.GUID;
        SET @.Sender.UserGUID = IFNULL(@.Sender.UserGUID,'ALL'),@.Sender.UserLogin = IFNULL(@.Sender.UserLogin,'root');
        SET @UG=@.Sender.UserGUID;
        IF _MODE LIKE "SEND%" THEN
            SET @table = IF(_MODE LIKE "%ZMNG%","zmng","opng");
            INSERT INTO log (useridn,osobaguid,ip,guidlink,table_link,miejsce,czynnosc,info)
            SELECT @.Sender.UserLogin,@.Sender.UserGUID,"com_mailer",_GUID,@table,3,8,CONCAT('MODE:',_MODE,' UserGUID nie ustawiony, sess:',ifnull(@SYSTEM.Client.Session.GUID,'?'));
        END IF;
    END IF;
    
    /*
        np. wstaw mail dla wys. z kadr
        CALL com_mailer('IReg.UPDATE..MAIL_FROM_XXX', '', 'MAIL_FROM_Kadry', 'portalpracowniczy@skok.pl', '', '');
    */
    IF _MODE LIKE 'IReg.UPDATE..MAIL_FROM_XXX' THEN    
        SET @.MAIL.FROM = _Param_A;
        INSERT IGNORE INTO IReg (IdPath, IdKey, VariableName, ValueA, GUID)
        SELECT iw.IdPath,iw.IdKey,iw.VariableName,IFNULL(i.ValueA, iw.ValueA) AS ValueA,iw.GUID
        FROM (SELECT
                _VarStr('INT\\SYSTEM\\MOTLAWA\\DaneFirmy') AS IdPath,
                _VarStr(@.MAIL.FROM) AS IdKey,
                _VarStr(CONCAT('@.Sender.', @.MAIL.FROM)) AS VariableName,
                _VarStr(_Param_B) AS ValueA,
                MD5(CONCAT('INT\\SYSTEM\\MOTLAWA\\DaneFirmy', @.MAIL.FROM, 0)) AS GUID
        ) iw
        LEFT JOIN IReg i ON i.IdKey LIKE iw.IdKey AND i.IdPath = iw.IdPath
        ON DUPLICATE KEY UPDATE VariableName = iw.VariableName
        ;
    END IF;

    /*
        Ustawia domyslna zmienną @.Sender.MAIL wg parametru _Param_A 
        jako np. Firmowy/MAIL_FROM_faktury/MAIL_FROM_zamowienia/MAIL_FROM_Place/MAIL_FROM_rozrach/USER/... etc,
        UWAGA gdy w param. _GUID jest jakas niepusta wartośc to sys. potraktuje to jako USER i może pobrac jako sendera waśnie mail usera
        a nie firmowy - gdy pusty user i tak sie pobierze i bedzie brany pod uwage przed firmowym 
        UWAGA 
        1. system, sprawdza czy jest w IRegu ODPOWIEDNI adres mailowy i 
        2. dopiero potem bierze mail 
        2.a  gdy podalismy _GUID uzytkownika a na koncu firmowy lub 
        2.b  _GUID = '' firmowy a na koncu uzytkownika
            Przykład dla maila fakturowego którego brak w bazie
                CALL com_mailer('SET.Sender.MAIL', '', 'MAIL_FROM_faktury', '', '', '');
                pojawi się mail firmowy 
                CALL com_mailer('SET.Sender.MAIL', 'Prac63', 'MAIL_FROM_faktury', '', '', '');
                pojawi się mail uzytkownika "Prac63" lub - w przypadku braku adresu - mail firmowy 
            
        Po wywołaniu calla w zmiennej @.Sender.MAIL MAMY PRAWIDŁOWY ADRES!!!!!!
        Przykłady
        sender jako firma
            CALL com_mailer('SET.@.Sender.MAIL', '', 'Firmowy', '', '', '');
        sender jako uzytkownik
            CALL com_mailer('SET.Sender.MAIL', 'Prac63', 'USER', '', '', ''); 
        sender jako handlowy/faktury
            CALL com_mailer('SET.Sender.MAIL', '', 'MAIL_FROM_faktury', '', '', '');
        sender jako handlowy/zamowienia
            CALL com_mailer('SET.Sender.MAIL', '', 'MAIL_FROM_zamowienia', '', '', '');
        sender jako kadry - ale gdy brak takiego adresu bedzie uzytkownik
            CALL com_mailer('SET.Sender.MAIL', 'Prac63', 'MAIL_FROM_Kadry', '', '', '');
    */
    IF _MODE IN ('SET.Sender.MAIL', 'SET.@.Sender.MAIL') THEN
        SET _GUID = IFNULL(_GUID, '');
    --  najpierw sprytne wywołanie dla uzytkownika lub domyslne	
        CALL com_mailer(IF(_GUID = '', 'VAR', 'VAR.for.UserGUID'), _GUID, '', '', '', '');
    --  Ustaw wstepnie zmienną @.Sender.MAIL
        SET @.Sender.MAIL = 
            CASE 
            WHEN _Param_A IN ('', 'SENDER', 'USER') THEN
                IFNULL(NULLIF(@.Sender.UserMail, ''), @.Sender.Nasz_Mail)
            WHEN _Param_A LIKE 'Firm%' THEN
                NULLIF(@.Sender.Nasz_Mail, '')
            WHEN _Param_A = 'MAIL_FROM_system' THEN
                NULLIF(@.Sender.MAIL_from_system, '')
            WHEN _Param_A = 'MAIL_FROM_accounts_system' THEN
                NULLIF(@.Sender.MAIL_FROM_accounts_system, '')
            WHEN _Param_A = 'MAIL_FROM_faktury' THEN
                NULLIF(@.Sender.MAIL_FROM_faktury, '')
            WHEN _Param_A = 'MAIL_FROM_zamowienia' THEN
                NULLIF(@.Sender.MAIL_FROM_zamowienia, '')	
            WHEN _Param_A = 'MAIL_FROM_rozrach' THEN
                NULLIF(@.Sender.MAIL_FROM_rozrach, '')
            WHEN _Param_A IN ('MAIL_FROM_Kadry') THEN
                IFNULL(NULLIF(@.Sender.MAIL_FROM_Kadry, ''), @.Sender.MAIL_FROM_Place)
            WHEN _Param_A IN ('MAIL_FROM_Place') THEN
                IFNULL(NULLIF(@.Sender.MAIL_FROM_Place, ''), @.Sender.MAIL_FROM_Kadry)
            WHEN _Param_A = 'MAIL_FROM_CRM' THEN
                NULLIF(@.Sender.MAIL_FROM_CRM, '')
        -- 	... tutaj następne zmienne w przyszłości	
            END
        ;
    --  Ustaw finalnie zmienną @.Sender.MAIL gdy pusta
        SET @.Sender.MAIL = 
            IF(_GUID = '',
                IFNULL(NULLIF(@.Sender.MAIL, ''), IFNULL(NULLIF(@.Sender.Nasz_Mail, ''), @.Sender.UserMail)),
                IFNULL(NULLIF(@.Sender.MAIL, ''), IFNULL(NULLIF(@.Sender.UserMail, ''), @.Sender.Nasz_Mail))
            )
        ;
    END IF;
    
    /*
        _MODE = 'VAR' pobiera zmienne wg sesyjnego uzytkownika i firmy 
            CALL com_mailer('VAR', '', '', '', '', '');
        _MODE = 'VAR.for.UserGUID' pobiera zmienne z User = _GUID i firmy 
            CALL com_mailer('VAR.for.UserGUID', @Userguid, '', '', '', '');
            _GUID    Osoba/Grupa (?) 
        CALL _IReg_Get('DaneFirmy', 'OurMail', 0, 'STRING', @.mail_from, NULL);
        SELECT valuex FROM IReg WHERE idkey='Domyslny_temat_maila' INTO @mail_subject;
    */

    IF _MODE IN ('VAR', 'VAR.for.UserGUID') THEN
        DO _Birth_System();
        IF _MODE = 'VAR.for.UserGUID' THEN
            SET @.Sender.UserGUID = (@UG := _GUID),@.Sender.UserLogin = NULL;
            -- patrz pobieranie z _user_accounts ponizej
        END IF;
        
    --    Dane uzytkownika z _GUID lub z Zalogowanego
        SET @.Sender.UserMail = NULL, @.Sender.UserLogin = NULL, @.Sender.NazwiskoImie = NULL, @.Sender.ImieNazwisko = NULL,
            @.Sender.NazwiskoImiona = NULL,@.Sender.ImionaNazwisk = NULL;
        
        SELECT 
            ua.Ad_mail, 
            IF(_MODE = 'VAR', @.Sender.UserLogin, ua.Login) AS UserLogin, 
            CONCAT_WS(' ', o.Nazwisko, o.Imie1) AS NazwiskoImie,
            CONCAT_WS(' ', o.Imie1, o.Nazwisko) AS ImieNazwisko,
            CONCAT_WS(' ', o.Nazwisko, o.Imiona) AS NazwiskoImiona,
            CONCAT_WS(' ', o.Imiona, o.Nazwisko) AS ImionaNazwisko
        INTO @.Sender.UserMail,@.Sender.UserLogin,@.Sender.NazwiskoImie,@.Sender.ImieNazwisko,@.Sender.NazwiskoImiona,@.Sender.ImionaNazwisko
        FROM _user_accounts ua, osoby o 
        WHERE ua.osobaguid = @.Sender.UserGUID AND o.GUID = ua.osobaGUID
        LIMIT 1;

        CALL _IReg_Get('DaneFirmy', 'OurMail', 0, 'STRING', @.Sender.Nasz_Mail, NULL);    --    Podstawowy mail firmy
        SET @.Sender.CC.z.ugrpguid = 1;

        IF @session.globals.Owner = 'CRIST' THEN SET @.Sender.CC.z.ugrpguid = 0; END IF;

        IF @session.globals.Owner = 'CDG' THEN 
            SET @.Sender.Nasz_Mail = 'piotr.adamowicz@cdg.net.pl', @.Sender.CC.z.ugrpguid = 1; 
        END IF;

    --    dla zgodnosci z ponizszym kodem ustaw zmienna @dw_na_ugrpguid    
        SET @dw_na_ugrpguid = @.Sender.CC.z.ugrpguid;
        -- SET @mail_from = @.Sender.Nasz_Mail;
        CALL _IReg_Get('', 'Przestaw_status_opng_po_wydruku_mailem', 0, 'BOOLEAN',@zamknijoper, 0);
        CALL _IReg_Get('OPNGINFOPATH', 'MAIL_FV_na_PLATNIKA', 0, 'BOOLEAN', @.Sender.MAIL_FV_na_PLATNIKA, 0);
        CALL _IReg_Get('OPNGINFOPATH', 'MAIL_FV_wysylaj_z_brak_mail', 0, 'BOOLEAN', @.Sender.MAIL_FV_na_brak_mail, 1);
    --    Sender Mail     
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_system', '0', 'STRING', @.Sender.MAIL_from_system, NULL);
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_accounts_system', '0', 'STRING', @.Sender.MAIL_FROM_accounts_system, NULL);
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_faktury', '0', 'STRING', @.Sender.MAIL_from_faktury, NULL);
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_zamowienia', '0', 'STRING', @.Sender.MAIL_from_zamowienia, NULL);
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_rozrach', '0', 'STRING', @.Sender.MAIL_from_rozrach, NULL);
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_Place', '0', 'STRING', @.Sender.MAIL_FROM_Place, NULL);
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_Kadry', '0', 'STRING', @.Sender.MAIL_FROM_Kadry, NULL);
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_CRM', '0', 'STRING', @.Sender.MAIL_FROM_CRM, NULL);
    --     ... tutaj następne zmienne w przyszłości    
    --    Firmowe    
        CALL _IReg_Get('DaneFirmy', 'Pelna_nazwa', '0', 'STRING', @.Sender.Nasza_Nazwa, NULL);
        SET @.Sender.Nasza_Nazwa = REPLACE(@.Sender.Nasza_Nazwa, '"', '');
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_nazwa_firmy', '0', 'STRING', @.Sender.Nasza_Nazwa_Header, '');
        SET @.Sender.Nasza_Nazwa_Header = IFNULL(NULLIF(@.Sender.Nasza_Nazwa_Header, ''), @.Sender.Nasza_Nazwa);
        SET @.Sender.logojpg = (SELECT valuea FROM IReg WHERE idkey = 'Logo na wydrukach' LIMIT 1);

        SELECT u.mail, (g.grupaguid = g.osobaguid) AS to_jest_osoba INTO @mail_from, @toosoba
        FROM user_account u, grupy_osob g 
        WHERE u.osobaguid = g.grupaguid AND g.osobaguid = @.Sender.UserGUID
        ORDER BY to_jest_osoba DESC 
        LIMIT 1 ;
    END IF;
  
    IF (_MODE = 'INIT') THEN
        SET @ok=1;
    END IF;

    IF (_MODE = 'CLEAN') THEN
        UPDATE com_msg_ng n,com_msg_po p SET n.status='FAILED',p.status='FAILED'
        WHERE p.guidng=n.guid AND p.medium_type='mail' AND n.status='SENDING';
    END IF;

    IF (_MODE = 'GET_LIST') THEN
        UPDATE com_msg_ng n,com_msg_po p SET n.status='SENDING' 
        WHERE p.guidng=n.guid AND p.medium_type='mail' AND recipient like '%@%' AND n.type='OUT' AND 
        n.status IN ('','NEW') AND n.deleted = 0 and n.CreateAt<now() - interval 1 minute; -- zabezpieczenie przez zbyt szybkim wysłaniem
        SELECT guid FROM com_msg_ng n WHERE n.status='SENDING';
    END IF;

    IF (_MODE = 'GET_TO') THEN
        SELECT IFNULL(group_concat(Recipient separator ','),'') as mailTo FROM com_msg_po p 
        WHERE p.medium_type='mail' AND p.guidng=_GUID AND p.recipientRole='To';
    END IF;

    IF (_MODE = 'GET_CC') THEN
        SELECT IFNULL(group_concat(Recipient separator ','),'') as mailCc FROM com_msg_po p 
        WHERE p.medium_type='mail' AND p.guidng=_GUID AND p.recipientRole='Cc';
    END IF;

    IF (_MODE = 'GET_BCC') THEN
        SELECT IFNULL(group_concat(Recipient separator ','),'') as mailBcc FROM com_msg_po p 
        WHERE p.medium_type='mail' AND p.guidng=_GUID AND p.recipientRole='Bcc';
    END IF;

    IF (_MODE = 'GET_FROM') THEN
        SELECT IF(Sender='','root',Sender) as mailFrom FROM com_msg_ng n WHERE n.guid=_GUID;
      -- default sender?
    END IF;

    IF (_MODE = 'GET_SUBJECT') THEN
      -- mail($to, '=?utf-8?B?'.base64_encode($subject).'?=', $message, $headers)
        SET @mail_subject='',@subject='';
        
        SELECT SrcTable INTO @srcTable FROM com_msg_ng n WHERE n.guid=_GUID;
        -- tylko dobrze zdefionowane tematy maili: co najmniej dwa pola z #
        SELECT _VarStr(valuex) INTO @mail_subject FROM IReg WHERE idkey='Domyslny_temat_maila' and valuex like "%#%#%#%#%" ;
        SET @mail_subject=IFNULL(_VarStr(@mail_subject),'');


        SELECT CONCAT(REPLACE(Msg_Title,'"',''),' [',_VarStr(NOW()),']') INTO @subject FROM com_msg_ng n WHERE n.guid=_GUID ;
        IF  @session.globals.Owner IN ('COMEX')   THEN
            SELECT REPLACE(Msg_Title,'"','')  INTO @subject FROM com_msg_ng n WHERE n.guid=_GUID;
        END IF;
        SET @mail_subject=IF(@mail_subject='',@subject,@mail_subject);

      -- TODO Rafał - to poniżej powinno sie dziać przy tworzeniu maila w SEND_OPER/SEND_ZAMW - docelowo do wyciecia

        IF @mail_subject<> '' THEN
            IF @srcTable='opng' THEN
                SELECT REPLACE(REPLACE(REPLACE(REPLACE(@mail_subject,'#dokument#',Msg_Title),
                    '#numer#',ifnull(o.nrdokfin,o.nrdokmag)),
                    '#nrdokfin#',ifnull(o.nrdokfin,o.nrdokmag)),
                    '#kontrahent#',CONCAT('dla ' ,o.kontrsymbol))  INTO @subject
                FROM com_msg_ng n LEFT JOIN opng o ON n.SrcGUID=o.guid WHERE n.guid=_GUID;
            END IF;

            IF @srcTable='zmng' AND @mail_subject <> '' THEN
                SELECT REPLACE(REPLACE(REPLACE(@mail_subject,'#dokument#',Msg_Title),
                    '#numer#',z.nrzamw),
                    '#kontrahent#',CONCAT('dla ' ,z.kontrsymbol))  INTO @subject 
                FROM com_msg_ng n LEFT JOIN zmng z ON n.SrcGUID=z.guid WHERE n.guid=_GUID;
            END IF;
        END IF;

        SELECT @subject as mailSubject;
    END IF;

    IF (_MODE = 'GET_HEADER') THEN
        SELECT Msg_Body as mailHeader FROM com_msg_ng n WHERE n.guid=_GUID;
    END IF;

    IF (_MODE = 'GET_BODY') THEN
      -- SELECT Msg_Body as mailBody FROM com_msg_ng n WHERE n.guid=_GUID;
        SELECT '';
    END IF;

    IF (_MODE = 'GET_FOOTER') THEN
        SELECT '' as mailFooter FROM com_msg_ng n WHERE n.guid=_GUID; -- ma byc empty result a nie ''
    END IF;

      
    IF (_MODE = 'GET_ATTACHMENT') THEN
      -- pod katem metasend.py

        SET @lp=1,@nazwy='',@pass='';
        BEGIN
            DECLARE done BOOL DEFAULT FALSE;
            DECLARE _DOCGUID VARCHAR(38);
            DECLARE _NAZWA VARCHAR(100);
            DECLARE _PASSWORD VARCHAR(38);
            -- duble nazwy są ignorowane (cmx)
            DECLARE c_proc CURSOR FOR 
            SELECT max(docGUID) as docGUID,replace(_VarStr(_bez_pl_znakow(nazwa)),' ','_') as nazwa FROM com_msg_attach a,dokumenty d WHERE a.docGUID=d.guid AND a.guidng=_GUID GROUP BY nazwa;
            --        SELECT max(docGUID) as docGUID,replace(nazwa,' ','_') as nazwa FROM com_msg_attach a,dokumenty d WHERE a.docGUID=d.guid AND a.guidng=_GUID GROUP BY nazwa;
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
            OPEN c_proc;

            loop2: LOOP
                FETCH c_proc INTO _DOCGUID,_NAZWA;
                IF NOT done THEN
                    SELECT d.password,
                        CONCAT(IFNULL(@@secure_file_priv,'/var/lib/mysql/'),'attachment',_VarStr(@lp),
                        IFNULL((select t.ext from typy_bloba t where t.idn=d.typbloba),'.pdf'))
                        INTO _PASSWORD,_DUMPFILE
                    FROM dokumenty d WHERE d.guid=_DOCGUID;
  
                    SET _DUMPFILE=CONCAT(IFNULL(@@secure_file_priv,'/var/lib/mysql/'),'attachments/',_NAZWA);
                    SET @nazwy=REPLACE(CONCAT(@nazwy,_VarStr(IF(@lp>1,',','')),_NAZWA),' ',''),@lp=@lp+1;
                    -- jesli wystapi jedno haslo, to obowiazuje dla wszystkich zalacznikow takie samo - pierwsze z brzegu
                    SET @pass=IF(@pass='',_PASSWORD,@pass);
                    
                    SET @SQL=CONCAT('SELECT d.dokument FROM dokumenty d WHERE d.guid="',_DOCGUID,'" INTO DUMPFILE "',_DUMPFILE,'"');
                    PREPARE stmt FROM @SQL;EXECUTE stmt;DEALLOCATE PREPARE stmt;
                ELSE  
                    LEAVE loop2;
                END IF;
            END LOOP;
            CLOSE c_proc;
            SELECT _VarStr(@nazwy) as nazwy,_VarStr(@pass) as pass;
        END;
    END IF;

    IF (_MODE = 'SET_SENT') THEN
        UPDATE com_msg_ng n,com_msg_po p SET n.status='SENT',p.status='SENT' WHERE p.guidng=n.guid AND n.guid=_GUID;
    END IF;
    -- call com_mailer('UNSET_SENT',@guid,'','','','');
    IF (_MODE = 'UNSET_SENT') THEN
        UPDATE com_msg_ng n,com_msg_po p SET n.status='NEW',p.status='NEW'
        WHERE p.guidng=n.guid AND n.guid=_GUID;
        UPDATE com_msg_attach p, dokumenty d SET d.doc_status=-10 
        WHERE p.guidng=_GUID AND d.guid=p.docGUID;
    END IF;
      
    IF (_MODE = 'UNSET_SENT_SRCGUID') THEN
        UPDATE com_msg_ng n,com_msg_po p SET n.status='NEW',p.status='NEW'
        WHERE p.guidng=n.guid AND n.srcguid=_GUID;
        UPDATE com_msg_attach p, dokumenty d SET d.doc_status=-10 
        WHERE p.guidng=_GUID AND d.guid=p.docGUID;
    END IF;
      
    IF (_MODE = 'SET_FAILED') THEN
        UPDATE com_msg_ng n,com_msg_po p SET n.status='FAILED',p.status='FAILED'
        WHERE p.guidng=n.guid AND n.guid=_GUID;
    END IF;

    IF (_MODE = 'SEND_OPER_LIST') THEN -- zakladam istnienie t_opng, TODO: dodać w exe scenarioguid
        BEGIN
            DECLARE done BOOL DEFAULT FALSE;
            DECLARE _GUID VARCHAR(38);
            DECLARE c_proc CURSOR FOR SELECT guid FROM t_opng;

            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
            OPEN c_proc;
            loop2: LOOP
                FETCH c_proc INTO _GUID;
                IF done THEN
                    LEAVE loop2;
                ELSE
                    CALL com_mailer('SEND_OPER',_GUID,'','','',_Param_D);
                END IF;
            END LOOP;
            CLOSE c_proc;
            SELECT 0 as status, "OK" as info;
        END;
    END IF;
      
    --  call com_mailer('CHECK_OPER',@guid,'','','','');

    IF (_MODE = 'CHECK_OPER') AND _GUID<>'' THEN
        SELECT DISTINCT IF(ISNULL(m.adres),concat('Brak adresu mail dla kontrahenta ',n.kontrsymbol,' ',n.kontrnazwa),'OK') as info
        FROM opng n 
        LEFT JOIN kontakty m ON m.kontrguid=ifnull(@kontrguid,n.kontrguid) AND m.typ_medium=3 AND m.nieaktywny=0 AND m.opis like '%faktur%'  AND m.adres LIKE '_%@_%._%'
        WHERE n.guid=_GUID;
    END IF;

    -- set @guid='{154D92D9-A9FB-42E9-B034-543C0D939944}';
    --  call com_mailer('SEND_SPEC',@guid,'','','apro68@gmail.com','DEBUG,DELETE,TOWR_SPEC')\G
    --  call com_mailer('SEND_OPER',@guid,'','','apro68@gmail.com','DEBUG,TOWR_SPEC')\G
    --  set @guid='{A884C120-D2FF-4A64-B5E0-37515F09215E}';
    --  call com_mailer('SEND_ZMNG',@guid,'','','apro68@gmail.com','DEBUG')\G

    IF _MODE = 'internal.set.sender' THEN
        SET @mail_debug=NULL, @nie_wysylaj_DW_do_sendera=0, @nie_wysylaj_DW_do_zalogowanego=0;

        SELECT IFNULL(REPLACE(valuea,'"',''),'Brak nazwy w konfiguracji') INTO @naszanazwa FROM IReg WHERE idkey='Pelna_nazwa' AND idpath LIKE '%DaneFirmy' LIMIT 1;
        SELECT AD_mail INTO @user_mail FROM _user_accounts WHERE osobaguid=@.Sender.UserGUID;
        
        CALL _IReg_Get('OPNGINFOPATH', 'MAIL_FV_na_PLATNIKA', 0, 'BOOLEAN', @MAIL_FV_na_PLATNIKA, 0);
        CALL _IReg_Get('OPNGINFOPATH', 'MAIL_FV_wysylaj_z_brak_mail', 0, 'BOOLEAN', @MAIL_FV_na_brak_mail, 1);
        SET @MAIL_ZM_na_brak_mail=@MAIL_FV_na_brak_mail; -- na razie tożsame

        -- TODO: CALL _IReg_Get('OPNGINFOPATH', 'MAIL_CC_na_usera', 0, 'BOOLEAN', @MAIL_CC_na_usera, 0);
        -- TODO: CALL _IReg_Get('OPNGINFOPATH', 'MAIL_CC_na_grupe', 0, 'BOOLEAN', @MAIL_CC_na_grupe, 0);
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_faktury', '0', 'STRING', @mail_from_faktury, '');
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_zamowienia', '0', 'STRING', @mail_from_zamowienia, '');
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_rozrach', '0', 'STRING', @mail_from_rozrach, '');
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_samofakturowanie', '0', 'STRING', @mail_from_samofakturowanie, '');
        CALL _IReg_Get('DaneFirmy', 'MAIL_brak_maila', '0', 'STRING', @mail_brak, '');
        CALL _IReg_Get('DaneFirmy', 'MAIL_brak_maila_samofakturowanie', '0', 'STRING', @mail_brak_samo, '');
        CALL _IReg_Get('DaneFirmy', 'MAIL_BCC_samofakturowanie', '0', 'STRING', @mail_bcc_samofakturowanie, '');
        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_nazwa_firmy', '0', 'STRING', @naszanazwa_header, '');
        CALL _IReg_Get('DaneFirmy', 'Pelna_nazwa', '0', 'STRING', @naszanazwa, '');
        CALL _IReg_Get('Mail', 'Ukryta kopia maila eFV', '0', 'STRING', @mail_bcc, '');
        CALL _IReg_Get('OPNGINFOPATH', 'ZapisujPlikEDIDoDokumentow',0, 'BOOLEAN', @ZapisujPlikEDIDoDokumentow, 0);
        
        
        SET @naszanazwa_header=IFNULL(@naszanazwa_header,'');
        SET @naszanazwa_header=IF(@naszanazwa_header='',IFNULL(@naszanazwa,''),@naszanazwa_header);
        
        SELECT ifnull(valuea,'') INTO @logojpg FROM IReg WHERE idkey='Logo na wydrukach' LIMIT 1;

        SELECT u.mail,g.grupaguid=g.osobaguid as toosoba INTO @mail_from_user,@toosoba
        FROM user_account u,grupy_osob g 
        WHERE u.osobaguid=g.grupaguid and g.osobaguid=@.Sender.UserGUID     
        ORDER BY toosoba DESC LIMIT 1;
        
        -- COMEX chce FV z ogólnego a ZM z indywidualnego - docelowo zrobić jako klucz w IReg albo specjalne wartości w MAIL_FROM_xxx

        IF @_MODE IN ('SEND_OPER', 'SEND_HOLD_OPER') AND @session.globals.Owner IN ('COMEX') THEN SET @mail_from_user=NULL,@toosoba=0;    END IF;

        -- domyslne maile FROM:
        IF @_MODE='SEND_ZMNG' and @mail_from_zamowienia<>'' THEN SET @mail_from=@mail_from_zamowienia; END IF;
        IF @_MODE IN ('SEND_OPER', 'SEND_HOLD_OPER') and @mail_from_faktury<>''  THEN SET @mail_from=@mail_from_faktury;    END IF;
        IF @_MODE like 'SEND_WEZW%' and @mail_from_rozrach<>'' THEN SET @mail_from=@mail_from_rozrach;    END IF;
        
        IF @session.globals.Owner NOT IN ('KONKOL','BALTIMA','CRIST') THEN -- TODO: zrobić to jako klucz w IReg
        -- jesli jednak w user_account (konta mailowe, nie userów) jest zdefiniowany mail usera, to wysyłaj z niego 
            SET @mail_from=IFNULL(@mail_from_user,@mail_from);
        END IF;

        IF isnull(@mail_from) THEN
            SELECT NULLIF(valuea,'') INTO @mail_from FROM IReg WHERE idkey='OurMail' and idpath LIKE '%DaneFirmy' LIMIT 1;
        END IF;

        SET @mail_brak=IF(@mail_brak='',@mail_from,@mail_brak);

        IF _DEBUG THEN
            SET @comguid=CONCAT('DEBUG',uuid_short());
            SELECT @comguid,@.Sender.UserGUID,@.Sender.UserLogin,@naszanazwa,@mail_from,@MAIL_FV_na_PLATNIKA,@MAIL_FV_na_brak_mail,
            @logojpg,@kontrguid,@rows;
            SET @mail_debug=IF(IFNULL(_Param_C,'')='','apro68@gmail.com',_Param_C);  -- dla DEBUG zawsze idzie na ten adres
            SET @mail_brak=@mail_debug;
        END IF;

        SET @podpis = '',@user_fullname='',@user_city='',@user_street='',@user_tel='',@user_email='',@user_admail='',@user_job_pos='',@user_job_pos_en='';
        IF @.Sender.UserGUID IS NOT NULL THEN
            SELECT
                IFNULL(CONCAT(o.nazwisko,' ', o.imie1),''), IFNULL(u.ad_mail,''),
                IFNULL((SELECT IFNULL(kt.adres,'') FROM kontakty kt WHERE o.guid=kt.osobaguid AND kt.typ_medium IN (0,2) AND kt.rodzaj=0 AND LENGTH(kt.adres>8) LIMIT 1),''),
                IFNULL((SELECT IFNULL(km.adres,'') FROM kontakty km WHERE o.guid=km.osobaguid AND km.typ_medium=3 AND km.rodzaj=0 AND 
                    km.adres like "%@%.%" AND km.opis NOT LIKE "%praco%" LIMIT 1),''),
                IFNULL(o.stanowisko,''),IFNULL(o.nazwa_dzialu,''),
                IFNULL(TRIM(_MID_SEP(g.adres,',',1)),''),
                IFNULL(TRIM(_MID_SEP(_MID_SEP(g.adres,',',2),'(',1)),''),
                a.nazwa
                INTO @user_fullname,@user_admail,@user_tel,@user_email,@user_job_pos,@user_job_pos_en,@user_street,@user_city,@user_loc_name
            FROM osoby o
            INNER JOIN _user_accounts u ON o.guid=u.osobaguid
            LEFT JOIN erp_area_nodes a ON a.guid=o.nodeguid
            LEFT JOIN geo_int_adr_link g ON g.objguid=a.guid
            WHERE o.guid=@.Sender.UserGUID;

            SET @user_email=IF(IFNULL(@user_admail,'')='',@user_email,@user_admail);
            -- SET @user_job_pos_en=@user_job_pos; -- TODO: tłumaczenie

            SET @podpis=CONCAT(@user_fullname,'<br>tel. ',@user_tel,'<br>E-mail ',@user_email,' <br> ');
        END IF;
    END IF; -- internal.set.sender

    IF (_MODE IN ('SEND_OPER', 'SEND_HOLD_OPER', 'SEND_SPEC','SEND_ZMNG')) AND _GUID<>'' THEN
      --    UWAGA w _Param_B dla 'SEND_HOLD_OPER' mamy GUID przysłany zewnątrz - nie jest to GUID FV choć może - jest to zewnętrzny nadany GUID!!!! 
        SET @comguid = IF(_MODE = 'SEND_HOLD_OPER', _Param_B, uuid());
--        SET _ScenarioGUID = IF(_MODE = 'SEND_HOLD_OPER', '',_Param_B);
        SET _ScenarioGUID = IF(_MODE = 'SEND_HOLD_OPER', '', _ScenarioGUID);


        SET @htmlbody='',@mail_do_osoby_zmng='',@dw_na_adresy_grupowe=0,@dw_na_ugrpguid=0,@_MODE=_MODE;
        CALL com_mailer('internal.set.sender',_GUID,_PARAM_A,_PARAM_B,_PARAM_C,_PARAM_D);

          -- TODO test tylko!
          -- jesli w user_account jest wiele kont grupowych dla danej osoby, to preferujemy osobiste usera
          
        IF _MODE='SEND_SPEC' THEN
            SELECT REPLACE(REPLACE(valuex,'#guid#',_GUID),'#kontakt#','') INTO @htmlbody FROM IReg WHERE idkey='Tresc_maila_Specyfikacja_HTML';
            SET @naglowek='Karty charakterystyki z #naszanazwa#';
            -- tylko symbole towarów z charakterystykami
            SELECT group_concat(DISTINCT o.towrsymb),count(*) INTO @towary,@rows 
            FROM dokumenty d, oppo o WHERE d.klucz=o.idntowr and o.idnoperfin=_GUID and d.rodzaj=6;
        END IF;
        
        IF _MODE IN ('SEND_OPER', 'SEND_HOLD_OPER') THEN
            SELECT lang_id,rodzaj,IFNULL(IF(rodzaj IN (9,10,11,12,13),nrdokmag,nrdokfin),''),kontrsymbol INTO @lang_id,@rodzaj_id,@nrdokfin,@kontrsymbol
            FROM opng WHERE guid=_GUID;
--            SET @naglowek=CONCAT(IF(@rodzaj_id=1,'Dokument ','Faktura '),@nrdokfin,' z ',@naszanazwa_header);
            SELECT opis INTO @rodzaj_opis FROM operdoc where rodzaj=@rodzaj_id;
            SET @rodzaj_opis=IFNULL(@rodzaj_opis,'Faktura');
            IF @lang_id='en' THEN
                SET @rodzaj_opis=REPLACE(@rodzaj_opis,'Faktura','Invoice');
            END IF;
            SET @naglowek=CONCAT(@rodzaj_opis,' ',@nrdokfin,' z ',@naszanazwa_header);

            SET @naglowek=REPLACE(@naglowek,'#kontrsymbol#',@kontrsymbol); -- TODO - Konkol ma te hasze w @naszanazwa_header... słabe
            SET @idkey=CONCAT('Domyslna_tresc_maila_',IF(@rodzaj_id<>9,IF(@lang_id ='pl','FV','en_FV'),'MAG'),'_HTML');
            
            SELECT COUNT(*) INTO @jest FROM IReg where idkey=@idkey;
            SET @idkey=IF(@jest=1,@idkey,'Domyslna_tresc_maila_FV_HTML');

            SELECT REPLACE(REPLACE(valuex,'#guid#',_GUID),'#kontakt#','') INTO @htmlbody FROM IReg WHERE idkey=@idkey;

            IF @rodzaj_id in (5,6,7,8) and @mail_from_samofakturowanie<>''  THEN 
                SET @mail_from=@mail_from_samofakturowanie,@mail_bcc=@mail_bcc_samofakturowanie,@mail_brak=@mail_brak_samo;
            END IF;
            
          
            SELECT GROUP_CONCAT(DISTINCT o.towrsymb) INTO @towary FROM oppo o WHERE o.idnoperfin=_GUID;
            SET @rows=1; -- zawsze dla SEND_OPER
            -- TODO: wysłać i sprawdzić
            IF @ZapisujPlikEDIDoDokumentow THEN 
                CALL ht_imp_exp_tools('EDI_EXPORT_FV_SB', _GUID, '', '', '', '', '');
            END IF;

        END IF;
          
        IF _MODE='SEND_ZMNG' THEN
            SELECT lang_id,rodzaj,nrzamw,kontrsymbol INTO @lang_id,@rodzaj_id,@nrzamw,@kontrsymbol FROM zmng WHERE guid=_GUID;
            SET @rodzaj_opis=NULL;
            IF _ScenarioGUID<>'' THEN
                SELECT NULLIF(MailSubject,'') INTO @rodzaj_opis FROM rep_scenariusze WHERE guid=_ScenarioGUID;
            END IF;
            SET @rodzaj_opis=IFNULL(@rodzaj_opis,'Zamówienie');
            SET @rodzaj_opis=CONCAT(IF(@rodzaj_id=73,'Zlecenie',IF(@rodzaj_id=87,'Oferta',@rodzaj_opis)),' ');
            -- TODO: zrobic tłumaczenia 
            IF @lang_id='en' THEN
                SET @rodzaj_opis=REPLACE(REPLACE(@rodzaj_opis,'Zamówienie','Order'),'Faktura proforma','Proforma invoice');
            END IF;

            SET @naglowek=CONCAT(@rodzaj_opis,' ',@nrzamw,' z ',@naszanazwa_header);
            SET @naglowek=REPLACE(@naglowek,'#kontrsymbol#',@kontrsymbol); -- TODO - Konkol ma te hasze w @naszanazwa_header... słabe
            
            SET @idkey=CONCAT('Domyslna_tresc_maila_',IF(@rodzaj_id=73,'ZM_PROD',IF(@rodzaj_id=87,"OF",IF(@lang_id ='pl','ZM','en_ZM'))),'_HTML');
            SELECT COUNT(*) INTO @jest FROM IReg where idkey=@idkey;
            SET @idkey=IF(@jest=1,@idkey,'Domyslna_tresc_maila_ZM_HTML');

            SET @htmlbody=IFNULL((SELECT valuex FROM IReg WHERE idkey=@idkey),(SELECT valuex FROM IReg WHERE idkey=@idkey));
            SET @htmlbody=REPLACE(REPLACE(@htmlbody,'#guid#',_GUID),'#kontakt#','');
                      
            SELECT GROUP_CONCAT(DISTINCT o.towrsymb) INTO @towary FROM zmpo o WHERE o.idnNG=_GUID;
            SET @rows=1; -- zawsze dla SEND_ZMNG
        END IF;
        
        SET @towary=IFNULL(@towary,''), @rodzaj_opis=IFNULL(@rodzaj_opis,'Dokument');

        SET @naglowek=REPLACE(@naglowek,'#naszanazwa#',@naszanazwa_header);
        SET @htmlbody=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@htmlbody,'#user_fullname#',@user_fullname),
            '#user_city#',@user_city),'#user_street#',@user_street),'#user_tel#',@user_tel),'#user_mail#',@user_mail),
            '#user_job_pos#',@user_job_pos),'#user_job_pos_en#',@user_job_pos_en),"#user_loc_name#",@user_loc_name),
            "#nazwa_dok#",@rodzaj_opis);

        IF _MODE IN ('SEND_OPER', 'SEND_HOLD_OPER', 'SEND_SPEC') THEN
        -- leczenie objawowe błędu HT
            UPDATE dokumenty SET doc_nr_akapitu=tabela,tabela='opng' WHERE klucz=_GUID and tabela<>'opng';
                  
        
            SELECT IF(@MAIL_FV_na_PLATNIKA,platnikguid,kontrguid),ugrpguid INTO @kontrguid,@mail_ugrpguid FROM opng WHERE guid=_GUID;

            SELECT IFNULL(n.osobaguid,'') INTO @mail_do_osoby_zmng
            FROM zmng n,zmpo p,oppo o 
            WHERE o.idnoper=_GUID and o.guid_zmpo_mm=p.guid and p.idnng=n.guid LIMIT 1;
            SET @mail_do_osoby_zmng=IFNULL(@mail_do_osoby_zmng,'');
            
            INSERT IGNORE INTO com_msg_ng 
            (guid,type,owner,Sender,Msg_Title,Msg_Body,srcguid,srctable,status,SrcCtx) 
            SELECT 
               @comguid,'OUT',@.Sender.UserGUID    ,@mail_from,@naglowek,
               REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                  @htmlbody,'#nrdokfin#',IFNULL(IF(n.rodzaj IN (9,10,11,12,13),n.nrdokmag,n.nrdokfin),'')),'#datawystaw#',n.datawystaw),
                  '#brutto#',REPLACE(_dfmt(IF(n.waluta=0,n.brutto,IF(IFNULL(n.bruttowal,0)=0, IFNULL(_Rnd2(n.nettowal*n.brutto/n.netto),0),n.bruttowal))),'#','')),
                  '#netto#',REPLACE(_dfmt(IF(n.waluta=0,n.netto,IF(IFNULL(n.nettowal,0)=0,n.netto,n.nettowal))),'#','')),
                  '#waluta#',IFNULL(w.symbol,'?')),
                  '#dataplatnosci#',n.dataplatnosci),
                  '#podpisnadawca#',@podpis),
                  '#naszanazwa#',@naszanazwa_header),'#kontrsymbol#',n.kontrsymbol),'#nazwakontrahenta#',n.kontrnazwa),'#logojpg#',@logojpg),'#towary#',@towary),
                n.guid AS srcguid, 'opng' AS srctable,"ADDING" as status, _ScenarioGUID
            FROM opng n
            LEFT JOIN waluty w ON w.idn=n.waluta
            LEFT JOIN dokumenty d ON d.klucz=n.guid AND (d.doc_status=-10 OR _MODE='SEND_HOLD_OPER')  -- protokół do maila zawsze
            WHERE 
                (n.rodzaj IN (0,1,2,3,4,10,9,50,80,85,90,5,6,7,8) OR _MODE='SEND_HOLD_OPER')  
                AND n.guid=_GUID 
                AND NOT ISNULL(@mail_from)  
                AND (_MODE='SEND_SPEC' OR d.idn IS NOT NULL) 
                AND @rows > 0
            ORDER BY d.idn DESC LIMIT 1
            ;
        END IF; -- SEND_OPER,SPEC

        IF _MODE IN ('SEND_ZMNG') THEN
        -- leczenie objawowe błędu HT
            UPDATE dokumenty SET doc_nr_akapitu=tabela,tabela='zmng' WHERE klucz=_GUID and tabela<>'zmng';
         
            SELECT IF(@MAIL_FV_na_PLATNIKA,platnikguid,kontrguid),ugrpguid INTO @kontrguid,@mail_ugrpguid FROM zmng WHERE guid=_GUID;

            SELECT IFNULL(n.osobaguid,''),IFNULL(n.status_obieg,0) INTO @mail_do_osoby_zmng,@mail_zmng_status
            FROM zmng n WHERE n.guid=_GUID LIMIT 1;
            -- SET @mail_status_ok= NOT @session.globals.Owner='BALTIMA' OR @mail_zmng_status=3; -- BALTIMA: nie wysylamy zamowien nie zatwierdzonych (status_obieg<>3) - to juz nie jest aktualne od 2024-06-06

          
            SET @mail_do_osoby_zmng=IFNULL(@mail_do_osoby_zmng,'');
            INSERT INTO com_msg_ng 
            (guid,type,owner,Sender,Msg_Title,Msg_Body,srcguid,srctable,status,SrcCtx) 
            SELECT @comguid,'OUT',@.Sender.UserGUID,@mail_from,@naglowek,
                REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                @htmlbody,'#nrzamw#',ifnull(n.nrzamw,'')),'#datawystaw#',n.datawystaw), 
                '#terminrealizacji#',n.terminrealizacji),
                '#brutto#',replace(_dfmt(if(n.waluta=0,n.brutto,IF(ifnull(n.bruttowal,0)=0, n.nettowal,n.bruttowal))),'#','')),
                '#netto#',replace(_dfmt(if(n.waluta=0,n.netto,IF(ifnull(n.nettowal,0)=0,n.netto,n.nettowal))),'#','')),
                '#waluta#',IFNULL(w.symbol,'?')),
                '#naszanazwa#',@naszanazwa_header),
                '#nazwakontrahenta#',(SELECT k.nazwa FROM kontrah k where n.kontrguid=k.guid)),
                '#kontrsymbol#',(SELECT k.symbol FROM kontrah k where n.kontrguid=k.guid)),
                '#logojpg#',@logojpg),'#towary#',@towary),
            -- concat(d.nazwa,'\n',d.url),
                n.guid,'zmng' as srctable,"ADDING" as status, _ScenarioGUID
            FROM zmng n
            LEFT JOIN waluty w ON w.idn=n.waluta
            LEFT JOIN dokumenty d ON d.klucz=n.guid and d.doc_status=-10
            WHERE n.rodzaj IN (27,28,74,87,52,110,73)  AND n.guid=_GUID AND NOT ISNULL(@mail_from)  AND (_MODE='SEND_SPEC' OR d.idn IS NOT NULL) and @rows>0 -- AND @mail_status_ok, wylaczamy bo dla baltimy jest zmiana
            ORDER BY d.idn DESC LIMIT 1;
        END IF;
        
        SET @rows=ROW_COUNT();
        
        -- ASK Rafał to poniżej: - tabele mail_content, mail_content_var 

        IF @session.globals.Owner in ('SIMEX','COMEX','AXIS') THEN
            SET @body_text=(SELECT REPLACE(REPLACE(SUBSTR(_PARAM_A,(LOCATE('BodyText:"' , _PARAM_A)),LENGTH(_PARAM_A)),'BodyText:"',''),'"}','')); 
            SET @sub_text=(SELECT REPLACE(SUBSTR(_PARAM_A,(LOCATE('{Subject:"' , _PARAM_A)),(LOCATE('BodyText:"' , _PARAM_A)-3)),'{Subject:"',''));  
        ELSE
            SET @body_text=_PARAM_A;
            SET @sub_text=(SELECT Msg_Title FROM com_msg_ng WHERE GUID=@comguid);
        END IF;    
        SET @body_text=IFNULL(@body_text,''),@sub_text=IFNULL(@sub_text,'');

        UPDATE com_msg_ng SET 
          Msg_Body = REPLACE(Msg_Body,'#tresc_maila#',REPLACE(@body_text,'\n','<br>')),
          Msg_Title = IF(@sub_text<>'',@sub_text,Msg_Title),
          Status = '' 
        WHERE GUID=@comguid;
        
      -- ustalenie adresata maila
      IF _Param_C LIKE '_%@_%._%' THEN
          INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
          SELECT DISTINCT @comguid,'OUT','mail',_Param_C,'To',CONCAT('ParamC',uuid_short());
      ELSE
          DROP TEMPORARY TABLE IF EXISTS mailto;
          CREATE TEMPORARY TABLE mailto (adres varchar(255));
          SET @ileadresatow=0;
          IF _MODE IN ('SEND_OPER','SEND_SPEC') and @rows>0 AND @kontrguid<>'' THEN
              IF @mail_do_osoby_zmng<>'' THEN 
                -- osoba ustawiona w zamówieniu realizoanym fakturą, w pierwszej kolejnosci z opisem E-Faktura - jeden adresat
                  INSERT INTO mailto
                  SELECT m.adres FROM kontakty m 
                  WHERE m.osobaguid=@mail_do_osoby_zmng AND m.typ_medium=3 AND m.nieaktywny=0 AND m.adres LIKE '_%@_%._%'
                  ORDER BY m.opis like '%faktur%' DESC LIMIT 1;
                  SELECT COUNT(*) INTO @ileadresatow FROM mailto;
              END IF;        
              IF @ileadresatow=0 THEN -- jesli nie, to wszystkie adresy kontrahenta oznaczone jako faktura
                  INSERT INTO mailto
                  SELECT m.adres FROM kontakty m 
                  WHERE m.kontrguid=@kontrguid AND m.typ_medium=3 AND m.nieaktywny=0 AND m.opis like '%faktur%' AND m.adres LIKE '_%@_%._%'                  ;
                  SELECT COUNT(*) INTO @ileadresatow FROM mailto;
              END IF;
          END IF;

          IF _MODE IN ('SEND_ZMNG') and @rows>0 AND @kontrguid<>'' THEN
              IF @mail_do_osoby_zmng<>'' THEN -- jesli w zamowieniu jest ustawiona osobaguid - wtedy idzie na maila tej osoby
                  -- adres indywidualny osoby - nie musi byc oznaczony jako zamówienia, skoro taka osoba zostala wybrana
                  INSERT INTO mailto
                  SELECT m.adres FROM kontakty m 
                  WHERE m.osobaguid=@mail_do_osoby_zmng AND m.typ_medium=3 AND m.nieaktywny=0 AND m.adres LIKE '_%@_%._%'
                  ORDER BY m.opis like 'zam%' DESC LIMIT 1;
                  SELECT COUNT(*) INTO @ileadresatow FROM mailto;
              END IF;        
              IF @ileadresatow=0 THEN -- jesli nie, to wszystkie adresy kontrahenta oznaczone jako zamowienia
                  INSERT INTO mailto
                  SELECT m.adres FROM kontakty m 
                  WHERE m.kontrguid=@kontrguid AND m.typ_medium=3 AND m.nieaktywny=0 AND m.opis like 'zam%' AND m.adres LIKE '_%@_%._%';
                  SELECT COUNT(*) INTO @ileadresatow FROM mailto;
              END IF;
          END IF;
          IF  @ileadresatow=0 AND (@MAIL_ZM_na_brak_mail OR @MAIL_FV_na_brak_mail) THEN
              INSERT INTO mailto SELECT CONCAT('Brak maila <',@mail_brak,'>');
          END IF;

          INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
          SELECT DISTINCT @comguid,'OUT','mail', IFNULL(@mail_debug,adres) ,'To',uuid() FROM mailto;
      END IF; -- Param_C

      DROP TEMPORARY TABLE IF EXISTS mailto;
         
      SELECT COUNT(*) INTO @rows FROM com_msg_po WHERE GUIDNg = @comguid;
          
      SELECT count(*)>0 INTO @mailok FROM com_msg_po WHERE GUIDNg=@comguid AND RecipientRole='To' AND Recipient  NOT LIKE '%Brak maila%';
          
      IF @rows>0 THEN 
          IF @session.globals.Owner = 'CDG' THEN SET @dw_na_ugrpguid=1; END IF;
          IF @session.globals.Owner IN ('KONKOL') THEN SET @nie_wysylaj_DW_do_zalogowanego=1; END IF;
          IF @session.globals.Owner IN ('SIMEX','JARZEBINSCY') THEN SET @nie_wysylaj_DW_do_zalogowanego=1,@nie_wysylaj_DW_do_sendera=1,@dw_na_adresy_grupowe=0; END IF;
          IF @session.globals.Owner IN ('SECURITY') THEN SET @nie_wysylaj_DW_do_sendera=1,@dw_na_adresy_grupowe=0; END IF;

          IF IFNULL(@dw_na_ugrpguid,1)=1 AND @mail_ugrpguid<>'ALL' THEN
              SET @debugmailCC=NULL;
              SELECT u.mail INTO @debugmailCC FROM user_account u WHERE u.guid=@mail_ugrpguid LIMIT 1;
              SET @debugmailCC=ifnull(@debugmailCC,CONCAT('brak w user_account ',IFNULL(@mail_ugrpguid,'null'),' <apro68@gmail.com>'));
              INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
              SELECT @comguid,'OUT','mail',@debugmailCC,'CC',CONCAT('UgrpCC',uuid_short());
          END IF;
          -- TODO: do IRega ?

          IF @dw_na_adresy_grupowe=1 THEN
            -- CC na wszystkie adresy wysylajacego - w tym grupowe
              INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
              SELECT @comguid,'OUT','mail',u.mail,'CC',CONCAT('grpCC',uuid_short())
              FROM user_account u,grupy_osob g 
              WHERE u.osobaguid=g.grupaguid and g.osobaguid=@.Sender.UserGUID;
          END IF;
          IF @dw_na_adresy_grupowe=0 AND @nie_wysylaj_DW_do_sendera=0 THEN
              INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
              SELECT @comguid,'OUT','mail',@mail_from,'CC',CONCAT('senderCC',uuid_short());
          END IF;

          IF IFNULL(@user_mail,'') LIKE '%@%' AND IFNULL(@nie_wysylaj_DW_do_zalogowanego,0)=0 THEN
              INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
              SELECT @comguid,'OUT','mail',@user_mail,'CC',uuid();
          END IF;
        
          IF  @mail_bcc<>'' THEN
              INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
              SELECT @comguid,'OUT','mail',@mail_bcc,'Bcc',uuid_short();
          END IF;
            
          INSERT INTO com_msg_attach (GUIDNg,docGUID)
          SELECT @comguid,d.guid
          FROM dokumenty d
          LEFT JOIN rodzaje_doc r ON r.idn=d.rodzaj
          WHERE d.klucz=_GUID and (d.doc_status = -10 or r.param1 like "%ALWAYS_MAIL%" OR _MODE='SEND_HOLD_OPER') 
              AND IF(@session.globals.Owner='COMEX',( 
                   (_MODE IN ('SEND_OPER', 'SEND_HOLD_OPER') AND d.Tabela='opng') 
                OR (_MODE IN ('SEND_ZMNG') AND d.Tabela='zmng'))
                ,TRUE) 
              AND _MODE IN ('SEND_OPER', 'SEND_HOLD_OPER', 'SEND_ZMNG') 
              AND d.dokument IS NOT NULL
            -- do każdej wysyłki operacji dodanie załączników o rodzaju oznaczonym ALWAYS_MAIL (było rodzaj=10) - np. certyfikaty zewnętrzne lub protokoły
          ORDER BY d.idn;

          IF @session.globals.Owner IN ('PLISZKA','COMEX')  AND _MODE IN ('SEND_OPER') THEN 
            /*
                do każdej wysyłki operacji dodanie ostatniego załącznika z 
                realizowanego zamowienia o rodzaju oznaczonym ALWAYS_MAIL np protokoły
                ONE_MAIL - załącza tylko raz i ustawia doc_status na 0
                dopytać PawlaPelcnera, czy oznaczac protokoly jako wyslane
                guid_zmpo_mm zawiera guid pozycji zamowienia - nawet permanentnego (guidzm tylko nieperm.)
            */

              SET _LIMIT=IF(@session.globals.Owner IN ('PLISZKA'),1,1000);
              
              INSERT IGNORE INTO com_msg_attach (GUIDNg,docGUID)
              SELECT DISTINCT @comguid,d.guid
              FROM oppo o
              INNER JOIN zmpo zp ON zp.guid=o.guid_zmpo_mm -- chyba nie? AND o.guidzm=''
              INNER JOIN dokumenty d ON d.klucz=zp.idnng
              LEFT JOIN rodzaje_doc r ON r.idn=d.rodzaj
              WHERE o.idnoperfin=_GUID and (r.param1 like "%ALWAYS_MAIL%" OR (r.param1="ONE_MAIL" and d.doc_status=-10)) 
              ORDER BY d.idn desc limit _LIMIT;

              UPDATE oppo o,zmpo zp,dokumenty d,rodzaje_doc r SET d.doc_status=0 
              WHERE zp.guid=o.guid_zmpo_mm AND d.klucz=zp.idnng AND o.idnoperfin=_GUID AND r.param1 NOT like "%ALWAYS_MAIL%";
          END IF;

          SELECT IFNULL(passwd,'') INTO @password FROM kontrah WHERE guid=@kontrguid;
              
   --    specyfikacje towarowe
          IF _MODE LIKE 'SEND_SPEC%'  THEN 
              INSERT INTO com_msg_attach (GUIDNg,docGUID)
              SELECT DISTINCT @comguid,d.guid
              FROM dokumenty d, oppo o
              WHERE d.klucz=o.idntowr and o.idnoperfin=_GUID and d.rodzaj=6;
              IF _Param_D LIKE '%MSG%' OR _MODE LIKE '%MSG' THEN
                  SELECT 0 as status,IF(@towary<>'','OK','Brak specyfikacji do pozycji tego dokumentu') as msg;
              END IF;
          END IF;
        
          IF _MODE IN ('SEND_OPER','SEND_SPEC') THEN
              UPDATE opng n SET n.statusEmail=1,n.status=IF(@zamknijoper,8,n.status) WHERE n.guid=_GUID AND @mailok;
              INSERT INTO log (useridn,osobaguid,ip,guidlink,table_link,miejsce,czynnosc,info)
              SELECT @.Sender.UserLogin,@.Sender.UserGUID,"server",_GUID,'opng',3,8,CONCAT('faktura eMail do: ',group_concat(recipient))
              FROM com_msg_po WHERE  GUIDNg=@comguid AND RecipientRole='To';
          END IF;
          
          IF _MODE IN ('SEND_ZMNG') THEN
              INSERT INTO log (useridn,osobaguid,ip,guidlink,table_link,miejsce,czynnosc,info)
              SELECT @.Sender.UserLogin,@.Sender.UserGUID,"server",_GUID,'zmng',3,8,CONCAT('zamówienie eMail do: ',group_concat(recipient))
              FROM com_msg_po WHERE  GUIDNg=@comguid AND RecipientRole='To';

              IF @session.globals.Owner='KONKOL' THEN
                  UPDATE zmng n SET n.uwagi=CONCAT('Wyslane ',_varStr(now()),' ',@.Sender.UserLogin),n.status=16 WHERE n.guid=_GUID;
                  -- uzg z p. Januszem, JMAM 2025-01-03
                  SET @password=''; 
              END IF;
          END IF;

          UPDATE dokumenty d SET d.password=@password WHERE d.klucz=_GUID;
          UPDATE dokumenty d SET d.doc_status=0 WHERE d.klucz=_GUID AND NOT _DEBUG;
      END IF;
      -- @rows>0
      -- zabezpieczenie przed wcinającym się cronem
      UPDATE com_msg_ng SET status="NEW" WHERE guid=@comguid;  

      IF _DEBUG  THEN
          SELECT * FROM com_msg_ng      WHERE  guid=@comguid;
          SELECT * FROM com_msg_attach  WHERE  guidng=@comguid;
          SELECT * FROM com_msg_po      WHERE  guidng=@comguid;
          
          DELETE n,a,p FROM com_msg_ng n,com_msg_attach a, com_msg_po p 
          WHERE n.guid=@comguid AND p.guidng=n.guid AND a.guidng=n.guid AND _Param_D LIKE '%DELETE%';
      END IF;
      
        
    END IF; -- SEND_OPER (main)
  
    IF _MODE ='CANCEL_MAIL' THEN
        DELETE  FROM dokumenty WHERE klucz=_GUID AND doc_status= -10;
    END IF;
      
    --  call com_mailer('SEND_WEZWANIA_TEST','','','','apro68@gmail.com','DEBUG')\G
    IF (_MODE = 'SEND_WEZWANIA_TEST') THEN

        BEGIN
            DECLARE done BOOL DEFAULT FALSE;
            DECLARE _KontrGUID VARCHAR(38);
            DECLARE c_proc CURSOR FOR select distinct d.klucz from dokumenty d,kontrah k where doc_status=-10 and k.guid=d.klucz order by d.idn;
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
            OPEN c_proc;
            loop2: LOOP
                FETCH c_proc INTO _KontrGUID;
                IF NOT done THEN
                    CALL com_mailer('SEND_WYDRUK',_KontrGUID,'','Wezwanie z ',_PARAM_C,_Param_D);
                ELSE
                    LEAVE loop2;
                END IF;
            END LOOP;
            CLOSE c_proc;
            SELECT @nazwy,@pass;
        END;
    END IF;
    
    --  call com_mailer('SEND_WYDRUK',@guid,'','tytuł','apro68@gmail.com','DEBUG')\G
  -- CALL com_mailer('SEND_WYDRUK','{956E7BE6-260D-4AC3-961C-5299E4015888}','','','','');

    IF _MODE LIKE 'SEND_WYDRUK%' AND _GUID<>'' THEN
        CALL com_mailer('VAR', '', '', '', '', '');
        CALL com_mailer('internal.set.sender',_GUID,_PARAM_A,_Param_B,_PARAM_C,_PARAM_D);      
  -- guid dokumentu w dokumenty, lista adresów w _PARAM_C, tytuł maila w _PARAM_B tekst dodatkowy w _PARAM_A
  -- jeśli w _Param_D (patrz na samej górze) jest guid scenariusza, to pobieram naglowek z rep_scenariusze else - opis z _Param_B
        IF _ScenarioGUID<>'' THEN
            SELECT nazwa,mailsubject INTO @ScenarioName,@ScenarioMailSubject FROM  rep_scenariusze WHERE guid=_ScenarioGUID;
            SET @naglowek=IF(IFNULL(@ScenarioMailSubject,'')='','Pismo z #naszanazwa# ',@ScenarioMailSubject);
        ELSE
            SET @naglowek=IF(_PARAM_B='','Pismo z #naszanazwa# ',_PARAM_B);
        END IF;
        
        SET @naglowek=REPLACE(@naglowek,'#naszanazwa#',@naszanazwa_header);
        SET @comguid=uuid(),@htmlbody='',@dw_na_adresy_grupowe=0,@dw_na_ugrpguid=0,@kontrguid=NULL,@mail_ugrpguid=NULL;
        SET @tresc=REPLACE(IFNULL(_PARAM_A,''),'\n','<BR>');
      
      
        SELECT REPLACE(REPLACE(REPLACE(valuex,'#guid#',_GUID),'#kontakt#',''),'#tresc_maila#',@tresc) INTO @htmlbody
        FROM IReg WHERE idkey='Domyslna_tresc_maila_ogolnego';
        -- TODO: uporzadkowac to
        SET @htmlbody=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@htmlbody,'#user_fullname#',@user_fullname),
            '#user_city#',@user_city),'#user_street#',@user_street),'#user_tel#',@user_tel),'#user_mail#',@user_mail),
            '#user_job_pos#',@user_job_pos),'#user_job_pos_en#',@user_job_pos_en),"#user_loc_name#",@user_loc_name);
        
-- TODO: uogólnić  
        IF @session.globals.Owner = "SIMEX" AND _Param_A LIKE '{Subject%' THEN 
            SET @mail_from = 'finanse@simex.pl';
            SET @subject_start = LOCATE('Subject:', _Param_A) + LENGTH('Subject:');
            SET @bodytext_start = LOCATE('BodyText:', _Param_A);
            SET @subject_length = @bodytext_start - @subject_start - 1;
            SET @naglowek = TRIM(SUBSTRING(_Param_A, @subject_start, @subject_length));
            SET @bodytext_start = @bodytext_start + LENGTH('BodyText:');
            SET @htmlbody = TRIM(SUBSTRING(_Param_A, @bodytext_start+1,LENGTH(_Param_A)-@bodytext_start-3));
            SET @htmlbody=REPLACE(IFNULL(@htmlbody,''),'\n','<BR>');
        ELSE
            SET @htmlbody=IFNULL(@htmlbody,'<H2>Prosimy o zapoznanie się z załącznikiem</H2>');
        END IF;

        SELECT IF(@MAIL_FV_na_PLATNIKA,platnikguid,guid),ugrpguid INTO @kontrguid,@mail_ugrpguid FROM kontrah WHERE guid=_GUID;

        set @rows = ROW_COUNT();
        
        INSERT INTO com_msg_ng (guid,type,owner,Sender,Msg_Title,Msg_Body,srcguid,srctable,status,SrcCtx) 
        SELECT @comguid,'OUT',@.Sender.UserGUID,@mail_from,REPLACE(@naglowek,'#kontrsymbol#',k.symbol),
          REPLACE(REPLACE(REPLACE(@htmlbody, '#naszanazwa#',@naszanazwa),'#nazwakontrahenta#',k.nazwa),'#logojpg#',@logojpg),         
          k.guid,'kontrah','NEW',_ScenarioGUID
        FROM kontrah k
        LEFT JOIN dokumenty d ON d.klucz=k.guid and d.doc_status=-10
        WHERE k.guid=@kontrguid AND NOT ISNULL(@mail_from) and @rows>0
        ORDER BY d.idn DESC LIMIT 1;
        
        SET @rows=ROW_COUNT();
     
        -- tylko dla adresow z opisem E-Faktura, Simex chciał tylko Windykacja
        IF @session.globals.Owner = "SIMEX" THEN
            IF _Param_C LIKE '_%@_%._%' THEN
                INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
                SELECT DISTINCT @comguid,'OUT','mail',_Param_C,'To',CONCAT('ParamC',uuid_short());
            ELSE
                INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
                SELECT DISTINCT @comguid,'OUT','mail',if(isnull(m.adres),CONCAT('Brak maila <',@mail_brak,'>'),IFNULL(@mail_debug,m.adres)),'To',uuid_short()
                FROM kontrah k 
                LEFT JOIN kontakty m ON m.kontrguid=@kontrguid AND m.typ_medium=3 AND m.nieaktywny=0 AND m.opis like '%Windyk%'  AND m.adres LIKE '_%@_%._%'
                WHERE k.guid=@kontrguid  AND @rows>0 AND @kontrguid<>'' AND (NOT ISNULL(m.adres) OR @MAIL_FV_na_brak_mail);
            END IF;
        ELSE
            IF _Param_C LIKE '_%@_%._%' THEN
                INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
                SELECT DISTINCT @comguid,'OUT','mail',_Param_C,'To',CONCAT('ParamC',uuid_short());
            ELSE
                INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
                SELECT DISTINCT @comguid,'OUT','mail',if(isnull(m.adres),CONCAT('Brak maila <',@mail_brak,'>'),IFNULL(@mail_debug,m.adres)),'To',uuid_short()
                FROM kontrah k 
                LEFT JOIN kontakty m ON m.kontrguid=@kontrguid AND m.typ_medium=3 AND m.nieaktywny=0 AND m.opis like '%faktur%'  AND m.adres LIKE '_%@_%._%'
                WHERE k.guid=@kontrguid  AND @rows>0 AND @kontrguid<>'' AND (NOT ISNULL(m.adres) OR @MAIL_FV_na_brak_mail);
            END IF;
        END IF;
        SET @rows=ROW_COUNT();
        
        SELECT count(*)>0 INTO @mailok FROM com_msg_po WHERE GUIDNg=@comguid AND RecipientRole='To' AND Recipient  NOT LIKE '%Brak maila%';
        
        IF @rows>0 THEN 
            IF NOT _DEBUG THEN
                IF @dw_na_adresy_grupowe=1 THEN
                  -- CC na wszystkie adresy wysylajacego - w tym grupowe
                    INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
                    SELECT @comguid,'OUT','mail',u.mail,'CC',uuid()
                    FROM user_account u,grupy_osob g 
                    WHERE u.osobaguid=g.grupaguid and g.osobaguid=@.Sender.UserGUID    ;
                ELSE
                    INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
                    SELECT @comguid,'OUT','mail',@mail_from,'CC',uuid();
                END IF;
                IF @dw_na_ugrpguid=1 THEN
                    INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
                    SELECT @comguid,'OUT','mail',u.mail,'CC',uuid()
                    FROM user_account u WHERE u.guid=@mail_ugrpguid;
                END IF;
              -- TODO: do IRega ?
                INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
                SELECT @comguid,'OUT','mail',i.valuea,'Bcc',uuid() FROM IReg i WHERE i.idkey='Ukryta kopia maila eFV' AND i.valuea like '_%@_%._%';
            END IF; -- not debug 
      
            INSERT INTO com_msg_attach (GUIDNg,docGUID)
            SELECT @comguid,d.guid
            FROM dokumenty d
            WHERE d.klucz=_GUID and d.doc_status=-10
            ORDER BY d.idn;
            set @watch = concat_ws('/', @watch, '80');      
                
            UPDATE dokumenty d set d.doc_status=0 WHERE d.klucz=_GUID AND NOT _DEBUG;
            INSERT INTO log (useridn,ip,guidlink,table_link,miejsce,czynnosc,info)
            SELECT @.Sender.UserLogin,"server",_GUID,'kontrah',3,8,CONCAT('pismo eMail do: ',group_concat(recipient),' kguid:',@kontrguid)
            FROM com_msg_po WHERE  GUIDNg=@comguid AND RecipientRole='To';
        END IF; -- rows>0

        IF _DEBUG  THEN
            SELECT * FROM com_msg_ng  WHERE  guid=@comguid;
            SELECT * FROM com_msg_attach  WHERE  guidng=@comguid;
            SELECT * FROM com_msg_po  WHERE  guidng=@comguid;
            
            DELETE n,a,p FROM com_msg_ng n,com_msg_attach a, com_msg_po p 
            WHERE n.guid=@comguid AND p.guidng=n.guid AND a.guidng=n.guid AND _Param_D LIKE '%DELETE%';
        END IF;
        IF _Param_D LIKE '%MSG%' OR _MODE LIKE '%MSG' THEN
            SELECT 0 as status,'OK' as msg;
        END IF;
    END IF; -- SEND_WYDRUK
  
    IF _MODE IN ('SEND_PLACE','SEND_PRACE_ZLECONE') THEN
        SET @mail_to='';
        IF _GUID='' THEN
            LEAVE sproc;
        END IF;

        SET @comguid=uuid(),_GUIDpom='';

        IF _MODE = 'SEND_PLACE' THEN
            SET @srctable='place',@ireg='Domyslna_tresc_maila_PLACE_HTML';
            SELECT n.GUID_pracownika INTO _GUIDpom FROM place n WHERE n.guid=_GUID;
        ELSE
            SET @srctable='prace_zlecone',@ireg='Domyslna_tresc_maila_umowa_zlec_rach';
            SELECT n.GUID_pracownika INTO _GUIDpom FROM prace_zlecone n WHERE n.guid=_GUID;
        END IF;

        CALL _IReg_Get('DaneFirmy', 'MAIL_FROM_Place', '0', 'STRING', @mail_from, NULL);

        SELECT valuea INTO @naszanazwa FROM IReg WHERE idkey='Pelna_nazwa' AND idpath LIKE '%DaneFirmy';
        -- jesli w user_account jest wiele kont grupowych dla danej osoby, to preferujemy osobiste usera
        SELECT REPLACE(REPLACE(REPLACE(valuex,'#guid#',_GUID),'#kontakt#',''),'#naszanazwa#',@naszanazwa) INTO @htmlbody 
        FROM IReg WHERE idkey=@ireg;

	SET @toosoba=0;
        /*
        SELECT u.mail,g.grupaguid=g.osobaguid as toosoba INTO @mail_from,@toosoba
        FROM user_account u,grupy_osob g 
        WHERE u.osobaguid=g.grupaguid and g.osobaguid=@.Sender.UserGUID 
        ORDER BY toosoba DESC LIMIT 1;
        */
        
        IF isnull(@mail_from) THEN
            SELECT NULLIF(valuea,'') INTO @mail_from FROM IReg WHERE idkey='OurMail' and idpath LIKE '%DaneFirmy';
        END IF;
        IF IFNULL(@mail_from,'')='' THEN
            INSERT INTO log SET useridn=@.Sender.UserGUID, IP='serwer', czas=NOW(), miejsce=5086, czynnosc='8', 
            info=_UTF8'Wysłanie odcinka płacowego mailem - brak adresu nadawcy', table_link=@srctable, GUIDLink=_GUID;  
            LEAVE sproc;
        END IF;

        IF _MODE='SEND_PLACE' THEN 
            INSERT INTO com_msg_ng (guid,type,owner,Sender,Msg_Title,Msg_Body,srcguid,srctable,status) 
            SELECT @comguid,'OUT',@.Sender.UserGUID,@mail_from,Concat('Odcinek placowy ',@naszanazwa),
            @htmlbody,
            n.guid,@srctable, "ADDING" as status
            FROM place n, dokumenty d 
            WHERE d.klucz=n.guid AND n.guid=_GUID AND doc_status=-10
            ORDER BY d.idn desc LIMIT 1
            ;
        ELSE
            INSERT INTO com_msg_ng (guid,TYPE,OWNER,Sender,Msg_Title,Msg_Body,srcguid,srctable,STATUS)
            SELECT @comguid,'OUT',@.Sender.UserGUID,@mail_from,CONCAT('Rachunek do umowy ',@naszanazwa),
            REPLACE(REPLACE(REPLACE(@htmlbody,'#nrumowy#',n.nrzlecenia),
                '#datapoczatkuzlecenia#',n.DataOd),'#datakoncazlecenia#',n.DataDo),
            n.guid,@srctable, "ADDING" AS STATUS
            FROM prace_zlecone n, dokumenty d
            WHERE d.klucz=n.guid AND n.guid=_GUID AND doc_status=-10
            ORDER BY d.idn DESC LIMIT 1
            ;
        END IF;

        SET @rows=ROW_COUNT();
        IF @rows=0 THEN
            INSERT INTO log SET useridn=@.Sender.UserGUID, IP='serwer', czas=NOW(), miejsce=5086, czynnosc='8', 
            info=_UTF8'Wysłanie odcinka płacowego mailem - brak dokumentu', table_link=@srctable, GUIDLink=_GUID;  
            LEAVE sproc;
        END IF;
        SET @mail_to='';
        SELECT KD_mail INTO @mail_to FROM _user_accounts WHERE osobaguid=_GUIDpom;
        IF IFNULL(@mail_to,'')='' THEN
            SELECT m.adres INTO @mail_to FROM kontakty m 
            WHERE m.osobaguid=_GUIDpom AND m.typ_medium=3 AND m.nieaktywny=0 AND m.opis LIKE '%mail%prac%' LIMIT 1;
        END IF;
        SET @mail_to=IFNULL(@mail_to,'');
        IF @mail_to<>'' THEN
            INSERT IGNORE INTO com_msg_po (GUIDNg,Type,Medium_Type,Recipient,RecipientRole,Dispatch_ID) 
            SELECT @comguid,'OUT','mail',@mail_to,'To',uuid();
        ELSE
            INSERT INTO log SET useridn=@.Sender.UserGUID, IP='serwer', czas=NOW(), miejsce=5086, czynnosc='8', 
            info=_UTF8'Wysłanie odcinka płacowego mailem - brak adresata', table_link=@srctable, GUIDLink=_GUID;  
            LEAVE sproc;
        END IF;

        INSERT INTO log SET useridn=@.Sender.UserGUID, IP='serwer', czas=NOW(), miejsce=5086, czynnosc='8', 
        info=CONCAT(_UTF8'Wysłanie odcinka płacowego mailem do ',@mail_to), table_link=@srctable, GUIDLink=_GUID;  
    
        INSERT INTO com_msg_attach (GUIDNg,docGUID)
        SELECT @comguid,d.guid
        FROM dokumenty d
        WHERE d.klucz=_GUID and d.doc_status=-10 and d.nazwa LIKE '%.pdf' LIMIT 1;
        
  -- ustawiam status na 0 zeby dokument nie byl ponownie wysylany, teraz wysylany jest 1 z brzegu       
        UPDATE dokumenty SET doc_status = 0 WHERE doc_status = -10 AND klucz = _GUID;  
        UPDATE com_msg_ng SET status="NEW" WHERE guid=@comguid;
    END IF;  

    IF (_MODE = 'INS_HOLD_OPER') THEN
        /*
        Tutaj nawet nie wstawiamuy nagłówka a li tylko adresatów - rekord powstaje np. w sytuacji tworzenia zam. tortowego
        gdzie wysyłka faktury nastapi za np 3-4 dni i wtedy bedzie wołanay 
        mode = "SEND_HOLD_OPER" który dopełni reszty ale nie tknie juz adresata/ów
        Przykład ioni9cjowana ..
        CALL com_mailer('INS_HOLD_OPER', '', '', 'GUID_ZM', 'emai_adres', '');
        .. i wysyłki
        CALL com_mailer('SEND_HOLD_OPER', 'GUID FV', '', 'GUID_ZM', 'emai_adres', '');
        */
        SET @comguid = NULLIF(_Param_B, ''),@mail_debug = NULLIF(_Param_C, '');

        IF (@comguid IS NOT NULL) AND (@mail_debug IS NOT NULL) THEN
            DELETE FROM com_msg_po WHERE GUIDNg = @comguid AND Medium_Type = 'mail';
            INSERT IGNORE INTO com_msg_po (GUIDNg,`TYPE`,Medium_Type,Recipient,RecipientRole,Dispatch_ID)
            SELECT @comguid,'OUT','mail',@mail_debug,'To', UUID_SHORT();
        END IF;  
    END IF;  


    --  call com_mailer('SELECT_ALL_FOR_SRCGUID',@guid,'','','','')\G
    --  call com_mailer('SELECT_ALL_FOR_LAST_SRCGUID','','','','','')\G
    --  call com_mailer('SELECT_ALL_FOR_GUID',@guid,'','','','')\G
    --  call com_mailer('SELECT_ALL_FOR_LAST_GUID','','','','','')\G
      
    IF _MODE IN ('SELECT_ALL_FOR_SRCGUID','SELECT ALL_FOR_LAST_SRCGUID') THEN
        IF _MODE='SELECT ALL_FOR_LAST' THEN
            SELECT Srcguid INTO _GUID FROM com_msg_ng n ORDER BY idn DESC LIMIT 1;
        END IF;

        SELECT * FROM com_msg_ng n WHERE n.srcguid=_GUID;
        SELECT p.* FROM com_msg_po p,com_msg_ng n WHERE n.srcguid=_GUID and p.guidng=n.guid;
        SELECT p.* FROM com_msg_attach p,com_msg_ng n WHERE n.srcguid=_GUID and p.guidng=n.guid;
    END IF;

    IF _MODE IN ('SELECT_ALL_FOR_GUID','SELECT ALL_FOR_LAST_GUID') THEN
        IF _MODE='SELECT ALL_FOR_LAST_GUID' THEN
            SELECT guid INTO _GUID FROM com_msg_ng n ORDER BY idn DESC LIMIT 1;
        END IF;

        SELECT * FROM com_msg_ng n WHERE n.guid=_GUID;
        SELECT p.* FROM com_msg_po p WHERE p.guidng=_GUID;
        SELECT p.* FROM com_msg_attach p WHERE p.guidng=_GUID;
    END IF;

END $$

DELIMITER ;

SHOW WARNINGS;

/*
$Log: com_mailer.sql,v $
Revision 1.118  2025/05/09 14:25:59  apro
crist - wył. sendera indyw.

Revision 1.117  2025/05/09 13:02:51  apro
wyjątek dla CRISTa

Revision 1.116  2025/05/09 08:17:37  apro
SEND_PLACE - mail from

Revision 1.115  2025/05/08 09:42:21  apro
SEND_PLACE - naszanazwa

Revision 1.114  2025/05/02 08:01:45  apro
..cd

Revision 1.113  2025/05/02 07:50:42  apro
send_prace_zlec - popr. od GP

Revision 1.112  2025/04/30 13:50:51  apro
send_zlec

Revision 1.111  2025/04/17 07:02:05  apro
SEND_PLACE

Revision 1.110  2025/04/16 12:39:02  apro
SEND_PRACE_ZLECONE

Revision 1.109  2025/04/16 12:33:14  apro
porządki

Revision 1.108  2025/02/20 07:18:28  apro
warningi, kosmetyka, porządki

Revision 1.107  2025/02/14 09:23:53  apro
obsługa #kontrsymbol# w treści

Revision 1.106  2025/01/15 09:48:31  apro
konkol c.d.

Revision 1.105  2025/01/03 12:06:48  apro
KONKOL - status zamówienia

Revision 1.104  2024/12/12 12:24:50  robert
Zmiany w send_wydruk wed�ug maila Pani Agniszki Radzikowskiej

Revision 1.103  2024/11/26 13:28:59  robert
Zmiany send_wydruk do dzialania z wersja Motlawy Simex
z dodatkowym oknem tematu i tresci maila

Revision 1.102  2024/11/25 08:16:59  apro
nowe zmienne w szablonie (COMEX)

Revision 1.101  2024/11/22 12:51:11  robert
Poprawa bledu w SEND_WYDRUK powodujca brak wysylki
(brak wpisu w com_msg_ng i com_msg_po).

Revision 1.100  2024/10/15 16:24:21  jmam
no message

Revision 1.99  2024/10/15 16:23:06  jmam
Wyjęcie dwóch procedur - zostaje tylko com_mailer

Revision 1.98  2024/09/26 11:22:56  apro
popr. nałozonej zmiennej

Revision 1.97  2024/09/26 10:52:04  apro
dane wysyłającego; poprawki w nagłówku

Revision 1.96  2024/09/20 09:37:41  apro
poprawka tytułu maila dla SEND_WYDRUK

Revision 1.95  2024/07/26 09:42:50  apro
zabezpieczenie - było body=null, gdy waluta i nettowal=0

Revision 1.94  2024/06/12 07:36:10  apro
Jarz - temat maila

Revision 1.93  2024/06/06 08:34:48  waliant
Zmiana dla baltimy (wysylka niezatw. zamowien) $SEND$

Revision 1.92  2024/04/24 09:41:42  apro
SEC:bez  DW na sendera

Revision 1.91  2024/04/03 05:46:20  apro
.

Revision 1.90  2024/02/27 10:04:08  apro
scenariusze, status oper

Revision 1.89  2023/10/02 12:33:10  jmam
$SEND$ Zgranie z apro

Revision 1.88  2023/10/02 12:30:48  jmam
no message

Revision 1.87  2023/09/25 09:34:41  apro
polskie znaki w title

Revision 1.86  2023/09/25 06:01:37  apro
porządki - c.d.

Revision 1.85  2023/09/22 17:09:17  apro
c.d. porządków ustalania adresatów

Revision 1.84  2023/09/22 16:37:40  apro
ojojoj
wysyłka zamówień poprawiona

Revision 1.83  2023/09/21 11:27:34  apro
porządki z tematem maili dla opng i zmng
dodanie nrdokfin i nrzamw

Revision 1.82  2023/08/31 11:32:28  apro
tytuł

Revision 1.81  2023/08/02 05:36:17  apro
#tresc_maila# w SEND_DOKUMENT

Revision 1.80  2023/07/31 06:09:02  apro
$SEND$
pusty bcc

Revision 1.79  2023/07/05 10:26:55  apro
porządki w ustalaniu adresata dla operacji

Revision 1.78  2023/07/05 10:02:53  apro
adresat zamówienia

Revision 1.77  2023/06/27 05:57:47  apro
unset send - załącznik

Revision 1.76  2023/04/13 10:04:56  apro
COMEX - poprawki dot. protokołów

Revision 1.75  2023/02/08 12:15:54  apro
samofakturowanie Crist

Revision 1.74  2023/01/17 14:40:19  apro
$SEND$ oganiczenie zapisu do logu

Revision 1.73  2022/12/19 08:27:36  jmam
$SEND$  poprawki apro dot. za��cznik�w

Revision 1.72  2022/12/19 06:47:07  apro
dodatkowe załaczniki z zamówień (protokoły itp)

Revision 1.71  2022/12/15 11:53:29  jmam
$SEND$

Revision 1.70  2022/09/20 11:13:28  rafalg
 zt fv

Revision 1.69  2022/08/11 09:03:43  apro
log dla pustych @

Revision 1.68  2022/08/10 10:07:29  apro
obejście problemu braku @ z userem zalogowanym

Revision 1.67  2022/08/10 06:10:06  apro
tabs

Revision 1.66  2022/07/28 12:03:52  rafalg
szablony mail - > AXIS

Revision 1.65  2022/07/22 12:43:40  apro
status NEW ustawiany po dodaniu całości

Revision 1.64  2022/05/24 12:54:09  apro
poprawka błędu - brak parametru _Param_D

Revision 1.63  2022/04/12 12:26:23  apro
polskie w nazwach plików

Revision 1.62  2022/02/28 18:14:05  jmam
$SEND$

Revision 1.61  2022/02/18 08:10:53  rafalg
mod send_wersja

Revision 1.60  2022/02/02 11:43:40  apro
zabezp przed dublami nazw załączników

Revision 1.59  2022/01/05 13:55:11  apro
comex - naprawa błędu ustawiania pola tabela w dokumentach

Revision 1.58  2021/12/21 11:50:11  rafalg
Dodanie podpisu wysylajacego - aktualnie zalogowanego

Revision 1.57  2021/12/13 08:16:49  apro
*** empty log message ***

Revision 1.56  2021/12/13 08:00:01  apro
volt

Revision 1.55  2021/12/08 20:32:14  rafalg
blokada na Tabela tylko dla COMEX
$SEND$

Revision 1.54  2021/12/07 12:08:45  apro
kosmetyka

Revision 1.53  2021/12/06 12:04:25  rafalg
no message

Revision 1.52  2021/12/02 17:05:12  rafalg
zmiany i poprawki
$SEND$

Revision 1.51  2021/12/01 16:08:07  jmam
$SEND$

Revision 1.50  2021/12/01 14:41:43  rafalg
kolejne latki przy zalcznikach

Revision 1.49  2021/11/19 10:59:19  rafalg
sprawdzanie zalacznikow

Revision 1.48  2021/11/19 10:51:30  apro
*** empty log message ***

Revision 1.47  2021/11/18 14:30:39  rafalg
poprawki w wysylce

Revision 1.46  2021/07/21 13:20:23  apro
waluta i inne popr. dla Aste

Revision 1.45  2021/07/12 08:07:32  rafalg
zmiany dla AXIS zlecenia + MM

Revision 1.44  2021/06/22 05:42:43  apro
...

Revision 1.43  2021/03/22 11:57:25  jmam
$SEND$

Revision 1.42  2021/02/05 11:46:20  rafalg
poprawka w zamowieniach en

Revision 1.41  2020/12/03 10:27:53  rafalg
uwzglednienie wysylki faktur walutowych
$SEND$

Revision 1.40  2020/12/03 07:51:16  rafalg
zmiany w CC dla SIMEX

Revision 1.39  2020/12/02 06:19:48  rafalg
$SEND$

Revision 1.38  2020/11/30 12:44:55  apro
BALTIMA - uwzgl. statusu obiegu zm (podpisy); porządki

Revision 1.37  2020/11/27 08:07:12  rafalg
poprawka w dw_na_ugrpguid
$SEND$

Revision 1.36  2020/11/26 13:53:57  jmam
$SEND$

Revision 1.35  2020/11/25 06:34:22  apro
kosmetyka

Revision 1.34  2020/11/24 10:04:18  jmam
Dodanie obsl. SEND_HOLD_OPER

Revision 1.33  2020/10/28 14:18:43  rafalg
doadnie rodzaju 110 do wysylki zamowien

Revision 1.32  2020/09/10 09:57:59  rafalg
bruttowal zamiast brutto w #brutto#

Revision 1.31  2020/08/13 12:28:03  apro
CC na usera nadawcę

Revision 1.30  2020/07/24 11:07:49  jmam
no message

Revision 1.29  2020/07/08 06:07:33  apro
poprawka błędu pobierania tematu

Revision 1.28  2020/06/30 05:46:47  apro
język

Revision 1.27  2020/06/22 12:14:42  rafalg
Dodanie wersji jeykowych + zm EX

Revision 1.26  2020/06/05 10:18:38  rafalg
zmiany dla mail_content

Revision 1.25  2020/06/04 05:29:53  apro
parama 1024

Revision 1.24  2020/06/03 12:07:08  apro
więcej do IRega

Revision 1.23  2020/05/12 08:56:24  rafalg
Modyfikacja enterow w tresci dodatkowej na html

Revision 1.22  2020/05/11 09:37:32  apro
konkol

Revision 1.21  2020/05/08 06:32:46  rafalg
zmiany w subject + body

Revision 1.20  2020/04/30 09:44:43  rafalg
dodawanie zalacznikow rodzaj 10

Revision 1.19  2020/04/30 09:42:07  apro
ifdefy Konkol, Crist

Revision 1.18  2020/04/09 12:27:46  apro
CRIST i inne poprawki

Revision 1.17  2020/03/20 13:59:47  apro
$SEND$

Revision 1.16  2020/03/20 13:55:16  apro
$SEND$

Revision 1.15  2019/09/30 06:10:12  apro
$SEND$
wysyłka specyfikacji i wielu załączników

Revision 1.14  2019/08/22 06:53:47  apro
rozszerzenie logu
$SEND$

Revision 1.13  2019/06/17 10:48:35  apro
obsługa wariantów DW

Revision 1.12  2019/04/12 10:22:25  apro
adresat określony w zamówieniu (zmng.osobaguid)

Revision 1.11  2019/03/01 07:13:46  apro
poprawki dla sec
$SEND$

Revision 1.10  2018/12/20 08:15:11  slon
poprawka dla cdg wysylnie zapisow plcowych

Revision 1.9  2018/12/20 06:24:57  apro
ignore

Revision 1.8  2018/12/19 07:50:57  slon
dodanie ograniczenia mail w placach

Revision 1.7  2018/12/12 07:20:35  apro
faktury - wysylanie w przypadku braku maila

Revision 1.6  2018/12/06 07:33:10  slon
wysylka odcinkow placowych maile z kontaktow

Revision 1.5  2018/12/05 13:22:57  apro
szyfrowanie

Revision 1.4  2018/12/05 13:14:05  slon
place send

Revision 1.3  2018/11/16 13:55:57  apro
wysylanie faktur - poprawki

Revision 1.2  2018/06/06 08:30:15  apro
send_oper_list

Revision 1.1  2018/05/02 12:38:43  apro
init

*/
