From 51fb56f3f5b0dc96d7f93a71f9b61263e303243f Mon Sep 17 00:00:00 2001
From: Li Jun <buli@deloitte.com.cn>
Date: 星期二, 10 五月 2022 15:12:45 +0800
Subject: [PATCH] Fix Edit Record Without AWSId

---
 force-app/main/default/pages/NewOnCall.page                   |    5 +
 force-app/main/default/pages/ReportExport.page                |  160 ++++++++++++++++++++++++++++++++++++++++
 force-app/main/default/classes/NewAndEditReportController.cls |    6 +
 force-app/main/default/pages/ReportExport.page-meta.xml       |   12 +++
 force-app/main/default/pages/NewAndEditReport.page            |    5 +
 force-app/main/default/classes/NewAndEditCaseController.cls   |    7 +
 force-app/main/default/pages/NewAndEditCase.page              |    9 +
 force-app/main/default/classes/OnCallController.cls           |    7 +
 8 files changed, 203 insertions(+), 8 deletions(-)

diff --git a/force-app/main/default/classes/NewAndEditCaseController.cls b/force-app/main/default/classes/NewAndEditCaseController.cls
index dd6c070..205d7de 100644
--- a/force-app/main/default/classes/NewAndEditCaseController.cls
+++ b/force-app/main/default/classes/NewAndEditCaseController.cls
@@ -32,6 +32,7 @@
     public final string ApiPrefix{get;private set;} //Add By Yin Mingjie 20220404
     public Map<string,string> AWSToSobjectEncryptedMap{get;private set;}
     public string AWSToSobjectEncryptedMapJson{get{return JSON.serialize(AWSToSobjectEncryptedMap);}}
+    public String sfRecordIdForEdit{set;get;}//Add By LiJun for Edit Record from NFM609, 20220510
     public NewAndEditCaseController(ApexPages.StandardController controller) {
         isNewMode = true;
         isCloneMode = false;
@@ -56,6 +57,7 @@
             Case caseData = [select Id,RecordTypeId,AWS_Data_Id__c,ContactId,Contact.AWS_Data_Id__c from Case where id =: obj.Id];
             rtTypeId = caseData.RecordTypeId;
             AWSDataId = caseData.AWS_Data_Id__c;
+            sfRecordIdForEdit = obj.Id;//Add By LiJun for Edit Record from NFM609, 20220510
             System.debug('AWSDataId=' + AWSDataId);
             Map<String,String> sfIdToAWSIdMap = new Map<String,String>();
             if(caseData.ContactId != null){
@@ -149,16 +151,19 @@
         Savepoint sp = Database.setSavepoint();
         String rid = '';
         String awsDataId = '';
+        String sfRecordId = '';
         Boolean isClone = false;
         try{
             System.debug('abcde');
             awsDataId = (String)caseInfo.get('AWS_Data_Id__c');
+            sfRecordId = (String)caseInfo.get('Id');
             System.debug('awsDataId = ' + awsDataId);
-            Case[] cases = [select id from Case where AWS_Data_Id__c =:awsDataId];
+            Case[] cases = [select id from Case where AWS_Data_Id__c =:awsDataId or id =:sfRecordId];
 
             if(!isNew){
                 isClone = cases.size() == 0;
             }
+            system.debug('isClone'+isClone + ' isNew'+isNew);
             if(isNew || isClone){
                 System.debug('caseInfozhj = ' + caseInfo);
                 if(!Test.isRunningTest()){
diff --git a/force-app/main/default/classes/NewAndEditReportController.cls b/force-app/main/default/classes/NewAndEditReportController.cls
index 9481521..756d2dd 100644
--- a/force-app/main/default/classes/NewAndEditReportController.cls
+++ b/force-app/main/default/classes/NewAndEditReportController.cls
@@ -37,6 +37,7 @@
     public String contactName3{set;get;}
     public String contactName4{set;get;}
     public String contactName5{set;get;}
+    public String sfRecordIdForEdit{set;get;}//Add By LiJun for Edit Record from NFM609, 20220510
     public NewAndEditReportController(ApexPages.StandardController controller) {
         ApiPrefix = 'PIBackApi';
         layoutEncryptedAPIList = new List<String>();
@@ -70,6 +71,7 @@
 
             rtTypeId = ReportData.RecordTypeId;
             AWSDataId = ReportData.AWS_Data_Id__c;
+            sfRecordIdForEdit = obj.Id;
             Map<String,String> sfIdToAWSIdMap = new Map<String,String>();
             system.debug('ReportData.Practitioner1__r.Id:' + ReportData.Practitioner1__r.Id);
             system.debug('ReportData.Practitioner1__r.AWS_Data_Id__c:' + ReportData.Practitioner1__r.AWS_Data_Id__c);
@@ -256,12 +258,14 @@
             System.debug('鑷畾涔夋牸寮忚浆鎹㈢粨鏉�');
 
             String awsDataId = (String)reportInfo.get('AWS_Data_Id__c');
+            String sfRecordId =  (String)reportInfo.get('Id');
             System.debug('awsDataId = ' + awsDataId);
-            report__c[] reports = [select id from report__c where AWS_Data_Id__c =:awsDataId];
+            report__c[] reports = [select id from report__c where AWS_Data_Id__c =:awsDataId or id =:sfRecordId];
             
             if(!isNew){
                 isClone = reports.size() == 0;
             }
+            system.debug('isClone'+isClone + ' isNew'+isNew);
             if(isNew){
                 System.debug('reportInfo = ' + reportInfo);               
                 if(!Test.isRunningTest()){
diff --git a/force-app/main/default/classes/OnCallController.cls b/force-app/main/default/classes/OnCallController.cls
index 910fdad..3740276 100644
--- a/force-app/main/default/classes/OnCallController.cls
+++ b/force-app/main/default/classes/OnCallController.cls
@@ -18,6 +18,7 @@
     public String PIPL_Input_Account_Error_Msg{set;get;}
     public String sobjectPrefix{set;get;}
     public String sobjecttypeForFrontEnd{set;get;}
+    public String sfRecordIdForEdit{set;get;}//Add By LiJun for edit record from daily report, 20220510
     // public String sobjectId{set;get;}
     public OnCallController(ApexPages.StandardController controller) {
         // sobjectId = [SELECT CustomObjectId,CustomObjectName  FROM CustomObjectUserLicenseMetrics   where CustomObjectName ='OnCall' limit 1].CustomObjectId;
@@ -45,6 +46,7 @@
             isNewMode = false;
             On_Call__c onCallData = [select Id,AWS_Data_Id__c from On_Call__c where id =: obj.Id];
             AWSDataId = onCallData.AWS_Data_Id__c;
+            sfRecordIdForEdit = obj.Id;//Add By LiJun for Edit Record from NFM609, 20220510
         }else{
             //鏂板缓
             rtTypeId = null;
@@ -113,17 +115,20 @@
         String rid = '';
         Boolean isClone = false;
         String awsDataId = '';
+        String sfRecordId = '';
         try{
             System.debug('abcde'+isNew);
             awsDataId = (String)onCallInfo.get('AWS_Data_Id__c');
+            sfRecordId = (String)onCallInfo.get('Id');
             if (string.isBlank(awsDataId)) {
                 throw new DMLException('鏇存柊鏃禔WS_Data_Id__c涓嶈兘涓虹┖');
             }
             System.debug('awsDataId = ' + awsDataId);
-            On_Call__c[] onCalls = Database.query('select id from On_Call__c where AWS_Data_Id__c =:awsDataId');
+            On_Call__c[] onCalls = Database.query('select id from On_Call__c where AWS_Data_Id__c =:awsDataId or id =:sfRecordId');
             if(!isNew){
                 isClone = onCalls.size() == 0;
             }
+            system.debug('isClone'+isClone + ' isNew'+isNew);
             if(isNew || isClone){
                 System.debug('onCallInfozhj = ' + onCallInfo);
                 insert onCallInfo;
diff --git a/force-app/main/default/pages/NewAndEditCase.page b/force-app/main/default/pages/NewAndEditCase.page
index 3646fcf..5c02f89 100644
--- a/force-app/main/default/pages/NewAndEditCase.page
+++ b/force-app/main/default/pages/NewAndEditCase.page
@@ -24,7 +24,7 @@
         //鍒ゆ柇insert or update
         function ProcessPI(caseJson, payloadForNewPI) {
             blockme();
-            if ({!isNewMode} || {!isCloneMode}) {
+            if ({!isNewMode} || {!isCloneMode}||!'{!AWSDataId}') {//Add by Li Jun, if the awsdataid is blank. go to insert process
                 NewPIToAWS(caseJson, payloadForNewPI)
             }else {
                 UpdatePIToAWS(caseJson, payloadForNewPI)
@@ -192,10 +192,13 @@
             payloadJson.Customer_manual_Encrypted__c = r.object[0].customerManualEncrypt;
             //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
             payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
-            if (isNewMode || {!isCloneMode}) {
+            if (isNewMode || {!isCloneMode} || !'{!AWSDataId}') {
                 payloadJson.AWS_Data_Id__c = r.object[0].dataId;
             } else {
                 payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
+            }
+            if('{!sfRecordIdForEdit}'){
+                payloadJson.Id = '{!sfRecordIdForEdit}';
             }
             if('{!rtTypeId}'){
                 payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
@@ -227,7 +230,7 @@
         //insert to AWS
         function NewPIToAWS(caseJson, payloadForNewPI) {
             let controllerSaveMethod = '{!$RemoteAction.NewAndEditCaseController.saveCase}';
-            AWSService.insert(staticResources.newUrl, caseJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack, redirectCallBack);
+            AWSService.insert(staticResources.newUrl, caseJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, {!isNewMode}, insertOrUpdateBack, redirectCallBack);
         }
         //蹇呭~瀛楁
         function checkRequiredFieldMsg(formData) {
diff --git a/force-app/main/default/pages/NewAndEditReport.page b/force-app/main/default/pages/NewAndEditReport.page
index bcb1395..847ab3d 100644
--- a/force-app/main/default/pages/NewAndEditReport.page
+++ b/force-app/main/default/pages/NewAndEditReport.page
@@ -315,7 +315,7 @@
         //鏂板缓
         function NewPIToAWS(reportJson, payloadForNewPI) {
             let controllerSaveMethod = '{!$RemoteAction.NewAndEditReportController.saveReport}';
-            AWSService.insert(staticResources.newUrl, reportJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack, redirectCallBack);
+            AWSService.insert(staticResources.newUrl, reportJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, {!isNewMode}, insertOrUpdateBack, redirectCallBack);
         }
 
         //缂栬緫
@@ -548,6 +548,9 @@
             } else {
                 payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
             }
+            if('{!sfRecordIdForEdit}'){
+                payloadJson.Id = '{!sfRecordIdForEdit}';
+            }
             if('{!rtTypeId}'){
                 payloadJson.RecordTypeId = '{!rtTypeId}';//Add by Li Jun for Record Type Issue 20220421
             }
diff --git a/force-app/main/default/pages/NewOnCall.page b/force-app/main/default/pages/NewOnCall.page
index 232d675..4a269e6 100644
--- a/force-app/main/default/pages/NewOnCall.page
+++ b/force-app/main/default/pages/NewOnCall.page
@@ -60,6 +60,9 @@
             } else {
                 payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
             }
+            if('{!sfRecordIdForEdit}'){
+                payloadJson.Id = '{!sfRecordIdForEdit}';
+            }
             if('{!rtTypeId}'){
                 payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
             }
@@ -146,7 +149,7 @@
         //Insert Sensitive Information to AWS
         function NewPIToAWS(onCallJson, payloadForNewPI) {
             let controllerSaveMethod = '{!$RemoteAction.OnCallController.saveOnCall}';
-            AWSService.insert(staticResources.newUrl, onCallJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack, redirectCallBack);
+            AWSService.insert(staticResources.newUrl, onCallJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl,{!isNewMode}, insertOrUpdateBack, redirectCallBack);
         }
 
         //Check Required Fields
diff --git a/force-app/main/default/pages/ReportExport.page b/force-app/main/default/pages/ReportExport.page
new file mode 100644
index 0000000..97f9728
--- /dev/null
+++ b/force-app/main/default/pages/ReportExport.page
@@ -0,0 +1,160 @@
+<apex:page id="page" controller="ReportExportClass">
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}" />
+    <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}" />
+    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}" />
+    <apex:includeScript value="{!URLFOR($Resource.connection20)}"/>
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <head>
+    </head>
+    <style>
+        .disabledbutton {
+            pointer-events: none;
+            opacity: 0.4;
+        }
+        .hideshow{
+            visibility: hidden;
+        }
+    </style>
+    <body>
+        <script>
+            // sforce.connection.sessionId = '{!GETSESSIONID()}'; 
+            var awsList = [];
+            var staticResources = JSON.parse('{!staticResource}');
+            var fieldSize = '{!fieldSize}';
+
+            function remove() {
+                
+            }
+
+            function getPIPayload() {
+                let awsList = [];
+                let searchPayload = new Object();
+
+                var fieldsInputList = '{!fieldInputList}';
+                
+                let dict = {};
+                let namesField = document.getElementById("page:form:repeatBlock:repeat:0:chooseField");
+                let optionsField = document.getElementById("page:form:repeatBlock:repeat:0:chooseOperation");
+                let valuesField = document.getElementById("page:form:repeatBlock:repeat:0:inputText");
+                if (namesField) {
+                    dict['name'] = namesField.value;
+                }
+                if (optionsField) {
+                    if (namesField.value == 'sfRecordId' && (optionsField.value == 'like' || optionsField.value == 'not like')) {
+                        dict['operator'] = optionsField.value.replace('like', 'in');
+                    } else {
+                        dict['operator'] = optionsField.value;
+                    }
+                }
+                if (valuesField && valuesField.value) {
+                    if (namesField.value == 'sfRecordId') {
+                        dict['value'] = valuesField.value.split('\n');
+                    } else {
+                        dict['value'] = valuesField.value;
+                    }
+                }
+                console.log('size: ' + fieldSize);
+                console.log(dict);
+                awsList.push(dict);
+
+
+                // for (let index = 0; index < fieldsInputList.length; index++) {
+                //     let dict = {};
+                //     let namesField = document.getElementById("page:form:repeatBlock:repeat:"+index+":chooseField");
+                //     let optionsField = document.getElementById("page:form:repeatBlock:repeat:"+index+":chooseOperation");
+                //     let valuesField = document.getElementById("page:form:repeatBlock:repeat:"+index+":inputText");
+                //     if (namesField) {
+                //         dict['name'] = namesField.value.toLowerCase();
+                //     }
+                //     if (optionsField) {
+                //         dict['operator'] = optionsField.value;
+                //     }
+                //     if (valuesField) {
+                //         dict['value'] = valuesField.value;
+                //     }
+                //     console.log(dict);
+                // }
+                return JSON.stringify(awsList);
+            }
+
+            function exportsAllData(){
+                
+                let requestAllSearchPayload = [];
+                console.log('requestSearchPayload ' + requestAllSearchPayload);
+                let queryBackContactName = function queryBackContactName(result){
+                    console.log('result ' + result.length);
+                    var blob = new Blob(["\ufeff", result]);
+                    var link = document.createElement('a');
+                    link.href = window.URL.createObjectURL(blob);
+                    // let csvContent = "data:text/csv;charset=utf-8,\ufeff" 
+                    //     +result;
+                    // let encodedUri = encodeURI(csvContent);
+                    // let link = document.createElement("a");
+                    // link.setAttribute("href", encodedUri);
+                    link.setAttribute("download", "contactAll.csv");
+                    document.body.appendChild(link); // Required for FF
+                    unblockUI();
+
+                    link.click(); // This will download the data file named "my_data.csv".
+                };
+                blockme();
+                AWSService.search(staticResources.reportUrl,requestAllSearchPayload,queryBackContactName,staticResources.token);
+            }
+
+            function exportsData() {
+                let requestSearchPayload = getPIPayload();
+                if (JSON.parse(requestSearchPayload) && JSON.parse(requestSearchPayload)[0].value) {
+                    console.log('requestSearchPayload ' + requestSearchPayload);
+                    let queryBackContactName = function queryBackContactName(result){
+                        console.log('result ' + result.length);
+                        var blob = new Blob(["\ufeff", result]);
+                        var link = document.createElement('a');
+                        link.href = window.URL.createObjectURL(blob);
+                        // let csvContent = "data:text/csv;charset=utf-8,\ufeff" 
+                        //     +result;
+                        // let encodedUri = encodeURI(csvContent);
+                        // let link = document.createElement("a");
+                        // link.setAttribute("href", encodedUri);
+                        link.setAttribute("download", "contact.csv");
+                        document.body.appendChild(link); // Required for FF
+                        unblockUI();
+
+                        link.click(); // This will download the data file named "my_data.csv".
+                    };
+                    blockme();
+                    AWSService.search(staticResources.reportUrl,requestSearchPayload,queryBackContactName,staticResources.token);
+                } else {
+                    alert("璇峰厛杈撳叆Salesforce ID鍊�");
+                }
+            }
+        </script>
+        
+        <apex:form id="form">
+            鎶ヨ〃瀵硅薄锛�
+            <br/>
+            <apex:selectList id="chooseObject" value="{!selectedObject}" size="1">
+                <apex:selectOptions value="{!objectOptions}"/>
+            </apex:selectList>            
+            <apex:pageBlock id="repeatBlock">
+                <apex:repeat id="repeat" value="{!fieldInputList}" var="fieldInput">
+                    <!-- <apex:selectOption value = "{!filedOptions}"/> -->
+                    <apex:selectList id="chooseField" value="{!fieldInput.fieldAPI}" size="1">
+                        <apex:selectOptions value="{!filedOptions}"/>
+                    </apex:selectList> 
+                    <!-- <apex:selectOption value = "{!operationSelectOptions}"/> -->
+                    <apex:selectList id="chooseOperation" value="{!fieldInput.operation}" size="1">
+                        <!-- <apex:selectOptions value="{!operationSelectOptions}"/> -->
+                        <apex:selectOptions value="{!operationSelectOptions}"/>
+                    </apex:selectList> 
+                    <apex:inputTextarea id="inputText" value="{!fieldInput.value}" rows="20" cols="35" />
+                    <!-- - &nbsp;&nbsp;+ -->
+                    <br />
+                </apex:repeat>
+                <!-- <apex:commandButton id="addFilter" value="娣诲姞绛涢�夊櫒" action="{!addFilter}" reRender="repeatBlock" />
+                <apex:commandButton id="removeFilter" value="鍒犻櫎绛涢�夊櫒" action="{!removeFilter}" reRender="repeatBlock" /> -->
+            </apex:pageBlock>
+            <input class="btn" type="Button" id="exportData" value="瀵煎嚭" onclick="exportsData()" />    
+            <input class="btn" type="Button" id="exportData" value="瀵煎嚭鍏ㄩ儴鏁版嵁" onclick="exportsAllData()" />                             
+        </apex:form>
+    </body>
+</apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/ReportExport.page-meta.xml b/force-app/main/default/pages/ReportExport.page-meta.xml
new file mode 100644
index 0000000..4598906
--- /dev/null
+++ b/force-app/main/default/pages/ReportExport.page-meta.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexPage xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>54.0</apiVersion>
+    <availableInTouch>false</availableInTouch>
+    <confirmationTokenRequired>false</confirmationTokenRequired>
+    <label>ReportExport</label>
+    <packageVersions>
+        <majorNumber>1</majorNumber>
+        <minorNumber>7</minorNumber>
+        <namespace>sf_com_apps</namespace>
+    </packageVersions>
+</ApexPage>

--
Gitblit v1.9.1