高章伟
2023-03-02 e3c02c03dd2de442bbced87236f60a13a1cd154e
force-app/main/default/classes/RentalFixtureSetAssignAgencyController.cls
@@ -50,7 +50,7 @@
                         + ', Equipment_Type_F__c' //20210508 LJH ADD 1672
                         + ', Wei_Assigned_Cnt__c' // 20210624 ljh add SFDC-C448GR start
                         + ', Campaign__r.IF_Approved__c' // 20220315 ljh add
                         + ', Campaign__r.Meeting_Approved_No__c' // 20220315 ljh add
                         + ', Campaign__r.Meeting_Approved_No__r.Name' // 20220315 ljh add
                         + ', Campaign__r.Approved_Status__c' // 20220315 ljh add 
                         + ' FROM Rental_Apply__c'
                         + ' WHERE Id=\'' + taId + '\'';
@@ -455,8 +455,18 @@
             WHERE id =:taId
        ];
        for (Rental_Apply__c RaTar : RaTarList) {
            if( RaTar.Campaign__r.Status == '取消'){
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '学会已取消,不能继续操作了'));
            // 20230215 ljh DB202301265636 学会取消申请也拦截 start
            // if( RaTar.Campaign__r.Status == '取消'){
            //     ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '学会已取消,不能继续操作了'));
            if( RaTar.Campaign__r.Status == '取消' || RaTar.Campaign__r.Status == '取消申请中' ){
                String tempS = '';
                if(RaTar.Campaign__r.Status == '取消'){
                    tempS = '已取消';
                }else{
                    tempS = '申请取消中';
                }
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '学会'+tempS+',不能继续操作了'));
            // 20230215 ljh DB202301265636 学会取消申请也拦截 end
                return false;
            }
            // else if(RaTar.Repair__r.Repair_Final_Inspection_Date__c != null){
@@ -617,17 +627,8 @@
                            robj.Cancel_Select__c = false; 
                            robj.Cancel_Reason__c = '';
                            robj.Rental_Start_Date__c = RentalStartDateMap.containsKey(esd.tempOldRaesIdSub)?RentalStartDateMap.get(esd.tempOldRaesIdSub):craes.Rental_Start_Date__c ;
                            switch on parentObj.demo_purpose2__c{
                                when '试用(无询价)','试用(有询价)','新产品评价','其他','协议借用' {
                                    robj.Rental_End_Date__c = robj.Rental_Start_Date__c + intValueOf(parentObj.Hope_Lonaer_date_Num__c);
                                }
                                when '一般用户','保修用户','市场多年保修','再修理','索赔QIS','已购待货','故障排查' {
                                    robj.Rental_End_Date__c = robj.Rental_Start_Date__c + 30;
                                }
                                when '学会展会' {
                                    robj.Rental_End_Date__c = parentObj.Campaign_EndDate_F__c + 5;
                                }
                            }
                            robj.Rental_End_Date__c = setRentalEndDate(robj.Rental_Start_Date__c, parentObj);
                            //robj.Rental_End_Date__c  = robj.Rental_Start_Date__c + Integer.valueOf(craes.Test_Day__c);
                            // 新记录 Canceled__c & Canceled_Id__c 为选中一览的Id
                            robj.Canceled__c = craes.canDelete__c?craes.Canceled__c:craes.Id;
@@ -1709,6 +1710,7 @@
        if(!isRaStatusOK()) {
            return;
        }
        Id userId =  Userinfo.getUserId(); // 20210624 ljh add SFDC-C448GR
        Datetime now = System.now();
        if(isSameCity) {
@@ -1738,7 +1740,16 @@
                    if(raesd.Is_Body__c) {
                        mainIdList.add(raesd.Asset__c);
                        raesIdSet.add(esd.rec.Rental_Apply_Equipment_Set__c);
                        // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 start
                        // 备品预计出库日应该等于今天,否则不能发货
                        if( esd.rec.Rental_Apply_Equipment_Set__r.Rental_Start_Date__c != Date.today() ){
                            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '备品预计出货日应该等于今天,否则不能发货!'));
                            return;
                        }
                        // add lc 20220927 SFDC-CJ48VE 备品预计出库日逻辑调整 end
                    }
                    // 分配时临时取消的在发货后彻底取消
                    if(raesd.AgencyTempCancel__c) {
                        raesd.Cancel_Select__c = true;
@@ -1786,15 +1797,15 @@
                    // 发货前检测时间和检测人在trigger里设
                    raesd.Shippment_loaner_time__c = now;
                    // 20220309 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 start
                    // Datetime keyDt = raesd.Add_Request_approval_time__c != null?raesd.Add_Request_approval_time__c:raesd.Rental_Apply__r.Request_approval_time__c;
                    // List<Rental_Apply_Equipment_Set_Detail__c> tempRaesdL;
                    // if(approvalMap.containsKey(keyDt)){
                    //     tempRaesdL = approvalMap.get(keyDt);
                    // }else{
                    //     tempRaesdL = new List<Rental_Apply_Equipment_Set_Detail__c>();
                    // }
                    // tempRaesdL.add(raesd);
                    // approvalMap.put(keyDt,tempRaesdL);
                    Datetime keyDt = raesd.Add_Request_approval_time__c != null?raesd.Add_Request_approval_time__c:raesd.Rental_Apply__r.Request_approval_time__c;
                    List<Rental_Apply_Equipment_Set_Detail__c> tempRaesdL;
                    if(approvalMap.containsKey(keyDt)){
                        tempRaesdL = approvalMap.get(keyDt);
                    }else{
                        tempRaesdL = new List<Rental_Apply_Equipment_Set_Detail__c>();
                    }
                    tempRaesdL.add(raesd);
                    approvalMap.put(keyDt,tempRaesdL);
                    // 20220309 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 end  
                    updateRaesdList.add(raesd);
                }
@@ -1835,69 +1846,75 @@
                slip.Shippment_loaner_time__c = now;
                FixtureUtil.withoutUpsertObjects(new List<FixtureDeliverySlip__c> {slip});
                // 20220309 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 start
                // map<String,Decimal> ApplyToShipmentMap = new map<String,Decimal>();
                // if(approvalMap.size() > 0 ){
                //     // dtList[0] 第一个就是最小时间
                //     List<Datetime> dtList = new List<Datetime>(approvalMap.keySet());
                //     Date startDateSOQL  = date.newinstance(dtList[0].year(), dtList[0].month(), dtList[0].day());
                //     List<OlympusCalendar__c> ocList = [SELECT Id, Date__c,IsWorkDay__c
                //                      FROM OlympusCalendar__c
                //                     WHERE Date__c >= :startDateSOQL
                //                       AND Date__c <= :Date.today()
                //                     ORDER BY Date__c ASC];
                //     for(Datetime dt:dtList){
                //         Boolean startFlag = false;
                //         Boolean endFlag = false;
                //         Datetime startTime = dt;
                //         Date startDate = Date.newInstance(startTime.year(),startTime.month(),startTime.day());
                //         Datetime endTime = Datetime.now();
                //         Date endDate = Date.today();
                //         // 审批时间是非奥林巴斯工作日
                //         if(ocList[0].IsWorkDay__c == 0){
                //             for(OlympusCalendar__c oc:ocList){
                //                 if(oc.IsWorkDay__c == 1){
                //                     startTime = Datetime.newInstance(oc.Date__c.year(),oc.Date__c.month(),oc.Date__c.day(),0,0,0);
                //                     startDate = oc.Date__c;
                //                     startFlag = true;
                //                     break;
                //                 }
                //             }
                //         }
                //         // 发货时间是非奥林巴斯工作日
                //         if(ocList[ocList.size() - 1].IsWorkDay__c == 0){
                //             for(Integer i = ocList.size() - 1; i <= 0;i--){
                //                 if(ocList[i].IsWorkDay__c == 1){
                //                     endTime = Datetime.newInstance(ocList[i].Date__c.addDays(1).year(),ocList[i].Date__c.addDays(1).month(),ocList[i].Date__c.addDays(1).day(),0,0,0);
                //                     endDate = ocList[i].Date__c.addDays(1);
                //                     endFlag = true;
                //                     break;
                //                 }
                //             }
                //         }
                //         Decimal timeDifLast;
                //         if(ocList[0].IsWorkDay__c == 0 && ocList[ocList.size() - 1].IsWorkDay__c == 0 && !startFlag && !endFlag){
                //             timeDifLast = 0;
                //         }else{
                //             Long startL = startTime.getTime();
                //             Long tendL = endTime.getTime();
                //             Long timeDif = tendL - startL;
                //             Decimal time11 = timeDif*1.00;
                //             Decimal time12 = 24*3600*1000*1.00;
                //             timeDifLast = time11/time12;
                //             Integer tempWeek = 0;
                //             for(OlympusCalendar__c oc:ocList){
                //                 if(oc.IsWorkDay__c == 0 && startDate < oc.Date__c && oc.Date__c < endDate){
                //                     tempWeek++;
                //                 }
                //             }
                //             timeDifLast = timeDifLast - tempWeek;
                //         }
                //         // dtestLast 四舍五入 保留1位小数
                //         for(Rental_Apply_Equipment_Set_Detail__c raesd00:approvalMap.get(dt)){
                //             ApplyToShipmentMap.put(raesd00.Id,timeDifLast.setScale(1));
                //         }
                //     }
                // }
                map<String,Decimal> ApplyToShipmentMap = new map<String,Decimal>();
                if(approvalMap.size() > 0 ){
                    // dtList[0] 第一个就是最小时间
                    List<Datetime> dtList = new List<Datetime>(approvalMap.keySet());
                    Date startDateSOQL  = date.newinstance(dtList[0].year(), dtList[0].month(), dtList[0].day());
                    List<OlympusCalendar__c> ocList = [SELECT Id, Date__c,IsWorkDay__c
                                     FROM OlympusCalendar__c
                                    WHERE Date__c >= :startDateSOQL
                                      AND Date__c <= :Date.today()
                                    ORDER BY Date__c ASC];
                    Map<Date,String> ocMap = new Map<Date,String>();
                    for(OlympusCalendar__c oc:ocList){
                        String IsWorkDay = oc.IsWorkDay__c.format();
                        ocMap.put(oc.Date__c,IsWorkDay);
                    }
                    for(Datetime dt:dtList){
                        Boolean startFlag = false;
                        Boolean endFlag = false;
                        Datetime startTime = dt;
                        Date startDate = Date.newInstance(startTime.year(),startTime.month(),startTime.day());
                        Datetime endTime = Datetime.now();
                        Date endDate = Date.today();
                        // 审批时间是非奥林巴斯工作日
                        // if(ocList[0].IsWorkDay__c == 0){
                        if(ocMap.get(startDate) == '0'){
                            for(OlympusCalendar__c oc:ocList){
                                if(startDate < oc.Date__c && oc.IsWorkDay__c == 1){
                                    startTime = Datetime.newInstance(oc.Date__c.year(),oc.Date__c.month(),oc.Date__c.day(),0,0,0);
                                    startDate = oc.Date__c;
                                    startFlag = true;
                                    break;
                                }
                            }
                        }
                        // 发货时间是非奥林巴斯工作日
                        if(ocList[ocList.size() - 1].IsWorkDay__c == 0){
                            for(Integer i = ocList.size() - 1; i >= 0;i--){
                                if(ocList[i].IsWorkDay__c == 1){
                                    endTime = Datetime.newInstance(ocList[i].Date__c.addDays(1).year(),ocList[i].Date__c.addDays(1).month(),ocList[i].Date__c.addDays(1).day(),0,0,0);
                                    endDate = ocList[i].Date__c.addDays(1);
                                    endFlag = true;
                                    break;
                                }
                            }
                        }
                        Decimal timeDifLast;
                        if(ocList[0].IsWorkDay__c == 0 && ocList[ocList.size() - 1].IsWorkDay__c == 0 && !startFlag && !endFlag){
                            timeDifLast = 0;
                        }else{
                            Long startL = startTime.getTime();
                            Long tendL = endTime.getTime();
                            Long timeDif = tendL - startL;
                            Decimal time11 = timeDif*1.00;
                            Decimal time12 = 24*3600*1000*1.00;
                            timeDifLast = time11/time12;
                            Integer tempWeek = 0;
                            for(OlympusCalendar__c oc:ocList){
                                if(oc.IsWorkDay__c == 0 && startDate < oc.Date__c && oc.Date__c < endDate){
                                    tempWeek++;
                                }
                            }
                            timeDifLast = timeDifLast - tempWeek;
                        }
                        // dtestLast 四舍五入 保留1位小数
                        for(Rental_Apply_Equipment_Set_Detail__c raesd00:approvalMap.get(dt)){
                            ApplyToShipmentMap.put(raesd00.Id,timeDifLast.setScale(1));
                        }
                    }
                }
                // 20220309 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 end 
                // 明细和申请连到发货单上
                for(Rental_Apply_Equipment_Set_Detail__c raesd: updateRaesdList) {
@@ -1905,9 +1922,9 @@
                        raesd.DeliverySlip__c = slip.Id;
                    }
                    // 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 start
                    // if(ApplyToShipmentMap.containsKey(raesd.Id)){
                    //     raesd.ApplyToShipmentWorkTime__c = ApplyToShipmentMap.get(raesd.Id);
                    // }
                    if(ApplyToShipmentMap.containsKey(raesd.Id)){
                        raesd.ApplyToShipmentWorkTime__c = ApplyToShipmentMap.get(raesd.Id);
                    }
                    // 20220315 ljh SFDC-CC6CLJ phase5上线课题131 提交申请到备品出库时长 end
                }
                FixtureUtil.withoutUpdate(updateRaesdList);
@@ -1927,7 +1944,7 @@
                if (String.isNotBlank(parentObj.Campaign__c) && parentObj.Campaign__r.IF_Approved__c){
                    // ra.ApprovedNo_Delivery__c = parentObj.Campaign__r.Meeting_Approved_No__r.MeetingApprovedNo__c;
                    // ra.Approved_State_Delivery__c = parentObj.Campaign__r.Meeting_Approved_No__r.ProcessState__c;
                    ra.ApprovedNo_Delivery__c = parentObj.Campaign__r.Meeting_Approved_No__c;
                    ra.ApprovedNo_Delivery__c = parentObj.Campaign__r.Meeting_Approved_No__r.Name;
                    ra.Approved_State_Delivery__c = parentObj.Campaign__r.Approved_Status__c;
                }
                FixtureUtil.withoutUpdate(new List<Rental_Apply__c> {ra});
@@ -1935,8 +1952,9 @@
            // 同城时自动收货
            if(isSameCity && !raesIdSet.isEmpty()) {
                List<Rental_Apply_Equipment_Set__c> raesList = new List<Rental_Apply_Equipment_Set__c>();
                Date rentalEndDate = setRentalEndDate(Date.today(), parentObj);
                for(Id raesId:raesIdSet) {
                    raesList.add(new Rental_Apply_Equipment_Set__c(Id=raesId, Received_Confirm__c = 'OK'));
                    raesList.add(new Rental_Apply_Equipment_Set__c(Id=raesId, Received_Confirm__c = 'OK', Rental_Start_Date__c = Date.today(), Rental_End_Date__c = rentalEndDate));
                }
                FixtureUtil.withoutUpdate(raesList);
            }
@@ -1956,6 +1974,24 @@
        }
    }
    public Date setRentalEndDate(Date startDate, Rental_Apply__c rentalApplyObj) {
        Date endDate = null;
        switch on rentalApplyObj.demo_purpose2__c{
            when '试用(无询价)','试用(有询价)','新产品评价','其他','协议借用' {
                endDate = startDate + intValueOf(rentalApplyObj.Hope_Lonaer_date_Num__c);
            }
            when '一般用户','保修用户','市场多年保修','再修理','索赔QIS','已购待货','故障排查' {
                endDate = startDate + 30;
            }
            when '学会展会' {
                endDate = rentalApplyObj.Campaign_EndDate_F__c + 5;
            }
        }
        return endDate;
    }
    public class EsdInfo {
        public Rental_Apply_Equipment_Set_Detail__c rec { get; set; }
        public Boolean checked {get;set;}