diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm index b0f8cc0f8..ba8b7dafb 100644 --- a/api-docs/apiLive.htm +++ b/api-docs/apiLive.htm @@ -2821,7 +2821,7 @@ No Request Body

Users

-

An API capability to support user administration.

+

An API capability to support administration of application users.

@@ -2906,8 +2906,7 @@ No Request Body "name": "Data Entry (Portfolio only)", "description": "This role allows a user full permissions around client and loan functionality but nothing else." },... - ], - "selectedRoles": [] + ] } @@ -2934,7 +2933,6 @@ No Request Body "firstname": "App(test)", "lastname": "Administrator", "email": "demomfi@mifos.org", - "allowedOffices": [], "availableRoles": [ { "id": 2, @@ -2965,8 +2963,7 @@ No Request Body

Create a User

Adds new application user.

-

Note: Password information is not required (or processed). Password details are auto-generated and then sent to the email account given - (which is why it can take a few seconds to complete). +

Note: Password information is not required (or processed). Password details at present are auto-generated and then sent to the email account given (which is why it can take a few seconds to complete).

@@ -2989,6 +2986,7 @@ Request body: { + "officeId": 1, "resourceId": 11 } @@ -3007,8 +3005,7 @@ Request body: Content-Type: application/json Request body: { - "firstname": "Test", - "roles": [2], + "firstname": "Test", "password": "window75", "repeatPassword": "window75" } @@ -3016,7 +3013,12 @@ Request body: { - "resourceId": 3 + "officeId": 1, + "resourceId": 3, + "changes": { + "firstname": "Test", + "passwordEncoded": "abc3326b1bb376351c7baeb4175f5e0504e33aadf6a158474a6d71de1befae51" + } } @@ -3035,7 +3037,9 @@ Content-Type: application/json No Request Body { - "resourceId": 20 + "officeId": 1, + "resourceId": 20, + "changes": {} } @@ -3247,24 +3251,21 @@ ALL_FUNCTIONS_READ: "true" "code": "READ_PERMISSION", "entityName": "PERMISSION", "actionName": "READ", - "selected": true, - "isMakerChecker": false + "selected": true }, { "grouping": "authorisation", "code": "CREATE_ROLE", "entityName": "ROLE", "actionName": "CREATE", - "selected": true, - "isMakerChecker": true + "selected": true }, { "grouping": "authorisation", "code": "DELETE_ROLE", "entityName": "ROLE", "actionName": "DELETE", - "selected": true, - "isMakerChecker": true + "selected": true }, ... ] diff --git a/mifosng-db/patches/01-drop-audit-columns.sql b/mifosng-db/patches/01-drop-audit-columns.sql new file mode 100644 index 000000000..32d66f1e1 --- /dev/null +++ b/mifosng-db/patches/01-drop-audit-columns.sql @@ -0,0 +1,11 @@ +ALTER TABLE `m_role` +DROP COLUMN `lastmodifiedby_id` , +DROP COLUMN `lastmodified_date` , +DROP COLUMN `created_date` , +DROP COLUMN `createdby_id`; + +ALTER TABLE `m_appuser` +DROP COLUMN `lastmodifiedby_id` , +DROP COLUMN `lastmodified_date` , +DROP COLUMN `created_date` , +DROP COLUMN `createdby_id`; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121014/patch-0001-add-group_id-to-m_loan.sql b/mifosng-db/patchesPutOnDemoServer20121014/patch-0001-add-group_id-to-m_loan.sql deleted file mode 100644 index a1596be8d..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121014/patch-0001-add-group_id-to-m_loan.sql +++ /dev/null @@ -1,3 +0,0 @@ -alter table m_loan add column group_id bigint(20) after client_id; -alter table m_loan modify client_id bigint(20); -alter table m_loan add constraint foreign key (`group_id`) references `m_group` (`id`); diff --git a/mifosng-db/patchesPutOnDemoServer20121014/patch-0002-add-client-identifiers.sql b/mifosng-db/patchesPutOnDemoServer20121014/patch-0002-add-client-identifiers.sql deleted file mode 100644 index 430e7ffec..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121014/patch-0002-add-client-identifiers.sql +++ /dev/null @@ -1,24 +0,0 @@ -CREATE TABLE `m_client_identifier` ( - `id` BIGINT(20) NOT NULL AUTO_INCREMENT, - `client_id` BIGINT(20) NOT NULL, - `document_type_id` INT(11) NOT NULL, - `document_key` VARCHAR(500) NOT NULL, - `description` VARCHAR(1000) NULL DEFAULT NULL, - `createdby_id` BIGINT(20) NULL DEFAULT NULL, - `lastmodifiedby_id` BIGINT(20) NULL DEFAULT NULL, - `created_date` DATETIME NULL DEFAULT NULL, - `lastmodified_date` DATETIME NULL DEFAULT NULL, - PRIMARY KEY (`id`), - INDEX `FK_m_client_document_m_client` (`client_id`), - INDEX `FK_m_client_document_m_code_value` (`document_type_id`), - CONSTRAINT `FK_m_client_document_m_client` FOREIGN KEY (`client_id`) REFERENCES `m_client` (`id`), - CONSTRAINT `FK_m_client_document_m_code_value` FOREIGN KEY (`document_type_id`) REFERENCES `m_code_value` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -insert into m_code values(9,'Customer Identifier'); - -insert into m_code_value values (null,'9','Driving Licence','1'); -insert into m_code_value values (null,'9','Passport','2'); -insert into m_code_value values (null,'9','PAN Card','3'); -insert into m_code_value values (null,'9','Ration Card','4'); -insert into m_code_value values (null,'9','Other','5'); \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121014/patch-0003-add-extra-fields-for-written-off-values.sql b/mifosng-db/patchesPutOnDemoServer20121014/patch-0003-add-extra-fields-for-written-off-values.sql deleted file mode 100644 index c03f5921b..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121014/patch-0003-add-extra-fields-for-written-off-values.sql +++ /dev/null @@ -1,3 +0,0 @@ -alter table m_loan_repayment_schedule add column principal_writtenoff_derived decimal(19,6) DEFAULT NULL after principal_completed_derived; -alter table m_loan_repayment_schedule add column interest_writtenoff_derived decimal(19,6) DEFAULT NULL after interest_completed_derived; - diff --git a/mifosng-db/patchesPutOnDemoServer20121014/patch-0004-deposit_account-fields_added_for_lock-in_period.sql b/mifosng-db/patchesPutOnDemoServer20121014/patch-0004-deposit_account-fields_added_for_lock-in_period.sql deleted file mode 100644 index 05c6ef65e..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121014/patch-0004-deposit_account-fields_added_for_lock-in_period.sql +++ /dev/null @@ -1,9 +0,0 @@ -ALTER TABLE `m_product_deposit` - ADD COLUMN `is_lock_in_period_allowed` tinyint(1) NOT NULL DEFAULT '0' AFTER `pre_closure_interest_rate`, - ADD COLUMN `lock_in_period` bigint(20) DEFAULT NULL AFTER `is_lock_in_period_allowed`, - ADD COLUMN `lock_in_period_type` smallint(5) NOT NULL DEFAULT '2' AFTER `lock_in_period`; - -ALTER TABLE `m_deposit_account` - ADD COLUMN `is_lock_in_period_allowed` tinyint(1) NOT NULL DEFAULT '0' AFTER `pre_closure_interest_rate`, - ADD COLUMN `lock_in_period` bigint(20) DEFAULT NULL AFTER `is_lock_in_period_allowed`, - ADD COLUMN `lock_in_period_type` smallint(5) NOT NULL DEFAULT '2' AFTER `lock_in_period`; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121014/patch-0005-add-document-table.sql b/mifosng-db/patchesPutOnDemoServer20121014/patch-0005-add-document-table.sql deleted file mode 100644 index 32ececa27..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121014/patch-0005-add-document-table.sql +++ /dev/null @@ -1,17 +0,0 @@ -CREATE TABLE `m_document` ( - `id` INT(20) NOT NULL AUTO_INCREMENT, - `parent_entity_type` VARCHAR(50) NOT NULL, - `parent_entity_id` INT(20) NOT NULL DEFAULT '0', - `name` VARCHAR(250) NOT NULL, - `file_name` VARCHAR(250) NOT NULL, - `size` INT(20) NULL DEFAULT '0', - `type` VARCHAR(50) NULL DEFAULT NULL, - `description` VARCHAR(1000) NULL DEFAULT NULL, - `location` VARCHAR(500) NOT NULL DEFAULT '0', - `createdby_id` INT(20) NOT NULL, - `lastmodifiedby_id` INT(20) NOT NULL, - `created_date` DATETIME NOT NULL, - `lastmodified_date` DATETIME NOT NULL, - PRIMARY KEY (`id`) -) -ENGINE=InnoDB; diff --git a/mifosng-db/patchesPutOnDemoServer20121014/patch-0006-drop-interest-waived-field-on-loan-transaction.sql b/mifosng-db/patchesPutOnDemoServer20121014/patch-0006-drop-interest-waived-field-on-loan-transaction.sql deleted file mode 100644 index 72bd4ee68..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121014/patch-0006-drop-interest-waived-field-on-loan-transaction.sql +++ /dev/null @@ -1 +0,0 @@ -alter table m_loan_transaction drop column interest_waived_derived; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121014/patch-0007-drop-columns-for-legacy-features.sql b/mifosng-db/patchesPutOnDemoServer20121014/patch-0007-drop-columns-for-legacy-features.sql deleted file mode 100644 index f0cd29ed0..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121014/patch-0007-drop-columns-for-legacy-features.sql +++ /dev/null @@ -1,6 +0,0 @@ -alter table m_product_loan drop column flexible_repayment_schedule; -alter table m_product_loan drop column interest_rebate; - -alter table m_loan drop column flexible_repayment_schedule; -alter table m_loan drop column interest_rebate; -alter table m_loan drop column interest_rebate_amount; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121014/patch-0008-alter-loan-transaction-derived-columns-to-be-nullable.sql b/mifosng-db/patchesPutOnDemoServer20121014/patch-0008-alter-loan-transaction-derived-columns-to-be-nullable.sql deleted file mode 100644 index fd3fe333c..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121014/patch-0008-alter-loan-transaction-derived-columns-to-be-nullable.sql +++ /dev/null @@ -1,8 +0,0 @@ -alter table m_loan_transaction modify column principal_portion_derived decimal(19,6); - -alter table m_loan_transaction modify column interest_portion_derived decimal(19,6); - -alter table m_loan_transaction modify column charges_portion_derived decimal(19,6); - - -alter table m_product_loan modify column arrearstolerance_amount decimal(19,6); \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/00003-drop-recreate-client-indentifier-table.sql b/mifosng-db/patchesPutOnDemoServer20121125/00003-drop-recreate-client-indentifier-table.sql deleted file mode 100644 index d2369e7f1..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/00003-drop-recreate-client-indentifier-table.sql +++ /dev/null @@ -1,20 +0,0 @@ -drop table `m_client_identifier`; - -CREATE TABLE `m_client_identifier` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `client_id` bigint(20) NOT NULL, - `document_type_id` int(11) NOT NULL, - `document_key` varchar(50) NOT NULL, - `description` varchar(500) DEFAULT NULL, - `createdby_id` bigint(20) DEFAULT NULL, - `lastmodifiedby_id` bigint(20) DEFAULT NULL, - `created_date` datetime DEFAULT NULL, - `lastmodified_date` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `unique_identifier_key` (`document_type_id`, `document_key`), - UNIQUE KEY `unique_client_identifier` (`client_id`,`document_type_id`), - KEY `FK_m_client_document_m_client` (`client_id`), - KEY `FK_m_client_document_m_code_value` (`document_type_id`), - CONSTRAINT `FK_m_client_document_m_client` FOREIGN KEY (`client_id`) REFERENCES `m_client` (`id`), - CONSTRAINT `FK_m_client_document_m_code_value` FOREIGN KEY (`document_type_id`) REFERENCES `m_code_value` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/00004_gkonly_risk_analysis.sql b/mifosng-db/patchesPutOnDemoServer20121125/00004_gkonly_risk_analysis.sql deleted file mode 100644 index e727351ff..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/00004_gkonly_risk_analysis.sql +++ /dev/null @@ -1,49 +0,0 @@ - -/* table used as an additional table for GK risk analysis -Also putting in default database as well for demos but not used for other tenants*/ - -DROP TABLE IF EXISTS `risk_analysis`; -CREATE TABLE `risk_analysis` ( - `client_id` bigint(20) NOT NULL, - `proposed_loan_amount` decimal(19,6) DEFAULT NULL, - `assets_cash` decimal(19,6) DEFAULT NULL, - `assets_bank_accounts` decimal(19,6) DEFAULT NULL, - `assets_accounts_receivable` decimal(19,6) DEFAULT NULL, - `assets_inventory` decimal(19,6) DEFAULT NULL, - `assets_total_fixed_business` decimal(19,6) DEFAULT NULL, - `assets_total_business` decimal(19,6) DEFAULT NULL, - `assets_total_household` decimal(19,6) DEFAULT NULL, - - `liabilities_accounts_payable` decimal(19,6) DEFAULT NULL, - `liabilities_business_debts` decimal(19,6) DEFAULT NULL, - `liabilities_total_business` decimal(19,6) DEFAULT NULL, - `liabilities_equity_working_capital` decimal(19,6) DEFAULT NULL, - `liabilities_total_household` decimal(19,6) DEFAULT NULL, - `liabilities_household_equity` decimal(19,6) DEFAULT NULL, - - `cashflow_cash_sales` decimal(19,6) DEFAULT NULL, - `cashflow_cash_sales2` decimal(19,6) DEFAULT NULL, - `cashflow_cost_goods_sold` decimal(19,6) DEFAULT NULL, - `cashflow_cost_goods_sold2` decimal(19,6) DEFAULT NULL, - `cashflow_gross_profit` decimal(19,6) DEFAULT NULL, - `cashflow_other_income1` decimal(19,6) DEFAULT NULL, - `cashflow_total_income2` decimal(19,6) DEFAULT NULL, - `cashflow_household_expense` decimal(19,6) DEFAULT NULL, - `cashflow_payments_to_savings` decimal(19,6) DEFAULT NULL, - `cashflow_operational_expenses` decimal(19,6) DEFAULT NULL, - `cashflow_disposable_income` decimal(19,6) DEFAULT NULL, - `cashflow_amount_loan_installment` decimal(19,6) DEFAULT NULL, - `cashflow_available_surplus` decimal(19,6) DEFAULT NULL, - - `fi_inventory_turnover` decimal(19,6) DEFAULT NULL, - `fi_gross_margin` decimal(19,6) DEFAULT NULL, - `fi_indebtedness` decimal(19,6) DEFAULT NULL, - `fi_loan_recommendation` decimal(19,6) DEFAULT NULL, - `fi_roe` decimal(19,6) DEFAULT NULL, - `fi_repayment_capacity` decimal(19,6) DEFAULT NULL, - - - PRIMARY KEY (`client_id`), - CONSTRAINT `FK_risk_analysis_1` FOREIGN KEY (`client_id`) REFERENCES `m_client` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - diff --git a/mifosng-db/patchesPutOnDemoServer20121125/00005_client_image_location.sql b/mifosng-db/patchesPutOnDemoServer20121125/00005_client_image_location.sql deleted file mode 100644 index 3c6f33982..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/00005_client_image_location.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `m_client` - ADD COLUMN `image_key` VARCHAR(500) NULL DEFAULT NULL AFTER `display_name`; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0005-charge-due-on-specified-date.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0005-charge-due-on-specified-date.sql deleted file mode 100644 index b228a0bb4..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0005-charge-due-on-specified-date.sql +++ /dev/null @@ -1,34 +0,0 @@ -alter table m_loan_charge -add column due_for_collection_as_of_date date DEFAULT NULL after charge_time_enum; - -alter table m_loan_repayment_schedule -add column fee_charges_amount decimal(19,6) DEFAULT NULL after interest_writtenoff_derived; - -alter table m_loan_repayment_schedule -add column fee_charges_completed_derived decimal(19,6) DEFAULT NULL after fee_charges_amount; - -alter table m_loan_repayment_schedule -add column fee_charges_writtenoff_derived decimal(19,6) DEFAULT NULL after fee_charges_completed_derived; - -alter table m_loan_repayment_schedule -add column fee_charges_waived_derived decimal(19,6) DEFAULT NULL after fee_charges_writtenoff_derived; - - -alter table m_loan_repayment_schedule -add column penalty_charges_amount decimal(19,6) DEFAULT NULL after fee_charges_waived_derived; - -alter table m_loan_repayment_schedule -add column penalty_charges_completed_derived decimal(19,6) DEFAULT NULL after penalty_charges_amount; - -alter table m_loan_repayment_schedule -add column penalty_charges_writtenoff_derived decimal(19,6) DEFAULT NULL after penalty_charges_completed_derived; - -alter table m_loan_repayment_schedule -add column penalty_charges_waived_derived decimal(19,6) DEFAULT NULL after penalty_charges_writtenoff_derived; - -/** -modify existing columns -*/ -alter table `m_loan_repayment_schedule` MODIFY `duedate` date NOT NULL; -alter table `m_loan_repayment_schedule` MODIFY `installment` smallint(5) NOT NULL; -alter table `m_loan_repayment_schedule` MODIFY `interest_waived_derived` decimal(19,6) DEFAULT NULL; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0006-repayment-schedule-changes.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0006-repayment-schedule-changes.sql deleted file mode 100644 index 9beaf01a6..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0006-repayment-schedule-changes.sql +++ /dev/null @@ -1,8 +0,0 @@ -alter table m_loan_repayment_schedule -add column `fromdate` date DEFAULT NULL after `loan_id`; - -alter table m_charge -add column `is_penalty` tinyint(1) NOT NULL DEFAULT '0' after `amount`; - -alter table m_loan_charge -add column `is_penalty` tinyint(1) NOT NULL DEFAULT '0' after `charge_id`; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0007-loan-transaction-changes.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0007-loan-transaction-changes.sql deleted file mode 100644 index 7abd9e1e8..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0007-loan-transaction-changes.sql +++ /dev/null @@ -1,8 +0,0 @@ -alter table m_loan_transaction -drop column `charges_portion_derived`; - -alter table m_loan_transaction -add column `fee_charges_portion_derived` decimal(19,6) DEFAULT NULL after `interest_portion_derived`; - -alter table m_loan_transaction -add column `penalty_charges_portion_derived` decimal(19,6) DEFAULT NULL after `fee_charges_portion_derived`; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0008-saving_product_creation.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0008-saving_product_creation.sql deleted file mode 100644 index 7f4996e44..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0008-saving_product_creation.sql +++ /dev/null @@ -1,33 +0,0 @@ -DROP TABLE IF EXISTS `m_product_savings`; -CREATE TABLE `m_product_savings` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `name` varchar(100) NOT NULL, - `description` varchar(500) DEFAULT NULL, - `currency_code` varchar(3) DEFAULT NULL, - `currency_digits` smallint(5) DEFAULT NULL, - `interest_rate` decimal(19,6) DEFAULT NULL, - `min_interest_rate` decimal(19,6) DEFAULT NULL, - `max_interest_rate` decimal(19,6) DEFAULT NULL, - `savings_deposit_amount` decimal(19,6) NOT NULL, - `savings_product_type` smallint(5) DEFAULT NULL, - `tenure_type` smallint(5) DEFAULT NULL, - `tenure` int(11) DEFAULT NULL, - `frequency` int(11) DEFAULT NULL, - `interest_type` smallint(5) DEFAULT NULL, - `interest_calculation_method` smallint(5) DEFAULT NULL, - `min_bal_for_withdrawal` decimal(19,6) NOT NULL, - `is_partial_deposit_allowed` tinyint(1) NOT NULL DEFAULT '0', - `is_lock_in_period_allowed` tinyint(1) NOT NULL DEFAULT '0', - `lock_in_period` bigint(20) DEFAULT NULL, - `lock_in_period_type` smallint(5) NOT NULL DEFAULT '1', - `is_deleted` tinyint(1) NOT NULL DEFAULT '0', - `createdby_id` bigint(20) DEFAULT NULL, - `created_date` datetime DEFAULT NULL, - `lastmodified_date` datetime DEFAULT NULL, - `lastmodifiedby_id` bigint(20) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FKJPW0000000000003` (`createdby_id`), - KEY `FKJPW0000000000004` (`lastmodifiedby_id`), - CONSTRAINT `FKJPW0000000000003` FOREIGN KEY (`createdby_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FKJPW0000000000004` FOREIGN KEY (`lastmodifiedby_id`) REFERENCES `m_appuser` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0009-saving_account_creation.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0009-saving_account_creation.sql deleted file mode 100644 index bcdf9e24e..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0009-saving_account_creation.sql +++ /dev/null @@ -1,47 +0,0 @@ -DROP TABLE if exists `m_saving_account`; -CREATE TABLE `m_saving_account` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `is_deleted` tinyint(1) NOT NULL DEFAULT '0', - `status_enum` smallint(5) NOT NULL DEFAULT '0', - `external_id` varchar(100) DEFAULT NULL, - `client_id` bigint(20) NOT NULL, - `product_id` bigint(20) NOT NULL, - `deposit_amount_per_period` decimal(19,6) NOT NULL, - `savings_product_type` smallint(5) DEFAULT NULL, - `currency_code` varchar(3) NOT NULL, - `currency_digits` smallint(5) NOT NULL, - `total_deposit_amount` decimal(19,6) NOT NULL, - `reccuring_nominal_interest_rate` decimal(19,6) NOT NULL, - `regular_saving_nominal_interest_rate` decimal(19,6) NOT NULL, - `tenure` int(11) NOT NULL, - `tenure_type` smallint(5) DEFAULT NULL, - `frequency` int(11) DEFAULT NULL, - `interest_type` smallint(5) DEFAULT NULL, - `interest_calculation_method` smallint(5) DEFAULT NULL, - `projected_commencement_date` date NOT NULL, - `actual_commencement_date` date DEFAULT NULL, - `matures_on_date` datetime DEFAULT NULL, - `projected_interest_accrued_on_maturity` decimal(19,6) NOT NULL, - `actual_interest_accrued` decimal(19,6) DEFAULT NULL, - `projected_total_maturity_amount` decimal(19,6) NOT NULL, - `actual_total_amount` decimal(19,6) DEFAULT NULL, - `is_preclosure_allowed` tinyint(1) NOT NULL DEFAULT '0', - `pre_closure_interest_rate` decimal(19,6) NOT NULL, - `is_lock_in_period_allowed` tinyint(1) NOT NULL DEFAULT '0', - `lock_in_period` bigint(20) DEFAULT NULL, - `lock_in_period_type` smallint(5) NOT NULL DEFAULT '1', - `withdrawnon_date` datetime DEFAULT NULL, - `rejectedon_date` datetime DEFAULT NULL, - `closedon_date` datetime DEFAULT NULL, - `createdby_id` bigint(20) DEFAULT NULL, - `created_date` datetime DEFAULT NULL, - `lastmodified_date` datetime DEFAULT NULL, - `lastmodifiedby_id` bigint(20) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `deposit_acc_external_id` (`external_id`), - KEY `FKSA0000000000001` (`client_id`), - KEY `FKSA0000000000002` (`product_id`), - CONSTRAINT `FKSA0000000000001` FOREIGN KEY (`client_id`) REFERENCES `m_client` (`id`), - CONSTRAINT `FKSA0000000000002` FOREIGN KEY (`product_id`) REFERENCES `m_product_savings` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; - diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0010-accounting-chart-of-accounts.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0010-accounting-chart-of-accounts.sql deleted file mode 100644 index c543995e2..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0010-accounting-chart-of-accounts.sql +++ /dev/null @@ -1,17 +0,0 @@ -DROP TABLE if exists `m_acc_coa`; -CREATE TABLE `m_acc_coa` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `name` varchar(45) NOT NULL, - `parent_id` bigint(20) DEFAULT NULL, - `gl_code` varchar(45) NOT NULL, - `is_disabled` tinyint(1) NOT NULL DEFAULT '0', - `manual_entries_allowed` tinyint(1) NOT NULL DEFAULT '0', - `category` varchar(45) NOT NULL, - `ledger_type` varchar(45) NOT NULL, - `description` varchar(500) NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `acc_gl_code` (`gl_code`), - KEY `FK_ACC_0000000001` (`parent_id`), - CONSTRAINT `FK_ACC_0000000001` FOREIGN KEY (`parent_id`) REFERENCES `m_acc_coa` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; - diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0011-loancharges-waive-and-writeoff-support.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0011-loancharges-waive-and-writeoff-support.sql deleted file mode 100644 index f2231d644..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0011-loancharges-waive-and-writeoff-support.sql +++ /dev/null @@ -1,6 +0,0 @@ -alter table m_loan_charge -add column `amount_waived_derived` decimal(19,6) DEFAULT NULL after `amount_paid_derived`; - -alter table m_loan_charge -add column `amount_writtenoff_derived` decimal(19,6) DEFAULT NULL after `amount_waived_derived`; - diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0012-loan_officer_reassignment_history.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0012-loan_officer_reassignment_history.sql deleted file mode 100644 index d68b716b8..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0012-loan_officer_reassignment_history.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE `m_loan_officer_assignment_history` ( -`id` bigint(20) NOT NULL AUTO_INCREMENT, -`loan_id` bigint(20) NOT NULL , -`loan_officer_id` bigint(20) DEFAULT NULL, -`start_date` date NOT NULL, -`end_date` date DEFAULT NULL, -`createdby_id` bigint(20) DEFAULT NULL, -`created_date` datetime DEFAULT NULL, -`lastmodified_date` datetime DEFAULT NULL, -`lastmodifiedby_id` bigint(20) DEFAULT NULL, -PRIMARY KEY (`id`), -CONSTRAINT `fk_m_loan_officer_assignment_history_0001` FOREIGN KEY (`loan_id`) REFERENCES `m_loan` (`id`), -CONSTRAINT `fk_m_loan_officer_assignment_history_0002` FOREIGN KEY (`loan_officer_id`) REFERENCES `m_staff` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0013-MIFOSX-109-Guarantors.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0013-MIFOSX-109-Guarantors.sql deleted file mode 100644 index 96ae3f2bf..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0013-MIFOSX-109-Guarantors.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE TABLE `m_guarantor_external` ( - `loan_id` BIGINT(20) NOT NULL, - `firstname` VARCHAR(50) NOT NULL, - `lastname` VARCHAR(50) NOT NULL, - `dob` DATE NULL, - `address_line_1` VARCHAR(500) NULL, - `address_line_2` VARCHAR(500) NULL, - `city` VARCHAR(50) NULL, - `state` VARCHAR(50) NULL, - `country` VARCHAR(50) NULL, - `zip` VARCHAR(20) NULL, - `house_phone_number` VARCHAR(20) NULL, - `mobile_number` VARCHAR(20) NULL, - `comment` VARCHAR(20) NULL, - PRIMARY KEY (`loan_id`), - CONSTRAINT `FK_m_guarantor_m_loan` FOREIGN KEY (`loan_id`) REFERENCES `m_loan` (`id`) -) -ENGINE=InnoDB DEFAULT CHARSET=utf8; - - -ALTER TABLE `m_loan` - ADD COLUMN `guarantor_id` BIGINT(20) NULL DEFAULT NULL AFTER `loan_officer_id`, - ADD CONSTRAINT `FK_m_loan_guarantor` FOREIGN KEY (`guarantor_id`) REFERENCES `m_client` (`id`); - -insert into x_registered_table values ('m_guarantor_external','m_loan'); \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0013-maker-checker.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0013-maker-checker.sql deleted file mode 100644 index 9bd5cda76..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0013-maker-checker.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE `m_maker_checker` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `task_name` varchar(100) NOT NULL, - `task_json` varchar(1000) NOT NULL, - `maker_id` bigint(20) NOT NULL, - `made_on_date` date NOT NULL, - `checker_id` bigint(20) DEFAULT NULL, - `checked_on_date` date DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_m_maker_m_appuser` (`maker_id`), - KEY `FK_m_checker_m_appuser` (`checker_id`), - CONSTRAINT `FK_m_maker_m_appuser` FOREIGN KEY (`maker_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FK_m_checker_m_appuser` FOREIGN KEY (`checker_id`) REFERENCES `m_appuser` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0014-command-event-source-table.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0014-command-event-source-table.sql deleted file mode 100644 index a5dc6c5c7..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0014-command-event-source-table.sql +++ /dev/null @@ -1,17 +0,0 @@ -drop table `m_maker_checker`; -CREATE TABLE `m_portfolio_command_source` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `api_operation` varchar(20) NOT NULL, - `api_resource` varchar(20) NOT NULL, - `resource_id` bigint(20) DEFAULT NULL, - `command_as_json` varchar(1000) NOT NULL, - `maker_id` bigint(20) NOT NULL, - `made_on_date` date NOT NULL, - `checker_id` bigint(20) DEFAULT NULL, - `checked_on_date` date DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_m_maker_m_appuser` (`maker_id`), - KEY `FK_m_checker_m_appuser` (`checker_id`), - CONSTRAINT `FK_m_maker_m_appuser` FOREIGN KEY (`maker_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FK_m_checker_m_appuser` FOREIGN KEY (`checker_id`) REFERENCES `m_appuser` (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126a-Rename_any_Report_and_Datatable_permissions.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126a-Rename_any_Report_and_Datatable_permissions.sql deleted file mode 100644 index ae831dab3..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126a-Rename_any_Report_and_Datatable_permissions.sql +++ /dev/null @@ -1,31 +0,0 @@ - -update m_permission p -join stretchy_report sr on p.code = concat('CAN_RUN_', sr.report_name) -set p.`code` = concat('READ_', sr.report_name), -p.default_description = concat('READ_', sr.report_name), -p.default_name = concat('READ_', sr.report_name); - -update m_permission p -join x_registered_table r on p.code = concat('CAN_READ_', r.registered_table_name) -set p.`code` = concat('READ_', r.registered_table_name), -p.default_description = concat('READ_', r.registered_table_name), -p.default_name = concat('READ_', r.registered_table_name); - -update m_permission p -join x_registered_table r on p.code = concat('CAN_UPDATE_', r.registered_table_name) -set p.`code` = concat('UPDATE_', r.registered_table_name), -p.default_description = concat('UPDATE_', r.registered_table_name), -p.default_name = concat('UPDATE_', r.registered_table_name); - -update m_permission p -join x_registered_table r on p.code = concat('CAN_CREATE_', r.registered_table_name) -set p.`code` = concat('CREATE_', r.registered_table_name), -p.default_description = concat('CREATE_', r.registered_table_name), -p.default_name = concat('CREATE_', r.registered_table_name); - -update m_permission p -join x_registered_table r on p.code = concat('CAN_DELETE_', r.registered_table_name) -set p.`code` = concat('DELETE_', r.registered_table_name), -p.default_description = concat('DELETE_', r.registered_table_name), -p.default_name = concat('DELETE_', r.registered_table_name); - diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126b-UpdateReportListingParameters.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126b-UpdateReportListingParameters.sql deleted file mode 100644 index 11c5bdb6c..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126b-UpdateReportListingParameters.sql +++ /dev/null @@ -1,10 +0,0 @@ -UPDATE stretchy_parameter -SET `parameter_sql` = 'select r.report_id, r.report_name, r.report_type, r.report_subtype, r.report_category,\r rp.parameter_id, rp.report_parameter_name, p.parameter_name\r from stretchy_report r\r left join stretchy_report_parameter rp on rp.report_id = r.report_id\r left join stretchy_parameter p on p.parameter_id = rp.parameter_id\r where r.use_report is true\r and exists\r (\r select \'f\'\r from m_appuser_role ur \r join m_role r on r.id = ur.role_id\r join m_role_permission rp on rp.role_id = r.id\r join m_permission p on p.id = rp.permission_id\r where ur.appuser_id = ${currentUserId}\r and (p.code in (\'ALL_FUNCTIONS_READ\', \'ALL_FUNCTIONS\') or p.code = concat(\"READ_\", r.report_name))\r )\r order by r.report_name, rp.parameter_id' -WHERE parameter_name = 'FullReportList'; - -UPDATE stretchy_parameter -SET `parameter_sql` = 'select r.report_id, r.report_name, r.report_type, r.report_subtype, r.report_category,\r rp.parameter_id, rp.report_parameter_name, p.parameter_name\r from stretchy_report r\r left join stretchy_report_parameter rp on rp.report_id = r.report_id\r left join stretchy_parameter p on p.parameter_id = rp.parameter_id\r where r.report_category = \'${reportCategory}\'\r and r.use_report is true\r and exists\r (\r select \'f\'\r from m_appuser_role ur \r join m_role r on r.id = ur.role_id\r join m_role_permission rp on rp.role_id = r.id\r join m_permission p on p.id = rp.permission_id\r where ur.appuser_id = ${currentUserId}\r and (p.code in (\'ALL_FUNCTIONS_READ\', \'ALL_FUNCTIONS\') or p.code = concat(\"READ_\", r.report_name))\r )\r order by r.report_name, rp.parameter_id' -WHERE parameter_name = 'reportCategoryList'; - - - diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126c-Update_m_permission_ddl.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126c-Update_m_permission_ddl.sql deleted file mode 100644 index 283778cc8..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0015-MIFOSX-126c-Update_m_permission_ddl.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE m_permission - DROP COLUMN `group_enum` , - ADD COLUMN `grouping` VARCHAR(45) NULL AFTER `id` , - ADD COLUMN `order_in_grouping` INT NULL AFTER `grouping` , - ADD UNIQUE INDEX `code` (`code` ASC) ; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0016-Mifosx-126-PermissionsOverhaulDDL.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0016-Mifosx-126-PermissionsOverhaulDDL.sql deleted file mode 100644 index f8f7f1bb8..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0016-Mifosx-126-PermissionsOverhaulDDL.sql +++ /dev/null @@ -1,55 +0,0 @@ -ALTER TABLE m_permission - DROP COLUMN `order_in_grouping` , - ADD COLUMN `entity_name` VARCHAR(100) NULL AFTER `default_name` , - ADD COLUMN `action_name` VARCHAR(100) NULL AFTER `entity_name` ; - -/* -this scripts removes all current m_role_permission and m_permission entries -and then inserts new m_permission entries and just one m_role_permission entry -which gives the role (id 1 - super user) an ALL_FUNCTIONS permission - -If you had other roles set up with specific permissions you will have to set up their permissions again. -*/ - -delete from m_role_permission; -delete from m_permission; - -/* System Supplied Permissons */ -INSERT INTO `m_permission` VALUES (1,'special','USER_ADMINISTRATION_SUPER_USER','An application user will have permission to execute all tasks related to user administration.','User administration ALL',NULL,NULL),(2,'special','ORGANISATION_ADMINISTRATION_SUPER_USER','An application user will have permission to execute all tasks related to organisation administration.','Organisation adminsitration ALL',NULL,NULL),(3,'special','PORTFOLIO_MANAGEMENT_SUPER_USER','An application user will have permission to execute all tasks related to portfolio management.','Portfolio management ALL',NULL,NULL),(4,'special','REPORTING_SUPER_USER','An application user will have permission to execute and view all reports.','Reporting ALL',NULL,NULL),(5,'portfolio','CREATE_LOAN','Allows an application user to sumit new loan application.','Can submit new loan application','LOAN','CREATE'),(6,'portfolio','CREATEHISTORIC_LOAN','Allows an application user to sumit new loan application where the submitted on date is in the past.','Can submit historic loan application','LOAN','CREATEHISTORIC'),(7,'transaction_loan','APPROVE_LOAN','Allows an application user to approve a loan application.','Can approve loan application','LOAN','APPROVE'),(8,'transaction_loan','APPROVEINPAST_LOAN','Allows an application user to approve a loan application where the approval date is in the past.','Can approve loan application in the past','LOAN','APPROVEINPAST'),(9,'transaction_loan','REJECT_LOAN','Allows an application user to reject a loan application.','Can reject loan application','LOAN','REJECT'),(10,'transaction_loan','REJECTINPAST_LOAN','Allows an application user to reject a loan application where the rejected date is in the past.','Can reject loan application in the past','LOAN','REJECTINPAST'), -(11,'transaction_loan','WITHDRAW_LOAN','Allows an application user to mark loan application as withdrawn by client.','Can withdraw loan application','LOAN','WITHDRAW'),(12,'transaction_loan','WITHDRAWINPAST_LOAN','Allows an application user to mark loan application as withdrawn by client where the withdran on date is in the past.','Can withdraw loan application in the past','LOAN','WITHDRAWINPAST'),(13,'portfolio','DELETE_LOAN','Allows an application user to complete delete the loan application if it is submitted but not approved.','Can delete submitted loan application','LOAN','DELETE'),(14,'transaction_loan','APPROVALUNDO_LOAN','Allows an application user to undo a loan approval.','Can undo loan approval','LOAN','APPROVALUNDO'),(15,'transaction_loan','DISBURSE_LOAN','Allows an application user to disburse a loan application.','Can disburse loan','LOAN','DISBURSE'),(16,'transaction_loan','DISBURSEINPAST_LOAN','Allows an application user to disburse a loan where the disbursement date is in the past.','Can disburse loan in the past','LOAN','DISBURSEINPAST'),(17,'transaction_loan','DISBURSALUNDO_LOAN','Allows an application user to undo a loan disbursal if not payments already made.','Can undo loan disbursal','LOAN','DISBURSALUNDO'),(18,'transaction_loan','REPAYMENT_LOAN','Allows an application user to enter a repayment on the loan.','Can enter a repayment against a loan','LOAN','REPAYMENT'),(19,'transaction_loan','REPAYMENTINPAST_LOAN','Allows an application user to enter a repayment on the loan where the repayment date is in the past.','Can enter a repayment against a loan in the past','LOAN','REPAYMENTINPAST'),(20,'portfolio','CREATE_CLIENT','Allows an application user to add a new client.','Can add a new client.','CLIENT','CREATE'), -(42,'special','ALL_FUNCTIONS','An application user will have permission to execute all tasks.','ALL',NULL,NULL),(43,'special','ALL_FUNCTIONS_READ','An application user will have permission to execute all read tasks.','ALL READ',NULL,NULL),(112,'organisation','CREATE_CHARGE','Create a Charge','Create a Charge','CHARGE','CREATE'),(113,'organisation','READ_CHARGE','Read Charges','Read Charges','CHARGE','READ'),(114,'organisation','UPDATE_CHARGE','Update a Charge','Update a Charge','CHARGE','UPDATE'),(115,'organisation','DELETE_CHARGE','Delete a Charge','Delete a Charge','CHARGE','DELETE'),(120,'portfolio','READ_CLIENT','Read Clients','Read Clients','CLIENT','READ'),(121,'portfolio','UPDATE_CLIENT','Update a Client','Update a Client','CLIENT','UPDATE'),(122,'portfolio','DELETE_CLIENT','Delete a Client','Delete a Client','CLIENT','DELETE'),(123,'portfolio','CREATE_CLIENTIMAGE','Create/Update Client Image','Create/Update Client Image','CLIENTIMAGE','CREATE'),(124,'portfolio','READ_CLIENTIMAGE','Read Client Images','Read Client Images','CLIENTIMAGE','READ'),(126,'portfolio','DELETE_CLIENTIMAGE','Delete Client Image','Delete Client Image','CLIENTIMAGE','DELETE'),(127,'portfolio','CREATE_CLIENTNOTE','Create a Client Note','Create a Client Note','CLIENTNOTE','CREATE'),(128,'portfolio','READ_CLIENTNOTE','Read Client Notes','Read Client Notes','CLIENTNOTE','READ'),(129,'portfolio','UPDATE_CLIENTNOTE','Update a Client Note','Update a Client Note','CLIENTNOTE','UPDATE'),(130,'portfolio','DELETE_CLIENTNOTE','Delete a Client Note','Delete a Client Note','CLIENTNOTE','DELETE'),(131,'portfolio','CREATE_CLIENTIDENTIFIER','Create a Client Identifier','Create a Client Identifier','CLIENTIDENTIFIER','CREATE'), -(132,'portfolio','READ_CLIENTIDENTIFIER','Read Client Identifiers','Read Client Identifiers','CLIENTIDENTIFIER','READ'),(133,'portfolio','UPDATE_CLIENTIDENTIFIER','Update a Client Identifier','Update a Client Identifier','CLIENTIDENTIFIER','UPDATE'),(134,'portfolio','DELETE_CLIENTIDENTIFIER','Delete a Client Identifier','Delete a Client Identifier','CLIENTIDENTIFIER','DELETE'),(135,'configuration','CREATE_CODE','Create a Code','Create a Code','CODE','CREATE'),(136,'configuration','READ_CODE','Read Codes','Read Codes','CODE','READ'),(137,'configuration','UPDATE_CODE','Update a Code','Update a Code','CODE','UPDATE'),(138,'configuration','DELETE_CODE','Delete a Code','Delete a Code','CODE','DELETE'),(139,'configuration','READ_CURRENCY','Read Currencies','Read Currencies','CURRENCY','READ'),(140,'configuration','UPDATE_CURRENCY','Update Currencies','Update Currencies','CURRENCY','UPDATE'),(141,'portfolio','CREATE_DOCUMENT','Create and Upload a Document','Create and Upload a Document','DOCUMENT','CREATE'),(142,'portfolio','READ_DOCUMENT','Read Documents','Read Documents','DOCUMENT','READ'),(143,'portfolio','UPDATE_DOCUMENT','Update and Upload a Document','Update and Upload a Document','DOCUMENT','UPDATE'),(144,'portfolio','DELETE_DOCUMENT','Delete a Document','Delete a Document','DOCUMENT','DELETE'),(145,'organisation','CREATE_FUND','Create a Fund','Create a Fund','FUND','CREATE'),(146,'organisation','READ_FUND','Read Funds','Read Funds','FUND','READ'),(147,'organisation','UPDATE_FUND','Update a Fund','Update a Fund','FUND','UPDATE'),(148,'organisation','DELETE_FUND','Delete Fund','Delete Fund','FUND','DELETE'),(149,'portfolio','CREATE_GROUP','Create a Group','Create a Group','GROUP','CREATE'), -(150,'portfolio','READ_GROUP','Read Groups','Read Groups','GROUP','READ'),(151,'portfolio','UPDATE_GROUP','Update a Group','Update a Group','GROUP','UPDATE'),(152,'portfolio','DELETE_GROUP','Delete a Group','Delete a Group','GROUP','DELETE'),(153,'organisation','CREATE_LOANPRODUCT','Create a Loan Product','Create a Loan Product','LOANPRODUCT','CREATE'),(154,'organisation','READ_LOANPRODUCT','Read Loan Products','Read Loan Products','LOANPRODUCT','READ'),(155,'organisation','UPDATE_LOANPRODUCT','Update a Loan Product','Update a Loan Product','LOANPRODUCT','UPDATE'),(156,'organisation','DELETE_LOANPRODUCT','Delete a Loan Product','Delete a Loan Product','LOANPRODUCT','DELETE'),(157,'portfolio','READ_LOAN','Read Loans','Read Loans','LOAN','READ'),(158,'portfolio','UPDATE_LOAN','Update a Loan','Update a Loan','LOAN','UPDATE'),(159,'portfolio','UPDATEHISTORIC_LOAN','Update a Loan that was Created Historically','Update a Loan that was Created Historically','LOAN','UPDATEHISTORIC'),(160,'portfolio','CREATE_LOANCHARGE','Create a Loan Charge','Create a Loan Charge','LOANCHARGE','CREATE'),(161,'portfolio','UPDATE_LOANCHARGE','Update a Loan Charge','Update a Loan Charge','LOANCHARGE','UPDATE'),(162,'portfolio','DELETE_LOANCHARGE','Delete a Loan Charge','Delete a Loan Charge','LOANCHARGE','DELETE'),(163,'portfolio','WAIVE_LOANCHARGE','Waive a Loan Charge','Waive a Loan Charge','LOANCHARGE','WAIVE'),(164,'transaction_loan','BULKREASSIGN_LOAN','Bulk Reassign Loans','Bulk Reassign Loans','LOAN','BULKREASSIGN'),(165,'transaction_loan','ADJUST_LOAN','Adjust a Loan Transaction','Adjust a Loan Transaction','LOAN','ADJUST'),(166,'transaction_loan','WAIVEINTERESTPORTION_LOAN','Waive Portion of Loan Interest','Waive Portion of Loan Interest','LOAN','WAIVEINTERESTPORTION'), -(167,'transaction_loan','WRITEOFF_LOAN','Write-Off a Loan','Write-Off a Loan','LOAN','WRITEOFF'),(168,'transaction_loan','CLOSE_LOAN','Close a Loan','Close a Loan','LOAN','CLOSE'),(169,'transaction_loan','CLOSEASRESCHEDULED_LOAN','Close a Loan (having been Rescheduled (Mifos Legacy Need)','Close a Loan (having been Rescheduled (Mifos Legacy Need)','LOAN','CLOSEASRESCHEDULED'),(170,'organisation','READ_MAKERCHECKER','Read Maker-Checker Entries','Read Maker-Checker Entries','MAKERCHECKER','READ'),(171,'organisation','CREATE_OFFICE','Create an Office','Create an Office','OFFICE','CREATE'),(172,'organisation','READ_OFFICE','Read Offices','Read Offices','OFFICE','READ'),(173,'organisation','UPDATE_OFFICE','Update an Office','Update an Office','OFFICE','UPDATE'),(174,'organisation','DELETE_OFFICE','Delete an Office','Delete an Office','OFFICE','DELETE'),(175,'organisation','READ_OFFICETRANSACTION','Read Office Transactions','Read Office Transactions','OFFICETRANSACTION','READ'),(176,'organisation','CREATE_OFFICETRANSACTION','Create an Office Transaction','Create an Office Transaction','OFFICETRANSACTION','CREATE'),(177,'authorisation','READ_PERMISSION','Read Permissions','Read Permissions','PERMISSION','READ'),(178,'authorisation','CREATE_ROLE','Create a Role','Create a Role','ROLE','CREATE'),(179,'authorisation','READ_ROLE','Read Roles','Read Roles','ROLE','READ'),(180,'authorisation','UPDATE_ROLE','Update a Role','Update a Role','ROLE','UPDATE'),(181,'authorisation','DELETE_ROLE','Delete a Role','Delete a Role','ROLE','DELETE'),(182,'authorisation','CREATE_USER','Create a User','Create a User','USER','CREATE'),(183,'authorisation','READ_USER','Read Users','Read Users','USER','READ'),(184,'authorisation','UPDATE_USER','Update a User','Update a User','USER','UPDATE'), -(185,'authorisation','DELETE_USER','Create a User','Create a User','USER','DELETE'),(186,'organisation','CREATE_STAFF','Create a Staff Member','Create a Staff Member','STAFF','CREATE'),(187,'organisation','READ_STAFF','Read Staff','Read Staff','STAFF','READ'),(188,'organisation','UPDATE_STAFF','Update a Staff Member','Update a Staff Member','STAFF','UPDATE'),(189,'organisation','DELETE_STAFF','Delete a Staff Member','Delete a Staff Member','STAFF','DELETE'),(190,'organisation','CREATE_SAVINGSPRODUCT','Create a Savings Product','Create a Savings Product','SAVINGSPRODUCT','CREATE'),(191,'organisation','READ_SAVINGSPRODUCT','Read Savings Products','Read Savings Products','SAVINGSPRODUCT','READ'),(192,'organisation','UPDATE_SAVINGSPRODUCT','Update a Savings Product','Update a Savings Product','SAVINGSPRODUCT','UPDATE'),(193,'organisation','DELETE_SAVINGSPRODUCT','Delete a Savings Product','Delete a Savings Product','SAVINGSPRODUCT','DELETE'),(194,'organisation','CREATE_DEPOSITPRODUCT','Create a Deposit Product','Create a Deposit Product','DEPOSITPRODUCT','CREATE'),(195,'organisation','READ_DEPOSITPRODUCT','Read Deposit Products','Read Deposit Products','DEPOSITPRODUCT','READ'),(196,'organisation','UPDATE_DEPOSITPRODUCT','Update a Deposit Product','Update a Deposit Product','DEPOSITPRODUCT','UPDATE'),(197,'organisation','DELETE_DEPOSITPRODUCT','Delete a Deposit Product','Delete a Deposit Product','DEPOSITPRODUCT','DELETE'),(198,'portfolio','CREATE_DEPOSITACCOUNT','Create a Deposit Account','Create a Deposit Account','DEPOSITACCOUNT','CREATE'),(199,'portfolio','READ_DEPOSITACCOUNT','Read Deposit Accounts','Read Deposit Accounts','DEPOSITACCOUNT','READ'),(200,'portfolio','UPDATE_DEPOSITACCOUNT','Update a Deposit Account','Update a Deposit Account','DEPOSITACCOUNT','UPDATE'), -(201,'portfolio','DELETE_DEPOSITACCOUNT','Delete a Deposit Account','Delete a Deposit Account','DEPOSITACCOUNT','DELETE'),(202,'transaction_deposit','APPROVE_DEPOSITACCOUNT','Approve a Deposit Account','Approve a Deposit Account','DEPOSITACCOUNT','APPROVE'),(203,'transaction_deposit','REJECT_DEPOSITACCOUNT','Reject Deposit Account','Reject Deposit Account','DEPOSITACCOUNT','REJECT'),(204,'transaction_deposit','WITHDRAW_DEPOSITACCOUNT','Withdraw Deposit Account','Withdraw Deposit Account','DEPOSITACCOUNT','WITHDRAW'),(205,'transaction_deposit','APPROVALUNDO_DEPOSITACCOUNT','Undo Approval of Deposit Account','Undo Approval of Deposit Account','DEPOSITACCOUNT','APPROVALUNDO'),(206,'transaction_deposit','WITHDRAWAL_DEPOSITACCOUNT','Make a Withdrawal From Deposit Account','Make a Withdrawal From Deposit Account','DEPOSITACCOUNT','WITHDRAWAL'),(207,'transaction_deposit','INTEREST_DEPOSITACCOUNT','Apply Interest to Deposit Accounts','Apply Interest to Deposit Accounts','DEPOSITACCOUNT','INTEREST'),(208,'transaction_deposit','RENEW_DEPOSITACCOUNT','Renew Deposit Account','Renew Deposit Account','DEPOSITACCOUNT','RENEW'),(209,'portfolio','CREATE_SAVINGSACCOUNT','Create a Savings Account','Create a Savings Account','SAVINGSACCOUNT','CREATE'),(210,'portfolio','READ_SAVINGSACCOUNT','Read Savings Accounts','Read Savings Accounts','SAVINGSACCOUNT','READ'),(211,'portfolio','UPDATE_SAVINGSACCOUNT','Update a Savings Account','Update a Savings Account','SAVINGSACCOUNT','UPDATE'),(212,'portfolio','DELETE_SAVINGSACCOUNT','Delete a Savings Account','Delete a Savings Account','SAVINGSACCOUNT','DELETE'),(213,'authorisation','PERMISSIONS_ROLE','Manage Permissions for a Role','Manage Permissions for a Role','ROLE','PERMISSIONS'); - -/* role 1 is super user, give it ALL_FUNCTIONS */ -INSERT INTO m_role_permission(role_id, permission_id) -select 1, id -from m_permission -where code = 'ALL_FUNCTIONS'; - -/* add a read permission for each defined report */ -insert into m_permission(grouping, `code`, default_description, default_name, entity_name, action_name) -select 'report', concat('READ_', sr.report_name), concat('READ_', sr.report_name), concat('READ_', sr.report_name), sr.report_name, 'READ' -from stretchy_report sr; - -/* add a create, read, update and delete permission for each registered datatable */ -insert into m_permission(grouping, `code`, default_description, default_name, entity_name, action_name) -select 'datatable', concat('CREATE_', r.registered_table_name), concat('CREATE_', r.registered_table_name), concat('CREATE_', r.registered_table_name), r.registered_table_name, 'CREATE' -from x_registered_table r; - -insert into m_permission(grouping, `code`, default_description, default_name, entity_name, action_name) -select 'datatable', concat('READ_', r.registered_table_name), concat('READ_', r.registered_table_name), concat('READ_', r.registered_table_name), r.registered_table_name, 'READ' -from x_registered_table r; - -insert into m_permission(grouping, `code`, default_description, default_name, entity_name, action_name) -select 'datatable', concat('UPDATE_', r.registered_table_name), concat('UPDATE_', r.registered_table_name), concat('UPDATE_', r.registered_table_name), r.registered_table_name, 'UPDATE' -from x_registered_table r; - -insert into m_permission(grouping, `code`, default_description, default_name, entity_name, action_name) -select 'datatable', concat('DELETE_', r.registered_table_name), concat('DELETE_', r.registered_table_name), concat('DELETE_', r.registered_table_name), r.registered_table_name, 'DELETE' -from x_registered_table r; - - diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0017-add-system-defined-flag-to-code-table.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0017-add-system-defined-flag-to-code-table.sql deleted file mode 100644 index dde7d721c..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0017-add-system-defined-flag-to-code-table.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE m_code - ADD COLUMN `is_system_defined` TINYINT(1) NOT NULL DEFAULT '0' AFTER `code_name` ; - -update m_code -set is_system_defined = true -where code_name = 'Customer Identifier'; diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0018-alter-json-column.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0018-alter-json-column.sql deleted file mode 100644 index 45783565f..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0018-alter-json-column.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `m_portfolio_command_source` CHANGE COLUMN `command_as_json` `command_as_json` VARCHAR(5000) NOT NULL; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121125/patch-0019-add-maker-checker-flag-to-permissions.sql b/mifosng-db/patchesPutOnDemoServer20121125/patch-0019-add-maker-checker-flag-to-permissions.sql deleted file mode 100644 index b9ac3f2e3..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121125/patch-0019-add-maker-checker-flag-to-permissions.sql +++ /dev/null @@ -1,13 +0,0 @@ - -ALTER TABLE `m_permission` - DROP COLUMN `default_name` , - DROP COLUMN `default_description` , - ADD COLUMN `is_maker_checker` TINYINT(1) NOT NULL AFTER `action_name` ; - -update m_permission -set is_maker_checker = false; - -update m_permission -set is_maker_checker = true -where grouping not in ('special', 'report') -and action_name != 'READ'; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-01-allow-null-arrears-in-tolerance.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-01-allow-null-arrears-in-tolerance.sql deleted file mode 100644 index 5590f3b5b..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-01-allow-null-arrears-in-tolerance.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `m_loan` CHANGE COLUMN `arrearstolerance_amount` `arrearstolerance_amount` DECIMAL(19,6) NULL; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-02-drop-stretchy-data-tables.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-02-drop-stretchy-data-tables.sql deleted file mode 100644 index 75270fc06..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-02-drop-stretchy-data-tables.sql +++ /dev/null @@ -1,9 +0,0 @@ -SET foreign_key_checks = 0; -drop table IF EXISTS `stretchydata_dataset_fields`; -drop table IF EXISTS `stretchydata_datasettype`; -drop table IF EXISTS `stretchydata_dataset`; - -drop table IF EXISTS `m_client_xadditional information`; -drop table IF EXISTS `m_client_xhighly improbable info`; -drop table IF EXISTS `m_loan_xadditional information`; -SET foreign_key_checks = 1; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-03-permissions-maker-checker-related.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-03-permissions-maker-checker-related.sql deleted file mode 100644 index 9a461456a..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-03-permissions-maker-checker-related.sql +++ /dev/null @@ -1,19 +0,0 @@ - -ALTER TABLE m_permission - CHANGE COLUMN `is_maker_checker` `can_maker_checker` TINYINT(1) NOT NULL DEFAULT '1' ; - -/* -add all checker permissions -*/ -insert into m_permission(grouping, code, entity_name, action_name, can_maker_checker) -select grouping, concat(code, '_CHECKER'), entity_name, action_name, false -from m_permission -where code not like 'READ_%' -and grouping != 'special'; - - -/* 5k not enough for command json */ -ALTER TABLE m_portfolio_command_source - CHANGE COLUMN `command_as_json` `command_as_json` TEXT NOT NULL ; - - diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-04_accounting_tables.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-04_accounting_tables.sql deleted file mode 100644 index f1c87f4f6..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-04_accounting_tables.sql +++ /dev/null @@ -1,43 +0,0 @@ -DROP TABLE IF EXISTS `m_acc_coa`; - -DROP TABLE IF EXISTS `acc_gl_account`; -CREATE TABLE `acc_gl_account` ( - `id` BIGINT(20) NOT NULL AUTO_INCREMENT, - `name` VARCHAR(45) NOT NULL, - `parent_id` BIGINT(20) NULL DEFAULT NULL, - `gl_code` VARCHAR(45) NOT NULL, - `disabled` TINYINT(1) NOT NULL DEFAULT '0', - `manual_journal_entries_allowed` TINYINT(1) NOT NULL DEFAULT '1', - `header_account` TINYINT(1) NOT NULL DEFAULT '0', - `classification` VARCHAR(45) NOT NULL, - `description` VARCHAR(500) NOT NULL, - PRIMARY KEY (`id`), - UNIQUE INDEX `acc_gl_code` (`gl_code`), - INDEX `FK_ACC_0000000001` (`parent_id`), - CONSTRAINT `FK_ACC_0000000001` FOREIGN KEY (`parent_id`) REFERENCES `acc_gl_account` (`id`) -) -COLLATE='utf8_general_ci' -ENGINE=InnoDB DEFAULT CHARSET=utf8; - -DROP TABLE IF EXISTS `acc_gl_closure`; -CREATE TABLE `acc_gl_closure` ( - `id` BIGINT(20) NOT NULL AUTO_INCREMENT, - `office_id` BIGINT(20) NOT NULL, - `closing_date` DATE NOT NULL, - `is_deleted` INT(20) NOT NULL DEFAULT '0', - `createdby_id` BIGINT(20) NULL DEFAULT NULL, - `lastmodifiedby_id` BIGINT(20) NULL DEFAULT NULL, - `created_date` DATETIME NULL DEFAULT NULL, - `lastmodified_date` DATETIME NULL DEFAULT NULL, - `comments` VARCHAR(500) NULL DEFAULT NULL, - PRIMARY KEY (`id`), - INDEX `FK_acc_gl_closure_m_office` (`office_id`), - INDEX `FK_acc_gl_closure_m_appuser` (`createdby_id`), - INDEX `FK_acc_gl_closure_m_appuser_2` (`lastmodifiedby_id`), - UNIQUE INDEX `office_id_closing_date` (`office_id`, `closing_date`), - CONSTRAINT `FK_acc_gl_closure_m_appuser` FOREIGN KEY (`createdby_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FK_acc_gl_closure_m_appuser_2` FOREIGN KEY (`lastmodifiedby_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FK_acc_gl_closure_m_office` FOREIGN KEY (`office_id`) REFERENCES `m_office` (`id`) -) -COLLATE='utf8_general_ci' -ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-05-saving-schedule-creation.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-05-saving-schedule-creation.sql deleted file mode 100644 index 131781289..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-05-saving-schedule-creation.sql +++ /dev/null @@ -1,19 +0,0 @@ - -DROP TABLE IF EXISTS `m_saving_schedule`; -CREATE TABLE `m_saving_schedule` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `saving_account_id` bigint(20) NOT NULL, - `duedate` date NOT NULL, - `installment` smallint(5) NOT NULL, - `deposit` decimal(21,4) NOT NULL, - `payment_date` date DEFAULT NULL, - `deposit_paid` decimal(21,4) DEFAULT NULL, - `completed_derived` bit(1) NOT NULL, - `createdby_id` bigint(20) DEFAULT NULL, - `created_date` datetime DEFAULT NULL, - `lastmodified_date` datetime DEFAULT NULL, - `lastmodifiedby_id` bigint(20) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FKSS00000000001` (`saving_account_id`), - CONSTRAINT `FKSS00000000001` FOREIGN KEY (`saving_account_id`) REFERENCES `m_saving_account` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-05_permission_add_and_update_tables.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-05_permission_add_and_update_tables.sql deleted file mode 100644 index 9e3c8027b..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-05_permission_add_and_update_tables.sql +++ /dev/null @@ -1,30 +0,0 @@ -/* some addition permissions and alterations */ -INSERT INTO m_permission (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) -VALUES ('configuration', 'UPDATE_PERMISSION', 'PERMISSION', 'UPDATE', '0'); - -INSERT INTO m_permission (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) -VALUES ('configuration', 'UPDATE_PERMISSION_CHECKER', 'PERMISSION', 'UPDATE', '0'); - -INSERT INTO m_permission (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) -VALUES ('configuration', 'READ_DATATABLE', 'DATATABLE', 'READ', '0'); - -INSERT INTO m_permission (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) -VALUES ('configuration', 'REGISTER_DATATABLE', 'DATATABLE', 'REGISTER', '0'); - -INSERT INTO m_permission (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) -VALUES ('configuration', 'REGISTER_DATATABLE_CHECKER', 'DATATABLE', 'REGISTER', '0'); - -INSERT INTO m_permission (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) -VALUES ('configuration', 'DEREGISTER_DATATABLE', 'DATATABLE', 'DEREGISTER', '0'); - -INSERT INTO m_permission (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) -VALUES ('configuration', 'DEREGISTER_DATATABLE_CHECKER', 'DATATABLE', 'DEREGISTER', '0'); - -INSERT INTO m_permission (`grouping`, `code`, `can_maker_checker`) -VALUES ('special', 'CHECKER_SUPER_USER', '0'); - - -update m_permission -set grouping = 'configuration' -where code like '%permission%'; - diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-06_permissions_adjustment.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-06_permissions_adjustment.sql deleted file mode 100644 index 7cc7e6d03..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-06_permissions_adjustment.sql +++ /dev/null @@ -1,5 +0,0 @@ - -update m_permission - -set grouping = "authorisation" -where code like 'PERMISSIONS_ROLE%'; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-07_length_api_resource_column.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-07_length_api_resource_column.sql deleted file mode 100644 index 30d67a28d..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-07_length_api_resource_column.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `m_portfolio_command_source` CHANGE COLUMN `api_resource` `api_resource` VARCHAR(100) NOT NULL; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-08-additional_fields_for_m_deposit_account.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-08-additional_fields_for_m_deposit_account.sql deleted file mode 100644 index 411b96c88..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-08-additional_fields_for_m_deposit_account.sql +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `m_deposit_account` - ADD COLUMN `available_interest` decimal(19,6) DEFAULT '0.000000' AFTER `is_interest_withdrawable`, - ADD COLUMN `interest_posted_amount` decimal(19,6) DEFAULT '0.000000' AFTER `available_interest`, - ADD COLUMN `last_interest_posted_date` date DEFAULT NULL AFTER `interest_posted_amount`, - ADD COLUMN `next_interest_posting_date` date DEFAULT NULL AFTER `last_interest_posted_date`; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-08_alter_joining_date_column_on_client.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-08_alter_joining_date_column_on_client.sql deleted file mode 100644 index 5211fb987..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-08_alter_joining_date_column_on_client.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `m_client` -CHANGE COLUMN `joining_date` `joined_date` DATE NULL DEFAULT NULL; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-09-extra_client_details-for_FD_Client.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-09-extra_client_details-for_FD_Client.sql deleted file mode 100644 index a5c2ecc57..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-09-extra_client_details-for_FD_Client.sql +++ /dev/null @@ -1,19 +0,0 @@ -drop table if exists extra_client_details; - -CREATE TABLE `extra_client_details` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `client_id` bigint(20) NOT NULL, - `client_dob` date DEFAULT NULL, - `client_address` varchar(60) DEFAULT NULL, - `father_name` varchar(40) DEFAULT NULL, - `nominee` varchar(40) DEFAULT NULL, - `nominee_relationship` varchar(40) DEFAULT NULL, - `nominee_address` varchar(60) DEFAULT NULL, - `crime_no` varchar(40) DEFAULT NULL, - `police_station` varchar(40) DEFAULT NULL, - `other_notes` text, - PRIMARY KEY (`id`), - UNIQUE KEY `client_id` (`client_id`), - KEY `FK_extra_client_details_1` (`client_id`), - CONSTRAINT `FK_extra_client_details` FOREIGN KEY (`client_id`) REFERENCES `m_client` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-10-add-read-audit-permission.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-10-add-read-audit-permission.sql deleted file mode 100644 index b722c6abe..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-10-add-read-audit-permission.sql +++ /dev/null @@ -1,3 +0,0 @@ - -INSERT INTO m_permission (`grouping`, `code`, `entity_name`, `action_name`, `can_maker_checker`) -VALUES ('configuration', 'READ_AUDIT', 'AUDIT', 'READ', '0'); \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-11-drop-and-recreate-command-source-table.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-11-drop-and-recreate-command-source-table.sql deleted file mode 100644 index 2561d4348..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-11-drop-and-recreate-command-source-table.sql +++ /dev/null @@ -1,21 +0,0 @@ - -drop table if exists `m_portfolio_command_source`; -CREATE TABLE `m_portfolio_command_source` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `permission_code` varchar(50) NOT NULL, - `api_operation` varchar(30) NOT NULL, - `api_resource` varchar(100) NOT NULL, - `resource_id` bigint(20) DEFAULT NULL, - `api_subresource` varchar(100) DEFAULT NULL, - `subresource_id` bigint(20) DEFAULT NULL, - `command_as_json` text NOT NULL, - `maker_id` bigint(20) NOT NULL, - `made_on_date` datetime NOT NULL, - `checker_id` bigint(20) DEFAULT NULL, - `checked_on_date` datetime DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `FK_m_maker_m_appuser` (`maker_id`), - KEY `FK_m_checker_m_appuser` (`checker_id`), - CONSTRAINT `FK_m_checker_m_appuser` FOREIGN KEY (`checker_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FK_m_maker_m_appuser` FOREIGN KEY (`maker_id`) REFERENCES `m_appuser` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-12-use-name-columns-for-permission-as-permisson-table.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-12-use-name-columns-for-permission-as-permisson-table.sql deleted file mode 100644 index ef786bb24..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-12-use-name-columns-for-permission-as-permisson-table.sql +++ /dev/null @@ -1,22 +0,0 @@ -drop table if exists `m_portfolio_command_source`; -CREATE TABLE `m_portfolio_command_source` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `action_name` varchar(50) NOT NULL, - `entity_name` varchar(50) NOT NULL, - `api_operation` varchar(30) NOT NULL, - `api_resource` varchar(100) NOT NULL, - `resource_id` bigint(20) DEFAULT NULL, - `api_subresource` varchar(100) DEFAULT NULL, - `subresource_id` bigint(20) DEFAULT NULL, - `command_as_json` text NOT NULL, - `maker_id` bigint(20) NOT NULL, - `made_on_date` datetime NOT NULL, - `checker_id` bigint(20) DEFAULT NULL, - `checked_on_date` datetime DEFAULT NULL, - `processing_result_enum` smallint(5) NOT NULL, - PRIMARY KEY (`id`), - KEY `FK_m_maker_m_appuser` (`maker_id`), - KEY `FK_m_checker_m_appuser` (`checker_id`), - CONSTRAINT `FK_m_checker_m_appuser` FOREIGN KEY (`checker_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FK_m_maker_m_appuser` FOREIGN KEY (`maker_id`) REFERENCES `m_appuser` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-12_accounting_tables_updates.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-12_accounting_tables_updates.sql deleted file mode 100644 index f7a60c03d..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-12_accounting_tables_updates.sql +++ /dev/null @@ -1,40 +0,0 @@ -DROP TABLE IF EXISTS `acc_gl_journal_entry`; - -CREATE TABLE `acc_gl_journal_entry` ( - `id` BIGINT(20) NOT NULL AUTO_INCREMENT, - `account_id` BIGINT(20) NOT NULL, - `office_id` BIGINT(20) NOT NULL, - `reversal_id` BIGINT(20) NULL DEFAULT NULL, - `transaction_id` VARCHAR(50) NOT NULL, - `reversed` TINYINT(1) NOT NULL DEFAULT '0', - `portfolio_generated` TINYINT(1) NOT NULL DEFAULT '0', - `entry_date` DATE NOT NULL, - `type` VARCHAR(50) NOT NULL, - `amount` DECIMAL(19,6) NOT NULL, - `description` VARCHAR(500) NULL DEFAULT NULL, - `entity_type` VARCHAR(50) NULL DEFAULT NULL, - `entity_id` BIGINT(20) NULL DEFAULT NULL, - `createdby_id` BIGINT(20) NOT NULL, - `lastmodifiedby_id` BIGINT(20) NOT NULL, - `created_date` DATETIME NOT NULL, - `lastmodified_date` DATETIME NOT NULL, - PRIMARY KEY (`id`), - INDEX `FK_acc_gl_journal_entry_m_office` (`office_id`), - INDEX `FK_acc_gl_journal_entry_m_appuser` (`createdby_id`), - INDEX `FK_acc_gl_journal_entry_m_appuser_2` (`lastmodifiedby_id`), - INDEX `FK_acc_gl_journal_entry_acc_gl_journal_entry` (`reversal_id`), - INDEX `FK_acc_gl_journal_entry_acc_gl_account` (`account_id`), - CONSTRAINT `FK_acc_gl_journal_entry_acc_gl_account` FOREIGN KEY (`account_id`) REFERENCES `acc_gl_account` (`id`), - CONSTRAINT `FK_acc_gl_journal_entry_acc_gl_journal_entry` FOREIGN KEY (`reversal_id`) REFERENCES `acc_gl_journal_entry` (`id`), - CONSTRAINT `FK_acc_gl_journal_entry_m_appuser` FOREIGN KEY (`createdby_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FK_acc_gl_journal_entry_m_appuser_2` FOREIGN KEY (`lastmodifiedby_id`) REFERENCES `m_appuser` (`id`), - CONSTRAINT `FK_acc_gl_journal_entry_m_office` FOREIGN KEY (`office_id`) REFERENCES `m_office` (`id`) -) -COLLATE='utf8_general_ci' -ENGINE=InnoDB DEFAULT CHARSET=utf8; - -ALTER TABLE `acc_gl_account` - ALTER `description` DROP DEFAULT; -ALTER TABLE `acc_gl_account` - CHANGE COLUMN `description` `description` VARCHAR(500) NULL AFTER `classification`; - diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-13_accounting_reports.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-13_accounting_reports.sql deleted file mode 100644 index ce238de5f..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-13_accounting_reports.sql +++ /dev/null @@ -1,19 +0,0 @@ -/**Balance sheet report**/ -INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_subtype`, `report_category`, `report_sql`, `description`, `core_report`, `use_report`) VALUES ('Balance Sheet', 'Pentaho', NULL, 'Accounting', NULL, 'Balance Sheet', 1, 1); -INSERT INTO `stretchy_report_parameter` (`report_id`, `parameter_id`, `report_parameter_name`) VALUES ((select max(report_id) from stretchy_report), 5, 'branch'); -INSERT INTO `stretchy_report_parameter` (`report_id`, `parameter_id`, `report_parameter_name`) VALUES ((select max(report_id) from stretchy_report), 81, 'date'); - -/**Income statement report**/ -INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_subtype`, `report_category`, `report_sql`, `description`, `core_report`, `use_report`) VALUES ('Income Statement', 'Pentaho', NULL, 'Accounting', NULL, 'Profilt and Loss Statement', 1, 1); -INSERT INTO `stretchy_report_parameter` (`report_id`, `parameter_id`, `report_parameter_name`) VALUES ((select max(report_id) from stretchy_report), 5, 'branch'); -INSERT INTO `stretchy_report_parameter` (`report_id`, `parameter_id`, `report_parameter_name`) VALUES ((select max(report_id) from stretchy_report), 80, 'fromDate'); -INSERT INTO `stretchy_report_parameter` (`report_id`, `parameter_id`, `report_parameter_name`) VALUES ((select max(report_id) from stretchy_report), 81, 'toDate'); - -/**Trial Balance report**/ -INSERT INTO `stretchy_report` (`report_name`, `report_type`, `report_subtype`, `report_category`, `report_sql`, `description`, `core_report`, `use_report`) VALUES ('Trial Balance', 'Pentaho', NULL, 'Accounting', NULL, 'Trial Balance Report', 1, 1); -INSERT INTO `stretchy_report_parameter` (`report_id`, `parameter_id`, `report_parameter_name`) VALUES ((select max(report_id) from stretchy_report), 5, 'branch'); -INSERT INTO `stretchy_report_parameter` (`report_id`, `parameter_id`, `report_parameter_name`) VALUES ((select max(report_id) from stretchy_report), 80, 'fromDate'); -INSERT INTO `stretchy_report_parameter` (`report_id`, `parameter_id`, `report_parameter_name`) VALUES ((select max(report_id) from stretchy_report), 81, 'toDate'); - - - diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-14_add_processing_result_enum_to_r_enum_value_table.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-14_add_processing_result_enum_to_r_enum_value_table.sql deleted file mode 100644 index 2512538ab..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-14_add_processing_result_enum_to_r_enum_value_table.sql +++ /dev/null @@ -1,4 +0,0 @@ -INSERT INTO r_enum_value(`enum_name`, `enum_id`, `enum_message_property`, `enum_value`) VALUES ('processing_result_enum', '0', 'invalid', 'Invalid'); -INSERT INTO r_enum_value(`enum_name`, `enum_id`, `enum_message_property`, `enum_value`) VALUES ('processing_result_enum', '1', 'processed', 'Processed'); -INSERT INTO r_enum_value(`enum_name`, `enum_id`, `enum_message_property`, `enum_value`) VALUES ('processing_result_enum', '2', 'awaiting.approval', 'Awaiting Approval'); -INSERT INTO r_enum_value(`enum_name`, `enum_id`, `enum_message_property`, `enum_value`) VALUES ('processing_result_enum', '3', 'rejected', 'Rejected'); diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-15a-add_deposit_every_for_m_product_savings.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-15a-add_deposit_every_for_m_product_savings.sql deleted file mode 100644 index fa4bb714b..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-15a-add_deposit_every_for_m_product_savings.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE m_product_savings - ADD COLUMN `deposit_every` bigint(20) DEFAULT NULL AFTER `tenure_type`; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-15b-add_deposit_freq_col_for_m_saving_account.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-15b-add_deposit_freq_col_for_m_saving_account.sql deleted file mode 100644 index b9dfbb2d8..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-15b-add_deposit_freq_col_for_m_saving_account.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE m_saving_account - ADD COLUMN `deposit_every` bigint(20) DEFAULT NULL AFTER `tenure_type`; \ No newline at end of file diff --git a/mifosng-db/patchesPutOnDemoServer20121219/patch-16-remove_portfolio_organisation_and_user_super_users.sql b/mifosng-db/patchesPutOnDemoServer20121219/patch-16-remove_portfolio_organisation_and_user_super_users.sql deleted file mode 100644 index f620d9bc8..000000000 --- a/mifosng-db/patchesPutOnDemoServer20121219/patch-16-remove_portfolio_organisation_and_user_super_users.sql +++ /dev/null @@ -1,11 +0,0 @@ - - -DELETE FROM m_role_permission -where exists -(select 'f' from m_permission p -where p.id = m_role_permission.permission_id -and p.code in ("ORGANISATION_ADMINISTRATION_SUPER_USER", "PORTFOLIO_MANAGEMENT_SUPER_USER", "USER_ADMINISTRATION_SUPER_USER")); - - -DELETE from m_permission -where code in ("ORGANISATION_ADMINISTRATION_SUPER_USER", "PORTFOLIO_MANAGEMENT_SUPER_USER", "USER_ADMINISTRATION_SUPER_USER"); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/audit/data/AuditSearchData.java b/mifosng-provider/src/main/java/org/mifosplatform/audit/data/AuditSearchData.java index 6b5a48c8e..c1cc92b30 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/audit/data/AuditSearchData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/audit/data/AuditSearchData.java @@ -4,28 +4,27 @@ import java.util.Collection; import java.util.List; import org.mifosplatform.audit.api.ProcessingResultLookup; -import org.mifosplatform.useradministration.data.AppUserLookup; +import org.mifosplatform.useradministration.data.AppUserData; /** - * Immutable data object representing client data. + * Immutable data object representing audit search results. */ public final class AuditSearchData { - @SuppressWarnings("unused") - private final Collection appUsers; - @SuppressWarnings("unused") - private final List actionNames; - @SuppressWarnings("unused") - private final List entityNames; - @SuppressWarnings("unused") - private final Collection processingResults; + @SuppressWarnings("unused") + private final Collection appUsers; + @SuppressWarnings("unused") + private final List actionNames; + @SuppressWarnings("unused") + private final List entityNames; + @SuppressWarnings("unused") + private final Collection processingResults; - public AuditSearchData(final Collection appUsers, - final List apiOperations, final List resources, - final Collection processingResults) { - this.appUsers = appUsers; - this.actionNames = apiOperations; - this.entityNames = resources; - this.processingResults = processingResults; - } + public AuditSearchData(final Collection appUsers, final List apiOperations, final List resources, + final Collection processingResults) { + this.appUsers = appUsers; + this.actionNames = apiOperations; + this.entityNames = resources; + this.processingResults = processingResults; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/audit/service/AuditReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/audit/service/AuditReadPlatformServiceImpl.java index ff1dc256d..f810bb62a 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/audit/service/AuditReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/audit/service/AuditReadPlatformServiceImpl.java @@ -13,7 +13,7 @@ import org.mifosplatform.audit.data.AuditSearchData; import org.mifosplatform.infrastructure.core.domain.JdbcSupport; import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; -import org.mifosplatform.useradministration.data.AppUserLookup; +import org.mifosplatform.useradministration.data.AppUserData; import org.mifosplatform.useradministration.service.AppUserReadPlatformService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -104,7 +104,7 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { @Override public AuditSearchData retrieveSearchTemplate() { - Collection appUsers = appUserReadPlatformService.retrieveSearchTemplate(); + final Collection appUsers = appUserReadPlatformService.retrieveSearchTemplate(); ActionNamesMapper mapper = new ActionNamesMapper(); List actionNames = this.jdbcTemplate.query(mapper.schema(), mapper, new Object[] {}); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/data/OfficeData.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/data/OfficeData.java index 625b8e6aa..1f811932c 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/data/OfficeData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/data/OfficeData.java @@ -21,13 +21,17 @@ public class OfficeData { @SuppressWarnings("unused") private final List allowedParents; + public static OfficeData dropdown(final Long id, final String name, final String nameDecorated) { + return new OfficeData(id, name, nameDecorated, null, null, null, null, null, null); + } + public static OfficeData template(final List parentLookups, final LocalDate defaultOpeningDate) { return new OfficeData(null, null, null, null, defaultOpeningDate, null, null, null, parentLookups); } public static OfficeData appendedTemplate(final OfficeData office, final List allowedParents) { - return new OfficeData(office.id, office.name, office.nameDecorated, office.externalId, office.openingDate, - office.hierarchy, office.parentId, office.parentName, allowedParents); + return new OfficeData(office.id, office.name, office.nameDecorated, office.externalId, office.openingDate, office.hierarchy, + office.parentId, office.parentName, allowedParents); } public OfficeData(final Long id, final String name, final String nameDecorated, final String externalId, final LocalDate openingDate, diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/service/OfficeReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/service/OfficeReadPlatformService.java index 050420495..cceb785c5 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/service/OfficeReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/service/OfficeReadPlatformService.java @@ -11,6 +11,8 @@ public interface OfficeReadPlatformService { Collection retrieveAllOffices(); + Collection retrieveAllOfficesForDropdown(); + Collection retrieveAllOfficesForLookup(); OfficeData retrieveOffice(Long officeId); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/service/OfficeReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/service/OfficeReadPlatformServiceImpl.java index 605b59027..022346949 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/service/OfficeReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/office/service/OfficeReadPlatformServiceImpl.java @@ -66,6 +66,23 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService } } + private static final class OfficeDropdownMapper implements RowMapper { + + public String schema() { + return " o.id as id, " + nameDecoratedBaseOnHierarchy + " as nameDecorated, o.name as name from m_office o "; + } + + @Override + public OfficeData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { + + final Long id = rs.getLong("id"); + final String name = rs.getString("name"); + final String nameDecorated = rs.getString("nameDecorated"); + + return OfficeData.dropdown(id, name, nameDecorated); + } + } + private static final class OfficeLookupMapper implements RowMapper { public String officeLookupSchema() { @@ -137,6 +154,19 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService return this.jdbcTemplate.query(sql, rm, new Object[] { hierarchySearchString }); } + @Override + public Collection retrieveAllOfficesForDropdown() { + final AppUser currentUser = context.authenticatedUser(); + + final String hierarchy = currentUser.getOffice().getHierarchy(); + final String hierarchySearchString = hierarchy + "%"; + + final OfficeDropdownMapper rm = new OfficeDropdownMapper(); + final String sql = "select " + rm.schema() + "where o.hierarchy like ? order by o.hierarchy"; + + return this.jdbcTemplate.query(sql, rm, new Object[] { hierarchySearchString }); + } + @Override public Collection retrieveAllOfficesForLookup() { AppUser currentUser = context.authenticatedUser(); @@ -226,5 +256,4 @@ public class OfficeReadPlatformServiceImpl implements OfficeReadPlatformService return new OfficeTransactionData(new LocalDate(), parentLookups, currencyOptions); } - } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/PermissionsApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/PermissionsApiResource.java index 88d77ec43..1d9d32a45 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/PermissionsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/PermissionsApiResource.java @@ -22,7 +22,7 @@ import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; -import org.mifosplatform.useradministration.data.PermissionUsageData; +import org.mifosplatform.useradministration.data.PermissionData; import org.mifosplatform.useradministration.service.PermissionReadPlatformService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; @@ -39,13 +39,13 @@ public class PermissionsApiResource { private final PlatformSecurityContext context; private final PermissionReadPlatformService permissionReadPlatformService; - private final DefaultToApiJsonSerializer toApiJsonSerializer; + private final DefaultToApiJsonSerializer toApiJsonSerializer; private final ApiRequestParameterHelper apiRequestParameterHelper; private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService; @Autowired public PermissionsApiResource(final PlatformSecurityContext context, final PermissionReadPlatformService readPlatformService, - final DefaultToApiJsonSerializer toApiJsonSerializer, + final DefaultToApiJsonSerializer toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper, final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) { this.context = context; @@ -64,7 +64,7 @@ public class PermissionsApiResource { final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - Collection permissions = null; + Collection permissions = null; if (settings.isMakerCheckerable()) { permissions = this.permissionReadPlatformService.retrieveAllMakerCheckerablePermissions(); } else { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/RolesApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/RolesApiResource.java index c6913b322..382885b67 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/RolesApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/RolesApiResource.java @@ -22,7 +22,6 @@ import org.mifosplatform.commands.domain.CommandWrapper; import org.mifosplatform.commands.service.CommandWrapperBuilder; import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService; import org.mifosplatform.commands.service.PortfolioCommandsReadPlatformService; -import org.mifosplatform.infrastructure.codes.data.CodeData; import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper; import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; @@ -30,7 +29,7 @@ import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSeria import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; import org.mifosplatform.useradministration.command.PermissionsCommand; import org.mifosplatform.useradministration.command.RoleCommand; -import org.mifosplatform.useradministration.data.PermissionUsageData; +import org.mifosplatform.useradministration.data.PermissionData; import org.mifosplatform.useradministration.data.RoleData; import org.mifosplatform.useradministration.data.RolePermissionsData; import org.mifosplatform.useradministration.serialization.PermissionsCommandFromApiJsonDeserializer; @@ -47,13 +46,13 @@ import org.springframework.stereotype.Component; public class RolesApiResource { /** - * The set of parameters that are supported in response for {@link CodeData} + * The set of parameters that are supported in response for {@link RoleData} */ private final Set RESPONSE_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "name", "description", "availablePermissions", "selectedPermissions")); /** - * The set of parameters that are supported in response for {@link CodeData} + * The set of parameters that are supported in response for {@link RoleData} */ private final Set PERMISSIONS_RESPONSE_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "name", "description", "permissionUsageData")); @@ -169,15 +168,15 @@ public class RolesApiResource { final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final RoleData role = this.roleReadPlatformService.retrieveRole(roleId); - final Collection permissionUsageData = this.permissionReadPlatformService.retrieveAllRolePermissions(roleId); - Collection currentChanges = null; + final Collection permissionUsageData = this.permissionReadPlatformService.retrieveAllRolePermissions(roleId); + Collection currentChanges = null; if (settings.isCommandIdPassed()) { final CommandSourceData entry = this.commandSourceReadPlatformService.retrieveById(settings.getCommandId()); PermissionsCommand command = permissionsFromApiJsonDeserializer.commandFromApiJson(entry.json()); - currentChanges = new ArrayList(); + currentChanges = new ArrayList(); for (String key : command.getPermissions().keySet()) { - currentChanges.add(PermissionUsageData.from(key, command.getPermissions().get(key))); + currentChanges.add(PermissionData.from(key, command.getPermissions().get(key))); } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/UsersApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/UsersApiResource.java index a9f9cd4f6..ee75fb913 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/UsersApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/api/UsersApiResource.java @@ -1,10 +1,8 @@ package org.mifosplatform.useradministration.api; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; -import java.util.List; import java.util.Set; import javax.ws.rs.Consumes; @@ -27,7 +25,7 @@ import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; -import org.mifosplatform.organisation.office.data.OfficeLookup; +import org.mifosplatform.organisation.office.data.OfficeData; import org.mifosplatform.organisation.office.service.OfficeReadPlatformService; import org.mifosplatform.useradministration.data.AppUserData; import org.mifosplatform.useradministration.service.AppUserReadPlatformService; @@ -94,8 +92,8 @@ public class UsersApiResource { AppUserData user = this.readPlatformService.retrieveUser(userId); if (settings.isTemplate()) { - List offices = new ArrayList(this.officeReadPlatformService.retrieveAllOfficesForLookup()); - user = new AppUserData(user, offices); + final Collection offices = this.officeReadPlatformService.retrieveAllOfficesForDropdown(); + user = AppUserData.template(user, offices); } return this.toApiJsonSerializer.serialize(settings, user, RESPONSE_DATA_PARAMETERS); @@ -153,7 +151,7 @@ public class UsersApiResource { public String deleteUser(@PathParam("userId") final Long userId) { final CommandWrapper commandRequest = new CommandWrapperBuilder() // - .updateUser(userId) // + .deleteUser(userId) // .build(); final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/command/RoleCommand.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/command/RoleCommand.java index 96e7a2550..fc4a5f828 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/command/RoleCommand.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/command/RoleCommand.java @@ -1,12 +1,5 @@ package org.mifosplatform.useradministration.command; -import java.util.ArrayList; -import java.util.List; - -import org.mifosplatform.infrastructure.core.data.ApiParameterError; -import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder; -import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException; - /** * Immutable command for creating or updating details of a role. */ @@ -27,30 +20,4 @@ public class RoleCommand { public String getDescription() { return description; } - - public void validateForCreate() { - List dataValidationErrors = new ArrayList(); - - DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("role"); - - baseDataValidator.reset().parameter("name").value(this.name).notBlank(); - baseDataValidator.reset().parameter("description").value(this.description).notBlank().notExceedingLengthOf(500); - - if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", - "Validation errors exist.", dataValidationErrors); } - } - - public void validateForUpdate() { - List dataValidationErrors = new ArrayList(); - - DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("role"); - - baseDataValidator.reset().parameter("name").value(this.name).ignoreIfNull().notBlank(); - baseDataValidator.reset().parameter("description").value(this.description).ignoreIfNull().notBlank().notExceedingLengthOf(500); - - baseDataValidator.reset().anyOfNotNull(this.name, this.description); - - if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", - "Validation errors exist.", dataValidationErrors); } - } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/command/UserCommand.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/command/UserCommand.java deleted file mode 100644 index 2555c1ebc..000000000 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/command/UserCommand.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.mifosplatform.useradministration.command; - -import java.util.ArrayList; -import java.util.List; - -import org.mifosplatform.infrastructure.core.data.ApiParameterError; -import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder; -import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException; - -/** - * Immutable command for creating or updating details of a User. - */ -public class UserCommand { - - private final String username; - private final String firstname; - private final String lastname; - private final String password; - private final String repeatPassword; - private final String email; - private final Long officeId; - private final String[] notSelectedRoles; - private final String[] roles; - - public UserCommand(final String username, final String firstname, final String lastname, final String password, - final String repeatPassword, final String email, final Long officeId, final String[] notSelectedRoles, final String[] roles) { - this.username = username; - this.firstname = firstname; - this.lastname = lastname; - this.password = password; - this.repeatPassword = repeatPassword; - this.email = email; - this.officeId = officeId; - this.notSelectedRoles = notSelectedRoles; - this.roles = roles; - } - - public String getUsername() { - return username; - } - - public String getFirstname() { - return firstname; - } - - public String getLastname() { - return lastname; - } - - public String getPassword() { - return password; - } - - public String getRepeatPassword() { - return repeatPassword; - } - - public String getEmail() { - return email; - } - - public Long getOfficeId() { - return officeId; - } - - public String[] getNotSelectedRoles() { - return notSelectedRoles; - } - - public String[] getRoles() { - return roles; - } - - public void validateForCreate() { - List dataValidationErrors = new ArrayList(); - - DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("user"); - - baseDataValidator.reset().parameter("username").value(this.username).notBlank(); - baseDataValidator.reset().parameter("firstname").value(this.firstname).notBlank(); - baseDataValidator.reset().parameter("lastname").value(this.lastname).notBlank(); - baseDataValidator.reset().parameter("email").value(this.email).notBlank(); - baseDataValidator.reset().parameter("officeId").value(this.officeId).notNull().integerGreaterThanZero(); - baseDataValidator.reset().parameter("roles").value(this.roles).arrayNotEmpty(); - - if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", - "Validation errors exist.", dataValidationErrors); } - } - - public void validateForUpdate() { - List dataValidationErrors = new ArrayList(); - - DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("user"); - - baseDataValidator.reset().parameter("username").value(this.username).ignoreIfNull().notBlank(); - baseDataValidator.reset().parameter("firstname").value(this.firstname).ignoreIfNull().notBlank(); - baseDataValidator.reset().parameter("lastname").value(this.lastname).ignoreIfNull().notBlank(); - baseDataValidator.reset().parameter("email").value(this.email).ignoreIfNull().notBlank(); - baseDataValidator.reset().parameter("officeId").value(this.officeId).ignoreIfNull().notNull().integerGreaterThanZero(); - baseDataValidator.reset().parameter("roles").value(this.roles).ignoreIfNull().arrayNotEmpty(); - - baseDataValidator.reset().parameter("password").value(this.password).ignoreIfNull().notBlank(); - baseDataValidator.reset().parameter("passwordRepeat").value(this.repeatPassword).ignoreIfNull().notBlank(); - baseDataValidator.reset().parameter("password").value(this.password).ignoreIfNull() - .equalToParameter("repeatPassword", this.repeatPassword); - - baseDataValidator.reset().anyOfNotNull(this.username, this.firstname, this.lastname, this.email, this.officeId, this.roles, - this.password, this.repeatPassword); - - if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", - "Validation errors exist.", dataValidationErrors); } - } -} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/AppUserData.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/AppUserData.java index eef0aae40..1db5851f1 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/AppUserData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/AppUserData.java @@ -1,9 +1,8 @@ package org.mifosplatform.useradministration.data; -import java.util.ArrayList; -import java.util.List; +import java.util.Collection; -import org.mifosplatform.organisation.office.data.OfficeLookup; +import org.mifosplatform.organisation.office.data.OfficeData; /** * Immutable data object for application user data. @@ -19,12 +18,32 @@ public class AppUserData { private final String email; @SuppressWarnings("unused") - private final List allowedOffices; - private final List availableRoles; - private final List selectedRoles; + private final Collection allowedOffices; + private final Collection availableRoles; + private final Collection selectedRoles; - public AppUserData(final Long id, final String username, final String email, final Long officeId, final String officeName, - final String firstname, final String lastname, final List availableRoles, final List selectedRoles) { + public static AppUserData template(AppUserData user, Collection officesForDropdown) { + return new AppUserData(user.id, user.username, user.email, user.officeId, user.officeName, user.firstname, user.lastname, + user.availableRoles, user.selectedRoles, officesForDropdown); + } + + public static AppUserData template(final Collection offices, final Collection availableRoles) { + return new AppUserData(null, null, null, null, null, null, null, availableRoles, null, offices); + } + + public static AppUserData dropdown(final Long id, final String username) { + return new AppUserData(id, username, null, null, null, null, null, null, null, null); + } + + public static AppUserData instance(final Long id, final String username, final String email, final Long officeId, + final String officeName, final String firstname, final String lastname, final Collection availableRoles, + final Collection selectedRoles) { + return new AppUserData(id, username, email, officeId, officeName, firstname, lastname, availableRoles, selectedRoles, null); + } + + private AppUserData(final Long id, final String username, final String email, final Long officeId, final String officeName, + final String firstname, final String lastname, final Collection availableRoles, + final Collection selectedRoles, final Collection allowedOffices) { this.id = id; this.username = username; this.officeId = officeId; @@ -32,40 +51,11 @@ public class AppUserData { this.firstname = firstname; this.lastname = lastname; this.email = email; - - this.allowedOffices = new ArrayList(); + this.allowedOffices = allowedOffices; this.availableRoles = availableRoles; this.selectedRoles = selectedRoles; } - public AppUserData(final AppUserData user, final List allowedOffices) { - this.id = user.id; - this.username = user.username; - this.officeId = user.officeId; - this.officeName = user.officeName; - this.firstname = user.firstname; - this.lastname = user.lastname; - this.email = user.email; - - this.allowedOffices = allowedOffices; - this.availableRoles = user.availableRoles; - this.selectedRoles = user.selectedRoles; - } - - public AppUserData(final List allowedOffices, final List availableRoles) { - this.id = null; - this.username = null; - this.officeId = null; - this.officeName = null; - this.firstname = null; - this.lastname = null; - this.email = null; - - this.allowedOffices = allowedOffices; - this.availableRoles = availableRoles; - this.selectedRoles = new ArrayList(); - } - public boolean hasIdentifyOf(final Long createdById) { return this.id.equals(createdById); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/AppUserLookup.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/AppUserLookup.java deleted file mode 100644 index eb758ed27..000000000 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/AppUserLookup.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.mifosplatform.useradministration.data; - -/** - * Immutable data object for application user data. - */ -public class AppUserLookup { - - private final Long id; - private final String username; - - public AppUserLookup(final Long id, final String username) { - this.id = id; - this.username = username; - } - - public Long getId() { - return this.id; - } - - public String getUsername() { - return this.username; - } - -} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/PermissionUsageData.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/PermissionData.java similarity index 52% rename from mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/PermissionUsageData.java rename to mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/PermissionData.java index c0f0a9694..cc92cdebf 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/PermissionUsageData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/PermissionData.java @@ -3,7 +3,7 @@ package org.mifosplatform.useradministration.data; /** * Immutable representation of permissions */ -public class PermissionUsageData { +public class PermissionData { @SuppressWarnings("unused") private final String grouping; @@ -16,11 +16,16 @@ public class PermissionUsageData { @SuppressWarnings("unused") private final Boolean selected; - public static PermissionUsageData from(final String permissionCode, final boolean isSelected) { - return new PermissionUsageData(null, permissionCode, null, null, isSelected); + public static PermissionData from(final String permissionCode, final boolean isSelected) { + return new PermissionData(null, permissionCode, null, null, isSelected); } - public PermissionUsageData(final String grouping, final String code, final String entityName, final String actionName, + public static PermissionData instance(final String grouping, final String code, final String entityName, final String actionName, + final Boolean selected) { + return new PermissionData(grouping, code, entityName, actionName, selected); + } + + private PermissionData(final String grouping, final String code, final String entityName, final String actionName, final Boolean selected) { this.grouping = grouping; this.code = code; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/RoleData.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/RoleData.java index ad2c31707..b47b8b5bb 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/RoleData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/RoleData.java @@ -12,11 +12,16 @@ public class RoleData { private final String description; @SuppressWarnings("unused") private final RoleData currentChanges; - + + public RolePermissionsData toRolePermissionData(final Collection permissionUsageData, + final Collection currentChanges) { + return new RolePermissionsData(id, name, description, permissionUsageData, currentChanges); + } + public static RoleData changes(final String name, final String description) { return new RoleData(null, name, description, null); } - + public static RoleData integrateChanges(final RoleData role, final RoleData currentChanges) { return new RoleData(role.id, role.name, role.description, currentChanges); } @@ -38,8 +43,4 @@ public class RoleData { public int hashCode() { return this.id.hashCode(); } - - public RolePermissionsData toRolePermissionData(final Collection permissionUsageData, final Collection currentChanges) { - return new RolePermissionsData(id, name, description, permissionUsageData, currentChanges); - } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/RolePermissionsData.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/RolePermissionsData.java index efc059517..ca8f9f976 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/RolePermissionsData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/data/RolePermissionsData.java @@ -15,12 +15,12 @@ public class RolePermissionsData { private final String description; @SuppressWarnings("unused") - private final Collection permissionUsageData; + private final Collection permissionUsageData; @SuppressWarnings("unused") - private final Collection currentChanges; + private final Collection currentChanges; public RolePermissionsData(final Long id, final String name, final String description, - final Collection permissionUsageData, final Collection currentChanges) { + final Collection permissionUsageData, final Collection currentChanges) { this.id = id; this.name = name; this.description = description; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/AppUser.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/AppUser.java index 9f08c80da..71105fcfc 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/AppUser.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/AppUser.java @@ -20,20 +20,20 @@ import javax.persistence.UniqueConstraint; import org.apache.commons.lang.StringUtils; import org.mifosplatform.infrastructure.core.api.JsonCommand; -import org.mifosplatform.infrastructure.core.domain.AbstractAuditableCustom; import org.mifosplatform.infrastructure.security.domain.PlatformUser; import org.mifosplatform.infrastructure.security.exception.NoAuthorizationException; import org.mifosplatform.infrastructure.security.service.PlatformPasswordEncoder; import org.mifosplatform.organisation.office.domain.Office; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.jpa.domain.AbstractPersistable; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; @Entity @Table(name = "m_appuser", uniqueConstraints = @UniqueConstraint(columnNames = { "username" }, name = "username_org")) -public class AppUser extends AbstractAuditableCustom implements PlatformUser { +public class AppUser extends AbstractPersistable implements PlatformUser { private final static Logger logger = LoggerFactory.getLogger(AppUser.class); @@ -365,7 +365,7 @@ public class AppUser extends AbstractAuditableCustom implements P String matchPermission = "READ_" + entityType.toUpperCase(); if (!(hasNotPermissionForAnyOf("ALL_FUNCTIONS", "ALL_FUNCTIONS_READ", matchPermission))) return; - + throw new NoAuthorizationException(authorizationMessage); } @@ -385,7 +385,7 @@ public class AppUser extends AbstractAuditableCustom implements P } return hasPermission; } - + private boolean hasAllFunctionsPermission() { boolean match = false; for (Role role : this.roles) { @@ -443,8 +443,7 @@ public class AppUser extends AbstractAuditableCustom implements P } public void validateHasDatatableReadPermission(final String datatable) { - if (hasNotPermissionForDatatable(datatable, "READ")) { - throw new NoAuthorizationException("Not authorised to read datatable: " + datatable); - } + if (hasNotPermissionForDatatable(datatable, "READ")) { throw new NoAuthorizationException("Not authorised to read datatable: " + + datatable); } } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/Role.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/Role.java index 15b1f1bd4..18548b2d1 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/Role.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/Role.java @@ -15,12 +15,12 @@ import javax.persistence.ManyToMany; import javax.persistence.Table; import org.mifosplatform.infrastructure.core.api.JsonCommand; -import org.mifosplatform.infrastructure.core.domain.AbstractAuditableCustom; import org.mifosplatform.useradministration.data.RoleData; +import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_role") -public class Role extends AbstractAuditableCustom { +public class Role extends AbstractPersistable { @Column(name = "name", nullable = false, length = 100) private String name; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/exception/RoleNotFoundException.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/exception/RoleNotFoundException.java index 08f65b628..25edb7786 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/exception/RoleNotFoundException.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/exception/RoleNotFoundException.java @@ -7,7 +7,7 @@ import org.mifosplatform.infrastructure.core.exception.AbstractPlatformResourceN */ public class RoleNotFoundException extends AbstractPlatformResourceNotFoundException { - public RoleNotFoundException(Long id) { - super("error.msg.role.id.invalid", "Role with identifier " + id + " does not exist", id); - } + public RoleNotFoundException(Long id) { + super("error.msg.role.id.invalid", "Role with identifier " + id + " does not exist", id); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/exception/UserNotFoundException.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/exception/UserNotFoundException.java index 2cbecda88..1d7c4310e 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/exception/UserNotFoundException.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/exception/UserNotFoundException.java @@ -7,7 +7,7 @@ import org.mifosplatform.infrastructure.core.exception.AbstractPlatformResourceN */ public class UserNotFoundException extends AbstractPlatformResourceNotFoundException { - public UserNotFoundException(Long id) { - super("error.msg.user.id.invalid", "User with identifier " + id + " does not exist", id); - } + public UserNotFoundException(Long id) { + super("error.msg.user.id.invalid", "User with identifier " + id + " does not exist", id); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/handler/UpdateUserCommandHandler.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/handler/UpdateUserCommandHandler.java index cdc3c00ce..97ac9fb8d 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/handler/UpdateUserCommandHandler.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/handler/UpdateUserCommandHandler.java @@ -3,8 +3,6 @@ package org.mifosplatform.useradministration.handler; import org.mifosplatform.commands.handler.NewCommandSourceHandler; import org.mifosplatform.infrastructure.core.api.JsonCommand; import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; -import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; -import org.mifosplatform.useradministration.domain.AppUser; import org.mifosplatform.useradministration.service.AppUserWritePlatformService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,11 +12,9 @@ import org.springframework.transaction.annotation.Transactional; public class UpdateUserCommandHandler implements NewCommandSourceHandler { private final AppUserWritePlatformService writePlatformService; - private final PlatformSecurityContext context; @Autowired - public UpdateUserCommandHandler(final PlatformSecurityContext context, final AppUserWritePlatformService writePlatformService) { - this.context = context; + public UpdateUserCommandHandler(final AppUserWritePlatformService writePlatformService) { this.writePlatformService = writePlatformService; } @@ -26,16 +22,7 @@ public class UpdateUserCommandHandler implements NewCommandSourceHandler { @Override public CommandProcessingResult processCommand(final JsonCommand command) { - final AppUser loggedInUser = context.authenticatedUser(); - final Long userId = command.entityId(); - CommandProcessingResult result = null; - if (loggedInUser.hasIdOf(userId)) { - result = this.writePlatformService.updateUsersOwnAccountDetails(userId, command); - } else { - result = this.writePlatformService.updateUser(userId, command); - } - - return result; + return this.writePlatformService.updateUser(userId, command); } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/RoleCommandFromApiJsonDeserializer.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/RoleCommandFromApiJsonDeserializer.java index d45c56883..7126f1b24 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/RoleCommandFromApiJsonDeserializer.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/RoleCommandFromApiJsonDeserializer.java @@ -1,13 +1,18 @@ package org.mifosplatform.useradministration.serialization; import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; +import org.mifosplatform.infrastructure.core.data.ApiParameterError; +import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder; import org.mifosplatform.infrastructure.core.exception.InvalidJsonException; +import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException; import org.mifosplatform.infrastructure.core.serialization.AbstractFromApiJsonDeserializer; import org.mifosplatform.infrastructure.core.serialization.FromApiJsonDeserializer; import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper; @@ -50,4 +55,53 @@ public final class RoleCommandFromApiJsonDeserializer extends AbstractFromApiJso return new RoleCommand(name, description); } + + public void validateForCreate(final String json) { + if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); } + + final Type typeOfMap = new TypeToken>() {}.getType(); + fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters); + + final List dataValidationErrors = new ArrayList(); + final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("role"); + + final JsonElement element = fromApiJsonHelper.parse(json); + + final String name = fromApiJsonHelper.extractStringNamed("name", element); + baseDataValidator.reset().parameter("name").value(name).notBlank().notExceedingLengthOf(100); + + final String description = fromApiJsonHelper.extractStringNamed("description", element); + baseDataValidator.reset().parameter("description").value(description).notBlank().notExceedingLengthOf(500); + + throwExceptionIfValidationWarningsExist(dataValidationErrors); + } + + public void validateForUpdate(final String json) { + if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); } + + final Type typeOfMap = new TypeToken>() {}.getType(); + fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters); + + final List dataValidationErrors = new ArrayList(); + final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("role"); + + final JsonElement element = fromApiJsonHelper.parse(json); + + if (fromApiJsonHelper.parameterExists("name", element)) { + final String username = fromApiJsonHelper.extractStringNamed("name", element); + baseDataValidator.reset().parameter("name").value(username).notBlank().notExceedingLengthOf(100); + } + + if (fromApiJsonHelper.parameterExists("description", element)) { + final String description = fromApiJsonHelper.extractStringNamed("description", element); + baseDataValidator.reset().parameter("description").value(description).notBlank().notExceedingLengthOf(500); + } + + throwExceptionIfValidationWarningsExist(dataValidationErrors); + } + + private void throwExceptionIfValidationWarningsExist(final List dataValidationErrors) { + if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", + "Validation errors exist.", dataValidationErrors); } + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/UserCommandFromApiJsonDeserializer.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/UserCommandFromApiJsonDeserializer.java deleted file mode 100644 index 73036d966..000000000 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/UserCommandFromApiJsonDeserializer.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.mifosplatform.useradministration.serialization; - -import java.lang.reflect.Type; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.lang.StringUtils; -import org.mifosplatform.infrastructure.core.exception.InvalidJsonException; -import org.mifosplatform.infrastructure.core.serialization.AbstractFromApiJsonDeserializer; -import org.mifosplatform.infrastructure.core.serialization.FromApiJsonDeserializer; -import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper; -import org.mifosplatform.useradministration.command.UserCommand; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.google.gson.JsonElement; -import com.google.gson.reflect.TypeToken; - -/** - * Implementation of {@link FromApiJsonDeserializer} for {@link UserCommand}'s. - */ -@Component -public final class UserCommandFromApiJsonDeserializer extends AbstractFromApiJsonDeserializer { - - /** - * The parameters supported for this command. - */ - private final Set supportedParameters = new HashSet(Arrays.asList("username", "firstname", "lastname", "password", - "repeatPassword", "email", "officeId", "notSelectedRoles", "roles")); - - private final FromJsonHelper fromApiJsonHelper; - - @Autowired - public UserCommandFromApiJsonDeserializer(final FromJsonHelper fromApiJsonHelper) { - this.fromApiJsonHelper = fromApiJsonHelper; - } - - @Override - public UserCommand commandFromApiJson(final String json) { - - if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); } - - final Type typeOfMap = new TypeToken>() {}.getType(); - fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters); - - final JsonElement element = fromApiJsonHelper.parse(json); - - final String username = fromApiJsonHelper.extractStringNamed("username", element); - final String firstname = fromApiJsonHelper.extractStringNamed("firstname", element); - final String lastname = fromApiJsonHelper.extractStringNamed("lastname", element); - final String password = fromApiJsonHelper.extractStringNamed("password", element); - final String repeatPassword = fromApiJsonHelper.extractStringNamed("repeatPassword", element); - final String email = fromApiJsonHelper.extractStringNamed("email", element); - final Long officeId = fromApiJsonHelper.extractLongNamed("officeId", element); - - final String[] notSelectedRoles = fromApiJsonHelper.extractArrayNamed("notSelectedRoles", element); - final String[] roles = fromApiJsonHelper.extractArrayNamed("roles", element); - - return new UserCommand(username, firstname, lastname, password, repeatPassword, email, officeId, notSelectedRoles, roles); - } -} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/UserCommandFromApiJsonDeserializerHelper.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/UserCommandFromApiJsonDeserializerHelper.java new file mode 100644 index 000000000..d905bf98b --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/serialization/UserCommandFromApiJsonDeserializerHelper.java @@ -0,0 +1,132 @@ +package org.mifosplatform.useradministration.serialization; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.lang.StringUtils; +import org.mifosplatform.infrastructure.core.api.JsonCommand; +import org.mifosplatform.infrastructure.core.data.ApiParameterError; +import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder; +import org.mifosplatform.infrastructure.core.exception.InvalidJsonException; +import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException; +import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.google.gson.JsonElement; +import com.google.gson.reflect.TypeToken; + +/** + * Implementation for deserializing users {@link JsonCommand} for validation. + */ +@Component +public final class UserCommandFromApiJsonDeserializerHelper { + + /** + * The parameters supported for this command. + */ + private final Set supportedParameters = new HashSet(Arrays.asList("username", "firstname", "lastname", "password", + "repeatPassword", "email", "officeId", "notSelectedRoles", "roles")); + + private final FromJsonHelper fromApiJsonHelper; + + @Autowired + public UserCommandFromApiJsonDeserializerHelper(final FromJsonHelper fromApiJsonHelper) { + this.fromApiJsonHelper = fromApiJsonHelper; + } + + public void validateForCreate(final String json) { + if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); } + + final Type typeOfMap = new TypeToken>() {}.getType(); + fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters); + + final List dataValidationErrors = new ArrayList(); + final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("user"); + + final JsonElement element = fromApiJsonHelper.parse(json); + + final String username = fromApiJsonHelper.extractStringNamed("username", element); + baseDataValidator.reset().parameter("username").value(username).notBlank().notExceedingLengthOf(100); + + final String firstname = fromApiJsonHelper.extractStringNamed("firstname", element); + baseDataValidator.reset().parameter("firstname").value(firstname).notBlank().notExceedingLengthOf(100); + + final String lastname = fromApiJsonHelper.extractStringNamed("lastname", element); + baseDataValidator.reset().parameter("lastname").value(lastname).notBlank().notExceedingLengthOf(100); + + final String email = fromApiJsonHelper.extractStringNamed("email", element); + baseDataValidator.reset().parameter("email").value(email).notBlank().notExceedingLengthOf(100); + + final Long officeId = fromApiJsonHelper.extractLongNamed("officeId", element); + baseDataValidator.reset().parameter("officeId").value(officeId).notNull().integerGreaterThanZero(); + + final String[] roles = fromApiJsonHelper.extractArrayNamed("roles", element); + baseDataValidator.reset().parameter("roles").value(roles).arrayNotEmpty(); + + throwExceptionIfValidationWarningsExist(dataValidationErrors); + } + + private void throwExceptionIfValidationWarningsExist(final List dataValidationErrors) { + if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", + "Validation errors exist.", dataValidationErrors); } + } + + public void validateForUpdate(final String json) { + if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); } + + final Type typeOfMap = new TypeToken>() {}.getType(); + fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters); + + final List dataValidationErrors = new ArrayList(); + final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("user"); + + final JsonElement element = fromApiJsonHelper.parse(json); + + if (fromApiJsonHelper.parameterExists("officeId", element)) { + final Long officeId = fromApiJsonHelper.extractLongNamed("officeId", element); + baseDataValidator.reset().parameter("officeId").value(officeId).notNull().integerGreaterThanZero(); + } + + if (fromApiJsonHelper.parameterExists("username", element)) { + final String username = fromApiJsonHelper.extractStringNamed("username", element); + baseDataValidator.reset().parameter("username").value(username).notBlank().notExceedingLengthOf(100); + } + + if (fromApiJsonHelper.parameterExists("firstname", element)) { + final String firstname = fromApiJsonHelper.extractStringNamed("firstname", element); + baseDataValidator.reset().parameter("firstname").value(firstname).notBlank().notExceedingLengthOf(100); + } + + if (fromApiJsonHelper.parameterExists("lastname", element)) { + final String lastname = fromApiJsonHelper.extractStringNamed("lastname", element); + baseDataValidator.reset().parameter("lastname").value(lastname).notBlank().notExceedingLengthOf(100); + } + + if (fromApiJsonHelper.parameterExists("email", element)) { + final String email = fromApiJsonHelper.extractStringNamed("email", element); + baseDataValidator.reset().parameter("email").value(email).notBlank().notExceedingLengthOf(100); + } + + if (fromApiJsonHelper.parameterExists("roles", element)) { + final String[] roles = fromApiJsonHelper.extractArrayNamed("roles", element); + baseDataValidator.reset().parameter("roles").value(roles).arrayNotEmpty(); + } + + if (fromApiJsonHelper.parameterExists("password", element)) { + final String password = fromApiJsonHelper.extractStringNamed("password", element); + final String repeatPassword = fromApiJsonHelper.extractStringNamed("repeatPassword", element); + baseDataValidator.reset().parameter("password").value(password).notBlank().notExceedingLengthOf(50); + if (StringUtils.isNotBlank(password)) { + baseDataValidator.reset().parameter("password").value(password).equalToParameter("repeatPassword", repeatPassword); + } + } + + throwExceptionIfValidationWarningsExist(dataValidationErrors); + } +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserReadPlatformService.java index e68b09180..22b25d54f 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserReadPlatformService.java @@ -3,13 +3,12 @@ package org.mifosplatform.useradministration.service; import java.util.Collection; import org.mifosplatform.useradministration.data.AppUserData; -import org.mifosplatform.useradministration.data.AppUserLookup; public interface AppUserReadPlatformService { Collection retrieveAllUsers(); - - Collection retrieveSearchTemplate(); + + Collection retrieveSearchTemplate(); AppUserData retrieveNewUserDetails(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserReadPlatformServiceImpl.java index e16cd35a7..4510bec00 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserReadPlatformServiceImpl.java @@ -4,16 +4,14 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.Set; import org.mifosplatform.infrastructure.core.domain.JdbcSupport; import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; -import org.mifosplatform.organisation.office.data.OfficeLookup; +import org.mifosplatform.organisation.office.data.OfficeData; import org.mifosplatform.organisation.office.service.OfficeReadPlatformService; import org.mifosplatform.useradministration.data.AppUserData; -import org.mifosplatform.useradministration.data.AppUserLookup; import org.mifosplatform.useradministration.data.RoleData; import org.mifosplatform.useradministration.domain.AppUser; import org.mifosplatform.useradministration.domain.AppUserRepository; @@ -25,151 +23,119 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; @Service -public class AppUserReadPlatformServiceImpl implements - AppUserReadPlatformService { +public class AppUserReadPlatformServiceImpl implements AppUserReadPlatformService { - private final JdbcTemplate jdbcTemplate; - private final PlatformSecurityContext context; - private final OfficeReadPlatformService officeReadPlatformService; - private final RoleReadPlatformService roleReadPlatformService; - private final AppUserRepository appUserRepository; + private final JdbcTemplate jdbcTemplate; + private final PlatformSecurityContext context; + private final OfficeReadPlatformService officeReadPlatformService; + private final RoleReadPlatformService roleReadPlatformService; + private final AppUserRepository appUserRepository; - @Autowired - public AppUserReadPlatformServiceImpl( - final PlatformSecurityContext context, - final TenantAwareRoutingDataSource dataSource, - final OfficeReadPlatformService officeReadPlatformService, - final RoleReadPlatformService roleReadPlatformService, - final AppUserRepository appUserRepository) { - this.context = context; - this.officeReadPlatformService = officeReadPlatformService; - this.roleReadPlatformService = roleReadPlatformService; - this.appUserRepository = appUserRepository; - this.jdbcTemplate = new JdbcTemplate(dataSource); - } + @Autowired + public AppUserReadPlatformServiceImpl(final PlatformSecurityContext context, final TenantAwareRoutingDataSource dataSource, + final OfficeReadPlatformService officeReadPlatformService, final RoleReadPlatformService roleReadPlatformService, + final AppUserRepository appUserRepository) { + this.context = context; + this.officeReadPlatformService = officeReadPlatformService; + this.roleReadPlatformService = roleReadPlatformService; + this.appUserRepository = appUserRepository; + this.jdbcTemplate = new JdbcTemplate(dataSource); + } - @Override - public Collection retrieveAllUsers() { + @Override + public Collection retrieveAllUsers() { - AppUser currentUser = context.authenticatedUser(); - String hierarchy = currentUser.getOffice().getHierarchy(); - String hierarchySearchString = hierarchy + "%"; + AppUser currentUser = context.authenticatedUser(); + String hierarchy = currentUser.getOffice().getHierarchy(); + String hierarchySearchString = hierarchy + "%"; - AppUserMapper mapper = new AppUserMapper(); - String sql = "select " + mapper.schema() ; + AppUserMapper mapper = new AppUserMapper(); + String sql = "select " + mapper.schema(); - return this.jdbcTemplate.query(sql, mapper, - new Object[] { hierarchySearchString }); - } + return this.jdbcTemplate.query(sql, mapper, new Object[] { hierarchySearchString }); + } - @Override - public Collection retrieveSearchTemplate() { - AppUser currentUser = context.authenticatedUser(); - String hierarchy = currentUser.getOffice().getHierarchy(); - String hierarchySearchString = hierarchy + "%"; + @Override + public Collection retrieveSearchTemplate() { + AppUser currentUser = context.authenticatedUser(); + String hierarchy = currentUser.getOffice().getHierarchy(); + String hierarchySearchString = hierarchy + "%"; - AppUserLookupMapper mapper = new AppUserLookupMapper(); - String sql = "select " + mapper.schema(); + AppUserLookupMapper mapper = new AppUserLookupMapper(); + String sql = "select " + mapper.schema(); - return this.jdbcTemplate.query(sql, mapper, - new Object[] { hierarchySearchString }); - } + return this.jdbcTemplate.query(sql, mapper, new Object[] { hierarchySearchString }); + } - @Override - public AppUserData retrieveNewUserDetails() { + @Override + public AppUserData retrieveNewUserDetails() { - List offices = new ArrayList( - officeReadPlatformService.retrieveAllOfficesForLookup()); + final Collection offices = this.officeReadPlatformService.retrieveAllOfficesForDropdown(); + final Collection availableRoles = this.roleReadPlatformService.retrieveAllRoles(); - List availableRoles = new ArrayList( - this.roleReadPlatformService.retrieveAllRoles()); + return AppUserData.template(offices, availableRoles); + } - AppUserData userData = new AppUserData(offices, availableRoles); + @Override + public AppUserData retrieveUser(final Long userId) { - return userData; - } + context.authenticatedUser(); - @Override - public AppUserData retrieveUser(final Long userId) { + final AppUser user = this.appUserRepository.findOne(userId); + if (user == null || user.isDeleted()) { throw new UserNotFoundException(userId); } - context.authenticatedUser(); + Collection availableRoles = this.roleReadPlatformService.retrieveAllRoles(); - AppUser user = this.appUserRepository.findOne(userId); - if (user == null || user.isDeleted()) { - throw new UserNotFoundException(userId); - } + Collection selectedUserRoles = new ArrayList(); + Set userRoles = user.getRoles(); + for (Role role : userRoles) { + selectedUserRoles.add(role.toData()); + } - List availableRoles = new ArrayList( - this.roleReadPlatformService.retrieveAllRoles()); + availableRoles.removeAll(selectedUserRoles); - List selectedUserRoles = new ArrayList(); - Set userRoles = user.getRoles(); - for (Role role : userRoles) { - selectedUserRoles.add(role.toData()); - } + return AppUserData.instance(user.getId(), user.getUsername(), user.getEmail(), user.getOffice().getId(), + user.getOffice().getName(), user.getFirstname(), user.getLastname(), availableRoles, selectedUserRoles); + } - availableRoles.removeAll(selectedUserRoles); + private static final class AppUserMapper implements RowMapper { - AppUserData userData = new AppUserData(user.getId(), - user.getUsername(), user.getEmail(), user.getOffice().getId(), - user.getOffice().getName(), user.getFirstname(), - user.getLastname(), availableRoles, selectedUserRoles); + @Override + public AppUserData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { - return userData; - } + final Long id = rs.getLong("id"); + final String username = rs.getString("username"); + final String firstname = rs.getString("firstname"); + final String lastname = rs.getString("lastname"); + final String email = rs.getString("email"); + final Long officeId = JdbcSupport.getLong(rs, "officeId"); + final String officeName = rs.getString("officeName"); - private static final class AppUserMapper implements RowMapper { + return AppUserData.instance(id, username, email, officeId, officeName, firstname, lastname, null, null); + } - @Override - public AppUserData mapRow(final ResultSet rs, - @SuppressWarnings("unused") final int rowNum) - throws SQLException { + public String schema() { + return " u.id as id, u.username as username, u.firstname as firstname, u.lastname as lastname, u.email as email," + + " u.office_id as officeId, o.name as officeName from m_appuser u " + + " join m_office o on o.id = u.office_id where o.hierarchy like ? and u.is_deleted=0 order by u.username"; + } - Long id = rs.getLong("id"); - String username = rs.getString("username"); - String firstname = rs.getString("firstname"); - String lastname = rs.getString("lastname"); - String email = rs.getString("email"); - Long officeId = JdbcSupport.getLong(rs, "officeId"); + } - String officeName = rs.getString("officeName"); + private static final class AppUserLookupMapper implements RowMapper { - AppUserData user = new AppUserData(id, username, email, officeId, - officeName, firstname, lastname, new ArrayList(), - new ArrayList()); + @Override + public AppUserData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { - return user; - } + final Long id = rs.getLong("id"); + final String username = rs.getString("username"); - public String schema() { - return " u.id as id, u.username as username, u.firstname as firstname, u.lastname as lastname, u.email as email," - + " u.office_id as officeId, o.name as officeName from m_appuser u " - + " join m_office o on o.id = u.office_id where o.hierarchy like ? and u.is_deleted=0 order by u.username"; - } - - } - - private static final class AppUserLookupMapper implements - RowMapper { - - @Override - public AppUserLookup mapRow(final ResultSet rs, - @SuppressWarnings("unused") final int rowNum) - throws SQLException { - - Long id = rs.getLong("id"); - String username = rs.getString("username"); - - AppUserLookup user = new AppUserLookup(id, username); - - return user; - } - - public String schema() { - return " u.id as id, u.username as username from m_appuser u " - + " join m_office o on o.id = u.office_id where o.hierarchy like ? and u.is_deleted=0 order by u.username"; - } - - } + return AppUserData.dropdown(id, username); + } + public String schema() { + return " u.id as id, u.username as username from m_appuser u " + + " join m_office o on o.id = u.office_id where o.hierarchy like ? and u.is_deleted=0 order by u.username"; + } + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserWritePlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserWritePlatformService.java index e9ab59307..59afd5678 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserWritePlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserWritePlatformService.java @@ -10,8 +10,4 @@ public interface AppUserWritePlatformService { CommandProcessingResult updateUser(Long userId, JsonCommand command); CommandProcessingResult deleteUser(Long userId); - - // we dont put any permissions on this e.g. a user with no admin rights can - // change their own details (email, username, password etc). - CommandProcessingResult updateUsersOwnAccountDetails(Long userId, JsonCommand command); } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserWritePlatformServiceJpaRepositoryImpl.java index 1ca777004..556a06538 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/AppUserWritePlatformServiceJpaRepositoryImpl.java @@ -18,7 +18,6 @@ import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext import org.mifosplatform.organisation.office.domain.Office; import org.mifosplatform.organisation.office.domain.OfficeRepository; import org.mifosplatform.organisation.office.exception.OfficeNotFoundException; -import org.mifosplatform.useradministration.command.UserCommand; import org.mifosplatform.useradministration.domain.AppUser; import org.mifosplatform.useradministration.domain.AppUserRepository; import org.mifosplatform.useradministration.domain.Role; @@ -26,7 +25,7 @@ import org.mifosplatform.useradministration.domain.RoleRepository; import org.mifosplatform.useradministration.domain.UserDomainService; import org.mifosplatform.useradministration.exception.RoleNotFoundException; import org.mifosplatform.useradministration.exception.UserNotFoundException; -import org.mifosplatform.useradministration.serialization.UserCommandFromApiJsonDeserializer; +import org.mifosplatform.useradministration.serialization.UserCommandFromApiJsonDeserializerHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -46,12 +45,12 @@ public class AppUserWritePlatformServiceJpaRepositoryImpl implements AppUserWrit private final AppUserRepository appUserRepository; private final OfficeRepository officeRepository; private final RoleRepository roleRepository; - private final UserCommandFromApiJsonDeserializer fromApiJsonDeserializer; + private final UserCommandFromApiJsonDeserializerHelper fromApiJsonDeserializer; @Autowired public AppUserWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final AppUserRepository appUserRepository, final UserDomainService userDomainService, final OfficeRepository officeRepository, final RoleRepository roleRepository, - final PlatformPasswordEncoder platformPasswordEncoder, final UserCommandFromApiJsonDeserializer fromApiJsonDeserializer) { + final PlatformPasswordEncoder platformPasswordEncoder, final UserCommandFromApiJsonDeserializerHelper fromApiJsonDeserializer) { this.context = context; this.appUserRepository = appUserRepository; this.userDomainService = userDomainService; @@ -68,8 +67,7 @@ public class AppUserWritePlatformServiceJpaRepositoryImpl implements AppUserWrit try { context.authenticatedUser(); - final UserCommand userCommand = this.fromApiJsonDeserializer.commandFromApiJson(command.json()); - userCommand.validateForCreate(); + this.fromApiJsonDeserializer.validateForCreate(command.json()); final String officeIdParamName = "officeId"; final Long officeId = command.longValueOfParameterNamed(officeIdParamName); @@ -83,8 +81,11 @@ public class AppUserWritePlatformServiceJpaRepositoryImpl implements AppUserWrit final AppUser appUser = AppUser.fromJson(userOffice, allRoles, command); this.userDomainService.create(appUser); - return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(appUser.getId()) - .withOfficeId(userOffice.getId()).build(); + return new CommandProcessingResultBuilder() // + .withCommandId(command.commandId()) // + .withEntityId(appUser.getId()) // + .withOfficeId(userOffice.getId()) // + .build(); } catch (DataIntegrityViolationException dve) { handleDataIntegrityIssues(command, dve); return CommandProcessingResult.empty(); @@ -108,55 +109,7 @@ public class AppUserWritePlatformServiceJpaRepositoryImpl implements AppUserWrit try { context.authenticatedUser(); - final UserCommand userCommand = this.fromApiJsonDeserializer.commandFromApiJson(command.json()); - userCommand.validateForUpdate(); - - final AppUser userToUpdate = this.appUserRepository.findOne(userId); - if (userToUpdate == null) { throw new UserNotFoundException(userId); } - - final Map changes = userToUpdate.update(command, this.platformPasswordEncoder); - - if (changes.containsKey("officeId")) { - final Long officeId = (Long) changes.get("officeId"); - final Office office = this.officeRepository.findOne(officeId); - if (office == null) { throw new OfficeNotFoundException(officeId); } - - userToUpdate.changeOffice(office); - } - - if (changes.containsKey("roles")) { - final String[] roleIds = (String[]) changes.get("roles"); - final Set allRoles = assembleSetOfRoles(roleIds); - - userToUpdate.updateRoles(allRoles); - } - - if (!changes.isEmpty()) { - this.appUserRepository.save(userToUpdate); - } - - return new CommandProcessingResultBuilder().withEntityId(userId).withOfficeId(userToUpdate.getOffice().getId()).with(changes) - .build(); - } catch (DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); - return CommandProcessingResult.empty(); - } - } - - /** - * Different between this and updateUser is that we dont do - * maker-checker flow or require that user have particular permission to - * change their own details. - */ - @Transactional - @Override - public CommandProcessingResult updateUsersOwnAccountDetails(final Long userId, final JsonCommand command) { - - try { - context.authenticatedUser(); - - final UserCommand userCommand = this.fromApiJsonDeserializer.commandFromApiJson(command.json()); - userCommand.validateForUpdate(); + this.fromApiJsonDeserializer.validateForUpdate(command.json()); final AppUser userToUpdate = this.appUserRepository.findOne(userId); if (userToUpdate == null) { throw new UserNotFoundException(userId); } @@ -182,7 +135,11 @@ public class AppUserWritePlatformServiceJpaRepositoryImpl implements AppUserWrit this.appUserRepository.saveAndFlush(userToUpdate); } - return CommandProcessingResult.withChanges(userId, changes); + return new CommandProcessingResultBuilder() // + .withEntityId(userId) // + .withOfficeId(userToUpdate.getOffice().getId()) // + .with(changes) // + .build(); } catch (DataIntegrityViolationException dve) { handleDataIntegrityIssues(command, dve); return CommandProcessingResult.empty(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/PermissionReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/PermissionReadPlatformService.java index a5ac8ac12..0679fd178 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/PermissionReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/PermissionReadPlatformService.java @@ -2,13 +2,13 @@ package org.mifosplatform.useradministration.service; import java.util.Collection; -import org.mifosplatform.useradministration.data.PermissionUsageData; +import org.mifosplatform.useradministration.data.PermissionData; public interface PermissionReadPlatformService { - Collection retrieveAllPermissions(); + Collection retrieveAllPermissions(); - Collection retrieveAllMakerCheckerablePermissions(); + Collection retrieveAllMakerCheckerablePermissions(); - Collection retrieveAllRolePermissions(Long roleId); + Collection retrieveAllRolePermissions(Long roleId); } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/PermissionReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/PermissionReadPlatformServiceImpl.java index a70163981..5a8ef43d3 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/PermissionReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/PermissionReadPlatformServiceImpl.java @@ -6,7 +6,7 @@ import java.util.Collection; import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; -import org.mifosplatform.useradministration.data.PermissionUsageData; +import org.mifosplatform.useradministration.data.PermissionData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -29,7 +29,7 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform } @Override - public Collection retrieveAllPermissions() { + public Collection retrieveAllPermissions() { context.authenticatedUser(); @@ -40,7 +40,7 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform } @Override - public Collection retrieveAllMakerCheckerablePermissions() { + public Collection retrieveAllMakerCheckerablePermissions() { context.authenticatedUser(); @@ -52,7 +52,7 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform } @Override - public Collection retrieveAllRolePermissions(final Long roleId) { + public Collection retrieveAllRolePermissions(final Long roleId) { final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper(); final String sql = mapper.rolePermissionSchema(); @@ -61,10 +61,10 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform return this.jdbcTemplate.query(sql, mapper, new Object[] { roleId }); } - private static final class PermissionUsageDataMapper implements RowMapper { + private static final class PermissionUsageDataMapper implements RowMapper { @Override - public PermissionUsageData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { + public PermissionData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException { final String grouping = rs.getString("grouping"); final String code = rs.getString("code"); @@ -72,7 +72,7 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform final String actionName = rs.getString("actionName"); final Boolean selected = rs.getBoolean("selected"); - return new PermissionUsageData(grouping, code, entityName, actionName, selected); + return PermissionData.instance(grouping, code, entityName, actionName, selected); } public String permissionSchema() { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/RoleWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/RoleWritePlatformServiceJpaRepositoryImpl.java index dcd4008c6..7652074ba 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/RoleWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/service/RoleWritePlatformServiceJpaRepositoryImpl.java @@ -9,7 +9,6 @@ import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; import org.mifosplatform.infrastructure.core.data.CommandProcessingResultBuilder; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; import org.mifosplatform.useradministration.command.PermissionsCommand; -import org.mifosplatform.useradministration.command.RoleCommand; import org.mifosplatform.useradministration.domain.Permission; import org.mifosplatform.useradministration.domain.PermissionRepository; import org.mifosplatform.useradministration.domain.Role; @@ -48,8 +47,7 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf context.authenticatedUser(); - final RoleCommand roleCommand = this.roleCommandFromApiJsonDeserializer.commandFromApiJson(command.json()); - roleCommand.validateForCreate(); + this.roleCommandFromApiJsonDeserializer.validateForCreate(command.json()); final Role entity = Role.fromJson(command); this.roleRepository.save(entity); @@ -63,8 +61,7 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf context.authenticatedUser(); - final RoleCommand roleCommand = this.roleCommandFromApiJsonDeserializer.commandFromApiJson(command.json()); - roleCommand.validateForUpdate(); + this.roleCommandFromApiJsonDeserializer.validateForUpdate(command.json()); final Role role = this.roleRepository.findOne(roleId); if (role == null) { throw new RoleNotFoundException(roleId); } @@ -74,7 +71,10 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf this.roleRepository.save(role); } - return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(roleId).with(changes).build(); + return new CommandProcessingResultBuilder() // + .withCommandId(command.commandId()) // + .withEntityId(roleId).with(changes) // + .build(); } @Transactional @@ -107,7 +107,11 @@ public class RoleWritePlatformServiceJpaRepositoryImpl implements RoleWritePlatf this.roleRepository.save(role); } - return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(roleId).with(changes).build(); + return new CommandProcessingResultBuilder() // + .withCommandId(command.commandId()) // + .withEntityId(roleId) // + .with(changes) // + .build(); } private Permission findPermissionByCode(Collection allPermissions, String permissionCode) {
Mandatory Fields