/**
 * wangweipeng    2021/07/28
 * RepairBeforeInsertHandler  的测试类
 * 新增修理时，默认查找到对应的直返收货地址
 * 根据修理上选中医院的 OCM_man_province_txt__c 值，去匹配直返地址的省或市
 */
@isTest
private class RepairBeforeInsertHandlerTest {
    Static String hospitalId;
    Static String strategicDepId;
    Static String depId;
    
    @TestSetup
    static void setup(){
        TestDataUtility.CreatePIPolicyConfigurations(new string[]{'Repair__c','Agency_Contact__c'});
    } 
    
    static testMethod void testMethod1() {
        // 省
        Address_Level__c al = new Address_Level__c();
        al.Name = '河北省';
        al.Level1_Code__c = 'CN-99';
        al.Level1_Sys_No__c = '999999';
        insert al;
        // 市
        Address_Level2__c al2 = new Address_Level2__c();
        al2.Level1_Code__c = 'CN-99';
        al2.Level1_Sys_No__c = '999999';
        al2.Level1_Name__c = '河北';
        al2.Name = '石家庄市';
        al2.Level2_Code__c = 'CN-9999';
        al2.Level2_Sys_No__c = '9999999';
        al2.Address_Level__c = al.id;
        insert al2;
        //医院
        Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'test hospital';
        hospital.Is_Active__c = '有効';
        hospital.Attribute_Type__c = '卫生部';
        hospital.Speciality_Type__c = '综合医院';
        hospital.Grade__c = '一级';
        hospital.OCM_Category__c = 'SLTV';
        hospital.Is_Medical__c = '医疗机构';
        hospital.State_Master__c = al.id;
        hospital.City_Master__c = al2.id;
        hospital.Town__c = '东京';
        insert hospital;
        hospitalId = hospital.Id;
        StaticParameter.EscapeAccountTrigger = true;
        //战略科室
        Account[] strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_OTH'];
        strategicDepId = strategicDep[0].Id;
        //诊疗科
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_OTH'].id;
        dep.Name = 'test dep';
        dep.AgentCode_Ext__c = '9999998';
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        insert dep;
        depId = dep.Id;

        Contact contact2 = new Contact();
        contact2.AccountId = dep.Id;
        contact2.FirstName = '赵';
        contact2.LastName = '静';
        insert contact2;

        // 产品
        Product2 pro1 = new Product2(Name='name01',IsActive=true,Family='GI',
                Fixture_Model_No__c='n01',Serial_Lot_No__c='S/N tracing',
                Fixture_Model_No_T__c = 'n01', Asset_Model_No__c = 'Pro1',
                ProductCode_Ext__c='pc01',Manual_Entry__c=false);
        Product2 pro2 = new Product2(Name='name02',IsActive=true,Family='GI',
                Fixture_Model_No__c='n02',Serial_Lot_No__c='Lot tracing',
                Fixture_Model_No_T__c = 'n02', Asset_Model_No__c = 'Pro2',
                ProductCode_Ext__c='pc02',Manual_Entry__c=false);

        Product2 pro3 = new Product2(Name='name03',IsActive=true,Family='GI',
                Fixture_Model_No__c='n03',Serial_Lot_No__c='Lot tracing',
                Fixture_Model_No_T__c = 'n03', Asset_Model_No__c = 'Pro3',
                ProductCode_Ext__c='pc03',Manual_Entry__c=false);
        insert new Product2[] {pro1, pro2, pro3};

        // 保有设备
        Asset asset1 = new Asset(Asset_Owner__c = 'Olympus');
        asset1.RecordTypeId = System.Label.Asset_RecordType;
        asset1.SerialNumber = 'asset1';
        asset1.Name = 'asset1';
        asset1.AccountId = dep.Id;
        asset1.Department_Class__c = strategicDep[0].Id;
        asset1.Hospital__c = hospital.Id;
        asset1.Product2Id = pro1.Id;
        asset1.Quantity = 1;
        asset1.Status = '不明';
        asset1.Manage_type__c = '个体管理';
        asset1.Loaner_accsessary__c = false;
        asset1.Out_of_wh__c = 0;
        asset1.Salesdepartment__c = '1.华北营业本部';
        asset1.Internal_asset_location__c = '北京 备品中心';
        asset1.Product_category__c = 'GI';
        asset1.Equipment_Type__c = '产品试用';
        asset1.SalesProvince__c = '北京';
        asset1.CompanyOfEquipment__c = '北京';
        asset1.Internal_Asset_number__c = '0001';
        asset1.Rental_Count__c = 0;
        insert new Asset[] {asset1};


        Address__c ascc = new Address__c();
        ascc.Address_Classification__c = '办事处';
        ascc.Customer__c = dep.Id;
        ascc.Contacts__c = contact2.id;
        ascc.Telephone__c = '0591-88011136';
        ascc.Province__c = al.id;
        ascc.City__c = al2.id;
        ascc.Detailed_Address__c = '福建省福州市鼓楼区五四路137号信和广场1201单元';
        insert ascc;

        Repair__c repairObj1 = new Repair__c();
        repairObj1.Delivered_Product__c = asset1.Id;
        repairObj1.Hospital__c = hospitalId;
        repairObj1.Department_Class__c = strategicDepId;
        repairObj1.Account__c = depId;
        repairObj1.SalesOfficeCode_selection__c = '北京石景山';
        repairObj1.On_site_repair__c = 'RC修理';
        repairObj1.Failure_Occurrence_Date__c = Date.today();
        insert new Repair__c[]{repairObj1};


         al.Name = '山东省';
         update al;

        al2.Level1_Name__c = '山东省';
        al2.Name = '潍坊市';
        update al2;
        
        hospital.OCM_man_province_txt__c = '山东';
        update hospital;

        Repair__c repairObj2 = new Repair__c();
        repairObj2.Delivered_Product__c = asset1.Id;
        repairObj2.Hospital__c = hospitalId;
        repairObj2.Department_Class__c = strategicDepId;
        repairObj2.Account__c = depId;
        repairObj2.SalesOfficeCode_selection__c = '北京石景山';
        repairObj2.On_site_repair__c = 'RC修理';
        repairObj2.Failure_Occurrence_Date__c = Date.today();
        insert new Repair__c[]{repairObj2};
    }
}