| | |
| | | // FIXME 見積もり商品の Asset_Model_No__c ですが、数式になっています。トランザクションデータとして、項目を持つべきかと思います。by katsu 20130216 |
| | | // 商談商品のId__c を PricebookEntry.Product2Idに変更すべき |
| | | // 見積もり可否 ですが、保存時みていますが、Sales_Possibilityを見ないですか?いいえ、js側で見ています |
| | | public class NewQuoteEntryController { |
| | | public Integer quoteEntryMaxLine { get; private set; } |
| | | public Id oppId { get; set; } |
| | | public Id quoId { get; set; } |
| | | public Boolean productStatusUpdated { get; set; } // 状態更新、{!$Label.Status_Update} を押下したかどうか |
| | | public Boolean changedAfterPrint { get; set; } // true の場合、画面に confirm メッセージが表示します。quoIdを新しいinsert。判定はjsにて実施 |
| | | public Boolean changedAfterBid { get; set; } // true の場合、画面に confirm メッセージが表示します。quoIdを新しいinsert。判定はjsにで実施 |
| | | //public Id qlistId { get; set; } |
| | | //lastbuy 2022/2/9 fy start |
| | | public Boolean filg { get; set; } |
| | | //lastbuy 2022/2/9 fy end |
| | | public without sharing class NewQuoteEntryController { |
| | | public Integer quoteEntryMaxLine {get; private set;} |
| | | public Integer quoteEntryMaxSet {get; private set;} |
| | | |
| | | public String excel_text { get; set; } |
| | | public Integer select_index { get; set; } // excelImport専用ですが、jsにて制御することになるので、TODO katsu 削除予定 |
| | | public String Product_text { get; set; } |
| | | public String setProduct_text { get; set; } |
| | | public Id oppId { get; set; } |
| | | public Id quoId {get;set;} |
| | | public Id pricebook2Id {get;set;} |
| | | public Id accountId {get;set;} |
| | | public String currencyIsoCode {get;set;} |
| | | |
| | | public List<QELine> activities { get; set; } |
| | | public List<QELine> tmpactivities { get; set; } |
| | | public QELine active_activity { get; set; } |
| | | public OppInfo oppInfo { get; set; } |
| | | //用于检查询价报价具体产品状态是否变更 |
| | | public List<QuoteLineItem> CheckItem {get; set;} |
| | | //値引き |
| | | public Decimal DisCalculation { get; set; } |
| | | public Decimal DisAmount { get; set; } |
| | | public boolean specialerrorflg {get;set;} |
| | | public boolean errorflg {get;set;} |
| | | public String errorMessage {get;set;} |
| | | |
| | | //第一販売店 |
| | | //public String SalesName1 { get; set; } |
| | | public String SalesShopClass1 { get; set; } |
| | | //public Decimal SalesAmount1 { get; set; } |
| | | public Decimal Salesprofit1 { get; set; } |
| | | public Decimal SalesCalculation1 { get; set; } |
| | | public String SalesId1 { get; set; } |
| | | // 2018/09/29 CHAN-B4YAB8 经销商折扣 start |
| | | public Decimal AgencyDiscount { get; set; } |
| | | //第二販売店 |
| | | //public String SalesName2 { get; set; } |
| | | public String SalesShopClass2 { get; set; } |
| | | //public Decimal SalesAmount2 { get; set; } |
| | | public Decimal Salesprofit2 { get; set; } |
| | | public Decimal SalesCalculation2 { get; set; } |
| | | public String SalesId2 { get; set; } |
| | | //病院マスタ選択リスト |
| | | public String selection_hp { get; set; } |
| | | public List<SelectOption> options_hp { get; set; } |
| | | //画面制御判定用 |
| | | public Boolean displayCost { get; set; } |
| | | //public Boolean enableEntry { get; set; } |
| | | public Boolean enableSales { get; set; } |
| | | public Boolean specialAuthority { get; set; } |
| | | public Boolean verified { get; set; } |
| | | public Boolean QuoteDecision { get; set; } |
| | | public boolean QuoteDecide {get; set;} |
| | | public Boolean QuoteSapSented { get; set; } |
| | | public Boolean QuoteCorrect { get; set; } |
| | | //public Boolean salesEntry { get; set; } |
| | | public Boolean enableContract { get; set; } |
| | | //ボタン制御用 |
| | | public Boolean print_button { get; set; } |
| | | public Boolean sap_button { get; set; } |
| | | public Boolean Decision_button { get; set; } |
| | | public Boolean Save_button { get; set; } |
| | | public Boolean WinOrDecideAlert {get; set;} |
| | | public boolean Messageflg {get;set;} |
| | | public String Message {get;set;} |
| | | |
| | | public Quote quo {get;set;} |
| | | public Decimal discount {get;set;} |
| | | public List<QELine> activities {get;set;} |
| | | private List<QELine> activitiesbk; |
| | | public List<QELine> tmpactivities = new List<QELine>(); |
| | | public QELine active_activity; |
| | | public Boolean productStatusUpdated; |
| | | public List<Boolean> hidFlg {get;set;} |
| | | public String excel_text { get; set; } |
| | | public String baseUrl { get; set; } |
| | | public String rtUrl { get; set; } |
| | | |
| | | public Boolean over3month { get; set; } |
| | | public Boolean newQuoteFlag=false; |
| | | public boolean decideFlg { get; set; } |
| | | public boolean isdecide { get; set; } |
| | | public boolean printFlg { get; set; } |
| | | private boolean doDecide { get; set; } |
| | | public String productSegment { get; set; } |
| | | public boolean isAdmin { get; set; } |
| | | |
| | | // 多年保修 start |
| | | public string trade {get; private set;} |
| | | public string quoteGurantee_Period; |
| | | public string quotemultiYearWarranty; |
| | | // 多年保修 end |
| | | //报价试算 判断经销商是否变化 start |
| | | public string agency1Name; |
| | | public string agency2Name; |
| | | //报价试算 判断经销商是否变化 end |
| | | public Boolean getHiddenSaveBtn() { |
| | | Boolean rtn = quo.Cancel_Decide__c; |
| | | Schema.DescribeSObjectResult quoteDesc = Quote.SObjectType.getDescribe(); |
| | | rtn = (rtn == false) ? !quoteDesc.isUpdateable() : rtn; |
| | | return rtn; |
| | | } |
| | | //見積調整金額 |
| | | //public Decimal QuoAmount { get; set; } |
| | | //public Decimal QuoCalculation { get; set; } |
| | | //見積 |
| | | public Pricebook2 standardPricebook; // 画面上使わないため、get setなし |
| | | public Quote quo { get; set; } |
| | | public Decimal quoStocking_Price_c { get; set; } |
| | | public String fileName { get; set; } |
| | | public String strExpirationDate { get; set; } |
| | | public List<QELine> csv_activities {get;set;} |
| | | public Blob contentFile { get; set; } |
| | | public String nameFile { get; set; } |
| | | |
| | | //Get Opportunity Object |
| | | public Opportunity opp; |
| | | public String openType { get; set; } |
| | | public boolean isService { get; set; } |
| | | public boolean is_Parts_direct { get; set; } |
| | | public boolean is_Parts_dealer { get; set; } |
| | | public boolean is_hidden_user { get; set; } |
| | | public boolean is_dealer_user { get; set; } |
| | | |
| | | private Map<Id, Product2> prd2LatestValMap; |
| | | public boolean is_hidden_all { get; set; } |
| | | public Decimal dealer_coefficient { get; set; } |
| | | |
| | | public boolean errorflg { get; set; } |
| | | public String errorMessage { get; set; } |
| | | public String errorMessagechack { get; set; } |
| | | public String baseUrl { get; set; } |
| | | public boolean Messageflg { get; set; } |
| | | public String Message { get; set; } |
| | | public Boolean viewSpecialAgencyAmout { get; set; } |
| | | public Boolean displayFlg { get; set; } |
| | | public QuoteBean qb { get; set; } |
| | | public Integer rowIdx { get; set; } |
| | | public Boolean specialDealer { get; set; } |
| | | //XHL-20190426-AddStart |
| | | public String setProduct_text { get; set; } |
| | | public Integer activitiesSize {get;set;} |
| | | public Integer singleNo {get;set;} |
| | | public Map<String,String> errorMap {get;set;} |
| | | public String singleProduct {get; private set;} |
| | | public Map<String,String> quoteLineSetNameDiscountMap {get; private set;} |
| | | public String quoteLineSetNameDiscountJson {get; private set;} |
| | | //XHL-20190426-AddEnd |
| | | public Opportunity opp {get;set;} |
| | | |
| | | public NewQuoteEntryController() { |
| | | quoteEntryMaxLine = Integer.valueOf(System.Label.QuoteEntryMaxLine2); |
| | | //Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8'); |
| | | baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); |
| | | changedAfterPrint = false; |
| | | changedAfterBid = false; |
| | | productStatusUpdated = false; |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | over3month = false; |
| | | newQuoteFlag = false; |
| | | } |
| | | // WLIG-BTA8C2 XHL 20200925 -Start |
| | | public String initStringConcatenation; |
| | | public String saveStringConcatenation; |
| | | public Boolean verifyProductValidFlag; |
| | | // WLIG-BTA8C2 XHL 20200925 -End |
| | | private static Map<String, String> paymentTermsMap = new Map<String, String> { |
| | | 'Z001' => '预收款/预付款', |
| | | 'Z002' => '立即付款', |
| | | 'Z003' => '月结30天内付款', |
| | | 'Z004' => '月结60天内付款', |
| | | 'Z005' => '月结90天内付款', |
| | | 'Z006' => '月结120天内付款', |
| | | 'Z007' => '月结25天内付款', |
| | | 'Z008' => '月结55天内付款', |
| | | 'Z009' => '月结85天内付款', |
| | | 'Z010' => '月结115天内付款', |
| | | 'Z011' => '月结175天内付款', |
| | | 'Z012' => '月结205天内付款', |
| | | 'Z013' => '半月结,15日之前发货,当月15日到期', |
| | | 'Z014' => '月结30天内付款', |
| | | 'Z015' => '验收后15天电汇', |
| | | 'Z020' => '100%发货后30天内支付', |
| | | 'Z021' => '100%发货后60天内电汇支付', |
| | | 'Z030' => '收到发票后30天内电汇', |
| | | 'Z045' => '月结45天内付款', |
| | | 'Z060' => '收到发票后60天内电汇', |
| | | 'Z075' => '收到发票后75天内电汇', |
| | | 'Z090' => '收到发票后90天内电汇', |
| | | 'Z0LC' => '100% L/C (90/10)', |
| | | 'Z120' => '收到发票后120天内电汇', |
| | | 'Z1LC' => '100% L/C (80/20)', |
| | | 'Z1TT' => '90%TT ADV,10%TT AFTER', |
| | | 'Z2LC' => '100% L/C (70/30)', |
| | | 'Z2TT' => '80%TT ADV,20%TT AFTER', |
| | | 'Z30E' => '下月末', |
| | | 'Z3LC' => '100% L/C 90 days', |
| | | 'Z3TT' => '70%TT ADV,30%TT AFTER', |
| | | 'Z4LC' => '90%L/CTransfer 10%TT AFTER', |
| | | 'Z4TT' => '100% TT AFTER', |
| | | 'Z5LC' => '100%L/C at sight Transfer', |
| | | 'Z5TT' => '30% TT ADV,50% TT AT SIGHT,20% TT AFTER', |
| | | 'Z60E' => '下2个月末', |
| | | 'Z6LC' => '100%L/C (85/15)', |
| | | 'Z6TT' => '30% TT ADV,60% TT AT SIGHT,10% TT AFTER', |
| | | 'Z7LC' => '100% L/C (60/40)', |
| | | 'Z7TT' => '100%TT AFTER(80/20)', |
| | | 'Z8TT' => '100% TT AFTER(70/30)', |
| | | 'Z9TT' => '100%TT发货后20天内支付', |
| | | 'ZCOD' => 'C.O.D.', |
| | | 'ZD60' => '立即应付的 到期净值', |
| | | 'ZFR1' => '半月结,15日之前发货,当月15日到期', |
| | | 'ZL6T' => '90% LC 60 days,10% TT AFTER', |
| | | 'ZL95' => '95% L/C AFTER,5% L/C AFTER 6M FROM ACCEPTANCE DATE', |
| | | 'ZLC1' => '100% L/C (90/10) Transfer', |
| | | 'ZLC2' => '100% L/C AT SIGHT (95/5)', |
| | | 'ZLT1' => '90%LC,10%TT', |
| | | 'ZLT2' => '80%LC,20%TT', |
| | | 'ZLT3' => '70%LC,30%TT', |
| | | 'ZLT4' => '95%LC,5%TT', |
| | | 'ZLT5' => '50%L/C,50%TT after', |
| | | 'ZT20' => '20% T/T ADV,80% T/T AFTER', |
| | | 'ZT30' => '30% T/T ADV, 70%T/T AFTER', |
| | | 'ZT35' => '35% TT ADV,65% TT AFTER', |
| | | 'ZT40' => '40% TT ADV,60% TT AFTER', |
| | | 'ZT50' => '50% TT ADV,50% TT AFTER', |
| | | 'ZT55' => '95%TT ADV,5%TT AFTER', |
| | | 'ZT90' => '验收合格后T/T支付90%,设备正常运行三个月T/T支付10%', |
| | | 'ZTT1' => 'TT AFTER DELIVERY 45 DAY', |
| | | 'ZTT2' => 'TT AFTER DELIVERY 120 DAY', |
| | | 'ZTT3' => '100%TT发货后15个工作日内支付', |
| | | 'ZTT4' => '验收合格后T/T支付80%,设备正常运行三个月T/T支付20%', |
| | | 'ZZ60' => '60 DAYS AFTER ISSUING INVOICE', |
| | | 'ZZ95' => '95% L/C AFTER,5% T/T AFTER 6M FROM ACCEPTANCE DATE', |
| | | 'ZZLC' => '100% L/C AT SIGHT', |
| | | 'ZZTT' => '100% TT IN ADVANCE', |
| | | 'Z022' => '100% T/T WITHIN 90 DAYS AFTER SHIPMENT' |
| | | }; |
| | | |
| | | public NewQuoteEntryController(ApexPages.StandardController controller) { |
| | | this(); |
| | | } |
| | | public NewQuoteEntryController() { |
| | | |
| | | public PageReference init() { |
| | | initStringConcatenation = ''; |
| | | saveStringConcatenation = ''; |
| | | verifyProductValidFlag = false; |
| | | |
| | | system.debug('============start init=============='); |
| | | boolean quoteflg = true; |
| | | WinOrDecideAlert = false; |
| | | errorflg = false; |
| | | displayFlg = true; |
| | | //Quote |
| | | standardPricebook = ControllerUtil.getStandardPricebook(); |
| | | quo = new Quote(); |
| | | qb = new QuoteBean(); |
| | | String DeveloperName = ''; |
| | | //Opportunityid |
| | | if (oppId == null) { |
| | | oppId = System.currentPageReference().getParameters().get('oppid'); |
| | | if (oppId == Null) { |
| | | quoId = System.currentPageReference().getParameters().get('id'); |
| | | |
| | | List<Quote> ql = New List<Quote>(); |
| | | //添加行 |
| | | ql = [select Id, OpportunityId, Opportunity.RecordType.DeveloperName,LineItemCount From Quote Where Id = :quoId]; |
| | | if (ql.size() > 0) { |
| | | oppId = ql[0].OpportunityId; |
| | | //添加行 |
| | | if(ql[0].LineItemCount >quoteEntryMaxLine){ |
| | | quoteEntryMaxLine = ql[0].LineItemCount; |
| | | } |
| | | DeveloperName = ql[0].Opportunity.RecordType.DeveloperName; |
| | | } |
| | | } else { |
| | | quoId = System.currentPageReference().getParameters().get('copyid'); |
| | | system.debug('copyid++++++++++++'+quoId); |
| | | if (quoId != null) { |
| | | // コピーのデータが後で作成する |
| | | } else { |
| | | List<Quote> ql = New List<Quote>(); |
| | | //添加行 |
| | | ql = [select Id, OpportunityId,LineItemCount From Quote Where OpportunityId = :oppId]; |
| | | if (ql.size() > 0) { |
| | | //添加行 |
| | | if(ql[0].LineItemCount >quoteEntryMaxLine){ |
| | | quoteEntryMaxLine = ql[0].LineItemCount; |
| | | singleProduct = System.Label.SingleProduct; |
| | | quoteEntryMaxLine = Integer.valueOf(System.Label.QuoteEntryMaxLine); |
| | | quoteEntryMaxSet = Integer.valueOf(System.Label.QuoteEntryMaxSet); |
| | | hidFlg = new List<Boolean>(30); |
| | | for (Integer i = 0; i < 30; i++) { |
| | | if (i<quoteEntryMaxSet) { |
| | | hidFlg[i] = true; |
| | | } else { |
| | | hidFlg[i] = false; |
| | | } |
| | | quoteflg = true; |
| | | } else { |
| | | quoteflg = false; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (DeveloperName == 'SI_Oppor') { |
| | | PageReference pageRef = new PageReference('/apex/SI_NewQuoteEntry?id=' + quoId); |
| | | return pageRef; |
| | | } |
| | | system.debug('DeveloperName============' + DeveloperName); |
| | | //--User |
| | | List<User> us = New List<User>(); |
| | | String userid = UserInfo.getUserId(); |
| | | if (userid != null) { |
| | | us = [Select Quote_Correct__c, Quote_Special_Operation__c, Cost_Referable__c, ViewSpecialAgencyAmout__c From User Where Id = :userid]; |
| | | if (us.size() > 0) { |
| | | verified = us[0].Quote_Correct__c; |
| | | specialAuthority = us[0].Quote_Special_Operation__c; |
| | | displayCost = us[0].Cost_Referable__c; |
| | | viewSpecialAgencyAmout = us[0].ViewSpecialAgencyAmout__c; |
| | | } |
| | | } |
| | | //--Opportunity |
| | | List<Opportunity> oppList = New List<Opportunity>(); |
| | | String accountid; |
| | | |
| | | oppList = [SELECT Account.Name, Account.RecordType.DeveloperName, |
| | | CLBIC_Category__c, HP_Name__c, Name, CurrencyIsoCode, Wholesale_Price__c, Department_Name__c, |
| | | Direct_Separate__c, Trade__c, AccountId, New_Opportunity__c, Estimation_Decision__c, SAP_Send_OK__c, Sales_Root__c, |
| | | Agency1__c, Agency2__c, Stocking_Price__c, Purchasing_Cost__c, Opportunity_No__c, StageName, |
| | | Agency1__r.Special__c, Agency2__r.Special__c, Account.Parent.Special__c |
| | | // LHJ Start |
| | | , Authorized_DB_No__c, Authorized_Finish_Sales__c, If_Need_Authorize__c |
| | | // LHJ End |
| | | // 多年保修 start |
| | | , Gurantee_Period__c , multiYearWarranty__c, MultiYearWarrantyTotalPrice__c |
| | | // 多年保修 end |
| | | // CHAN-BEN5UC start |
| | | , Hospital__c, Department_Class__c |
| | | ,Is_Corrosion__c, |
| | | // CHAN-BEN5UC end |
| | | //【是否需要价格申请】 thh start |
| | | If_Need_PriceApply__c |
| | | //【是否需要价格申请】 thh end |
| | | FROM Opportunity Where Id = :oppId]; |
| | | // 多年保修 start |
| | | trade = '外貿'; |
| | | // 多年保修 end |
| | | if (oppList.size() > 0) { |
| | | |
| | | opp = oppList[0]; |
| | | // 多年保修 start |
| | | trade = opp.Trade__c; |
| | | // 多年保修 end |
| | | QuoteDecision = opp.Estimation_Decision__c; |
| | | QuoteDecide = QuoteDecision; |
| | | QuoteSapSented = opp.SAP_Send_OK__c; |
| | | QuoteCorrect = opp.New_Opportunity__c; |
| | | |
| | | enableSales = false; |
| | | if (opp.Sales_Root__c != null) { |
| | | if (opp.Sales_Root__c == '販売店') { |
| | | enableSales = true; |
| | | opp.Sales_Root__c = System.Label.Sales_Outlet; |
| | | } else { |
| | | enableSales = false; |
| | | opp.Sales_Root__c = System.Label.OCM_Direct; |
| | | } |
| | | } |
| | | |
| | | accountid = opp.AccountId; |
| | | |
| | | if (QuoteDecision == true) { |
| | | enableContract = true; |
| | | } else { |
| | | enableContract = false; |
| | | } |
| | | |
| | | oppInfo = new OppInfo(opp); |
| | | |
| | | if (opp.SAP_Send_OK__c == false) { |
| | | displayFlg = true; |
| | | } else { |
| | | if (opp.Agency1__r.Special__c || opp.Agency1__r.Special__c || opp.Account.Parent.Special__c) { |
| | | // 特別販売店の引合い |
| | | if (viewSpecialAgencyAmout) { |
| | | displayFlg = true; |
| | | } else { |
| | | displayFlg = false; |
| | | } |
| | | } else { |
| | | displayFlg = true; |
| | | } |
| | | } |
| | | } |
| | | |
| | | //Quote |
| | | Integer i; |
| | | if (quoId == null) { |
| | | quoId = System.currentPageReference().getParameters().get('id'); |
| | | } |
| | | if (quoId == null) { |
| | | if (quoteflg == false) { |
| | | //商談商品が存在、見積が存在しないデータの対応 |
| | | List<OpportunityLineItem> items = New List<OpportunityLineItem>(); |
| | | if (oppId == null) { |
| | | oppId = System.currentPageReference().getParameters().get('oppid'); |
| | | } |
| | | items = [Select Id, Asset_Model_No__c, SFDA_Status__c, Name__c, ProductCode__c, PricebookEntry.Product2.StorageStatus__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段,不可取消多年保&& 增加检索阿西赛多 2020/09/10start |
| | | Qty_Unit__c, Cost__c, UnitPrice, ListPrice__c, Quantity, BSS_Category__c, TotalPrice,PricebookEntry.Product2.VenderName__c,PricebookEntry.Product2.CanNotCancelledGurantee__c,PricebookEntry.Product2.Is_DangerousChemicals__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | PricebookEntry.Product2.SFDA_Status__c, Product_Cost__c, Product_ListPrice__c, PricebookEntry.Product2.Sales_Possibility__c, PricebookEntry.Product2.Name, |
| | | PricebookEntryId, PricebookEntry.Product2Id, Opportunity.Trade__c, PricebookEntry.Product2.Intra_Trade_List_RMB__c, PricebookEntry.Product2.Intra_Trade_Cost_RMB__c, |
| | | PricebookEntry.Product2.Foreign_Trade_List_US__c, PricebookEntry.Product2.Packing_list_manual__c, PricebookEntry.Product2.Foreign_Trade_Cost_US__c, UnitPrice__c, TotalPrice__c |
| | | , AgencyUnitPrice__c, AgencySubtotal__c, Present__c // CHAN-B4YAB8 2018/09/29 业务机会产品的赠送、经销商小计、单价 |
| | | //多年保修 start |
| | | , multiYearWarranty__c , If_Cancel_Guarantee__c , GuaranteePeriod__c, |
| | | ServicePrice__c , GuranteePrice__c, |
| | | ProductEntend_gurantee_period_all__c, |
| | | ProductGuranteePrice__c, GuranteeType__c, |
| | | //ProductIfConsumable__c, |
| | | warrantyType__c, productServicePrice__c, |
| | | NoDiscountTotal__c |
| | | , provistonPeriod__c |
| | | , PricebookEntry.Product2.Entend_gurantee_period_all__c |
| | | , PricebookEntry.Product2.Intra_Trade_Gurantee_RMB__c |
| | | , PricebookEntry.Product2.Intra_Trade_Service_RMB__c |
| | | , PricebookEntry.Product2.GuranteeType__c |
| | | // 维修合同报价 |
| | | , PricebookEntry.Product2.Maintenance_Price_Year__c |
| | | , Maintenance_Price_Year__c |
| | | //多年保修 end |
| | | //外贸多年保 2021/01/04 精琢技术 wql start |
| | | //维修合同报价(USD) |
| | | ,PricebookEntry.Product2.Repair_Contract_USD__c |
| | | //计提金额(不含税,USD) |
| | | ,PricebookEntry.Product2.Intra_Trade_Foreign_RMB__c |
| | | //NoDiscount 金额(USD) |
| | | ,PricebookEntry.Product2.NoDiscount_Foreign__c |
| | | //外贸多年保 2021/01/04 精琢技术 wql end |
| | | |
| | | //SFDC停止预警 lt 20211009 start |
| | | ,PricebookEntry.Product2.Estimated_ConsumptionDueDate__c |
| | | //SFDC停止预警 lt 20211009 end |
| | | |
| | | From OpportunityLineItem |
| | | Where OpportunityId = :oppId Order by Item_Order__c, Id]; |
| | | |
| | | if (items.size() > 0) { |
| | | activities = new List<QELine>(); |
| | | i = 0; |
| | | |
| | | for (OpportunityLineItem o : items) { |
| | | QELine c = new QELine(o, i); |
| | | activities.add(c); |
| | | i++; |
| | | } |
| | | for (integer j = i; j < quoteEntryMaxLine; j++) { |
| | | QELine c = new QELine(j); |
| | | activities.add(c); |
| | | } |
| | | productStatusUpdated = true; |
| | | |
| | | } else { |
| | | //新規リストコントローラの取得 |
| | | if (activities == null) { |
| | | activities = new List<QELine>(); |
| | | for (i = 0; i < quoteEntryMaxLine; i++) { |
| | | QELine active_activity = new QELine(i); |
| | | activities.add(active_activity); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | //新規リストコントローラの取得 |
| | | if (activities == null) { |
| | | activities = new List<QELine>(); |
| | | for (i = 0; i < quoteEntryMaxLine; i++) { |
| | | QELine active_activity = new QELine(i); |
| | | activities.add(active_activity); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | //添加行 |
| | | List<Quote> quoList = |
| | | [ SELECT Id, Name, Cancel_Decide__c, CreatedDate, PriceRefreshDate__c, Quote_Print_Date__c, |
| | | Dealer_Final_Price__c, TotalPrice__c, Estimation_List_Price__c, QuoteNumber, |
| | | QuoteToName, Quote_Expiration_Date__c, Quote_Comment__c, Stocking_Price__c, Unit_Price__c, |
| | | Offer_Amount__c, TOTAL__c, Discount__c, Pricing__c, Preferential_Trading_Price__c, Contract__c, |
| | | Agency1__c, OCM_Agent1_Price__c, Agency1_Profit__c, Agency1_Profit_Rate__c, Print_HP_Name__c, |
| | | Agency2__c, Agent1_Agent2_Price__c, Agency2_Profit__c, Agency2_Profit_Rate__c, Quote_No__c, |
| | | Quote_Adjust_Amount__c, Quote_Adjust_Calculate__c, Discount_Amount__c, Discount_Amount_Calculate__c, Installation_location__c, |
| | | QuoteTotal_Page__c, Dealer_Final_Price_Page__c, Quote_Adjust_Amount_Page__c, OCM_Agent1_Price_Page__c, Agent1_Agent2_Price_Page__c |
| | | , AgencyDiscount__c // 2018/09/28 CHAN-B4YAB8 经销商折扣 |
| | | // 多年保修 start |
| | | , Gurantee_Period__c , multiYearWarranty__c, MultiYearWarrantyTotalPrice__c, |
| | | Preferential_Gurantee_Period__c,LineItemCount |
| | | // 多年保修 end |
| | | //报价试算 start |
| | | ,IsQuoteTrial__c |
| | | //报价试算 end |
| | | FROM Quote Where Id = :quoId]; |
| | | List<QuoteLineItem> items = |
| | | [Select Id, Asset_Model_No__c, SFDA_Status__c, Product_Sales_Possibility__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段 不可取消多年保&&增加检索阿西赛多 2020/09/10 |
| | | Name__c, BSS_Category__c, Quote.Quote_Print_Date__c,PricebookEntry.Product2.VenderName__c,PricebookEntry.Product2.CanNotCancelledGurantee__c,PricebookEntry.Product2.Is_DangerousChemicals__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | Qty_Unit__c, Cost__c, UnitPrice__c, ListPrice__c, Quantity, TotalPrice__c, |
| | | PricebookEntry.Product2.SFDA_Status__c, ProductCode__c, Product_Cost__c, Product_ListPrice__c, PricebookEntry.Product2.Sales_Possibility__c, PricebookEntry.Product2.Name, |
| | | PricebookEntryId, PricebookEntry.Product2Id, UnitPrice_Page__c, PricebookEntry.Product2.Packing_list_manual__c, PricebookEntry.Product2.StorageStatus__c |
| | | , AgencyUnitPrice__c, AgencySubtotal__c, Present__c // CHAN-B4YAB8 2018/9/29 赠送、经销商单价和小计 |
| | | // 多年保修 start |
| | | //ET促销标记 start |
| | | , multiYearWarranty__c , If_Cancel_Guarantee__c , GuaranteePeriod__c, |
| | | //ET促销标记 end |
| | | ServicePrice__c , GuranteePrice__c, ProductEntend_gurantee_period_all__c, |
| | | ProductGuranteePrice__c, GuranteeType__c, |
| | | warrantyType__c, productServicePrice__c, NoDiscountTotal__c |
| | | , provistonPeriod__c |
| | | , PricebookEntry.Product2.Entend_gurantee_period_all__c |
| | | , PricebookEntry.Product2.Intra_Trade_Gurantee_RMB__c |
| | | , PricebookEntry.Product2.Intra_Trade_Service_RMB__c |
| | | , PricebookEntry.Product2.GuranteeType__c |
| | | // 维修合同报价 |
| | | , PricebookEntry.Product2.Maintenance_Price_Year__c |
| | | , Maintenance_Price_Year__c |
| | | // 多年保修 end |
| | | //外贸多年保 2021/01/04 精琢技术 wql start |
| | | //维修合同报价(USD) |
| | | ,PricebookEntry.Product2.Repair_Contract_USD__c |
| | | //计提金额(不含税,USD) |
| | | ,PricebookEntry.Product2.Intra_Trade_Foreign_RMB__c |
| | | //NoDiscount 金额(USD) |
| | | ,PricebookEntry.Product2.NoDiscount_Foreign__c |
| | | ,Quote.Opportunity.Trade__c |
| | | //外贸多年保 2021/01/04 精琢技术 wql end |
| | | |
| | | //SFDC停止预警 lt 20211009 start |
| | | ,PricebookEntry.Product2.Estimated_ConsumptionDueDate__c |
| | | //SFDC停止预警 lt 20211009 end |
| | | |
| | | From QuoteLineItem where Quoteid = :quoId Order by Item_Order__c, Id]; |
| | | String copyQuoId = System.currentPageReference().getParameters().get('copyid'); |
| | | system.debug('copyid2++++++++++++'+copyQuoId); |
| | | CheckItem = items; |
| | | |
| | | if (copyQuoId == null) { |
| | | } else { |
| | | // copyの場合、quoIdをnullに戻す |
| | | quoId = null; |
| | | } |
| | | if (quoList.size() > 0) { |
| | | //添加行 |
| | | if(quoList[0].LineItemCount >quoteEntryMaxLine){ |
| | | quoteEntryMaxLine = quoList[0].LineItemCount; |
| | | } |
| | | if (copyQuoId == null) { |
| | | quo = quoList[0]; |
| | | quo.QuoteName__c = quo.Name; |
| | | // 多年保修 start |
| | | quoteGurantee_Period = quo.Gurantee_Period__c; |
| | | quotemultiYearWarranty = '' + quo.multiYearWarranty__c; |
| | | // 多年保修 end |
| | | //报价试算 增加经销商前后对比 wql 20210508 start |
| | | agency1Name = quo.Agency1__c; |
| | | agency2Name = quo.Agency2__c; |
| | | //报价试算 增加经销商前后对比 wql 20210508 end |
| | | // 多年保修 start |
| | | //HWAG-BLDE6J 带出字段 2020/02/10 Start |
| | | quo.Gurantee_Period__c = quoList[0].Gurantee_Period__c; |
| | | quo.multiYearWarranty__c = quoList[0].multiYearWarranty__c; |
| | | quo.MultiYearWarrantyTotalPrice__c = quoList[0].MultiYearWarrantyTotalPrice__c; |
| | | // 多年保修 end |
| | | qb.setPriceRefreshPeriodByDate(quo.PriceRefreshDate__c == null ? quo.CreatedDate.Date() : quo.PriceRefreshDate__c); |
| | | qb.Estimation_List_Price = quo.Estimation_List_Price__c; |
| | | quo.QuoteTotal_Page__c = quo.TotalPrice__c; |
| | | quo.Dealer_Final_Price_Page__c = quo.Dealer_Final_Price__c; |
| | | qb.Quote_Adjust_Calculate = quo.Quote_Adjust_Calculate__c; |
| | | quo.Quote_Adjust_Amount_Page__c = quo.Quote_Adjust_Amount__c; |
| | | DisCalculation = quo.Discount_Amount_Calculate__c; |
| | | DisAmount = quo.Discount_Amount__c; |
| | | quo.Agency1__c = quo.Agency1__c; |
| | | AgencyDiscount = quo.AgencyDiscount__c; //2018/09/28 CHAN-B4YAB8 经销商折扣 |
| | | quo.OCM_Agent1_Price_Page__c = quo.OCM_Agent1_Price__c; |
| | | Salesprofit1 = quo.Agency1_Profit__c; |
| | | qb.SalesCalculation1 = quo.Agency1_Profit_Rate__c; |
| | | // quo.Agency1_Profit_Rate__c = quo.Agency1_Profit_Rate__c; |
| | | quo.Agency2__c = quo.Agency2__c; |
| | | quo.Agent1_Agent2_Price_Page__c = quo.Agent1_Agent2_Price__c; |
| | | Salesprofit2 = quo.Agency2_Profit__c; |
| | | qb.SalesCalculation2 = quo.Agency2_Profit_Rate__c; |
| | | //HWAG-BLDE6J 带出字段 2020/02/10 end |
| | | } else { |
| | | |
| | | |
| | | //HWAG-BLDE6J 带出字段 2020/02/11 Start |
| | | // quo.QuoteName__c = ''; |
| | | quo = quoList[0]; |
| | | //再报价新出来的报价名称,把“已取消”三个字去掉 精琢技术 thh 2021-09-30 start |
| | | Integer QX = quo.Name.indexof('已取消:'); |
| | | System.debug('Name is ' + quo.Name + ', QX is ' + QX); |
| | | if (QX >= 0) { |
| | | quo.Name = quo.Name.subString(QX + 4); |
| | | } |
| | | //再报价新出来的报价名称,把“已取消”三个字去掉 精琢技术 thh 2021-09-30 end |
| | | //报价名称 |
| | | quo.QuoteName__c = quo.Name; |
| | | //再报价时是否进行过报价计算设为未进行过报价计算 fy 2021-11-23 start |
| | | quo.IsQuoteTrial__c = false; |
| | | //再报价时是否进行过报价计算设为未进行过报价计算 fy 2021-11-23 end |
| | | quo.Cancel_Decide__c = quo.Cancel_Decide__c; |
| | | quo.Cancel_Decide__c = false; |
| | | quo.PriceRefreshDate__c = Date.today(); |
| | | quo.Quote_Date__c = null; |
| | | quo.Quote_Print_Date__c = null; |
| | | //报价总额 |
| | | quo.QuoteTotal_Page__c = quo.TotalPrice__c; |
| | | //第一经销商 |
| | | quo.OCM_Agent1_Price_Page__c = quo.OCM_Agent1_Price__c; |
| | | //第二经销商 |
| | | quo.Agent1_Agent2_Price_Page__c = quo.Agent1_Agent2_Price__c; |
| | | //医院的合同金额 |
| | | quo.Dealer_Final_Price_Page__c = quo.Dealer_Final_Price__c; |
| | | //HWAG-BLDE6J 带出字段 2020/02/11 end |
| | | } |
| | | // 多年保修 start |
| | | // quo.Gurantee_Period__c = quoList[0].Gurantee_Period__c; |
| | | // quo.multiYearWarranty__c = quoList[0].multiYearWarranty__c; |
| | | // quo.MultiYearWarrantyTotalPrice__c = quoList[0].MultiYearWarrantyTotalPrice__c; |
| | | // // 多年保修 end |
| | | // qb.setPriceRefreshPeriodByDate(quo.PriceRefreshDate__c == null ? quo.CreatedDate.Date() : quo.PriceRefreshDate__c); |
| | | // qb.Estimation_List_Price = quo.Estimation_List_Price__c; |
| | | // quo.QuoteTotal_Page__c = quo.TotalPrice__c; |
| | | // quo.Dealer_Final_Price_Page__c = quo.Dealer_Final_Price__c; |
| | | // qb.Quote_Adjust_Calculate = quo.Quote_Adjust_Calculate__c; |
| | | // quo.Quote_Adjust_Amount_Page__c = quo.Quote_Adjust_Amount__c; |
| | | // DisCalculation = quo.Discount_Amount_Calculate__c; |
| | | // DisAmount = quo.Discount_Amount__c; |
| | | // quo.Agency1__c = quo.Agency1__c; |
| | | // AgencyDiscount = quo.AgencyDiscount__c; //2018/09/28 CHAN-B4YAB8 经销商折扣 |
| | | // quo.OCM_Agent1_Price_Page__c = quo.OCM_Agent1_Price__c; |
| | | // Salesprofit1 = quo.Agency1_Profit__c; |
| | | // qb.SalesCalculation1 = quo.Agency1_Profit_Rate__c; |
| | | // // quo.Agency1_Profit_Rate__c = quo.Agency1_Profit_Rate__c; |
| | | // quo.Agency2__c = quo.Agency2__c; |
| | | // quo.Agent1_Agent2_Price_Page__c = quo.Agent1_Agent2_Price__c; |
| | | // Salesprofit2 = quo.Agency2_Profit__c; |
| | | // qb.SalesCalculation2 = quo.Agency2_Profit_Rate__c; |
| | | // quo.Agency2_Profit_Rate__c = quo.Agency2_Profit_Rate__c; |
| | | } |
| | | |
| | | activities = new List<QELine>(); |
| | | i = 0; |
| | | QELine c = new QELine(i); |
| | | if (items.size() > 0) { |
| | | for (QuoteLineItem o : items) { |
| | | c = new QELine(o, i, copyQuoId); |
| | | activities.add(c); |
| | | i++; |
| | | } |
| | | |
| | | for (integer j = i; j < quoteEntryMaxLine; j++) { |
| | | c = new QELine(j); |
| | | activities.add(c); |
| | | } |
| | | |
| | | } else { |
| | | activities = new List<QELine>(); |
| | | for (i = 0; i < quoteEntryMaxLine; i++) { |
| | | QELine active_activity = new QELine(i); |
| | | activities.add(active_activity); |
| | | } |
| | | } |
| | | //****************************************************************************************** |
| | | // 增加检测产品状态是否发生变化 |
| | | //****************************************************************************************** |
| | | |
| | | // CHAN-BHN7P5 start |
| | | |
| | | //全件洗い替えします。 |
| | | if (activities.size() > 0 && !QuoteDecision) { |
| | | productStatusUpdated = false; |
| | | for (QELine a : activities) { |
| | | if (string.isNotEmpty(a.Asset_Model)) { |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | // 只要更新,就生成新报价编码 |
| | | if (a.PageObject.SFDA_Status__c != a.latestInfo.SFDA_Status || |
| | | a.PageObject.Name__c != a.latestInfo.ProductName || |
| | | a.ListPrice_Page != a.latestInfo.ListPrice || |
| | | a.PageObject.Cost__c != a.latestInfo.Cost || |
| | | a.Cost_c != a.latestInfo.Cost |
| | | // 多年保修 start |
| | | //计提金额 |
| | | || a.ProductGuranteePrice != a.latestInfo.Intra_Trade_Gurantee |
| | | || a.PageObject.productServicePrice__c != a.latestInfo.Intra_Trade_Service |
| | | // 维修合同报价 |
| | | || a.Maintenance_Price_Year != a.latestInfo.Maintenance_Price_Year |
| | | || a.PageObject.GuranteeType__c != a.latestInfo.GuranteeType |
| | | || a.PageObject.ProductEntend_gurantee_period_all__c != a.latestInfo.ProductEntend_gurantee_period_all |
| | | //不可取消多年保 询价根据勾不同 自动更新价格 精琢技术 wql 20200924 |
| | | || a.PageObject.PricebookEntry.Product2.CanNotCancelledGurantee__c != a.latestInfo.CanNotCancelledGurantee |
| | | //不可取消多年保 询价根据勾不同 自动更新价格 精琢技术 wql 20200924 |
| | | // 多年保修 end |
| | | ) { |
| | | system.debug('qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq:'); |
| | | system.debug('上次SFDA状态:'+a.PageObject.SFDA_Status__c); |
| | | system.debug('最新的SFDA状态:'+a.latestInfo.SFDA_Status); |
| | | system.debug('上次Name__c:'+a.PageObject.Name__c); |
| | | system.debug('最新的ProductName:'+a.latestInfo.ProductName); |
| | | system.debug('上次ListPrice:'+a.ListPrice_Page); |
| | | system.debug('最新的上次ListPrice:'+a.latestInfo.ListPrice); |
| | | system.debug('上次Cost__c:'+a.Cost_c); |
| | | system.debug('最新的Cost:'+a.latestInfo.Cost); |
| | | system.debug('上次Cost__c:'+a.Cost_c); |
| | | system.debug('最新的Cost:'+a.latestInfo.Cost); |
| | | system.debug('上次计提金额:'+a.ProductGuranteePrice); |
| | | system.debug('最新的计提金额:'+a.latestInfo.Intra_Trade_Gurantee); |
| | | system.debug('上次nodis:'+a.PageObject.productServicePrice__c); |
| | | system.debug('最新的nodis:'+a.latestInfo.Intra_Trade_Service); |
| | | system.debug('上次维修合同报价:'+a.Maintenance_Price_Year); |
| | | system.debug('最新的维修合同报价:'+a.latestInfo.Maintenance_Price_Year); |
| | | system.debug('上次GuranteeType__c:'+a.PageObject.GuranteeType__c); |
| | | system.debug('最新的GuranteeType__c:'+a.latestInfo.GuranteeType); |
| | | system.debug('上次ProductEntend_gurantee_period_all__c:'+a.PageObject.ProductEntend_gurantee_period_all__c); |
| | | system.debug('最新的ProductEntend_gurantee_period_all__c:'+a.latestInfo.ProductEntend_gurantee_period_all); |
| | | system.debug('上次CanNotCancelledGurantee__c:'+a.PageObject.PricebookEntry.Product2.CanNotCancelledGurantee__c); |
| | | system.debug('最新的CanNotCancelledGurantee__c:'+a.latestInfo.CanNotCancelledGurantee); |
| | | system.debug('newQuoteFlag11:'+newQuoteFlag); |
| | | newQuoteFlag = true; |
| | | productStatusUpdated = true; |
| | | } |
| | | if (a.pageObject.Name__c != a.latestInfo.ProductName) { |
| | | a.changed_name = true; |
| | | productStatusUpdated = true; |
| | | } |
| | | if (a.pageObject.SFDA_Status__c != a.latestInfo.SFDA_Status) { |
| | | a.changed_sfda = true; |
| | | productStatusUpdated = true; |
| | | } |
| | | if (a.ListPrice_Page != a.latestInfo.ListPrice) { |
| | | a.changed_list = true; |
| | | productStatusUpdated = true; |
| | | } |
| | | if (a.pageObject.Cost__c != a.latestInfo.Cost) { |
| | | a.changed_cost = true; |
| | | productStatusUpdated = true; |
| | | } |
| | | // TODO katsu SFDAステータスの確認などいらないですか(最新商品XXXの項目も) |
| | | |
| | | a.PageObject.SFDA_Status__c = a.latestInfo.SFDA_Status; |
| | | |
| | | a.PageObject.Name__c = a.latestInfo.ProductName; |
| | | a.ListPrice_Page = a.latestInfo.ListPrice; |
| | | a.PageObject.Cost__c = a.latestInfo.Cost; |
| | | a.Cost_c = a.latestInfo.Cost; |
| | | //多年保修 start |
| | | a.ProductGuranteePrice = a.latestInfo.Intra_Trade_Gurantee; |
| | | // 计提金额 |
| | | a.PageObject.productServicePrice__c = a.latestInfo.Intra_Trade_Service; |
| | | // 维修合同报价 |
| | | a.Maintenance_Price_Year = a.latestInfo.Maintenance_Price_Year; |
| | | // 多年保修年限 |
| | | a.PageObject.ProductEntend_gurantee_period_all__c |
| | | = a.latestInfo.ProductEntend_gurantee_period_all; |
| | | a.PageObject.GuranteeType__c = a.latestInfo.GuranteeType; |
| | | //多年保修 end |
| | | } |
| | | baseUrl = URL.getSalesforceBaseUrl().toExternalForm(); |
| | | String path = URL.getCurrentRequestUrl().getPath(); |
| | | if (path.indexOf('/apex') > 0) { |
| | | baseUrl += path.substring(0,path.indexOf('/apex')); |
| | | } else if (path.indexOf('production/') > 0) { |
| | | baseUrl += '/production'; |
| | | } |
| | | rtUrl = System.currentPageReference().getParameters().get('retURL'); |
| | | System.debug('path: ' + path); |
| | | System.debug('baseUrl: ' + baseUrl); |
| | | System.debug('rtUrl: ' + rtUrl); |
| | | if (rtUrl == null || rtUrl == 'null') { |
| | | rtUrl = ''; |
| | | } |
| | | |
| | | } |
| | | pageArrange(); |
| | | |
| | | // CHAN-BHN7P5 end |
| | | // CHAN-BHN7P5 原逻辑 start |
| | | // else { |
| | | // List<String> product2Ids = New List<String>(); |
| | | // if (activities.size() > 0) { |
| | | // for (QELine a : activities) { |
| | | // if (String.isBlank(a.PageObject.Id__c) == false) { |
| | | // product2Ids.add(a.PageObject.Id__c); |
| | | // } |
| | | // } |
| | | // } |
| | | // Map<String, QuoteLineItem> loopMap = new Map<String, QuoteLineItem>(); |
| | | // if (CheckItem.size() > 0) { |
| | | // for (QuoteLineItem qli : CheckItem) { |
| | | // loopMap.put(qli.PricebookEntry.Product2Id, qli); |
| | | // } |
| | | // } |
| | | // // ここを修正したら、NFM007.triggerも要確認 |
| | | // prd2LatestValMap = new Map<Id, Product2>(); |
| | | // if (CheckItem.size() > 0) { |
| | | // List<Product2> plo = [Select Id, Name, Estimation_Entry_Possibility__c, SFDA_Status__c, Packing_list_manual__c, |
| | | // Intra_Trade_List_RMB__c, Foreign_Trade_List_US__c, |
| | | // Intra_Trade_Cost_RMB__c, Foreign_Trade_Cost_US__c |
| | | // // 多年保修 start |
| | | // , Intra_Trade_Gurantee_RMB__c |
| | | // , Intra_Trade_Service_RMB__c |
| | | // , Maintenance_Price_Year__c |
| | | // // 多年保修 end |
| | | // From Product2 Where Id IN :product2Ids]; |
| | | // if (plo.size() > 0) { |
| | | // for (Product2 prd2 : plo) { |
| | | // Decimal listPrice = 0; |
| | | // Decimal costPrice = 0; |
| | | // //多年保修 start |
| | | // decimal ProductGuranteePrice = 0; |
| | | // decimal productService = 0; |
| | | // decimal productMaintenance_Price_Year = 0; |
| | | // //多年保修 end |
| | | // if (opp.Trade__c == '内貿') { |
| | | // listPrice = prd2.Intra_Trade_List_RMB__c; |
| | | // costPrice = prd2.Intra_Trade_Cost_RMB__c; |
| | | // //多年保修 start |
| | | // ProductGuranteePrice = prd2.Intra_Trade_Gurantee_RMB__c; |
| | | // productService = prd2.Intra_Trade_Service_RMB__c; |
| | | // productMaintenance_Price_Year = prd2.Maintenance_Price_Year__c == null ? 0 : prd2.Maintenance_Price_Year__c; |
| | | // //多年保修 end |
| | | // } else if (opp.Trade__c == '外貿') { |
| | | // listPrice = prd2.Foreign_Trade_List_US__c; |
| | | // costPrice = prd2.Foreign_Trade_Cost_US__c; |
| | | // } |
| | | // if ( prd2.Name.replaceAll('\\s+', '') != loopMap.get(prd2.Id).Name__c.replaceAll('\\s+', '') || |
| | | // prd2.SFDA_Status__c != loopMap.get(prd2.Id).SFDA_Status__c || |
| | | // listPrice != loopMap.get(prd2.Id).ListPrice__c || |
| | | // costPrice != loopMap.get(prd2.Id).Cost__c |
| | | // // 多年保修 start |
| | | // || ( opp.Trade__c == '内貿' && |
| | | // (ProductGuranteePrice != loopMap.get(prd2.Id).ProductGuranteePrice__c |
| | | // || productService != loopMap.get(prd2.Id).productServicePrice__c |
| | | // || productMaintenance_Price_Year != |
| | | // loopMap.get(prd2.Id).Maintenance_Price_Year__c |
| | | // )) |
| | | // // 多年保修 end |
| | | // ) { |
| | | // WinOrDecideAlert = true; |
| | | // } |
| | | |
| | | // } |
| | | // } |
| | | |
| | | // } |
| | | // system.debug('WinOrDecideAlert:::::::2' + WinOrDecideAlert ); |
| | | // }// CHAN-BHN7P5 原逻辑 end |
| | | //****************************************************************************************** |
| | | // 增加检测产品状态是否发生变化==================End 20161115 by ZDF |
| | | //****************************************************************************************** |
| | | //system.debug('22222222222222' + quo); |
| | | } |
| | | |
| | | // 多年保修 start |
| | | if (quo.Gurantee_Period__c == null) { |
| | | quo.Gurantee_Period__c = '1'; |
| | | public NewQuoteEntryController(ApexPages.StandardController controller) { |
| | | this(); |
| | | } |
| | | |
| | | // 多年保修 end |
| | | //初期値設定 |
| | | if (accountid != null) { |
| | | List<Account> accs2 = [Select Id, RecordType.DeveloperName, Hospital__c, Agent_Ref__c From Account Where Id = :accountid]; |
| | | if (accs2.size() > 0) { |
| | | List<Account> accs = new List<Account>(); |
| | | if (accs2[0].RecordType.DeveloperName != 'AgencyContract') { |
| | | accs = [Select Id, Name, Site, Alias_Name2__c From Account Where Id = :accs2[0].Hospital__c]; |
| | | } else { |
| | | accs = [Select Id, Name, Site, Alias_Name2__c From Account Where Id = :accs2[0].Agent_Ref__c]; |
| | | } |
| | | if (accs.size() > 0) { |
| | | options_hp = new List<SelectOption>(); |
| | | if (accs[0].Name != null) { |
| | | options_hp.add(new SelectOption(accs[0].Name, accs[0].Name)); |
| | | } |
| | | if (accs[0].Site != null) { |
| | | options_hp.add(new SelectOption(accs[0].Site, accs[0].Site)); |
| | | } |
| | | if (accs[0].Alias_Name2__c != null) { |
| | | options_hp.add(new SelectOption(accs[0].Alias_Name2__c, accs[0].Alias_Name2__c)); |
| | | } |
| | | //初期値設定 |
| | | if (quo.Print_HP_Name__c == null) { |
| | | selection_hp = accs[0].Name; |
| | | } else { |
| | | selection_hp = quo.Print_HP_Name__c; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | public void init () { |
| | | specialerrorflg = false ; |
| | | activitiesSize = 0; |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | if (quo.Quote_Expiration_Date__c == null) { |
| | | quo.Quote_Expiration_Date__c = Date.today() + 30; |
| | | } |
| | | decideFlg = false; |
| | | isdecide = false; |
| | | printFlg = false; |
| | | doDecide = false; |
| | | productSegment = ''; |
| | | errorMap = new Map<String,String>(); |
| | | quoteLineSetNameDiscountMap = new Map<String,String>(); |
| | | quoteLineSetNameDiscountJson = ''; |
| | | isAdmin = false; |
| | | String profileId = UserInfo.getProfileId(); |
| | | profileId = profileId.substring(0, 15); |
| | | |
| | | //--Printbutton |
| | | if (QuoteCorrect == false) { |
| | | print_button = true; |
| | | } else if (verified == false) { |
| | | print_button = true; |
| | | } else { |
| | | print_button = false; |
| | | } |
| | | //--SAPButton |
| | | if (QuoteDecision == false) { |
| | | sap_button = true; |
| | | } else if (specialAuthority == false) { |
| | | sap_button = true; |
| | | } else { |
| | | sap_button = false; |
| | | } |
| | | //--Decisionbutton |
| | | if (verified == true) { |
| | | Decision_button = false; |
| | | } else if (QuoteCorrect == false) { |
| | | Decision_button = true; |
| | | } else if (QuoteDecision == true) { |
| | | Decision_button = true; |
| | | } else { |
| | | Decision_button = false; |
| | | } |
| | | // もし、すでに決定ずみの場合、決定ボタンをつかえないようにする |
| | | if (QuoteSapSented == true || QuoteDecision == true) { |
| | | Decision_button = true; |
| | | } |
| | | //--Savebutton |
| | | if (QuoteDecision == true) { |
| | | Save_button = true; |
| | | } else { |
| | | Save_button = false; |
| | | } |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | Datetime cDate = quo.CreatedDate; |
| | | over3month = cDate != null && cDate.date().addMonths(3) < Date.today(); |
| | | //新的获取简档ID calendarUtil.getMemberProfileID 这里用到的人员ID 和获取到的简档ID都是15位的 |
| | | String new_profileId = calendarUtil.getMemberProfileID(UserInfo.getUserId().subString(0,15)); |
| | | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | //Search Events============================================================ |
| | | // TODO ManualEntryと同様、jsにて解決できる、ここでwebserviceだけを実装、今後 by katsu |
| | | public PageReference setProductEntry() { |
| | | system.debug('-----:start'); |
| | | system.debug('○○○○○○○○○○○○○○○Welcome to setProductEntry!!'); |
| | | system.debug('▼▼▼▼▼setProduct_text:' + setProduct_text); |
| | | setOppFromOppInfo(); |
| | | List<String> productIDLIST = new List<String>(); |
| | | //既存データ数の確認 |
| | | Integer currentDetailNumber = 0; |
| | | for (QELine s : activities) { |
| | | //データ判定にAsset_Model_Noを使用 |
| | | if ((s.Asset_Model == null) || (s.Asset_Model == '')) { |
| | | break; |
| | | } |
| | | currentDetailNumber++; |
| | | } |
| | | |
| | | //既存データ数が150以上? |
| | | if (currentDetailNumber >= quoteEntryMaxLine) { |
| | | //添加行 |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message32; |
| | | PageArrange(); |
| | | system.debug('-----:強制終了:00'); |
| | | return null; |
| | | } |
| | | |
| | | // SearchSetProductから、セット品コードは渡ってきたか? |
| | | if (setProduct_text == null) { |
| | | // セット品コードが渡ってこなかった場合 |
| | | // 終了 |
| | | PageArrange(); |
| | | system.debug('-----:強制終了:01'); |
| | | return null; |
| | | } else { |
| | | productIDLIST = setProduct_text.split(','); |
| | | } |
| | | |
| | | // セット品明細の ProductId一覧を格納する |
| | | // pricebookEntry + product2へのクエリのWhere句で使用する |
| | | List<Id> productIds = null; |
| | | |
| | | // ---------------------------------------------------------------------------------------- |
| | | // 該当するセット品明細のレコードを取得 |
| | | // ---------------------------------------------------------------------------------------- |
| | | system.debug('-----:Product_Set_Detail__c select start'); |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段&&增加检索阿西赛多 start |
| | | List<Product_Set_Detail__c> productSetDetails = [SELECT Id, Product__c, Quantity__c, Product_Set__r.Name,Product__r.VenderName__c,Product__r.CanNotCancelledGurantee__c,Product__r.Is_DangerousChemicals__c FROM Product_Set_Detail__c Where Product_Set__c in :productIDLIST]; |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | system.debug('-----:Product_Set_Detail__c select end'); |
| | | if (productSetDetails.size() == 0) { |
| | | PageArrange(); |
| | | return null; |
| | | } else { |
| | | productIds = new List<Id>(); |
| | | for (Product_Set_Detail__c local : productSetDetails) { |
| | | productIds.add(local.Product__c); |
| | | } |
| | | } |
| | | |
| | | //=======Temporary===== |
| | | tmpactivities = activities; |
| | | |
| | | //=======Initialize========= |
| | | activities = new List<QELine>(); |
| | | |
| | | boolean lineflg = false; |
| | | |
| | | // ---------------------------------------------------------------------------------------- |
| | | // Product2へのクエリを実行 |
| | | // 一度Listで結果を受けた後に、Product2Idの Mapにする |
| | | // ---------------------------------------------------------------------------------------- |
| | | system.debug('-----:Product2 select start'); |
| | | Map<Id, Product2> items = new Map<Id, Product2>(); |
| | | List<Product2> products = [select Id, Name, ProductCode, |
| | | Foreign_Trade_Cost_US__c, Foreign_Trade_List_US__c, Intra_Trade_Cost_RMB__c, Intra_Trade_List_RMB__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段 |
| | | Asset_Model_No__c, Sales_Possibility__c, Estimation_Entry_Possibility__c,VenderName__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | SFDA_Status__c, Qty_Unit__c, BSSCategory__c, Packing_list_manual__c, StorageStatus__c |
| | | // 多年保修 start |
| | | , Entend_gurantee_period_all__c |
| | | , Intra_Trade_Gurantee_RMB__c |
| | | , Intra_Trade_Service_RMB__c |
| | | , GuranteeType__c |
| | | // 维修合同价格 |
| | | , Maintenance_Price_Year__c |
| | | // 多年保修 end |
| | | //增加检索 不可取消多年保 2020/08/27 |
| | | ,CanNotCancelledGurantee__c |
| | | //增加检索 阿西赛多 2020/09/10 start |
| | | ,Is_DangerousChemicals__c |
| | | //外贸多年保 2021/01/04 精琢技术 wql start |
| | | //维修合同报价(USD) |
| | | ,Repair_Contract_USD__c |
| | | //计提金额(不含税,USD) |
| | | ,Intra_Trade_Foreign_RMB__c |
| | | //NoDiscount 金额(USD) |
| | | ,NoDiscount_Foreign__c |
| | | //外贸多年保 2021/01/04 精琢技术 wql end |
| | | |
| | | //SFDC停止预警 lt 20211009 start |
| | | ,Estimated_ConsumptionDueDate__c |
| | | //SFDC停止预警 lt 20211009 end |
| | | |
| | | FROM Product2 Where Id IN :productIds |
| | | And Manual_Entry__c = false]; |
| | | for (Product2 product : products) { |
| | | items.put(product.Id, product); |
| | | } |
| | | system.debug('-----:Product2 select end'); |
| | | system.debug('-----:PricebookEntry select start'); |
| | | Map<Id, PricebookEntry> entries = new Map<Id, PricebookEntry>(); |
| | | List<PricebookEntry> workEntries = [ |
| | | SELECT Id, Product2Id |
| | | FROM PricebookEntry Where Product2Id IN :productIds |
| | | AND CurrencyIsoCode = :(opp.Trade__c == '外貿' ? 'USD' : 'CNY') |
| | | AND IsActive = true |
| | | ]; |
| | | for (PricebookEntry workEntry : workEntries) { |
| | | entries.put(workEntry.Product2Id, workEntry); |
| | | } |
| | | system.debug('-----:PricebookEntry select end'); |
| | | |
| | | // ---------------------------------------------------------------------------------------- |
| | | // 画面の明細行のループ |
| | | // ---------------------------------------------------------------------------------------- |
| | | Integer i = 0; |
| | | Integer rightcnt = 0; // 成功した数をカウント |
| | | for (QELine t : tmpactivities) { |
| | | |
| | | QELine a = New QELine(i); |
| | | |
| | | system.debug('-----:i=' + i + ', currentDetailNumber=' + currentDetailNumber); |
| | | |
| | | if (i == currentDetailNumber) { |
| | | // ---------------------------------------------------------------------------------------- |
| | | // 一回だけ実行されるコード |
| | | // ---------------------------------------------------------------------------------------- |
| | | system.debug('-----:items.size()=' + items.size()); |
| | | if (items.size() > 0) { |
| | | // ---------------------------------------------------------------------------------------- |
| | | // セット品明細のループ |
| | | // ---------------------------------------------------------------------------------------- |
| | | system.debug('-----:セット品明細のループスタート'); |
| | | for (Integer l = 0; l < productSetDetails.size(); l++) { |
| | | Product_Set_Detail__c nowDetail = productSetDetails[l]; |
| | | Product2 prd = items.get(nowDetail.product__c); |
| | | PricebookEntry pbe = entries.get(nowDetail.product__c); |
| | | |
| | | if (pbe == null) { |
| | | system.debug('This Productid(' + nowDetail.product__c + ') is not exist PricebookEntry'); |
| | | // ---------------------------------------------------------------------------------------- |
| | | // 取得済みの Product2のリストの中に、セット品明細の情報がみつからない場合 |
| | | // なにもしないでスルーする |
| | | // ---------------------------------------------------------------------------------------- |
| | | } else { |
| | | // ---------------------------------------------------------------------------------------- |
| | | // 取得済みの Product2のリストの中に、セット品明細の情報がみつかった |
| | | // 明細のその Product2の情報をセットする? |
| | | // ---------------------------------------------------------------------------------------- |
| | | QELine c = null; |
| | | Integer Quantity_c = nowDetail.Quantity__c > 0 ? Integer.valueOf(nowDetail.Quantity__c) : 1; |
| | | if (opp.Trade__c == '外貿') { |
| | | if (prd.Foreign_Trade_List_US__c > 0 && prd.Foreign_Trade_Cost_US__c > 0) { |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段&& 增加检索阿西赛多 |
| | | c = new QELine(i, prd.Is_DangerousChemicals__c,prd.CanNotCancelledGurantee__c,prd.VenderName__c, |
| | | prd.Estimated_ConsumptionDueDate__c, //20211009 lt add ('',) |
| | | pbe.Id, prd.Asset_Model_No__c, prd.StorageStatus__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | prd.ProductCode, nowDetail.product__c, prd.SFDA_Status__c, |
| | | prd.Sales_Possibility__c, prd.Name, prd.BSSCategory__c, |
| | | Quantity_c, prd.Foreign_Trade_List_US__c, |
| | | prd.Foreign_Trade_List_US__c, prd.Foreign_Trade_Cost_US__c, |
| | | prd.Packing_list_manual__c |
| | | // 多年保修 start |
| | | , prd.Entend_gurantee_period_all__c |
| | | //外贸多年保 取产品主数据上的金额及维修合同报价 精琢技术 wql 2021/01/04 start |
| | | , prd.Intra_Trade_Foreign_RMB__c |
| | | , prd.GuranteeType__c |
| | | , prd.NoDiscount_Foreign__c, prd.Repair_Contract_USD__c |
| | | //外贸多年保 取产品主数据上的金额及维修合同报价 精琢技术 wql 2021/01/04 end |
| | | // 多年保修 end |
| | | ); |
| | | |
| | | } else { |
| | | continue; |
| | | } |
| | | } else if (opp.Trade__c == '内貿') { |
| | | if (prd.Intra_Trade_List_RMB__c > 0 && prd.Intra_Trade_Cost_RMB__c > 0) { |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段&&增加检索阿西赛多 |
| | | c = new QELine(i,prd.Is_DangerousChemicals__c,prd.CanNotCancelledGurantee__c,prd.VenderName__c, |
| | | prd.Estimated_ConsumptionDueDate__c, //20211009 lt add |
| | | pbe.Id, prd.Asset_Model_No__c, prd.StorageStatus__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | prd.ProductCode, nowDetail.product__c, prd.SFDA_Status__c, |
| | | prd.Sales_Possibility__c, prd.Name, prd.BSSCategory__c, |
| | | Quantity_c, prd.Intra_Trade_List_RMB__c, |
| | | prd.Intra_Trade_List_RMB__c, prd.Intra_Trade_Cost_RMB__c, |
| | | prd.Packing_list_manual__c |
| | | // 多年保修 start |
| | | , prd.Entend_gurantee_period_all__c |
| | | , prd.Intra_Trade_Gurantee_RMB__c |
| | | , prd.GuranteeType__c |
| | | , prd.Intra_Trade_Service_RMB__c |
| | | //维修合同报价 |
| | | , prd.Maintenance_Price_Year__c |
| | | // 多年保修 end |
| | | ); |
| | | |
| | | } else { |
| | | continue; |
| | | } |
| | | } else { |
| | | continue; |
| | | // c = new QELine(i, pbe.Id, prd.Asset_Model_No__c, prd.ProductCode, nowDetail.product__c, prd.SFDA_Status__c, prd.Sales_Possibility__c, prd.Name, prd.BSSCategory__c, |
| | | // Quantity_c, 0, 0, 0); |
| | | } |
| | | activities.add(c); |
| | | |
| | | if (i == 149) { |
| | | // 明細行の最大値に達したら、処理を終了する |
| | | PageArrange(); |
| | | system.debug('-----:強制終了:98'); |
| | | return null; |
| | | } |
| | | |
| | | i++; |
| | | rightcnt++; |
| | | lineflg = true; |
| | | } |
| | | } |
| | | system.debug('-----:セット品明細のループ終了'); |
| | | if (lineflg == true) { |
| | | i--; |
| | | } |
| | | } else { |
| | | // ---------------------------------------------------------------------------------------- |
| | | // Product2へのクエリが結果を返さなかった時に実行されるコード |
| | | // ---------------------------------------------------------------------------------------- |
| | | a = t; |
| | | a.lineNo = i; |
| | | activities.add(a); |
| | | } |
| | | } else { |
| | | // ---------------------------------------------------------------------------------------- |
| | | // Product2へクエリを投げない時に実行されるコード |
| | | // ---------------------------------------------------------------------------------------- |
| | | a = t; |
| | | a.lineNo = i; |
| | | activities.add(a); |
| | | } |
| | | |
| | | i++; |
| | | if (i > 149) { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | PageArrange(); |
| | | if (productSetDetails.size() > 0) { |
| | | errorflg = true; |
| | | errormessage = productSetDetails[0].Product_Set__r.Name + ' 导入结束,导入 ' + productSetDetails.size() + ' 件,成功' + rightcnt + ' 件'; |
| | | } |
| | | system.debug('-----:終了:' + errormessage); |
| | | return null; |
| | | } |
| | | |
| | | // xudan 20140626 行追加ロジック実装 |
| | | public void addRow() { |
| | | List<QELine> tmpQELine = new List<QELine>(); |
| | | system.debug('添加行size:'+activities.size()); |
| | | system.debug('需要添加行:'+rowIdx); |
| | | for (Integer i = 0; i < activities.size(); i++) { |
| | | if (i < rowIdx) { |
| | | tmpQELine.add(activities[i]); |
| | | } else if ( i == rowIdx) { |
| | | tmpQELine.add(new QELine(i)); |
| | | } else { |
| | | tmpQELine.add(activities[i - 1]); |
| | | tmpQELine[tmpQELine.size() - 1].lineNo = i; |
| | | } |
| | | } |
| | | activities = new List<QELine>(); |
| | | activities.addAll(tmpQELine); |
| | | PageArrange(); |
| | | } |
| | | //添加行 |
| | | public void addMultipleRow() { |
| | | List<QELine> tmpQELine = new List<QELine>(); |
| | | //页面上的输入框追加 (只能在末尾追加) |
| | | |
| | | Integer lineRows = activities.size() + rowIdx; |
| | | if(lineRows>0 && lineRows>activities.size()&&activities.size()>0){ |
| | | //页面输入0或负数都不应该继续执行 |
| | | for (Integer i = 0; i < lineRows; i++) { |
| | | if (i < activities.size()) { |
| | | tmpQELine.add(activities[i]); |
| | | } else{ |
| | | tmpQELine.add(new QELine(i)); |
| | | } |
| | | } |
| | | system.debug('tmpQELine:'+tmpQELine); |
| | | //如果发生行数变化 则后台最大报价行也更新 |
| | | if(quoteEntryMaxLine < lineRows){ |
| | | quoteEntryMaxLine = lineRows; |
| | | //system.debug('profileId_20190517_' + profileId); |
| | | String userid = UserInfo.getUserId(); |
| | | User loginUser = [select id, CanCancelDecideQuote__c from user where Id = :userid]; |
| | | if (new_profileId == System.Label.SystemAdmin || new_profileId == System.Label.SystemAdmin2 |
| | | || new_profileId == System.Label.SystemAdmin || new_profileId == System.Label.SystemAdmin2 |
| | | || loginUser.CanCancelDecideQuote__c == true) { |
| | | isAdmin = true; |
| | | } |
| | | |
| | | openType = System.currentPageReference().getParameters().get('openType'); |
| | | isService = openType == 'service' ? true : false; |
| | | is_Parts_direct = false; |
| | | is_Parts_dealer = false; |
| | | is_hidden_user = false; |
| | | |
| | | if (profileId == System.Label.RT_BS_No_Price || new_profileId == System.Label.RT_BS_No_Price) {// || profileId == System.Label.SystemAdmin) { |
| | | is_hidden_user = true; |
| | | //system.debug('is_hidden_user_1_1_1_1_' + is_hidden_user); |
| | | } |
| | | is_dealer_user = false; |
| | | //system.debug('UserInfo.getUserType()__20190517_'+UserInfo.getUserType()); |
| | | //system.debug('UserInfo.getUserId()__20190517_1_'+UserInfo.getUserId().substring(0, 15)); |
| | | |
| | | if (UserInfo.getUserType() == 'PowerPartner' || UserInfo.getUserId().substring(0, 15) == '00528000002PBPf') { |
| | | is_dealer_user = true; |
| | | //system.debug('is_dealer_user_1_1_1_1_' + is_dealer_user); |
| | | } |
| | | |
| | | is_hidden_all = false; |
| | | specialDealer = false; |
| | | |
| | | //Quote |
| | | |
| | | //重画页面 重画新增行 |
| | | activities = new List<QELine>(); |
| | | activities.addAll(tmpQELine); |
| | | PageArrange(); |
| | | } |
| | | |
| | | } |
| | | |
| | | //excelImport |
| | | public PageReference excelImport() { |
| | | system.debug('○○○○○○○○○○○○○○○Welcome to excelImport!!'); |
| | | system.debug('▼▼▼▼▼excel_text:' + excel_text); |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | //既存データ数の確認 |
| | | Integer j = 0; |
| | | for (QELine s : activities) { |
| | | //データ判定にAsset_Model_Noを使用 |
| | | if ((s.Asset_Model == null) || (s.Asset_Model == '')) { |
| | | break; |
| | | } |
| | | j++; |
| | | } |
| | | |
| | | //=======Temporary===== |
| | | tmpactivities = activities; |
| | | |
| | | //=======Initialize========= |
| | | activities = new List<QELine>(); |
| | | //List<OpportunityLineItem> items = New List<OpportunityLineItem>(); |
| | | Integer i = 0; |
| | | Integer xlscnt = 0; |
| | | Integer rightcnt = 0; // 成功した数をカウント |
| | | |
| | | string[] xlslists = excel_text.split('\n', -1); |
| | | List<string> xlslist = New list<string>(); |
| | | List<string> codelist = New List<string>(); |
| | | List<Integer> Quantitylist = New List<Integer>(); |
| | | //String str ; |
| | | |
| | | Map<String, Integer> mp = new Map<String, Integer>(); |
| | | string xlscode; |
| | | Integer xlsQuantity; |
| | | |
| | | try { |
| | | for (string xls : xlslists) { |
| | | if (xls == null || xls == '') { |
| | | //null |
| | | //system.debug('quo---cccc: '+quo); |
| | | quo = new Quote(); |
| | | quo.Quote_Type__c = 'sales'; |
| | | if (isService == true) { |
| | | quo.Quote_Type__c = 'service'; |
| | | } |
| | | quo.Comment__c = '1) The payment terms are - .\n'; |
| | | quo.Comment__c += '付款方式 - 。\n'; |
| | | quo.Comment__c += '2) Quoation valid until - .\n'; |
| | | quo.Comment__c += '报价有效期到 - 。\n'; |
| | | quo.Comment__c += '3) All the commodoties come with - year\'s manufacturer warranty.\n'; |
| | | quo.Comment__c += '所有商品含 - 年厂家保修。\n'; |
| | | if (isService == false) { |
| | | quo.Comment__c += '4) The above quotations are - prices, Commodoties shipped to the clien\'s requirements.\n'; |
| | | quo.Comment__c += '上述报价为 - 价,商品送至客户指定地点。\n'; |
| | | quo.Comment__c += '5) The above quotations are all - .\n'; |
| | | quo.Comment__c += '上述报价均为 - 价。\n'; |
| | | quo.Comment__c += '6) Configuration as per attached.\n'; |
| | | quo.Comment__c += '配置清单详见附件。'; |
| | | } else { |
| | | xlscode = null; |
| | | xlsQuantity = null; |
| | | xlslist = xls.split('\t', -1); |
| | | for (String s : xlslist) { |
| | | //odd number or even number |
| | | if (math.mod(i, 2) != 0) { |
| | | //odd number |
| | | if (s == '' || s == null) { |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message31; |
| | | activities = tmpactivities; |
| | | pageArrange(); |
| | | return null; |
| | | } else { |
| | | s = s.trim(); |
| | | xlsQuantity = Integer.valueOf(s); |
| | | Quantitylist.add(xlsQuantity); |
| | | } |
| | | } else { |
| | | //even number |
| | | if (s == '' || s == null) { |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message31; |
| | | activities = tmpactivities; |
| | | pageArrange(); |
| | | return null; |
| | | } else { |
| | | s = s.trim(); |
| | | codelist.add(s); |
| | | xlscode = s; |
| | | } |
| | | quo.Comment__c += '4) The above quotations are all - .\n'; |
| | | quo.Comment__c += '上述报价均为 - 价。\n'; |
| | | quo.Comment__c += '5) Configuration as per attached.\n'; |
| | | quo.Comment__c += '配置清单详见附件。'; |
| | | } |
| | | |
| | | if (isService == true) { |
| | | quo.SetName1__c = '零件费用'; |
| | | quo.SetQty1__c = 1; |
| | | quo.SetName2__c = '维修费'; |
| | | quo.SetQty2__c = 1; |
| | | quo.SetName3__c = '其他费用'; |
| | | quo.SetQty3__c = 1; |
| | | } |
| | | |
| | | quo = new Quote(); |
| | | quo.Quote_Type__c = 'sales'; |
| | | if (isService == true) { |
| | | quo.Quote_Type__c = 'service'; |
| | | } |
| | | quo.Comment__c = '1) The payment terms are - .\n'; |
| | | quo.Comment__c += '付款方式 - 。\n'; |
| | | quo.Comment__c += '2) Quoation valid until - .\n'; |
| | | quo.Comment__c += '报价有效期到 - 。\n'; |
| | | quo.Comment__c += '3) All the commodoties come with - year\'s manufacturer warranty.\n'; |
| | | quo.Comment__c += '所有商品含 - 年厂家保修。\n'; |
| | | if (isService == false) { |
| | | quo.Comment__c += '4) The above quotations are - prices, Commodoties shipped to the clien\'s requirements.\n'; |
| | | quo.Comment__c += '上述报价为 - 价,商品送至客户指定地点。\n'; |
| | | quo.Comment__c += '5) The above quotations are all - .\n'; |
| | | quo.Comment__c += '上述报价均为 - 价。\n'; |
| | | quo.Comment__c += '6) Configuration as per attached.\n'; |
| | | quo.Comment__c += '配置清单详见附件。'; |
| | | } else { |
| | | quo.Comment__c += '4) The above quotations are all - .\n'; |
| | | quo.Comment__c += '上述报价均为 - 价。\n'; |
| | | quo.Comment__c += '5) Configuration as per attached.\n'; |
| | | quo.Comment__c += '配置清单详见附件。'; |
| | | } |
| | | |
| | | if (isService == true) { |
| | | quo.SetName1__c = '零件费用'; |
| | | quo.SetQty1__c = 1; |
| | | quo.SetName2__c = '维修费'; |
| | | quo.SetQty2__c = 1; |
| | | quo.SetName3__c = '其他费用'; |
| | | quo.SetQty3__c = 1; |
| | | } |
| | | |
| | | //Opportunityid |
| | | Opportunity oppRecord = null; |
| | | if (oppId==null) { |
| | | oppId = System.currentPageReference().getParameters().get('oppid'); |
| | | |
| | | if (oppId==Null) { |
| | | quoId = System.currentPageReference().getParameters().get('Id'); |
| | | |
| | | List<Quote> ql = New List<Quote>(); |
| | | ql = [select Id,OpportunityId From Quote Where Id =:quoId]; |
| | | if (ql.size()>0) { |
| | | oppId = ql[0].OpportunityId; |
| | | } |
| | | } |
| | | |
| | | List<Opportunity> oppList = New List<Opportunity>(); |
| | | oppList = [select Id,Pricebook2Id,CurrencyIsoCode,AccountId,Is_Decided__c,ProductSegment__c,Machine_Parts__c,SalesChannel__c,Dealer__r.DummyDealer__c, |
| | | IE_Discount_Normal__c,Subuse__c,IE_Discount_Special__c,Dealer_Code__c,Province__c,Dealer_Rank__c,Dealer__r.ParentId,Account.MarketVerticals__c,Trade_Type_D__c, |
| | | DealerId__c |
| | | From Opportunity Where Id =:oppId]; |
| | | |
| | | if (oppList.size()>0) { |
| | | opp = oppList[0]; |
| | | oppRecord = oppList[0]; |
| | | pricebook2Id = oppList[0].Pricebook2Id; |
| | | currencyIsoCode = oppList[0].CurrencyIsoCode; |
| | | accountId = oppList[0].AccountId; |
| | | decideFlg = oppList[0].Is_Decided__c; |
| | | productSegment = oppList[0].ProductSegment__c; |
| | | if (oppList[0].Machine_Parts__c == 'Parts' && oppList[0].SalesChannel__c == 'direct') { |
| | | is_Parts_direct = true; |
| | | } else if (oppList[0].Machine_Parts__c == 'Parts' && oppList[0].SalesChannel__c == 'dealer') { |
| | | is_Parts_dealer = true; |
| | | } |
| | | |
| | | //if(specialdealer == true){ |
| | | //is_hidden_all = true; |
| | | //} |
| | | } |
| | | i++; |
| | | } |
| | | //mp.put(xlscode, xlsQuantity); |
| | | xlscnt++; |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | activities = tmpactivities; |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message31; |
| | | pageArrange(); |
| | | return null; |
| | | } |
| | | |
| | | system.debug(j); |
| | | system.debug('xlscnt:::::' + xlscnt); |
| | | |
| | | if (codelist.size() == 0 || Quantitylist.size() == 0) { |
| | | activities = tmpactivities; |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message31; |
| | | pageArrange(); |
| | | return null; |
| | | } |
| | | |
| | | xlscnt = j + xlscnt; |
| | | if (xlscnt > quoteEntryMaxLine) { |
| | | activities = tmpactivities; |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message32; |
| | | pageArrange(); |
| | | return null; |
| | | } |
| | | |
| | | i = 0; |
| | | boolean lineflg = false; |
| | | for (QELine t : tmpactivities) { |
| | | if (i == j) { |
| | | Map<String, Product2> mpProduct2 = new Map<String, Product2>(); // keyがProductCodeです。 |
| | | List<Product2> items = [select Id, Name, ProductCode, |
| | | Foreign_Trade_Cost_US__c, Foreign_Trade_List_US__c, Intra_Trade_Cost_RMB__c, Intra_Trade_List_RMB__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段 |
| | | Asset_Model_No__c, Sales_Possibility__c, Estimation_Entry_Possibility__c,VenderName__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | SFDA_Status__c, Qty_Unit__c, BSSCategory__c, Packing_list_manual__c, StorageStatus__c |
| | | // 多年保修 start |
| | | , Entend_gurantee_period_all__c |
| | | , Intra_Trade_Gurantee_RMB__c |
| | | , Intra_Trade_Service_RMB__c |
| | | , GuranteeType__c |
| | | // 维修合同报价 |
| | | , Maintenance_Price_Year__c |
| | | // 多年保修 end |
| | | //增加检索 不可取消多年保 2020/08/27 |
| | | ,CanNotCancelledGurantee__c |
| | | //增加检索 阿西赛多 2020/09/10 |
| | | ,Is_DangerousChemicals__c |
| | | //外贸多年保 2021/01/04 精琢技术 wql start |
| | | //维修合同报价(USD) |
| | | ,Repair_Contract_USD__c |
| | | //计提金额(不含税,USD) |
| | | ,Intra_Trade_Foreign_RMB__c |
| | | //NoDiscount 金额(USD) |
| | | ,NoDiscount_Foreign__c |
| | | //外贸多年保 2021/01/04 精琢技术 wql end |
| | | |
| | | //SFDC停止预警 lt 20211009 start |
| | | ,Estimated_ConsumptionDueDate__c |
| | | //SFDC停止预警 lt 20211009 end |
| | | |
| | | FROM Product2 Where ProductCode In :codelist |
| | | And Manual_Entry__c = false]; |
| | | for (Product2 prd : items) { |
| | | system.debug('prd.ProductCode:::::' + prd.ProductCode); |
| | | mpProduct2.put(prd.ProductCode, prd); |
| | | //specialDealer = StaticParameter.specialDealerMap.containsKey(((String)opp.DealerId__c).substring(0,15)); |
| | | //specialDealer = IfspecialDealer(opp.DealerId__c); |
| | | if (opp != null) { |
| | | specialDealer = IfspecialDealer(opp.DealerId__c); |
| | | if(specialDealer == true){ |
| | | is_hidden_all = true; |
| | | } |
| | | } |
| | | Map<String, PricebookEntry> entries = new Map<String, PricebookEntry>(); // keyがProductCodeです。 |
| | | Boolean updateOrCopy = false; |
| | | quoId = System.currentPageReference().getParameters().get('Id'); |
| | | |
| | | if (quoId==null){ |
| | | quoId = System.currentPageReference().getParameters().get('copyid'); |
| | | if (quoId!=null){ |
| | | updateOrCopy = true; |
| | | } |
| | | } else { |
| | | updateOrCopy = false; |
| | | } |
| | | |
| | | Integer i; |
| | | |
| | | if (quoId==null){ |
| | | |
| | | List<Quote> qlCk = New List<Quote>(); |
| | | qlCk = [select Id,OpportunityId,Opportunity.DealerId__c,OrderIsChange__c From Quote Where OpportunityId =:oppId]; |
| | | if (qlCk.size()>0) { |
| | | //specialDealer = StaticParameter.specialDealerMap.containsKey(qlCk[0].Opportunity.DealerId__c); |
| | | specialDealer = IfspecialDealer(qlCk[0].Opportunity.DealerId__c); |
| | | if(specialDealer == true){ |
| | | is_hidden_all = true; |
| | | } |
| | | if (activities==null){ |
| | | activities = new List<QELine>(); |
| | | for (i=0;i<quoteEntryMaxLine;i++){ |
| | | QELine active_activity = new QELine(i); |
| | | activities.add(active_activity); |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | Integer k; |
| | | List<OpportunityLineItem> oppItemList = New List<OpportunityLineItem>(); |
| | | oppItemList = [select Id,Product2Id,ProductCode,Product2.Product_ECCode__c,Product2.Name,Quantity,UnitPrice,Description,PricebookEntryId, |
| | | PricebookEntry.SalesPrice__c,PricebookEntry.SalesPriceA__c,PricebookEntry.SalesPriceB__c, |
| | | PricebookEntry.SalesPriceC__c,Product2.ProductModels__c,PricebookEntry.Hidden_flag__c, |
| | | Opportunity.DealerId__c |
| | | From OpportunityLineItem |
| | | Where OpportunityId =:oppId]; |
| | | if (oppItemList.size()>0) { |
| | | k = oppItemList.size(); |
| | | } else { |
| | | k = 0; |
| | | } |
| | | //新規リストコントローラの取得 |
| | | if (activities==null){ |
| | | activities = new List<QELine>(); |
| | | for (i=0;i<quoteEntryMaxLine;i++){ |
| | | QELine active_activity = new QELine(i); |
| | | if (i<k) { |
| | | active_activity.productName = oppItemList[i].Product2.Name; |
| | | active_activity.productCode = oppItemList[i].ProductCode; |
| | | active_activity.productEC = oppItemList[i].Product2.Product_ECCode__c; |
| | | active_activity.pageObject.Quantity = oppItemList[i].Quantity; |
| | | active_activity.pageObject.UnitPrice = oppItemList[i].UnitPrice; |
| | | active_activity.pageObject.Description = oppItemList[i].Description; |
| | | active_activity.totalPrice = oppItemList[i].Quantity * oppItemList[i].UnitPrice; |
| | | if (isService == true) { |
| | | active_activity.setName = '零件费用'; |
| | | } else { |
| | | active_activity.setName = '单品'; |
| | | } |
| | | active_activity.pageObject.Set__c = '单品'; |
| | | active_activity.pageObject.SingleProduct__c = true; |
| | | active_activity.pageObject.PricebookEntryId = oppItemList[i].PricebookEntryId; |
| | | active_activity.salesPrice = oppItemList[i].PricebookEntry.SalesPrice__c; |
| | | active_activity.salesPriceA = oppItemList[i].PricebookEntry.SalesPriceA__c; |
| | | active_activity.salesPriceB = oppItemList[i].PricebookEntry.SalesPriceB__c; |
| | | active_activity.salesPriceC = oppItemList[i].PricebookEntry.SalesPriceC__c; |
| | | |
| | | active_activity.isProductModel = oppItemList[i].Product2.ProductModels__c; |
| | | |
| | | active_activity.hiddenflg = oppItemList[i].PricebookEntry.Hidden_flag__c; |
| | | //StaticParameter.specialGroupMap. |
| | | //specialDealer = StaticParameter.specialDealerMap.containsKey(oppItemList[i].Opportunity.DealerId__c); |
| | | specialDealer = IfspecialDealer(oppItemList[i].Opportunity.DealerId__c); |
| | | if(specialDealer == true){ |
| | | is_hidden_all = true; |
| | | } |
| | | //system.debug(); |
| | | //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请选择目标客户---->'+oppItemList[i].Opportunity.DealerId__c)); |
| | | if (specialDealer || is_hidden_user == true || is_dealer_user == true && oppItemList[i].PricebookEntry.Hidden_flag__c == true) { |
| | | active_activity.pageObject.UnitPrice = 0; |
| | | active_activity.totalPrice = 0; |
| | | system.debug('<---is_hidden_all--->03' + is_hidden_all); |
| | | is_hidden_all = true; |
| | | discount = 0; |
| | | } |
| | | } |
| | | activities.add(active_activity); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | system.debug('○○○○○○○○○○○○Welcome to edit class!!○○○○○○○○○○○○'); |
| | | |
| | | String accountid; |
| | | |
| | | List<Quote> quoList = |
| | | [ SELECT Id,Name,QuoteNumber,Account.Name,ExpirationDate,Subtotal,Discount,TotalPrice,GrandTotal,PrintPrice__c,ShippingHandling, |
| | | DeliveryLeadTime__c,PaymentTerms__c,ValidDate__c,Warranty__c,SetName1__c,Is_Decided__c,Shipment_Term__c,Shipment_Term2__c, |
| | | SetName2__c,SetName3__c,SetName4__c,SetName5__c,SetName6__c,SetName7__c,SetName8__c,SetName9__c,SetName10__c, |
| | | SetName11__c,SetName12__c,SetName13__c,SetName14__c,SetName15__c,SetName16__c,SetName17__c,SetName18__c,SetName19__c, |
| | | SetName20__c,SetName21__c,SetName22__c,SetName23__c,SetName24__c,SetName25__c,SetName26__c,SetName27__c,SetName28__c,SetName29__c, |
| | | SetName30__c,SetQty1__c,SetQty2__c,SetQty3__c,SetQty4__c,SetQty5__c,SetQty6__c,SetQty7__c,SetQty8__c,SetQty9__c,SetQty10__c,SetQty11__c, |
| | | SetQty12__c,SetQty13__c,SetQty14__c,SetQty15__c,SetQty16__c,SetQty17__c,SetQty18__c,SetQty19__c,SetQty20__c,SetQty21__c,SetQty22__c,SetQty23__c, |
| | | SetQty24__c,SetQty25__c,SetQty26__c,SetQty27__c,SetQty28__c,SetQty29__c,SetQty30__c,Comment__c,Custom_Price_Total__c,Custom_Price_Total_Text__c,Quote_Type__c, |
| | | Main_Model__c,Main_Serial_Number__c,Service_Type__c,Contract_Number__c,Service_Date__c,Service_Finish_Date__c,Service_Engineer_Sign__c, |
| | | Service_Pickup_Sign__c,Service_Check_Sign__c,Service_Location__c,Service_Status__c,Service_Content__c, Is_upload__c, Total_Price_Text__c, |
| | | Discount_Normal__c,Discount_Special__c,OrderIsChange__c |
| | | FROM Quote Where Id =:quoId]; |
| | | List<QuoteLineItem> items = |
| | | [Select Id,Product2Id,Product2.Name,Product2.ProductCode,Product2.Product_ECCode__c,Quantity,Subtotal,Discount,TotalPrice,PricebookEntryId,UnitPrice,Description,Set__c,Custom_Price__c, |
| | | PricebookEntry.SalesPrice__c,PricebookEntry.SalesPriceA__c,PricebookEntry.SalesPriceB__c,PricebookEntry.SalesPriceC__c,Product2.ProductModels__c,PricebookEntry.Hidden_flag__c, |
| | | SingleProduct__c,SetName__c, |
| | | Quote.Opportunity.DealerId__c |
| | | From QuoteLineItem where Quoteid = :quoId Order by Id]; |
| | | |
| | | //system.debug('quoList==========>'+quoList); |
| | | //system.debug('items==========>'+items); |
| | | |
| | | if (quoList.size() > 0) { |
| | | if (updateOrCopy) { |
| | | |
| | | quo = quoList[0]; |
| | | quo.Id = null; |
| | | quo.name = null; |
| | | quo.Is_Decided__c = false; |
| | | quo.Is_upload__c = false; |
| | | } else { |
| | | quo = quoList[0]; |
| | | } |
| | | isdecide = quo.Is_Decided__c; |
| | | } |
| | | |
| | | if (updateOrCopy) { |
| | | quoId = null; |
| | | } |
| | | quoteLineSetNameDiscountMap = new Map<String,String>(); |
| | | activities = new List<QELine>(); |
| | | i=0; |
| | | QELine c = new QELine(i); |
| | | |
| | | if (items.size()>0) { |
| | | for (QuoteLineItem o:items) { |
| | | |
| | | if (String.isNotBlank(o.SetName__c)) { |
| | | quoteLineSetNameDiscountMap.put(o.SetName__c,String.valueOf(o.Discount)); |
| | | } |
| | | String setName = o.Set__c; |
| | | Integer qty = 1; |
| | | if (setName != null) { |
| | | //XHL-20190426-UpdateStart |
| | | if (!o.SingleProduct__c) { |
| | | |
| | | String fieldName = setName.substring(3); |
| | | fieldName = fieldName.indexOf('0') == 0 ? fieldName.substring(1) : fieldName; |
| | | Decimal d_qty = (Decimal) quo.get('SetQty' + fieldName + '__c'); |
| | | qty = d_qty == null ? 1 : d_qty.intValue(); |
| | | } |
| | | //XHL-20190426-UpdateEnd |
| | | |
| | | } |
| | | c = new QELine(isService,o,i,o.Product2.Name,o.Product2.ProductCode,o.Product2.Product_ECCode__c,qty,o.Product2.ProductModels__c,o.SingleProduct__c,o.SetName__c); |
| | | //specialDealer = StaticParameter.specialDealerMap.containsKey(o.Quote.Opportunity.DealerId__c); |
| | | specialDealer = IfspecialDealer(o.Quote.Opportunity.DealerId__c); |
| | | if(specialDealer == true){ |
| | | is_hidden_all = true; |
| | | } |
| | | //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请选择目标客户----2>'+o.Quote.Opportunity.DealerId__c)); |
| | | //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请选择目标客户----n>'+specialDealer)); |
| | | |
| | | if ( specialDealer || is_hidden_user == true || is_dealer_user == true && c.hiddenflg == true) { |
| | | c.pageObject.UnitPrice = 0; |
| | | c.totalPrice = 0; |
| | | c.customPrice = 0; |
| | | system.debug('<---is_hidden_all---04>' + is_hidden_all); |
| | | is_hidden_all = true; |
| | | discount = 0; |
| | | } |
| | | activities.add(c); |
| | | i++; |
| | | |
| | | if (quo.OrderIsChange__c) { |
| | | String productCode = o.Product2.ProductCode; |
| | | if (String.isNotBlank(productCode)) { |
| | | |
| | | initStringConcatenation += productCode + '|' + o.Quantity; |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | for (integer j=i;j<quoteEntryMaxLine;j++) { |
| | | c = new QELine(j); |
| | | activities.add(c); |
| | | } |
| | | quoteLineSetNameDiscountJson(quoteLineSetNameDiscountMap); |
| | | |
| | | } else { |
| | | activities = new List<QELine>(); |
| | | for (i=0;i<quoteEntryMaxLine;i++) { |
| | | QELine active_activity = new QELine(i); |
| | | activities.add(active_activity); |
| | | } |
| | | } |
| | | |
| | | system.debug('=====is_hidden_all:' + is_hidden_all); |
| | | if (is_hidden_all) { |
| | | discount = quo.totalPrice.setScale(2, System.RoundingMode.HALF_UP); |
| | | } else { |
| | | discount = quo.Discount == null ? 0 : quo.Discount; |
| | | |
| | | discount = discount.setScale(2, System.RoundingMode.HALF_UP); |
| | | } |
| | | system.debug('=====discount:' + discount); |
| | | |
| | | if (quoId != null) { |
| | | printFlg = true; |
| | | } |
| | | |
| | | system.debug('○○○○○○○○○○○○ edit class End!!○○○○○○○○○○○○'); |
| | | } |
| | | |
| | | Map<String, Decimal> ddMap = new Map<String, Decimal>(); |
| | | String key1 = ''; |
| | | String key2 = ''; |
| | | List<Dealer_Discount__c> ddList = [select id, Dealer_Rank_F__c,Product_Segment__c, DimensionField1__c, DimensionField2__c, DimensionValue1__c, DimensionValue2__c, Dealer_Rank__c from Dealer_Discount__c where Product_Segment__c = :productSegment]; |
| | | for (Dealer_Discount__c dd : ddList) { |
| | | ddMap.put(dd.DimensionValue1__c + '|' + dd.DimensionValue2__c, dd.Dealer_Rank_F__c); |
| | | key1 = dd.DimensionField1__c == null ? '' : dd.DimensionField1__c; |
| | | key2 = dd.DimensionField2__c == null ? '' : dd.DimensionField2__c; |
| | | } |
| | | |
| | | String keyF = ((key1 == '' || oppRecord.get(key1) == null) ? 'null' : oppRecord.get(key1)) + '|' + ((key2 == '' || oppRecord.get(key2) == null) ? 'null' : oppRecord.get(key2)); |
| | | |
| | | quo.Discount_Normal__c = 100 - (ddMap.get(keyF) == null ? 100.0 : ddMap.get(keyF)); |
| | | dealer_coefficient = quo.Discount_Normal__c; |
| | | system.debug('=====keyF:' + keyF); |
| | | system.debug('=====Discount_Normal__c:' + quo.Discount_Normal__c); |
| | | activitiesSize = activities.size(); |
| | | |
| | | system.debug(specialDealer); |
| | | } |
| | | |
| | | public PageReference Refresh() { |
| | | |
| | | List<Id> Idlist = New List<Id>(); |
| | | for (QELine t:activities) { |
| | | Idlist.add(t.pageObject.PricebookEntryId); |
| | | } |
| | | |
| | | if (Idlist.size()==0) { |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message01; |
| | | return null; |
| | | } |
| | | |
| | | //List<PricebookEntry> pbes = [ |
| | | // select Id,Product2Id,ProductCode,Product2.Product_ECCode__c,SalesPrice__c,SalesPriceA__c,SalesPriceB__c,SalesPriceC__c,Hidden_flag__c,Product2.ProductStatus__c |
| | | // FROM PricebookEntry where Id in :Idlist]; |
| | | //20191113-XHL---Start-将产品状态用产品状态(公式)替换 |
| | | List<PricebookEntry> pbes = [ |
| | | select Id, PricebookEntry.Product2.ProductCode |
| | | FROM PricebookEntry Where PricebookEntry.Product2.ProductCode IN :codelist |
| | | AND CurrencyIsoCode = :(opp.Trade__c == '外貿' ? 'USD' : 'CNY') |
| | | AND IsActive = true]; |
| | | for (PricebookEntry pbe : pbes) { |
| | | system.debug('pbe.Product2.ProductCode:::::' + pbe.Product2.ProductCode); |
| | | entries.put(pbe.Product2.ProductCode, pbe); |
| | | } |
| | | |
| | | for (Integer l = 0; l < codelist.size(); l++) { |
| | | system.debug('codelist[l]:::::' + codelist[l]); |
| | | Product2 prd = mpProduct2.get(codelist[l]); |
| | | if (prd != null) { |
| | | PricebookEntry pbe = entries.get(codelist[l]); |
| | | QELine c = null; |
| | | if (pbe != null && (opp.Trade__c == '外貿' || opp.Trade__c == '内貿')) { |
| | | if (opp.Trade__c == '外貿') { |
| | | if (prd.Foreign_Trade_List_US__c > 0 && prd.Foreign_Trade_Cost_US__c > 0) { |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段&&增加阿西赛多 |
| | | c = new QELine(i,prd.Is_DangerousChemicals__c,prd.CanNotCancelledGurantee__c, prd.VenderName__c, |
| | | prd.Estimated_ConsumptionDueDate__c,//20211009 lt add ('',) |
| | | pbe.Id, prd.Asset_Model_No__c, prd.StorageStatus__c, prd.ProductCode, prd.Id, prd.SFDA_Status__c, prd.Sales_Possibility__c, prd.Name, prd.BSSCategory__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | Quantitylist[l], prd.Foreign_Trade_List_US__c, prd.Foreign_Trade_List_US__c, prd.Foreign_Trade_Cost_US__c, prd.Packing_list_manual__c |
| | | // 多年保修 start |
| | | //外贸多年保 取产品主数据上的金额及维修合同报价 精琢技术 wql 2021/01/04 start |
| | | , prd.Entend_gurantee_period_all__c |
| | | , prd.Intra_Trade_Foreign_RMB__c |
| | | , prd.GuranteeType__c |
| | | , prd.NoDiscount_Foreign__c, |
| | | prd.Repair_Contract_USD__c |
| | | //外贸多年保 取产品主数据上的金额及维修合同报价 精琢技术 wql 2021/01/04 end |
| | | // 多年保修 end |
| | | ); |
| | | |
| | | } else { |
| | | continue; |
| | | } |
| | | } else { |
| | | if (prd.Intra_Trade_List_RMB__c > 0 && prd.Intra_Trade_Cost_RMB__c > 0) { |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段&&增加检索阿西赛多 |
| | | c = new QELine(i,prd.Is_DangerousChemicals__c,prd.CanNotCancelledGurantee__c,prd.VenderName__c, |
| | | prd.Estimated_ConsumptionDueDate__c,//20211009 lt add |
| | | pbe.Id, prd.Asset_Model_No__c, prd.StorageStatus__c, prd.ProductCode, prd.Id, prd.SFDA_Status__c, prd.Sales_Possibility__c, prd.Name, prd.BSSCategory__c, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | Quantitylist[l], prd.Intra_Trade_List_RMB__c, prd.Intra_Trade_List_RMB__c, prd.Intra_Trade_Cost_RMB__c, prd.Packing_list_manual__c |
| | | // 多年保修 start |
| | | , prd.Entend_gurantee_period_all__c |
| | | , prd.Intra_Trade_Gurantee_RMB__c |
| | | , prd.GuranteeType__c |
| | | , prd.Intra_Trade_Service_RMB__c |
| | | , prd.Maintenance_Price_Year__c |
| | | // 多年保修 end |
| | | ); |
| | | |
| | | } else { |
| | | continue; |
| | | } |
| | | } |
| | | } else { |
| | | continue; |
| | | // c = new QELine(i, pbe.Id, prd.Asset_Model_No__c, prd.ProductCode, prd.Id, prd.SFDA_Status__c, prd.Sales_Possibility__c, prd.Name, prd.BSSCategory__c, |
| | | // Quantitylist[l], 0, 0, 0); // pbe ない時も追加する、setProductEntry() のロジックと違います。 |
| | | } |
| | | activities.add(c); |
| | | i++; |
| | | rightcnt++; |
| | | lineflg = true; |
| | | } |
| | | } |
| | | if (lineflg == true) { |
| | | i--; |
| | | } else { |
| | | // 20140507,LW修改。 |
| | | // 当导入的所有商品都不成功时,当前明细行什么都没有做,并且i加一。导致下面循环New QELine(t, i)中i错误。 |
| | | // 修改为:当导入的所有商品都不成功时,当前明细行插入一个空行,之后i加一。 |
| | | QELine a = New QELine(t, i); |
| | | activities.add(a); |
| | | } |
| | | } else { |
| | | QELine a = New QELine(t, i); |
| | | activities.add(a); |
| | | } |
| | | i++; |
| | | if (i > 149) { |
| | | break; |
| | | } |
| | | } |
| | | // messageを出す |
| | | errorflg = true; |
| | | errormessage = '数据导入结束,导入 ' + codelist.size() + ' 件,成功' + rightcnt + ' 件'; |
| | | pageArrange(); |
| | | |
| | | return null; |
| | | |
| | | } |
| | | |
| | | //販売店1 |
| | | public void getSalesId1() { |
| | | system.debug('○○○○○○○○○○○○○○○Welcome to getSalesId1!!'); |
| | | system.debug('▼▼▼▼▼SalesId1:' + SalesId1); |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | List<Account> accs = New List<Account>(); |
| | | accs = [select Id, Name, Sales_Shop_Class__c From Account Where Id = :SalesId1]; |
| | | If (accs.size() > 0) { |
| | | SalesShopClass1 = accs[0].Sales_Shop_Class__c; |
| | | opp.Agency1__c = accs[0].Id; |
| | | } |
| | | pageArrange(); |
| | | } |
| | | |
| | | //販売店2 |
| | | public void getSalesId2() { |
| | | system.debug('○○○○○○○○○○○○○○○Welcome to getSalesId2!!'); |
| | | system.debug('▼▼▼▼▼SalesId2:' + SalesId2); |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | List<Account> accs = New List<Account>(); |
| | | accs = [select Id, Name, Sales_Shop_Class__c From Account Where Id = :SalesId2]; |
| | | If (accs.size() > 0) { |
| | | SalesShopClass2 = accs[0].Sales_Shop_Class__c; |
| | | opp.Agency2__c = accs[0].Id; |
| | | } |
| | | pageArrange(); |
| | | } |
| | | |
| | | |
| | | //Button Ivents============================================================ |
| | | |
| | | //cancel button |
| | | public void cancel() { |
| | | system.debug('○○○○○○○○○○○○○○○Welcome to CancelButton!!'); |
| | | system.debug('selection_hp' + selection_hp); |
| | | } |
| | | |
| | | //PriceStatusUpdate button、TODO productCompare(jsのところ)1件ずつ検索していますが、今後、webserviceを使って一括か高速かできます。 |
| | | public void PriceStatusUpdate() { |
| | | system.debug('○○○○○○○○○○○○○○○Welcome to PriceStatusUpdate!!'); |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | //全件洗い替えします。 |
| | | if (activities.size() > 0) { |
| | | for (QELine a : activities) { |
| | | if ((a.Asset_Model != null) && (a.Asset_Model != '')) { |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | // 只要更新,就生成新报价编码 |
| | | if (a.PageObject.SFDA_Status__c != a.latestInfo.SFDA_Status || |
| | | a.PageObject.Name__c != a.latestInfo.ProductName || |
| | | a.ListPrice_Page != a.latestInfo.ListPrice || |
| | | a.PageObject.Cost__c != a.latestInfo.Cost || |
| | | a.Cost_c != a.latestInfo.Cost |
| | | // 多年保修 start |
| | | //计提金额 |
| | | || a.ProductGuranteePrice != a.latestInfo.Intra_Trade_Gurantee |
| | | || a.PageObject.productServicePrice__c != a.latestInfo.Intra_Trade_Service |
| | | // 维修合同报价 |
| | | || a.Maintenance_Price_Year != a.latestInfo.Maintenance_Price_Year |
| | | // 多年保修 end |
| | | ) { |
| | | system.debug('qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq:'); |
| | | system.debug('上次SFDA状态:'+a.PageObject.SFDA_Status__c); |
| | | system.debug('最新的SFDA状态:'+a.latestInfo.SFDA_Status); |
| | | system.debug('上次Name__c:'+a.PageObject.Name__c); |
| | | system.debug('最新的ProductName:'+a.latestInfo.ProductName); |
| | | system.debug('上次ListPrice:'+a.ListPrice_Page); |
| | | system.debug('最新的上次ListPrice:'+a.latestInfo.ListPrice); |
| | | system.debug('上次Cost__c:'+a.Cost_c); |
| | | system.debug('最新的Cost:'+a.latestInfo.Cost); |
| | | system.debug('上次Cost__c:'+a.Cost_c); |
| | | system.debug('最新的Cost:'+a.latestInfo.Cost); |
| | | system.debug('上次计提金额:'+a.ProductGuranteePrice); |
| | | system.debug('最新的计提金额:'+a.latestInfo.Intra_Trade_Gurantee); |
| | | system.debug('上次nodis:'+a.PageObject.productServicePrice__c); |
| | | system.debug('最新的nodis:'+a.latestInfo.Intra_Trade_Service); |
| | | system.debug('上次维修合同报价:'+a.Maintenance_Price_Year); |
| | | system.debug('最新的维修合同报价:'+a.latestInfo.Maintenance_Price_Year); |
| | | system.debug('newQuoteFlag6:'+newQuoteFlag); |
| | | newQuoteFlag = true; |
| | | } |
| | | if (a.pageObject.Name__c != a.latestInfo.ProductName) { |
| | | a.changed_name = true; |
| | | } |
| | | if (a.pageObject.SFDA_Status__c != a.latestInfo.SFDA_Status) { |
| | | a.changed_sfda = true; |
| | | } |
| | | if (a.ListPrice_Page != a.latestInfo.ListPrice) { |
| | | a.changed_list = true; |
| | | } |
| | | if (a.pageObject.Cost__c != a.latestInfo.Cost) { |
| | | a.changed_cost = true; |
| | | } |
| | | // TODO katsu SFDAステータスの確認などいらないですか(最新商品XXXの項目も) |
| | | a.PageObject.SFDA_Status__c = a.latestInfo.SFDA_Status; |
| | | a.PageObject.Name__c = a.latestInfo.ProductName; |
| | | a.ListPrice_Page = a.latestInfo.ListPrice; |
| | | a.PageObject.Cost__c = a.latestInfo.Cost; |
| | | a.Cost_c = a.latestInfo.Cost; |
| | | //多年保修 start |
| | | a.PageObject.ProductGuranteePrice__c = a.latestInfo.Intra_Trade_Gurantee; |
| | | a.PageObject.GuranteeType__c = a.latestInfo.GuranteeType; |
| | | // 计提金额 |
| | | a.PageObject.productServicePrice__c = a.latestInfo.Intra_Trade_Service; |
| | | // 多年保修年限 |
| | | a.PageObject.ProductEntend_gurantee_period_all__c |
| | | = a.latestInfo.ProductEntend_gurantee_period_all; |
| | | // 维修合同报价 |
| | | a.Maintenance_Price_Year = a.latestInfo.Maintenance_Price_Year; |
| | | //多年保修 end |
| | | } |
| | | } |
| | | productStatusUpdated = true; |
| | | } |
| | | pageArrange(); |
| | | } |
| | | |
| | | //Save button |
| | | public PageReference Save() { |
| | | // Boolean ifdecide=false; |
| | | // List<Opportunity> oppsde = [Select Id, Estimation_Decision__c From Opportunity Where Id = : oppId]; |
| | | // if (oppsde.size() > 0) { |
| | | // if(oppsde[0].Estimation_Decision__c){ |
| | | // ifdecide=true; |
| | | // }else{ |
| | | // ifdecide=false; |
| | | // } |
| | | // } |
| | | // system.debug('oppsde:::::::1' + oppsde ); |
| | | // if(!ifdecide){ |
| | | setOppFromOppInfo(); |
| | | System.debug('Save() start at: ' + System.currentTimeMillis()); |
| | | system.debug('WinOrDecideAlert:::::::3' + WinOrDecideAlert ); |
| | | errorflg = false; |
| | | errormessage = null; |
| | | errorMessagechack = null; |
| | | Savepoint sp = Database.setSavepoint(); |
| | | try { |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | // 报价创建日超过三个月时,点保存时强制更新 |
| | | // CHAN-AZG864 不管在不在报价有效期内,CFDA不可销售的时候,都是报错的,其中不可销售产品显示红字,不应该保存。 |
| | | if (WinOrDecideAlert && (!productStatusUpdated)) { |
| | | errorflg = true; |
| | | errorMessage = '产品状态发生变化,请更新'; |
| | | return null; |
| | | } |
| | | if (checkSFDAStatus1(false) == false) { |
| | | errorflg = true; |
| | | errormessage = '请更新不可销售的产品。'; |
| | | return null; |
| | | } |
| | | |
| | | System.debug('checkSFDAStatus1 finished at: ' + System.currentTimeMillis()); |
| | | |
| | | //データチェック |
| | | if (dataCheck() == false) { |
| | | return null; |
| | | } |
| | | |
| | | System.debug('dataCheck finished at: ' + System.currentTimeMillis()); |
| | | |
| | | // LHJ 授权check Start |
| | | if (enableSales == true && opp.Trade__c == '内貿') { |
| | | |
| | | //经销商产品注册证匹配 |
| | | Map<Id, String> proMap = new Map<Id, String>(); |
| | | |
| | | if (activities.size() > 0) { |
| | | for (QELine qli : activities) { |
| | | if (qli.Asset_Model != null && qli.Asset_Model != '') { |
| | | proMap.put(qli.pageObject.Id__c, qli.PageObject.Name__c); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // GZW 画面出错误消息 |
| | | Map<String, String> chkMap = OpportunityWebService.MapCheckProRegisterDecide(proMap, opp.Agency1__c, ''); |
| | | //this.haveno_Register 没有注册证 状态红色 |
| | | //this.wrong_Register 匹配不上 名字红色 |
| | | if (chkMap.size() > 0) { |
| | | select Id,Product2Id,ProductCode,Product2.Product_ECCode__c,SalesPrice__c,SalesPriceA__c,SalesPriceB__c,SalesPriceC__c,Hidden_flag__c,Product2.ProductStatus__c,Product2.ProductStatusFormula__c |
| | | FROM PricebookEntry where Id in :Idlist]; |
| | | //20191113-XHL---End-将产品状态用产品状态(公式)替换 |
| | | if (pbes.size()==0) { |
| | | errorflg = true; |
| | | //阿西塞多 取消该检查 |
| | | if (chkMap.containsKey('agency')&&!opp.Is_Corrosion__c) { |
| | | ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '第一经销商没有有效的医疗器械经营许可证。')); |
| | | } |
| | | Integer inerr = 0; |
| | | if (activities.size() > 0) { |
| | | for (QELine s : activities) { |
| | | if (s.Asset_Model != null && s.Asset_Model != '') { |
| | | s.haveno_Register = false; |
| | | s.wrong_Register = false; |
| | | if (chkMap.containsKey(s.PageObject.Id__c)) { |
| | | if (chkMap.get(s.PageObject.Id__c) == '1') { |
| | | s.haveno_Register = true; |
| | | inerr ++; |
| | | } else if (chkMap.get(s.PageObject.Id__c) == '2') { |
| | | s.wrong_Register = true; |
| | | inerr ++; |
| | | } |
| | | } |
| | | errormessage = System.Label.Error_Message01; |
| | | return null; |
| | | } |
| | | |
| | | Map<String, PricebookEntry> tempMap = new Map<String, PricebookEntry>(); |
| | | |
| | | for (PricebookEntry pbe:pbes) { |
| | | tempMap.put(pbe.Id, pbe); |
| | | } |
| | | system.debug('<---is_hidden_all---05>' + is_hidden_all); |
| | | is_hidden_all = false; |
| | | for (QELine t:activities) { |
| | | PricebookEntry tmpPbe = tempMap.get(t.pageObject.PricebookEntryId); |
| | | if (tmpPbe != null) { |
| | | if (tmpPbe.SalesPrice__c != null && tmpPbe.Product2.ProductStatus__c == '1' && ( specialDealer == false && is_hidden_user == false && (is_dealer_user == false || tmpPbe.Hidden_flag__c == false))) { |
| | | //20191113-XHL---将产品状态用产品状态(公式)替换 |
| | | //if (tmpPbe.SalesPrice__c != null && tmpPbe.Product2.ProductStatusFormula__c == '1' && (is_hidden_user == false && (is_dealer_user == false || tmpPbe.Hidden_flag__c == false))) { |
| | | t.pageObject.UnitPrice = tmpPbe.SalesPrice__c; |
| | | t.salesPrice = tmpPbe.SalesPrice__c; |
| | | t.salesPriceA = tmpPbe.SalesPriceA__c; |
| | | t.salesPriceB = tmpPbe.SalesPriceB__c; |
| | | t.salesPriceC = tmpPbe.SalesPriceC__c; |
| | | } else if (tmpPbe.SalesPrice__c != null && tmpPbe.Product2.ProductStatus__c == '0' && ( specialDealer == false && is_hidden_user == false && (is_dealer_user == false || tmpPbe.Hidden_flag__c == false))) { |
| | | //20191113-XHL---将产品状态用产品状态(公式)替换 |
| | | //} else if (tmpPbe.SalesPrice__c != null && tmpPbe.Product2.ProductStatusFormula__c == '0' && (is_hidden_user == false && (is_dealer_user == false || tmpPbe.Hidden_flag__c == false))) { |
| | | t.pageObject.UnitPrice = 0; |
| | | t.salesPrice = 0; |
| | | t.salesPriceA = 0; |
| | | t.salesPriceB = 0; |
| | | t.salesPriceC = 0; |
| | | } else { |
| | | t.pageObject.UnitPrice = 0; |
| | | t.salesPrice = 0; |
| | | t.salesPriceA = 0; |
| | | t.salesPriceB = 0; |
| | | t.salesPriceC = 0; |
| | | |
| | | is_hidden_all = true; |
| | | discount = 0; |
| | | } |
| | | } |
| | | } |
| | | if (inerr > 0) { |
| | | errorMessagechack = '请检查红字内容(NMPA状态红字,不可销售产品;产品名称红字,超过经销商经营范围)。'; |
| | | } |
| | | } |
| | | //阿西赛多 是否危险化学品经营许可证 保存提示可以保存 decide提示不可decide 精琢技术 wql 2020/12/30 start |
| | | |
| | | //询价是阿西赛多 判断标识 |
| | | Boolean isDangerError = false; |
| | | //询价不是阿西赛多 判断标识 |
| | | Boolean isNotDangerError = false; |
| | | |
| | | //条件是 内贸 && 经销商 && 是否是阿西赛多 为true |
| | | //没有合并在上面的for循环的原因是,怕有冲突将标识置为false |
| | | if (activities.size() > 0) { |
| | | for (QELine qli : activities) { |
| | | if (qli.Asset_Model != null && qli.Asset_Model != '') { |
| | | //阿西赛多 页面提示报错信息 2020/12/30 start |
| | | //如果询价是阿西赛多 则选择一般产品的标红 |
| | | system.debug('是否阿西赛多询价'); |
| | | system.debug(opp.Is_Corrosion__c); |
| | | if (opp.Is_Corrosion__c) { |
| | | //不是危化品 |
| | | if(!qli.Is_DangerousChemicals){ |
| | | //提示报错 |
| | | isNotDangerError =true; |
| | | //名称报红 |
| | | qli.wrong_Register = true; |
| | | |
| | | } |
| | | |
| | | }else{ |
| | | //如果询价不是阿西赛多,则选择危化品的标红 |
| | | if(qli.Is_DangerousChemicals){ |
| | | //提示报错 |
| | | isDangerError =true; |
| | | //名称报红 |
| | | qli.wrong_Register = true; |
| | | } |
| | | } |
| | | //阿西赛多 页面提示报错信息 wql 2020/12/30 end |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | if (opp.Is_Corrosion__c) { |
| | | String str = OpportunityWebService.checkDangerItem(opp.agency1__c); |
| | | if (str != 'OK') { |
| | | ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, str)); |
| | | } |
| | | system.debug('不是危化品标识:'+isNotDangerError); |
| | | //代表行项目有不是危化品的 |
| | | if(isNotDangerError){ |
| | | //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '当阿西塞多时,行项目的产品必须全选择危化品。')); |
| | | errorflg = true; |
| | | errormessage = '当阿西塞多时,行项目的产品必须全选择危化品。'; |
| | | return null; |
| | | } |
| | | |
| | | |
| | | }else{ |
| | | |
| | | system.debug('危化品标识:'+isDangerError); |
| | | //代表行项目有危化品 |
| | | if(isDangerError){ |
| | | //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '当询价不是阿西塞多时,行项目的产品不能选择危化品。')); |
| | | errorflg = true; |
| | | errormessage = '当询价不是阿西塞多时,行项目的产品不能选择危化品。'; |
| | | return null; |
| | | } |
| | | } |
| | | system.debug('阿西赛多~~~~~end'); |
| | | //阿西赛多 是否危险化学品经营许可证 保存提示可以保存 decide提示不可decide 精琢技术 wql 2020/12/30 end |
| | | |
| | | } |
| | | // LHJ End |
| | | |
| | | System.debug('pageCheck finished at: ' + System.currentTimeMillis()); |
| | | |
| | | PageReference pageRef = new PageReference('/' + oppid); |
| | | if (dataEntry() == false) { |
| | | //msg |
| | | return null; |
| | | } else { |
| | | System.debug('data save finished at: ' + System.currentTimeMillis()); |
| | | //msg |
| | | errorflg = true; |
| | | errorMessage = System.Label.Message_002; |
| | | return null; |
| | | } |
| | | } catch (DmlException de) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = de.getDmlMessage(0); // 1件目のエラーのみ表示 |
| | | system.debug(Logginglevel.ERROR, de.getMessage()); |
| | | system.debug(Logginglevel.ERROR, de.getStackTraceString()); |
| | | } catch (Exception e) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = e.getMessage(); |
| | | system.debug(Logginglevel.ERROR, e.getMessage()); |
| | | system.debug(Logginglevel.ERROR, e.getStackTraceString()); |
| | | } |
| | | |
| | | // } |
| | | // else{ |
| | | // errorflg = true; |
| | | // errormessage = '该询价已经decide,不可再修改'; |
| | | // return null; |
| | | // } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | //OppReflection button |
| | | public PageReference OppReflection() { |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | Savepoint sp = Database.setSavepoint(); |
| | | try { |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | // 报价创建日超过三个月时,点保存时强制更新 |
| | | // CHAN-AZG864 不管在不在报价有效期内,CFDA不可销售的时候,都是报错的,其中不可销售产品显示红字,不应该保存。 |
| | | |
| | | if (WinOrDecideAlert && (!productStatusUpdated)) { |
| | | errorflg = true; |
| | | errorMessage = '产品状态发生变化,请更新'; |
| | | return null; |
| | | } |
| | | if (checkSFDAStatus1(false) == false) { |
| | | errorflg = true; |
| | | errormessage = '请更新不可销售的产品。'; |
| | | return null; |
| | | } |
| | | |
| | | //データチェック |
| | | if (dataCheck() == false) { |
| | | return null; |
| | | } |
| | | |
| | | PageReference pageRef = new PageReference('/' + oppid); |
| | | if (dataEntry() == false) { |
| | | //msg |
| | | return null; |
| | | } else { |
| | | //msg |
| | | return pageRef; |
| | | } |
| | | } catch (DmlException de) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = de.getDmlMessage(0); // 1件目のエラーのみ表示 |
| | | system.debug(Logginglevel.ERROR, de.getMessage()); |
| | | system.debug(Logginglevel.ERROR, de.getStackTraceString()); |
| | | } catch (Exception e) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = e.getMessage(); |
| | | system.debug(Logginglevel.ERROR, e.getMessage()); |
| | | system.debug(Logginglevel.ERROR, e.getStackTraceString()); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | //excelImport |
| | | public PageReference excelImport() { |
| | | /* system.debug('○○○○○○○○○○○○○○○Welcome to excelImport!!'); |
| | | system.debug('▼▼▼▼▼excel_text:' + excel_text); |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | |
| | | //QuoteDecisionButton |
| | | public PageReference QuoteDecision() { |
| | | system.debug('○○○○○○○○○○○○○○○Welcome to QuoteDecision!!'); |
| | | Savepoint sp = Database.setSavepoint(); |
| | | try { |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | if (WinOrDecideAlert && (!productStatusUpdated)) { |
| | | errorflg = true; |
| | | errorMessage = '产品状态发生变化,请更新'; |
| | | return null; |
| | | } |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | errorflg = false; |
| | | errormessage = null; |
| | | //20220214 fy lastbuy start |
| | | if(!ReservedProductVerification()){ |
| | | errorflg = true; |
| | | errormessage = '产品数量不可超过产品预留数量' ; |
| | | return null; |
| | | } |
| | | //20220214 fy lastbuy end |
| | | // 2022-01-12 ssm 报价计算check |
| | | if (checkIsQuoteTrial()) { |
| | | errorflg = true; |
| | | return null; |
| | | } |
| | | |
| | | if (enableSales == true) { |
| | | //販売店状態チェック |
| | | if (dataCheckDecide() == false) { |
| | | return null; |
| | | } |
| | | } |
| | | system.debug('zzzzzzzz2:'); |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | if (checkSFDAStatus2(true) == false) { |
| | | errorflg = true; |
| | | errormessage = '请更新不可销售的产品。'; |
| | | return null; |
| | | } |
| | | |
| | | PageReference pageRef = new PageReference('/' + oppid); |
| | | if (dataCheck() == false) { |
| | | return null; |
| | | } |
| | | |
| | | if (dataEntry() == false) { |
| | | return null; |
| | | } else { |
| | | //引合に見積決定をオン |
| | | if (oppId == null) { |
| | | system.debug('Error is Opportunityid null!!!'); |
| | | } else { |
| | | List<Opportunity> opps = [Select Id, Estimation_Decision__c From Opportunity Where Id = : oppId]; |
| | | if (opps.size() > 0) { |
| | | opps[0].Estimation_Decision__c = true; |
| | | /*↓↓↓見積同期↓↓↓2012/11/28 未使用 |
| | | opps[0].SyncedQuoteId = quoId; |
| | | ↑↑↑ ↑↑↑*/ |
| | | ControllerUtil.updOpp(opps[0]); |
| | | } |
| | | |
| | | errorflg = true; |
| | | errorMessage = System.Label.Message_002; |
| | | |
| | | // cic 134906 start |
| | | Quote q = [select Id from Quote where Id = :quoId]; |
| | | q.Quote_Decision_Date__c = date.Today(); |
| | | update q; |
| | | // cic 134906 end |
| | | |
| | | QuoteDecision = true; |
| | | enableContract = true; |
| | | //--Savebutton |
| | | Save_button = true; |
| | | //--Decisionbutton判定 |
| | | if (verified == true) { |
| | | Decision_button = false; |
| | | } else if (QuoteCorrect == false) { |
| | | Decision_button = true; |
| | | } else if (QuoteDecision == true) { |
| | | Decision_button = true; |
| | | } else { |
| | | Decision_button = false; |
| | | } |
| | | //--SAPButton |
| | | if (QuoteDecision == false) { |
| | | sap_button = true; |
| | | } else if (specialAuthority == false) { |
| | | sap_button = true; |
| | | } else { |
| | | sap_button = false; |
| | | } |
| | | //--決定ボタン使えないようにする |
| | | Decision_button = true; |
| | | |
| | | pageArrange(); |
| | | } |
| | | } |
| | | } catch (DmlException de) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = de.getDmlMessage(0); // 1件目のエラーのみ表示 |
| | | system.debug(Logginglevel.ERROR, de.getMessage()); |
| | | system.debug(Logginglevel.ERROR, de.getStackTraceString()); |
| | | } catch (Exception e) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = e.getMessage(); |
| | | system.debug(Logginglevel.ERROR, e.getMessage()); |
| | | system.debug(Logginglevel.ERROR, e.getStackTraceString()); |
| | | } |
| | | |
| | | //return pageRef; |
| | | return null; |
| | | } |
| | | |
| | | //PrintButton |
| | | public PageReference Print() { |
| | | Savepoint sp = Database.setSavepoint(); |
| | | try { |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | system.debug('○○○○○○○○○○○○○○○Welcome to Print!!'); |
| | | PageReference pageRef; |
| | | |
| | | //Decide前or後 |
| | | if (QuoteDecision == true) { |
| | | //NoSave |
| | | } else { |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | // 报价创建日超过三个月时,点保存时强制更新 |
| | | // CHAN-AZG864 不管在不在报价有效期内,CFDA不可销售的时候,都是报错的,其中不可销售产品显示红字,不应该保存。 |
| | | if (WinOrDecideAlert && (!productStatusUpdated)) { |
| | | errorflg = true; |
| | | errorMessage = '产品状态发生变化,请更新'; |
| | | return null; |
| | | } |
| | | |
| | | |
| | | //データチェック |
| | | if (dataCheck() == false ) { |
| | | return null; |
| | | } |
| | | |
| | | if (dataEntry() == false) { |
| | | //msg |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | //引合に見積提出日を保存 |
| | | List<Opportunity> opps = New List<Opportunity>(); |
| | | if (oppId == null) { |
| | | } else { |
| | | // 打印时,不再更新决定报价 |
| | | opps = [Select Id |
| | | //, Estimation_Decision__c |
| | | From Opportunity Where Id = : oppId]; |
| | | if (opps.size() > 0) { |
| | | //見積に見積印刷日を保存 |
| | | List<Quote> quos = New List<Quote>(); |
| | | if (quoId == null) { |
| | | //印刷させない? |
| | | } else { |
| | | // 打印时,不再更新决定报价 |
| | | quos = [Select Id, |
| | | //Quote_Decision__c, |
| | | Quote_Print_Date__c, Quote_Date__c From Quote Where Id = : quoId]; |
| | | if (quos.size() > 0) { |
| | | //优惠成交价 |
| | | quos[0].Preferential_Trading_Price__c = quo.Preferential_Trading_Price__c; |
| | | //优惠折扣 |
| | | quos[0].Discount__c = quo.Discount__c; |
| | | //优惠价格 |
| | | quos[0].Pricing__c = quo.Pricing__c; |
| | | //单价 |
| | | quos[0].Unit_Price__c = quo.Unit_Price__c; |
| | | //报价金额 |
| | | quos[0].Offer_Amount__c = quo.Offer_Amount__c; |
| | | //Total |
| | | quos[0].TOTAL__c = quo.TOTAL__c; |
| | | //契約内容 |
| | | quos[0].Contract__c = quo.Contract__c; |
| | | //多年保修 start |
| | | quos[0].Preferential_Gurantee_Period__c = quo.Preferential_Gurantee_Period__c; |
| | | //多年保修 end |
| | | if (quos[0].Quote_Date__c == null) { |
| | | quos[0].Quote_Date__c = date.Today(); |
| | | opps[0].Estimation_Proposal_Date__c = date.Today(); |
| | | ControllerUtil.updOpp(opps[0]); |
| | | } |
| | | quos[0].Quote_Print_Date__c = date.Today(); |
| | | ControllerUtil.updQuote(quos[0]); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | pageArrange(); |
| | | } catch (DmlException de) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = de.getDmlMessage(0); // 1件目のエラーのみ表示 |
| | | system.debug(Logginglevel.ERROR, de.getMessage()); |
| | | system.debug(Logginglevel.ERROR, de.getStackTraceString()); |
| | | } catch (Exception e) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = e.getMessage(); |
| | | system.debug(Logginglevel.ERROR, e.getMessage()); |
| | | system.debug(Logginglevel.ERROR, e.getStackTraceString()); |
| | | } |
| | | |
| | | return null; |
| | | |
| | | } |
| | | |
| | | //BackButton |
| | | public PageReference Back() { |
| | | return new Pagereference('/' + oppid); |
| | | } |
| | | public PageReference Jump() { |
| | | System.debug('报价id1:'+quoId); |
| | | //SWAG-C9JCS8 【委托】【紧急】询价GZ-SP-GD0757135报价单问题 fy start |
| | | Boolean isDecide = checkIsDecide(); |
| | | System.debug('询价:' + oppid + '|是否decide: ' + isDecide); |
| | | //SWAG-C9JCS8 【委托】【紧急】询价GZ-SP-GD0757135报价单问题 fy end |
| | | // LHJ 授权check Start |
| | | if (opp.If_Need_Authorize__c == true) { |
| | | ID tmpid = opp.Agency2__c == null ? opp.Agency1__c : opp.Agency2__c; |
| | | List<Account> accName = [select name from Account where id = : tmpid]; |
| | | //授权前允许进行报价试算 精琢技术 thh 2021-09-30 |
| | | // if (accName[0].name != opp.Authorized_Finish_Sales__c) { |
| | | // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '请先授权后,再进行报价试算。')); |
| | | // }else{ |
| | | //报价试算点击时,保存行项目 精琢技术 wql 2021/05/07 start |
| | | if (!isDecide) { |
| | | Save(); |
| | | } else { |
| | | errorflg = true; |
| | | errorMessage = System.Label.Message_002; |
| | | } |
| | | //报价试算点击时,保存行项目 精琢技术 wql 2021/05/07 end |
| | | //报价试算点击时,如果保存了会生成新的报价,进入新报价的报价试算页面 精琢技术 thh 2021-09-30 start |
| | | Quote jump = [select id from Quote where Quote_No__c = :quo.Quote_No__c]; |
| | | System.debug('报价id2:'+jump.Id); |
| | | if(errorMessage == System.Label.Message_002){ |
| | | return new Pagereference('/apex/QuoteTrial?Id=' + jump.Id); |
| | | } |
| | | return null; |
| | | //报价试算点击时,如果保存了会生成新的报价,进入新报价的报价试算页面 精琢技术 thh 2021-09-30 end |
| | | // } |
| | | }else{ |
| | | //报价试算点击时,保存行项目 精琢技术 wql 2021/05/07 start |
| | | if (!isDecide) { |
| | | Save(); |
| | | } |
| | | //报价试算点击时,保存行项目 精琢技术 wql 2021/05/07 end |
| | | System.debug('报价id2:'+quoId); |
| | | return new Pagereference('/apex/QuoteTrial?Id=' + quoId); |
| | | } |
| | | return null; |
| | | } |
| | | // 0表示 対策 |
| | | private void pageArrange() { |
| | | if (activities.size() > 0) { |
| | | for (QELine a : activities) { |
| | | if ((a.Asset_Model == null) || (a.Asset_Model == '')) { |
| | | system.debug('○○○○○○○○○○○○Welcome to pageArrange Asset_Model is △'); |
| | | a.pageobject.subtotal__c = null; |
| | | a.ListPrice_Page = null; |
| | | } else { |
| | | system.debug('○○○○○○○○○○○○Welcome to pageArrange Asset_Model=[' + a.Asset_Model + ']'); |
| | | } |
| | | } |
| | | } |
| | | if (quo.OCM_Agent1_Price_Page__c == null) { |
| | | Salesprofit1 = null; |
| | | qb.SalesCalculation1 = null; |
| | | } |
| | | if (quo.Agent1_Agent2_Price_Page__c == null) { |
| | | Salesprofit2 = null; |
| | | qb.SalesCalculation2 = null; |
| | | } |
| | | } |
| | | |
| | | public boolean dataCheck() { |
| | | //WinOrDecideAlert = false; |
| | | system.debug('○○○○○○○○○○○○Welcome to dataCheck class!!○○○○○○○○○○○○'); |
| | | errorflg = false; |
| | | errormessage = null; |
| | | Boolean error = false; |
| | | integer Gcnt = 0; |
| | | List<String> product2Ids = New List<String>(); |
| | | |
| | | if (activities.size() > 0) { |
| | | system.debug('save:::'+activities); |
| | | for (QELine a : activities) { |
| | | if (String.isBlank(a.PageObject.Id__c) == false) { |
| | | product2Ids.add(a.PageObject.Id__c); |
| | | } |
| | | } |
| | | Map<String, String> loopMap = new Map<String, String>(); |
| | | if (CheckItem != null) { |
| | | Gcnt = CheckItem.size(); |
| | | if (CheckItem.size() > 0) { |
| | | for (QuoteLineItem qli : CheckItem) { |
| | | loopMap.put(qli.PricebookEntry.Product2Id, qli.SFDA_Status__c); |
| | | } |
| | | } |
| | | } |
| | | // |
| | | // ここを修正したら、NFM007.triggerも要確認 |
| | | prd2LatestValMap = new Map<Id, Product2>(); |
| | | integer cntPrd2 = 0; |
| | | for (Product2 prd2 : [Select Id, Estimation_Entry_Possibility__c, SFDA_Status__c, Packing_list_manual__c |
| | | From Product2 Where Id IN :product2Ids]) { |
| | | cntPrd2 = cntPrd2 + 1; |
| | | if (prd2.Estimation_Entry_Possibility__c != '○') { |
| | | error = true; |
| | | } |
| | | if (prd2.Estimation_Entry_Possibility__c == 'M') { |
| | | |
| | | error = false; |
| | | } |
| | | if (prd2.SFDA_Status__c != loopMap.get(prd2.Id)) { |
| | | // |
| | | WinOrDecideAlert = true; |
| | | } |
| | | |
| | | prd2LatestValMap.put(prd2.Id, prd2); |
| | | } |
| | | if (cntPrd2 != Gcnt) { |
| | | WinOrDecideAlert = false; |
| | | } |
| | | |
| | | } |
| | | |
| | | if (error == true && WinOrDecideAlert == false) { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | errorMessage = System.Label.Error_Message37; |
| | | return false; |
| | | } |
| | | |
| | | if (checkAgentsDeleteFlag() == false) { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | PageArrange(); |
| | | errorflg = false; |
| | | errorMessage = null; |
| | | return true; |
| | | } |
| | | |
| | | private boolean checkIsQuoteTrial() { |
| | | Boolean error = false; |
| | | errorflg = false; |
| | | errormessage = null; |
| | | //询价上的【是否需要价格申请】为是的场合,才要检查做没做过报价试算 thh 2021-11-03 start |
| | | if(opp.If_Need_PriceApply__c){ |
| | | //wql 报价试算 判断是否进行过报价试算 start |
| | | if(!quo.IsQuoteTrial__c){ |
| | | //没有报价试算过进入 |
| | | error = true; |
| | | errormessage = 'decide报价还没进行报价试算,请先报价试算!' ; |
| | | } |
| | | //wql 报价试算 判断是否进行过报价试算 end |
| | | //wql 报价试算 检索促销政策是否有效 start |
| | | //1.获取报价id |
| | | //2.根据报价id 检索出所有报价试算行,并带出每一行,选择的政策的有效期 3个表 |
| | | //3.循环遍历 是否所有选择的政策有效期都为true 只有有一个为false 就返回true 直接跳出循环 |
| | | //如果报价id不为空的话 |
| | | if(quoId !=null){ |
| | | boolean IsActivePsp = true; |
| | | String errorPsp =''; |
| | | //根据id 检索 所有的试算行上面选择政策的有效期 |
| | | List<PromotionSalesProducts__c> promotionSalesProductsList =[select id,PromotionSales__c,QuantityId__c,PromotionSales__r.name,PromotionSales__r.IsPolicyEffective__c,recordTypeName__c from PromotionSalesProducts__c where QuantityId__c=: quoId]; |
| | | //如果有报价试算数据 说明选择了促销政策 |
| | | if(promotionSalesProductsList.size()>0){ |
| | | for(PromotionSalesProducts__c psp :promotionSalesProductsList){ |
| | | if(psp.PromotionSales__r.IsPolicyEffective__c == '无效'&&psp.recordTypeName__c!='NormalProduct'){ |
| | | IsActivePsp =false; |
| | | errorPsp = psp.PromotionSales__r.name; |
| | | //既存データ数の確認 |
| | | Integer j = 0; |
| | | for (QELine s:activities) { |
| | | if ((s.productName==null) || (s.productName=='')) { |
| | | break; |
| | | } |
| | | } |
| | | j++; |
| | | } |
| | | |
| | | if(!IsActivePsp){ |
| | | error = true; |
| | | errormessage = '报价试算中,选择的促销政策:'+errorPsp+',不在有效期内,请检查!' ; |
| | | } |
| | | } |
| | | //wql 报价试算 检索促销政策是否有效 end |
| | | } |
| | | //询价上的【是否需要价格申请】为是的场合,才要检查做没做过报价试算 thh 2021-11-03 end |
| | | return error; |
| | | } |
| | | //=======Temporary===== |
| | | tmpactivities = activities; |
| | | |
| | | private boolean dataCheckDecide() { |
| | | Boolean error = false; |
| | | errorflg = false; |
| | | errormessage = null; |
| | | //=======Initialize========= |
| | | activities = new List<QELine>(); |
| | | Integer i = 0; |
| | | Integer xlscnt = 0; |
| | | Integer rightcnt = 0; // 成功した数をカウント |
| | | |
| | | if (checkAgentsDeleteFlag() == false) { |
| | | return false; |
| | | } |
| | | if (WinOrDecideAlert && (!productStatusUpdated)) { |
| | | // error = true; |
| | | // // CHAN-AVG3PW 询价报价画面规则变更 |
| | | // //errorMessage = '产品状态发生变化,请更新'; |
| | | PriceStatusUpdate(); |
| | | // errorMessage = '产品状态发生变化,已经更新,请确认后再次点击决定。'; |
| | | } |
| | | if (opp.Agency1__c == null) { |
| | | opp.Agency1__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (quo.OCM_Agent1_Price_Page__c == null || quo.OCM_Agent1_Price_Page__c == 0) { |
| | | quo.OCM_Agent1_Price__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (opp.Agency2__c == null && quo.Agent1_Agent2_Price_Page__c != null) { |
| | | opp.Agency2__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (opp.Agency2__c != null && quo.Agent1_Agent2_Price_Page__c == null) { |
| | | quo.Agent1_Agent2_Price__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | string[] xlslists = excel_text.split('\n',-1); |
| | | List<string> xlslist = New list<string>(); |
| | | List<string> codelist = New List<string>(); |
| | | List<Integer> Quantitylist = New List<Integer>(); |
| | | List<string> setlist = New List<string>(); |
| | | |
| | | // LHJ 授权check Start |
| | | if (opp.If_Need_Authorize__c == true) { |
| | | ID tmpid = opp.Agency2__c == null ? opp.Agency1__c : opp.Agency2__c; |
| | | System.debug('tmpid==='+tmpid); |
| | | List<Account> accName = [select name from Account where id = : tmpid]; |
| | | System.debug('accName==='+accName); |
| | | System.debug('Authorized_Finish_Sales__c==='+opp.Authorized_Finish_Sales__c); |
| | | if (accName[0].name != opp.Authorized_Finish_Sales__c) { |
| | | error = true; |
| | | errormessage = '经销商未授权或授权未完成,请先授权。' ; |
| | | } |
| | | } |
| | | Map<String, Integer> mp = new Map<String, Integer>(); |
| | | string xlscode; |
| | | Integer xlsQuantity; |
| | | string xlset; |
| | | |
| | | if (opp.Trade__c == '内貿') { |
| | | // //经销商产品注册证匹配 |
| | | Map<Id, String> proMap = new Map<Id, String>(); |
| | | if (activities.size() > 0) { |
| | | for (QELine qli : activities) { |
| | | if (qli.Asset_Model != null && qli.Asset_Model != '') { |
| | | proMap.put(qli.pageObject.Id__c, qli.PageObject.Name__c); |
| | | } |
| | | } |
| | | } |
| | | //阿西赛多 取消查询医疗器械经营许可证 精琢技术 wql 2021/01/14 start |
| | | Map<String, String> chkMap = new Map<String, String>(); |
| | | if(!opp.Is_Corrosion__c){ |
| | | // GZW 画面出错误消息 |
| | | chkMap = OpportunityWebService.MapCheckProRegisterDecide(proMap, opp.Agency1__c, ''); |
| | | } |
| | | //阿西赛多 取消查询医疗器械经营许可证 精琢技术 wql 2021/01/14 end |
| | | //this.haveno_Register 没有注册证 状态红色 |
| | | //this.wrong_Register 匹配不上 名字红色 |
| | | if (chkMap.size() > 0) { |
| | | errorflg = true; |
| | | error = true; |
| | | //errormessage = '请检查红字内容(NMPA状态红字,不可销售产品;产品名称红字,超过经销商经营范围)。'; |
| | | if (chkMap.containsKey('agency')) { |
| | | ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, '第一经销商没有有效的医疗器械经营许可证。')); |
| | | } |
| | | Integer inerr = 0; |
| | | if (activities.size() > 0) { |
| | | for (QELine s : activities) { |
| | | if (s.Asset_Model != null && s.Asset_Model != '') { |
| | | if (chkMap.containsKey(s.PageObject.Id__c)) { |
| | | if (chkMap.get(s.PageObject.Id__c) == '1') { |
| | | s.haveno_Register = true; |
| | | inerr ++; |
| | | } else if (chkMap.get(s.PageObject.Id__c) == '2') { |
| | | s.wrong_Register = true; |
| | | inerr ++; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (inerr > 0) { |
| | | errormessage = '请检查红字内容(NMPA状态红字,不可销售产品;产品名称红字,超过经销商经营范围)。'; |
| | | } |
| | | return false; |
| | | } |
| | | //阿西赛多 是否危险化学品经营许可证 保存提示可以保存 decide提示不可decide 精琢技术 wql 2020/12/30 start |
| | | |
| | | //询价是阿西赛多 判断标识 |
| | | Boolean isDangerError = false; |
| | | //询价不是阿西赛多 判断标识 |
| | | Boolean isNotDangerError = false; |
| | | |
| | | //条件是 内贸 && 经销商 && 是否是阿西赛多 为true |
| | | //没有合并在上面的for循环的原因是,怕有冲突将标识置为false |
| | | if (activities.size() > 0) { |
| | | for (QELine qli : activities) { |
| | | if (qli.Asset_Model != null && qli.Asset_Model != '') { |
| | | //阿西赛多 页面提示报错信息 2020/12/30 start |
| | | //如果询价是阿西赛多 则选择一般产品的标红 |
| | | system.debug('是否阿西赛多询价'); |
| | | system.debug(opp.Is_Corrosion__c); |
| | | if (opp.Is_Corrosion__c) { |
| | | //不是危化品 |
| | | if(!qli.Is_DangerousChemicals){ |
| | | //提示报错 |
| | | isNotDangerError =true; |
| | | //名称报红 |
| | | qli.wrong_Register = true; |
| | | |
| | | } |
| | | |
| | | }else{ |
| | | //如果询价不是阿西赛多,则选择危化品的标红 |
| | | if(qli.Is_DangerousChemicals){ |
| | | //提示报错 |
| | | isDangerError =true; |
| | | //名称报红 |
| | | qli.wrong_Register = true; |
| | | } |
| | | } |
| | | //阿西赛多 页面提示报错信息 wql 2020/12/30 end |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | //阿西赛多 是否危险化学品经营许可证 保存提示可以保存 decide提示不可decide 精琢技术 wql 2020/09/10 start |
| | | |
| | | if (enableSales == true&&opp.Is_Corrosion__c&&opp.Trade__c == '内貿') { |
| | | //条件是 内贸 && 经销商 && 是否是阿西赛多 为true |
| | | String str = OpportunityWebService.checkDangerItem(opp.agency1__c); |
| | | if (str != 'OK') { |
| | | error = true; |
| | | errormessage = str; |
| | | } |
| | | |
| | | //代表行项目有不是危化品的 |
| | | if(isNotDangerError){ |
| | | error = true; |
| | | errormessage = '当阿西塞多时,行项目的产品必须全选择危化品。'; |
| | | } |
| | | }else if(!opp.Is_Corrosion__c){ |
| | | //代表行项目有危化品 |
| | | if(isDangerError){ |
| | | error = true; |
| | | errormessage = '当询价不是阿西塞多时,行项目的产品不能选择危化品。'; |
| | | } |
| | | } |
| | | //阿西赛多 是否危险化学品经营许可证 保存提示可以保存 decide提示不可decide 精琢技术 wql 2020/09/10 end |
| | | |
| | | |
| | | } |
| | | // LHJ End |
| | | |
| | | if (error == true) { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | private Boolean checkAgentsDeleteFlag() { |
| | | // Check Agents |
| | | List<Id> accIds = new List<Id>(); |
| | | if (opp.Agency1__c != null) { |
| | | accIds.add(opp.Agency1__c); |
| | | } |
| | | if (opp.Agency2__c != null) { |
| | | accIds.add(opp.Agency2__c); |
| | | } |
| | | if (accIds.size() > 0) { |
| | | List<Account> agentAccs = [SELECT Id, Delete_Flag__c, Is_Active_Formula__c, Sales_Shop_Class__c FROM Account WHERE Id IN :accIds]; |
| | | //Boolean deleteFlag1 = false, deleteFlag2 = false; |
| | | String activeFormula1 = null, activeFormula2 = null; |
| | | for (Account local : agentAccs) { |
| | | if (local.Sales_Shop_Class__c == '医疗修理经销商') { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | //-------CHAN-B9TBG4; 20190301----------UpdateStart---------------------------------------- |
| | | if (local.Id == opp.Agency1__c) { |
| | | errorMessage = '请确认第一经销商的经销商资质'; |
| | | return false; |
| | | } |
| | | //else { |
| | | // errorMessage = '请确认第二经销商的经销商资质'; |
| | | //} |
| | | //return false; |
| | | //-------CHAN-B9TBG4; 20190301----------UpdateStop---------------------------------------- |
| | | } |
| | | |
| | | if (local.Id == opp.Agency1__c) { |
| | | activeFormula1 = local.Is_Active_Formula__c; |
| | | } |
| | | } |
| | | for (Account local : agentAccs) { |
| | | if (local.Id == opp.Agency2__c) { |
| | | activeFormula2 = local.Is_Active_Formula__c; |
| | | } |
| | | } |
| | | |
| | | if (activeFormula1 == '无效' && activeFormula2 == '无效') { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | errorMessage = System.Label.Agent1_and_Agent2_were_Deleted; |
| | | return false; |
| | | } else if (activeFormula1 == '无效') { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | errorMessage = System.Label.Agent1_was_Deleted; |
| | | return false; |
| | | } else if (activeFormula2 == '无效') { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | errorMessage = System.Label.Agent2_was_Deleted; |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | // 内貿の場合Check Agency1 |
| | | if (opp.Agency1__c != null && opp.Trade__c == '内貿') { |
| | | Account acc = [select Sales_Shop_Class__c, Business_Authorization_No__c, Business_Paper_Expiration_Date__c, |
| | | Tax_Practice_No__c, Tax_Practice_Expiration_Date__c, Medical_Equipment_Num__c, Is_Active_Formula__c, |
| | | Medical_Equipment_Expiration_Date__c from Account where Id = :opp.Agency1__c]; |
| | | //经销商分类只有特约、一级或者集中采购才可以进行报价 |
| | | List<String> salesClazz = new List<String> {'特約販売店(区域)', '特約販売店(製品)', '特約販売店(製品+区域)', '一級販売店', '集采经销商'}; |
| | | // 有效/无效(公式)!= 有效 |
| | | if (acc.Is_Active_Formula__c != '有效') { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | errorMessage = '请选择有效的经销商'; |
| | | return false; |
| | | } |
| | | // 经销商分类 是 二级 或 其他 |
| | | //else if (acc.Sales_Shop_Class__c == '二級販売店' || acc.Sales_Shop_Class__c == 'その他') { |
| | | //CHAN-BQE6LA 【委托】【重要】询价经销商1判断逻辑 精琢技术 wql 2020/06/10 start |
| | | //注释原来逻辑 |
| | | // else if (acc.Sales_Shop_Class__c == '二級販売店') { |
| | | // PageArrange(); |
| | | // errorflg = true; |
| | | // errorMessage = '请确认第一经销商的经销商资质'; |
| | | // return false; |
| | | // } |
| | | else if(!salesClazz.contains(acc.Sales_Shop_Class__c)){ |
| | | PageArrange(); |
| | | errorflg = true; |
| | | errorMessage = '经销商1的经销商分类为:特约,一级,集中采购才可以报价'; |
| | | return false; |
| | | } |
| | | //CHAN-BQE6LA 【委托】【重要】询价经销商1判断逻辑 精琢技术 wql 2020/06/10 end |
| | | // 营业执照有效期限” 或“税务登记证有效期限” 或“医疗器械经营企业许可证有效期限” 其中一个证超过有效期的话 |
| | | //去掉营业许可证的检查 因为阿西赛多不用检查 一般产品上面检查过 精琢技术 wql 2021/01/15 start |
| | | //&& String.isBlank(acc.Medical_Equipment_Num__c) == false |
| | | // && acc.Medical_Equipment_Expiration_Date__c != null && acc.Medical_Equipment_Expiration_Date__c >= Date.today() |
| | | else if (! |
| | | // 满足如下六个字段条件为有效,否则无效 |
| | | (String.isBlank(acc.Tax_Practice_No__c) == false |
| | | && (acc.Tax_Practice_Expiration_Date__c == null || acc.Tax_Practice_Expiration_Date__c >= Date.today()) |
| | | |
| | | && String.isBlank(acc.Business_Authorization_No__c) == false |
| | | && acc.Business_Paper_Expiration_Date__c != null && acc.Business_Paper_Expiration_Date__c >= Date.today()) |
| | | ) { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | errorMessage = '请确认第一经销商的经销商资质'; |
| | | return false; |
| | | } |
| | | //去掉营业许可证的检查 因为阿西赛多不用检查 一般产品上面检查过 精琢技术 wql 2021/01/15 end |
| | | else {} |
| | | /* |
| | | if (acc.Sales_Shop_Class__c == '二級販売店' || acc.Sales_Shop_Class__c == 'その他') { |
| | | if (! |
| | | (!String.isBlank(acc.Tax_Practice_No__c) |
| | | && (acc.Tax_Practice_Expiration_Date__c == null || acc.Tax_Practice_Expiration_Date__c >= Date.today()) |
| | | && !String.isBlank(acc.Medical_Equipment_Num__c) |
| | | && (acc.Medical_Equipment_Expiration_Date__c != null && acc.Medical_Equipment_Expiration_Date__c >= Date.today()) |
| | | && !String.isBlank(acc.Business_Authorization_No__c) |
| | | && (acc.Business_Paper_Expiration_Date__c != null && acc.Business_Paper_Expiration_Date__c >= Date.today()))) { |
| | | PageArrange(); |
| | | errorflg = true; |
| | | errorMessage = '请确认第一经销商的经销商资质'; |
| | | return false; |
| | | } |
| | | } |
| | | */ |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | // 报价创建日超过三个月时,如产品停产或CFDA失效,不可以保存,提示“请更新停止销售的产品” |
| | | // 做DECIDE时,如产品停产或CFDA失效,不可以保存,提示“请更新停止销售的产品” |
| | | private boolean checkSFDAStatus2(boolean dodecide) { |
| | | // CHAN-AZG864 不管在不在报价有效期内,CFDA不可销售的时候,都是报错的,其中不可销售产品显示红字,不应该保存。 |
| | | //if (over3month == false && dodecide == false) { |
| | | // return true; |
| | | //} |
| | | |
| | | for (QELine a : activities) { |
| | | if ((a.Asset_Model != null) && (a.Asset_Model != '')) { |
| | | system.debug('zzzzzzzz1:'+a.PageObject.SFDA_Status__c); |
| | | if (a.PageObject.SFDA_Status__c != '有効' && |
| | | a.PageObject.SFDA_Status__c != '有効(再申請中)' && |
| | | a.PageObject.SFDA_Status__c != '不要' && |
| | | // LHJ 20181221 CBPR Start |
| | | a.PageObject.SFDA_Status__c != '暂停出库(短期)' && |
| | | // LHJ 20181221 CBPR End |
| | | a.PageObject.SFDA_Status__c != '失効(期限内生産済在庫対応)' |
| | | /*&& |
| | | (a.PageObject.SFDA_Status__c != '失効(再申請中)' || dodecide != false)*/ |
| | | ) { |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | private boolean checkSFDAStatus1(boolean dodecide) { |
| | | // CHAN-AZG864 不管在不在报价有效期内,CFDA不可销售的时候,都是报错的,其中不可销售产品显示红字,不应该保存。 |
| | | //if (over3month == false && dodecide == false) { |
| | | // return true; |
| | | //} |
| | | for (QELine a : activities) { |
| | | if ((a.Asset_Model != null) && (a.Asset_Model != '')) { |
| | | if (a.PageObject.SFDA_Status__c != '有効' && |
| | | a.PageObject.SFDA_Status__c != '有効(再申請中)' && |
| | | a.PageObject.SFDA_Status__c != '不要' && |
| | | a.PageObject.SFDA_Status__c != '失効(期限内生産済在庫対応)' && |
| | | // LHJ CBPR 20181221 Start |
| | | (a.PageObject.SFDA_Status__c != '暂停出库(长期)') && |
| | | (a.PageObject.SFDA_Status__c != '暂停出库(短期)') && |
| | | // LHJ CBPR 20181221 End |
| | | (a.PageObject.SFDA_Status__c != '失効(再申請中)' || dodecide != false) |
| | | ) { |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | //SWAG-C9JCS8 【委托】【紧急】询价GZ-SP-GD0757135报价单问题 fy start |
| | | private boolean checkIsDecide() { |
| | | List<Opportunity> oppsde = [Select Id, Estimation_Decision__c From Opportunity Where Id = : oppId]; |
| | | if (oppsde.size() > 0) { |
| | | if(oppsde[0].Estimation_Decision__c){ |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | //SWAG-C9JCS8 【委托】【紧急】询价GZ-SP-GD0757135报价单问题 fy end |
| | | |
| | | public boolean dataEntry() { |
| | | system.debug('activities++++----****3'+activities); |
| | | //SWAG-C9JCS8 【委托】【紧急】询价GZ-SP-GD0757135报价单问题 fy start |
| | | // Boolean ifdecide=false; |
| | | // List<Opportunity> oppsde = [Select Id, Estimation_Decision__c From Opportunity Where Id = : oppId]; |
| | | // if (oppsde.size() > 0) { |
| | | // if(oppsde[0].Estimation_Decision__c){ |
| | | // ifdecide=true; |
| | | // }else{ |
| | | // ifdecide=false; |
| | | // } |
| | | // } |
| | | System.debug('start checkIsDecide at: ' + System.currentTimeMillis()); |
| | | Boolean ifdecide=checkIsDecide(); |
| | | System.debug('finished checkIsDecide at: ' + System.currentTimeMillis()); |
| | | if(!ifdecide){ |
| | | //SWAG-C9JCS8 【委托】【紧急】询价GZ-SP-GD0757135报价单问题 fy end |
| | | system.debug('○○○○○○○○○○○○Welcome to dataEntry class!!○○○○○○○○○○○○'); |
| | | Boolean error = false; |
| | | Boolean detail = false; |
| | | if ((quo.QuoteName__c == null) || (quo.QuoteName__c == '')) { |
| | | quo.QuoteName__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (quo.Dealer_Final_Price_Page__c == null) { |
| | | quo.Dealer_Final_Price__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (qb.Quote_Adjust_Calculate == null) { |
| | | quo.Quote_Adjust_Calculate__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (quo.Quote_Adjust_Amount_Page__c == null) { |
| | | quo.Quote_Adjust_Amount__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (quo.Quote_Expiration_Date__c == null) { |
| | | quo.Quote_Expiration_Date__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | //decimal temSalesAmount1 = 0; // 2018/09/28 CHAN-B4YAB8 经销商小计合计 end |
| | | system.debug('activities++++----****2'+activities); |
| | | for (QELine a : activities) { |
| | | if ((a.Asset_Model != null) && (a.Asset_Model != '')) { |
| | | if (a.PageObject.Quantity__c == null || a.PageObject.Quantity__c == 0) { |
| | | a.PageObject.Quantity__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (a.PageObject.UnitPrice_Page__c == null) { |
| | | a.PageObject.UnitPrice__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | if (a.PageObject.AgencyUnitPrice__c == null) { |
| | | a.PageObject.AgencyUnitPrice__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | //temSalesAmount1 = temSalesAmount1 + a.PageObject.AgencySubtotal__c; // 2018/09/29 CHAN-B4YAB8 经销商小计累加 |
| | | if (a.PageObject.PricebookEntryId == null) { |
| | | error = true; |
| | | errormessage = System.Label.Error_Message27; |
| | | } |
| | | detail = true; |
| | | } |
| | | } |
| | | if (enableSales == true) { |
| | | // LHJ Start |
| | | if (quo.Agency1__c == null) { |
| | | quo.Agency1__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } |
| | | // LHJ End |
| | | if (quo.OCM_Agent1_Price_Page__c == null) { |
| | | quo.OCM_Agent1_Price__c.addError(System.Label.Error_Message3); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message3; |
| | | } else { |
| | | |
| | | } |
| | | } else { |
| | | |
| | | if (opp.Agency1__c != null) { |
| | | opp.Agency1__c.addError(System.Label.Error_Message30); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message30; |
| | | } |
| | | if (quo.OCM_Agent1_Price_Page__c != null) { |
| | | quo.OCM_Agent1_Price__c.addError(System.Label.Error_Message30); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message30; |
| | | } |
| | | if (opp.Agency2__c != null) { |
| | | opp.Agency2__c.addError(System.Label.Error_Message30); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message30; |
| | | } |
| | | if (quo.Agent1_Agent2_Price_Page__c != null) { |
| | | quo.Agent1_Agent2_Price__c.addError(System.Label.Error_Message30); |
| | | error = true; |
| | | errormessage = System.Label.Error_Message30; |
| | | } |
| | | |
| | | } |
| | | |
| | | if (DisCalculation >= 1000 || DisCalculation <= -1000) { |
| | | error = true; |
| | | errormessage = System.Label.Error_Message38; |
| | | } |
| | | if (qb.SalesCalculation1 >= 1000 || qb.SalesCalculation1 <= -1000) { |
| | | error = true; |
| | | errormessage = System.Label.Error_Message38; |
| | | } |
| | | if (qb.SalesCalculation2 >= 1000 || qb.SalesCalculation2 <= -1000) { |
| | | error = true; |
| | | errormessage = System.Label.Error_Message38; |
| | | } |
| | | |
| | | if (error == true) { |
| | | PageArrange(); |
| | | |
| | | errorflg = true; |
| | | return false; |
| | | } |
| | | |
| | | //Quote------------------------------------------------------------- |
| | | //商談Id、価格表Id |
| | | //見積名称、標準定価合計、見積金額合計(積上)、病院の契約金額、原価、 |
| | | //値引金額計算、値引き金額金額、見積調整金額計算、見積調整金額金額 |
| | | //第一販売店名称、金額、利益、%、第二販売店名称、金額、利益、% |
| | | //优惠成交价、优惠折扣、优惠价格、单价、报价金额、Total |
| | | //契約内訳、印刷病院名称、見積有効期限日、見積表記コメント |
| | | |
| | | //引合単位の見積Noが必要 |
| | | List<Quote> maxQuote_No = [select Quote_No__c From Quote Where OpportunityId = :oppid and (not Quote_No__c like '%Old') order by Quote_No_last2__c desc NULLS LAST limit 1]; |
| | | String oppNo; |
| | | Integer l = 1; |
| | | if (maxQuote_No.size() > 0) { |
| | | try { |
| | | oppNo = maxQuote_No[0].Quote_No__c; |
| | | l = Integer.valueOf(oppNo.substring(oppNo.length() - 2)) + 1; |
| | | } catch (System.TypeException e) { |
| | | system.debug('maxQuote_No Error: quote.id=' + maxQuote_No[0].id); |
| | | } |
| | | } else { |
| | | system.debug('first Quote'); |
| | | } |
| | | oppNo = '00' + String.valueof(l); |
| | | oppNo = oppNo.substring(oppNo.length() - 2); |
| | | for (string xls:xlslists) { |
| | | if (xls==null || xls=='') { |
| | | //null |
| | | } else { |
| | | xlscode = null; |
| | | xlsQuantity = null; |
| | | xlset = null; |
| | | xlslist = xls.split('\t',-1); |
| | | Integer iCount = 0; |
| | | for (String s:xlslist) { |
| | | if (iCount== 1) { |
| | | if (s=='' || s==null) { |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message02; |
| | | activities = tmpactivities; |
| | | return null; |
| | | } else { |
| | | s = s.trim(); |
| | | xlsQuantity = Integer.valueOf(s); |
| | | Quantitylist.add(xlsQuantity); |
| | | } |
| | | } else if (iCount== 2) { |
| | | if (s=='' || s==null) { |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message02; |
| | | activities = tmpactivities; |
| | | return null; |
| | | } else { |
| | | s = s.trim(); |
| | | setlist.add(s); |
| | | xlset = s; |
| | | } |
| | | |
| | | Quote q = New Quote(); |
| | | if (changedAfterPrint) { |
| | | system.debug('id空1:'); |
| | | quoId = null; |
| | | } |
| | | // false伝票から新規作成 |
| | | if (changedAfterBid) { |
| | | system.debug('id空2:'); |
| | | quoId = null; |
| | | } |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | if (newQuoteFlag) { |
| | | system.debug('id空3:'); |
| | | quoId = null; |
| | | } |
| | | // 多年保修 start |
| | | //报价试算 增加经销商前后对比 精琢技术 wql 20210508 start |
| | | if ((quoteGurantee_Period != null && |
| | | !quoteGurantee_Period.equals(quo.Gurantee_Period__c)) |
| | | || |
| | | (quotemultiYearWarranty != null && |
| | | !quotemultiYearWarranty.equals('' + quo.multiYearWarranty__c)) |
| | | || |
| | | (agency1Name !=null &&!agency1Name.equals(quo.Agency1__c)) |
| | | || |
| | | (agency2Name !=null &&!agency2Name.equals(quo.Agency2__c)) |
| | | ) { |
| | | quoId = null; |
| | | } |
| | | agency1Name = quo.Agency1__c; |
| | | agency2Name = quo.Agency2__c; |
| | | //报价试算 增加经销商前后对比 精琢技术 wql 20210508 end |
| | | quoteGurantee_Period = quo.Gurantee_Period__c; |
| | | quotemultiYearWarranty = '' + quo.multiYearWarranty__c; |
| | | // 多年保修 end |
| | | if (quoId == null) { |
| | | q = New Quote(); |
| | | q.OpportunityId = oppId; |
| | | |
| | | if (detail == true) { |
| | | if (standardPricebook == null) { |
| | | errormessage = System.Label.Error_Message27; |
| | | } else { |
| | | if (s=='' || s==null) { |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message02; |
| | | activities = tmpactivities; |
| | | return null; |
| | | } else { |
| | | s = s.trim(); |
| | | codelist.add(s); |
| | | xlscode = s; |
| | | } |
| | | } |
| | | iCount++; |
| | | if (iCount == 3) { |
| | | iCount = 0; |
| | | } |
| | | } |
| | | //mp.put(xlscode, xlsQuantity); |
| | | xlscnt++; |
| | | } |
| | | } |
| | | } catch(Exception ex) { |
| | | activities = tmpactivities; |
| | | errorflg = true; |
| | | return false; |
| | | } else { |
| | | q.Pricebook2Id = standardPricebook.Id; |
| | | } |
| | | errormessage = System.Label.Error_Message02; |
| | | return null; |
| | | } |
| | | |
| | | } else { |
| | | List<Quote> qs = New List<Quote>(); |
| | | qs = [select Id, OpportunityId, CreatedDate, Pricebook2Id, Name, Estimation_List_Price__c, Dealer_Final_Price__c, |
| | | Stocking_Price__c, Discount_Amount__c, Discount_Amount_Calculate__c, Quote_Adjust_Amount__c, Quote_Adjust_Calculate__c, |
| | | Agency1__c, OCM_Agent1_Price__c, Agency1_Profit__c, Agency1_Profit_Rate__c, Quote_No__c, |
| | | Agency2__c, Agent1_Agent2_Price__c, Agency2_Profit__c, Agency2_Profit_Rate__c, |
| | | Preferential_Trading_Price__c, Discount__c, Pricing__c, Unit_Price__c, Offer_Amount__c, TOTAL__c, |
| | | Contract__c, Print_HP_Name__c, Quote_Expiration_Date__c, Quote_Comment__c, OCM_Sales_Forecast__c, Installation_location__c, HasType3Machine__c |
| | | // 多年保修 start |
| | | , Gurantee_Period__c , multiYearWarranty__c, MultiYearWarrantyTotalPrice__c |
| | | , Preferential_Gurantee_Period__c |
| | | // 多年保修 end |
| | | //报价试算 start |
| | | ,IsQuoteTrial__c |
| | | //报价试算 end |
| | | From Quote Where Id = :quoId]; |
| | | if (qs.size() > 0) { |
| | | q = qs[0]; |
| | | system.debug('codelist:::::'+codelist.size()); |
| | | system.debug('xlscnt:::::' + xlscnt); |
| | | |
| | | if (codelist.size()==0 || Quantitylist.size()==0 || setlist.size()==0) { |
| | | activities = tmpactivities; |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message02; |
| | | return null; |
| | | } |
| | | if (q.Pricebook2Id == null) { |
| | | if (detail == true) { |
| | | if (standardPricebook == null) { |
| | | errormessage = System.Label.Error_Message27; |
| | | errorflg = true; |
| | | return false; |
| | | |
| | | xlscnt = j + xlscnt; |
| | | if (xlscnt>quoteEntryMaxLine) { |
| | | activities = tmpactivities; |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message03; |
| | | return null; |
| | | } |
| | | |
| | | i = 0; |
| | | boolean lineflg = false; |
| | | for (QELine t:tmpactivities) { |
| | | if (i==j) { |
| | | Map<String, Product_Search__c> mpProduct2 = new Map<String, Product_Search__c>(); // keyがProductCodeです。 |
| | | //List<Product_Search__c> items = [select Id,Name,ProductCode__c, |
| | | // ProductDescription__c,ProductStatus__c,Pricebook__c,Product__c |
| | | // FROM Product_Search__c Where Pricebook__c = :pricebook2Id and ProductCode__c In :codelist]; |
| | | List<Product_Search__c> items = [select Id,Name,ProductCode__c, |
| | | ProductDescription__c,ProductStatus__c,Product__c |
| | | FROM Product_Search__c Where ProductCode__c In :codelist]; |
| | | List<String> forSelect = new List<String>(); |
| | | for (Product_Search__c prd:items) { |
| | | mpProduct2.put(prd.ProductCode__c, prd); |
| | | forSelect.add(prd.Product__c); |
| | | } |
| | | |
| | | Map<String, PricebookEntry> entries = new Map<String, PricebookEntry>(); // keyがProductCodeです。 |
| | | List<PricebookEntry> pbes = [ |
| | | select Id,Product2Id,ProductCode,SalesPrice__c,SalesPriceA__c,SalesPriceB__c,SalesPriceC__c |
| | | FROM PricebookEntry where Pricebook2Id = :pricebook2Id |
| | | and CurrencyIsoCode =:currencyIsoCode and Product2Id in : forSelect]; |
| | | |
| | | Map<String, String> tempMap = new Map<String, String>(); |
| | | |
| | | for (PricebookEntry pbe:pbes) { |
| | | entries.put(pbe.ProductCode, pbe); |
| | | tempMap.put(pbe.Product2Id,pbe.Id); |
| | | } |
| | | |
| | | for (Integer l=0;l<codelist.size();l++) { |
| | | Product_Search__c prd = mpProduct2.get(codelist[l]); |
| | | if (prd != null) { |
| | | PricebookEntry pbe = entries.get(codelist[l]); |
| | | QELine c = null; |
| | | if (pbe != null) { |
| | | Decimal sp0 = pbe.SalesPrice__c; |
| | | Decimal sp1 = pbe.SalesPriceA__c; |
| | | Decimal sp2 = pbe.SalesPriceB__c; |
| | | Decimal sp3 = pbe.SalesPriceC__c; |
| | | c = new QELine(isService, i, prd.Name, prd.ProductCode__c, pbe.Id, pbe.Product2Id, Quantitylist[l],setlist[l], sp0, sp1, sp2, sp3); |
| | | } else { |
| | | continue; |
| | | } |
| | | activities.add(c); |
| | | i++; |
| | | rightcnt++; |
| | | lineflg = true; |
| | | } |
| | | } |
| | | if (lineflg==true) { |
| | | i--; |
| | | } else { |
| | | QELine a = New QELine(t, i); |
| | | activities.add(a); |
| | | } |
| | | } else { |
| | | q.Pricebook2Id = standardPricebook.Id; |
| | | QELine a = New QELine(t, i); |
| | | activities.add(a); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (quoId == null) { |
| | | q.Quote_No__c = opp.Opportunity_No__c + '-' + oppNo; |
| | | q.PriceRefreshDate__c = Date.today(); |
| | | } |
| | | if (productStatusUpdated) { |
| | | q.PriceRefreshDate__c = Date.today(); |
| | | } |
| | | |
| | | // 20150302 jo 見積の主机安装地点を設定 |
| | | List<String> pIds = new List<String>(); |
| | | system.debug('activities++++----****1'+activities); |
| | | for (QELine s : activities) { |
| | | if (String.isBlank(s.PageObject.Id__c) == false) { |
| | | pIds.add(s.PageObject.Id__c); |
| | | } |
| | | } |
| | | List<Product2> pList = [select Id from Product2 where Id in :pids and Category3__c = '主机']; |
| | | if (pList.size() > 0) q.HasType3Machine__c = true; |
| | | |
| | | q.Name = quo.QuoteName__c; |
| | | // TODO katsu 新規じゃない場合セットする必要ですか? |
| | | q.Estimation_List_Price__c = qb.Estimation_List_Price; |
| | | //q.TotalPrice = quo.TotalPrice; ===============-Field is not writeable: Quote.TotalPrice |
| | | q.Dealer_Final_Price__c = quo.Dealer_Final_Price_Page__c; |
| | | q.OCM_Sales_Forecast__c = opp.Wholesale_Price__c; |
| | | q.Stocking_Price__c = quoStocking_Price_c; |
| | | quo.Stocking_Price__c = quoStocking_Price_c; |
| | | |
| | | q.Quote_Adjust_Amount__c = quo.Quote_Adjust_Amount_Page__c; |
| | | q.Quote_Adjust_Calculate__c = qb.Quote_Adjust_Calculate; |
| | | q.Discount_Amount__c = DisAmount; |
| | | q.Discount_Amount_Calculate__c = DisCalculation; |
| | | q.Agency1__c = opp.Agency1__c; |
| | | q.OCM_Agent1_Price__c = quo.OCM_Agent1_Price_Page__c; |
| | | q.Agency1_Profit__c = Salesprofit1; |
| | | q.AgencyDiscount__c = AgencyDiscount; // 2018/09/28 CHAN-B4YAB8 经销商折扣 |
| | | |
| | | //多年保修 start |
| | | q.Gurantee_Period__c = quo.Gurantee_Period__c; |
| | | q.multiYearWarranty__c = quo.multiYearWarranty__c; |
| | | q.MultiYearWarrantyTotalPrice__c = quo.MultiYearWarrantyTotalPrice__c; |
| | | q.quoteSavedDate__c = Date.today(); |
| | | //多年保修 end |
| | | |
| | | q.Agency1_Profit_Rate__c = qb.SalesCalculation1; |
| | | q.Agency2__c = opp.Agency2__c; |
| | | q.Agent1_Agent2_Price__c = quo.Agent1_Agent2_Price_Page__c; |
| | | q.Agency2_Profit__c = Salesprofit2; |
| | | q.Agency2_Profit_Rate__c = qb.SalesCalculation2; |
| | | |
| | | //----checkbox は印刷直前に保存 |
| | | q.Print_HP_Name__c = selection_hp; |
| | | q.Quote_Expiration_Date__c = quo.Quote_Expiration_Date__c; |
| | | q.Quote_Comment__c = quo.Quote_Comment__c; |
| | | |
| | | q.Installation_location__c = quo.Installation_location__c; |
| | | /* |
| | | if (hasType3Machine) { |
| | | q.Installation_location__c = ''; |
| | | } |
| | | */ |
| | | System.debug('start save quote at: ' + System.currentTimeMillis()); |
| | | if (quoId == null) { |
| | | insert q; |
| | | quo.Quote_No__c = q.Quote_No__c; |
| | | } else { |
| | | update q; |
| | | } |
| | | System.debug('finished save quote at: ' + System.currentTimeMillis()); |
| | | |
| | | system.debug('○○○○○Save1○○○○○'); |
| | | |
| | | //QuoteLineItem; |
| | | List<QuoteLineItem> qlist = New List<QuoteLineItem>(); |
| | | qlist = [Select Id From QuoteLineItem Where QuoteId = :quoId]; |
| | | if (qlist.size() > 0) { |
| | | //delete |
| | | delete qlist; |
| | | } |
| | | |
| | | //QuoteLineItem-------------------------------------------- |
| | | //製品型番、品目コード、SFDAステータス、品目名、ListPrice、数量 |
| | | //価格、単位、小計、OCM売上予測金額(税抜)、価格表 |
| | | qlist = New List<QuoteLineItem>(); |
| | | //Sap送信,Printに合わせて1~ |
| | | Integer i = 1; |
| | | if (activities.size() > 0) { |
| | | system.debug('activities++++----****'+activities); |
| | | for (QELine s : activities) { |
| | | if (s.Asset_Model != null && s.Asset_Model != '') { |
| | | if (s.pageObject.PricebookEntryId != null) { |
| | | // TODO katsu なぜclone()しますか?意味不明。 |
| | | QuoteLineItem ql = s.pageObject.clone(); |
| | | ql.Quantity = ql.Quantity__c; |
| | | ql.UnitPrice = 0; // UnitPriceを使わないけど、必須なので、0を入れる |
| | | ql.QuoteId = q.Id; |
| | | ql.Name__c = s.PageObject.Name__c; |
| | | ql.Cost__c = s.Cost_c; |
| | | ql.Cost_Subtotal__c = s.Cost_Subtotal_c; |
| | | s.pageObject.Cost__c = s.Cost_c; |
| | | s.pageObject.Cost_Subtotal__c = s.Cost_Subtotal_c; |
| | | ql.UnitPrice__c = ql.UnitPrice_Page__c; |
| | | ql.UnitPrice_Page__c = 0; |
| | | ql.ListPrice__c = s.ListPrice_Page; |
| | | // 多年保修 start |
| | | // 计提金额 |
| | | ql.GuranteePrice__c = s.GuranteePrice; |
| | | ql.ProductGuranteePrice__c = s.ProductGuranteePrice; |
| | | // 维修合同报价 |
| | | ql.Maintenance_Price_Year__c = s.Maintenance_Price_Year; |
| | | // 多年保修 end |
| | | //CHAN-BWH2WP 精琢技术 wql 2020/12/22 start |
| | | //如果产品为不可取消多年保 则打上标识 |
| | | system.debug(s.CanNotCancelledGurantee); |
| | | ql.CanNotCancelFlag__c = s.CanNotCancelledGurantee; |
| | | |
| | | //CHAN-BWH2WP 精琢技术 wql 2020/12/22 end |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | //ql.SFDA_Status__c = prd2LatestValMap.get(s.pageObject.Id__c).SFDA_Status__c; |
| | | //並び順 |
| | | ql.Item_Order__c = i; |
| | | //OCM売上予測金額(税込) = OCM成約予測金額(税込み) * (小計 / 見積合計) |
| | | if (s.PageObject.Subtotal__c != null && opp.Wholesale_Price__c != null && quo.QuoteTotal_Page__c != null) { |
| | | if (s.PageObject.Subtotal__c > 0 && quo.QuoteTotal_Page__c > 0) { |
| | | ql.OCM_Sales_Forecast__c = opp.Wholesale_Price__c * (s.PageObject.Subtotal__c / quo.QuoteTotal_Page__c); |
| | | } |
| | | } |
| | | qlist.add(ql); |
| | | i++; |
| | | } |
| | | } |
| | | } |
| | | System.debug('start save quote lines at: ' + System.currentTimeMillis()); |
| | | system.debug('qlist+++---+++'+qlist); |
| | | insert qlist; |
| | | System.debug('finished save quote lines at: ' + System.currentTimeMillis()); |
| | | |
| | | } |
| | | system.debug('○○○○○Save2○○○○○'); |
| | | |
| | | //Opportunity-------------------------------------------- |
| | | //標準定価合計価格、見積金額総合計(税抜き)、病院契約金額、 |
| | | //1次販売店、1次販売店利益金額、1次販売店利益率、 |
| | | //2次販売店、2次販売店利益金額、2次販売店利益率 |
| | | //見積番号、見積名 |
| | | Opportunity o = New Opportunity(); |
| | | List<Opportunity> os = New List<Opportunity>(); |
| | | |
| | | os = [select Id, Estimation_List_Price__c, Dealer_Final_Price__c, Estimation_List_Price_Without_Tax__c, |
| | | Agency1__c, OCM_Agent1_Price__c, Agency1_Profit__c, Agency1_Profit_Rate__c, Stocking_Price__c, |
| | | Agency2__c, Agent1_Agent2_Price__c, Agency2_Profit__c, Agency2_Profit_Rate__c, Quote_Update_Sum__c , Hospital__c,Is_Corrosion__c |
| | | From Opportunity Where Id = :oppid]; |
| | | if (os.size() > 0) { |
| | | o = os[0]; |
| | | o.Estimation_List_Price__c = qb.Estimation_List_Price; |
| | | o.Wholesale_Price__c = opp.Wholesale_Price__c; |
| | | o.Dealer_Final_Price__c = quo.Dealer_Final_Price_Page__c; |
| | | o.Agency1__c = opp.Agency1__c; |
| | | o.OCM_Agent1_Price__c = quo.OCM_Agent1_Price_Page__c; |
| | | o.Agency1_Profit__c = Salesprofit1; |
| | | o.Agency1_Profit_Rate__c = qb.SalesCalculation1; |
| | | // o.Agency1_Profit_Rate__c = quo.Agency1_Profit_Rate__c; |
| | | o.Agency2__c = opp.Agency2__c; |
| | | o.Agent1_Agent2_Price__c = quo.Agent1_Agent2_Price_Page__c; |
| | | o.Agency2_Profit__c = Salesprofit2; |
| | | o.Agency2_Profit_Rate__c = qb.SalesCalculation2; |
| | | // o.Agency2_Profit_Rate__c = quo.Agency2_Profit_Rate__c; |
| | | |
| | | o.Stocking_Price__c = quo.Stocking_Price__c; |
| | | |
| | | o.Estimation_No__c = quo.Quote_No__c; |
| | | //o.Estimation_Name__c = quo.Name; |
| | | o.Estimation_Name__c = q.Name; |
| | | o.Estimation_Id__c = q.Id; |
| | | o.Installation_location__c = q.Installation_location__c; |
| | | o.HasType3Machine__c = q.HasType3Machine__c; |
| | | // 2018/09/29 CHAN-B4YAB8 经销商折扣 start |
| | | o.AgencyDiscount__c = AgencyDiscount; |
| | | // 2018/09/29 CHAN-B4YAB8 经销商折扣 end |
| | | // 多年保修 start |
| | | o.Gurantee_Period__c = quo.Gurantee_Period__c ; |
| | | o.multiYearWarranty__c = quo.multiYearWarranty__c ; |
| | | o.MultiYearWarrantyTotalPrice__c = quo.MultiYearWarrantyTotalPrice__c ; |
| | | o.quoteSavedDate__c = Date.today(); |
| | | // 多年保修 end |
| | | |
| | | |
| | | if (o.Quote_Update_Sum__c == null) { |
| | | o.Quote_Update_Sum__c = 1; |
| | | } else { |
| | | o.Quote_Update_Sum__c = o.Quote_Update_Sum__c + 1; |
| | | } |
| | | System.debug('start 1st save Opportunity at: ' + System.currentTimeMillis()); |
| | | ControllerUtil.updOpp(o); |
| | | System.debug('finished 1st save Opportunity at: ' + System.currentTimeMillis()); |
| | | |
| | | system.debug('○○○○○Save3○○○○○'); |
| | | |
| | | //OpportunityLineItem-------------------------------------------- |
| | | //製品型番、品目コード、SFDAステータス、品目名、ListPrice、数量 |
| | | //価格、単位、小計、OCM売上予測金額(税抜)、価格表 |
| | | List<OpportunityLineItem> ols = New List<OpportunityLineItem>(); |
| | | OpportunityLineItem ol = New OpportunityLineItem(); |
| | | ols = [select Id from OpportunityLineItem Where OpportunityId = :oppid]; |
| | | if (ols.size() > 0) { |
| | | //delete |
| | | ControllerUtil.delOppLine(ols); |
| | | system.debug('○○○○○Save4○○○○○'); |
| | | } |
| | | //Sap送信,Printに合わせて1~ |
| | | i = 1; |
| | | ols = New List<OpportunityLineItem>(); |
| | | if (activities.size() > 0) { |
| | | for (QELine s : activities) { |
| | | if (s.Asset_Model != null && s.Asset_Model != '') { |
| | | if (s.PageObject.PricebookEntryId != null) { |
| | | ol = New OpportunityLineItem(); |
| | | ol.OpportunityId = oppid; |
| | | ol.Id__c = s.PageObject.Id__c; |
| | | // CHAN-AVG3PW 询价报价画面规则变更 |
| | | ol.SFDA_Status__c = s.PageObject.SFDA_Status__c; |
| | | //ol.SFDA_Status__c = prd2LatestValMap.get(s.pageObject.Id__c).SFDA_Status__c; |
| | | ol.Name__c = s.PageObject.Name__c; |
| | | ol.ListPrice__c = s.ListPrice_Page; |
| | | ol.Quantity = s.PageObject.Quantity__c; |
| | | ol.UnitPrice = 0; |
| | | ol.UnitPrice__c = s.PageObject.UnitPrice_Page__c; |
| | | // 2018-10-31 CHAN-B4YAB8 赠送、经销商单价和小计 start |
| | | ol.AgencyUnitPrice__c = s.PageObject.AgencyUnitPrice__c; |
| | | ol.Present__c = s.PageObject.Present__c; |
| | | ol.AgencySubtotal__c = s.PageObject.AgencySubtotal__c; |
| | | // 2018-10-31 CHAN-B4YAB8 赠送、经销商单价和小计 start |
| | | // 多年保修 start |
| | | ol.GuaranteePeriod__c = s.PageObject.GuaranteePeriod__c; |
| | | //外贸多年保 取消CNY 的判断 && oppInfo.CurrencyIsoCode.equals('CNY') |
| | | //外贸多年保 精琢技术 wql 2021/01/18 start |
| | | if (oppInfo.CurrencyIsoCode != null ) { |
| | | ol.multiYearWarranty__c = s.PageObject.multiYearWarranty__c; |
| | | ol.ServicePrice__c = s.PageObject.ServicePrice__c; |
| | | ol.If_Cancel_Guarantee__c = s.PageObject.If_Cancel_Guarantee__c; |
| | | ol.ProductEntend_gurantee_period_all__c |
| | | = s.PageObject.ProductEntend_gurantee_period_all__c; |
| | | ol.GuranteeType__c = s.PageObject.GuranteeType__c; |
| | | ol.NoDiscountTotal__c = s.PageObject.NoDiscountTotal__c; |
| | | ol.warrantyType__c = s.PageObject.warrantyType__c; |
| | | ol.productServicePrice__c = s.PageObject.productServicePrice__c; |
| | | // 计提金额 |
| | | ol.GuranteePrice__c = s.GuranteePrice; |
| | | ol.ProductGuranteePrice__c = s.ProductGuranteePrice; |
| | | // 维修合同报价 |
| | | ol.Maintenance_Price_Year__c = s.Maintenance_Price_Year; |
| | | |
| | | ol.provistonPeriod__c = s.PageObject.provistonPeriod__c; |
| | | |
| | | } |
| | | //外贸多年保 精琢技术 wql 2021/01/18 end |
| | | // 多年保修 end |
| | | ol.Qty_Unit__c = s.PageObject.Qty_Unit__c; |
| | | //コストは小計済を登録 |
| | | ol.Cost__c = s.PageObject.Cost__c; |
| | | ol.BSS_Category__c = s.PageObject.BSS_Category__c; |
| | | //CHAN-BWH2WP 精琢技术 wql 2020/12/22 start |
| | | //如果产品为不可取消多年保 则打上标识 |
| | | system.debug(s.CanNotCancelledGurantee); |
| | | ol.CanNotCancelFlag__c = s.CanNotCancelledGurantee; |
| | | //CHAN-BWH2WP 精琢技术 wql 2020/12/22 end |
| | | //OCM売上予測金額 * (小計/見積合計) |
| | | if (s.PageObject.Subtotal__c != null && opp.Wholesale_Price__c != null && quo.QuoteTotal_Page__c != null) { |
| | | if (s.PageObject.Subtotal__c > 0 && quo.QuoteTotal_Page__c > 0) { |
| | | ol.OCM_Sales_Forecast__c = opp.Wholesale_Price__c * (s.PageObject.Subtotal__c / quo.QuoteTotal_Page__c); |
| | | } |
| | | } |
| | | //価格表 |
| | | ol.PricebookEntryId = s.PageObject.PricebookEntryId; |
| | | //並び順 |
| | | ol.Item_Order__c = i; |
| | | ols.add(ol); |
| | | i++; |
| | | } |
| | | } |
| | | } |
| | | // CHAN-BEN5UC [委托]询价:创建报价后,判断询价一定期间内,是否出借备品 by vivek start |
| | | // CHAN-C9Y3HL 【委托】【评估需求】询价里报价画面速度优化 2022-02-09 |
| | | // 查询出借备品逻辑从保存逻辑中移除,由Batch进行统一操作,以提升保存速度及统计数据准确性。 |
| | | // Date createdDateStr; |
| | | // if (quoId != null && quo.CreatedDate != null ) { |
| | | // // createdDateStr = [select id,CreatedDate from Quote where id = :quoId][0].CreatedDate.date(); |
| | | // createdDateStr = quo.CreatedDate.date(); |
| | | // } else { |
| | | // createdDateStr = Date.today(); |
| | | // } |
| | | // // 一年前的日期 |
| | | // Date createdDateYear = createdDateStr.addYears(-1); |
| | | // List<Rental_Apply_Equipment_Set_Detail__c> raesdList = [select id, product__c, Bollow_Date__c, Rental_Apply__r.Hospital__c from Rental_Apply_Equipment_Set_Detail__c where Rental_Apply__r.Strategic_dept__c = : opp.Department_Class__c and Key_product__c != null and Bollow_Date__c >= :createdDateYear order by Bollow_Date__c ]; |
| | | |
| | | // Map<String, Date> ProOfDate = new Map<String, Date>(); |
| | | // for (Rental_Apply_Equipment_Set_Detail__c raesd : raesdList) { |
| | | // ProOfDate.put(raesd.product__c, raesd.Bollow_Date__c); |
| | | // } |
| | | |
| | | // o.WhetherTrySpareParts_3m__c = false; |
| | | // o.WhetherTrySpareParts_6m__c = false; |
| | | // o.WhetherTrySpareParts_1y__c = false; |
| | | // for (OpportunityLineItem oppitem : ols) { |
| | | // if (ProOfDate.containsKey(((String)oppitem.Id__c).substring(0, 15))) { |
| | | // Date bollDate = ProOfDate.get(((String)oppitem.Id__c).substring(0, 15)); |
| | | // if (bollDate != null && bollDate.addMonths(3) > createdDateStr) { |
| | | // o.WhetherTrySpareParts_3m__c = true; |
| | | // } |
| | | // if (bollDate != null && bollDate.addMonths(6) > createdDateStr && bollDate.addMonths(3) < createdDateStr) { |
| | | // o.WhetherTrySpareParts_6m__c = true; |
| | | // } |
| | | // if (bollDate != null && bollDate.addYears(1) > createdDateStr && bollDate.addMonths(6) < createdDateStr) { |
| | | // o.WhetherTrySpareParts_1y__c = true; |
| | | // } |
| | | |
| | | // } |
| | | // } |
| | | |
| | | |
| | | // System.debug('start 2nd save Opportunity at: ' + System.currentTimeMillis()); |
| | | // ControllerUtil.updOpp(o); |
| | | // System.debug('finished 2nd save Opportunity at: ' + System.currentTimeMillis()); |
| | | // CHAN-BEN5UC [委托]询价:创建报价后,判断询价一定期间内,是否出借备品 by vivek end |
| | | System.debug('start save Opportunity item lines at: ' + System.currentTimeMillis()); |
| | | ControllerUtil.insOppLine(ols); |
| | | System.debug('finished save Opportunity item lines at: ' + System.currentTimeMillis()); |
| | | } |
| | | |
| | | } else { |
| | | system.debug('*****SystemError OpportunityId is Null*****'); |
| | | } |
| | | //保存時引合Pageに戻らない処理とした為にQuoteIdをここでセット |
| | | if (quoId == null) { |
| | | quoId = q.Id; |
| | | newQuoteFlag = false; |
| | | } |
| | | }else{ |
| | | errorflg = true; |
| | | errormessage = '该询价已经decide,不可再修改'; |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | //lastbuy 2022/2/9 fy start |
| | | public boolean ReservedProductVerification() { |
| | | filg=true; |
| | | Map<string,QuoteLineItem> quotlinitMap = new Map<string,QuoteLineItem>(); |
| | | List<Id> lastProductFLGList = new List<Id>(); |
| | | for(QELine qli : activities){ |
| | | lastProductFLGList.add(qli.pageObject.PricebookEntry.Product2Id); |
| | | quotlinitMap.put(qli.pageObject.PricebookEntry.Product2Id,qli.pageObject); |
| | | } |
| | | System.debug('activities!!!'+activities); |
| | | System.debug('oppId!!!'+oppId); |
| | | System.debug('lastProductFLGList!!!'+lastProductFLGList); |
| | | if(lastProductFLGList!=null){ |
| | | List<LastbuyProduct__c> LastbuyObjList=[select id,LastbuyQuantity__c,InquiryCode__c,ProductName__c,effectiveFLG__c from LastbuyProduct__c where InquiryCode__c= : oppId and ProductName__c in :lastProductFLGList and effectiveFLG__c = true]; |
| | | if(LastbuyObjList!=null){ |
| | | for(LastbuyProduct__c lastbuypr :LastbuyObjList){ |
| | | Decimal quoteLItemNum=0; |
| | | if(quotlinitMap.containsKey(lastbuypr.ProductName__c)){ |
| | | quoteLItemNum=quotlinitMap.get(lastbuypr.ProductName__c).Quantity__c; |
| | | }else{ |
| | | continue; |
| | | } |
| | | if(lastbuypr.LastbuyQuantity__c<quoteLItemNum){ |
| | | filg=false; |
| | | i++; |
| | | if (i>149) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | system.debug('filg====='+filg); |
| | | return filg; |
| | | } |
| | | //lastbuy 2022/2/9 fy end |
| | | //oppに画面の値を設定 |
| | | private void setOppFromOppInfo() { |
| | | opp.Wholesale_Price__c = oppInfo.Wholesale_Price; |
| | | opp.Agency1__c = quo.Agency1__c; |
| | | opp.Agency2__c = quo.Agency2__c; |
| | | } |
| | | |
| | | public class OppInfo { |
| | | public String Account_RecordType_DeveloperName { get; set; } |
| | | public String Direct_Separate { get; set; } |
| | | public String Trade { get; set; } |
| | | public Decimal Wholesale_Price { get; set; } |
| | | public String CurrencyIsoCode { get; set; } |
| | | public String HP_Name { get; set; } |
| | | public String Department_Name { get; set; } |
| | | public String Sales_Root { get; set; } |
| | | // LHJ Start |
| | | public boolean If_Need_Authorize { get; set; } |
| | | public String Authorized_DB_No { get; set; } |
| | | // LHJ End |
| | | |
| | | public OppInfo(Opportunity opp) { |
| | | Account_RecordType_DeveloperName = opp.Account.RecordType.DeveloperName; |
| | | Direct_Separate = opp.Direct_Separate__c; |
| | | Trade = opp.Trade__c; |
| | | Wholesale_Price = opp.Wholesale_Price__c; |
| | | CurrencyIsoCode = opp.CurrencyIsoCode; |
| | | HP_Name = opp.HP_Name__c; |
| | | Department_Name = opp.Department_Name__c; |
| | | Sales_Root = opp.Sales_Root__c; |
| | | // LHJ Start |
| | | If_Need_Authorize = opp.If_Need_Authorize__c; |
| | | Authorized_DB_No = opp.Authorized_DB_No__c; |
| | | // LHJ End |
| | | } |
| | | } |
| | | //TODO 1.Quoteオブジェクト追加 |
| | | //TODO 2.コンストラクタを追加 |
| | | public class QuoteBean { |
| | | public Decimal Estimation_List_Price { get; set; } |
| | | //TODO 999.99以下しか入力できない。 |
| | | public Decimal Quote_Adjust_Calculate { get; set; } |
| | | public Decimal SalesCalculation1 { get; set; } |
| | | public Decimal SalesCalculation2 { get; set; } |
| | | public Integer PriceRefreshPeriod { get; set; } |
| | | public void setPriceRefreshPeriodByDate(Date PriceRefreshDate) { |
| | | this.PriceRefreshPeriod = PriceRefreshDate.daysBetween(Date.today()); |
| | | } |
| | | } |
| | | |
| | | public class QELinelatestInfo { |
| | | public String ProductCode { get; set; } |
| | | public String ProductName { get; set; } |
| | | public String SFDA_Status { get; set; } |
| | | public String Sales_Possibility { get; set; } |
| | | public Decimal ListPrice { get; set; } // 最新 |
| | | public Decimal Cost { get; set; } // 最新 |
| | | public Integer Specifications {get; set;} |
| | | |
| | | // 多年保修 start |
| | | public string GuranteeType {get; set;} |
| | | public Decimal Intra_Trade_Gurantee {get; set;} |
| | | public Decimal ProductEntend_gurantee_period_all {get; set;} |
| | | public Decimal Intra_Trade_Service {get; set;} |
| | | // 维修合同报价 |
| | | public Decimal Maintenance_Price_Year {get; set;} |
| | | // 多年保修 end |
| | | // 维修合同报价 |
| | | //不可取消多年保 |
| | | public Boolean CanNotCancelledGurantee {get; set;} |
| | | // 多年保修 end |
| | | |
| | | //阿西赛多 |
| | | public Boolean Is_DangerousChemicals {get; set;} |
| | | //阿西赛多 |
| | | |
| | | } |
| | | public class QELine { |
| | | public Integer lineNo { get; set; } // 画面の順序 |
| | | public String Asset_Model { get; set; } |
| | | public String Sales_Possibility { get; set; } // 販売可否○×判断用、使ってないようです。TODO 削除 |
| | | public QuoteLineItem pageObject { get; set; } // Id__cは空行判断用、SFDA_Status__c など、翻訳される項目表示するため使う必要があります |
| | | public Decimal Cost_c { get; set; } |
| | | public Decimal Cost_Subtotal_c { get; set; } |
| | | public Decimal ListPrice_Page { get; set; } |
| | | //*******************************liukun******************// |
| | | public String StorageStatus { get; set; } |
| | | //********************Insert [OLY_OCM-228] [20160706] [赵德芳] Start********************// |
| | | public Integer Specifications {get; set;} |
| | | //********************Insert [OLY_OCM-228] [20160706] [赵德芳] End**********************// |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start |
| | | public String VenderName { get; set; } |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end |
| | | |
| | | //不可取消多年保 |
| | | public Boolean CanNotCancelledGurantee {get;set;} |
| | | //阿西赛多 |
| | | public Boolean Is_DangerousChemicals {get;set;} |
| | | |
| | | // PriceStatusUpdate() 用の項目、TODO 初期値の設定 |
| | | public QELinelatestInfo latestInfo { get; set; } |
| | | |
| | | public boolean changed_name { get; set; } |
| | | public boolean changed_sfda { get; set; } |
| | | public boolean changed_list { get; set; } |
| | | public boolean changed_cost { get; set; } |
| | | public boolean haveno_Register { get; set; } |
| | | public boolean wrong_Register { get; set; } |
| | | |
| | | //SFDC停止预警 lt 20211009 start |
| | | public String Estimated_ConsumptionDueDate { get; set; } |
| | | //SFDC停止预警 lt 20211009 end |
| | | |
| | | // 多年保修 start |
| | | //计提金额 |
| | | public Decimal GuranteePrice { get; set; } |
| | | public Decimal ProductGuranteePrice { get; set; } |
| | | // 维修合同报价 |
| | | public decimal Maintenance_Price_Year {get; set;} |
| | | // 多年保修 end |
| | | |
| | | // TODO ほんとうはいらない、使うところのロジックを修正しなければいけない、削除するようにしたいです。 |
| | | public QELine(Integer i) { |
| | | pageObject = New QuoteLineItem(); |
| | | latestInfo = New QELinelatestInfo(); |
| | | this.lineNo = i; |
| | | } |
| | | // tmp 直接使う場合のパターン |
| | | public QELine(QELine tmp, Integer i) { |
| | | pageObject = tmp.pageObject; |
| | | this.lineNo = i; |
| | | this.Asset_Model = tmp.Asset_Model; |
| | | this.Sales_Possibility = tmp.Sales_Possibility; |
| | | this.latestInfo = tmp.latestInfo; |
| | | this.Cost_Subtotal_c = tmp.Cost_Subtotal_c; |
| | | this.Cost_c = tmp.Cost_c; |
| | | this.ListPrice_Page = tmp.ListPrice_Page; |
| | | this.StorageStatus = tmp.StorageStatus; |
| | | // 多年保修 start |
| | | // 计提金额 |
| | | this.GuranteePrice = tmp.GuranteePrice; |
| | | this.ProductGuranteePrice = tmp.ProductGuranteePrice; |
| | | //维修合同报价 |
| | | this.Maintenance_Price_Year = tmp.Maintenance_Price_Year; |
| | | // 多年保修 计提金额 end |
| | | |
| | | this.changed_name = tmp.changed_name; |
| | | this.changed_sfda = tmp.changed_sfda; |
| | | this.changed_list = tmp.changed_list; |
| | | this.changed_cost = tmp.changed_cost; |
| | | this.haveno_Register = false; |
| | | this.wrong_Register = false; |
| | | //不可取消多年保 |
| | | this.CanNotCancelledGurantee = tmp.CanNotCancelledGurantee; |
| | | //供应商名称 |
| | | this.VenderName = tmp.VenderName; |
| | | |
| | | //SFDC停止预警 lt 20211009 start |
| | | this.Estimated_ConsumptionDueDate = tmp.Estimated_ConsumptionDueDate; |
| | | //SFDC停止预警 lt 20211009 end |
| | | // messageを出す |
| | | errorflg = true; |
| | | errormessage = '数据导入结束,导入 ' + codelist.size() + ' 件,成功' + rightcnt + ' 件'; |
| | | */ |
| | | return null; |
| | | |
| | | } |
| | | public QELine(OpportunityLineItem oli, Integer i) { |
| | | pageObject = New QuoteLineItem(); |
| | | pageObject.Quantity__c = oli.Quantity; |
| | | |
| | | this.lineNo = i; |
| | | this.Asset_Model = oli.Asset_Model_No__c; |
| | | this.Sales_Possibility = oli.PricebookEntry.Product2.Sales_Possibility__c; |
| | | this.StorageStatus = oli.PricebookEntry.Product2.StorageStatus__c; |
| | | //********************Insert [OLY_OCM-228] [20160706] [赵德芳] Start********************// |
| | | if (oli.PricebookEntry.Product2.Packing_list_manual__c != null) { |
| | | this.Specifications = integer.valueof(oli.PricebookEntry.Product2.Packing_list_manual__c + ''); |
| | | } |
| | | //********************Insert [OLY_OCM-228] [20160706] [赵德芳] End**********************// |
| | | PageObject.Id__c = oli.PricebookEntry.Product2Id; |
| | | PageObject.UnitPrice_Page__c = oli.UnitPrice__c; |
| | | //CHAN-B4YAB8 2018/9/28 小计经销商单价和小计 |
| | | PageObject.AgencySubtotal__c = oli.AgencySubtotal__c; |
| | | PageObject.AgencyUnitPrice__c = oli.AgencyUnitPrice__c; |
| | | // CHAN-B4YAB8 2018/9/28 经销商单价和小计 |
| | | //BackButton |
| | | public PageReference BackBtn() { |
| | | String url = baseUrl; |
| | | if (rtUrl != null && rtUrl.length() > 0) { |
| | | url += rtUrl.replace('/production', ''); |
| | | } else { |
| | | url += '\\' + oppid; |
| | | } |
| | | return new Pagereference(url); |
| | | } |
| | | |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start |
| | | this.VenderName = oli.PricebookEntry.Product2.VenderName__c; |
| | | public PageReference Save() { |
| | | |
| | | //SFDC停止预警 lt 20211009 ①不能定义date变量 因为前台返回的是String日期 ②将util里的方法转为日期格式 start |
| | | if(oli.PricebookEntry.Product2.Estimated_ConsumptionDueDate__c != null){ |
| | | this.Estimated_ConsumptionDueDate = NFMUtil.formatDate2StrSpo(oli.PricebookEntry.Product2.Estimated_ConsumptionDueDate__c).replaceAll('-','/'); |
| | | }else{ |
| | | this.Estimated_ConsumptionDueDate = ''; |
| | | } |
| | | //SFDC停止预警 lt 20211009 end |
| | | system.debug('○○○○○○○○○○○○Welcome to Save class!!○○○○○○○○○○○○'); |
| | | //system.debug('=====save discount:' + discount); |
| | | |
| | | if(VenderName==null||VenderName==''){ |
| | | this.VenderName =' 无 '; |
| | | }else{ |
| | | this.VenderName = oli.PricebookEntry.Product2.VenderName__c; |
| | | } |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end |
| | | //不可取消多年保 |
| | | this.CanNotCancelledGurantee = oli.PricebookEntry.Product2.CanNotCancelledGurantee__c; |
| | | //阿西赛多 |
| | | this.Is_DangerousChemicals = oli.PricebookEntry.Product2.Is_DangerousChemicals__c; |
| | | // 多年保修 start |
| | | PageObject.multiYearWarranty__c = oli.multiYearWarranty__c; |
| | | PageObject.GuaranteePeriod__c = oli.GuaranteePeriod__c; |
| | | PageObject.ServicePrice__c = oli.ServicePrice__c; |
| | | PageObject.If_Cancel_Guarantee__c = oli.If_Cancel_Guarantee__c; |
| | | PageObject.warrantyType__c = oli.warrantyType__c; |
| | | errorflg = false; |
| | | errormessage = null; |
| | | Savepoint sp = Database.setSavepoint(); |
| | | |
| | | PageObject.NoDiscountTotal__c = oli.NoDiscountTotal__c; |
| | | // 计提金额 |
| | | this.GuranteePrice = oli.GuranteePrice__c; |
| | | // 维修合同报价 |
| | | this.Maintenance_Price_Year = oli.Maintenance_Price_Year__c; |
| | | PageObject.provistonPeriod__c = oli.provistonPeriod__c; |
| | | try { |
| | | |
| | | PageObject.ProductEntend_gurantee_period_all__c = oli.PricebookEntry.Product2.Entend_gurantee_period_all__c; |
| | | PageObject.GuranteeType__c = oli.PricebookEntry.Product2.GuranteeType__c; |
| | | |
| | | |
| | | // 多年保修 end |
| | | PageObject.SFDA_Status__c = oli.PricebookEntry.Product2.SFDA_Status__c; |
| | | //不可取消多年保 |
| | | // PageObject.CanNotCancelledGurantee__c = oli.PricebookEntry.Product2.CanNotCancelledGurantee__c; |
| | | //データチェック |
| | | if (dataCheck() ==false) { |
| | | return null; |
| | | } |
| | | |
| | | String url = baseUrl; |
| | | if (rtUrl != null && rtUrl.length() > 0) { |
| | | url += rtUrl.replace('/production', ''); |
| | | } else { |
| | | url += '\\' + oppid; |
| | | } |
| | | system.debug('url++++++' + url); |
| | | PageReference pageRef = new Pagereference(url); |
| | | |
| | | if (dataEntry()==false) { |
| | | //msg |
| | | return null; |
| | | } else { |
| | | errorflg = true; |
| | | if (specialerrorflg) { |
| | | errorMessage = String.isBlank(errorMessage) ?System.Label.Info_Message01:System.Label.Info_Message01 +errorMessage; |
| | | } else { |
| | | // errorMessage = System.Label.Info_Message01 ; |
| | | |
| | | errorMessage = String.isBlank(errorMessage) ?System.Label.Info_Message01:System.Label.Info_Message01 +errorMessage; |
| | | // ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '注意!!!'+errorMessage)); |
| | | } |
| | | //system.debug('errorMessage20190524' + errorMessage); |
| | | |
| | | return null; |
| | | } |
| | | |
| | | } catch (DmlException de) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = de.getDmlMessage(0); // 1件目のエラーのみ表示 |
| | | system.debug(Logginglevel.ERROR, de.getMessage()); |
| | | system.debug(Logginglevel.ERROR, de.getStackTraceString()); |
| | | } catch (Exception e) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = e.getMessage(); |
| | | system.debug(Logginglevel.ERROR, e.getMessage()); |
| | | system.debug(Logginglevel.ERROR, e.getStackTraceString()); |
| | | } |
| | | |
| | | return null; |
| | | |
| | | } |
| | | |
| | | //OppReflection button |
| | | public PageReference OppReflection() { |
| | | //oppに画面の値を設定 |
| | | setOppFromOppInfo(); |
| | | Savepoint sp = Database.setSavepoint(); |
| | | try { |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | //データチェック |
| | | if (dataCheck() ==false) { |
| | | return null; |
| | | } |
| | | |
| | | String url = baseUrl; |
| | | if (rtUrl != null && rtUrl.length() > 0) { |
| | | url += rtUrl.replace('/production', ''); |
| | | } else { |
| | | url += '\\' + oppid; |
| | | } |
| | | PageReference pageRef = new Pagereference(url); |
| | | if (dataEntry()==false) { |
| | | //msg |
| | | return null; |
| | | } else { |
| | | //msg |
| | | return pageRef; |
| | | } |
| | | } catch (DmlException de) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = de.getDmlMessage(0); |
| | | system.debug(Logginglevel.ERROR, de.getMessage()); |
| | | system.debug(Logginglevel.ERROR, de.getStackTraceString()); |
| | | } catch (Exception e) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = e.getMessage(); |
| | | system.debug(Logginglevel.ERROR, e.getMessage()); |
| | | system.debug(Logginglevel.ERROR, e.getStackTraceString()); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | public PageReference Decide() { |
| | | system.debug('○○○○○○○○○○○○Welcome to Decide class!!○○○○○○○○○○○○'); |
| | | |
| | | if (quo.Is_upload__c == true) { |
| | | errorflg = true; |
| | | errorMessage = '报价已经上传,不能再次决定。请再报价后,决定并上传新的报价。'; |
| | | return null; |
| | | } |
| | | |
| | | boolean hasDetail = false; |
| | | if (activities.size()>0) { |
| | | for (QELine s:activities) { |
| | | if (s.pageObject.PricebookEntryId != null && s.productName != null && s.productName != '') { |
| | | hasDetail = true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (hasDetail == false) { |
| | | errorflg = true; |
| | | errorMessage = '不能决定没有产品明细的报价。'; |
| | | return null; |
| | | } |
| | | doDecide = true; |
| | | Save(); |
| | | decideORundecideQuote(quo.Id,true); |
| | | |
| | | String url = baseUrl + '/apex/NewQuoteDevide?Id=' + quoId + '&retURL=' + rtUrl; |
| | | PageReference pageRef = new Pagereference(url); |
| | | |
| | | if (errorflg == false || errorMessage.startsWith(System.Label.Info_Message01)) { |
| | | return pageRef; |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | public PageReference UnDecide() { |
| | | system.debug('○○○○○○○○○○○○Welcome to unDecide class!!○○○○○○○○○○○○'); |
| | | errorflg = false; |
| | | errormessage = null; |
| | | Savepoint sp = Database.setSavepoint(); |
| | | |
| | | try { |
| | | Quote q = New Quote(); |
| | | q.Id = quo.Id; |
| | | q.Is_Decided__c = false; |
| | | |
| | | Opportunity o = New Opportunity(); |
| | | List<Opportunity> os = [select Id From Opportunity Where Id =:oppid]; |
| | | if (os.size()>0) { |
| | | o = os[0]; |
| | | o.Is_Decided__c = false; |
| | | o.Quote_Decide_User__c = null; |
| | | } |
| | | |
| | | update q; |
| | | update o; |
| | | decideORundecideQuote(q.Id,true); |
| | | String url = baseUrl + '/apex/NewQuoteDevide?Id=' + quoId + '&retURL=' + rtUrl; |
| | | PageReference pageRef = new Pagereference(url); |
| | | if (errorflg == false) { |
| | | return pageRef; |
| | | } |
| | | } catch (DmlException de) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = de.getDmlMessage(0); // 1件目のエラーのみ表示 |
| | | system.debug(Logginglevel.ERROR, de.getMessage()); |
| | | system.debug(Logginglevel.ERROR, de.getStackTraceString()); |
| | | } catch (Exception e) { |
| | | Database.rollback(sp); |
| | | errorflg = true; |
| | | errormessage = e.getMessage(); |
| | | system.debug(Logginglevel.ERROR, e.getMessage()); |
| | | system.debug(Logginglevel.ERROR, e.getStackTraceString()); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | public boolean dataEntry() { |
| | | |
| | | system.debug('○○○○○○○○○○○○Welcome to dataEntry class!!○○○○○○○○○○○○'); |
| | | |
| | | Boolean error = false; |
| | | Boolean detail = true; |
| | | |
| | | //Quote------------------------------------------------------------- |
| | | //List<Quote> maxQuote_No = [select QuoteNumber From Quote Where OpportunityId = :oppid order by QuoteNumber desc NULLS LAST limit 1]; |
| | | //String oppNo; |
| | | //Integer l = 1; |
| | | //if (maxQuote_No.size()>0) { |
| | | // try { |
| | | // oppNo = maxQuote_No[0].QuoteNumber; |
| | | // l = Integer.valueOf(oppNo) + 1; |
| | | // } catch (System.TypeException e) { |
| | | // system.debug('maxQuote_No Error: quote.id=' + maxQuote_No[0].id); |
| | | // } |
| | | //} else { |
| | | // system.debug('first Quote'); |
| | | //} |
| | | //oppNo = String.valueof(l); |
| | | |
| | | //while (oppNo.length() < 8){ |
| | | // oppNo = '0' + oppNo; |
| | | //} |
| | | |
| | | Quote q = New Quote(); |
| | | |
| | | if (quoId==null) { |
| | | q = quo.clone(); |
| | | q.OpportunityId = oppId; |
| | | |
| | | if (detail == true) { |
| | | if (pricebook2Id==null) { |
| | | errormessage = System.Label.Error_Message04; |
| | | errorflg = true; |
| | | return false; |
| | | } else { |
| | | q.Pricebook2Id = pricebook2Id; |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | |
| | | q = quo.clone(); |
| | | q.Id = quoId; |
| | | if (q.Pricebook2Id ==null) { |
| | | if (detail == true) { |
| | | if (pricebook2Id==null) { |
| | | errormessage = System.Label.Error_Message04; |
| | | errorflg = true; |
| | | return false; |
| | | } else { |
| | | q.Pricebook2Id = pricebook2Id; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (quoId==null) { |
| | | //q.PriceRefreshDate__c = Date.today(); |
| | | } |
| | | if (productStatusUpdated) { |
| | | //q.PriceRefreshDate__c = Date.today(); |
| | | } |
| | | |
| | | q.Name = quo.name; |
| | | system.debug(opp.Account.MarketVerticals__c +'@@@@@@@@'+opp.Trade_Type_D__c); |
| | | if (doDecide == true) { |
| | | List<Quote> decideQuote = new List<Quote>(); |
| | | //不能决定多个报价,戴宇 |
| | | decideQuote=[SELECT id FROM Quote WHERE OpportunityId = :opp.Id AND Is_Decided__c = true]; |
| | | if(decideQuote.size() > 0){ |
| | | errorflg = true; |
| | | errorMessage = '已存在决定的报价,不能决定新的报价'; |
| | | return false; |
| | | } |
| | | q.Is_Decided__c = true; |
| | | if(opp.Account.MarketVerticals__c == 'Clinical'&&opp.Trade_Type_D__c == 'Taxation'){ |
| | | if(opp.Dealer__r.DummyDealer__c == true){ |
| | | String backStr = LicenseCheckUtil.LicenseCheck(opp.AccountId); |
| | | system.debug('DummyDealer__c ' + backStr); |
| | | if(backStr != '1'){ |
| | | errorflg = true; |
| | | errorMessage = backStr + ',不能决定报价。'; |
| | | return false; |
| | | } |
| | | }else{ |
| | | String backStr = LicenseCheckUtil.LicenseCheck(opp.Dealer__r.ParentID); |
| | | system.debug('Parent' + backStr); |
| | | if(backStr != '1'){ |
| | | errorflg = true; |
| | | errorMessage = backStr + ',不能决定报价。'; |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | }else{ |
| | | if(opp.Account.MarketVerticals__c == 'Clinical'&&opp.Trade_Type_D__c == 'Taxation'){ |
| | | if(opp.Dealer__r.DummyDealer__c == true){ |
| | | String backStr = LicenseCheckUtil.LicenseCheck(opp.AccountId); |
| | | system.debug('DummyDealer__c' + backStr); |
| | | if(backStr != '1'){ |
| | | errorMessage = backStr; |
| | | specialerrorflg = true; |
| | | |
| | | } |
| | | }else{ |
| | | String backStr = LicenseCheckUtil.LicenseCheck(opp.Dealer__r.ParentID); |
| | | system.debug('Parent' + backStr); |
| | | if(backStr != '1'){ |
| | | errorMessage = backStr; |
| | | specialerrorflg = true; |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | String quoId1 = ''; |
| | | if (quoId==null) { |
| | | insert q; |
| | | quoId1 = q.Id; |
| | | printFlg = true; |
| | | } else { |
| | | |
| | | update q; |
| | | quoId1 = q.Id; |
| | | } |
| | | |
| | | List<QuoteLineItem> qlist = New List<QuoteLineItem>(); |
| | | qlist=[Select Id From QuoteLineItem Where QuoteId =:quoId1]; |
| | | if (qlist.size()>0) { |
| | | delete qlist; |
| | | } |
| | | |
| | | qlist = New List<QuoteLineItem>(); |
| | | List<QuoteLineItem> singleProductList = new List<QuoteLineItem>(); |
| | | Integer i=1; |
| | | |
| | | if (activities.size()>0) { |
| | | Decimal all_price = 0.0; |
| | | Decimal all_discount = 0.0; |
| | | for (QELine s:activities) { |
| | | if (is_hidden_all || is_hidden_user == true || is_dealer_user == true && s.hiddenflg == true) { |
| | | if (s.pageObject.PricebookEntryId != null && s.productName != null && s.productName != '') { |
| | | if (String.isBlank(s.pageObject.PricebookEntryId) == false) { |
| | | String setName = s.pageObject.Set__c; |
| | | Integer qty = 1 ; |
| | | //XHL-20190426-UpdateStart |
| | | if (!s.pageObject.SingleProduct__c ){ |
| | | |
| | | String fieldName = setName.substring(3); |
| | | fieldName = fieldName.indexOf('0') == 0 ? fieldName.substring(1) : fieldName; |
| | | Decimal d_qty = (Decimal) quo.get('SetQty' + fieldName + '__c'); |
| | | // qty = d_qty == null ? 1 : d_qty.intValue(); |
| | | } |
| | | //XHL-20190426-UpdateEnd |
| | | |
| | | all_price += s.salesPrice * s.pageObject.Quantity * qty; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (quo.OrderIsChange__c) { |
| | | String productCode = s.pageObject.Product2.ProductCode; |
| | | if (String.isNotBlank(productCode)) { |
| | | |
| | | saveStringConcatenation += productCode + '|' +s.pageObject.Quantity; |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | PageObject.Name__c = oli.PricebookEntry.Product2.Name; |
| | | if (all_price > 0) { |
| | | system.debug('all_price---->'+all_price); |
| | | all_discount = (all_price - quo.Total_Price_Text__c) * 100 / all_price; |
| | | system.debug('all_discount---->'+all_discount); |
| | | } |
| | | |
| | | Decimal cost; |
| | | if (oli.Opportunity.Trade__c == '内貿') { |
| | | this.ListPrice_Page = oli.PricebookEntry.Product2.Intra_Trade_List_RMB__c; |
| | | cost = oli.PricebookEntry.Product2.Intra_Trade_Cost_RMB__c; |
| | | this.ProductGuranteePrice = oli.PricebookEntry.Product2.Intra_Trade_Gurantee_RMB__c; |
| | | PageObject.productServicePrice__c = oli.PricebookEntry.Product2.Intra_Trade_Service_RMB__c; |
| | | } else if (oli.Opportunity.Trade__c == '外貿') { |
| | | this.ListPrice_Page = oli.PricebookEntry.Product2.Foreign_Trade_List_US__c; |
| | | cost = oli.PricebookEntry.Product2.Foreign_Trade_Cost_US__c; |
| | | this.ProductGuranteePrice = oli.PricebookEntry.Product2.Intra_Trade_Foreign_RMB__c; |
| | | PageObject.productServicePrice__c = oli.PricebookEntry.Product2.NoDiscount_Foreign__c; |
| | | } |
| | | if (cost > 0 && oli.Quantity > 0) { |
| | | this.Cost_Subtotal_c = cost * oli.Quantity; |
| | | } |
| | | this.Cost_c = cost; |
| | | if (oli.UnitPrice__c > 0 && oli.Quantity > 0) { |
| | | oli.TotalPrice__c = oli.UnitPrice__c * oli.Quantity; |
| | | } |
| | | if (quo.OrderIsChange__c) { |
| | | if (initStringConcatenation != saveStringConcatenation) { |
| | | verifyProductValidFlag = true; |
| | | } |
| | | } |
| | | |
| | | PageObject.BSS_Category__c = oli.BSS_Category__c; |
| | | pageObject.Subtotal__c = oli.TotalPrice__c; |
| | | pageObject.PricebookEntryId = oli.PricebookEntryId; |
| | | latestInfo = New QELinelatestInfo(); |
| | | latestInfo.ProductCode = oli.ProductCode__c; |
| | | latestInfo.ProductName = oli.PricebookEntry.Product2.Name; |
| | | latestInfo.SFDA_Status = oli.PricebookEntry.Product2.SFDA_Status__c; |
| | | latestInfo.Sales_Possibility = oli.PricebookEntry.Product2.Sales_Possibility__c; |
| | | // 多年保修 start |
| | | //外贸多年保 取产品主数据的外贸金额 以及 报价 精琢技术 wql 2021/01/04 start |
| | | latestInfo.ProductEntend_gurantee_period_all = oli.PricebookEntry.Product2.Entend_gurantee_period_all__c; |
| | | if (oli.Opportunity.Trade__c == '内貿') { |
| | | latestInfo.Intra_Trade_Gurantee = oli.PricebookEntry.Product2.Intra_Trade_Gurantee_RMB__c; |
| | | latestInfo.Intra_Trade_Service = oli.PricebookEntry.Product2.Intra_Trade_Service_RMB__c; |
| | | // 产品首营状态Z5(停产) ---XHL 2021/02/07 Start |
| | | Map<String,Decimal> productIdQuantityMap = new Map<String,Decimal>(); |
| | | List<String> productIdList = new List<String>(); |
| | | String productSegmentZ5 = opp.ProductSegment__c == 'BS' ? 'LS':opp.ProductSegment__c; |
| | | // String productSegment = opp.ProductSegment__c == 'BS' ? 'LS':opp.ProductSegment__c; |
| | | |
| | | // 维修合同报价 |
| | | latestInfo.Maintenance_Price_Year = oli.PricebookEntry.Product2.Maintenance_Price_Year__c; |
| | | } else if (oli.Opportunity.Trade__c == '外貿') { |
| | | latestInfo.Intra_Trade_Gurantee = oli.PricebookEntry.Product2.Intra_Trade_Foreign_RMB__c; |
| | | latestInfo.Intra_Trade_Service = oli.PricebookEntry.Product2.NoDiscount_Foreign__c; |
| | | String FGSPStr = 'Machine'.equals(opp.Machine_Parts__c) ? 'FG':'SP'; |
| | | // 产品首营状态Z5(停产) ---XHL 2021/02/07 End |
| | | for (QELine s:activities) { |
| | | if (s.pageObject.PricebookEntryId != null && s.productName != null && s.productName != '') { |
| | | if (String.isBlank(s.pageObject.PricebookEntryId) == false) { |
| | | String setName = s.pageObject.Set__c; |
| | | Integer qty = 1; |
| | | //XHL-20190426-UpdateStart |
| | | if (!s.pageObject.SingleProduct__c && String.isNotBlank(setName)){ |
| | | String fieldName = setName.substring(3); |
| | | fieldName = fieldName.indexOf('0') == 0 ? fieldName.substring(1) : fieldName; |
| | | Decimal d_qty = (Decimal) quo.get('SetQty' + fieldName + '__c'); |
| | | qty = d_qty == null ? 1 : d_qty.intValue(); |
| | | } |
| | | //XHL-20190426-UpdateEnd |
| | | QuoteLineItem ql = s.pageObject.clone(); |
| | | ql.QuoteId = q.Id; |
| | | ql.Quantity = ql.Quantity ; |
| | | if (is_hidden_all || is_hidden_user == true || is_dealer_user == true && s.hiddenflg == true) { |
| | | ql.UnitPrice = s.salesPrice; |
| | | ql.Discount = all_discount; |
| | | if (s.customPrice != 0) { |
| | | ql.Custom_Price__c = s.customPrice; |
| | | } |
| | | } |
| | | ql.Custom_Price__c = ql.Custom_Price__c == null ? 0 : ql.Custom_Price__c;// * qty; |
| | | ql.quoLiVerifyProductValid__c = verifyProductValidFlag; |
| | | if (s.pageObject.SingleProduct__c) { |
| | | singleProductList.add(ql); |
| | | } else { |
| | | qlist.add(ql); |
| | | } |
| | | productIdList.add(s.pageObject.Product2Id); |
| | | // 产品首营状态Z5(停产) ---XHL 2021/02/07 Start |
| | | Decimal quantity = ql.Quantity; |
| | | if (productIdQuantityMap.containsKey(s.pageObject.Product2Id)) { |
| | | quantity += productIdQuantityMap.get(s.pageObject.Product2Id); |
| | | } |
| | | productIdQuantityMap.put(s.pageObject.Product2Id,quantity); |
| | | // 产品首营状态Z5(停产) ---XHL 2021/02/07 End |
| | | |
| | | i++; |
| | | } |
| | | } |
| | | } |
| | | if (productIdList.size() > 0) { |
| | | // 产品首营状态Z5(停产) ---XHL 2021/02/07 Start |
| | | Map<String,Decimal> productQuantityMap = new Map<String,Decimal>(); |
| | | List<Product2> getProductList = [SELECT Id,Name,ProductCode,NMPAStatus__c,ProductStatusFormula__c FROM Product2 WHERE Id IN:productIdList AND NMPAStatus__c = '停产' AND ProductStatusFormula__c = '1']; |
| | | |
| | | for (Product2 pro:getProductList) { |
| | | |
| | | Decimal productQuantity = productIdQuantityMap.get(pro.Id); |
| | | String key = pro.ProductCode +'_'+ productSegmentZ5 +'_'+ FGSPStr; |
| | | // String key = pro.ProductCode +'_'+ productSegment +'_'+ FGSPStr; |
| | | |
| | | |
| | | productQuantityMap.put(key, productQuantity); |
| | | } |
| | | if (productQuantityMap.size() > 0) { |
| | | String result = OrderWebService.ProductInventoryCheck(productQuantityMap); |
| | | if (result != '1') { |
| | | if (String.isBlank(errorMessage)) { |
| | | errorMessage = '注意!!! '+ result; |
| | | } else { |
| | | errorMessage += result; |
| | | } |
| | | } |
| | | } |
| | | // 产品首营状态Z5(停产) ---XHL 2021/02/07 End |
| | | |
| | | } |
| | | if (singleProductList.size() >0 ){ |
| | | insert singleProductList; |
| | | } |
| | | |
| | | if (qlist.size()>0) { |
| | | insert qlist; |
| | | } |
| | | |
| | | Quote quoUpd = [select id, Discount, Discount_Normal__c, Discount_Special__c,OrderIsChange__c from Quote where Id = : quoId1]; |
| | | Decimal quoDis = quoUpd.Discount == null ? 0 : quoUpd.Discount; |
| | | Decimal quoDisN = quoUpd.Discount_Normal__c == null ? 0 : quoUpd.Discount_Normal__c; |
| | | if (productSegment == 'BS') { |
| | | system.debug('quoDis---->'+quoDis); |
| | | system.debug('quoDisN---->'+quoDisN); |
| | | quoUpd.Discount_Special__c = quoDis - quoDisN; |
| | | system.debug('quoUpd.Discount_Special__c---->'+quoUpd.Discount_Special__c); |
| | | } else { |
| | | quoUpd.Discount_Special__c = (quoDis - quoDisN) / (1 - quoDisN / 100); |
| | | } |
| | | |
| | | quoUpd.QuoVerifyProductValid__c = verifyProductValidFlag; |
| | | |
| | | update quoUpd; |
| | | |
| | | List<QuoteLineItem> itemsRe = |
| | | [Select Id,Product2Id,Product2.Name,Product2.ProductCode,Product2.Product_ECCode__c,Quantity,Subtotal,Discount,TotalPrice,PricebookEntryId,UnitPrice,Description,Set__c,Custom_Price__c, |
| | | PricebookEntry.SalesPrice__c,PricebookEntry.SalesPriceA__c,PricebookEntry.SalesPriceB__c,PricebookEntry.SalesPriceC__c,Product2.ProductModels__c,PricebookEntry.Hidden_flag__c, |
| | | Quote.Discount_Normal__c,SingleProduct__c,SetName__c,DontSingleProduct__c, |
| | | Quote.Opportunity.DealerId__c |
| | | From QuoteLineItem where Quoteid = :quoId1 Order by Id]; |
| | | activities = new List<QELine>(); |
| | | i=0; |
| | | QELine c = new QELine(i); |
| | | |
| | | String includeEspecialProduct = ''; |
| | | is_hidden_all = false; |
| | | if (itemsRe.size()>0) { |
| | | for (QuoteLineItem o:itemsRe) { |
| | | |
| | | if (o.DontSingleProduct__c != '1') { |
| | | if (String.isBlank(includeEspecialProduct)) { |
| | | |
| | | includeEspecialProduct = o.DontSingleProduct__c; |
| | | } else { |
| | | includeEspecialProduct += ',' + o.DontSingleProduct__c; |
| | | } |
| | | specialerrorflg = true; |
| | | } |
| | | String setName = o.Set__c; |
| | | Integer qty = 1; |
| | | //XHL-20190426-UpdateStart |
| | | if (!o.SingleProduct__c && String.isNotBlank(setName)) { |
| | | String fieldName = setName.substring(3); |
| | | fieldName = fieldName.indexOf('0') == 0 ? fieldName.substring(1) : fieldName; |
| | | Decimal d_qty = (Decimal) quo.get('SetQty' + fieldName + '__c'); |
| | | qty = d_qty == null ? 1 : d_qty.intValue(); |
| | | } |
| | | //XHL-20190426-UpdateEnd |
| | | c = new QELine(isService, o,i,o.Product2.Name,o.Product2.ProductCode,o.Product2.Product_ECCode__c,qty,o.Product2.ProductModels__c,o.SingleProduct__c,o.SetName__c); |
| | | //c = new QELine(isService, o,i,o.Product2.Name,o.Product2.ProductCode,o.Product2.Product_ECCode__c,qty,o.Product2.ProductModels__c,quo.Discount_Normal__c); |
| | | //specialDealer = StaticParameter.specialDealerMap.containsKey(o.Quote.Opportunity.DealerId__c); |
| | | specialDealer = IfspecialDealer(o.Quote.Opportunity.DealerId__c); |
| | | //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请选择目标客户----3>'+o.Quote.Opportunity.DealerId__c)); |
| | | if (specialDealer || is_hidden_user == true || is_dealer_user == true && c.hiddenflg == true) { |
| | | c.pageObject.UnitPrice = 0; |
| | | c.totalPrice = 0; |
| | | c.customPrice = 0; |
| | | system.debug('<---is_hidden_all---01>' + is_hidden_all); |
| | | is_hidden_all = true; |
| | | discount = 0; |
| | | } |
| | | activities.add(c); |
| | | i++; |
| | | |
| | | } |
| | | } |
| | | if (String.isNotBlank(includeEspecialProduct) && specialerrorflg) { |
| | | if(!StaticParameter.specialDealerMap1.containsKey(opp.DealerId__c)) { |
| | | errormessage += '注意!!! 报价产品中包含特殊的单品产品[ ' +includeEspecialProduct+ ' ]'; |
| | | } |
| | | //system.debug('errormessage__20190523__' + errormessage); |
| | | } |
| | | |
| | | for (integer j=i;j<quoteEntryMaxLine;j++) { |
| | | c = new QELine(j); |
| | | activities.add(c); |
| | | } |
| | | |
| | | } |
| | | if (quo.OrderIsChange__c) { |
| | | if (initStringConcatenation != saveStringConcatenation) { |
| | | verifyProductValidFlag = true; |
| | | } |
| | | } |
| | | |
| | | List<Quote> quoListRe = |
| | | [ SELECT Id,Name,QuoteNumber,Account.name,ExpirationDate,Subtotal,Discount,TotalPrice,GrandTotal,PrintPrice__c,ShippingHandling, |
| | | DeliveryLeadTime__c,PaymentTerms__c,ValidDate__c,Warranty__c,SetName1__c,Shipment_Term__c,Shipment_Term2__c, |
| | | SetName2__c,SetName3__c,SetName4__c,SetName5__c,SetName6__c,SetName7__c,SetName8__c,SetName9__c,SetName10__c, |
| | | SetName11__c,SetName12__c,SetName13__c,SetName14__c,SetName15__c,SetName16__c,SetName17__c,SetName18__c,SetName19__c, |
| | | SetName20__c,SetName21__c,SetName22__c,SetName23__c,SetName24__c,SetName25__c,SetName26__c,SetName27__c,SetName28__c,SetName29__c, |
| | | SetName30__c,SetQty1__c,SetQty2__c,SetQty3__c,SetQty4__c,SetQty5__c,SetQty6__c,SetQty7__c,SetQty8__c,SetQty9__c,SetQty10__c,SetQty11__c, |
| | | SetQty12__c,SetQty13__c,SetQty14__c,SetQty15__c,SetQty16__c,SetQty17__c,SetQty18__c,SetQty19__c,SetQty20__c,SetQty21__c,SetQty22__c,SetQty23__c, |
| | | SetQty24__c,SetQty25__c,SetQty26__c,SetQty27__c,SetQty28__c,SetQty29__c,SetQty30__c,Comment__c,Custom_Price_Total__c,Custom_Price_Total_Text__c,Quote_Type__c, |
| | | Main_Model__c,Main_Serial_Number__c,Service_Type__c,Contract_Number__c,Service_Date__c,Service_Finish_Date__c,Service_Engineer_Sign__c, |
| | | Service_Pickup_Sign__c,Service_Check_Sign__c,Service_Location__c,Service_Status__c,Service_Content__c, Is_upload__c, Total_Price_Text__c, |
| | | Discount_Normal__c,Discount_Special__c,OrderIsChange__c |
| | | FROM Quote Where Id =:quoId1]; |
| | | if (quoListRe.size() > 0) { |
| | | quo = quoListRe[0]; |
| | | } |
| | | |
| | | system.debug('=====is_hidden_all:' + is_hidden_all); |
| | | if (is_hidden_all) { |
| | | discount = quo.totalPrice.setScale(2, System.RoundingMode.HALF_UP); |
| | | } else { |
| | | discount = quo.Discount == null ? 0 : quo.Discount; |
| | | //discount = quo.Discount_Special__c == null ? 0 : quo.Discount_Special__c; |
| | | discount = discount.setScale(2, System.RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | system.debug('○○○○○○○○○○○○Welcome Opportunity class!!○○○○○○○○○○○○'); |
| | | |
| | | //Opportunity-------------------------------------------- |
| | | Opportunity o = New Opportunity(); |
| | | List<Opportunity> os = New List<Opportunity>(); |
| | | os = [select Id From Opportunity Where Id =:oppid]; |
| | | if (os.size()>0) { |
| | | o = os[0]; |
| | | if (decideFlg == false) { |
| | | o.SyncedQuoteId = quoId1; |
| | | o.Quote_PaymentTerms_Text__c = paymentTermsMap.get(quo.PaymentTerms__c); |
| | | o.is_hidden__c = is_hidden_all || specialDealer; |
| | | if (doDecide == true) { |
| | | o.Is_Decided__c = true; |
| | | o.Quote_Decide_User__c = UserInfo.getUserId(); |
| | | } |
| | | o.IE_Discount_Normal__c = quo.Discount_Normal__c; |
| | | o.IE_Discount_Special__c = quo.Discount_Special__c; |
| | | system.debug('IE_Discount_Special__c--->'+o.IE_Discount_Special__c); |
| | | update o; |
| | | } |
| | | |
| | | } |
| | | if (quoId == null) { |
| | | quoId = quoId1;//q.Id; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | //oppに画面の値を設定 |
| | | private void setOppFromOppInfo() { |
| | | |
| | | } |
| | | |
| | | public PageReference csvExport() { |
| | | if (fileName == null || fileName == '') { |
| | | errorflg = true; |
| | | errormessage = '请输入配置导出文件名。'; |
| | | return null; |
| | | } |
| | | Date dExpirationDate = quo.ExpirationDate; |
| | | strExpirationDate = dExpirationDate == null ? '' : dExpirationDate.format(); |
| | | csv_activities = new List<QELine>(); |
| | | for (QELine s : activities) { |
| | | if (s.pageObject.PricebookEntryId != null && s.productName != null && s.productName != '') { |
| | | csv_activities.add(s); |
| | | } |
| | | } |
| | | PageReference pr = page.QuoteCSVExport; |
| | | return pr; |
| | | } |
| | | |
| | | public PageReference csvRead() { |
| | | |
| | | String strFile = ''; |
| | | List<String> listFile = new List<String>(); |
| | | errorflg = false; |
| | | errormessage = null; |
| | | try { |
| | | if (contentFile != null) { |
| | | strFile = contentFile.toString(); |
| | | listFile = strFile.split('\n'); |
| | | system.debug('=====strFile:' + strFile); |
| | | } else { |
| | | errorflg = true; |
| | | errormessage = '读取内容为空。'; |
| | | return null; |
| | | } |
| | | } catch (Exception ex) { |
| | | errorflg = true; |
| | | errormessage = System.Label.Error_Message02; |
| | | return null; |
| | | } |
| | | for (Integer i = 0; i < listFile.size(); i++) { |
| | | system.debug('=====listFile_' + i + ':' + listFile[i]); |
| | | } |
| | | List<String[]> arrayFile = new List<String[]>(); |
| | | String firstline = listFile[0]; |
| | | if (firstline.indexOf('套装/单品') < 0) { |
| | | errorflg = true; |
| | | errormessage = '读取内容格式不正确。'; |
| | | return null; |
| | | } else { |
| | | String strReplace = ''; |
| | | List<String> temp = strFile.split('"'); |
| | | for (Integer i = 0; i < temp.size(); i++) { |
| | | if (math.mod(i, 2) == 1) { |
| | | temp[i] = temp[i].replace(',', '#%&'); |
| | | } |
| | | strReplace += temp[i]; |
| | | } |
| | | system.debug('=====strReplace:' + strReplace); |
| | | List<String> listReplace = strReplace.split('\n'); |
| | | for (String replace : listReplace) { |
| | | system.debug('=====replace:' + replace); |
| | | if (replace != '\r' && replace.length() > 0) { |
| | | replace = replace.replace('\r', ''); |
| | | String[] a = replace.split(',', -1); |
| | | for (Integer i = 0; i < a.size(); i++) { |
| | | if (a[i].indexOf('#%&') > 0) { |
| | | a[i] = a[i].replace('#%&', ','); |
| | | } |
| | | } |
| | | if (specialDealer) { |
| | | if (a.size() != 4) { |
| | | errorflg = true; |
| | | errormessage = '读取内容格式不正确。Line:' + arrayFile.size(); |
| | | return null; |
| | | } |
| | | } else { |
| | | if (a.size() != 5) { |
| | | errorflg = true; |
| | | errormessage = '读取内容格式不正确。Line:' + arrayFile.size(); |
| | | return null; |
| | | } |
| | | |
| | | } |
| | | //if (a.size() != 5) { |
| | | // errorflg = true; |
| | | // errormessage = '读取内容格式不正确。Line:' + arrayFile.size(); |
| | | // return null; |
| | | //} |
| | | arrayFile.add(a); |
| | | } |
| | | } |
| | | } |
| | | |
| | | List<String> prdCodeList = new List<String>(); |
| | | |
| | | //XHL-20190426-UpdateStart |
| | | Map<String,String> productSetCodeMap = new Map<String,String>(); |
| | | |
| | | for (Integer i = 1; i < arrayFile.size(); i++) { |
| | | |
| | | if (arrayFile[i] != null && arrayFile[i].size() > 1 && arrayFile[i][0] != '') { |
| | | try { |
| | | if (String.isNotBlank(arrayFile[i][3])) { |
| | | Decimal quantity1 = Decimal.valueOf(arrayFile[i][3]); |
| | | } |
| | | if (!specialDealer) { |
| | | if (String.isNotBlank(arrayFile[i][4])) { |
| | | Decimal discount1 = Decimal.valueOf(arrayFile[i][4]); |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | errorflg = true; |
| | | if (arrayFile[i][0] != singleProduct ) { |
| | | errorMap.put(arrayFile[i][1],'[' + arrayFile[i][1] +']配套的数量或折扣存在非数字,请确认;'); |
| | | } else { |
| | | errorMap.put(arrayFile[i][1],'[' + arrayFile[i][1] +']产品的数量或折扣存在非数字,请确认;'); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | if (arrayFile[i][0] != singleProduct ) { |
| | | |
| | | productSetCodeMap.put(arrayFile[i][1], arrayFile[i][3] + ';'+arrayFile[i][4]); |
| | | } else { |
| | | |
| | | String tmp = '00000000000' + arrayFile[i][1]; |
| | | prdCodeList.add(tmp); |
| | | prdCodeList.add(arrayFile[i][1]); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | activities = new List<QELine>(); |
| | | Integer no =0; |
| | | emptyData(); |
| | | if (productSetCodeMap.size() > 0) { |
| | | |
| | | acquireProductSetId(productSetCodeMap); |
| | | no = singleNo == null ? 0 : singleNo; |
| | | } |
| | | //XHL-20190426-UpdateEnd |
| | | |
| | | |
| | | // 维修合同报价 |
| | | latestInfo.Maintenance_Price_Year = oli.PricebookEntry.Product2.Repair_Contract_USD__c; |
| | | } |
| | | //外贸多年保 取产品主数据的外贸金额 以及 报价 精琢技术 wql 2021/01/04 end |
| | | latestInfo.GuranteeType = oli.PricebookEntry.Product2.GuranteeType__c; |
| | | // 多年保修 end |
| | | if (oli.PricebookEntry.Product2.Packing_list_manual__c != null) { |
| | | latestInfo.Specifications = integer.valueof(oli.PricebookEntry.Product2.Packing_list_manual__c + ''); |
| | | } |
| | | latestInfo.ListPrice = oli.Product_ListPrice__c; |
| | | latestInfo.Cost = oli.Product_Cost__c; |
| | | //不可取消多年保 |
| | | latestInfo.CanNotCancelledGurantee = oli.PricebookEntry.Product2.CanNotCancelledGurantee__c; |
| | | this.changed_name = false; |
| | | this.changed_sfda = false; |
| | | this.changed_list = false; |
| | | this.changed_cost = false; |
| | | this.haveno_Register = false; |
| | | this.wrong_Register = false; |
| | | } |
| | | public QELine(QuoteLineItem qli, Integer i, String copyQuoId) { |
| | | //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, ' qli Id__c=' + qli.PricebookEntry.Product2Id)); |
| | | pageObject = qli.clone(); |
| | | pageObject.Id__c = qli.PricebookEntry.Product2Id; |
| | | pageObject.Quantity__c = qli.Quantity; |
| | | //ET促销标记 start |
| | | // pageObject.ETPromotionalFlag__c = qli.ETPromotionalFlag__c; |
| | | //ET促销标记 end |
| | | if (copyQuoId != null) { |
| | | pageObject.SFDA_Status__c = qli.PricebookEntry.Product2.SFDA_Status__c; |
| | | pageObject.Name__c = qli.PricebookEntry.Product2.Name; |
| | | //PageObject.PricebookEntry.Product2.Packing_list_manual__c = qli.PricebookEntry.Product2.Packing_list_manual__c; |
| | | } |
| | | this.lineNo = i; |
| | | this.Asset_Model = qli.Asset_Model_No__c; |
| | | if (qli.Cost__c > 0 && qli.Quantity > 0) { |
| | | this.Cost_Subtotal_c = qli.Cost__c * qli.Quantity; |
| | | } |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start |
| | | this.VenderName = qli.PricebookEntry.Product2.VenderName__c; |
| | | |
| | | |
| | | //SFDC停止预警 lt 20211009 ①不能定义date变量 因为前台返回的是String日期 ②将util里的方法转为日期格式 start |
| | | if(qli.PricebookEntry.Product2.Estimated_ConsumptionDueDate__c != null){ |
| | | this.Estimated_ConsumptionDueDate = NFMUtil.formatDate2StrSpo(qli.PricebookEntry.Product2.Estimated_ConsumptionDueDate__c).replaceAll('-','/'); |
| | | }else{ |
| | | this.Estimated_ConsumptionDueDate = ''; |
| | | } |
| | | //SFDC停止预警 lt 20211009 end |
| | | |
| | | if(VenderName==null||VenderName==''){ |
| | | this.VenderName =' 无 '; |
| | | }else{ |
| | | //this.VenderName = qli.PricebookEntry.Product2.VenderName__c; |
| | | system.debug('=====prdCodeList:' + prdCodeList); |
| | | //return null; |
| | | Map<String, Product_Search__c> psMap = new Map<String, Product_Search__c>(); // keyがProductCodeです。 |
| | | List<String> forSelect = new List<String>(); |
| | | List<Product_Search__c> psList = [ |
| | | select Id, Name, ProductCode__c, Product_ECCode__c, ProductDescription__c, ProductStatus__c, Product__c, ProductModels1__c |
| | | from Product_Search__c |
| | | where ProductCode__c in :prdCodeList]; |
| | | String errProduct = ''; |
| | | Map<String,String> errProductMap = new Map<String,String>(); |
| | | for (Product_Search__c ps : psList) { |
| | | String pc = ps.ProductCode__c; |
| | | if (pc.startsWith('00000000000')) { |
| | | pc = pc.substring(11); |
| | | psMap.put(pc, ps); |
| | | } |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start |
| | | //不可取消多年保 |
| | | this.CanNotCancelledGurantee = qli.PricebookEntry.Product2.CanNotCancelledGurantee__c; |
| | | //阿西赛多 |
| | | this.Is_DangerousChemicals = qli.PricebookEntry.Product2.Is_DangerousChemicals__c; |
| | | //************************************liukun*****************************************************// |
| | | this.StorageStatus = qli.PricebookEntry.Product2.StorageStatus__c; |
| | | |
| | | this.ListPrice_Page = qli.ListPrice__c; |
| | | this.Cost_c = qli.Cost__c; |
| | | pageObject.Subtotal__c = qli.TotalPrice__c; |
| | | pageObject.UnitPrice_Page__c = qli.UnitPrice__c; |
| | | latestInfo = New QELinelatestInfo(); |
| | | latestInfo.ProductCode = qli.ProductCode__c; |
| | | latestInfo.ProductName = qli.PricebookEntry.Product2.Name; |
| | | |
| | | latestInfo.SFDA_Status = qli.PricebookEntry.Product2.SFDA_Status__c; |
| | | // 多年保修 start |
| | | |
| | | latestInfo.ProductEntend_gurantee_period_all = qli.PricebookEntry.Product2.Entend_gurantee_period_all__c; |
| | | //外贸多年保 取产品主数据上的金额及报价 精琢技术 wql start |
| | | if(qli.Quote.Opportunity.Trade__c == '内貿'){ |
| | | latestInfo.Intra_Trade_Gurantee = qli.PricebookEntry.Product2.Intra_Trade_Gurantee_RMB__c; |
| | | latestInfo.Intra_Trade_Service = qli.PricebookEntry.Product2.Intra_Trade_Service_RMB__c; |
| | | //维修合同报价 |
| | | //HWAG-BLDE4M decide后成本为空 精琢技术 20200227 start |
| | | if(qli.PricebookEntry.Product2.Maintenance_Price_Year__c == null){ |
| | | latestInfo.Maintenance_Price_Year = 0; |
| | | }else{ |
| | | latestInfo.Maintenance_Price_Year = qli.PricebookEntry.Product2.Maintenance_Price_Year__c; |
| | | psMap.put(ps.ProductCode__c, ps); |
| | | forSelect.add(ps.Product__c); |
| | | //system.debug(ps.ProductCode__c + ps.ProductStatus__c+'@@@@@@@->>>'); |
| | | if(ps.ProductStatus__c == '0'){ |
| | | system.debug(ps.ProductCode__c + ps.ProductStatus__c+'@@@@@@@'); |
| | | errorflg = true; |
| | | errProduct += ps.ProductCode__c + ','; |
| | | errProductMap.put(ps.ProductCode__c,ps.ProductCode__c); |
| | | } |
| | | } |
| | | //HWAG-BLDE4M decide后成本为空 精琢技术 20200227 end |
| | | }else if(qli.Quote.Opportunity.Trade__c == '外貿'){ |
| | | latestInfo.Intra_Trade_Gurantee = qli.PricebookEntry.Product2.Intra_Trade_Foreign_RMB__c; |
| | | latestInfo.Intra_Trade_Service = qli.PricebookEntry.Product2.NoDiscount_Foreign__c; |
| | | //维修合同报价 |
| | | //HWAG-BLDE4M decide后成本为空 精琢技术 20200227 start |
| | | if(qli.PricebookEntry.Product2.Maintenance_Price_Year__c == null){ |
| | | latestInfo.Maintenance_Price_Year = 0; |
| | | }else{ |
| | | latestInfo.Maintenance_Price_Year = qli.PricebookEntry.Product2.Repair_Contract_USD__c; |
| | | } |
| | | //HWAG-BLDE4M decide后成本为空 精琢技术 20200227 end |
| | | } |
| | | //外贸多年保 取产品主数据上的金额及报价 精琢技术 wql end |
| | | |
| | | latestInfo.GuranteeType = qli.PricebookEntry.Product2.GuranteeType__c; |
| | | //不可取消多年保 |
| | | latestInfo.CanNotCancelledGurantee = qli.PricebookEntry.Product2.CanNotCancelledGurantee__c; |
| | | // 计提金额 |
| | | this.Maintenance_Price_Year = qli.Maintenance_Price_Year__c; |
| | | this.GuranteePrice = qli.GuranteePrice__c; |
| | | this.ProductGuranteePrice = qli.ProductGuranteePrice__c; |
| | | // 多年保修 end |
| | | latestInfo.Sales_Possibility = qli.PricebookEntry.Product2.Sales_Possibility__c; |
| | | if (qli.PricebookEntry.Product2.Packing_list_manual__c != null) { |
| | | latestInfo.Specifications = integer.valueof(qli.PricebookEntry.Product2.Packing_list_manual__c + ''); |
| | | } |
| | | latestInfo.ListPrice = qli.Product_ListPrice__c; |
| | | latestInfo.Cost = qli.Product_Cost__c; |
| | | //********************Insert [OLY_OCM-228] [20160706] [赵德芳] Start********************// |
| | | if (qli.PricebookEntry.Product2.Packing_list_manual__c != null) { |
| | | this.Specifications = integer.valueof(qli.PricebookEntry.Product2.Packing_list_manual__c + ''); |
| | | } |
| | | //********************Insert [OLY_OCM-228] [20160706] [赵德芳] End**********************// |
| | | this.changed_name = false; |
| | | this.changed_sfda = false; |
| | | this.changed_list = false; |
| | | this.changed_cost = false; |
| | | this.haveno_Register = false; |
| | | this.wrong_Register = false; |
| | | |
| | | if (errorflg == true && errProduct != '') { |
| | | errProduct = errProduct.substring(0, errProduct.length() - 1); |
| | | errorMessage = '产品状态为无效,不能使用。产品:' + errProduct + '请确认;'; |
| | | errorMap.put(errorMessage,errorMessage); |
| | | //return null; |
| | | } |
| | | system.debug('errorflg---->11111'+errorMessage); |
| | | Map<String, PricebookEntry> pbeMap = new Map<String, PricebookEntry>(); // keyがProductCodeです。 |
| | | List<PricebookEntry> pbeList = [ |
| | | select Id, Product2Id, ProductCode, Product2.Product_ECCode__c, Product2.Dummy__c, CostPrice__c, SalesPrice__c, SalesPriceA__c, SalesPriceB__c, SalesPriceC__c, Hidden_flag__c |
| | | from PricebookEntry |
| | | where Pricebook2Id = :pricebook2Id |
| | | and CurrencyIsoCode = :currencyIsoCode |
| | | and Product2.ManualHidden__c = false |
| | | and Product2Id in :forSelect]; |
| | | system.debug('forSelect_1_1_1_1_1_' + forSelect); |
| | | system.debug('pbeList_2_2_2_2_2_2_2_' + pbeList); |
| | | |
| | | for (PricebookEntry pbe : pbeList) { |
| | | String pc = pbe.ProductCode; |
| | | if ((pbe.CostPrice__c == 0 && pbe.Product2.Dummy__c == false) || pbe.SalesPrice__c == 0) { |
| | | errorflg = true; |
| | | errProduct += pbe.productCode + ','; |
| | | } else { |
| | | if (pc.startsWith('00000000000')) { |
| | | pc = pc.substring(11); |
| | | pbeMap.put(pc, pbe); |
| | | } |
| | | pbeMap.put(pbe.ProductCode, pbe); |
| | | } |
| | | } |
| | | |
| | | if (arrayFile.size() > 1) { |
| | | //XHL-20190426-UpdateStart |
| | | for (Integer line = 1; line < arrayFile.size(); line++) { |
| | | |
| | | if (arrayFile[line][0] == singleProduct) { |
| | | |
| | | Product_Search__c ps = psMap.get(arrayFile[line][1]); |
| | | PricebookEntry pbe = pbeMap.get(arrayFile[line][1]); |
| | | if (ps == null || pbe == null) { |
| | | errorflg = true; |
| | | errProduct += arrayFile[line][1] + ','; |
| | | errorMap.put(arrayFile[line][2],errProduct); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | if (errorflg) { |
| | | system.debug('errorflg---->22222'+errorMessage); |
| | | errorMessage = ''; |
| | | String intermediateVariable = ''; |
| | | |
| | | for (String errorKey :errorMap.keySet()) { |
| | | |
| | | errProduct = errorMap.get(errorKey).substring(0, errorMap.get(errorKey).length()-1); |
| | | system.debug('ceshi------>' + errProduct); |
| | | if (errProduct.endsWith('!!!')) { |
| | | errorMessage += errorMap.get(errorKey); |
| | | } else if(errProduct.startsWith('error')){ |
| | | errorMessage += errorMap.get(errorKey); |
| | | }else if(errProduct.endsWith('请确认')){ |
| | | errorMessage += errorMap.get(errorKey); |
| | | }else { |
| | | if (String.isBlank(intermediateVariable)) { |
| | | intermediateVariable = errorKey; |
| | | } else { |
| | | intermediateVariable += ',' + errorKey; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | if (String.isNotBlank(intermediateVariable)) { |
| | | errorMessage += '[' + intermediateVariable + ']的产品价格信息不正确,不能使用;'; |
| | | } |
| | | //return null ; |
| | | } |
| | | |
| | | QELine c = new QELine(no); |
| | | is_hidden_all = false; |
| | | boolean isSingleProduct = false; |
| | | for (Integer line = 1; line < arrayFile.size(); line++) { |
| | | if (arrayFile[line][0] == singleProduct ){ |
| | | if (errorMap.containsKey(arrayFile[line][2])) { |
| | | continue; |
| | | } |
| | | |
| | | isSingleProduct = true; |
| | | Product_Search__c ps = psMap.get(arrayFile[line][1]); |
| | | PricebookEntry pbe = pbeMap.get(arrayFile[line][1]); |
| | | system.debug('=====key:' + arrayFile[line][1]); |
| | | system.debug('=====ps:' + ps); |
| | | system.debug('=====pbe:' + pbe); |
| | | system.debug('ps.ProductCode__c--->'+ps.ProductCode__c ); |
| | | system.debug('ps.Product__c--->'+ps.Product__c); |
| | | //c = new QELine(isService, no, arrayFile[line][0], ps.Name, ps.ProductCode__c, ps.Product_ECCode__c, ps.Product__c, pbe, arrayFile[line][3], arrayFile[line][4], ps.ProductModels1__c, quo.Discount_Normal__c); |
| | | if (errProductMap != null && errProductMap.size() > 0) { |
| | | if (errProductMap.containsKey(arrayFile[line][1])) { |
| | | continue; |
| | | } |
| | | } |
| | | if (specialDealer) { |
| | | c = new QELine(isService, no, singleProduct, ps.Name, ps.ProductCode__c, ps.Product_ECCode__c, ps.Product__c, pbe, arrayFile[line][3],'', ps.ProductModels1__c, isSingleProduct, ps.ProductDescription__c, ''); |
| | | } else { |
| | | c = new QELine(isService, no, singleProduct, ps.Name, ps.ProductCode__c, ps.Product_ECCode__c, ps.Product__c, pbe, arrayFile[line][3], arrayFile[line][4], ps.ProductModels1__c, isSingleProduct, ps.ProductDescription__c, ''); |
| | | } |
| | | //c = new QELine(isService, no, singleProduct, ps.Name, ps.ProductCode__c, ps.Product_ECCode__c, ps.Product__c, pbe, arrayFile[line][3], arrayFile[line][4], ps.ProductModels1__c,isSingleProduct,ps.ProductDescription__c,''); |
| | | if (specialDealer || is_hidden_user == true || is_dealer_user == true && c.hiddenflg == true) { |
| | | c.pageObject.UnitPrice = 0; |
| | | c.totalPrice = 0; |
| | | system.debug('<---is_hidden_all--->02' + is_hidden_all); |
| | | is_hidden_all = true; |
| | | discount = 0; |
| | | } |
| | | activities.add(c); |
| | | |
| | | no++; |
| | | |
| | | } |
| | | |
| | | } |
| | | //XHL-20190426-UpdateEnd |
| | | for (integer j = no; j < quoteEntryMaxLine; j++) { |
| | | c = new QELine(j); |
| | | activities.add(c); |
| | | } |
| | | |
| | | } else { |
| | | for (no = 0; no < quoteEntryMaxLine; no++) { |
| | | QELine active_activity = new QELine(no); |
| | | activities.add(active_activity); |
| | | } |
| | | } |
| | | system.debug('quoName: '+quo.Name); |
| | | return null; |
| | | } |
| | | |
| | | // TODO Subtotal__c、以前のロジックを確認 |
| | | /*public QELine(Integer i, String PricebookEntryId, |
| | | String Asset_Model, String StorageStatus, |
| | | String ProductCode, String Id_c, |
| | | String SFDA_Status_c, String Sales_Possibility_c, |
| | | String Name_c, String BSS_Category_c, |
| | | Integer Quantity, Decimal ListPrice_c, |
| | | Decimal UnitPrice_c, Decimal Cost_c, |
| | | Decimal Packing_list_manual |
| | | ) { |
| | | pageObject = New QuoteLineItem(); |
| | | pageObject.Quantity__c = Quantity; |
| | | this.lineNo = i; |
| | | this.Asset_Model = Asset_Model; |
| | | this.Sales_Possibility = Sales_Possibility_c; |
| | | public boolean dataCheck() { |
| | | system.debug('○○○○○○○○○○○○Welcome to dataCheck class!!○○○○○○○○○○○○'); |
| | | errorflg = false; |
| | | errormessage = null; |
| | | Boolean error = false; |
| | | List<String> product2Ids = New List<String>(); |
| | | Map<String,String> mapSet = new Map<String,String> (); |
| | | Map<Id, Product_Search__c> prd2LatestValMap = new Map<Id, Product_Search__c>(); |
| | | |
| | | this.StorageStatus = StorageStatus; |
| | | |
| | | pageObject.Id__c = Id_c; |
| | | pageObject.SFDA_Status__c = SFDA_Status_c; |
| | | pageObject.Name__c = Name_c; |
| | | pageObject.BSS_Category__c = BSS_Category_c; |
| | | this.ListPrice_Page = ListPrice_c; |
| | | pageObject.UnitPrice_Page__c = UnitPrice_c; |
| | | pageObject.Subtotal__c = UnitPrice_c * Quantity; |
| | | //PageObject.PricebookEntry.Product2.Packing_list_manual__c = Packing_list_manual; |
| | | this.Cost_c = Cost_c; |
| | | // TODO katsu なぜここ > 0 の判断はいらない? |
| | | this.Cost_Subtotal_c = Cost_c * Quantity; |
| | | pageObject.PricebookEntryId = PricebookEntryId; |
| | | latestInfo = New QELinelatestInfo(); |
| | | latestInfo.ProductCode = ProductCode; |
| | | latestInfo.ProductName = Name_c; |
| | | latestInfo.SFDA_Status = SFDA_Status_c; |
| | | latestInfo.Sales_Possibility = Sales_Possibility_c; |
| | | latestInfo.ListPrice = this.ListPrice_Page; |
| | | latestInfo.Cost = pageObject.Cost__c; |
| | | if (Packing_list_manual != null) { |
| | | latestInfo.Specifications = integer.valueof('' + Packing_list_manual); |
| | | //报价优化 2021-05-08 start |
| | | String shter = quo.Shipment_Term__c; |
| | | if(String.isBlank(shter) && opp.Trade_Type_D__c =='Tax Exemption'){ |
| | | errorflg = true; |
| | | errorMessage = '国际贸易条件不能为空!'; |
| | | return false; |
| | | } |
| | | this.changed_name = false; |
| | | this.changed_sfda = false; |
| | | this.changed_list = false; |
| | | this.changed_cost = false; |
| | | this.haveno_Register = false; |
| | | this.wrong_Register = false; |
| | | } |
| | | */ |
| | | |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start 增加字段 |
| | | // 多年保修 start |
| | | public QELine(Integer i,Boolean Is_DangerousChemicals,Boolean CanNotCancelledGurantee,String VenderName, |
| | | Date Estimated_ConsumptionDueDate, //20211009 lt add |
| | | String PricebookEntryId, |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end 增加字段 |
| | | String Asset_Model, String StorageStatus, |
| | | String ProductCode, String Id_c, |
| | | String SFDA_Status_c, String Sales_Possibility_c, |
| | | String Name_c, String BSS_Category_c, |
| | | Integer Quantity, Decimal ListPrice_c, |
| | | Decimal UnitPrice_c, Decimal Cost_c, |
| | | Decimal Packing_list_manual |
| | | , Decimal Entend_gurantee_period_all |
| | | , decimal ProductGuranteePrice |
| | | , string GuranteeType |
| | | , Decimal productServicePrice |
| | | , Decimal productMaintenance_Price_Year |
| | | ) { |
| | | pageObject = New QuoteLineItem(); |
| | | pageObject.Quantity__c = Quantity; |
| | | this.lineNo = i; |
| | | this.Asset_Model = Asset_Model; |
| | | this.Sales_Possibility = Sales_Possibility_c; |
| | | |
| | | //SFDC停止预警 lt 20211009 ①不能定义date变量 因为前台返回的是String日期 ②将util里的方法转为日期格式 start |
| | | if(Estimated_ConsumptionDueDate != null){ |
| | | this.Estimated_ConsumptionDueDate = NFMUtil.formatDate2StrSpo(Estimated_ConsumptionDueDate).replaceAll('-','/'); |
| | | }else{ |
| | | this.Estimated_ConsumptionDueDate = ''; |
| | | } |
| | | //SFDC停止预警 lt 20211009 end |
| | | |
| | | this.StorageStatus = StorageStatus; |
| | | |
| | | pageObject.Id__c = Id_c; |
| | | pageObject.SFDA_Status__c = SFDA_Status_c; |
| | | pageObject.Name__c = Name_c; |
| | | pageObject.BSS_Category__c = BSS_Category_c; |
| | | this.ListPrice_Page = ListPrice_c; |
| | | pageObject.UnitPrice_Page__c = UnitPrice_c; |
| | | pageObject.Subtotal__c = UnitPrice_c * Quantity; |
| | | |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 Start |
| | | system.debug('VenderName=========='+VenderName); |
| | | if(VenderName==null||VenderName==''){ |
| | | this.VenderName =' 无 '; |
| | | }else{ |
| | | this.VenderName = VenderName; |
| | | String shter2 = quo.Shipment_Term2__c; |
| | | if(String.isBlank(shter2) && opp.Trade_Type_D__c =='Tax Exemption'){ |
| | | errorflg = true; |
| | | errorMessage = '国际贸易条件2不能为空!'; |
| | | return false; |
| | | } |
| | | //不可取消多年保 |
| | | this.CanNotCancelledGurantee = CanNotCancelledGurantee; |
| | | //阿西赛多 |
| | | this.Is_DangerousChemicals = Is_DangerousChemicals; |
| | | //CHAN-BKU3XH 检查是否存在不是同一个供销商名称 精琢技术 2020/02/17 end |
| | | // 多年保修 start |
| | | pageObject.ProductEntend_gurantee_period_all__c = Entend_gurantee_period_all; |
| | | pageObject.productServicePrice__c = productServicePrice; |
| | | pageObject.GuranteeType__c = GuranteeType; |
| | | // 计提金额 |
| | | this.ProductGuranteePrice = ProductGuranteePrice; |
| | | // 维修合同报价 |
| | | this.Maintenance_Price_Year = productMaintenance_Price_Year; |
| | | // 多年保修 end |
| | | //PageObject.PricebookEntry.Product2.Packing_list_manual__c = Packing_list_manual; |
| | | this.Cost_c = Cost_c; |
| | | // TODO katsu なぜここ > 0 の判断はいらない? |
| | | this.Cost_Subtotal_c = Cost_c * Quantity; |
| | | pageObject.PricebookEntryId = PricebookEntryId; |
| | | latestInfo = New QELinelatestInfo(); |
| | | latestInfo.ProductCode = ProductCode; |
| | | latestInfo.ProductName = Name_c; |
| | | //报价优化 2021-05-08 end |
| | | |
| | | latestInfo.SFDA_Status = SFDA_Status_c; |
| | | latestInfo.Sales_Possibility = Sales_Possibility_c; |
| | | latestInfo.ListPrice = this.ListPrice_Page; |
| | | latestInfo.Cost = pageObject.Cost__c; |
| | | // 多年保修 start |
| | | latestInfo.ProductEntend_gurantee_period_all = Entend_gurantee_period_all; |
| | | latestInfo.Intra_Trade_Gurantee = ProductGuranteePrice; |
| | | latestInfo.Intra_Trade_Service = productServicePrice; |
| | | latestInfo.GuranteeType = GuranteeType; |
| | | latestInfo.Maintenance_Price_Year = productMaintenance_Price_Year; |
| | | //不可取消多年保 |
| | | latestInfo.CanNotCancelledGurantee = CanNotCancelledGurantee; |
| | | //阿西赛多 |
| | | latestInfo.Is_DangerousChemicals = Is_DangerousChemicals; |
| | | // 多年保修 end |
| | | String qname = quo.Name; |
| | | if (qname == null || qname.trim().length() == 0) { |
| | | errorflg = true; |
| | | errorMessage = '请输入报价名称!'; |
| | | return false; |
| | | } |
| | | String qpaymentTerms = quo.PaymentTerms__c; |
| | | if (qpaymentTerms == null || qpaymentTerms.trim().length() == 0) { |
| | | errorflg = true; |
| | | errorMessage = '请输入付款条件!'; |
| | | return false; |
| | | } |
| | | Decimal qdeliveryLeadTime = quo.DeliveryLeadTime__c; |
| | | if (qdeliveryLeadTime == null || qdeliveryLeadTime <= 0) { |
| | | errorflg = true; |
| | | errorMessage = '请输入交货周期!'; |
| | | return false; |
| | | } |
| | | Decimal qwarranty = quo.Warranty__c; |
| | | if (qwarranty == null || qwarranty <= 0) { |
| | | errorflg = true; |
| | | errorMessage = '请输入保修期!'; |
| | | return false; |
| | | } |
| | | Date qexpirationDate = quo.ExpirationDate; |
| | | if (qexpirationDate == null) { |
| | | errorflg = true; |
| | | errorMessage = '请输入报价到期日期!'; |
| | | return false; |
| | | } |
| | | Decimal qcustomPriceTotal = quo.Custom_Price_Total_Text__c; |
| | | if (qcustomPriceTotal == null || qcustomPriceTotal == 0) { |
| | | errorflg = true; |
| | | errorMessage = '请输入客户总价'; |
| | | return false; |
| | | } |
| | | |
| | | if (is_hidden_all) { |
| | | quo.Total_Price_Text__c = discount; |
| | | system.debug('discount----->123'+discount); |
| | | } |
| | | system.debug('=====quo.Total_Price_Text__c:' + quo.Total_Price_Text__c); |
| | | if (is_hidden_all && (quo.Total_Price_Text__c == null || quo.Total_Price_Text__c <= 0)) { |
| | | errorflg = true; |
| | | errorMessage = '总价不正确,请确认!'; |
| | | return false; |
| | | } |
| | | |
| | | if (activities.size()>0) { |
| | | for (QELine a:activities){ |
| | | if (String.isBlank(a.pageObject.Product2Id) == false) { |
| | | product2Ids.add(a.pageObject.Product2Id); |
| | | } |
| | | String tmpSet = a.pageObject.Set__c; |
| | | if (tmpSet != null && tmpSet != '') { |
| | | String tmpSetId = tmpSet.substring(2); |
| | | if (!mapSet.containsKey(tmpSetId)) { |
| | | mapSet.put(tmpSetId,tmpSet); |
| | | } |
| | | } |
| | | } |
| | | |
| | | Map<String,String> mapHeaderSet = new Map<String,String> (); |
| | | Map<String,Decimal> mapHeaderQty = new Map<String,Decimal> (); |
| | | for (Integer i = 1; i <= 30; i++) { |
| | | String field = String.valueOf(i); |
| | | field = '00' + field; |
| | | field = field.substring(field.length() - 2); |
| | | mapHeaderSet.put('set' + field, (String) quo.get('SetName' + i + '__c')); |
| | | mapHeaderQty.put('set' + field, (Decimal) quo.get('SetQty' + i + '__c')); |
| | | } |
| | | |
| | | system.debug('mapSet class========>' + mapSet); |
| | | system.debug('mapSet class========>' + mapSet.size()); |
| | | system.debug('mapHeaderSet class========>' + mapHeaderSet); |
| | | system.debug('mapHeaderQty class========>' + mapHeaderQty); |
| | | |
| | | Map<String,String> mapErrSet = new Map<String,String> (); |
| | | |
| | | |
| | | if (Packing_list_manual != null) { |
| | | latestInfo.Specifications = integer.valueof('' + Packing_list_manual); |
| | | } |
| | | this.changed_name = false; |
| | | this.changed_sfda = false; |
| | | this.changed_list = false; |
| | | this.changed_cost = false; |
| | | this.haveno_Register = false; |
| | | this.wrong_Register = false; |
| | | } |
| | | |
| | | if (error==true) { |
| | | errorflg = true; |
| | | return false; |
| | | } |
| | | |
| | | errorflg = false; |
| | | errorMessage = null; |
| | | return true; |
| | | } |
| | | // 多年保修 end |
| | | } |
| | | |
| | | @TestVisible private void testI() { |
| | | integer i = 0; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | } |
| | | public PageReference reloadPage() { |
| | | if (is_hidden_all) { |
| | | discount = 0; |
| | | } else { |
| | | discount = quo.Discount == null ? 0 : quo.Discount; |
| | | discount = discount.setScale(2, System.RoundingMode.HALF_UP); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | //导入数据时,根据产品配套的Code查找产品配套 |
| | | public void acquireProductSetId(Map<String,String> productSetCodeMap) { |
| | | errorflg = false; |
| | | errormessage = null; |
| | | system.debug('<---productSetCodeMap--->' + productSetCodeMap ); |
| | | Map<String,Integer> productSetID_QuantityMap = new Map<String,Integer>(); |
| | | List<productSet__c> productSetList; //= new List<productSet__c>(); |
| | | Map<String,String> codeMap = new Map<String,String>(); |
| | | |
| | | if (productSetCodeMap.size() > 0 ) { |
| | | |
| | | productSetList = [select Id,Name,Code__c from productSet__c where Code__c in: productSetCodeMap.keyset()]; |
| | | } |
| | | system.debug('<---productSetList--->' + productSetList.size() ); |
| | | if (productSetList.size() > 0) { |
| | | |
| | | for (productSet__c productSet :productSetList) { |
| | | |
| | | codeMap.put(productSet.Code__c, productSet.Code__c); |
| | | Integer quantity = Integer.valueOf(productSetCodeMap.get(productSet.Code__c).split(';')[0]); |
| | | productSetID_QuantityMap.put(productSet.Id,quantity); |
| | | |
| | | } |
| | | |
| | | queSetNameSetQty(productSetID_QuantityMap,productSetCodeMap); |
| | | |
| | | } else { |
| | | |
| | | for (String keyset : productSetCodeMap.keyset()) { |
| | | |
| | | errorflg = true; |
| | | errorMap.put(keyset,'[' + keyset +']配套不存在,请确认!!!!;'); |
| | | } |
| | | } |
| | | String errorInformation = ''; |
| | | |
| | | for (String keyset : productSetCodeMap.keyset()) { |
| | | |
| | | if (!codeMap.containsKey(keyset)) { |
| | | |
| | | errorMap.put(keyset,'[' + keyset +']配套不存在,请确认!!!!;'); |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | //选择产品配套 |
| | | public PageReference setProductEntry () { |
| | | |
| | | errorflg = false; |
| | | errormessage = null; |
| | | |
| | | Map<String,Integer> productSetID_QuantityMap = new Map<String,Integer>(); |
| | | Map<String,String> productSetID_DiscountMap = new Map<String,String>(); |
| | | //当setProduct_text为空时,认为删除该报价所有的产品配套 |
| | | if (String.isBlank(setProduct_text)) { |
| | | |
| | | List<QELine> singleProductSuitList = new List<QELine>(); |
| | | for (QELine q :activities) { |
| | | |
| | | if ( String.isBlank(q.pageObject.Product2Id) == false && q.pageObject.SingleProduct__c == true) { |
| | | |
| | | singleProductSuitList.add(q); |
| | | } |
| | | |
| | | } |
| | | |
| | | activities = new List<QELine>(); |
| | | |
| | | emptyData(); |
| | | |
| | | //将单品套装放在产品配套套装的下面 |
| | | Integer singleNo = 0; |
| | | QELine qeline = new QELine(singleNo); |
| | | |
| | | for (QELine q :singleProductSuitList) { |
| | | |
| | | q.lineNo = singleNo; |
| | | activities.add(q); |
| | | singleNo++; |
| | | } |
| | | |
| | | for (integer j = singleNo; j < quoteEntryMaxLine; j++) { |
| | | |
| | | qeline = new QELine(j); |
| | | activities.add(qeline); |
| | | } |
| | | |
| | | return null; |
| | | } else { |
| | | List<String> productSetIdList = new List<String>(); |
| | | Map<String,String> productSetMap = new Map<String,String>(); |
| | | for (String str : setProduct_text.split(';')) { |
| | | productSetIdList.add(str.split(',')[0]); |
| | | } |
| | | if (productSetIdList.size() > 0) { |
| | | for (productSet__c proSet :[select Id,Name,Code__c from productSet__c where Id in :productSetIdList]) { |
| | | productSetMap.put(proSet.Id, proSet.Code__c); |
| | | } |
| | | } |
| | | for (String str : setProduct_text.split(';')) { |
| | | |
| | | if (String.isBlank(str.split(',')[1]) == false) { |
| | | |
| | | productSetID_QuantityMap.put(str.split(',')[0], Integer.valueOf(str.split(',')[1])); |
| | | productSetID_DiscountMap.put(productSetMap.get(str.split(',')[0]), str.split(',')[1]+';'+str.split(',')[2]); |
| | | system.debug('productSetID_DiscountMap____' + productSetID_DiscountMap); |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | //queSetNameSetQty(productSetID_QuantityMap,null); |
| | | queSetNameSetQty(productSetID_QuantityMap,productSetID_DiscountMap); |
| | | |
| | | for (integer j = singleNo; j < quoteEntryMaxLine; j++) { |
| | | |
| | | QELine qeline = new QELine(j); |
| | | activities.add(qeline); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | |
| | | public class QELine { |
| | | public Integer lineNo { get; set; } |
| | | public String productName { get; set; } |
| | | public String productCode { get; set; } |
| | | public String productEC { get; set; } |
| | | public QuoteLineItem pageObject { get; set; } |
| | | public String setName { get; set; } |
| | | public String productSetNameReference { get; set; } |
| | | public Double totalPrice { get; set; } |
| | | |
| | | public Decimal salesPrice { get; set; } |
| | | public Decimal salesPriceA { get; set; } |
| | | public Decimal salesPriceB { get; set; } |
| | | public Decimal salesPriceC { get; set; } |
| | | |
| | | public boolean isProductModel { get; set; } |
| | | |
| | | public boolean hiddenflg { get; set; } |
| | | public Decimal customPrice { get; set; } |
| | | |
| | | //public Decimal discount { get; set; } |
| | | private Map<String, String> setNameMap; |
| | | private void setMap() { |
| | | Integer quoteEntryMaxSet = Integer.valueOf(System.Label.QuoteEntryMaxSet); |
| | | String singleProduct = System.Label.SingleProduct; |
| | | setNameMap = new Map<String, String>(); |
| | | for (Integer i = 0; i < quoteEntryMaxSet; i++) { |
| | | if (i < 9) { |
| | | setNameMap.put('set0'+ String.valueOf(i+1),'套装0'+ String.valueOf(i+1)); |
| | | } else { |
| | | setNameMap.put('set'+ String.valueOf(i+1),'套装'+ String.valueOf(i+1)); |
| | | } |
| | | } |
| | | |
| | | setNameMap.put(singleProduct,singleProduct); |
| | | } |
| | | private void setMap2() { |
| | | setNameMap = new Map<String, String>(); |
| | | setNameMap.put('set01','零件费用'); |
| | | setNameMap.put('set02','服务费'); |
| | | setNameMap.put('set03','其他费用'); |
| | | } |
| | | |
| | | public QELine(Integer i) { |
| | | this.pageObject = New QuoteLineItem(); |
| | | this.lineNo = i; |
| | | this.totalPrice = 0; |
| | | |
| | | this.salesPrice = 0; |
| | | this.salesPriceA = 0; |
| | | this.salesPriceB = 0; |
| | | this.salesPriceC = 0; |
| | | |
| | | this.isProductModel = true; |
| | | |
| | | this.hiddenflg = false; |
| | | } |
| | | |
| | | //public QELine(boolean isService, QuoteLineItem tmp, Integer i, String pdtName, String pdtCode, String pdtEC, Integer sQty, boolean ispm, Decimal discount_n) { |
| | | //XHL-20190428-Update isSingleProduct,在报价行项目上增加SingleProduct__c字段,区分是套装还是单品 |
| | | public QELine(boolean isService, QuoteLineItem tmp, Integer i, String pdtName, String pdtCode, String pdtEC, Integer sQty, boolean ispm, boolean isSingleProduct,String productSetName) { |
| | | //system.debug('1234567_____'); |
| | | this.pageObject = tmp; |
| | | //this.pageObject.Quantity = tmp.quantity / sQty; |
| | | this.pageObject.Quantity = tmp.quantity ; |
| | | this.pageObject.Custom_Price__c = tmp.Custom_Price__c == null ? 0 : tmp.Custom_Price__c;// / sQty; |
| | | this.pageObject.SetName__c = productSetName; |
| | | //this.totalPrice = tmp.TotalPrice / sQty; |
| | | this.totalPrice = tmp.TotalPrice ; |
| | | this.lineNo = i; |
| | | this.productName = pdtName; |
| | | this.productCode = pdtCode.startsWith('0000000000') ? pdtCode.substring(10) : pdtCode; |
| | | this.productEC = pdtEC; |
| | | if (isService == true) { |
| | | setMap2(); |
| | | } else { |
| | | setMap(); |
| | | } |
| | | this.setName = setNameMap.get(tmp.Set__c); |
| | | //this.setName = tmp.Set__c; |
| | | |
| | | this.salesPrice = tmp.PriceBookEntry.SalesPrice__c; |
| | | this.salesPriceA = tmp.PriceBookEntry.SalesPriceA__c; |
| | | this.salesPriceB = tmp.PriceBookEntry.SalesPriceB__c; |
| | | this.salesPriceC = tmp.PriceBookEntry.SalesPriceC__c; |
| | | |
| | | this.isProductModel = ispm; |
| | | |
| | | this.hiddenflg = tmp.PricebookEntry.Hidden_flag__c; |
| | | system.debug('hiddenflg__'+i+'__'+hiddenflg); |
| | | this.customPrice = this.pageObject.Custom_Price__c; |
| | | this.pageObject.SingleProduct__c = isSingleProduct; |
| | | } |
| | | |
| | | //XHL-20190428-Update isSingleProduct,在报价行项目上增加SingleProduct__c字段,区分是套装还是单品 |
| | | public QELine(boolean isService, Integer i, String setStr, String strName, String strCode, String strEC, String strId, PricebookEntry pbe, String quantity, String discount, boolean ispm, boolean isSingleProduct,String description,String productSetName) { |
| | | this.lineNo = i; |
| | | this.productSetNameReference = productSetName; |
| | | if (isService == true) { |
| | | setMap2(); |
| | | } else { |
| | | setMap(); |
| | | } |
| | | this.setName = setNameMap.get(setStr); |
| | | this.productName = strName; |
| | | String pCode = strCode; |
| | | this.productCode = pCode.startsWith('0000000000') ? pCode.substring(10) : pCode; |
| | | this.productEC = strEC; |
| | | |
| | | pageObject = new QuoteLineItem(); |
| | | this.pageObject.Product2Id = strId; |
| | | this.pageObject.PricebookEntryId = pbe.Id; |
| | | this.pageObject.Set__c = setStr; |
| | | this.pageObject.UnitPrice = pbe.SalesPrice__c; |
| | | this.pageObject.Quantity = quantity == '' ? 0 : Decimal.valueOf(quantity); |
| | | this.pageObject.Discount = discount == '' ? 0 : Decimal.valueOf(discount); |
| | | system.debug('this.pageObject.Discount---->'+this.pageObject.Discount); |
| | | this.pageObject.SingleProduct__c = isSingleProduct; |
| | | this.pageObject.Description = description; |
| | | this.pageObject.SetName__c = productSetName; |
| | | /* this.discount = discount == '' ? 0 : Decimal.valueOf(discount); |
| | | this.discount = this.discount.setScale(2, System.RoundingMode.HALF_UP); |
| | | discount_n = discount_n == null ? 0 : discou;nt_n; |
| | | this.pageObject.Discount = discount_n + (100 - discount_n) * this.discount / 100;*/ |
| | | //this.pageObject.Custom_Price__c = customPrice == '' ? 0 : Decimal.valueOf(customPrice); |
| | | //this.pageObject.Description = description; |
| | | Decimal discount2 = 100-this.pageObject.Discount; |
| | | //this.totalPrice = discount2 * this.pageObject.Quantity * this.pageObject.UnitPrice/100; |
| | | this.totalPrice = this.pageObject.Quantity * this.pageObject.UnitPrice * (1 - this.pageObject.Discount / 100); |
| | | system.debug('this.totalPrice----><'+this.totalPrice); |
| | | this.salesPrice = pbe.SalesPrice__c; |
| | | this.salesPriceA = pbe.SalesPriceA__c; |
| | | this.salesPriceB = pbe.SalesPriceB__c; |
| | | this.salesPriceC = pbe.SalesPriceC__c; |
| | | |
| | | this.isProductModel = ispm; |
| | | |
| | | this.hiddenflg = pbe.Hidden_flag__c; |
| | | } |
| | | |
| | | |
| | | } |
| | | public void quoteLineSetNameDiscountJson(Map<String,String> quoteLineSetNameDiscountMap){ |
| | | if (quoteLineSetNameDiscountMap.size() > 0) { |
| | | quoteLineSetNameDiscountJson = JSON.serializePretty(quoteLineSetNameDiscountMap); |
| | | } |
| | | } |
| | | //决定报价与取消报价时增加和删除相关的"决定报价产品配套" |
| | | public void decideORundecideQuote(String quoteId,Boolean flag){ |
| | | |
| | | if (String.isBlank(quoteId)) { |
| | | return; |
| | | } |
| | | |
| | | if (flag) { |
| | | |
| | | List<DecideQuoteProductSet__c> undecideList = new List<DecideQuoteProductSet__c>(); |
| | | undecideList = [select Id from DecideQuoteProductSet__c where DecideOpportunity__c = :oppId]; |
| | | |
| | | if(undecideList.size() > 0 ){ |
| | | |
| | | delete undecideList; |
| | | } |
| | | } |
| | | |
| | | system.debug('quoteId_1_2_3_4_' + quoteId); |
| | | List<Quote> decideQuoteList = [select Id,Name,QuoteNumber,Is_Decided__c,OpportunityId, |
| | | SetName1__c,SetQty1__c,SetName2__c,SetQty2__c,SetName3__c,SetQty3__c, |
| | | SetName4__c,SetQty4__c,SetName5__c,SetQty5__c,SetName6__c,SetQty6__c, |
| | | SetName7__c,SetQty7__c,SetName8__c,SetQty8__c,SetName9__c,SetQty9__c, |
| | | SetName10__c,SetQty10__c, |
| | | SetName11__c,SetQty11__c,SetName12__c,SetQty12__c,SetName13__c,SetQty13__c, |
| | | SetName14__c,SetQty14__c,SetName15__c,SetQty15__c,SetName16__c,SetQty16__c, |
| | | SetName17__c,SetQty17__c,SetName18__c,SetQty18__c,SetName19__c,SetQty19__c, |
| | | SetName20__c,SetQty20__c, |
| | | SetName21__c,SetQty21__c,SetName22__c,SetQty22__c,SetName23__c,SetQty23__c, |
| | | SetName24__c,SetQty24__c,SetName25__c,SetQty25__c,SetName26__c,SetQty26__c, |
| | | SetName27__c,SetQty27__c,SetName28__c,SetQty28__c,SetName29__c,SetQty29__c, |
| | | SetName30__c,SetQty30__c,OrderIsChange__c |
| | | |
| | | from Quote |
| | | where Id = :quoteId]; |
| | | |
| | | if (decideQuoteList[0].Is_Decided__c) { |
| | | |
| | | Map<String,Integer> quoteProductSetMap = new Map<String,Integer>(); |
| | | List<DecideQuoteProductSet__c> decideList = new List<DecideQuoteProductSet__c>(); |
| | | |
| | | for (Integer i = 1; i <= 30; i++) { |
| | | |
| | | String setName = String.valueOf(decideQuoteList[0].get('SetName'+i+'__c')) ; |
| | | Integer setQty = Integer.valueOf(decideQuoteList[0].get('SetQty'+i+'__c')) ; |
| | | |
| | | if(setName != null && setName != ''){ |
| | | |
| | | quoteProductSetMap.put(setName, setQty); |
| | | } |
| | | } |
| | | system.debug('quoteProductSetMap__0522__' + quoteProductSetMap); |
| | | List<productSet__c> productSetList = [select Id,Name,Code__c |
| | | from productSet__c |
| | | where Name in : quoteProductSetMap.keyset()]; |
| | | |
| | | |
| | | List<QuoteLineItem> items = |
| | | [Select Id,Product2Id,Product2.Name,Product2.ProductCode,Product2.Product_ECCode__c,Quantity,Subtotal,Discount,TotalPrice,PricebookEntryId,UnitPrice,Description,Set__c,Custom_Price__c, |
| | | PricebookEntry.SalesPrice__c,PricebookEntry.SalesPriceA__c,PricebookEntry.SalesPriceB__c,PricebookEntry.SalesPriceC__c,Product2.ProductModels__c,PricebookEntry.Hidden_flag__c, |
| | | SingleProduct__c,SetName__c ,QuoteId |
| | | From QuoteLineItem where SetName__c in: quoteProductSetMap.keyset() and QuoteId = :quoteId Order by Id]; |
| | | List<Order> ordList = [Select id from Order where OpportunityId = : oppId and Status__c = 'Active']; |
| | | |
| | | system.debug('items11111_22222' + items); |
| | | Decimal unitPrice = 0; |
| | | Map<String,Decimal> unitPriceMap = new Map<String,Decimal>(); |
| | | Map<String,Decimal> discountMap = new Map<String,Decimal>(); |
| | | for (QuoteLineItem item :items) { |
| | | |
| | | if(unitPriceMap.containsKey(item.SetName__c)) { |
| | | unitPriceMap.put(item.SetName__c,unitPriceMap.get(item.SetName__c)+item.UnitPrice * item.Quantity); |
| | | } else { |
| | | unitPriceMap.put(item.SetName__c, item.UnitPrice * item.Quantity); |
| | | } |
| | | system.debug('Discount_1_1_1_' + item.Discount + '(-)' + item.SetName__c); |
| | | discountMap.put(item.SetName__c, item.Discount); |
| | | //unitPriceMap.put(item.SetName__c, ANY value) |
| | | } |
| | | system.debug('20190531____'+discountMap); |
| | | for (productSet__c productSet : productSetList) { |
| | | system.debug('20190531__1__'+discountMap); |
| | | DecideQuoteProductSet__c decideProductSet = new DecideQuoteProductSet__c(); |
| | | decideProductSet.DecideProductSetName__c = productSet.Name; |
| | | decideProductSet.DecideProductSetCode__c = productSet.Code__c; |
| | | decideProductSet.DecideProductSetCount__c = quoteProductSetMap.get(productSet.Name); |
| | | decideProductSet.DecideProductSet__c = productSet.Id; |
| | | decideProductSet.DecideOpportunity__c = decideQuoteList[0].OpportunityId; |
| | | decideProductSet.DecideQuote__c = quoteId; |
| | | decideProductSet.DecideProductSetUnivalence__c = unitPriceMap.get(productSet.Name) / quoteProductSetMap.get(productSet.Name); |
| | | decideProductSet.DecideProductSetTotalprice__c = unitPriceMap.get(productSet.Name); |
| | | //decideProductSet.DecideProductSetDiscount__c = 56; |
| | | decideProductSet.DecideProductSetDiscount__c = discountMap.get(productSet.Name); |
| | | if( ordList.size() > 0 ){ |
| | | |
| | | decideProductSet.DecideOrder__c = ordList[0].id; |
| | | } |
| | | decideList.add(decideProductSet); |
| | | } |
| | | system.debug('items11111_3333' + items); |
| | | if (decideList.size() > 0) { |
| | | |
| | | Insert decideList; |
| | | } |
| | | } |
| | | //else { |
| | | |
| | | // List<DecideQuoteProductSet__c> undecideList = new List<DecideQuoteProductSet__c>(); |
| | | // undecideList = [select Id from DecideQuoteProductSet__c where DecideQuote__c = :quoteId]; |
| | | |
| | | // if(undecideList.size() > 0 ){ |
| | | |
| | | // delete undecideList; |
| | | // } |
| | | //} |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | //给报价的相关套装字段进行赋值 |
| | | public void queSetNameSetQty(Map<String,Integer> productSetID_QuantityMap,Map<String,String> productSetCodeMap){ |
| | | |
| | | if (ProductSetCodeMap == null ){ |
| | | errorMap.clear(); |
| | | } |
| | | |
| | | List<productSet__c> ListProductSet = new List<productSet__c>(); |
| | | List<productSetItem__c> ListproductSetItem = new List<productSetItem__c>(); |
| | | List<String> productSetCodeList = new List<String>(); |
| | | |
| | | //获取"产品配套"的名称 |
| | | ListProductSet = [select Id,Name,Code__c |
| | | from productSet__c |
| | | where Id in :productSetID_QuantityMap.keyset() |
| | | order by Name]; |
| | | |
| | | //获取"产品配套明细"中产品的Id |
| | | ListproductSetItem = [select Id,Name,product__c,productSet__c, |
| | | product__r.Name,product__r.ProductCode, |
| | | product__r.Product_ECCode__c,productSet__r.Name, |
| | | Count__c,productSet__r.Code__c |
| | | from productSetItem__c |
| | | where productSet__c in :productSetID_QuantityMap.keyset() |
| | | order by productSet__r.Name]; |
| | | |
| | | system.debug('ListproductSetItem___++++__' + ListproductSetItem); |
| | | for (productSetItem__c productSetItem : ListproductSetItem) { |
| | | |
| | | productSetCodeList.add(productSetItem.product__r.ProductCode); |
| | | } |
| | | |
| | | |
| | | Map<String, Product_Search__c> psMap = new Map<String, Product_Search__c>(); // keyがProductCodeです。 |
| | | List<String> forSelect = new List<String>(); |
| | | |
| | | //查找"产品检索" |
| | | List<Product_Search__c> psList = [ |
| | | select Id, Name, ProductCode__c, Product_ECCode__c, ProductDescription__c, |
| | | ProductStatus__c, Product__c, ProductModels1__c |
| | | from Product_Search__c |
| | | where ProductCode__c in :productSetCodeList]; |
| | | |
| | | for (Product_Search__c ps : psList) { |
| | | |
| | | String pc = ps.ProductCode__c; |
| | | if (pc.startsWith('00000000000')) { |
| | | |
| | | pc = pc.substring(11); |
| | | psMap.put(pc, ps); |
| | | } |
| | | |
| | | psMap.put(ps.ProductCode__c, ps); |
| | | forSelect.add(ps.Product__c); |
| | | } |
| | | |
| | | //根据询价的价格手册的Id和产品Id查找价格手册条目 |
| | | List<PricebookEntry> pbeList = [ |
| | | select Id, Product2Id, ProductCode, Product2.Product_ECCode__c, Product2.Dummy__c, |
| | | CostPrice__c, SalesPrice__c, SalesPriceA__c, SalesPriceB__c, SalesPriceC__c, |
| | | Hidden_flag__c |
| | | from PricebookEntry |
| | | where Pricebook2Id = :pricebook2Id |
| | | and CurrencyIsoCode = :currencyIsoCode |
| | | and Product2.ManualHidden__c = false |
| | | and Product2Id in :forSelect]; |
| | | |
| | | Map<String, PricebookEntry> pbeMap = new Map<String, PricebookEntry>(); |
| | | String errProduct = ''; |
| | | |
| | | for (PricebookEntry pbe : pbeList) { |
| | | |
| | | String pc = pbe.ProductCode; |
| | | |
| | | if ((pbe.CostPrice__c == 0 && pbe.Product2.Dummy__c == false) || pbe.SalesPrice__c == 0) { |
| | | |
| | | errorflg = true; |
| | | errProduct += pbe.productCode + ','; |
| | | } else { |
| | | |
| | | if (pc.startsWith('00000000000')) { |
| | | |
| | | pc = pc.substring(11); |
| | | pbeMap.put(pc, pbe); |
| | | } |
| | | pbeMap.put(pbe.ProductCode, pbe); |
| | | } |
| | | } |
| | | |
| | | Integer no = 0 ; String productSetName; PricebookEntry pbe; |
| | | String setNames; |
| | | String errorProductSetName = ''; |
| | | |
| | | Map<String,QELine> existQELineMap = new Map<String,QELine>(); |
| | | List<QELine> singleProductSuitList = new List<QELine>(); |
| | | QELine qeline = new QELine(no); |
| | | |
| | | //将报价行项目中单品获取出来放入singleProductSuitList中 |
| | | for (QELine q :activities) { |
| | | |
| | | if ( String.isBlank(q.pageObject.Product2Id) == false && q.pageObject.SingleProduct__c == true) { |
| | | |
| | | singleProductSuitList.add(q); |
| | | } |
| | | |
| | | } |
| | | |
| | | activities = new List<QELine>(); |
| | | |
| | | //找出"产品配套"中 |
| | | Map<String,String> errorproductSetMap = new Map<String,String>(); |
| | | for (productSetItem__c productSetItem : ListproductSetItem) { |
| | | |
| | | Product_Search__c ps = psMap.get(productSetItem.product__r.ProductCode); |
| | | pbe = pbeMap.get(productSetItem.product__r.ProductCode); |
| | | |
| | | if (ps == null || pbe == null) { |
| | | |
| | | errorProductSetName = productSetItem.productSet__r.Name ; |
| | | errorproductSetMap.put(errorProductSetName, errorProductSetName); |
| | | errorflg = true; |
| | | |
| | | errProduct += productSetItem.product__r.ProductCode + ','; |
| | | errorMap.put(errorProductSetName, 'error['+errorProductSetName+']产品配套内含有产品价格信息不正确,该产品配套不能使用。产品:' + errProduct); |
| | | |
| | | continue; |
| | | } |
| | | |
| | | } |
| | | |
| | | Map<String,String> matchingProductSetItemMap = new Map<String,String>(); |
| | | Map<String,String> productsetNameMap = new Map<String,String>(); |
| | | Integer productSetNo = 1; |
| | | |
| | | //system.debug('errorMap____' + errorMap); |
| | | for (productSet__c productSet : ListProductSet) { |
| | | |
| | | if (errorMap.containsKey(productSet.Name)) { |
| | | |
| | | continue; |
| | | } |
| | | |
| | | if (!matchingProductSetItemMap.containsKey(productSet.Code__c)) { |
| | | |
| | | if (!errorproductSetMap.containsKey(productSet.Name)) { |
| | | |
| | | matchingProductSetItemMap.put(productSet.Code__c, 'set0' + productSetNo); |
| | | productsetNameMap.put(productSet.Code__c, productSet.Name); |
| | | productSetNo++; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | //system.debug('matchingProductSetItemMap_1111___' + matchingProductSetItemMap); |
| | | |
| | | |
| | | //system.debug('errorMap20190521__' + errorMap); |
| | | for (productSetItem__c productSetItem : ListproductSetItem) { |
| | | |
| | | errorProductSetName = productSetItem.productSet__r.Name ; |
| | | //system.debug('errorproductSetMap_2061_' + errorproductSetMap); |
| | | //system.debug('errorProductSetName_2062_' + errorProductSetName); |
| | | if (errorproductSetMap.containsKey(errorProductSetName)) { |
| | | |
| | | continue; |
| | | } |
| | | |
| | | Product_Search__c ps = psMap.get(productSetItem.product__r.ProductCode); |
| | | pbe = pbeMap.get(productSetItem.product__r.ProductCode); |
| | | //quantity1 = String.valueOf(productSetID_QuantityMap.get(productSetItem.productSet__c) * productSetItem.Count__c); |
| | | String quantity = String.valueOf(productSetID_QuantityMap.get(productSetItem.productSet__c) * productSetItem.Count__c); |
| | | //String quantity = String.valueOf(productSetItem.Count__c); |
| | | String productSetCode =productSetItem.productSet__r.Code__c; |
| | | String qty = '0'; |
| | | boolean isSingleProduct = false; |
| | | |
| | | if (ps == null || pbe == null) { |
| | | |
| | | errorflg = true; |
| | | errProduct += productSetItem.product__r.ProductCode + ','; |
| | | errorMap.put(errorProductSetName, errProduct); |
| | | |
| | | continue; |
| | | } |
| | | if (matchingProductSetItemMap.containsKey(productSetItem.productSet__r.Code__c)) { |
| | | |
| | | setNames = matchingProductSetItemMap.get(productSetItem.productSet__r.Code__c); |
| | | productSetName = productsetNameMap.get(productSetItem.productSet__r.Code__c); |
| | | } else { |
| | | continue; |
| | | } |
| | | |
| | | |
| | | if (productSetCodeMap != null && productSetCodeMap.containsKey(productSetCode)) { |
| | | qty = productSetCodeMap.get(productSetCode).split(';')[1]; |
| | | } |
| | | |
| | | qeline = new QELine(isService,no,setNames,ps.Name,ps.ProductCode__c,ps.Product_ECCode__c,ps.Product__c,pbe,quantity, qty, ps.ProductModels1__c,isSingleProduct,ps.ProductDescription__c,productSetName); |
| | | if (String.isNotBlank(qeline.pageObject.SetName__c)) { |
| | | quoteLineSetNameDiscountMap.put(qeline.pageObject.SetName__c,String.valueOf(qeline.pageObject.Discount)); |
| | | } |
| | | quoteLineSetNameDiscountJson(quoteLineSetNameDiscountMap); |
| | | //quoteLineSetNameDiscountJson = JSON.serializePretty(quoteLineSetNameDiscountMap); |
| | | activities.add(qeline); |
| | | no++; |
| | | //productSetNo++; |
| | | |
| | | } |
| | | |
| | | //将单品套装放在产品配套套装的下面 |
| | | singleNo = no; |
| | | |
| | | for (QELine q :singleProductSuitList) { |
| | | |
| | | q.lineNo = singleNo; |
| | | activities.add(q); |
| | | singleNo++; |
| | | } |
| | | |
| | | emptyData(); |
| | | |
| | | for (productSet__c productSet : ListProductSet) { |
| | | |
| | | if (errorMap.containsKey(productSet.Name)) { |
| | | continue; |
| | | } |
| | | |
| | | if (errorproductSetMap.containsKey(productSet.Name)) { |
| | | continue; |
| | | } |
| | | |
| | | Boolean flag = productSetID_QuantityMap.containsKey(productSet.Id); |
| | | Integer quantity ; |
| | | if (flag) { |
| | | |
| | | quantity = productSetID_QuantityMap.get(productSet.Id); |
| | | } |
| | | |
| | | if (flag && quo.SetName1__c == null ) { |
| | | |
| | | quo.SetName1__c = productSet.Name ; |
| | | quo.SetQty1__c = quantity; |
| | | } else if (flag && quo.SetName2__c == null){ |
| | | |
| | | quo.SetName2__c = productSet.Name ; |
| | | quo.SetQty2__c = quantity; |
| | | } else if (flag && quo.SetName3__c == null){ |
| | | |
| | | quo.SetName3__c = productSet.Name ; |
| | | quo.SetQty3__c = quantity; |
| | | } else if (flag && quo.SetName4__c == null){ |
| | | |
| | | quo.SetName4__c = productSet.Name ; |
| | | quo.SetQty4__c = quantity; |
| | | } else if (flag && quo.SetName5__c == null){ |
| | | |
| | | quo.SetName5__c = productSet.Name ; |
| | | quo.SetQty5__c = quantity; |
| | | } else if (flag && quo.SetName6__c == null){ |
| | | |
| | | quo.SetName6__c = productSet.Name ; |
| | | quo.SetQty6__c = quantity; |
| | | } else if (flag && quo.SetName7__c == null){ |
| | | |
| | | quo.SetName7__c = productSet.Name ; |
| | | quo.SetQty7__c = quantity; |
| | | } else if (flag && quo.SetName8__c == null){ |
| | | |
| | | quo.SetName8__c = productSet.Name ; |
| | | quo.SetQty8__c = quantity; |
| | | } else if (flag && quo.SetName9__c == null){ |
| | | |
| | | quo.SetName9__c = productSet.Name ; |
| | | quo.SetQty9__c = quantity; |
| | | } else if (flag && quo.SetName10__c == null){ |
| | | |
| | | quo.SetName10__c = productSet.Name ; |
| | | quo.SetQty10__c = quantity; |
| | | } else if (flag && quo.SetName11__c == null){ |
| | | |
| | | quo.SetName11__c = productSet.Name ; |
| | | quo.SetQty11__c = quantity; |
| | | } else if (flag && quo.SetName12__c == null){ |
| | | |
| | | quo.SetName12__c = productSet.Name ; |
| | | quo.SetQty12__c = quantity; |
| | | } else if (flag && quo.SetName13__c == null){ |
| | | |
| | | quo.SetName13__c = productSet.Name ; |
| | | quo.SetQty13__c = quantity; |
| | | } else if (flag && quo.SetName14__c == null){ |
| | | |
| | | quo.SetName14__c = productSet.Name ; |
| | | quo.SetQty14__c = quantity; |
| | | } else if (flag && quo.SetName15__c == null){ |
| | | |
| | | quo.SetName15__c = productSet.Name ; |
| | | quo.SetQty15__c = quantity; |
| | | } else if (flag && quo.SetName16__c == null){ |
| | | |
| | | quo.SetName16__c = productSet.Name ; |
| | | quo.SetQty16__c = quantity; |
| | | } else if (flag && quo.SetName17__c == null){ |
| | | |
| | | quo.SetName17__c = productSet.Name ; |
| | | quo.SetQty17__c = quantity; |
| | | } else if (flag && quo.SetName18__c == null){ |
| | | |
| | | quo.SetName18__c = productSet.Name ; |
| | | quo.SetQty18__c = quantity; |
| | | } else if (flag && quo.SetName19__c == null){ |
| | | |
| | | quo.SetName19__c = productSet.Name ; |
| | | quo.SetQty19__c = quantity; |
| | | } else if (flag && quo.SetName20__c == null){ |
| | | |
| | | quo.SetName20__c = productSet.Name ; |
| | | quo.SetQty20__c = quantity; |
| | | } else if (flag && quo.SetName21__c == null){ |
| | | |
| | | quo.SetName21__c = productSet.Name ; |
| | | quo.SetQty21__c = quantity; |
| | | } else if (flag && quo.SetName22__c == null){ |
| | | |
| | | quo.SetName22__c = productSet.Name ; |
| | | quo.SetQty22__c = quantity; |
| | | } else if (flag && quo.SetName23__c == null){ |
| | | |
| | | quo.SetName23__c = productSet.Name ; |
| | | quo.SetQty23__c = quantity; |
| | | } else if (flag && quo.SetName24__c == null){ |
| | | |
| | | quo.SetName24__c = productSet.Name ; |
| | | quo.SetQty24__c = quantity; |
| | | } else if (flag && quo.SetName25__c == null){ |
| | | |
| | | quo.SetName25__c = productSet.Name ; |
| | | quo.SetQty25__c = quantity; |
| | | } else if (flag && quo.SetName26__c == null){ |
| | | |
| | | quo.SetName26__c = productSet.Name ; |
| | | quo.SetQty26__c = quantity; |
| | | } else if (flag && quo.SetName27__c == null){ |
| | | |
| | | quo.SetName27__c = productSet.Name ; |
| | | quo.SetQty27__c = quantity; |
| | | } else if (flag && quo.SetName28__c == null){ |
| | | |
| | | quo.SetName28__c = productSet.Name ; |
| | | quo.SetQty28__c = quantity; |
| | | } else if (flag && quo.SetName29__c == null){ |
| | | |
| | | quo.SetName29__c = productSet.Name ; |
| | | quo.SetQty29__c = quantity; |
| | | } else if (flag && quo.SetName30__c == null){ |
| | | |
| | | quo.SetName30__c = productSet.Name ; |
| | | quo.SetQty30__c = quantity; |
| | | } |
| | | |
| | | |
| | | } |
| | | //system.debug('errorMap1231111_'+errorMap); |
| | | if (errorflg) { |
| | | errorMessage = ''; |
| | | for (String errorKey :errorMap.keySet()) { |
| | | errProduct = errorMap.get(errorKey).substring(0, errorMap.get(errorKey).length()-1); |
| | | errorMessage += errProduct + ';'; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | //清空页面套装名称和数量 |
| | | public void emptyData(){ |
| | | |
| | | quo.SetName1__c = null ; |
| | | quo.SetQty1__c = null; |
| | | quo.SetName2__c = null ; |
| | | quo.SetQty2__c = null; |
| | | quo.SetName3__c = null; |
| | | quo.SetQty3__c = null; |
| | | quo.SetName4__c = null ; |
| | | quo.SetQty4__c = null; |
| | | quo.SetName5__c = null ; |
| | | quo.SetQty5__c = null; |
| | | quo.SetName6__c = null ; |
| | | quo.SetQty6__c = null; |
| | | quo.SetName7__c = null; |
| | | quo.SetQty7__c = null; |
| | | quo.SetName8__c = null ; |
| | | quo.SetQty8__c = null; |
| | | quo.SetName9__c = null ; |
| | | quo.SetQty9__c = null; |
| | | quo.SetName10__c = null ; |
| | | quo.SetQty10__c = null; |
| | | quo.SetName11__c = null; |
| | | quo.SetQty11__c = null; |
| | | quo.SetName12__c = null ; |
| | | quo.SetQty12__c = null; |
| | | quo.SetName13__c = null ; |
| | | quo.SetQty13__c = null; |
| | | quo.SetName14__c = null ; |
| | | quo.SetQty14__c = null; |
| | | quo.SetName15__c = null ; |
| | | quo.SetQty15__c = null; |
| | | quo.SetName16__c = null ; |
| | | quo.SetQty16__c = null; |
| | | quo.SetName17__c = null ; |
| | | quo.SetQty17__c = null; |
| | | quo.SetName18__c = null ; |
| | | quo.SetQty18__c = null; |
| | | quo.SetName19__c = null ; |
| | | quo.SetQty19__c = null; |
| | | quo.SetName20__c = null ; |
| | | quo.SetQty20__c = null; |
| | | quo.SetName21__c = null ; |
| | | quo.SetQty21__c = null; |
| | | quo.SetName22__c = null ; |
| | | quo.SetQty22__c = null; |
| | | quo.SetName23__c = null ; |
| | | quo.SetQty23__c = null; |
| | | quo.SetName24__c = null ; |
| | | quo.SetQty24__c = null; |
| | | quo.SetName25__c = null ; |
| | | quo.SetQty25__c = null; |
| | | quo.SetName26__c = null ; |
| | | quo.SetQty26__c = null; |
| | | quo.SetName27__c = null ; |
| | | quo.SetQty27__c = null; |
| | | quo.SetName28__c = null ; |
| | | quo.SetQty28__c = null; |
| | | quo.SetName29__c = null ; |
| | | quo.SetQty29__c = null; |
| | | quo.SetName30__c = null ; |
| | | quo.SetQty30__c = null; |
| | | |
| | | } |
| | | public static Boolean IfspecialDealer(String oppDealerId){ |
| | | if ( String.isBlank(oppDealerId)) { |
| | | return false; |
| | | } |
| | | return StaticParameter.specialDealerMap.containsKey(oppDealerId.substring(0,15)); |
| | | } |
| | | |
| | | public void dummy2(){ |
| | | |
| | | } |
| | | |
| | | @TestVisible private void testI() { |
| | | integer i = 0; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | } |
| | | |
| | | |
| | | } |