=@due) SET @result = 1 else SET @result = 0; return @result; END]]> = @installment_number AND expected_date <= @endDate SET @counter = @installment_number; SET @LastInst = (select max(number) from @Penalties); WHILE ( @counter <= @LastInst) BEGIN SELECT @Date1 = ISNULL(paid_date, expected_date), @expected_principal = capital_repayment, @expected_interests = interest_repayment FROM @Penalties WHERE number = @counter SET @value_first_inst_principal = ( (isnull((select sum(capital_repayment) from installments where installments.contract_id = @contract_id and number <= @counter),0)) - (isnull((select sum(principal) from contractEvents inner join repaymentEvents on repaymentEvents.id = contractEvents.id where contractEvents.contract_id = @contract_id and is_deleted=0 and event_date <= @endDate),0)) ) SET @value_first_inst_interest = ( (isnull((select sum(interest_repayment) from installments where installments.contract_id = @contract_id and number <= @counter),0)) - (isnull((select sum(interests) from contractEvents inner join repaymentEvents on repaymentEvents.id = contractEvents.id where contractEvents.contract_id = @contract_id and is_deleted=0 and event_date <= @endDate),0)) ) UPDATE @Penalties SET Penalties_based_on_overdue_interest = @Penalties_based_on_overdue_interest * (CASE WHEN (@counter = @installment_number) and (@value_first_inst_interest < @expected_interests) then 0 else (@expected_interests) END) * CASE WHEN DATEDIFF(day, @Date1, @endDate) > @LATE_DAYS_AFTER_ACCRUAL_CEASES THEN @LATE_DAYS_AFTER_ACCRUAL_CEASES ELSE DATEDIFF(day, @Date1, @endDate) END WHERE number = @counter ; UPDATE @Penalties SET Penalties_based_on_overdue_principal = @Penalties_based_on_overdue_principal * (CASE WHEN (@counter = @installment_number) and (@value_first_inst_principal < @expected_principal) then 0 else (@expected_principal) END) * CASE WHEN DATEDIFF(day, @Date1, @endDate) > @LATE_DAYS_AFTER_ACCRUAL_CEASES THEN @LATE_DAYS_AFTER_ACCRUAL_CEASES ELSE DATEDIFF(day, @Date1, @endDate) END WHERE number = @counter ; SET @counter = @counter + 1; END SET @OLB = ISNULL ( (SELECT credit.amount FROM credit WHERE (credit.id = @contract_id)) - (select sum(principal) from contractEvents inner join repaymentEvents on repaymentEvents.id = contractEvents.id where contractEvents.contract_id = @contract_id and is_deleted=0 and event_date <= @endDate) , 0) UPDATE @Penalties SET Penalties_based_on_OLB = @Penalties_based_on_OLB * @OLB * CASE WHEN datediff(day,@Last_repayment_date,@endDate) < @days_late then datediff(day,@Last_repayment_date,@endDate) else @days_late end WHERE number = @counter-1 ; UPDATE @Penalties SET Penalties_based_on_initial_amount = @Penalties_based_on_initial_amount * (select credit.amount from credit where credit.id = @contract_id) * CASE WHEN datediff(day,@Last_repayment_date,@endDate) < @days_late then datediff(day,@Last_repayment_date,@endDate) else @days_late end WHERE number = @counter-1 ; SELECT @TotalPenalties = (isnull(SUM(Penalties_based_on_initial_amount),0) +isnull(sum(Penalties_based_on_OLB),0) +isnull(sum(Penalties_based_on_overdue_principal),0) +isnull(sum(Penalties_based_on_overdue_interest),0)) FROM @Penalties RETURN round(@TotalPenalties,2) END]]> 0) WHILE ( @installmentId = -1 ) AND ( @counter <= @contractNbInstallment ) BEGIN IF ( dbo.[check_installment_paid](@endDate, @contractId, @counter) = 0 ) BEGIN SET @installmentId = @counter ; END SET @counter = @counter + 1 ; END END SET @paid = ( dbo.check_installment_paid(@endDate, @contractId, @installmentId) ) ; SELECT @installment_date = [expected_date] FROM [Installments] WHERE contract_id = @contractId AND number = @installmentId SET @result = CASE WHEN @paid = 1 THEN 0 ELSE CASE WHEN datediff(d, @installment_date, @endDate) < 0 THEN 0 ELSE datediff(d, @installment_date, @endDate) END END return @result END]]> 0.02)]]> 0.02)]]> 0.5) AND (amount - ISNULL((SELECT SUM(principal) FROM ContractEvents INNER JOIN RepaymentEvents ON ContractEvents.id = RepaymentEvents.id WHERE contract_id = c1.id AND is_deleted = 0 AND ContractEvents.event_date <= GETDATE() ), 0) - SUM(capital_repayment - paid_capital)) > 0.5]]> = Contracts.close_date and Contracts.closed=1 group by contract_code,Contracts.id, Credit.amount having Credit.amount <> sum(loan_share_amount)]]> getdate()]]> 0) AND (olb <= 5) OR (olb > 0) AND (closed = 1) OR (olb < 0)]]> 1 UNION ALL SELECT contract_code, groups.name, users.first_name+' '+users.last_name AS loan_officer FROM contracts INNER JOIN credit ON credit.id = contracts.id INNER JOIN projects ON project_id = projects.id INNER JOIN tiers ON tiers.id = projects.tiers_id INNER JOIN groups ON groups.id = tiers.id INNER JOIN users ON users.id = credit.loanofficer_id WHERE client_type_code = 'G' GROUP BY contract_code, groups.name, users.first_name+' '+users.last_name HAVING COUNT(contract_code) > 1]]> = Contracts.close_date GROUP BY contract_code, Contracts.id, Credit.amount HAVING Credit.amount <> SUM(loan_share_amount)]]> 0 ) AND ( late_days ) <= 30 ), 0) * dbo.PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR1_30, /**/ ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 30 ) AND ( late_days ) <= 60 ), 0) * dbo.PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR31_60, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 60 ) AND ( late_days ) <= 90 ), 0) * dbo.PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR61_90, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 90 ) AND ( late_days ) <= 180 ), 0) * dbo.PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR91_180, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 180 ) AND ( late_days ) <= 365 ), 0) * dbo.PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR181_365, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 365 ) ), 0) * dbo.PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR365, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 0 ) ), 0) * dbo.PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR_TOTAL, (dbo.getLateDays(@endDate, [Contracts].id, -1 ) ) AS days_late, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 0 ) AND ( late_days <= 30 ) ), 0) <> 0 THEN 1 / ISNULL(nullif(convert(float,dbo.GetNbMembers(dbo.GetClientID(contracts.id),@endDate)),0),1) ELSE 0 END AS Contract30, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 30 ) AND ( late_days <= 60 ) ), 0) <> 0 THEN 1 / ISNULL(nullif(convert(float,dbo.GetNbMembers(dbo.GetClientID(contracts.id),@endDate)),0),1) ELSE 0 END AS Contract60, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 60 ) AND ( late_days <= 90 ) ), 0) <> 0 THEN 1 / ISNULL(nullif(convert(float,dbo.GetNbMembers(dbo.GetClientID(contracts.id),@endDate)),0),1) ELSE 0 END AS Contract90, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 90 ) AND ( late_days <= 180 ) ), 0) <> 0 THEN 1 / ISNULL(nullif(convert(float,dbo.GetNbMembers(dbo.GetClientID(contracts.id),@endDate)),0),1) ELSE 0 END AS Contract180, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 180 ) AND ( late_days <= 365 ) ), 0) <> 0 THEN 1 / ISNULL(nullif(convert(float,dbo.GetNbMembers(dbo.GetClientID(contracts.id),@endDate)),0),1) ELSE 0 END AS Contract365, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 365 ) ), 0) <> 0 THEN 1 / ISNULL(nullif(convert(float,dbo.GetNbMembers(dbo.GetClientID(contracts.id),@endDate)),0),1) ELSE 0 END AS ContractMore365, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 0 ) AND ( late_days <= 30 ) ), 0) <> 0 THEN 1 ELSE 0 END AS Client30, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 30 ) AND ( late_days <= 60 ) ), 0) <> 0 THEN 1 ELSE 0 END AS Client60, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 60 ) AND ( late_days <= 90 ) ), 0) <> 0 THEN 1 ELSE 0 END AS Client90, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 90 ) AND ( late_days <= 180 ) ), 0) <> 0 THEN 1 ELSE 0 END AS Client180, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 180 ) AND ( late_days <= 365 ) ), 0) <> 0 THEN 1 ELSE 0 END AS Client365, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 365 ) ), 0) <> 0 THEN 1 ELSE 0 END AS ClientMore365 FROM dbo.Contracts INNER JOIN dbo.Credit AS Credit ON dbo.Contracts.id = Credit.id INNER JOIN dbo.Packages ON Credit.package_id = dbo.Packages.id INNER JOIN dbo.Projects ON Projects.id = dbo.Contracts.project_id INNER JOIN dbo.Tiers ON dbo.Tiers.id = dbo.Projects.tiers_id INNER JOIN dbo.Users ON Credit.loanofficer_id = dbo.Users.id INNER JOIN dbo.Districts ON dbo.Tiers.district_id = dbo.Districts.id INNER JOIN dbo.PersonGroupBelonging ON dbo.Tiers.id = dbo.PersonGroupBelonging.group_id INNER JOIN dbo.Persons ON dbo.PersonGroupBelonging.person_id = dbo.Persons.id INNER JOIN dbo.DomainOfApplications ON dbo.Persons.activity_id = dbo.DomainOfApplications.id INNER JOIN #tempLateDays on #tempLateDays.contract_id = credit.id WHERE ( Credit.disbursed = 1 ) AND ( Credit.written_off = 0 ) AND ( late_days > 0 ) ) union ALL /* IL */ ( SELECT TOP 100 PERCENT dbo.Users.first_name + ' ' + dbo.Users.last_name AS loan_officer_name, Users.id as loan_officer_id, dbo.Packages.name AS product, Packages.id as package_id, dbo.Contracts.contract_code, dbo.Contracts.start_date, dbo.Districts.name AS district_name, Districts.id as district_id, dbo.DomainOfApplications.name AS activity_name, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM dbo.Installments WHERE ( contract_id = dbo.Credit.id ) ), 0) AS OLB, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 0 ) AND ( late_days ) <= 30 ), 0) AS PAR1_30, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 30 ) AND ( late_days ) <= 60 ), 0) AS PAR31_60, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 60 ) AND ( late_days ) <= 90 ), 0) AS PAR61_90, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 90 ) AND ( late_days ) <= 180 ), 0) AS PAR91_180, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 180 ) AND ( late_days ) <= 365 ), 0) AS PAR181_365, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 365 ) ), 0) AS PAR365, ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 0 ) ), 0) AS PAR_TOTAL, ( dbo.getLateDays(@endDate, [Contracts].id, -1 ) ) AS days_late, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 0 ) AND ( late_days ) <= 30 ), 0) <> 0 THEN 1 ELSE 0 END AS Contract30, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 30 ) AND ( late_days ) <= 60 ), 0) <> 0 THEN 1 ELSE 0 END AS Contract60, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 60 ) AND ( late_days ) <= 90 ), 0) <> 0 THEN 1 ELSE 0 END AS Contract90, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 90 ) AND ( late_days ) <= 180 ), 0) <> 0 THEN 1 ELSE 0 END AS Contract180, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 180 ) AND ( late_days ) <= 365 ), 0) <> 0 THEN 1 ELSE 0 END AS Contract365, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 365 ) ), 0) <> 0 THEN 1 ELSE 0 END AS ContractMore365, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 0 ) AND ( late_days ) <= 30 ), 0) <> 0 THEN 1 ELSE 0 END AS Client30, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 30 ) AND ( late_days ) <= 60 ), 0) <> 0 THEN 1 ELSE 0 END AS Client60, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 60 ) AND ( late_days ) <= 90 ), 0) <> 0 THEN 1 ELSE 0 END AS Client90, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 90 ) AND ( late_days ) <= 180 ), 0) <> 0 THEN 1 ELSE 0 END AS Client180, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 180 ) AND ( late_days ) <= 365 ), 0) <> 0 THEN 1 ELSE 0 END AS Client365, CASE WHEN ISNULL(( SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM #ReportInstallments_temp WHERE ( #ReportInstallments_temp.contract_id = Credit.id ) GROUP BY #ReportInstallments_temp.contract_id HAVING ( late_days > 365 ) ), 0) <> 0 THEN 1 ELSE 0 END AS ClientMore365 FROM dbo.Contracts INNER JOIN dbo.Credit ON dbo.Contracts.id = dbo.Credit.id INNER JOIN dbo.Packages ON dbo.Credit.package_id = dbo.Packages.id INNER JOIN dbo.Projects ON Projects.id = dbo.Contracts.project_id INNER JOIN dbo.Tiers ON dbo.Tiers.id = dbo.Projects.tiers_id INNER JOIN dbo.Users ON dbo.Credit.loanofficer_id = dbo.Users.id INNER JOIN dbo.Persons ON dbo.Tiers.id = dbo.Persons.id INNER JOIN dbo.Districts ON dbo.Tiers.district_id = dbo.Districts.id INNER JOIN dbo.DomainOfApplications ON dbo.Persons.activity_id = dbo.DomainOfApplications.id INNER JOIN #tempLateDays on #tempLateDays.contract_id = credit.id WHERE ( dbo.Credit.disbursed = 1 ) AND ( dbo.Credit.written_off = 0 ) AND ( late_days > 0 ) ) END]]> 0) AND (MAX(day_late) <= 30)), 0) AS PAR1_30, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 30) AND (MAX(day_late) <= 60)), 0) AS PAR31_60, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 60) AND (MAX(day_late) <= 90)), 0) AS PAR61_90, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 90) AND (MAX(day_late) <= 180)), 0) AS PAR91_180, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 180) AND (MAX(day_late) <= 365)), 0) AS PAR181_365, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 365)), 0) AS PAR365, (SELECT MAX(day_late) FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE ReportInstallmentsView.contract_id = Credit.id) AS days_late FROM Contracts INNER JOIN Credit ON Contracts.id = Credit.id INNER JOIN Packages ON Credit.package_id = Packages.id INNER JOIN Projects ON Contracts.project_id = Projects.id INNER JOIN Tiers ON Projects.tiers_id = Tiers.id INNER JOIN Users ON Credit.loanofficer_id = Users.id INNER JOIN Persons ON Tiers.id = Persons.id INNER JOIN Districts ON Tiers.district_id = Districts.id INNER JOIN DomainOfApplications ON Persons.activity_id = DomainOfApplications.id WHERE Credit.disbursed = 1 AND Credit.written_off = 0 ) Test2 UNION ALL SELECT * FROM (SELECT TOP 100 PERCENT Users.first_name + ' ' + Users.last_name AS loan_officer_name,Users.id as loan_officer_id, Packages.name AS product, Packages.id as package_id, Contracts.contract_code, start_date, Districts.name AS district_name, Districts.id as district_id,DomainOfApplications.name AS activity_name,Projects.id as project_id, Projects.name as project_name, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM Installments WHERE (contract_id = Credit.id)), 0) * PersonGroupBelonging.loan_share_amount / Credit.amount AS OLB, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 0) AND (MAX(day_late) <= 30)), 0) * PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR1_30, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 30) AND (MAX(day_late) <= 60)), 0) * PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR31_60, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 60) AND (MAX(day_late) <= 90)), 0) * PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR61_90, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 90) AND (MAX(day_late) <= 180)), 0) * PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR91_180, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 180) AND (MAX(day_late) <= 365)), 0) * PersonGroupBelonging.loan_share_amount / Credit.amount AS PAR181_365, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 365)), 0) * PersonGroupBelonging.loan_share_amount / Credit.amount AS CreditPAR365, (SELECT MAX(day_late) FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE ReportInstallmentsView.contract_id = Credit.id) AS days_late FROM Contracts INNER JOIN Credit AS Credit ON Contracts.id = Credit.id INNER JOIN Packages ON Credit.package_id = Packages.id INNER JOIN Projects ON Contracts.project_id = Projects.id INNER JOIN Tiers ON Projects.tiers_id = Tiers.id INNER JOIN Users ON Credit.loanofficer_id = Users.id INNER JOIN Districts ON Tiers.district_id = Districts.id INNER JOIN PersonGroupBelonging ON Tiers.id = PersonGroupBelonging.group_id INNER JOIN Persons ON PersonGroupBelonging.person_id = Persons.id INNER JOIN DomainOfApplications ON Persons.activity_id = DomainOfApplications.id WHERE Credit.disbursed = 1 AND Credit.written_off = 0) Test UNION ALL SELECT * FROM (SELECT TOP 100 PERCENT Users.first_name + ' ' + Users.last_name AS loan_officer_name,Users.id as loan_officer_id, Packages.name AS product, Packages.id as package_id, Contracts.contract_code, start_date, Districts.name AS district_name, Districts.id as district_id,'to be fixed' AS activity_name, Projects.id as project_id, Projects.name as project_name, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM Installments WHERE (contract_id = Credit.id)), 0) AS OLB, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 0) AND (MAX(day_late) <= 30)), 0) AS PAR1_30, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 30) AND (MAX(day_late) <= 60)), 0) AS PAR31_60, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 60) AND (MAX(day_late) <= 90)), 0) AS PAR61_90, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 90) AND (MAX(day_late) <= 180)), 0) AS PAR91_180, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 180) AND (MAX(day_late) <= 365)), 0) AS PAR181_365, ISNULL ((SELECT SUM(capital_repayment) - SUM(paid_capital) AS Expr1 FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE (contract_id = Credit.id) GROUP BY contract_id HAVING (MAX(day_late) > 365)), 0) AS PAR365, (SELECT MAX(day_late) FROM (SELECT contract_id, capital_repayment, paid_capital, CASE WHEN capital_repayment - paid_capital + interest_repayment - paid_interest < 0.02 THEN 0 ELSE DATEDIFF(day, expected_date, @endDate) END AS day_late FROM Installments) ReportInstallmentsView WHERE ReportInstallmentsView.contract_id = Credit.id) AS days_late FROM Contracts INNER JOIN Credit ON Contracts.id = Credit.id INNER JOIN Packages ON Credit.package_id = Packages.id INNER JOIN Projects ON Contracts.project_id = Projects.id INNER JOIN Tiers ON Projects.tiers_id = Tiers.id INNER JOIN Users ON Credit.loanofficer_id = Users.id INNER JOIN corporates ON Tiers.id = corporates.id INNER JOIN Districts ON Tiers.district_id = Districts.id -- INNER JOIN -- DomainOfApplications ON activity_id = DomainOfApplications.id -- to be checked once DomainOfApplications and CorporateDomainOfActivity will be merged WHERE Credit.disbursed = 1 AND Credit.written_off = 0 ) Test3 END]]> = @beginDate AND contractevents.event_date<= @endDate END]]> = @beginDate AND event_date <= @endDate GROUP BY contracts.id, contracts.contract_code, [Districts].NAME, users.[first_name]+' '+users.[last_name], packages.[name], event_date, tiers.[id], ISNULL(Groups.name, Persons.first_name + ' ' + Persons.last_name), [exchange_rate_gain] END]]> 'M' AND Contracts.start_date <= @endDate) As NbOfWomen, (SELECT ISNULL(sum(OLB),0) FROM #LoanSizeMaturityGraceDomainDistrict_temp,Contracts WHERE #LoanSizeMaturityGraceDomainDistrict_temp.Contract_code = Contracts.contract_code AND [product_name] = Packages.name) AS OLB, (SELECT ISNULL(sum(OLB),0) FROM #LoanSizeMaturityGraceDomainDistrict_temp,Contracts WHERE #LoanSizeMaturityGraceDomainDistrict_temp.Contract_code = Contracts.contract_code AND [product_name] = Packages.name AND sex='F') AS FemaleOLB FROM Packages END]]> 'M' AND Contracts.start_date <= @endDate) AS NbOfWomen, (SELECT ISNULL(sum(#LoanSizeMaturityGraceDomainDistrict_temp.OLB),0) FROM #LoanSizeMaturityGraceDomainDistrict_temp,Contracts WHERE #LoanSizeMaturityGraceDomainDistrict_temp.Contract_code = Contracts.contract_code AND District_name = Districts.name) AS OLB, (SELECT ISNULL(sum(#LoanSizeMaturityGraceDomainDistrict_temp.OLB),0) FROM #LoanSizeMaturityGraceDomainDistrict_temp,Contracts WHERE #LoanSizeMaturityGraceDomainDistrict_temp.Contract_code = Contracts.contract_code AND District_name = Districts.name AND sex='F') AS FemaleOLB FROM Districts ORDER BY [name] END]]> 'M' AND Contracts.start_date <= @endDate) As women_by_LO, (SELECT ISNULL(sum(OLB),0) FROM #LoanSizeMaturityGraceDomainDistrict_temp,Contracts WHERE #LoanSizeMaturityGraceDomainDistrict_temp.Contract_code = Contracts.contract_code AND [loanofficer_name] = (Users.first_name+' '+Users.last_name)) AS OLB, (SELECT ISNULL(sum(OLB),0) FROM #LoanSizeMaturityGraceDomainDistrict_temp,Contracts WHERE #LoanSizeMaturityGraceDomainDistrict_temp.Contract_code = Contracts.contract_code AND [loanofficer_name] = (Users.first_name+' '+Users.last_name) AND sex='F') AS FemaleOLB FROM Users WHERE deleted = 0 END]]> = @beginDate) and (start_date <= @endDate) GROUP BY c1.contract_code,c1.id,dbo.Installments.contract_id, c1.contract_code, Projects.name, dbo.Users.first_name, dbo.Packages.name, dbo.Districts.name, dbo.Credit.amount, dbo.Credit.grace_period,Credit.bad_loan, dbo.Credit.nb_of_installment, dbo.Persons.sex, dbo.DomainOfApplications.name, dbo.InstallmentTypes.nb_of_days, dbo.InstallmentTypes.nb_of_months, c1.start_date, c1.close_date, dbo.Credit.interest_rate, dbo.Tiers.active, dbo.Tiers.loan_cycle, dbo.Persons.last_name, dbo.Persons.first_name, dbo.Credit.bad_loan, dbo.Persons.id, Tiers.client_type_code, dbo.Users.last_name, dbo.fundinglines.name, dbo.credit.written_off ) union all (SELECT /* (select (amount) / (select count(*) from persongroupbelonging where group_id = projects.tiers_id and currently_in = 1) from credit where credit.id = c1.id) - isnull( (select sum(principal) from contractEvents inner join repaymentEvents on contractEvents.id = repaymentEvents.id where is_deleted = 0 and event_date <= @enddate and contract_id = c1.id),0) / (select count(*) from persongroupbelonging where group_id = projects.tiers_id and currently_in = 1) as OLB, */ c1.contract_code AS Contract, -- Projects.name AS project_name, c1.start_date, dbo.Users.first_name+' '+dbo.Users.last_name AS loan_officer, dbo.Packages.name AS Product, dbo.Districts.name AS District, dbo.Credit.amount, Tiers.client_type_code, -- dbo.Credit.grace_period, -- dbo.Credit.nb_of_installment * { fn ROUND(ISNULL(NULLIF (dbo.InstallmentTypes.nb_of_days, 0) / 30, dbo.InstallmentTypes.nb_of_months), 0) } AS maturity, -- dbo.Persons.sex, dbo.DomainOfApplications.name AS domainName, dbo.PersonGroupBelonging.loan_share_amount, c1.close_date, -- dbo.Credit.interest_rate, -- dbo.Tiers.active, dbo.Tiers.loan_cycle, -- dbo.Persons.first_name, -- dbo.Persons.last_name, -- dbo.Credit.bad_loan, -- dbo.Persons.id AS person_id, -- dbo.fundinglines.name, dbo.credit.written_off FROM Installments INNER JOIN dbo.Contracts c1 ON dbo.Installments.contract_id = c1.id INNER JOIN dbo.Credit ON c1.id = dbo.Credit.id INNER JOIN dbo.InstallmentTypes ON dbo.Credit.installment_type = dbo.InstallmentTypes.id INNER JOIN dbo.Users ON dbo.Credit.loanofficer_id = dbo.Users.id INNER JOIN dbo.Packages ON dbo.Packages.id = dbo.Credit.package_id INNER JOIN dbo.projects on c1.project_id = dbo.Projects.id inner join dbo.Tiers ON dbo.Tiers.id = projects.tiers_id INNER JOIN dbo.Districts ON dbo.Districts.id = dbo.Tiers.district_id INNER JOIN dbo.PersonGroupBelonging ON dbo.PersonGroupBelonging.group_id = dbo.Tiers.id INNER JOIN dbo.Persons ON dbo.Persons.id = dbo.PersonGroupBelonging.person_id INNER JOIN dbo.DomainOfApplications ON dbo.Persons.activity_id = dbo.DomainOfApplications.id inner join dbo.fundinglines on fundinglines.id = credit.fundingline_id WHERE (dbo.Credit.disbursed = 1) and (start_date >= @beginDate) and (start_date <= @endDate) and (joined_date <= c1.start_date and isnull(left_date,c1.close_date) >= c1.close_date) GROUP BY c1.contract_code,c1.id,dbo.Installments.contract_id, c1.contract_code,Projects.name, dbo.Users.first_name, dbo.Packages.name, dbo.Districts.name, dbo.Credit.amount, dbo.Credit.grace_period,Credit.bad_loan, dbo.Credit.nb_of_installment, dbo.Persons.sex, dbo.DomainOfApplications.name, dbo.PersonGroupBelonging.loan_share_amount, dbo.PersonGroupBelonging.person_id, dbo.InstallmentTypes.nb_of_days, dbo.InstallmentTypes.nb_of_months, c1.start_date, c1.close_date, dbo.Credit.interest_rate, dbo.Tiers.active, dbo.Tiers.loan_cycle, dbo.Persons.first_name, dbo.Persons.last_name, dbo.Credit.bad_loan, dbo.Persons.id, Tiers.client_type_code, tiers_id, dbo.Users.last_name, dbo.fundinglines.name,dbo.credit.written_off ) union all (SELECT /* ((select (Credit.amount) from credit where credit.id = c1.id) - isnull((select sum(principal) from contractEvents inner join repaymentEvents on contractEvents.id = repaymentEvents.id where is_deleted = 0 and event_date <= @enddate and contract_id = c1.id),0)) as OLB, */ c1.contract_code AS Contract, -- Projects.name AS project_name, c1.start_date, dbo.Users.first_name+' '+dbo.Users.last_name AS loan_officer, dbo.Packages.name AS Product, dbo.Districts.name AS District, dbo.Credit.amount, Tiers.client_type_code, -- dbo.Credit.grace_period, -- dbo.Credit.nb_of_installment * { fn ROUND(ISNULL(NULLIF (dbo.InstallmentTypes.nb_of_days, 0) / 30, dbo.InstallmentTypes.nb_of_months), 0) } AS maturity, -- dbo.tiers.client_type_code, dbo.domainofApplications.name AS domainName, dbo.Credit.amount AS loan_share_amount, c1.close_date, -- dbo.Credit.interest_rate, -- dbo.Tiers.active, dbo.Tiers.loan_cycle, -- dbo.corporates.name, -- dbo.corporates.sigle, -- dbo.Credit.bad_loan, -- dbo.corporates.id AS person_id, -- dbo.fundinglines.name, dbo.credit.written_off FROM dbo.Installments INNER JOIN dbo.Contracts c1 ON dbo.Installments.contract_id = c1.id INNER JOIN dbo.Credit ON c1.id = dbo.Credit.id INNER JOIN dbo.InstallmentTypes ON dbo.Credit.installment_type = dbo.InstallmentTypes.id INNER JOIN dbo.Users ON dbo.Credit.loanofficer_id = dbo.Users.id INNER JOIN dbo.Packages ON dbo.Packages.id = dbo.Credit.package_id INNER JOIN dbo.projects on c1.project_id = dbo.Projects.id inner join dbo.Tiers ON dbo.Tiers.id = projects.tiers_id INNER JOIN dbo.Districts ON dbo.Districts.id = dbo.Tiers.district_id INNER JOIN dbo.corporates ON dbo.Tiers.id = dbo.corporates.id INNER JOIN dbo.domainOfApplications ON dbo.corporates.activity_id = dbo.DomainOfApplications.id inner join dbo.fundinglines on fundinglines.id = credit.fundingline_id WHERE (dbo.Credit.disbursed = 1) and (start_date >= @beginDate) and (start_date <= @endDate) GROUP BY c1.contract_code,c1.id,dbo.Installments.contract_id, c1.contract_code,Projects.name, dbo.Users.first_name, dbo.Packages.name, dbo.Districts.name, dbo.Credit.amount, dbo.Credit.grace_period,Credit.bad_loan, dbo.Credit.nb_of_installment, dbo.tiers.client_type_code, dbo.domainOfApplications.name, dbo.InstallmentTypes.nb_of_days, dbo.InstallmentTypes.nb_of_months, c1.start_date, c1.close_date, dbo.Credit.interest_rate, dbo.Tiers.active, dbo.Tiers.loan_cycle, dbo.corporates.name, dbo.corporates.sigle, dbo.Credit.bad_loan, dbo.corporates.id, Tiers.client_type_code, dbo.Users.last_name, dbo.fundinglines.name,dbo.credit.written_off ) END]]> = @beginDate and c2.start_date<=@endDate) AS planned_disbursment, -- current disbursment (SELECT isnull(sum(LoanDisbursmentEvents.amount),0) FROM LoanDisbursmentEvents, contracts c2, contractEvents WHERE c1.contract_code = c2.contract_code AND loandisbursmentEvents.id = ContractEvents.id AND ContractEvents.contract_id = c1.id AND c2.start_date >= @beginDate and c2.start_date<=@endDate AND [ContractEvents].[is_deleted]=0) AS current_disbursment, -- principal balance at the begining of the period ((SELECT ISNULL(SUM(RepaymentEvents.principal), 0) FROM ContractEvents INNER JOIN RepaymentEvents ON ContractEvents.id = RepaymentEvents.id INNER JOIN Contracts c2 ON ContractEvents.contract_id = c2.id WHERE (contractEvents.is_deleted=0) and (c2.id = c1.id) AND (ContractEvents.event_date < @beginDate)) - (SELECT ISNULL(SUM(Installments.capital_repayment), 0) FROM Contracts c2 INNER JOIN Installments ON c2.id = Installments.contract_id INNER JOIN Credit ON c2.id = Credit.id WHERE (credit.disbursed=1) and (c2.id = c1.id) AND (Installments.expected_date < @beginDate))) AS principal_balance_begining_period, -- principal paid during period AKA current repayment principal (SELECT isnull(sum(principal),0) FROM ContractEvents INNER JOIN RepaymentEvents ON ContractEvents.id = RepaymentEvents.id INNER JOIN Contracts c2 ON ContractEvents.contract_id = c2.id WHERE (contractEvents.is_deleted=0) and (c2.id = c1.id) AND contractEvents.event_date >= @beginDate and contractEvents.event_date<=@endDate) AS principal_paid_during_period, -- principal expected payment during the period (without balance) ((SELECT isnull(sum(capital_repayment),0) FROM installments, contracts c2, credit WHERE c1.contract_code = c2.contract_code AND credit.id = c2.id AND credit.disbursed=1 AND installments.contract_id = c2.id AND installments.expected_date >= @beginDate and installments.expected_date<=@endDate)) AS principal_expected_during_period_without_balance, -- interests balance at the begining of the period ((SELECT ISNULL(SUM(RepaymentEvents.interests), 0) FROM ContractEvents INNER JOIN RepaymentEvents ON ContractEvents.id = RepaymentEvents.id INNER JOIN Contracts c2 ON ContractEvents.contract_id = c2.id WHERE (contractEvents.is_deleted=0) and (c2.id = c1.id) AND (ContractEvents.event_date < @beginDate)) - (SELECT ISNULL(SUM(Installments.interest_repayment), 0) FROM Contracts c2 INNER JOIN Installments ON c2.id = Installments.contract_id INNER JOIN Credit ON c2.id = Credit.id WHERE (credit.disbursed=1) and (c2.id = c1.id) AND (Installments.expected_date < @beginDate))) AS interest_balance_begining_period, --interests paid during period AKA current repayment interests (SELECT isnull(sum(interests),0) FROM ContractEvents INNER JOIN RepaymentEvents ON ContractEvents.id = RepaymentEvents.id INNER JOIN Contracts c2 ON ContractEvents.contract_id = c2.id WHERE (contractEvents.is_deleted=0) and (c2.id = c1.id) AND contractEvents.event_date >= @beginDate and contractEvents.event_date<=@endDate) AS interest_paid_during_period, --interest expected payment during the period (without balance) ((SELECT isnull(sum(interest_repayment),0) FROM installments, contracts c2, credit WHERE c1.contract_code = c2.contract_code AND credit.id = c2.id AND credit.disbursed=1 AND installments.contract_id = c2.id AND installments.expected_date >= @beginDate and installments.expected_date<=@endDate)) AS interest_expected_during_period_without_balance FROM contracts c1 inner join credit on credit.id = c1.id inner join projects on c1.project_id = projects.id inner join tiers on tiers.id = projects.tiers_id inner join districts on districts.id = tiers.district_id inner join users on users.id = credit.loanofficer_id inner join packages on credit.package_id = packages.id WHERE users.[deleted]=0 AND credit.written_off=0 and c1.id not in (select contracts.id from contracts where ((close_date < @beginDate) and (contracts.closed=1)) or (start_date > @endDate)) END]]> = @beginDate and [ContractEvents].[event_date]<= @endDate and credit.disbursed = 1 AND [ContractEvents].[is_deleted]=0) -- credit.written_off = 0 - we don't care don't we ? END]]> = @beginDate and event_date<=@endDate and credit.disbursed = 1 and credit.written_off = 0) END]]> 20000) as disb_loans_more_20000_USD, -- AVG interest rate from loans according to maturity (select isnull(avg(interest_rate),0) from credit inner join contracts on contracts.id = credit.id -- to check in case of installment not equal to 1 month !!!! where nb_of_installment < 1) as avg_int_rate_less_1_month, (select isnull(avg(interest_rate),0) from credit inner join contracts on contracts.id = credit.id -- to check in case of installment not equal to 1 month !!!! where nb_of_installment between 1 and 3) as avg_int_rate_1_3_month, (select isnull(avg(interest_rate),0) from credit inner join contracts on contracts.id = credit.id -- to check in case of installment not equal to 1 month !!!! where nb_of_installment between 4 and 6) as avg_int_rate_4_6_month, (select isnull(avg(interest_rate),0) from credit inner join contracts on contracts.id = credit.id -- to check in case of installment not equal to 1 month !!!! where nb_of_installment between 7 and 12) as avg_int_rate_7_12_month, (select isnull(avg(interest_rate),0) from credit inner join contracts on contracts.id = credit.id -- to check in case of installment not equal to 1 month !!!! where nb_of_installment > 12) as avg_int_rate_more_12_month from contracts END]]> 0) or dueInterest > 0) DECLARE tblcur CURSOR LOCAL FOR select c1.id from contracts C1 inner join credit on C1.id = credit.id where credit.disbursed=1 and written_off = 0 group by C1.id having (dbo.getOLB(C1.id,@endDate) > 0) OR (dbo.getDueInterest(C1.id,@endDate) >0) -- put them into the cursor OPEN tblcur Fetch FROM tblcur INTO @contractId -- we gonna check for all open contract what is the latest installment not fully repaid WHILE @@FETCH_STATUS = 0 BEGIN -- we reset the count for each new contract_id --set @i = 1; -- to find what is probably the latest installment SET @i = (SELECT ISNULL(MAX([Installments].[number]),1) FROM [Installments] WHERE [Installments].[contract_id] = @contractId AND [Installments].[paid_interest]<>0) SET @contractNumberInstallment = (SELECT MAX(number) FROM installments WHERE contract_id = @contractId) -- we check whether the repayment @i for the contract @contractId has been repaid at the date @endDate -- if it's the case we go to the next installment untill we find the one not repaid while((dbo.check_installment_paid(@endDate,@contractId,@i) = 1) AND (@i < @contractNumberInstallment)) BEGIN set @i = @i + 1; END -- we first get the expected_date of the installment SET @installmentDate = (select expected_date from installments where installments.number = @i and contract_id =@contractId); -- and then we write the first non-repaid installment into the table temp_last_installment_not_fully_repaid insert into #temp_first_installment_not_fully_repaid values(@contractId,@i,@installmentDate,dbo.getLateDays(@endDate,@contractId,@i)); -- we go to the next contract_id Fetch NEXT FROM tblcur INTO @contractId END -- close the cursor CLOSE tblcur -- delete it DEALLOCATE tblcur ---------------------------------- second part ---------------------------------------------------------- ----------------------------------- we select and display the information ---------------------------------- second part ---------------------------------------------------------- SELECT Packages.name AS package_name, c1.contract_code, c1.branch_code, Credit.fundingline_id, c1.id, -- let's get first the OLB : loan amount - sum(all principal paid before the @endDate) dbo.getOLB(c1.id,@endDate) AS OLB, -- then late principal ( (isnull((select sum(capital_repayment) from installments where installments.contract_id = c1.id and expected_date <= @endDate),0)) - (isnull((select sum(principal) from contractEvents inner join repaymentEvents on repaymentEvents.id = contractEvents.id where contractEvents.contract_id = c1.id and is_deleted=0 and event_date <= @endDate),0)) ) as late_principal, -- then late interests ( (isnull((select sum(interest_repayment) from installments where installments.contract_id = c1.id and expected_date <= @endDate),0)) - (isnull((select sum(interests) from contractEvents inner join repaymentEvents on repaymentEvents.id = contractEvents.id where contractEvents.contract_id = c1.id and is_deleted=0 and event_date <= @endDate),0)) ) as late_interests, -- then paid principal since the disbursment (isnull((select sum(principal) from contractEvents inner join repaymentEvents on repaymentEvents.id = contractEvents.id where contractEvents.contract_id = c1.id and is_deleted=0 and event_date <= @endDate),0) )as paid_principal, -- then paid interests since the disbursment (isnull((select sum(interests) from contractEvents inner join repaymentEvents on repaymentEvents.id = contractEvents.id where contractEvents.contract_id = c1.id and is_deleted=0 and event_date <= @endDate),0) )as paid_interests, -- then remaining insterests ((select sum(interest_repayment) from installments where contract_id = c1.id) - (isnull((select sum(interests) from contractEvents inner join repaymentEvents on repaymentEvents.id = contractEvents.id where contractEvents.contract_id = c1.id and is_deleted=0 and event_date <= @endDate),0) ))as remaining_interests, -- late penalties (we add the four different types of penalties) ISNULL(dbo.PenaltiesCalculation(c1.id,#temp_first_installment_not_fully_repaid.installment_number, @endDate), 0) as late_fees, -- then days late for overdue principal or overdue interests #temp_first_installment_not_fully_repaid.installment_date, late_days, -- then some more information regarding the credit Credit.amount, c1.start_date, c1.close_date, Users.first_name + ' ' + Users.last_name AS loan_officer_name, ISNULL(Groups.name, Persons.first_name + ' ' + Persons.last_name) AS customer_name, Districts.name AS district_name FROM Groups RIGHT OUTER JOIN Persons RIGHT OUTER JOIN contracts C1 inner join credit on credit.id = c1.id inner join projects on projects.id = C1.project_id inner join tiers on tiers.id = projects.tiers_id on persons.id = tiers.id on groups.id=tiers.id inner join users on users.id = credit.loanofficer_id inner join packages on packages.id = credit.package_id inner join districts on districts.id = tiers.district_id inner join #temp_first_installment_not_fully_repaid on #temp_first_installment_not_fully_repaid.contract_id =c1.id WHERE late_days > 0 END]]> c1.close_date and DATEDIFF(d,c1.close_date,c2.start_date) < @period)) THEN 0 ELSE 1 END as dropout from contracts c1 inner join Credit on Credit.id = c1.id inner join Projects on Projects.id = c1.project_id inner join Tiers on Tiers.id = Projects.tiers_id inner join Users on Users.id = loanofficer_id inner join Districts on Tiers.district_id = Districts.id inner join Packages on Packages.id = Credit.package_id where Tiers.client_type_code = 'I' and c1.closed=1 and c1.close_date between @beginDate and @endDate UNION ALL select c1.id, c1.contract_code, c1.project_id, projects.tiers_id, loanofficer_id, users.first_name + ' ' + users.last_name as loanofficer_name, tiers.district_id, districts.name, Packages.id, packages.name, CASE WHEN (tiers.id in (select tiers.id from contracts c2 inner join credit on c2.id = credit.id inner join projects on Projects.id = c2.project_id inner join tiers on tiers.id = projects.tiers_id where disbursed=1 and c2.start_date > c1.close_date and DATEDIFF(d,c1.close_date,c2.start_date) < @period)) THEN 0 ELSE 1 END as dropout from Contracts c1 inner join Credit on Credit.id = c1.id inner join Projects on Projects.id = c1.project_id inner join Tiers on Tiers.id = Projects.tiers_id inner join Persongroupbelonging on Persongroupbelonging.group_id = tiers.id inner join Users on Users.id = loanofficer_id inner join Districts on Tiers.district_id = Districts.id inner join Packages on Packages.id = Credit.package_id where Tiers.client_type_code = 'G' and joined_date <= c1.start_date and isnull(left_date,c1.close_date) >= c1.close_date and c1.closed=1 and c1.close_date between @beginDate and @endDate UNION ALL select c1.id, c1.contract_code, c1.project_id, projects.tiers_id, loanofficer_id, users.first_name + ' ' + users.last_name as loanofficer_name, tiers.district_id, districts.name, Packages.id, packages.name, CASE WHEN (tiers.id in (select tiers.id from contracts c2 inner join credit on c2.id = credit.id inner join projects on Projects.id = c2.project_id inner join tiers on tiers.id = projects.tiers_id where disbursed=1 and c2.start_date > c1.close_date and DATEDIFF(d,c1.close_date,c2.start_date) < @period)) THEN 0 ELSE 1 END as dropout from contracts c1 inner join Credit on credit.id = c1.id inner join Projects on Projects.id = c1.project_id inner join Tiers on tiers.id = projects.tiers_id inner join Users on Users.id = loanofficer_id inner join Districts on tiers.district_id = Districts.id inner join Packages on Packages.id = credit.package_id where tiers.client_type_code = 'C' and c1.closed=1 and c1.close_date between @beginDate and @endDate END]]> = LoanScale.ScaleMin and Credit.amount <= LoanScale.ScaleMax) GROUP BY c1.id,dbo.Installments.contract_id, c1.contract_code, Projects.name, dbo.Users.first_name, dbo.Packages.name, dbo.Districts.name, dbo.Credit.amount, dbo.Credit.grace_period,Credit.bad_loan, dbo.Credit.nb_of_installment,dbo.InstallmentTypes.name, dbo.Persons.sex, dbo.DomainOfApplications.name, dbo.InstallmentTypes.nb_of_days, dbo.InstallmentTypes.nb_of_months, c1.start_date, c1.close_date, dbo.Credit.interest_rate, dbo.Tiers.active, dbo.Tiers.loan_cycle, dbo.Persons.last_name, dbo.Persons.first_name, dbo.Credit.bad_loan, dbo.Persons.id, Tiers.client_type_code, dbo.Users.last_name, dbo.fundinglines.name, LoanScale.ScaleMin, LoanScale.ScaleMax HAVING ((select (Credit.amount) from credit where credit.id = c1.id) - isnull((select sum(principal) from contractEvents inner join repaymentEvents on contractEvents.id = repaymentEvents.id where is_deleted = 0 and event_date <= @enddate and contract_id = c1.id),0)) > 0.5 ) union all (SELECT (select (amount) / (select count(*) from persongroupbelonging where group_id = projects.tiers_id and currently_in = 1) from credit where credit.id = c1.id) - isnull( (select sum(principal) from contractEvents inner join repaymentEvents on contractEvents.id = repaymentEvents.id where is_deleted = 0 and event_date <= @enddate and contract_id = c1.id),0) / (select count(*) from persongroupbelonging where group_id = projects.tiers_id and currently_in = 1) as OLB, c1.contract_code AS Contract, Projects.name AS project_name, c1.start_date, dbo.Users.first_name+' '+dbo.Users.last_name AS loan_officer, dbo.Packages.name AS Product, dbo.Districts.name AS District, dbo.Credit.amount, Tiers.client_type_code, dbo.Credit.grace_period, ScaleMin, ScaleMax, -- dbo.Credit.nb_of_installment * { fn ROUND(ISNULL(NULLIF (dbo.InstallmentTypes.nb_of_days, 0) / 30, dbo.InstallmentTypes.nb_of_months), 0) } AS maturity, dbo.credit.nb_of_installment as maturity, dbo.InstallmentTypes.nb_of_days, dbo.InstallmentTypes.nb_of_months, dbo.installmentTypes.name, dbo.Persons.sex, dbo.DomainOfApplications.name AS domainName, dbo.PersonGroupBelonging.loan_share_amount, c1.close_date, dbo.Credit.interest_rate, -- dbo.Tiers.active, dbo.Tiers.loan_cycle, dbo.Persons.first_name, dbo.Persons.last_name, dbo.Credit.bad_loan, dbo.Persons.id AS person_id, dbo.fundinglines.name FROM dbo.LoanScale, Installments INNER JOIN dbo.Contracts c1 ON dbo.Installments.contract_id = c1.id INNER JOIN dbo.Credit ON c1.id = dbo.Credit.id INNER JOIN dbo.InstallmentTypes ON dbo.Credit.installment_type = dbo.InstallmentTypes.id INNER JOIN dbo.Users ON dbo.Credit.loanofficer_id = dbo.Users.id INNER JOIN dbo.Packages ON dbo.Packages.id = dbo.Credit.package_id INNER JOIN dbo.projects on c1.project_id = dbo.Projects.id inner join dbo.Tiers ON dbo.Tiers.id = projects.tiers_id INNER JOIN dbo.Districts ON dbo.Districts.id = dbo.Tiers.district_id INNER JOIN dbo.PersonGroupBelonging ON dbo.PersonGroupBelonging.group_id = dbo.Tiers.id INNER JOIN dbo.Persons ON dbo.Persons.id = dbo.PersonGroupBelonging.person_id INNER JOIN dbo.DomainOfApplications ON dbo.Persons.activity_id = dbo.DomainOfApplications.id inner join dbo.fundinglines on fundinglines.id = credit.fundingline_id WHERE (dbo.Credit.written_off = 0) AND (dbo.PersonGroupBelonging.currently_in = 1) AND (dbo.Credit.disbursed = 1) and (start_date <= @endDate) and (Credit.amount >= LoanScale.ScaleMin and Credit.amount <= LoanScale.ScaleMax) GROUP BY c1.id,dbo.Installments.contract_id, c1.contract_code,Projects.name, dbo.Users.first_name, dbo.Packages.name, dbo.Districts.name, dbo.Credit.amount, dbo.Credit.grace_period,Credit.bad_loan, dbo.Credit.nb_of_installment,dbo.InstallmentTypes.name, dbo.Persons.sex, dbo.DomainOfApplications.name, dbo.PersonGroupBelonging.loan_share_amount, dbo.PersonGroupBelonging.person_id, dbo.InstallmentTypes.nb_of_days, dbo.InstallmentTypes.nb_of_months, c1.start_date, c1.close_date, dbo.Credit.interest_rate, dbo.Tiers.active, dbo.Tiers.loan_cycle, dbo.Persons.first_name, dbo.Persons.last_name, dbo.Credit.bad_loan, dbo.Persons.id, Tiers.client_type_code, tiers_id, dbo.Users.last_name, dbo.fundinglines.name, LoanScale.ScaleMin, LoanScale.ScaleMax HAVING ((select (amount) / (select count(*) from persongroupbelonging where group_id = projects.tiers_id and currently_in = 1) from credit where credit.id = c1.id) - isnull( (select sum(principal) from contractEvents inner join repaymentEvents on contractEvents.id = repaymentEvents.id where is_deleted = 0 and event_date <= @enddate and contract_id = c1.id),0) / (select count(*) from persongroupbelonging where group_id = projects.tiers_id and currently_in = 1)) > 0.5) union all (SELECT ((select (Credit.amount) from credit where credit.id = c1.id) - isnull((select sum(principal) from contractEvents inner join repaymentEvents on contractEvents.id = repaymentEvents.id where is_deleted = 0 and event_date <= @enddate and contract_id = c1.id),0)) as OLB, c1.contract_code AS Contract, Projects.name AS project_name, c1.start_date, dbo.Users.first_name+' '+dbo.Users.last_name AS loan_officer, dbo.Packages.name AS Product, dbo.Districts.name AS District, dbo.Credit.amount, Tiers.client_type_code, dbo.Credit.grace_period, ScaleMin, ScaleMax, -- dbo.Credit.nb_of_installment * { fn ROUND(ISNULL(NULLIF (dbo.InstallmentTypes.nb_of_days, 0) / 30, dbo.InstallmentTypes.nb_of_months), 0) } AS maturity, dbo.credit.nb_of_installment as maturity, dbo.InstallmentTypes.nb_of_days, dbo.InstallmentTypes.nb_of_months, dbo.InstallmentTypes.name, dbo.tiers.client_type_code, dbo.DomainOfApplications.name AS domainName, dbo.Credit.amount AS loan_share_amount, c1.close_date, dbo.Credit.interest_rate, -- dbo.Tiers.active, dbo.Tiers.loan_cycle, dbo.corporates.name, dbo.corporates.sigle, dbo.Credit.bad_loan, dbo.corporates.id AS person_id, dbo.fundinglines.name FROM dbo.LoanScale, dbo.Installments INNER JOIN dbo.Contracts c1 ON dbo.Installments.contract_id = c1.id INNER JOIN dbo.Credit ON c1.id = dbo.Credit.id INNER JOIN dbo.InstallmentTypes ON dbo.Credit.installment_type = dbo.InstallmentTypes.id INNER JOIN dbo.Users ON dbo.Credit.loanofficer_id = dbo.Users.id INNER JOIN dbo.Packages ON dbo.Packages.id = dbo.Credit.package_id INNER JOIN dbo.projects on c1.project_id = dbo.Projects.id inner join dbo.Tiers ON dbo.Tiers.id = projects.tiers_id INNER JOIN dbo.Districts ON dbo.Districts.id = dbo.Tiers.district_id INNER JOIN dbo.corporates ON dbo.Tiers.id = dbo.corporates.id INNER JOIN dbo.DomainOfApplications ON dbo.corporates.activity_id = dbo.DomainOfApplications.id inner join dbo.fundinglines on fundinglines.id = credit.fundingline_id WHERE (dbo.Credit.written_off = 0) AND (dbo.Credit.disbursed = 1) and (start_date <= @endDate) and (Credit.amount >= LoanScale.ScaleMin and Credit.amount <= LoanScale.ScaleMax) GROUP BY c1.id,dbo.Installments.contract_id, c1.contract_code,Projects.name, dbo.Users.first_name, dbo.Packages.name, dbo.Districts.name, dbo.Credit.amount, dbo.Credit.grace_period,Credit.bad_loan, dbo.Credit.nb_of_installment,dbo.InstallmentTypes.name, dbo.tiers.client_type_code, dbo.DomainOfApplications.name, dbo.InstallmentTypes.nb_of_days, dbo.InstallmentTypes.nb_of_months, c1.start_date, c1.close_date, dbo.Credit.interest_rate, dbo.Tiers.active, dbo.Tiers.loan_cycle, dbo.corporates.name, dbo.corporates.sigle, dbo.Credit.bad_loan, dbo.corporates.id, Tiers.client_type_code, dbo.Users.last_name, dbo.fundinglines.name, LoanScale.ScaleMin, LoanScale.ScaleMax HAVING ((select (Credit.amount) from credit where credit.id = c1.id) - isnull((select sum(principal) from contractEvents inner join repaymentEvents on contractEvents.id = repaymentEvents.id where is_deleted = 0 and event_date <= @enddate and contract_id = c1.id),0)) > 0.5 ) END]]> = @endDate AND [expected_date] < DATEADD(month, 1, @endDate) ) AS RM_1month, ( SELECT SUM(capital_repayment) FROM installments INNER JOIN [Credit] ON credit.id = installments.[contract_id] WHERE disbursed = 1 AND written_off = 0 AND [expected_date] >= DATEADD(month, 1, @endDate) AND [expected_date] < DATEADD(month, 2, @endDate) ) AS RM_2months, ( SELECT ISNULL(SUM(capital_repayment), 0) FROM installments INNER JOIN [Credit] ON credit.id = installments.[contract_id] WHERE disbursed = 1 AND written_off = 0 AND [expected_date] >= DATEADD(month, 2, @endDate) AND [expected_date] < DATEADD(month, 3, @endDate) ) AS RM_3months, ( SELECT ISNULL(SUM(capital_repayment), 0) FROM installments INNER JOIN [Credit] ON credit.id = installments.[contract_id] WHERE disbursed = 1 AND written_off = 0 AND [expected_date] >= DATEADD(month, 3, @endDate) AND [expected_date] < DATEADD(month, 6, @endDate) ) AS RM_4_6months, ( SELECT ISNULL(SUM(capital_repayment), 0) FROM installments INNER JOIN [Credit] ON credit.id = installments.[contract_id] WHERE disbursed = 1 AND written_off = 0 AND [expected_date] >= DATEADD(month, 6, @endDate) AND [expected_date] < DATEADD(month, 12, @endDate) ) AS RM_6_12_months, ( SELECT ISNULL(SUM(capital_repayment), 0) FROM installments INNER JOIN [Credit] ON credit.id = installments.[contract_id] WHERE disbursed = 1 AND written_off = 0 AND [expected_date] >= DATEADD(year, 1, @endDate) AND [expected_date] < DATEADD(year, 2, @endDate) ) AS RM_1_2years, ( SELECT ISNULL(SUM(capital_repayment), 0) FROM installments INNER JOIN [Credit] ON credit.id = installments.[contract_id] WHERE disbursed = 1 AND written_off = 0 AND [expected_date] >= DATEADD(year, 2, @endDate) AND [expected_date] < DATEADD(year, 3, @endDate) ) AS RM_2_3years, ( SELECT ISNULL(SUM(capital_repayment), 0) FROM installments INNER JOIN [Credit] ON credit.id = installments.[contract_id] WHERE disbursed = 1 AND written_off = 0 AND [expected_date] >= DATEADD(year, 3, @endDate) ) AS RM_more3years END]]> = @beginDate OR late_days > 0) AND installment_paid = 'FALSE' AND (late_days = 0 OR @showDelinquent = 'TRUE')) END]]> [PersonGroupBelonging].[joined_date] AND ( [PersonGroupBelonging].[left_date] IS NULL OR GETDATE() < [PersonGroupBelonging].[left_date] ) END IF(@client_type = 'I') BEGIN SELECT Persons.[first_name] + ' ' + Persons.[last_name] AS member_name, credit.[amount] AS loan_share_amount, persons.identification_data FROM [Contracts] inner JOIN [Projects] ON [Contracts].[project_id] = [Projects].[id] INNER JOIN [Tiers] ON [Projects].[tiers_id] = [Tiers].[id] inner JOIN [Persons] ON [Persons].[id] = tiers.[id] inner JOIN [Credit] ON [Credit].id = contracts.id WHERE Contracts.[id] = @contract_id END IF(@client_type = 'C') BEGIN SELECT Persons.[first_name] + ' ' + Persons.[last_name] AS member_name, credit.[amount], persons.identification_data FROM [Contracts] RIGHT JOIN [Projects] ON [Contracts].[project_id] = [Projects].[id] RIGHT JOIN [Persons] ON [Projects].[id] = [Persons].[id] RIGHT JOIN [Credit] ON [Credit].id = contracts.id WHERE Contracts.[id] = @contract_id END END]]> =con1ev.event_date) ,0) AS further_principal_repayments_int, ISNULL((SELECT SUM(repaymentEvents.[interests]) FROM repaymentevents INNER JOIN [ContractEvents] ON contractevents.id=repaymentevents.id WHERE contract_id=con1.id AND contractevents.is_deleted=0 AND [ContractEvents].event_date>=con1ev.event_date) ,0) AS further_interest_repayments_int, ISNULL((SELECT SUM(repaymentEvents.[fees]) FROM repaymentevents INNER JOIN [ContractEvents] ON contractevents.id=repaymentevents.id WHERE contract_id=con1.id AND contractevents.is_deleted=0 AND [ContractEvents].event_date>=con1ev.event_date) ,0) AS further_fee_repayments_int, ISNULL((SELECT SUM(repaymentEvents.principal*[Exchange_rate].[exchange_rate]) FROM [Exchange_rate], repaymentevents INNER JOIN [ContractEvents] ON contractevents.id=repaymentevents.id WHERE contract_id=con1.id AND contractevents.is_deleted=0 AND [ContractEvents].event_date>=con1ev.event_date AND exchange_rate.[exchange_date]=contractevents.event_date) ,0) AS further_principal_repayments_ext, ISNULL((SELECT SUM(repaymentEvents.interests*[Exchange_rate].[exchange_rate]) FROM [Exchange_rate], repaymentevents INNER JOIN [ContractEvents] ON contractevents.id=repaymentevents.id WHERE contract_id=con1.id AND contractevents.is_deleted=0 AND [ContractEvents].event_date>=con1ev.event_date AND exchange_rate.[exchange_date]=contractevents.event_date) ,0) AS further_interests_repayments_ext, ISNULL((SELECT SUM(repaymentEvents.fees*[Exchange_rate].[exchange_rate]) FROM [Exchange_rate], repaymentevents INNER JOIN [ContractEvents] ON contractevents.id=repaymentevents.id WHERE contract_id=con1.id AND contractevents.is_deleted=0 AND [ContractEvents].event_date>=con1ev.event_date AND exchange_rate.[exchange_date]=contractevents.event_date) ,0) AS further_fees_repayments_ext FROM users INNER JOIN credit ON credit.[loanofficer_id]=users.id INNER JOIN contracts con1 ON con1.id=credit.id INNER JOIN [ContractEvents] con1ev ON con1ev.[contract_id]=con1.id WHERE con1ev.id = (SELECT MAX ([ContractEvents].id) FROM [ContractEvents] WHERE [ContractEvents].[contract_id]=con1ev.contract_id AND [ContractEvents].[event_type]='WROE') AND credit.written_off=1 AND con1ev.event_date >= @beginDate AND con1ev.event_date<=@endDate END]]> @event_date); return @next_contractEvents; END]]> @date ) AS t ) AS t WHERE t.[rank] = 1 )]]> 0 AND (t1.principal - t1.paid_principal > 0.5 OR t2.interest - t1.paid_interest > 0.5) ) AS loans -- Get installments that have not been repaid -- (necessary to get late days) LEFT JOIN ( SELECT a.contract_id, a.number, SUM(b.principal) AS principal_due, SUM(b.interest) AS interest_due, SUM(b.principal + b.interest) AS running_total, a.expected_date FROM _installments AS a LEFT JOIN _installments AS b ON a.contract_id = b.contract_id AND b.number <= a.number GROUP BY a.contract_id, a.number, a.expected_date ) AS i ON i.contract_id = loans.id AND (loans.paid_principal + loans.paid_interest) < i.running_total AND i.expected_date < @date GROUP BY loans.id, loans.interest, loans.paid_interest, loans.principal, loans.paid_principal ) AS retval )]]> = close_date))) )]]> = c1.close_date)) ) return @loanCycleGL+@loanCycleIL END]]>