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 < Consumable_Orderdetails__c > 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 String[]{ '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 < Consumable_Orderdetails__c > (); } //页面初始化 public void init() { sumPrice = 0; this.sortKey = '1'; this.preSortKey = '1'; this.sortOrderAsc = false; this.sortOrder = new String[2]; this.sortOrder = new String[]{' ',' ',' ',' '}; 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 ]; 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(); 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() { List chukudanID = new List(); // 画面录入项判断 //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'HospitalInfo +++++' + HospitalInfo + '-----' + HospitalName)); //return null; 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(String.isBlank(HospitalInfo) && SecondDealer != null && coc.Order_ForDealerText__c != null){ coc.Order_ForDealerText__c.addError('请输入二级经销商或者经销商(录入)。'); return null; }*/ //CHAN-BSS5SQ update by rentongxiao 2020-08-26 start /* if(HospitalInfo !=null && HospitalInfo !='' && SecondDealer != null && coc.Order_ForDealerText__c != 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; }*/ } //CHAN-BSS5SQ update by rentongxiao 2020-09-04 start else if (String.isNotBlank(reopen) && reopen.equals('isreopen') && String.isNotBlank(invoiceId)) { //如果是 作废重开 //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; 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); } 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); } 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; delete tempcoc; invoiceId = invoiceHead.Id; 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); } } 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; } //新建发票明细1 if(chukudanID.size() > 0 ){ newinvoicedetails1(chukudanID); } } //CHAN-BSS5SQ update by rentongxiao 2020-09-04 end //编辑后保存 else{ 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()]; 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 { 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 < Consumable_Orderdetails__c > 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='+System.label.tabName);//niwu -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; } } }