diff --git a/mifosng-db/0001a-mifos-platform-base-ddl-schema.sql b/mifosng-db/0001a-mifos-platform-base-ddl-schema.sql index c44f75997..99bfde81f 100644 --- a/mifosng-db/0001a-mifos-platform-base-ddl-schema.sql +++ b/mifosng-db/0001a-mifos-platform-base-ddl-schema.sql @@ -45,6 +45,7 @@ DROP TABLE IF EXISTS `ref_loan_transaction_processing_strategy`; DROP TABLE IF EXISTS `m_code_value`; DROP TABLE IF EXISTS `m_code`; DROP TABLE IF EXISTS `r_enum_value`; +DROP TABLE IF EXISTS `x_registered_table`; -- additional data and report tables DROP TABLE IF EXISTS `stretchydata_dataset_fields`; @@ -111,6 +112,15 @@ CREATE TABLE `r_enum_value` ( UNIQUE KEY `enum_value` (`enum_name`, `enum_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/* used to link MySql tables to Mifos X application tables for additional data needs */ +CREATE TABLE `x_registered_table` ( + `registered_table_name` varchar(50) NOT NULL, + `registered_table_label` varchar(80) NOT NULL, + `application_table_name` varchar(50) NOT NULL, + PRIMARY KEY (`registered_table_name`), + UNIQUE KEY `registered_table_label` (`registered_table_label`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + -- DDL for organisation wide related concepts CREATE TABLE `m_fund` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, @@ -295,6 +305,7 @@ CREATE TABLE `m_client` ( `external_id` varchar(100) DEFAULT NULL, `firstname` varchar(50) DEFAULT NULL, `lastname` varchar(50) DEFAULT NULL, + `display_name` varchar(50) DEFAULT NULL, `joining_date` date DEFAULT NULL, `createdby_id` bigint(20) DEFAULT NULL, `created_date` datetime DEFAULT NULL, @@ -302,6 +313,7 @@ CREATE TABLE `m_client` ( `lastmodifiedby_id` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `external_id` (`external_id`), + KEY `display_name` (`display_name`), KEY `FKCE00CAB3E0DD567A` (`office_id`), KEY `FKAUD0000000000001` (`createdby_id`), KEY `FKAUD0000000000002` (`lastmodifiedby_id`), diff --git a/mifosng-db/0003-default-demo-data.sql b/mifosng-db/0003-default-demo-data.sql index e6cdfa3f6..deff53ac1 100644 --- a/mifosng-db/0003-default-demo-data.sql +++ b/mifosng-db/0003-default-demo-data.sql @@ -90,4 +90,9 @@ VALUES (8,1,NULL,'Sidi','Kon','2009-02-11',1,'2012-04-14 09:45:43','2012-04-14 09:45:43',1), (9,1,NULL,'Moustapha','Yattabar','2009-02-18',1,'2012-04-14 10:24:20','2012-04-14 10:24:20',1), (10,1,NULL,NULL,'Mali fruit sales ltd.','2009-02-18',1,'2012-04-14 10:25:37','2012-04-14 10:25:37',1), -(11,1,NULL,NULL,'Djenne co-op group','2009-02-25',1,'2012-04-14 10:31:03','2012-04-14 10:31:03',1); \ No newline at end of file +(11,1,NULL,NULL,'Djenne co-op group','2009-02-25',1,'2012-04-14 10:31:03','2012-04-14 10:31:03',1); + + + +update m_client set display_name = concat_ws(' ',firstname,lastname); + diff --git a/mifosng-db/patches/patch-0006-add-x_registered_table.sql b/mifosng-db/patches/patch-0006-add-x_registered_table.sql new file mode 100644 index 000000000..93ae248da --- /dev/null +++ b/mifosng-db/patches/patch-0006-add-x_registered_table.sql @@ -0,0 +1,12 @@ + +/* used to link MySql tables to Mifos X application tables for additional data needs */ + +DROP TABLE `x_registered_table`; + +CREATE TABLE `x_registered_table` ( + `registered_table_name` varchar(50) NOT NULL, + `registered_table_label` varchar(80) NOT NULL, + `application_table_name` varchar(50) NOT NULL, + PRIMARY KEY (`registered_table_name`), + UNIQUE KEY `registered_table_label` (`registered_table_label`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java index 8d57eb55a..bbad7a568 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java @@ -1,5 +1,6 @@ package org.mifosng.platform.noncore; +import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; @@ -560,7 +561,6 @@ public class ReadWriteNonCoreDataServiceImpl implements columnDefinitions); String fkField = applicationTableName.substring(2) + "_id"; - String sql = "select "; if (sqlFields != null) sql = sql + sqlFields; @@ -568,41 +568,53 @@ public class ReadWriteNonCoreDataServiceImpl implements sql = sql + " * "; sql = sql + " from " + datatable + " where " + fkField + " = " + id; - if (sqlOrder != null) sql = sql + " order by " + sqlOrder; logger.info(sql); - - //GenericResultsetData result = genericDataService - // .fillGenericResultSet(sql); + List result = fillDatatableResultSetDataRows(sql); long elapsed = System.currentTimeMillis() - startTime; logger.info("FINISHING DATATABLE: " + datatable + " Elapsed Time: " + elapsed); - return new GenericResultsetData(columnHeaders, new ArrayList()); - -/* - List columnHeaders = getResultsetColumnHeaders( - columnDefinitions, sqlErrorMsg); + return new GenericResultsetData(columnHeaders, result); + + } + + + private List fillDatatableResultSetDataRows(final String sql) { - String selectFieldList = getSelectFieldListFromColumnHeaders(columnHeaders); + String sqlErrorMsg = "Sql: " + sql; + CachedRowSet rs = genericDataService.getCachedResultSet(sql, sqlErrorMsg); - String sql = "select " + selectFieldList + " from `" + type - + "` t left join `" + getFullDatasetName(type, set) - + "` s on s.id = t.id where t.id = " + id; - logger.info("addition fields sql: " + sql); + List resultsetDataRows = new ArrayList(); - List resultsetDataRows = getResultsetDataRows( - columnHeaders, sql, sqlErrorMsg); + try { - long elapsed = System.currentTimeMillis() - startTime; - logger.info("FINISHING SET: " + set + " Elapsed Time: " + elapsed); + ResultSetMetaData rsmd = rs.getMetaData(); + int columnCount = rsmd.getColumnCount(); + + ResultsetDataRow resultsetDataRow; + String columnName = null; + String columnValue = null; + while (rs.next()) { + resultsetDataRow = new ResultsetDataRow(); + List columnValues = new ArrayList(); + for (int i = 0; i < columnCount; i++) { + columnName = rsmd.getColumnName(i + 1); + columnValue = rs.getString(columnName); + columnValues.add(columnValue); + } + resultsetDataRow.setRow(columnValues); + resultsetDataRows.add(resultsetDataRow); + } - return new GenericResultsetData(columnHeaders, resultsetDataRows); - */ - + return resultsetDataRows; + } catch (SQLException e) { + throw new PlatformDataIntegrityException("error.msg.sql.error", + e.getMessage(), sqlErrorMsg); + } } private String getApplicationTableName(String datatable) {