USE [Facial] GO /****** Object: Trigger [dbo].[regentradas_insert] Script Date: 4/1/2023 9:33:47 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[regentradas_insert] ON [dbo].[CHECKINOUT] AFTER INSERT,UPDATE AS BEGIN DECLARE @emp INT,@nombre varchar(100),@htrabajadas DATETIME,@hextras_35 decimal(12,2),@hextras_100 decimal(12,2),@numnomi INT,@fecha DATETIME,@tipoReg VARCHAR(1),@tipoemp VARCHAR(1), @h_entrada time(7),@h_salida time(7),@fechaferiada DATE,@dia int,@mes int,@chfechaferiada VARCHAR(10), @fechaEntrada DATETIME,@departamento INT,@puesto INT,@nivel INT, @fechaInicioPeriodo date, @fechaFinPeriodo date SET NOCOUNT ON; SELECT @emp=a.num_emp,@nombre=RTRIM(a.nom1_emp)+' '+a.apell1_emp,@fecha=b.CHECKTIME,@tipoReg=b.CHECKTYPE,@tipoemp=a.nomina ,@departamento=a.departamento,@puesto=a.cod_puesto,@nivel=a.nivel_emp from marmotech.dbo.adtb00003 a,inserted b where a.cuenta_out = b.USERID SELECT @numnomi=MIN(a.num_nomi) FROM marmotech.dbo.notb00010 a WHERE a.fecha_cierre_nomina > @fecha and tipo_emp = @tipoemp IF EXISTS(SELECT b.num_emp FROM marmotech.dbo.adtb00054 a,marmotech.dbo.adtb00055 b WHERE a.id_hora = b.id_horario and b.num_emp=@emp) BEGIN IF @tipoReg ='O' BEGIN SELECT @mes=month(@fecha) SELECT @dia=day(@fecha) /* CALCULO DIAS FERIADOS */ IF EXISTS(SELECT a.dias FROM marmotech.dbo.notb00012 a WHERE a.cod_mes = @mes and a.dias = @dia) BEGIN SELECT @fechaferiada=@fecha END SELECT 'FECHA FERIADA '+CAST(@fechaferiada AS VARCHAR) /*============================================================== */ /*---------------------------------------------------------------------------- */ /* ACTUALIZA LA TABLA NOVEDADES DE NOMINA */ /* LOS CODIGOS DE MOVIMIENTOS 2 ES PARA HORAS EXTRAS AL 35% Y EL 3 PARA LAS HORAS EXTRAS AL 1005 */ IF @fechaferiada IS NULL /* SI ES DIA NO FERIADO */ BEGIN SELECT @h_entrada=a.entrada,@h_salida=a.salida FROM marmotech.dbo.adtb00054 a,marmotech.dbo.adtb00055 b WHERE a.id_hora = b.id_horario and b.num_emp=@emp SELECT ' H SALIDA '+CAST(@h_salida AS CHAR)+' HORA 35% '+CAST(convert(time(7),@fecha) AS CHAR) /*------------------------------------------------------------------------------------------------------------------------------------------ */ IF @h_salida < convert(time(7),@fecha) BEGIN SELECT @fechaEntrada=convert(char(10),a.checktime,101)+' '+ convert(char(5),@h_salida) from inserted a SELECT @hextras_35=DATEDIFF(hour,@fechaEntrada,a.CHECKTIME ) from inserted a IF EXISTS(SELECT TOP 1 a.num_emp FROM marmotech.dbo.notb00007 a WHERE a.num_nomi = @numnomi AND a.num_Emp = @emp AND a.cod_mov = 2) BEGIN UPDATE marmotech.dbo.notb00007 set cantidad = cantidad + @hextras_35,us_mod = 'TRIGGER',fech_mod = getdate() WHERE num_nomi = @numnomi AND num_emp = @emp and cod_mov = 2 END ELSE IF @hextras_35 > 0 BEGIN INSERT INTO marmotech.dbo.notb00007 (num_nomi,tipo_emp,cod_mov,num_emp,departamento,cod_puesto,nivel_emp,cantidad,valor,us_crea,fech_crea) VALUES (@numnomi,@tipoemp,2,@emp,@departamento,@puesto,@nivel,@hextras_35,0,'TRIGGER',getdate()) END END END /* TERMINA NO DIA FERIADO */ /*----------------------------------------------------------------------------------------------------------------------------------------------------- */ ELSE BEGIN /* DIA FERIADO */ SELECT @h_entrada=a.entrada,@h_salida=a.salida FROM marmotech.dbo.adtb00054 a,marmotech.dbo.adtb00055 b WHERE a.id_hora = b.id_horario and b.num_emp=@emp IF @h_salida < convert(time(7),@fecha) BEGIN SELECT @fechaEntrada=convert(char(10),a.checktime,101)+' '+ convert(char(5),@h_salida) from inserted a SELECT @hextras_100=DATEDIFF(hour,@fechaEntrada,a.CHECKTIME ) from inserted a SELECT 'H SALIDA '+CAST(@h_salida AS VARCHAR)+' TRAB H 100 '+CAST(convert(time(7),@fecha) AS CHAR)+' EMP '+cast(@emp as varchar)+' '+CAST(@numnomi AS VARCHAR) IF EXISTS(SELECT TOP 1 a.num_emp FROM marmotech.dbo.notb00007 a WHERE a.num_nomi = @numnomi AND a.num_Emp = @emp AND a.cod_mov = 3) BEGIN UPDATE marmotech.dbo.notb00007 set cantidad = cantidad + @hextras_100,us_mod = 'TRIGGER',fech_mod = getdate() WHERE num_nomi = @numnomi AND num_emp = @emp and cod_mov = 3 END ELSE IF @hextras_100 > 0 BEGIN INSERT INTO marmotech.dbo.notb00007 (num_nomi,tipo_emp,cod_mov,num_emp,departamento,cod_puesto,nivel_emp,cantidad,valor,us_crea,fech_crea) VALUES (@numnomi,@tipoemp,3,@emp,@departamento,@puesto,@nivel,@hextras_100,0,'TRIGGER',getdate()) END END /* TERMINA DIA FERIADO */ END /* TERMINA TIPO REGISTRO */ END /* SI TIENE HORARIO */ END /* INSERTA LA DATA EN LA BASE DE DATOS DEL SITEMA DE NOMINAS */ IF NOT EXISTS (SELECT TOP 1 a.LOGID FROM marmotech.dbo.CHECKINOUT a,inserted b where a.LOGID = b.LOGID) BEGIN INSERT INTO marmotech.[dbo].[CHECKINOUT] ([USERID] ,[CHECKTIME] ,[CHECKTYPE] ,[VERIFYCODE] ,[SENSORID] ,[LOGID] ,[MachineId] ,[UserExtFmt] ,[WorkCode] ,[Memoinfo] ,[sn] ,[num_emp] ,[nombre_empleado] ,h_trabajadas ,h_extras35 ,h_extras100 ,num_nomi ) SELECT USERID ,CHECKTIME ,CHECKTYPE ,VERIFYCODE ,SENSORID ,LOGID ,MachineId ,UserExtFmt ,WorkCode ,Memoinfo ,sn ,@emp ,@nombre ,@htrabajadas ,@hextras_35 ,@hextras_100 ,@numnomi FROM inserted END ELSE BEGIN WITH checke as (select * from marmotech.dbo.checkinout) UPDATE X SET [USERID] = x1.USERID ,[CHECKTIME] = x1.CHECKTIME ,[CHECKTYPE] = x1.CHECKTYPE ,[VERIFYCODE] = x1.VERIFYCODE ,[SENSORID] = x1.SENSORID ,[MachineId] = x1.MachineId ,[UserExtFmt] = x1.UserExtFmt ,[WorkCode] = x1.WorkCode ,[Memoinfo] = x1.Memoinfo ,[sn] = x1.sn ,num_emp = @emp ,nombre_empleado = @nombre from checke as x INNER JOIN checkinout x1 ON x1.logid = x.logid END END