高章伟
2023-03-03 d8dc84a3d56df839895f1c417a4d9cbee763d262
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;
@@ -1845,6 +1856,11 @@
                                    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;
@@ -1853,9 +1869,10 @@
                        Datetime endTime = Datetime.now();
                        Date endDate = Date.today();
                        // 审批时间是非奥林巴斯工作日  
                        if(ocList[0].IsWorkDay__c == 0){
                        // if(ocList[0].IsWorkDay__c == 0){
                        if(ocMap.get(startDate) == '0'){
                            for(OlympusCalendar__c oc:ocList){
                                if(oc.IsWorkDay__c == 1){
                                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;
@@ -1865,7 +1882,7 @@
                        }
                        // 发货时间是非奥林巴斯工作日
                        if(ocList[ocList.size() - 1].IsWorkDay__c == 0){
                            for(Integer i = ocList.size() - 1; i <= 0;i--){
                            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);
@@ -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;}