FormPanel.js 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089
  1. Ext.define('make.view.osmake.osMake.FormPanel', {
  2. extend: 'saas.view.core.form.FormPanel',
  3. xtype: ['osmake-osmake-formpanel', 'osmake-formpanel'],
  4. controller: 'osmake-osmake-formpanel',
  5. viewModel: 'osmake-osmake-formpanel',
  6. viewName: 'osmake-osmake-formpanel',
  7. caller: 'OsMake',
  8. //字段属性
  9. _title: '外协单',
  10. _idField: 'id',
  11. _codeField: 'ma_code',
  12. _statusField: 'ma_status',
  13. _statusCodeField: 'ma_statuscode',
  14. _auditmanField: 'ma_auditman',
  15. _auditdateField: 'ma_auditdate',
  16. _relationColumn: 'mm_maid',
  17. _readUrl: '/api/make/make/read',
  18. _saveUrl: '/api/make/make/save',
  19. _auditUrl: '/api/make/make/audit',
  20. _unAuditUrl: '/api/make/make/unAudit',
  21. _deleteUrl: '/api/make/make/delete',
  22. _calMaterial:'/api/make/make/calMaterial',
  23. _turnPick:'/api/make/make/turnPick',
  24. _turnBack:'/api/make/make/turnBack',
  25. _turnScrap:'/api/make/make/turnScrap',
  26. _turnIn:'/api/make/make/turnIn',
  27. _end:'/api/make/make/end',
  28. _resEnd:'/api/make/make/resEnd',
  29. initId: 0,
  30. getToolBarItems: function() {
  31. let me = this, items = [];
  32. let codeHeaderItems = [{
  33. xtype: 'tbtext',
  34. bind: {
  35. html: '<span class="x-tb x-no">NO. </span>' +
  36. '<span class="x-tb x-code">{base.codeEditable ? "" : ' + me._codeField + '}</span>'
  37. }
  38. }, {
  39. xtype: 'textfield',
  40. name: me._codeField,
  41. minHeight: 24,
  42. maxHeight: 24,
  43. width: 200,
  44. cls: 'x-codeeditor',
  45. hidden: true,
  46. allowBlank: false,
  47. regex: /^[^\s~`!!@#¥$%\^……&*(())\-——\-_=+【\[\]】{{}}\|、\\;;::‘\'“”\",,《<。.》>、\/\?\?]*$/,
  48. regexText: '不允许输入特殊字符',
  49. bind: {
  50. value: '{' + me._codeField + '}',
  51. hidden: '{!base.codeEditable}'
  52. },
  53. enableKeyEvents: true,
  54. listeners: {
  55. blur: 'codeEditorBlur',
  56. keydown: function(th, e, eOpts) {
  57. if(e.keyCode == 13) {
  58. th.fireEvent('blur');
  59. }
  60. },
  61. show: function (field, eOpts) {
  62. field.focus();
  63. }
  64. }
  65. }, {
  66. xtype: 'tbtext',
  67. cls: 'x-audited',
  68. hidden: true,
  69. bind: {
  70. hidden: '{!(' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END" )}',
  71. html: `{${me._statusCodeField}=="AUDITED" ? "已审核" : "已结案"}`
  72. }
  73. }, {
  74. xtype: 'button',
  75. cls: 'x-codeeditor-btn',
  76. bind: {
  77. iconCls: 'fa {base.codeEditable ? "fa-check-circle" : "fa-edit"}',
  78. hidden: '{!base.editable || (' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END")}'
  79. },
  80. handler: 'codeEditorClick'
  81. }, '->'];
  82. if(me.codeInHeader) {
  83. items = items.concat(codeHeaderItems);
  84. }
  85. items.push('->');
  86. items = items.concat(me.toolBtns.map(function (btn) {
  87. btn.cls = btn.cls ? btn.cls + ' x-formpanel-btn-blue' : 'x-formpanel-btn-blue';
  88. return btn;
  89. }).concat(me.defaultBtns))
  90. return items;
  91. },
  92. /**
  93. * 一些初始化viewModel的方法
  94. */
  95. initViewModel: function () {
  96. let me = this,
  97. codeField = me._codeField,
  98. statusField = me._statusField,
  99. statusCodeField = me._statusCodeField,
  100. viewModel = me.getViewModel(),
  101. auditTexts = me.auditTexts;
  102. viewModel.set(codeField, '');
  103. viewModel.set('createTime', Ext.Date.format(new Date(), 'Y-m-d H:i:s'));
  104. viewModel.set('updateTime', Ext.Date.format(new Date(), 'Y-m-d H:i:s'));
  105. viewModel.set('creatorId', viewModel.get('account').id);
  106. viewModel.set('creatorName', viewModel.get('account').realname);
  107. if (statusCodeField) {
  108. let o = {};
  109. o['bindEditable'] = {
  110. bind: '{' + statusCodeField + '}',
  111. get: function(value) {
  112. // viewModel.set(statusField, value == 'AUDITED' ? '已审核' : '未审核');
  113. viewModel.set(statusField, value ? (value == auditTexts.auditCode ? auditTexts.auditText : auditTexts.unAuditText) : null);
  114. // viewModel.set('auditBtnText', value == 'AUDITED' ? '反审核' : '审核');
  115. viewModel.set('auditBtnText', value == auditTexts.auditCode ? auditTexts.unAuditBtnText : auditTexts.auditBtnText);
  116. // me.setEditable(value != 'AUDITED');
  117. // form.editable表示强制设置表单编辑属性,与状态无关
  118. if (!Ext.isBoolean(me.editable)) {
  119. me.setEditable(value != auditTexts.auditCode && value != me.submitConfig.submittedCode && value != 'END');
  120. }
  121. return value;
  122. }
  123. };
  124. viewModel.setFormulas(o);
  125. // viewModel.set(statusCodeField, "UNAUDITED");
  126. viewModel.set(statusCodeField, auditTexts.unAuditCode);
  127. } else {
  128. // viewModel.set('auditBtnText', "审核");
  129. viewModel.set('auditBtnText', auditTexts.auditBtnText);
  130. }
  131. },
  132. initComponent: function () {
  133. var me = this;
  134. me.defaultBtns = [{
  135. cls: 'x-formpanel-btn-blue',
  136. xtype: 'button',
  137. text: '新增',
  138. hidden: true,
  139. bind: {
  140. hidden: '{!showAddBtn || !id}'
  141. },
  142. handler: 'add'
  143. }, {
  144. hidden: true,
  145. xtype: 'button',
  146. text: '复制',
  147. handler: 'onCopy',
  148. bind: {
  149. hidden: '{!showCopyBtn || !'+ me._idField + '}',
  150. }
  151. }, {
  152. hidden: true,
  153. xtype: 'button',
  154. text: '保存',
  155. handler: 'onSave',
  156. cls:'save-btn',
  157. bind: {
  158. hidden: '{!showSaveBtn || '+ me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END"}',
  159. disabled: '{!base.valid || '+ me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END"}',
  160. tooltip:'{formBlank}'
  161. }
  162. }, {
  163. hidden: true,
  164. xtype: 'button',
  165. text: '删除',
  166. bind: {
  167. hidden: '{!showDeleteBtn || deleteHidden || ' + me._statusCodeField + ' == "AUDITED" || '+ me._statusCodeField + ' == "END" || '+me._statusCodeField+'=="' + me.submitConfig.submittedCode + '"}'
  168. },
  169. handler: 'delete'
  170. }, {
  171. hidden: true,
  172. xtype: 'button',
  173. bind: {
  174. text: `{${me._statusCodeField}=="${me.submitConfig.submittedCode}"?"${me.submitConfig.unSubmitBtnText}":"${me.submitConfig.submitBtnText}"}`,
  175. disabled: '{!base.valid}',
  176. hidden:`{!showSubmitBtn || !id || ${me._statusCodeField}=="AUDITED" || ${me._statusCodeField}=="END"}`
  177. },
  178. handler: "onSubmitBtnClick",
  179. }, {
  180. hidden: true,
  181. xtype: 'button',
  182. bind: {
  183. text: '{auditBtnText}',
  184. disabled: '{!base.valid}',
  185. hidden:'{!showAuditBtn}'
  186. },
  187. handler: "auditBtnClick",
  188. }];
  189. Ext.apply(this, {
  190. toolBtns: [{
  191. xtype: 'button',
  192. text: '用料计算',
  193. hidden: true,
  194. bind: {
  195. hidden: '{ !(id && ma_statuscode =="UNAUDITED") }'
  196. },
  197. handler: 'calMaterial'
  198. },{
  199. text: '转领料',
  200. xtype: 'button',
  201. handler: 'turnPick',
  202. bind:{
  203. hidden: '{turnHidden}',
  204. },
  205. menu: {
  206. cls:'x-query-menu',
  207. anchor: '100%',
  208. items:[{
  209. text:'转退料',
  210. handler:'turnBack'
  211. },{
  212. text:'转报废',
  213. handler:'turnScrap'
  214. }]
  215. }
  216. },{
  217. xtype: 'button',
  218. text: '转验收',
  219. hidden: true,
  220. bind: {
  221. hidden: '{turnHidden}'
  222. },
  223. handler: 'turnIn'
  224. },{
  225. xtype: 'button',
  226. text: '结案',
  227. hidden: true,
  228. bind: {
  229. hidden: '{turnHidden}'
  230. },
  231. handler: 'end'
  232. },{
  233. xtype: 'button',
  234. text: '反结案',
  235. hidden: true,
  236. bind: {
  237. hidden: '{!(ma_statuscode=="END")}'
  238. },
  239. handler: 'resEnd'
  240. },{
  241. xtype: 'button',
  242. text: '用料修改',
  243. hidden: true,
  244. bind: {
  245. hidden: '{turnHidden}'
  246. },
  247. handler: 'modifyMaterial'
  248. },{
  249. xtype: 'button',
  250. text: '更新外协信息',
  251. hidden: true,
  252. bind: {
  253. hidden: '{turnHidden}'
  254. },
  255. handler: 'modifyVendInfo'
  256. },{
  257. xtype: 'button',
  258. text: '工单变更',
  259. hidden: true,
  260. bind: {
  261. hidden: '{turnHidden}'
  262. },
  263. handler: 'modifyMake'
  264. }],
  265. defaultItems: [{
  266. xtype: 'hidden',
  267. name: 'id',
  268. fieldLabel: 'id',
  269. allowBlank: true,
  270. columnWidth: 0
  271. },{
  272. xtype: 'productMDbfindTrigger',
  273. name: 'ma_prodcode',
  274. fieldLabel: '产品编号',
  275. allowBlank: false,
  276. },{
  277. xtype: 'textfield',
  278. name: "pr_detail",
  279. fieldLabel: "产品名称",
  280. readOnly: "true",
  281. ignore: true
  282. },{
  283. xtype: 'textfield',
  284. name: "pr_spec",
  285. fieldLabel: "产品规格",
  286. readOnly: "true",
  287. maxLength: 200,
  288. hidden: true,
  289. ignore: true
  290. },{
  291. xtype: 'tipTextfield',
  292. name: "pr_orispeccode",
  293. fieldLabel: "产品型号",
  294. editable: false,
  295. ignore: true,
  296. bind:{
  297. otherInfoTip:'厂家/品牌:{pr_brand}<br>产品规格:{pr_spec}'
  298. }
  299. },{
  300. xtype: 'hidden',
  301. name: "pr_brand",
  302. fieldLabel: "厂家/品牌",
  303. ignore: true,
  304. },{
  305. xtype: 'hidden',
  306. name: "ma_prodid",
  307. fieldLabel: "产品ID",
  308. },{
  309. xtype: "remotecombo",
  310. name: "ma_kind",
  311. fieldLabel: "外协类型",
  312. storeUrl:'/api/make/kind/list/osmake',
  313. valueField:'mk_name',
  314. displayField: 'mk_name',
  315. allowBlank: false,
  316. columnWidth: 0.25,
  317. addHandler: function (b) {
  318. var form = this.ownerCmp.ownerCt;
  319. this.dialog = form.add({
  320. xtype: 'make-makekind-window',
  321. bind: {
  322. title: '新增外协类型'
  323. },
  324. dataKind: 'makekind',
  325. _parent: form,
  326. _combo: this.ownerCmp,
  327. record: null,
  328. session: true,
  329. viewModel: {
  330. data: {
  331. theKind: {
  332. id:0,
  333. mk_name: null,
  334. mk_makind: 'OSMAKE',
  335. mk_allowover: null,
  336. mk_unsetfinish:null,
  337. mk_zeroprice:null,
  338. mk_autoend:null,
  339. mk_reminddays:null,
  340. mk_ifmrpkind:null,
  341. mk_makind_h:true
  342. },
  343. zeropricehide:false,
  344. }
  345. }
  346. });
  347. this.dialog.show();
  348. },
  349. editHandler:function(btn,type){
  350. saas.util.BaseUtil.openTab('make-makekind-makekindlist', '外协类型设置','maintab--make-makekind-makekindlist');
  351. var combo = btn.ownerCt.up('remotecombo');
  352. if(combo){
  353. combo.collapse();
  354. }
  355. },
  356. listeners:{
  357. change:function(f, newValue, oldValue, eOpts){
  358. var me=this;
  359. let form = f.ownerCt
  360. if(newValue !=''){
  361. saas.util.BaseUtil.request({
  362. url: '/api/make/kind/list/osmake',
  363. method: 'GET'
  364. }).then(function(res) {
  365. if(res.success){
  366. if(res.data){
  367. var flag=false;
  368. Ext.Array.each(res.data,function(d,index){
  369. if(d.mk_name == newValue){
  370. form.down('[name=ma_kindid]').setValue(d.id);
  371. flag = true;
  372. }
  373. if(flag){
  374. return false;
  375. }
  376. });
  377. }
  378. }
  379. }).catch(function(res) {
  380. saas.util.BaseUtil.showErrorToast('选择的制造类型有误: ' + res.message);
  381. });
  382. }
  383. }
  384. }
  385. },{
  386. xtype: 'hidden',
  387. name: "ma_kindid",
  388. fieldLabel: "外协类型ID",
  389. },{
  390. xtype: 'numberfield',
  391. name: 'ma_qty',
  392. fieldLabel: '数量',
  393. allowBlank: false,
  394. }, {
  395. xtype: 'numberfield',
  396. name: 'ma_madeqty',
  397. fieldLabel: '已完工数',
  398. readOnly:true,
  399. thousandSeparator: ',',
  400. renderer: function (v){
  401. if(!v){
  402. v=0;
  403. }
  404. return '<p class="money-rtl"><B>'+saas.util.BaseUtil.numberFixFormat(v, 6, true)+''
  405. },
  406. ignore:true,
  407. },{
  408. xtype: 'datefield',
  409. name: 'ma_planbegindate',
  410. fieldLabel: '计划开工日期',
  411. allowBlank: false,
  412. labelWidth:110,
  413. labelAlign : 'right',
  414. format: 'Y-m-d',
  415. },{
  416. xtype: 'datefield',
  417. name: 'ma_planenddate',
  418. fieldLabel: '计划完工日期',
  419. allowBlank: false,
  420. labelWidth:110,
  421. labelAlign : 'right',
  422. format: 'Y-m-d',
  423. },{
  424. xtype: "saledetailDbfindTrigger",
  425. name: "ma_salecode",
  426. fieldLabel: "订单编号",
  427. columnWidth: 0.25,
  428. defaultCondition:"sa_statuscode='AUDITED' and pr_manutype IN('MAKE','OSMAKE')"
  429. },{
  430. xtype: 'hidden',
  431. name: "ma_saleid",
  432. fieldLabel: "订单ID",
  433. },{
  434. xtype: 'hidden',
  435. name: "ma_sfcode",
  436. fieldLabel: "备货编号",
  437. }, {
  438. xtype: "customerDbfindTrigger",
  439. name: "ma_custname",
  440. fieldLabel: "客户名称",
  441. hidden: true,
  442. },{
  443. xtype: 'hidden',
  444. name: "ma_custcode",
  445. fieldLabel: "客户编号",
  446. hidden: true,
  447. },{
  448. xtype: 'hidden',
  449. name: "ma_custid",
  450. fieldLabel: "客户ID",
  451. },{
  452. xtype: "datefield",
  453. name: "ma_delivery",
  454. fieldLabel: "交货日期"
  455. },{
  456. xtype: 'hidden',
  457. name: "ma_kindid",
  458. fieldLabel: "制造类型ID",
  459. },{
  460. xtype: 'hidden',
  461. name:'ma_tasktype',
  462. fieldLabel: '单据类型',
  463. allowBlank: false,
  464. defaultValue:'OS'
  465. },{
  466. xtype: 'remotecombo',
  467. storeUrl: '/api/document/workcenter/getCombo',
  468. name: "ma_wcname",
  469. fieldLabel: "工作中心",
  470. hidden: true,
  471. addHandler: function (b) {
  472. var form = this.ownerCmp.ownerCt;
  473. this.dialog = form.add({
  474. xtype: 'document-workcenter-window',
  475. bind: {
  476. title: '新增工作中心'
  477. },
  478. dataKind: 'workcenter',
  479. _parent: form,
  480. _combo: this.ownerCmp,
  481. record: null,
  482. session: true
  483. });
  484. this.dialog.show();
  485. },
  486. editHandler:function(btn,type){
  487. saas.util.BaseUtil.openTab('document-workcenter-datalist', '工作中心','maintab--document-workcenter-datalist');
  488. var combo = btn.ownerCt.up('remotecombo');
  489. if(combo){
  490. combo.collapse();
  491. }
  492. }
  493. }, {
  494. xtype: "hidden",
  495. name: "ma_vendid",
  496. fieldLabel: "外协厂商ID"
  497. }, {
  498. xtype: "hidden",
  499. name: "ma_vendcode",
  500. fieldLabel: "外协厂商编号"
  501. }, {
  502. xtype: "vendorDbfindTrigger",
  503. name: "ma_vendname",
  504. fieldLabel: "外协厂商",
  505. columnWidth:0.25,
  506. // allowBlank: false,
  507. }, {
  508. xtype: "textfield",
  509. name: "ma_contact",
  510. fieldLabel: "联系人",
  511. hidden: true,
  512. }, {
  513. name: "ma_shipaddresscode",
  514. xtype: "remotecombo",
  515. fieldLabel: "交货地址",
  516. editable: false,
  517. allowBlank: true,
  518. columnWidth: 0.25,
  519. storeUrl: '/api/document/address/getCombo',
  520. hiddenBtn: false, //true 则会关闭新增按钮功能
  521. addHandler: function (b) {
  522. var form = this.ownerCmp.ownerCt;
  523. this.dialog = form.add({
  524. xtype: 'document-address-window',
  525. bind: {
  526. title: '新增交货地址'
  527. },
  528. _parent: form,
  529. _combo: this.ownerCmp,
  530. record: null,
  531. session: true
  532. });
  533. this.dialog.show();
  534. },
  535. editHandler: function(btn){
  536. saas.util.BaseUtil.openTab('document-address-datalist', '交货地址','maintab--other-address');
  537. var combo = btn.ownerCt.up('remotecombo');
  538. if(combo){
  539. combo.collapse();
  540. }
  541. }
  542. },{
  543. xtype: "textfield",
  544. name: "ma_tel",
  545. fieldLabel: "联系电话",
  546. hidden: true,
  547. }, {
  548. xtype: 'hidden',
  549. name: 'ma_paymentscode',
  550. fieldLabel: '付款方式编号'
  551. }, {
  552. xtype: 'hidden',
  553. fieldLabel: '付款方式ID',
  554. name: "ma_paymentsid",
  555. },{
  556. xtype: 'currencyCombo',
  557. name:'ma_currency',
  558. fieldLabel: '币种',
  559. // allowBlank: false,
  560. rateField:'ma_rate',
  561. },{
  562. xtype: 'hidden',
  563. fieldLabel: '汇率',
  564. name:'ma_rate',
  565. allowBlank: false,
  566. },{
  567. xtype: 'numberfield',
  568. fieldLabel: '税率',
  569. name:'ma_taxrate',
  570. allowBlank: true,
  571. defaultValue: saas.util.BaseUtil.getDefualtTaxRate()
  572. },{
  573. xtype: "hidden",
  574. name: "ma_ipdid",
  575. fieldLabel: "取价ID"
  576. },{
  577. xtype: 'numberfield',
  578. fieldLabel: '含税加工单价',
  579. name:'ma_taxprice',
  580. fixDecimal:false,
  581. decimalPrecision:8,
  582. thousandSeparator: ',',
  583. renderer: function (v){
  584. if(!v){
  585. v=0;
  586. }
  587. return '<p class="money-rtl"><B>'+saas.util.BaseUtil.numberFormat(v, 8, true)+''
  588. }
  589. },{
  590. xtype: "remotecombo",
  591. name: "ma_payments",
  592. fieldLabel: "付款方式",
  593. storeUrl:'/api/document/paymentspay/list/enable',
  594. valueField:'pa_name',
  595. displayField: 'pa_name',
  596. // allowBlank: false,
  597. addHandler: function (b) {
  598. var document = Ext.create('saas.view.document.paymentspay.DataList', {});
  599. var form = this.ownerCmp.ownerCt;
  600. this.dialog = form.getController().getView().add({
  601. xtype: 'document-paymentspay-window',
  602. bind: {
  603. title: '新增付款方式'
  604. },
  605. dataKind: 'paymentspay',
  606. belong: document.etc['paymentspay'],
  607. _parent: form,
  608. _combo: this.ownerCmp,
  609. record: null,
  610. session: true
  611. });
  612. this.dialog.show();
  613. },
  614. editHandler:function(btn,type){
  615. saas.util.BaseUtil.openTab('document-paymentspay-datalist', '付款方式设置','maintab--document-paymentspay-datalist');
  616. var combo = btn.ownerCt.up('remotecombo');
  617. if(combo){
  618. combo.collapse();
  619. }
  620. },
  621. listeners:{
  622. select: function ( combo, record, eOpts ) {
  623. let form = combo.ownerCt;
  624. let paymentsid = form.down('[name=ma_paymentsid]'),
  625. paymentscode = form.down('[name=ma_paymentscode]');
  626. paymentsid.setValue(record.data['id']);
  627. paymentscode.setValue(record.data['pa_code']);
  628. }
  629. }
  630. }, {
  631. xtype: 'hidden',
  632. name:'ma_tasktype',
  633. fieldLabel: '单据类型',
  634. allowBlank: false,
  635. defaultValue:'OS'
  636. },{
  637. name: "detailGridField",
  638. xtype: "detailGridField",
  639. storeModel: 'make.model.make.MakeMaterial',
  640. deleteDetailUrl: '/api/make/make/deleteDetail',
  641. allowEmpty: true,
  642. detnoColumn: 'mm_detno',
  643. columns: [{
  644. text: "id",
  645. dataIndex: "id",
  646. xtype: "numbercolumn",
  647. hidden: true
  648. }, {
  649. text: "物料id",
  650. dataIndex: "mm_prodid",
  651. xtype: "numbercolumn",
  652. hidden: true
  653. },{
  654. text: "物料编号",
  655. width: 150,
  656. dataIndex: "mm_prodcode",
  657. items: null,
  658. editor: {
  659. displayField: "display",
  660. editable: true,
  661. format: "",
  662. hideTrigger: false,
  663. maxLength: 100,
  664. minValue: null,
  665. positiveNum: false,
  666. queryMode: "local",
  667. store: null,
  668. valueField: "value",
  669. xtype: "productMultiDbfindTrigger"
  670. }
  671. },{
  672. text: "厂家/品牌",
  673. hidden:true,
  674. width: 100.0,
  675. dataIndex: "pr_brand",
  676. ignore: true,
  677. renderer: function (v, m, r) {
  678. if (!v) {
  679. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  680. }
  681. return v;
  682. }
  683. },{
  684. text: "物料名称",
  685. width: 150.0,
  686. dataIndex: "pr_detail",
  687. ignore: true,
  688. renderer: function (v, m, r) {
  689. if (!v) {
  690. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  691. }
  692. return v;
  693. }
  694. }, {
  695. text: "型号",
  696. width: 200.0,
  697. dataIndex: "pr_orispeccode",
  698. ignore: true,
  699. renderer: function (v, m, r) {
  700. var str = '';
  701. if(r.data["productDTO"] ){
  702. if(r.data["productDTO"]['pr_brand']){
  703. str += '厂家/品牌:'+ r.data["productDTO"]['pr_brand'] + '<br>';
  704. }
  705. if(r.data["productDTO"]['pr_spec']){
  706. str += '规格:' + r.data["productDTO"]['pr_spec'];
  707. }
  708. if(str) m.tdAttr = 'data-qtip="'+ str +'"';
  709. if (!v) {
  710. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  711. }
  712. }
  713. return v;
  714. }
  715. }, {
  716. text: "单位",
  717. width: 65.0,
  718. dataIndex: "pr_unit",
  719. ignore: true,
  720. renderer: function (v, m, r) {
  721. if (!v) {
  722. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  723. }
  724. return v;
  725. }
  726. },{
  727. text: "数量小数位数",
  728. hidden:true,
  729. dataIndex: "pu_decimal",
  730. ignore: true,
  731. renderer: function (v, m, r) {
  732. if (!v) {
  733. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  734. }
  735. return v;
  736. }
  737. },{
  738. text: "单位用量",
  739. dataIndex: "mm_oneuseqty",
  740. xtype: 'numbercolumn',
  741. width: 110.0,
  742. editor: {
  743. xtype: "numberfield",
  744. decimalPrecision: 6,
  745. minValue: 0,
  746. listeners:{
  747. change:'onOneUseChange'
  748. }
  749. },
  750. renderer: function(v, m, r) {
  751. return saas.util.BaseUtil.numberFormat(v, 6, true);
  752. }
  753. },{
  754. text: "需求数",
  755. dataIndex: "mm_qty",
  756. xtype: 'numbercolumn',
  757. width: 110,
  758. editor: {
  759. xtype: "numberfield",
  760. decimalPrecision: 6,
  761. minValue: 0
  762. },
  763. renderer: function(v, m, r) {
  764. return saas.util.BaseUtil.numberFormat(v, 6, true);
  765. }
  766. }, {
  767. text: 'model映射需要',
  768. dataIndex: 'productDTO',
  769. hidden: true,
  770. },{
  771. text: "已领数",
  772. xtype: 'numbercolumn',
  773. dataIndex: "mm_havegetqty",
  774. width: 110,
  775. renderer: function(v, m, r) {
  776. return saas.util.BaseUtil.numberFormat(v, 6, true);
  777. },
  778. ignore:true,
  779. }, {
  780. text: "已转领料数",
  781. xtype: 'numbercolumn',
  782. dataIndex: "mm_turngetqty",
  783. width: 110,
  784. renderer: function(v, m, r) {
  785. return saas.util.BaseUtil.numberFormat(v, 6, true);
  786. },
  787. ignore:true,
  788. }, {
  789. text: "未领数",
  790. xtype: 'numbercolumn',
  791. dataIndex: "mm_restgetqty",
  792. width: 110,
  793. ignore: true,
  794. renderer : function(v, m, r) {
  795. v = r.get('mm_qty') + (r.get('mm_scrapqty')||0) - (r.get('mm_havegetqty')||0)-(r.get('mm_turngetqty')||0);
  796. return saas.util.BaseUtil.numberFormat(v, 6, true);
  797. },
  798. },{
  799. text: "已转退料数",
  800. xtype: 'numbercolumn',
  801. dataIndex: "mm_turnbackqty",
  802. width: 110,
  803. renderer: function(v, m, r) {
  804. return saas.util.BaseUtil.numberFormat(v, 6, true);
  805. },
  806. ignore:true,
  807. },{
  808. text: "制程不良数",
  809. xtype: 'numbercolumn',
  810. dataIndex: "mm_returnmqty",
  811. width: 110,
  812. renderer: function(v, m, r) {
  813. return saas.util.BaseUtil.numberFormat(v, 6, true);
  814. },
  815. ignore:true,
  816. }, {
  817. text: "报废数",
  818. xtype: 'numbercolumn',
  819. dataIndex: "mm_scrapqty",
  820. width: 110,
  821. renderer: function(v, m, r) {
  822. return saas.util.BaseUtil.numberFormat(v, 6, true);
  823. },
  824. ignore:true,
  825. }, {
  826. text: "已转报废数",
  827. xtype: 'numbercolumn',
  828. dataIndex: "mm_turnscrapqty",
  829. width: 110,
  830. renderer: function(v, m, r) {
  831. return saas.util.BaseUtil.numberFormat(v, 6, true);
  832. },
  833. ignore:true,
  834. }, {
  835. text: "备注",
  836. dataIndex: "mm_remark",
  837. editor: {
  838. xtype: "textfield"
  839. },
  840. width: 250,
  841. },{
  842. text: "规格",
  843. hidden:true,
  844. width: 200,
  845. dataIndex: "pr_spec",
  846. ignore: true,
  847. renderer: function (v, m, r) {
  848. if (!v) {
  849. return r.data["productDTO"] ? r.data["productDTO"][m.column.dataIndex] : null;
  850. }
  851. return v;
  852. }
  853. }, ]
  854. }, {
  855. xtype: "textfield",
  856. name: "ma_remark",
  857. fieldLabel: "备注",
  858. columnWidth: 0.6
  859. },{
  860. xtype: 'displayfield',
  861. fieldLabel: '不含税金额(元)',
  862. name:'ma_nettotal',
  863. readOnly: true,
  864. labelWidth:200,
  865. labelAlign : 'right',
  866. columnWidth: 0.4,
  867. thousandSeparator: ',',
  868. renderer: function (v){
  869. if(!v){
  870. v=0;
  871. }
  872. return '<p class="money-rtl"><B>'+saas.util.BaseUtil.numberFixFormat(v, 2, true)+''
  873. },
  874. }, {
  875. xtype: "datefield",
  876. name: "createTime",
  877. fieldLabel: "单据日期",
  878. readOnly: true,
  879. defaultValue: new Date(),
  880. columnWidth: 0.3,
  881. }, {
  882. xtype: "displayfield",
  883. name: "ma_getstatus",
  884. fieldLabel: "领料状态",
  885. columnWidth: 0.3,
  886. ignore:true,
  887. },{
  888. xtype: 'displayfield',
  889. fieldLabel: '税额(元)',
  890. name:'ma_taxamount',
  891. readOnly: true,
  892. labelWidth:200,
  893. labelAlign : 'right',
  894. columnWidth: 0.4,
  895. thousandSeparator: ',',
  896. renderer: function (v){
  897. if(!v){
  898. v=0;
  899. }
  900. return '<p class="money-rtl"><B>'+saas.util.BaseUtil.numberFixFormat(v, 2, true)+''
  901. },
  902. },{
  903. xtype: "hidden",
  904. name: "creatorId",
  905. fieldLabel: "录入人ID",
  906. readOnly: true
  907. }, {
  908. xtype: "textfield",
  909. name: "creatorName",
  910. fieldLabel: "录入人",
  911. readOnly: true,
  912. columnWidth: 0.3
  913. }, {
  914. xtype: "hidden",
  915. name: "updaterId",
  916. fieldLabel: "更新人ID",
  917. readOnly: true
  918. }, {
  919. xtype: "hidden",
  920. name: "updaterName",
  921. fieldLabel: "更新人",
  922. readOnly: true
  923. }, {
  924. xtype: "hidden",
  925. name: "updateTime",
  926. fieldLabel: "更新日期",
  927. readOnly: true,
  928. defaultValue: new Date()
  929. }, {
  930. xtype: "textfield",
  931. name: "ma_auditman",
  932. fieldLabel: "审核人",
  933. columnWidth: 0.3,
  934. readOnly: true
  935. }, {
  936. xtype: "hidden",
  937. name: "ma_auditdate",
  938. fieldLabel: "审核日期",
  939. readOnly: true
  940. },{
  941. xtype: 'displayfield',
  942. fieldLabel: '价税合计(元)',
  943. name:'ma_total',
  944. readOnly: true,
  945. labelWidth:200,
  946. labelAlign : 'right',
  947. columnWidth: 0.4,
  948. thousandSeparator: ',',
  949. renderer: function (v){
  950. if(!v){
  951. v=0;
  952. }
  953. return '<p class="money-rtl"><B>'+saas.util.BaseUtil.numberFixFormat(v, 2, true)+''
  954. },
  955. }],
  956. });
  957. this.callParent(arguments);
  958. },
  959. beforeAudit: function () {
  960. var me = this,
  961. controller = me.getController(),
  962. viewModel = me.getViewModel(),
  963. store = viewModel.get('detail0').detailStore,
  964. items = store.getData().items,
  965. controller = me.getController(),
  966. str = '';
  967. //工单数量为0
  968. if(!viewModel.get('ma_qty')){
  969. saas.util.BaseUtil.showErrorToast("工单数量不允许为0");
  970. return false;
  971. }
  972. var begin = Ext.isDate(viewModel.get("ma_planbegindate")) ? Ext.Date.format(viewModel.get("ma_planbegindate"), 'Y-m-d H:i:s') : viewModel.get("ma_planbegindate");
  973. var end = Ext.isDate(viewModel.get("ma_planenddate")) ? Ext.Date.format(viewModel.get("ma_planenddate"), 'Y-m-d H:i:s') : viewModel.get("ma_planenddate");
  974. //计划完工日期小于计划开工日期时限制保存并提示
  975. if(begin > end ){
  976. saas.util.BaseUtil.showErrorToast("计划完工日期不允许小于计划开工日期");
  977. return false;
  978. }
  979. Ext.Array.each(items, function (item, i) {
  980. if (!item.get('mm_oneuseqty') && item.get('mm_prodcode')) {
  981. str = str + item.get('mm_detno') + ','
  982. }
  983. });
  984. if (str != '') {
  985. saas.util.BaseUtil.showConfirm('提示', '行: ' + str + '物料单位用量为0,是否继续审核?')
  986. .then(function (y) {
  987. if (y == 'yes') {
  988. controller.audit();
  989. }
  990. });
  991. } else {
  992. controller.audit();
  993. }
  994. return false;
  995. },
  996. beforeSave: function () {
  997. var me = this,
  998. controller = me.getController(),
  999. viewModel = me.getViewModel(),
  1000. store = viewModel.get('detail0').detailStore,
  1001. items = store.getData().items,
  1002. controller = me.getController(),
  1003. str = '';
  1004. //工单数量为0
  1005. if(!viewModel.get('ma_qty')){
  1006. saas.util.BaseUtil.showErrorToast("工单数量不允许为0");
  1007. return false;
  1008. }
  1009. var begin = Ext.isDate(viewModel.get("ma_planbegindate")) ? Ext.Date.format(viewModel.get("ma_planbegindate"), 'Y-m-d H:i:s') : viewModel.get("ma_planbegindate");
  1010. var end = Ext.isDate(viewModel.get("ma_planenddate")) ? Ext.Date.format(viewModel.get("ma_planenddate"), 'Y-m-d H:i:s') : viewModel.get("ma_planenddate");
  1011. //计划完工日期小于计划开工日期时限制保存并提示
  1012. if(begin > end ){
  1013. saas.util.BaseUtil.showErrorToast("计划完工日期不允许小于计划开工日期");
  1014. return false;
  1015. }
  1016. Ext.Array.each(items, function (item, i) {
  1017. if (!item.get('mm_oneuseqty') && item.get('mm_prodcode')) {
  1018. str = str + item.get('mm_detno') + ','
  1019. }
  1020. });
  1021. if (str != '') {
  1022. saas.util.BaseUtil.showConfirm('提示', '行: ' + str + '物料单位用量为0,是否继续保存?')
  1023. .then(function (y) {
  1024. if (y == 'yes') {
  1025. controller.save();
  1026. }
  1027. });
  1028. } else {
  1029. controller.save();
  1030. }
  1031. return false;
  1032. },
  1033. setInquiry: function () {
  1034. var form = this;
  1035. var ma_kind = form.down('[name=ma_kind]');
  1036. if(!ma_kind.getValue()){
  1037. saas.util.BaseUtil.request({
  1038. url: '/api/make/kind/list/osmake',
  1039. method: 'GET'
  1040. }).then(function(res) {
  1041. if(res.success){
  1042. if(res.data){
  1043. var flag=false;
  1044. Ext.Array.each(res.data,function(d,index){
  1045. if(d.mk_ifmrpkind){
  1046. form.down('[name=ma_kind]').setValue(d.mk_name);
  1047. flag = true;
  1048. }
  1049. if(flag){
  1050. return false;
  1051. }
  1052. });
  1053. }
  1054. }
  1055. }).catch(function(res) {
  1056. saas.util.BaseUtil.showErrorToast(res.message);
  1057. });
  1058. }
  1059. //有预测来源无订单编号的工单 展示预测来源编号
  1060. var ma_salecode = form.down('[name=ma_salecode]');
  1061. var ma_sfcode = form.down('[name=ma_sfcode]');
  1062. if(!ma_salecode.getValue()&&ma_sfcode.getValue()){
  1063. ma_salecode.setValue(ma_sfcode.getValue());
  1064. }
  1065. return true;
  1066. }
  1067. });