@isTest
private class ConsumableSampleApplyControllerTest {
    
    //新建报价委托，填入单品一个，set品一个，保存
    @isTest
    static void test01() {
        User user = new User(Test_staff__c = true);
        user.LastName = '_サンブリッジ';
        user.FirstName = 'う';
        user.Alias = 'う';
        user.Email = 'olympustest03@sunbridge.com';
        user.Username = 'olympustest03@sunbridge.com';
        user.CommunityNickname = 'う';
        user.IsActive = true;
        user.EmailEncodingKey = 'ISO-2022-JP';
        user.TimeZoneSidKey = 'Asia/Tokyo';
        user.LocaleSidKey = 'ja_JP';
        user.LanguageLocaleKey = 'ja';
        user.ProfileId = System.Label.ProfileId_SystemAdmin;
        user.Job_Category__c = '销售推广';
        user.Province__c = '上海市';
        user.Use_Start_Date__c = Date.today().addMonths(-6);
        insert user;
        
        // 病院を作る
        Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'test hospital';
        insert hospital;
        
        // 戦略科室を得る
        List<Account> strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_GI'];
        
        // 診療科を作る
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_GI'].id;
        dep.Name = 'test dep';
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        insert dep;
        
        Contact con = new Contact(RecordTypeId='01210000000Qtky');
        con.LastName = 'test1';
        con.FirstName='ZZ';
        con.AccountId = dep.Id;
        insert con;
        
        Product2 product1 = new Product2();
        product1.Name = '00107:高频电极，按钮形，4Fr.，软性';
        product1.SFDA_Status__c = '有効';
        product1.Manual_Entry__c = false;
        product1.Asset_Model_No__c = '00107';
        product1.ProductCode = '00107';
        product1.Intra_Trade_List_RMB_Date1__c=Date.today().addDays(-1);
        product1.Intra_Trade_List_RMB_Date2__c=Date.today().addDays(-1);
        product1.Intra_Trade_List_RMB_End_Date1__c=Date.today().addDays(1);
        product1.Intra_Trade_List_RMB_End_Date2__c=Date.today().addDays(1);
        product1.Intra_Trade_List_RMB_1__c=2150;
        product1.Intra_Trade_List_RMB_2__c=2150;
        product1.Intra_Trade_Cost_RMB_Date1__c=Date.today().addDays(-1);
        product1.Intra_Trade_Cost_RMB_Date2__c=Date.today().addDays(-1);
        product1.Intra_Trade_Cost_RMB_End_Date1__c=Date.today().addDays(1);
        product1.Intra_Trade_Cost_RMB_End_Date2__c=Date.today().addDays(1);
        product1.Intra_Trade_Cost_RMB_1__c=10;
        product1.Intra_Trade_Cost_RMB_2__c=10;
        
        Product2 product2 = new Product2();
        product2.Name = '00103:软管接头';
        product2.SFDA_Status__c = '有効';
        product2.Manual_Entry__c = false;
        product2.Asset_Model_No__c = '00103';
        product2.ProductCode = '00103';
        product2.Intra_Trade_List_RMB_Date1__c=Date.today().addDays(-1);
        product2.Intra_Trade_List_RMB_Date2__c=Date.today().addDays(-1);
        product2.Intra_Trade_List_RMB_End_Date1__c=Date.today().addDays(1);
        product2.Intra_Trade_List_RMB_End_Date2__c=Date.today().addDays(1);
        product2.Intra_Trade_List_RMB_1__c=170;
        product2.Intra_Trade_List_RMB_2__c=170;
        product2.Intra_Trade_Cost_RMB_Date1__c=Date.today().addDays(-1);
        product2.Intra_Trade_Cost_RMB_Date2__c=Date.today().addDays(-1);
        product2.Intra_Trade_Cost_RMB_End_Date1__c=Date.today().addDays(1);
        product2.Intra_Trade_Cost_RMB_End_Date2__c=Date.today().addDays(1);
        product2.Intra_Trade_Cost_RMB_1__c=10;
        product2.Intra_Trade_Cost_RMB_2__c=10;
        
        Product2 product3 = new Product2();
        product3.Name = '00102.1:旋阀，免维护';
        product3.SFDA_Status__c = '有効';
        product3.Manual_Entry__c = false;
        product3.Asset_Model_No__c = '00102.1';
        product3.ProductCode = '00102.1';
        product3.Intra_Trade_List_RMB_Date1__c=Date.today().addDays(-1);
        product3.Intra_Trade_List_RMB_Date2__c=Date.today().addDays(-1);
        product3.Intra_Trade_List_RMB_End_Date1__c=Date.today().addDays(1);
        product3.Intra_Trade_List_RMB_End_Date2__c=Date.today().addDays(1);
        product3.Intra_Trade_List_RMB_1__c=920;
        product3.Intra_Trade_List_RMB_2__c=920;
        product3.Intra_Trade_Cost_RMB_Date1__c=Date.today().addDays(-1);
        product3.Intra_Trade_Cost_RMB_Date2__c=Date.today().addDays(-1);
        product3.Intra_Trade_Cost_RMB_End_Date1__c=Date.today().addDays(1);
        product3.Intra_Trade_Cost_RMB_End_Date2__c=Date.today().addDays(1);
        product3.Intra_Trade_Cost_RMB_1__c=10;
        product3.Intra_Trade_Cost_RMB_2__c=10;
        
        insert new Product2[] {product1,product2,product3};
        
        Pricebook2 pricebook = ControllerUtil.getStandardPricebook();
        
        PricebookEntry entry1 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product1.Id);
        entry1.UnitPrice = 0;
        entry1.IsActive = true;
        entry1.UseStandardPrice = false;
        entry1.CurrencyIsoCode = 'CNY';
        
        PricebookEntry entry2 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product2.Id);
        entry2.UnitPrice = 0;
        entry2.IsActive = true;
        entry2.UseStandardPrice = false;
        entry2.CurrencyIsoCode = 'CNY';
        
        PricebookEntry entry3 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product3.Id);
        entry3.UnitPrice = 0;
        entry3.IsActive = true;
        entry3.UseStandardPrice = false;
        entry3.CurrencyIsoCode = 'CNY';
        
        insert new PricebookEntry[] {entry1,entry2,entry3};
        
        Date now = Date.today();
        
        PageReference page = new PageReference('/apex/ConsumableSampleApply');
        System.Test.setCurrentPage(page);
        
        ConsumableSampleApplyController controller = new ConsumableSampleApplyController();
        //初始化
        controller.init();
        
        System.assertEquals(null, controller.quo.Contact__c);
        System.assertEquals(null, controller.quo.Account__c);
        System.assertEquals(null, controller.quo.Expect_Arrive_Date__c);
        System.assertEquals(null, controller.quo.Purpose__c);
        System.assertEquals(null, controller.quo.Reason__c);
        System.assertEquals('草案中', controller.quo.Process_Status__c);
        System.assertEquals('CNY', controller.quo.CurrencyIsoCode);
        System.assertEquals(null, controller.activities[0].Asset_Model);
        
        controller.quo.Contact__c = con.Id;
        controller.quo.Expect_Arrive_Date__c = now;
        controller.quo.Purpose__c = 'test purpose';
        controller.quo.Reason__c = 'test note';
        
        controller.activities[0].lineNo = 0;
        controller.activities[0].Asset_Model = '00107';
        controller.activities[0].pageObject.SFDA_Status__c = '有効';
        controller.activities[0].pageObject.Name__c = '00107:高频电极，按钮形，4Fr.，软性';
        controller.activities[0].pageObject.Product2__c = product1.Id;
        controller.activities[0].pageObject.Quantity__c = 1;
        controller.activities[0].ListPrice_Page = 2150;
        
        controller.Save();
        
        ConsumableSample__c[] irais = [select Id, Name, Contact__c, Account__c, Expect_Arrive_Date__c, Purpose__c, Process_Status__c, Reason__c from ConsumableSample__c where Contact__c = :con.Id];
        ConsumableSampleLineItem__c[] items = [select Id, Asset_Model_No__c, SFDA_Status__c, Name__c,Quantity__c, ListPrice__c, ProductCode__c,Product2__c from ConsumableSampleLineItem__c where ConsumableSample__c = :irais[0].Id order by Item_Order__c];
        
        System.assertEquals(con.Id, irais[0].Contact__c);
        System.assertEquals(dep.Id, irais[0].Account__c);
        System.assertEquals(now, irais[0].Expect_Arrive_Date__c);
        System.assertEquals('test purpose', irais[0].Purpose__c);
        System.assertEquals('草案中', irais[0].Process_Status__c);
        System.assertEquals('test note', irais[0].Reason__c);
        
        System.assertEquals('00107', items[0].Asset_Model_No__c);
        System.assertEquals('有効', items[0].SFDA_Status__c);
        System.assertEquals('00107:高频电极，按钮形，4Fr.，软性', items[0].Name__c);
        System.assertEquals(1, items[0].Quantity__c);
        System.assertEquals(2150, items[0].ListPrice__c);
        System.assertEquals('00107', items[0].ProductCode__c);
        System.assertEquals(product1.Id, items[0].Product2__c);
        
        controller.approvalBtn();
    }
    
    //既存报价委托，有一条既存明细，修改既存明细的数量，添加set品一个，保存
    @isTest
    static void test02() {
        // 病院を作る
        Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'test hospital';
        insert hospital;
        
        // 戦略科室を得る
        List<Account> strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_GI'];
        
        // 診療科を作る
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_GI'].id;
        dep.Name = 'test dep';
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        insert dep;
        
        Contact con = new Contact(RecordTypeId='01210000000Qtky');
        con.LastName = 'test1';
        con.FirstName='ZZ';
        con.AccountId = dep.Id;
        insert con;
        
        Product2 product1 = new Product2();
        product1.Name = '00107:高频电极，按钮形，4Fr.，软性';
        product1.SFDA_Status__c = '有効';
        product1.Manual_Entry__c = false;
        product1.Asset_Model_No__c = '00107';
        product1.ProductCode = '00107';
        product1.Foreign_Trade_List_US_Date1__c=Date.today().addDays(-1);
        product1.Foreign_Trade_List_US_Date2__c=Date.today().addDays(-1);
        product1.Foreign_Trade_List_US_End_Date1__c=Date.today().addDays(1);
        product1.Foreign_Trade_List_US_End_Date2__c=Date.today().addDays(1);
        product1.Foreign_Trade_List_US_1__c=2150;
        product1.Foreign_Trade_List_US_2__c=2150;
        product1.Foreign_Trade_Cost_US_Date1__c=Date.today().addDays(-1);
        product1.Foreign_Trade_Cost_US_Date2__c=Date.today().addDays(-1);
        product1.Foreign_Trade_Cost_US_End_Date1__c=Date.today().addDays(1);
        product1.Foreign_Trade_Cost_US_End_Date2__c=Date.today().addDays(1);
        product1.Foreign_Trade_Cost_US_1__c=10;
        product1.Foreign_Trade_Cost_US_2__c=10;
        
        Product2 product2 = new Product2();
        product2.Name = '00103:软管接头';
        product2.SFDA_Status__c = '有効';
        product2.Manual_Entry__c = false;
        product2.Asset_Model_No__c = '00103';
        product2.ProductCode = '00103';
        product2.Foreign_Trade_List_US_Date1__c=Date.today().addDays(-1);
        product2.Foreign_Trade_List_US_Date2__c=Date.today().addDays(-1);
        product2.Foreign_Trade_List_US_End_Date1__c=Date.today().addDays(1);
        product2.Foreign_Trade_List_US_End_Date2__c=Date.today().addDays(1);
        product2.Foreign_Trade_List_US_1__c=170;
        product2.Foreign_Trade_List_US_2__c=170;
        product2.Foreign_Trade_Cost_US_Date1__c=Date.today().addDays(-1);
        product2.Foreign_Trade_Cost_US_Date2__c=Date.today().addDays(-1);
        product2.Foreign_Trade_Cost_US_End_Date1__c=Date.today().addDays(1);
        product2.Foreign_Trade_Cost_US_End_Date2__c=Date.today().addDays(1);
        product2.Foreign_Trade_Cost_US_1__c=10;
        product2.Foreign_Trade_Cost_US_2__c=10;
        
        Product2 product3 = new Product2();
        product3.Name = '00102.1:旋阀，免维护';
        product3.SFDA_Status__c = '有効';
        product3.Manual_Entry__c = false;
        product3.Asset_Model_No__c = '00102.1';
        product3.ProductCode = '00102.1';
        product3.Foreign_Trade_List_US_Date1__c=Date.today().addDays(-1);
        product3.Foreign_Trade_List_US_Date2__c=Date.today().addDays(-1);
        product3.Foreign_Trade_List_US_End_Date1__c=Date.today().addDays(1);
        product3.Foreign_Trade_List_US_End_Date2__c=Date.today().addDays(1);
        product3.Foreign_Trade_List_US_1__c=920;
        product3.Foreign_Trade_List_US_2__c=920;
        product3.Foreign_Trade_Cost_US_Date1__c=Date.today().addDays(-1);
        product3.Foreign_Trade_Cost_US_Date2__c=Date.today().addDays(-1);
        product3.Foreign_Trade_Cost_US_End_Date1__c=Date.today().addDays(1);
        product3.Foreign_Trade_Cost_US_End_Date2__c=Date.today().addDays(1);
        product3.Foreign_Trade_Cost_US_1__c=10;
        product3.Foreign_Trade_Cost_US_2__c=10;
        
        insert new Product2[] {product1,product2,product3};
        
        Pricebook2 pricebook = ControllerUtil.getStandardPricebook();
        
        PricebookEntry entry1 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product1.Id);
        entry1.UnitPrice = 0;
        entry1.IsActive = true;
        entry1.UseStandardPrice = false;
        entry1.CurrencyIsoCode = 'USD';
        
        PricebookEntry entry2 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product2.Id);
        entry2.UnitPrice = 0;
        entry2.IsActive = true;
        entry2.UseStandardPrice = false;
        entry2.CurrencyIsoCode = 'USD';
        
        PricebookEntry entry3 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product3.Id);
        entry3.UnitPrice = 0;
        entry3.IsActive = true;
        entry3.UseStandardPrice = false;
        entry3.CurrencyIsoCode = 'USD';
        
        insert new PricebookEntry[] {entry1,entry2,entry3};
        
        ConsumableSample__c irai = new ConsumableSample__c();
        irai.Contact__c = con.Id;
        irai.Account__c = dep.Id;
        irai.Process_Status__c = '草案中';
        irai.Expect_Arrive_Date__c = Date.today();
        irai.Purpose__c = 'test purpose';
        irai.Reason__c = 'test note';
        irai.CurrencyIsoCode = 'USD';
        insert irai;
        
        ConsumableSampleLineItem__c item1 = new ConsumableSampleLineItem__c();
        item1.SFDA_Status__c = '有効';
        item1.Name__c = '00107:高频电极，按钮形，4Fr.，软性';
        item1.Quantity__c = 1;
        item1.ListPrice__c = 2150;
        item1.Product2__c = product1.Id;
        item1.ConsumableSample__c = irai.Id;
        item1.Item_Order__c = 1;
        insert item1;
        
        PageReference page = new PageReference('/apex/ConsumableSampleApply?id=' + irai.Id);
        System.Test.setCurrentPage(page);
        
        ConsumableSampleApplyController controller = new ConsumableSampleApplyController();
        //初始化
        controller.init();
        
        System.assertEquals(con.Id, controller.quo.Contact__c);
        System.assertEquals('test purpose', controller.quo.Purpose__c);
        System.assertEquals('test note', controller.quo.Reason__c);
        
        System.assertEquals(0, controller.activities[0].lineNo);
        System.assertEquals('00107', controller.activities[0].Asset_Model);
        System.assertEquals('有効', controller.activities[0].pageObject.SFDA_Status__c);
        System.assertEquals('00107:高频电极，按钮形，4Fr.，软性', controller.activities[0].pageObject.Name__c);
        System.assertEquals(1, controller.activities[0].pageObject.Quantity__c);
        System.assertEquals(2150, controller.activities[0].ListPrice_Page);
        System.assertEquals(product1.Id, controller.activities[0].pageObject.Product2__c);
        
        controller.quo.Purpose__c = 'test purpose1';
        controller.activities[0].pageObject.Quantity__c = 2;
        
        controller.OppReflection();
        
        ConsumableSample__c[] irais = [select Id, Name, Contact__c, Account__c, Expect_Arrive_Date__c, Purpose__c, Process_Status__c, Reason__c from ConsumableSample__c where Contact__c = :con.Id];
        ConsumableSampleLineItem__c[] items = [select Id, Asset_Model_No__c, SFDA_Status__c, Name__c,Quantity__c, ListPrice__c, ProductCode__c,Product2__c from ConsumableSampleLineItem__c where ConsumableSample__c = :irais[0].Id order by Item_Order__c];
        
        system.assertEquals('test purpose1', irais[0].Purpose__c);
        
        system.assertEquals('00107', items[0].Asset_Model_No__c);
        system.assertEquals('有効', items[0].SFDA_Status__c);
        system.assertEquals('00107:高频电极，按钮形，4Fr.，软性', items[0].Name__c);
        system.assertEquals(2, items[0].Quantity__c);
        system.assertEquals(2150, items[0].ListPrice__c);
        system.assertEquals('00107', items[0].ProductCode__c);
        system.assertEquals(product1.Id, items[0].Product2__c);
    }
    
    //再报价
    static testMethod void test03() {
        User user = new User(Test_staff__c = true);
        user.LastName = '_サンブリッジ';
        user.FirstName = 'う';
        user.Alias = 'う';
        user.Email = 'olympustest03@sunbridge.com';
        user.Username = 'olympustest03@sunbridge.com';
        user.CommunityNickname = 'う';
        user.IsActive = true;
        user.EmailEncodingKey = 'ISO-2022-JP';
        user.TimeZoneSidKey = 'Asia/Tokyo';
        user.LocaleSidKey = 'ja_JP';
        user.LanguageLocaleKey = 'ja';
        user.ProfileId = System.Label.ProfileId_SystemAdmin;
        user.Job_Category__c = '销售推广';
        user.Province__c = '上海市';
        user.Use_Start_Date__c = Date.today().addMonths(-6);
        insert user;
        
        // 病院を作る
        Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'test hospital';
        insert hospital;
        
        // 戦略科室を得る
        List<Account> strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_GI'];
        
        // 診療科を作る
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_GI'].id;
        dep.Name = 'test dep';
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        insert dep;
        
        Contact con = new Contact(RecordTypeId='01210000000Qtky');
        con.LastName = 'test1';
        con.FirstName='ZZ';
        con.AccountId = dep.Id;
        insert con;
        
        Product2 product1 = new Product2();
        product1.Name = '00107:高频电极，按钮形，4Fr.，软性';
        product1.SFDA_Status__c = '有効';
        product1.Manual_Entry__c = false;
        product1.Asset_Model_No__c = '00107';
        product1.ProductCode = '00107';
        product1.Intra_Trade_List_RMB_Date1__c=Date.today().addDays(-1);
        product1.Intra_Trade_List_RMB_Date2__c=Date.today().addDays(-1);
        product1.Intra_Trade_List_RMB_End_Date1__c=Date.today().addDays(1);
        product1.Intra_Trade_List_RMB_End_Date2__c=Date.today().addDays(1);
        product1.Intra_Trade_List_RMB_1__c=2150;
        product1.Intra_Trade_List_RMB_2__c=2150;
        product1.Intra_Trade_Cost_RMB_Date1__c=Date.today().addDays(-1);
        product1.Intra_Trade_Cost_RMB_Date2__c=Date.today().addDays(-1);
        product1.Intra_Trade_Cost_RMB_End_Date1__c=Date.today().addDays(1);
        product1.Intra_Trade_Cost_RMB_End_Date2__c=Date.today().addDays(1);
        product1.Intra_Trade_Cost_RMB_1__c=10;
        product1.Intra_Trade_Cost_RMB_2__c=10;
        
        Product2 product2 = new Product2();
        product2.Name = '00103:软管接头';
        product2.SFDA_Status__c = '有効';
        product2.Manual_Entry__c = false;
        product2.Asset_Model_No__c = '00103';
        product2.ProductCode = '00103';
        product2.Intra_Trade_List_RMB_Date1__c=Date.today().addDays(-1);
        product2.Intra_Trade_List_RMB_Date2__c=Date.today().addDays(-1);
        product2.Intra_Trade_List_RMB_End_Date1__c=Date.today().addDays(1);
        product2.Intra_Trade_List_RMB_End_Date2__c=Date.today().addDays(1);
        product2.Intra_Trade_List_RMB_1__c=170;
        product2.Intra_Trade_List_RMB_2__c=170;
        product2.Intra_Trade_Cost_RMB_Date1__c=Date.today().addDays(-1);
        product2.Intra_Trade_Cost_RMB_Date2__c=Date.today().addDays(-1);
        product2.Intra_Trade_Cost_RMB_End_Date1__c=Date.today().addDays(1);
        product2.Intra_Trade_Cost_RMB_End_Date2__c=Date.today().addDays(1);
        product2.Intra_Trade_Cost_RMB_1__c=10;
        product2.Intra_Trade_Cost_RMB_2__c=10;
        
        insert new Product2[] {product1,product2};
        
        Pricebook2 pricebook = ControllerUtil.getStandardPricebook();
        
        PricebookEntry entry1 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product1.Id);
        entry1.UnitPrice = 0;
        entry1.IsActive = true;
        entry1.UseStandardPrice = false;
        entry1.CurrencyIsoCode = 'CNY';
        
        PricebookEntry entry2 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product2.Id);
        entry2.UnitPrice = 0;
        entry2.IsActive = true;
        entry2.UseStandardPrice = false;
        entry2.CurrencyIsoCode = 'CNY';
        
        insert new PricebookEntry[] {entry1,entry2};
        
        ConsumableSample__c irai = new ConsumableSample__c();
        irai.Contact__c = con.Id;
        irai.Account__c = dep.Id;
        irai.Process_Status__c = '草案中';
        irai.Expect_Arrive_Date__c = Date.today();
        irai.Purpose__c = 'test purpose';
        irai.Reason__c = 'test note';
        insert irai;
        
        ConsumableSampleLineItem__c item1 = new ConsumableSampleLineItem__c();
        item1.SFDA_Status__c = '有効';
        item1.Name__c = '00107:高频电极，按钮形，4Fr.，软性';
        item1.Quantity__c = 1;
        item1.ListPrice__c = 2150;
        item1.Product2__c = product1.Id;
        item1.ConsumableSample__c = irai.Id;
        item1.Item_Order__c = 1;
        insert item1;
        
        ConsumableSampleLineItem__c item2 = new ConsumableSampleLineItem__c();
        item2.SFDA_Status__c = '有効';
        item2.Name__c = '00103:软管接头';
        item2.Quantity__c = 10;
        item2.ListPrice__c = 170;
        item2.Product2__c = product2.Id;
        item2.ConsumableSample__c = irai.Id;
        item2.Item_Order__c = 2;
        insert item2;
        
        PageReference page = new PageReference('/apex/ConsumableSampleApply?copyid=' + irai.Id);
        System.Test.setCurrentPage(page);
        
        ConsumableSampleApplyController controller = new ConsumableSampleApplyController();
        //初始化
        controller.init();
        
        System.assertEquals('CNY', controller.quo.CurrencyIsoCode);
        System.assertEquals('草案中', controller.quo.Process_Status__c);
        System.assertEquals(null, controller.quo.Contact__c);
        System.assertEquals(null, controller.quo.Account__c);
        System.assertEquals(null, controller.quo.Expect_Arrive_Date__c);
        System.assertEquals('', controller.quo.Purpose__c );
        System.assertEquals('', controller.quo.Reason__c);
        
        System.assertEquals(0, controller.activities[0].lineNo);
        System.assertEquals('00107', controller.activities[0].Asset_Model);
        System.assertEquals('有効', controller.activities[0].pageObject.SFDA_Status__c);
        System.assertEquals('00107:高频电极，按钮形，4Fr.，软性', controller.activities[0].pageObject.Name__c);
        System.assertEquals(1, controller.activities[0].pageObject.Quantity__c);
        System.assertEquals(2150, controller.activities[0].ListPrice_Page);
        System.assertEquals(product1.Id, controller.activities[0].pageObject.Product2__c);
        
        System.assertEquals(1, controller.activities[1].lineNo);
        System.assertEquals('00103', controller.activities[1].Asset_Model);
        System.assertEquals('有効', controller.activities[1].pageObject.SFDA_Status__c);
        System.assertEquals('00103:软管接头', controller.activities[1].pageObject.Name__c);
        System.assertEquals(10, controller.activities[1].pageObject.Quantity__c);
        System.assertEquals(170, controller.activities[1].ListPrice_Page);
        System.assertEquals(product2.Id, controller.activities[1].pageObject.Product2__c);
        
        controller.quo.Contact__c = con.Id;
        controller.quo.Expect_Arrive_Date__c = Date.today();
        controller.quo.Purpose__c = 'Purpose__c';
        controller.quo.Reason__c = 'Reason__c';
        
        controller.Save();
        
        ConsumableSample__c[] irais = [select Id, Name, Contact__c, Account__c, Expect_Arrive_Date__c, Purpose__c, Process_Status__c, Reason__c from ConsumableSample__c where Contact__c = :con.Id order by CreatedDate];
        ConsumableSampleLineItem__c[] items = [select Id, Asset_Model_No__c, SFDA_Status__c, Name__c,Quantity__c, ListPrice__c, ProductCode__c,Product2__c from ConsumableSampleLineItem__c where ConsumableSample__c = :irais[1].Id order by Item_Order__c];
        
        System.assertEquals(con.Id, irais[1].Contact__c);
        System.assertEquals(dep.Id, irais[1].Account__c);
        System.assertEquals('Purpose__c', irais[1].Purpose__c);
        System.assertEquals('Reason__c', irais[1].Reason__c);
        System.assertEquals('草案中', irais[1].Process_Status__c);
        
        System.assertEquals('00107', items[0].Asset_Model_No__c);
        System.assertEquals('有効', items[0].SFDA_Status__c);
        System.assertEquals('00107:高频电极，按钮形，4Fr.，软性', items[0].Name__c);
        System.assertEquals(1, items[0].Quantity__c);
        System.assertEquals(2150, items[0].ListPrice__c);
        System.assertEquals('00107', items[0].ProductCode__c);
        System.assertEquals(product1.Id, items[0].Product2__c);
        
        System.assertEquals('00103', items[1].Asset_Model_No__c);
        System.assertEquals('有効', items[1].SFDA_Status__c);
        System.assertEquals('00103:软管接头', items[1].Name__c);
        System.assertEquals(10, items[1].Quantity__c);
        System.assertEquals(170, items[1].ListPrice__c);
        System.assertEquals('00103', items[1].ProductCode__c);
        System.assertEquals(product2.Id, items[1].Product2__c);         
    }

    //新建报价委托，excel导入明细一条，保存；再excel导入明细三条，委托
    static testMethod void test04() {
        User user = new User(Test_staff__c = true);
        user.LastName = '_サンブリッジ';
        user.FirstName = 'う';
        user.Alias = 'う';
        user.Email = 'olympustest03@sunbridge.com';
        user.Username = 'olympustest03@sunbridge.com';
        user.CommunityNickname = 'う';
        user.IsActive = true;
        user.EmailEncodingKey = 'ISO-2022-JP';
        user.TimeZoneSidKey = 'Asia/Tokyo';
        user.LocaleSidKey = 'ja_JP';
        user.LanguageLocaleKey = 'ja';
        user.ProfileId = System.Label.ProfileId_SystemAdmin;
        user.Job_Category__c = '销售推广';
        user.Province__c = '上海市';
        user.Use_Start_Date__c = Date.today().addMonths(-6);
        insert user;
        
        // 病院を作る
        Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'test hospital';
        insert hospital;
        
        // 戦略科室を得る
        List<Account> strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_GI'];
        
        // 診療科を作る
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_GI'].id;
        dep.Name = 'test dep';
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        insert dep;
        
        Contact con = new Contact(RecordTypeId='01210000000Qtky');
        con.LastName = 'test1';
        con.FirstName='ZZ';
        con.AccountId = dep.Id;
        insert con;
        
        Product2 product1 = new Product2();
        product1.Name = '00107:高频电极，按钮形，4Fr.，软性';
        product1.SFDA_Status__c = '有効';
        product1.Manual_Entry__c = false;
        product1.Asset_Model_No__c = '00107';
        product1.ProductCode = '00107';
        product1.Intra_Trade_List_RMB_Date1__c=Date.today().addDays(-1);
        product1.Intra_Trade_List_RMB_Date2__c=Date.today().addDays(-1);
        product1.Intra_Trade_List_RMB_End_Date1__c=Date.today().addDays(1);
        product1.Intra_Trade_List_RMB_End_Date2__c=Date.today().addDays(1);
        product1.Intra_Trade_List_RMB_1__c=2150;
        product1.Intra_Trade_List_RMB_2__c=2150;
        product1.Intra_Trade_Cost_RMB_Date1__c=Date.today().addDays(-1);
        product1.Intra_Trade_Cost_RMB_Date2__c=Date.today().addDays(-1);
        product1.Intra_Trade_Cost_RMB_End_Date1__c=Date.today().addDays(1);
        product1.Intra_Trade_Cost_RMB_End_Date2__c=Date.today().addDays(1);
        product1.Intra_Trade_Cost_RMB_1__c=10;
        product1.Intra_Trade_Cost_RMB_2__c=10;
        
        Product2 product2 = new Product2();
        product2.Name = '00103:软管接头';
        product2.SFDA_Status__c = '有効';
        product2.Manual_Entry__c = false;
        product2.Asset_Model_No__c = '00103';
        product2.ProductCode = '00103';
        product2.Intra_Trade_List_RMB_Date1__c=Date.today().addDays(-1);
        product2.Intra_Trade_List_RMB_Date2__c=Date.today().addDays(-1);
        product2.Intra_Trade_List_RMB_End_Date1__c=Date.today().addDays(1);
        product2.Intra_Trade_List_RMB_End_Date2__c=Date.today().addDays(1);
        product2.Intra_Trade_List_RMB_1__c=170;
        product2.Intra_Trade_List_RMB_2__c=170;
        product2.Intra_Trade_Cost_RMB_Date1__c=Date.today().addDays(-1);
        product2.Intra_Trade_Cost_RMB_Date2__c=Date.today().addDays(-1);
        product2.Intra_Trade_Cost_RMB_End_Date1__c=Date.today().addDays(1);
        product2.Intra_Trade_Cost_RMB_End_Date2__c=Date.today().addDays(1);
        product2.Intra_Trade_Cost_RMB_1__c=10;
        product2.Intra_Trade_Cost_RMB_2__c=10;
        
        Product2 product3 = new Product2();
        product3.Name = '00102.1:旋阀，免维护';
        product3.SFDA_Status__c = '有効';
        product3.Manual_Entry__c = false;
        product3.Asset_Model_No__c = '00102.1';
        product3.ProductCode = '00102.1';
        product3.Intra_Trade_List_RMB_Date1__c=Date.today().addDays(-1);
        product3.Intra_Trade_List_RMB_Date2__c=Date.today().addDays(-1);
        product3.Intra_Trade_List_RMB_End_Date1__c=Date.today().addDays(1);
        product3.Intra_Trade_List_RMB_End_Date2__c=Date.today().addDays(1);
        product3.Intra_Trade_List_RMB_1__c=920;
        product3.Intra_Trade_List_RMB_2__c=920;
        product3.Intra_Trade_Cost_RMB_Date1__c=Date.today().addDays(-1);
        product3.Intra_Trade_Cost_RMB_Date2__c=Date.today().addDays(-1);
        product3.Intra_Trade_Cost_RMB_End_Date1__c=Date.today().addDays(1);
        product3.Intra_Trade_Cost_RMB_End_Date2__c=Date.today().addDays(1);
        product3.Intra_Trade_Cost_RMB_1__c=10;
        product3.Intra_Trade_Cost_RMB_2__c=10;
        
        insert new Product2[] {product1,product2,product3};
        
        Pricebook2 pricebook = ControllerUtil.getStandardPricebook();
        
        PricebookEntry entry1 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product1.Id);
        entry1.UnitPrice = 0;
        entry1.IsActive = true;
        entry1.UseStandardPrice = false;
        entry1.CurrencyIsoCode = 'CNY';
        
        PricebookEntry entry2 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product2.Id);
        entry2.UnitPrice = 0;
        entry2.IsActive = true;
        entry2.UseStandardPrice = false;
        entry2.CurrencyIsoCode = 'CNY';
        
        PricebookEntry entry3 = new PricebookEntry( Pricebook2Id=pricebook.Id, Product2Id=product3.Id);
        entry3.UnitPrice = 0;
        entry3.IsActive = true;
        entry3.UseStandardPrice = false;
        entry3.CurrencyIsoCode = 'CNY';
        
        insert new PricebookEntry[] {entry1,entry2,entry3};
        
        PageReference page = new PageReference('/apex/ConsumableSampleApply');
        System.Test.setCurrentPage(page);
        
        ConsumableSampleApplyController controller = new ConsumableSampleApplyController();
        //初始化
        controller.init();
        
        controller.quo.Contact__c = con.Id;
        controller.quo.Expect_Arrive_Date__c = Date.today();
        controller.quo.Purpose__c = 'test purpose';
        controller.quo.Reason__c = 'test note';
        
        controller.excel_text = '00103\t10';
        controller.excelImport();
        
        System.assertEquals('00103', controller.activities[0].Asset_Model);
        System.assertEquals('有効', controller.activities[0].pageObject.SFDA_Status__c);
        System.assertEquals('00103:软管接头', controller.activities[0].pageObject.Name__c);
        System.assertEquals(10, controller.activities[0].pageObject.Quantity__c);
        System.assertEquals(product2.Id, controller.activities[0].pageObject.Product2__c);
        
        controller.Save();
        
        ConsumableSample__c[] irais = [select Id, Name, Contact__c, Account__c, Expect_Arrive_Date__c, Purpose__c, Process_Status__c, Reason__c from ConsumableSample__c where Contact__c = :con.Id];
        ConsumableSampleLineItem__c[] items = [select Id, Asset_Model_No__c, SFDA_Status__c, Name__c,Quantity__c, ListPrice__c, ProductCode__c,Product2__c from ConsumableSampleLineItem__c where ConsumableSample__c = :irais[0].Id order by Item_Order__c];
        
        System.assertEquals(con.Id, irais[0].Contact__c);
        System.assertEquals(dep.Id, irais[0].Account__c);
        System.assertEquals('test purpose', irais[0].Purpose__c);
        System.assertEquals('test note', irais[0].Reason__c);
        
        System.assertEquals('00103', items[0].Asset_Model_No__c);
        System.assertEquals('有効', items[0].SFDA_Status__c);
        System.assertEquals('00103:软管接头', items[0].Name__c);
        System.assertEquals(10, items[0].Quantity__c);
        System.assertEquals('00103', items[0].ProductCode__c);
        System.assertEquals(product2.Id, items[0].Product2__c);
        
        controller.excel_text = '00103\t10\n00102.1\t10\n00107\t2';
        controller.excelImport();
        
        System.assertEquals('00103', controller.activities[0].Asset_Model);
        System.assertEquals('有効', controller.activities[0].pageObject.SFDA_Status__c);
        System.assertEquals('00103:软管接头', controller.activities[0].pageObject.Name__c);
        System.assertEquals(10, controller.activities[0].pageObject.Quantity__c);
        System.assertEquals(product2.Id, controller.activities[0].pageObject.Product2__c);
        
        System.assertEquals('00103', controller.activities[1].Asset_Model);
        System.assertEquals('有効', controller.activities[1].pageObject.SFDA_Status__c);
        System.assertEquals('00103:软管接头', controller.activities[1].pageObject.Name__c);
        System.assertEquals(10, controller.activities[1].pageObject.Quantity__c);
        System.assertEquals(product2.Id, controller.activities[1].pageObject.Product2__c);
        
        System.assertEquals('00102.1', controller.activities[2].Asset_Model);
        System.assertEquals('有効', controller.activities[2].pageObject.SFDA_Status__c);
        System.assertEquals('00102.1:旋阀，免维护', controller.activities[2].pageObject.Name__c);
        System.assertEquals(10, controller.activities[2].pageObject.Quantity__c);
        System.assertEquals(product3.Id, controller.activities[2].pageObject.Product2__c);
        
        System.assertEquals('00107', controller.activities[3].Asset_Model);
        System.assertEquals('有効', controller.activities[3].pageObject.SFDA_Status__c);
        System.assertEquals('00107:高频电极，按钮形，4Fr.，软性', controller.activities[3].pageObject.Name__c);
        System.assertEquals(2, controller.activities[3].pageObject.Quantity__c);
        System.assertEquals(product1.Id, controller.activities[3].pageObject.Product2__c);
        
        controller.Save();

        ConsumableSample__c[] irais2 = [select Id, Name, Contact__c, Account__c, Expect_Arrive_Date__c, Purpose__c, Process_Status__c, Reason__c from ConsumableSample__c where Contact__c = :con.Id];
        ConsumableSampleLineItem__c[] items2 = [select Id, Asset_Model_No__c, SFDA_Status__c, Name__c,Quantity__c, ListPrice__c, ProductCode__c,Product2__c from ConsumableSampleLineItem__c where ConsumableSample__c = :irais[0].Id order by Item_Order__c];
        
        System.assertEquals(con.Id, irais2[0].Contact__c);
        System.assertEquals(dep.Id, irais2[0].Account__c);
        System.assertEquals('test purpose', irais2[0].Purpose__c);
        System.assertEquals('test note', irais2[0].Reason__c);
        
        System.assertEquals('00103', items2[0].Asset_Model_No__c);
        System.assertEquals('有効', items2[0].SFDA_Status__c);
        System.assertEquals('00103:软管接头', items2[0].Name__c);
        System.assertEquals(10, items2[0].Quantity__c);
        System.assertEquals('00103', items2[0].ProductCode__c);
        System.assertEquals(product2.Id, items2[0].Product2__c);
        
        // 商品状态刷新
        Product2 p2 = [select Id, SFDA_Status__c,Name from Product2 where Id = :product2.Id];
        p2.SFDA_Status__c = '停止';
        p2.Name = '00103:软管接头123';
        update p2;
        
        controller.Save();
        
        System.assertEquals(true, controller.errorflg);
        System.assertEquals('停止', controller.activities[0].pageObject.SFDA_Status__c);
        System.assertEquals('00103:软管接头123', controller.activities[0].pageObject.Name__c);
    }
    
    //其他单体函数
    static testMethod void test05() {
        // 病院を作る
        Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'test hospital';
        insert hospital;
        
        // 戦略科室を得る
        List<Account> strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_GI'];
        
        // 診療科を作る
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_GI'].id;
        dep.Name = 'test dep';
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        insert dep;
        
        Contact con = new Contact(RecordTypeId='01210000000Qtky');
        con.LastName = 'test1';
        con.FirstName='ZZ';
        con.AccountId = dep.Id;
        insert con;
        
        ConsumableSample__c irai = new ConsumableSample__c();
        irai.Contact__c = con.Id;
        irai.Account__c = dep.Id;
        irai.Process_Status__c = '草案中';
        irai.Expect_Arrive_Date__c = Date.today();
        irai.Purpose__c = 'test purpose';
        irai.Reason__c = 'test note';
        insert irai;
        
        PageReference page = new PageReference('/apex/ConsumableSampleApply?id=' + irai.Id);
        System.Test.setCurrentPage(page);
        
        ConsumableSampleApplyController controller = new ConsumableSampleApplyController();
        controller.init();
        controller.Back();
    }
}