Carlos Chaves:
Este día se procedió a ver que se podia sacar de los pendientes anteriores, pero debido al tiempo restante, se prefirió unir el proyecto totalmente, debuggear lo que se podia y finalizar el recuento de la documentación.
Se unió el proyecto de manera satisfactoria, aún con unos bugs. Pero este realizaba lo más importante y mantenía la Base y el portal en buen estado.
Se procedió a sacar las horas totales de trabajo para establecerlas en esta entrada final.
En este proyecto se realizaron varios aspectos que ya en los dos proyectos anteriores se pudieron haber concluido en cuanto a la calificación en el curso. Pero, este tercer proyecto estuvo más sólido en general. Este tenía alguna que otra contradicción tanto en la misma especificación como en ciertas aclaraciones con el profesor.
Me parece que en general la rúbrica de este proyecto estuvo mejor distribuida, analizada y discutida.
Para los consejos, revisar un poco más a fondo la redacción de la especificación y realizar diferentes enfoques del uso de las Bases de Datos.
Horas estimadas de trabajo: 3h
Horas totales de trabajo invertidas en el proyecto
- Carlos: 20h aproximadas
- Daniel: 5h,30m aproximado
martes, 27 de noviembre de 2018
lunes, 26 de noviembre de 2018
Simulación Masiva
Carlos Chaves:
Se arreglaron varios bugs como de referencias, datos que no se recibían en orden y otros. Pero aún se tenía la mala suerte con topar de vez en cuando que la manera iterativa tenía un problema con las tablas movimiento y planillas.
Se inició la simulación de manera masiva en base a la simulación anterior (iterativa). Se borró gran parte del código debido a los whiles que hacían uso del método iterativo y se agregaron más condicionales junto a más sets y updates.
Se logró iniciar de manera satisfactoria, pero este se llegó a complicar. No se lograba encontrar varias maneras para solucionar varios problemas de adaptación de un método a otro.
Pendientes: El pequeño bug de la simulación iterativa y terminar la simulación masiva.
Horas estimadas de trabajo: 4h
Se arreglaron varios bugs como de referencias, datos que no se recibían en orden y otros. Pero aún se tenía la mala suerte con topar de vez en cuando que la manera iterativa tenía un problema con las tablas movimiento y planillas.
Se inició la simulación de manera masiva en base a la simulación anterior (iterativa). Se borró gran parte del código debido a los whiles que hacían uso del método iterativo y se agregaron más condicionales junto a más sets y updates.
Se logró iniciar de manera satisfactoria, pero este se llegó a complicar. No se lograba encontrar varias maneras para solucionar varios problemas de adaptación de un método a otro.
Pendientes: El pequeño bug de la simulación iterativa y terminar la simulación masiva.
Horas estimadas de trabajo: 4h
domingo, 25 de noviembre de 2018
Simulación Iterativa (Terminada)
Carlos Chaves:
Luego del concierto, se procedió a reanudar la simulación de manera iterativa. Se había dejado como pendientes los movimientos y calculos iterativos dentro de la simulación.
Se hicieron varios calculos y to-do lists de lo que hacía falta. De esta manera se podía abarcar ciertos problemas antes de que se presentaran.
Finalmente, la simulación estaba terminada, pero con un pequeño problema que surgía de vez en cuando por las referencias de las tablas movimientos, planillas semanal y planilla mensual.
Pendientes: Simulación Masiva y arreglar bugs.
Horas estimadas de trabajo: 3h
Luego del concierto, se procedió a reanudar la simulación de manera iterativa. Se había dejado como pendientes los movimientos y calculos iterativos dentro de la simulación.
Se hicieron varios calculos y to-do lists de lo que hacía falta. De esta manera se podía abarcar ciertos problemas antes de que se presentaran.
Finalmente, la simulación estaba terminada, pero con un pequeño problema que surgía de vez en cuando por las referencias de las tablas movimientos, planillas semanal y planilla mensual.
Pendientes: Simulación Masiva y arreglar bugs.
Horas estimadas de trabajo: 3h
create procedure SimulacionIs
as begin
DECLARE @XML XML
SET @XML = (SELECT * FROM OPENROWSET(BULK '/home/datos/FechaOperacion V2.xml', SINGLE_BLOB) AS BasicData)
--TODO: Agregar numeros que estan "quemados" en el codigo
-- Variables
DECLARE @fecha_inicio date
DECLARE @fecha_fin date
DECLARE @low1 int
DECLARE @high1 int
--
DECLARE @valorDocId numeric(12)
DECLARE @idPuesto int
DECLARE @idTipoJornada int
DECLARE @idTipoMov int
DECLARE @numeroDeVierneses int
DECLARE @horas int
DECLARE @tiempoNormal int
DECLARE @fecha date
DECLARE @idPlanillaMensual bigint
DECLARE @idPlanillaSemanal bigint
DECLARE @Nombre varchar(20)
DECLARE @sabadoDePlanilla date
DECLARE @viernesDePlanilla date
DECLARE @idTipoDeduccion int
DECLARE @valor int
--SET @Cero = 0
DECLARE @numeroDiaEnSemana int
DECLARE @horaEntrada time
DECLARE @horaSalida time
DECLARE @salarioPorHora money
DECLARE @Feriado int
--DECLARE @QMaxATM1 int
--DECLARE @QMaxManual1 int
--DECLARE @QMaxATM2 int
--DECLARE @QMaxManual2 int
--DECLARE @MultaNegativo money
--DECLARE @MultaMinimo money
--DECLARE @MultaManual money
--DECLARE @MultaATM money
--DECLARE @TasaInteres int
--
---- Tablas Variables
DECLARE @EmpleadoAux TABLE(sec int IDENTITY (1, 1), valorDocId numeric(12), Nombre varchar(50), idPuesto int)
DECLARE @AsistenciaAux TABLE(sec int IDENTITY (1, 1), Fecha date, IdObrero int, IdTipoJornada int, HoraEntrada time, HoraSalida time)
DECLARE @DeduccionAux TABLE(sec int IDENTITY (1, 1), DocId numeric(12), idTipoDeduccion int, Valor money)
DECLARE @Bono TABLE(sec int IDENTITY (1, 1), DocId numeric(12), Monto money)
DECLARE @tabla_fechas TABLE(sec int IDENTITY (1, 1), fecha date)
DECLARE @cierrePlanillaSemAux TABLE(sec int IDENTITY (1, 1), idMensual bigint, idSemanal bigint, monto money, tipo_mov int, fecha date)
DECLARE @cierrePlanillaMenAux TABLE(sec int IDENTITY (1, 1), idMensual bigint, monto money, MES INt, ANNO INt)
DECLARE @IncapacidadAux TABLE(sec int IDENTITY (1, 1), DocId numeric(12), idTipoJornada int)
-- SaldoMinimoCorte money, FechaCorte date, QopManual int, QopAT int)
INSERT @tabla_fechas (fecha)
SELECT CONVERT(VARCHAR(8), Child.value('(@fecha)[1]', 'date'), 3)
FROM @XML.nodes('dataset/FechaOperacion') AS N (Child)
SELECT @fecha_inicio = min(fecha), @fecha_fin = max(fecha) FROM @tabla_fechas
--SET @fechaCorte = DATEADD(M,1, @fecha_inicio)
--Inicio iteracion por fecha
WHILE @fecha_inicio <= @fecha_fin
BEGIN
set @sabadoDePlanilla = DATEADD(DAY, DATEDIFF(DAY, 5, @fecha_inicio) / 7 * 7, 5)
set @viernesDePlanilla = DATEADD(d, 6 - DATEPART(dw, @fecha_inicio), @fecha_inicio)
set @numeroDiaEnSemana = datepart(dw, @fecha_inicio)
/*
Cargar empleados en tabla auxiliar
*/
INSERT @EmpleadoAux (Nombre, valorDocId, idPuesto)
SELECT Child.value('(@nombre)[1]', 'varchar(50)'),
Child.value('(@DocId)[1]', 'numeric(12)'),
Child.value('(@idPuesto)[1]', 'int')
FROM @XML.nodes('dataset/FechaOperacion/NuevoEmpleado') AS N (Child)
WHERE @fecha_inicio = Child.value('../@fecha', 'date')
/*
Cargar empleados en la base de datos
*/
SELECT @low1 = min(sec), @high1 = max(sec) FROM @EmpleadoAux
WHILE @low1 <= @high1
BEGIN
SELECT @valorDocId = C.valorDocId, @Nombre = C.Nombre, @idPuesto = C.idPuesto
FROM @EmpleadoAux C
WHERE C.sec = @low1
INSERT INTO OBRERO (ID, Nombre, ID_PUESTO) VALUES (@valorDocId, @Nombre, @idPuesto)
SET @low1 = @low1 + 1
END
/*
Cargar asistencias en tabla auxiliar
*/
INSERT @AsistenciaAux (Fecha, IdObrero, IdTipoJornada, HoraEntrada, HoraSalida)
SELECT @fecha_inicio,
Child.value('(@DocID)[1]', 'numeric(12)'),
Child.value('(@idTipoJornada)[1]', 'int'),
Child.value('(@HoraEntrada)[1]', 'time'),
Child.value('(@HoraSalida)[1]', 'time')
FROM @XML.nodes('dataset/FechaOperacion/Asistencia') AS N (Child)
WHERE @fecha_inicio = Child.value('../@Fecha', 'date')
/*
Guardar asistencias en base de datos
Actualizar/crear planillas
Se agrega lo ganado y se registra como movimiento
Todo: Agregar ganancia por hora extra o por feriado
*/
SELECT @low1 = min(sec), @high1 = max(sec) FROM @AsistenciaAux
WHILE @low1 <= @high1
BEGIN
SELECT @valorDocId = C.IdObrero,
@idTipoJornada = C.IdTipoJornada,
@horaEntrada = C.HoraEntrada,
@horaSalida = C.HoraSalida
FROM @AsistenciaAux C
WHERE sec = @low1
SELECT @salarioPorHora = TC.SALARIO, @tiempoNormal = datediff(hour, J.HORA_INICIO, J.HORA_FIN)
FROM SALARIOXHORA TC
Inner join TIPO_JORNADA J on TC.ID_TIPO_JORNADA = J.ID
WHERE TC.ID_TIPO_JORNADA = @idTipoJornada
and TC.ID_PUESTO = @valorDocId
/* Crea asistencia*/
INSERT INTO ASISTENCIA (FECHA, ID_OBRERO, ID_TIPO_JORNADA, HORA_ENTRADA, HORA_SALIDA)
SELECT @fecha_inicio, @valorDocId, @idTipoJornada, @horaEntrada, @horaSalida
set @horas = datediff(hour, @horaEntrada, @horaSalida)
IF (@horas < 0)
set @horas = 24 + @horas
IF (@tiempoNormal < 0)
set @tiempoNormal = 24 + @tiempoNormal
/*
* Agregar dinero ganado
************* TODO: Agregar dinero ganado por horas extras
*/
UPDATE PLANILLA_MENSUAL
SET SALARIO_BRUTO = SALARIO_BRUTO + (@salarioPorHora * @horas)
OUTPUT inserted.ID into @idPlanillaMensual
WHERE ID_OBRERO = @valorDocId
and MES = MONTH(@viernesDePlanilla)
and ANNO = YEAR(@viernesDePlanilla)
IF @@ROWCOUNT = 0
INSERT INTO PLANILLA_MENSUAL ("ID_OBRERO", "SALARIO_BRUTO", "SALARIO_NETO", "MES", "ANNO")
OUTPUT inserted.ID into @idPlanillaMensual
values (@valorDocId, (@salarioPorHora * @horas), 0, MONTH(@viernesDePlanilla), YEAR(@viernesDePlanilla))
UPDATE PLANILLA_SEMANA
SET SALARIO_BRUTO = SALARIO_BRUTO + (@salarioPorHora * @horas)
OUTPUT inserted.ID into @idPlanillaSemanal
WHERE ID_PLANILLA_MENSUAL = @idPlanillaMensual
and FECHA = @sabadoDePlanilla
IF @@ROWCOUNT = 0
INSERT INTO PLANILLA_SEMANA (ID_PLANILLA_MENSUAL, "SALARIO_BRUTO", "SALARIO_NETO", FECHA)
OUTPUT inserted.ID into @idPlanillaSemanal
values (@valorDocId, (@salarioPorHora * @horas), 0, @sabadoDePlanilla)
--Agregar movimiento
INSERT INTO MOVIMIENTO ("ID_PLANILLA_SEMANAL", "ID_OBRERO", "FECHA", "MONTO", "TIPO_MOVIMIENTO")
VALUES (@idPlanillaSemanal,
@valorDocId,
@fecha_inicio,
(@salarioPorHora * @horas),
1) --3 porque es el valor del id de movimiento por incapacidad en la tabla respectiva
--Se agregan horas extras
Set @horas = @horas - @tiempoNormal
If (@horas > 0)
begin
Update PLANILLA_SEMANA
set SALARIO_NETO = SALARIO_NETO + (@horas * @salarioPorHora * 1.5)
where ID = @idPlanillaSemanal
INSERT INTO MOVIMIENTO ("ID_PLANILLA_SEMANAL", "ID_OBRERO", "FECHA", "MONTO", "TIPO_MOVIMIENTO")
VALUES (@idPlanillaSemanal,
@valorDocId,
@fecha_inicio,
(@salarioPorHora * @horas * 1.5),
2)
end
--Agrega extra por feriado o si es domingo
Select @Feriado = count(Fecha) from Feriado where month(@fecha_inicio)=month(Fecha) and day(@fecha_inicio)=day(Fecha) or datepart(dw,@fecha_inicio)=7
if(@Feriado > 0)
begin
UPDATE PLANILLA_SEMANA
SET SALARIO_BRUTO = SALARIO_BRUTO + (@salarioPorHora * @horas) --Se agrega el doble porque se trabaja el dia feriado
OUTPUT inserted.ID into @idPlanillaSemanal
WHERE ID_PLANILLA_MENSUAL = @idPlanillaMensual
--Agregar movimiento
INSERT INTO MOVIMIENTO("ID_PLANILLA_SEMANAL",
"ID_OBRERO",
"FECHA",
"MONTO",
"TIPO_MOVIMIENTO")
VALUES (@idPlanillaSemanal,
@valorDocId,
@fecha_inicio,
(@salarioPorHora * @horas),
2) --2 porque es el valor del id de movimiento por jornada extraordinaria
end
SET @low1 = @low1 + 1
END
/*
Cargar deducciones
Se agrega el movimiento pero NO se descuenta (eso se hace en el cierre)
*/
INSERT @DeduccionAux (DocId, idTipoDeduccion, Valor)
SELECT Child.value('(@DocId)[1]', 'numeric(12)'),
Child.value('(@idTipoDeduccion)[1]', 'int'),
Child.value('(@valor)[1]', 'money')
FROM @XML.nodes('dataset/FechaOperacion/NuevaDeduccion') AS N (Child)
WHERE @fecha_inicio = Child.value('../@Fecha', 'date')
/*
* Guardar deducciones en la base de datos
Se agrega el movimiento pero NO se descuenta (eso se hace en el cierre)
*/
SELECT @low1 = min(sec), @high1 = max(sec) FROM @DeduccionAux
WHILE @low1 <= @high1
BEGIN
SELECT @valorDocId = M.DocId, @idTipoDeduccion = M.idTipoDeduccion, @valor = M.Valor
FROM @DeduccionAux M
WHERE sec = @low1
SELECT @idPlanillaMensual = MENSUAL.ID
FROM PLANILLA_SEMANA P
inner join PLANILLA_MENSUAL MENSUAL on P.ID_PLANILLA_MENSUAL = MENSUAL.ID
WHERE MENSUAL.ID_OBRERO = @valorDocId
and P.FECHA = @sabadoDePlanilla
INSERT INTO MOVIMIENTO ("ID_PLANILLA_MENSUAL", "ID_OBRERO", "FECHA", "MONTO", "TIPO_MOVIMIENTO")
VALUES (@idPlanillaMensual, @valorDocId, @fecha_inicio, @valor, @idTipoDeduccion + 5)
--IF (@idTipoDeduccion = 1 OR @idTipoDeduccion= 2)
-- BEGIN
-- UPDATE PLANILLA_SEMANA
-- SET SALARIO_BRUTO=SALARIO_BRUTO*(1-(@valor/100)),
-- QopManual += 1
-- WHERE IdCuenta = @codCuenta
-- END
--IF (@IdTipoCuenta = 2 OR @IdTipoCuenta = 4)
-- BEGIN
-- UPDATE EstadoCuenta
-- SET SaldoFinal += @Monto,
-- QopATM += 1
-- WHERE IdCuenta = @codCuenta
-- END
--/**/
--IF (@IdTipoCuenta = 1 OR @IdTipoCuenta = 2 OR @IdTipoCuenta = 6)
-- BEGIN
-- UPDATE Cuenta SET SaldoActual += @Monto WHERE CodigoCuenta = @codCuenta
-- END
--ELSE BEGIN
-- UPDATE Cuenta SET SaldoActual -= @Monto WHERE CodigoCuenta = @codCuenta
--END
END
/*
Cargar bonos
*/
INSERT @Bono (DocId, Monto)
SELECT Child.value('(@DocId)[1]', 'numeric(12)'), Child.value('(@valor)[1]', 'money')
FROM @XML.nodes('dataset/FechaOperacion/Bono') AS N (Child)
WHERE @fecha_inicio = Child.value('../@Fecha', 'date')
/*
Guardar bonos en base de datos
En este caso si se agrega a la planilla
*/
SELECT @low1 = min(sec), @high1 = max(sec) FROM @Bono
WHILE @low1 <= @high1
BEGIN
SELECT @valorDocId = M.DocId, @valor = M.Monto FROM @Bono M WHERE sec = @low1
SELECT @idPlanillaSemanal = P.ID
FROM PLANILLA_SEMANA P
inner join PLANILLA_MENSUAL MENSUAL on P.ID_PLANILLA_MENSUAL = MENSUAL.ID
WHERE MENSUAL.ID_OBRERO = @valorDocId
and P.FECHA = @sabadoDePlanilla
INSERT INTO MOVIMIENTO ("ID_PLANILLA_SEMANAL", "ID_OBRERO", "FECHA", "MONTO", "TIPO_MOVIMIENTO")
VALUES (@idPlanillaSemanal,
@valorDocId,
@fecha_inicio,
@valor,
4) --4 porque es el valor del id de movimiento tipo bono en la tabla respectiva
UPDATE PLANILLA_SEMANA SET SALARIO_NETO = SALARIO_NETO + @valor WHERE ID = @idPlanillaSemanal
END
/*
Cargar incapacidades en tabla auxiliar
*/
INSERT @IncapacidadAux (DocId, idTipoJornada)
SELECT Child.value('(@DocId)[1]', 'numeric(12)'), Child.value('(@idTipoJornada)[1]', 'int')
FROM @XML.nodes('dataset/FechaOperacion/Incapacidad') AS N (Child)
WHERE @fecha_inicio = Child.value('../@Fecha', 'date')
/*
Cargar incapacidades en la base de datos
Si se guardan los movimientos y se agrega en la planilla
*/
SELECT @low1 = min(sec), @high1 = max(sec) FROM @IncapacidadAux
WHILE @low1 <= @high1
BEGIN
SELECT @valorDocId = C.DocId, @idTipoJornada = C.idTipoJornada FROM @IncapacidadAux C WHERE C.sec = @low1
--REgistro la incapacidad
INSERT INTO INCAPACIDAD (ID_OBRERO, ID_TIPO_JORNADA, FECHA)
VALUES (@valorDocId, @idTipoJornada, @fecha_inicio)
SET @low1 = @low1 + 1
--obtengo la planilla
--SELECT @idPlanillaSemanal=P.ID
--FROM PLANILLA_SEMANA P
-- inner join PLANILLA_MENSUAL MENSUAL on P.ID_PLANILLA_MENSUAL = MENSUAL.ID
--WHERE MENSUAL.ID_OBRERO=@valorDocId and P.FECHA=@sabadoDePlanilla
Select @salarioPorHora = sxh.SALARIO * (0.6)
from SALARIOXHORA sxh
inner join OBRERO o on sxh.ID_PUESTO = o.ID_PUESTO
where sxh.ID_TIPO_JORNADA = @idTipoJornada
IF (@idTipoJornada = 1)
begin
set @horas = 8
end
ELSE IF (@idTipoJornada = 2)
begin
set @horas = 5
end
ELSE begin
set @horas = 11
end
UPDATE PLANILLA_MENSUAL
SET SALARIO_BRUTO = SALARIO_BRUTO + (@salarioPorHora * @horas)
OUTPUT inserted.ID into @idPlanillaMensual
WHERE ID_OBRERO = @valorDocId
and MES = MONTH(@sabadoDePlanilla)
and ANNO = YEAR(@sabadoDePlanilla)
IF @@ROWCOUNT = 0
INSERT INTO PLANILLA_MENSUAL ("ID_OBRERO", "SALARIO_BRUTO", "SALARIO_NETO", "MES", "ANNO")
OUTPUT inserted.ID into @idPlanillaMensual
values (@valorDocId, (@salarioPorHora * @horas), 0, MONTH(@sabadoDePlanilla), YEAR(@sabadoDePlanilla))
UPDATE PLANILLA_SEMANA
SET SALARIO_BRUTO = SALARIO_BRUTO + (@salarioPorHora * @horas)
OUTPUT inserted.ID into @idPlanillaSemanal
WHERE ID_PLANILLA_MENSUAL = @idPlanillaMensual
and FECHA = @sabadoDePlanilla
IF @@ROWCOUNT = 0
INSERT INTO PLANILLA_SEMANA (ID_PLANILLA_MENSUAL, "SALARIO_BRUTO", "SALARIO_NETO", FECHA)
OUTPUT inserted.ID into @idPlanillaSemanal
values (@valorDocId, (@salarioPorHora * @horas), 0, @sabadoDePlanilla)
INSERT INTO MOVIMIENTO ("ID_PLANILLA_SEMANAL", "ID_OBRERO", "FECHA", "MONTO", "TIPO_MOVIMIENTO")
VALUES (@idPlanillaSemanal,
@valorDocId,
@fecha_inicio,
(@salarioPorHora * @horas),
3) --3 porque es el valor del id de movimiento por incapacidad en la tabla respectiva
END
--------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------
--Cierre
IF (@numeroDiaEnSemana = 6)
begin
--Donde 6 es Viernes
IF (@numeroDiaEnSemana =
DATEADD(
DY,
DATEDIFF(
DY,
'1900-01-05',
DATEADD(
MM,
DATEDIFF(
MM, 0, @fecha_inicio), 30)) / 7 * 7, '1900-01-05')) --Es el ultimo viernes? Heh
begin
--Cierre mensual
insert into @cierrePlanillaMenAux (idMensual, monto, mes, anno)
SELECT PM.ID, PM.SALARIO_BRUTO, PM.MES, PM.ANNO
FROM PLANILLA_MENSUAL PM
WHERE PM.MES = MONTH(@fecha_inicio)
SELECT @low1 = min(sec), @high1 = max(sec) FROM @cierrePlanillaMenAux
while @low1 <= @high1
BEGIN
SELECT @idPlanillaMensual = C.idMensual, @valor = C.monto
FROM @cierrePlanillaMenAux C
where C.sec = @low1
UPDATE PLANILLA_MENSUAL
set SALARIO_NETO = SALARIO_BRUTO
where ID = @idPlanillaMensual
END
end
else begin
--Cierre semana
insert into @cierrePlanillaSemAux (idMensual, idSemanal, monto, tipo_mov, fecha)
SELECT PS.ID, PS.ID_PLANILLA_MENSUAL, MOV.MONTO, MOV.TIPO_MOVIMIENTO, MOV.FECHA
From PLANILLA_SEMANA PS
inner join PLANILLA_MENSUAL MENSUAL2 on PS.ID_PLANILLA_MENSUAL = MENSUAL2.ID
inner join MOVIMIENTO MOV on PS.ID = MOV.ID_PLANILLA_MENSUAL
where PS.FECHA = @sabadoDePlanilla --and @idTipoMov=6 or @idTipoMov=7
SELECT @low1 = min(sec), @high1 = max(sec) FROM @cierrePlanillaSemAux
while @low1 <= @high1
BEGIN
select @idPlanillaSemanal = c.idSemanal, @valor = C.monto, @idTipoMov = C.tipo_mov, @fecha = C.fecha
from @cierrePlanillaSemAux C
where C.sec = @low1
--Agregar salario neto
update PLANILLA_SEMANA set SALARIO_NETO = SALARIO_NETO + SALARIO_BRUTO where ID = @idPlanillaSemanal
--Procesar deducciones porcentuales
IF (@idTipoMov = 6 or @idTipoMov = 7)
begin
update PLANILLA_SEMANA
set SALARIO_NETO = SALARIO_NETO - (SALARIO_BRUTO * (@valor / 100))
where ID = @idPlanillaSemanal
end
ELSE IF (@idTipoMov = 8 or @idTipoMov = 9) --procesar deducciones "fijas"
BEGIN
set @numeroDeVierneses = datediff(day, -3,
DATEADD(dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
--ultimo dia
) / 7 - datediff(day, -2,
@fecha) --primer dia
/ 7
update PLANILLA_SEMANA
set SALARIO_NETO = SALARIO_NETO - (@valor / @numeroDeVierneses) -- Todo: fix this. Baja toda la deduccion en una semana, coz reasons
where ID = @idPlanillaSemanal
end
end
end
end
SET @fecha_inicio = DATEADD(DD, 1, @fecha_inicio)
DELETE FROM @EmpleadoAux
DELETE FROM @AsistenciaAux
DELETE FROM @DeduccionAux
DELETE FROM @Bono
DELETE FROM @tabla_fechas
DELETE FROM @cierrePlanillaSemAux
--select * from Cliente
--select * from Cuenta
--select * from Movimiento
--select * from MovimientoIntereses
--select * from EstadoCuenta
END
--Fin
END
sábado, 24 de noviembre de 2018
Portal Web Terminado
Usando datos de prueba creado a mano se realizaron los últimos sp relativos al portal web, como calculo de aguinaldos, y las funcionalidades de modifcar bonos y ver planillas.
Tiempo empleado: 1h.
Tiempo empleado: 1h.
miércoles, 21 de noviembre de 2018
Simulación Iterativa
Carlos Chaves:
Se empezó el script de simulación por metodo de Iteración. Se usó como referencia el script del proyecto pasado. Este con el fin de reciclar código y además de aclarar uno que otra incognita.
Se inició cargando las tablas de manera Iterativa. Estas tablas correspondían a las que no eran cargadas con el script de Carga de Datos.
Luego se inició los procesos (movimientos y otros) que requerían de la programación de manera Iterativa.
Pendientes: Terminar la simulación (los movimientos faltantes).
Horas estimadas de trabajo: 4h
Se empezó el script de simulación por metodo de Iteración. Se usó como referencia el script del proyecto pasado. Este con el fin de reciclar código y además de aclarar uno que otra incognita.
Se inició cargando las tablas de manera Iterativa. Estas tablas correspondían a las que no eran cargadas con el script de Carga de Datos.
Luego se inició los procesos (movimientos y otros) que requerían de la programación de manera Iterativa.
Pendientes: Terminar la simulación (los movimientos faltantes).
Horas estimadas de trabajo: 4h
sábado, 17 de noviembre de 2018
Creación Base del Portal Web
Este día se empleó para crear el portal web y varios sp realativos a este que no dependen de la simulación.
Daniel:
Relativo al portal web se creó pantallas para el login de los empleado, ver el listado de planillas semanles y mensuales de un empleado específico, una pantalla para el jefe donde puede modificar los valores de Salario por Hora, y pantallas para la modificación de bonos y deducciones, aunque estas dos últimas todavía no tiene ninguna clase de funcionalidad asociada.
Daniel:
Relativo al portal web se creó pantallas para el login de los empleado, ver el listado de planillas semanles y mensuales de un empleado específico, una pantalla para el jefe donde puede modificar los valores de Salario por Hora, y pantallas para la modificación de bonos y deducciones, aunque estas dos últimas todavía no tiene ninguna clase de funcionalidad asociada.
Código Base y Árbol de Carpetas
Entorno de Trabajo, dos monitores
Pantalla de modificar Bonos, sin funcionalidad
Pantalla de Login para Empleados
Pantalla para consulta de Planillas, sin función
Pantalla del Administrador, para moficar
Tiempo empleado: 2h,30m
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spModSalarioXHora](
@pidP int,
@pidJ int,
@pidM int
)
AS
BEGIN
declare @idR int
SELECT @idR = SH.ID
FROM dbo.SALARIOXHORA SH
WHERE SH.ID_PUESTO = @pidP and SH.ID_TIPO_JORNADA = @pidJ
UPDATE dbo.SALARIOXHORA
SET SALARIO = @pidM
WHERE ID = @idR
END
GO
jueves, 15 de noviembre de 2018
Primeros scripts terminados
Carlos Chaves:
El primer script finalizado fue el de llenado de Bases de Datos. Debido a que esta no tiene mucha ciencia y siempre sería el mismo, cargando las tablas fijas.
El otro script que se espera que este terminado y que no haya que cambiar, es el script de creación de la Bases de Datos. Este no se debería de alterar a menos de ser necesario al no haber contemplado circunstacias extras.
Pendientes: Simulaciones
Horas estimadas de trabajo: 2h
El primer script finalizado fue el de llenado de Bases de Datos. Debido a que esta no tiene mucha ciencia y siempre sería el mismo, cargando las tablas fijas.
El otro script que se espera que este terminado y que no haya que cambiar, es el script de creación de la Bases de Datos. Este no se debería de alterar a menos de ser necesario al no haber contemplado circunstacias extras.
Pendientes: Simulaciones
Horas estimadas de trabajo: 2h
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [dbo].[cargaDatos]
as begin
DECLARE @XML XML
SET @XML = (SELECT * FROM OPENROWSET(BULK '/home/datos/Feriados.xml', SINGLE_BLOB) AS BasicData)
/*
Cargar Feriados
*/
INSERT Feriado (Nombre, Fecha)
SELECT
Child.value('(@NombreFeriado)[1]', 'varchar(50)'),
Child.value('(@Fecha)[1]', 'Date')
FROM @XML.nodes('dataset/Feriados') AS N (Child)
SET @XML = (SELECT * FROM OPENROWSET(BULK '/home/datos/Puesto.xml', SINGLE_BLOB) AS BasicData)
INSERT Puesto (Nombre)
SELECT
Child.value('(@nombre)[1]', 'varchar(25)')
FROM @XML.nodes('dataset/Puesto') AS N (Child)
SET @XML = (SELECT * FROM OPENROWSET(BULK '/home/datos/TipoJornadas.xml', SINGLE_BLOB) AS BasicData)
INSERT Tipo_Jornada (Nombre,Hora_Inicio,Hora_Fin)
SELECT
Child.value('(@nombre)[1]', 'Varchar(15)'),
Child.value('(@HoraInicio)[1]', 'Time'),
Child.value('(@HoraFin)[1]', 'Time')
FROM @XML.nodes('dataset/TipoJornadas') AS N (Child)
--SET @XML = (SELECT * FROM OPENROWSET(BULK '/home/datos/TipoDeduccion.xml', SINGLE_BLOB) AS BasicData) --Tiene lo mismo que TipoMovimiento (?)
SET @XML = (SELECT * FROM OPENROWSET(BULK '/home/datos/TipoMovimiento.xml', SINGLE_BLOB) AS BasicData)
INSERT Tipo_Movimiento (Nombre)
SELECT
Child.value('(@nombre)[1]', 'Varchar(100)')
FROM @XML.nodes('dataset/TipoMovimiento') AS N (Child)
SET @XML = (SELECT * FROM OPENROWSET(BULK '/home/datos/SalarioXHora.xml', SINGLE_BLOB) AS BasicData)
INSERT SalarioXHora (ID_Puesto,ID_Tipo_Jornada,Salario)
SELECT
Child.value('(@idPuesto)[1]', 'int'),
Child.value('(@idTipoJornada)[1]', 'int'),
Child.value('(@valorHora)[1]', 'Money')
FROM @XML.nodes('dataset/SalarioxHora') AS N (Child)
END
GO
CREATE TABLE ASISTENCIA ( "ID" BIGINT IDENTITY NOT NULL , "FECHA" DATE NOT NULL , "ID_PLANILLA_SEMANAL" BIGINT NULL , "ID_OBRERO" BIGINT NOT NULL , "ID_TIPO_JORNADA" INT NOT NULL , "HORA_ENTRADA" TIME NULL , "HORA_SALIDA" TIME NULL , CONSTRAINT "ASISTENCIA_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE EVENT_LOG ( "ID" BIGINT IDENTITY NOT NULL , "DESCRIPCION" VARCHAR(MAX) NOT NULL , "FECHA" DATETIME2 NOT NULL DEFAULT GETDATE() , CONSTRAINT "EVENT_LOG_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE FERIADO ( "ID" INT IDENTITY NOT NULL , "NOMBRE" VARCHAR(50) NOT NULL , "FECHA" DATE NOT NULL , CONSTRAINT "FERIADO_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE INCAPACIDAD ( "ID" INT IDENTITY NOT NULL , "FECHA" DATE NOT NULL , "ID_OBRERO" BIGINT NOT NULL , "ID_TIPO_JORNADA" INT NOT NULL , CONSTRAINT "INCAPACIDAD_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE MOVIMIENTO ( "ID" BIGINT IDENTITY NOT NULL , "ID_PLANILLA_SEMANAL" BIGINT NULL , "ID_PLANILLA_MENSUAL" BIGINT NULL , "ID_OBRERO" BIGINT NOT NULL , "FECHA" DATE NOT NULL , "MONTO" MONEY NOT NULL , "TIPO_MOVIMIENTO" INT NOT NULL , CONSTRAINT "MOVIMIENTO_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE OBRERO ( "ID" BIGINT IDENTITY NOT NULL , "NOMBRE" VARCHAR(20) NOT NULL , "CUENTA" BIGINT NULL , "ID_PUESTO" INT NOT NULL , CONSTRAINT "Obrero_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE PLANILLA_MENSUAL ( "ID" BIGINT NOT NULL , "ID_OBRERO" BIGINT NOT NULL , "SALARIO_BRUTO" MONEY NULL , "SALARIO_NETO" MONEY NULL , "MES" NUMERIC(2) NOT NULL , "ANNO" NUMERIC(4) NOT NULL , CONSTRAINT "PLANILLA_MENSUAL_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE PLANILLA_SEMANA ( "ID" BIGINT NOT NULL , "FECHA" DATE NOT NULL , "SALARIO_BRUTO" MONEY NULL , "SALARIO_NETO" MONEY NULL , "ID_PLANILLA_MENSUAL" BIGINT NOT NULL , CONSTRAINT "PLANILLA_SEMANA_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE PUESTO ( "ID" INT IDENTITY NOT NULL , "NOMBRE" VARCHAR(25) NOT NULL , CONSTRAINT "PUESTO_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE SALARIOXHORA ( "ID" BIGINT IDENTITY NOT NULL , "ID_TIPO_JORNADA" INT NOT NULL , "ID_PUESTO" INT NOT NULL , "SALARIO" MONEY NOT NULL , CONSTRAINT "SALARIOXHORA_PK" PRIMARY KEY ( "ID" ) , CONSTRAINT "SALARIOXHORA_UK1" UNIQUE ( "ID_TIPO_JORNADA", "ID_PUESTO" ) ); CREATE TABLE TIPO_JORNADA ( "ID" INT IDENTITY NOT NULL , "NOMBRE" VARCHAR(15) NOT NULL , "HORA_INICIO" TIME NOT NULL , "HORA_FIN" TIME NOT NULL , CONSTRAINT "TIPOJORNADA_PK" PRIMARY KEY ( "ID" ) ); CREATE TABLE TIPO_MOVIMIENTO ( "ID" INT IDENTITY NOT NULL , "NOMBRE" VARCHAR(100) NOT NULL , CONSTRAINT "TIPO_MOVIMIENTO_PK" PRIMARY KEY ( "ID" ) ); ALTER TABLE ASISTENCIA ADD CONSTRAINT "ASISTENCIA_FK1" FOREIGN KEY ( "ID_OBRERO" ) REFERENCES OBRERO ( "ID" ); ALTER TABLE ASISTENCIA ADD CONSTRAINT "ASISTENCIA_FK2" FOREIGN KEY ( "ID_TIPO_JORNADA" ) REFERENCES TIPO_JORNADA ( "ID" ); ALTER TABLE ASISTENCIA ADD CONSTRAINT "ASISTENCIA_FK3" FOREIGN KEY ( "ID_PLANILLA_SEMANAL" ) REFERENCES PLANILLA_SEMANA ( "ID" ); ALTER TABLE INCAPACIDAD ADD CONSTRAINT "INCAPACIDAD_FK1" FOREIGN KEY ( "ID_OBRERO" ) REFERENCES OBRERO ( "ID" ); ALTER TABLE INCAPACIDAD ADD CONSTRAINT "INCAPACIDAD_FK2" FOREIGN KEY ( "ID_TIPO_JORNADA" ) REFERENCES TIPO_JORNADA ( "ID" ); ALTER TABLE MOVIMIENTO ADD CONSTRAINT "MOVIMIENTO_FK1" FOREIGN KEY ( "TIPO_MOVIMIENTO" ) REFERENCES TIPO_MOVIMIENTO ( "ID" ); ALTER TABLE MOVIMIENTO ADD CONSTRAINT "MOVIMIENTO_FK2" FOREIGN KEY ( "ID_OBRERO" ) REFERENCES OBRERO ( "ID" ); ALTER TABLE MOVIMIENTO ADD CONSTRAINT "MOVIMIENTO_FK3" FOREIGN KEY ( "ID_PLANILLA_SEMANAL" ) REFERENCES PLANILLA_SEMANA ( "ID" ); ALTER TABLE MOVIMIENTO ADD CONSTRAINT "MOVIMIENTO_FK4" FOREIGN KEY ( "ID_PLANILLA_MENSUAL" ) REFERENCES PLANILLA_MENSUAL ( "ID" ); ALTER TABLE OBRERO ADD CONSTRAINT "OBRERO_FK1" FOREIGN KEY ( "ID_PUESTO" ) REFERENCES PUESTO ( "ID" ); ALTER TABLE PLANILLA_MENSUAL ADD CONSTRAINT "PLANILLA_MENSUAL_FK1" FOREIGN KEY ( "ID_OBRERO" ) REFERENCES OBRERO ( "ID" ); ALTER TABLE PLANILLA_SEMANA ADD CONSTRAINT "PLANILLA_SEMANA_FK1" FOREIGN KEY ( "ID_PLANILLA_MENSUAL" ) REFERENCES PLANILLA_MENSUAL ( "ID" ); ALTER TABLE SALARIOXHORA ADD CONSTRAINT "SALARIOXHORA_FK1" FOREIGN KEY ( "ID_PUESTO" ) REFERENCES PUESTO ( "ID" ); ALTER TABLE SALARIOXHORA ADD CONSTRAINT "SALARIOXHORA_FK2" FOREIGN KEY ( "ID_TIPO_JORNADA" ) REFERENCES TIPO_JORNADA ( "ID" );
viernes, 9 de noviembre de 2018
Varios eventos
Carlos Chaves:
Este día se conversó con todos los integrantes con el tema del modelo físico final, pero surgieron varios eventos imprevistos.
Primero, al modelo había que cambiarle varios atributos, además de agregar atributos faltantes necesarios y tablas extras.
Segundo, el integrante Kenneth decidió dejar el grupo sin haber antes consultado con los integrantes o al profesor, por el motivo de "no haber hablado nada acerca del proyecto antes de esta fecha". Se le sugirió quedarse, pero ya tenía otro compañero y sostuvo su decisión. Por lo que se le pidió notificar al profesor acerca de su decisión propia. (En conjunto con Daniel Martínez)
Finalmente, se conversó acerca de la nueva distribuición del proyecto entre los participantes restantes. (En conjunto con Daniel Martínez)
Pendientes: Pulir el modelo físico y adelantar que-haceres.
Siguiente reunión sin fecha.
Horas estimadas de trabajo: 1h
Este día se conversó con todos los integrantes con el tema del modelo físico final, pero surgieron varios eventos imprevistos.
Primero, al modelo había que cambiarle varios atributos, además de agregar atributos faltantes necesarios y tablas extras.
Segundo, el integrante Kenneth decidió dejar el grupo sin haber antes consultado con los integrantes o al profesor, por el motivo de "no haber hablado nada acerca del proyecto antes de esta fecha". Se le sugirió quedarse, pero ya tenía otro compañero y sostuvo su decisión. Por lo que se le pidió notificar al profesor acerca de su decisión propia. (En conjunto con Daniel Martínez)
Finalmente, se conversó acerca de la nueva distribuición del proyecto entre los participantes restantes. (En conjunto con Daniel Martínez)
Pendientes: Pulir el modelo físico y adelantar que-haceres.
Siguiente reunión sin fecha.
Horas estimadas de trabajo: 1h
Version anterior
Version Actual
jueves, 8 de noviembre de 2018
Plantilla de Revisión
Hoy no se trabajó en el proyecto, pero el profesor entrego la plantilla de revisión de esta.
El cuadro de revisión de estas progra.
El cuadro de revisión de estas progra.
miércoles, 7 de noviembre de 2018
Acuerdo de la siguiente reunión
Carlos Chaves:
Después de clases, se mencionó traer el modelo físico para la siguiente lección debido a que el viernes pasado, se olvidó hablar completamente acerca de este tema. Entonces como cada uno tenía sus cosas que hacer y salimos un poco pasada la hora de salida de Bases de Datos y otros tenían clases de inmediato, se llegó al acuerdo de hablarlo con más tiempo la próxima vez.
Pendientes: Discutir el modelo físico, esto mediante el diagrama.
Horas estimadas de trabajo: Menos de 1h
Después de clases, se mencionó traer el modelo físico para la siguiente lección debido a que el viernes pasado, se olvidó hablar completamente acerca de este tema. Entonces como cada uno tenía sus cosas que hacer y salimos un poco pasada la hora de salida de Bases de Datos y otros tenían clases de inmediato, se llegó al acuerdo de hablarlo con más tiempo la próxima vez.
Pendientes: Discutir el modelo físico, esto mediante el diagrama.
Horas estimadas de trabajo: Menos de 1h
jueves, 1 de noviembre de 2018
Creación del modelo físico
Carlos Chaves:
Se acordó crear el modelo físico en esta semana. Esto se discutió el día anterior luego de clases. Esta fue una decisión rápida para tener lo antes posible el modelo y poder realizarle cambios con tiempo previo. Para luego llevarlo ante los otros integrantes y discutirlo.
Se estimó llegar a usar como de 2 horas aproximadas, para pensar acerca de la mayoría de situaciones que se podían presentar.
Pendiente: Presentar el diagrama a los otros miembros del grupo de trabajo en la siguiente lección (Viernes 2 de Nov).
Horas estimadas de trabajo: 2h
Se acordó crear el modelo físico en esta semana. Esto se discutió el día anterior luego de clases. Esta fue una decisión rápida para tener lo antes posible el modelo y poder realizarle cambios con tiempo previo. Para luego llevarlo ante los otros integrantes y discutirlo.
Se estimó llegar a usar como de 2 horas aproximadas, para pensar acerca de la mayoría de situaciones que se podían presentar.
Pendiente: Presentar el diagrama a los otros miembros del grupo de trabajo en la siguiente lección (Viernes 2 de Nov).
Horas estimadas de trabajo: 2h
Primer modelo
viernes, 19 de octubre de 2018
Entrega de la especificación
En este día se dió por escrito y se analizó durante la clase la especificacion de la tercera tarea programada, y después se analizó en mismo entre los miembros del grupo.
En el mismo día se creó por parte de los miembros del grupo de trabajo un blog en Blogger (este mismo), y un repositorio en Git para poder mantener un control de versiones del proyecto.
Por razones de otros cursos lo más posible es que no se pueda comenzar a trabajar en el proyecto hasta más tarde, pero queda una base ya hecha.
Tiempo empleado: 2H, tiemplo empleado para revisar la especificación en clase.
En el mismo día se creó por parte de los miembros del grupo de trabajo un blog en Blogger (este mismo), y un repositorio en Git para poder mantener un control de versiones del proyecto.
Por razones de otros cursos lo más posible es que no se pueda comenzar a trabajar en el proyecto hasta más tarde, pero queda una base ya hecha.
Tiempo empleado: 2H, tiemplo empleado para revisar la especificación en clase.
Suscribirse a:
Comentarios (Atom)















