En el cual se consigue el id del recibo mas viejo respecto a la propiedad y al concepto de cobro que viene en la tabla de pagos:
SET @idRecibo = (SELECT TOP 1 R.id
FROM [dbo].[Recibos] R
INNER JOIN @Pagos P ON P.idTipoRecibo = R.id_CC
INNER JOIN [dbo].[Propiedad] PR ON PR.numFinca = P.numFinca AND PR.id = R.id_Propiedad
WHERE R.estado = 0 AND P.id = @idMenor
ORDER BY R.fecha ASC)
Despues se busca el comprobante de pago:
SET @idComprobante = (SELECT CP.id--ERROR
FROM [dbo].[ComprobantePago] CP
INNER JOIN [ReciboPagado] RP ON CP.id = RP.id_Comprobante
INNER JOIN [dbo].[Recibos] R ON R.id = RP.id_Recibo
WHERE CP.fecha = @fechaOperacion AND R.id_Propiedad = @idPropiedad)
--SI NO EXISTE LO CREA
IF @idComprobante IS NULL
BEGIN
INSERT INTO [dbo].[ComprobantePago](fecha,total)
SELECT @fechaOperacion,0
SET @idComprobante = IDENT_CURRENT('[dbo]. [ComprobantePago]')
END
O se crea en el caso que no exista
Y despues se verifica si es necesario realizar un recibo por morosidad:
SET @fechaVence = (SELECT fechaVence FROM [dbo].[Recibos] R
INNER JOIN @idRecibosPagar idRP ON idRP.idRecibo = R.id
WHERE @idMenorRecibo = idRP.id)
IF @fechaVence <= @fechaOperacion
BEGIN
Y se genera el recibo por morosidad, al final al comprobante de pago se le actualiza el monto y se sigue con la iteracion:
UPDATE [dbo].[ComprobantePago]
SET [total] = [total]+@montoRecibo+@montoMoratorio
WHERE id = @idComprobante
SET @idMenor = @idMenor+1
y generación de recibos:
DECLARE @dia int
--SET @dia = DAY(@fecha)
INSERT INTO [dbo].[Recibos](id_CC,monto,estado,id_Propiedad,fecha,fechaVence)
SELECT
CC.id,
CASE WHEN (CC.esFijo = 'Si' AND CC.id != 1) THEN CC.monto
WHEN (CC.esImpuesto = 'Si') THEN P.valor/100*CCPo.valorPorcentual
WHEN (CC.id = 1) THEN
CASE WHEN (P.M3acumuladosAgua-P.M3AcumuladosUltimoRecibo)*CCC.valorPorM3>CCC.montoMinimoRecibo
THEN (P.M3acumuladosAgua-P.M3AcumuladosUltimoRecibo)*CCC.valorPorM3
ELSE CCC.montoMinimoRecibo END
END,
0,
P.id,
@fecha,
DATEADD(d,CC.diasParaVencer,@fecha)
FROM [dbo].[CCDePropiedad] CCP
INNER JOIN [dbo].[ConceptoDeCobro] CC ON CCP.id_CC = CC.id
INNER JOIN [dbo].[Propiedad] P ON CCP.id_Propiedad = P.id
FULL OUTER JOIN [dbo].[CCPorcentaje] CCPo ON CCPo.id = CC.id
FULL OUTER JOIN [dbo].[CCConsumo] CCC ON CCC.id = CC.id
WHERE CC.diaDeCobro = @dia
solo falta probar reconexion y corte, y hay un problema con pagos esta tratando de establecer una variable y le retorna mas de un valor.
Durante los 3 días se trabajo aproximadamente 17h en total
Referencias:
