@istest
public class LexSelectSubstituteControllerLWTTest {

    static void setData(){
        ControllerUtil.EscapeNFM001Trigger = true;
        Application_for_Conference_Adjudication__c aca = new Application_for_Conference_Adjudication__c();
        aca.MeetingApprovedNo__c            = 'ME154P03-0012';
        aca.Name                            = 'ME154P03-0012'; // 用决裁编号替代名称
        aca.CampaignTheme__c                = 'obpm发起赞助决裁';
        aca.Num__c                          = 'test1';
        aca.StartDate__c                    = NFMUtil.parseDateTimeStr2Date('2022-04-19');
        aca.EndDate__c                      = NFMUtil.parseDateTimeStr2Date('2022-04-22');
        aca.Implementation_Purpose1__c                   = '其他';
        aca.OfficeCategory__c               = '1.消化科';
        aca.MeetingType__c                  = '主办会';
        aca.StateMaster__c                  = '北京市';
        aca.CityMaster__c                   = '北京市';
        aca.WorkshopPlace__c                = 'CTEC';
        aca.HostName__c                     = '医学会';
        aca.CooperatorCompany__c            = '中华医学会';
        aca.ConveningParticipantsNum__c     = 0;
        aca.IsPaidToSponsor__c              = '否';
        aca.SponsorshipCategory__c          = '资金';
        aca.ExpectedOlympusAttendance__c    = 0;
        aca.ActivityTypeName__c             = '自主主办会';
        aca.ExpectedHcpAttendance__c        = 0;
        aca.ProcessState__c                 = '草稿';
        aca.Type_of_adjudication_meeting__c = '线下';
        aca.Activities_of_a_share__c        = '否';
        aca.IsSupplemental__c = true;
        insert aca;
        Campaign cam = new Campaign();
        Id RtId = Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('Society').getRecordTypeId();
        cam.RecordTypeId                     = RtId;
        cam.Name                             = aca.MeetingApprovedNo__c;
        cam.Name2__c                         = aca.MeetingApprovedNo__c;
        cam.MeetingApprovedNo__c             = aca.MeetingApprovedNo__c;
        cam.Meeting_Approved_No__c           = aca.Id;
        cam.StartDate                        = aca.StartDate__c;
        cam.EndDate                          = aca.EndDate__c;
        cam.Implementation_Purpose__c                   = aca.Implementation_Purpose1__c;
        cam.OfficeCategory__c                = aca.OfficeCategory__c;
        cam.Meeting_Type__c                  = aca.MeetingType__c;
        cam.Activity_Type_Name__c            = aca.ActivityTypeName__c;
        cam.WorkshopPlace__c                 = aca.WorkshopPlace__c;
        cam.HostName__c                      = aca.HostName__c;
        cam.cooperatorCompany__c             = aca.CooperatorCompany__c;
        cam.Convening_Participants_Num__c    = aca.ConveningParticipantsNum__c;
        cam.IF_Approved__c                   = true;
        // OBPM对接 新增字段
        cam.Expected_Olympus_Attendance__c   = aca.ExpectedOlympusAttendance__c;
        cam.Expected_Hcp_Attendance__c       = aca.ExpectedHcpAttendance__c;
        cam.SponsorshipCategory__c           = aca.SponsorshipCategory__c;
        cam.IsPaidToSponsor__c               = aca.IsPaidToSponsor__c;
        cam.Activity_Type_Name__c            = aca.ActivityTypeName__c;
        cam.Is_LendProduct__c                = '是';
        cam.PlanBackData__c                  = NFMUtil.parseDateTimeStr2Date('2022-04-30');
        cam.LoadNum__c                       = 'CV-290*1; GI-290镜子*1;';
        insert cam;
        // 省
        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;

        // 戦略科室を得る
        Account[] strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_OTH'];
        // 診療科を作る
        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;

        // 产品
        Product2 pro5 = new Product2(Name='name05',IsActive=true,Family='SP',
                Fixture_Model_No__c='n05',Serial_Lot_No__c='S/N tracing',
                Fixture_Model_No_T__c = 'n05',
                ProductCode_Ext__c='pc05',Manual_Entry__c=false);
        insert pro5;
        // 联系人
        Contact contact2 = new Contact();
        contact2.AccountId = dep.Id;
        contact2.FirstName = '責任者';
        contact2.LastName = 'test1经销商';
        insert contact2;
        //备品借出申请
        Rental_Apply__c raObj = new Rental_Apply__c();
        raObj.Name = 'testra';
        raObj.Product_category__c = 'GI';
        raObj.Demo_purpose1__c = '产品试用';
        raObj.demo_purpose2__c = FixtureUtil.raDemo_purpose2MAP.get('shiyongwuxunjia');
        raObj.direct_send__c = '医疗机构';
        raObj.Loaner_received_staff__c = '王五';
        raObj.Loaner_received_staff_phone__c = '110';
        raObj.direct_shippment_address__c = '北京市';
        raObj.Hospital__c = hospital.Id;
        raObj.Strategic_dept__c = strategicDep[0].Id;
        raObj.Account__c = dep.Id;
        raObj.Loaner_medical_Staff__c= contact2.id;  
        raObj.Cross_Region_Assign__c = '北京 备品中心';
        raObj.Request_shipping_day__c = Date.toDay();  // 希望到货日
        raObj.Hope_Lonaer_date_Num__c = 1;  // 希望借用天数
        // 预定归还日自动生成 预定归还日=（希望到货日+希望借用天数）-1
        // raObj.Request_return_day__c = Date.toDay();  // 预定归还日
        // B.OLY_OCM-669 入力规则: 希望借用天数不能为空
        raObj.Phone_number__c = '1234567890';
        insert raObj;

        // 保有设备C (只有附属品 个体管理)
        Asset assetC1 = new Asset(Asset_Owner__c = 'Olympus');
        assetC1.RecordTypeId = System.Label.Asset_RecordType;
        assetC1.SerialNumber = 'assetC1';
        assetC1.Name = 'assetC1';
        assetC1.AccountId = dep.Id;
        assetC1.Department_Class__c = strategicDep[0].Id;
        assetC1.Hospital__c = hospital.Id;
        assetC1.Product2Id = pro5.Id;
        assetC1.Quantity = 1;
        assetC1.Status = '有库存';
        assetC1.Manage_type__c = '个体管理';
        assetC1.Internal_asset_location__c = '北京 备品中心';
        assetC1.Loaner_accsessary__c = true;
        assetC1.Delete_Flag__c = false;
        assetC1.Freeze_sign__c = false;
        assetC1.Out_of_wh__c = 0;
        // 保有设备
        Asset asset = new Asset(Asset_Owner__c = 'Olympus');
        asset.RecordTypeId = System.Label.Asset_RecordType;
        asset.SerialNumber = 'asset';
        asset.Name = 'asset';
        asset.AccountId = dep.Id;
        asset.Department_Class__c = strategicDep[0].Id;
        asset.Hospital__c = hospital.Id;
        asset.Product2Id = pro5.Id;
        asset.Quantity = 1;
        asset.Status = '有库存';
        asset.Manage_type__c = '个体管理';
        asset.Internal_asset_location__c = '北京 备品中心';
        asset.Loaner_accsessary__c = true;
        asset.Delete_Flag__c = false;
        asset.Freeze_sign__c = false;
        asset.Out_of_wh__c = 0;
        insert new Asset[] {assetC1, asset};

        // 备品配套(只有附属品)
        Fixture_Set__c fsObjC1 = new Fixture_Set__c();
        fsObjC1.Name = 'setC1';
        fsObjC1.Fixture_Set_Body_Model_No__c = 'modelNoC1';
        fsObjC1.Loaner_name__c = 'nameC1';
        insert fsObjC1;

        // 备品配套明细(只有附属品)
        Fixture_Set_Detail__c fsdObjC1 = new Fixture_Set_Detail__c();
        fsdObjC1.Name = 'detailAccessory';
        fsdObjC1.Name_CHN_Created__c = 'detailAccessoryName';
        fsdObjC1.Product2__c = pro5.Id;
        fsdObjC1.Fixture_Set__c = fsObjC1.Id;
        fsdObjC1.Is_Body__c = false;
        fsdObjC1.Is_Optional__c = true;
        fsdObjC1.UniqueKey__c = fsObjC1.Id + ':' + pro5.Id;
        fsdObjC1.SortInt__c = 1;
        insert fsdObjC1;

        // 借出备品配套一览
        Rental_Apply_Equipment_Set__c raesObjC1 = new Rental_Apply_Equipment_Set__c();
        raesObjC1.Rental_Apply__c = raObj.Id;
        raesObjC1.Fixture_Set__c = fsObjC1.Id;
        raesObjC1.Cancel_Select__c = false;
        raesObjC1.Shipment_request_time__c = Date.toDay();
        raesObjC1.Rental_Start_Date__c = Date.toDay();
        raesObjC1.Rental_End_Date__c = Date.toDay();
        raesObjC1.IndexFromUniqueKey__c = 1;
        raesObjC1.UniqueKey__c = '1:'+ fsObjC1.Id + ':1';
        insert raesObjC1;

        // 借出备品配套一览明细
        Rental_Apply_Equipment_Set_Detail__c raesdObjC1 = new Rental_Apply_Equipment_Set_Detail__c();
        raesdObjC1.Rental_Apply__c = raObj.Id;
        raesdObjC1.Fixture_Set_Detail__c = fsdObjC1.Id;
        raesdObjC1.Rental_Num__c = 1;
        raesdObjC1.Queue_Number__c = null;
        raesdObjC1.Is_Body__c = false;
        raesdObjC1.AgencyTempCancel__c = true;
        raesdObjC1.Cancel_Select__c = false;
        raesdObjC1.Shipment_request__c = false;
        raesdObjC1.Rental_Apply_Equipment_Set__c = raesObjC1.Id;
        raesdObjC1.Asset__c = assetC1.Id;
        raesdObjC1.IndexFromUniqueKey__c = 1;
        raesdObjC1.UniqueKey__c = '1:'+ raesObjC1.Id + ':' + fsdObjC1.Id + ':1';
        raesdObjC1.Salesdepartment_before__c = '0.备品中心';
        raesdObjC1.Internal_asset_location_before__c = '北京 备品中心';
        raesdObjC1.Product_category_text__c = 'GI';
        raesdObjC1.Equipment_Type_text__c = '产品试用';
        insert raesdObjC1;

        Rental_Apply_Equipment_Set_Detail__c raesdObjC2 = new Rental_Apply_Equipment_Set_Detail__c();
        raesdObjC2.Rental_Apply__c = raObj.Id;
        raesdObjC2.Fixture_Set_Detail__c = fsdObjC1.Id;
        raesdObjC2.Rental_Num__c = 2;
        raesdObjC2.Queue_Number__c = null;
        raesdObjC2.Is_Body__c = false;
        raesdObjC2.Cancel_Select__c = true;
        raesdObjC2.Shipment_request__c = false;
        raesdObjC2.Cancel_Reason__c = '	主动取消';
        raesdObjC2.Rental_Apply_Equipment_Set__c = raesObjC1.Id;
        raesdObjC2.Asset__c = assetC1.Id;
        raesdObjC2.Shipment_request_time2__c = Date.today();
        raesdObjC2.IndexFromUniqueKey__c = 2;
        raesdObjC2.UniqueKey__c = '2:'+ raesObjC1.Id + ':' + fsdObjC1.Id + ':1';
        raesdObjC2.Salesdepartment_before__c = '0.备品中心';
        raesdObjC2.Internal_asset_location_before__c = '上海 备品中心';
        raesdObjC2.Product_category_text__c = 'GI';
        raesdObjC2.Equipment_Type_text__c = '产品试用';
        insert raesdObjC2;
    }

    static testMethod void testMethod01(){
        Oly_TriggerHandler.bypass(ContactTriggerHandler.class.getName());
        setData();
        Rental_Apply_Equipment_Set__c report=[select Id,Rental_Apply__r.Status__c,Rental_Apply__r.Id from Rental_Apply_Equipment_Set__c];
        list<Rental_Apply_Equipment_Set_Detail__c> report2=[select Allow_Adjust_Queue_Flag__c from Rental_Apply_Equipment_Set_Detail__c];
        list<Rental_Apply__c> report3=[select Id from Rental_Apply__c ];
        list<Campaign> report4=[select id from Campaign];
        LexSelectSubstituteControllerLWT.initFromSelectSubstituteButton(report.id);
        LexSelectSubstituteControllerLWT.getStatusList();
        LexSelectSubstituteControllerLWT.initFromCustomSubmitButton(report.id);
        LexSelectSubstituteControllerLWT.initFromLoanerArrangedEmailLButton(report.id);
        LexSelectSubstituteControllerLWT.initClearReturnDeliverySlipButton(report.id);
        LexSelectSubstituteControllerLWT.selectRentalApplyEquipmentSetByID(report.id);
        LexSelectSubstituteControllerLWT.selectRentalApplyEquipmentSetByRACID(report3[0].Id);
        LexSelectSubstituteControllerLWT.selectRentalApplyCByName(report3[0].Id);
        LexSelectSubstituteControllerLWT.selectCampaignById(report4[0].id);
        LexSelectSubstituteControllerLWT.getSessionId();
        LexSelectSubstituteControllerLWT.selectRaesById1(report3[0].id);
        LexSelectSubstituteControllerLWT.selectRaesById2(report3[0].id);
        LexSelectSubstituteControllerLWT.selectRacById(report3[0].id);
        LexSelectSubstituteControllerLWT.updateRaesc(report.id,UserInfo.getUserId(),UserInfo.getUserId(),UserInfo.getUserId(),UserInfo.getUserId(),UserInfo.getUserId(),'批准');
        LexSelectSubstituteControllerLWT.updateRaescList(report2);
        LexSelectSubstituteControllerLWT.selectRaesdcId(report.id);
        LexSelectSubstituteControllerLWT.approvalCheck(report3[0].Id);
        // LexSelectSubstituteControllerLWT.setShipment_requests(report3[0].Id,report.id);
    }

    static testMethod void testMethod02(){
        String timenow = Datetime.now().format('yyyyMMddHHmmss');
        User hpOwner = new User(Test_staff__c = true, LastName = 'TestMao', FirstName = 'TestMaoF',
        Alias = 'hp', CommunityNickname = 'TestMao', Email = 'Test@sunbridge.com',
        Username = 'Test' + timenow + '@sunbridge.com', IsActive = true, EmailEncodingKey = 'ISO-2022-JP', 
        TimeZoneSidKey = 'Asia/Tokyo', LocaleSidKey = 'ja_JP', LanguageLocaleKey = 'ja', ProfileId = System.Label.ProfileId_SystemAdmin,
        Dept__c = '医疗华北营业本部', Province__c = '北京');
        insert hpOwner;
        List<User> userList=[select name from user];
        List<String> listName = new List<String>();
        for (User u : userList) {
            listName.add(u.Name);
        }
        System.debug('用户姓名：'+listName);
        LexSelectSubstituteControllerLWT.getUserIdByUserName(listName);
        try {
            LexSelectSubstituteControllerLWT.setShipment_requests('','12212');
        }
        catch (Exception e) {
            
        }
        
    }

    static testMethod void testMethod03(){
        Oly_TriggerHandler.bypass(ContactTriggerHandler.class.getName());
        setData();
        Rental_Apply_Equipment_Set__c report=[select Id,Rental_Apply__r.Status__c,Rental_Apply__r.Id from Rental_Apply_Equipment_Set__c];
        list<Rental_Apply__c> report3=[select Id from Rental_Apply__c ];
        LexSelectSubstituteControllerLWT.setShipment_requests(report3[0].Id,report.id);
        OlympusCalendar__c oc = new OlympusCalendar__c();
        oc.Date__c = System.Today();
        oc.Before_1_WorkDay__c = oc.Date__c.addDays(-1);
        insert oc;
        OlympusCalendar__c oc2 = new OlympusCalendar__c();
        oc2.Date__c = System.Today();
        oc2.Before_1_WorkDay__c = oc.Date__c.addDays(-1);
        insert oc2;
        OlympusCalendar__c oc3 = new OlympusCalendar__c();
        oc3.Date__c = System.Today();
        oc3.Before_1_WorkDay__c = oc.Date__c.addDays(-2);
        insert oc3;
        OlympusCalendar__c oc4 = new OlympusCalendar__c();
        oc4.Date__c = System.Today();
        oc4.Before_1_WorkDay__c = oc.Date__c.addDays(-2);
        insert oc4;
        try {
            LexSelectSubstituteControllerLWT.postponeCheck(Date.Today().addDays(-1)+'',1);
        }
        catch (Exception e) {
            
        }
        LexSelectSubstituteControllerLWT.submitApprovalRequest(report.id);
    }
    static testMethod void testMethod04(){
        LexSelectSubstituteControllerLWT lss = new LexSelectSubstituteControllerLWT();
        OlympusCalendar__c oc3 = new OlympusCalendar__c();
        oc3.Date__c = System.Today();
        oc3.Before_1_WorkDay__c = oc3.Date__c.addDays(-5);
        insert oc3;
        OlympusCalendar__c oc4 = new OlympusCalendar__c();
        oc4.Date__c = System.Today();
        oc4.Before_1_WorkDay__c = oc4.Date__c.addDays(-5);
        insert oc4;
        OlympusCalendar__c oc5 = new OlympusCalendar__c();
        oc5.Date__c = System.Today();
        oc5.Before_1_WorkDay__c = oc5.Date__c.addDays(-12);
        insert oc5;
        try {
            LexSelectSubstituteControllerLWT.postponeCheck(Date.Today().addDays(-1)+'',-2);
        }
        catch (Exception e) {
            
        }
        LexSelectSubstituteControllerLWT.getUserinfo();
        LexSelectSubstituteControllerLWT.getUserid();
        LexSelectSubstituteControllerLWT.getUserPid();
        LexSelectSubstituteControllerLWT.approvalCheck('0');
    }
}