高章伟
2022-02-24 2aa8da8af66aa8ae00f25831aed6bb0364176e7b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
public without sharing class TransferShippmentReceived4Controller {
    public List<EsdInfo> esdList { get; set; }
    public Boolean saveBtnDisabled { get; private set; }
    public boolean done_flg {get;set;}
    public String ApplyId {get;set;}
    private Boolean isStartUser; // 是否是调拨前地区的用户
    private Boolean isDestUser; // 是否是调拨后地区的用户
    private Boolean is2B3; // 是否是2B3_照片
    private String Id;
 
    public TransferShippmentReceived4Controller() {
        Id = ApexPages.currentPage().getParameters().get('id');
        ApplyId = Id;
    }
 
    private List<TransferApplyDetail__c> getDetails(Set<Id> tasIdSet) {
        List<TransferApplyDetail__c> tadList = [
                select Lost_item_Memo_Final__c, Lost_item_Memo__c, TransferApplySummary__r.Wei_loaner_arranged__c, TransferApply__r.Asset_return_ng_num__c
                , TransferApplySummary__r.Shippment_loaner_time2__c
                , TransferApply__r.RecordType.DeveloperName
                , DeliverySlip__c
                , Redeliver_Staff__c
                , Redeliver_SlipNo__c
                , Redeliver_Distributor_method__c
                , Redeliver_DeliveryCompany__c
                , Shippment_loaner_time__c
                , NoItemReturn__c, SerialNumber_F__c, Asset_return_time__c, Check_lost_Item_F__c, TransferApplySummary__r.Received_ng_detail__c, TransferApplySummary__r.Wei_Return_Finish__c, TransferApplySummary__r.Received_Confirm__c, Check_lost_Item_Final__c, Return_DeliverySlip__c, Fixture_Name_F__c, TransferApplySummary__r.Fixture_Set__r.Name, TransferApplySummary__c, Fixture_QRCode_F__c, TransferApply__r.Name, TransferApplySummary__r.Name, Pre_inspection_time__c, StockDown__c, StockDown_time__c, Id, Name, Asset__c, Asset__r.Name, Asset__r.SerialNumber, Asset__r.Product_Serial_No__c,
                       Asset__r.Remark__c, Asset__r.ImageAsset__c, Asset__r.ImageSerial__c, Asset__r.ImageAssetUploadedTime__c, Asset__r.ImageSerialUploadedTime__c,
                       Loaner_CDS_Info__c, Inspection_result__c, Check_lost_Item__c, Pre_disinfection__c, Water_leacage_check__c, Inspection_result_after__c, Arrival_in_wh__c,
                       Asset__r.Pre_Reserve_RAES_Detail__c, Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c, Main_OneToOne__c, CDSChargement__c, CDSType__c,
                       Inspection_result_after_ng__c, Inspection_result_ng__c, Lost_item_giveup__c, Confirm_Lost_Date__c, CDS_complete__c, Loaner_accsessary__c,ArrivalResult__c,Arrival_NG_Comment__c  //20210426 ljh add 1832
                  from TransferApplyDetail__c
                 where TransferApplySummary__c in :tasIdSet and DeliverySlip__c <> null
                   //and Cancel_Select__c = False
                 order by TransferApplySummary__r.Name, TransferApplySummary__c, Name
        ];
        return tadList;
    }
    /**
    @description 用户角色与地区地否匹配
    @param roleName 角色Name
    @param center 备品中心
    */
    private Boolean isMatch(String roleName, String center) {
        switch on center {
            when '北京 备品中心' {
                return roleName == '备品中心北方管理成员';
            }
            when '上海 备品中心' {
                return roleName == '备品中心华东管理成员';
            }
            when '广州 备品中心' {
                return roleName == '备品中心南方管理成员';
            }
        }
        return false;
    }
    // 画面初始化
    public PageReference init() {
        done_flg = false;
        esdList = new List<EsdInfo>();
        Map<Id, TransferApplySummary__c> esMap = new Map<Id, TransferApplySummary__c>();
        saveBtnDisabled = false;
        if (Id != null) {
            List<String> ids = Id.split(',');
            // 当前User
            List<TransferApplySummary__c> esList;
            esList = [select TransferApply__r.Loaner_centre_mail_address__c, TransferApply__r.Name
                            , First_TAD_Model_No_F__c, First_TAD__r.SerialNumber_F__c, First_TAD__r.Loaner_asset_no__c
                            , TransferApply__c, Id, TAS_Status__c, Name, Shippment_loaner_time2__c
                            , TransferApply__r.From_Location__c, TransferApply__r.Destination_location__c
                        from TransferApplySummary__c where (TransferApply__r.Name in :ids or Id in :ids)
                        order by TransferApply__r.Name, Id];
            if (esList.size() > 0) {
                for (TransferApplySummary__c raes : esList) {
                    esMap.put(raes.Id, raes);
                }
                User user1 = [SELECT UserRole.Name, Profile.Name FROM User WHERE Id=:UserInfo.getUserId()];
                isStartUser = isMatch(user1.UserRole.Name, esList[0].TransferApply__r.From_Location__c);
                isDestUser = isMatch(user1.UserRole.Name, esList[0].TransferApply__r.Destination_location__c);
                //20210519 you WLIG-C2J9AA start
                //is2B3 = user1.Profile.Name == '2B3_备品中心管理者(照片)';
                is2B3 = false;
                if(user1.Profile.Name == '2B3_备品中心管理者(照片)' || user1.UserRole.Name == '备品运营部'){
                   is2B3 = true;
                }
                //20210519 you WLIG-C2J9AA end
            } else {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '备品不存在'));
                saveBtnDisabled = true;
                return null;
            }
        }
 
        // 备品set明细
        List<TransferApplyDetail__c> eList = getDetails(esMap.keySet());
        String raesId = '';
        for (TransferApplyDetail__c esd : eList) {
            EsdInfo ei = new EsdInfo(esd, isStartUser, isDestUser, is2B3);
            esdList.add(ei);
        }
        if (esdList.size() <= 0) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '没有备品set明细'));
            saveBtnDisabled = true;
        }
        return null;
    }
 
    // 保存按钮
    public PageReference save() {
 
        //检查是否可以继续
        List<TransferApplyDetail__c> eList = new List<TransferApplyDetail__c>();
        Set<String> assetIdForLockSet = new Set<String>();
        for (EsdInfo esdInfo : esdList) {
            if (esdInfo.isChecked && esdInfo.editable) {
                TransferApplyDetail__c esd = esdInfo.rec;
 
                if (String.isNotBlank(esd.Check_lost_Item_Final__c)) {
                    if (esd.Check_lost_Item_Final__c == '欠品' || esd.Check_lost_Item_Final__c == '消耗' ) {
                        //esd.Return_DeliverySlip__c = null;
                        esd.CDS_complete__c = false;
                        if (esd.Check_lost_Item_Final__c == '欠品') esd.NoItemReturn__c = false;
                    }
                } else {
                    esd.Lost_item_check_staff_Final__c = null;
                    esd.Lost_item_check_time_Final__c = null;
                    if (esd.Check_lost_Item__c == '欠品' || esd.Check_lost_Item__c == '消耗' ) {
                        //esd.Return_DeliverySlip__c = null;
                        esd.CDS_complete__c = false;
                        if (esd.Check_lost_Item__c == '欠品') esd.NoItemReturn__c = false;
                    }
                    if (String.isBlank(esd.Check_lost_Item__c)) {
                        esd.Lost_item_check_staff__c = null;
                        esd.Lost_item_check_time__c = null;
                    }
                }
 
                if (esd.Lost_item_giveup__c && esd.Check_lost_Item__c == null) {
                    esd.Check_lost_Item__c = '欠品';
                    esd.Return_DeliverySlip__c = null;
                }
                if (!esd.CDS_complete__c) {
                    esd.CDS_complete_time__c = null;
                    esd.CDS_staff__c = null;
                }
                eList.add(esd);
                assetIdForLockSet.add(esd.Asset__c);
            }
        }
 
        List<Asset> assetIdForLockList = [SELECT  Id
                 FROM Asset
                WHERE Id = :assetIdForLockSet
                AND Asset_loaner_category__c != '耗材'
                AND RecordTypeId = '01210000000kOPR'
                FOR UPDATE];
        Savepoint sp = Database.setSavepoint();
        try {
            FixtureUtil.withoutUpsertObjects(eList);
            done_flg = true;
        } catch (Exception ex) {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, ex.getMessage()));
            Database.rollback(sp);
            done_flg = false;
        }
        return null;
    }
 
    public class EsdInfo {
        public TransferApplyDetail__c rec { get; set; }
        public boolean isChecked { get; set; }
        public boolean editable { get; set; }
        public String fsName {get; set;}
        public Id slipId {get;set;}
 
        public EsdInfo(TransferApplyDetail__c rec, Boolean isStartUser, Boolean isDestUser, Boolean is2B3) {
            this.rec = rec;
            this.isChecked = true;
            this.editable = false;
            this.fsName = rec.TransferApplySummary__r.Name;
            if(String.isNotBlank(rec.TransferApplySummary__r.Fixture_Set__r.Name)){
                this.fsName += ':' + rec.TransferApplySummary__r.Fixture_Set__r.Name;
            }
            // 备品中心发到办事处,又被寄回时,要看回寄,由调拨前地区用户做欠品确认
            String applyType = rec.TransferApply__r.RecordType.DeveloperName;
            if(applyType == 'CenterToAgency') {
                if (rec.Asset_return_time__c != null) {
                    this.editable = (isStartUser || is2B3) && String.isBlank(rec.Inspection_result_after__c) && !rec.Arrival_in_wh__c;
                    this.slipId = rec.Return_DeliverySlip__c;
                }
            }
            // 其它类型只要发货了,由调拨后地区用户做欠品确认
            else if(applyType == 'CenterToCenter' || applyType == 'AgencyToCenter') {
                if (rec.Shippment_loaner_time__c != null) {
                    this.editable = (isDestUser || is2B3) && String.isBlank(rec.Inspection_result_after__c) && !rec.Arrival_in_wh__c;
                    this.slipId = rec.DeliverySlip__c;
                }
            }
        }
    }
}