| @@ -83,7 +83,7 @@ public class CustomerApiService extends AbstractService { | |||||
| } | } | ||||
| } | } | ||||
| sql.append(" ORDER BY ( 0 "); | |||||
| sql.append(" ORDER BY ( 0+0 "); | |||||
| if (args != null) { | if (args != null) { | ||||
| if (args.containsKey("searchStr")){ | if (args.containsKey("searchStr")){ | ||||
| @@ -10,19 +10,18 @@ | |||||
| ******************************************************************************/ | ******************************************************************************/ | ||||
| package com.ffii.tbms.reports.service; | package com.ffii.tbms.reports.service; | ||||
| import java.util.HashMap; | |||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Map; | import java.util.Map; | ||||
| import com.ffii.core.dao.JdbcDao; | |||||
| import com.ffii.core.utils.SecurityUtils; | |||||
| import com.ffii.core.web.AbstractService; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Isolation; | import org.springframework.transaction.annotation.Isolation; | ||||
| import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||
| import com.ffii.core.dao.JdbcDao; | |||||
| import com.ffii.core.utils.SecurityUtils; | |||||
| import com.ffii.core.web.AbstractService; | |||||
| @Service | @Service | ||||
| public class CustomerReportService extends AbstractService { | public class CustomerReportService extends AbstractService { | ||||
| @@ -37,8 +36,8 @@ public class CustomerReportService extends AbstractService { | |||||
| StringBuilder sql = new StringBuilder( " SELECT " | StringBuilder sql = new StringBuilder( " SELECT " | ||||
| + " c.created, " | + " c.created, " | ||||
| +" CONCAT(IF(c.firstName IS NULL, '', CONCAT(c.firstName, ' ')), " | |||||
| +" IF(c.surname IS NULL, '', CONCAT(c.surname, ' '))) AS customerName, " | |||||
| + " CONCAT(IF(c.firstName IS NULL, '', CONCAT(c.firstName, ' ')), " | |||||
| + " IF(c.surname IS NULL, '', CONCAT(c.surname, ' '))) AS customerName, " | |||||
| + " c.nameCh, " | + " c.nameCh, " | ||||
| + " c.phone1, " | + " c.phone1, " | ||||
| + " c.phone2, " | + " c.phone2, " | ||||
| @@ -66,10 +65,48 @@ public class CustomerReportService extends AbstractService { | |||||
| if(args != null){ | if(args != null){ | ||||
| if(args.containsKey("sysGroupId")) | if(args.containsKey("sysGroupId")) | ||||
| sql.append(" AND c.sysGroupId = :sysGroupId "); | sql.append(" AND c.sysGroupId = :sysGroupId "); | ||||
| if(args.containsKey("customerName")){ | |||||
| String str = args.get("customerName").toString(); | |||||
| String[] array = str.split(" "); | |||||
| str = ""; | |||||
| for(int i = 0; i<array.length; i++){ | |||||
| str += " AND ( c.surname LIKE '"+array[i]+"%' "; | |||||
| str += " OR c.nameCh LIKE '"+array[i]+"%' "; | |||||
| str += " OR c.firstName LIKE '"+array[i]+"%' ) "; | |||||
| } | |||||
| sql.append(str); | |||||
| } | |||||
| if(args.containsKey("email")) | |||||
| sql.append(" AND (c.email LIKE :email) "); | |||||
| if(args.containsKey("address")) | |||||
| sql.append(" AND (c.address LIKE :address) "); | |||||
| if(args.containsKey("remarks")) | |||||
| sql.append(" AND (c.remarks LIKE :remarks) "); | |||||
| if(args.containsKey("dateFrom")) | |||||
| sql.append(" AND (c.created > :dateFrom) "); | |||||
| if(args.containsKey("dateTo")) | |||||
| sql.append(" AND (c.created < :dateTo) "); | |||||
| } | |||||
| sql.append(" GROUP BY c.id HAVING 1=1 "); | |||||
| if(args != null){ | |||||
| if(args.containsKey("amountFrom")) | |||||
| sql.append(" AND (orderAmount >= :amountFrom) "); | |||||
| if(args.containsKey("amountTo")) | |||||
| sql.append(" AND (orderAmount <= :amountTo) "); | |||||
| } | } | ||||
| sql.append(" GROUP BY c.id " | |||||
| + " ORDER BY c.created "); | |||||
| sql.append(" ORDER BY (0+0 "); | |||||
| if (args != null) { | |||||
| if (args.containsKey("customerName")){ | |||||
| sql.append(" + IF( c.surname = :customerName,1,0) + IF( c.surname LIKE '"+args.get("customerName")+"%',1,0) "); | |||||
| sql.append(" + IF( c.firstName = :customerName,1,0) + IF( c.firstName LIKE '"+args.get("customerName")+"%',1,0) "); | |||||
| sql.append(" + IF( c.nameCh = :customerName,1,0) + IF( c.nameCh LIKE '"+args.get("customerName")+"%',1,0) "); | |||||
| } | |||||
| } | |||||
| sql.append(" ) DESC, c.created "); | |||||
| return jdbcDao.queryForList(sql.toString(), args); | return jdbcDao.queryForList(sql.toString(), args); | ||||
| } | } | ||||
| @@ -51,6 +51,13 @@ public class CustomerReportController extends AbstractController { | |||||
| Map<String, Object> args = new HashMap<String, Object>(); | Map<String, Object> args = new HashMap<String, Object>(); | ||||
| CriteriaUtils.addDate(request, args, "dateFrom"); | CriteriaUtils.addDate(request, args, "dateFrom"); | ||||
| CriteriaUtils.addDateTo(request, args, "dateTo"); | CriteriaUtils.addDateTo(request, args, "dateTo"); | ||||
| CriteriaUtils.addStringLike(request, args, "customerName"); | |||||
| CriteriaUtils.addStringLike(request, args, "phone"); | |||||
| CriteriaUtils.addStringLike(request, args, "email"); | |||||
| CriteriaUtils.addStringLike(request, args, "address"); | |||||
| CriteriaUtils.addStringLike(request, args, "remarks"); | |||||
| CriteriaUtils.addInteger(request, args, "amountFrom"); | |||||
| CriteriaUtils.addInteger(request, args, "amountTo"); | |||||
| List<Map<String, Object>> records = service.search(args); | List<Map<String, Object>> records = service.search(args); | ||||
| @@ -70,14 +77,16 @@ public class CustomerReportController extends AbstractController { | |||||
| Map<String, Object> args = new HashMap<String, Object>(); | Map<String, Object> args = new HashMap<String, Object>(); | ||||
| CriteriaUtils.addDate(request, args, "dateFrom"); | CriteriaUtils.addDate(request, args, "dateFrom"); | ||||
| CriteriaUtils.addDateTo(request, args, "dateTo"); | CriteriaUtils.addDateTo(request, args, "dateTo"); | ||||
| //CriteriaUtils.addInteger(request, args, "start"); | |||||
| //CriteriaUtils.addInteger(request, args, "limit"); | |||||
| CriteriaUtils.addString(request, args, "customerName"); | |||||
| CriteriaUtils.addStringLike(request, args, "phone"); | |||||
| CriteriaUtils.addStringLike(request, args, "email"); | |||||
| CriteriaUtils.addStringLike(request, args, "address"); | |||||
| CriteriaUtils.addStringLike(request, args, "remarks"); | |||||
| CriteriaUtils.addInteger(request, args, "amountFrom"); | |||||
| CriteriaUtils.addInteger(request, args, "amountTo"); | |||||
| List<Map<String, Object>> records = service.search(args); | List<Map<String, Object>> records = service.search(args); | ||||
| //Map<String, Object> count = service.count(args); | |||||
| //model.addAttribute("total", NumberUtils.intValue(count.get("count"))); | |||||
| model.addAttribute(Params.RECORDS, records); | model.addAttribute(Params.RECORDS, records); | ||||
| model.addAttribute(Params.SUCCESS, Boolean.TRUE); | model.addAttribute(Params.SUCCESS, Boolean.TRUE); | ||||
| @@ -144,21 +144,7 @@ Ext.define('App.store.Report_OrderStore', { | |||||
| idProperty: 'orderId' | idProperty: 'orderId' | ||||
| } | } | ||||
| }, | }, | ||||
| reader: new Ext.data.JsonReader({}, [ | |||||
| {name: 'orderId'}, | |||||
| {name: 'date' }, | |||||
| {name: 'code'}, | |||||
| {name: 'orderNo'}, | |||||
| {name: 'customerName'}, | |||||
| {name: 'status'}, | |||||
| {name: 'remarks'}, | |||||
| {name: 'status'}, | |||||
| {name: 'item'}, | |||||
| {name: 'orderAmount'}, | |||||
| {name: 'outstanding'}, | |||||
| {name: 'paymentAmount'}, | |||||
| ]), | |||||
| /* | |||||
| fields: [ | fields: [ | ||||
| { | { | ||||
| name: 'orderId', | name: 'orderId', | ||||
| @@ -209,7 +195,6 @@ Ext.define('App.store.Report_OrderStore', { | |||||
| type: 'string' | type: 'string' | ||||
| }, | }, | ||||
| ], | ], | ||||
| */ | |||||
| }, | }, | ||||
| cfg)]); | cfg)]); | ||||
| } | } | ||||
| @@ -241,6 +226,10 @@ Ext.define('App.store.Report_CustomerStore', { | |||||
| { | { | ||||
| name: "created", | name: "created", | ||||
| type: 'date', | type: 'date', | ||||
| convert: function (value) { | |||||
| var d = new Date(value); | |||||
| return Ext.util.Format.date(d, 'Y/m/d') | |||||
| }, | |||||
| }, | }, | ||||
| { | { | ||||
| name: "customerName", | name: "customerName", | ||||
| @@ -186,7 +186,6 @@ Ext.define("App.view.OrderForm", { | |||||
| field.isPressing = true; | field.isPressing = true; | ||||
| } | } | ||||
| } | } | ||||
| },{ | },{ | ||||
| xtype: 'label', | xtype: 'label', | ||||
| html: '<i class="fas fa-spinner fa-pulse" style="color:white"></i>', | html: '<i class="fas fa-spinner fa-pulse" style="color:white"></i>', | ||||
| @@ -5,6 +5,7 @@ Ext.define('App.view.Report_CustomerContainer', { | |||||
| focusable:true, | focusable:true, | ||||
| layout: 'vbox', | layout: 'vbox', | ||||
| defaults: { | defaults: { | ||||
| width: '100%', | width: '100%', | ||||
| margin: '2 4 2 4' | margin: '2 4 2 4' | ||||
| @@ -62,17 +63,48 @@ Ext.define('App.view.Report_CustomerContainer', { | |||||
| { | { | ||||
| xtype: 'datefield', | xtype: 'datefield', | ||||
| fieldLabel: App.localeRes('Date From'), | fieldLabel: App.localeRes('Date From'), | ||||
| allowBlank: false, | |||||
| name: 'dateFrom', | name: 'dateFrom', | ||||
| value: firstDay | |||||
| }, | }, | ||||
| { | { | ||||
| xtype: 'datefield', | xtype: 'datefield', | ||||
| fieldLabel: App.localeRes('Date To'), | fieldLabel: App.localeRes('Date To'), | ||||
| allowBlank: false, | |||||
| name: 'dateTo', | name: 'dateTo', | ||||
| value: lastDay | |||||
| } | |||||
| }, | |||||
| { | |||||
| xtype: 'textfield', | |||||
| fieldLabel: App.localeRes('Customer Name'), | |||||
| name: 'customerName', | |||||
| }, | |||||
| { | |||||
| xtype: 'textfield', | |||||
| fieldLabel: App.localeRes('Phone'), | |||||
| name: 'phone', | |||||
| }, | |||||
| { | |||||
| xtype: 'textfield', | |||||
| fieldLabel: App.localeRes('Email'), | |||||
| name: 'email', | |||||
| }, | |||||
| { | |||||
| xtype: 'textfield', | |||||
| fieldLabel: App.localeRes('Address'), | |||||
| name: 'address', | |||||
| }, | |||||
| { | |||||
| xtype: 'textfield', | |||||
| fieldLabel: App.localeRes('Remarks'), | |||||
| name: 'remarks', | |||||
| }, | |||||
| { | |||||
| xtype: 'numberfield', | |||||
| fieldLabel: App.localeRes('Amount From'), | |||||
| name: 'amountFrom', | |||||
| }, | |||||
| { | |||||
| xtype: 'numberfield', | |||||
| fieldLabel: App.localeRes('Amount To'), | |||||
| name: 'amountTo', | |||||
| }, | |||||
| ] | ] | ||||
| } | } | ||||
| ], | ], | ||||
| @@ -132,6 +164,9 @@ Ext.define('App.view.Report_CustomerGrid', { | |||||
| scrollable: { | scrollable: { | ||||
| alwaysShow: true | alwaysShow: true | ||||
| }, | }, | ||||
| viewConfig : { | |||||
| enableTextSelection: true, | |||||
| }, | |||||
| reloadStore: function() { | reloadStore: function() { | ||||
| var me = this; | var me = this; | ||||
| @@ -142,10 +177,6 @@ Ext.define('App.view.Report_CustomerGrid', { | |||||
| initComponent: function() { | initComponent: function() { | ||||
| var me = this; | var me = this; | ||||
| Ext.apply(me, { | Ext.apply(me, { | ||||
| bbar: { | |||||
| xtype: 'pagingtoolbar', | |||||
| displayInfo: true | |||||
| }, | |||||
| store: Ext.create('App.store.Report_CustomerStore', {}), | store: Ext.create('App.store.Report_CustomerStore', {}), | ||||
| columns: [ | columns: [ | ||||
| { | { | ||||
| @@ -153,15 +184,16 @@ Ext.define('App.view.Report_CustomerGrid', { | |||||
| width: 80 | width: 80 | ||||
| }, | }, | ||||
| { | { | ||||
| xtype: 'datecolumn', | |||||
| xtype: 'gridcolumn', | |||||
| dataIndex: 'created', | dataIndex: 'created', | ||||
| text: App.localeRes('Creation Date'), | text: App.localeRes('Creation Date'), | ||||
| flex: 1 | |||||
| format: 'Y-m-d' | |||||
| }, | }, | ||||
| { | { | ||||
| xtype: 'gridcolumn', | xtype: 'gridcolumn', | ||||
| dataIndex: 'customerName', | dataIndex: 'customerName', | ||||
| text: App.localeRes('Customer (Eng)'), | text: App.localeRes('Customer (Eng)'), | ||||
| width: 150, | |||||
| }, | }, | ||||
| { | { | ||||
| xtype: 'gridcolumn', | xtype: 'gridcolumn', | ||||
| @@ -182,11 +214,13 @@ Ext.define('App.view.Report_CustomerGrid', { | |||||
| xtype: 'gridcolumn', | xtype: 'gridcolumn', | ||||
| dataIndex: 'email', | dataIndex: 'email', | ||||
| text: App.localeRes('Email'), | text: App.localeRes('Email'), | ||||
| width: 150, | |||||
| }, | }, | ||||
| { | { | ||||
| xtype: 'gridcolumn', | xtype: 'gridcolumn', | ||||
| dataIndex: 'address', | dataIndex: 'address', | ||||
| text: App.localeRes('Address'), | text: App.localeRes('Address'), | ||||
| width: 150, | |||||
| }, | }, | ||||
| { | { | ||||
| xtype: 'gridcolumn', | xtype: 'gridcolumn', | ||||