public without sharing class StartTradingController {
|
|
/** リードID */
|
public String leadId{get;set;}
|
|
/** リード */
|
public Lead lead{get;set;}
|
|
/** リード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 */
|
public String oppID{get;set;}
|
|
/** 診療科選択値 */
|
public String sltDep{get;set;}
|
/** 診療科選択リスト */
|
public List<SelectOption> depList{get;set;}
|
|
/** 担当者Map */
|
public Map<String,List<SelectOption>> conMap{get;set;}
|
/** 担当者選択値 */
|
public String sltCon{get;set;}
|
/** 担当者選択リスト */
|
public List<SelectOption> conList{get;set;}
|
/** SI引合*/
|
public Boolean SI_Flg{get;set;}
|
|
/** 「なし」ラベル [Chinese:--无--] */
|
public static final String NONE = system.label.StartTrading_None;
|
public static Boolean EscapeLeadUpdate = false;
|
/** パラメータキー:病院 */
|
static final String P_HOSPITAL = system.label.StartTrading_P_Hospital;
|
|
/** パラメータキー:戦略科室分類 */
|
static final String P_DEPT = system.label.StartTrading_P_Dept;
|
|
/** パラメータキー:名称(診療科) */
|
static final String P_NAME = system.label.StartTrading_P_Name;
|
|
/** パラメータキー:引合情報元 */
|
static final String P_LEADS = system.label.StartTrading_P_Leadsource;
|
|
/** パラメータキー:その他学会 */
|
static final String P_SOCIETY = system.label.StartTrading_P_Society;
|
|
/** パラメータキー:主キャンペーン */
|
static final String P_CAMPAIGN = system.label.StartTrading_P_Campaign;
|
|
/** レコードタイプ:引合 */
|
static final String RC_OPP = '引合';
|
|
/** レコードタイプ:引合 */
|
private String Opptype = '';
|
|
/** エラーメッセージ:引合作成権限がない場合 **/
|
static final String ERROR_MSG_NONE_AUTHORITY = system.label.Error_Message26;
|
|
/** 販売店から引合をConvertするフラグ **/
|
private Boolean isAgencyOpp = false;
|
|
|
|
/** 初期処理 */
|
public void init(){
|
// リード情報を取得
|
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,Inquiry_Num__c,CreatedDate,CreatedById
|
from Lead where id =: this.leadId];
|
|
// 診療科選択リストの取得(条件:病院=リード情報の病院名称)
|
List<Account> departmentList = new List<Account>();
|
if (this.lead.Hospital_Name__r.RecordType.DeveloperName == 'HP') {
|
departmentList = [select id, name from Account where Hospital__c =: this.lead.Hospital_Name__c];
|
}
|
else if (this.lead.Hospital_Name__r.Parent.RecordType.DeveloperName == 'HP') {
|
departmentList = [select id, name from Account where ParentId =: this.lead.Hospital_Name__c];
|
}
|
/*
|
// xudan 20140730 販売店を選択する場合、下の契約一覧を出す
|
// TODO 契約状態を見る?
|
else if (this.lead.Hospital_Name__r.RecordType.DeveloperName == 'Agency') {
|
departmentList = [select id, name from Account where ParentId =: this.lead.Hospital_Name__c];
|
isAgencyOpp = true;
|
}
|
*/
|
// xudan 20140730 契約を選択する場合、そのまま出す、フラグ設定
|
else if (this.lead.Hospital_Name__r.Parent.RecordType.DeveloperName == 'Agency') {
|
departmentList = [select id, name from Account where Id =: this.lead.Hospital_Name__c];
|
isAgencyOpp = true;
|
}
|
else {
|
departmentList = [select id, name from Account where Id =: this.lead.Hospital_Name__c];
|
}
|
// 診療科選択リストの設定
|
this.depList = new List<SelectOption>();
|
// 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'))));
|
}
|
// 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
|
// this.sltDep = NONE;
|
this.sltDep = 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>();
|
// 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));
|
// this.conMap.put(NONE, sltOptNasi);
|
// 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
|
this.conList = sltOptNasi;
|
|
// 担当者リストの取得
|
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);
|
}
|
|
// リード所有者の取得
|
this.leadOnwer = [select Province_Text__c from User where Id = :this.lead.OwnerId];
|
|
this.oppID = null;
|
}
|
|
/** 診療科選択リスト変更イベント */
|
public void depChange(){
|
// 診療科選択値によって、担当者選択リストを入れ替える
|
this.conList = this.conMap.get(sltDep);
|
}
|
|
/** キャンセルボタン **/
|
public Pagereference cancel(){
|
return new Pagereference(URL.getSalesforceBaseUrl().toExternalForm() + '/' + this.leadId);
|
}
|
|
/** 取引の開始ボタン **/
|
public PageReference start(){
|
system.debug('进入start()');
|
|
// LHJ 20181012 CHAN-B5G6EZ 购买意向转询价报错 Start
|
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 (sltDep == NONE) {
|
return null;
|
}
|
|
// 選択した診療科を取得
|
Account dept = this.getDepartment();
|
|
// 担当者未選択の場合、リード担当者を登録
|
// if (sltCon == NONE) {
|
// this.addContact(dept);
|
// }
|
Database.LeadConvertResult result = this.convertLead();
|
this.oppID = result.getOpportunityId();
|
ID conID = result.getContactId();
|
|
this.updateContact(conID, dept);
|
this.updateOpportunity(dept);
|
|
// 引合の編集画面の初期値設定
|
//String uri = this.getUriOpportunity(dept);
|
String uri = this.getUri();
|
|
// 引合の編集画面表示
|
//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;
|
}
|
// LHJ 20181012 CHAN-B5G6EZ 购买意向转询价报错 End
|
}
|
|
/**
|
* リードの取引開始
|
*
|
*/
|
public Database.LeadConvertResult convertLead(){
|
this.lead.Status = '確認済み'; // 時間ベースWorkflow解除のため
|
EscapeLeadUpdate = true;
|
update this.lead;
|
|
Database.LeadConvert lc = new database.LeadConvert();
|
lc.setLeadId(this.lead.Id);
|
lc.setAccountId(this.sltDep);
|
if(this.sltCon != NONE){
|
lc.setContactId(this.sltCon);
|
}
|
LeadStatus convertstatus = [select Id, MasterLabel from LeadStatus where IsConverted=true limit 1];
|
lc.setConvertedStatus(convertStatus.MasterLabel);
|
Database.LeadConvert[] lcArray = new Database.LeadConvert[] {lc};
|
Database.LeadConvertResult[] results = Database.convertLead(lcArray);
|
|
return results[0];
|
}
|
|
/** 取引先責任者の更新
|
* @param conID 取引先責任者ID
|
* @param dept 診療科
|
*/
|
public void updateContact(ID conID, Account dept){
|
|
Contact cont = [select ID,Strategic_dept_Class__c from Contact where Id=:conID];
|
cont.Strategic_dept_Class__c = dept.Department_Class__c;
|
update cont;
|
}
|
|
/** 引合の更新
|
* @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);
|
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;
|
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);
|
System.debug('this.lead.Purchase_Reason__c:'+this.lead.Purchase_Reason__c);
|
System.debug('this.lead.Trade__c:'+this.lead.Trade__c);
|
System.debug('this.lead.Sales_Root__c:'+this.lead.Sales_Root__c);
|
System.debug('this.lead.Close_Forecasted_Date__c:'+this.lead.Close_Forecasted_Date__c);
|
System.debug('this.lead.Competitor__c:'+this.lead.Competitor__c);
|
System.debug('this.lead.Hospital_Budget__c:'+this.lead.Hospital_Budget__c);
|
System.debug('this.lead.Promise_Class__c:'+this.lead.Promise_Class__c);
|
System.debug('this.lead.Dicision_Maker__c:'+this.lead.Dicision_Maker__c);
|
System.debug('this.lead.Purchase_Type__c:'+this.lead.Purchase_Type__c);
|
System.debug('this.lead.Sales_Method__c:'+this.lead.Sales_Method__c);
|
System.debug('this.lead.Fund_Basis__c:'+this.lead.Fund_Basis__c);
|
if(this.lead.Opp_Name__c != null && this.lead.Opp_Name__c != ''){
|
opp.Name = this.lead.Opp_Name__c;
|
}
|
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 = '引合';
|
opp.owner_not_automatically_update__c = this.lead.owner_not_automatically_update__c;
|
opp.Lead_Num__c = this.lead.Lead_No__c;
|
opp.Lead_CreateBy__c = this.lead.CreatedById;
|
opp.Lead_CreateDate__c = this.lead.CreatedDate;
|
opp.CurrencyIsoCode = 'CNY';
|
opp.Purchase_Type__c = 'SI(手術室案件)';
|
system.debug('dddddddddddddddddddddd:'+this.lead.owner_not_automatically_update__c);
|
Integer year = date.today().year();
|
Integer month = date.today().month();
|
Date nextMonthEndDay = date.newInstance(year, month, 1);
|
Date thisMonthEndDay = nextMonthEndDay.addMonths(1);
|
thisMonthEndDay = thisMonthEndDay.addDays(-1);
|
nextMonthEndDay = nextMonthEndDay.addMonths(2);
|
nextMonthEndDay = nextMonthEndDay.addDays(-1);
|
opp.Close_Forecasted_Date__c = this.lead.Close_Forecasted_Date__c;
|
opp.Close_Forecasted_Date__c = opp.Close_Forecasted_Date__c == null ? thisMonthEndDay : opp.Close_Forecasted_Date__c;
|
if (nextMonthEndDay > opp.Close_Forecasted_Date__c) {
|
opp.CloseDate = nextMonthEndDay;
|
} else {
|
opp.CloseDate = opp.Close_Forecasted_Date__c.addDays(30);
|
}
|
// xudan 20140730 販売店から引合をConvertする場合、Hospital__cをAccountIdを同じにする
|
if (isAgencyOpp) {
|
opp.Hospital__c = opp.AccountId;
|
} else {
|
opp.Hospital__c = dept.Hospital__c;
|
opp.Department_Class__c = dept.Department_Class__c;
|
}
|
//2021-07-08 mzy SWAG-C4H99E 询价中的来源更改 start
|
if('科室提案'.equals(this.lead.LeadSource) || 'OPD/SIS'.equals(this.lead.LeadSource)
|
|| '公共平台'.equals(this.lead.LeadSource) //测试环境 加的 对应的是 医拓网
|
|| '电话'.equals(this.lead.LeadSource) || '医拓网'.equals(this.lead.LeadSource) ){
|
opp.LeadSource = '直接拜访';
|
}else {
|
opp.LeadSource = this.lead.LeadSource;
|
}
|
//2021-07-08 mzy SWAG-C4H99E 询价中的来源更改 end
|
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;
|
if (this.lead.Competitor__c != null && this.lead.Competitor__c != '') {
|
opp.Competitor__c = this.lead.Competitor__c;
|
}
|
if (this.lead.Opportunity_stage__c != null && this.lead.Opportunity_stage__c != '') {
|
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.Dicision_Maker__c = this.lead.Dicision_Maker__c;
|
//**********************************************************************************
|
opp.Purchase_Type__c = SI_Flg==true?'SI(手術室案件)':this.lead.Purchase_Type__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;
|
opp.Owner_System__c = opp.OwnerId;
|
if(this.lead.OwnerId != null ){
|
opp.Ownerid = this.lead.OwnerId ;
|
}
|
opp.Wholesale_Price__c = this.lead.Wholesale_Price__c;
|
List<Lead> leadcList = [Select (Select CampaignId From CampaignMembers order by CreatedDate desc) From Lead l where l.id =: this.leadId];
|
for(Lead leadc : leadcList){
|
List<CampaignMember> cmList = leadc.CampaignMembers;
|
for (CampaignMember cm : cmList) {
|
opp.CampaignId = cm.CampaignId;
|
break;
|
}
|
}
|
System.debug('opp.Hospital_Name__c:'+opp.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);
|
System.debug('opp.Trade__c:'+opp.Trade__c);
|
System.debug('opp.Sales_Root__c:'+opp.Sales_Root__c);
|
System.debug('opp.Close_Forecasted_Date__c:'+opp.Close_Forecasted_Date__c);
|
System.debug('opp.Competitor__c:'+opp.Competitor__c);
|
System.debug('opp.Hospital_Budget__c:'+opp.Hospital_Budget__c);
|
System.debug('opp.Promise_Class__c:'+opp.Promise_Class__c);
|
System.debug('opp.Dicision_Maker__c:'+opp.Dicision_Maker__c);
|
System.debug('opp.Purchase_Type__c:'+opp.Purchase_Type__c);
|
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);
|
|
// 2022-04-15 OBSAP新增修改 start
|
opp.CampaignId = this.lead.Campaign__c;
|
System.debug('opp.CampaignId:'+opp.CampaignId);
|
// 2022-04-15 OBSAP新增修改 end
|
update opp;
|
return null;
|
}
|
|
/** 引合の編集画面のURI取得
|
* @return 引合編集画面初期値用URI
|
*/
|
public String getUri(){
|
// キャンセル時戻り画面
|
String uri = 'retURL=%2F' + this.oppID;
|
|
// エントリ商談(引合)
|
uri += '&ent=Opportunity';
|
|
return uri;
|
}
|
|
/**
|
* 選択した診療科を取得
|
*/
|
public Account getDepartment(){
|
List<Account> deptList = [select Id, Hospital__c, Department_Class__c from Account where id =: this.sltDep];
|
Account dept = deptList[0];
|
return dept;
|
}
|
}
|