public without sharing class LexConInvoiceViewController { public static String agencyProType { get; set; } public static Consumable_order__c coc { get; set; } public static Consumable_order__c outbound { get; set; } public static String invoiceId { get; set; } public static String orderRemind { get; set; } public static String deliveryId { get; set; } public static String reopen { get; set; } public static Decimal sumPrice { get; set; } public static Boolean isChange { get; set; } public static String accountid { get; set; } public static String userId { get; set; } public static String errorMsg { get; set; } public static Boolean getdone() { return (invoiceOrderdetail1Recoeds.size() > 0); } public static Boolean getExistOutbound() { return (coc.Outbound_order__c != null); } public static String getInvoiceName() { return (coc.Name); } public static List conoList { get; set; } public static String shipmentAccount { get { return (coc.ShipmentAccount__c); } } public static String statusEdit = ''; public static Boolean editAble { get; set; } public static List invoiceOrderRecoeds { get; set; } public static List invoiceOrderdetail1Recoeds { get; set; } public static List invoiceOrderRecoedschange { get; set; } public static List attachmentRecoeds { get; set; } public static List invoiceOrderList { get; set; } public static List invoiceOrderSelectedList { get; set; } public static Map ordermx1defaultMap { get; set; } public static Map outorderMoneytMap { get; set; } public static Map outordercountMap { get; set; } public static List outOrderStringList { get; set; } public static List provinceOpts { get; set; } public static Map provinceOptsMap { get; set; } public static String SecondDealer { get; set; } public static String HospitalInfo { get; set; } public static String HospitalName { get; set; } public static Integer invoiceOrderRecoedsCount { get { return invoiceOrderRecoeds == null ? 0 : invoiceOrderRecoeds.size(); } } public static list Dealerelationship { get; set; } public static String[] orderby = new List{ 'Outbound_Date__c', 'Name', 'ShipmentAccount__c' }; public static String sortKey { get; set; } public static String preSortKey { get; set; } public static Boolean sortOrderAsc { get; set; } public static String[] sortOrder { get; set; } public static String userWorkLocation { get; set; } //页面初始化 @AuraEnabled public static ResponseBodyLWC init(String invoiceId, String statusEdit, String deliveryId) { ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; provinceOpts = new List(); provinceOptsMap = new Map(); invoiceOrderRecoeds = new List(); attachmentRecoeds = new List(); invoiceOrderdetail1Recoeds = new List(); invoiceOrderRecoedschange = new List(); orderRemind = ''; isChange = false; conoList = new List(); outorderMoneytMap = new Map(); outOrderStringList = new List(); outordercountMap = new Map(); sumPrice = 0; // this.sortKey = '1'; // this.preSortKey = '1'; // this.sortOrderAsc = false; // this.sortOrder = new List(2); // this.sortOrder = new List{ ' ', ' ', ' ', ' ' }; invoiceId = invoiceId; statusEdit = statusEdit; deliveryId = deliveryId; if (invoiceId != null && invoiceId != '' && (statusEdit == '' || statusEdit == null)) { editAble = false; } else if ((invoiceId == null || invoiceId == '') && (statusEdit == '' || statusEdit == null)) { editAble = true; } else if (invoiceId != null && invoiceId != '' && statusEdit != '' && statusEdit != null) { editAble = true; } userId = UserInfo.getUserId(); List Useracc = new List(); Useracc = [SELECT accountid, Work_Location__c, UserPro_Type__c FROM user WHERE id = :userId]; accountid = Useracc[0].accountid; userWorkLocation = Useracc[0].Work_Location__c; agencyProType = Useracc[0].UserPro_Type__c; if (String.isBlank(Useracc[0].UserPro_Type__c)) { agencyProType = 'ET'; } coc = new Consumable_order__c(); Dealerelationship = [ SELECT Dealer_subordinate__c, Dealer_subordinate__r.Name FROM Dealer_elationship__c WHERE Dealer_principal__c = :accountid ]; List AgencyHospitalLink = new List(); AgencyHospitalLink = [ SELECT Id, Name, Hospital__c, Hospital__r.Id, Hospital__r.Name, Agency__c FROM Agency_Hospital_Link__c WHERE Agency__c = :accountId ]; // 新規 if (invoiceId == null || invoiceId == '') { if (deliveryId == null || deliveryId == '') { String msoql = makeSoql(); invoiceOrderList = Database.query(msoql); for (Integer i = 0; i < invoiceOrderList.size(); i++) { invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderList[i])); } } else { if (statusEdit == '' || statusEdit == null) { EditAble = false; } else if (statusEdit != '' && statusEdit != null) { EditAble = true; } coc = [ SELECT Id, Name, Invoice_status__c, Invoice_Date__c, Order_ForDealerText__c, Dealer_Info__c, Order_ForDealer__c, Order_ForDealer__r.Name, Order_ForHospital__c, Order_ForHospital__r.Name, Order_date__c, Billed_Status__c, ShipmentAccount__c, Order_Dealer_Info__c, SummonsForDirction__c, Order_ForCustomerText__c, Invoice_Note__c, Invoice_attachment__c, Invoicedet_attachment__c, Outbound_order__c FROM Consumable_order__c WHERE Id = :deliveryId ]; coc.Name = ''; if (coc.Order_ForDealer__c != null) { SecondDealer = coc.Order_ForDealer__c; } if (coc.Order_ForHospital__c != null) { HospitalInfo = coc.Order_ForHospital__c; HospitalName = coc.Order_ForHospital__r.Name; } //发票关联出库单取得(出库单) invoiceOrderSelectedList = [ SELECT Id, Order_ForDealer__r.Name, Order_ForHospital__r.Name, Order_ForDealerText__c, Name, Outbound_Date__c, ShipmentAccount__c, Order_Dealer_Info__c, SummonsForDirction__c, Shipment_total_amount__c, RrturnPro_total_amount__c, Total_Invoiced_Procount__c, InvoiceNotPro_total_amount__c, InvoiceNotPro_money__c, Invoice_total_amount__c, Billed_Status__c FROM Consumable_order__c WHERE Id = :deliveryId ORDER BY Name ]; for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) { invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i])); } } } else { coc = [ SELECT Id, Name, Invoice_status__c, Invoice_Date__c, Order_ForDealerText__c, Dealer_Info__c, Order_ForDealer__c, Order_ForDealer__r.Name, Order_ForHospital__c, Order_ForHospital__r.Name, Order_date__c, Billed_Status__c, ShipmentAccount__c, Order_Dealer_Info__c, SummonsForDirction__c, Order_ForCustomerText__c, Invoice_Note__c, Invoice_attachment__c, Invoicedet_attachment__c, Outbound_order__c FROM Consumable_order__c WHERE Id = :invoiceId AND Order_type__c = '发票' ]; if (coc.Order_ForDealer__c != null) { SecondDealer = coc.Order_ForDealer__c; } if (coc.Order_ForHospital__c != null) { HospitalInfo = coc.Order_ForHospital__c; HospitalName = coc.Order_ForHospital__r.Name; } //到链接表中查找关联出库单 List outOrderList = [ SELECT Outboundorder_Code_link__c FROM Consumable_order_LinkTable__c WHERE Invoice_Code_link__c = :invoiceId ]; for (Integer i = 0; i < outOrderList.size(); i++) { outOrderStringList.add(outOrderList[i].Outboundorder_Code_link__c); } //取得出库单信息 invoiceOrderSelectedList = [ SELECT Id, Order_ForDealer__r.Name, Order_ForHospital__r.Name, Order_ForDealerText__c, Name, Outbound_Date__c, ShipmentAccount__c, Shipment_total_amount__c, RrturnPro_total_amount__c, Total_Invoiced_Procount__c, InvoiceNotPro_total_amount__c, InvoiceNotPro_money__c, Invoice_total_amount__c, Billed_Status__c FROM Consumable_order__c WHERE Id IN :outOrderStringList AND Order_Owner_WorkLocal__c = :userWorkLocation ORDER BY Name ]; for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) { outorderMoneytMap.put(invoiceOrderSelectedList[i].id, 0); invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i])); } if (String.isNotBlank(deliveryId)) { //发票关联出库单取得(出库单) isChange = true; invoiceOrderSelectedList = [ SELECT Id, Order_ForDealer__r.Name, Order_ForHospital__r.Name, Order_ForDealerText__c, Name, Outbound_Date__c, ShipmentAccount__c, Shipment_total_amount__c, RrturnPro_total_amount__c, Total_Invoiced_Procount__c, InvoiceNotPro_total_amount__c, InvoiceNotPro_money__c, Invoice_total_amount__c, Billed_Status__c FROM Consumable_order__c WHERE Id = :deliveryId AND Order_Owner_WorkLocal__c = :userWorkLocation ORDER BY Name ]; for (Integer i = 0; i < invoiceOrderSelectedList.size(); i++) { if (!outorderMoneytMap.containsKey(invoiceOrderSelectedList[i].Id)) { invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i])); invoiceOrderRecoedschange.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i])); } } } //发票明细一览 List countDel = [ SELECT Id, Consumable_ZS_order__c, Name, Consumable_order__c, Invoicedet1_OD_link__c, Invoicedet1_OD_link__r.Name, Consumable_order__r.Name, Product_OutDate__c, Asset_Model_No__c, Invoice_Unitprice__c, Delivery_List_RMB__c, Invoiced_Procount__c, Invoiced_Count__c, InvoicedProCost_RMB__c, Box_Piece__c, Invoice_Unit__c, ProductPacking_list_manual__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId ORDER BY Invoicedet1_OD_link__c ]; if (countDel.size() > 0) { for (Integer i = 0; i < countDel.size(); i++) { outordercountMap.put(countDel[i].Invoicedet1_OD_link__c + countDel[i].Asset_Model_No__c, countDel[i]); if (outorderMoneytMap.containsKey(countDel[i].Invoicedet1_OD_link__c)) { outorderMoneytMap.put( countDel[i].Invoicedet1_OD_link__c, outorderMoneytMap.get(countDel[i].Invoicedet1_OD_link__c) + countDel[i].InvoicedProCost_RMB__c ); } invoiceOrderdetail1Recoeds.add(new InvoiceOrderInfo(countDel[i])); } } for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { if (outorderMoneytMap.containsKey(ass.esd.id)) { ass.needInvoiceCount = outorderMoneytMap.get(ass.esd.id); } ass.check = true; } } if (SecondDealer == null || SecondDealer == '') { provinceOpts.add(new SelectOption('', '-无-')); provinceOptsMap.put('', '-无-'); for (Integer i = 0; i < Dealerelationship.size(); i++) { provinceOpts.add( new SelectOption(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name) ); provinceOptsMap.put(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name); } } else { provinceOpts.add(new SelectOption('', '-无-')); provinceOptsMap.put('', '-无-'); for (Integer i = 0; i < Dealerelationship.size(); i++) { if (Dealerelationship[i].Dealer_subordinate__r.Name == SecondDealer) { provinceOpts.add(new SelectOption(Dealerelationship[i].Dealer_subordinate__c, SecondDealer)); provinceOptsMap.put(Dealerelationship[i].Dealer_subordinate__c, SecondDealer); } } for (Integer i = 0; i < Dealerelationship.size(); i++) { if (Dealerelationship[i].Dealer_subordinate__r.Name != SecondDealer) { provinceOpts.add( new SelectOption(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name) ); provinceOptsMap.put(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name); } } } Map consumableaccessoriesMap = new Map(); Map invorceOrderIdMap = new Map(); List consumableaccessories = [ SELECT Id, Name, Attachment_ID__c, Accessories_type__c FROM Consumable_accessories_invoice__c WHERE Invoice_code__c = :invoiceId ]; System.debug('consumableaccessories = ' + consumableaccessories); if (consumableaccessories.size() > 0) { for (Integer i = 0; i < consumableaccessories.size(); i++) { consumableaccessoriesMap.put(consumableaccessories[i].Attachment_ID__c, consumableaccessories[i].Accessories_type__c); invorceOrderIdMap.put(consumableaccessories[i].Attachment_ID__c, consumableaccessories[i].Id); } } //List attachmentinfo = [SELECT Id, Name, OwnerId,Owner.Name, CreatedDate FROM Attachment WHERE parentid = :invoiceId]; // if (attachmentinfo.size() > 0) { // for (Integer i = 0; i < attachmentinfo.size(); i++) { // attachmentRecoeds.add(new InvoiceOrderInfo(attachmentinfo[i])); // } // } List cvInfo = [SELECT Id, Title, OwnerId,Owner.Name, CreatedDate,ContentDocumentId FROM ContentVersion WHERE FirstPublishLocationId = :invoiceId]; if (cvInfo.size() > 0) { for (Integer i = 0; i < cvInfo.size(); i++) { attachmentRecoeds.add(new InvoiceOrderInfo(cvInfo[i])); } } System.debug('attachmentRecoeds = ' + attachmentRecoeds); System.debug('consumableaccessoriesMap = ' + consumableaccessoriesMap); for (InvoiceOrderInfo ass : attachmentRecoeds) { if (consumableaccessoriesMap.containsKey(ass.cvInfo.Id)) { ass.mailSelectOptsin = consumableaccessoriesMap.get(ass.cvInfo.Id); ass.invoiceOrderId = invorceOrderIdMap.get(ass.cvInfo.Id); } } data.put('EditAble', EditAble); data.put('isChange', isChange); data.put('coc', coc); data.put('ExistOutbound', getExistOutbound()); data.put('invoiceOrderRecoeds', invoiceOrderRecoeds); data.put('provinceOptsMap', provinceOptsMap); data.put('HospitalName', HospitalName); data.put('HospitalInfo', HospitalInfo); data.put('agencyProType', agencyProType); data.put('userWorkLocation', userWorkLocation); data.put('done', getdone()); data.put('invoiceOrderdetail1Recoeds', invoiceOrderdetail1Recoeds); data.put('accountid', accountid); data.put('invoiceOrderRecoedschange',invoiceOrderRecoedschange); data.put('attachmentRecoeds',attachmentRecoeds); data.put('outOrderStringList',outOrderStringList); data.put('outordercountMap',outordercountMap); res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } //保存 @AuraEnabled public static ResponseBodyLWC save( Consumable_order__c cocLwc, String HospitalNameLwc, String HospitalInfoLwc, String SecondDealerLwc, String invoiceOrderRecoedsLwc, String deliveryIdLwc, String invoiceIdLwc, String accountidLwc, String agencyProTypeLwc, String reopenLwc, String invoiceOrderRecoedschangeLwc ) { System.debug('enter LexConInvoiceViewController.save success'); ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; coc = cocLwc; HospitalName = HospitalNameLwc; HospitalInfo = HospitalInfoLwc; System.debug('HospitalInfo = ' + HospitalInfo); SecondDealer = SecondDealerLwc; errorMsg = ''; deliveryId = deliveryIdLwc; invoiceOrderRecoeds = (List)JSON.deserialize(invoiceOrderRecoedsLwc, List.class); invoiceId = invoiceIdLwc; accountid = accountidLwc; agencyProType = agencyProTypeLwc; reopen = reopenLwc; invoiceOrderRecoedschange = (List)JSON.deserialize(invoiceOrderRecoedschangeLwc, List.class); List chukudanID = new List(); if (coc.Name == '' || coc.Name == null) { // coc.Name.addError('请录入发票号'); // return null; return new ResponseBodyLWC('Error', 500, '请录入发票号', ''); } if (coc.Invoice_Date__c == null) { // coc.Invoice_Date__c.addError('请录入发票日期'); // return null; return new ResponseBodyLWC('Error', 500, '请录入发票日期', ''); } if (String.isBlank(HospitalInfo) && String.isBlank(SecondDealer)) { // coc.addError('必须输入客户名或者二级经销商'); // return null; return new ResponseBodyLWC('Error', 500, '必须输入客户名或者二级经销商', ''); } if (HospitalInfo != null && HospitalInfo != '' && String.isNotEmpty(SecondDealer)) { //coc.addError('请输入客户名、二级经销商只可输入一个'); errorMsg += '请输入客户名、二级经销商只可输入一个'; } if (HospitalInfo != null && HospitalInfo != '') { if (coc.Order_ForCustomerText__c == null) { // coc.Order_ForCustomerText__c.addError('请输入科室'); // return null; return new ResponseBodyLWC('Error', 500, '请输入科室', ''); } } else { if (coc.Order_ForCustomerText__c != null) { // coc.Order_ForCustomerText__c.addError('不需要输入科室'); // return null; return new ResponseBodyLWC('Error', 500, '不需要输入科室', ''); } } String shipmentAccountString = ''; if (HospitalInfo != null) { shipmentAccountString = HospitalInfo; } else if (String.isNotEmpty(SecondDealer)) { shipmentAccountString = SecondDealer; } else { shipmentAccountString = coc.Order_ForDealerText__c == null ? '' : coc.Order_ForDealerText__c; } Integer x = 0; List invoiceOrderAccountList = new List(); for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { if (String.isBlank(deliveryId)) { if (ass.check == true) { x++; System.debug(shipmentAccountString); if (HospitalInfo != null && HospitalInfo != '') { if (ass.esd.Order_ForHospital__c != shipmentAccountString) { invoiceOrderAccountList.add(ass.esd.Name); } } if (String.isNotEmpty(SecondDealer)) { if ( ass.esd.Order_ForDealer__c != shipmentAccountString && ass.esd.Order_ForDealerText__c != shipmentAccountString ) { invoiceOrderAccountList.add(ass.esd.Name); } } if (coc.Order_ForDealerText__c != null && (HospitalInfo == null || HospitalInfo == '')) { if ( (ass.esd.Order_ForDealerText__c != null || ass.esd.Order_ForDealerText__c != '') && ass.esd.ShipmentAccount__c != shipmentAccountString ) { invoiceOrderAccountList.add(ass.esd.Name); } } } } else { if (HospitalInfo != null && HospitalInfo != '') { System.debug('++++++++++++' + ass.esd.Order_ForHospital__c + ' ' + shipmentAccountString); if (ass.esd.Order_ForHospital__c != shipmentAccountString) { System.debug('HospitalInfo != null ass.esd.Order_ForHospital__c != shipmentAccountString'); invoiceOrderAccountList.add(ass.esd.Name); } } //if (String.isNotEmpty(SecondDealer)) { if (String.isNotEmpty(SecondDealer)) { if (ass.esd.Order_ForDealer__c != shipmentAccountString) { System.debug('String.isNotEmpty(SecondDealer) ass.esd.Order_ForHospital__c != shipmentAccountString'); invoiceOrderAccountList.add(ass.esd.Name); } } if (coc.Order_ForDealerText__c != null && (HospitalInfo == null || HospitalInfo == '')) { if ( (ass.esd.Order_ForDealerText__c != null || ass.esd.Order_ForDealerText__c != '') && ass.esd.ShipmentAccount__c != shipmentAccountString ) { System.debug('HospitalInfo == null && ass.esd.Order_ForDealerText__c != null ass.esd.ShipmentAccount__c != shipmentAccountString'); invoiceOrderAccountList.add(ass.esd.Name); } } } } // invoiceOrderAccountList.add('12345'); if (invoiceOrderAccountList.size() > 0) { orderRemind = invoiceOrderAccountList + '出库单客户名与发票客户名不一致!'; // coc.addError(invoiceOrderAccountList + '出库单客户名与发票客户名不一致!'); // return null; return new ResponseBodyLWC('Error', 500, invoiceOrderAccountList + '出库单客户名与发票客户名不一致!', ''); } else { orderRemind = ''; } if (String.isBlank(deliveryId)) { if (x < 1) { // coc.addError('请选择需要开发票的出库单!'); // return null; return new ResponseBodyLWC('Error', 500, '请选择需要开发票的出库单!', ''); } } Consumable_order__c invoiceHead = new Consumable_order__c(); List outOrderIdList = new List(); List invoiceLinkList = new List(); Map insertDetMap = new Map(); Map deleteDetMap = new Map(); //新建发票时 Savepoint sp = Database.setSavepoint(); try { if (String.isBlank(invoiceId)) { invoiceHead.Name = coc.Name; if (coc.Invoice_status__c == null || String.isBlank(coc.Invoice_status__c)) coc.Invoice_status__c = '草案中'; invoiceHead.Order_type__c = '发票'; invoiceHead.Invoice_Date__c = coc.Invoice_Date__c; invoiceHead.Dealer_Info__c = accountid; invoiceHead.Invoice_Note__c = coc.Invoice_Note__c; invoiceHead.Invoice_status__c = '草案中'; invoiceHead.Order_ProType__c = agencyProType; invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c; //if (deliveryId != null) { if (String.isNotBlank(deliveryId)) { invoiceHead.Outbound_order__c = deliveryId; } invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice; // if (SecondDealer == null) { if (String.isBlank(SecondDealer)) { if (HospitalInfo != null && HospitalInfo != '') { invoiceHead.Order_ForHospital__c = HospitalInfo; } } else { invoiceHead.Order_ForDealer__c = SecondDealer; } invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c; insert invoiceHead; invoiceId = invoiceHead.Id; List cocinfo = new List(); cocinfo = [ SELECT Id, Name, Invoice_status__c, Invoice_Date__c, Order_ForDealerText__c, Dealer_Info__c, Order_ForDealer__c, Order_ForDealer__r.Name, Order_ForHospital__c, Order_date__c, Billed_Status__c, ShipmentAccount__c, Order_Dealer_Info__c, SummonsForDirction__c, Order_ForCustomerText__c, Invoice_Note__c, Invoice_attachment__c, Invoicedet_attachment__c, Outbound_order__c FROM Consumable_order__c WHERE Id = :invoiceId ]; if (cocinfo.size() > 0) { invoiceHead = cocinfo[0]; } if (!String.isBlank(deliveryId)) { for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { chukudanID.add(ass.esd.Id); insertDetMap.put(ass.esd.Id, invoiceHead.Id); } } else { for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { if (!String.isBlank(deliveryId)) { chukudanID.add(ass.esd.Id); insertDetMap.put(ass.esd.Id, invoiceHead.Id); } else { if (ass.check == true) { chukudanID.add(ass.esd.Id); insertDetMap.put(ass.esd.Id, invoiceHead.Id); } else { //deleteDetMap.put(ass.esd.Id,invoiceHead.Id); } } } } //新建发票明细1 if (chukudanID.size() > 0) { newinvoicedetails1(chukudanID); } //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'deleteDetMap +++++' + deleteDetMap.size())); //return null; if (insertDetMap.size() > 0) { for (String field : insertDetMap.keySet()) { List existLinkinfo = [ SELECT Id FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c = :field AND Invoice_Code_link__c = :insertDetMap.get(field) ]; if (existLinkinfo.size() < 1) { Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c(); invoiceLink.Name = field + insertDetMap.get(field); invoiceLink.Outboundorder_Code_link__c = field; invoiceLink.Invoice_Code_link__c = insertDetMap.get(field); invoiceLinkList.add(invoiceLink); } } upsert invoiceLinkList; } } else if (String.isNotBlank(reopen) && reopen.equals('isreopen') && String.isNotBlank(invoiceId)) { System.debug('进入reopen'); invoiceHead.Name = coc.Name; invoiceHead.Order_type__c = '发票'; invoiceHead.Invoice_Date__c = coc.Invoice_Date__c; invoiceHead.Dealer_Info__c = accountid; invoiceHead.Invoice_Note__c = coc.Invoice_Note__c; invoiceHead.Invoice_status__c = '草案中'; invoiceHead.Order_ProType__c = agencyProType; invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c; //if (deliveryId != null) { if (String.isNotBlank(deliveryId)) { invoiceHead.Outbound_order__c = deliveryId; } invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice; //if (SecondDealer == null) { if (String.isBlank(SecondDealer)) { if (HospitalInfo != null && HospitalInfo != '') { invoiceHead.Order_ForHospital__c = HospitalInfo; } } else { invoiceHead.Order_ForDealer__c = SecondDealer; } invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c; insert invoiceHead; System.debug('invoiceHead = ' + invoiceHead); List updateChukudanId = new List(); //获取原发票相关联的链接表信息 List tLinkList = [ SELECT Outboundorder_Code_link__c FROM Consumable_order_LinkTable__c WHERE Invoice_Code_link__c = :invoiceId ]; for (Consumable_order_LinkTable__c colc : tLinkList) { colc.Invoice_Code_link__c = invoiceHead.Id; updateChukudanId.add(colc.Outboundorder_Code_link__c); } System.debug('tLinkList = ' + tLinkList); update tLinkList; //更新发票明细信息 //获取出库单,设置关联关系 //获取出库单明细信息,因为出库单信息和出库单明细信息是关联的,所有只需要回滚出库单明细信息即可 Map tempCocMap = new Map(); List tempCountList = [ SELECT Id, Consumable_order__c, Asset_Model_No__c, InvoicedProCost_RMB__c, Invoicedet1_OD_link__c, InvoicedProduct_RMB__c, Invoiced_Procount__c, Invoiced_BoxCount__c, Invoice_Unit__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId ]; for (Consumable_Orderdetails__c cocTemp : tempCountList) { cocTemp.Consumable_order__c = invoiceHead.Id; tempCocMap.put(cocTemp.Invoicedet1_OD_link__c + cocTemp.Asset_Model_No__c, cocTemp); } System.debug('tempCountList = ' + tempCountList); update tempCountList; List updateFromList = [ SELECT Id, Consumable_order__c, RrturnPro_count__c, Delivery_List_RMB__c, InvoicedProCost_RMB__c, Invoiced_Procount__c, Invoice_Unitprice__c, Box_Piece__c, Invoice_Unit__c, Consumable_order__r.Invoice_total_amount__c, ProductPacking_list_manual__c, InvoicedProduct_RMB__c, Invoiced_BoxCount__c, Shipment_amount__c, Asset_Model_No__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c IN :updateChukudanId ]; for (Consumable_Orderdetails__c corderc : updateFromList) { String tempStr = corderc.Consumable_order__c + corderc.Asset_Model_No__c; if (tempCocMap.get(tempStr) != null) { //设置已发票金额 出库单的已发票金额 - 发票的发票金额 corderc.InvoicedProCost_RMB__c = corderc.InvoicedProCost_RMB__c - tempCocMap.get(tempStr).InvoicedProduct_RMB__c; //设置已发票数量 出库单的已发票数量 - 发票的发票数量(盒) corderc.Invoiced_Procount__c = corderc.Invoiced_Procount__c - tempCocMap.get(tempStr).Invoiced_BoxCount__c; //设置发票单价 if (corderc.Box_Piece__c == '盒' && corderc.Invoice_Unit__c == '个') { corderc.Invoice_Unitprice__c = corderc.Delivery_List_RMB__c / corderc.ProductPacking_list_manual__c; } else { corderc.Invoice_Unitprice__c = corderc.Delivery_List_RMB__c; } } } Consumable_order__c tempcoc = new Consumable_order__c(); tempcoc.Id = invoiceId; System.debug('tempcoc = ' + tempcoc); delete tempcoc; invoiceId = invoiceHead.Id; System.debug('updateFromList = ' + updateFromList); update updateFromList; //-------------------------------------------------------------------------- for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { if (ass.check == true) { insertDetMap.put(ass.esd.Id, invoiceHead.Id); } else { outOrderIdList.add(ass.esd.Id); deleteDetMap.put(ass.esd.Id, invoiceHead.Id); } } if (outOrderIdList.size() > 0) { getdefaultMapinfo(outOrderIdList); } //被选中的出库单集合 if (insertDetMap.size() > 0) { List existLinkinfo = [ SELECT Id, Invoice_Code_link__c, Outboundorder_Code_link__c FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c IN :insertDetMap.keySet() AND Invoice_Code_link__c = :invoiceHead.Id ]; //存在没有与发票建立关联关系的出库单 List templist2 = new List(); for (Consumable_order_LinkTable__c colc : existLinkinfo) { templist2.add(colc.Outboundorder_Code_link__c); } //获取该出库单 for (String field : insertDetMap.keySet()) { if (!templist2.contains(field)) { //该出库单不存在与链接表中,新建链接 chukudanID.add(field); Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c(); invoiceLink.Name = field + insertDetMap.get(field); invoiceLink.Outboundorder_Code_link__c = field; invoiceLink.Invoice_Code_link__c = insertDetMap.get(field); invoiceLinkList.add(invoiceLink); } } System.debug('invoiceLinkList = ' + invoiceLinkList); upsert invoiceLinkList; } //删除出库单链接表 if (deleteDetMap.size() > 0) { List invoiceLinkdetList = new List(); deleteOutboundorder(deleteDetMap, invoiceHead.Id); List existLinkinfo = [ SELECT Id, Outboundorder_Code_link__c, Invoice_Code_link__c FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c IN :deleteDetMap.keySet() AND Invoice_Code_link__c = :invoiceHead.Id ]; for (Consumable_order_LinkTable__c colctemp : existLinkinfo) { if (deleteDetMap.get(colctemp.Outboundorder_Code_link__c) == colctemp.Invoice_Code_link__c) { //存在与该发票关联的出库单 invoiceLinkdetList.add(colctemp); } } System.debug('invoiceLinkdetList = ' + invoiceLinkdetList); delete invoiceLinkdetList; } //新建发票明细1 if (chukudanID.size() > 0) { newinvoicedetails1(chukudanID); } } else { //CHAN-BSS5SQ update by rentongxiao 2020-09-04 end //编辑后保存 List cocinfo = new List(); cocinfo = [ SELECT Id, Name, Invoice_status__c, Invoice_Date__c, Order_ForDealerText__c, Dealer_Info__c, Order_ForDealer__c, Order_ForDealer__r.Name, Order_ForHospital__c, Order_date__c, Billed_Status__c, ShipmentAccount__c, Order_Dealer_Info__c, SummonsForDirction__c, Order_ForCustomerText__c, Invoice_Note__c, Invoice_attachment__c, Invoicedet_attachment__c, Outbound_order__c FROM Consumable_order__c WHERE Id = :invoiceId ]; if (cocinfo.size() > 0) { invoiceHead = cocinfo[0]; } if (String.isNotBlank(deliveryId)) { for (InvoiceOrderInfo ass : invoiceOrderRecoedschange) { insertDetMap.put(ass.esd.Id, invoiceHead.Id); } //换货单产品数量 Map needchangeOrderProcountMap = new Map(); Map returnProcountMap = new Map(); Map changeOrderProcountMap = new Map(); List detaliFromList = [ SELECT Id, Name, Consumable_order__c, Asset_Model_No__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_Unit__c, Box_Piece__c, Invoice_Cost_RMB__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :deliveryId ]; for (Consumable_Orderdetails__c changeOD : detaliFromList) { needchangeOrderProcountMap.put(changeOD.Asset_Model_No__c, changeOD.Shipment_Count__c); } //发票返品信息 List returnCountList = [ SELECT Id, Name, Consumable_order__c, Asset_Model_No__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_Unit__c, Box_Piece__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId ]; for (Consumable_Orderdetails__c changeOD : returnCountList) { if (changeOD.RrturnPro_count__c > 0) { if (returnProcountMap.containsKey(changeOD.Asset_Model_No__c)) { returnProcountMap.put( changeOD.Asset_Model_No__c, returnProcountMap.get(changeOD.Asset_Model_No__c) + changeOD.RrturnPro_count__c ); } else { returnProcountMap.put(changeOD.Asset_Model_No__c, changeOD.RrturnPro_count__c); } } } //已换货单出库数量信息 List returnCount1List = [ SELECT Id, Name, Consumable_order__c, Asset_Model_No__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_Unit__c, Box_Piece__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c IN ( SELECT Outboundorder_Code_link__c FROM Consumable_order_LinkTable__c WHERE Invoice_Code_link__c = :invoiceId ) AND Consumable_order__r.Onchange_order__c = TRUE AND Consumable_order__c != :deliveryId ]; for (Consumable_Orderdetails__c changeOD : returnCount1List) { changeOrderProcountMap.put(changeOD.Asset_Model_No__c, changeOD.Shipment_Count__c); } outOrderchange(insertDetMap); } else { invoiceHead.Name = coc.Name; invoiceHead.Invoice_status__c = coc.Invoice_status__c; invoiceHead.Invoice_Date__c = coc.Invoice_Date__c; invoiceHead.Dealer_Info__c = accountid; invoiceHead.Invoice_Note__c = coc.Invoice_Note__c; invoiceHead.Invoice_status__c = '草案中'; invoiceHead.Order_ProType__c = agencyProType; invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c; //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'HospitalName +++++' + HospitalName)); //return null; if (HospitalName != null && HospitalName != '') { if (HospitalInfo != null && HospitalInfo != '') { invoiceHead.Order_ForHospital__c = HospitalInfo; } } else { invoiceHead.Order_ForHospital__c = null; } invoiceHead.Order_ForDealer__c = SecondDealer == '' ? null : SecondDealer; invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c; update invoiceHead; for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { if (ass.check == true) { insertDetMap.put(ass.esd.Id, invoiceHead.Id); } else { outOrderIdList.add(ass.esd.Id); deleteDetMap.put(ass.esd.Id, invoiceHead.Id); } } if (outOrderIdList.size() > 0) { getdefaultMapinfo(outOrderIdList); } //CHAN-BSS5SQ update by rentongxiao 2020-09-08 start //被选中的出库单集合 if (insertDetMap.size() > 0) { List existLinkinfo = [ SELECT Id, Invoice_Code_link__c, Outboundorder_Code_link__c FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c IN :insertDetMap.keySet() AND Invoice_Code_link__c = :invoiceHead.Id ]; //存在没有与发票建立关联关系的出库单 List templist2 = new List(); for (Consumable_order_LinkTable__c colc : existLinkinfo) { templist2.add(colc.Outboundorder_Code_link__c); } //获取该出库单 for (String field : insertDetMap.keySet()) { if (!templist2.contains(field)) { //该出库单不存在与链接表中,新建链接 chukudanID.add(field); Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c(); invoiceLink.Name = field + insertDetMap.get(field); invoiceLink.Outboundorder_Code_link__c = field; invoiceLink.Invoice_Code_link__c = insertDetMap.get(field); invoiceLinkList.add(invoiceLink); } } upsert invoiceLinkList; } if (deleteDetMap.size() > 0) { List invoiceLinkdetList = new List(); deleteOutboundorder(deleteDetMap, invoiceHead.Id); List existLinkinfo = [ SELECT Id, Outboundorder_Code_link__c, Invoice_Code_link__c FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c IN :deleteDetMap.keySet() AND Invoice_Code_link__c = :invoiceHead.Id ]; for (Consumable_order_LinkTable__c colctemp : existLinkinfo) { if (deleteDetMap.get(colctemp.Outboundorder_Code_link__c) == colctemp.Invoice_Code_link__c) { //存在与该发票关联的出库单 invoiceLinkdetList.add(colctemp); } } delete invoiceLinkdetList; } //CHAN-BSS5SQ update by rentongxiao 2020-09-08 end //新建发票明细1 if (chukudanID.size() > 0) { newinvoicedetails1(chukudanID); } } } } catch (Exception ex) { Database.rollback(sp); // ApexPages.addMessages(ex); // return null; System.debug('Exception ex = ' + ex.getMessage() + ex.getLineNumber()); errorMsg += ex.getMessage() + ex.getLineNumber(); } data.put('invoiceId', invoiceId); res.status = 'Success'; res.code = 200; res.msg = errorMsg; System.debug('res = ' + res); return res; } public static void newinvoicedetails1(List chukudanID) { //新规发票明细1 List invoiceorderList1 = new List(); //出库单明细更新 List outOrderList1 = new List(); List detaliFromList = [ SELECT Id, Name, Consumable_order__c, Asset_Model_No__c, Consumable_Product__r.Asset_Model_No__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, Box_Piece__c, Used_date__c, Send_date__c, Invoice_Unit__c, ProductPacking_list_manual__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c IN :chukudanID AND InvoiceProNot_count__c > 0 ]; for (Integer i = 0; i < detaliFromList.size(); i++) { Consumable_Orderdetails__c invoiceInsert1 = new Consumable_Orderdetails__c(); invoiceInsert1.Used_date__c = detaliFromList[i].Used_date__c; invoiceInsert1.Send_date__c = detaliFromList[i].Send_date__c; String str = string.valueOf(i + 1); if (str.length() == 1) { str = '0' + str; } invoiceInsert1.Name = coc.Name + '-' + detaliFromList[i].Name.substring(detaliFromList[i].Name.length() - 7, detaliFromList[i].Name.length()); invoiceInsert1.Shipment_Count__c = detaliFromList[i].InvoiceProNot_count__c; invoiceInsert1.Consumable_Product__c = detaliFromList[i].Consumable_Product__c; invoiceInsert1.Intra_Trade_List_RMB__c = detaliFromList[i].Intra_Trade_List_RMB__c; invoiceInsert1.Delivery_List_RMB__c = detaliFromList[i].Delivery_List_RMB__c; invoiceInsert1.Dealer_Custom_Price__c = detaliFromList[i].Dealer_Custom_Price__c; invoiceInsert1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice; if (detaliFromList[i].Box_Piece__c == '盒' && detaliFromList[i].Invoice_Unit__c == '个') { invoiceInsert1.Invoice_Unitprice__c = detaliFromList[i].Delivery_List_RMB__c / detaliFromList[i].ProductPacking_list_manual__c; } else { invoiceInsert1.Invoice_Unitprice__c = detaliFromList[i].Delivery_List_RMB__c; } invoiceInsert1.Box_Piece__c = detaliFromList[i].Box_Piece__c; invoiceInsert1.Invoice_Unit__c = detaliFromList[i].Box_Piece__c; if (detaliFromList[i].Invoiced_Procount__c == null) detaliFromList[i].Invoiced_Procount__c = 0; if (detaliFromList[i].RrturnPro_count__c == null) detaliFromList[i].RrturnPro_count__c = 0; invoiceInsert1.Invoiced_Count__c = detaliFromList[i].InvoiceProNot_count__c; if (detaliFromList[i].InvoicedProCost_RMB__c == null) detaliFromList[i].InvoicedProCost_RMB__c = 0; invoiceInsert1.InvoicedProCost_RMB__c = invoiceInsert1.Invoiced_Count__c * invoiceInsert1.Delivery_List_RMB__c; invoiceInsert1.Consumable_order__c = invoiceId; invoiceInsert1.Invoicedet1_OD_link__c = detaliFromList[i].Consumable_order__c; invoiceorderList1.add(invoiceInsert1); } System.debug('invoiceorderList1 +++++' + invoiceorderList1.size()); Savepoint sp = Database.setSavepoint(); System.debug('invoiceorderList1 = ' + invoiceorderList1); if (invoiceorderList1.size() > 0) { try { System.debug('invoiceorderList1 = ' + invoiceorderList1); insert invoiceorderList1; } catch (Exception ex) { Database.rollback(sp); //ApexPages.addMessages(ex); errorMsg += ex.getMessage(); } } } public static void getdefaultMapinfo(List orderIdList) { List existLinkinfo = new List(); existLinkinfo = [ SELECT Id, Consumable_order__c, Consumable_product__c, Asset_Model_No__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c IN :orderIdList ]; // for (Integer i = 0; i < existLinkinfo.size(); i++) { // ordermx1defaultMap.put(existLinkinfo[i].Consumable_order__c + existLinkinfo[i].Asset_Model_No__c, 0); // } } public static void deleteOutboundorder(Map deleteMap, String value) { //删除发票明细1 List detInvoicedet1List = [ SELECT Id, Consumable_Shipment_order__c, Consumable_Sale_order__c, Consumable_product__c, Asset_Model_No__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :value AND Invoicedet1_OD_link__c = :deleteMap.keySet() ]; System.debug('detInvoicedet1List = ' + detInvoicedet1List); delete detInvoicedet1List; } //换货单链接表 发票明细2做成 public static void outOrderchange(Map insertDetMap) { List chukudanID = new List(); List invoiceLinkList = new List(); Consumable_order__c p = new Consumable_order__c(); if (insertDetMap.size() > 0) { for (String field : insertDetMap.keySet()) { List existLinkinfo = [ SELECT Id FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c = :field ]; if (existLinkinfo.size() > 0) { delete existLinkinfo; } chukudanID.add(field); Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c(); invoiceLink.Name = field + insertDetMap.get(field); invoiceLink.Outboundorder_Code_link__c = field; invoiceLink.Invoice_Code_link__c = insertDetMap.get(field); invoiceLinkList.add(invoiceLink); p.Id = field; p.ConInvoice_Code__c = insertDetMap.get(field); p.Onchange_order__c = true; update p; } insert invoiceLinkList; } //换货出库单明细1更新 List detaliFrom1List = [ SELECT Id, Name, Consumable_order__c, Asset_Model_No__c, Consumable_Product__r.Asset_Model_No__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, Consumable_Sale_order__r.Name, Consumable_Shipment_order__r.Name FROM Consumable_Orderdetails__c WHERE Consumable_order__c IN :chukudanID ]; for (Consumable_Orderdetails__c changeOD : detaliFrom1List) { changeOD.Invoiced_Procount__c = changeOD.Shipment_Count__c; } update detaliFrom1List; } //上传ContentVersion附件 @AuraEnabled public static String saveFile(Id recordId, String fileName, String base64Data) { base64Data = EncodingUtil.urlDecode(base64Data, 'UTF-8'); ContentVersion cv = new ContentVersion(); cv.Title = fileName; cv.PathOnClient = '/' + fileName; cv.FirstPublishLocationId = recordId; cv.VersionData = EncodingUtil.base64Decode(base64Data); cv.IsMajorVersion = true; insert cv; System.debug('cv.Id = ' + cv.Id); return cv.Id; } // 保存附件 @AuraEnabled public static ResponseBodyLWC saveAttachment(String attachmentRecoedsLwc,String invoiceId) { System.debug('进入 saveAttachment'); ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; invoiceId = invoiceId; attachmentRecoeds = (List)JSON.deserialize(attachmentRecoedsLwc, List.class); System.debug('attachmentRecoeds = ' + attachmentRecoeds); try { Consumable_accessories_invoice__c attachmentdetails = new Consumable_accessories_invoice__c(); for (InvoiceOrderInfo ass : attachmentRecoeds) { if (!String.isBlank(ass.mailSelectOptsin)) { attachmentdetails.Id = ass.invoiceOrderId; attachmentdetails.Attachment_ID__c = ass.cvInfo.ContentDocumentId; attachmentdetails.Accessories_type__c = ass.mailSelectOptsin; if (String.isBlank(ass.invoiceOrderId)) { attachmentdetails.Invoice_code__c = invoiceId; } upsert attachmentdetails; } } } catch (Exception e) { return new ResponseBodyLWC('Error', 500, e.getMessage() + e.getLineNumber(), ''); } res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } // 检索(未开发票出库单) @AuraEnabled public static ResponseBodyLWC InvoiceorderSearch(Consumable_order__c cocLwc,String invoiceIdLwc,String accountidLwc,String userWorkLocationLwc,String agencyProTypeLwc,String HospitalInfoLwc,String SecondDealerLwc,String invoiceOrderRecoedsLwc) { System.debug('进入 InvoiceorderSearch'); ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; coc = cocLwc; HospitalInfo = HospitalInfoLwc; SecondDealer = SecondDealerLwc; errorMsg = ''; invoiceOrderRecoeds = (List)JSON.deserialize(invoiceOrderRecoedsLwc, List.class); invoiceId = invoiceIdLwc; accountid = accountidLwc; agencyProType = agencyProTypeLwc; userWorkLocation = userWorkLocationLwc; Map invoiceOrderMap = new Map(); String msoql = ''; List invoiceOrderdetailMid = new List(); if (String.isBlank(invoiceId)) { msoql = makeSoql(); } else { msoql = makeSoqlInit(); } invoiceOrderList = new List(); invoiceOrderList = Database.query(msoql); for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { if (ass.check == true) { invoiceOrderdetailMid.add(ass); invoiceOrderMap.put(ass.esd.Name, ass.esd.Name); } } invoiceOrderRecoeds = new List(); invoiceOrderRecoeds.addAll(invoiceOrderdetailMid); for (Integer i = 0; i < invoiceOrderList.size(); i++) { if (invoiceOrderMap.containsKey(invoiceOrderList[i].Name)) { } else { invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderList[i])); invoiceOrderMap.put(invoiceOrderList[i].Name, invoiceOrderList[i].Name); } } data.put('invoiceOrderRecoeds',invoiceOrderRecoeds); res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } private static String makeSoql() { String soql = 'SELECT Id, Order_ForDealer__r.Name,Order_ForHospital__r.Name,Order_ForDealerText__c, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c FROM Consumable_order__c '; soql += ' WHERE Dealer_Info__c = \'' + accountid + '\''; soql += ' AND (recordtypeid = \'' + System.Label.RT_ConOrder_Sale + '\''; soql += ' OR recordtypeid = \'' + System.Label.RT_ConOrder_Shipment + '\''; soql += ' ) '; soql += ' AND Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' '; soql += ' AND Order_ProType__c =\'' + agencyProType + '\''; soql += ' AND Billed_Status__c != \'全部开票\''; soql += ' AND SummonsForDirction__c != \'互相调货\''; if (HospitalInfo != null && HospitalInfo != '') { soql += ' AND Order_ForHospital__c = \'' + HospitalInfo + '\''; } if (String.isNotEmpty(SecondDealer)) { soql += ' AND Order_ForDealer__c = \'' + SecondDealer + '\''; } if (coc.Order_ForDealerText__c != null) { soql += ' AND ShipmentAccount__c = \'' + coc.Order_ForDealerText__c + '\''; } soql += ' AND InvoiceNotPro_total_amount__c > 0'; soql += ' AND Onchange_order__c = false limit 1000'; return soql; } private static String makeSoqlInit() { String soql = 'SELECT Id, Order_ForDealer__r.Name,Order_ForHospital__r.Name,Order_ForDealerText__c, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c FROM Consumable_order__c '; soql += ' WHERE Dealer_Info__c = \'' + accountid + '\''; soql += ' AND (recordtypeid = \'' + System.Label.RT_ConOrder_Sale + '\''; soql += ' OR recordtypeid = \'' + System.Label.RT_ConOrder_Shipment + '\''; soql += ' ) '; soql += ' AND Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' '; soql += ' AND Order_ProType__c =\'' + agencyProType + '\''; soql += ' AND SummonsForDirction__c != \'互相调货\' '; if (HospitalInfo != null && HospitalInfo != '') { soql += ' AND Order_ForHospital__c = \'' + HospitalInfo + '\''; } if (SecondDealer != null) { soql += ' AND Order_ForDealer__c = \'' + SecondDealer + '\''; } if (coc.Order_ForDealerText__c != null) { soql += ' AND ShipmentAccount__c = \'' + coc.Order_ForDealerText__c + '\''; } soql += ' AND InvoiceNotPro_total_amount__c > 0'; soql += ' AND Onchange_order__c = false limit 1000'; return soql; } // 删除按钮 @AuraEnabled public static ResponseBodyLWC deleteButton(String invoiceIdLwc,Consumable_order__c cocLwc) { System.debug('进入 deleteButton'); ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; coc = cocLwc; invoiceId = invoiceIdLwc; system.debug('====invoiceId==========>' + invoiceId); List consList = [ SELECT id, Consumable_order__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId ]; try { system.debug('====cons==========>' + consList); delete consList; if (coc.id == invoiceId && coc.Invoice_status__c == '草案中') { delete coc; } res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } catch (Exception e) { // ApexPages.addMessages(e); // return null; return new ResponseBodyLWC('Error', 500, e.getMessage() + ' ' + e.getLineNumber(), ''); } } // 提交按钮 @AuraEnabled public static ResponseBodyLWC approval(List outOrderStringListLwc,Map outordercountMapLwc,String invoiceIdLwc) { System.debug('进入 approval'); ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; outOrderStringList = outOrderStringListLwc; outordercountMap = outordercountMapLwc; invoiceId= invoiceIdLwc; //更新发票明细2链接 Consumable_order__c P = new Consumable_order__c(); List cocinfo = new List(); List invoiceorderList2 = new List(); //更新出库单明细1 List outOrderdetUp1List = new List(); //需要更新出库单明细1 List outOrderdet1List = [ SELECT Id, Name, Consumable_order__c, Consumable_order__r.Name, Asset_Model_No__c, Consumable_Product__r.Asset_Model_No__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, Box_Piece__c, Invoice_Unit__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c IN :outOrderStringList ]; for (Integer i = 0; i < outOrderdet1List.size(); i++) { if (outordercountMap.containsKey(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c)) { Consumable_Orderdetails__c invoiceUpdte1 = new Consumable_Orderdetails__c(); invoiceUpdte1.Id = outOrderdet1List[i].Id; invoiceUpdte1.Invoice_Unit__c = outordercountMap.get( outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c ) .Invoice_Unit__c; if ( outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Box_Piece__c == '盒' && outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoice_Unit__c == '个' ) { Decimal OldinvoicedProcount = 0; OldinvoicedProcount = (outordercountMap.get( outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c ) .Invoiced_Count__c / outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c) .ProductPacking_list_manual__c) .setScale(2); invoiceUpdte1.Invoiced_Procount__c = outOrderdet1List[i].Invoiced_Procount__c + OldinvoicedProcount; } else { invoiceUpdte1.Invoiced_Procount__c = outOrderdet1List[i].Invoiced_Procount__c + outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c) .Invoiced_Count__c; } invoiceUpdte1.Invoice_Unitprice__c = outordercountMap.get( outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c ) .Invoice_Unitprice__c; invoiceUpdte1.InvoicedProCost_RMB__c = invoiceUpdte1.Invoiced_Procount__c * outOrderdet1List[i].Delivery_List_RMB__c; Decimal invoicedProcount = 0; if ( outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Box_Piece__c == '盒' && outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoice_Unit__c == '个' ) { invoicedProcount = (outordercountMap.get( outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c ) .Invoiced_Count__c / outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c) .ProductPacking_list_manual__c) .setScale(2); } else { invoicedProcount = outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c) .Invoiced_Count__c; } if (outOrderdet1List[i].InvoiceProNot_count__c < invoicedProcount) { // ApexPages.addmessage( // new ApexPages.message( // ApexPages.severity.Error, // '出库单' + // outOrderdet1List[i].Consumable_order__r.Name + // '中,' + // outOrderdet1List[i].Asset_Model_No__c + // '还没开票数量小于发票数量,请确认是否有返品' // ) // ); // return null; return new ResponseBodyLWC('Error', 500, '出库单' + outOrderdet1List[i].Consumable_order__r.Name + '中,' + outOrderdet1List[i].Asset_Model_No__c + '还没开票数量小于发票数量,请确认是否有返品', ''); } outOrderdetUp1List.add(invoiceUpdte1); } } Savepoint sp = Database.setSavepoint(); try { //出库单明细1更新 if (outOrderdetUp1List.size() > 0) { ControllerUtil.updateOrderDetails1Satus(outOrderdetUp1List); } //发票状态更新 cocinfo = [ SELECT Id, Name, Invoice_status__c, Dealer_Info__c, Order_ForHospital__c, SummonsForDirction__c FROM Consumable_order__c WHERE Id = :invoiceId ]; System.debug('cocinfo = ' + cocinfo); if (cocinfo.size() > 0) { p = cocinfo[0]; } System.debug('p = ' + p); p.Invoice_status__c = '提交'; update p; } catch (Exception ex) { Database.rollback(sp); // ApexPages.addMessages(ex); // return null; return new ResponseBodyLWC('Error', 500, ex.getMessage() + ' ' + ex.getLineNumber(), ''); } res.status = 'Success'; res.code = 200; System.debug('res = ' + res); return res; } class InvoiceOrderInfo implements Comparable { @AuraEnabled public Boolean check { get; set; } @AuraEnabled public Boolean oldCheck { get; set; } @AuraEnabled public Consumable_order__c esd { get; set; } @AuraEnabled public Consumable_Orderdetails__c esdet { get; set; } @AuraEnabled public Attachment attach { get; set; } @AuraEnabled public ContentVersion cvInfo{ get; set; } @AuraEnabled public String mailSelectOptsin { get; set; } public List mailSelectOpts { get; set; } @AuraEnabled public Map mailSelectOptsMap { get; set; } @AuraEnabled public String invoiceOrderId { get; set; } @AuraEnabled public Decimal needInvoiceCount { get; set; } // 出库订单 public InvoiceOrderInfo(Consumable_order__c e) { check = false; oldCheck = false; esd = e; needInvoiceCount = 0; } // 出库订单明细1 public InvoiceOrderInfo(Consumable_Orderdetails__c e) { esdet = e; } //附件 public InvoiceOrderInfo(Attachment e) { attach = e; mailSelectOpts = new List(); mailSelectOpts.add(new SelectOption('发票和明细', '发票和明细')); mailSelectOpts.add(new SelectOption('发票', '发票')); mailSelectOpts.add(new SelectOption('明细', '明细')); } //ContentVersion public InvoiceOrderInfo(ContentVersion cv) { cvInfo = cv; mailSelectOptsMap = new Map(); mailSelectOptsMap.put('发票和明细', '发票和明细'); mailSelectOptsMap.put('发票', '发票'); mailSelectOptsMap.put('明细', '明细'); } // 排序 public Integer compareTo(Object compareTo) { return null; } } }