DELIMITER $$

DROP PROCEDURE IF EXISTS `emp001`.`spManut`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `spManut`(
in Pdataini datetime,
   Pdatafim datetime,
   Pmatricula varchar(20),
   Plogin varchar(20)
)
BEGIN
       declare Vmatricula char(20);
       declare Vdiasemana char(10);
       declare Vponto1 char(5);
       declare Vponto2 char(5);
       declare Vponto3 char(5);
       declare Vponto4 char(5);
       declare Vponto5 char(5);
       declare Vponto6 char(5);
       declare Vponto7 char(5);
       declare Vponto8 char(5);
       declare Vponto9 char(5);
       declare Vponto10 char(5);
       declare Vponto11 char(5);
       declare Vponto12 char(5);
       declare Vpontoanterior1 char(5);
       declare Vpontoanterior2 char(5);
       declare Vpontoanterior3 char(5);
       declare Vpontoanterior4 char(5);
       declare Vpontoanterior5 char(5);
       declare Vpontoanterior6 char(5);
       declare Vpontoanterior7 char(5);
       declare Vpontoanterior8 char(5);
       declare Vpontoanterior9 char(5);
       declare Vpontoanterior10 char(5);
       declare Vpontoanterior11 char(5);
       declare Vpontoanterior12 char(5);
       declare Vmotivo1 integer;
       declare Vmotivo2 integer;
       declare Vmotivo3 integer;
       declare Vmotivo4 integer;
       declare Vmotivo5 integer;
       declare Vmotivo6 integer;
       declare Vmotivo7 integer;
       declare Vmotivo8 integer;
       declare Vmotivo9 integer;
       declare Vmotivo10 integer;
       declare Vmotivo11 integer;
       declare Vmotivo12 integer;
       declare Valtera1 char(1);
       declare Valtera2 char(1);
       declare Valtera3 char(1);
       declare Valtera4 char(1);
       declare Valtera5 char(1);
       declare Valtera6 char(1);
       declare Valtera7 char(1);
       declare Valtera8 char(1);
       declare Valtera9 char(1);
       declare Valtera10 char(1);
       declare Valtera11 char(1);
       declare Valtera12 char(1);
       declare Valteraanterior1 char(1);
       declare Valteraanterior2 char(1);
       declare Valteraanterior3 char(1);
       declare Valteraanterior4 char(1);
       declare Valteraanterior5 char(1);
       declare Valteraanterior6 char(1);
       declare Valteraanterior7 char(1);
       declare Valteraanterior8 char(1);
       declare Valteraanterior9 char(1);
       declare Valteraanterior10 char(1);
       declare Valteraanterior11 char(1);
       declare Valteraanterior12 char(1);
       declare Vrep1 char(17);
       declare Vrep2 char(17);
       declare Vrep3 char(17);
       declare Vrep4 char(17);
       declare Vrep5 char(17);
       declare Vrep6 char(17);
       declare Vrep7 char(17);
       declare Vrep8 char(17);
       declare Vrep9 char(17);
       declare Vrep10 char(17);
       declare Vrep11 char(17);
       declare Vrep12 char(17);
       declare Vcodobs char(5);
       declare Vobs char(30);
       declare Vabono char(2);
       declare Vhoras char(5);
       declare Vfaltas char(5);
       declare Vhorario char(5);
       declare Voldhorario char(5);
       declare Vdescricaohorario char(50);
       declare Vproxdia char(5);
       declare Vabreviatura char(2);
       declare Vanulahorasferiado char(2);
       declare Vextrasautorizadas char(5);
       declare Vdiabanco char(2);
       declare Vqtd_bh char(5);
       declare Vqtd_bhdeb char(5);
       declare Vignorabatidasentre char(2);
       declare Vccusttrab char(3);
       declare EOFIM int default 0;
       declare Vidponto int;
       declare Vmesmodia int;
       declare Vcontrolaloop char(2);
       declare TMPmatricula char(20);
       declare TMPdia date;
       declare TMPhorabatida char(5);
       declare TMPccusttrab char(3);
       declare TMPidmotivo int;
       declare TMPrep char(17);
       declare TMPcontrole char(2);
       declare Vccusttrabpo char(3);
       declare Vccusttrabob char(3);
       declare Vdaux date;
       declare Vbhdomingo int;
       declare Vbhsegunda int;
       declare Vbhterca int;
       declare Vbhquarta int ;
       declare Vbhquinta int ;
       declare Vbhsexta int;
       declare Vbhsabado int;
       declare Tpontos cursor for select distinct matricula, dia, horabatida, ccusttrab, idmotivo, rep, controle from pontos where dia between Pdataini and Pdatafim and matricula = Pmatricula order by dia, horabatida;
       DECLARE CONTINUE HANDLER FOR NOT FOUND SET EOFIM = TRUE;
       CREATE TABLE IF NOT EXISTS tbmanuttemp
         (
            login char(20),
            data date,
            matricula char(20),
            diasemana char(10),
            ponto1 char(5),
            ponto2 char(5),
            ponto3 char(5),
            ponto4 char(5),
            ponto5 char(5),
            ponto6 char(5),
            ponto7 char(5),
            ponto8 char(5),
            ponto9 char(5),
            ponto10 char(5),
            ponto11 char(5),
            ponto12 char(5),
            pontoanterior1 char(5),
            pontoanterior2 char(5),
            pontoanterior3 char(5),
            pontoanterior4 char(5),
            pontoanterior5 char(5),
            pontoanterior6 char(5),
            pontoanterior7 char(5),
            pontoanterior8 char(5),
            pontoanterior9 char(5),
            pontoanterior10 char(5),
            pontoanterior11 char(5),
            pontoanterior12 char(5),
            motivo1 integer,
            motivo2 integer,
            motivo3 integer,
            motivo4 integer,
            motivo5 integer,
            motivo6 integer,
            motivo7 integer,
            motivo8 integer,
            motivo9 integer,
            motivo10 integer,
            motivo11 integer,
            motivo12 integer,
            altera1 char(1),
            altera2 char(1),
            altera3 char(1),
            altera4 char(1),
            altera5 char(1),
            altera6 char(1),
            altera7 char(1),
            altera8 char(1),
            altera9 char(1),
            altera10 char(1),
            altera11 char(1),
            altera12 char(1),
            alteraanterior1 char(1),
            alteraanterior2 char(1),
            alteraanterior3 char(1),
            alteraanterior4 char(1),
            alteraanterior5 char(1),
            alteraanterior6 char(1),
            alteraanterior7 char(1),
            alteraanterior8 char(1),
            alteraanterior9 char(1),
            alteraanterior10 char(1),
            alteraanterior11 char(1),
            alteraanterior12 char(1),
            rep1 char(17),
            rep2 char(17),
            rep3 char(17),
            rep4 char(17),
            rep5 char(17),
            rep6 char(17),
            rep7 char(17),
            rep8 char(17),
            rep9 char(17),
            rep10 char(17),
            rep11 char(17),
            rep12 char(17),
            codobs char(5),
            obs char(30),
            abono char(1),
            horas char(5),
            faltas char(5),
            horario char(5),
            oldhorario char(5),
            descricaohorario char(50),
            proxdia char(5),
            abreviatura char(2),
            anulahorasferiado char(1),
            extrasautorizadas char(5),
            diabanco char(1),
            qtd_bh char(5),
            qtd_bhdeb char(5),
            ignorabatidasentre char(1),
            ccusttrab char(3)
       );
       DELETE FROM tbmanuttemp WHERE login = plogin and matricula = Pmatricula;
       select bhdomingo,bhsegunda,bhterca,bhquarta,bhquinta,bhsexta,bhsabado from arquivo 
             inner join parametr on parametr.codigo=arquivo.parametro where des_docto=Pmatricula into Vbhdomingo,Vbhsegunda,Vbhterca,Vbhquarta,Vbhquinta,Vbhsexta,Vbhsabado;
       set TMPdia = '0000-00-00';
       open Tpontos;
       fetch Tpontos into TMPmatricula, TMPdia, TMPhorabatida, TMPccusttrab, TMPidmotivo, TMPrep, TMPcontrole;
       set Vdaux = Pdataini;
       while (Pdataini <= Pdatafim) do
          set Vidponto = 1;
          set Vponto1 = "";
          set Vponto2 = "";
          set Vponto3 = "";
          set Vponto4 = "";
          set Vponto5 = "";
          set Vponto6 = "";
          set Vponto7 = "";
          set Vponto8 = "";
          set Vponto9 = "";
          set Vponto10 = "";
          set Vponto11 = "";
          set Vponto12 = "";
          set Vpontoanterior1 = "";
          set Vpontoanterior2 = "";
          set Vpontoanterior3 = "";
          set Vpontoanterior4 = "";
          set Vpontoanterior5 = "";
          set Vpontoanterior6 = "";
          set Vpontoanterior7 = "";
          set Vpontoanterior8 = "";
          set Vpontoanterior9 = "";
          set Vpontoanterior10 = "";
          set Vpontoanterior11 = "";
          set Vpontoanterior12 = "";
          set Vmotivo1 = 0;
          set Vmotivo2 = 0;
          set Vmotivo3 = 0;
          set Vmotivo4 = 0;
          set Vmotivo5 = 0;
          set Vmotivo6 = 0;
          set Vmotivo7 = 0;
          set Vmotivo8 = 0;
          set Vmotivo9 = 0;
          set Vmotivo10 = 0;
          set Vmotivo11 = 0;
          set Vmotivo12 = 0;
          set Valtera1 = "";
          set Valtera2 = "";
          set Valtera3 = "";
          set Valtera4 = "";
          set Valtera5 = "";
          set Valtera6 = "";
          set Valtera7 = "";
          set Valtera8 = "";
          set Valtera9 = "";
          set Valtera10 = "";
          set Valtera11 = "";
          set Valtera12 = "";
          set Valteraanterior1 = "";
          set Valteraanterior2 = "";
          set Valteraanterior3 = "";
          set Valteraanterior4 = "";
          set Valteraanterior5 = "";
          set Valteraanterior6 = "";
          set Valteraanterior7 = "";
          set Valteraanterior8 = "";
          set Valteraanterior9 = "";
          set Valteraanterior10 = "";
          set Valteraanterior11 = "";
          set Valteraanterior12 = "";
          set Vrep1 = "";
          set Vrep2 = "";
          set Vrep3 = "";
          set Vrep4 = "";
          set Vrep5 = "";
          set Vrep6 = "";
          set Vrep7 = "";
          set Vrep8 = "";
          set Vrep9 = "";
          set Vrep10 = "";
          set Vrep11 = "";
          set Vrep12 = "";
          set Vmesmodia = true;
          set Vcontrolaloop = '0';
          set Vccusttrabpo ='';
          set Vccusttrabob='';
          while (Vidponto <= 12) and (TMPdia = Pdataini) and (not EOFIM) do
             if (TMPhorabatida <> '') then
                case Vidponto
                  when 1 then begin
                                 set Vrep1           = TMPrep;
                                 set Vponto1         = TMPhorabatida;
                                 set Vpontoanterior1 = TMPhorabatida;
                                 set Vmotivo1        = TMPidmotivo;
                                 set Valtera1        = TMPcontrole;
                              end;
                  when 2 then begin
                                 set Vrep2           = TMPrep;
                                 set Vponto2         = TMPhorabatida;
                                 set Vpontoanterior2 = TMPhorabatida;
                                 set Vmotivo2        = TMPidmotivo;
                                 set Valtera2        = TMPcontrole;
                              end;
                  when 3 then begin
                                 set Vrep3           = TMPrep;
                                 set Vponto3         = TMPhorabatida;
                                 set Vpontoanterior3 = TMPhorabatida;
                                 set Vmotivo3        = TMPidmotivo;
                                 set Valtera3        = TMPcontrole;
                              end;
                  when 4 then begin
                                 set Vrep4           = TMPrep;
                                 set Vponto4         = TMPhorabatida;
                                 set Vpontoanterior4 = TMPhorabatida;
                                 set Vmotivo4        = TMPidmotivo;
                                 set Valtera4        = TMPcontrole;
                              end;
                  when 5 then begin
                                 set Vrep5           = TMPrep;
                                 set Vponto5         = TMPhorabatida;
                                 set Vpontoanterior5 = TMPhorabatida;
                                 set Vmotivo5        = TMPidmotivo;
                                 set Valtera5        = TMPcontrole;
                              end;
                  when 6 then begin
                                 set Vrep6           = TMPrep;
                                 set Vponto6         = TMPhorabatida;
                                 set Vpontoanterior6 = TMPhorabatida;
                                 set Vmotivo6        = TMPidmotivo;
                                 set Valtera6        = TMPcontrole;
                              end;
                  when 7 then begin
                                 set Vrep7           = TMPrep;
                                 set Vponto7         = TMPhorabatida;
                                 set Vpontoanterior7 = TMPhorabatida;
                                 set Vmotivo7        = TMPidmotivo;
                                 set Valtera7        = TMPcontrole;
                              end;
                  when 8 then begin
                                 set Vrep8           = TMPrep;
                                 set Vponto8         = TMPhorabatida;
                                 set Vpontoanterior8 = TMPhorabatida;
                                 set Vmotivo8        = TMPidmotivo;
                                 set Valtera8        = TMPcontrole;
                              end;
                  when 9 then begin
                                 set Vrep9           = TMPrep;
                                 set Vponto9         = TMPhorabatida;
                                 set Vpontoanterior9 = TMPhorabatida;
                                 set Vmotivo9        = TMPidmotivo;
                                 set Valtera9        = TMPcontrole;
                              end;
                  when 10 then begin
                                 set Vrep10           = TMPrep;
                                 set Vponto10         = TMPhorabatida;
                                 set Vpontoanterior10 = TMPhorabatida;
                                 set Vmotivo10        = TMPidmotivo;
                                 set Valtera10        = TMPcontrole;
                              end;
                  when 11 then begin
                                 set Vrep11           = TMPrep;
                                 set Vponto11         = TMPhorabatida;
                                 set Vpontoanterior11 = TMPhorabatida;
                                 set Vmotivo11        = TMPidmotivo;
                                 set Valtera11        = TMPcontrole;
                              end;
                  when 12 then begin
                                 set Vrep12           = TMPrep;
                                 set Vponto12         = TMPhorabatida;
                                 set Vpontoanterior12 = TMPhorabatida;
                                 set Vmotivo12        = TMPidmotivo;
                                 set Valtera12        = TMPcontrole;
                              end;
                end case;
             end if;
             set Vidponto = Vidponto + 1;
             fetch Tpontos into TMPmatricula, TMPdia, TMPhorabatida, TMPccusttrab, TMPidmotivo, TMPrep, TMPcontrole;
          end while;
          set Vcodobs= '';
          set Vobs = '';
          set Vabono = '';
          set Vhoras = '';
          set Vfaltas = '';
          set Vhorario = '';
          set Voldhorario = '';
          set Vdescricaohorario = '';
          set Vproxdia = '';
          set Vabreviatura = '';
          set Vanulahorasferiado = '';
          set Vextrasautorizadas = '';
          set Vdiabanco = '';
          set Vqtd_bh = '';
          set Vqtd_bhdeb = '';
          set Vignorabatidasentre = '';
          set Vccusttrab = '';
          set Valteraanterior1 = Valtera1;
          set Valteraanterior2 = Valtera2;
          set Valteraanterior3 = Valtera3;
          set Valteraanterior4 = Valtera4;
          set Valteraanterior5 = Valtera5;
          set Valteraanterior6 = Valtera6;
          set Valteraanterior7 = Valtera7;
          set Valteraanterior8 = Valtera8;
          set Valteraanterior9 = Valtera9;
          set Valteraanterior10 = Valtera10;
          set Valteraanterior11 = Valtera11;
          set Valteraanterior12 = Valtera12;
          case DATE_FORMAT(Pdataini, '%w')
               when 0 then set Vdiasemana = 'Dom';
               when 1 then set Vdiasemana = 'Seg';
               when 2 then set Vdiasemana = 'Ter';
               when 3 then set Vdiasemana = 'Qua';
               when 4 then set Vdiasemana = 'Qui';
               when 5 then set Vdiasemana = 'Sex';
               when 6 then set Vdiasemana = 'Sab';
          end case;
          
          insert into tbmanuttemp values
          (
            Plogin,
            Pdataini,
            Pmatricula,
            Vdiasemana,
            Vponto1,
            Vponto2,
            Vponto3,
            Vponto4,
            Vponto5,
            Vponto6,
            Vponto7,
            Vponto8,
            Vponto9,
            Vponto10,
            Vponto11,
            Vponto12,
            Vpontoanterior1,
            Vpontoanterior2,
            Vpontoanterior3,
            Vpontoanterior4,
            Vpontoanterior5,
            Vpontoanterior6,
            Vpontoanterior7,
            Vpontoanterior8,
            Vpontoanterior9,
            Vpontoanterior10,
            Vpontoanterior11,
            Vpontoanterior12,
            Vmotivo1,
            Vmotivo2,
            Vmotivo3,
            Vmotivo4,
            Vmotivo5,
            Vmotivo6,
            Vmotivo7,
            Vmotivo8,
            Vmotivo9,
            Vmotivo10,
            Vmotivo11,
            Vmotivo12,
            Valtera1,
            Valtera2,
            Valtera3,
            Valtera4,
            Valtera5,
            Valtera6,
            Valtera7,
            Valtera8,
            Valtera9,
            Valtera10,
            Valtera11,
            Valtera12,
            Valteraanterior1,
            Valteraanterior2,
            Valteraanterior3,
            Valteraanterior4,
            Valteraanterior5,
            Valteraanterior6,
            Valteraanterior7,
            Valteraanterior8,
            Valteraanterior9,
            Valteraanterior10,
            Valteraanterior11,
            Valteraanterior12,
            Vrep1,
            Vrep2,
            Vrep3,
            Vrep4,
            Vrep5,
            Vrep6,
            Vrep7,
            Vrep8,
            Vrep9,
            Vrep10,
            Vrep11,
            Vrep12,
            Vcodobs,
            Vobs,
            Vabono,
            Vhoras,
            Vfaltas,
            Vhorario,
            Voldhorario,
            Vdescricaohorario,
            Vproxdia,
            Vabreviatura,
            Vanulahorasferiado,
            Vextrasautorizadas,
            Vdiabanco,
            Vqtd_bh,
            Vqtd_bhdeb,
            Vignorabatidasentre,
            Vccusttrab);
          Set Pdataini = adddate(Pdataini,1);
       end while;
       set Pdataini = Vdaux;
       while (Pdataini <= Pdatafim) do
             set Vqtd_bh = null;
             set Vqtd_bhdeb = null;
             set Vproxdia = null;
             set Vdiabanco = '';
             set Vextrasautorizadas = null;
             set Vcodobs = null;
             set Vobs = '';
             set Vabreviatura = null;
             set Vabono = null;
             set Vhoras = null;
             set Vfaltas = null;
             set Vanulahorasferiado = null;
             set Vccusttrab = null;
             set Vhorario = '';
             set Voldhorario = null;
             set Vdescricaohorario = null;
             set Vignorabatidasentre = null;
             select a.qtd_horas, a.qtd_horasdeb, b.qtd_horas as qtd_horasproxdia, c.diabanco, d.extra from arquivo
                       left join (select matricula, qtd_bh.qtd_horas, qtd_bh.qtd_horasdeb from qtd_bh where matricula = Pmatricula and data = Pdataini) a on a.matricula = arquivo.des_docto
                       left join (select matricula, qtd_horas from qtd_fim where matricula = Pmatricula and data = Pdataini ) b on b.matricula = arquivo.des_docto
                       left join (select matricula, diabanco from diabanco where matricula = Pmatricula and data = Pdataini) c on c.matricula = arquivo.des_docto
                       left join (select matricula, extra from extrauto where matricula = Pmatricula and data = Pdataini) d on d.matricula = arquivo.des_docto 
                       where arquivo.des_docto = Pmatricula
                 into Vqtd_bh,  Vqtd_bhdeb, Vproxdia, Vdiabanco, Vextrasautorizadas;
             select codocorrencia, obs, abreviatura, abona, horas, faltas, anulahorasferiado, ccusttrab from obss
                where matricula = Pmatricula and dia = Pdataini into Vcodobs, Vobs, Vabreviatura, Vabono, Vhoras, Vfaltas, Vanulahorasferiado, Vccusttrab;
             select horario from turnos where matricula = Pmatricula and data = Pdataini into Vhorario;
             if (Vhorario = '') then
               select faixahorario from arquivo inner join horatrab on arquivo.faixahorario = horatrab.codigo where arquivo.des_docto = Pmatricula into Vhorario;
             end if;
             set Voldhorario = Vhorario;
             select descricao from horatrab where codigo = Vhorario into Vdescricaohorario;
             select case when ignora='0' then 'SIM' ELSE 'NAO' END from ignorabt where matricula = Pmatricula and data = Pdataini into Vignorabatidasentre;
             if (Vobs <> '') then
                if (Vabono = '0') then set Vabono = 'S'; else set Vabono = 'N'; end if;
                if (Vanulahorasferiado = '0') then set Vanulahorasferiado = 'S'; else set Vanulahorasferiado = 'N'; end if;
             end if;
         
             if (Vdiabanco='') or (Vdiabanco is null) then
                case DATE_FORMAT(Pdataini, '%w')
                  when 0 then set Vdiabanco = Vbhdomingo;
                  when 1 then set Vdiabanco = Vbhsegunda;
                  when 2 then set Vdiabanco = Vbhterca;
                  when 3 then set Vdiabanco = Vbhquarta;
                  when 4 then set Vdiabanco = Vbhquinta;
                  when 5 then set Vdiabanco = Vbhsexta;
                  when 6 then set Vdiabanco = Vbhsabado;
                end case;
              
           
            end if;
            if (Vdiabanco = '0' ) then set Vdiabanco = 'S'; else set Vdiabanco = 'N'; end if;
           
        
               
             update tbmanuttemp set
                       qtd_bh=Vqtd_bh,
                       qtd_bhdeb=Vqtd_bhdeb,
                       proxdia=Vproxdia,
                       diabanco=Vdiabanco,
                       extrasautorizadas=Vextrasautorizadas,
                       codobs = Vcodobs,
                       obs = Vobs,
                       abreviatura = Vabreviatura,
                       abono = Vabono,
                       horas = Vhoras,
                       faltas = Vfaltas,
                       anulahorasferiado = Vanulahorasferiado,
                       ccusttrab = Vccusttrab,
                       horario=Vhorario,
                       oldhorario=Voldhorario,
                       descricaohorario=Vdescricaohorario,
                       ignorabatidasentre=Vignorabatidasentre
                    where data = Pdataini and matricula = Pmatricula and login = Plogin;
             Set Pdataini = adddate(Pdataini,1);
       end while;
END$$

DELIMITER ;
