public with sharing class LexConInvoicedetailsController { //出库单使用 public static Consumable_order__c coc { get; set; } //发票使用 public static Consumable_order__c invoicecode { get; set; } //价格计算结果 public static Decimal sumPrice { get; set; } //出库单ID private static String orderId { get; set; } //发票单ID private static String invoiceId { get; set; } //出库单明细1,画面显示使用 public static List consumableorderdetails1Records { get; set; } //明细数量 public static Integer invoiceOrderRecoedsCount { get { return consumableorderdetails1Records == null ? 0 : consumableorderdetails1Records.size(); } } //页面初始化 @AuraEnabled public static ResponseBodyLWC init(String orderIdLwc, String invoiceIdLwc) { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; orderId = orderIdLwc; invoiceId = invoiceIdLwc; consumableorderdetails1Records = new List(); sumPrice = 0; coc = new Consumable_order__c(); //出库单信息 coc = [SELECT Id, Name, Outbound_Date__c, Order_ForDealerText__c, Dealer_Info__c FROM Consumable_order__c WHERE Id = :orderId]; //发票信息 invoicecode = [ SELECT Id, Name, ShipmentAccount__c, Order_ForCustomerText__c, Order_ForDealerText__c, Dealer_Info__c FROM Consumable_order__c WHERE Id = :invoiceId ]; //发票明细1 Map invoiceorderdet1CountMap = new Map(); List invoiceorderdetails1 = [ SELECT Id, Name, Consumable_order__c, Asset_Model_No__c, Consumable_Product__r.Asset_Model_No__c, Consumable_Count__c, Shipment_Count__c, RrturnPro_count__c, Delivery_List_RMB__c, InvoicedProCost_RMB__c, Invoiced_Procount__c, Invoiced_Count__c, Invoice_Unitprice__c, InvoiceProNot_count__c, Invoice_Cost_RMB__c, Invoice_No__c, Invoice_Unit__c, Invoicedet1_OD_link__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId AND Invoicedet1_OD_link__c = :orderId ]; for (Integer i = 0; i < invoiceorderdetails1.size(); i++) { invoiceorderdet1CountMap.put(invoiceorderdetails1[i].Asset_Model_No__c, invoiceorderdetails1[i]); } //出库单明细1,画面显示使用 List consumableorderdetails1 = [ SELECT Id, Name, Consumable_order__c, Asset_Model_No__c, Consumable_Product__r.Asset_Model_No__c, Consumable_Count__c, Shipment_Count__c, RrturnPro_count__c, Delivery_List_RMB__c, InvoicedProCost_RMB__c, Invoiced_Procount__c, Invoiced_Count__c, Invoice_Unitprice__c, InvoiceProNot_count__c, Invoice_Cost_RMB__c, Invoice_No__c, Consumable_Product__c, Intra_Trade_List_RMB__c, Dealer_Custom_Price__c, Sum_of_money__c, Used_date__c, Send_date__c, Box_Piece__c, Invoice_Unit__c, Consumable_Product__r.Packing_list_manual__c, ProductPacking_list_manual__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :orderId ]; System.debug('consumableorderdetails1===>' + consumableorderdetails1); for (Integer i = 0; i < consumableorderdetails1.size(); i++) { consumableorderdetails1Records.add(new ConsumableorderdetailsInfo(consumableorderdetails1[i])); } for (ConsumableorderdetailsInfo ass : consumableorderdetails1Records) { if (invoiceorderdet1CountMap.containsKey(ass.esd.Asset_Model_No__c)) { ass.check = true; if ( invoiceorderdet1CountMap.get(ass.esd.Asset_Model_No__c).Invoice_Unit__c == null || invoiceorderdet1CountMap.get(ass.esd.Asset_Model_No__c).Invoice_Unit__c == '' ) { ass.esd.Invoice_Unit__c = ass.esd.Box_Piece__c; } else { ass.esd.Invoice_Unit__c = invoiceorderdet1CountMap.get(ass.esd.Asset_Model_No__c).Invoice_Unit__c; } if ( invoiceorderdet1CountMap.get(ass.esd.Asset_Model_No__c).Invoiced_Count__c == null || invoiceorderdet1CountMap.get(ass.esd.Asset_Model_No__c).Invoiced_Count__c == 0 ) { ass.invoiceCount = ass.esd.Invoiced_Count__c; } else { ass.invoiceCount = invoiceorderdet1CountMap.get(ass.esd.Asset_Model_No__c).Invoiced_Count__c; } if (ass.esd.Box_Piece__c == '盒' && ass.esd.Invoice_Unit__c == '个') { ass.esd.Invoice_Unitprice__c = ass.esd.Delivery_List_RMB__c / ass.Packing_list_manual; } else { ass.esd.Invoice_Unitprice__c = ass.esd.Delivery_List_RMB__c; } Decimal invoiceAllprice = 0.00; invoiceAllprice = (ass.invoiceCount * ass.esd.Invoice_Unitprice__c).setScale(2); ass.invoiceAllprice = invoiceAllprice; } else { ass.invoiceCount = ass.esd.InvoiceProNot_count__c; ass.esd.Invoice_Unit__c = ass.esd.Box_Piece__c; ass.esd.Invoice_Unitprice__c = ass.esd.Delivery_List_RMB__c; } } data.put('invoicecode', invoicecode); data.put('coc', coc); data.put('consumableorderdetails1Records', consumableorderdetails1Records); res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } @AuraEnabled public static ResponseBodyLWC save(String consumableorderdetails1RecordsLwc, String invoiceIdLwc, String orderIdLwc) { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; consumableorderdetails1Records = (List) JSON.deserialize( consumableorderdetails1RecordsLwc, List.class ); invoiceId = invoiceIdLwc; orderId = orderIdLwc; System.debug('consumableorderdetails1Records = ' + consumableorderdetails1Records); System.debug('invoiceId = ' + invoiceId); System.debug('orderId = ' + orderId); Savepoint sp = Database.setSavepoint(); //新规发票明细1 List invoiceorderList1 = new List(); //更新发票明细1 List invoiceorderUpList1 = new List(); //删除发票明细1 List invoiceorderDeList1 = new List(); Map invoiceordet1Map = new Map(); List consumableorderList = new List(); List consumableNameList = new List(); try { //更新出库单明细1 for (ConsumableorderdetailsInfo ass : consumableorderdetails1Records) { consumableorderList.add(ass.esd.Asset_Model_No__c); } //发票明细1获取 List invoiceorderdetails1 = [ SELECT Id, Name, Consumable_order__c, Asset_Model_No__c, Consumable_Product__r.Asset_Model_No__c, Consumable_Count__c, Shipment_Count__c, RrturnPro_count__c, Delivery_List_RMB__c, InvoicedProCost_RMB__c, Invoiced_Procount__c, Invoiced_Count__c, Invoice_Unitprice__c, InvoiceProNot_count__c, Invoice_Cost_RMB__c, Invoice_No__c, Invoice_Unit__c, Box_Piece__c, Invoicedet1_OD_link__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId AND Invoicedet1_OD_link__c = :orderId AND Asset_Model_No__c IN :consumableorderList ]; for (Integer i = 0; i < invoiceorderdetails1.size(); i++) { invoiceordet1Map.put( invoiceorderdetails1[i].Invoicedet1_OD_link__c + invoiceorderdetails1[i].Asset_Model_No__c, invoiceorderdetails1[i] ); } List invoicedetails1count = [ SELECT Id, Name, Consumable_order__c, Invoicedet1_OD_link__c, Asset_Model_No__c, Consumable_Product__r.Asset_Model_No__c, Consumable_Count__c, Shipment_Count__c, RrturnPro_count__c, Delivery_List_RMB__c, InvoicedProCost_RMB__c, Invoiced_Procount__c, Invoiced_Count__c, Sum_of_money__c, Invoice_Unitprice__c, InvoiceProNot_count__c, Invoice_Cost_RMB__c, Invoice_Unit__c, Invoice_No__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId ]; Integer invoiceRecordscon = invoicedetails1count.size() + 1; for (ConsumableorderdetailsInfo ass : consumableorderdetails1Records) { if (ass.check == true && ass.invoiceCount > 0) { if (String.isEmpty(String.valueOf(ass.invoiceCount))) { // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请输入发票数量!')); // return null; return new ResponseBodyLWC('Error', 500, '请输入发票数量!', ''); } if (ass.esd.Box_Piece__c == '盒' && ass.esd.Invoice_Unit__c == '个') { if (ass.invoiceCount > (ass.esd.InvoiceProNot_count__c * ass.Packing_list_manual).setScale(0)) { // ass.esd.InvoiceProNot_count__c.addError('发票数量不能超过还没发票数量!'); // return null; return new ResponseBodyLWC('Error', 500, '发票数量不能超过还没发票数量!', ''); } } else { if (ass.invoiceCount > ass.esd.InvoiceProNot_count__c) { // ass.esd.InvoiceProNot_count__c.addError('发票数量不能超过还没发票数量!'); // return null; return new ResponseBodyLWC('Error', 500, '发票数量不能超过还没发票数量!', ''); } } //if(ass.esd.Invoice_Unit__c =='个'){ String invoiceCount = String.valueOf(ass.invoiceCount); if (!Pattern.matches('^\\+{0,1}[1-9]\\d*', invoiceCount)) { // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '发票数量必须是整数')); // return null; return new ResponseBodyLWC('Error', 500, '发票数量必须是整数', ''); } //} if (invoiceordet1Map.containsKey(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c)) { invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c).Shipment_Count__c = ass.invoiceCount; invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c).Invoiced_Count__c = ass.invoiceCount; //invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c).InvoicedProCost_RMB__c = invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c).Delivery_List_RMB__c * ass.invoiceCount; invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c) .Invoice_Unit__c = ass.esd.Invoice_Unit__c; invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c).Box_Piece__c = ass.esd.Box_Piece__c; if (ass.esd.Box_Piece__c == '盒' && ass.esd.Invoice_Unit__c == '个') { invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c).InvoicedProCost_RMB__c = (ass.esd.Delivery_List_RMB__c / ass.Packing_list_manual) * ass.invoiceCount; invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c).Invoice_Unitprice__c = ass.esd.Delivery_List_RMB__c / ass.Packing_list_manual; } else { invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c).InvoicedProCost_RMB__c = ass.esd.Delivery_List_RMB__c * ass.invoiceCount; invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c) .Invoice_Unitprice__c = ass.esd.Delivery_List_RMB__c; } invoiceorderUpList1.add(invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c)); invoiceRecordscon++; } else { String str = string.valueOf(invoiceRecordscon); if (str.length() == 1) { str = '0' + str; } Consumable_Orderdetails__c invoiceInsert1 = new Consumable_Orderdetails__c(); invoiceInsert1.Used_date__c = ass.esd.Used_date__c; invoiceInsert1.Send_date__c = ass.esd.Send_date__c; invoiceInsert1.Name = invoicecode.Name + '-' + ass.esd.Name.substring(ass.esd.Name.length() - 7, ass.esd.Name.length()); invoiceInsert1.Shipment_Count__c = ass.invoiceCount; invoiceInsert1.Consumable_Product__c = ass.esd.Consumable_Product__c; invoiceInsert1.Intra_Trade_List_RMB__c = ass.esd.Intra_Trade_List_RMB__c; invoiceInsert1.Delivery_List_RMB__c = ass.esd.Delivery_List_RMB__c; invoiceInsert1.Dealer_Custom_Price__c = ass.esd.Dealer_Custom_Price__c; invoiceInsert1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice; if (ass.esd.Box_Piece__c == '盒' && ass.esd.Invoice_Unit__c == '个') { invoiceInsert1.Invoice_Unitprice__c = ass.esd.Delivery_List_RMB__c / ass.Packing_list_manual; } else { invoiceInsert1.Invoice_Unitprice__c = ass.esd.Delivery_List_RMB__c; } //invoiceInsert1.Invoice_Unitprice__c = ass.esd.Invoice_Unitprice__c; invoiceInsert1.Invoice_Unit__c = ass.esd.Invoice_Unit__c; invoiceInsert1.Box_Piece__c = ass.esd.Box_Piece__c; if (ass.esd.Invoiced_Procount__c == null) ass.esd.Invoiced_Procount__c = 0; invoiceInsert1.Invoiced_Count__c = ass.invoiceCount; if (ass.esd.InvoicedProCost_RMB__c == null) ass.esd.InvoicedProCost_RMB__c = 0; invoiceInsert1.InvoicedProCost_RMB__c = ass.invoiceCount * invoiceInsert1.Invoice_Unitprice__c; invoiceInsert1.Consumable_order__c = invoiceId; invoiceInsert1.Invoicedet1_OD_link__c = orderId; invoiceRecordscon++; invoiceorderList1.add(invoiceInsert1); } } else { if (invoiceordet1Map.containsKey(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c)) { invoiceorderDeList1.add(invoiceordet1Map.get(ass.esd.Consumable_order__c + ass.esd.Asset_Model_No__c)); } } } if (invoiceorderList1.size() > 0) { insert invoiceorderList1; } if (invoiceorderUpList1.size() > 0) { update invoiceorderUpList1; } if (invoiceorderDeList1.size() > 0) { delete invoiceorderDeList1; } } catch (Exception e) { ApexPages.addmessages(e); // Database.rollback(sp); // return null; return new ResponseBodyLWC('Error', 500, e.getMessage() + ' ' + e.getLineNumber(), ''); } res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } // Data Bean @TestVisible class ConsumableorderdetailsInfo { @AuraEnabled public Boolean check { get; set; } @AuraEnabled public Boolean oldCheck { get; set; } @AuraEnabled public Consumable_Orderdetails__c esd { get; set; } @AuraEnabled public Product2__c Prod { get; set; } @AuraEnabled public Decimal invoiceCount { get; set; } @AuraEnabled public Decimal invoiceAllprice { get; set; } @AuraEnabled public Decimal Packing_list_manual { get; set; } public List Invoice_UnitOpts { get; set; } @AuraEnabled public Map Invoice_UnitOptsMap { get; set; } // 消耗品产品明细 public ConsumableorderdetailsInfo(Consumable_Orderdetails__c e) { check = false; oldCheck = false; esd = e; Prod = e.Consumable_Product__r; invoiceAllprice = 0; Packing_list_manual = e.Consumable_Product__r.Packing_list_manual__c; if (!Test.isRunningTest()) { Invoice_UnitOpts = new List(); Invoice_UnitOpts.add(new SelectOption('盒', '盒')); Invoice_UnitOpts.add(new SelectOption('个', '个')); } Invoice_UnitOptsMap = new Map(); Invoice_UnitOptsMap.put('盒', '盒'); Invoice_UnitOptsMap.put('个', '个'); } } }