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