高章伟
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
public with sharing class TransferEquipmentSetSRListController {
    public List<TransferApplySummary__c> resList { get; set; }
    public String sr_open { get; set; }
    public String sr_apply_no { get; set; }
    public String sr_id { get; set; }
    public String sr_type { get; set; }
    public List<SelectOption> typeList {get; set;}
    public String selectedType {get; set;}
    private String Id;
    public Boolean canSelect {get;set;}
    public Boolean showDown {get;set;}
    public Boolean showUp {get;set;}
    public String sr_FromLocation {get;set;}
    public String sr_ToLocation {get;set;}
    public Integer getResListSize() {
        return resList.size();
    }
 
    public TransferEquipmentSetSRListController() {
        Id = ApexPages.currentPage().getParameters().get('id');
        sr_type = ApexPages.currentPage().getParameters().get('type');
        sr_open = ApexPages.currentPage().getParameters().get('open');
    }
 
    public void init() {
        resList = new List<TransferApplySummary__c>();
        User user1 = [SELECT OCM_man_province_Rental__c, Work_Location__c, UserRole.Name, Profile.Name FROM User WHERE Id=:UserInfo.getUserId()];
        canSelect = false;
 
        if (String.isNotBlank(Id)) {
            resList = [select TransferApply__r.Name
                            , TransferApply__r.RecordType.DeveloperName
                            , TransferApply__r.Destination_location__c
                            , TransferApply__r.Asset_return_time__c
                            , TransferApply__r.Yi_loaner_arranged__c
                            , TransferApply__r.From_Location__c
                            , First_TAD__r.Asset__r.Fixture_Model_No_F__c
                            , First_TAD__r.Asset__r.SerialNumber
                            , First_TAD__r.Asset__r.Fixture_QRCode__c
                            , OnStock_By_Cancel_Cnt__c
                            , TAS_Status__c
                            , Wei_Arrival_in_wh__c
                            , Yi_loaner_arranged__c
                            , Asset_return_time__c
                            , Inspection_before_ng_cnt__c
                            , Wei_Return__c
                            , TransferDetail_Cnt__c
                    from TransferApplySummary__c
                    where TransferApply__r.Name = :id
                        OR (First_TAD__r.Asset__r.Fixture_QRCode__c = :id AND TransferApply__r.ShelfUp_ng_num__c > 0)
                    order by Name
                ];
            if (resList.size() > 0) {
                sr_apply_no = resList[0].TransferApply__r.Name;
                sr_id = resList[0].TransferApply__r.Name;
                sr_FromLocation = resList[0].TransferApply__r.From_Location__c;
                sr_ToLocation = resList[0].TransferApply__r.Destination_location__c;
                String recordTypeName = resList[0].TransferApply__r.RecordType.DeveloperName;
                Boolean isReturned = false;
                for(TransferApplySummary__c res:resList) {
                    // 下架后有取消
                    isReturned = isReturned || res.OnStock_By_Cancel_Cnt__c > 0;
                    // 办事处回寄
                    isReturned = isReturned || res.TransferDetail_Cnt__c - res.Wei_Return__c > 0;
                    // 下架前检测NG
                    isReturned = isReturned || res.Inspection_before_ng_cnt__c > 0;
                    // 如果不是来自同一调拨单,全清空
                    if(sr_apply_no != res.TransferApply__r.Name) {
                        sr_apply_no = '';
                        sr_id = '';
                        sr_FromLocation = '';
                        sr_ToLocation = '';
                        recordTypeName = '';
                        isReturned = false;
                    }
                }
                canSelect = initTypeList(recordTypeName, user1, sr_FromLocation, sr_ToLocation, isReturned);
            }
            else {
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '备品或调拨单不存在'));
            }
        }
    }
    /**
    @description 根据申请单类型,用户工作地,调拨至地区显示下拉框
    @param recordTypeName 记录类型developername
    @param u 用户
    @param destination 调拨至地区
    @param isReturned 是否需要在备品中心重新上架
    */
    private Boolean initTypeList(String recordTypeName, User u, String fromlocation, String destination, Boolean isReturned){
        typeList = new List<SelectOption>();
        typeList.add(new SelectOption('无','无'));
        showUp = false;
        showDown = false;
        switch on recordTypeName {
            when 'AgencyToCenter' {
                showDown = false;
                showUp = isMatch(u, destination);
            }
            when 'CenterToAgency', 'CenterToOther' {
                showDown = isMatch(u, fromlocation);
                showUp = isMatch(u, fromlocation) && isReturned;
            }
            when 'CenterToCenter' {
                showDown = isMatch(u, fromlocation);
                showUp = isMatch(u, destination) || (showDown && isReturned);
            }
            when 'InsideCenter' {
                showDown = false;
                showUp = false;
            }
        }
        // 全部显示,通过showDown和showUp控制是否允许跳转
        typeList.add(new SelectOption('下架', '下架'));
        typeList.add(new SelectOption('发货检测', '发货检测'));
        typeList.add(new SelectOption('发货','发货'));
        typeList.add(new SelectOption('欠品','欠品'));
        typeList.add(new SelectOption('入库检测','入库检测'));
        typeList.add(new SelectOption('上架', '上架'));
 
        System_UserSetting__c config = System_UserSetting__c.getInstance(UserInfo.getUserId());
        selectedType = config.TAS_Action_Type__c;
        if (String.isBlank(selectedType)){
            selectedType = '无';
        }
        return showUp || showDown;
    }
    /**
    @description 用户角色与地区地否匹配
    @param u User
    @param center 备品中心
    */
    private Boolean isMatch(User u, String center) {
        if(u.Profile.Name == '2B3_备品中心管理者(照片)'){
            return true;
        }
        //20210519 you WLIG-C2J9AA
        if(u.UserRole.Name == '备品运营部'){
            return true;
        }
        switch on center {
            when '北京 备品中心' {
                return u.UserRole.Name == '备品中心北方管理成员';
            }
            when '上海 备品中心' {
                return u.UserRole.Name == '备品中心华东管理成员';
            }
            when '广州 备品中心' {
                return u.UserRole.Name == '备品中心南方管理成员';
            }
        }
        return false;
    }
    // 记忆用户的选择
    public void setType(){
        if (selectedType != '无' && String.isNotBlank(selectedType)) {
            System_UserSetting__c config = System_UserSetting__c.getInstance(UserInfo.getUserId());
            config.TAS_Action_Type__c = selectedType;
            FixtureUtil.withoutUpsertObjects(new System_UserSetting__c[]{config});
        }
    }
    /**
     * 转换办事处到省
     * @param str 存放地
     * @return OCSM管理省名字
     */
    private String getOcmMgtProvStr(String str) {
        Map<String, String> ocmMgtProvMap = AssetWebService.getOcmMgtProvMap();
        String res = '';
        if (ocmMgtProvMap.containsKey(str)) {
            res = ocmMgtProvMap.get(str);
        }
        return res;
    }
}