@isTest public class QuoteTrialControllerTest { private static Product2 product = null; private static Pricebook2 pricebook = null; private static Opportunity opprtunity = null; static final String RC_HOSPITAL = '病院'; static final String RC_OPP = '引合'; static final String RC_SENRYAKUKASHITSUBUNRUI = '戦略科室分類 消化科'; static final String RC_BYOUIN = '病院'; static final String RC_SHINRYOUKA = '診療科 その他'; static final String RC_HANBAOITEN = '販売店'; static final String RC_KEIYAKU = '契約'; static { product = new Product2( Name = 'テスト商品'); insert product; system.debug('##product.Id=[' + product.Id + ']' ); pricebook = ControllerUtil.getStandardPricebook(); system.debug('##pricebook.Id=[' + pricebook.Id + ']' ); } private static PricebookEntry buildPB( String input) { PricebookEntry entry = new PricebookEntry( Pricebook2Id = pricebook.Id, Product2Id = product.Id); entry.UnitPrice = 0; entry.IsActive = true; entry.UseStandardPrice = false; entry.CurrencyIsoCode = input; insert entry; return entry; } public static Opportunity buildOppInstance( String inputTrade, String CurrencyIsoCode) { Opportunity target = new Opportunity( Name = 'aiueo', StageName = 'contact', CloseDate = Date.today()); target.Trade__c = inputTrade; target.owner_not_automatically_update__c = true; target.CurrencyIsoCode = CurrencyIsoCode; target.Wholesale_Price__c = 9000; return target; } private static QuoteLineItem insertQuoteLineItem( Quote input, Pricebookentry entry) { QuoteLineItem target = new QuoteLineItem(); target.Name__c = 'テスト商品'; target.QuoteId = input.Id; target.Quantity = 1; target.Cost_Subtotal__c = 0; target.Cost__c = 200; // target.TotalPrice = 100; target.UnitPrice = 10; target.PricebookEntryId = entry.Id; insert target; return target; } private static String quoteNo = 'textQutote01'; public static String trade = '内貿'; public static String CurrencyIso = 'CNY'; private static Boolean isUnitPrice = true; private static Boolean isOfferAmount = true; private static Boolean isTotalPrice = true; private static Boolean isDiscountRate = true; private static Boolean isDiscountAmount = true; private static Boolean isTradingPrice = true; private static Boolean isContractDetail = true; private static Date offerExpireDate = Date.today(); private static String clientName = 'test client'; private static String offerComment = 'test comment'; private static Date offerPrintDate = Date.today(); private static String agentName = 'test agent name'; public class GeDatass { public String Id;//产品编码(产品代码) public String JxsType; public String Categoryc; public String GuaranteeDiscountcInput; public String NormalDiscountcInput; public String PromotionNocEqual; public String typess; public String PromotionNoc; public String Name; public String itemIdStr; public String IsTempItems; public String itemCounts; public String ParamIdStr; public String GuaranteeDiscountc; public String NormalDiscountc; public String Descriptionc; public Boolean ifContainNodc; public Boolean ifFixc; public Double PriceCNYc; public Double Total; public Double HeTongTotal; public Boolean ifNecessaryc; public Decimal maxCounts; public Double ListPriceTotalc; public Double sumNod; public String CompareId; public String Trade; public String sumNoDiscountTotal; public Double GuaranteeDiscountHMoneyc; public Double NormalDiscountHMoneyc; } public class Discount { public String Id;//产品编码(产品代码) public String AssetModelNoc; public String Namec; public Integer Quantity; public String IGuranteeTypecd; public String PromotionNoc; public String Name; public Double ListPrice; public Double AgencyUnitPricec; public Double AgencySubtotalc; public Double NoDiscountTotalc; public String ParamIdStr; public String TypeName; public String UUID; public String ismatch; public String PromotionId; public Integer UseCountc; public String Product2c; public Double ServicePricec; public Boolean ifFixc; public Boolean ifNecessaryc; public String CompareId; public Double DiscountcInput; public String Categoryc; public String NormalDiscountcInput; public String GuaranteeDiscountcInput; public Boolean multiYearWarrantyc; } static testMethod void TestInit01() { String userId = UserInfo.getUserId(); User u1 = [SELECT Id, Quote_Correct__c, Quote_Special_Operation__c, Cost_Referable__c FROM User WHERE Id = :userId]; u1.Quote_Correct__c = false; u1.Quote_Special_Operation__c = true; u1.Cost_Referable__c = true; update u1; // PricebookEntry PricebookEntry entryUSD = buildPB( 'USD'); PricebookEntry entryCNY = buildPB( 'CNY'); // 引合作成 Opportunity opp = buildOppInstance( trade, CurrencyIso); opp.Trade__c = trade; opp.owner_not_automatically_update__c = true; opp.Sales_Root__c = 'AAA'; opp.Pricebook2Id = pricebook.id; insert opp; //見積データ作成 Quote quote = new Quote( Name = 'テスト見積'); quote.OpportunityId = opp.Id; quote.Pricebook2Id = pricebook.id; quote.Quote_No__c = quoteNo; quote.Unit_Price__c = isUnitPrice; quote.Offer_Amount__c = isOfferAmount; quote.TOTAL__c = isTotalPrice; quote.Discount__c = isDiscountRate; quote.Pricing__c = isDiscountAmount; quote.Preferential_Trading_Price__c = isTradingPrice; quote.Contract__c = isContractDetail; quote.Quote_Comment__c = offerComment; insert quote; quote = [SELECT Id, OpportunityId, Quote_no__c, Quote_No_Auto__c, CurrencyIsoCode FROM Quote WHERE Id = :quote.id]; System.assertEquals( CurrencyIso, quote.CurrencyIsoCode); // 見積品目作成 QuoteLineItem item01 = insertQuoteLineItem( quote, entryCNY); QuoteLineItem item02 = insertQuoteLineItem( quote, entryCNY); //创建促销方案 / 记录类型=促销方案 PromotionHead__c head1 = new PromotionHead__c(); head1.Name = '202'; head1.PromotionNo__c = '202'; head1.Category__c = '固定价格'; head1.if_Contain_Nod__c = true; head1.RecordTypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'PromotionHead__c' and DeveloperName = 'Promotion'].id; head1.DateFrom__c = Date.today().addDays(-1); head1.DateTo__c = Date.today().addDays(1); head1.Description__c = '(202)153P-GI-001-05 奥辉(AXEON)-M1层以下 胃肠(CF-LV1I)标套(MX192适用)'; head1.Memo__c = 'CV-V1(A)/GIF-LV1/CF-LV1I/MX192彩色液晶显示器/TC-A4/MU-1/MB-155'; head1.Price_CNY__c = 254000.00; head1.Price_USD__c = 20000.00; insert head1; //创建促销方案 / 记录类型=一般产品 PromotionHead__c head2 = new PromotionHead__c(); head2.Name = '203'; head2.PromotionNo__c = '203'; head2.Category__c = '固定价格'; head2.if_Contain_Nod__c = true; head2.RecordTypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'PromotionHead__c' and DeveloperName = 'NormalProduct'].id; head2.DateFrom__c = Date.today().addDays(-1); head2.DateTo__c = Date.today().addDays(1); head2.Description__c = '(202)153P-GI-001-05 奥辉(AXEON)-M1层以下213-LV1I)标套(MX192适用)'; head2.Memo__c = 'CV-V1(A)/GIF-LV1/CF-LV1I/MX192彩色液晶显示器/TC-A4/前21 -155'; head2.Price_CNY__c = 254000.00; head2.Price_USD__c = 20000.00; insert head2; //创建促销方案 / 记录类型=特约固定 PromotionHead__c head3 = new PromotionHead__c(); head3.Name = '203'; head3.PromotionNo__c = '203'; head3.Category__c = '固定价格'; head3.if_Contain_Nod__c = true; head3.RecordTypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'PromotionHead__c' and DeveloperName = 'Authorizer'].id; head3.DateFrom__c = Date.today().addDays(-1); head3.DateTo__c = Date.today().addDays(1); head3.Description__c = '(202)153P-GI-001-05 奥辉(AXEON)-M1层以下213-LV1I)标套(MX192适用)'; head3.Memo__c = 'CV-V1(A)/GIF-LV1/CF-LV1I/MX192彩色液晶显示器/TC-A4/前21 -155'; head3.Price_CNY__c = 254000.00; head3.Price_USD__c = 20000.00; insert head3; //创建促销方案产品 PromotionProduct__c pro1 = new PromotionProduct__c(); pro1.Name = 'TEST1'; pro1.PromotionHead__c = head1.Id; // pro1.Product__c = product.Id; pro1.Quantity__c = 2; insert pro1; //创建 测试_报价促销方案 PromotionSales__c sales1 = new PromotionSales__c(); sales1.Name = 'test1'; sales1.PromotionNo__c = '203'; sales1.if_Contain_Nod__c = true; // sales1.ParamIdStr__c = quote.Id; insert sales1; //创建 测试_报价促销产品 PromotionSalesProducts__c salesPro = new PromotionSalesProducts__c(); // salesPro.ParamIdStr__c = quote.Id; insert salesPro; //保存所选方案,价格政策和折扣政策,JsonStr 是要保存的数据的转成的json字符串,ParamIdStr 保存方案表的id List testList = new List(); GeDatass data = new GeDatass(); data.Id = head1.Id; data.JxsType = 'testType'; data.Categoryc = 'testcategory'; data.GuaranteeDiscountcInput = 'testinput'; data.NormalDiscountcInput = 'testnormal'; data.PromotionNocEqual ='testequal'; data.typess = 'testtypess'; data.PromotionNoc = 'testpromotion'; data.Name = '202'; data.itemIdStr = 'test12'; data.IsTempItems = 'testtemp'; data.itemCounts = 'testitemcounts'; data.ParamIdStr = quote.Id; data.GuaranteeDiscountc = 'testguaranteediscount'; data.NormalDiscountc = 'testnormal'; data.Descriptionc = 'testdesc'; data.ifContainNodc = true; data.ifFixc = true; data.PriceCNYc = 12.21; data.Total = 22.22; data.HeTongTotal = 222.22; testList.add(data); String jsonStr = JSON.serialize(testList); //保存所选产品和未选产品,JsonStr 是要保存的数据的转成的json字符串,ParamIdStrs 保存产品表的id List disList = new List(); Discount dis = new Discount(); dis.Id = 'a4S1m0000004r4AEAQ'; dis.AssetModelNoc = 'testno'; dis.Namec = 'testname'; dis.Quantity = 12; dis.IGuranteeTypecd = 'testtype'; dis.PromotionNoc = 'testpromotion'; dis.Name = 'testname'; dis.ListPrice = 12.22; dis.AgencyUnitPricec = 14.44; dis.AgencySubtotalc = 23.32; dis.NoDiscountTotalc = 99.32; dis.ParamIdStr = quote.Id; dis.TypeName = 'testtypename'; dis.UUID = '12achuvqwh'; dis.ismatch = 'test'; dis.PromotionId = head1.Id; dis.multiYearWarrantyc = true; disList.add(dis); String jsonStr1 = JSON.serialize(disList); //几个政策Id集合 List jiaGe=new List(); jiaGe.add('321654'); jiaGe.add('234234'); jiaGe.add('231636'); //1.获取报价数据 QuoteTrialController.GetQuoteData(quote.Id); //2.获取待选择产品 QuoteTrialController.GetPromotionDefalut(quote.Id); //3.获取促销方案 QuoteTrialController.GetPromotionPromotionSearch(1,1,'','',''); //4.获取固定资产 QuoteTrialController.GetNormalProductSearch(1,1,'','',''); //5.获取特约折扣 QuoteTrialController.GetAuthorizerSearch(1,1,'','','',''); //6.产品对应的Item QuoteTrialController.GetSearchProductById(head1.Id); //7.获取所有PromotionSales__c表中的数据 QuoteTrialController.selectAllDataProduct(quote.Id); //8.获取所有PromotionSalesProducts__c表中的数据 QuoteTrialController.selectAllDataDiscount(quote.Id); //9.保存所选方案,价格政策和折扣政策,JsonStr 是要保存的数据的转成的json字符串,ParamIdStr 保存方案表的id Double ContractPrice=12.12; Double DealerFinalPriceFc=100000.00; Double Agent1Agent2Pricec=10000.0; Double Agent1Agent2Pricec1=null; QuoteTrialController.saveAllDataProduct(jsonStr,(String)quote.Id,jsonStr1,(String)item01.QuoteId,'販売店',ContractPrice,(String)quote.OpportunityId,DealerFinalPriceFc,Agent1Agent2Pricec); QuoteTrialController.saveAllDataProduct(jsonStr,(String)quote.Id,jsonStr1,(String)item01.QuoteId,'販売店',ContractPrice,(String)quote.OpportunityId,DealerFinalPriceFc,Agent1Agent2Pricec1); QuoteTrialController.saveAllDataProduct(jsonStr,(String)quote.Id,jsonStr1,(String)item01.QuoteId,'OCM直接販売',ContractPrice,(String)quote.OpportunityId,DealerFinalPriceFc,Agent1Agent2Pricec); QuoteTrialController.selectUniqueKey((String)quote.Id); //10.判断所处数据是否为空 QuoteTrialController.GetParamToId('123'); QuoteTrialController.GetParamToId(''); //11.测试清空表中数据,非正式环境 QuoteTrialController.deleteAlltable(); //12.保存所选产品和未选产品,JsonStr是要保存的数据的转成的json字符串,ParamIdStrs 保存产品表的id // QuoteTrialController.saveAllDataDiscount(jsonStr1,quote.Id); //13.测试清空表中数据,非正式环境 QuoteTrialController.deleteAllDiscounttable(); //14.获取经销商姓名 QuoteTrialController.GetAgencyRName(); //15.根据保存的Id查询 Header 表的数据 QuoteTrialController.selectUpdateFiexedpriceData(jiaGe); QuoteTrialController.selectUpdateQuoteLineItemData(jiaGe); } }