@isTest
private class EventHandleControllerTest {
    //任务不为空
    //延期 FSE
    static testMethod void testMethod1() {

        TaskEventReportOPD__c opdMapping = new TaskEventReportOPD__c(Name = 'TaskAndOPD_Delay');
        opdMapping.From_Column_001__c = '与其他突发事件冲突';
        opdMapping.SS_Column_001__c = '工作计划变化';
        opdMapping.From_Column_002__c = '日期填写错误';
        opdMapping.SS_Column_002__c = '日期填写错误';
        opdMapping.From_Column_003__c = '医院设备不到位';
        opdMapping.SS_Column_003__c = '医院设备不到位';
        insert new TaskEventReportOPD__c[] {opdMapping};       

        User user2 = new User();
        Profile p2 = [select Id from Profile where Name = '系统管理员'];
        user2.ProfileId = p2.Id;
        user2.FirstName = 'ユーザー2';
        user2.LastName = 'テスト2';
        user2.Email = 'test_user@example.com';
        user2.emailencodingkey='UTF-8';
        user2.languagelocalekey='zh_CN';
        user2.localesidkey='ja_JP';
        user2.timezonesidkey='Asia/Shanghai';
        user2.Username = 'test_user@example.com' + System.now().millisecond();
        user2.Alias = 'テユ2';
        user2.Job_Category__c = '销售服务';
        user2.CommunityNickname = 'tu' + System.now().millisecond();
        insert user2;

        // レコードタイプ取得
        RecordType hospitalRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        RecordType sectionRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 消化科'];
        RecordType departmentRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        
        
        System.runAs(user2){
            // 病院作成
            Account hospital = new Account();
            hospital.RecordTypeId = hospitalRec.Id;
            hospital.Name = 'TestHospital';
            insert hospital;
            
            // 病院を作ると戦略科室は、トリガーによって作られている
            // Account section = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
            Account section = [select Management_Code__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
            
            // 診療科1を作成
            Account depart1 = new Account();
            depart1.RecordTypeId = departmentRec.Id;
            depart1.Name = '*';
            depart1.Department_Name__c  = 'TestDepart';
            depart1.ParentId = section.Id;
            depart1.Department_Class__c = section.Id;
            depart1.Hospital__c = hospital.Id;
            depart1.AgentCode_Ext__c = '9999997';
            insert depart1;

            RecordType hospitalRec1 = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and Name = 'OPD'];
            task__c InitialTask = new task__c();
            InitialTask.taskDifferent__c = '主动任务';
            InitialTask.taskStatus__c = '05 延期';
            InitialTask.RecordTypeId = hospitalRec1.Id;
            InitialTask.account__c =section.id;
            insert InitialTask;

            task__c task = new task__c();
            task.taskDifferent__c = '主动任务';
            task.taskStatus__c = '01 分配';
            task.RecordTypeId = hospitalRec1.Id;
            task.account__c =section.id;
            task.Initial_Task__c = InitialTask.id;
            insert task;

            OPDPlan__c tempOPD = new OPDPlan__c();
            tempOPD.Status__c = '草案中';
            tempOPD.OPDType__c = '事件';
            tempOPD.PlanProdDetail__c ='CV-290*4; GI-290镜子*1; GI-290镜子CF*1;';
            tempOPD.Account_Laboratory__c =depart1.Id;
            tempOPD.OPDPlan_ImplementDate__c = Date.today();
            tempOPD.OPDPlan_ImplementDate_temp__c = Date.today();
            tempOPD.NoOpp_Reason__c = 'HCP对应';
            tempOPD.RentalReson__c = '无法进入手术室';
            tempOPD.AttachmentCertificate__c = '0001.png';        
            tempOPD.SkipValidationRulesAndWorkflows__c = true;

            insert tempOPD;

            Event targetEvent = new Event();
            targetEvent.Subject = 'test';
            targetEvent.StartDateTime = Datetime.now().addMonths(1);
            targetEvent.DurationInMinutes = 10;
            targetEvent.Location = 'testLocation';
            targetEvent.Activity_Type2__c = '病院';
            targetEvent.Task_ID__c = task.Id;
            targetEvent.OPD_Plan__c = tempOPD.Id;
            insert targetEvent;

            ///apex/EventHandle?isEventDelay=true&Id=00U1m00000GRJwp
            PageReference page = new PageReference('/apex/EventHandle?isEventDelay=true&Id='+targetEvent.Id);
            System.Test.setCurrentPage(page);


            ApexPages.StandardController sc = new ApexPages.standardController( targetEvent);
            EventHandleController handle = new EventHandleController(sc);
            handle.init();
            handle.taskOption.delayReasonSelect__c = '与其他突发事件冲突';
            handle.save();



            task__c task2 = new task__c();
            task2.taskDifferent__c = '主动任务';
            task2.taskStatus__c = '01 分配';
            task2.RecordTypeId = hospitalRec1.Id;
            task2.account__c =section.id;
            insert task2;


            Event targetEvent2 = new Event();
            targetEvent2.Subject = 'test';
            targetEvent2.StartDateTime = Datetime.now().addMonths(1);
            targetEvent2.DurationInMinutes = 10;
            targetEvent2.Location = 'testLocation';
            targetEvent2.Activity_Type2__c = '病院';
            targetEvent2.Task_ID__c = task2.Id;

            insert targetEvent2;

            PageReference page2 = new PageReference('/apex/EventHandle?isEventDelay=true&Id='+targetEvent.Id);
            System.Test.setCurrentPage(page2);
            ApexPages.StandardController sc2 = new ApexPages.standardController( targetEvent2);
            EventHandleController handle2 = new EventHandleController(sc2);
            handle2.init();
            handle2.taskOption.delayReasonSelectFSE__c = '医院设备不到位';
            handle2.save();
        }

    }

    // static testMethod void testMethod01() {

    //     TaskEventReportOPD__c opdMapping = new TaskEventReportOPD__c(Name = 'TaskAndOPD_Delay');
    //     opdMapping.From_Column_001__c = '与其他突发事件冲突';
    //     opdMapping.SS_Column_001__c = '工作计划变化';
    //     opdMapping.From_Column_002__c = '日期填写错误';
    //     opdMapping.SS_Column_002__c = '日期填写错误';
    //     opdMapping.From_Column_003__c = '医院设备不到位';
    //     opdMapping.SS_Column_003__c = '医院设备不到位';
    //     insert new TaskEventReportOPD__c[] {opdMapping};       


        
    //     User user2 = new User();
    //     Profile p2 = [select Id from Profile where Name = '系统管理员'];
    //     user2.ProfileId = p2.Id;
    //     user2.FirstName = 'ユーザー2';
    //     user2.LastName = 'テスト2';
    //     user2.Email = 'test_user@example.com';
    //     user2.emailencodingkey='UTF-8';
    //     user2.languagelocalekey='zh_CN';
    //     user2.localesidkey='ja_JP';
    //     user2.timezonesidkey='Asia/Shanghai';
    //     user2.Username = 'test_user@example.com' + System.now().millisecond();
    //     user2.Alias = 'テユ2';
    //     user2.Job_Category__c = '销售服务';
    //     user2.CommunityNickname = 'tu' + System.now().millisecond();
    //     insert user2;


    //     // レコードタイプ取得
    //     RecordType hospitalRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
    //     RecordType sectionRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 消化科'];
    //     RecordType departmentRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        
    //     System.runAs(user2){
  
    

    //         // 病院作成
    //         Account hospital = new Account();
    //         hospital.RecordTypeId = hospitalRec.Id;
    //         hospital.Name = 'TestHospital';
    //         insert hospital;
            
    //         // 病院を作ると戦略科室は、トリガーによって作られている
    //         Account section = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
            

    //         RecordType hospitalRec1 = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and Name = 'OPD'];
    //         task__c InitialTask = new task__c();
    //         InitialTask.taskDifferent__c = '主动任务';
    //         InitialTask.taskStatus__c = '05 延期';
    //         InitialTask.RecordTypeId = hospitalRec1.Id;
    //         InitialTask.account__c =section.id;
    //         insert InitialTask;

    //         task__c task = new task__c();
    //         task.taskDifferent__c = '主动任务';
    //         task.taskStatus__c = '01 分配';
    //         task.RecordTypeId = hospitalRec1.Id;
    //         task.account__c =section.id;
    //         task.Initial_Task__c = InitialTask.id;
    //         insert task;

    //         Event targetEvent = new Event();
    //         targetEvent.Subject = 'test';
    //         targetEvent.StartDateTime = Datetime.now().addMonths(1);
    //         targetEvent.DurationInMinutes = 10;
    //         targetEvent.Location = 'testLocation';
    //         targetEvent.Activity_Type2__c = '病院';
    //         targetEvent.Task_ID__c = task.Id;

    //         insert targetEvent;

    //         ///apex/EventHandle?isEventDelay=true&Id=00U1m00000GRJwp
    //         PageReference page = new PageReference('/apex/EventHandle?isEventDelay=true&Id='+targetEvent.Id);
    //         System.Test.setCurrentPage(page);


    //         ApexPages.StandardController sc = new ApexPages.standardController( targetEvent);
    //         EventHandleController handle = new EventHandleController(sc);
    //         handle.init();
    //         handle.taskOption.delayReasonSelect__c = '与其他突发事件冲突';
    //         handle.save();


    //         User loginUser = [SELECT id , Job_Category__c from user where Id = :userInfo.getUserId()];
    //         loginUser.Job_Category__c = '销售服务';
    //         update loginUser;

    //         task__c task2 = new task__c();
    //         task2.taskDifferent__c = '主动任务';
    //         task2.taskStatus__c = '01 分配';
    //         task2.RecordTypeId = hospitalRec1.Id;
    //         task2.account__c =section.id;
    //         insert task2;


    //         Event targetEvent2 = new Event();
    //         targetEvent2.Subject = 'test';
    //         targetEvent2.StartDateTime = Datetime.now().addMonths(1);
    //         targetEvent2.DurationInMinutes = 10;
    //         targetEvent2.Location = 'testLocation';
    //         targetEvent2.Activity_Type2__c = '病院';
    //         targetEvent2.Task_ID__c = task2.Id;

    //         insert targetEvent2;

    //         PageReference page2 = new PageReference('/apex/EventHandle?isEventDelay=true&Id='+targetEvent.Id);
    //         System.Test.setCurrentPage(page2);
    //         ApexPages.StandardController sc2 = new ApexPages.standardController( targetEvent2);
    //         EventHandleController handle2 = new EventHandleController(sc2);
    //         handle2.init();
    //         handle2.taskOption.delayReasonSelectFSE__c = '医院设备不到位';
    //         handle2.save();
    //     }

    // }

    // //取消 并且 新建OPD计划取消延期对象
    static testMethod void testMethod2() {

        TaskEventReportOPD__c opdMapping = new TaskEventReportOPD__c(Name = 'TaskAndOPD_Cancel');
        opdMapping.From_Column_001__c = '订货推迟';
        opdMapping.SS_Column_001__c = '其他';
        opdMapping.From_Column_002__c = '与其他突发事件冲突';
        opdMapping.SS_Column_002__c = '工作计划修改';
        opdMapping.From_Column_003__c = '客户取消OPD';
        opdMapping.SS_Column_003__c = '医院取消试用';
        insert new TaskEventReportOPD__c[] {opdMapping}; 

        
        // レコードタイプ取得
        RecordType hospitalRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        RecordType sectionRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 消化科'];
        RecordType departmentRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        
        // 病院作成
        Account hospital = new Account();
        hospital.RecordTypeId = hospitalRec.Id;
        hospital.Name = 'TestHospital';
        insert hospital;
        
        // 病院を作ると戦略科室は、トリガーによって作られている
        // Account section = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
        Account section = [select Management_Code__c,  Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
        

        // 診療科1を作成
        Account depart1 = new Account();
        depart1.RecordTypeId = departmentRec.Id;
        depart1.Name = '*';
        depart1.Department_Name__c  = 'TestDepart';
        depart1.ParentId = section.Id;
        depart1.Department_Class__c = section.Id;
        depart1.Hospital__c = hospital.Id;
        depart1.AgentCode_Ext__c = '9999997';
        insert depart1;

       

        RecordType hospitalRec1 = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and Name = 'OPD'];
        
        task__c InitialTask = new task__c();
        InitialTask.taskDifferent__c = '主动任务';
        InitialTask.taskStatus__c = '05 延期';
        InitialTask.RecordTypeId = hospitalRec1.Id;
        InitialTask.account__c =section.id;
        insert InitialTask;

        task__c task = new task__c();
        task.taskDifferent__c = '主动任务';
        task.taskStatus__c = '01 分配';
        task.RecordTypeId = hospitalRec1.Id;
        task.account__c =section.id;
        task.Initial_Task__c = InitialTask.id;
        insert task;

        OPDPlan__c tempOPD = new OPDPlan__c();
        tempOPD.Status__c = '草案中';
        tempOPD.Account_Laboratory__c =depart1.Id;
        tempOPD.NoOpp_Reason__c = 'HCP对应';
        tempOPD.if_OPDTarget__c=1;
        tempOPD.if_HaveSalestarget__c =1;
        tempOPD.Cnt_OPD_ThisYear__c=1;
        tempOPD.Cnt_OPD_LastYear__c=1;
        tempOPD.if_HaveOpportunity__c=1;
        tempOPD.if_HaveEquipment__c =1;
        tempOPD.OPDType__c ='日报';
        tempOPD.Cnt_Rentals__c =1;
        tempOPD.PlanProdDetail__c ='CV-290*4; GI-290镜子*1; GI-290镜子CF*1;';   
        tempOPD.SkipValidationRulesAndWorkflows__c = true;
        insert tempOPD;


        Event targetEvent = new Event();
        targetEvent.Subject = 'test';
        targetEvent.StartDateTime = Datetime.now().addMonths(1);
        targetEvent.DurationInMinutes = 10;
        targetEvent.Location = 'testLocation';
        targetEvent.Activity_Type2__c = '病院';
        targetEvent.Task_ID__c = task.Id;
        targetEvent.OPD_Plan__c = tempOPD.Id;
        targetEvent.OPDPlan_Flag__c = true;

        insert targetEvent;


       PageReference page9 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page9);

        ApexPages.StandardController sc9 = new ApexPages.standardController( targetEvent);
        EventHandleController handle9 = new EventHandleController(sc9);
        handle9.init();
        handle9.taskOption.cancelReasonSelect__c = '订货推迟';
        handle9.taskOption.cancelReasonOther__c = 'Test';        
        handle9.save();

        targetEvent.Task_ID__c = null;

        update targetEvent;

        PageReference page10 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page10);

        ApexPages.StandardController sc10 = new ApexPages.standardController( targetEvent);
        EventHandleController handle10 = new EventHandleController(sc10);
        handle10.init();
        handle10.targetEvent.cancelReasonSelect__c = '其他';
        handle10.targetEvent.cancelReasonOther__c = 'Test';        
        handle10.save();

        PageReference page11 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page11);

        ApexPages.StandardController sc11 = new ApexPages.standardController( targetEvent);
        EventHandleController handle11 = new EventHandleController(sc11);
        handle10.init();
        handle10.targetEvent.cancelReasonSelect__c = '客户取消OPD';
        handle10.targetEvent.cancelReasonOther__c = 'Test';        
        handle10.save();

    }


 // //取消 并且 新建OPD计划取消延期对象
    static testMethod void testMethod22() {
        User user2 = new User();
        Profile p2 = [select Id from Profile where Name = '系统管理员'];
        user2.ProfileId = p2.Id;
        user2.FirstName = 'ユーザー2';
        user2.LastName = 'テスト2';
        user2.Email = 'test_user@example.com';
        user2.emailencodingkey='UTF-8';
        user2.languagelocalekey='zh_CN';
        user2.localesidkey='ja_JP';
        user2.timezonesidkey='Asia/Shanghai';
        user2.Username = 'test_user@example.com' + System.now().millisecond();
        user2.Alias = 'テユ2';
        user2.Job_Category__c = '销售服务';
        user2.CommunityNickname = 'tu' + System.now().millisecond();
        insert user2;


        // レコードタイプ取得
        RecordType hospitalRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        RecordType sectionRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 消化科'];
        RecordType departmentRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        
        System.runAs(user2){
        TaskEventReportOPD__c opdMapping = new TaskEventReportOPD__c(Name = 'TaskAndOPD_Cancel');
        opdMapping.From_Column_001__c = '订货推迟';
        opdMapping.SS_Column_001__c = '其他';
        opdMapping.From_Column_002__c = '与其他突发事件冲突';
        opdMapping.SS_Column_002__c = '工作计划修改';
        opdMapping.From_Column_003__c = '客户取消OPD';
        opdMapping.SS_Column_003__c = '医院取消试用';
        insert new TaskEventReportOPD__c[] {opdMapping}; 
        // 病院作成
        Account hospital = new Account();
        hospital.RecordTypeId = hospitalRec.Id;
        hospital.Name = 'TestHospital';
        insert hospital;
        
        // 病院を作ると戦略科室は、トリガーによって作られている
        // Account section = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
        Account section = [select Management_Code__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
        

        // 診療科1を作成
        Account depart1 = new Account();
        depart1.RecordTypeId = departmentRec.Id;
        depart1.Name = '*';
        depart1.Department_Name__c  = 'TestDepart';
        depart1.ParentId = section.Id;
        depart1.Department_Class__c = section.Id;
        depart1.Hospital__c = hospital.Id;
        depart1.AgentCode_Ext__c = '9999997';
        insert depart1;

       

        RecordType hospitalRec1 = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and Name = 'OPD'];
        
        task__c InitialTask = new task__c();
        InitialTask.taskDifferent__c = '主动任务';
        InitialTask.taskStatus__c = '05 延期';
        InitialTask.RecordTypeId = hospitalRec1.Id;
        InitialTask.account__c =section.id;
        insert InitialTask;

        task__c task = new task__c();
        task.taskDifferent__c = '主动任务';
        task.taskStatus__c = '01 分配';
        task.RecordTypeId = hospitalRec1.Id;
        task.account__c =section.id;
        task.Initial_Task__c = InitialTask.id;
        insert task;

        OPDPlan__c tempOPD = new OPDPlan__c();
        tempOPD.Status__c = '草案中';
        tempOPD.Account_Laboratory__c =depart1.Id;
        tempOPD.NoOpp_Reason__c = 'HCP对应';
        tempOPD.if_OPDTarget__c=1;
        tempOPD.if_HaveSalestarget__c =1;
        tempOPD.Cnt_OPD_ThisYear__c=1;
        tempOPD.Cnt_OPD_LastYear__c=1;
        tempOPD.if_HaveOpportunity__c=1;
        tempOPD.if_HaveEquipment__c =1;
        tempOPD.OPDType__c ='日报';
        tempOPD.Cnt_Rentals__c =1;
        tempOPD.PlanProdDetail__c ='CV-290*4; GI-290镜子*1; GI-290镜子CF*1;';   
        tempOPD.SkipValidationRulesAndWorkflows__c = true;
     
        insert tempOPD;


        Event targetEvent = new Event();
        targetEvent.Subject = 'test';
        targetEvent.StartDateTime = Datetime.now().addMonths(1);
        targetEvent.DurationInMinutes = 10;
        targetEvent.Location = 'testLocation';
        targetEvent.Activity_Type2__c = '病院';
        targetEvent.Task_ID__c = task.Id;
        targetEvent.OPD_Plan__c = tempOPD.Id;
        targetEvent.OPDPlan_Flag__c = true;

        insert targetEvent;


       PageReference page9 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page9);

        ApexPages.StandardController sc9 = new ApexPages.standardController( targetEvent);
        EventHandleController handle9 = new EventHandleController(sc9);
        handle9.init();
        handle9.taskOption.cancelReasonSelect__c = '订货推迟';
        handle9.taskOption.cancelReasonOther__c = 'Test';        
        handle9.save();

        targetEvent.Task_ID__c = null;

        update targetEvent;

        PageReference page10 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page10);

        ApexPages.StandardController sc10 = new ApexPages.standardController( targetEvent);
        EventHandleController handle10 = new EventHandleController(sc10);
        handle10.init();
        handle10.targetEvent.cancelReasonSelect__c = '其他';
        handle10.targetEvent.cancelReasonOther__c = 'Test';        
        handle10.save();

        PageReference page11 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page11);

        ApexPages.StandardController sc11 = new ApexPages.standardController( targetEvent);
        EventHandleController handle11 = new EventHandleController(sc11);
        handle10.init();
        handle10.targetEvent.cancelReasonSelect__c = '客户取消OPD';
        handle10.targetEvent.cancelReasonOther__c = 'Test';        
        handle10.save();
        }
    }


      static testMethod void testMethod222() {
        User user2 = new User();
        Profile p2 = [select Id from Profile where Name = '系统管理员'];
        user2.ProfileId = p2.Id;
        user2.FirstName = 'ユーザー2';
        user2.LastName = 'テスト2';
        user2.Email = 'test_user@example.com';
        user2.emailencodingkey='UTF-8';
        user2.languagelocalekey='zh_CN';
        user2.localesidkey='ja_JP';
        user2.timezonesidkey='Asia/Shanghai';
        user2.Username = 'test_user@example.com' + System.now().millisecond();
        user2.Alias = 'テユ2';
        user2.Job_Category__c = '销售市场';
        user2.CommunityNickname = 'tu' + System.now().millisecond();
        insert user2;


        // レコードタイプ取得
        RecordType hospitalRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        RecordType sectionRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 消化科'];
        RecordType departmentRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        
        System.runAs(user2){
        TaskEventReportOPD__c opdMapping = new TaskEventReportOPD__c(Name = 'TaskAndOPD_Cancel');
        opdMapping.From_Column_001__c = '订货推迟';
        opdMapping.SS_Column_001__c = '其他';
        opdMapping.From_Column_002__c = '与其他突发事件冲突';
        opdMapping.SS_Column_002__c = '工作计划修改';
        opdMapping.From_Column_003__c = '客户取消OPD';
        opdMapping.SS_Column_003__c = '医院取消试用';
        insert new TaskEventReportOPD__c[] {opdMapping}; 

       
        // 病院作成
        Account hospital = new Account();
        hospital.RecordTypeId = hospitalRec.Id;
        hospital.Name = 'TestHospital';
        insert hospital;
        
        // 病院を作ると戦略科室は、トリガーによって作られている
        // Account section = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
        Account section = [select Management_Code__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
        

        // 診療科1を作成
        Account depart1 = new Account();
        depart1.RecordTypeId = departmentRec.Id;
        depart1.Name = '*';
        depart1.Department_Name__c  = 'TestDepart';
        depart1.ParentId = section.Id;
        depart1.Department_Class__c = section.Id;
        depart1.Hospital__c = hospital.Id;
        depart1.AgentCode_Ext__c = '9999997';
        insert depart1;

       

        RecordType hospitalRec1 = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and Name = 'OPD'];
        
        task__c InitialTask = new task__c();
        InitialTask.taskDifferent__c = '主动任务';
        InitialTask.taskStatus__c = '05 延期';
        InitialTask.RecordTypeId = hospitalRec1.Id;
        InitialTask.account__c =section.id;
        insert InitialTask;

        task__c task = new task__c();
        task.taskDifferent__c = '主动任务';
        task.taskStatus__c = '01 分配';
        task.RecordTypeId = hospitalRec1.Id;
        task.account__c =section.id;
        task.Initial_Task__c = InitialTask.id;
        insert task;

        OPDPlan__c tempOPD = new OPDPlan__c();
        tempOPD.Status__c = '草案中';
        tempOPD.Account_Laboratory__c =depart1.Id;
        tempOPD.NoOpp_Reason__c = 'HCP对应';
        tempOPD.if_OPDTarget__c=1;
        tempOPD.if_HaveSalestarget__c =1;
        tempOPD.Cnt_OPD_ThisYear__c=1;
        tempOPD.Cnt_OPD_LastYear__c=1;
        tempOPD.if_HaveOpportunity__c=1;
        tempOPD.if_HaveEquipment__c =1;
        tempOPD.OPDType__c ='日报';
        tempOPD.Cnt_Rentals__c =1;
        tempOPD.PlanProdDetail__c ='CV-290*4; GI-290镜子*1; GI-290镜子CF*1;';   
        tempOPD.SkipValidationRulesAndWorkflows__c = true;
        insert tempOPD;


        Event targetEvent = new Event();
        targetEvent.Subject = 'test';
        targetEvent.StartDateTime = Datetime.now().addMonths(1);
        targetEvent.DurationInMinutes = 10;
        targetEvent.Location = 'testLocation';
        targetEvent.Activity_Type2__c = '病院';
        targetEvent.Task_ID__c = task.Id;
        targetEvent.OPD_Plan__c = tempOPD.Id;
        targetEvent.OPDPlan_Flag__c = true;

        insert targetEvent;


       PageReference page9 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page9);

        ApexPages.StandardController sc9 = new ApexPages.standardController( targetEvent);
        EventHandleController handle9 = new EventHandleController(sc9);
        handle9.init();
        handle9.taskOption.cancelReasonSelect__c = '订货推迟';
        handle9.taskOption.cancelReasonOther__c = 'Test';        
        handle9.save();

        targetEvent.Task_ID__c = null;

        update targetEvent;

        PageReference page10 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page10);

        ApexPages.StandardController sc10 = new ApexPages.standardController( targetEvent);
        EventHandleController handle10 = new EventHandleController(sc10);
        handle10.init();
        handle10.targetEvent.cancelReasonSelect__c = '其他';
        handle10.targetEvent.cancelReasonOther__c = 'Test';        
        handle10.save();

        PageReference page11 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page11);

        ApexPages.StandardController sc11 = new ApexPages.standardController( targetEvent);
        EventHandleController handle11 = new EventHandleController(sc11);
        handle10.init();
        handle10.targetEvent.cancelReasonSelect__c = '客户取消OPD';
        handle10.targetEvent.cancelReasonOther__c = 'Test';        
        handle10.save();
        }
    }

    //任务为空
    //延期
    static testMethod void testMethod3() {

        User user2 = new User();
        Profile p2 = [select Id from Profile where Name = '系统管理员'];
        user2.ProfileId = p2.Id;
        user2.FirstName = 'ユーザー2';
        user2.LastName = 'テスト2';
        user2.Email = 'test_user@example.com';
        user2.emailencodingkey='UTF-8';
        user2.languagelocalekey='zh_CN';
        user2.localesidkey='ja_JP';
        user2.timezonesidkey='Asia/Shanghai';
        user2.Username = 'test_user@example.com' + System.now().millisecond();
        user2.Alias = 'テユ2';
        user2.Job_Category__c = '销售服务';
        user2.CommunityNickname = 'tu' + System.now().millisecond();
        insert user2;


        // レコードタイプ取得
        RecordType hospitalRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        RecordType sectionRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 消化科'];
        RecordType departmentRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        
        System.runAs(user2){
            // 病院作成
            Account hospital = new Account();
            hospital.RecordTypeId = hospitalRec.Id;
            hospital.Name = 'TestHospital';
            insert hospital;
            
            // 病院を作ると戦略科室は、トリガーによって作られている
            // Account section = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
            Account section = [select Management_Code__c,  Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
            

            RecordType hospitalRec1 = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and Name = 'OPD'];

            Event targetEvent = new Event();
            targetEvent.Subject = 'test';
            targetEvent.StartDateTime = Datetime.now().addMonths(1);
            targetEvent.DurationInMinutes = 10;
            targetEvent.Location = 'testLocation';
            targetEvent.Activity_Type2__c = '病院';

            insert targetEvent;

            ///apex/EventHandle?isEventDelay=true&Id=00U1m00000GRJwp
            PageReference page = new PageReference('/apex/EventHandle?isEventDelay=true&Id='+targetEvent.Id);
            System.Test.setCurrentPage(page);


            ApexPages.StandardController sc = new ApexPages.standardController( targetEvent);
            EventHandleController handle = new EventHandleController(sc);
            handle.init();
            handle.targetEvent.delayReasonSelect__c = '客户时间变更或冲突';
            handle.save();


            User loginUser = [SELECT id , Job_Category__c from user where Id = :userInfo.getUserId()];
            loginUser.Job_Category__c = '销售服务';
            update loginUser;

        
            Event targetEvent2 = new Event();
            targetEvent2.Subject = 'test';
            targetEvent2.StartDateTime = Datetime.now().addMonths(1);
            targetEvent2.DurationInMinutes = 10;
            targetEvent2.Location = 'testLocation';
            targetEvent2.Activity_Type2__c = '病院';

            insert targetEvent2;


            PageReference page2 = new PageReference('/apex/EventHandle?isEventDelay=true&Id='+targetEvent.Id);
            System.Test.setCurrentPage(page2);
            ApexPages.StandardController sc2 = new ApexPages.standardController( targetEvent2);
            EventHandleController handle2 = new EventHandleController(sc2);
            handle2.init();
            handle2.targetEvent.delayReasonSelectFSE__c = '医院时间问题';
            handle2.save();

             PageReference page22 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
            System.Test.setCurrentPage(page22);
            ApexPages.StandardController sc22 = new ApexPages.standardController( targetEvent2);
            EventHandleController handle22 = new EventHandleController(sc2);
            handle22.init();
            handle22.targetEvent.delayReasonSelectFSE__c = '医院时间问题';
            handle22.save();
        }

    }
    //取消
    static testMethod void testMethod4() {
        // レコードタイプ取得
        RecordType hospitalRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '病院'];
        RecordType sectionRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '戦略科室分類 消化科'];
        RecordType departmentRec = [select Id from RecordType where IsActive = true and SobjectType = 'Account' and Name = '診療科 消化科'];
        
        // 病院作成
        Account hospital = new Account();
        hospital.RecordTypeId = hospitalRec.Id;
        hospital.Name = 'TestHospital';
        insert hospital;
        
        // 病院を作ると戦略科室は、トリガーによって作られている
        // Account section = [select Management_Code__c, Management_Code_Auto__c, Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
        Account section = [select Management_Code__c,  Name, Id from Account where Parent.Id = :hospital.Id and RecordTypeId = :sectionRec.Id limit 1];
        

        // 診療科1を作成
        Account depart1 = new Account();
        depart1.RecordTypeId = departmentRec.Id;
        depart1.Name = '*';
        depart1.Department_Name__c  = 'TestDepart';
        depart1.ParentId = section.Id;
        depart1.Department_Class__c = section.Id;
        depart1.Hospital__c = hospital.Id;
        depart1.AgentCode_Ext__c = '9999997';
        insert depart1;
       

        RecordType hospitalRec1 = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and Name = 'OPD'];

        OPDPlan__c tempOPD = new OPDPlan__c();
        tempOPD.Status__c = '草案中';
        tempOPD.Account_Laboratory__c =depart1.Id;
        tempOPD.NoOpp_Reason__c = 'HCP对应';
        tempOPD.if_OPDTarget__c=1;
        tempOPD.if_HaveSalestarget__c =1;
        tempOPD.Cnt_OPD_ThisYear__c=1;
        tempOPD.Cnt_OPD_LastYear__c=1;
        tempOPD.if_HaveOpportunity__c=1;
        tempOPD.if_HaveEquipment__c =1;
        tempOPD.Cnt_Rentals__c =1;
        tempOPD.OPDType__c ='日报';
        tempOPD.PlanProdDetail__c ='CV-290*4; GI-290镜子*1; GI-290镜子CF*1;';          
        tempOPD.SkipValidationRulesAndWorkflows__c = true;
        insert tempOPD;


        Event targetEvent = new Event();
        targetEvent.Subject = 'test';
        targetEvent.StartDateTime = Datetime.now().addMonths(1);
        targetEvent.DurationInMinutes = 10;
        targetEvent.Location = 'testLocation';
        targetEvent.Activity_Type2__c = '病院';
        targetEvent.OPD_Plan__c = tempOPD.Id;
        targetEvent.OPDPlan_Flag__c = true;

        insert targetEvent;


       PageReference page9 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page9);

        ApexPages.StandardController sc9 = new ApexPages.standardController( targetEvent);
        EventHandleController handle9 = new EventHandleController(sc9);
        handle9.init();
        handle9.targetEvent.cancelReasonSelect__c = '订货推迟';
        handle9.targetEvent.cancelReasonOther__c = 'Test';        
        handle9.save();

        targetEvent.Task_ID__c = null;

        update targetEvent;

        PageReference page10 = new PageReference('/apex/EventHandle?isEventCancel=true&Id='+targetEvent.Id);
        System.Test.setCurrentPage(page10);

        ApexPages.StandardController sc10 = new ApexPages.standardController( targetEvent);
        EventHandleController handle10 = new EventHandleController(sc10);
        handle10.init();
        handle10.targetEvent.cancelReasonSelect__c = '其他';
        handle10.targetEvent.cancelReasonOther__c = 'Test';        
        handle10.save();


    }

}