| /* Leaving as out-of-box (but non-core reports) for now |
| could be removed later if people think too many non-generic |
| reports are being added |
| used in quipo TEVI dashboard (landing pages) */ |
| |
| DELETE FROM `stretchy_report` where report_name = 'FieldAgentStats'; |
| DELETE FROM `stretchy_report` where report_name = 'FieldAgentPrograms'; |
| DELETE FROM `stretchy_report` where report_name = 'ProgramDetails'; |
| DELETE FROM `stretchy_report` where report_name = 'ChildrenStaffList'; |
| DELETE FROM `stretchy_report` where report_name = 'CoordinatorStats'; |
| DELETE FROM `stretchy_report` where report_name = 'BranchManagerStats'; |
| DELETE FROM `stretchy_report` where report_name = 'ProgramDirectorStats'; |
| DELETE FROM `stretchy_report` where report_name = 'ProgramStats'; |
| |
| DELETE FROM `m_permission` where entity_name = 'FieldAgentStats'; |
| DELETE FROM `m_permission` where entity_name = 'FieldAgentPrograms'; |
| DELETE FROM `m_permission` where entity_name = 'ProgramDetails'; |
| DELETE FROM `m_permission` where entity_name = 'ChildrenStaffList'; |
| DELETE FROM `m_permission` where entity_name = 'CoordinatorStats'; |
| DELETE FROM `m_permission` where entity_name = 'BranchManagerStats'; |
| DELETE FROM `m_permission` where entity_name = 'ProgramDirectorStats'; |
| DELETE FROM `m_permission` where entity_name = 'ProgramStats'; |
| |
| |
| INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_category`, `core_report`, `use_report`, `description`, `report_sql`) |
| VALUES ('FieldAgentStats', 'Table', 'Quipo', false, false, 'Field Agent Statistics', |
| |
| " |
| select ifnull(cur.display_symbol, l.currency_code) as Currency, |
| /*This query will return more than one entry if more than one currency is used */ |
| count(distinct(c.id)) as activeClients, count(*) as activeLoans, |
| sum(l.principal_disbursed_derived) as disbursedAmount, |
| sum(l.principal_outstanding_derived) as loanOutstandingAmount, |
| round((sum(l.principal_outstanding_derived) * 100) / sum(l.principal_disbursed_derived),2) as loanOutstandingPC, |
| '???' as loanOverPaymentAmount, |
| sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) as portfolioAtRisk, |
| |
| round((sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) * 100) / sum(l.principal_outstanding_derived), 2) as portfolioAtRiskPC, |
| |
| count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) as clientsInDefault, |
| round((count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) * 100) / count(distinct(c.id)),2) as clientsInDefaultPC, |
| (sum(l.principal_disbursed_derived) / count(*)) as averageLoanAmount |
| from m_staff fa |
| join m_office o on o.id = fa.office_id |
| and o.hierarchy like concat('${currentUserHierarchy}', '%') |
| join m_group pgm on pgm.staff_id = fa.id |
| join m_loan l on l.group_id = pgm.id and l.client_id is not null |
| left join m_currency cur on cur.code = l.currency_code |
| left join m_loan_arrears_aging laa on laa.loan_id = l.id |
| join m_client c on c.id = l.client_id |
| where fa.id = ${staffId} |
| and l.loan_status_id = 300 |
| group by l.currency_code |
| "); |
| |
| |
| INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_category`, `core_report`, `use_report`, `description`, `report_sql`) |
| VALUES ('FieldAgentPrograms', 'Table', 'Quipo', false, false, 'List of Field Agent Programs', |
| |
| " |
| select pgm.id, pgm.display_name as `name`, sts.enum_message_property as status |
| from m_group pgm |
| join m_office o on o.id = pgm.office_id |
| and o.hierarchy like concat('${currentUserHierarchy}', '%') |
| left join r_enum_value sts on sts.enum_name = 'status_enum' and sts.enum_id = pgm.status_enum |
| where pgm.staff_id = ${staffId} |
| "); |
| |
| |
| INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_category`, `core_report`, `use_report`, `description`, `report_sql`) |
| VALUES ('ProgramDetails', 'Table', 'Quipo', false, false, 'List of Loans in a Program', |
| |
| " |
| select l.id as loanId, l.account_no as loanAccountNo, c.id as clientId, c.account_no as clientAccountNo, |
| pgm.display_name as programName, |
| |
| (select count(*) |
| from m_loan cy |
| where cy.group_id = pgm.id and cy.client_id =c.id |
| and cy.disbursedon_date <= l.disbursedon_date) as loanCycleNo, |
| |
| c.display_name as clientDisplayName, |
| ifnull(cur.display_symbol, l.currency_code) as Currency, |
| ifnull(l.principal_repaid_derived,0.0) as loanRepaidAmount, |
| ifnull(l.principal_outstanding_derived, 0.0) as loanOutstandingAmount, |
| '???' as loanInAdvanceAmount, |
| |
| ifnull(laa.principal_overdue_derived, 0.0) as loanInArrearsAmount, |
| if(ifnull(laa.principal_overdue_derived, 0.00) > 0, 'Yes', 'No') as inDefault, |
| |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0) as portfolioAtRisk |
| |
| from m_group pgm |
| join m_office o on o.id = pgm.office_id |
| and o.hierarchy like concat('${currentUserHierarchy}', '%') |
| join m_loan l on l.group_id = pgm.id and l.client_id is not null |
| left join m_currency cur on cur.code = l.currency_code |
| join m_client c on c.id = l.client_id |
| left join m_loan_arrears_aging laa on laa.loan_id = l.id |
| where pgm.id = ${programId} |
| and l.loan_status_id = 300 |
| order by c.display_name, l.account_no |
| |
| "); |
| |
| |
| INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_category`, `core_report`, `use_report`, `description`, `report_sql`) |
| VALUES ('ChildrenStaffList', 'Table', 'Quipo', false, false, 'Get Next Level Down Staff', |
| |
| " |
| select s.id, s.display_name, |
| s.firstname, s.lastname, s.organisational_role_enum, |
| s.organisational_role_parent_staff_id, |
| sp.display_name as `organisational_role_parent_staff_display_name` |
| from m_staff s |
| join m_staff sp on s.organisational_role_parent_staff_id = sp.id |
| where s.organisational_role_parent_staff_id = ${staffId} |
| "); |
| |
| |
| INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_category`, `core_report`, `use_report`, `description`, `report_sql`) |
| VALUES ('CoordinatorStats', 'Table', 'Quipo', false, false, 'Coordinator Statistics', |
| |
| " |
| select ifnull(cur.display_symbol, l.currency_code) as Currency, |
| /*This query will return more than one entry if more than one currency is used */ |
| count(distinct(c.id)) as activeClients, count(*) as activeLoans, |
| sum(l.principal_disbursed_derived) as disbursedAmount, |
| sum(l.principal_outstanding_derived) as loanOutstandingAmount, |
| round((sum(l.principal_outstanding_derived) * 100) / sum(l.principal_disbursed_derived),2) as loanOutstandingPC, |
| '???' as loanOverPaymentAmount, |
| sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) as portfolioAtRisk, |
| |
| round((sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) * 100) / sum(l.principal_outstanding_derived), 2) as portfolioAtRiskPC, |
| |
| count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) as clientsInDefault, |
| round((count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) * 100) / count(distinct(c.id)),2) as clientsInDefaultPC, |
| (sum(l.principal_disbursed_derived) / count(*)) as averageLoanAmount |
| from m_staff coord |
| join m_staff fa on fa.organisational_role_parent_staff_id = coord.id |
| join m_office o on o.id = fa.office_id |
| and o.hierarchy like concat('${currentUserHierarchy}', '%') |
| join m_group pgm on pgm.staff_id = fa.id |
| join m_loan l on l.group_id = pgm.id and l.client_id is not null |
| left join m_currency cur on cur.code = l.currency_code |
| left join m_loan_arrears_aging laa on laa.loan_id = l.id |
| join m_client c on c.id = l.client_id |
| where coord.id = ${staffId} |
| and l.loan_status_id = 300 |
| group by l.currency_code |
| "); |
| |
| |
| INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_category`, `core_report`, `use_report`, `description`, `report_sql`) |
| VALUES ('BranchManagerStats', 'Table', 'Quipo', false, false, 'Branch Manager Statistics', |
| |
| " |
| select ifnull(cur.display_symbol, l.currency_code) as Currency, |
| /*This query will return more than one entry if more than one currency is used */ |
| count(distinct(c.id)) as activeClients, count(*) as activeLoans, |
| sum(l.principal_disbursed_derived) as disbursedAmount, |
| sum(l.principal_outstanding_derived) as loanOutstandingAmount, |
| round((sum(l.principal_outstanding_derived) * 100) / sum(l.principal_disbursed_derived),2) as loanOutstandingPC, |
| '???' as loanOverPaymentAmount, |
| sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) as portfolioAtRisk, |
| |
| round((sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) * 100) / sum(l.principal_outstanding_derived), 2) as portfolioAtRiskPC, |
| |
| count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) as clientsInDefault, |
| round((count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) * 100) / count(distinct(c.id)),2) as clientsInDefaultPC, |
| (sum(l.principal_disbursed_derived) / count(*)) as averageLoanAmount |
| from m_staff bm |
| join m_staff coord on coord.organisational_role_parent_staff_id = bm.id |
| join m_staff fa on fa.organisational_role_parent_staff_id = coord.id |
| join m_office o on o.id = fa.office_id |
| and o.hierarchy like concat('${currentUserHierarchy}', '%') |
| join m_group pgm on pgm.staff_id = fa.id |
| join m_loan l on l.group_id = pgm.id and l.client_id is not null |
| left join m_currency cur on cur.code = l.currency_code |
| left join m_loan_arrears_aging laa on laa.loan_id = l.id |
| join m_client c on c.id = l.client_id |
| where bm.id = ${staffId} |
| and l.loan_status_id = 300 |
| group by l.currency_code |
| "); |
| |
| |
| INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_category`, `core_report`, `use_report`, `description`, `report_sql`) |
| VALUES ('ProgramDirectorStats', 'Table', 'Quipo', false, false, 'Program DirectorStatistics', |
| |
| " |
| select ifnull(cur.display_symbol, l.currency_code) as Currency, |
| /*This query will return more than one entry if more than one currency is used */ |
| count(distinct(c.id)) as activeClients, count(*) as activeLoans, |
| sum(l.principal_disbursed_derived) as disbursedAmount, |
| sum(l.principal_outstanding_derived) as loanOutstandingAmount, |
| round((sum(l.principal_outstanding_derived) * 100) / sum(l.principal_disbursed_derived),2) as loanOutstandingPC, |
| '???' as loanOverPaymentAmount, |
| sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) as portfolioAtRisk, |
| |
| round((sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) * 100) / sum(l.principal_outstanding_derived), 2) as portfolioAtRiskPC, |
| |
| count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) as clientsInDefault, |
| round((count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) * 100) / count(distinct(c.id)),2) as clientsInDefaultPC, |
| (sum(l.principal_disbursed_derived) / count(*)) as averageLoanAmount |
| from m_staff pd |
| join m_staff bm on bm.organisational_role_parent_staff_id = pd.id |
| join m_staff coord on coord.organisational_role_parent_staff_id = bm.id |
| join m_staff fa on fa.organisational_role_parent_staff_id = coord.id |
| join m_office o on o.id = fa.office_id |
| and o.hierarchy like concat('${currentUserHierarchy}', '%') |
| join m_group pgm on pgm.staff_id = fa.id |
| join m_loan l on l.group_id = pgm.id and l.client_id is not null |
| left join m_currency cur on cur.code = l.currency_code |
| left join m_loan_arrears_aging laa on laa.loan_id = l.id |
| join m_client c on c.id = l.client_id |
| where pd.id = ${staffId} |
| and l.loan_status_id = 300 |
| group by l.currency_code |
| "); |
| |
| |
| INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_category`, `core_report`, `use_report`, `description`, `report_sql`) |
| VALUES ('ProgramStats', 'Table', 'Quipo', false, false, 'Program Statistics', |
| |
| " |
| select ifnull(cur.display_symbol, l.currency_code) as Currency, |
| /*This query will return more than one entry if more than one currency is used */ |
| count(distinct(c.id)) as activeClients, count(*) as activeLoans, |
| sum(l.principal_disbursed_derived) as disbursedAmount, |
| sum(l.principal_outstanding_derived) as loanOutstandingAmount, |
| round((sum(l.principal_outstanding_derived) * 100) / sum(l.principal_disbursed_derived),2) as loanOutstandingPC, |
| '???' as loanOverPaymentAmount, |
| sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) as portfolioAtRisk, |
| |
| round((sum( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| l.principal_outstanding_derived,0)) * 100) / sum(l.principal_outstanding_derived), 2) as portfolioAtRiskPC, |
| |
| count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) as clientsInDefault, |
| round((count(distinct( |
| if(date_sub(curdate(), interval 28 day) > ifnull(laa.overdue_since_date_derived, curdate()), |
| c.id,null))) * 100) / count(distinct(c.id)),2) as clientsInDefaultPC, |
| (sum(l.principal_disbursed_derived) / count(*)) as averageLoanAmount |
| from m_group pgm |
| join m_office o on o.id = pgm.office_id |
| and o.hierarchy like concat('${currentUserHierarchy}', '%') |
| join m_loan l on l.group_id = pgm.id and l.client_id is not null |
| left join m_currency cur on cur.code = l.currency_code |
| left join m_loan_arrears_aging laa on laa.loan_id = l.id |
| join m_client c on c.id = l.client_id |
| where pgm.id = ${programId} |
| and l.loan_status_id = 300 |
| group by l.currency_code |
| "); |
| |
| |
| |
| INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) |
| VALUES ('report', 'READ_FieldAgentStats', 'FieldAgentStats', 'READ', 0); |
| |
| INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) |
| VALUES ('report', 'READ_FieldAgentPrograms', 'FieldAgentPrograms', 'READ', 0); |
| |
| INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) |
| VALUES ('report', 'READ_ProgramDetails', 'ProgramDetails', 'READ', 0); |
| |
| INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) |
| VALUES ('report', 'READ_ChildrenStaffList', 'ChildrenStaffList', 'READ', 0); |
| |
| INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) |
| VALUES ('report', 'READ_CoordinatorStats', 'CoordinatorStats', 'READ', 0); |
| |
| INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) |
| VALUES ('report', 'READ_BranchManagerStats', 'BranchManagerStats', 'READ', 0); |
| |
| INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) |
| VALUES ('report', 'READ_ProgramDirectorStats', 'ProgramDirectorStats', 'READ', 0); |
| |
| INSERT INTO `m_permission` (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) |
| VALUES ('report', 'READ_ProgramStats', 'ProgramStats', 'READ', 0); |