 DELIMITER $$


DROP PROCEDURE IF EXISTS `ht_import_autoID`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_import_autoID`(
IN _MODE VARCHAR(38),
IN _DATA DATE,
IN _ILE VARCHAR(38),
IN _PLIK VARCHAR(250),
IN _Param_A VARCHAR(250),
IN _Param_B VARCHAR(250),
IN _Param_C VARCHAR(250)
)SPROC: BEGIN

   /*
   
   --   CALL ht_import_autoID('IMPORT','','','','','','')
   */
DO _Birth_System();	-- ust. m.in. Owner
/*  
IF IFNULL(@session.globals.Owner,'')='' THEN
    SELECT d.value INTO @session.globals.Owner FROM _db_globals d WHERE d.key='owner';
END IF;
*/
SET @ile_dni=7;

--   CALL ht_import_autoID('IMPORT','','','','','','')
IF _MODE='IMPORT' THEN 
    
    DROP TABLE IF EXISTS ta_osoby_all;
    CREATE TABLE ta_osoby_all SELECT * FROM ta_nowe_osoby;

    DELETE FROM ta_nowe_osoby WHERE nazwisko='' OR grupadostepu LIKE "%#0000000%" OR grupadostepu LIKE "not assigned%" 
    -- OR (DATE(LEFT(DataOstatniegoZdarzenia,10))<CURRENT_DATE - INTERVAL 2 MONTH AND Oddzial <>'Gdańsk - Crist')
    OR (LENGTH(CONCAT(Idkarty1,Idkarty2,Idkarty3,Idkarty4,Idkarty5))=0 AND Oddzial <>'Gdańsk - Crist') ;


    UPDATE ta_nowe_osoby SET DataOstatniegoZdarzenia=REPLACE(DataOstatniegoZdarzenia,'T',' '),firma=TRIM(REPLACE(grupadostepu,CHAR(10),'')),pesel=TRIM(pesel);
    UPDATE ta_nowe_osoby SET Idkarty1=MD5(NumerPrzepustki) WHERE Oddzial='Gdańsk - Crist' AND Idkarty1='';

    DROP TABLE IF EXISTS ta_osoby_przeterm;
    DROP TABLE IF EXISTS ta_osoby_dane;
    CREATE TABLE ta_osoby_dane SELECT * FROM ta_nowe_osoby;

    CREATE TABLE ta_osoby_przeterm SELECT id,imie,imie2,nazwisko,pesel,paszport,NrDowodu,Idkarty1,Idkarty2,Idkarty3,Idkarty4,Idkarty5,DataOstatniegoZdarzenia 
    FROM ta_nowe_osoby WHERE (_VarDate(DataOstatniegoZdarzenia)<CURRENT_DATE - INTERVAL @ile_dni DAY OR DataOstatniegoZdarzenia='')
    AND LENGTH(CONCAT(Idkarty1,Idkarty2,Idkarty3,Idkarty4,Idkarty5))=0 AND Oddzial <>'Gdańsk - Crist' ;


    DELETE FROM ta_nowe_osoby WHERE 
    (_VarDate(DataOstatniegoZdarzenia)<CURRENT_DATE - INTERVAL @ile_dni DAY OR DataOstatniegoZdarzenia='') AND LENGTH(CONCAT(Idkarty1,Idkarty2,Idkarty3,Idkarty4,Idkarty5))=0 AND Oddzial <>'Gdańsk - Crist';

    ALTER TABLE ta_nowe_osoby 
    MODIFY COLUMN id VARCHAR(10) NOT  NULL,
    MODIFY COLUMN paszport VARCHAR(30) NOT  NULL,
    MODIFY COLUMN pesel VARCHAR(11) NOT  NULL,
    MODIFY COLUMN firma VARCHAR(30) NOT  NULL
    ;
    ALTER TABLE ta_nowe_osoby ADD COLUMN afirma VARCHAR(150) NOT NULL DEFAULT '' AFTER `firma`; 

    -- tego nie ruszamy
    ALTER TABLE ta_nowe_osoby 
    ADD COLUMN guid VARCHAR(38) NOT NULL DEFAULT '',ADD COLUMN kontrguid VARCHAR(38) NOT NULL DEFAULT '',ADD COLUMN akontrguid VARCHAR(38) NOT NULL DEFAULT '',
    ADD COLUMN nip VARCHAR(38) NOT NULL DEFAULT '',ADD COLUMN peselok INT NOT NULL DEFAULT 0,ADD COLUMN STATUS VARCHAR(20) NOT NULL DEFAULT 'NEW',ADD COLUMN db VARCHAR(20) NOT NULL DEFAULT 'ht',
    ADD INDEX id(id),ADD INDEX guid(guid),ADD INDEX pesel(pesel),ADD INDEX paszport(paszport),ADD INDEX nip(nip),ADD INDEX kontrguid(kontrguid),ADD INDEX akontrguid(akontrguid);

    UPDATE ta_nowe_osoby t SET t.peselok=_id_verify('PESEL',pesel),nip=_mid_sep(firma,'#',2);
    UPDATE ta_nowe_osoby t SET t.akontrguid='CRIST' WHERE t.nip="5830005443";
    UPDATE ta_nowe_osoby t SET t.akontrguid='{63BDC5E4-C0CB-412E-A030-724A107FFEEE}',t.db='offshore' WHERE t.nip="9581658130";
    UPDATE ta_nowe_osoby t,kontrah k SET t.akontrguid=k.guid WHERE k.deleted=0 AND k.nip<>'5830005443' AND k.nip=t.nip AND LENGTH(t.nip)=10 AND k.nip<>'' AND t.akontrguid='';

    CREATE TEMPORARY TABLE obcy
    SELECT t.id,k.guid FROM ta_nowe_osoby t,kontrah k WHERE k.deleted=0 AND MID(k.nip,3,14)=t.nip AND t.akontrguid='' AND k.nip<>'' AND t.nip<>'';
    ALTER TABLE obcy ADD INDEX id(id);
    -- select * from obcy;
    UPDATE obcy o,ta_nowe_osoby t SET t.akontrguid=o.guid WHERE t.id=o.id; 

    -- pracownicy
    UPDATE ta_nowe_osoby t, osoby o SET t.guid=o.guid,t.kontrguid='CRIST',t.akontrguid='CRIST' WHERE peselok AND o.nrpesel=t.pesel AND o.nrpesel<>'' AND o.pracownik;
    -- osoby znalezione - pesel
    UPDATE ta_nowe_osoby t, osoby o SET t.guid=o.guid,t.kontrguid=o.kontrguid WHERE peselok AND o.nrpesel=t.pesel  AND o.nrpesel<>'' AND NOT o.pracownik;
    -- osoby znalezione - paszport
    UPDATE ta_nowe_osoby t, osoby o SET t.guid=o.guid,t.kontrguid=o.kontrguid WHERE t.guid='' AND o.nrpaszportu=t.paszport AND LENGTH(t.paszport>6) AND o.nrpaszportu<>'';
    -- osoby znalezione - dowod os.
    UPDATE ta_nowe_osoby t, osoby o SET t.guid=o.guid,t.kontrguid=o.kontrguid WHERE t.guid='' AND o.NrSeriaDowoduOsobistego=t.NrDowodu AND LENGTH(t.NrDowodu)>6 AND o.NrSeriaDowoduOsobistego<>'';

    -- osoby znalezione - dzialacze CRIST, maja pesel w karcie kontrahenta - zmiana z CRIST na podwykonawce z kontahentow
    UPDATE ta_nowe_osoby t, osoby o,kontrah k SET t.akontrguid=o.kontrguid,t.kontrguid=o.kontrguid WHERE t.guid=o.guid AND t.peselok AND k.pesel=t.pesel AND t.akontrguid='CRIST' AND k.guid=o.kontrguid;

    -- osoby znalezione - dzialacze OFFSHORE, maja pesel w karcie kontrahenta - zmiana z CRIST OFFSHORE na podwykonawce z kontahentow
    UPDATE ta_nowe_osoby t, osoby o,offshore.kontrah k SET t.db='offshore',t.akontrguid=o.kontrguid,t.kontrguid=o.kontrguid WHERE t.guid=o.guid AND t.peselok AND k.pesel=t.pesel AND t.akontrguid='{63BDC5E4-C0CB-412E-A030-724A107FFEEE}' AND k.guid=o.kontrguid;

    -- osoby znalezione - dzialacze SHIPYARD, maja pesel w karcie kontrahenta - zmiana z CRIST OFFSHORE na podwykonawce z kontahentow
    UPDATE ta_nowe_osoby t, osoby o,ht_ship.kontrah k SET t.db='ht_ship',t.akontrguid=o.kontrguid,t.kontrguid=o.kontrguid WHERE t.guid=o.guid AND t.peselok AND k.pesel=t.pesel AND t.akontrguid='{63BDC5E4-C0CB-412E-A030-724A107FFEEE}' AND k.guid=o.kontrguid;

    -- osoby znalezione - nie maja kontrguid w HT, przypisanie na podst AUTOID
    UPDATE ta_nowe_osoby t, osoby o,kontrah k SET t.kontrguid=t.akontrguid,o.kontrguid=t.akontrguid WHERE t.guid=o.guid AND t.akontrguid=k.guid AND o.kontrguid='' AND t.kontrguid='';

    -- osoby wg guidu z AUTOID
    UPDATE ta_nowe_osoby t, osoby o SET t.guid=o.guid,t.kontrguid=o.kontrguid WHERE t.guid='' AND o.guid=CONCAT('AUTOID',id);

    --  zignorowac - bledy

    UPDATE ta_nowe_osoby t SET STATUS='DEL' WHERE LENGTH(CONCAT(Idkarty1,Idkarty2,Idkarty3,Idkarty4,Idkarty5))=0 AND Oddzial <>'Gdańsk - Crist';
    UPDATE ta_nowe_osoby t SET STATUS='ERR_IDEMPTY' WHERE STATUS NOT LIKE "ERR%" AND guid=''  AND t.pesel='' AND t.paszport='' AND t.nrdowodu='';
    UPDATE ta_nowe_osoby t SET STATUS='ERR_IDPESEL' WHERE STATUS NOT LIKE "ERR%" AND guid=''  AND t.pesel<>'' AND NOT t.peselok;
    UPDATE ta_nowe_osoby t SET STATUS='ERR_IDPASZP' WHERE STATUS NOT LIKE "ERR%" AND guid=''  AND t.paszport<>'' AND LENGTH(t.paszport)<6;
    UPDATE ta_nowe_osoby t SET STATUS='ERR_IDDOWOD' WHERE STATUS NOT LIKE "ERR%" AND guid=''  AND t.nrdowodu<>'' AND LENGTH(t.nrdowodu)<6;
    UPDATE ta_nowe_osoby t SET STATUS='INNY_KONTRAH' WHERE STATUS NOT LIKE "ERR%" AND guid<>'' AND (t.kontrguid='' OR t.akontrguid='' OR t.kontrguid<>t.akontrguid);
    -- UPDATE ta_nowe_osoby t SET STATUS='ERR_KONTRAH' WHERE STATUS NOT LIKE "ERR%" AND guid='' AND (t.akontrguid='') and Oddzial <>'Gdańsk - Crist';

    UPDATE ta_nowe_osoby ta
    INNER JOIN osoby o ON ta.GUID = o.GUID
    LEFT JOIN kontrah k USE KEY (GUID) ON k.GUID = ta.akontrGUID
    SET
        ta.aFirma = (@.k.Symbol := TRIM(REPLACE(REPLACE(REPLACE(REPLACE(k.Symbol, 'Sp. z o.o.' , ''), 'Sp. z o.o.' , ''), 'Sp. s.c.' , ''), 's.c.' , ''))),
        ta.aFirma = (@.F := REPLACE(REPLACE(REPLACE(SUBSTRING_INDEX(ta.Firma, '#', 1), 'Sp. z o.o.' , ''), 'Sp. s.c.' , ''), 's.c.' , '')),
        ta.aFirma = 
        IF(@.k.Symbol <=> @.F OR @.k.Symbol LIKE CONCAT(@.F, '%') OR @.F LIKE CONCAT(@.k.Symbol, '%'), 
            @.F, 
            IF(@.k.Symbol LIKE CONCAT(o.Nazwisko, '%'),
                @.F,
                CONCAT_WS(' - ', @.k.Symbol, @.F)
            )
        )
    ;
    -- SELECT STATUS,COUNT(*) AS ile FROM ta_nowe_osoby GROUP BY STATUS;
    UPDATE ta_nowe_osoby t, osoby o SET o.info2=t.id,o.nazwa_dzialu=t.wydzial,o.stanowisko=t.stanowisko,o.firma=t.afirma WHERE t.guid=o.guid AND t.guid<>'';

    SELECT 'nowe osoby';
    SELECT CONCAT('AUTOID',id) AS guid,akontrguid,TRIM(CONCAT(imie,' ',imie2)) AS imiona,nazwisko,pesel,paszport,NrDowodu
    FROM ta_nowe_osoby t WHERE t.guid='' -- AND t.akontrguid<>'' 
    AND t.status='NEW';

    INSERT IGNORE INTO osoby (guid,kontrguid,imie1,imie2,imiona,nazwisko,nrpesel,nrpaszportu,NrSeriaDowoduOsobistego,rodzaj,info2,nazwa_dzialu,stanowisko) 
    SELECT CONCAT('AUTOID',id),akontrguid,imie,imie2,TRIM(CONCAT(imie,' ',imie2)),nazwisko,pesel,paszport,NrDowodu,1,id,wydzial,stanowisko
    FROM ta_nowe_osoby t WHERE t.guid=''
    --  AND t.akontrguid<>''  
    AND t.status='NEW';

    UPDATE ta_nowe_osoby SET guid=CONCAT('AUTOID',id),kontrguid=akontrguid WHERE guid='';

    UPDATE ta_nowe_osoby t,hr_cards c SET t.status=IF(t.Idkarty1='','DEL',IF(t.Idkarty1=c.id,'JEST','ZMIANA')) WHERE c.kind='RCP' AND t.guid=c.osobaguid AND t.status NOT LIKE 'ERR%';
    -- update ta_nowe_osoby t,hr_cards c set t.status=if(t.Idkarty2='','DEL2',if(t.Idkarty2=c.id,'JEST','ZMIANA')) where c.kind='RCP' and t.guid=c.osobaguid and t.status not like 'ERR%';
    -- update ta_nowe_osoby t,hr_cards c set t.status=if(t.Idkarty3='','DEL3',if(t.Idkarty3=c.id,'JEST','ZMIANA')) where c.kind='RCP' and t.guid=c.osobaguid and t.status not like 'ERR%';
    -- update ta_nowe_osoby t,hr_cards c set t.status=if(t.Idkarty4='','DEL4',if(t.Idkarty4=c.id,'JEST','ZMIANA')) where c.kind='RCP' and t.guid=c.osobaguid and t.status not like 'ERR%';
    -- update ta_nowe_osoby t,hr_cards c set t.status=if(t.Idkarty5='','DEL5',if(t.Idkarty5=c.id,'JEST','ZMIANA')) where c.kind='RCP' and t.guid=c.osobaguid and t.status not like 'ERR%';

    -- SELECT STATUS,COUNT(*) AS ile FROM ta_nowe_osoby GROUP BY STATUS;

    SELECT 'karty do usuniecia';
    SELECT c.id,c.info,t.guid,t.nazwisko,t.imie FROM ta_nowe_osoby t,hr_cards c WHERE c.kind='RCP' AND t.guid=c.osobaguid AND t.status LIKE 'DEL%';

    SELECT 'karty do zmiany';
    SELECT c.id AS z,t.Idkarty1,c.info,t.guid,t.nazwisko,t.imie FROM ta_nowe_osoby t,hr_cards c WHERE c.kind='RCP' AND t.guid=c.osobaguid AND t.status='ZMIANA';

    --  todo - sprawdzac sytuacje, gdy kto inny ma te karte

    --  dodaje tylko karty dla istniejacych osob (w tym nowo dodanych przed chwila)
    SELECT 'karty do dodania';
    SELECT t.id,t.Idkarty1,t.guid,t.nazwisko,t.imie FROM ta_nowe_osoby t , osoby o WHERE o.guid=t.guid AND t.status='NEW' AND t.Idkarty1<>'';

    -- todo wiele kart rodzielonych |
    --  usuwam wszystkie karty takich osob
    DROP TABLE IF EXISTS ta_do_sprawdzenia;
    CREATE TABLE ta_do_sprawdzenia SELECT  t.*,c.OsobaGUID  FROM ta_nowe_osoby t,hr_cards c  WHERE c.kind='RCP' AND t.guid=c.osobaguid AND t.status IN ('ZMIANA','DEL');
    SELECT 'karty do sprawdzenia;';
    SELECT * FROM ta_do_sprawdzenia;


    DELETE c FROM ta_nowe_osoby t,hr_cards c WHERE c.kind='RCP' AND t.guid=c.osobaguid AND t.status IN ('ZMIANA','DEL');
    SELECT 'dodaje';
    --  dodaje nowe
    INSERT IGNORE INTO hr_cards (id,kind,DateFrom,osobaguid,info) SELECT t.Idkarty1,'RCP',NOW(),t.guid,t.NumerPrzepustki FROM ta_nowe_osoby t WHERE t.status IN ('ZMIANA','NEW','INNY_KONTRAH','ERR_KONTRAH');




END IF;

END$$

DELIMITER ;

/*
| aidn                    | int(11)      | NO   |     | 0       |       |
| Id                      | varchar(250) | NO   |     | NULL    |       |
| Imie                    | varchar(250) | NO   |     | NULL    |       |
| Imie2                   | varchar(250) | NO   |     | NULL    |       |
| Nazwisko                | varchar(250) | NO   |     | NULL    |       |
| PESEL                   | varchar(250) | NO   |     | NULL    |       |
| NrDowodu                | varchar(250) | NO   |     | NULL    |       |
| Paszport                | varchar(250) | NO   |     | NULL    |       |
| Kraj                    | varchar(250) | NO   |     | NULL    |       |
| DataUrodzenia           | varchar(250) | NO   |     | NULL    |       |
| Firma                   | varchar(250) | NO   |     | NULL    |       |
| GrupaDostepu            | varchar(250) | NO   |     | NULL    |       |
| Idkarty1                | varchar(250) | NO   |     | NULL    |       |
| Idkarty2                | varchar(250) | NO   |     | NULL    |       |
| Idkarty3                | varchar(250) | NO   |     | NULL    |       |
| Idkarty4                | varchar(250) | NO   |     | NULL    |       |
| Idkarty5                | varchar(250) | NO   |     | NULL    |       |
| NumerPrzepustki         | varchar(250) | NO   |     | NULL    |       |
| DataOstatniegoZdarzenia | varchar(250) | NO   |     | NULL    |       |
| Oddzial                 | varchar(250) | NO   |     | NULL    |       |
| Wydzial                 | varchar(250) | NO   |     | NULL    |       |
| Stanowisko              | varchar(250) | NO   |     | NULL    |       |

*/

/*
$Log: ht_import_autoID.sql,v $
Revision 1.4  2024/05/13 07:26:19  apro
pobrane z serwera crista; porządki;
dodanie importu brygady( nazwa_dzialu) i stanowiska

Revision 1.3  2024/04/03 06:36:52  apro
popr. RG

Revision 1.2  2024/03/15 13:27:18  apro
log

*/