ZDQuotation.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.b2b.sale.ZDQuotation', {
  3. extend: 'Ext.app.Controller',
  4. FormUtil: Ext.create('erp.util.FormUtil'),
  5. GridUtil: Ext.create('erp.util.GridUtil'),
  6. BaseUtil: Ext.create('erp.util.BaseUtil'),
  7. views:[
  8. 'core.form.Panel','b2b.sale.ZDQuotation','core.grid.Panel2','core.toolbar.Toolbar','core.form.FileField','core.form.MultiField',
  9. 'core.button.Save','core.button.Update','core.button.Add','core.button.Submit','core.button.Print','core.button.Upload',
  10. 'core.button.Audit','core.button.Close','core.button.Delete','core.button.DeleteDetail','core.button.ResSubmit',
  11. 'core.button.ResAudit','core.trigger.DbfindTrigger','core.trigger.TextAreaTrigger','core.form.YnField','core.grid.YnColumn'
  12. ],
  13. init:function(){
  14. var me = this;
  15. me.alloweditor = true;
  16. this.control({
  17. 'erpGridPanel2': {
  18. afterrender: function(grid){
  19. var status = Ext.getCmp('qu_statuscode');
  20. if(status && status.value != 'ENTERING' && status.value != 'COMMITED'){
  21. Ext.each(grid.columns, function(c){
  22. c.setEditor(null);
  23. });
  24. }
  25. Ext.defer(function(){
  26. var f = Ext.getCmp('qu_id');
  27. if(f && f.value > 0)
  28. me.getStepWise(f.value, function(data){
  29. grid.store.each(function(d){
  30. var dets = [], id = d.get('qd_id');
  31. if(id && id > 0) {
  32. Ext.Array.each(data, function(t){
  33. if(t.qdd_qdid == id)
  34. dets.push(t);
  35. });
  36. d.set('dets', dets);
  37. }
  38. });
  39. });
  40. }, 50);
  41. },
  42. itemclick: this.onGridItemClick
  43. },
  44. 'field[name=qu_currency]': {
  45. beforetrigger: function(field) {
  46. var t = field.up('form').down('field[name=qu_date]'),
  47. value = t.getValue();
  48. if(value) {
  49. field.findConfig = 'cm_yearmonth=' + Ext.Date.format(value, 'Ym');
  50. }
  51. }
  52. },
  53. 'erpSaveButton': {
  54. click: function(btn){
  55. var form = me.getForm(btn);
  56. if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
  57. me.BaseUtil.getRandomNumber(caller);//自动添加编号
  58. }
  59. this.beforeSave();
  60. }
  61. },
  62. 'erpUpdateButton': {
  63. click: function(btn){
  64. var bool = true;
  65. //供应商必填
  66. var grid = Ext.getCmp('grid'),
  67. fromDate = Ext.getCmp('qu_recorddate').value,
  68. end = Ext.getCmp('qu_enddate').value;
  69. if(end < new Date()){
  70. bool=false;
  71. showError('有效期小于当前日期,不能更新!');return;
  72. }
  73. grid.getStore().each(function(item){});
  74. if(bool){
  75. this.beforeUpdate();
  76. }
  77. }
  78. },
  79. 'erpDeleteButton' : {
  80. click: function(btn){
  81. me.FormUtil.onDelete(Ext.getCmp('qu_id').value);
  82. }
  83. },
  84. 'erpAddButton': {
  85. click: function(){
  86. me.FormUtil.onAdd('addQuotation', '新增报价单', 'jsps/b2b/sale/zdquotation.jsp');
  87. }
  88. },
  89. 'erpCloseButton': {
  90. click: function(btn){
  91. me.FormUtil.beforeClose(me);
  92. }
  93. },
  94. 'erpSubmitButton': {
  95. afterrender: function(btn){
  96. var status = Ext.getCmp('qu_statuscode');
  97. if(status && status.value != 'ENTERING'){
  98. btn.hide();
  99. }
  100. },
  101. click: function(btn){
  102. var end = Ext.getCmp('qu_enddate').value;
  103. if(end < new Date()){
  104. bool=false;
  105. showError('有效期小于当前日期,不能提交!');return;
  106. }
  107. me.FormUtil.onSubmit(Ext.getCmp('qu_id').value);
  108. }
  109. },
  110. 'erpResSubmitButton': {
  111. afterrender: function(btn){
  112. var status = Ext.getCmp('qu_statuscode');
  113. if(status && status.value != 'COMMITED'){
  114. btn.hide();
  115. }
  116. },
  117. click: function(btn){
  118. me.FormUtil.onResSubmit(Ext.getCmp('qu_id').value);
  119. }
  120. },
  121. 'erpAuditButton': {
  122. afterrender: function(btn){
  123. var status = Ext.getCmp('qu_statuscode');
  124. if(status && status.value != 'COMMITED'){
  125. btn.hide();
  126. }
  127. },
  128. click: function(btn){
  129. me.FormUtil.onAudit(Ext.getCmp('qu_id').value);
  130. }
  131. },
  132. 'erpResAuditButton': {
  133. afterrender: function(btn){
  134. var status = Ext.getCmp('qu_statuscode');
  135. if(status && status.value != 'AUDITED'){
  136. btn.hide();
  137. }
  138. },
  139. click: function(btn){
  140. me.FormUtil.onResAudit(Ext.getCmp('qu_id').value);
  141. }
  142. },
  143. 'dbfindtrigger[name=qu_custcontact]': {
  144. afterrender:function(trigger){
  145. trigger.dbKey='qu_custcode';
  146. trigger.mappingKey='ct_cucode';
  147. trigger.dbMessage='请先选客户编号!';
  148. }
  149. },
  150. 'erpPrintButton': {
  151. click: function(btn){
  152. me.FormUtil.onPrint(Ext.getCmp('qu_id').value);
  153. }
  154. },
  155. /**
  156. * 分段报价按钮
  157. */
  158. '#stepWiseQuotation' : {
  159. afterrender: function(b) {
  160. Ext.defer(function(){
  161. var f = Ext.getCmp('qu_statuscode');
  162. if(f && f.value != 'ENTERING')
  163. b.hide();
  164. }, 100);
  165. },
  166. click: function(b) {
  167. var record = b.ownerCt.ownerCt.selModel.lastSelected;
  168. if(record)
  169. me.onStepWiseClick(record);
  170. }
  171. }
  172. });
  173. },
  174. onGridItemClick: function(selModel, record){//grid行选择
  175. this.GridUtil.onGridItemClick(selModel, record);
  176. var grid=selModel.ownerCt;
  177. var show = false;
  178. Ext.Array.each(grid.necessaryFields, function(field) {
  179. var fieldValue=record.data[field];
  180. if(fieldValue==undefined||fieldValue==""||fieldValue==null){
  181. show = true;
  182. return;
  183. }
  184. });
  185. if(show){
  186. var btn = Ext.getCmp('stepWiseQuotation');
  187. btn && btn.setDisabled(true);
  188. } else {
  189. var btn = Ext.getCmp('stepWiseQuotation');
  190. btn && btn.setDisabled(false);
  191. }
  192. },
  193. getForm: function(btn){
  194. return btn.ownerCt.ownerCt;
  195. },
  196. /**
  197. * 分段报价
  198. */
  199. onStepWiseClick: function(record) {
  200. var fields = this.getStepFields(record.get('dets')), me = this;
  201. Ext.create('Ext.window.Window', {
  202. autoShow: true,
  203. title: '分段报价',
  204. width: 300,
  205. height: 400,
  206. layout: 'anchor',
  207. items: [{
  208. anchor: '100% 100%',
  209. xtype: 'form',
  210. items: fields,
  211. bodyStyle: 'background: #f1f2f5;',
  212. defaults: {
  213. margin: '5'
  214. }
  215. }],
  216. buttonAlign: 'center',
  217. buttons: [{
  218. text: '确定',
  219. handler: function(b) {
  220. me.onStepConfirm(record, b.ownerCt.ownerCt.down('form'), function(){
  221. b.ownerCt.ownerCt.close();
  222. });
  223. }
  224. }, {
  225. text: '取消',
  226. handler: function(b) {
  227. b.ownerCt.ownerCt.close();
  228. }
  229. }]
  230. });
  231. },
  232. getStepFields: function(dets) {
  233. if(!dets || dets.length == 0)
  234. dets = [{qdd_lapqty: 0},{},{},{},{}];
  235. var fields = [], me = this;
  236. Ext.Array.each(dets, function(d){
  237. fields.push({
  238. xtype: 'fieldcontainer',
  239. layout: 'hbox',
  240. dataId: d.qdd_id,
  241. items: [{
  242. xtype: 'numberfield',
  243. fieldLabel: '数量 ≥ ',
  244. labelWidth: 60,
  245. hideTrigger: true,
  246. name: 'qdd_lapqty',
  247. value: d.qdd_lapqty,
  248. editable: (d.qdd_lapqty == null || d.qdd_lapqty > 0),
  249. flex: 1
  250. },{
  251. xtype: 'numberfield',
  252. fieldLabel: '单价 ',
  253. labelWidth: 60,
  254. hideTrigger: true,
  255. name: 'qdd_price',
  256. value: d.qdd_price,
  257. editable: true,
  258. flex: 1
  259. }]
  260. });
  261. });
  262. fields.push({
  263. xtype: 'button',
  264. iconCls: 'x-button-icon-add',
  265. handler: function(b) {
  266. me.onStepAdd(b.ownerCt);
  267. }
  268. });
  269. return fields;
  270. },
  271. onStepAdd: function(form) {
  272. var fields = form.query('fieldcontainer');
  273. if(fields.length >= 10){
  274. showError('最多支持10个分段!');
  275. } else {
  276. form.insert(fields.length ,{
  277. xtype: 'fieldcontainer',
  278. layout: 'hbox',
  279. dataId: 0,
  280. items: [{
  281. xtype: 'numberfield',
  282. fieldLabel: '数量 ≥ ',
  283. labelWidth: 60,
  284. hideTrigger: true,
  285. name: 'qdd_lapqty',
  286. flex: 1
  287. },{
  288. xtype: 'numberfield',
  289. fieldLabel: '单价 ',
  290. labelWidth: 60,
  291. hideTrigger: true,
  292. name: 'qdd_price',
  293. flex: 1
  294. }]
  295. });
  296. }
  297. },
  298. onStepConfirm: function(record, form, callback) {
  299. var dets = [], steps = [], err = [], items = form.query('fieldcontainer');
  300. Ext.each(items, function(container){
  301. var qtyField = container.down('field[name=qdd_lapqty]'),
  302. priceField = container.down('field[name=qdd_price]');
  303. if(qtyField && priceField && qtyField.value != null) {
  304. dets.push({qdd_lapqty: qtyField.value, qdd_id: container.dataId, qdd_price: priceField.value});
  305. if(steps.indexOf(qtyField.value) == -1)
  306. steps.push(qtyField.value);
  307. else
  308. err.push('数量:' + qtyField.value);
  309. }
  310. });
  311. if(err.length > 0) {
  312. showError('分段数量填写重复!<br>' + err.join('<br>'));
  313. return;
  314. }
  315. Ext.Array.sort(dets, function(a, b){
  316. return a.qdd_lapqty > b.qdd_lapqty;
  317. });
  318. record.set('dets', dets);
  319. record.dirty = true;
  320. record.modified = record.modified || {};
  321. record.modified['qd_lapqty'] = true;
  322. callback.call(null);
  323. },
  324. beforeSave: function(){
  325. var me = this;
  326. var form = Ext.getCmp('form'), id = Ext.getCmp(form.keyField).value;
  327. if(! me.FormUtil.checkForm()){
  328. return;
  329. }
  330. if(Ext.isEmpty(id) || id == 0 || id == '0'){
  331. me.FormUtil.getSeqId(form);
  332. }
  333. var detail = Ext.getCmp('grid');
  334. var dets = [];
  335. detail.store.each(function(record, i){
  336. if(!me.GridUtil.isBlank(detail, record.data)) {
  337. if(record.get('qd_id') == null || record.get('qd_id') == 0){
  338. record.set('qd_id', -1 * i);
  339. }
  340. var s = record.get('dets') || [];
  341. Ext.Array.each(s, function(t, i){
  342. t.qdd_id = t.qdd_id || 0;
  343. t.qdd_qdid = String(record.get('qd_id'));
  344. dets.push(t);
  345. });
  346. }
  347. });
  348. me.FormUtil.beforeSave(me, Ext.encode(dets));
  349. },
  350. beforeUpdate: function(){
  351. var me = this;
  352. var form = Ext.getCmp('form');
  353. if(! me.FormUtil.checkForm()){
  354. return;
  355. }
  356. var detail = Ext.getCmp('grid');
  357. var dets = [];
  358. detail.store.each(function(record, i){
  359. if(!me.GridUtil.isBlank(detail, record.data)) {
  360. if(record.get('qd_id') == null || record.get('qd_id') == 0){
  361. record.set('qd_id', -1 * i);
  362. }
  363. var s = record.get('dets') || [];
  364. Ext.Array.each(s, function(t, i){
  365. t.qdd_id = t.qdd_id || 0;
  366. t.qdd_qdid = String(record.get('qd_id'));
  367. dets.push(t);
  368. });
  369. }
  370. });
  371. me.FormUtil.onUpdate(form, false, null, Ext.encode(dets));
  372. },
  373. getStepWise: function(qu_id, callback) {
  374. Ext.Ajax.request({
  375. url: basePath + 'b2b/sale/zdquotation/det.action',
  376. params: {
  377. qu_id: qu_id
  378. },
  379. callback: function(opt, s, r) {
  380. if(s) {
  381. var rs = Ext.decode(r.responseText);
  382. callback.call(null, rs);
  383. }
  384. }
  385. });
  386. }
  387. });