Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
*/
package com.iemr.common.controller.cti;


import javax.ws.rs.core.MediaType;

import org.slf4j.Logger;
Expand Down Expand Up @@ -522,4 +521,23 @@
logger.info("getIVRSPathDetails sending response " + response);
return response.toString();
}

@Operation(summary = "Get disposition count for campaign")
@RequestMapping(value = "/getDispositionCount", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization")
public String getDispositionCount(@RequestBody String request, HttpServletRequest serverRequest) {
OutputResponse response = new OutputResponse();
logger.info("getDispositionCount received a request " + request);

Check notice

Code scanning / SonarCloud

Logging should not be vulnerable to injection attacks Low

Change this code to not log user-controlled data. See more on SonarQube Cloud
try {
String remoteAddress = serverRequest.getHeader("X-FORWARDED-FOR");
if (remoteAddress == null || remoteAddress.trim().length() == 0) {
remoteAddress = serverRequest.getRemoteAddr();
}
logger.info("Remote Address: " + remoteAddress);
response = ctiService.getDispositionCount(request, remoteAddress);
} catch (Exception e) {
logger.error("getDispositionCount failed with error " + e.getMessage(), e);
response.setError(e);
}
return response.toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.iemr.common.data.cti;
import lombok.Data;

@Data
public class DispositionCountRequest {
private String transaction_id = "CTI_GET_DISP_COUNT";
private String campaign_id;
private String disposition;
private String date;
private String enc_flag;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.iemr.common.data.cti;
import lombok.Data;
import com.google.gson.annotations.Expose;
import java.util.List;

@Data
public class DispositionCountResponse {
@Expose
private CTIResponse response;

@Expose
private Integer count;

@Expose
private String campaign_id;

@Expose
private String disposition;

@Expose
private String date;

@Expose
private List<DispositionData> dispositionData;

@Expose
private String encryptedData; // for enc_flag = "1"

// Inner class for detailed disposition data
@Data
public static class DispositionData {
@Expose
private String disposition;

@Expose
private Integer count;

@Expose
private String date;
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/iemr/common/service/cti/CTIService.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,6 @@ public interface CTIService
OutputResponse getIVRSPathDetails(String request, String remoteAddress)throws Exception;

OutputResponse getVoiceFileNew(String request, String remoteAddr) throws IEMRException, JSONException;

OutputResponse getDispositionCount(String request, String ipAddress) throws IEMRException, JSONException, JsonMappingException, JsonProcessingException;
}
32 changes: 32 additions & 0 deletions src/main/java/com/iemr/common/service/cti/CTIServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
import com.iemr.common.data.cti.CampaignRole;
import com.iemr.common.data.cti.CampaignSkills;
import com.iemr.common.data.cti.CustomerLanguage;
import com.iemr.common.data.cti.DispositionCountRequest;
import com.iemr.common.data.cti.DispositionCountResponse;
import com.iemr.common.data.cti.TransferCall;
import com.iemr.common.repository.callhandling.BeneficiaryCallRepository;
import com.iemr.common.repository.callhandling.IEMRCalltypeRepositoryImplCustom;
Expand Down Expand Up @@ -962,7 +964,9 @@

@Override
public String callPostUrl(String urlRequest, String Json) {
logger.info("From call post URL method.. URL: " + urlRequest + " Json: " + Json);
String result = httpUtils.post(urlRequest, Json);
logger.info("From call post URL method.. result: " + result);
return result;
}

Expand Down Expand Up @@ -1084,4 +1088,32 @@

return result;
}

@Override
public OutputResponse getDispositionCount(String request, String ipAddress) throws IEMRException, JSONException, JsonMappingException, JsonProcessingException {

OutputResponse output = new OutputResponse();
ObjectMapper objectMapper = new ObjectMapper();
String ctiURI = ConfigProperties.getPropertyByName("get-disposition-count-URL");
String serverURL = ConfigProperties.getPropertyByName("cti-server-ip");
logger.info("Request="+request + ":: CTI URL="+ ctiURI + ":: Server URL="+ serverURL);

Check notice

Code scanning / SonarCloud

Logging should not be vulnerable to injection attacks Low

Change this code to not log user-controlled data. See more on SonarQube Cloud
DispositionCountRequest dispositionRequest = objectMapper.readValue(request, DispositionCountRequest.class);

ctiURI = ctiURI.replace("CTI_SERVER", serverURL);

logger.info("calling disposition count URL: " + ctiURI);
logger.info("disposition Request="+dispositionRequest.toString());
String response = this.callPostUrl(ctiURI, dispositionRequest.toString());
logger.info("disposition count API returned: " + response);

DispositionCountResponse result = objectMapper.readValue(response, DispositionCountResponse.class);
CTIResponse ctiResponse = result.getResponse();

if (ctiResponse.getResponse_code().equals(CUSTOM_API_SUCCESS)) {
output.setResponse(result.toString());
} else {
output.setError(OutputResponse.GENERIC_FAILURE, ctiResponse.getReason(), ctiResponse.getStatus());
}
return output;
}
}
7 changes: 5 additions & 2 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ get-agent-summary-report-URL=http://CTI_SERVER/apps/customize_apps/piramil_repor
## agent summary report API
get-details-call-report-URL=http://CTI_SERVER/apps/customize_apps/piramil_reports.php?report_type=acd&format=json&end_date=END_DATE&start_date=START_DATE

##1097 abandoned call report API
get-disposition-count-URL=http://CTI_SERVER/apps/CZUtilAPI.php

#============================================================================
# Configure Main Scheduler Properties
#============================================================================
Expand Down Expand Up @@ -189,8 +192,8 @@ km-guest-user=guest
km-guest-password=guest

# CTI Config
cti-server-ip=10.208.122.99
cti-logger_base_url=http://10.208.122.99/logger
cti-server-ip=192.168.45.55
cti-logger_base_url=http://192.168.45.55/logger
sms-gateway-url =

#Encryption passphrase used by AESUtil for decrypting CTI passwords.
Expand Down
Loading