diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java index b6e25db6..e3ee35ea 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java @@ -2,6 +2,7 @@ package com.ruoyi.purchase.service; import java.util.List; import com.ruoyi.purchase.domain.PurchaseQuoteChild; +import org.springframework.transaction.annotation.Transactional; /** * 采购报价单物料信息Service接口 @@ -59,6 +60,13 @@ public interface IPurchaseQuoteChildService */ public int deletePurchaseQuoteChildById(Long purchaseQuoteChildId); + /** + * 根据报价单号逻辑删除采购报价单物料信息 + * @param quoteCode + * @return + */ + public int deletePurchaseQuoteChildByQuoteCode(String purchaseQuoteCode); + /** * 作废采购报价单物料信息 * @param purchaseQuoteChildId 采购报价单物料信息ID @@ -72,4 +80,5 @@ public interface IPurchaseQuoteChildService * @return */ int restorePurchaseQuoteChildById(Long purchaseQuoteChildId); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java index 292923ab..412d65e3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java @@ -2,6 +2,7 @@ package com.ruoyi.purchase.service; import java.util.List; import com.ruoyi.purchase.domain.PurchaseQuote; +import org.springframework.transaction.annotation.Transactional; /** * 采购报价单Service接口 @@ -33,6 +34,7 @@ public interface IPurchaseQuoteService * @param purchaseQuote 采购报价单 * @return 结果 */ + @Transactional(rollbackFor = Exception.class) public int insertPurchaseQuote(PurchaseQuote purchaseQuote); /** @@ -41,6 +43,7 @@ public interface IPurchaseQuoteService * @param purchaseQuote 采购报价单 * @return 结果 */ + @Transactional(rollbackFor = Exception.class) public int updatePurchaseQuote(PurchaseQuote purchaseQuote); /** @@ -72,4 +75,11 @@ public interface IPurchaseQuoteService * @return */ int restorePurchaseQuoteById(Long purchaseQuoteId); + + /** + * 生成采购报价单单号 + * @param + * @return 结果 + */ + Object getId(); } diff --git a/ruoyi-admin/src/main/resources/templates/system/salesOrder/add.html b/ruoyi-admin/src/main/resources/templates/system/salesOrder/add.html index 4b630275..e201b5cd 100644 --- a/ruoyi-admin/src/main/resources/templates/system/salesOrder/add.html +++ b/ruoyi-admin/src/main/resources/templates/system/salesOrder/add.html @@ -343,27 +343,83 @@ { title: '对外售价',field: 'materialSole',editable: true}, {title: '国内税率',field: 'countTax',align: 'center',editable: {type: 'text',mode: 'inline',},}, { title: '美元汇率',field: 'usdTax', align: 'center',editable: {type: 'text',mode: 'inline', }}, - {field: 'materialNum',align: 'center',title: '物料的数量',editable: {type: 'text',mode: 'inline', }}, - { title: '物料的不含税单价(RMB)', field: 'materialNoRmb',align: 'center', - editable: { - type: 'text', mode: 'inline', // 同样设定为行内编辑模式 - enabled: function() {return ($("#commonCurrency_add").val() === '1');}, - options: {placeholder: '请输入USD单价...',maxlength: 10} + { title: '物料的不含税单价(RMB)', + field: 'materialNoRmb', + align: 'center', + editable:{ + type: 'text', // 使用'text'类型,因为我们需自定义验证小数 + mode: 'inline', + enabled: function() { + return ($("#commonCurrency_add").val() === '1'); // 当货币类型为2时启用 + }, + title: '物料的不含税单价(RMB)', + validate: function(value) { + // 验证是否为空 + if (!value) { + return '金额不能为空'; + } + // 尝试转换为浮点数并检查是否成功 + var num = parseFloat(value); + if (isNaN(num)) { + return '请输入有效的数字'; + } + // 检查小数点后是否有超过两位的数字 + var decimalPart = num.toString().split('.')[1]; // 获取小数部分 + if (decimalPart && decimalPart.length > 2) { + return '请输入精确到小数点后两位的数字'; + } + } } }, - {title: '物料的不含税单价(美元)',field: 'materialNoUsd',align: 'center', + { title: '物料的含税单价(RMB)',field: 'materialRmb',align: 'center',}, + {field: 'materialNum',align: 'center',title: '物料的数量', + editable:{ + type : 'text', + mode: 'inline', + title : '物料的数量', + validate : function(value) { + if (!value) { + return '用量不能为空'; + } + if (isNaN(value)) { + return '用量必须为数字'; + } + } + }, + }, + {title: '物料的不含税总价(RMB)',field: 'materialNoRmbSum',align: 'center',}, + { title: '物料的含税总价(RMB)',field: 'materialRmbSum',align: 'center',}, + {title: '物料的不含税单价(美元)', + field: 'materialNoUsd', + align: 'center', editable: { - type: 'text', mode: 'inline', // 同样设定为行内编辑模式 - enabled: function() {return ($("#commonCurrency_add").val() === '2'); }, - options: {placeholder: '请输入USD单价...', maxlength: 10} + type: 'text', // 使用'text'类型,因为我们需自定义验证小数 + mode: 'inline', + enabled: function() { + return ($("#commonCurrency_add").val() === '2'); // 当货币类型为2时启用 + }, + title: '物料的不含税单价(美元)', + validate: function(value) { + // 验证是否为空 + if (!value) { + return '金额不能为空'; + } + // 尝试转换为浮点数并检查是否成功 + var num = parseFloat(value); + if (isNaN(num)) { + return '请输入有效的数字'; + } + // 检查小数点后是否有超过两位的数字 + var decimalPart = num.toString().split('.')[1]; // 获取小数部分 + if (decimalPart && decimalPart.length > 2) { + return '请输入精确到小数点后两位的数字'; + } + } } }, { title: '物料的含税单价(美元)',field: 'materialUsd',align: 'center',}, { title: '物料的含税总价(美元)',field: 'materialUsdSum', align: 'center',}, { title: '物料的不含税总价(美元)',field: 'materialNoUsdSum',align: 'center',}, - { title: '物料的含税单价(RMB)',field: 'materialRmb',align: 'center',}, - { title: '物料的含税总价(RMB)',field: 'materialNoRmbSum', align: 'center',}, - {title: '物料的不含税总价(RMB)',field: 'materialRmbSum',align: 'center',}, { title: '计划交付时间',field: 'deliveryTime',align: 'center',editable: {type: 'date',title: '计划交付时间',} }, {title: '质保天数',align: 'center',field: 'expiryDay', editable: { @@ -384,7 +440,7 @@ {title: '操作', align: 'center', formatter: function (value, row, index) { var actions = []; - actions.push('删除 '); + actions.push('删除 '); return actions.join(''); } } @@ -424,6 +480,24 @@ }, }; $.table.init(options); + + // 初始化表格 + var bootstrapSubTableQuoteChild = $('#bootstrap-sub-table-order').bootstrapTable(options); + // 添加编辑保存事件监听器 + bootstrapSubTableQuoteChild.on('editable-save.bs.table', function(e, field, row, oldValue, $el) { + var currencyVal = $("#commonCurrency_add").val(); + var requiredField = (currencyVal === '1') ? 'materialNoRmb' : 'materialNoUsd'; + + // 检查是否尝试编辑除requiredField外的字段,且requiredField未填写 + if (field !== requiredField && (!row[requiredField] || row[requiredField].trim() === '')) { + $.modal.alertWarning((currencyVal === '1' ? "请首先填写物料的不含税单价(RMB)" : "请首先填写物料的不含税单价(美元)")); + // 可以选择取消这次编辑操作,但Bootstrap Table默认不会提供直接的API来取消编辑后的保存,您可能需要手动恢复数据或采取其他策略。 + } + }); + + // 初始化时也需要根据当前的货币类型设置一次 + $("#commonCurrency_add").trigger('change'); + selectBuniesessMembers(); }); @@ -602,7 +676,7 @@ countTax: $("#taxRate_add").val(), usdTax: $("#usdTax_add").val(), materialSole: "", - materialNum: 1, + materialNum: "", materialNoRmb: 0.00, materialNoUsd: 0.00, materialRmb: 0.00, @@ -626,9 +700,15 @@ return; } if ($("#taxRate_add").val() == null || $("#taxRate_add").val() == '') { - $.modal.alertWarning("请先选择输入国内的税率"); + $.modal.alertWarning("请输入国内的税率"); + return; + } + + if ($("#usdTax_add").val() == null || $("#usdTax_add").val() == '') { + $.modal.alertWarning("请输入美元的汇率"); return; } + var url = ctx + "erp/material/select"; var options = { title: '选择料号', @@ -638,14 +718,13 @@ $.modal.openOptions(options); } /* 删除指定表格行 */ - function removeRow(rowIndex){ - $('.delete-btn').click(function() { - var rowId = $(this).data('id'); // 获取点击按钮的data-id值 - $(this).closest('tr').remove(); - $("#bootstrap-sub-table-editOrder1").bootstrapTable('remove', {index:rowIndex}); - $("#bootstrap-sub-table-editOrder1").bootstrapTable('refresh'); - }); + function removeRow(materialCode){ + $("#bootstrap-sub-table-order").bootstrapTable('remove', { + field: 'materialCode', + values: materialCode + }) } + function getTotalAmount(){ let getData = $("#bootstrap-sub-table-order").bootstrapTable('getData', true); var enterprise = 0;