buli
2023-06-05 e9e1806b0f4b5bae1fc36204ccc5d6fdad52d66f
force-app/main/default/classes/StartTradingController.cls
@@ -1,4 +1,4 @@
public class StartTradingController {
public without sharing class StartTradingController {
    /** リードID */
    public String leadId{get;set;}
@@ -9,12 +9,15 @@
    /** リードOnwer */
    public User leadOnwer{get; set;}
    public String staticResource {get; set;}
    /** コンストラクタ */
    public StartTradingController(ApexPages.StandardController controller){
        // リードID設定
        this.leadId = system.currentPageReference().getParameters().get('leadId');
        System.debug('this.leadId'+this.leadId);
        this.SI_Flg = false;
        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
    }
    
    /** 引合ID */
@@ -66,16 +69,23 @@
    
    /** 販売店から引合をConvertするフラグ **/
    private Boolean isAgencyOpp = false;
    
    /** 初期処理 */
    public void init(){
    public PageReference init(){
        // リード情報を取得  
        this.lead = [select id,SI_OppoLeadSec__c,owner_not_automatically_update__c, Hospital_Name__c, Opportunity_stage__c,Hospital_Name__r.RecordType.DeveloperName, Hospital_Name__r.Parent.RecordType.DeveloperName,
                     LastName, FirstName, LeadSource, Other_Society__c, Opp_Name__c, Purchase_Reason__c, Trade__c, Sales_Root__c,
        this.lead = [select id,SI_OppoLeadSec__c,owner_not_automatically_update__c, Hospital_Name__c, Contact_Name__c, Contact_Name__r.Name,
                     Opportunity_stage__c,Hospital_Name__r.RecordType.DeveloperName, Hospital_Name__r.Parent.RecordType.DeveloperName,
                     LastName, FirstName, LeadSource, Other_Society__c, Opp_Name__c, Purchase_Reason__c, Trade__c, Sales_Root__c, Campaign__c,
                     Close_Forecasted_Date__c, Competitor__c, Hospital_Budget__c, Promise_Class__c, Dicision_Maker__c, Purchase_Type__c,
                     Sales_Method__c, Fund_Basis__c, OwnerId, Wholesale_Price__c, Lead_No__c,CreatedDate,CreatedById
                     Sales_Method__c, Fund_Basis__c, OwnerId, Wholesale_Price__c, Lead_No__c,Inquiry_Num__c,CreatedDate,CreatedById,
                     Tender_information__c, Agency_Opportunity__c, SI_PromoteInquiry__c
                     ,   Contact_Name__r.AccountId //2022-6-20 yjk 增加联系人的科室查询
                     ,ET_Check__c //SWAG-CKDATG fy 【委托】【OBSAP-报价委托】报价委托项目改善1
                     ,Hospital_Name__r.Parent.Parent.OCM_man_province_HP__c  //20230329 lt DB202303246427 --青岛拆分 -- 根据询“省(客户)”赋值SAP上传省 add
                     from Lead where id =: this.leadId];
        this.SI_Flg = this.lead.SI_PromoteInquiry__c;
        // 診療科選択リストの取得(条件:病院=リード情報の病院名称)
        List<Account> departmentList = new List<Account>();
        if (this.lead.Hospital_Name__r.RecordType.DeveloperName == 'HP') {
@@ -102,48 +112,64 @@
        }
        // 診療科選択リストの設定
        this.depList = new List<SelectOption>();
        this.depList.add(new SelectOption(NONE, NONE));
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
        // this.depList.add(new SelectOption(NONE, NONE));
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        Set<ID> depIdList = new Set<ID>();
        for(Account d : departmentList){
            depIdList.add(d.id);
            this.depList.add(new SelectOption(String.valueOf(d.get('id')),String.valueOf(d.get('name'))));
        }
        this.sltDep = NONE;
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
        // this.sltDep = NONE;
        this.sltDep = this.lead.Contact_Name__r.AccountId;  //  2022-6-20 yjk 改为从联系人的科室赋值   原逻辑:this.lead.Hospital_Name__c;
        this.sltCon = this.lead.Contact_Name__c;
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        
        // 担当者リスト(初期設定)
        this.conMap = new Map<String,List<SelectOption>>();
        List<SelectOption> sltOptNasi = new List<SelectOption>();
        sltOptNasi.add(new SelectOption(NONE, NONE));
        this.conMap.put(NONE, sltOptNasi);
        this.conList = sltOptNasi;
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
        // sltOptNasi.add(new SelectOption(NONE, NONE));
        //sltOptNasi.add(new SelectOption(this.lead.Contact_Name__c, this.lead.Contact_Name__r.Name));//SWAG-CEY8GZ 20220620 lt update
        //sltOptNasi.add(new SelectOption(String.isNotBlank(this.lead.Contact_Name__c) ? this.lead.Contact_Name__c : NONE, String.isNotBlank(this.lead.Contact_Name__c) ? this.lead.Contact_Name__r.Name : NONE));//SWAG-CEY8GZ 20220620 lt update
        // this.conMap.put(NONE, sltOptNasi);
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        // this.conList = sltOptNasi; //SWAG-CEY8GZ 20220620 lt update
        
        // 担当者リストの取得
        List<Contact> contactList = [select id, name, AccountId from Contact where AccountId =: depIdList];
        for(Contact c : contactList){
            // 診療科ごとに「NONE」選択リストを設定
            List<SelectOption> sltOptInit = new List<SelectOption>();
            sltOptInit.add(new SelectOption(NONE, NONE));
            this.conMap.put(c.AccountId,sltOptInit);
        }
        //SWAG-CEY8GZ 20220620 lt update
        // List<Contact> contactList = [select id, name, AccountId from Contact where AccountId =: depIdList];
        // for(Contact c : contactList){
        //     // 診療科ごとに「NONE」選択リストを設定
        //     List<SelectOption> sltOptInit = new List<SelectOption>();
        //     // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
        //     // sltOptInit.add(new SelectOption(NONE, NONE));
        //     // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        //     this.conMap.put(c.AccountId,sltOptInit);
        // }
        
        List<SelectOption> conSltList = new List<SelectOption>();
        for(Contact c : contactList){
            // 診療科ごとに選択リストを再設定
            conSltList = this.conMap.get(c.AccountId);
            conSltList.add(new SelectOption(c.id, c.name));
            this.conMap.put(c.AccountId, conSltList);
        }
        // List<SelectOption> conSltList = new List<SelectOption>();
        // for(Contact c : contactList){
        //     // 診療科ごとに選択リストを再設定
        //     conSltList = this.conMap.get(c.AccountId);
        //     conSltList.add(new SelectOption(c.id, c.name));
        //     this.conMap.put(c.AccountId, conSltList);
        // }
        //SWAG-CEY8GZ 20220620 lt update
        
        // リード所有者の取得
        this.leadOnwer = [select Province_Text__c from User where Id = :this.lead.OwnerId];
        
        this.oppID = null;
        return start();
        // return null;
    }
    
    /** 診療科選択リスト変更イベント */
    public void depChange(){
        // 診療科選択値によって、担当者選択リストを入れ替える
        this.conList = this.conMap.get(sltDep);
        this.conList = this.conMap.get(sltDep);
    }
    
    /** キャンセルボタン  **/
@@ -153,39 +179,46 @@
    
    /** 取引の開始ボタン **/
    public PageReference start(){
        system.debug('进入start()');
        
        // LHJ 20181012 CHAN-B5G6EZ 购买意向转询价报错 Start
        try {
        // try {
        // LHJ 20181012 CHAN-B5G6EZ 购买意向转询价报错 End
            // 商談作成権限のチェック
            if(!Schema.Sobjecttype.Opportunity.isCreateable()){
                ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR, ERROR_MSG_NONE_AUTHORITY));
                return null;
            }
            if(this.lead!=null){
                if(SI_Flg && this.lead.SI_OppoLeadSec__c==null){
                    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '转SI询价需要填写询价副担当'));
                    return null;
                }
            }
            // if(!Schema.Sobjecttype.Opportunity.isCreateable()){
            //     ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR, ERROR_MSG_NONE_AUTHORITY));
            //     return null;
            // }
            // if(this.lead!=null){
            //     if(SI_Flg && this.lead.SI_OppoLeadSec__c==null){
            //         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '转SI询价需要填写询价副担当'));
            //         return null;
            //     }
            // }
            // 診療科未選択の場合、処理なし
            if (sltDep == NONE) {
                return null;
            }
            
            // 選択した診療科を取得
            Account dept = this.getDepartment();
            Account dept = null;
            
            // 担当者未選択の場合、リード担当者を登録
    //        if (sltCon == NONE) {
    //            this.addContact(dept);
    //        }
            Database.LeadConvertResult result = this.convertLead();
            this.oppID = result.getOpportunityId();
            ID conID = result.getContactId();
            //SWAG-CEY8GZ 20220620 lt update
            // Database.LeadConvertResult result = this.convertLead();
            // this.oppID = result.getOpportunityId();
            // ID conID = result.getContactId();
            
            this.updateContact(conID, dept);
            this.updateOpportunity(dept);
            if(String.isNotBlank(this.lead.Contact_Name__c)){
                dept = this.getDepartment(this.lead.Contact_Name__r.AccountId);
                this.updateContact(this.lead.Contact_Name__c, dept);
            }
            this.updateOpportunity(this.getDepartment(this.lead.Hospital_Name__c));
            //SWAG-CEY8GZ 20220620 lt update
            
            // 引合の編集画面の初期値設定
            //String uri = this.getUriOpportunity(dept);
@@ -195,10 +228,10 @@
            //return new Pagereference(URL.getSalesforceBaseUrl().toExternalForm() + '/006/e?' + uri);
            return new Pagereference(URL.getSalesforceBaseUrl().toExternalForm() + '/' + this.oppID + '/e?' + uri);
        // LHJ 20181012 CHAN-B5G6EZ 购买意向转询价报错 Start
        } catch (Exception ex) {
            ApexPages.addMessages(ex);
            return null;
        }
        // } catch (Exception ex) {
        //     ApexPages.addMessages(ex);
        //     return null;
        // }
        // LHJ 20181012 CHAN-B5G6EZ 购买意向转询价报错 End
    }
    
@@ -240,16 +273,27 @@
     *  @param dept 診療科
    */
    public String updateOpportunity(Account dept){
        System.debug('dept'+dept.Id);
        Opportunity opp = [select ID, AccountId, Account.Department_Class_Wd__c, Opportunity_No__c, SAP_Province_CD__c, Opp_Number__c, Opp_Code__c from Opportunity where Id=:this.oppID];
system.debug('cccccccccccccccccccc:'+opp.SAP_Province_CD__c);
system.debug('cccccccccccccccccccc:'+opp.Opp_Number__c);
system.debug('cccccccccccccccccccc:'+opp.Opp_Code__c);
system.debug('cccccccccccccccccccc:'+opp.Opportunity_No__c);
        System.debug('dept:'+dept.Id + '|' + dept.Department_Class_Wd__c);
        //SWAG-CEY8GZ 20220620 lt update
        //Opportunity opp = [select ID, AccountId, Account.Department_Class_Wd__c, Opportunity_No__c, SAP_Province_CD__c, Opp_Number__c, Opp_Code__c from Opportunity where Id=:this.oppID];
        Opportunity opp = new Opportunity();
        opp.LeadSource = this.lead.LeadSource;
        opp.AccountId = dept.Id;
        //SWAG-CEY8GZ 20220620 lt update
        system.debug('cccccccccccccccccccc:'+opp.SAP_Province_CD__c);
        system.debug('cccccccccccccccccccc:'+opp.Opp_Number__c);
        system.debug('cccccccccccccccccccc:'+opp.Opp_Code__c);
        system.debug('cccccccccccccccccccc:'+opp.Opportunity_No__c);
        Opptype = SI_Flg==true?'SI询价':RC_OPP;
        RecordType rect = [select id from RecordType where IsActive = true and SobjectType = 'Opportunity' and Name =: Opptype limit 1];
        opp.RecordTypeId = rect.id;
        opp.Opportunity_Category__c = opp.Account.Department_Class_Wd__c;
        // opp.Opportunity_Category__c = opp.Account.Department_Class_Wd__c;
        //SWAG-CKDATG fy 【委托】【OBSAP-报价委托】报价委托项目改善1 start
        // opp.Opportunity_Category__c = dept.Department_Class_Wd__c;
        opp.Opportunity_Category__c = this.lead.ET_Check__c ? 'ET' : dept.Department_Class_Wd__c;
        opp.Opp_order_Type__c = this.lead.ET_Check__c ? 'ET'  : null;
        //SWAG-CKDATG fy 【委托】【OBSAP-报价委托】报价委托项目改善1 end
        System.debug('this.lead.Hospital_Name__c:'+this.lead.Hospital_Name__c);
        System.debug('this.lead.LeadSource:'+this.lead.LeadSource);
        System.debug('this.lead.Other_Society__c:'+this.lead.Other_Society__c);
@@ -270,6 +314,9 @@
        else{
            opp.Name = '*';
        }
        //20220412 SWAG-CBUB2W you start
        opp.Inquiry_Num__c = this.lead.Inquiry_Num__c;
        //20220412 SWAG-CBUB2W you end
        opp.From_Lead_TF__c = true;
        opp.Trade__c = (String.isBlank(this.lead.Trade__c)) ? '内貿' : this.lead.Trade__c;
        opp.StageName = '引合';
@@ -313,7 +360,8 @@
        opp.Other_Society__c = this.lead.Other_Society__c;
        opp.Purchase_Reason__c = this.lead.Purchase_Reason__c;
        opp.Trade__c = (String.isBlank(this.lead.Trade__c)) ? '内貿' : this.lead.Trade__c;
        opp.Sales_Root__c = this.lead.Sales_Root__c;
        // 增加默认值
        opp.Sales_Root__c = String.isNotBlank(this.lead.Sales_Root__c) ? this.lead.Sales_Root__c : '販売店';
        if (this.lead.Competitor__c != null && this.lead.Competitor__c != '') {
            opp.Competitor__c = this.lead.Competitor__c;
        }
@@ -321,16 +369,84 @@
            opp.Opportunity_stage__c = this.lead.Opportunity_stage__c;
        }
        opp.Hospital_Budget__c = this.lead.Hospital_Budget__c;
        opp.Promise_Class__c = this.lead.Promise_Class__c;
        // 增加默认值
        opp.Promise_Class__c = String.isNotBlank(this.lead.Promise_Class__c) ? this.lead.Promise_Class__c : '内貿';
        opp.Dicision_Maker__c = this.lead.Dicision_Maker__c;
        //**********************************************************************************
        opp.Purchase_Type__c = SI_Flg==true?'SI(手術室案件)':this.lead.Purchase_Type__c;
        // 副担当自动设置
        // User ownerUser = [select Id, ProfileId, State_Hospital__c, Salesdepartment_text__c from User where Id = :this.lead.OwnerId];
        // switch on ownerUser.Salesdepartment_text__c {
        //     when '1.华北' {
        //         opp.Opportunity_sub_owner__c = '00510000001QAcO';
        //     }
        //     when '2.东北' {
        //         opp.Opportunity_sub_owner__c = '00510000007hBuy';
        //     }
        //     when '3.西北' {
        //         opp.Opportunity_sub_owner__c = '00510000005V2cA';
        //     }
        //     when '4.西南' {
        //         opp.Opportunity_sub_owner__c = '00510000007hBuy';
        //     }
        //     when '5.华东' {
        //         opp.Opportunity_sub_owner__c = '00510000001QRls';
        //     }
        //     when '6.华南' {
        //         opp.Opportunity_sub_owner__c = '00510000001OOQW';
        //     }
        //     when else {
        //         opp.Opportunity_sub_owner__c = this.lead.SI_OppoLeadSec__c;
        //     }
        // }
        opp.Opportunity_sub_owner__c = this.lead.SI_OppoLeadSec__c;
        //**********************************************************************************
        opp.Sales_Method__c = this.lead.Sales_Method__c;
        opp.Fund_Basis__c = this.lead.Fund_Basis__c;
        opp.SAP_Province__c = this.leadOnwer.Province_Text__c;
        //20230329 lt DB202303246427 --青岛拆分 -- 根据询“省(客户)”赋值SAP上传省 start
        // opp.SAP_Province__c = this.leadOnwer.Province_Text__c;
        System.debug('lt123---this.lead.Hospital_Name__r.Parent.Parent.OCM_man_province_HP__c:'+this.lead.Hospital_Name__r.Parent.Parent.OCM_man_province_HP__c);
        Map<String,String> SAP_ProvinceMap = new Map<String,String>();
        SAP_ProvinceMap.put('宁夏','宁夏自治区');
        SAP_ProvinceMap.put('新疆','新疆自治区');
        SAP_ProvinceMap.put('黑龙江','黑龙江省');
        SAP_ProvinceMap.put('广西','广西自治区');
        SAP_ProvinceMap.put('大连','大连市');
        SAP_ProvinceMap.put('沈阳','辽宁省');    //暂时辽宁
        SAP_ProvinceMap.put('广东','广东省');
        SAP_ProvinceMap.put('深圳','深圳市');
        SAP_ProvinceMap.put('青岛','青岛市');
        SAP_ProvinceMap.put('山东','山东省');
        SAP_ProvinceMap.put('四川/西藏','四川省');
        SAP_ProvinceMap.put('安徽','安徽省');
        SAP_ProvinceMap.put('北京','北京市');
        SAP_ProvinceMap.put('福建','福建省');
        SAP_ProvinceMap.put('甘肃','甘肃省');
        SAP_ProvinceMap.put('贵州','贵州省');
        SAP_ProvinceMap.put('河北','河北省');
        SAP_ProvinceMap.put('河南','河南省');
        SAP_ProvinceMap.put('湖北','湖北省');
        SAP_ProvinceMap.put('湖南','湖南省');
        SAP_ProvinceMap.put('吉林','吉林省');
        SAP_ProvinceMap.put('江苏','江苏省');
        SAP_ProvinceMap.put('江西','江西省');
        SAP_ProvinceMap.put('青海','青海省');
        SAP_ProvinceMap.put('山西','山西省');
        SAP_ProvinceMap.put('陕西','陕西省');
        SAP_ProvinceMap.put('上海','上海市');
        SAP_ProvinceMap.put('天津','天津市');
        SAP_ProvinceMap.put('云南','云南省');
        SAP_ProvinceMap.put('浙江','浙江省');
        SAP_ProvinceMap.put('重庆','重庆市');
        SAP_ProvinceMap.put('海南','海南省');
        //内蒙古一致
        String SAP_Province = this.lead.Hospital_Name__r.Parent.Parent.OCM_man_province_HP__c;
        if(SAP_ProvinceMap.containsKey(SAP_Province)){
            SAP_Province = SAP_ProvinceMap.get(SAP_Province);
        }
        opp.SAP_Province__c = SAP_Province;
        //20230329 lt DB202303246427 --青岛拆分 -- 根据询“省(客户)”赋值SAP上传省 end
        opp.Owner_System__c = opp.OwnerId;
        if(this.lead.OwnerId != null ){
            opp.Ownerid = this.lead.OwnerId ;
@@ -345,6 +461,7 @@
            }
        }
        System.debug('opp.Hospital_Name__c:'+opp.Hospital__c);
        System.debug('dept12345:'+dept.Hospital__c);
        System.debug('opp.LeadSource:'+opp.LeadSource);
        System.debug('opp.Other_Society__c:'+opp.Other_Society__c);
        System.debug('opp.Purchase_Reason__c:'+opp.Purchase_Reason__c);
@@ -359,7 +476,75 @@
        System.debug('opp.Sales_Method__c:'+opp.Sales_Method__c);
        System.debug('opp.Fund_Basis__c:'+opp.Fund_Basis__c);
        System.debug('opp.SAP_Province__c:'+opp.SAP_Province__c);
        update opp;
        // 2022-04-15 OBSAP新增修改 start
        opp.CampaignId = this.lead.Campaign__c;
        System.debug('opp.CampaignId:'+opp.CampaignId);
        // 招标项目
        if (String.isNotBlank(this.lead.Tender_information__c)) {
            opp.Bidding_Project_Name_Bid__c = this.lead.Tender_information__c;
            //SWAG-CEY8GZ 20220620 lt update
            // 新建link
            // Tender_Opportunity_Link__c link = new Tender_Opportunity_Link__c();
            // link.Tender_information__c = this.lead.Tender_information__c;
            // link.Opportunity__c = opp.Id;
            // link.Tender_Opportunity_Uniq__c = String.valueOf(this.lead.Tender_information__c) + String.valueOf(opp.Id);
            // insert link;
            //SWAG-CEY8GZ 20220620 lt update
        }
        // 经销商询价
        // 2022-05-20 调整经销商询价的更新顺序 ssm start
        //SWAG-CEY8GZ 20220620 lt update
        // Agency_Opportunity__c ao = null;
        if (String.isNotBlank(this.lead.Agency_Opportunity__c)) {
            opp.Agency_Opportunity__c = this.lead.Agency_Opportunity__c;
            // 经销商询价绑定询价
            // ao = [select Id, Change_To_Opportunity__c from Agency_Opportunity__c where Id = :this.lead.Agency_Opportunity__c];
            // ao.Change_To_Opportunity__c = opp.Id;
        }
        // 2022-04-15 OBSAP新增修改 end
        //update opp;
        insert opp;
        this.oppId = opp.ID;
        this.lead.Status = System.Label.StateChanges;
        this.lead.begin_opp_name__c = opp.Id;
        this.lead.begin_opp_date__c = Date.today();
        update this.lead;
        // if (String.isNotBlank(this.lead.Tender_information__c)) {
        //     // 新建link
        //     Tender_Opportunity_Link__c link = new Tender_Opportunity_Link__c();
        //     link.Tender_information__c = this.lead.Tender_information__c;
        //     link.Opportunity__c = opp.Id;
        //     link.Tender_Opportunity_Uniq__c = String.valueOf(this.lead.Tender_information__c) + String.valueOf(opp.Id);
        //     insert link;
        // }
        // if (ao != null && ao.Id != null) {
        //     update ao;
        // }
        //SWAG-CEY8GZ 20220620 lt update
        // 2022-05-20 调整经销商询价的更新顺序 ssm end
        // //SWAG-CF589P【委托】【P:OBSAP】报价委托相关新需求评估 fy start
        List<QuoteIrai__c> quoteir=[select id,Opportunity__c,Lead__c from QuoteIrai__c where Lead__c =:leadId];
        List<QuoteIrai__c> quoteirupdate = new List<QuoteIrai__c>();
        if(quoteir.size()>0){
            for(QuoteIrai__c quo : quoteir){
                if(quo.Opportunity__c==null||quo.Opportunity__c==''){
                    quo.Opportunity__c=opp.Id;
                    quoteirupdate.add(quo);
                }
            }
        }
        System.debug('leadId++'+leadId);
        System.debug('quoteir++'+quoteir);
        System.debug('quoteirupdate++'+quoteirupdate);
        if(quoteirupdate.size()>0){
            update quoteirupdate;
        }
        // //SWAG-CF589P【委托】【P:OBSAP】报价委托相关新需求评估 fy end
        return null;
    }
    
@@ -379,8 +564,9 @@
    /** 
     *  選択した診療科を取得
     */
    public Account getDepartment(){
        List<Account> deptList = [select Id, Hospital__c, Department_Class__c from Account where id =: this.sltDep];
    public Account getDepartment(String depId){
        List<Account> deptList = [select Id, Hospital__c, Department_Class__c, Department_Class_Wd__c from Account where id =: depId];
        // List<Account> deptList = [select Id, Hospital__c, Department_Class__c from Account where id =: this.sltDep];
        Account dept = deptList[0];
        return dept;
    }