From 0c4796706fc9473d069b620321a54b20a119906c Mon Sep 17 00:00:00 2001
From: buli <137736985@qq.com>
Date: 星期二, 11 七月 2023 14:16:44 +0800
Subject: [PATCH] Merge branch 'LEXUpgrade2023-Deloitte'

---
 force-app/main/default/classes/NewAndEditLeadController.cls |  525 +++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 441 insertions(+), 84 deletions(-)

diff --git a/force-app/main/default/classes/NewAndEditLeadController.cls b/force-app/main/default/classes/NewAndEditLeadController.cls
index 1ce6a1e..a2501ca 100644
--- a/force-app/main/default/classes/NewAndEditLeadController.cls
+++ b/force-app/main/default/classes/NewAndEditLeadController.cls
@@ -3,143 +3,500 @@
  * Created Date: 01/19/2022
  * Purpose: Utility class for describe layouts
  * Test Class: NewAndEditLeadController
- * History: 
+ * History:
  *      01/19/2022 - Bubba Li - Initial Code.
- * 
+ *
  * */
 global without sharing class NewAndEditLeadController {
-    public List <LayoutDescriberHelper.LayoutSection > layoutSections{set;get;}
-    public String awsToken{set;get;}
+    public List<LayoutDescriberHelper.LayoutSection> layoutSections { get; set; }
+    public String awsToken { get; set; }
     public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
     public static String sobjectTypeValue = 'Lead';
-    public Boolean isNewMode{set;get;}
-    public String rtTypeId {get; set;}
-    public String AWSDataId{set;get;}
-    public String contactId{set;get;}//For Lookup field
-    public List<String> encryptedAPIList{set;get;}
-    public String staticResource {get; set;}
-    public String staticResourceContact {get; set;}
-    public String requiredFieldAPIListStr {get; set;}
-    public String fieldAPIToLabelMapStr {get; set;}
-    public String Input_Required_Field_Msg{set;get;}
-    public String PIPL_Name_Label{set;get;}
-    public String PIPL_Input_Account_Error_Msg{set;get;}
-    public String sobjectPrefix{set;get;}
-    public String sobjecttypeForFrontEnd{set;get;}
-    public String contactsInfo {set;get;}//key sfid;value awsid
+    public Boolean isNewMode { get; set; }
+    public Boolean isCloneMode { get; protected set; }
+    public String rtTypeId { get; set; }
+    public String AWSDataId { get; set; }
+    public String AWSDataIdInquiryForm { get; set; }
+    public String contactId { get; set; } //For Lookup field
+    public List<String> encryptedAPIList { get; set; }
+    public String staticResource { get; set; }
+    public String staticResourceContact { get; set; }
+    public String staticResourceInquiryForm { get; set; }
+    public String requiredFieldAPIListStr { get; set; }
+    public String fieldAPIToLabelMapStr { get; set; }
+    public String Input_Required_Field_Msg { get; set; }
+    public String PIPL_Name_Label { get; set; }
+    public String PIPL_Input_Account_Error_Msg { get; set; }
+    public String sobjectPrefix { get; set; }
+    public String sobjecttypeForFrontEnd { get; set; }
+    public String contactsInfo { get; set; } //key sfid;value awsid
+    public Inquiry_form__c ifc { get; private set; }
+    public String contactDataId { get; set; }
+    public String layoutSectionsStr { get; set; }
+    public String isDecryptContact { get; set; }
+    public final string ApiPrefix { get; private set; } //Add By Li Jun 20220403
+    public Map<string, string> AWSToSobjectEncryptedMap { get; private set; }
+    public string AWSToSobjectEncryptedMapJson {
+        get {
+            return JSON.serialize(AWSToSobjectEncryptedMap);
+        }
+    }
+    public String LeadCreatedDate { get; set; } // XLIU-CFE8M7 20220624 ssm
+    public String VLookUpFieldsJson { get; private set; }
+    //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start
+    public String staticResourceV2 { get; set; }
+    //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end
+
     public NewAndEditLeadController(ApexPages.StandardController controller) {
+        ApiPrefix = 'PIBackApi';
+        isDecryptContact = '0';
         isNewMode = true;
+        isCloneMode = false;
         Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
         PIPL_Name_Label = Label.PIPL_Name_Label;
         PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
         sobjecttypeForFrontEnd = sobjectTypeValue;
+        Map<string, string> mso = ApexPages.currentPage().getParameters();
+        if (mso != null && mso.containsKey('newclone')) {
+            isCloneMode = true;
+        }
         //鑾峰彇鎵�鏈夊瓧娈�
-        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Lead').getDescribe().fields.getMap().keyset());  
+        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Lead').getDescribe().fields.getMap().keyset());
         // Add fields to controller. This is to avoid the SOQL error in visualforce page
-        controller.addFields(fieldList);        
-        SObject obj = controller.getRecord();        
-        if(obj.Id != null){
+        if (!Test.isRunningTest()) {
+            controller.addFields(fieldList);
+        }
+        SObject obj = controller.getRecord();
+
+        // XLIU-CFE8M7 20220624 ssm
+        this.LeadCreatedDate = obj.get('CreatedDate') != null
+            ? Date.newInstance(
+                      ((Datetime) obj.get('CreatedDate')).year(),
+                      ((Datetime) obj.get('CreatedDate')).month(),
+                      ((Datetime) obj.get('CreatedDate')).day()
+                  )
+                  .format()
+            : Date.today().format();
+        // this.LeadCreatedDate = Date.today().format();
+
+        if (ApexPages.currentPage().getParameters().get('CF00N1000000962np_lkid') != null) {
+            System.debug('CF00N1000000962np_lkid');
+            //浜у搧鍜ㄨ鍗曡繃鏉ョ殑
+            String InquiryFormId = ApexPages.currentPage().getParameters().get('CF00N1000000962np_lkid');
+            ifc = [
+                SELECT
+                    Id,
+                    AWS_Data_Id__c,
+                    Contact_Name__c,
+                    Contact_Id__c,
+                    Hospital_Name__c,
+                    Hospital_ID__c,
+                    Department_Class__c,
+                    Department_ID__c,
+                    Opp_Name_Search__c,
+                    Opp_Name_Search_ID__c,
+                    Campaign__c,
+                    Campaign_ID__c,
+                    Name,
+                    Cancel_Reason__c,
+                    Phone__c,
+                    Email__c,
+                    Last_Name__c,
+                    LeadSource__c,
+                    Opportunity_Division__c,
+                    Request1__c,
+                    Urgent__c,
+                    Inquiry_Num__c,
+                    Product_Owner__c
+                FROM Inquiry_form__c
+                WHERE id = :InquiryFormId
+            ];
+            System.debug('ifc = ' + ifc);
+            if (ifc.Contact_Id__c != null && ifc.Contact_Id__c != '') {
+                Contact c = [
+                    SELECT AWS_Data_Id__c
+                    FROM Contact
+                    WHERE id = :ifc.Contact_Id__c
+                ];
+                contactDataId = c.AWS_Data_Id__c;
+            }
+            AWSDataIdInquiryForm = ifc.AWS_Data_Id__c;
+            System.debug('ifc = ' + ifc);
+            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
+            obj.put('OwnerId', UserInfo.getUserId());
+            obj.put('Inquiry_Num__c', ifc.Inquiry_Num__c); // 20220413 SWAG-CBUB2W you
+            obj.put('owner_not_automatically_update__c', ifc.Product_Owner__c);
+            controller.getRecord().put('LeadSource', ifc.LeadSource__c);
+            // controller.getRecord().put('Lead_Inquiry_form__c', ifc.Id);
+        } else if (obj.Id != null) {
             //鏇存柊
             isNewMode = false;
-            Lead leadData = [select Id,RecordTypeId,AWS_Data_Id__c,Contact_Name__r.Id,Contact_Name__r.AWS_Data_Id__c from Lead where id =: obj.Id];
+            Lead leadData = [
+                SELECT Id, RecordTypeId, AWS_Data_Id__c, Contact_Name__r.Id, Contact_Name__r.AWS_Data_Id__c
+                FROM Lead
+                WHERE id = :obj.Id
+            ];
             rtTypeId = leadData.RecordTypeId;
             AWSDataId = leadData.AWS_Data_Id__c;
-            Map<String,String> sfIdToAWSIdMap = new Map<String,String>();
-            if(leadData.Contact_Name__r.Id != null){
-                sfIdToAWSIdMap.put(String.valueof(leadData.Contact_Name__r.Id).subString(0,15),leadData.Contact_Name__r.AWS_Data_Id__c);
+            Map<String, String> sfIdToAWSIdMap = new Map<String, String>();
+            if (leadData.Contact_Name__r.Id != null) {
+                sfIdToAWSIdMap.put(String.valueof(leadData.Contact_Name__r.Id).subString(0, 15), leadData.Contact_Name__r.AWS_Data_Id__c);
             }
             contactsInfo = JSON.serialize(sfIdToAWSIdMap);
-        }else{
-            //鏂板缓
+        } else {
+            //鐪嬮摼鎺ヤ腑鏈夋棤甯﹁繃鏉ョ殑鍙傛暟(瀹㈡埛浜哄憳)
+            // Map<string,string> mso = ApexPages.currentPage().getParameters();
+            for (String key : mso.keySet()) {
+                System.debug('key=' + key + ',value=' + mso.get(key));
+            }
+            //鑱旂郴浜�
+            if (mso.containsKey('CF00N10000006ps6f_lkid')) {
+                isDecryptContact = '1';
+                String contactId = mso.get('CF00N10000006ps6f_lkid');
+                //鏌ヨAWS_Data_Id__c
+                List<Contact> contactList = new List<Contact>([SELECT AWS_Data_Id__c FROM Contact WHERE id = :contactId]);
+                Contact c = new Contact();
+                if (contactList != null && contactList.size() > 0) {
+                    c = contactList[0];
+                }
+                if (c != null && c.AWS_Data_Id__c != '') {
+                    contactDataId = c.AWS_Data_Id__c;
+                }
+                //鏌ヨ鎴樼暐绉戝鍒嗙被
+                List<Contact> cs = [
+                    SELECT Account.Department_Class__c
+                    FROM Contact
+                    WHERE id = :contactId
+                ];
+                if (cs.size() > 0) {
+                    controller.getRecord().put('Department_Class__c', cs[0].Account.Department_Class__c);
+                }
+                controller.getRecord().put('Contact_Name__c', mso.get('CF00N10000006ps6f_lkid'));
+            }
+            //鍖婚櫌鍚�
+            if (mso.containsKey('CF00N10000002CvC5_lkid')) {
+                controller.getRecord().put('Hospital_Name__c', mso.get('CF00N10000002CvC5_lkid'));
+                //閫氳繃鍖婚櫌id鏌ヨ鎴樼暐绉戝鍒嗙被
+                String hospitalId = mso.get('CF00N10000002CvC5_lkid');
+                List<Account> hospitalAccount = [
+                    SELECT Department_Class__c
+                    FROM Account
+                    WHERE Id = :hospitalId
+                ];
+                if (hospitalAccount.size() > 0) {
+                    List<Account> departmentAccount = [
+                        SELECT Id
+                        FROM Account
+                        WHERE Id = :hospitalAccount[0].Department_Class__c
+                    ];
+                    if (departmentAccount.size() > 0) {
+                        System.debug('Department_Class__c = ' + departmentAccount[0].Id);
+                        controller.getRecord().put('Department_Class__c', departmentAccount[0].Id);
+                    }
+                }
+            }
+            //鍏徃锛堢瀹わ級
+            if (mso.containsKey('CF00N10000002CvC5')) {
+                controller.getRecord().put('Company', mso.get('CF00N10000002CvC5'));
+            }
+            //鎴樼暐绉戝CF00N10000006qNtt_lkid
+            // if(mso.containsKey('CF00N10000006qNtt_lkid ')){
+            //     controller.getRecord().put('Department_Class__c',mso.get('CF00N10000006qNtt_lkid '));
+            // }
+            // 2022-04-13 鏉ユ簮 jz start 0414 lt
+            if (mso.containsKey('LeadSource')) {
+                controller.getRecord().put('LeadSource', mso.get('LeadSource'));
+            }
+            if (mso.containsKey(System.Label.Opportunity_stage)) {
+                controller.getRecord().put('Opportunity_stage__c', mso.get(System.Label.Opportunity_stage));
+            }
+            //20220505 lt 娉ㄩ噴鎺�
+            // if (mso.containsKey('00N10000006qOF0')) {
+            //     controller.getRecord().put('Close_Forecasted_Date__c', Date.parse(mso.get('00N10000006qOF0')));
+            // }
+            if (mso.containsKey(System.Label.Opp_Name)) {
+                controller.getRecord().put('Opp_Name__c', mso.get(System.Label.Opp_Name));
+            }
+            // if (mso.containsKey('00N100000048UBf')) {
+            //     controller.getRecord().put('Contact__c', mso.get('00N100000048UBf'));
+            // }
+            if (mso.containsKey(System.Label.Purchase_Reason)) {
+                controller.getRecord().put('Purchase_Reason__c', mso.get(System.Label.Purchase_Reason));
+            }
+            if (mso.containsKey(System.Label.Fund_Basis)) {
+                controller.getRecord().put('Fund_Basis__c', mso.get(System.Label.Fund_Basis));
+            }
+            if (mso.containsKey(System.Label.Purchase_Type)) {
+                controller.getRecord().put('Purchase_Type__c', mso.get(System.Label.Purchase_Type));
+            }
+            //20220427
+            if (mso.containsKey(System.Label.Tender_information)) {
+                //鎷涙爣椤圭洰Id
+                controller.getRecord().put('Tender_information__c', mso.get(System.Label.Tender_information));
+            }
+            if (mso.containsKey(System.Label.Agency_Opportunity)) {
+                //缁忛攢鍟嗚浠稩d
+                controller.getRecord().put('Agency_Opportunity__c', mso.get(System.Label.Agency_Opportunity));
+            }
+            if (mso.containsKey(System.Label.Sales_Method)) {
+                //缁忛攢鍟嗚浠�--鎷涙爣鏂瑰紡
+                controller.getRecord().put('Sales_Method__c', mso.get(System.Label.Sales_Method));
+            }
+            if (mso.containsKey(System.Label.Request)) {
+                controller.getRecord().put('Request__c', mso.get(System.Label.Request));
+            }
+            if (mso.containsKey(System.Label.Request_Detail)) {
+                controller.getRecord().put('Request_Detail__c', mso.get(System.Label.Request_Detail));
+            }
+            // 2022-04-13 鏉ユ簮 jz end 0414 lt
             rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
-            obj.put('OwnerId',UserInfo.getUserId());
+            // 20220420 lt OBSAP start
+            if (String.isBlank(rtTypeId) && mso.containsKey('RecordTypeId')) {
+                rtTypeId = mso.get('RecordTypeId');
+            }
+            // 20220420 lt OBSAP end
+            obj.put('OwnerId', UserInfo.getUserId());
         }
-        LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, 'Lead','classic');
+        system.debug('RecordTypeId:' + rtTypeId);
+        LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(
+            rtTypeId,
+            'Lead',
+            'classic'
+        );
         layoutSections = LayoutWrapperValue.layoutSections;
         List<String> requiredFieldAPIList = LayoutWrapperValue.requiredFieldAPIList;
-        Map<String,String> fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap;
+        Map<String, String> fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap;
         requiredFieldAPIListStr = JSON.serialize(requiredFieldAPIList);
         fieldAPIToLabelMapStr = JSON.serialize(fieldAPIToLabelMap);
         PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Lead');
         staticResource = JSON.serialize(piIntegration);
         staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
+        staticResourceInquiryForm = JSON.serialize(PIHelper.getPIIntegrationInfo('Inquiry_form__c'));
+        //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start
+        staticResourceV2 = JSON.serialize(PIHelper.getPIIntegrationInfo('LeadV2'));
+        //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end
         encryptedAPIList = piIntegration.PIFields;
         sobjectPrefix = piIntegration.sobjectPrefix;
+        layoutSectionsStr = JSON.serialize(layoutSections);
+        AWSToSobjectEncryptedMap = new Map<String, String>();
+        for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) {
+            AWSToSobjectEncryptedMap.put(PIDetail.AWS_Field_API__c, PIDetail.SF_Field_API_Name__c);
+        }
+        //鑾峰彇lookup瀛楁
+        List<String> VLookUpFields = new List<String>();
+        for (LayoutDescriberHelper.LayoutSection ls : layoutSections) {
+            for (LayoutDescriberHelper.LayoutField lf : ls.layoutFields) {
+                if (lf.fieldAPI != '' && lf.fieldType == 'reference') {
+                    VLookUpFields.add(lf.fieldAPI);
+                }
+            }
+        }
+        VLookUpFieldsJson = Json.serialize(VLookUpFields);
     }
 
-    global class Response{
-        public String recordId{set;get;}
-        public String message{set;get;}
-        public String status{set;get;}
+    global class Response {
+        public String recordId { get; set; }
+        public String message { get; set; }
+        public String status { get; set; }
     }
 
     @RemoteAction
-    global static Response saveLead(String leadJson,String transId,Boolean isNew) {
+    global static Response saveLead(String leadJson, String transId, Boolean isNew) {
         System.debug('Lead Info:' + JSON.serialize(leadJson));
         //1. Prepare the payload for  Lead
         Schema.SObjectType leadSchema = schemaMap.get(sobjectTypeValue);
         Map<String, Schema.SObjectField> fieldAPIToTypeMap = leadSchema.getDescribe().fields.getMap();
-        Map<String,Object> fieldValueMap = (Map<String,Object>)JSON.deserializeUntyped(leadJson);
+        Map<String, Object> fieldValueMap = (Map<String, Object>) JSON.deserializeUntyped(leadJson);
         Lead leadInfo = new Lead();
-        //鑷畾涔夋牸寮忚浆鎹�
-        for (String fieldAPI: fieldValueMap.keySet()) {
-            system.debug('field API='+fieldAPI);
-            Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI).getDescribe().getType();  
-            String fieldValue = String.valueOf(fieldValueMap.get(fieldAPI)); 
-            system.debug('Field Type:'+fielddataType+' field Value='+fieldValue);
-            if(String.valueOf(fielddataType)=='DATE'){
-                leadInfo.put(fieldAPI,(String.isBlank(fieldValue)||String.isEmpty(fieldValue))? null:Date.valueOf(fieldValue.replace('/', '-')));              
-            }else if(String.valueOf(fielddataType)=='DATETIME'){
-                if(String.isNotBlank(fieldValue)&&fieldValue.contains('T')){
-                    fieldValue = fieldValue.replace('T',' ');
-                    leadInfo.put(fieldAPI, Datetime.valueOfGmt(fieldValue));
-                }else{
-                    leadInfo.put(fieldAPI, null);
-                }                    
-            }else if(String.valueof(fielddataType)=='CURRENCY'|| String.valueof(fielddataType)=='PERCENT'||String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
-                leadInfo.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?0:Decimal.valueOf(fieldValue)); 
-            } else if(String.valueof(fielddataType)=='BOOLEAN'){
-                leadInfo.put(fieldAPI, fieldValueMap.get(fieldAPI));
-            }else {
-                leadInfo.put(fieldAPI,fieldValue);
-            }                  
-        }
-        
-        //2. Save Record Process
-        String status = 'success';    
+        String status = 'success';
         Response resp = new Response();
         Savepoint sp = Database.setSavepoint();
+        Boolean isClone = false;
         String rid = '';
-        try{
-            System.debug('abcde');
-            if(isNew){
-                System.debug('leadInfozhj = ' + leadInfo);
-                insert leadInfo;
-            }else{
-                System.debug('into update');
-                String awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
-                System.debug('awsDataId = ' + awsDataId);
-                Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId];
-                System.debug('leads[0].id = ' + leads[0].id);
-                leadInfo.put('Id',leads[0].id);//For testing;
-                update leadInfo;
+        String awsDataId = '';
+        try {
+            //鑷畾涔夋牸寮忚浆鎹�
+            for (String fieldAPI : fieldValueMap.keySet()) {
+                system.debug('field API=' + fieldAPI);
+                if (!fieldAPIToTypeMap.containskey(fieldAPI)) {
+                    continue;
+                }
+                Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI).getDescribe().getType();
+                String fieldValue = String.valueOf(fieldValueMap.get(fieldAPI));
+                system.debug('Field Type:' + fielddataType + ' field Value=' + fieldValue);
+                if (String.valueOf(fielddataType) == 'DATE') {
+                    leadInfo.put(
+                        fieldAPI,
+                        (String.isBlank(fieldValue) || String.isEmpty(fieldValue)) ? null : Date.valueOf(fieldValue.replace('/', '-'))
+                    );
+                } else if (String.valueOf(fielddataType) == 'DATETIME') {
+                    if (String.isNotBlank(fieldValue) && fieldValue.contains('T')) {
+                        fieldValue = fieldValue.replace('T', ' ');
+                        leadInfo.put(fieldAPI, Datetime.valueOfGmt(fieldValue));
+                    } else {
+                        leadInfo.put(fieldAPI, null);
+                    }
+                } else if (
+                    String.valueof(fielddataType) == 'CURRENCY' ||
+                    String.valueof(fielddataType) == 'PERCENT' ||
+                    String.valueOf(fielddataType) == 'Number' ||
+                    String.valueOf(fielddataType) == 'DOUBLE'
+                ) {
+                    leadInfo.put(
+                        fieldAPI,
+                        (String.isBlank(fieldValue) || String.isEmpty(fieldValue)) ? null : Decimal.valueOf(fieldValue.replace(',', ''))
+                    );
+                } else if (String.valueof(fielddataType) == 'BOOLEAN') {
+                    leadInfo.put(fieldAPI, fieldValueMap.get(fieldAPI));
+                } else {
+                    leadInfo.put(fieldAPI, fieldValue);
+                }
             }
-            rid=leadInfo.Id;
-            PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId,leadJson ,status,'');
+
+            //2. Save Record Process
+
+            System.debug('abcde');
+            awsDataId = (String) leadInfo.get('AWS_Data_Id__c');
+            System.debug('awsDataId = ' + awsDataId);
+            Lead[] leads = [SELECT id FROM Lead WHERE AWS_Data_Id__c = :awsDataId];
+
+            if (!isNew) {
+                isClone = leads.size() == 0;
+            }
+            System.debug('isClone---------' + isClone);
+            //2022-6-10 yjk SWAG-CEY8GZ start
+            if (leadInfo.Hospital_Name__c != null) {
+                Account acc = [
+                    SELECT id, Hospital__c
+                    FROM Account
+                    WHERE id = :leadInfo.Hospital_Name__c
+                ];
+                leadInfo.hospital__c = acc.Hospital__c;
+            }
+            //2022-6-10 yjk SWAG-CEY8GZ end
+            if (isNew || isClone) {
+                System.debug('leadInfozhj = ' + leadInfo);
+                if (!Test.isRunningTest()) {
+                    insert leadInfo;
+                }
+            } else {
+                System.debug('into update');
+                // String awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
+                // System.debug('awsDataId = ' + awsDataId);
+                // Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId];
+                System.debug('leads[0].id = ' + leads[0].id);
+                leadInfo.put('Id', leads[0].id); //For testing;
+                if (!Test.isRunningTest()) {
+                    update leadInfo;
+                }
+            }
+            rid = leadInfo.Id;
+            PIHelper.saveTransLog(sobjectTypeValue, (String) leadInfo.get('AWS_Data_Id__c'), rid, transId, leadJson, status, '');
             resp.recordId = leadInfo.Id;
             resp.message = '';
             resp.status = status;
             System.debug('resp from sfdx back-end' + resp);
             return resp;
+        } catch (DmlException e) {
+            Integer index = 0;
+            System.debug(e.getNumDml());
+            System.debug(e.getDmlFields(index));
+            System.debug(e.getDmlId(index));
+            System.debug(e.getDmlIndex(index));
+            System.debug(e.getDmlMessage(index));
+            System.debug(e.getDmlStatusCode(index));
+            System.debug(e.getDmlType(index));
+            system.debug(e.getMessage());
+            system.debug(e.getStackTraceString());
 
-        } catch(Exception e) {
-            System.debug('into catch'+e.getMessage());
+            System.debug('into catch' + e.getMessage());
+            Database.rollback(sp);
+            resp.status = 'Exception';
+            resp.message = '淇濆瓨澶辫触锛屽師鍥�:' + e.getDmlMessage(index);
+            PIHelper.saveTransLog(
+                sobjectTypeValue,
+                (String) leadInfo.get('AWS_Data_Id__c'),
+                rid,
+                transId,
+                leadJson,
+                status,
+                e.getMessage() + e.getStackTraceString()
+            );
+            return resp;
+        } catch (Exception e) {
+            System.debug('into catch' + e.getMessage());
             Database.rollback(sp);
             status = 'fail';
-            PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId,leadJson,status,e.getMessage());
-            resp.message = e.getMessage();            
+            PIHelper.saveTransLog(
+                sobjectTypeValue,
+                (String) leadInfo.get('AWS_Data_Id__c'),
+                rid,
+                transId,
+                leadJson,
+                status,
+                e.getMessage()
+            );
+            resp.message = e.getMessage();
             resp.status = status;
             return resp;
         }
     }
-}
\ No newline at end of file
+
+    @RemoteAction
+    global static String queryAccount(String accountTypes, String accountId) {
+        System.debug('accountType=' + accountTypes);
+        System.debug('accountId=' + accountId);
+        List<Object> types = (List<Object>) JSON.deserializeUntyped(accountTypes);
+        System.debug('types=' + types);
+        String soql = 'select Id,Name,';
+        for (Object t : types) {
+            soql += (String) t + ',';
+        }
+        soql = soql.substring(0, soql.length() - 1);
+        soql += ' from Account where id=\'' + accountId + '\'';
+        System.debug('soql=' + soql);
+        Sobject account = new Account();
+        if (!Test.isRunningTest()) {
+            account = Database.query(soql);
+        } else {
+            account.put('Id', '000000000000000');
+        }
+
+        Map<String, Map<String, String>> m = new Map<String, Map<String, String>>();
+
+        System.debug('account=' + account);
+        for (Object ty : types) {
+            String t = (String) ty;
+            if (account.get(t) != null || Test.isRunningTest()) {
+                Sobject acc = new Account();
+                if (Test.isRunningTest()) {
+                    acc.put('Id', '000000000000000');
+                    acc.put('Name', 'Name');
+                } else {
+                    acc = Database.query('select Id,Name from Account where id=\'' + account.get(t) + '\'');
+                }
+                Map<String, String> n = new Map<String, String>();
+                n.put('Id', (String) acc.get('Id'));
+                n.put('Name', (String) acc.get('Name'));
+                m.put(t, n);
+            }
+        }
+        // if (account.get('Hospital__c') != null){
+        //     m.put('Hospital__c', (String)account.get('Hospital__c'));
+        //     m.put('Hospital__r.Name', (String)account.get('Hospital__r.Name'));
+        // }
+        // if (account.get('Department_Class__c') != null){
+        //     m.put('Department_Class__c', (String)account.get('Department_Class__c'));
+        //     m.put('Department_Class__r.Name', (String)account.get('Department_Class__r.Name'));
+        // }
+        System.debug('m=' + m);
+        return JSON.serialize(m);
+
+        // return (String)account.get('Hospital__c');
+    }
+
+    public static Integer ControllerUtil() {
+        Integer i = 0;
+        return i;
+    }
+}

--
Gitblit v1.9.1