Planilla
Publicado por Keren (3 intervenciones) el 19/06/2020 20:21:54
Hola necesito ayuda
Tengo un procedimiento almacenado con tres tablas una de empleado, bono y pago. Necesito sacar en un cursor las horas extra de las horas laborables (3horas) pero en ves de contar que salga 9-10-11 como horas extras. Ademas de cacular el bono empleado se beneficiará con un programa de bonificación que tiene fecha en la
que inicia y una fecha en la que termina. Por ejemplo: “Bonificación de ventas del
1 de junio de 2020 al 5 de febrero de 2020”. Una bonificación puede aplicarse uno o varios días de la semana. Ejemplo “Bonificación válida solo jueves, viernes y sábado”. Una bonificación dependerá de la cantidad vendida por el empleado y puede contener más de una condición. Por ejemplo: Simple (Ventas mayores de 1000 tendrá un bono de 10), compuesta (Ventas mayores de 1000 tendrá un bono de 10; Ventas mayores de 2000 tendrá un bono de 20, Ventas mayores a 3000 tendrá un bono de 30 balboas.
alter procedure calcularEmpleado_sp (
@datos xml
)
as
--procesar el xlm a una tabla
DECLARE @TablaEmpleado AS TABLE
(
idEmpleado int,
nombre VARCHAR (30),
fecha date,
horaEntrada int,
horaSalida int,
venta decimal
)
DECLARE @TablaComision AS TABLE
(
codigoBono INT,
Bono_Inicio DATE,
Bono_Final DATE,
Comision INT
)
DECLARE @TablaPago AS TABLE
(
codigoPago INT,
hora_trabajada int ,
monto_hora_trabajada DECIMAL,
horaExtra1 INT,
horaExtra2 INT ,
monto_horaExtra1 DECIMAL,
monto_horaExtra2 DECIMAL
)
INSERT INTO @TablaEmpleado
SELECT
T.c.value('(idEmpleado/text())[1]', 'int') AS idEmpleado,
T.c.value('(nombre/text())[1]', 'varchar (30)') AS nombre,
T.c.value('(fecha/text())[1]', 'date') AS fecha,
T.c.value('(horaEntrada/text())[1]', 'int') AS horaEntrada,
T.c.value('(horaSalida/text())[1]', 'int') AS horaSalida,
T.c.value('(venta/text())[1]', 'decimal') AS venta
FROM @datos.nodes('/ArrayOfEmpleado/Empleado') T(c)
DECLARE @idEmpleado int,
@nombre VARCHAR (30),
@fecha DATE,
@horaEntrada int,
@horaSalida int,
@venta INT
DECLARE curEmpleados CURSOR FOR
SELECT * FROM @TablaEmpleado
OPEN curEmpleados
FETCH curEmpleados INTO @idEmpleado,@nombre,@fecha,@horaEntrada,@horaSalida,@venta
WHILE @@FETCH_STATUS = 0 BEGIN
select idEmpleado,nombre, fecha, horaEntrada, horaSalida, venta, hora_trabajada = @horaSalida-@horaEntrada,
monto_hora_trabajada=(@horaSalida-@horaEntrada)*3.00, DATEADD(SS,3,@horaSalida) AS horaExtra1,
SUM((240000/30)*5/40)*0.50 AS Recargo_Domingo,
SUM((240000/30)*5/40)*0.75 AS DiasFeriados
FROM @TablaEmpleado
GROUP BY idEmpleado,nombre, fecha, horaEntrada, horaSalida,venta
fetch curEmpleados into @idEmpleado,@nombre,@fecha,@horaEntrada,@horaSalida, @venta
END
close curEmpleados
deallocate curEmpleados
Tengo un procedimiento almacenado con tres tablas una de empleado, bono y pago. Necesito sacar en un cursor las horas extra de las horas laborables (3horas) pero en ves de contar que salga 9-10-11 como horas extras. Ademas de cacular el bono empleado se beneficiará con un programa de bonificación que tiene fecha en la
que inicia y una fecha en la que termina. Por ejemplo: “Bonificación de ventas del
1 de junio de 2020 al 5 de febrero de 2020”. Una bonificación puede aplicarse uno o varios días de la semana. Ejemplo “Bonificación válida solo jueves, viernes y sábado”. Una bonificación dependerá de la cantidad vendida por el empleado y puede contener más de una condición. Por ejemplo: Simple (Ventas mayores de 1000 tendrá un bono de 10), compuesta (Ventas mayores de 1000 tendrá un bono de 10; Ventas mayores de 2000 tendrá un bono de 20, Ventas mayores a 3000 tendrá un bono de 30 balboas.
alter procedure calcularEmpleado_sp (
@datos xml
)
as
--procesar el xlm a una tabla
DECLARE @TablaEmpleado AS TABLE
(
idEmpleado int,
nombre VARCHAR (30),
fecha date,
horaEntrada int,
horaSalida int,
venta decimal
)
DECLARE @TablaComision AS TABLE
(
codigoBono INT,
Bono_Inicio DATE,
Bono_Final DATE,
Comision INT
)
DECLARE @TablaPago AS TABLE
(
codigoPago INT,
hora_trabajada int ,
monto_hora_trabajada DECIMAL,
horaExtra1 INT,
horaExtra2 INT ,
monto_horaExtra1 DECIMAL,
monto_horaExtra2 DECIMAL
)
INSERT INTO @TablaEmpleado
SELECT
T.c.value('(idEmpleado/text())[1]', 'int') AS idEmpleado,
T.c.value('(nombre/text())[1]', 'varchar (30)') AS nombre,
T.c.value('(fecha/text())[1]', 'date') AS fecha,
T.c.value('(horaEntrada/text())[1]', 'int') AS horaEntrada,
T.c.value('(horaSalida/text())[1]', 'int') AS horaSalida,
T.c.value('(venta/text())[1]', 'decimal') AS venta
FROM @datos.nodes('/ArrayOfEmpleado/Empleado') T(c)
DECLARE @idEmpleado int,
@nombre VARCHAR (30),
@fecha DATE,
@horaEntrada int,
@horaSalida int,
@venta INT
DECLARE curEmpleados CURSOR FOR
SELECT * FROM @TablaEmpleado
OPEN curEmpleados
FETCH curEmpleados INTO @idEmpleado,@nombre,@fecha,@horaEntrada,@horaSalida,@venta
WHILE @@FETCH_STATUS = 0 BEGIN
select idEmpleado,nombre, fecha, horaEntrada, horaSalida, venta, hora_trabajada = @horaSalida-@horaEntrada,
monto_hora_trabajada=(@horaSalida-@horaEntrada)*3.00, DATEADD(SS,3,@horaSalida) AS horaExtra1,
SUM((240000/30)*5/40)*0.50 AS Recargo_Domingo,
SUM((240000/30)*5/40)*0.75 AS DiasFeriados
FROM @TablaEmpleado
GROUP BY idEmpleado,nombre, fecha, horaEntrada, horaSalida,venta
fetch curEmpleados into @idEmpleado,@nombre,@fecha,@horaEntrada,@horaSalida, @venta
END
close curEmpleados
deallocate curEmpleados
Valora esta pregunta


0