buli
2023-03-30 cb7617f2a39f5622bb0c6d21aac6d897497ab389
force-app/main/default/classes/AccessorySelectController.cls
@@ -55,13 +55,30 @@
    public override List<String> getColumnFieldList() {
        // strColumus 里加 field
        // FixtureUtil#raesdGroupBy()の項目も必要
        return new List<String>{'Id', 'Rental_Apply_Equipment_Set__c', 'FSD_Id__c', 'Select_Time__c', 'Fixture_Model_No_F__c',
                'IndexFromUniqueKey__c', 'FSD_Fixture_Model_No__c', 'Is_Body_F__c', 'SalesProvince__c', 'OneToOne_Flag__c',
                'Rental_Apply__c', 'Rental_Apply__r.Salesdepartment__c', 'DeliverySlip__c', 'Is_Body__c',
                'Rental_Apply__r.Equipment_Type_F__c', 'Rental_Apply__r.Internal_asset_location_F__c',
                'Rental_Apply__r.Salesdept__c', 'Rental_Apply__r.Product_category__c',
                'Rental_Apply__r.demo_purpose2__c','Rental_Apply__r.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c',
                'Rental_Apply__r.next_action__c','Rental_Apply__r.QIS_number__r.ReplaceDeliveryDate__c'};
        return new List<String>{
            'Id',
            'Rental_Apply_Equipment_Set__c',
            'FSD_Id__c',
            'Select_Time__c',
            'Fixture_Model_No_F__c',
            'IndexFromUniqueKey__c',
            'FSD_Fixture_Model_No__c',
            'Is_Body_F__c',
            'SalesProvince__c',
            'OneToOne_Flag__c',
            'Rental_Apply__c',
            'Rental_Apply__r.Salesdepartment__c',
            'DeliverySlip__c',
            'Is_Body__c',
            'Rental_Apply__r.Equipment_Type_F__c',
            'Rental_Apply__r.Internal_asset_location_F__c',
            'Rental_Apply__r.Salesdept__c',
            'Rental_Apply__r.Product_category__c',
            'Rental_Apply__r.demo_purpose2__c',
            'Rental_Apply__r.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c',
            'Rental_Apply__r.next_action__c',
            'Rental_Apply__r.QIS_number__r.ReplaceDeliveryDate__c'
        };
    }
    // 画面里直接可以输入的項目 List
    public override List<String> getWritableColumnFieldList() {
@@ -83,7 +100,6 @@
    public override String getSqlWhereStr() {
        sqlWhereStr = '';
        return sqlWhereStr;
    }
    public override Boolean getIsNeedRunSearch() {
@@ -94,7 +110,6 @@
    public String goAccessoryAdd { get; set; }
    /*****************検索用******************/
    /*****************ソート時再検索条件(画面からの入力条件を無視するため)******************/
@@ -118,7 +133,6 @@
    // public String bieBiePinFenLei { get; set; }  //别备品分类
    // #OLY_OCM-654 End
    public Rental_Apply_Equipment_Set_Detail__c pageRaesd {get; set;}
    public AccessorySelectController() {
        Integer i = 0;
@@ -572,7 +586,9 @@
        //借出备品一览の情報を取得
        if (!String.isBlank(this.parentId)) {
            List<Rental_Apply_Equipment_Set__c> parentObjs = [
                    SELECT Id, Rental_Apply__r.Name,
                SELECT
                    Id,
                    Rental_Apply__r.Name,
                           Rental_Apply__r.Owner.Name,
                           Rental_Apply__r.Salesdept__c,
                           Rental_Apply__r.WorkPlace__c,
@@ -593,31 +609,41 @@
                           Rental_End_Date__c,
                           Irreplaceable_flag__c,
                           RequestNoJoinStr2__c,
                           First_RAESD__c, First_RAESD__r.Is_Body__c
                    First_RAESD__c,
                    First_RAESD__r.Is_Body__c
                    FROM Rental_Apply_Equipment_Set__c
                    where Id = :parentId];
                WHERE Id = :parentId
            ];
            if(parentObjs.size()>0){
                parentObj = parentObjs.get(0);
                String rsdid=System.label.Rental_Apply_id;
                List<Rental_Apply_Equipment_Set_Detail__c> raesdObjs = [
                    SELECT Id, Rental_Apply_Equipment_Set__c,
                    SELECT
                        Id,
                        Rental_Apply_Equipment_Set__c,
                           Cancel_Reason__c, // 20210817 ljh  SFDC-C448KZ add
                           Loaner_cancel_reason__c,// 20210817 ljh  SFDC-C448KZ add
                           Loaner_cancel_Remarks__c// 20210817 ljh  SFDC-C448KZ add 
                     FROM Rental_Apply_Equipment_Set_Detail__c
                    WHERE Rental_Apply__c =:rsdid limit 1];
                    WHERE Rental_Apply__c = :rsdid
                    LIMIT 1
                ];
            if (!raesdObjs.isEmpty()) {
                sonObj = raesdObjs[0];
            }
                // 主体 or 第一条
                List<Rental_Apply_Equipment_Set_Detail__c> bodyObjs = [
                    SELECT Id, Internal_asset_location_before__c, Salesdepartment_before__c,
                     Product_category_text__c, Equipment_Type_text__c, Select_Time__c
                    SELECT
                        Id,
                        Internal_asset_location_before__c,
                        Salesdepartment_before__c,
                        Product_category_text__c,
                        Equipment_Type_text__c,
                        Select_Time__c
                     FROM Rental_Apply_Equipment_Set_Detail__c
                    WHERE Rental_Apply_Equipment_Set__c = :parentId
                      and Id =: parentObj.First_RAESD__c
                      and Cancel_Select__c = false];
                    WHERE Rental_Apply_Equipment_Set__c = :parentId AND Id = :parentObj.First_RAESD__c AND Cancel_Select__c = FALSE
                ];
                if (!bodyObjs.isEmpty()) {
                    if (bodyObjs[0].Select_Time__c != null) {
                        bieCunFangDi = bodyObjs[0].Internal_asset_location_before__c;
@@ -642,7 +668,6 @@
                    throw new ControllerUtil.myException('不能明确存放地, 请确认数据。');
                }
            }
        }
        // 20210817 ljh SFDC-C448KZ update end
    }
@@ -667,26 +692,20 @@
            bieBenBu = '';
        }
        // #OLY_OCM-654 保有设备合并后,取出的第一条一览明细的本部可能为空,所以biebenbu为空时,也要添加检索条件 End
    }
    //别存放地 SelectOption
    public List<SelectOption> getbieCunFangDiOps() {
        return new List<SelectOption>{
            new SelectOption(bieCunFangDi, bieCunFangDi)
        };
        return new List<SelectOption>{ new SelectOption(bieCunFangDi, bieCunFangDi) };
    }
    // #OLY_OCM-654 别本部 页面没有检索所以不改 SelectOption
    public List<SelectOption> getbieBenBuOps() {
        return new List<SelectOption>{
            new SelectOption(bieBenBu, bieBenBu)
        };
        return new List<SelectOption>{ new SelectOption(bieBenBu, bieBenBu) };
        // return FixtureUtil.bieBenBuOpsMap.get('本部');
    }
    private void searchOppSetParam() {
    }
    public PageReference searchOpp() {
@@ -730,7 +749,9 @@
                Rental_Apply_Equipment_Set_Detail__c robj = (Rental_Apply_Equipment_Set_Detail__c) wprInfo.sobj;
                // 状态只有是可以分配时才会保存
                if (FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Ke_Yi_Fen_Pei.ordinal()) == robj.Fu_Shu_Pin_Fen_Pei_Jia__c
                if (
                    FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Ke_Yi_Fen_Pei.ordinal()) ==
                    robj.Fu_Shu_Pin_Fen_Pei_Jia__c
                ) {
                    if (!String.isBlank(robj.Asset__c)) {
                        assetIdList.add(robj.Asset__c);
@@ -742,15 +763,20 @@
            if (assetIdList.size() > 0) {
                //20170906 upsert by UniqueKey__c
                List<Rental_Apply_Equipment_Set_Detail__c> mfUpsert = new List<Rental_Apply_Equipment_Set_Detail__c>();
                Map<Id, Asset> aSetMap = new Map<Id, Asset>([
                        Select Id, Quantity,
                Map<Id, Asset> aSetMap = new Map<Id, Asset>(
                    [
                        SELECT
                            Id,
                            Quantity,
                                Out_of_wh__c,
                                Manage_type__c,
                                Ji_Zhong_Guan_Li_Ku_Cun__c, // 20220118 ljh SFDC-C9V84U start
                                Last_Reserve_RAES_Detail__c
                        From Asset
                        where Id = :assetIdList
                        for Update]);
                        FROM Asset
                        WHERE Id = :assetIdList
                        FOR UPDATE
                    ]
                );
                Map<Id, Asset> assetUpdateMap = new Map<Id, Asset>();
                // 状态只有是可以分配时才会保存
@@ -761,15 +787,24 @@
                    }
                    Rental_Apply_Equipment_Set_Detail__c robj = (Rental_Apply_Equipment_Set_Detail__c) wprInfo.sobj;
                    //1822 yc 20211021 已购待货目的,新品已有发货日不能出库 start
                     if(robj.Rental_Apply__r.demo_purpose2__c=='已购待货' && robj.Rental_Apply__r.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c!= null){
                    if (
                        robj.Rental_Apply__r.demo_purpose2__c == '已购待货' &&
                        robj.Rental_Apply__r.Follow_UP_Opp__r.Shipping_Finished_Day_Func__c != null
                    ) {
                        throw new ControllerUtil.myException('已购待货目的,新品已有发货日,不能继续了');
                     }
                     if(robj.Rental_Apply__r.demo_purpose2__c=='索赔QIS' && robj.Rental_Apply__r.next_action__c=='无偿更换' && robj.Rental_Apply__r.QIS_number__r.ReplaceDeliveryDate__c!= null){
                    if (
                        robj.Rental_Apply__r.demo_purpose2__c == '索赔QIS' &&
                        robj.Rental_Apply__r.next_action__c == '无偿更换' &&
                        robj.Rental_Apply__r.QIS_number__r.ReplaceDeliveryDate__c != null
                    ) {
                        throw new ControllerUtil.myException('索赔QIS目的,QIS已有新品发货日,不能继续了');
                     }
                     //1822 yc 20211021 已购待货目的,新品已有发货日不能出库 end
                    // 可以分配の場合 (Asset__c 从 null 到 有值)
                    if (FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Ke_Yi_Fen_Pei.ordinal()) == robj.Fu_Shu_Pin_Fen_Pei_Jia__c
                    if (
                        FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Ke_Yi_Fen_Pei.ordinal()) ==
                        robj.Fu_Shu_Pin_Fen_Pei_Jia__c
                    ) {
                        Asset aSet = aSetMap.get(robj.Asset__c);
                        // 不能lock到数据的时候
@@ -799,8 +834,14 @@
                            //assetUpdateMap.put(aSet.Id, aSet);
                        }
                        String uniqueKeyStr = parentObj.RequestNoJoinStr2__c + ':'+ robj.Rental_Apply_Equipment_Set__c
                                + ':' + robj.FSD_Id__c + ':' + robj.IndexFromUniqueKey__c;
                        String uniqueKeyStr =
                            parentObj.RequestNoJoinStr2__c +
                            ':' +
                            robj.Rental_Apply_Equipment_Set__c +
                            ':' +
                            robj.FSD_Id__c +
                            ':' +
                            robj.IndexFromUniqueKey__c;
                        robj.UniqueKey__c = uniqueKeyStr;
@@ -848,7 +889,6 @@
    *@return PageReference 刷新附属品选择页面
    */
    public PageReference unassign(){
        Savepoint sp = Database.setSavepoint();
        try {
@@ -865,28 +905,26 @@
            }
            // 加lock
            Map<Id,Rental_Apply_Equipment_Set_Detail__c> raesdMap = new Map<Id,Rental_Apply_Equipment_Set_Detail__c>([
                    SELECT Id
                         , Asset__c
                         , Select_Time__c
                         , StockDown_time__c
                         , Cancel_Date__c
                         , Fixture_OneToOne_Link_Id__c
            Map<Id, Rental_Apply_Equipment_Set_Detail__c> raesdMap = new Map<Id, Rental_Apply_Equipment_Set_Detail__c>(
                [
                    SELECT Id, Asset__c, Select_Time__c, StockDown_time__c, Cancel_Date__c, Fixture_OneToOne_Link_Id__c
                      FROM Rental_Apply_Equipment_Set_Detail__c
                     WHERE Id in :raesdIdList
                       FOR UPDATE]);
                    WHERE Id IN :raesdIdList
                    FOR UPDATE
                ]
            );
            if (raesdMap.size() > 0) {
                Map<String, Rental_Apply_Equipment_Set_Detail__c> mfUpsert = new Map<String, Rental_Apply_Equipment_Set_Detail__c>();
                // 读取已分配的所有附属品
                Map<Id, Asset> aSetMap = new Map<Id, Asset>([
                        Select Id, Quantity,
                                Out_of_wh__c,
                                Manage_type__c,
                                Last_Reserve_RAES_Detail__c
                        From Asset
                        where Id = :assetIdList
                        for Update]);
                Map<Id, Asset> aSetMap = new Map<Id, Asset>(
                    [
                        SELECT Id, Quantity, Out_of_wh__c, Manage_type__c, Last_Reserve_RAES_Detail__c
                        FROM Asset
                        WHERE Id = :assetIdList
                        FOR UPDATE
                    ]
                );
                for (Integer indexNum = 0; indexNum < viewList.size(); indexNum++) {
                    // 对打勾的附属品取消分配
                    WrapperInfo wprInfo = viewList[indexNum];
@@ -941,8 +979,14 @@
                    // 备品管理编码(借出时)
                    robj.EquipmentSet_Managment_Code_text__c = null;
                    String uniqueKeyStr = parentObj.RequestNoJoinStr2__c + ':'+ robj.Rental_Apply_Equipment_Set__c
                            + ':' + robj.FSD_Id__c + ':' + robj.IndexFromUniqueKey__c;
                    String uniqueKeyStr =
                        parentObj.RequestNoJoinStr2__c +
                        ':' +
                        robj.Rental_Apply_Equipment_Set__c +
                        ':' +
                        robj.FSD_Id__c +
                        ':' +
                        robj.IndexFromUniqueKey__c;
                    robj.UniqueKey__c = uniqueKeyStr;
                    mfUpsert.put(robj.UniqueKey__c, robj);
@@ -951,13 +995,10 @@
                if (!mfUpsert.isEmpty()) {
                    FixtureUtil.withoutUpsertRaesd(mfUpsert.values());
                }
            }
            else{
            } else {
                throw new ControllerUtil.myException('没有下架前已分配的附属品');
            }
        }
        catch (Exception ex) {
        } catch (Exception ex) {
            ApexPages.addMessages(ex);
            Database.rollback(sp);
            return null;
@@ -968,8 +1009,6 @@
        pg.getParameters().put('pt_recid',parentId);
        pg.setRedirect(true);
        return pg;
    }
    // https://sohobb.backlog.jp/view/OLY_OCM-152#comment-20041467
@@ -996,7 +1035,6 @@
                        if (robj.CreatedBy.ProfileId == System.Label.ProfileId_EquipmentCenter && robj.Select_Time__c == null) {
                            // 删除明细Id<List>
                            delIds.add(robj.Id);
                        } else {
                            if (String.isBlank(robj.Cancel_Reason__c)) {
                                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '请输入取消理由'));
@@ -1026,7 +1064,9 @@
                            robj.Cancel_Mem__c = UserInfo.getUserId();
                            // 取消理由备注
                            //robj.Loaner_cancel_Remarks__c
                            robj.Loaner_cancel_Remarks__c = robj.Loaner_cancel_Remarks__c==null ? robj.Loaner_cancel_reason__c : robj.Loaner_cancel_Remarks__c;//20210818 SFDC-C448KZ ljh end
                            robj.Loaner_cancel_Remarks__c = robj.Loaner_cancel_Remarks__c == null
                                ? robj.Loaner_cancel_reason__c
                                : robj.Loaner_cancel_Remarks__c; //20210818 SFDC-C448KZ ljh end
                            //※已经分配的場合  トリがでやります
                            //if(!String.isBlank(robj.Asset__c) && robj.Select_Time__c != null) {
                                //借出备品Set一览明细 trigger 里 clear Asset__c
@@ -1039,7 +1079,6 @@
                            raesds.add(robj);
                        }
                    }
                }
            }
@@ -1096,7 +1135,11 @@
        Map<String, List<Asset>> autoSelectMap = new Map<String, List<Asset>>();
        // 自动分配对象
        Map<String, List<Rental_Apply_Equipment_Set_Detail__c>> autoRsdMap = new Map<String, List<Rental_Apply_Equipment_Set_Detail__c>>();
        Map<Rental_Apply_Equipment_Set_Detail__c, Map<String, FixtureUtil.groupBean>> rsdMap = FixtureUtil.raesdGroupBy(selectedData, myComponentController.columus, bieWhere);
        Map<Rental_Apply_Equipment_Set_Detail__c, Map<String, FixtureUtil.groupBean>> rsdMap = FixtureUtil.raesdGroupBy(
            selectedData,
            myComponentController.columus,
            bieWhere
        );
        // 選択済みの明细
        if (selectedData.size() > 0) {
            for (Integer i = 0; i < selectedData.size(); i++) {
@@ -1114,9 +1157,11 @@
                            Integer index = rsdGroupInfo.get(apikey).gnum;
                            if (!String.isBlank(rsdObj.Asset__c) && rsdObj.Select_Time__c != null) {
                                rsdObj.put(apikey, FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.assetFixtureStatus.Yi_Fen_Pei.ordinal()));
                            }
                            else {
                                rsdObj.put(
                                    apikey,
                                    FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.assetFixtureStatus.Yi_Fen_Pei.ordinal())
                                );
                            } else {
                                rsdObj.put(apikey, FixtureUtil.assetFixtureStatusMap.get(index));
                            }
                        }
@@ -1167,7 +1212,10 @@
                } else {
                    showButtonList.add(false);
                    // 可以分配の場合
                    if (FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.assetFixtureStatus.Ke_Yi_Fen_Pei.ordinal()) == rsdObj.Fu_Shu_Pin_Fen_Pei_Jia__c) {
                    if (
                        FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.assetFixtureStatus.Ke_Yi_Fen_Pei.ordinal()) ==
                        rsdObj.Fu_Shu_Pin_Fen_Pei_Jia__c
                    ) {
                        if (!autoRsdMap.containsKey(rsdObj.FSD_Fixture_Model_No__c)) {
                            autoRsdMap.put(rsdObj.FSD_Fixture_Model_No__c, new List<Rental_Apply_Equipment_Set_Detail__c>());
                            autoSelectMap.put(rsdObj.FSD_Fixture_Model_No__c, new List<Asset>());
@@ -1194,22 +1242,26 @@
                // 検索条件
                String dateToday = String.valueOf(Date.today());
                String soql =  'SELECT Id, Fixture_Model_No_F__c, Pre_Arrival_wh_time__c, Ji_Zhong_Guan_Li_Ku_Cun__c,'
                        + ' SerialNumber, Salesdepartment__c, Internal_asset_location__c,'
                        + ' You_Xiao_Ku_Cun__c, Out_of_wh__c, Repairing_Count__c'
                        + ' FROM Asset'
                        + ' WHERE Asset_Owner__c = \'Olympus\' AND ' + FixtureUtil.getAssetSoqlBase()
                        + ' and Asset_loaner_category__c != \'耗材\''
                        + ' and RecordTypeId = \'01210000000kOPR\''
                        + ' and Loaner_accsessary__c = true'
                        + ' and Equipment_Type__c != \'检测用备品\''
                        + ' and Delete_Flag__c = False'
                        + ' and Freeze_sign_Abandoned_Flag__c = False'
                        + ' and (Consumable_Guaranteen_end__c = null or Consumable_Guaranteen_end__c >=' + dateToday + ')'
                        + ' and Fixture_OneToOne_Link__c = null'           // 附属品一对一的个体管理不能检索出来
                        + ' and Internal_asset_location__c != null'
                        + ' and Product2.Fixture_Model_No_T__c IN :moset'
                        + bieWhere +
                String soql =
                    'SELECT Id, Fixture_Model_No_F__c, Pre_Arrival_wh_time__c, Ji_Zhong_Guan_Li_Ku_Cun__c,' +
                    ' SerialNumber, Salesdepartment__c, Internal_asset_location__c,' +
                    ' You_Xiao_Ku_Cun__c, Out_of_wh__c, Repairing_Count__c' +
                    ' FROM Asset' +
                    ' WHERE Asset_Owner__c = \'Olympus\' AND ' +
                    FixtureUtil.getAssetSoqlBase() +
                    ' and Asset_loaner_category__c != \'耗材\'' +
                    ' and RecordTypeId = \'01210000000kOPR\'' +
                    ' and Loaner_accsessary__c = true' +
                    ' and Equipment_Type__c != \'检测用备品\'' +
                    ' and Delete_Flag__c = False' +
                    ' and Freeze_sign_Abandoned_Flag__c = False' +
                    ' and (Consumable_Guaranteen_end__c = null or Consumable_Guaranteen_end__c >=' +
                    dateToday +
                    ')' +
                    ' and Fixture_OneToOne_Link__c = null' + // 附属品一对一的个体管理不能检索出来
                    ' and Internal_asset_location__c != null' +
                    ' and Product2.Fixture_Model_No_T__c IN :moset' +
                    bieWhere +
                        + ' and Ji_Zhong_Guan_Li_Ku_Cun__c > 0' ;           // 有集中管理库存的
                    soql += ' ORDER BY Product2.Fixture_Model_No_T__c, Consumable_Guaranteen_end__c ASC NULLS LAST, Ji_Zhong_Guan_Li_Ku_Cun__c DESC, Pre_Arrival_wh_time__c ASC NULLS FIRST, Id DESC';
@@ -1251,8 +1303,10 @@
                            }
                        }
                        if (String.isBlank(rsdObj.Asset__c)) {
                            rsdObj.put('Fu_Shu_Pin_Fen_Pei_Jia__c', FixtureUtil.assetFixtureStatusMap.get(
                                    FixtureUtil.AssetFixtureStatus.Mei_You_Ku_Cun.ordinal()));
                            rsdObj.put(
                                'Fu_Shu_Pin_Fen_Pei_Jia__c',
                                FixtureUtil.assetFixtureStatusMap.get(FixtureUtil.AssetFixtureStatus.Mei_You_Ku_Cun.ordinal())
                            );
                        }
                    }
                }