Ext.define('saas.view.make-intellpurc-Gridpanel', { extend: 'Ext.grid.Panel', xtype: 'make-intellpurc-gridpanel', requires: [ 'Ext.grid.plugin.Exporter' ], cls: 'core-base-gridpanel', plugins: [{ ptype: 'gridexporter', }, { ptype: 'menuclipboard' }, { ptype: 'cellediting', clicksToEdit: 1 }], lastSelectedRecord:[], layout: 'fit', //基础属性 border: 1, anchor: '100% 70%', loadMask: true, showIndex: true, columnWidth: 1.0, rootProperty: 'data.list', selModel: { checkOnly: true, type: 'checkboxmodel' }, idField: 'id', turnQtyField: 'mr_thisqty', columns: [{ text: '建议采购量', dataIndex: 'mr_thisqty', width: 110, xtype: 'widgetcolumn', widget: { xtype: "numberfield", cls:'widget-number', bind: '{record.mr_thisqty}', decimalPrecision: 8, minValue: 0 } }/*,{ text: '建议采购量', dataIndex: 'thisqty_filter', width: 0, }*/, { text: '采购价', dataIndex: 'mr_price', width: 100, //xtype: 'numbercolumn', renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, xtype: 'widgetcolumn', widget: { xtype: "numberfield", cls:'widget-number', bind: '{record.mr_price}', decimalPrecision: 8, minValue: 0 } /* editor: { xtype: "numberfield", decimalPrecision: 6, minValue: 0 }*/ }, { text: '供应商id', dataIndex: 'mr_vendid', hidden: true }, { text: '供应商编号', dataIndex: 'mr_vendcode', hidden: true }, { text: '供应商', dataIndex: 'mr_vendname', width: 150, xtype: 'widgetcolumn', widget: { displayField: "display", cls:'widget-number', bind: '{record.mr_vendname}', editable: true, format: "", hideTrigger: false, maxLength: 100.0, minValue: null, positiveNum: false, queryMode: "local", store: null, valueField: "value", xtype: "vendorDbfindTrigger", name:'mr_vendname', dbfinds:[{ from:'id',to:'mr_vendid',ignore:true },{ from:'ve_code',to:'mr_vendcode' },{ from:'ve_name',to:'mr_vendname' }] } /*editor: { displayField: "display", editable: true, format: "", hideTrigger: false, maxLength: 100.0, minValue: null, positiveNum: false, queryMode: "local", store: null, valueField: "value", xtype: "vendorDbfindTrigger" }*/ }, { text: '净需求', dataIndex: 'mr_netqty', width: 80, xtype: 'numbercolumn', renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); } }, { text: '物料id', dataIndex: 'mr_prodid', hidden: true }, { text: '物料编号', dataIndex: 'mr_prodcode', width: 150 }, { text: '物料名称', dataIndex: 'mr_prdetail', width: 150 }, { text: '型号', dataIndex: 'pr_orispeccode', width: 150 }, { text: '厂家/品牌', dataIndex: 'pr_brand', width: 90 }, { text: '规格', dataIndex: 'mr_spec', width: 150 }, { text: '单位', dataIndex: 'mr_unit', width: 60 }, { text: '毛需求数', dataIndex: 'mr_needqty', xtype: 'numbercolumn', width: 85, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); } }, { text: '需求日期', dataIndex: 'mr_needdate', width: 110 }, { text: '库存可用', dataIndex: 'mr_stock_dist', xtype: 'numbercolumn', width: 85, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); } }, { text: '请购可用', dataIndex: 'mr_app_dist', xtype: 'numbercolumn', width: 85, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); } }, { text: '在途可用', dataIndex: 'mr_purc_dist', xtype: 'numbercolumn', width: 85, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); } }, { text: '在制可用', dataIndex: 'mr_make_dist', xtype: 'numbercolumn', width: 85, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); } }, { text: '需求来源', dataIndex: 'mr_source', width: 400 }, { text: '最小包装量', dataIndex: 'mr_mpq', xtype: 'numbercolumn', width: 100, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, }, { text: '总库存', dataIndex: 'mr_stock', xtype: 'numbercolumn', width: 100, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, }, { text: '请购数', dataIndex: 'mr_app', xtype: 'numbercolumn', width: 100, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, }, { text: '采购未交', dataIndex: 'mr_purc', xtype: 'numbercolumn', width: 100, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, }, { text: '订单未发货', dataIndex: 'mr_saleqty', xtype: 'numbercolumn', width: 100, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, },{ text: '工单未领数', dataIndex: 'mr_maqty', xtype: 'numbercolumn', width: 100, renderer: function (v, m, r) { return saas.util.BaseUtil.numberFormat(v, 6, true); }, },{ text: '下达状态', dataIndex: 'mr_turnstatus', width: 100 },], initComponent: function () { var me = this; var fields = me.columns.map(column => column.dataIndex); me.store = Ext.create('Ext.data.Store', { fields: fields, autoLoad: true, data: [], listeners: { beforeload: function (store, op) { var gridpanel=me; var params ={}; params['mergePurc'] = 0; params['mergeDays'] = 0; params['safetystock'] = 0; params['mpq'] = 0; params['auto'] = 1; view.setLoading(true); saas.util.BaseUtil.request({ url: '/api/purchase/makeIntell/list', method: 'POST', params: JSON.stringify(params) }) .then(function(localJson) { view.setLoading(false); if(localJson.success){ gridpanel.getStore().loadData(localJson.data.list); gridpanel.ownerCt.onQuery(); } }) .catch(function(e) { view.setLoading(false); saas.util.BaseUtil.showErrorToast('计算失败: ' + e.message); }); } } }); Ext.apply(me, { dockedItems: [{ xtype: 'toolbar', dock: 'top', items: [{ text: '计算需求', handler: function (b) { Ext.create({ xtype: 'make-intellpurc-calsetting', autoShow: true, gridpanel:b.ownerCt.ownerCt, ownerBtn:b }); }, }, { xtype: 'checkbox', name: 'thisqty', columnWidth: 0.3, margin: '0 0 0 5', isFilter:true, boxLabel:'只显示[建议采购量]大于0的物料', checked:true, getFilter:function(){ var me=this; let value=me.value,filter= {}; if (value) {//已勾选 filter= { filterFn: function (rec) { return rec.get('thisqty_filter') > 0; }, anyMatch: true, caseSensitive: false }; } return filter; }, listeners: { change: function () { this.ownerCt.ownerCt.ownerCt.onQuery(); } } }, { xtype: 'checkbox', name: 'turned', boxLabel:'只显示未下达的物料', checked:true, isFilter:true, margin: '0 0 0 5', columnWidth: 0.3, getFilter:function(){ var me=this; let value=me.value; filter= {}; if (value) {//已勾选 filter= { filterFn: function (rec) { return rec.get('mr_turnstatus')=='未下达'; }, anyMatch: true, caseSensitive: false }; } return filter; }, listeners: { change: function () { this.ownerCt.ownerCt.ownerCt.onQuery(); } } },{ xtype: 'radiogroup', name: 'redio_vend', width: 330, labelWidth :110, isFilter:true, margin: '0 0 0 10', fieldLabel: "供应商获取状态", cls:'vendRadiogroup', simpleValue: true, items: [ { boxLabel: '全部', inputValue: 'ALL' , checked: true }, { boxLabel: '已获取', inputValue: 'HASVEND'}, { boxLabel: '未获取', inputValue: 'NONE'} ], getFilter:function(){ var me=this; let value=me.lastValue, filter= {}; if (value == 'HASVEND') {//已获取 filter= { filterFn: function (rec) { return rec.get('mr_vendid') > 0; }, anyMatch: true, caseSensitive: false }; }else if (value == 'NONE') {//未获取 filter= { filterFn: function (rec) { return (!rec.get('mr_vendid') || rec.get('mr_vendid') == 0); }, anyMatch: true, caseSensitive: false }; } return filter; }, listeners: { change: function (r, newValue) { this.ownerCt.ownerCt.ownerCt.onQuery(); } } },'->', { iconCls: 'x-fa fa-question-circle', reference: 'qMark ', name:'qMark', ui: 'header', tooltip: { text: '
毛需求:销售订单、备货单、工单用料及安全库存的实际需求数量
'+ '净需求:毛需求-库存可用-请购可用-在途可用-在制可用计算出来的实际欠缺数量
'+ '建议采购量:在净需求的基础上考虑最小包装量及产品资料的单位对应数量小数位计算出来的建议下采购单数量
', anchor: 'top', autoHide:true, width:370, dismissDelay:7200000 } }, { text: '生成采购订单', cls: 'x-formpanel-btn-blue', handler: function (btn) { me.turnPurc(btn); } }, { text: '导出', handler: me.onExport }] }] }); me.callParent(arguments); }, calu:function(params,win,ownerBtn){ var gridpanel =this; gridpanel.setLoading(true); saas.util.BaseUtil.request({ url: '/api/purchase/makeIntell/list', method: 'POST', params: JSON.stringify(params) }) .then(function(localJson) { gridpanel.setLoading(false); if(localJson.success){ gridpanel.getStore().loadData(localJson.data.list); gridpanel.ownerCt.onQuery(); if(win){ win.close(); } //if(ownerBtn) ownerBtn.ownerCt.down('[name="tipWord"]').setHidden(false); // ownerBtn.ownerCt.down('[name="qMark"]').setHidden(false); } }) .catch(function(e) { view.setLoading(false); saas.util.BaseUtil.showErrorToast('计算失败: ' + e.message); }); }, turnPurc: function (btn) { var me = this; var data = me.getGridSelected(); if (data && data.length > 0) { me.setLoading(true); var params = JSON.stringify({ baseDTOs: data }); saas.util.BaseUtil.request({ url: '/api/purchase/makeIntell/turnPurc', params: params, method: 'POST', async: false }) .then(function (res) { if (res.success) { me.setLoading(false); me.selModel.deselectAll(); saas.util.BaseUtil.showSuccessToast('转单成功'); var params ={}; params['mergePurc'] = 0; params['mergeDays'] = 0; params['safetystock'] = 0; params['mpq'] = 0; params['auto'] = 1; me.calu(params,'',btn); var purcs=res.data; purcs.forEach(function(purc) { let intValue = purc.id, codeValue = purc.code, name = '采购订单'; saas.util.BaseUtil.openTab('purchase-purchase-formpanel', name + "(" + codeValue + ")", codeValue + intValue, { initId: intValue }); }); } }) .catch(function (res) { me.setLoading(false); saas.util.BaseUtil.showErrorToast(('操作失败: ') + res.message); if(res.code=='71020'){ var params ={}; params['mergePurc'] = 0; params['mergeDays'] = 0; params['safetystock'] = 0; params['mpq'] = 0; params['auto'] = 1; me.calu(params,'',btn); } }); } else { saas.util.BaseUtil.showErrorToast('请勾选至少一条明细。'); } }, getGridSelected: function () { var me = this, items = me.selModel.getSelection(), data = new Array(); var ids = []; Ext.each(items, function (item, index) { var o = new Object(); if (!Ext.isEmpty(item.data[me.idField])) { o['id'] = item.data[me.idField]; } if (me.turnQtyField) { o['qty'] = item.data[me.turnQtyField]; } o['vendid'] = item.data['mr_vendid'] ? item.data['mr_vendid']:0; o['price'] = item.data['mr_price']; if (!Ext.Array.contains(ids, o['id'])) { ids.push(o['id']); data.push(o); } }); return data; }, onExport: function (me) { var grid = me.ownerCt.ownerCt; var cfg={ type: 'xlsx', title:'智能采购', fileName: '智能采购'+ Ext.Date.format(new Date(),'Y-m-d_H-i-s') +'.xlsx' }; grid.setLoading(true); grid.saveDocumentAs(cfg); Ext.defer(function () { grid.setLoading(false); }, 5000); } });