From 69dc5df6ec51f6f7f6737c61d9c4c1e7757a2b96 Mon Sep 17 00:00:00 2001
From: Li Jun <buli@deloitte.com.cn>
Date: 星期四, 17 三月 2022 21:05:08 +0800
Subject: [PATCH] PIPLFixBugs0317V1

---
 force-app/main/default/classes/NewAndEditLeadController.cls           |   39 +
 force-app/main/default/pages/ViewReportDecryptInfo.page               |    3 
 force-app/main/default/staticresources/AWSService.resource-meta.xml   |    5 
 force-app/main/default/pages/NewAndEditRepairSubOrder.page            |  112 +++
 force-app/main/default/classes/NewAndEditContactController.cls        |   62 +
 force-app/main/default/pages/SearchAWSContactByNamePage.page-meta.xml |    7 
 force-app/main/default/classes/NewAndEditCaseController.cls           |    2 
 force-app/main/default/pages/SearchAWSContactByNamePage.page          |  197 ++++++
 force-app/main/default/pages/SearchVisitor.page                       |    1 
 force-app/main/default/classes/NewAndEditBaseController.cls           |   19 
 force-app/main/default/pages/ViewContactDecryptInfo.page              |    3 
 force-app/main/default/pages/ViewQISReportDecryptInfo.page            |    1 
 force-app/main/default/pages/UploadPdf.page                           |  123 ++-
 force-app/main/default/pages/NewAndEditAgencyContact.page             |   94 ++
 force-app/main/default/pages/SearchContactPage.page                   |    3 
 force-app/main/default/classes/ContactTriggerHandler.cls              |    3 
 force-app/main/default/pages/FixtureRentalPDF.page                    |    2 
 force-app/main/default/pages/NewAndEditQIS.page                       |   15 
 force-app/main/default/classes/NewAndEditReportController.cls         |   12 
 force-app/main/default/classes/NFM624Rest.cls                         |    2 
 force-app/main/default/pages/ViewAgencyContactDecryptInfo.page        |    1 
 force-app/main/default/classes/LayoutDescriberHelper.cls              |    6 
 force-app/main/default/pages/CM_SearchContactService.page             |   32 
 force-app/main/default/classes/SearchContactController.cls            |    2 
 force-app/main/default/classes/NewAndEditAddressController.cls        |    6 
 force-app/main/default/pages/StraightBackAddress.page                 |   10 
 force-app/main/default/classes/NewAndEditQISController.cls            |    2 
 force-app/main/default/pages/NewAndEditReport.page                    |  108 ++-
 force-app/main/default/staticresources/AWSService/AWSService.js       |  384 +++++++++++++
 force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js        |   14 
 force-app/main/default/classes/NewAndEditInquiryFormController.cls    |   20 
 force-app/main/default/pages/NewAndEditInquiryForm.page               |  163 +++-
 force-app/main/default/pages/NewAndEditAddress.page                   |   70 ++
 force-app/main/default/pages/NewAndEditLead.page                      |  208 ++++++
 force-app/main/default/pages/ViewLeadDecryptInfo.page                 |    3 
 35 files changed, 1,475 insertions(+), 259 deletions(-)

diff --git a/force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js b/force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
index 52e7b79..fff0276 100644
--- a/force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
+++ b/force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
@@ -12,8 +12,8 @@
                 component.set('v.allselectlist',res.allselectlist);
                 component.set('v.doclist',res.doclist);
                 // PIPL update Yin Mingjie 21/02/2022 start
-                // component.find('select_agency_person').set('v.options', this.conv_selected(res.allselectlist.AgencyPerson__c));
-                this.search_contact(component, event, helper,res.allselectlist.AgencyPerson__c);
+                component.find('select_agency_person').set('v.options', this.conv_selected(res.allselectlist.AgencyPerson__c));
+                // this.search_contact(component, event, helper,res.allselectlist.AgencyPerson__c);
                 // PIPL update Yin Mingjie 21/02/2022 end
                 component.find('select_department').set('v.options', this.conv_selected(res.allselectlist.Department_Cateogy__c));
                 component.find('select_purpose_type').set('v.options', this.conv_selected(res.allselectlist.Purpose_Type__c));
@@ -57,7 +57,11 @@
             var searchUrl = result.searchUrl;
             this.search_core(token,searchUrl,payload,(result)=>{
                 if(result.status == '0'){
-                    this.to_contact_list(result,contactData,component);
+                    if(result.object != null){
+                        this.to_contact_list(result,contactData,component);
+                    }else{
+                        component.set('v.login',false);
+                    }
                 }else{
                     this.error('AWS search status : ' + result.status);
                     component.set('v.login',false);
@@ -299,8 +303,8 @@
     
     get_agency_person_name : function(component, agency_person_value) {
         // PIPL update Yin Mingjie 21/02/2022 start
-        // var allselectlist = component.get('v.allselectlist.AgencyPerson__c');
-        var allselectlist = component.get('v.allselectlistAgencyPerson');
+        var allselectlist = component.get('v.allselectlist.AgencyPerson__c');
+        // var allselectlist = component.get('v.allselectlistAgencyPerson');
         // PIPL update Yin Mingjie 21/02/2022 end
         var new_label = '';
         for (var i = 0; i < allselectlist.length; i++) {
diff --git a/force-app/main/default/classes/ContactTriggerHandler.cls b/force-app/main/default/classes/ContactTriggerHandler.cls
index d5d7095..fcbbc45 100644
--- a/force-app/main/default/classes/ContactTriggerHandler.cls
+++ b/force-app/main/default/classes/ContactTriggerHandler.cls
@@ -295,6 +295,9 @@
                     String firstNameStr = String.isNotBlank(contact.FirstName) ? contact.FirstName:'';
                     String contactFullName = lastNameStr + firstNameStr;
                     contactFullName = contact.LastName_Encrypted__c;// 20220314 PI鏀归�� by Bright
+                    if(string.isBlank(contactFullName)){
+                        continue;
+                    }      
                     String accountId = String.valueOf(contact.AccountId).SubString(0,15);
                     Map<String,Contact> contactFullNameMap = new  Map<String,Contact>();
                     if (accountContactMap.containsKey(accountId)) {
diff --git a/force-app/main/default/classes/LayoutDescriberHelper.cls b/force-app/main/default/classes/LayoutDescriberHelper.cls
index 94863c0..806dd48 100644
--- a/force-app/main/default/classes/LayoutDescriberHelper.cls
+++ b/force-app/main/default/classes/LayoutDescriberHelper.cls
@@ -114,6 +114,7 @@
                                         layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf); 
                                     }
                                     if(lf.isRequired){
+                                        system.debug(lf.fieldAPI+' is required');
                                         requiredFieldAPIList.add(lf.fieldAPI);
                                     }
                                     if(string.isBlank(lf.fieldAPI)){
@@ -130,6 +131,9 @@
                                 for(String nameField:nameDetail){
                                     LayoutField lf = new LayoutField();
                                     lf.isRequired = (Boolean)fields.get('required');
+                                    if(nameField == 'Salutation'){
+                                        lf.isRequired = false;
+                                    }
                                     lf.isPlaceHolder = placeholderF;
                                     lf.editableField = isEditable;
                                     lf.fieldAPI = nameField;
@@ -141,6 +145,7 @@
                                         layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf); 
                                     }
                                     if(lf.isRequired){
+                                        system.debug(lf.fieldAPI+' is required');
                                         requiredFieldAPIList.add(lf.fieldAPI);
                                     }                                      
                                     if(string.isBlank(lf.fieldAPI)){
@@ -168,6 +173,7 @@
                                 layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf);
                             }
                             if(lf.isRequired){
+                                system.debug(lf.fieldAPI+' is required');
                                 requiredFieldAPIList.add(lf.fieldAPI);
                             }
                             if(string.isBlank(lf.fieldAPI)){
diff --git a/force-app/main/default/classes/NFM624Rest.cls b/force-app/main/default/classes/NFM624Rest.cls
index ada2b1b..8b9b01b 100644
--- a/force-app/main/default/classes/NFM624Rest.cls
+++ b/force-app/main/default/classes/NFM624Rest.cls
@@ -42,6 +42,7 @@
         public String DepartmentName; //鎵�灞炵瀹�
         public String RelatedDepartment; //鍏宠仈SFDC绉戝 瀹㈡埛绠$悊缂栫爜(鎵嬪啓) AgentCode_Ext__c
         public String Type; //鑱岀
+        public String TypeEncrypted;//鑱岀Hash add for pipl 20220316 sushanhu
         public String ContactAddress; //鑱旂郴鍦板潃
         public String ContactAddressEncrypted;//鑱旂郴鍦板潃瀵嗘枃
         public Boolean ForbiddenStatus; //骞冲彴鐢ㄦ埛绂佺敤鏍囪瘑 
@@ -299,6 +300,7 @@
                     ct.LastName = gedata.Name;
                     ct.FirstName = '';
                     ct.Type__c = gedata.Type;
+                    ct.Type_Encrypted__c = gedata.TypeEncrypted;//add for pipl sushanhu 20220316
                     ct.MobilePhone = gedata.Mobile;
                     ct.RegSource__c = comefrom;
                     ct.UnifiedI_Contact_ID__c = gedata.ContactId; //缁熶竴骞冲彴Id
diff --git a/force-app/main/default/classes/NewAndEditAddressController.cls b/force-app/main/default/classes/NewAndEditAddressController.cls
index 7311d8f..4fca044 100644
--- a/force-app/main/default/classes/NewAndEditAddressController.cls
+++ b/force-app/main/default/classes/NewAndEditAddressController.cls
@@ -27,6 +27,9 @@
     public String sobjectPrefix{set;get;}
     public String sobjecttypeForFrontEnd{set;get;}
     public String contactsInfo {set;get;}//key sfid;value awsid
+    public String layoutSectionsStr {get; set;}
+    // public String CurrentUserId{private set; get;}
+    // public String CurrentUserName{private set; get;}
     public NewAndEditAddressController(ApexPages.StandardController controller) {
         isNewMode = true;
         Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
@@ -65,6 +68,9 @@
         staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
         encryptedAPIList = piIntegration.PIFields;
         sobjectPrefix = piIntegration.sobjectPrefix;
+        layoutSectionsStr = JSON.serialize(layoutSections);
+        // CurrentUserName = UserInfo.getName();
+        // CurrentUserId = UserInfo.getUserId();
     }
     
     global class Response{
diff --git a/force-app/main/default/classes/NewAndEditBaseController.cls b/force-app/main/default/classes/NewAndEditBaseController.cls
index 49c45e5..d8d41e6 100644
--- a/force-app/main/default/classes/NewAndEditBaseController.cls
+++ b/force-app/main/default/classes/NewAndEditBaseController.cls
@@ -1,12 +1,15 @@
 global abstract class NewAndEditBaseController {
 
     public List <LayoutDescriberHelper.LayoutSection > layoutSections{set;get;}
+    public String layoutSectionsStr {get; set;}//for dynamic add readonly attribute 20220316 by Mingjie
     public String awsToken{set;get;}
     public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
     public String sobjectTypeValue {private set; get;}
     public Boolean isNewMode{set;get;}
     public String rtTypeId {get; set;}
     public String AWSDataId{set;get;}
+    public String CurrentUserId{private set;get;}
+    public String CurrentUserName{private set;get;}
 
     // 褰撳墠瀵硅薄鎵�鏈夌殑鍔犲瘑瀛楁闆嗗悎
     public List<String> encryptedAPIList{private set;get;}
@@ -47,7 +50,7 @@
     public List<String> VLookUpFields{get;private set;}
     public String VLookUpFieldsJson{get{return Json.serialize(VLookUpFields);}}
     public List<String> LookUpOverrideFields{get;private set;}
-    public string LookUpOverrideFieldsMapJson{get;private set;}
+    public string LookUpOverrideFieldsMapJson{get; set;}
     
 
     public NewAndEditBaseController(){
@@ -57,6 +60,8 @@
         VLookUpFields = new List<String>();
         layoutEncryptedAPIList = new List<String>();
         LookUpOverrideFields = new List<String>();
+        CurrentUserName = UserInfo.getName();
+        CurrentUserId = UserInfo.getUserId();
     }
 
     protected virtual void Init(SObject obj){
@@ -98,7 +103,7 @@
             rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
         }
         PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo(sobjectTypeValue);
-        layoutEncryptedAPIList = piIntegration.PIFields;
+        //layoutEncryptedAPIList = piIntegration.PIFields;
         encryptedAPIList = piIntegration.PIFields;
         staticResource = JSON.serialize(piIntegration);
         sobjectPrefix = piIntegration.sobjectPrefix;
@@ -117,7 +122,7 @@
         system.debug(AWSToSobjectNonEncryptedMapJson);
         try{
             LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, sobjectTypeValue,'classic');
-            layoutSections = LayoutWrapperValue.layoutSections;
+            layoutSections = LayoutWrapperValue.layoutSections;         
             List<String> requiredFieldAPIList = LayoutWrapperValue.requiredFieldAPIList;
             Map<String,String> fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap;
             List<String> fieldApiList = new List<String>(); 
@@ -131,17 +136,19 @@
                         }
 
                         //鍦╲iew瑙e瘑section涓彧闇�鏄剧ず褰撳墠layout涓殑鍔犲瘑瀛楁
-                        // if (encryptedAPIList.contains(lf.fieldAPI)) {
-                        //     layoutEncryptedAPIList.add(lf.fieldAPI);
-                        // }
+                        if (encryptedAPIList.contains(lf.fieldAPI)) {
+                             layoutEncryptedAPIList.add(lf.fieldAPI);
+                         }
                     }
                 }
             }
+            layoutSectionsStr = JSON.serialize(layoutSections); //for dynamic add readonly attribute 20220316 by Mingjie
             fieldApiListStr = JSON.serialize(fieldApiList);
             fieldAPIToLabelMapStr = JSON.serialize(fieldAPIToLabelMap);
             requiredFieldAPIListStr = JSON.serialize(requiredFieldAPIList);
             //awsToken = AWSServiceTool.getAWSToken();
         }catch(Exception e){
+            layoutEncryptedAPIList = piIntegration.PIFields;
             system.debug('Exception from get layout service:'+e.getmessage());
         }
     }
diff --git a/force-app/main/default/classes/NewAndEditCaseController.cls b/force-app/main/default/classes/NewAndEditCaseController.cls
index b27867a..a1a69fb 100644
--- a/force-app/main/default/classes/NewAndEditCaseController.cls
+++ b/force-app/main/default/classes/NewAndEditCaseController.cls
@@ -27,6 +27,7 @@
     public String sobjectPrefix{set;get;}
     public String sobjecttypeForFrontEnd{set;get;}
     public String contactsInfo {set;get;}//key sfid;value awsid
+    public String layoutSectionsStr {get; set;}
     public NewAndEditCaseController(ApexPages.StandardController controller) {
         isNewMode = true;
         Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
@@ -68,6 +69,7 @@
         staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
         encryptedAPIList = piIntegration.PIFields;
         sobjectPrefix = piIntegration.sobjectPrefix;
+        layoutSectionsStr = JSON.serialize(layoutSections);
     }
     global class Response{
         public String recordId{set;get;}
diff --git a/force-app/main/default/classes/NewAndEditContactController.cls b/force-app/main/default/classes/NewAndEditContactController.cls
index 59c3e6e..87e1afe 100644
--- a/force-app/main/default/classes/NewAndEditContactController.cls
+++ b/force-app/main/default/classes/NewAndEditContactController.cls
@@ -15,35 +15,43 @@
             unifiedIContactID = c.UnifiedI_Contact_ID__c;
         }
 
-        // AWSToSobjectNonEncryptedMap.put('lastName', 'LastName');
-        // AWSToSobjectNonEncryptedMap.put('phone', 'Phone');
-        // AWSToSobjectNonEncryptedMap.put('email', 'Email');
-        // AWSToSobjectNonEncryptedMap.put('medicalStaffFullName', 'MedicalStaff_Full_name__c');
-        // AWSToSobjectNonEncryptedMap.put('mobilePhone', 'MobilePhone');
-        // AWSToSobjectNonEncryptedMap.put('title', 'Title');
-        // AWSToSobjectNonEncryptedMap.put('olyAssistantType', 'OLY_Assistant_Type__c');
-        // AWSToSobjectNonEncryptedMap.put('jobCategoryPicklist', 'Job_Category_picklist__c');
-        // AWSToSobjectNonEncryptedMap.put('type', 'Type__c');
-        // AWSToSobjectNonEncryptedMap.put('contactAddress', 'Contact_address__c');
-        // AWSToSobjectNonEncryptedMap.put('contactType', 'ContactType__c');
-        // AWSToSobjectNonEncryptedMap.put('doctorDivision1', 'Doctor_Division1__c');
-        // AWSToSobjectNonEncryptedMap.put('uniqueNumber', 'UniqueNumber__c');
-
-        // AWSToSobjectEncryptedMap.put('lastNameEncrypt', 'LastName_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('phoneEncrypt', 'Phone_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('emailEncrypt', 'Email_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('medicalStaffFullNameEncrypt', 'MedicalStaff_Full_name_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('mobilePhoneEncrypt', 'MobilePhone_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('titleEncrypt', 'Title_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('olyAssistantTypeEncrypt', 'OLY_Assistant_Type_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('jobCategoryPicklistEncrypt', 'Job_Category_picklist_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('typeEncrypt', 'Type_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('contactAddressEncrypt', 'Contact_address_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('contactTypeEncrypt', 'ContactType_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('doctorDivision1Encrypt', 'Doctor_Division1_Encrypted__c');
-        // AWSToSobjectEncryptedMap.put('uniqueNumberEncrypt', 'UniqueNumber_Encrypted__c');
+    }
+    
+    PageReference RedirectStandardPage(){
+        Map<string,string> mso = ApexPages.currentPage().getParameters();
+        system.debug(mso);
+        mso.remove('sfdc.override');
+        PageReference pg = new PageReference('/003/e');
+        mso.putAll(mso);
+        pg.getParameters().put('nooverride','1');
+        pg.setRedirect(true);
+        return pg;
     }
 
+    public PageReference PageLoad(){
+        system.debug('rtTypeId='+rtTypeId);
+        string s = null;
+        
+        if(!string.isBlank(rtTypeId)){
+            s = Schema.SObjectType.Contact.getRecordTypeInfosById().get(rtTypeId).getDeveloperName();
+            if(s == 'Agency' || s == 'Internal_staff'){
+                return RedirectStandardPage();
+            }
+        }
+        string accid = ApexPages.currentPage().getParameters().get('accid');
+        if(!string.isBlank(accid)){
+            List<Account> accs = [select RecordType.DeveloperName from account where id = :accid];
+            if(accs.size()>0){
+                s = accs[0].RecordType.DeveloperName;
+                if(s == 'Office' || s == 'AgencyContact' || s == 'Agency'){
+                    return RedirectStandardPage();
+                }
+            }
+            
+            
+        }
+        return null;
+    }
     
     @RemoteAction
     global static Response saveContact(String leadJson,String transId,Boolean isNew) {
diff --git a/force-app/main/default/classes/NewAndEditInquiryFormController.cls b/force-app/main/default/classes/NewAndEditInquiryFormController.cls
index b3d2e0c..1246cf2 100644
--- a/force-app/main/default/classes/NewAndEditInquiryFormController.cls
+++ b/force-app/main/default/classes/NewAndEditInquiryFormController.cls
@@ -7,6 +7,7 @@
     public String leadId{set;get;}//For Lead Lookup
     public String staticResourceContact {get; set;}
     public String staticResourceLead {get; set;}
+    public String urlCheckContactAWSid {get; set;}
     public NewAndEditInquiryFormController(ApexPages.StandardController controller) {
         List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Inquiry_form__c').getDescribe().fields.getMap().keyset());  
         // Add fields to controller. This is to avoid the SOQL error in visualforce page
@@ -26,11 +27,28 @@
         staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
         //Lead淇℃伅锛堟悳绱㈡煡璇uery url鐢級
         staticResourceLead = JSON.serialize(PIHelper.getPIIntegrationInfo('Lead'));
+
+        checkUrl('CF00N1000000962n8_lkid','Contact');
     }
 
-    
     @RemoteAction
     global static Response saveInquiryForm(String leadJson,String transId,Boolean isNew) {
         return save(new Inquiry_form__c(),leadJson,transId,isNew);
     }
+
+    private void checkUrl(String urlStr, String sobjType){
+        Map<String, String> urlFieldMap = new Map<String, String>();
+        urlFieldMap = ApexPages.currentPage().getParameters();
+        if (urlFieldMap.containsKey(urlStr)) {
+            String sobjId = urlFieldMap.get(urlStr);
+            String soql = 'select id,AWS_Data_Id__c from ' + sobjType;
+            soql += ' where id=\'' + sobjId + '\'';
+            Sobject sobj = Database.query(soql);
+
+            Map<String, String> m = new Map<String, String>();
+            m.put((String)sobjId, (String)sobj.get('AWS_Data_Id__c'));
+
+            LookUpOverrideFieldsMapJson = JSON.serialize(m);
+        }
+    }
 }
\ No newline at end of file
diff --git a/force-app/main/default/classes/NewAndEditLeadController.cls b/force-app/main/default/classes/NewAndEditLeadController.cls
index 1ce6a1e..e5f9865 100644
--- a/force-app/main/default/classes/NewAndEditLeadController.cls
+++ b/force-app/main/default/classes/NewAndEditLeadController.cls
@@ -15,10 +15,12 @@
     public Boolean isNewMode{set;get;}
     public String rtTypeId {get; set;}
     public String AWSDataId{set;get;}
+    public String AWSDataIdInquiryForm{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 staticResourceInquiryForm{get; set;}
     public String requiredFieldAPIListStr {get; set;}
     public String fieldAPIToLabelMapStr {get; set;}
     public String Input_Required_Field_Msg{set;get;}
@@ -27,7 +29,12 @@
     public String sobjectPrefix{set;get;}
     public String sobjecttypeForFrontEnd{set;get;}
     public String contactsInfo {set;get;}//key sfid;value awsid
+    public Inquiry_form__c ifc{get; private set;}
+    public String contactDataId{get; set;}
+    public String layoutSectionsStr {get; set;}
+    public String isQueryContact{get; set;}
     public NewAndEditLeadController(ApexPages.StandardController controller) {
+        isQueryContact = '0';
         isNewMode = true;
         Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
         PIPL_Name_Label = Label.PIPL_Name_Label;
@@ -37,8 +44,22 @@
         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){
+        SObject obj = controller.getRecord();    
+        
+        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 from Inquiry_form__c where id = :InquiryFormId];
+            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());
+        }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];
@@ -49,6 +70,18 @@
                 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 if(ApexPages.currentPage().getParameters().get('CF00N10000006ps6f_lkid') != null){
+            //鑱旂郴浜鸿繃鏉ョ殑鐐瑰嚮鏂板缓鎰忓悜
+            isQueryContact = '1';
+            String contactId = ApexPages.currentPage().getParameters().get('CF00N10000006ps6f_lkid');
+            Lead leadData = [select Id,RecordTypeId,AWS_Data_Id__c,Contact_Name__r.Id,Contact_Name__r.AWS_Data_Id__c from Lead where id =:contactId];
+            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);
+            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
+            obj.put('OwnerId',UserInfo.getUserId());
         }else{
             //鏂板缓
             rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
@@ -63,8 +96,10 @@
         PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Lead');
         staticResource = JSON.serialize(piIntegration);
         staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
+        staticResourceInquiryForm = JSON.serialize(PIHelper.getPIIntegrationInfo('Inquiry_form__c'));
         encryptedAPIList = piIntegration.PIFields;
         sobjectPrefix = piIntegration.sobjectPrefix;
+        layoutSectionsStr = JSON.serialize(layoutSections);
     }
 
     global class Response{
diff --git a/force-app/main/default/classes/NewAndEditQISController.cls b/force-app/main/default/classes/NewAndEditQISController.cls
index 83f7535..94bcb4f 100644
--- a/force-app/main/default/classes/NewAndEditQISController.cls
+++ b/force-app/main/default/classes/NewAndEditQISController.cls
@@ -1,5 +1,7 @@
 global with sharing class NewAndEditQISController extends NewAndEditBaseController{
+    public String Input_Required_Field_Msg{set;get;}
     public NewAndEditQISController(ApexPages.StandardController controller) {
+        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
         List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('QIS_Report__c').getDescribe().fields.getMap().keyset());  
         controller.addFields(fieldList);
         Init(controller.getRecord());
diff --git a/force-app/main/default/classes/NewAndEditReportController.cls b/force-app/main/default/classes/NewAndEditReportController.cls
index 53ca9f1..638443e 100644
--- a/force-app/main/default/classes/NewAndEditReportController.cls
+++ b/force-app/main/default/classes/NewAndEditReportController.cls
@@ -11,17 +11,18 @@
     public String staticResourceContact {get; set;}
     public String requiredFieldAPIListStr {get; set;}
     public String fieldAPIToLabelMapStr {get; set;}
-    public String requiredErrorMsg{set;get;}
+    public String Input_Required_Field_Msg{set;get;}
     public String contactsInfo {set;get;}
     public String PIPL_Input_Account_Error_Msg{set;get;}
     public String SaveAndNewButtonUrl{get;private set;}
     public String sobjectPrefix{get;private set;}
     public String sobjecttypeForFrontEnd{set;get;}
     public String sobjectId{set;get;}
+    public String layoutSectionsStr {get; set;}
     public NewAndEditReportController(ApexPages.StandardController controller) {
         sobjectId = [SELECT CustomObjectId,CustomObjectName  FROM CustomObjectUserLicenseMetrics   where CustomObjectName ='Report' limit 1].CustomObjectId;
         isNewMode = true;
-        requiredErrorMsg = Label.Input_Required_Field_Msg;
+        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
         PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
         sobjecttypeForFrontEnd = sobjectTypeValue;
         //鑾峰彇鎵�鏈夊瓧娈�
@@ -77,6 +78,7 @@
         encryptedAPIList = piIntegration.PIFields;
         staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
         sobjectPrefix = piIntegration.sobjectPrefix;
+        layoutSectionsStr = JSON.serialize(layoutSections);
     }
 
     global class Response{
@@ -98,20 +100,22 @@
         System.debug('鑷畾涔夋牸寮忚浆鎹㈠紑濮�');
         //鑷畾涔夋牸寮忚浆鎹�
         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)); 
             if(String.isBlank(fieldValue)){
                 continue;
             }
             if(String.valueOf(fielddataType)=='DATE'){
+                System.debug('DATE fieldAPI = '+fieldAPI+' filedData = '+String.valueOf(fieldValueMap.get(fieldAPI)));
                 reportInfo.put(fieldAPI, Date.valueOf(String.valueOf(fieldValueMap.get(fieldAPI)).replace('/', '-')));
             }else if(String.valueOf(fielddataType)=='DATETIME'){
                 String dt = String.valueOf(fieldValueMap.get(fieldAPI));
                 if(String.isNotBlank(dt)&&dt.contains('T')){
                     dt = dt.replace('T',' ');
                     reportInfo.put(fieldAPI, Datetime.valueOfGmt(dt));
-                }             
+                }else if(String.isNotBlank(dt))  {
+                    reportInfo.put(fieldAPI, Datetime.valueOf(dt));
+                }          
             }else if(String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
                 reportInfo.put(fieldAPI, Decimal.valueOf(String.valueOf(fieldValueMap.get(fieldAPI))));
             } else if(String.valueof(fielddataType)=='BOOLEAN'){
diff --git a/force-app/main/default/classes/SearchContactController.cls b/force-app/main/default/classes/SearchContactController.cls
index aa95550..e151f0b 100644
--- a/force-app/main/default/classes/SearchContactController.cls
+++ b/force-app/main/default/classes/SearchContactController.cls
@@ -43,7 +43,7 @@
         }
         List<String> awsDataIds = (List<String>) JSON.deserialize(awsContactIds, List<String>.class);
         Map<String,Contact> awsIdToContactMapTemp = new Map<String,Contact>();
-        List<Contact> conListTemp = new List<Contact>([select Id,AWS_Data_Id__c from Contact where AWS_Data_Id__c in:awsDataIds]);
+        List<Contact> conListTemp = new List<Contact>([select Id,AWS_Data_Id__c,Account.Name from Contact where AWS_Data_Id__c in:awsDataIds]);
         for(Contact con:conListTemp){
             awsIdToContactMapTemp.put(con.AWS_Data_Id__c,con);
         }
diff --git a/force-app/main/default/pages/CM_SearchContactService.page b/force-app/main/default/pages/CM_SearchContactService.page
index 9968e6b..e0bb42c 100644
--- a/force-app/main/default/pages/CM_SearchContactService.page
+++ b/force-app/main/default/pages/CM_SearchContactService.page
@@ -7,13 +7,14 @@
     <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
     <style>
-        .decrypt{
-            position: relative;
-            text-align: left;
-            display: block;
-            margin-left: 5px;
-            margin-top: -5px;
+        .decrypt{position: absolute;
+        		top: 0;
+        		left: 100%;
+        		display: none;
+        		text-align: left;
+    			padding-left: 5px;
         }
+		a:hover .decrypt{display: block;width: 150px}
     </style>
     <script type="text/javascript">
 
@@ -25,6 +26,13 @@
         var now_edit_id = '';
         var aws_result = {};
         searchContactAll();
+    	function Foo(){
+        	j$('[aws-id]').each(function(i,e){
+                let awsDataId = j$(e).attr('aws-id');
+                let piInformation = 'Name:'+contact[awsDataId].lastName +'<br/>' +'Phone:'+ (contact[awsDataId].phone ? contact[awsDataId].phone :'');
+            	j$(e).find('.decrypt').html(piInformation);
+            });
+        }
 
         function preparePayloadForSearchContact(){
             let searchPayload = new Object();
@@ -48,6 +56,7 @@
                     contact[contacts[i].dataId] = temp;
                 }
                 console.log(JSON.stringify(contact));
+                Foo();
             };
             AWSService.search(staticResources.searchUrl,data,searchCallBack,staticResources.token);
         }
@@ -137,7 +146,7 @@
             // createDiv.style.position = "absolute";
             // parentNode.appendChild(createDiv);  
             console.log('dataId:'+dataId+'awsDataId Value:'+awsDataId);
-            let piInformation = 'Name:'+contact[awsDataId].lastName +'\n' +'Phone:'+contact[awsDataId].phone
+            let piInformation = 'Name:'+contact[awsDataId].lastName +'\n' +'Phone:'+ (contact[awsDataId].phone ? contact[awsDataId].phone :'');
             document.getElementById(dataId+'_'+awsDataId).innerText = piInformation;
         }
 
@@ -260,7 +269,7 @@
                 <table class="edittable" border="0" style="border-collapse: collapse;width:580px;table-layout:fixed;">
                     <colgroup>
                         <col width="50px" />
-                        <col width="100px" />
+                        <col width="200px" />
                         <col width="380px" />
                         <col width="50px" />
                     </colgroup>
@@ -284,10 +293,11 @@
                         <!-- <td><a href="#" onclick="setContact('{!lineinfo.lineNo}');" id="943114607025717249" onmouseover="showPIDiv('943114607025717249')" onmouseout="hidePIDiv('943114607025717249')">{!lineinfo.con.Name}</a></td> -->
                         <!-- 2022/02/15 寮犲崕寤� 瑙e瘑淇℃伅 start -->
                         <td>
-                            <a href="#" onclick="setContact('{!lineinfo.lineNo}','{!lineinfo.con.AWS_Data_Id__c}');" id="{!lineinfo.con.AWS_Data_Id__c}" onmouseover="showPIDiv('{!lineinfo.con.id}','{!lineinfo.con.AWS_Data_Id__c}')" onmouseout="hidePIDiv('{!lineinfo.con.id}','{!lineinfo.con.AWS_Data_Id__c}')">
-                                {!lineinfo.con.Name}
+                            <a href="/{!lineinfo.con.Id}" onclick="setContact('{!lineinfo.lineNo}','{!lineinfo.con.AWS_Data_Id__c}');" aws-id="{!lineinfo.con.AWS_Data_Id__c}" style="position:relative">
+                                <span class="encrypt">{!lineinfo.con.Name}</span>
+                                <span class="decrypt"></span>
                             </a>
-                            <span id="{!lineinfo.con.id}_{!lineinfo.con.AWS_Data_Id__c}" class="decrypt"></span>
+                            
                         </td>
                         <!-- 2022/02/15 寮犲崕寤� 瑙e瘑淇℃伅 end -->
                         <td>{!lineinfo.con.AccountName__c}</td>
diff --git a/force-app/main/default/pages/FixtureRentalPDF.page b/force-app/main/default/pages/FixtureRentalPDF.page
index ff8c772..778049b 100644
--- a/force-app/main/default/pages/FixtureRentalPDF.page
+++ b/force-app/main/default/pages/FixtureRentalPDF.page
@@ -378,7 +378,7 @@
                     document.getElementById("allPage:Shippmentadress").innerHTML = data.object.directShippmentAddress;
                     //document.getElementById("Caller_phone__c").innerHTML = data.object.callerPhone;
                     
-                    setTimeout(() => {
+                    setTimeout(function() {
                         jsPdfDownload(); 
                     }, 1500);
                 }, staticResources.token);
diff --git a/force-app/main/default/pages/NewAndEditAddress.page b/force-app/main/default/pages/NewAndEditAddress.page
index d8e3c51..7af33ed 100644
--- a/force-app/main/default/pages/NewAndEditAddress.page
+++ b/force-app/main/default/pages/NewAndEditAddress.page
@@ -1,3 +1,10 @@
+<!--
+  @description       : 
+  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
+  @group             : 
+  @last modified on  : 03-17-2022
+  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
+-->
 <apex:page standardController="Address__c" extensions="NewAndEditAddressController" id="page">
     <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
     <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
@@ -78,13 +85,24 @@
             //     error_msg += ';閭欢鏍煎紡閿欒';
             // }
             let phone = document.querySelector(textPhone);
-
-            if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
-                error_msg += ';鐢佃瘽鍙风爜閿欒';
+            if(phone ){
+                if(phone.value){
+                    if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
+                    	error_msg += ';鐢佃瘽鍙风爜閿欒';
+                    }
+                }else{
+                    if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){
+                        error_msg += ';鐢佃瘽鍙风爜閿欒';
+                    }
+                }
             }
 
-            for(let e of document.getElementsByTagName('select')){
-                for(let op of e.options){
+            let es = document.getElementsByTagName('select')
+            for(let ei in es){
+                let e = es[ei];
+                for(let opi in e.options){
+                    let op = e.options[opi];
+                    if(!op)continue;
                     if(op.value == "*****" && op.selected){
                         error_msg += ';涓嬫媺妗嗕笉鑳戒富鍔ㄩ�夋嫨瀵嗘枃閫夐」';
                     }
@@ -293,7 +311,8 @@
         function replaceSearchContactLookup() {
             let lookUpNode = htmlToElement(contactHtmlString);
             console.log(lookUpNode);
-            if (!{!isNewMode}) {
+            let eleContactValue = document.querySelector("[data-id='Contacts__c']").parentNode.parentNode.children[1].value;
+            if (!{!isNewMode} || (eleContactValue != '000000000000000')) {
                 //1. Query Contact from AWS by AWSDataId
                 queryContactName()
                 // document.querySelector("[data-id='Contacts__c']").value = '鐜嬪';
@@ -392,6 +411,16 @@
             </apex:repeat>
             <script>
                 sfdcPage.appendToOnloadQueue(function () {
+                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
+                    for (let m = 0; m < layoutSections.length; m++) {
+                        let layoutSection = layoutSections[m].layoutFields;
+                        for (let n = 0; n < layoutSection.length; n++) {
+                            let layoutField = layoutSection[n];
+                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) {
+                                document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField);
+                            }
+                        }
+                    }
                     //1. Set Last Name label
                     //document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '濮撳悕';
                     //2. Query AWS Data by dataId 
@@ -404,6 +433,35 @@
                     replaceSearchContactLookup();
                     //3. Set Readonly Attribute
                 // document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
+                    jQuery(".lookupInput").each(function(i,e){
+                        let je =jQuery(e).find('input');
+                        je.attr("readonly","");
+                        je.css("background","unset");
+                        
+                        let dataid = je.attr('data-id');
+                        if(['OwnerId'].indexOf(dataid) > -1) return;
+                        jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="'+dataid+'" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
+                    })
+                    
+                    jQuery(".lookupInput").on("mouseenter","img[generate]",function(e){
+                        this.className = "closeIconOn";
+                    });
+                    
+                    jQuery(".lookupInput").on("mouseleave","img[generate]",function(e){
+                        this.className = "closeIcon"
+                    });
+                    
+                    jQuery(".lookupInput").on("click","img[generate]",function(e){
+                        let id = jQuery("input[data-id='"+jQuery(this).attr("data-id")+ "']").attr("id");
+                        let input = document.getElementById(id);
+                        if(input){
+                        	input.value = '';
+							let hidden = document.getElementById(id+'_lkid');
+                            if(hidden){
+                            	hidden.value = '';
+                            }
+                        }
+                    });
                 });
             </script>
             <div class="pbBottomButtons">
diff --git a/force-app/main/default/pages/NewAndEditAgencyContact.page b/force-app/main/default/pages/NewAndEditAgencyContact.page
index 639f9dc..2007b25 100644
--- a/force-app/main/default/pages/NewAndEditAgencyContact.page
+++ b/force-app/main/default/pages/NewAndEditAgencyContact.page
@@ -81,7 +81,8 @@
                                    let arr = data.object[f].split(';');
 
                                    // 缁欓殣钘忕殑select璧嬪��
-                                   for(let op of ele.options){
+                                   for(let opi in ele.options){
+                                       let op = ele.options[opi]
                                        op.selected = arr.indexOf(op.value)>-1;
                                    }
                                    
@@ -136,7 +137,8 @@
         }
 
         var GetEleApiName = function(ele){
-            for(let c of ele.classList){
+            for(let ci in ele.classList){
+                let c = ele.classList[ci]
                 if(c.indexOf(config.ApiPrefix+'_')>-1){
                     return c.replace(config.ApiPrefix+'_','');
                 }
@@ -167,8 +169,10 @@
                 error_msg += ';鐢佃瘽鍙风爜閿欒';
             }
 
-            for(let e of document.getElementsByTagName('select')){
-                for(let op of e.options){
+            for(let ei in document.getElementsByTagName('select')){
+                let e = e.options[ei];
+                for(let opi in e.options){
+                    let op = e.options[opi];
                     if(op.value == "*****" && op.selected){
                         error_msg += ';涓嬫媺妗嗕笉鑳戒富鍔ㄩ�夋嫨瀵嗘枃閫夐」';
                     }
@@ -207,9 +211,9 @@
                             v = ele.value;
                         }
 
-                        if(v && v != "000000000000000"){
+                        // if(v && v != "000000000000000"){
                             result[field_api_name] = v;
-                        }
+                        // }
                         
                     }
                 } else if (ele.type == 'checkbox') {
@@ -399,18 +403,13 @@
             let sfId = document.getElementById(document.querySelector("[data-id='Contact__c']").id + '_lkid').value;
             let contactsInfo = JSON.parse('{!LookUpOverrideFieldsMapJson}');
             let dataId = contactsInfo[sfId];
-            let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-            fetch(url, {
-                method: 'GET',
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi-token': staticResources.token
+            
+            AWSService.query(staticResourcesContact.queryUrl,dataId,function(result){
+                if(result.object){
+                    document.querySelector("[data-id='Contact__c']").value = result.object.lastName;
                 }
-            }).then((data) => {
-                return data.json();
-            }).then((result) => {
-                document.querySelector("[data-id='Contact__c']").value = result.object.lastName;
-            })
+                
+            },staticResources.token);
         }
 
     </script>
@@ -477,6 +476,10 @@
             </apex:repeat>
             <script>
                 sfdcPage.appendToOnloadQueue(function () {
+
+                    //Replace Vlookup Field
+                    replaceSearchContactLookup();
+                    
                     //1. Set Last Name label
                     //document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '濮撳悕';
                     //2. Query AWS Data by dataId 
@@ -484,10 +487,63 @@
                     if (!{!isNewMode}) {
                         blockme();
                         QuerySobjectFromAWS();
+                    }else{
+                        let ot = jQuery('input[data-id="OwnerId"]');
+                        let oi = document.getElementById(ot.attr("id")+'_lkid');
+                        ot.val('{!CurrentUserName}');
+                        ot.attr("readonly","");
+                        ot.css("background","unset");
+                        ot.css("border","0");
+                        ot.css("outline","0");
+                        
+                        if(oi){
+                            oi.value = '{!CurrentUserId}'
+                        }
+                    }
+                    jQuery('a[data-id="OwnerId"]').remove();
+
+                    jQuery(".lookupInput").each(function(i,e){
+                        let je =jQuery(e).find('input');
+                        je.attr("readonly","");
+                        je.css("background","unset");
+                        
+                        let dataid = je.attr('data-id');
+                        if(['Hospital_Name__c','Department_Class__c','OwnerId'].indexOf(dataid) > -1) return;
+                        jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="'+dataid+'" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
+                    })
+                    
+                    jQuery(".lookupInput").on("mouseenter","img[generate]",function(e){
+                        this.className = "closeIconOn";
+                    });
+                    
+                    jQuery(".lookupInput").on("mouseleave","img[generate]",function(e){
+                        this.className = "closeIcon"
+                    });
+                    
+                    jQuery(".lookupInput").on("click","img[generate]",function(e){
+                        let id = jQuery("input[data-id='"+jQuery(this).attr("data-id")+ "']").attr("id");
+                        let input = document.getElementById(id);
+                        if(input){
+                            input.value = '';
+                            let hidden = document.getElementById(id+'_lkid');
+                            if(hidden){
+                                hidden.value = '';
+                            }
+                        }
+                    });
+
+                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
+                    for (let m = 0; m < layoutSections.length; m++) {
+                        let layoutSection = layoutSections[m].layoutFields;
+                        for (let n = 0; n < layoutSection.length; n++) {
+                            let layoutField = layoutSection[n];
+                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) {
+                                document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField);
+                            }
+                        }
                     }
 
-                    //Replace Vlookup Field
-                    replaceSearchContactLookup();
+                    
                 });
             </script>
             <div class="pbBottomButtons">
diff --git a/force-app/main/default/pages/NewAndEditInquiryForm.page b/force-app/main/default/pages/NewAndEditInquiryForm.page
index be37f91..f505ce3 100644
--- a/force-app/main/default/pages/NewAndEditInquiryForm.page
+++ b/force-app/main/default/pages/NewAndEditInquiryForm.page
@@ -84,7 +84,8 @@
                                    let arr = data.object[f].split(';');
 
                                    // 缁欓殣钘忕殑select璧嬪��
-                                   for(let op of ele.options){
+                                   for(let opi in ele.options){
+                                       let op = ele.options[opi];
                                        op.selected = arr.indexOf(op.value)>-1;
                                    }
                                    
@@ -141,7 +142,8 @@
         }
 
         var GetEleApiName = function(ele){
-            for(let c of ele.classList){
+            for(let ci in ele.classList){
+                let c = ele.classList[ci];
                 if(c.indexOf(config.ApiPrefix+'_')>-1){
                     return c.replace(config.ApiPrefix+'_','');
                 }
@@ -176,8 +178,10 @@
                 }
             }
             
-            for(let e of document.getElementsByTagName('select')){
-                for(let op of e.options){
+            for(let ei in document.getElementsByTagName('select')){
+                let e = document.getElementsByTagName('select')[ei];
+                for(let opi in e.options){
+                    let op = e.options[opi];
                     if(op.value == "*****" && op.selected){
                         error_msg += ';涓嬫媺妗嗕笉鑳戒富鍔ㄩ�夋嫨瀵嗘枃閫夐」';
                     }
@@ -216,9 +220,9 @@
                             v = ele.value;
                         }
 
-                        if(v && v != "000000000000000"){
+                        //if(v && v != "000000000000000"){
                             result[field_api_name] = v;
-                        }
+                        //}
                         
                     }
                 } else if (ele.type == 'checkbox') {
@@ -330,7 +334,7 @@
             // Check Required Field
             let checkRequiredFieldMsgResult = checkRequiredFieldMsg(sobjJson);
             if (checkRequiredFieldMsgResult) {
-                alertErrorMessage('requiredErrorMsg' + checkRequiredFieldMsgResult);
+                alertErrorMessage('{!$Label.Input_Required_Field_Msg}' + checkRequiredFieldMsgResult);
                 return
             }
             // //3. Prepare the payload for New PI API To AWS - To Do
@@ -356,7 +360,7 @@
             errorMsgNode.className = '';
         }
         
-        var newSearchContactWindow = null;  
+        var newSearchContactWindow = null;          
         var contactHtmlString = '<img src="/img/s.gif" onclick="searchContact(\'page:form:contactId\')" alt="Reference Document Number Lookup" class="lookupIcon"  title="Reference Document Number Lookup (New Window)"/>';
         function htmlToElement(html) {
             var template = document.createElement('template');
@@ -408,7 +412,8 @@
         function replaceSearchContactLookup() {
             let lookUpNode = htmlToElement(contactHtmlString);
             console.log(lookUpNode);
-            if (!{!isNewMode}) {
+            let eleContactValue = document.querySelector("[data-id='Contact_Name__c']").parentNode.parentNode.children[0].value;
+            if (!{!isNewMode} || (eleContactValue != '000000000000000')) {
                 //1. Query Contact from AWS by AWSDataId
                 queryContactName()
             }           
@@ -420,26 +425,34 @@
         function queryContactName() {
             let sfId = document.getElementById(document.querySelector("[data-id='Contact_Name__c']").id + '_lkid').value;
             let contactsInfo = JSON.parse('{!LookUpOverrideFieldsMapJson}');
-            let dataId = contactsInfo[sfId];
-            // let queryContactBack = function(data){
-            //     //To Do later
-            //     console.log('ContactData = ' + data.object);
-                
-            //     document.querySelector("[data-id='Contact_Name__c']").value = data.object.lastName;
+            // if (contactsInfo == null){
+            //     contactsInfo = JSON.parse('{!urlCheckContactAWSid}');
             // }
-            // AWSService.query(staticResourcesContact.queryUrl, dataId, queryContactBack, staticResources.token);
-            let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-            fetch(url, {
-                method: 'GET',
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi-token': staticResources.token
-                }
-            }).then((data) => {
-                return data.json();
-            }).then((result) => {
-                document.querySelector("[data-id='Contact_Name__c']").value = result.object.lastName;
-            })
+            let dataId = contactsInfo[sfId];
+            // let dataId = JSON.parse('{!urlCheckContactAWSid}')
+            // if (dataId == '') {
+            //     let contactsInfo = JSON.parse('{!LookUpOverrideFieldsMapJson}');
+            //     dataId = contactsInfo[sfId];
+            // }
+            let queryContactBack = function(data){
+                //To Do later
+                console.log('ContactData = ' + data.object);
+                
+                document.querySelector("[data-id='Contact_Name__c']").value = data.object.lastName;
+            }
+            AWSService.query(staticResourcesContact.queryUrl, dataId, queryContactBack, staticResources.token);
+            // let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
+            // fetch(url, {
+            //     method: 'GET',
+            //     headers: {
+            //         'Content-Type': 'application/json',
+            //         'pi-token': staticResources.token
+            //     }
+            // }).then((data) => {
+            //     return data.json();
+            // }).then((result) => {
+            //     document.querySelector("[data-id='Contact_Name__c']").value = result.object.lastName;
+            // })
         }
         
         //For Lead Search
@@ -485,25 +498,25 @@
             let sfId = document.getElementById(document.querySelector("[data-id='Lead_link__c']").id + '_lkid').value;
             let leadsInfo = JSON.parse('{!LookUpOverrideFieldsMapJson}');
             let dataId = leadsInfo[sfId];
-            // let queryLeadBack = function(data){
-            //     //To Do later
-            //     console.log('ContactData = ' + data.object);
+            let queryLeadBack = function(data){
+                //To Do later
+                console.log('ContactData = ' + data.object);
                 
-            //     document.querySelector("[data-id='Lead_link__c']").value = data.object.lastName;
-            // }
-            // AWSService.query(staticResourcesLead.queryUrl, dataId, queryLeadBack, staticResources.token);
-            let url = staticResourcesLead.queryUrl + '?dataId=' + dataId;
-            fetch(url, {
-                method: 'GET',
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi-token': staticResources.token
-                }
-            }).then((data) => {
-                return data.json();
-            }).then((result) => {
-                document.querySelector("[data-id='Lead_link__c']").value = result.object.lastName;
-            })
+                document.querySelector("[data-id='Lead_link__c']").value = data.object.lastName;
+            }
+            AWSService.query(staticResourcesLead.queryUrl, dataId, queryLeadBack, staticResources.token);
+            // let url = staticResourcesLead.queryUrl + '?dataId=' + dataId;
+            // fetch(url, {
+            //     method: 'GET',
+            //     headers: {
+            //         'Content-Type': 'application/json',
+            //         'pi-token': staticResources.token
+            //     }
+            // }).then((data) => {
+            //     return data.json();
+            // }).then((result) => {
+            //     document.querySelector("[data-id='Lead_link__c']").value = result.object.lastName;
+            // })
         }
         
     </script>
@@ -571,6 +584,16 @@
             </apex:repeat>
             <script>
                 sfdcPage.appendToOnloadQueue(function () {
+                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
+                    for (let m = 0; m < layoutSections.length; m++) {
+                        let layoutSection = layoutSections[m].layoutFields;
+                        for (let n = 0; n < layoutSection.length; n++) {
+                            let layoutField = layoutSection[n];
+                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) {
+                                document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField);
+                            }
+                        }
+                    }
                     //1. Set Last Name label
                     //document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '濮撳悕';
                     //2. Query AWS Data by dataId 
@@ -579,13 +602,57 @@
                         blockme();
                         QuerySobjectFromAWS();
                         unblockUI();
-                    }   
+                    }else{
+                        let ot = jQuery('input[data-id="OwnerId"]');
+                        let oi = document.getElementById(ot.attr("id")+'_lkid');
+                        ot.val('{!CurrentUserName}');
+                        ot.attr("readonly","");
+                        ot.css("background","unset");
+                        ot.css("border","0");
+                        ot.css( "outline","0");
+                        jQuery('a[data-id="OwnerId"]').remove();
+                        if(oi){
+                            oi.value = '{!CurrentUserId}'
+                        }
+                    }
                     //Replace Contact Vlookup Field
                     replaceSearchContactLookup();
                     //Replace Lead Vlookup Field
                     replaceSearchLeadLookup(); 
                     document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton");
-                    document.querySelectorAll("[data-id='OwnerId']")[1].classList.add("disabledbutton");
+                    // document.querySelectorAll("[data-id='OwnerId']")[1].classList.add("disabledbutton");
+                    
+                    jQuery('a[data-id="OwnerId"]').remove();
+
+					jQuery(".lookupInput").each(function(i,e){
+                        let je =jQuery(e).find('input');
+                        je.attr("readonly","");
+                        je.css("background","unset");
+                        
+                        let dataid = je.attr('data-id');
+                        if(['Hospital_Name__c','Department_Class__c','OwnerId'].indexOf(dataid) > -1) return;
+                        jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="'+dataid+'" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
+                    })
+                    
+                    jQuery(".lookupInput").on("mouseenter","img[generate]",function(e){
+                        this.className = "closeIconOn";
+                    });
+                    
+                    jQuery(".lookupInput").on("mouseleave","img[generate]",function(e){
+                        this.className = "closeIcon"
+                    });
+                    
+                    jQuery(".lookupInput").on("click","img[generate]",function(e){
+                        let id = jQuery("input[data-id='"+jQuery(this).attr("data-id")+ "']").attr("id");
+                        let input = document.getElementById(id);
+                        if(input){
+                        	input.value = '';
+							let hidden = document.getElementById(id+'_lkid');
+                            if(hidden){
+                            	hidden.value = '';
+                            }
+                        }
+                    });
                 });
             </script>
             <div class="pbBottomButtons">
diff --git a/force-app/main/default/pages/NewAndEditLead.page b/force-app/main/default/pages/NewAndEditLead.page
index a18feb9..86729fa 100644
--- a/force-app/main/default/pages/NewAndEditLead.page
+++ b/force-app/main/default/pages/NewAndEditLead.page
@@ -14,13 +14,14 @@
         AWSService.sfSessionId = '{!GETSESSIONID()}';
         var staticResources = JSON.parse('{!staticResource}');
         var staticResourcesContact = JSON.parse('{!staticResourceContact}');
+        var staticResourceInquiryForm = JSON.parse('{!staticResourceInquiryForm}');
         var requiredFieldAPIList = JSON.parse('{!requiredFieldAPIListStr}');
         var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}');
         var redirectMode = 'Save';//1. Save 2. SaveAndNew
         var requiredAPIToChangedLabelMap = new Map();
         requiredAPIToChangedLabelMap.set('LastName', '{!PIPL_Name_Label}');
         console.log('{!contactsInfo}');
-        var VLookUpFields = new Set(['Hospital_Name__c', 'Department_Class__c', 'Contact_Name__c', 'Campaign__c']);
+        var VLookUpFields = new Set(['Hospital_Name__c', 'Department_Class__c', 'Contact_Name__c', 'Campaign__c', 'Lead_Inquiry_form__c', 'Opp_Name_Search__c']);
         function ProcessPI(leadJson, payloadForNewPI) {
             blockme();
             if ({!isNewMode}) {
@@ -133,11 +134,15 @@
         function QueryLeadFromAWS() {
             AWSService.query(staticResources.queryUrl, '{!AWSDataId}', queryBack, staticResources.token);
         }
+        function QueryLeadFromAWSIFS() {
+            //staticResourceInquiryForm
+            AWSService.query(staticResourceInquiryForm.queryUrl, '{!AWSDataIdInquiryForm}', queryBack, staticResourceInquiryForm.token);
+        }
         var queryBack = function queryBack(data) {
             console.log('data = ' + data);
-            document.querySelector("[data-id='LastName']").value = data.object.lastName.replace(/"/g,"");
-            document.querySelector("[data-id='Phone']").value = data.object.phone.replace(/"/g,"");
-            document.querySelector("[data-id='Email']").value = data.object.email.replace(/"/g,"");
+            document.querySelector("[data-id='LastName']").value = data.object.lastName == null ? '' : data.object.lastName;
+            document.querySelector("[data-id='Phone']").value = data.object.phone == null ? '' : data.object.phone;
+            document.querySelector("[data-id='Email']").value = data.object.email == null ? '' : data.object.email;
             unblockUI();
         };
 
@@ -211,7 +216,7 @@
             return blankRequiredFields;
         }
         function saveLeadProcess(saveMode) {
-           
+
             disableButtonStatus();
             redirectMode = saveMode;
             console.log('redirectMode' + redirectMode);
@@ -298,27 +303,37 @@
                 queryContactName()
                 //document.querySelector("[data-id='Contact_Name__c']").value = '鐜嬪';
             }
-            let parentNode = document.querySelector("[data-id='Contact_Name__c']").parentNode;
-            document.querySelector("[data-id='Contact_Name__c']").removeAttribute("onchange");
-            parentNode.replaceChild(lookUpNode, document.querySelector("[data-id='Contact_Name__c']").parentNode.children[2]);
+        let parentNode = document.querySelector("[data-id='Contact_Name__c']").parentNode;
+        document.querySelector("[data-id='Contact_Name__c']").removeAttribute("onchange");
+        parentNode.replaceChild(lookUpNode, document.querySelector("[data-id='Contact_Name__c']").parentNode.children[2]);
         }
 
         function queryContactName() {
             let sfId = document.getElementById(document.querySelector("[data-id='Contact_Name__c']").id + '_lkid').value;
-            let contactsInfo = JSON.parse('{!contactsInfo}');
-            let dataId = contactsInfo[sfId];
-            let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-            fetch(url, {
-                method: 'GET',
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi-token': staticResources.token
-                }
-            }).then((data) => {
-                return data.json();
-            }).then((result) => {
+            let dataId = '';
+            if ('{!contactsInfo}' != '') {
+                let contactsInfo = JSON.parse('{!contactsInfo}');
+                dataId = contactsInfo[sfId];
+            } else if ('{!contactDataId}' != '') {
+                dataId = '{!contactDataId}';
+            }
+            let queryBackContactName = function queryBackContactName(result){
                 document.querySelector("[data-id='Contact_Name__c']").value = result.object.lastName;
-            })
+            };
+            AWSService.query(staticResourcesContact.queryUrl, dataId, queryBackContactName, staticResourcesContact.token);
+
+            // let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
+            // fetch(url, {
+            //     method: 'GET',
+            //     headers: {
+            //         'Content-Type': 'application/json',
+            //         'pi-token': staticResources.token
+            //     }
+            // }).then((data) => {
+            //     return data.json();
+            // }).then((result) => {
+            //     document.querySelector("[data-id='Contact_Name__c']").value = result.object.lastName;
+            // })
         }
     </script>
     <div class="bPageTitle">
@@ -385,19 +400,156 @@
             </apex:repeat>
             <script>
                 sfdcPage.appendToOnloadQueue(function () {
+
+                    //鍒ゆ柇鏄惁涓哄彧璇婚�夐」
+                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
+                    for (let m = 0; m < layoutSections.length; m++) {
+                        let layoutSection = layoutSections[m].layoutFields;
+                        for (let n = 0; n < layoutSection.length; n++) {
+                            let layoutField = layoutSection[n];
+                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='" + layoutField.fieldAPI + "']") != null) {
+                                document.querySelector("[data-id='" + layoutField.fieldAPI + "']").disabled = !(layoutField.editableField);
+                            }
+                        }
+                    }
+
                     //1. Set Last Name label
                     console.log('NameLabel = ' + '{!PIPL_Name_Label}')
                     document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[0].children[0].innerText = '{!PIPL_Name_Label}';
                     //2. Query AWS Data by dataId 
                     console.log('Mode for Lead Page:' + {!isNewMode});
-                    if (!{!isNewMode}) {
-                        blockme();//for loading search by Li Jun 20220218
-                        QueryLeadFromAWS();
+                if (!{!isNewMode}) {
+                    blockme();//for loading search by Li Jun 20220218
+                    QueryLeadFromAWS();
+                }
+                //Replace Vlookup Field
+                replaceSearchContactLookup();
+                //3. Set Readonly Attribute
+                document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
+
+                //濡傛灉鏄仈绯讳汉杩囨潵鐨勭偣鍑绘柊寤烘剰鍚�
+                if('{!isQueryContact}' == '1'){
+                    //鏌ユ壘瀹㈡埛濮撳悕
+                    queryContactName();
+                }
+
+
+                //濡傛灉鏄骇鍝佸挩璇㈠崟杩囨潵鐨�
+                if ('{!ifc}' != '') {
+                    blockme();
+                    //鐘舵��
+                    document.querySelector("[data-id='Status']").value = '璺熻繘涓�'
+                    //浼氳璇㈤棶鍗�
+                    if ('{!ifc.Id}')
+                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:15:j_id37_lkid').value = '{!ifc.Id}'
+                    if ('{!ifc.Name}')
+                        document.querySelector("[data-id='Lead_Inquiry_form__c']").value = '{!ifc.Name}'
+                    //瀹㈡埛濮撳悕
+                    // if('{!ifc.Contact_Name__c}')
+                    // document.querySelector("[data-id='Contact_Name__c']").value = '{!ifc.Contact_Name__c}'
+                    if ('{!ifc.Contact_Id__c}')
+                        document.getElementById(document.querySelector("[data-id='Contact_Name__c']").id + '_lkid').value = '{!ifc.Contact_Id__c}'
+                    //鍖婚櫌
+                    if ('{!ifc.Hospital_Name__c}')
+                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:2:j_id37_lkold').value = '{!ifc.Hospital_Name__c}'
+                    if ('{!ifc.Hospital_ID__c}')
+                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:2:j_id37_lkid').value = '{!ifc.Hospital_ID__c}'
+                    //鎴樼暐绉戝鍒嗙被
+                    if ('{!ifc.Department_Class__c}')
+                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:4:j_id37_lkold').value = '{!ifc.Department_Class__c}'
+                    if ('{!ifc.Department_ID__c}')
+                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:4:j_id37_lkid').value = '{!ifc.Department_ID__c}'
+                    //宸叉湁璇环鍚嶇О
+                    if ('{!ifc.Opp_Name_Search__c}')
+                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:12:j_id37_lkold').value = '{!ifc.Opp_Name_Search__c}'
+                    if ('{!ifc.Opp_Name_Search_ID__c}')
+                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:12:j_id37_lkid').value = '{!ifc.Opp_Name_Search_ID__c}'
+                    //涓昏瀛︿細
+                    if ('{!ifc.Campaign__c}')
+                        document.getElementById('page:form:block:j_id34:1:j_id35:j_id36:3:j_id37_lkold').value = '{!ifc.Campaign__c}'
+                    if ('{!ifc.Campaign_ID__c}')
+                        document.getElementById('page:form:block:j_id34:1:j_id35:j_id36:3:j_id37_lkid').value = '{!ifc.Campaign_ID__c}'
+                    //鍙栨秷鍘熷洜
+                    if ('{!ifc.Cancel_Reason__c}')
+                        document.querySelector("[data-id='Cancel_Reason__c']").value = '{!ifc.Cancel_Reason__c}'
+                    //鐢佃瘽
+                    if ('{!ifc.Phone__c}')
+                        document.querySelector("[data-id='Phone']").value = '{!ifc.Phone__c}'
+                    //閭欢
+                    if ('{!ifc.Email__c}')
+                        document.querySelector("[data-id='Email']").value = '{!ifc.Email__c}'
+                    //濮撳悕
+                    if ('{!ifc.Last_Name__c}')
+                        document.querySelector("[data-id='LastName']").value = '{!ifc.Last_Name__c}'
+                    //鍜ㄨ鍗曟潵婧�
+                    if ('{!ifc.LeadSource__c}' && document.querySelector("[data-id='LeadSource__c']"))
+                        document.querySelector("[data-id='LeadSource__c']").value = '{!ifc.LeadSource__c}'
+                    //鎰忓悜鍖哄垎
+                    if ('{!ifc.Opportunity_Division__c}')
+                        document.querySelector("[data-id='Opportunity_Division__c']").value = '{!ifc.Opportunity_Division__c}'
+                    //濮旀墭浜嬮」
+                    if ('{!ifc.Request1__c}') {
+                        var Request1__c = '{!ifc.Request1__c}';
+                        //璧嬪�肩粰绗簩涓閫夋
+                        var array = Request1__c.split(';');
+                        //璧嬪�肩粰绗簩涓閫夋
+                        for (var i = 0; i < array.length; i++) {
+                            for (var j = document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options.length - 1; j >= 0; j--) {
+                                if (array[i] == document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options[j].innerHTML) {
+                                    var option = new Option();
+                                    option.text = array[i];
+                                    option.value = j;
+                                    document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[2].children[0].add(option);
+                                }
+                            }
+                        }
+                        //鍒犻櫎绗竴涓閫夋鐨勯噸澶嶅��
+                        for (var i = 0; i < array.length; i++) {
+                            for (var j = document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options.length - 1; j >= 0; j--) {
+                                if (array[i] == document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options[j].innerHTML) {
+                                    document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options[j] = null;
+                                }
+                            }
+                        }
                     }
-                    //Replace Vlookup Field
-                    replaceSearchContactLookup();
-                    //3. Set Readonly Attribute
-                    document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
+                    //绱ф��
+                    if ('{!ifc.Urgent__c}')
+                        document.querySelector("[data-id='urgent__c']").checked = '{!ifc.Urgent__c}' == 'false' ? false : true;
+                    //鏌ユ壘瀹㈡埛濮撳悕
+                    queryContactName();
+                    //瑙e瘑
+                    QueryLeadFromAWSIFS();
+                    unblockUI();
+                }
+                jQuery(".lookupInput").each(function (i, e) {
+                    let je = jQuery(e).find('input');
+                    je.attr("readonly", "");
+                    je.css("background", "unset");
+
+                    let dataid = je.attr('data-id');
+                    if (['Contact_Name__c'].indexOf(dataid) > -1)
+                    jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="' + dataid + '" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
+                })
+
+                jQuery(".lookupInput").on("mouseenter", "img[generate]", function (e) {
+                    this.className = "closeIconOn";
+                });
+
+                jQuery(".lookupInput").on("mouseleave", "img[generate]", function (e) {
+                    this.className = "closeIcon"
+                });
+
+                jQuery(".lookupInput").on("click", "img[generate]", function (e) {
+                    let id = jQuery("input[data-id='" + jQuery(this).attr("data-id") + "']").attr("id");
+                    let input = document.getElementById(id);
+                    if (input) {
+                        input.value = '';
+                        let hidden = document.getElementById(id + '_lkid');
+                        if (hidden) {
+                            hidden.value = '';
+                        }
+                    }
+                });
                 });
             </script>
             <div class="pbBottomButtons">
diff --git a/force-app/main/default/pages/NewAndEditQIS.page b/force-app/main/default/pages/NewAndEditQIS.page
index 63b4410..a263915 100644
--- a/force-app/main/default/pages/NewAndEditQIS.page
+++ b/force-app/main/default/pages/NewAndEditQIS.page
@@ -170,7 +170,7 @@
             let phone = document.querySelector(textPhone);
 
             if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
-                error_msg += ';鐢佃瘽鍙风爜閿欒';
+                error_msg += ';鑱旂郴鐢佃瘽鏍煎紡閿欒';
             }
 
             for(let e of document.getElementsByTagName('select')){
@@ -430,7 +430,7 @@
             // Check Required Field
             let checkRequiredFieldMsgResult = checkRequiredFieldMsg(sobjJson);
             if (checkRequiredFieldMsgResult) {
-                alertErrorMessage('requiredErrorMsg' + checkRequiredFieldMsgResult);
+                alertErrorMessage('{!Input_Required_Field_Msg}' + checkRequiredFieldMsgResult);
                 return
             }
             // //3. Prepare the payload for New PI API To AWS - To Do
@@ -527,6 +527,17 @@
             }
             console.log(api_id_map);
             sfdcPage.appendToOnloadQueue(function () {
+                //鍒ゆ柇鏄惁涓哄彧璇婚�夐」
+                var layoutSections = JSON.parse('{!layoutSectionsStr}');
+                    for (let m = 0; m < layoutSections.length; m++) {
+                        let layoutSection = layoutSections[m].layoutFields;
+                        for (let n = 0; n < layoutSection.length; n++) {
+                            let layoutField = layoutSection[n];
+                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) {
+                                document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField);
+                            }
+                        }
+                    }
                 //1. Set Last Name label
                 //document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '濮撳悕';
                 //2. Query AWS Data by dataId 
diff --git a/force-app/main/default/pages/NewAndEditRepairSubOrder.page b/force-app/main/default/pages/NewAndEditRepairSubOrder.page
index 2a393ec..15bf983 100644
--- a/force-app/main/default/pages/NewAndEditRepairSubOrder.page
+++ b/force-app/main/default/pages/NewAndEditRepairSubOrder.page
@@ -1,3 +1,10 @@
+<!--
+  @description       : 
+  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
+  @group             : 
+  @last modified on  : 03-17-2022
+  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
+-->
 <apex:page standardController="RepairSubOrder__c" extensions="NewAndEditRepairSubOrderController" id="page">
     <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
     <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
@@ -72,22 +79,28 @@
             queryBack:function (data) {
                 console.log('data = ' + data);
                 if(data.object){
-                    for(let f in config.AWSToSobjectNonEncryptedMap){
-                        let ele = GetEleByClass(config.ApiPrefix + "_"+ config.AWSToSobjectNonEncryptedMap[f]);
+                    for(let fi in config.AWSToSobjectNonEncryptedMapKeySet){
+                        let f = config.AWSToSobjectNonEncryptedMapKeySet[fi];
+                        let ele = document.getElementById(api_id_map[config.AWSToSobjectNonEncryptedMap[f]])
                         if(data.object.hasOwnProperty(f) && ele){
                             
                             // 澶氶�夌壒娈婂鐞�
                             if(ele.type == 'select-multiple'){
                                //let me = GetEleByClass(config.ApiPrefix+'_'+field_api_name);
-                               if(ele && data.object[f]){
-                                   let arr = data.object[f].split(';');
-
-                                   // 缁欓殣钘忕殑select璧嬪��
-                                   for(let op of ele.options){
-                                       op.selected = arr.indexOf(op.value)>-1;
+                               if(ele ){
+                                   //_unselected
+                                   let v = '';
+                                   if(data.object[f]){
+                                       v = data.object[f];
                                    }
                                    
-                                   // 鍒╃敤鎸夐挳缁欐樉绀虹殑select璧嬪��
+                                   let arr = v.split(';');
+                                   
+                                   for(let opi in ele.options){
+                                    let op = ele.options[opi];
+                                        if(!op)continue;
+                                       op.selected = arr.indexOf(op.value)>-1;
+                                   }
                                    let ra = document.getElementById(ele.id + '_right_arrow');
                                    if(ra){
                                        ra.click();
@@ -96,6 +109,10 @@
                                }
                             }else{
                                 ele.value = data.object[f];
+                            }
+
+                            if(ele.type.indexOf("select")>-1 && ele.value){
+                                jQuery(ele).change()
                             }
                             
                         }
@@ -140,7 +157,8 @@
         }
 
         var GetEleApiName = function(ele){
-            for(let c of ele.classList){
+            for(let ci in ele.classList){
+                let c = ele.classList[ci];
                 if(c.indexOf(config.ApiPrefix+'_')>-1){
                     return c.replace(config.ApiPrefix+'_','');
                 }
@@ -171,12 +189,24 @@
             // }
             let phone = document.querySelector(textPhone);
 
-            if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
-                error_msg += ';鐢佃瘽鍙风爜閿欒';
+            if(phone ){
+                if(phone.value){
+                    if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
+                    	error_msg += ';鐢佃瘽鍙风爜閿欒';
+                    }
+                }else{
+                    if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){
+                        error_msg += ';鐢佃瘽鍙风爜閿欒';
+                    }
+                }
             }
 
-            for(let e of document.getElementsByTagName('select')){
-                for(let op of e.options){
+            let es = document.getElementsByTagName('select')
+            for(let ei in es){
+                let e = es[ei];
+                for(let opi in e.options){
+                    let op = e.options[opi];
+                    if(!op)continue;
                     if(op.value == "*****" && op.selected){
                         error_msg += ';涓嬫媺妗嗕笉鑳戒富鍔ㄩ�夋嫨瀵嗘枃閫夐」';
                     }
@@ -215,9 +245,9 @@
                             v = ele.value;
                         }
 
-                        if(v && v != "000000000000000"){
+                        // if(v && v != "000000000000000"){
                             result[field_api_name] = v;
-                        }
+                        // }
                         
                     }
                 } else if (ele.type == 'checkbox') {
@@ -320,7 +350,7 @@
             // Check Required Field
             let checkRequiredFieldMsgResult = checkRequiredFieldMsg(sobjJson);
             if (checkRequiredFieldMsgResult) {
-                alertErrorMessage('requiredErrorMsg' + checkRequiredFieldMsgResult);
+                alertErrorMessage('{!$Label.Input_Required_Field_Msg}' + checkRequiredFieldMsgResult);
                 return
             }
             // //3. Prepare the payload for New PI API To AWS - To Do
@@ -351,7 +381,9 @@
         var closeField = '';
 
         function replaceSearchContactLookup() {
-            if (!{!isNewMode}) {
+            let eleContactValue = document.querySelector("[data-id='Receiver__c']").parentNode.parentNode.children[0].value;
+            let eleContactsValue = document.querySelector("[data-id='Applicanter__c']").parentNode.parentNode.children[0].value;
+            if (!{!isNewMode} || (eleContactValue != '000000000000000') || (eleContactsValue != '000000000000000')) {
                 //1. Query Contact from AWS by AWSDataId
                 queryContactName()
             }           
@@ -531,7 +563,7 @@
             <script>
                 var init_nodes = document.getElementsByClassName("PIBackApi");
                 var api_id_map={};
-                for(let e of init_nodes){
+                for(let e in init_nodes){
                     if(IsFormElement(e)){
                          api_id_map[GetEleApiName(e)] = e.id;
                     }
@@ -539,6 +571,16 @@
                 console.log(api_id_map);
     
                 sfdcPage.appendToOnloadQueue(function () {
+                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
+                    for (let m = 0; m < layoutSections.length; m++) {
+                        let layoutSection = layoutSections[m].layoutFields;
+                        for (let n = 0; n < layoutSection.length; n++) {
+                            let layoutField = layoutSection[n];
+                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) {
+                                document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField);
+                            }
+                        }
+                    }
                     //1. Set Last Name label
                     //document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '濮撳悕';
                     //2. Query AWS Data by dataId 
@@ -551,7 +593,37 @@
                     replaceSearchContactLookup();
                     //3. Set Readonly Attribute
                     document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton");
-                    document.querySelectorAll("[data-id='OwnerId']")[1].classList.add("disabledbutton");
+                    
+                    jQuery('a[data-id="OwnerId"]').remove();
+                    jQuery(".lookupInput").each(function(i,e){
+                        let je =jQuery(e).find('input');
+                        je.attr("readonly","");
+                        je.css("background","unset");
+                        
+                        let dataid = je.attr('data-id');
+                        if(['Hospital_Name__c','Department_Class__c','OwnerId'].indexOf(dataid) > -1) return;
+                        jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="'+dataid+'" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
+                    })
+                    
+                    jQuery(".lookupInput").on("mouseenter","img[generate]",function(e){
+                        this.className = "closeIconOn";
+                    });
+                    
+                    jQuery(".lookupInput").on("mouseleave","img[generate]",function(e){
+                        this.className = "closeIcon"
+                    });
+                    
+                    jQuery(".lookupInput").on("click","img[generate]",function(e){
+                        let id = jQuery("input[data-id='"+jQuery(this).attr("data-id")+ "']").attr("id");
+                        let input = document.getElementById(id);
+                        if(input){
+                        	input.value = '';
+							let hidden = document.getElementById(id+'_lkid');
+                            if(hidden){
+                            	hidden.value = '';
+                            }
+                        }
+                    });
                 });
             </script>
             <div class="pbBottomButtons">
diff --git a/force-app/main/default/pages/NewAndEditReport.page b/force-app/main/default/pages/NewAndEditReport.page
index 7b10a4b..fe838e7 100644
--- a/force-app/main/default/pages/NewAndEditReport.page
+++ b/force-app/main/default/pages/NewAndEditReport.page
@@ -77,15 +77,12 @@
                 }
             }
             //鎵嬫湳鍒嗙被1
-            result.Technical_Category1__c = document.getElementById('page:form:j_id30:j_id60:4:j_id61:j_id62:2:j_id63')!=null?document.getElementById('page:form:j_id30:j_id60:4:j_id61:j_id62:2:j_id63').value:'';
+            result.Technical_Category1__c = document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:2:j_id38')!=null?document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:2:j_id38').value:'';
             //鎵嬫湳鍒嗙被2
-            result.Technical_Category2__c = document.getElementById('page:form:j_id30:j_id60:4:j_id61:j_id62:4:j_id63')!=null?document.getElementById('page:form:j_id30:j_id60:4:j_id61:j_id62:4:j_id63').value:'';
+            result.Technical_Category2__c = document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:4:j_id38')!=null?document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:4:j_id38').value:'';
             //鐩殑2
-            if(document.getElementById('page:form:j_id30:j_id60:3:j_id61:j_id62:1:j_id63')){
-                result.Purpose2__c = document.getElementById('page:form:j_id30:j_id60:3:j_id61:j_id62:1:j_id63').value;
-            }
-            if(document.getElementById('page:form:j_id30:j_id60:2:j_id61:j_id62:1:j_id63')){
-                result.Purpose2__c = document.getElementById('page:form:j_id30:j_id60:2:j_id61:j_id62:1:j_id63').value;
+            if(document.getElementById('page:form:j_id5:j_id35:2:j_id36:j_id37:1:j_id38')){
+                result.Purpose2__c = document.getElementById('page:form:j_id5:j_id35:2:j_id36:j_id37:1:j_id38').value;
             }
             //瀵屾枃鏈璧嬪��
             //鐢ㄦ埛绛惧瓧鐨勭収鐗�
@@ -111,6 +108,12 @@
             //瀵瑰簲缁撴灉绗竴娆� 	VOC_follow_up_result1__c cke_71
             if(document.querySelector("[aria-describedby = 'cke_71']")){
                 result.VOC_follow_up_result1__c = document.querySelector("[aria-describedby = 'cke_71']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
+            }
+            if(result.From__c){
+                result.From__c = result.From__c.replace(/\//g, '-')+':00';
+            }
+            if(result.To__c){
+                result.To__c = result.To__c.replace(/\//g, '-')+':00';
             }
             return result;
         }
@@ -309,55 +312,46 @@
             if(document.querySelector("[data-id='Practitioner1__c']") != null){
                 let sfId = document.getElementById(document.querySelector("[data-id='Practitioner1__c']").id + '_lkid').value;
                 let dataId = contactsInfo[sfId];
-                let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-                queryContactNameFetch(url,'Practitioner1__c');
+                let url = staticResourcesContact.queryUrl;
+                queryContactNameFetch(url,dataId,'Practitioner1__c');
             }
             if(document.querySelector("[data-id='Practitioner2__c']") != null){
                 let sfId = document.getElementById(document.querySelector("[data-id='Practitioner2__c']").id + '_lkid').value;
                 let dataId = contactsInfo[sfId];
-                let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-                queryContactNameFetch(url,'Practitioner2__c');
+                let url = staticResourcesContact.queryUrl;
+                queryContactNameFetch(url,dataId,'Practitioner2__c');
             }
             if(document.querySelector("[data-id='Practitioner3__c']") != null){
                 let sfId = document.getElementById(document.querySelector("[data-id='Practitioner3__c']").id + '_lkid').value;
                 let dataId = contactsInfo[sfId];
-                let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-                queryContactNameFetch(url,'Practitioner3__c');
+                let url = staticResourcesContact.queryUrl;
+                queryContactNameFetch(url,dataId,'Practitioner3__c');
             }
             if(document.querySelector("[data-id='Practitioner4__c']") != null){
                 let sfId = document.getElementById(document.querySelector("[data-id='Practitioner4__c']").id + '_lkid').value;
                 let dataId = contactsInfo[sfId];
-                let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-                queryContactNameFetch(url,'Practitioner4__c');
+                let url = staticResourcesContact.queryUrl;
+                queryContactNameFetch(url,dataId,'Practitioner4__c');
             }
             if(document.querySelector("[data-id='Practitioner5__c']") != null){
                 let sfId = document.getElementById(document.querySelector("[data-id='Practitioner5__c']").id + '_lkid').value;
                 let dataId = contactsInfo[sfId];
-                let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-                queryContactNameFetch(url,'Practitioner5__c');
+                let url = staticResourcesContact.queryUrl;
+                queryContactNameFetch(url,dataId,'Practitioner5__c');
             }
             if(document.querySelector("[data-id='Person_In_Charge__c']") != null){
                 let sfId = document.getElementById(document.querySelector("[data-id='Person_In_Charge__c']").id + '_lkid').value;
                 let dataId = contactsInfo[sfId];
-                let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
-                queryContactNameFetch(url,'Person_In_Charge__c');
+                let url = staticResourcesContact.queryUrl;
+                queryContactNameFetch(url,dataId,'Person_In_Charge__c');
             }
         }
 
-        function queryContactNameFetch(url,filedId){
-            fetch(url, {
-                method: 'GET',
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi-token': staticResources.token
-                }
-            }).then((data) => {
-                return data.json();
-            }).then((result) => {
-                if(result.object){
-                    document.querySelector("[data-id="+filedId+"]").value = result.object.lastName;
-                }
-            })
+        function queryContactNameFetch(url,dataId,filedId){
+            let queryBackContactNameFetch = function queryBackContactNameFetch(result){
+                document.querySelector("[data-id="+filedId+"]").value = result.object.lastName;
+            };
+            AWSService.query(url, dataId, queryBackContactNameFetch, staticResources.token);
         }
 
         //鑷畾涔塴ookup鏌ヨ
@@ -405,6 +399,11 @@
         //鏂板缓缂栬緫鍥炶皟鍑芥暟
         var insertOrUpdateBack = function insertOrUpdateBack(payloadJson, result, isNewMode) {
             console.log(result);
+            if(result.status != '0'){
+                unblockUI();
+                console.log('鍥炶皟鍑芥暟鍑洪敊鎷�')
+                return
+            }
             console.log('Result from AWS' + result);
             console.log('payloadJson=' + payloadJson);
             payloadJson.VOC_Informer_Name__c = result.object[0].vocInformerName;
@@ -476,7 +475,7 @@
             // 3. Check Required Field
             let checkRequiredFieldMsgResult = checkRequiredFieldMsg(reportJson);
             if (checkRequiredFieldMsgResult) {
-                alertErrorMessage('{!requiredErrorMsg}'+checkRequiredFieldMsgResult);
+                alertErrorMessage('{!Input_Required_Field_Msg}'+checkRequiredFieldMsgResult);
                 return
             }
             //4. Prepare the payload for New PI API To AWS - To Do
@@ -556,6 +555,18 @@
             </apex:repeat>
             <script>
                 sfdcPage.appendToOnloadQueue(function () {
+                    //鍒ゆ柇鏄惁涓哄彧璇婚�夐」
+                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
+                    for (let m = 0; m < layoutSections.length; m++) {
+                        let layoutSection = layoutSections[m].layoutFields;
+                        for (let n = 0; n < layoutSection.length; n++) {
+                            let layoutField = layoutSection[n];
+                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) {
+                                document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField);
+                            }
+                        }
+                    }
+
                     //1. Set Last Name label
                     //document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '濮撳悕';
                     //2. Query AWS Data by dataId 
@@ -567,6 +578,35 @@
                     replaceSearchContactLookup();
                     //3. Set Readonly Attribute
                     document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
+                    jQuery(".lookupInput").each(function (i, e) {
+                        let je = jQuery(e).find('input');
+                        je.attr("readonly", "");
+                        je.css("background", "unset");
+
+                        let dataid = je.attr('data-id');
+                        if (['Practitioner1__c','Practitioner2__c','Practitioner3__c','Practitioner4__c','Practitioner5__c','Person_In_Charge__c'].indexOf(dataid) > -1)
+                        jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="' + dataid + '" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
+                    })
+
+                    jQuery(".lookupInput").on("mouseenter", "img[generate]", function (e) {
+                        this.className = "closeIconOn";
+                    });
+
+                    jQuery(".lookupInput").on("mouseleave", "img[generate]", function (e) {
+                        this.className = "closeIcon"
+                    });
+
+                    jQuery(".lookupInput").on("click", "img[generate]", function (e) {
+                        let id = jQuery("input[data-id='" + jQuery(this).attr("data-id") + "']").attr("id");
+                        let input = document.getElementById(id);
+                        if (input) {
+                            input.value = '';
+                            let hidden = document.getElementById(id + '_lkid');
+                            if (hidden) {
+                                hidden.value = '';
+                            }
+                        }
+                    });
                 });
             </script>
             <div class="pbBottomButtons">
diff --git a/force-app/main/default/pages/SearchAWSContactByNamePage.page b/force-app/main/default/pages/SearchAWSContactByNamePage.page
new file mode 100644
index 0000000..8f311fd
--- /dev/null
+++ b/force-app/main/default/pages/SearchAWSContactByNamePage.page
@@ -0,0 +1,197 @@
+<apex:page controller="SearchContactController" id="page">
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+
+    <head>
+    </head>
+    <style>
+        /* 1. 瀹氫箟琛ㄥ崟鏍峰紡 To Do Later*/
+
+        table {
+            border-collapse: collapse;
+            border-spacing: 0;
+            width: 98%;
+            margin-left: 5px;
+        }
+    </style>
+
+    <body id="body" class="lookupTab">
+        <script type="text/javascript">
+            var staticResources = JSON.parse('{!staticResource}');
+            var contactAWSIds = JSON.parse('{!contactAWSIds}');
+            var contactsInfo = JSON.parse('{!contactsInfo}');
+            var searchContactName = '';
+            function searchAWSContact(){
+                console.log('Search process!');
+                //1. reset table;             
+                resetTable();
+                //2. get contact name value 
+                searchContactName = document.getElementById('page:form:lksrch').value;
+                //3. check searchContactName.length>=2
+                if(searchContactName.length>=2){
+                    queryLeadFromAWS();
+                }else{
+                    alert("璇疯緭鍏ヨ嚦灏�2涓叧閿瓧");
+                }
+
+            }
+            function resetTable(){
+                let queryResult = document.getElementById('QueryResult');
+                let table = document.getElementById('table');
+                if(table){
+                    queryResult.removeChild(table);
+                }               
+            }
+            function preparePayloadForSearchContact(){
+                let searchPayload = new Object();
+                searchPayload.dataIds = [];
+                searchPayload.contactName = searchContactName;
+                return JSON.stringify(searchPayload);
+            }
+            function queryLeadFromAWS() {
+                //1. Prepare the payload for contact search
+                let requestSearchPayload = preparePayloadForSearchContact();
+                console.log('request payload body:'+requestSearchPayload);
+                //2. Invoke AWS Service
+                fetch(staticResources.searchUrl, {
+                    method: 'POST',
+                    body: requestSearchPayload,
+                    headers: {
+                        'Content-Type': 'application/json',
+                        'pi-token': staticResources.token
+                    }
+                }).then((data) => {
+                    return data.json();
+                }).then((result) => {
+                    console.log('JSON Result from aws:'+JSON.stringify(result));
+                    if(result.object&&result.object.length>0){
+                        initContactTable(result);
+                    }                   
+                })
+            }
+            
+            function redirectToParentPage(obj) {
+                var winMain = window.opener;
+                if (null == winMain) {
+                    winMain = window.parent.opener;
+                }
+                let value = obj.currentTarget.innerText;
+                let contactInfo = new Object();
+                contactInfo.Name = obj.currentTarget.innerText;
+                contactInfo.ContactId = obj.currentTarget.id;
+                window.open('\\'+obj.currentTarget.id,'_blank');
+                console.log('Contact Infor:'+JSON.stringify(contactInfo));
+            }
+
+            function refreshTable(cols,contactInfoList){
+                let myTableDiv = document.getElementById("QueryResult");
+                let table = document.createElement('TABLE');
+                table.border = '1';
+                table.id = 'table'
+                let tableBody = document.createElement('TBODY');
+                table.appendChild(tableBody);
+                let headerTR = document.createElement('TR');
+                let colsHeader = ['濮撳悕','瀹㈡埛鍚嶇О','閭', '鐢佃瘽'];
+                tableBody.appendChild(headerTR);
+                for (let i = 0; i < colsHeader.length; i++) {
+                    let td = document.createElement('TH');
+                    td.width = '75';
+                    td.appendChild(document.createTextNode(colsHeader[i]));
+                    headerTR.appendChild(td);
+                }
+                //3. Init the AWS data
+                for (let i = 0; i < contactInfoList.length; i++) {
+                    let contactInfoTemp = contactInfoList[i]
+                    if(contactsInfo[contactInfoTemp.AWSDataId] != null){
+                        let tr = document.createElement('TR');
+                        tableBody.appendChild(tr);
+                        for (let j = 0; j < cols.length; j++) {
+                            let td = document.createElement('TD');
+                            td.width = '75';
+                            if(j == 0){
+                                td.id = contactsInfo[contactInfoTemp.AWSDataId].Id;
+                            }                        
+                            td.appendChild(document.createTextNode(contactInfoTemp[cols[j]]!=null?contactInfoTemp[cols[j]]:''));
+                            if (cols[j] == 'Name') {
+                                td.addEventListener("click", function (obj) {
+                                    redirectToParentPage(obj);
+                                });
+                            }
+                            tr.appendChild(td);
+                        }
+                    }
+                }
+                myTableDiv.appendChild(table);
+            }
+            function initContactTable(data) {            
+                let cols = ['Name','AccountName','Email', 'Phone'];
+                let contactInfoList = [];
+                let awsDataIds = [];
+                for(var i=0;i<data.object.length;i++){
+                    if(data.object[i].dataId){
+                        let contactInfo = new Object();
+                        contactInfo.Name = data.object[i].lastName;
+                        contactInfo.Email = data.object[i].email;
+                        contactInfo.Phone = data.object[i].phone;
+                        contactInfo.AWSDataId = data.object[i].dataId;
+                        awsDataIds.push(contactInfo.AWSDataId);
+                        contactInfo.sfRecordId = '';
+                        contactInfoList.push(contactInfo);
+                    }                    
+                }
+                let AWSIdToSFIdMapValue = {};
+                console.log('Contact Info from AWS:'+JSON.stringify(contactInfoList));
+                //Invoke SF BackEnd
+                Visualforce.remoting.Manager.invokeAction(
+                    '{!$RemoteAction.SearchContactController.searchContacts}',
+                    JSON.stringify(awsDataIds),
+                    function (result, event) {
+                        if(event.status){
+                            if(result.status == 'success'){                               
+                                contactsInfo = JSON.parse(result.message.replace(/(&quot\;)/g,"\""));
+                                console.log('Contact Info from SF:'+JSON.stringify(contactsInfo));
+                                if(Object.keys(contactsInfo).length>0){
+                                    for(let i=0;i<contactInfoList.length;i++){
+                                        let contactFromSF = contactsInfo[contactInfoList[i]['AWSDataId']];
+                                        if(contactFromSF){
+                                            contactInfoList[i].sfRecordId = contactFromSF['Id'];
+                                            contactInfoList[i].AccountName = contactFromSF['Account']['Name'];
+                                        }
+                                    }
+                                }
+                               
+                                refreshTable(cols,contactInfoList);
+                            }else{
+                                alert('娌℃煡璇㈠埌璇ヨ仈绯讳汉');
+                                console.log('No result');
+                                refreshTable(cols,[]);
+                            }                                               
+                        }
+                    },
+                    { escape: true }
+                );
+            }
+        </script>
+        <apex:form id="form">
+            <!-- Search Filter-->
+            <div class="lookup">
+                <div class="bPageTitle">
+                    <div class="ptBody secondaryPalette">
+                        <div class="content">
+                            <img src="/img/s.gif" alt="" class="pageTitleIcon" title="" />
+                            <h1>鑱旂郴浜烘悳绱�</h1>
+                        </div>
+                    </div>
+                </div>
+                <div class="pBody">
+                    <label class="assistiveText" for="lksrch">Search</label>
+                    <apex:inputText id="lksrch" html-placeholder="{!PIPL_Search_Contact_Label}" value="{!searchKeyWord}" />
+                    <input value=" Go! " type="Button"  onclick="searchAWSContact()" styleClass="btn" />
+                    <div class="bDescription">璇疯緭鍏ヨ仈绯讳汉鐨勫鍚嶈繘琛屾悳绱€��
+                    </div>
+                </div>
+            </div>
+            <div id="QueryResult">
+            </div>
+        </apex:form>
+    </body>
+</apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/SearchAWSContactByNamePage.page-meta.xml b/force-app/main/default/pages/SearchAWSContactByNamePage.page-meta.xml
new file mode 100644
index 0000000..e9d2d29
--- /dev/null
+++ b/force-app/main/default/pages/SearchAWSContactByNamePage.page-meta.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexPage xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>52.0</apiVersion>
+    <availableInTouch>false</availableInTouch>
+    <confirmationTokenRequired>false</confirmationTokenRequired>
+    <label>SearchAWSContactByNamePage</label>
+</ApexPage>
diff --git a/force-app/main/default/pages/SearchContactPage.page b/force-app/main/default/pages/SearchContactPage.page
index b88431b..67cb3b9 100644
--- a/force-app/main/default/pages/SearchContactPage.page
+++ b/force-app/main/default/pages/SearchContactPage.page
@@ -109,6 +109,9 @@
                     for (let j = 0; j < cols.length; j++) {
                         let td = document.createElement('TD');
                         td.width = '75';
+                        if (!contactsInfo.hasOwnProperty(contactInfoTemp.AWSDataId)) {
+                            continue;
+                        }
                         if(j == 0){
                             td.id = contactsInfo[contactInfoTemp.AWSDataId].Id;
                         }                        
diff --git a/force-app/main/default/pages/SearchVisitor.page b/force-app/main/default/pages/SearchVisitor.page
index 09049f0..4544db5 100644
--- a/force-app/main/default/pages/SearchVisitor.page
+++ b/force-app/main/default/pages/SearchVisitor.page
@@ -285,6 +285,7 @@
         function Trans(){
             AWSService.postAWS(staticResources.transactionUrl,AWSService.confirmTrans, JSON.stringify({
                     "txId":aws_result.txId,
+                    "sfRecordId":"",
                     "isSuccess":1
             }), function(result){
                 window.location.reload();
diff --git a/force-app/main/default/pages/StraightBackAddress.page b/force-app/main/default/pages/StraightBackAddress.page
index e62de6b..9dca379 100644
--- a/force-app/main/default/pages/StraightBackAddress.page
+++ b/force-app/main/default/pages/StraightBackAddress.page
@@ -379,6 +379,7 @@
                 let queryBack = function queryBack(result) {
                     let contacts = result.object;
                     if(contacts == null){
+                        console.log('鏌ヨ鑱旂郴浜虹殑鏁版嵁 == null')
                         return;
                     }
                     for(var i=0;i<result.object.length;i++){
@@ -441,7 +442,7 @@
                 '\n閭紪: '+PIData[awsDataId].zipCode+
                 '\n璇︾粏鍦板潃: '+PIData[awsDataId].detailedAddress
             }else{
-                piInformation = '鑱旂郴浜�: null'+
+                piInformation = '鑱旂郴浜�: '+
                 '\n鐢佃瘽: '+PIData[awsDataId].telephone+
                 '\n閭紪: '+PIData[awsDataId].zipCode+
                 '\n璇︾粏鍦板潃: '+PIData[awsDataId].detailedAddress
@@ -452,9 +453,12 @@
             let y=window.event.y; 
             createDiv.style.left=x;  
             createDiv.style.top=y;  
+            createDiv.style.width = '100px';
+            createDiv.style.height = '100px';
             createDiv.style.background="#dddddd";
             createDiv.style.position = "absolute";
             parentNode.appendChild(createDiv);  
+            parentNode.style.position = "relative";
         }
 
         function hidePIDiv(awsDataId){
@@ -631,9 +635,9 @@
                                         <td align="left"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                             <apex:outputfield value="{!or.address.Customer__c}" />
                                         </td>
-                                        <td align="left"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;" aws-data-id="{!or.address.AWS_Data_Id__c}">
+                                        <td align="left"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;" aws-data-id="{!or.address.AWS_Data_Id__c}" >
                                             <!-- <apex:outputfield value="{!or.address.Contacts__c}" id="{!or.address.Contacts__c}_{!or.address.Id}"/> -->
-                                            <a href="#" id="{!or.address.Id}" onmouseover="showPIDiv('{!or.address.Id}')" onmouseout="hidePIDiv('{!or.address.Id}')"  aws-data-id="{!or.address.Contacts__r.AWS_Data_Id__c}">{!or.address.Contacts__r.Name}</a>
+                                            <a href="#" id="{!or.address.Id}"   aws-data-id="{!or.address.Contacts__r.AWS_Data_Id__c}" onmouseover="showPIDiv('{!or.address.Id}')" onmouseout="hidePIDiv('{!or.address.Id}')">{!or.address.Contacts__r.Name}</a>
                                         </td>
                                         <td align="left" style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                             <apex:outputText value="{!or.address.Telephone__c}" />
diff --git a/force-app/main/default/pages/UploadPdf.page b/force-app/main/default/pages/UploadPdf.page
index 431ef8e..cc9e50b 100644
--- a/force-app/main/default/pages/UploadPdf.page
+++ b/force-app/main/default/pages/UploadPdf.page
@@ -1,6 +1,7 @@
 <!-- 璇ラ〉闈㈢敤浜嶭ead瀵硅薄涓婁紶PDF锛屾湭鏉ュ鏋滆娣诲姞鍏朵粬瀵硅薄鐨勪笂浼燩DF鍔熻兘锛屽鍒惰椤甸潰锛屽皢**standardController**淇敼涓哄叾浠栧璞PI鍚嶇О鍗冲彲 -->
 <apex:page standardController="Lead" extensions="FileUploadController" id="page" lightningStyleSheets="true">
     <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <script>
         var staticResources = JSON.parse('{!staticResource}');
         var parentId = '{!parentId}';
@@ -29,8 +30,8 @@
             return new Promise((resolve, reject) => {
                 const reader = new FileReader();
                 reader.readAsDataURL(file);
-                reader.onload = () => resolve(reader.result);
-                reader.onerror = error => reject(error);
+                reader.onload = function(){resolve(reader.result)} ;
+                reader.onerror =function(error){reject(error)};
             });
         }
         function disableButtonStatus() {
@@ -47,7 +48,7 @@
             disableButtonStatus();
             var fileObject = document.getElementById("file").files[0];
             getBase64(fileObject).then(
-                data => {
+               function(data) {
                     console.log(data);
                     uploadFileToAWS(data, (fileObject.size).toString(), fileObject.name);
                     
@@ -56,23 +57,31 @@
         }
         function confirmTrans(transId, isSuccess) {
             
-            fetch(staticResources.updateUrl, {
-                method: 'POST',
-                body: JSON.stringify({ 'txId': transId, "isSuccess": isSuccess }),
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi-token': staticResources.token
-                }
-            }).then((data) => {
-                return data.json();
-            }).then(data => {
-                console.log("confirmTrans-" + JSON.stringify(data));
-                document.getElementById("file").files[0].name = '';
-                enableButtonStatus();
-                refreshFiles();            
-                return data.status;
-            })
-            
+            // fetch(staticResources.updateUrl, {
+            //     method: 'POST',
+            //     body: JSON.stringify({ 'txId': transId, "isSuccess": isSuccess }),
+            //     headers: {
+            //         'Content-Type': 'application/json',
+            //         'pi-token': staticResources.token
+            //     }
+            // }).then(function(data) {
+            //     return data.json();
+            // }).then(function(data) {
+            //     console.log("confirmTrans-" + JSON.stringify(data));
+            //     document.getElementById("file").files[0].name = '';
+            //     enableButtonStatus();
+            //     refreshFiles();            
+            //     return data.status;
+            // })
+              
+            AWSService.post(staticResources.updateUrl, JSON.stringify({
+                "txId":transId,
+                "sfRecordId":"",
+                "isSuccess":isSuccess
+            }), function(result){
+                window.location.reload();
+            }, staticResources.token);
+        
         }
         function calculateFileSize(fileObject) {
             if (fileObject.size > 20971520) {
@@ -81,21 +90,14 @@
         }
         function uploadFileToAWS(data, size, fileName) {
             console.log("body=" + JSON.stringify({ 'file': data, "size": size, 'fileName': fileName }));
-            
-            fetch(uploadUrl, {
-                method: 'POST',
-                body: JSON.stringify({ 'file': data, "size": size, 'fileName': fileName }),
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi-token': staticResources.token
-                }
-            }).then((data) => {
-                return data.json();
-            }).then(result => {
+            AWSService.post(uploadUrl, JSON.stringify({ 
+                'file': data, 
+                "size": size, 
+                'fileName': fileName })
+                , function(result){
+                    console.log("result" + JSON.stringify(result));
 
-                console.log("result" + JSON.stringify(result));
-                
-                if (result.success == true) {
+                    if (result.success == true) {
                     key = result.object;
 
                     Visualforce.remoting.Manager.invokeAction(
@@ -124,11 +126,56 @@
                 } else {
                     alertErrorMessage('涓婁紶澶辫触璇风◢鍚庡啀璇曪紒');
                 }
-            }).catch((error) => {
-                console.error('Error:', error);
-            })
-            debugger
+            }, staticResources.token);
+        
         }
+            // fetch(uploadUrl, {
+            //     method: 'POST',
+            //     body: JSON.stringify({ 'file': data, "size": size, 'fileName': fileName }),
+            //     headers: {
+            //         'Content-Type': 'application/json',
+            //         'pi-token': staticResources.token
+            //     }
+            // }).then(function(data)  {
+            //     return data.json();
+            // }).then(function(result) {
+
+            //     console.log("result" + JSON.stringify(result));
+                
+            //     if (result.success == true) {
+            //         key = result.object;
+
+            //         Visualforce.remoting.Manager.invokeAction(
+            //             '{!$RemoteAction.FileUploadController.saveFile}',
+            //             fileName, key, result.txId, parentId,
+            //             function (resultvalue, event) {
+
+
+                            
+            //                 //2. show file list
+            //                 if (resultvalue.status == 'fail') {
+            //                     alertErrorMessage(resultvalue.message);
+            //                     //1. Confirm trans
+            //                     confirmTrans(result.txId, 0);                              
+            //                 } else {
+            //                     alertErrorMessage('涓婁紶鎴愬姛');
+            //                     confirmTrans(result.txId, 1);
+            //                 }
+                            
+            //                 // window.location.reload();
+            //             },
+            //             { escape: true }
+            //         );
+                   
+            //         console.log('key' + key);
+            //     } else {
+            //         alertErrorMessage('涓婁紶澶辫触璇风◢鍚庡啀璇曪紒');
+            //     }
+            // }).catch(function(error) {
+            //     console.error('Error:', error);
+            // })
+            // debugger
+        // }
         function downPdf(fileUrl) {
             window.open(fileUrl,'_blank');
         }
diff --git a/force-app/main/default/pages/ViewAgencyContactDecryptInfo.page b/force-app/main/default/pages/ViewAgencyContactDecryptInfo.page
index 2584e36..9e9746b 100644
--- a/force-app/main/default/pages/ViewAgencyContactDecryptInfo.page
+++ b/force-app/main/default/pages/ViewAgencyContactDecryptInfo.page
@@ -1,4 +1,5 @@
 <apex:page standardController="Agency_Contact__c" extensions="NewAndEditAgencyContactController" id="page">
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }"/>
     <apex:form id="form">
         <apex:pageblock id="pageBlock">
diff --git a/force-app/main/default/pages/ViewContactDecryptInfo.page b/force-app/main/default/pages/ViewContactDecryptInfo.page
index 5ac4ce9..56a269f 100644
--- a/force-app/main/default/pages/ViewContactDecryptInfo.page
+++ b/force-app/main/default/pages/ViewContactDecryptInfo.page
@@ -1,5 +1,6 @@
 <apex:page standardController="Contact" extensions="NewAndEditContactController" id="page">
-    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }"/>
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
     <apex:form id="form">
         <apex:pageblock id="pageBlock">
             <apex:pageBlockSection showHeader="false" title="" collapsible="true" columns="2" id="pageBlockSection">
diff --git a/force-app/main/default/pages/ViewLeadDecryptInfo.page b/force-app/main/default/pages/ViewLeadDecryptInfo.page
index 21ae11c..0cf2bd6 100644
--- a/force-app/main/default/pages/ViewLeadDecryptInfo.page
+++ b/force-app/main/default/pages/ViewLeadDecryptInfo.page
@@ -1,4 +1,5 @@
 <apex:page standardController="Lead" extensions="NewAndEditLeadController" id="page">
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }"/>
     <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
     <apex:form id="form">
@@ -17,7 +18,7 @@
                 }
                 var queryBack = function queryBack(data) {
                     document.querySelector("[data-id='LastName']").innerHTML = data.object.lastName;
-                    document.querySelector("[id='page:form:pageBlock:pageBlockSection:j_id2:0:j_id3']").innerHTML =  data.object.phone;
+                    document.querySelector("[id='page:form:pageBlock:pageBlockSection:j_id3:0:j_id4']").innerHTML =  data.object.phone;
                     document.querySelector("[data-id='Email']").innerHTML = data.object.email;
                     
                 };
diff --git a/force-app/main/default/pages/ViewQISReportDecryptInfo.page b/force-app/main/default/pages/ViewQISReportDecryptInfo.page
index f3c197d..2cf384a 100644
--- a/force-app/main/default/pages/ViewQISReportDecryptInfo.page
+++ b/force-app/main/default/pages/ViewQISReportDecryptInfo.page
@@ -1,4 +1,5 @@
 <apex:page standardController="QIS_Report__c" extensions="NewAndEditQISController" id="page">
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }"/>
     <apex:form id="form">
         <apex:pageblock id="pageBlock">
diff --git a/force-app/main/default/pages/ViewReportDecryptInfo.page b/force-app/main/default/pages/ViewReportDecryptInfo.page
index fbcaf7a..1c21e0f 100644
--- a/force-app/main/default/pages/ViewReportDecryptInfo.page
+++ b/force-app/main/default/pages/ViewReportDecryptInfo.page
@@ -1,4 +1,5 @@
 <apex:page standardController="Report__c" extensions="NewAndEditReportController" id="page">
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }"/>
     <apex:form id="form">
         <apex:pageblock id="pageBlock">
@@ -15,7 +16,7 @@
                 }
                 var queryBack = function queryBack(data) {
                     document.querySelector("[data-id='VOC_Informer_Name__c']").innerHTML=data.object.vocInformerName!=null?data.object.vocInformerName.replace(/"/g,""):'';
-                    document.querySelector("[id='page:form:pageBlock:pageBlockSection:j_id1:1:j_id2']").innerHTML=data.object.callerPhone!=null?data.object.callerPhone.replace(/"/g,""):'';
+                    document.querySelector("[id='page:form:pageBlock:pageBlockSection:j_id2:1:j_id3']").innerHTML=data.object.callerPhone!=null?data.object.callerPhone.replace(/"/g,""):'';
                     document.querySelector("[data-id='VOC_Informer_Contact__c']").innerHTML=data.object.vocInformerContact!=null?data.object.vocInformerContact.replace(/"/g,""):'';
                     document.querySelector("[data-id='Person_In_Charge_Text__c']").innerHTML=data.object.personInChargeText!=null?data.object.personInChargeText.replace(/"/g,""):'';
                     document.querySelector("[data-id='Professor_sigh_text__c']").innerHTML=data.object.professorSighText!=null?data.object.professorSighText.replace(/"/g,""):'';
diff --git a/force-app/main/default/staticresources/AWSService.resource-meta.xml b/force-app/main/default/staticresources/AWSService.resource-meta.xml
new file mode 100644
index 0000000..78e2716
--- /dev/null
+++ b/force-app/main/default/staticresources/AWSService.resource-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<StaticResource xmlns="http://soap.sforce.com/2006/04/metadata">
+    <cacheControl>Public</cacheControl>
+    <contentType>application/zip</contentType>
+</StaticResource>
diff --git a/force-app/main/default/staticresources/AWSService/AWSService.js b/force-app/main/default/staticresources/AWSService/AWSService.js
new file mode 100644
index 0000000..b5e38ca
--- /dev/null
+++ b/force-app/main/default/staticresources/AWSService/AWSService.js
@@ -0,0 +1,384 @@
+var  AWSService = {};
+AWSService = {
+    sfSessionId : '',
+    insertModule : 'Insert AWS ',
+    updateModule : 'Update AWS ',
+    queryModule : 'Query AWS ',
+    searchModule : 'Search AWS ',
+    confirmTrans : 'Confirm Transaction To AWS',
+    successStatus : 'success',
+    failStatus : 'fail',
+    insertCalloutLog:function(module,url,request,response,status){
+       if(AWSService.sfSessionId){
+           sforce.connection.sessionId = AWSService.sfSessionId;
+           let transLog = new sforce.SObject('Transaction_Log__c');
+           transLog.AWS_Data_Id__c = '';
+           transLog.Module__c = module;
+           transLog.Interface_URL__c = url;
+           transLog.Request__c = request;
+           transLog.Response__c = response;
+           transLog.Status__c = status;
+           let insertLogResult = sforce.connection.create([transLog]);     
+           if(insertLogResult[0].getBoolean(AWSService.successStatus)) {
+               console.log('Insert Log Id: ' + insertLogResult[0].id);
+               return insertLogResult[0].id;
+           }else {
+               console.log('Faield to insert log');
+               return '';
+           }
+       }       
+   },
+   //Search Contact
+    search:function(searchUrl,requestSearchPayload,searchBack,token) {
+        let payloadstr= null;
+        if (requestSearchPayload) {
+            if (typeof requestSearchPayload == 'string') {
+                payloadstr = requestSearchPayload;
+            }else{
+                payloadstr = JSON.stringify(requestSearchPayload);
+            }
+        }
+        let para = {
+            url:searchUrl,
+            headers: {
+                'Content-Type': 'application/json',
+                'pi-token': token
+            },
+            type: "post",
+            success: function (result) {
+                AWSService.insertCalloutLog(AWSService.searchModule,searchUrl,JSON.stringify(requestSearchPayload),JSON.stringify(result),AWSService.successStatus);
+                searchBack(result);  
+            },
+            error: function (error){
+             //閿欒鐩稿叧澶勭悊 404灞炰簬璇ュ鐞嗭紙缁忔祴璇曪級
+             //杩樺彲鑳芥槸"timeout", "error", "notmodified" 鍜� "parsererror"銆�
+             AWSService.insertCalloutLog(AWSService.searchModule,searchUrl,JSON.stringify(requestSearchPayload),JSON.stringify(error),AWSService.failStatus);
+             console.log('閿欒澶勭悊',error);
+            }
+        };
+        if (payloadstr) {
+            para.data = payloadstr;
+        }
+        jQuery.ajax(para);
+
+   },
+
+   //query
+    query:function(queryURL, awsDataId, queryback, token) {
+        if(awsDataId){
+        let para = {
+            url:queryURL + '?dataId=' + awsDataId,
+            headers: {
+                'Content-Type': 'application/json',
+                'pi-token': token
+            },
+            type: "get",
+            success: function (data) {
+                AWSService.insertCalloutLog(AWSService.queryModule,queryURL,queryURL + '?dataId=' + awsDataId,JSON.stringify(data),AWSService.successStatus);
+                queryback(data); 
+            },
+            error: function (error){
+             //閿欒鐩稿叧澶勭悊 404灞炰簬璇ュ鐞嗭紙缁忔祴璇曪級
+             //杩樺彲鑳芥槸"timeout", "error", "notmodified" 鍜� "parsererror"銆�
+                AWSService.insertCalloutLog(AWSService.queryModule,queryURL,queryURL + '?dataId=' + awsDataId,JSON.stringify(error),AWSService.failStatus);
+                console.log(error);
+            }
+        };
+        jQuery.ajax(para);}else{
+            unblockUI();
+        }  
+   },
+
+   //queryRepair
+    queryRepair:function(queryURL, awsDataId,Id,ContactId,queryback, token) {
+        if(awsDataId){
+        let para = {
+            url:queryURL + '?dataId=' + awsDataId,
+            headers: {
+                'Content-Type': 'application/json',
+                'pi-token': token
+            },
+            type: "get",
+            success: function (data) {
+                AWSService.insertCalloutLog(AWSService.queryModule,queryURL,queryURL + '?dataId=' + awsDataId,JSON.stringify(data),AWSService.successStatus);
+                queryback(data,Id,ContactId); 
+            },
+            error: function (error){
+             //閿欒鐩稿叧澶勭悊 404灞炰簬璇ュ鐞嗭紙缁忔祴璇曪級
+             //杩樺彲鑳芥槸"timeout", "error", "notmodified" 鍜� "parsererror"銆�
+                AWSService.insertCalloutLog(AWSService.queryModule,queryURL,queryURL + '?dataId=' + awsDataId,JSON.stringify(error),AWSService.failStatus);
+                console.log(error);
+            }
+        };
+        jQuery.ajax(para);}else{
+            unblockUI();
+        } 
+       
+   },
+
+   //queryAddress
+    queryAddress:function(queryURL, addressName, queryback, token) {
+        if(addressName){
+        let para = {
+            url:queryURL + '?detailedAddress=' + addressName,
+            headers: {
+                'Content-Type': 'application/json',
+                'pi-token': token
+            },
+            type: "get",
+            success: function (data) {
+                AWSService.insertCalloutLog(AWSService.queryModule,queryURL,queryURL + '?detailedAddress=' + awsDataId,JSON.stringify(data),AWSService.successStatus);
+                queryback(data); 
+            },
+            error: function (error){
+             //閿欒鐩稿叧澶勭悊 404灞炰簬璇ュ鐞嗭紙缁忔祴璇曪級
+             //杩樺彲鑳芥槸"timeout", "error", "notmodified" 鍜� "parsererror"銆�
+                AWSService.insertCalloutLog(AWSService.queryModule,queryURL,queryURL + '?detailedAddress=' + awsDataId,JSON.stringify(error),AWSService.failStatus);
+                console.log(error);
+            }
+        };
+        jQuery.ajax(para);}else{
+            unblockUI();
+        } 
+
+   },
+
+   //insert
+    insert:function(newURL, payloadJson, payloadForNewPI, controllerSaveMethod, token, transactionURL,isNewMode,insertOrUpdateBack,redirectCallBack) {
+       console.log('Process New PI Data');
+       console.log(JSON.stringify(payloadForNewPI));
+
+
+       let payloadstr= null;
+       if (payloadForNewPI) {
+           if (typeof payloadForNewPI == 'string') {
+               payloadstr = payloadForNewPI;
+           }else{
+               payloadstr = JSON.stringify(payloadForNewPI);
+           }
+       }
+       let para = {
+           url:newURL,
+           headers: {
+               'Content-Type': 'application/json',
+               'pi-token': token
+           },
+           type: "post",
+           success: function (result) {
+                AWSService.insertCalloutLog(AWSService.insertModule,newURL,JSON.stringify(payloadForNewPI),JSON.stringify(result),AWSService.successStatus);
+                AWSService.back(result, payloadJson, transactionURL, token, controllerSaveMethod,isNewMode,insertOrUpdateBack,redirectCallBack);
+           },
+           error: function (error){
+            //閿欒鐩稿叧澶勭悊 404灞炰簬璇ュ鐞嗭紙缁忔祴璇曪級
+            //杩樺彲鑳芥槸"timeout", "error", "notmodified" 鍜� "parsererror"銆�
+            AWSService.insertCalloutLog(AWSService.insertModule,newURL,JSON.stringify(payloadForNewPI),JSON.stringify(error),AWSService.failStatus);
+           console.log(error);
+           }
+       };
+       if (payloadstr) {
+           para.data = payloadstr;
+       }
+       jQuery.ajax(para);
+
+       
+   },
+
+   //update
+    update:function(updateURL, payloadJson, payloadForNewPI, controllerSaveMethod, token, transactionURL,isNewMode,insertOrUpdateBack,redirectCallBack) {
+       console.log('Process New PI Data');
+       console.log(JSON.stringify(payloadForNewPI));
+       if(payloadForNewPI && JSON.parse(payloadForNewPI)[0] && JSON.parse(payloadForNewPI)[0]['dataId']){
+       let payloadstr= null;
+       if (payloadForNewPI) {
+           if (typeof payloadForNewPI == 'string') {
+               payloadstr = payloadForNewPI;
+           }else{
+               payloadstr = JSON.stringify(payloadForNewPI);
+           }
+       }
+       let para = {
+           url:updateURL,
+           headers: {
+               'Content-Type': 'application/json',
+               'pi-token': token
+           },
+           type: "post",
+           success: function (result) {
+                AWSService.insertCalloutLog(AWSService.updateModule,updateURL,JSON.stringify(payloadForNewPI),JSON.stringify(result),AWSService.successStatus);
+                AWSService.back(result, payloadJson, transactionURL, token, controllerSaveMethod,isNewMode,insertOrUpdateBack,redirectCallBack);
+           },
+           error: function (error){
+            //閿欒鐩稿叧澶勭悊 404灞炰簬璇ュ鐞嗭紙缁忔祴璇曪級
+            //杩樺彲鑳芥槸"timeout", "error", "notmodified" 鍜� "parsererror"銆�
+            AWSService.insertCalloutLog(AWSService.updateModule,updateURL,JSON.stringify(payloadForNewPI),JSON.stringify(error),AWSService.failStatus);
+           console.log(error);
+           }
+       };
+       if (payloadstr) {
+           para.data = payloadstr;
+       }
+       jQuery.ajax(para);
+    }else{
+        unblockUI();
+    }
+       
+   },
+
+   //update
+    post:function(postURL, payloadForNewPI, callback, token) {
+       console.log('Process New PI Data');
+       console.log(JSON.stringify(payloadForNewPI));
+
+       let payloadstr= null;
+       if (payloadForNewPI) {
+           if (typeof payloadForNewPI == 'string') {
+               payloadstr = payloadForNewPI;
+           }else{
+               payloadstr = JSON.stringify(payloadForNewPI);
+           }
+       }
+       let para = {
+           url:postURL,
+           headers: {
+               'Content-Type': 'application/json',
+               'pi-token': token
+           },
+           type: "post",
+           success: function (result) {
+                AWSService.insertCalloutLog(AWSService.insertModule,postURL,JSON.stringify(payloadForNewPI),JSON.stringify(result),AWSService.successStatus);
+                if(callback) callback(result);
+           },
+           error: function (error){
+                AWSService.insertCalloutLog(AWSService.insertModule,postURL,JSON.stringify(payloadForNewPI),JSON.stringify(error),AWSService.failStatus);
+                console.log(error);
+           }
+       };
+       if (payloadstr) {
+           para.data = payloadstr;
+       }
+       jQuery.ajax(para);
+
+   },
+
+   //update
+    postAWS:function(postURL,moduleName,payloadForNewPI, callback, token) {
+       console.log('Process New PI Data');
+       console.log(JSON.stringify(payloadForNewPI));
+
+       let payloadstr= null;
+       if (payloadForNewPI) {
+           if (typeof payloadForNewPI == 'string') {
+               payloadstr = payloadForNewPI;
+           }else{
+               payloadstr = JSON.stringify(payloadForNewPI);
+           }
+       }
+       let para = {
+           url:postURL,
+           headers: {
+               'Content-Type': 'application/json',
+               'pi-token': token
+           },
+           type: "post",
+           success: function (result) {
+                AWSService.insertCalloutLog(moduleName,postURL,JSON.stringify(payloadForNewPI),JSON.stringify(result),AWSService.successStatus);
+                if(callback)callback(result);
+           },
+           error: function (error){
+                AWSService.insertCalloutLog(moduleName,postURL,JSON.stringify(payloadForNewPI),JSON.stringify(error),AWSService.failStatus);
+                console.log(error);
+           }
+       };
+       if (payloadstr) {
+           para.data = payloadstr;
+       }
+       jQuery.ajax(para);
+
+   },
+
+    confirmTrans:function(transactionURL,transParameters,callback,token){
+
+        let payloadstr= null;
+       if (transParameters) {
+           if (typeof transParameters == 'string') {
+               payloadstr = transParameters;
+           }else{
+               payloadstr = JSON.stringify(transParameters);
+           }
+       }
+       let para = {
+           url:transactionURL,
+           headers: {
+               'Content-Type': 'application/json',
+               'pi-token': token
+           },
+           type: "post",
+           success: function (result) {
+                AWSService.insertCalloutLog(AWSService.confirmTrans,transactionURL,JSON.stringify(transParameters),JSON.stringify(result),AWSService.successStatus);
+                if(callback)callback(result);
+           },
+           error: function (error){
+                AWSService.insertCalloutLog(AWSService.confirmTrans,transactionURL,JSON.stringify(transParameters),JSON.stringify(error),AWSService.failStatus);
+                console.log(error);
+           }
+       };
+
+       if (payloadstr) {
+           para.data = payloadstr;
+       }
+       jQuery.ajax(para);
+
+   },
+
+    sfdcBack : function(event, result, transId, token, transactionURL,redirectCallBack) {
+       let sfId = '';
+       let errorMsg = '';
+       if (event.status) {
+           console.log('sf Id from SF Backend:' + JSON.stringify(result));
+           let transParameters = {
+                txId: transId
+            };
+            if (result.status == 'success') {
+                transParameters.isSuccess = 1;
+                transParameters.sfRecordId = sfId = result.recordId;;
+            }else{
+                transParameters.isSuccess = 0;
+                errorMsg = result.message;
+            }
+            
+            let para = {
+                url:transactionURL,
+                headers: {
+                    'Content-Type': 'application/json',
+                    'pi-token': token
+                },
+                data:JSON.stringify(transParameters),
+                type: "post",
+                success: function (result) {
+                    AWSService.insertCalloutLog(AWSService.confirmTrans,transactionURL,JSON.stringify(transParameters),JSON.stringify(result),AWSService.successStatus);
+                    redirectCallBack(sfId,errorMsg);
+                },
+                error: function (error){
+                    AWSService.insertCalloutLog(AWSService.confirmTrans,transactionURL,JSON.stringify(transParameters),JSON.stringify(error),AWSService.failStatus);
+                    console.log(error);
+                }
+            };
+
+            jQuery.ajax(para);
+       }
+   },
+
+   // AWSService.back(result, payloadJson, transactionURL, token, controllerSaveMethod);
+    back : function(result, payloadJson, transactionURL, token, controllerSaveMethod,isNewMode,insertOrUpdateBack,redirectCallBack) {
+       let payloadJsonStr = JSON.stringify(insertOrUpdateBack(payloadJson, result,isNewMode));
+       let transId = result.txId + '';
+       Visualforce.remoting.Manager.invokeAction(
+           controllerSaveMethod, // example '{!$RemoteAction.NewAndEditLeadController.saveLead}'
+           payloadJsonStr, transId, isNewMode,
+           function (result, event) {
+               AWSService.sfdcBack(event, result, transId, token, transactionURL,redirectCallBack);
+           },
+           { escape: true }
+       );
+   }
+};
\ No newline at end of file

--
Gitblit v1.9.1