public without sharing class ConInvoiceViewController { //经销商产品分类 public String agencyProType { get; set; } //发票使用 public Consumable_order__c coc { get; set; } //出库单使用 public Consumable_order__c outbound { get; set; } //发票ID public String invoiceId { get; set; } public String orderRemind { get; set; } public String deliveryId { get; set; } public String reopen { get; set; } public Decimal sumPrice { get; set; } public Boolean isChange { get; set; } //用户信息 private String accountid = null; private String userId = ''; public Boolean getdone() { return (invoiceOrderdetail1Recoeds.size() > 0); } public Boolean getExistOutbound() { return (coc.Outbound_order__c != null); } public String getInvoiceName() { return (coc.Name); } // 精琢科技 zxk 2021-11-03 存放消耗品明细 end public List conoList { get; set; } // 精琢科技 zxk 2021-11-03 存放消耗品明细 end public String shipmentAccount { get { return (coc.ShipmentAccount__c); } } //编辑状态 public String statusEdit = ''; public Boolean editAble { get; set; } public List invoiceOrderRecoeds { get; set; } //出库单明细 public List invoiceOrderdetail1Recoeds { get; set; } //换货出库单list public List invoiceOrderRecoedschange = new List(); //附件 public List attachmentRecoeds { get; set; } public List invoiceOrderList = new List(); //发票明细1(出库单) private List invoiceOrderSelectedList = new List(); Map ordermx1defaultMap = new Map(); //出库单汇总金额 from 发票明细1 Map outorderMoneytMap = new Map(); //发票明细1关联产品数量 Map outordercountMap = new Map(); //发票关联出库单取得 List outOrderStringList = new List(); //二级经销商选择框 public List provinceOpts { get; set; } public String SecondDealer { get; set; } //public List orderForHospitalOpts { get; set; } public String HospitalInfo { get; set; } public String HospitalName { get; set; } //明细数量 public Integer invoiceOrderRecoedsCount { get { return invoiceOrderRecoeds == null ? 0 : invoiceOrderRecoeds.size(); } } list Dealerelationship = new List(); //排序使用 private String[] orderby = new List{ 'Outbound_Date__c', 'Name', 'ShipmentAccount__c' }; public String sortKey { get; set; } public String preSortKey { get; private set; } public Boolean sortOrderAsc { get; private set; } public String[] sortOrder { get; private set; } // 登录者工作地 private String userWorkLocation; public ConInvoiceViewController() { invoiceId = ApexPages.currentPage().getParameters().get('invoiceId'); statusEdit = ApexPages.currentPage().getParameters().get('KeyWords'); deliveryId = ApexPages.currentPage().getParameters().get('deliveryId'); reopen = ApexPages.currentPage().getParameters().get('reopen'); provinceOpts = new List(); //orderForHospitalOpts = new List(); invoiceOrderRecoeds = new List(); attachmentRecoeds = new List(); invoiceOrderdetail1Recoeds = new List(); invoiceOrderRecoedschange = new List(); orderRemind = ''; isChange = false; conoList = new List(); } //页面初始化 public void init() { sumPrice = 0; this.sortKey = '1'; this.preSortKey = '1'; this.sortOrderAsc = false; this.sortOrder = new List(2); this.sortOrder = new List{ ' ', ' ', ' ', ' ' }; 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(); //userId = '00510000005QQ35'; 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; } } //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'outordercountMap +++++' + outordercountMap.size() + outordercountMap)); if (SecondDealer == null || SecondDealer == '') { provinceOpts.add(new SelectOption('', '-无-')); for (Integer i = 0; i < Dealerelationship.size(); i++) { provinceOpts.add( new SelectOption(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name) ); } } else { provinceOpts.add(new SelectOption('', '-无-')); 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)); } } 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) ); } } } /*if(HospitalInfo==null||HospitalInfo==''){ orderForHospitalOpts.add(new SelectOption('', '-无-')); for(Integer i = 0; i < AgencyHospitalLink.size(); i++){ orderForHospitalOpts.add(new SelectOption(AgencyHospitalLink[i].Hospital__c, AgencyHospitalLink[i].Hospital__r.Name)); } }else{ orderForHospitalOpts.add(new SelectOption('', '-无-')); for(Integer i = 0; i < AgencyHospitalLink.size(); i++){ if(AgencyHospitalLink[i].Hospital__c == HospitalInfo){ orderForHospitalOpts.add(new SelectOption(AgencyHospitalLink[i].Hospital__c, AgencyHospitalLink[i].Hospital__r.Name)); } } for(Integer i = 0; i < AgencyHospitalLink.size(); i++){ if(AgencyHospitalLink[i].Hospital__c != HospitalInfo){ orderForHospitalOpts.add(new SelectOption(AgencyHospitalLink[i].Hospital__c, AgencyHospitalLink[i].Hospital__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, CreatedDate FROM Attachment WHERE parentid = :invoiceId]; if (attachmentinfo.size() > 0) { for (Integer i = 0; i < attachmentinfo.size(); i++) { attachmentRecoeds.add(new InvoiceOrderInfo(attachmentinfo[i])); } } for (InvoiceOrderInfo ass : attachmentRecoeds) { if (consumableaccessoriesMap.containsKey(ass.attach.Id)) { ass.mailSelectOptsin = consumableaccessoriesMap.get(ass.attach.Id); ass.invoiceOrderId = invorceOrderIdMap.get(ass.attach.Id); } } //nvoiceorderremind(); //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, shipmentAccount + '请先打印指示单!')); } // 检索(未开发票出库单) public void InvoiceorderSearch() { Map invoiceOrderMap = new Map(); String msoql = ''; List invoiceOrderdetailMid = new List(); if (String.isBlank(invoiceId)) { msoql = makeSoql(); } else { msoql = makeSoqlInit(); } //String msoql = makeSoql(); 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); } } } public void nvoiceorderremind() { List invoiceOrderAccountList = new List(); for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { if (ass.check == true && ass.esd.ShipmentAccount__c != shipmentAccount) { invoiceOrderAccountList.add(ass.esd.Name); } } if (invoiceOrderAccountList.size() > 0) { orderRemind = '出库单' + invoiceOrderAccountList + '客户名与发票客户名不一致!'; ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, orderRemind)); } else { orderRemind = ''; //return ''; } } // 保存附件 public PageReference saveAttachment() { Consumable_accessories_invoice__c attachmentdetails = new Consumable_accessories_invoice__c(); System.debug('AttachmentRecoeds = ' + AttachmentRecoeds); for (InvoiceOrderInfo ass : AttachmentRecoeds) { if (!String.isBlank(ass.mailSelectOptsin)) { attachmentdetails.Id = ass.invoiceOrderId; attachmentdetails.Attachment_ID__c = ass.attach.Id; attachmentdetails.Accessories_type__c = ass.mailSelectOptsin; if (String.isBlank(ass.invoiceOrderId)) { attachmentdetails.Invoice_code__c = invoiceId; } upsert attachmentdetails; } } return UnabletoEdit(); } // 保存按钮 public PageReference save() { System.debug('enter ConInvoiceViewController.save success'); List chukudanID = new List(); if (coc.Name == '' || coc.Name == null) { coc.Name.addError('请录入发票号。'); return null; } if (coc.Invoice_Date__c == null) { coc.Invoice_Date__c.addError('请录入发票日期。'); return null; } //CHAN-BSS5SQ update by rentongxiao 2020-08-26 start /*if(String.isBlank(HospitalInfo) && SecondDealer == null && coc.Order_ForDealerText__c == null){ coc.addError('必须输入客户名或者经销商。'); return null; }*/ if (String.isBlank(HospitalInfo) && SecondDealer == null) { coc.addError('必须输入客户名或者二级经销商。'); return null; } if (HospitalInfo != null && HospitalInfo != '' && SecondDealer != null) { coc.addError('请输入客户名、二级经销商只可输入一个。'); } /* if(HospitalInfo !=null && HospitalInfo !='' && (SecondDealer != null || coc.Order_ForDealerText__c != null)){ coc.addError('请输入客户名、二级经销商和经销商(录入)只可输入一个。'); return null; }*/ //CHAN-BSS5SQ update by rentongxiao 2020-08-26 end if (HospitalInfo != null && HospitalInfo != '') { if (coc.Order_ForCustomerText__c == null) { coc.Order_ForCustomerText__c.addError('请输入科室。'); return null; } } else { if (coc.Order_ForCustomerText__c != null) { coc.Order_ForCustomerText__c.addError('不需要输入科室。'); return null; } } //update by rentx 2021-02-24 CHAN-BYH9PK start //因为之前默认 医院 二级经销商 经销商录入只能出入一个值,所以不会出错,但是现在的情况是经销商有值 经销商录入也有值 所以会报错,因此修改 shipmentAccountString 只能存放一个值即可 String shipmentAccountString = ''; // String a = HospitalInfo == null? '' : HospitalInfo; // String b = SecondDealer == null? '' : SecondDealer; // String c = coc.Order_ForDealerText__c == null? '' : coc.Order_ForDealerText__c; // shipmentAccountString = a + b + c; if (HospitalInfo != null) { shipmentAccountString = HospitalInfo; } else if (SecondDealer != null) { shipmentAccountString = SecondDealer; } else { shipmentAccountString = coc.Order_ForDealerText__c == null ? '' : coc.Order_ForDealerText__c; } //update by rentx 2021-02-24 CHAN-BYH9PK end 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 (SecondDealer != null) { if ( ass.esd.Order_ForDealer__c != shipmentAccountString && ass.esd.Order_ForDealerText__c != shipmentAccountString ) { //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, shipmentAccountString + ass.esd.Order_ForDealer__c + ass.esd.Order_ForDealerText__c)); invoiceOrderAccountList.add(ass.esd.Name); } } //update by rentx 2021-2-24 CHAN-BYH9PK start // if(coc.Order_ForDealerText__c != null){ if (coc.Order_ForDealerText__c != null && (HospitalInfo == null || HospitalInfo == '')) { //update by rentx 2021-2-24 CHAN-BYH9PK end 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) { invoiceOrderAccountList.add(ass.esd.Name); } } if (SecondDealer != null) { if (ass.esd.Order_ForDealer__c != shipmentAccountString) { invoiceOrderAccountList.add(ass.esd.Name); } } //update by rentx 2021-2-24 CHAN-BYH9PK start // if(coc.Order_ForDealerText__c != null){ if (coc.Order_ForDealerText__c != null && (HospitalInfo == null || HospitalInfo == '')) { //update by rentx 2021-2-24 CHAN-BYH9PK end if ( (ass.esd.Order_ForDealerText__c != null || ass.esd.Order_ForDealerText__c != '') && ass.esd.ShipmentAccount__c != shipmentAccountString ) { invoiceOrderAccountList.add(ass.esd.Name); } } } } // invoiceOrderAccountList.add('12345'); if (invoiceOrderAccountList.size() > 0) { orderRemind = invoiceOrderAccountList + '出库单客户名与发票客户名不一致!'; coc.addError(invoiceOrderAccountList + '出库单客户名与发票客户名不一致!'); return null; } else { orderRemind = ''; //return ''; } if (String.isBlank(deliveryId)) { if (x < 1) { coc.addError('请选择需要开发票的出库单!'); return null; } } 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) { invoiceHead.Outbound_order__c = deliveryId; } invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice; if (SecondDealer == null) { 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; } /*if(deleteDetMap.size() > 0 ){ List invoiceLinkdetList = New List(); for (String field : deleteDetMap.keySet()) { List existLinkinfo = [SELECT Id FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c = :field AND Invoice_Code_link__c = :deleteDetMap.get(field)]; if(existLinkinfo.size() > 0){ Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c(); invoiceLink.Id = existLinkinfo[0].Id; invoiceLinkdetList.add(invoiceLink); } } delete invoiceLinkdetList; }*/ } else if (String.isNotBlank(reopen) && reopen.equals('isreopen') && String.isNotBlank(invoiceId)) { //CHAN-BSS5SQ update by rentongxiao 2020-09-04 start //如果是 作废重开 //1. 设置新发票信息 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) { invoiceHead.Outbound_order__c = deliveryId; } invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice; if (SecondDealer == null) { if (HospitalInfo != null && HospitalInfo != '') { invoiceHead.Order_ForHospital__c = HospitalInfo; } } else { invoiceHead.Order_ForDealer__c = SecondDealer; } invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c; System.debug('invoiceHead = ' + invoiceHead); insert 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; 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(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){ 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); for (String field : deleteDetMap.keySet()) { List existLinkinfo = [SELECT Id FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c = :field AND Invoice_Code_link__c = :deleteDetMap.get(field)]; if(existLinkinfo.size() > 0){ Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c(); invoiceLink.Id = existLinkinfo[0].Id; invoiceLinkdetList.add(invoiceLink); } } delete invoiceLinkdetList; }*/ //删除出库单链接表 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; } return UnabletoEdit(); } //换货单链接表 发票明细2做成 public 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; //换货出库单明细2更新 /*List detaliFromList = [ SELECT Id, Name, Consumable_order_minor__c, Asset_Model_No__c, Sterilization_limit__c, Consumable_Product__r.Asset_Model_No__c, Consumable_Count__c, RrturnPro_count__c, Delivery_List_RMB__c, Invoice_No__c, Invoice_Date__c, Consumable_Sale_order__r.Name, Consumable_Shipment_order__r.Name FROM Consumable_order_details2__c WHERE (Consumable_Sale_order__c in : chukudanID or Consumable_Shipment_order__c in : chukudanID)]; for(Consumable_order_details2__c changeOD : detaliFromList){ changeOD.Invoice_No__c = invoiceId; changeOD.Invoice_Date__c = Date.today(); } update detaliFromList;*/ } //取得更新map初始化数据 //获取 订单中产品的初始化 Map public 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); } } //删除发票明细1 //CHAN-BSS5SQ update by rentongxiao 2020-09-08 start /*public void deleteOutboundorder(Map deleteMap){ //删除发票明细1 List detInvoicedet1List = new List(); //删除发票的明细1(与出库单关联) for (String field : deleteMap.keySet()) { 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 = :deleteMap.get(field) AND Invoicedet1_OD_link__c = :field]; delete detInvoicedet1List; } }*/ public 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; } //CHAN-BSS5SQ update by rentongxiao 2020-09-08 end public 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(); //Consumable_Orderdetails__c orderUpdate1 = new Consumable_Orderdetails__c(); //orderUpdate1.id = detaliFromList[i].Id; invoiceInsert1.Used_date__c = detaliFromList[i].Used_date__c; //invoiceInsert1.Asset_Model_No__c = detaliFromList[i].Asset_Model_No__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; //orderUpdate1.Invoice_Unitprice__c = detaliFromList[i].Delivery_List_RMB__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_Procount__c = detaliFromList[i].Invoiced_Procount__c; 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.Sum_of_money__c = invoiceInsert1.InvoicedProCost_RMB__c; invoiceInsert1.Consumable_order__c = invoiceId; //invoiceInsert1.Consumable_principal__c = invoiceId; invoiceInsert1.Invoicedet1_OD_link__c = detaliFromList[i].Consumable_order__c; invoiceorderList1.add(invoiceInsert1); //outOrderList1.add(orderUpdate1); } System.debug('invoiceorderList1 +++++' + invoiceorderList1.size()); //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'invoiceorderList1 +++++' + invoiceorderList1.size())); //return ; Savepoint sp = Database.setSavepoint(); if (invoiceorderList1.size() > 0) { try { System.debug('invoiceorderList1 = ' + invoiceorderList1); insert invoiceorderList1; } catch (Exception ex) { Database.rollback(sp); ApexPages.addMessages(ex); } } } //上传附件 public PageReference FilesUpload() { PageReference ref = new Pagereference( '/p/attach/NoteAttach?pid=' + invoiceId + '&retURL=%2F' + '/ConInvoiceView?invoiceId=' + invoiceId ); ref.setRedirect(true); return ref; } //排序 public void SortLimited() { List orderIdList = new List(); for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { orderIdList.add(ass.esd.Id); } if (this.sortKey == this.preSortKey) { // 方向が変わるのみ this.sortOrderAsc = !this.sortOrderAsc; this.sortOrder[Integer.valueOf(this.sortKey)] = (this.sortOrderAsc == true ? '↑' : '↓'); } else { this.sortOrderAsc = true; this.sortOrder[Integer.valueOf(this.preSortKey)] = ' '; this.sortOrder[Integer.valueOf(this.sortKey)] = (this.sortOrderAsc == true ? '↑' : '↓'); } this.preSortKey = this.sortKey; // 画面记录取得 String soql = 'SELECT Id, 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,Order_ForHospital__c FROM Consumable_order__c '; soql += ' WHERE Id in :orderIdList'; soql += ' order by ' + this.orderby[Integer.valueOf(this.sortKey)]; soql += ' ' + (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last'); List queryList = Database.query(soql); invoiceOrderRecoeds = new List(); for (Integer i = 0; i < queryList.size(); i++) { invoiceOrderRecoeds.add(new InvoiceOrderInfo(queryList[i])); } for (InvoiceOrderInfo ass : invoiceOrderRecoeds) { if (outorderMoneytMap.containsKey(ass.esd.id)) { ass.needInvoiceCount = outorderMoneytMap.get(ass.esd.id); } } } // 编辑按钮 public PageReference setEditAble() { statusEdit = 'Redirect'; PageReference ref = new Pagereference('/ConInvoiceView?invoiceId=' + invoiceId + '&KeyWords=' + statusEdit); ref.setRedirect(true); return ref; } // 返回不可编辑状态 public PageReference UnabletoEdit() { PageReference ref = new Pagereference('/ConInvoiceView?invoiceId=' + invoiceId); ref.setRedirect(true); return ref; } // 精琢科技 zxk 2021-11-03 CHAN-C8D86K 添加删除按钮 start // 删除按钮 public PageReference deleteButton() { system.debug('====invoiceId==========>' + invoiceId); List consList = [ SELECT id, Consumable_order__c FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId ]; // Consumable_order__c consumable = [select id from Consumable_order__c where id =: invoiceId AND Invoice_status__c = '草案中']; try { system.debug('====cons==========>' + consList); delete consList; if (coc.id == invoiceId && coc.Invoice_status__c == '草案中') { delete coc; } return returnOrderPage(); } catch (Exception e) { ApexPages.addMessages(e); return null; } } // 返回 发票~消耗品页面 public PageReference returnOrderPage() { PageReference ref = new Pagereference('/ConInvoiceList?sfdc.tabName=01r100000009ytS'); ref.setRedirect(true); return ref; } // 精琢科技 zxk 2021-11-03 CHAN-C8D86K 添加删除按钮 end // 作废重开按钮 public PageReference setreopen() { statusEdit = 'Redirect'; PageReference ref = new Pagereference('/ConInvoiceView?invoiceId=' + invoiceId + '&reopen=isreopen' + '&KeyWords=' + statusEdit); ref.setRedirect(true); return ref; } public PageReference approval() { //更新发票明细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; } 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 ]; if (cocinfo.size() > 0) { p = cocinfo[0]; } p.Invoice_status__c = '提交'; update p; } catch (Exception ex) { Database.rollback(sp); ApexPages.addMessages(ex); return null; } return UnabletoEdit(); } // 做成检索SQL文 private 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; } // 做成检索SQL文 private 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 (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; } // Data Bean class InvoiceOrderInfo implements Comparable { public Boolean check { get; set; } public Boolean oldCheck { get; set; } public Consumable_order__c esd { get; set; } public Consumable_Orderdetails__c esdet { get; set; } public Attachment attach { get; set; } public String mailSelectOptsin { get; set; } public List mailSelectOpts { get; set; } public String invoiceOrderId { get; set; } 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('明细', '明细')); } // 排序 public Integer compareTo(Object compareTo) { return null; } } }