You are on page 1of 31

CREATE OR REPLACE PROCEDURE PP_GEN_END_FINANCIAL_MONTH(pCompanyId IN NUMBER,

pMsg OUT VARCHAR2,


pError IN OUT BOOLEAN)
IS
cSysdate CONSTANT DATE := SYSDATE;
cPorCierreIva CONSTANT NUMBER(7,2) := NVL(FP_SEARCH_GENERAL_PARAM(pCompanyId,
'%INTIVACIERREMENSUAL'), 0);
cPorCierreSalRojo CONSTANT NUMBER(7,2) := NVL(FP_SEARCH_GENERAL_PARAM(pCompanyId,
'%INTSALROJOCIERREMENSUAL'), 0);
vEndFinancialId NUMBER(10);
vEndNumber NUMBER(10);
vFecIni DATE;
vFecFin DATE;
primerRegistro BOOLEAN := TRUE;
vMsg VARCHAR2(800);
error BOOLEAN := FALSE;
eAlgunError EXCEPTION;

vItem NUMBER(10);
vUserExeId NUMBER(10);
vEndFinMonthMId NUMBER(10);
vEndFinMonthDId NUMBER(10);
vItemPartner NUMBER(10);
vItemEmployee NUMBER(10);
vPartnerId NUMBER(10);
vEmployeeId NUMBER(10);
vTotalVoucher NUMBER(18,3);
vBalanceOfFee NUMBER(18,3);
vHoldingId NUMBER(10);
vContributionAmount NUMBER(18,3);

vSalario NUMBER(18,3);
vAdverseBalance NUMBER(18,3);
vInterestAdverseBalance NUMBER(18,3);
vCurrentAdverseBalance NUMBER(18,3);
vInteresTax NUMBER(18,3);
vSumSalesBalance NUMBER(18,3);
vSumLoanBalance NUMBER(18,3);
vSumLoanCapitalBalance NUMBER(18,3);
vSumLoanInterestBalance NUMBER(18,3);
vTotalContribution NUMBER(18,3);
vTotalSocialContribution NUMBER(18,3);
vTotalMantenaiceClub NUMBER(18,3);

vSocialContributionAmount NUMBER(18,3);
vMantenaiceClubAmount NUMBER(18,3);

vCurrentLoanBalance NUMBER(18,3);
vCurrentSalesBalance NUMBER(18,3);

vTotalReceiptCred NUMBER(18,3);
vTotalReceiptFact NUMBER(18,3);
vTotalReceiptFosa NUMBER(18,3);

vEndFinMonthYear NUMBER(4);
vEndFinMonthMonth NUMBER(2);

vItemPartnerFinancialDet NUMBER(10);
CURSOR CUR_VOUCHERS(pInitialDate DATE, pEndDate DATE) IS
SELECT X.TYPE_OPERATION,
X.PARTNER_NAME,
X.PARTNER_ID,
X.CONTRIBUTION_ID,
X.TRANSACTION_TYPE_ID,
X.TRANSACTION_ID,
X.INSTALMENT_NUMBER,
X.INSTALMENT_ID,
X.INTEREST_AMOUNT,
X.CAPIAL_AMOUNT,
X.BALANCE_AMOUNT,
X.ADVERSE_BALANCE_AMOUNT,
X.INSTALMENT_DATE,
X.INITIAL_INSTALMENT
FROM (
SELECT 'P' AS TYPE_OPERATION,
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME AS PARTNER_NAME,
L.PARTNER_ID AS PARTNER_ID,
-1 AS CONTRIBUTION_ID,
L.TRN_TYPE_ID AS TRANSACTION_TYPE_ID,
L.TRN_ID AS TRANSACTION_ID,
L.SHARE_NUMBER AS INSTALMENT_NUMBER,
L.ID AS INSTALMENT_ID,
L.SHARE_INTEREST_BALANCE AS INTEREST_AMOUNT,
L.CAPITAL_BALANCE AS CAPIAL_AMOUNT,
L.SHARE_BALANCE AS BALANCE_AMOUNT,
0 AS ADVERSE_BALANCE_AMOUNT,
L.SHARE_DATE AS INSTALMENT_DATE,
M.NUMBER_OF_SHARES AS INITIAL_INSTALMENT
FROM LOAN_PARTNER_SHARE L, LOAN_CREDIT_APPLICATION M, CHA_PARTNERS P,
EC_VOUCHER V, HR_PEOPLE PEO
WHERE M.ID = L.TRN_ID
AND M.TRN_TYPE_ID = L.TRN_TYPE_ID
AND PEO.ID = P.PERSON_ID
AND P.ID = L.PARTNER_ID
AND P.COMPANY_ID = L.COMPANY_ID
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'SOLCRE'
AND NVL(P.IS_LOCKED, 'N') != 'Y'
AND L.SHARE_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(SHARE_BALANCE, 0) > 0
AND M.COMPANY_ID = pCompanyId
UNION ALL
SELECT 'P',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.PARTNER_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
C.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, SALE_SALES_MASTER M, CHA_PARTNERS P, EC_VOUCHER
V, SALE_SALECONDITION C, HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = P.PERSON_ID
AND P.ID = M.PARTNER_ID
AND V.ID = M.TRN_TYPE_ID
AND C.ID = M.SALE_CONDITION_ID
AND V.SHORT_NAME = 'VENCRE'
AND M.COMPANY_ID = pCompanyId
AND NVL(P.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.BALANCE_OF_FEE, 0) > 0
AND NVL(B.INSTALMENTS, 0) > 0
UNION ALL
SELECT 'P',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.PARTNER_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
C.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, AREC_PURCHASES_ORDER_MASTER M, CHA_PARTNERS P,
EC_VOUCHER V, BUY_BUYCONDITION C, HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = P.PERSON_ID
AND P.ID = M.PARTNER_ID
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'ORDCOM'
AND C.ID = M.BUY_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(P.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'P',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.PARTNER_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
B.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, AREC_DRUGSTORE_MASTER M,
--AREC_DRUGSTORE_MIDDLE MD,
CHA_PARTNERS P, EC_VOUCHER V,
--BUY_BUYCONDITION C,
HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
--AND M.ID = MD.MASTER_ID
AND PEO.ID = P.PERSON_ID
--AND P.ID = MD.PARTNER_ID
AND P.ID = B.PARTNER_ID --- AGREGADO
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'FARMAC'
--AND C.ID = MD.BUY_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(P.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'P',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.PARTNER_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
B.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B,
AREC_SALES_SERVICES_MASTER M,
--AREC_SALES_SERVICES_MIDDLE MD,
CHA_PARTNERS P,
EC_VOUCHER V,
--BUY_BUYCONDITION C,
HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = P.PERSON_ID
AND P.ID = B.PARTNER_ID -- AGREGADO
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'VENSER'
--AND C.ID = MD.BUY_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(P.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
-- ACTIVIDAD POR ASOCIACION. OBS: ESTO YA PODR�AMOS QUITAR
SELECT 'P',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.PARTNER_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
C.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, AREC_ACTIVITIES_MASTER M, CHA_PARTNERS P,
EC_VOUCHER V, BUY_BUYCONDITION C, HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = P.PERSON_ID
AND B.PARTNER_ID = P.ID
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'ACTASO'
AND C.ID = M.BUY_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(P.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'P',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.PARTNER_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
C.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, CHA_DEBCRE_NOTE_MASTER M, CHA_PARTNERS P,
EC_VOUCHER V, SALE_SALECONDITION C, HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = P.PERSON_ID
AND P.ID = M.PARTNER_ID
AND V.ID = M.TRN_TYPE_ID
AND C.ID = M.SALE_CONDITION_ID
AND V.SHORT_NAME IN ('DEBCRE', 'DEBCON')
AND M.COMPANY_ID = pCompanyId
AND NVL(P.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.BALANCE_OF_FEE, 0) > 0
AND NVL(B.INSTALMENTS, 0) > 0
UNION ALL
SELECT 'P',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
P.ID,
C.CONTRIBUTION_ID,
-1,
-1,
-1,
-1,
0,
0,
NVL(C.AMOUNT, 0),
0,
pEndDate,
0
FROM CHA_PARTNER_CONTRIBUTION_CONF C, CHA_PARTNERS P, HR_PEOPLE PEO
WHERE P.ID = C.PARTNER_ID
AND PEO.ID = P.PERSON_ID
AND NVL(C.IN_FORCE, 'N') = 'Y'
AND C.COMPANY_ID = pCompanyId
AND NVL(C.AMOUNT, 0) > 0
AND NVL(P.IS_LOCKED, 'N') != 'Y'
AND NVL(P.FREE_FROM_OBLIGATION, 'N') = 'N'
AND NOT EXISTS (SELECT SUM(NVL(M.TOTAL_VOUCHERS, 0))
FROM AREC_RECEIPT_CHARGES_MASTER M,
AREC_RECEIPT_CHARGES_DET D
WHERE M.ID = D.MASTER_ID
AND M.COMPANY_ID = C.COMPANY_ID
AND M.PARTNER_ID = P.ID
AND D.CONTRIBUTION_ID = C.CONTRIBUTION_ID
AND D.CONTRIBUTION_YEAR = vEndFinMonthYear
AND D.CONTRIBUTION_MONTH = vEndFinMonthMonth
HAVING SUM(NVL(M.TOTAL_VOUCHERS, 0)) >= C.AMOUNT)
--AND P.PARTNER_NAME NOT LIKE 'NO_DATA%'
UNION ALL
SELECT 'E',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.EMPLOYEE_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
B.END_DATE,
C.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, CHA_END_ADVERSEBALANCE_MASTER M,
CHA_END_ADVERSEBALANCE_DET D, HR_EMPLOYEES E,
EC_VOUCHER V, SALE_SALECONDITION C, HR_PEOPLE PEO
WHERE M.ID = D.MASTER_ID
AND D.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = E.PERSON_ID
AND E.ID = D.EMPLOYEE_ID
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'SALROJ'
AND C.ID = M.SALE_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(E.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'E',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.EMPLOYEE_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
S.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, SALE_SALES_MASTER M, HR_EMPLOYEES E, EC_VOUCHER
V, SALE_SALECONDITION S, HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = E.PERSON_ID
AND E.ID = M.EMPLOYEE_ID
AND M.PARTNER_ID IS NULL
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'VENCRE'
AND E.ID NOT IN (SELECT PP.EMPLOYEE_ID
FROM CHA_PARTNERS PP
WHERE NVL(PP.IS_LOCKED, 'N') = 'Y')
AND S.ID = M.SALE_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(E.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'E',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.EMPLOYEE_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
S.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, AREC_PURCHASES_ORDER_MASTER M, HR_EMPLOYEES E,
EC_VOUCHER V, BUY_BUYCONDITION S, HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = E.PERSON_ID
AND E.ID = M.EMPLOYEE_ID
AND M.PARTNER_ID IS NULL
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'ORDCOM'
AND E.ID NOT IN (SELECT PP.EMPLOYEE_ID
FROM CHA_PARTNERS PP
WHERE NVL(PP.IS_LOCKED, 'N') = 'Y')
AND S.ID = M.BUY_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(E.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'E',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.EMPLOYEE_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
B.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, AREC_DRUGSTORE_MASTER M,
--AREC_DRUGSTORE_MIDDLE MD,
HR_EMPLOYEES E, EC_VOUCHER V,
--BUY_BUYCONDITION S,
HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
--AND M.ID = MD.MASTER_ID
AND PEO.ID = E.PERSON_ID
--AND E.ID = MD.EMPLOYEE_ID
AND E.ID = B.EMPLOYEE_ID -- AGREGADO
AND B.PARTNER_ID IS NULL
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'FARMAC'
AND E.ID NOT IN (SELECT PP.EMPLOYEE_ID
FROM CHA_PARTNERS PP
WHERE NVL(PP.IS_LOCKED, 'N') = 'Y')
--AND S.ID = MD.BUY_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(E.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'E',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.EMPLOYEE_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
B.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, AREC_SALES_SERVICES_MASTER M,
--AREC_SALES_SERVICES_MIDDLE MD,
HR_EMPLOYEES E, EC_VOUCHER V,
--BUY_BUYCONDITION S,
HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
--AND M.ID = MD.MASTER_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = E.PERSON_ID
--AND E.ID = MD.EMPLOYEE_ID
AND E.ID = B.EMPLOYEE_ID -- AGREGADO
AND B.PARTNER_ID IS NULL
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'VENSER'
AND E.ID NOT IN (SELECT PP.EMPLOYEE_ID
FROM CHA_PARTNERS PP
WHERE NVL(PP.IS_LOCKED, 'N') = 'Y')
--AND S.ID = MD.BUY_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(E.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'E',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.EMPLOYEE_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
C.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, AREC_ESPSALES_EMP_MASTER M, HR_EMPLOYEES E,
EC_VOUCHER V, SALE_SALECONDITION C, HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = E.PERSON_ID
AND B.EMPLOYEE_ID = E.ID
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME = 'VENESE' -- VENTA ESPECIAL A EMPLEADOS
AND E.ID NOT IN (SELECT PP.EMPLOYEE_ID
FROM CHA_PARTNERS PP
WHERE NVL(PP.IS_LOCKED, 'N') = 'Y')
AND C.ID = M.SALE_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(E.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
UNION ALL
SELECT 'E',
PEO.PERSON_NAME ||' '||PEO.PERSON_LAST_NAME,
B.EMPLOYEE_ID,
-1,
B.TYPE_TRANS_ID,
B.TRANS_ID,
B.INSTALMENTS,
B.ID,
0,
B.BALANCE_OF_FEE,
B.BALANCE_OF_FEE,
0,
B.END_DATE,
S.INSTALMENTS
FROM SALE_VOUCHERS_BALANCE B, CHA_DEBCRE_NOTE_MASTER M, HR_EMPLOYEES E,
EC_VOUCHER V, SALE_SALECONDITION S, HR_PEOPLE PEO
WHERE M.ID = B.TRANS_ID
AND M.TRN_TYPE_ID = B.TYPE_TRANS_ID
AND PEO.ID = E.PERSON_ID
AND E.ID = M.EMPLOYEE_ID
AND M.PARTNER_ID IS NULL
AND V.ID = M.TRN_TYPE_ID
AND V.SHORT_NAME IN ('DEBCRE', 'DEBCON')
AND E.ID NOT IN (SELECT PP.EMPLOYEE_ID
FROM CHA_PARTNERS PP
WHERE NVL(PP.IS_LOCKED, 'N') = 'Y')
AND S.ID = M.SALE_CONDITION_ID
AND M.COMPANY_ID = pCompanyId
AND NVL(E.IS_LOCKED, 'N') != 'Y'
AND B.END_DATE BETWEEN pInitialDate AND pEndDate
AND NVL(B.INSTALMENTS, 0) > 0
AND NVL(B.BALANCE_OF_FEE, 0) > 0
ORDER BY 1, 2, 3, 4, 5, 6) X; ---COVID: WHERE X.TRANSACTION_TYPE_ID NOT IN (2,
7, 8, 14, 29, 18 ); --, EC_VOUCHER VOU WHERE VOU.SHORT_NAME NOT IN ('SOLCRE',
'VENCRE', 'ORDCOM');

CURSOR CUR_SUM_END_FINAN_PARTNERS(pMasterId NUMBER) IS


SELECT M.COMPANY_ID AS COMPANY_ID,
D.PARTNER_ID AS PARTNER_ID,
D.COMPANY_HOLDING_ID AS COMPANY_HOLDING_ID,
SUM(NVL(INTEREST_AMOUNT,0)) AS SUM_INTEREST_AMOUNT,
SUM(NVL(CAPITAL_AMOUNT,0)) AS SUM_CAPITAL_AMOUNT,
SUM(NVL(TOTAL_AMOUNT,0)) AS SUM_TOTAL_AMOUNT,
SUM(NVL(D.ADVERSE_BALANCE_AMOUNT, 0)) AS SUM_ADV_BALANCE_AMOUNT
FROM CHA_END_FINANCIAL_MONTH_DET D,
CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.ID = pMasterId
AND M.ID = D.MASTER_ID
AND D.EMPLOYEE_ID IS NULL
GROUP BY M.COMPANY_ID, D.PARTNER_ID, D.EMPLOYEE_ID, D.COMPANY_HOLDING_ID;

CURSOR CUR_SUM_END_FINAN_EMPLOYEES(pMasterId NUMBER) IS


SELECT M.COMPANY_ID AS COMPANY_ID,
D.EMPLOYEE_ID AS EMPLOYEE_ID,
D.COMPANY_HOLDING_ID AS COMPANY_HOLDING_ID,
SUM(NVL(INTEREST_AMOUNT,0)) AS SUM_INTEREST_AMOUNT,
SUM(NVL(CAPITAL_AMOUNT,0)) AS SUM_CAPITAL_AMOUNT,
SUM(NVL(TOTAL_AMOUNT,0)) AS SUM_TOTAL_AMOUNT,
SUM(NVL(D.ADVERSE_BALANCE_AMOUNT, 0)) AS SUM_ADV_BALANCE_AMOUNT
FROM CHA_END_FINANCIAL_MONTH_DET D,
CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.ID = pMasterId
AND M.ID = D.MASTER_ID
AND D.PARTNER_ID IS NULL
GROUP BY M.COMPANY_ID, D.PARTNER_ID, D.EMPLOYEE_ID, D.COMPANY_HOLDING_ID;

CURSOR CUR_FINAN_INTEREST_TAX(pMasterId NUMBER) IS


SELECT P.ID,
P.MASTER_ID,
P.PARTNER_ID,
P.EMPLOYEE_ID,
P.CAPITAL_AMOUNT,
P.INTEREST_AMOUNT,
P.INTEREST_TAX
FROM CHA_END_FINANCIALMONTH_PARTNER P
WHERE P.MASTER_ID = pMasterId
AND NVL(P.INTEREST_TAX, 0) > 0
ORDER BY ID;

PROCEDURE FP_HOLDING_ID(pTypeOperation IN VARCHAR2,


pPersonId IN NUMBER,
pHoldingId OUT NUMBER,
pMsg OUT VARCHAR2,
pError IN OUT BOOLEAN) IS
vMsgIn VARCHAR2(800);
eAlgunErrorIn EXCEPTION;
BEGIN
IF pTypeOperation = 'P' THEN
-- PARTNER --
BEGIN
SELECT E.COMPANY_HOLDING_ID
INTO pHoldingId
FROM HR_EMPLOYEES E
WHERE E.ID = (SELECT EMPLOYEE_ID
FROM CHA_PARTNERS P
WHERE P.ID = pPersonId);
EXCEPTION
WHEN NO_DATA_FOUND THEN
vMsgIn := 'No se ha encontrado socio id ('||TO_CHAR(pPersonId)||') en
busca holding';
RAISE eAlgunErrorIn;
WHEN OTHERS THEN
vMsgIn := 'Error busca socio id ('||TO_CHAR(pPersonId)||') holding. '||
SQLERRM;
RAISE eAlgunErrorIn;
END;
ELSIF pTypeOperation = 'E' THEN
-- EMPLOYEE --
BEGIN
SELECT E.COMPANY_HOLDING_ID
INTO pHoldingId
FROM HR_EMPLOYEES E
WHERE E.ID = pPersonId;
EXCEPTION
WHEN NO_DATA_FOUND THEN
vMsgIn := 'No se ha encontrado id ('||TO_CHAR(pPersonId)||') empleado en
busca holding';
RAISE eAlgunErrorIn;
WHEN OTHERS THEN
vMsgIn := 'Error busca empleado id ('||TO_CHAR(pPersonId)||') holding.
'||SQLERRM;
RAISE eAlgunErrorIn;
END;
ELSE
vMsg := 'Tipo persona no configurado para buscar holding';
RAISE eAlgunErrorIn;
END IF;
EXCEPTION
WHEN eAlgunErrorIn THEN
pHoldingId := NULL;
pMsg := vMsgIn;
pError := TRUE;
WHEN OTHERS THEN
pHoldingId := NULL;
pMsg := 'Error busca holding id. '||SQLERRM;
pError := TRUE;
END;

FUNCTION FP_TOTAL_VOUCHER(pTrnTypeId IN NUMBER,


pTrnId IN NUMBER) RETURN NUMBER IS
vReturn NUMBER(18,3) := 0;
vVoucherCod VARCHAR2(7);
vMsgIn VARCHAR2(800);
eAlgunErrorIn EXCEPTION;
BEGIN
BEGIN
SELECT SHORT_NAME
INTO vVoucherCod
FROM EC_VOUCHER V
WHERE V.ID = pTrnTypeId;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error busca voucher en totalVoucher. '||SQLERRM);
RETURN 0;
END;

IF vVoucherCod IN ('VENCRE', 'VENCON', '') THEN


-- PARA FACTURA VENTA --
SELECT NVL(TOTAL, 0)
INTO vReturn
FROM SALE_SALES_MASTER S
WHERE S.ID = pTrnId;
ELSIF vVoucherCod IN ('ORDCOM') THEN
-- PARA ORDEN DE COMPRA --
SELECT NVL(M.TOTAL_ORDER, 0)
INTO vReturn
FROM AREC_PURCHASES_ORDER_MASTER M
WHERE M.ID = pTrnId;
ELSIF vVoucherCod IN ('FARMAC') THEN
-- PARA FARMACIA --
SELECT NVL(M.TOTAL_AMOUNT, 0)
INTO vReturn
FROM AREC_DRUGSTORE_MASTER M
WHERE M.ID = pTrnId;
ELSIF vVoucherCod = 'SOLCRE' THEN
-- PARA CREDITOS --
SELECT NVL(AMOUNT_WITHDRAWN, 0)
INTO vReturn
FROM LOAN_CREDIT_APPLICATION M
WHERE M.ID = pTrnId;
ELSIF vVoucherCod = 'VENSER' THEN
-- PARA VENTA DE SERVICIOS --
SELECT NVL(M.TOTAL_AMOUNT, 0)
INTO vReturn
FROM AREC_SALES_SERVICES_MASTER M
WHERE M.ID = pTrnId;
ELSIF vVoucherCod = 'ACTASO' THEN
-- ACTIVIDADES POR ASOCIACION --
BEGIN
SELECT SUM(NVL(D.AMOUNT_OF_FEE, 0))
INTO vReturn
FROM AREC_ACTIVITIES_MASTER M,
AREC_ACTIVITIES_DET D
WHERE M.ID = D.MASTER_ID
AND M.ID = pTrnId
AND D.PARTNER_ID IN (SELECT DISTINCT NVL(B.PARTNER_ID, 0)
FROM SALE_VOUCHERS_BALANCE B
WHERE B.TRANS_ID = M.ID
AND B.TYPE_TRANS_ID = M.TRN_TYPE_ID
AND B.PARTNER_ID = D.PARTNER_ID
AND NVL(B.INSTALMENTS, 0) > 0);
EXCEPTION
WHEN OTHERS THEN
vReturn := 0;
END;
ELSIF vVoucherCod = 'VENESE' THEN
-- VENTA ESPECIAL A EMPLEADOS --
BEGIN
SELECT SUM(NVL(D.AMOUNT_OF_FEE, 0))
INTO vReturn
FROM AREC_ESPSALES_EMP_MASTER M,
AREC_ESPSALES_EMP_DET D
WHERE M.ID = D.MASTER_ID
AND M.ID = pTrnId
AND D.EMPLOYEE_ID IN (SELECT DISTINCT NVL(B.EMPLOYEE_ID, 0)
FROM SALE_VOUCHERS_BALANCE B
WHERE B.TRANS_ID = M.ID
AND B.TYPE_TRANS_ID = M.TRN_TYPE_ID
AND B.EMPLOYEE_ID = D.EMPLOYEE_ID
AND NVL(B.INSTALMENTS, 0) > 0);
EXCEPTION
WHEN OTHERS THEN
vReturn := 0;
END;
ELSE
DBMS_OUTPUT.PUT_LINE('No se ha codificado el tipo voucher '||vVoucherCod||'
en busca total voucher');
vReturn := 0;
END IF;

RETURN vReturn;
EXCEPTION
WHEN eAlgunErrorIn THEN
RETURN 0;
WHEN OTHERS THEN
RETURN 0;
END;

FUNCTION FP_BALANCE_OF_FEE(pTrnTypeId IN NUMBER,


pTrnId IN NUMBER) RETURN NUMBER IS
vType VARCHAR2(6);
vMsgIn VARCHAR2(800);
eAlgunErrorIn EXCEPTION;
vReturn NUMBER(18,3) := 0;
FUNCTION FP_VOUCHER_SHORT_NAME(pType IN NUMBER) RETURN VARCHAR2 IS
vShortName VARCHAR2(6);
BEGIN
SELECT C.SHORT_NAME
INTO vShortName
FROM EC_VOUCHER C
WHERE C.ID = pType;
RETURN vShortName;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;
BEGIN
vType := FP_VOUCHER_SHORT_NAME(pTrnTypeId);
IF LTRIM(RTRIM(vType)) IS NULL THEN
vMsgIn := 'Tipo de comprobante con id '||TO_CHAR(pTrnTypeId)||' inexistente o
con problemas';
RAISE eAlgunErrorIn;
END IF;
IF vType = 'SOLCRE' THEN
SELECT SUM(NVL(S.SHARE_BALANCE, 0))
INTO vReturn
FROM LOAN_PARTNER_SHARE S
WHERE S.TRN_ID = pTrnId
AND S.TRN_TYPE_ID = pTrnTypeId;
ELSE
SELECT SUM(NVL(B.BALANCE_OF_FEE, 0))
INTO vReturn
FROM SALE_VOUCHERS_BALANCE B
WHERE B.TYPE_TRANS_ID = pTrnTypeId
AND B.TRANS_ID = pTrnId
AND NVL(B.INSTALMENTS, 0) > 0;
END IF;
RETURN vReturn;
EXCEPTION
WHEN eAlgunErrorIn THEN
RETURN 0;
WHEN OTHERS THEN
RETURN 0;
END;

FUNCTION FP_PARTNER_CONTRIBUTION_CONF(pPartnerId IN NUMBER,


pContributionId IN NUMBER) RETURN NUMBER IS
vMsgIn VARCHAR2(800);
eAlgunErrorIn EXCEPTION;
vReturn NUMBER(18,3) := 0;
BEGIN
SELECT SUM(NVL(C.AMOUNT, 0))
INTO vReturn
FROM CHA_PARTNER_CONTRIBUTION_CONF C
WHERE C.PARTNER_ID = pPartnerId
AND C.CONTRIBUTION_ID = pContributionId
AND IN_FORCE = 'Y';
RETURN vReturn;
EXCEPTION
WHEN eAlgunErrorIn THEN
RETURN 0;
WHEN OTHERS THEN
RETURN 0;
END;

FUNCTION FP_GET_PAGO_ADEL_NO_TOT(pCompanyId IN NUMBER,


pPartnerId IN NUMBER,
pContributionId IN NUMBER,
pAmount IN NUMBER) RETURN NUMBER IS
vReturn NUMBER(22, 2) := 0;
BEGIN
SELECT SUM(NVL(D.TOTAL_VOUCHER, 0))
INTO vReturn
FROM AREC_RECEIPT_CHARGES_MASTER M,
AREC_RECEIPT_CHARGES_DET D
WHERE M.ID = D.MASTER_ID
AND M.COMPANY_ID = pCompanyId
AND M.PARTNER_ID = pPartnerId
AND D.CONTRIBUTION_ID = pContributionId
AND D.CONTRIBUTION_YEAR = vEndFinMonthYear
AND D.CONTRIBUTION_MONTH = vEndFinMonthMonth
HAVING SUM(NVL(D.TOTAL_VOUCHER, 0)) < NVL(pAmount, 0);

RETURN NVL(vReturn, 0);

EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;

PROCEDURE PP_INSERT_FINANCIALMONTH_DET(pEndFinMonthMId IN NUMBER,


pItemPartnerFinancialDet IN NUMBER,
pParnerId IN NUMBER,
pEmployeeId IN NUMBER,
pCompanyHoldingId IN NUMBER,
pType IN VARCHAR2,
pContributionId IN NUMBER,
pBalanceTypeTransId IN NUMBER,
pBalanceTransId IN NUMBER,
pBalanceInstalments IN NUMBER,
pBalanceId IN NUMBER,
pBalanceEndDate IN DATE,
pInterestAmt IN NUMBER,
pBalanceCapitalAmt IN NUMBER,
pBalanceOfFee IN NUMBER,
pUserExeId IN NUMBER,
pMsg OUT VARCHAR2,
pError IN OUT BOOLEAN)
IS
vMsgIn VARCHAR2(800);
eAlgunErrorIn EXCEPTION;
BEGIN
INSERT INTO CHA_END_FINANCIALMONTH_DET(ID, MASTER_ID, ITEM,
PARTNER_ID, EMPLOYEE_ID,
COMPANY_HOLDING_ID,
FINANCIAL_TYPE, CONTRIBUTION_ID,
TRN_TYPE_ID,
TRN_ID, INSTALMENTS, BALANCE_ID,
END_DATE, INTEREST_AMOUNT,
CAPITAL_AMOUNT,
TOTAL_AMOUNT, USER_INS, START_DATE,
STATUS, STATUS_DATE)
VALUES(SEQ_CHA_END_FINANCIALMONTH_DET.NEXTVAL, pEndFinMonthMId,
pItemPartnerFinancialDet,
pParnerId, pEmployeeId, pCompanyHoldingId,
pType, pContributionId, pBalanceTypeTransId,
pBalanceTransId, pBalanceInstalments, pBalanceId,
pBalanceEndDate, pInterestAmt, pBalanceCapitalAmt,
pBalanceOfFee, pUserExeId, cSysdate,
'P', cSysdate);
EXCEPTION
WHEN eAlgunErrorIn THEN
pMsg := vMsgIn;
pError := TRUE;
WHEN OTHERS THEN
pMsg := 'Error Insert Detalle '||SQLERRM;
pError := TRUE;
END;

----------
-- MAIN --
----------
BEGIN
BEGIN
SELECT ID
INTO vUserExeId
FROM EC_USERS U
WHERE U.LOGIN = USER;
EXCEPTION
WHEN OTHERS THEN
vUserExeId := 1;
END;

DECLARE
vStatusCierre VARCHAR2(1) := 'A';
BEGIN
SELECT E.ID,
E.END_NUMBER,
TRUNC(E.INITIAL_DATE),
TO_DATE(TO_CHAR(E.END_DATE, 'DD/MM/YYYY')||' 23:59:59', 'DD/MM/YYYY
HH24:MI:SS'),
E.END_YEAR,
E.END_MONTH,
E.STATUS
INTO vEndFinancialId,
vEndNumber,
vFecIni,
vFecFin,
vEndFinMonthYear,
vEndFinMonthMonth,
vStatusCierre
FROM CHA_END_FINANCIAL_MONTH E
WHERE E.COMPANY_ID = pCompanyId
AND E.STATUS IN ('A', 'P');

IF vStatusCierre = 'P' THEN


-- BORRAMOS EL DETALLE POR SOCIO/EMPLEADO --
DELETE FROM CHA_END_FINANCIALMONTH_PARTNER P
WHERE P.MASTER_ID = (SELECT ID
FROM CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.END_FINALCIAL_ID = vEndFinancialId);

-- BORRAMOS EL DETALLE --
DELETE FROM CHA_END_FINANCIAL_MONTH_DET D
WHERE D.MASTER_ID = (SELECT ID
FROM CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.END_FINALCIAL_ID = vEndFinancialId);

-- BORRAMOS EL DETALLE PARA REPORTE HOLDING Y EMPLEADOS --


DELETE FROM CHA_END_FINANCIALMONTH_DET D
WHERE D.MASTER_ID = (SELECT ID
FROM CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.END_FINALCIAL_ID = vEndFinancialId);

-- BORRAMOS EL DETALLE INTERES IVA PARA FACTURAS


DELETE FROM CHA_END_FINANCIAL_INTEREST_TAX TAX
WHERE TAX.FINANCIAL_MONTH_MASTER_ID = (SELECT ID
FROM CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.END_FINALCIAL_ID = vEndFinancialId);

-- BORRAMOS LA CABECERA --
DELETE FROM CHA_END_FINANCIAL_MONTH_MASTER M WHERE M.END_FINALCIAL_ID =
vEndFinancialId;

END IF;

EXCEPTION
WHEN NO_DATA_FOUND THEN
vMsg := 'No existen datos configurados para el cierre del mes';
RAISE eAlgunError;
WHEN TOO_MANY_ROWS THEN
vMsg := 'Existen varios registros activos/procesados pendientes de cierre,
favor verificar para luego generar cierre pendiente';
RAISE eAlgunError;
WHEN OTHERS THEN
vMsg := 'Error busca cierre activo. '||SQLERRM;
RAISE eAlgunError;
END;

DECLARE
vCantPend NUMBER(10) := 0;
eAlgunErrorIn EXCEPTION;
BEGIN
SELECT COUNT(1)
INTO vCantPend
FROM CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.COMPANY_ID = pCompanyId
AND M.STATUS = 'PEND';

IF NVL(vCantPend, 0) > 0 THEN


vMsg := 'Existen cierres de mes en estado pendiente, favor verificar';
RAISE eAlgunErrorIn;
END IF;

EXCEPTION
WHEN eAlgunErrorIn THEN
RAISE eAlgunError;
WHEN OTHERS THEN
vMsg := 'Error valida cierres pendientes. '||SQLERRM;
RAISE eAlgunError;
END;

-- VALIDAR SALDO ROJO --


DECLARE
vCantConf NUMBER(10) := 0;
eAlgunErrorIn EXCEPTION;
BEGIN
SELECT COUNT(1)
INTO vCantConf
FROM CHA_END_ADVERSEBALANCE_MASTER M
WHERE M.COMPANY_ID = pCompanyId
AND M.END_FINALCIAL_ID = vEndFinancialId
AND M.STATUS = 'CONF';

IF NVL(vCantConf, 0) != 1 THEN
vMsg := 'Debe configurar el saldo rojo para el cierre numero '||
TO_CHAR(vEndNumber)||' y confirmarlo';
RAISE eAlgunErrorIn;
END IF;
EXCEPTION
WHEN eAlgunErrorIn THEN
RAISE eAlgunError;
WHEN OTHERS THEN
vMsg := 'Error valida saldo rojo. '||SQLERRM;
RAISE eAlgunError;
END;

DBMS_OUTPUT.PUT_LINE('vFecIni = '||TO_CHAR(vFecIni, 'DD/MM/YYYY HH24:MI:SS'));


DBMS_OUTPUT.PUT_LINE('vFecFin = '||TO_CHAR(vFecFin, 'DD/MM/YYYY HH24:MI:SS'));

FOR REG IN CUR_VOUCHERS(vFecIni, vFecFin) LOOP


IF primerRegistro THEN
DECLARE
vComment VARCHAR2(500);
BEGIN
vComment := 'PROCESO EJECUTADO EN FECHA '||TO_CHAR(SYSDATE, 'DD/MM/YYYY
HH24:MI:SS');
vComment := vComment||' CON CIERRE NUMERO='||TO_CHAR(vEndNumber)||', FECHA
INICIO='||TO_CHAR(vFecIni, 'DD/MM/YYYY');
vComment := vComment||', FECHA FIN='||TO_CHAR(vFecFin, 'DD/MM/YYYY');

SELECT SEQ_CHA_ENDFINAMONTH_MASTER.NEXTVAL
INTO vEndFinMonthMId
FROM DUAL;

INSERT INTO CHA_END_FINANCIAL_MONTH_MASTER(ID, COMPANY_ID,


END_FINALCIAL_ID,
STATUS, COMMENTS, STATUS_DATE,
USER_INS, START_DATE)
VALUES(vEndFinMonthMId, pCompanyId, vEndFinancialId,
'PEND', vComment, cSysdate,
vUserExeId, cSysdate);
EXCEPTION
WHEN OTHERS THEN
vMsg := 'Error insertando cabecera de cierre. '||SQLERRM;
RAISE eAlgunError;
END;
-- CONFIGURAMOS PARA QUE NO VUELVA A INSERTAR LA CABECERA --
primerRegistro := FALSE;
END IF;

FP_HOLDING_ID(REG.TYPE_OPERATION, REG.PARTNER_ID, vHoldingId, vMsg, error);


IF error THEN
RAISE eAlgunError;
END IF;

BEGIN
vItem := NVL(vItem, 0) + 1;
SELECT SEQ_CHA_ENDFINAMONTH_DET.NEXTVAL
INTO vEndFinMonthDId
FROM DUAL;

IF REG.TYPE_OPERATION = 'P' THEN


vPartnerId := REG.PARTNER_ID;
vEmployeeId := NULL;
ELSIF REG.TYPE_OPERATION = 'E' THEN
vPartnerId := NULL;
vEmployeeId := REG.PARTNER_ID;
END IF;

vTotalVoucher := 0;
vBalanceOfFee := 0;
vContributionAmount := 0;
IF REG.TRANSACTION_TYPE_ID != -1 AND REG.CONTRIBUTION_ID != -1 THEN
-- SECCION SALDO ROJO --
vTotalVoucher := 0;
vBalanceOfFee := 0;
vContributionAmount := 0;
ELSIF REG.TRANSACTION_TYPE_ID != -1 THEN
-- BUSCA TOTAL VOUCHER --
vTotalVoucher := FP_TOTAL_VOUCHER(REG.TRANSACTION_TYPE_ID,
REG.TRANSACTION_ID);
vBalanceOfFee := FP_BALANCE_OF_FEE(REG.TRANSACTION_TYPE_ID,
REG.TRANSACTION_ID);
vContributionAmount := 0;
ELSIF REG.CONTRIBUTION_ID != -1 THEN
-- SECCOIN APORTES --
vTotalVoucher := 0;
vBalanceOfFee := 0;
vContributionAmount := FP_PARTNER_CONTRIBUTION_CONF(REG.PARTNER_ID,
REG.CONTRIBUTION_ID);
vContributionAmount := vContributionAmount -
FP_GET_PAGO_ADEL_NO_TOT(pCompanyId, REG.PARTNER_ID, REG.CONTRIBUTION_ID,
vContributionAmount);
END IF;

INSERT INTO CHA_END_FINANCIAL_MONTH_DET(ID, MASTER_ID, ITEM,


TRN_TYPE_ID,
TRN_ID,
PARTNER_ID, EMPLOYEE_ID,
INSTALMENTS,
BALANCE_ID,
CONTRIBUTION_ID,
END_DATE,
INTEREST_AMOUNT, CAPITAL_AMOUNT, TOTAL_AMOUNT, USER_INS, START_DATE,
STATUS, STATUS_DATE,
COMPANY_HOLDING_ID, TOTAL_VOUCHER, BALANCE_OF_FEE,
INITIAL_INSTALMENTS,
CONTRIBUTION_AMOUNT,
ADVERSE_BALANCE_AMOUNT)
VALUES(vEndFinMonthDId, vEndFinMonthMId, vItem,
DECODE(REG.TRANSACTION_TYPE_ID, -1, NULL, REG.TRANSACTION_TYPE_ID),
DECODE(REG.TRANSACTION_ID, -1, NULL, REG.TRANSACTION_ID),
vPartnerId, vEmployeeId,
DECODE(REG.INSTALMENT_NUMBER, -1, NULL, REG.INSTALMENT_NUMBER),
DECODE(REG.INSTALMENT_ID, -1, NULL, REG.INSTALMENT_ID),
DECODE(REG.CONTRIBUTION_ID, -1, NULL, REG.CONTRIBUTION_ID),
REG.INSTALMENT_DATE,
REG.INTEREST_AMOUNT, REG.CAPIAL_AMOUNT, REG.BALANCE_AMOUNT,
vUserExeId, cSysdate, 'P', cSysdate,
vHoldingId, vTotalVoucher, vBalanceOfFee, REG.INITIAL_INSTALMENT,
vContributionAmount,
REG.ADVERSE_BALANCE_AMOUNT);
EXCEPTION
WHEN OTHERS THEN
vMsg := 'Error insertando detalle de cierre. '||SQLERRM;
RAISE eAlgunError;
END;

END LOOP;

vItemPartner := 0;
-- VERIFICAR LA SIGUIENTE VARIABLE Y RENOMBRARLA PARA EL LOOP ANTERIOR
vContributionAmount := 0;
FOR RSUM IN CUR_SUM_END_FINAN_PARTNERS(vEndFinMonthMId) LOOP
vSalario := 0;
BEGIN
SELECT NVL(H.BASIC_SALARY, 0)
INTO vSalario
FROM HR_EMPLOYEES H
WHERE H.ID = (SELECT P.EMPLOYEE_ID
FROM CHA_PARTNERS P
WHERE P.COMPANY_ID = RSUM.COMPANY_ID
AND P.ID = RSUM.PARTNER_ID);
EXCEPTION
WHEN OTHERS THEN
vSalario := 0;
END;

vSumSalesBalance := 0;
BEGIN
SELECT SUM(NVL(V.BALANCE_OF_FEE, 0))
INTO vSumSalesBalance
FROM SALE_VOUCHERS_BALANCE V
WHERE V.PARTNER_ID = RSUM.PARTNER_ID
AND NVL(V.INSTALMENTS, 0) > 0
AND NVL(V.BALANCE_OF_FEE, 0) > 0;
EXCEPTION
WHEN OTHERS THEN
vSumSalesBalance := 0;
END;
vSumLoanBalance := 0; vSumLoanCapitalBalance:= 0;
BEGIN
SELECT SUM(NVL(S.SHARE_BALANCE, 0)),
SUM(NVL(S.CAPITAL_BALANCE, 0)),
SUM(NVL(S.SHARE_INTEREST_BALANCE, 0))
INTO vSumLoanBalance,
vSumLoanCapitalBalance,
vSumLoanInterestBalance
FROM LOAN_PARTNER_SHARE S
WHERE S.PARTNER_ID = RSUM.PARTNER_ID
AND NVL(S.SHARE_BALANCE, 0) > 0;
EXCEPTION
WHEN OTHERS THEN
vSumLoanBalance := 0;
vSumLoanCapitalBalance := 0;
vSumLoanInterestBalance := 0;
END;

vTotalContribution := 0;
BEGIN
SELECT SUM(NVL(C.TOTAL_AMOUNT,0))
INTO vTotalContribution
FROM CHA_PARTNER_CONTRIBUTIONS C
WHERE C.PARTNER_ID = RSUM.PARTNER_ID
AND C.CONTRIBUTION_ID IN (SELECT A.ID
FROM CHA_CONTRIBUTION_CONF A
WHERE A.COMPANY_ID = RSUM.COMPANY_ID
AND A.COD IN ('APORT', 'APOEX')); -- SE AGREGA
EXTRAORDINARIO --
EXCEPTION
WHEN OTHERS THEN
vTotalContribution := 0;
END;

vTotalSocialContribution := 0;
BEGIN
SELECT C.TOTAL_AMOUNT
INTO vTotalSocialContribution
FROM CHA_PARTNER_CONTRIBUTIONS C
WHERE C.PARTNER_ID = RSUM.PARTNER_ID
AND C.CONTRIBUTION_ID = (SELECT A.ID
FROM CHA_CONTRIBUTION_CONF A
WHERE A.COMPANY_ID = RSUM.COMPANY_ID
AND A.COD = 'CUOSO');
EXCEPTION
WHEN OTHERS THEN
vTotalSocialContribution := 0;
END;

vTotalMantenaiceClub := 0;
BEGIN
SELECT C.TOTAL_AMOUNT
INTO vTotalMantenaiceClub
FROM CHA_PARTNER_CONTRIBUTIONS C
WHERE C.PARTNER_ID = RSUM.PARTNER_ID
AND C.COMPANY_ID = RSUM.COMPANY_ID
AND C.CONTRIBUTION_ID = (SELECT A.ID
FROM CHA_CONTRIBUTION_CONF A
WHERE A.COMPANY_ID = RSUM.COMPANY_ID
AND A.COD = 'MCSOC');
EXCEPTION
WHEN OTHERS THEN
vTotalMantenaiceClub := 0;
END;

vContributionAmount := 0;
BEGIN
SELECT NVL(D.CONTRIBUTION_AMOUNT, 0)
INTO vContributionAmount
FROM CHA_END_FINANCIAL_MONTH_DET D
WHERE D.MASTER_ID = vEndFinMonthMId
AND D.PARTNER_ID = RSUM.PARTNER_ID
AND D.CONTRIBUTION_ID = (SELECT A.ID
FROM CHA_CONTRIBUTION_CONF A
WHERE A.COMPANY_ID = RSUM.COMPANY_ID
AND A.COD = 'APORT');
EXCEPTION
WHEN OTHERS THEN
vContributionAmount := 0;
END;

vSocialContributionAmount := 0;
BEGIN
SELECT NVL(D.CONTRIBUTION_AMOUNT, 0)
INTO vSocialContributionAmount
FROM CHA_END_FINANCIAL_MONTH_DET D
WHERE D.MASTER_ID = vEndFinMonthMId
AND D.PARTNER_ID = RSUM.PARTNER_ID
AND D.CONTRIBUTION_ID = (SELECT A.ID
FROM CHA_CONTRIBUTION_CONF A
WHERE A.COMPANY_ID = RSUM.COMPANY_ID
AND A.COD = 'CUOSO');
EXCEPTION
WHEN OTHERS THEN
vSocialContributionAmount := 0;
END;

vMantenaiceClubAmount := 0;
BEGIN
SELECT NVL(D.CONTRIBUTION_AMOUNT, 0)
INTO vMantenaiceClubAmount
FROM CHA_END_FINANCIAL_MONTH_DET D
WHERE D.MASTER_ID = vEndFinMonthMId
AND D.PARTNER_ID = RSUM.PARTNER_ID
AND D.CONTRIBUTION_ID = (SELECT A.ID
FROM CHA_CONTRIBUTION_CONF A
WHERE A.COMPANY_ID = RSUM.COMPANY_ID
AND A.COD = 'MCSOC');
EXCEPTION
WHEN OTHERS THEN
vMantenaiceClubAmount := 0;
END;

vAdverseBalance := 0;
vInterestAdverseBalance := 0;
vCurrentAdverseBalance := 0;
BEGIN
vAdverseBalance := NVL(RSUM.SUM_ADV_BALANCE_AMOUNT, 0);
vInterestAdverseBalance := 0;-- ROUND(NVL(RSUM.SUM_ADV_BALANCE_AMOUNT, 0) *
NVL(cPorCierreSalRojo,0) / 100);
-- ya se carga por factura,
-- cuando se imprima facturas
-- por sistema deber� generarse
-- automaticamente la factura.
vCurrentAdverseBalance := NVL(vAdverseBalance, 0) +
NVL(vInterestAdverseBalance, 0);
EXCEPTION
WHEN OTHERS THEN
vInterestAdverseBalance := 0;
vCurrentAdverseBalance := 0;
END;

vInteresTax := 0;
BEGIN
IF NVL(RSUM.SUM_INTEREST_AMOUNT, 0) > 0 THEN
vInteresTax := ROUND(NVL(RSUM.SUM_INTEREST_AMOUNT, 0) *
NVL(cPorCierreIva,0) / 100);
ELSE
vInteresTax := NVL(RSUM.SUM_INTEREST_AMOUNT, 0);
END IF;
EXCEPTION
WHEN OTHERS THEN
vInteresTax := NVL(RSUM.SUM_INTEREST_AMOUNT, 0);
END;

BEGIN
SELECT SUM(NVL(D.TOTAL_AMOUNT, 0))
INTO vCurrentLoanBalance
FROM CHA_END_FINANCIAL_MONTH_DET D
WHERE D.MASTER_ID = vEndFinMonthMId
AND D.PARTNER_ID = RSUM.PARTNER_ID
AND D.TRN_TYPE_ID = (SELECT ID
FROM EC_VOUCHER V
WHERE V.COMPANY_ID = RSUM.COMPANY_ID
AND V.SHORT_NAME = 'SOLCRE');
EXCEPTION
WHEN OTHERS THEN
vCurrentLoanBalance := 0;
END;

vCurrentSalesBalance := 0;
BEGIN
SELECT SUM(NVL(D.TOTAL_AMOUNT, 0))
INTO vCurrentSalesBalance
FROM CHA_END_FINANCIAL_MONTH_DET D
WHERE D.MASTER_ID = vEndFinMonthMId
AND D.PARTNER_ID = RSUM.PARTNER_ID
AND D.TRN_TYPE_ID NOT IN (SELECT ID
FROM EC_VOUCHER V
WHERE V.COMPANY_ID = RSUM.COMPANY_ID
AND V.SHORT_NAME = 'SOLCRE');
EXCEPTION
WHEN OTHERS THEN
vCurrentSalesBalance := 0;
END;

vTotalReceiptCred := 0;
BEGIN
SELECT SUM(NVL(C.TOTAL, 0))
INTO vTotalReceiptCred
FROM AREC_RECEIPT_CHARGES_MASTER C
WHERE C.PARTNER_ID = RSUM.PARTNER_ID
AND C.RECEIPT_TYPE = 'CRED'
AND C.END_FINALCIAL_ID IS NULL
AND C.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin;
EXCEPTION
WHEN OTHERS THEN
vTotalReceiptCred := 0;
END;

vTotalReceiptFact := 0;
BEGIN
SELECT SUM(NVL(C.TOTAL, 0))
INTO vTotalReceiptFact
FROM AREC_RECEIPT_CHARGES_MASTER C
WHERE C.PARTNER_ID = RSUM.PARTNER_ID
AND C.RECEIPT_TYPE = 'FACT'
AND C.END_FINALCIAL_ID IS NULL
AND C.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin;
EXCEPTION
WHEN OTHERS THEN
vTotalReceiptFact := 0;
END;

vTotalReceiptFosa := 0;
BEGIN
SELECT SUM(NVL(C.TOTAL, 0))
INTO vTotalReceiptFosa
FROM AREC_RECEIPT_CHARGES_MASTER C
WHERE C.PARTNER_ID = RSUM.PARTNER_ID
AND C.RECEIPT_TYPE = 'FOSA'
AND C.END_FINALCIAL_ID IS NULL
AND C.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin;
EXCEPTION
WHEN OTHERS THEN
vTotalReceiptFosa := 0;
END;

vItemPartner := NVL(vItemPartner, 0) + 1;
INSERT INTO CHA_END_FINANCIALMONTH_PARTNER(ID, MASTER_ID, ITEM,
PARTNER_ID, EMPLOYEE_ID,
COMPANY_HOLDING_ID,
CAPITAL_AMOUNT, INTEREST_AMOUNT,
INTEREST_TAX,
CONTRIBUTION_AMOUNT,
SOCIAL_CONTRIBUTION_AMOUNT, MANTENAICE_CLUB_AMOUNT,
TOTAL_CONTRIBUTION,
TOTAL_SOCIAL_CONTRIBUTION, TOTAL_MANTENAICE_CLUB,
TOTAL_AMOUNT,
TOTAL_LOAN_CAPITAL_BALANCE, TOTAL_LOAN_INTEREST_BALANCE,
TOTAL_LOAN_BALANCE,
CURRENT_LOAN_BALANCE, TOTAL_SALES_BALANCE,
CURRENT_SALES_BALANCE,
LAST_ADVERSE_BALANCE_AMOUNT, ADVERSE_BALANCE_INTEREST,
ADVERSE_BALANCE_AMOUNT,
TOTAL_COLLECT, USER_INS,
TOTAL_RECEIPT_CRED,
TOTAL_RECEIPT_FACT, TOTAL_RECEIPT_FOSA,
START_DATE, STATUS)
VALUES(SEQ_CHA_ENDFINANCMONTH_PARTNER.NEXTVAL, vEndFinMonthMId, vItemPartner,
RSUM.PARTNER_ID, NULL, RSUM.COMPANY_HOLDING_ID,
RSUM.SUM_CAPITAL_AMOUNT, RSUM.SUM_INTEREST_AMOUNT, NVL(vInteresTax, 0),
NVL(vContributionAmount, 0), NVL(vSocialContributionAmount, 0),
NVL(vMantenaiceClubAmount, 0),
NVL(vTotalContribution, 0), NVL(vTotalSocialContribution, 0),
NVL(vTotalMantenaiceClub, 0),
NVL(RSUM.SUM_TOTAL_AMOUNT, 0) - NVL(RSUM.SUM_INTEREST_AMOUNT, 0),
NVL(vSumLoanCapitalBalance, 0), NVL(vSumLoanInterestBalance, 0),
NVL(vSumLoanBalance, 0), NVL(vCurrentLoanBalance, 0),
NVL(vSumSalesBalance, 0),
NVL(vCurrentSalesBalance, 0), NVL(vAdverseBalance, 0),
NVL(vInterestAdverseBalance, 0),
NVL(vCurrentAdverseBalance, 0), 0, vUserExeId,
NVL(vTotalReceiptCred, 0), NVL(vTotalReceiptFact, 0),
NVL(vTotalReceiptFosa, 0),
cSysdate, 'P');
END LOOP;

vItemEmployee := 0;
FOR RSUM IN CUR_SUM_END_FINAN_EMPLOYEES(vEndFinMonthMId) LOOP
vSalario := 0;
BEGIN
SELECT NVL(H.BASIC_SALARY, 0)
INTO vSalario
FROM HR_EMPLOYEES H
WHERE H.ID = RSUM.EMPLOYEE_ID;
EXCEPTION
WHEN OTHERS THEN
vSalario := 0;
END;

vSumSalesBalance := 0;
BEGIN
SELECT SUM(NVL(V.BALANCE_OF_FEE, 0))
INTO vSumSalesBalance
FROM SALE_VOUCHERS_BALANCE V
WHERE V.EMPLOYEE_ID = RSUM.EMPLOYEE_ID
AND NVL(V.INSTALMENTS, 0) > 0
AND NVL(V.BALANCE_OF_FEE, 0) > 0;
EXCEPTION
WHEN OTHERS THEN
vSumSalesBalance := 0;
END;

vTotalReceiptCred := 0;
BEGIN
SELECT SUM(NVL(C.TOTAL, 0))
INTO vTotalReceiptCred
FROM AREC_RECEIPT_CHARGES_MASTER C
WHERE C.EMPLOYEE_ID = RSUM.EMPLOYEE_ID
AND C.RECEIPT_TYPE = 'CRED'
AND C.END_FINALCIAL_ID IS NULL
AND C.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin;
EXCEPTION
WHEN OTHERS THEN
vTotalReceiptCred := 0;
END;

vTotalReceiptFact := 0;
BEGIN
SELECT SUM(NVL(C.TOTAL, 0))
INTO vTotalReceiptFact
FROM AREC_RECEIPT_CHARGES_MASTER C
WHERE C.EMPLOYEE_ID = RSUM.EMPLOYEE_ID
AND C.RECEIPT_TYPE = 'FACT'
AND C.END_FINALCIAL_ID IS NULL
AND C.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin;
EXCEPTION
WHEN OTHERS THEN
vTotalReceiptFact := 0;
END;

vTotalReceiptFosa := 0;
BEGIN
SELECT SUM(NVL(C.TOTAL, 0))
INTO vTotalReceiptFosa
FROM AREC_RECEIPT_CHARGES_MASTER C
WHERE C.EMPLOYEE_ID = RSUM.EMPLOYEE_ID
AND C.RECEIPT_TYPE = 'FOSA'
AND C.END_FINALCIAL_ID IS NULL
AND C.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin;
EXCEPTION
WHEN OTHERS THEN
vTotalReceiptFosa := 0;
END;

vItemEmployee := NVL(vItemEmployee, 0) + 1;
INSERT INTO CHA_END_FINANCIALMONTH_PARTNER(ID, MASTER_ID, ITEM, PARTNER_ID,
EMPLOYEE_ID,
INTEREST_AMOUNT, CAPITAL_AMOUNT,
TOTAL_AMOUNT,
TOTAL_COLLECT,
CURRENT_SALES_BALANCE,
TOTAL_LOAN_BALANCE,
TOTAL_SALES_BALANCE,
USER_INS, START_DATE, STATUS,
TOTAL_CONTRIBUTION,
TOTAL_SOCIAL_CONTRIBUTION,
TOTAL_MANTENAICE_CLUB,
COMPANY_HOLDING_ID,
ADVERSE_BALANCE_AMOUNT,
TOTAL_RECEIPT_CRED,
TOTAL_RECEIPT_FACT, TOTAL_RECEIPT_FOSA)
VALUES(SEQ_CHA_ENDFINANCMONTH_PARTNER.NEXTVAL, vEndFinMonthMId, vItemEmployee,
NULL, RSUM.EMPLOYEE_ID,
RSUM.SUM_INTEREST_AMOUNT, RSUM.SUM_CAPITAL_AMOUNT,
RSUM.SUM_TOTAL_AMOUNT,
RSUM.SUM_CAPITAL_AMOUNT, RSUM.SUM_CAPITAL_AMOUNT,
0, NVL(vSumSalesBalance, 0),
vUserExeId, cSysdate, 'P',
0, 0,
0,
RSUM.COMPANY_HOLDING_ID, RSUM.SUM_ADV_BALANCE_AMOUNT,
NVL(vTotalReceiptCred, 0), NVL(vTotalReceiptFact, 0),
NVL(vTotalReceiptFosa, 0));
END LOOP;

---------------------------------------
--- Para el reporte de conciliacion ---
---------------------------------------
vItemPartnerFinancialDet := 0;
FOR RSUM IN (SELECT DISTINCT PARTNER_ID, COMPANY_HOLDING_ID
FROM CHA_END_FINANCIAL_MONTH_DET D,
CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.ID = vEndFinMonthMId
AND M.ID = D.MASTER_ID
AND D.EMPLOYEE_ID IS NULL) LOOP
-- Partner Facturas -- BRUNO
FOR DET IN (SELECT V.ID AS BALANCE_ID,
V.TYPE_TRANS_ID AS BALANCE_TYPE_TRANS_ID,
V.TRANS_ID AS BALANCE_TRANS_ID,
V.INSTALMENTS AS BALANCE_INSTALMENTS,
V.END_DATE AS BALANCE_END_DATE,
--NVL(V.AMOUNT_OF_FEE, 0) AS BALANCE_OF_FEE --
V.BALANCE_OF_FEE
NVL(V.BALANCE_OF_FEE, 0) AS BALANCE_OF_FEE
FROM SALE_VOUCHERS_BALANCE V
WHERE V.PARTNER_ID = RSUM.PARTNER_ID
AND NVL(V.INSTALMENTS, 0) > 0
AND NVL(V.BALANCE_OF_FEE, 0) > 0) LOOP
--AND V.END_DATE >= vFecIni) LOOP
vItemPartnerFinancialDet := NVL(vItemPartnerFinancialDet, 0) + 1;
PP_INSERT_FINANCIALMONTH_DET(vEndFinMonthMId, vItemPartnerFinancialDet,
RSUM.PARTNER_ID, NULL, RSUM.COMPANY_HOLDING_ID,
'SLPAR', NULL, DET.BALANCE_TYPE_TRANS_ID,
DET.BALANCE_TRANS_ID, DET.BALANCE_INSTALMENTS, DET.BALANCE_ID,
DET.BALANCE_END_DATE, 0, DET.BALANCE_OF_FEE,
DET.BALANCE_OF_FEE, vUserExeId, vMsg, error);
IF error THEN
RAISE eAlgunError;
END IF;
END LOOP;

-- Partner Prestamos --
FOR DET IN (SELECT V.ID AS BALANCE_ID,
V.TRN_TYPE_ID AS BALANCE_TYPE_TRANS_ID,
V.TRN_ID AS BALANCE_TRANS_ID,
V.SHARE_NUMBER AS BALANCE_INSTALMENTS,
V.SHARE_DATE AS BALANCE_END_DATE,
--NVL(V.SHARE_INTEREST_AMOUNT, 0) AS
BALANCE_INTEREST_BALANCE, --V.SHARE_INTEREST_BALANCE
--NVL(V.CAPITAL_AMOUNT, 0) AS BALANCE_CAPITAL_BALANCE, --
V.CAPITAL_BALANCE
--NVL(V.SHARE_AMOUNT, 0) AS BALANCE_OF_FEE --V.SHARE_BALANCE
NVL(V.SHARE_INTEREST_BALANCE, 0) AS
BALANCE_INTEREST_BALANCE,
NVL(V.CAPITAL_BALANCE, 0) AS BALANCE_CAPITAL_BALANCE,
NVL(V.SHARE_BALANCE, 0) AS BALANCE_OF_FEE
FROM LOAN_PARTNER_SHARE V
WHERE V.PARTNER_ID = RSUM.PARTNER_ID
AND NVL(V.SHARE_NUMBER, 0) > 0
AND NVL(V.SHARE_BALANCE, 0) > 0) LOOP
--AND V.SHARE_DATE >= vFecIni) LOOP
vItemPartnerFinancialDet := NVL(vItemPartnerFinancialDet, 0) + 1;
PP_INSERT_FINANCIALMONTH_DET(vEndFinMonthMId, vItemPartnerFinancialDet,
RSUM.PARTNER_ID, NULL, RSUM.COMPANY_HOLDING_ID,
'LNPAR', NULL, DET.BALANCE_TYPE_TRANS_ID,
DET.BALANCE_TRANS_ID, DET.BALANCE_INSTALMENTS, DET.BALANCE_ID,
DET.BALANCE_END_DATE, DET.BALANCE_INTEREST_BALANCE,
DET.BALANCE_CAPITAL_BALANCE,
DET.BALANCE_OF_FEE, vUserExeId, vMsg, error);
IF error THEN
RAISE eAlgunError;
END IF;
END LOOP;
END LOOP;

FOR RSUM IN (SELECT DISTINCT EMPLOYEE_ID, COMPANY_HOLDING_ID


FROM CHA_END_FINANCIAL_MONTH_DET D,
CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.ID = vEndFinMonthMId
AND M.ID = D.MASTER_ID
AND D.PARTNER_ID IS NULL) LOOP
-- Employee Facturas --
FOR DET IN (SELECT V.ID AS BALANCE_ID,
V.TYPE_TRANS_ID AS BALANCE_TYPE_TRANS_ID,
V.TRANS_ID AS BALANCE_TRANS_ID,
V.INSTALMENTS AS BALANCE_INSTALMENTS,
V.END_DATE AS BALANCE_END_DATE,
--NVL(V.AMOUNT_OF_FEE, 0) AS BALANCE_OF_FEE --
V.BALANCE_OF_FEE
NVL(V.BALANCE_OF_FEE, 0) AS BALANCE_OF_FEE
FROM SALE_VOUCHERS_BALANCE V
WHERE V.EMPLOYEE_ID = RSUM.EMPLOYEE_ID
AND NVL(V.INSTALMENTS, 0) > 0
AND NVL(V.BALANCE_OF_FEE, 0) > 0) LOOP
--AND V.END_DATE >= vFecIni) LOOP
vItemPartnerFinancialDet := NVL(vItemPartnerFinancialDet, 0) + 1;
PP_INSERT_FINANCIALMONTH_DET(vEndFinMonthMId, vItemPartnerFinancialDet,
NULL, RSUM.EMPLOYEE_ID, RSUM.COMPANY_HOLDING_ID,
'SLEMP', NULL, DET.BALANCE_TYPE_TRANS_ID,
DET.BALANCE_TRANS_ID, DET.BALANCE_INSTALMENTS, DET.BALANCE_ID,
DET.BALANCE_END_DATE, 0, DET.BALANCE_OF_FEE,
DET.BALANCE_OF_FEE, vUserExeId, vMsg, error);
IF error THEN
RAISE eAlgunError;
END IF;
END LOOP;
END LOOP;

FOR RSUM IN (SELECT DISTINCT PARTNER_ID, COMPANY_HOLDING_ID


FROM CHA_END_FINANCIAL_MONTH_DET D,
CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.ID = vEndFinMonthMId
AND M.ID = D.MASTER_ID
AND D.EMPLOYEE_ID IS NULL
AND 1 = 2) LOOP
-- Partner Recibos por Facturas --
FOR DET IN (SELECT RM.ID AS RECEIPT_ID,
RD.TRN_TYPE_REF_ID AS RECEIPT_TYPE_TRANS_ID,
RD.TRN_REF_ID AS RECEIPT_TRANS_ID,
RD.INSTALMENTS AS RECEIPT_INSTALMENTS,
RM.RECEIPT_DATE AS RECEIPT_DATE,
NVL(RD.TOTAL_VOUCHER, 0) AS RECEIPT_TOTAL_VOUCHER
FROM AREC_RECEIPT_CHARGES_MASTER RM,
AREC_RECEIPT_CHARGES_DET RD,
SALE_VOUCHERS_BALANCE B,
EC_VOUCHER VOU,
CHA_PARTNERS P
WHERE RM.ID = RD.MASTER_ID
AND RD.TRN_REF_ID = B.TRANS_ID
AND RD.TRN_TYPE_REF_ID = B.TYPE_TRANS_ID
AND RD.INSTALMENTS = B.INSTALMENTS
AND P.ID = RM.PARTNER_ID
AND P.ID = RSUM.PARTNER_ID
AND RM.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin
AND RM.END_FINALCIAL_ID IS NULL) LOOP
vItemPartnerFinancialDet := NVL(vItemPartnerFinancialDet, 0) + 1;
PP_INSERT_FINANCIALMONTH_DET(vEndFinMonthMId, vItemPartnerFinancialDet,
RSUM.PARTNER_ID, NULL, RSUM.COMPANY_HOLDING_ID,
'RCPAF', NULL, DET.RECEIPT_TYPE_TRANS_ID,
DET.RECEIPT_TRANS_ID, DET.RECEIPT_INSTALMENTS, DET.RECEIPT_ID,
DET.RECEIPT_DATE, 0, DET.RECEIPT_TOTAL_VOUCHER,
DET.RECEIPT_TOTAL_VOUCHER, vUserExeId, vMsg, error);
IF error THEN
RAISE eAlgunError;
END IF;
END LOOP;
END LOOP;

FOR RSUM IN (SELECT DISTINCT EMPLOYEE_ID, COMPANY_HOLDING_ID


FROM CHA_END_FINANCIAL_MONTH_DET D,
CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.ID = vEndFinMonthMId
AND M.ID = D.MASTER_ID
AND D.PARTNER_ID IS NULL
AND 1 = 2) LOOP
-- Employee Recibos por Facturas --
FOR DET IN (SELECT RM.ID AS RECEIPT_ID,
RD.TRN_TYPE_REF_ID AS RECEIPT_TYPE_TRANS_ID,
RD.TRN_REF_ID AS RECEIPT_TRANS_ID,
RD.INSTALMENTS AS RECEIPT_INSTALMENTS,
RM.RECEIPT_DATE AS RECEIPT_DATE,
NVL(RD.TOTAL_VOUCHER, 0) AS RECEIPT_TOTAL_VOUCHER
FROM AREC_RECEIPT_CHARGES_MASTER RM,
AREC_RECEIPT_CHARGES_DET RD,
SALE_VOUCHERS_BALANCE B,
EC_VOUCHER VOU,
HR_EMPLOYEES E
WHERE RM.ID = RD.MASTER_ID
AND RD.TRN_REF_ID = B.TRANS_ID
AND RD.TRN_TYPE_REF_ID = B.TYPE_TRANS_ID
AND RD.INSTALMENTS = B.INSTALMENTS
AND E.ID = RM.EMPLOYEE_ID
AND RM.EMPLOYEE_ID = RSUM.EMPLOYEE_ID
AND RM.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin
AND RM.END_FINALCIAL_ID IS NULL) LOOP
vItemPartnerFinancialDet := NVL(vItemPartnerFinancialDet, 0) + 1;
PP_INSERT_FINANCIALMONTH_DET(vEndFinMonthMId, vItemPartnerFinancialDet,
NULL, RSUM.EMPLOYEE_ID, RSUM.COMPANY_HOLDING_ID,
'RCEMF', NULL, DET.RECEIPT_TYPE_TRANS_ID,
DET.RECEIPT_TRANS_ID, DET.RECEIPT_INSTALMENTS, DET.RECEIPT_ID,
DET.RECEIPT_DATE, 0, DET.RECEIPT_TOTAL_VOUCHER,
DET.RECEIPT_TOTAL_VOUCHER, vUserExeId, vMsg, error);
IF error THEN
RAISE eAlgunError;
END IF;
END LOOP;
END LOOP;

FOR RSUM IN (SELECT DISTINCT PARTNER_ID, COMPANY_HOLDING_ID


FROM CHA_END_FINANCIAL_MONTH_DET D,
CHA_END_FINANCIAL_MONTH_MASTER M
WHERE M.ID = vEndFinMonthMId
AND M.ID = D.MASTER_ID
AND D.EMPLOYEE_ID IS NULL
AND 1 = 2) LOOP
-- Partner Recibos por Prestamos --
FOR DET IN (SELECT RM.ID AS RECEIPT_ID,
RD.TRN_TYPE_REF_ID AS RECEIPT_TYPE_TRANS_ID,
RD.TRN_REF_ID AS RECEIPT_TRANS_ID,
RD.INSTALMENTS AS RECEIPT_INSTALMENTS,
RM.RECEIPT_DATE AS RECEIPT_DATE,
NVL(RD.TOTAL_VOUCHER, 0) AS RECEIPT_TOTAL_VOUCHER
FROM AREC_RECEIPT_CHARGES_MASTER RM,
AREC_RECEIPT_CHARGES_DET RD,
LOAN_PARTNER_SHARE B,
EC_VOUCHER VOU,
CHA_PARTNERS P
WHERE RM.ID = RD.MASTER_ID
AND RD.TRN_REF_ID = B.TRN_ID
AND RD.TRN_TYPE_REF_ID = B.TRN_TYPE_ID
AND RD.INSTALMENTS = B.SHARE_NUMBER
AND P.ID = RM.PARTNER_ID
AND P.ID = RSUM.PARTNER_ID
AND RM.RECEIPT_DATE BETWEEN vFecIni - 10 AND vFecFin
AND RM.END_FINALCIAL_ID IS NULL) LOOP
vItemPartnerFinancialDet := NVL(vItemPartnerFinancialDet, 0) + 1;
PP_INSERT_FINANCIALMONTH_DET(vEndFinMonthMId, vItemPartnerFinancialDet,
RSUM.PARTNER_ID, NULL, RSUM.COMPANY_HOLDING_ID,
'RCPAP', NULL, DET.RECEIPT_TYPE_TRANS_ID,
DET.RECEIPT_TRANS_ID, DET.RECEIPT_INSTALMENTS, DET.RECEIPT_ID,
DET.RECEIPT_DATE, 0, DET.RECEIPT_TOTAL_VOUCHER,
DET.RECEIPT_TOTAL_VOUCHER, vUserExeId, vMsg, error);
IF error THEN
RAISE eAlgunError;
END IF;
END LOOP;
END LOOP;

FOR INT_TAX IN CUR_FINAN_INTEREST_TAX(vEndFinMonthMId) LOOP


INSERT INTO CHA_END_FINANCIAL_INTEREST_TAX(ID, FINANCIAL_MONTH_MASTER_ID,
FINANCIAL_PARTNER_ID, PARTNER_ID, EMPLOYEE_ID,
CAPITAL_AMOUNT, INTEREST_AMOUNT, INTEREST_TAX,
STATUS)
VALUES(SEQ_CHA_END_FINANCIAL_INT_TAX.NEXTVAL, INT_TAX.MASTER_ID,
INT_TAX.ID, INT_TAX.PARTNER_ID, INT_TAX.EMPLOYEE_ID,
INT_TAX.CAPITAL_AMOUNT, INT_TAX.INTEREST_AMOUNT, INT_TAX.INTEREST_TAX,
'PEND');
END LOOP;

---------------------------------------
-- ACTUALIZAMOS A PROCESADO AL --
-- REGISTRO DEL CIERRE DE MES ACTUAL --
---------------------------------------
UPDATE CHA_END_FINANCIAL_MONTH M
SET M.STATUS = 'P',
M.START_DATE = cSysdate
WHERE M.ID = vEndFinancialId;

DBMS_OUTPUT.PUT_LINE('** FIN GENERADOR DE CIERRE DEL MES. vCont='||


TO_CHAR(vItem));

EXCEPTION
WHEN eAlgunError THEN
pMsg := vMsg;
pError := TRUE;
WHEN OTHERS THEN
pMsg := 'Error generador de cierre del mes activo. '||SQLERRM;
pError := TRUE;
END;

You might also like