You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

501 lines
19 KiB

1 week ago
  1. <#import "../master.ftl" as master>
  2. <@master.layout>
  3. <style>
  4. #fm label {
  5. width: 150px;
  6. }
  7. .page-header {
  8. margin: 20px 0 -10px;
  9. }
  10. .customer-label .textbox-label{
  11. width: 120px;
  12. }
  13. </style>
  14. <div class="page-header">
  15. <h3>Import Shop Order</h3>
  16. </div>
  17. <!-- 页面表单 -->
  18. <table id="dg" class="easyui-datagrid" style="width:100%; height:400px;display: none;"
  19. data-options="pagination: true, pageSize: 20, singleSelect:true, showFooter: true, fitColumns:true,
  20. onSelect:onTableRowSelect, url:'/so/order/getSoOrderList', method:'POST',
  21. toolbar:'#tb'">
  22. <thead>
  23. <tr>
  24. <th data-options="field:'orderNo',width:80,editor:'textbox'">SO No</th>
  25. <th data-options="field:'partNo',width:80,editor:'textbox'">Part No</th>
  26. <th data-options="field:'partDesc',width:200,editor:'textbox'">Part Description</th>
  27. <th data-options="field:'revNo',width:50">Rev No</th>
  28. <th data-options="field:'lotSize',width:60,editor:'textbox'">Lot Size</th>
  29. <th data-options="field:'stockedQty',width:60,editor:'textbox'">Received Qty</th>
  30. <th data-options="field:'packageQty',width:60,editor:'textbox'">Standard Roll Qty</th>
  31. <th data-options="field:'boxQty',width:60,editor:'textbox'">Standard Box Qty</th>
  32. <th data-options="field:'serialsDate',width:90,align:'left',formatter:formatStringTime">SN Date</th>
  33. <th data-options="field:'earliestStartDate',width:90,formatter:formatStringTime">Earliest Start Date</th>
  34. <th data-options="field:'createdBy',width:60,align:'left'">Created By</th>
  35. <th data-options="field:'createdDate',width:90,align:'center',formatter:formatStringTime">Created Time</th>
  36. <th data-options="field:'status',width:80,editor:'textbox'">Status</th>
  37. <th data-options="field:'id',width:120,editor:'textbox', formatter: formatOrderAction">Actions</th>
  38. </tr>
  39. </thead>
  40. </table>
  41. <!-- 页面的查询框 -->
  42. <div id="tb" style="padding:10px 5px;display: none;">
  43. <div>
  44. SO No: <input class="easyui-textbox" id="orderNo" style="width:110px">
  45. Create Date: <input class="easyui-datebox" id="createdDateFrom" style="width:100px">
  46. to: <input class="easyui-datebox" id="createdDateTo" style="width:100px">
  47. <a href="#nowhere" id="queryLink" class="easyui-linkbutton" iconCls="icon-search">Query</a>
  48. &nbsp;&nbsp;&nbsp;
  49. <a href="javascript:void(0)" id="tbAdd" class="easyui-linkbutton" iconCls="icon-add" onclick="newSoOrder()">New</a>
  50. <a href="javascript:void(0)" id="tbEdit" data-options="disabled:true" class="easyui-linkbutton" iconCls="icon-edit" onclick="editSoOrder()">Update</a>
  51. <a href="javascript:void(0)" id="tbRemove" data-options="disabled:true" class="easyui-linkbutton" iconCls="icon-remove" onclick="removeSoOrder()">Delete</a>
  52. <a href="javascript:void(0)" id="tbRelease" data-options="disabled:true" class="easyui-linkbutton" onclick="releaseSoOrder()">
  53. <span class="glyphicon glyphicon-forward"></span>Release
  54. </a>
  55. <a href="javascript:void(0)" id="tbSnGen" data-options="disabled:true" class="easyui-linkbutton" iconCls="icon-add" onclick="genSerials()">Generate Serials</a>
  56. </div>
  57. </div>
  58. <!-- 新增和修改的modal -->
  59. <div id="dlg" class="easyui-dialog" style="width:500px; display: none;"
  60. closed="true" buttons="#dlg-buttons">
  61. <form id="fm" method="post" novalidate style="margin:0;padding:20px 20px">
  62. <div style="margin-bottom:10px; display: none;">
  63. <input id="so_order_id" name="id" class="easyui-textbox" style="" value="0">
  64. <input id="created_by" name="createdBy" class="easyui-textbox" style="" value="">
  65. <input id="updated_by" name="updatedBy" class="easyui-textbox" style="" value="">
  66. </div>
  67. <div style="margin-bottom:10px">
  68. <input id="order_no" name="orderNo" class="easyui-textbox" required="true" data-options="buttonText: 'IFS',onClickButton:getIfsOrder" label="SO No:" style="width:100%">
  69. </div>
  70. <div style="margin-bottom:10px">
  71. <input name="partNo" class="easyui-textbox" readonly required="true" label="Part No:" style="width:100%">
  72. </div>
  73. <div style="margin-bottom:10px">
  74. <input name="partDesc" class="easyui-textbox" readonly required="true" label="Part Description:" style="width:100%">
  75. </div>
  76. <div style="margin-bottom:10px">
  77. <input id="project" name="project" class="easyui-textbox" id="spec" required="true" label="Project:" style="width:100%">
  78. </div>
  79. <div style="margin-bottom:10px">
  80. <input id="rev_no" name="revNo" id="revNo" class="easyui-textbox" required="true" label="Rev No:" style="width:100%">
  81. </div>
  82. <div style="margin-bottom:10px">
  83. <input id="lot_size" name="lotSize" class="easyui-numberbox" readonly required="true" label="Lot Size:" style="width:100%">
  84. </div>
  85. <div style="margin-bottom:10px">
  86. <input id="input_lot_size" name="inputLotSize" class="easyui-numberbox" validtype="valueRange[1,1336335]" required="true" label="Input Lot Size:" style="width:100%">
  87. </div>
  88. <div style="margin-bottom:10px">
  89. <input name="serialsDate" class="easyui-datebox" validtype="validDate" required="true" data-options="parser:myparser" label="Serials Date:" style="width:100%">
  90. </div>
  91. <div style="margin-bottom:10px">
  92. <input name="earliestStartDate" class="easyui-datebox" validtype="validDate" required="true" label="Earliest Start Date:" style="width:100%">
  93. </div>
  94. <div style="margin-bottom:10px">
  95. <select id="cross_number" class="easyui-combobox" name="crossNumber" required="true" label="No Of Cross:" style="width:100%">
  96. <option value="3">3</option>
  97. <option value="4">4</option>
  98. </select>
  99. </div>
  100. </form>
  101. </div>
  102. <div id="dlg-buttons" style="display: none; text-align: center;">
  103. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveSoOrder()" style="width:90px">Save</a>
  104. <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')" style="width:90px">cancel</a>
  105. </div>
  106. <script>
  107. //临时参数
  108. let site = $('#current_site').val();
  109. let username = $('#current_username').val();
  110. var currentRow;//当前行
  111. //控制页面的高度
  112. $(window).resize(function () {
  113. $("#dg").datagrid({"height": $(window).height() - $(".datagrid").offset().top - 30});
  114. });
  115. //初始化页面的高度
  116. $(function () {
  117. $(window).resize();
  118. });
  119. $.extend($.fn.validatebox.defaults.rules, {
  120. notRequired: function(value){
  121. return true;
  122. },
  123. validDate: {
  124. validator: function(value){
  125. var date = $.fn.datebox.defaults.parser(value);
  126. var s = $.fn.datebox.defaults.formatter(date);
  127. return s==value;
  128. },
  129. message: 'Please enter a valid date.'
  130. },
  131. valueRange: {
  132. validator: function(value,param){
  133. return value >= param[0] && value <= param[1];
  134. },
  135. message: 'Field do not match.'
  136. }
  137. });
  138. function myparser(s){
  139. if(s) return new Date(s);
  140. }
  141. //处理菜单的功能
  142. function onTableRowSelect(index, row) {
  143. let noRowSelect = !!!row;
  144. let status = row.status;
  145. currentRow = row;
  146. $("#tbEdit").linkbutton({"disabled": noRowSelect || status != 'Created'});
  147. $("#tbRemove").linkbutton({"disabled": noRowSelect || status != 'Created'});
  148. $("#tbRelease").linkbutton({"disabled": noRowSelect || status != 'Created'});
  149. $("#tbSnGen").linkbutton({"disabled": noRowSelect || status != 'Released'});
  150. }
  151. //查询功能
  152. $("#queryLink").click(function(){
  153. var dg = $('#dg').datagrid({
  154. queryParams: {
  155. orderNo: $("#orderNo").val(),
  156. createdDateFrom: $("#createdDateFrom").val(),
  157. createdDateTo: $("#createdDateTo").val()
  158. }
  159. });
  160. });
  161. //格式化工单的功能
  162. function formatOrderAction(value, row){
  163. //关闭开放再打开功能
  164. let funTags = '';
  165. let status = row.status;
  166. if('Generated' == status){
  167. funTags += '<a style="text-decoration:none;" href="/export/soOrder/downloadSingleFileZip?orderNo='+row.orderNo+'">Singe Cross</a>';
  168. funTags += '&nbsp;|&nbsp;<a style="text-decoration:none;" href="/export/soOrder/downloadMultiFileZip?orderNo='+row.orderNo+'">Multiple Cross</a>';
  169. return funTags;
  170. }
  171. }
  172. //设置参数
  173. function setByInputName(inpt, value){
  174. var $inpt = $("#dlg input[textboxname="+inpt+"]");
  175. $inpt.textbox({"value": value});
  176. }
  177. //获取工单得信息
  178. function getIfsOrder(){
  179. var orderNo = $("#order_no").val();
  180. if (orderNo != ""){
  181. $.post("/so/order/getIfsOrderData", {orderNo: orderNo}, function (data) {
  182. console.log(data);
  183. if(data.success){
  184. setByInputName("partNo", data.row.part_no);
  185. setByInputName("partDesc", data.row.part_description);
  186. setByInputName("lotSize", data.row.lotSize);
  187. let totalQty = data.row.lotSize * data.row.safetyFactor;
  188. setByInputName("inputLotSize", totalQty);
  189. let projectCode = data.row.projectCode;
  190. //判断是否为空
  191. if(projectCode == null || projectCode == ''){
  192. $.messager.alert('Warning', 'Please input Project Code', 'warning');
  193. return false;
  194. }else{
  195. setByInputName("project", projectCode);
  196. }
  197. setByInputName("revNo", data.row.revNo);
  198. let earliestStartDate = data.row.earliestStartDate;
  199. //截取和去掉T
  200. if(!(null == earliestStartDate || '' == earliestStartDate)){
  201. earliestStartDate = earliestStartDate.substring(0, 19);
  202. earliestStartDate = earliestStartDate.replace('T', ' ');
  203. }
  204. setByInputName("earliestStartDate", formatDate(earliestStartDate));
  205. setByInputName("serialsDate", formatDate(earliestStartDate));
  206. //$('#cross_number').combobox('setValue', data.row.cross_number);
  207. $('#cross_number').combobox('setValue', 4);
  208. }else{
  209. $.messager.alert('Warning', data.msg, 'warning');
  210. }
  211. })
  212. }
  213. }
  214. //设置保存工单信息的modal(新增)
  215. var url;
  216. function newSoOrder(){
  217. $('#dlg').dialog('open').dialog('center').dialog('setTitle','New Shop Order');
  218. $('#fm').form('clear');
  219. url = '/so/order/newSoOrderData';
  220. $('#so_order_id').textbox("setValue", 0);
  221. $('#so_order_id').textbox("setValue", 0);
  222. $("#created_by").textbox('setValue', username);
  223. $('#cross_number').combobox('setValue', 3);
  224. }
  225. //编辑输入框
  226. function editSoOrder(){
  227. $("#updated_by").textbox('setValue', username);
  228. var row = $('#dg').datagrid('getSelected');
  229. if (row){
  230. $('#dlg').dialog('open').dialog('center').dialog('setTitle','Edit Shop Order');
  231. $('#fm').form('load', row);
  232. url = '/so/order/saveSoOrderData';
  233. }else{
  234. $.messager.alert('Warning','Please selete one line!', 'warning');
  235. }
  236. }
  237. //延时操作
  238. var delay = (function(){
  239. var timer = 0;
  240. return function(callback, ms){
  241. clearTimeout (timer);
  242. timer = setTimeout(callback, ms);
  243. };
  244. })();
  245. //保存工单的信息
  246. function saveSoOrder(){
  247. /* 判断是否维护好project */
  248. let project = $.trim($("#project").textbox('getValue'));
  249. if(null == project || '' == project){
  250. $.messager.alert('error', 'Please input Project Flag!', 'error');
  251. return false;
  252. }
  253. //判断标准中包参数是否符合要求
  254. let lotSize = parseInt($("#lot_size").textbox('getValue'));
  255. let inputLotSize = parseInt($("#input_lot_size").textbox('getValue'));
  256. //判断是否是正数
  257. if(inputLotSize < lotSize){
  258. $.messager.alert('error', 'Input Lot Size should be greater than Lot Size!', 'error');
  259. return false;
  260. }
  261. //判断是否存在空格
  262. let orderNo = $.trim($("#order_no").textbox('getValue'));
  263. //设置参数
  264. $('#order_no').textbox("setValue", orderNo);
  265. //判断是否存在内容
  266. $('#fm').form('submit', {
  267. url: url,
  268. success: function(result){
  269. var result = eval("("+result+")");
  270. if (result.success){
  271. $('#dlg').dialog('close'); // close the dialog
  272. $('#dg').datagrid('reload');
  273. } else {
  274. $.messager.alert('error',result.msg, 'error');
  275. }
  276. }
  277. });
  278. }
  279. //删除工单数据
  280. function removeSoOrder(){
  281. var row = $('#dg').datagrid('getSelected');
  282. if (row){
  283. $.messager.confirm('Confirm','Are you sure to delete the shop order:<b>'+row.orderNo+'</b> ?',function(r){
  284. if (r){
  285. $.post('/so/order/deleteSoOrderData', {'id': row.id}, function(result){
  286. if (result.success){
  287. $('#dg').datagrid('reload'); // reload the user data
  288. } else {
  289. $.messager.alert('error',result.msg, 'error');
  290. }
  291. },'json');
  292. }
  293. });
  294. }else{
  295. $.messager.alert('Warning','Please selete one line!', 'warning');
  296. }
  297. }
  298. //下达工单
  299. function releaseSoOrder(){
  300. let currentRow = $('#dg').datagrid('getSelected');
  301. if (currentRow){
  302. $.messager.confirm('Confirm','Are you sure to release the shop order: <b>'+currentRow.orderNo+'</b> ?',function(r){
  303. if (r){
  304. $.post('/so/order/releasedSoOrderData',{'id': currentRow.id, "username": $("#current_username").val()},function(result){
  305. if (result.success){
  306. $('#dg').datagrid('reload'); // reload the user data
  307. } else {
  308. $.messager.alert('error',result.msg, 'error');
  309. }
  310. },'json');
  311. }
  312. });
  313. }else{
  314. $.messager.alert('Warning','Please selete one line!', 'warning');
  315. }
  316. }
  317. //生成工单得序列号数据
  318. function genSerials(){
  319. var row = $('#dg').datagrid('getSelected');
  320. if (row){
  321. $.messager.confirm('Confirm','Generate serial numbers for selected order <b>'+row.orderNo+'</b> ?',function(r){
  322. if (r){
  323. $.post('/so/order/genSerials',{'orderNo': row.orderNo, 'username': username},function(result){
  324. if (result.success){
  325. $('#dg').datagrid('reload');
  326. $.messager.alert('Success','Serial numbers generated successfully', 'info');
  327. } else {
  328. $.messager.alert('Error',result.msg, 'error');
  329. }
  330. },'json');
  331. }
  332. });
  333. }else{
  334. $.messager.alert('Warning','Please select a row.', 'warning');
  335. }
  336. }
  337. function accMul(num1, num2){
  338. var m=0,s1=num1.toString(),s2=num2.toString();
  339. try{m+=s1.split(".")[1].length}catch(e){};
  340. try{m+=s2.split(".")[1].length}catch(e){};
  341. return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
  342. }
  343. /* ** ** ** ** ** ** ** ** ** ** 2024年开发的代码 ** ** ** ** ** ** ** ** ** */
  344. //信息完善的modal
  345. function orderRefineModal(){
  346. //取到当前的行
  347. delay(function(){
  348. currentRow = $('#dg').datagrid('getSelected');
  349. //判断是否存在数据
  350. if(!currentRow){
  351. $.messager.alert('error', 'Please select shop order first!', 'error');
  352. return false;
  353. }
  354. //设置标题
  355. $('#order_refine_modal').dialog('open').dialog('center').dialog('setTitle','Modify');
  356. //$('#order_refine_fm').form('clear');//清空表信息
  357. //设置的信息
  358. $("#order_no").textbox("setValue", currentRow.orderNo);
  359. //判断一下是否保税
  360. let bondedFlag = currentRow.bondedFlag;
  361. //如果存在数据
  362. if(!(null == bondedFlag || '' == bondedFlag)){
  363. $("#bonded_flag").combobox('setValue', bondedFlag);
  364. }else{
  365. $("#bonded_flag").combobox('setValue', 'Bonded');
  366. }
  367. //$("#bonded_flag").textbox("setValue", currentRow.bondedFlag);
  368. $("#scheme_remark").textbox("setValue", currentRow.schemeRemark);
  369. $("#stage_remark").textbox("setValue", currentRow.stageRemark);
  370. }, 500);
  371. }
  372. //保存信息完善的数据
  373. function saveOrderRefine(){
  374. //填充数据
  375. var bondedFlag = $("#bonded_flag").combobox('getValue', bondedFlag).trim();
  376. var schemeRemark = $("#scheme_remark").textbox("getValue").trim();
  377. var stageRemark = $("#stage_remark").textbox("getValue").trim();
  378. //设置参数
  379. var requestRow = {"id": currentRow.id, "bondedFlag": bondedFlag, "schemeRemark": schemeRemark, "stageRemark": stageRemark};
  380. //调用方法传递数值
  381. //转json字符串
  382. let postData = JSON.stringify(requestRow);
  383. //设置请求的类型
  384. $.ajaxSetup({
  385. contentType: "application/json;charset=utf-8"});
  386. $.post('/prepress/updateSoInfoRefineData', postData,
  387. function(result){
  388. if (result.success){
  389. //提示操作成功
  390. $.messager.alert('info',result.msg, 'info', function(){
  391. //关闭弹窗
  392. $('#order_refine_modal').dialog('close'); // close the dialog
  393. //刷新主表的数据
  394. $('#dg').datagrid('reload');
  395. });
  396. } else {
  397. $.messager.alert('error',result.msg, 'error', function(){
  398. //自动获取焦点
  399. });
  400. }
  401. },'json');
  402. //设置请求的类型
  403. $.ajaxSetup({
  404. contentType: "application/x-www-form-urlencoded"});
  405. }
  406. //信息完善的modal
  407. function changePartModal(){
  408. //取到当前的行
  409. delay(function(){
  410. currentRow = $('#dg').datagrid('getSelected');
  411. //设置标题
  412. $('#change_part_modal').dialog('open').dialog('center').dialog('setTitle','Update Part No');
  413. //设置的信息
  414. let partNo = currentRow.partNo;
  415. let prePartNo = partNo.substring(0, 8);
  416. let sufPartNo = partNo.substring(8);
  417. //如果存在数据
  418. $("#prefix_part_no").textbox("setValue", prePartNo);
  419. $("#suffix_part_no").val(sufPartNo);
  420. $("#suffix_part_no").focus();
  421. }, 500);
  422. }
  423. //保存信息完善的数据
  424. function changeOrderPart(){
  425. //填充数据
  426. var prePartNo = $("#prefix_part_no").textbox("getValue").trim();
  427. var sufPartNo = $("#suffix_part_no").val().trim();
  428. var resultPartNo = prePartNo+sufPartNo;
  429. //设置参数
  430. var requestRow = {"id": currentRow.id, "partNo": resultPartNo};
  431. //调用方法传递数值
  432. //转json字符串
  433. let postData = JSON.stringify(requestRow);
  434. //设置请求的类型
  435. $.ajaxSetup({
  436. contentType: "application/json;charset=utf-8"});
  437. $.post('/prepress/changeSoInfoPart', postData,
  438. function(result){
  439. if (result.success){
  440. //提示操作成功
  441. $.messager.alert('info',result.msg, 'info', function(){
  442. //关闭弹窗
  443. $('#change_part_modal').dialog('close'); // close the dialog
  444. //刷新主表的数据
  445. $('#dg').datagrid('reload');
  446. });
  447. } else {
  448. $.messager.alert('error',result.msg, 'error', function(){
  449. //自动获取焦点
  450. });
  451. }
  452. },'json');
  453. //设置请求的类型
  454. $.ajaxSetup({
  455. contentType: "application/x-www-form-urlencoded"});
  456. }
  457. </script>
  458. </@master.layout>