public with sharing class NewDBMCAgentPDFAdnMceConfigController { public List TopProductModel =new List(); public EstimateInfo targetObj { get; private set; } public List targetObjList { get; private set; } public String RecordTypeName { get; private set; } private Integer nameMax = 23; private Integer rowSize = 35; private Integer commentMax = 5; private Integer lineNo = 0; public Integer year { get; private set; } public String flag { get; private set; } public Boolean ETCDBMC { get; private set; } public Integer getTargetObjSize() { return this.targetObjList.size(); } public NewDBMCAgentPDFAdnMceConfigController() { } public NewDBMCAgentPDFAdnMceConfigController(ApexPages.StandardController controller) { } public void init() { TopProductModel.add('CF-LV1I'); TopProductModel.add('CF-LV1L'); TopProductModel.add('CV-V1'); TopProductModel.add('GIF-LV1'); TopProductModel.add('OER-AW'); TopProductModel.add('OER-A'); // 获取合同ID String MCId = ApexPages.currentPage().getParameters().get('id'); List Mc = [select id, name, Estimation_Id__c, Estimation_Id__r.Estimate_Target__c,Contract_Type__c, SalesOfficeCode_selection__c, Management_Code__c, FieldRequest_quotation_Amount__c, Total_FieldRequest_quotation_In_Words__c, Small_Repair_Time__c, Big_Repair_Time__c, Inspection_Time__c, Negotiate_Mean__c, First_Party_Contract_Number__c, Term_Of_Payment__c, one_off_payment_agreed_period__c from MaintanceContractPack__c where id =:MCId]; if (Mc[0].Estimation_Id__c == null) { throw new ControllerUtil.myException('该合同没有decide'); } //小合同 List MCList = [select id, Name, Department_Class__r.Name, Department__r.Name, Service_Contract_Staff__c, Payment_Plan_Sum_First__c, Payment_Plan_Date_First__c, Payment_Plan_Sum_Fifth__c, Payment_Plan_Date_Fifth__c, Payment_Plan_Sum_Third__c, Payment_Plan_Date_Third__c, Payment_Plan_Sum_Forth__c, Payment_Plan_Date_Forth__c, Payment_Plan_Sum_Second__c, Payment_Plan_Date_Second__c, Payment_Plan_Sum_Sixth__c, Payment_Plan_Date_Sixth__c, MainLeaderManager__c, Dealer__r.Name, Service_Contract_Staff__r.JingliApprovalManager__c, User_Salesdepartment__c, User_Salesdepartment_Sec__c, Service_Contract_Staff__r.Salesdepartment__c, Small_Repair_Time__c, Big_Repair_Time__c, Live_Technical_Support_Time__c, Engineer_Name__c, Phone_Number__c, Tour_Check__c, Inspection_Time__c, Dedust__c, Negotiate_Mean__c, First_Party_Contract_Number__c, Second_Party_Contract_Number__c, Term_Of_Payment__c, one_off_payment_agreed_period__c, Contract_Amount__c, Total_Contract_Amount_In_Words__c, Service_Contract_Staff__r.Name, Total_Payment_Time__c, Payment_Plan_Sum_First_in_Word__c, Payment_Plan_Sum_Second_in_Word__c, Payment_Plan_Sum_Third_in_Word__c, Payment_Plan_Sum_Forth_in_Word__c, Payment_Plan_Sum_Fifth_in_Word__c, Payment_Plan_Sum_Sixth_in_Word__c, Estimation_Id__c, SalesOfficeCode_selection__c, Hospital__r.Name, Management_Code__c, Contract_Start_Date__c, Contract_End_Date__c, Total_Contract_Number__c, Is_New_Contract__c, Hospital__c, Estimate_Asset_Cnt__c from Maintenance_Contract__c where MaintanceContractPack__c = :MCId order by Management_Code__c ASC]; // 判断 合同是否存在 if (Mc.size() == 0) { throw new ControllerUtil.myException('维修合同不存在'); } ETCDBMC = false; if (Mc[0].Estimation_Id__r.Estimate_Target__c.equals('医院') && Mc[0].Contract_Type__c.equals('服务合同')) { ETCDBMC = true; } // 合同存在 通过最新确认的报价获取报价编码id List MCPE = [select id, name, Maintenance_Contract_Estimate__c from MaintanceContractPackEstimate__c where id = :Mc[0].Estimation_Id__c]; List splitValues = new List(); if (MCPE[0].Maintenance_Contract_Estimate__c.contains(',')) { // 将 合同报价编码 进行切割 并查询 splitValues = MCPE[0].Maintenance_Contract_Estimate__c.split(','); }else { splitValues.add(MCPE[0].Maintenance_Contract_Estimate__c); } if (splitValues.size() == 0 ) { throw new ControllerUtil.myException('该合同尚未报价,请报价后在行打印'); } // System.debug(splitValues); // 通过合同报价编码 找到合同编号id // new List(); List mceList = [SELECT Id, Name, Maintenance_Contract__c,Estimate_Target__c, Dealer__r.Name, Maintenance_Contract__r.Management_Code__c, CreatedBy.fen_corp_name__c, Maintenance_Contract__r.Hospital__r.Name, Department__c, Contract_Range__c, Contract_Esti_Start_Date__c, Contract_Esti_End_Date__c, Contract_Start_Date__c, Contract_End_Date__c,Maintenance_Contract__r.SalesOfficeCode_selection__c, Estimate_Trial_Money__c, Maintenance_Price__c, NotUse_Oxygenated_Water__c, Examination_Price__c, Service_contract_target_number__c, Append_Condition_Price__c, Discount_Price__c, Discount_Percentage__c, Last_Discount__c, Asset_Sum_Price__c, Print_Contract__c, Print_RepairPrice__c, Print_DiscountPercentage__c, Print_DiscountPrice__c, Print_ListPrice__c, Print_MaintePrice__c, Print_SumPrice__c, Is_New_Contract__c, RecordType.DeveloperName FROM Maintenance_Contract_Estimate__c WHERE name in :splitValues]; this.targetObj = new EstimateInfo(mceList,Mc,MCList); targetObjList = new List(); EstimateInfo tmpTargetObj = new EstimateInfo(mceList,Mc,MCList); RecordTypeName = mceList[0].RecordType.DeveloperName; // 通过合同编号获取设备 List mceIdList = new List(); List listName =new List(); for (Maintenance_Contract_Estimate__c mce : mceList) { mceIdList.add(mce.Id); } List MaintenanceCAE = [select Id, Name, Asset__c, Maintenance_Contract_Estimate__r.Department__c, Asset__r.OwnershipMachine_No__c, Product_Manual__r.Asset_Model_No__c, Asset__r.Name, Asset__r.SerialNumber, Asset__r.InstallDate, Maintenance_Contract_Estimate__r.Maintenance_Contract__r.Management_Code__c, Asset__r.Product2.Name, Product_Manual__c, Product_Manual__r.Name, IsNew__c, Maintenance_Price_Month__c, Estimate_List_Price__c, Check_Result__c, Repair_Price__c, Comment__c,Characteristic__c, Check_Object__c from Maintenance_Contract_Asset_Estimate__c where Maintenance_Contract_Estimate__c in :mceIdList order by Maintenance_Contract_Estimate__r.Maintenance_Contract__r.Management_Code__c ASC]; for(Maintenance_Contract_Asset_Estimate__c tarAsse : MaintenanceCAE){ listName.add(tarAsse); } List topAsset =new List(); List otherAsset =new List(); Integer cnt = 0; for(Maintenance_Contract_Asset_Estimate__c tarAsse : listName){ if(TopProductModel.contains(tarAsse.Asset__r.OwnershipMachine_No__c)||TopProductModel.contains(tarAsse.Product_Manual__r.Asset_Model_No__c)){ topAsset.add(tarAsse); }else{ otherAsset.add(tarAsse); } } topAsset.addAll(otherAsset); listName=topAsset; for(Maintenance_Contract_Asset_Estimate__c mcae :listName) { // system.debug(mcae.Product_Manual__r.Name+':::::::::::'+mcae.Product_Manual__c); String sname = ''; if (mcae.Asset__c != null) { sname = mcae.Asset__r.Product2.Name == null ? '' : mcae.Asset__r.Product2.Name; } else { sname = mcae.Product_Manual__r.Name == null ? '' : mcae.Product_Manual__r.Name; } String smodelNo = ''; String scomment = mcae.Comment__c == null ? '' : mcae.Comment__c; if (sname.indexOf(':') >= 0) { smodelNo = sname.subString(0, sname.indexOf(':')+1); sname = sname.subString(sname.indexOf(':')+1); } else if (sname.indexOf(':') >= 0) { smodelNo = sname.subString(0, sname.indexOf(':')+1); sname = sname.subString(sname.indexOf(':')+1); } else { smodelNo = ''; } //机器名行数 Integer iname = (sname.length() / nameMax) + (Math.mod(sname.length(), nameMax) > 0 ? 1 : 0); if (iname == 0) { iname = 1; } //备注行数 Integer icomment = (scomment.length() / commentMax) + (Math.mod(scomment.length(), commentMax) > 0 ? 1 : 0); if (icomment == 0) { icomment = 1; } Integer icnt = iname; if (iname < icomment) { icnt = icomment; } if (mcae.Asset__c != null) { mcae.Asset__r.Name = smodelNo + sname; } else { mcae.Product_Manual__r.Name = smodelNo + sname; // system.debug('测试一下这个位置sname'+sname); } cnt+=icnt; // if (cnt > this.rowSize) { cnt = icnt; //HideOrNot = false; targetObjList.add(tmpTargetObj); tmpTargetObj = new EstimateInfo(mceList,Mc,MCList); } lineNo += 1; tmpTargetObj.addAssetInfo(lineNo, mcae, nameMax,commentMax); } if (tmpTargetObj.assetInfoList.size() > 0) { targetObjList.add(tmpTargetObj); } Integer y = this.targetObj.estimate.Contract_Start_Date__c.year(); Integer m = this.targetObj.estimate.Contract_Start_Date__c.month(); if (m >= 4) { this.year = y; } else { this.year = y; // y - 1; } System.debug('打印结果:'+tmpTargetObj); } private static Map companyApiMap = new Map { '北京RC' => '奥林巴斯(北京)销售服务有限公司', '上海RC' => '奥林巴斯(北京)销售服务有限公司上海分公司', '广州RC' => '奥林巴斯(北京)销售服务有限公司广州分公司', '沈阳RC' => '奥林巴斯(北京)销售服务有限公司沈阳分公司',// 2024-3-11 WYL DB202403065302 update //wangweipeng 2021/07/30 start '成都RC' => '奥林巴斯(北京)销售服务有限公司成都维修分公司', '西安RC' => '奥林巴斯(北京)销售服务有限公司西安维修分公司', '杭州RC' => '奥林巴斯(北京)销售服务有限公司杭州维修分公司' //wangweipeng 2021/07/30 start }; public class EstimateInfo { public Maintenance_Contract_Estimate__c estimate {get; private set;} public List assetInfoList {get; private set;} public String BCompany {get; private set;} public String HospitalName {get; private set;} public Maintenance_Contract__c MC {get; private set;} public List MCL {get; private set;} public MaintanceContractPack__c MCD {get; private set;} private String returnNewStr(String hospitalName){ String hospitalNames = ''; if(hospitalName.contains('/')){ Integer index = hospitalName.lastIndexOf('/'); hospitalNames = hospitalName.substring(0,index)+'
'+hospitalName.substring(index+1); }else{ if(hospitalName.length()>22){ hospitalNames = hospitalName.substring(0,22)+'
'+hospitalName.substring(22); }else{ hospitalNames = hospitalName; } } return hospitalNames; } public EstimateInfo(List estimateList, List Mc, List MCList) { if (estimateList.size() > 0) { this.MCL = MCList;// 小合同 this.MC = MCList[0]; this.MCD = Mc[0]; this.estimate = estimateList[0]; this.assetInfoList = new List(); this.BCompany = companyApiMap.get(MCD.SalesOfficeCode_selection__c); String Hospital = estimate.Maintenance_Contract__r.Hospital__r.Name; this.HospitalName = returnNewStr(Hospital); } } public void addAssetInfo(Integer lno, Maintenance_Contract_Asset_Estimate__c mcae, Integer nameMax, Integer commentMax) { this.assetInfoList.add(new AssetInfo(lno, mcae, estimate, nameMax, commentMax)); } } public class AssetInfo { public Integer lineNo {get; private set;} public Maintenance_Contract_Asset_Estimate__c mcae {get; private set;} public String assetModelNo {get; private set;} public String assetName {get; private set;} public String assetSerialNumber {get; private set;} public String assetComment {get; private set;} public String Management_Code {get; private set;} //public boolean NeedHide {get;private set;} public AssetInfo() { this.mcae = null; } private String Substr(Integer length, String parameter){ String params = ''; Integer size = (parameter.length() / length) + (Math.mod(parameter.length(), length) > 0 ? 1 :0); if(size == 0){ size = 1; } for(Integer I =0; I'; } params += s; } return params; } public AssetInfo(Integer lineNo, Maintenance_Contract_Asset_Estimate__c mcae, Maintenance_Contract_Estimate__c estimate, Integer nameMax, Integer commentMax) { this.lineNo = lineNo; this.mcae = mcae; //this.NeedHide = HideOrNot; if (mcae.Asset__c != null) { // Assetある this.assetName = mcae.Asset__r.Name+''; this.assetSerialNumber = mcae.Asset__r.SerialNumber; } else { // 手入力 this.assetName = mcae.Product_Manual__r.Name+''; this.assetSerialNumber = '新购入'; } this.Management_Code = mcae.Maintenance_Contract_Estimate__r.Maintenance_Contract__r.Management_Code__c; // 名前 ':' の対応 this.assetName = assetName == null ? '' : assetName; String assetModelNotemp; String assetNametemp; if (this.assetName.indexOf(':') >= 0) { assetModelNotemp = this.assetName.subString(0, this.assetName.indexOf(':')); assetNametemp = this.assetName.subString(this.assetName.indexOf(':')+1); } else if (this.assetName.indexOf(':') >= 0) { assetModelNotemp = this.assetName.subString(0, this.assetName.indexOf( ':')); assetNametemp = this.assetName.subString(this.assetName.indexOf(':')+1); } else { this.assetModelNo = ''; } this.assetModelNo = assetModelNotemp == null ? '' : assetModelNotemp; //this.assetModelNo = Substr(modelNoMax,assetModelNotemp); assetNametemp = assetNametemp == null ? '' : assetNametemp; this.assetName = Substr(nameMax,assetNametemp); String assetCommenttemp = mcae.Comment__c == null ? '' : mcae.Comment__c; this.assetComment = Substr(commentMax,assetCommenttemp); } } }