public with sharing class InstructReportController { public String targetInstructReportId { get; private set; } public String targetCampaignId { get; private set; } public Instruct_report__c Instruct_report { get; private set; } public list ISList { get; private set; } public list checkedISList { get; private set; } public list uncheckedISList { get; private set; } public boolean ReadOnly { get; private set; } // 20220222 PI改造 by Bright--start public string staticResource { get; private set; } // 20220222 PI改造 by Bright--end public InstructReportController() { this.ReadOnly = true; staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));// 20220222 PI改造 by Bright } public InstructReportController(ApexPages.StandardController controller) { this(); } public void init() { this.targetInstructReportId = ApexPages.currentPage().getParameters().get('id'); this.targetCampaignId = ApexPages.currentPage().getParameters().get('camid'); try { //打开现有带教报告 if (String.isBlank(this.targetInstructReportId) == false) { setCurrentInstructReport(); if (this.Instruct_report == null) { throw new ControllerUtil.myException('无法打开现有带教报告'); } this.targetCampaignId = this.Instruct_report.Campaign__c; } //新建带教报告 else if (!String.isBlank(this.targetCampaignId)) { //HWAG-BDZ398 判断是否有权新建报告 start if (!Instruct_report__c.sObjectType.getDescribe().isCreateable()) { throw new ControllerUtil.myException('您没有权限新建带教报告'); return; } //HWAG-BDZ398 判断是否有权新建报告 end this.ReadOnly = false; this.Instruct_report = new Instruct_report__c(); this.Instruct_report.Campaign__c = this.targetCampaignId; setUpInstructReport(); } //其他可能直接报错 else { throw new ControllerUtil.myException('无法显示带教报告'); return; } // 初始化已选择带教人员和未选择带教人员 checkedISList = new list(); uncheckedISList = new list(); setCurrentInstructedStaff(); } catch (Exception ex) { ApexPages.addMessages(ex); } return; } //HWAG-BDZ398 判断是否有权编辑报告 服务企划部窗口 不能编辑 start public Boolean getIsServiceDesignDep() { List groupList = [SELECT Id, Name, DeveloperName FROM Group where DeveloperName = 'ServiceDesignDepGroup']; if (groupList.size() > 0) { list GMlist = [select id from GroupMember where GroupId = :groupList[0].id and UserOrGroupId = : userinfo.getuserid()]; if (GMlist.size() > 0) { return true; } } return false; } //HWAG-BDZ398 判断是否有权编辑报告 服务企划部窗口 不能编辑 end @TestVisible private void setCurrentInstructReport() { list Instruct_reportList = [SELECT Id, Name, CreatedById, Report_Code__c, Status__c, Verifier__c, VerifierName__c, VerifierNumber__c , Instructed_staff_number__c, Instruct_Staff__c, Campaign__c, ReportDate__c, teachingDate__c FROM Instruct_report__c where id = : targetInstructReportId]; if (Instruct_reportList.size() > 0) { Instruct_report = Instruct_reportList[0]; } } // 检索出当前学会培训下所有参会人员,检索出当前带教报告的人员,进行一一比对,设置带教人员和参会名单 @TestVisible private void setCurrentInstructedStaff() { checkedISList.clear(); uncheckedISList.clear(); list CMlist = [ SELECT Id, Name, Department_ID__c , //增加检索 有效/无效 精琢技术 wql 2021/02/04 start Is_Active_Formula__c //增加检索 有效/无效 精琢技术 wql 2021/02/04 end ,Contact_ID__c, Contact_ID__r.Name, Contact_ID__r.AWS_Data_Id__c,// 20220222 PI改造 by Bright // LJPH-BVNBMM start Contact_ID__r.AccountId, Department_Service__c, Department_ServiceID__c,Contact__c, ContactName__c, // LJPH-BVNBMM end dept__c, State__c, City__c FROM CampaignMember__c where Campaign__c = : Instruct_report.Campaign__c ]; list ISList = [SELECT Id, Name, Instruct_report__c, Instructed_staff_feedback__c, Instruct_staff_feedback__c, Instruct_content_other__c, Instruct_time__c, Instruct_Date__c, CampaignMember__c, DepartmentID__c, DepartmentName__c, Department__c //增加检索 有效/无效 精琢技术 wql 2021/02/04 start ,Is_Active_Formula__c //增加检索 有效/无效 精琢技术 wql 2021/02/04 end , ContactID__C ,ContactID__r.AWS_Data_Id__c// 20220222 PI改造 by Bright //带教报告 新增查询字段:带教地点、带教地点(其他)、设备类别、具体型号、备注 精琢技术 wql 2020/04/14 start , Instruct_place_other__c, Specific_model__c, Instruct_remarks__c, Equipment_category__c, Instruct_place__c, Instruct_content__c //带教报告 新增查询字段:带教地点、带教地点(其他)、设备类别、具体型号、备注 精琢技术 wql 2020/04/14 end //带教报告 新增字段:确认人职位、确认人姓名 精琢技术 wql 2020/05/27 start , Verifier__c, VerifierName__c //带教报告 新增字段:确认人职位、确认人姓名 精琢技术 wql 2020/05/27 end FROM Instructed_staff__c where Instruct_report__c = : targetInstructReportId]; Map ISMap = new Map (); for (Instructed_staff__c temIS : ISList) { ISMap.put(temIS.CampaignMember__c, temIS); } for (CampaignMember__c temCM : CMlist) { if (ISMap.containsKey(temCM.id)) { checkedISList.add( new InstructedstaffInfo(checkedISList.size(), ISMap.get(temCM.id), temCM, true)); } else { uncheckedISList.add(new InstructedstaffInfo(uncheckedISList.size(), temCM)); } } } public PageReference exchangeInstructedstaff() { list temcheckedISList = new list(); list temuncheckedISList = new list(); for (InstructedstaffInfo checkedIS : checkedISList) { if (checkedIS.rec_checkBox) { checkedIS.lineNo = temcheckedISList.size(); temcheckedISList.add(checkedIS); } else { checkedIS.IS = null; checkedIS.lineNo = temuncheckedISList.size(); temuncheckedISList.add(checkedIS); } } for (InstructedstaffInfo uncheckedIS : uncheckedISList) { if (uncheckedIS.rec_checkBox) { System.debug('uncheckedIS.CamMem.Contact_ID__r='+uncheckedIS.CamMem.Contact_ID__r.AWS_Data_Id__c); uncheckedIS.IS = new Instructed_staff__c(Name = uncheckedIS.CamMem.Contact_ID__r.Name, // LJPH-BVNBMM 改为同步当前联系人所在的科室 start Department__c = uncheckedIS.CamMem.Contact_ID__r.AccountId, // LJPH-BVNBMM 改为同步当前联系人所在的科室 start CampaignMember__c = uncheckedIS.CamMem.id, ContactID__c = uncheckedIS.CamMem.Contact_ID__c, ContactID__r = uncheckedIS.CamMem.Contact_ID__r // 20220222 PI改造 by Bright ); uncheckedIS.lineNo = temuncheckedISList.size(); temcheckedISList.add(uncheckedIS); } else { uncheckedIS.IS = null; uncheckedIS.lineNo = temuncheckedISList.size(); temuncheckedISList.add(uncheckedIS); } } checkedISList = temcheckedISList.clone(); uncheckedISList = temuncheckedISList.clone(); return null; } public PageReference save() { if (CheckSaveInput()) { return null; } if (syncInstructReport()) { setCurrentInstructReport(); setCurrentInstructedStaff(); ReadOnly = true; ApexPages.addMessage(new ApexPages.message(ApexPages.severity.INFO, '保存好了!')); } return null; } public PageReference submit() { if (CheckSaveInput()) { return null; } Savepoint sp = Database.setSavepoint(); try { if (syncInstructReport()) { ReadOnly = true; Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest(); psr.setObjectId(this.Instruct_report.id); Approval.ProcessResult submitResult = Approval.process(psr); setCurrentInstructReport(); setCurrentInstructedStaff(); ApexPages.addMessage(new ApexPages.message(ApexPages.severity.INFO, '提交成功')); } } catch (DMLException ex) { Database.rollback(sp); ApexPages.addMessages(ex); } catch (Exception ex) { Database.rollback(sp); ApexPages.addMessages(ex); } system.debug('Submit End'); return null; } public PageReference EditRecord() { ReadOnly = !ReadOnly; Instruct_report.Status__c = '草案中'; return null; } public Boolean getInputdisabled() { return ReadOnly; } /** 保存返回 **/ public PageReference saveAndCancel () { if (CheckSaveInput()) { return null; } if (syncInstructReport()) { PageReference ret = null; if (this.targetCampaignId != null) { ret = new PageReference('/' + this.targetCampaignId); } return ret; } return null; } public PageReference cancel() { PageReference ret = null; if (this.targetCampaignId != null) { ret = new PageReference('/' + this.targetCampaignId); } return ret; } /* 新建的带教报告 */ @TestVisible private void setUpInstructReport() { this.Instruct_report.Status__c = '草案中'; list IRRecords = [select id, Campaign__r.OwnerID, Campaign__r.RecordTypeid, Campaign__r.Salesdepartment__c from Instruct_report__c where Campaign__c = : targetCampaignId]; Campaign temCam = [select id, name, TrainingCode__c, ServiceDesignDep__c, JingliApprovalManager__c, BuchangApprovalManager__c,OwnerID,RecordTypeid,Salesdepartment__c from Campaign where id = : targetCampaignId]; if (IRRecords == null || temCam == null) { throw new ControllerUtil.myException('找不到对应的学会培训,无法保存!'); } integer IRRecordsNumber = IRRecords.size() + 1; this.Instruct_report.Name = temCam.Name + '第' + IRRecordsNumber + '次带教报告'; // 修改带教报告经理等取值逻辑 2020/07/28 精琢技术 start if (temCam != null) { setInsertOwner(temCam); } //注释原来赋值逻辑 // this.Instruct_report.ServiceDesignDep__c = temCam.ServiceDesignDep__c; // this.Instruct_report.JingliApprovalManager__c = temCam.JingliApprovalManager__c; // this.Instruct_report.BuchangApprovalManager__c = temCam.BuchangApprovalManager__c; // 修改带教报告经理等取值逻辑 2020/07/28 精琢技术 end if (IRRecordsNumber < 10) { this.Instruct_report.Report_Code__c = temCam.TrainingCode__c + '-OJT00' + IRRecordsNumber; } else { this.Instruct_report.Report_Code__c = temCam.TrainingCode__c + '-OJT0' + IRRecordsNumber; } } //LJPH-BRW8SH 精琢技术 wql 2020/07/29 start //提交待审批的时候给服务企划部窗口、经理、部长 赋值 @TestVisible private void setInsertOwner(Campaign temCam) { if (temCam != null ) { Map userMap = new Map(); List OwnerList = New List(); // 修改带教报告经理等取值逻辑 2020/07/28 精琢技术 Start OwnerList = [SELECT Id, SalesManager__c, BuchangApprovalManagerSales__c, JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c, OCM_man_province__c, Province__c FROM user WHERE id = :temCam.OwnerID]; // 修改带教报告经理等取值逻辑 2020/07/28 精琢技术 end for (User u : OwnerList) { userMap.put(u.Id, u); } if (temCam.RecordTypeid != (ID) system.label.RecordType_CampaignService ) { this.Instruct_report.JingliApprovalManager__c = userMap.get(temCam.OwnerID).SalesManager__c; this.Instruct_report.BuchangApprovalManager__c = userMap.get(temCam.OwnerID).BuchangApprovalManagerSales__c; } else { this.Instruct_report.JingliApprovalManager__c = userMap.get(temCam.OwnerID).JingliApprovalManager__c == null ? temCam.OwnerID : userMap.get(temCam.OwnerID).JingliApprovalManager__c; this.Instruct_report.BuchangApprovalManager__c = userMap.get(temCam.OwnerID).BuchangApprovalManager__c == null ? temCam.OwnerID : userMap.get(temCam.OwnerID).BuchangApprovalManager__c; if (temCam.Salesdepartment__c != null && temCam.Salesdepartment__c.equals('1.华北')) { this.Instruct_report.ServiceDesignDep__c = System.Label.ServiceDesignDep_NC; } if (temCam.Salesdepartment__c != null && temCam.Salesdepartment__c.equals('2.东北')) { this.Instruct_report.ServiceDesignDep__c = System.Label.ServiceDesignDep_NE; } if (temCam.Salesdepartment__c != null && temCam.Salesdepartment__c.equals('3.西北')) { this.Instruct_report.ServiceDesignDep__c = System.Label.ServiceDesignDep_NW; } if (temCam.Salesdepartment__c != null && temCam.Salesdepartment__c.equals('4.西南')) { this.Instruct_report.ServiceDesignDep__c = System.Label.ServiceDesignDep_SW; } if (temCam.Salesdepartment__c != null && temCam.Salesdepartment__c.equals('5.华东')) { this.Instruct_report.ServiceDesignDep__c = System.Label.ServiceDesignDep_EC; } if (temCam.Salesdepartment__c != null && temCam.Salesdepartment__c.equals('6.华南')) { this.Instruct_report.ServiceDesignDep__c = System.Label.ServiceDesignDep_SC; } else { this.Instruct_report.ServiceDesignDep__c = System.Label.ServiceDesignDep_NC; } } } // Campaign temCam = [select id, name, TrainingCode__c, ServiceDesignDep__c, // JingliApprovalManager__c, BuchangApprovalManager__c // from Campaign where id = : targetCampaignId]; // this.Instruct_report.ServiceDesignDep__c = temCam.ServiceDesignDep__c; // this.Instruct_report.JingliApprovalManager__c = temCam.JingliApprovalManager__c; // this.Instruct_report.BuchangApprovalManager__c = temCam.BuchangApprovalManager__c; } //LJPH-BRW8SH 精琢技术 wql 2020/07/29 end @TestVisible private Boolean syncInstructReport() { system.debug('syncInstructReport start'); Savepoint sp = Database.setSavepoint(); try { //LJPH-BRW8SH 精琢技术 wql 2020/07/29 start Campaign temCam = [select id, name, TrainingCode__c, ServiceDesignDep__c, JingliApprovalManager__c, BuchangApprovalManager__c,OwnerID,RecordTypeid,Salesdepartment__c from Campaign where id = : targetCampaignId]; if (temCam != null) { setInsertOwner(temCam); } //LJPH-BRW8SH 精琢技术 wql 2020/07/29 end upsert Instruct_report; targetInstructReportId = Instruct_report.id; //删掉所有带教报告人员 list deleteIS = [select id from Instructed_staff__c where Instruct_report__c = : targetInstructReportId]; if (deleteIS.size() > 0) { delete deleteIS; } //插入页面上带教报告人员 list insertIS = new list(); for (InstructedstaffInfo temIS : checkedISList) { if (temIS.IS.Instruct_report__c == null) { temIS.IS.Instruct_report__c = targetInstructReportId; } temIS.IS.id = null; insertIS.add(temIS.IS); } if (insertIS.size() > 0) { insert insertIS; } setCurrentInstructReport(); return true; } catch (DMLException ex) { Database.rollback(sp); ApexPages.addMessages(ex); } catch (Exception ex) { Database.rollback(sp); ApexPages.addMessages(ex); } return false; } @TestVisible private Boolean CheckSaveInput() { boolean hasError = false; // if (string.isblank(Instruct_report.Instruct_Staff__c)) { // hasError = true; // Instruct_report.Instruct_Staff__c.addError('请填写带教人!'); // } //if (string.isblank(Instruct_report.Verifier__c)) { // hasError = true; // Instruct_report.Verifier__c.addError('请选择确认人职位!'); //} // if (string.isblank(Instruct_report.VerifierName__c)) { // hasError = true; // Instruct_report.VerifierName__c.addError('请选择确认人姓名!'); // } //if (string.isblank(Instruct_report.VerifierNumber__c)) { // hasError = true; // Instruct_report.VerifierNumber__c.addError('请选择确认人电话!'); //} for (InstructedstaffInfo temIS : checkedISList) { if (temIS.IS.Instruct_Date__c == null) { hasError = true; temIS.IS.Instruct_Date__c.addError('请选择带教日期!'); } if (temIS.IS.Instruct_time__c == null ) { hasError = true; temIS.IS.Instruct_time__c.addError('请填写带教时长(H) !'); } if (string.isblank(temIS.IS.Instruct_content__c)) { hasError = true; temIS.IS.Instruct_content__c.addError('请填写带教内容!'); } if (string.isblank(temIS.IS.Verifier__c)) { hasError = true; temIS.IS.Verifier__c.addError('请填写确认人职位!'); } if (string.isblank(temIS.IS.VerifierName__c)) { hasError = true; temIS.IS.VerifierName__c.addError('请填写确认人姓名!'); } // } else if ('其他'.equals(temIS.IS.Instruct_content__c) // && (temIS.IS.Instruct_content_other__c == null || // temIS.IS.Instruct_content_other__c.equals('') // )) { // hasError = true; // temIS.IS.Instruct_content_other__c.addError('带教内容选择其他时,请填写具体内容!'); // } //带教报告 带教地点验证 Integer index; String place = String.valueOf(temIS.IS.Instruct_place__c); if (String.isNotBlank(place)) { index = place.indexOf('其它'); } system.debug('place:' + place); system.debug('index:' + index); if (string.isblank(temIS.IS.Instruct_place__c)) { hasError = true; temIS.IS.Instruct_place__c.addError('请填写带教地点!'); } else if (index != -1 && string.isblank(temIS.IS.Instruct_place_other__c)) { hasError = true; temIS.IS.Instruct_place_other__c.addError('带教地点选择其它时,请填写带教地点(其它)!'); } //if(string.isblank(temIS.IS.Instruct_place__c)){ // hasError = true; //temIS.IS.Instruct_place__c.addError('请填写带教地点!'); //}else if('其它'.equals(temIS.IS.Instruct_place__c) // && string.isblank(temIS.IS.Instruct_place_other__c)){ // hasError = true; //temIS.IS.Instruct_place_other__c.addError('带教地点选择其它时,请填写带教地点(其它)!'); //} if (string.isblank(temIS.IS.Instructed_staff_feedback__c)) { hasError = true; temIS.IS.Instructed_staff_feedback__c.addError('请填写被带教者反馈!'); } if (string.isblank(temIS.IS.Instruct_staff_feedback__c)) { hasError = true; temIS.IS.Instruct_staff_feedback__c.addError('请填写带教者意见建议!'); } if (string.isblank(temIS.IS.Instruct_content_other__c)) { hasError = true; temIS.IS.Instruct_content_other__c.addError('请填写具体内容!'); } } if (checkedISList.size() == 0 ) { hasError = true; ApexPages.addMessage(new ApexPages.message(ApexPages.severity.Error, '请选择至少一位带教人员!')); } return hasError; } public Integer CheckedCnt { get { return checkedISList == null ? 0 : checkedISList.size(); } } public Integer unCheckedCnt { get { return uncheckedISList == null ? 0 : uncheckedISList.size(); } } public class InstructedstaffInfo { public Instructed_staff__c IS {get; set;} public CampaignMember__c CamMem {get; set;} public Integer lineNo {get; private set;} public Boolean rec_checkBox {get; set;} public InstructedstaffInfo(Integer lineNo, Instructed_staff__c IS, CampaignMember__c CamMem, boolean selectedLocal) { this.lineNo = lineNo; this.IS = IS; this.rec_checkBox = selectedLocal; this.CamMem = CamMem; } public InstructedstaffInfo(Integer lineNo, CampaignMember__c CamMem) { this.lineNo = lineNo; this.IS = new Instructed_staff__c(ContactID__c = CamMem.Contact_ID__c); this.rec_checkBox = false; this.CamMem = CamMem; } } }