<?php
namespace Globals\ClaimManagementBundle\Controller\ClaimFlow;
use Globals\ClaimManagementBundle\DependencyInjection\ClaimReportFormHelper;
use Globals\ClaimManagementBundle\Entity\Claim;
use Globals\ClaimManagementBundle\Entity\ClaimReport;
use Globals\ClaimManagementBundle\Service\ClaimNotesProviderService;;
use Globals\CoreBundle\Entity\SystemControlMetadata;
use Globals\ResourceManagementBundle\Service\SLogger;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Globals\ResourceManagementBundle\DependencyInjection\WasabiUtils;
use Symfony\Component\Serializer\Serializer;
use Globals\ClaimManagementBundle\Entity\DocumentLibrary;
use Knp\Snappy\Pdf;
/**
* @Route("/claims/fragments")
*/
class ClaimReportController extends Controller
{
// Reports - Controller Actions
/*
*
*/
/**
* Method for Reports Tab - show datatable initial html
*
* @Route("/reports/{id}")
*/
public function claimReportsAction(Claim $claim)
{
$viewSwbcUpload = false;
$bShowRefUrl = false;
$em = $this->getDoctrine()->getManager();
$companyId = 1;
if ($claim->getCustomer()) {
$ClaimCustomer = $claim->getCustomer();
if ($ClaimCustomer->getSubCompany()) {
$companyId = $ClaimCustomer->getSubCompany()->getId();
}
}
$company = $em->getRepository("CompanyManagementBundle:Company")->find($companyId);
if ($claim) {
$this->denyAccessUnlessGranted("view_attachments_tab", $claim);
# If customer if SWBC and environment is IAS only
if($claim->getCustomer()) {
if (in_array($claim->getCustomer()->getId(), array(5696, 5713, 5728))) {
$viewSwbcUpload = true;
}
}
$file_manager = $this->container->get("app.file_manager");
$em = $this->container->get("doctrine.orm.entity_manager");
$slog = new SLogger();
$sql = "SELECT id
FROM claim_report
WHERE 1 = 1
AND claim_id = :claim_id
AND file_title = :file_title
AND document_type_id = 15 ";
$slog->log("1");
$dataParams = array();
$dataParams['claim_id'] = $claim->getId();
$dataParams['file_title'] = 'Review Reports';
$stmt = $em->getConnection()->prepare($sql);
try{
$stmt->execute($dataParams);
}catch (\PDOException $e){
return new Response("Exception occured while trying to fetch reports");
}
$reports = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$path = '';
$fileExists = false;
if($reports) {
foreach ($reports as $report) {
$path = $file_manager->retrieveFilePathByEntity($report['id'], "ReviewReports");
}
if($path[0] != ''){
$fileExists = true;
}
}
$dateOpened = $claim->getDateReopened() ? $claim->getDateReopened() : ($claim->getDateOpened() ? $claim->getDateOpened() :$claim->getDateCreated());
$dateClosed = $claim->getDateClosed()? $claim->getDateClosed(): new \DateTime('now');
if($dateClosed < $dateOpened){
$dateClosed = new \DateTime('now');
}
$difference = date_diff($dateOpened,$dateClosed);
$difference = (array)$difference;
$daysOpen = array();
$daysOpen['days'] = $difference['days'];
$daysOpen['h'] = $difference['h'];
$daysOpen['m'] = $difference['m'];
$systemParamService = $this->container->get('core.system_parameter_control');
$systemAdminUsers = $systemParamService->getAccessArray('Invoicing_access');
$bShowInvoiceAccessTab = false;
$user = $this->get('security.token_storage')->getToken()->getUser();
if (!empty($systemAdminUsers) && in_array($user->getId(),$systemAdminUsers)) {
$bShowInvoiceAccessTab = true;
}
if ($claim->getStatus()>=10) {
$bShowRefUrl = true;
}
$assignmentService = $this->get('claim.assignment');
$alertMessageDateExpiryArray = $assignmentService->validLicense($claim);
$alertMessageDateExpiry = $alertMessageDateExpiryArray['alertMessageDateExpiry'];
return $this->render('ClaimManagementBundle:ClaimFlowScreen/Fragments:reports-fragment.html.twig', [
'active' => 'report',
'claim' => $claim,
"claimId" => $claim->getId(),
"viewSwbcUpload" => $viewSwbcUpload,
"fileExists" => $fileExists,
"company" => $company,
"daysOpen" => $daysOpen,
'bShowInvoiceAccessTab' => $bShowInvoiceAccessTab,
'alertMessageDateExpiry' =>$alertMessageDateExpiry,
"ShowRefUrl" =>$bShowRefUrl
]);
} else {
throw new NotFoundHttpException('Could not find this claim!');
}
}
/**
* Method for Reports Database Ajax Data Action
*
* @Route("/reports/search/{id}")
*/
public function claimReportsDataTablesAction(Request $request, Claim $claim)
{
$em = $this->getDoctrine();
if ($claim == null) {
throw $this->createNotFoundException("Claim does not exist");
}
## Use PaginatorService to return paginated results to DataTables Ajax Request
$User = $this->container->get("security.token_storage")->getToken()->getUser();
# Array of columns that will be sorted
$columnsArr = array(
1 => "file_title",
2 => "document_type_id",
3 => "adjusterName",
4 => "created_on",
5 => "invoice_id"
);
$claimId = $claim->getId();
$isAdjuster = false;
$isBranchAdmin = false;
$isBranchUser = false;
$isAdmin = false;
if ($this->isGranted("ROLE_ADJUSTER") == true && ($this->isGranted("ROLE_ADMIN") == false && $this->isGranted("ROLE_EXAMINER") == false)) {
$isAdjuster = true;
} else if ($this->isGranted("ROLE_BRANCH_ADMIN") == true && $this->isGranted("ROLE_ADJUSTER") == false) {
$isBranchAdmin = true;
} else if ($this->isGranted("ROLE_BRANCH_USER") == true && $this->isGranted("ROLE_BRANCH_ADMIN") == false) {
$isBranchUser = true;
} else if ($this->isGranted("ROLE_ADMIN") == true || $this->isGranted("ROLE_EXAMINER") == true) {
$isAdmin = true;
}
$sql = "SELECT dt.doc_type
FROM document_type dt
WHERE dt.id = :document_type_id
LIMIT 1 ";
$stmt_sel_document_type = $em->getConnection()->prepare($sql);
$sql = "SELECT fms.file_id
FROM file_manager_service fms
WHERE fms.file_id = :file_id
AND fms.entity = 'ClaimReport'
LIMIT 1 ";
$stmt_sel_filemanager = $em->getConnection()->prepare($sql);
$sql = "SELECT dlt.document_library_id,
dlt.id as document_temp_id,
dlt.is_final_doc
FROM doc_library_temp dlt
WHERE dlt.claim_report_id = :claim_report_id
LIMIT 1 ";
$stmt_sel_doc_lib_temp = $em->getConnection()->prepare($sql);
# Build Query and PDO Parameters that will be passed to PaginatorService class
$dataParams = array();
$sql = "SELECT cr.id, cr.file_title, cr.document_type_id,
CONCAT(sr.first_name, ' ', sr.last_name) AS adjusterName,
cr.created_on, cr.invoice_id, " .
(($isAdjuster) ? "CASE WHEN cr.adjuster_id = " . $User->getId() . " THEN 1 ELSE 0 END" : "1" ) . " AS can_delete
FROM claim_report cr
LEFT JOIN resource sr
ON cr.adjuster_id = sr.id
WHERE 1 = 1
AND cr.document_type_id <> 15 ";
if(!$isBranchUser && !$isBranchAdmin && !$isAdmin){
$sql .= "AND cr.document_type_id <> 9 ";
}
# Search By Claim ID
if ($claimId > 0) {
$sql .= "AND cr.claim_id = :claimId ";
$dataParams['claimId'] = $claimId;
}
if ($isBranchUser || $isBranchAdmin) {
$CustomerResource = $em->getRepository("CustomerManagementBundle:CustomerResource")
->findOneBy(["resource" => $User->getId(),"accessLevel" => 2]);
if(empty($CustomerResource)) {
$sql .= "AND ifnull(cr.invoice_id, 0) <> 0 AND ifnull(cr.invoice_id, 0) <> '' ";
}
}
# build keyword filter, which is requested by datatables ajax when someone types into keyword field
$keyword_filter = "AND (cr.file_title like :keyword OR CONCAT(sr.first_name, ' ', sr.last_name) LIKE :keyword) ";
# call PaginatorService
$paginator = $this->container->get("resource.paginator_service");
$retVal = $paginator->getPaginationResults($request, $sql, $dataParams, "created_on DESC", $columnsArr, "", $keyword_filter, "keyword", "");
# Manipulate the resultset to be recieved by datatable
$Results2 = $retVal['data'];
$Results = array();
foreach ($Results2 as $index => $getResult) {
$getResult2 = $getResult;
$getResult2['created_on'] = date("m/d/Y", strtotime($getResult['created_on']));
unset($getResult2['entryDate']);
$getResult2['doc_type'] = "";
$DocType = array();
$sql = "SELECT dt.doc_type
FROM document_type dt
WHERE dt.id = :document_type_id
LIMIT 1 ";
$stmt_sel_document_type->execute([
'document_type_id' => $getResult2['document_type_id']
]);
$DocTypes = $stmt_sel_document_type->fetchAll(\PDO::FETCH_ASSOC);
if (count($DocTypes) > 0) {
$DocType = $DocTypes[0];
$getResult2['doc_type'] = $DocType['doc_type'];
}
/*$getResult2['has_file'] = 0;
$sql = "SELECT fms.file_id
FROM file_manager_service fms
WHERE fms.file_id = :file_id
AND fms.entity = 'ClaimReport'
LIMIT 1 ";
$stmt_sel_filemanager->execute([
"file_id" => $getResult2['id']
]);
$FileManagers = $stmt_sel_filemanager->fetchAll(\PDO::FETCH_ASSOC);
if (count($FileManagers) > 0) {
$getResult2['has_file'] = 1;
}*/
$getResult2['document_library_id'] = "";
$getResult2['document_temp_id'] = "";
$DocLibTemp = array();
$sql = "SELECT dlt.document_library_id,
dlt.id as document_temp_id,
dlt.is_final_doc
FROM doc_library_temp dlt
WHERE dlt.claim_report_id = :claim_report_id
LIMIT 1 ";
$stmt_sel_doc_lib_temp->execute([
'claim_report_id' => $getResult2['id']
]);
$DocLibTemps = $stmt_sel_doc_lib_temp->fetchAll(\PDO::FETCH_ASSOC);
$getResult2['can_edit'] = 0;
if (count($DocLibTemps) > 0) {
$getResult2['can_edit'] = 1;
$DocLibTemp = $DocLibTemps[0];
$getResult2['document_library_id'] = $DocLibTemp['document_library_id'];
$getResult2['document_temp_id'] = $DocLibTemp['document_temp_id'];
// if($DocLibTemp['is_final_doc']){
// $getResult2['can_edit'] = 0;
// }
}
$getResult2['can_delete'] = 1;
if($getResult2['doc_type']=='9 - Invoice' || $getResult2['invoice_id'] <> 0){
$getResult2['can_delete'] = 0;
}
if($getResult2['document_type_id'] == 9 && strpos($getResult2['file_title'], 'CM') !== false){
$creditMemoId = $getResult2['invoice_id'];
$creditMemo = $em->getRepository("InvoiceManagementBundle:InvoiceCreditMemo")->find($creditMemoId);
$getResult2['invoice_id'] = $creditMemo->getInvoiceId();
}
if($getResult2['doc_type']=='9 - Invoice' || $getResult2['invoice_id'] <> 0){
if ($isAdjuster) {
if($this->get('claim.helper_service')->showInvoice($getResult2['invoice_id'])) {
$Results[$index] = $getResult2;
}
} else {
$Results[$index] = $getResult2;
}
} else {
$Results[$index] = $getResult2;
}
}
$retVal['data'] = array_values($Results);
$retVal['recordsTotal'] = count($Results);
$retVal['recordsFiltered'] = count($Results);
return new JsonResponse($retVal);
}
/**
* Method to recieve uploaded file from js upload plugin,
* saves file to /tmp folder, and saves FileObject
* info to session, for later use
*
* @Route("/report/upload_file")
*/
public function saveUploadClaimReportAjaxAction(Request $request)
{
$slog = new SLogger();
ini_set("max_execution_time", 3600);
ini_set("max_input_time", 3600);
ini_set("post_max_size", '64M');
ini_set("upload_max_filesize", '64M');
$documentType = $request->request->get('form')['documentType'];
// $slog->log("Document Type POG: " . $documentType);
if (isset($_FILES['files']) && count($_FILES['files']['name']) > 0) {
# Create Array wit same information as $_FILE object
$session = new Session();
foreach ($_FILES['files'] as $key => $value) {
$useFile[$key] = $value[0];
}
$pathArr = pathinfo(strtolower($useFile['name']));
$useFile['file_ext'] = $pathArr['extension'];
// $slog->log("Document Size POG: " . $useFile['size']);
if ($useFile['size'] > 67108864) { // filesize cannot exceed 64 MB
$retVal = array(
"result" => "fail",
"error" => true,
"error_msgs" => ["File cannot be larger than 64 MB"],
"files" => [
[
"name" => "File cannot be larger than 64 MB"
]
]
);
return new JsonResponse($retVal);
}
if($documentType) {
/*
* Categories 1 through 9 only allow .PDF extensions
*/
if ($documentType <= 9) {
# Validate file type
$categoryPdf = ["pdf"];
if (!in_array($useFile['file_ext'], $categoryPdf)) {
$retVal = array(
"result" => "fail",
"error" => true,
"error_msgs" => ["Only PDFs"],
"files" => [
[
"name" => "Only PDF file extension type allowed"
]
]
);
return new JsonResponse($retVal);
}
/*
* Category 10 with id=10 only allow Array of extensions
*/
} elseif ($documentType == 10) {
# Validate file type
$categoryPdf = ["pdf"];
# NO Validate file types
$categoryTen = ["action", "apk", "app", "bat", "bin", "cmd", "com", "command", "cpl", "csh", "exe", "gadget", "inf1", "ins", "inx",
"ipa", "isu", "job", "jse", "ksh", "lnk", "msc", "msi", "msp", "mst", "osx", "out", "paf", "pif", "prg", "ps1", "reg", "rgs",
"run", "scr", "sct", "shb", "shs", "u3p", "vb", "vbe", "vbs", "vbscript", "workflow", "ws", "wsf", "wsh",
"ACTION", "APK", "APP", "BAT", "BIN", "CMD", "COM", "COMMAND", "CPL", "CSH", "EXE", "GADGET", "INF1", "INS", "INX", "IPA",
"ISU", "JOB", "JSE", "KSH", "LNK", "MSC", "MSI", "MSP", "MST", "OSX", "OUT", "PAF", "PIF", "PRG", "PS1", "REG", "RGS", "RUN",
"SCR", "SCT", "SHB", "SHS", "U3P", "VB", "VBE", "VBS", "VBSCRIPT", "WORKFLOW", "WS", "WSF", "WSH"];
if (in_array($useFile['file_ext'], $categoryTen) && !in_array($useFile['file_ext'], $categoryPdf)) {
$retVal = array(
"result" => "fail",
"error" => true,
"error_msgs" => ["Extension file type is NOT allowed"],
"files" => [
[
"name" => "This Extension file type is NOT allowed",
]
]
);
return new JsonResponse($retVal);
}
/*
* Category 11 with id=11 only allow .ESX extensions
*/
} elseif ($documentType == 11) {
# Validate file type
$categoryEsx = ["esx"];
if (!in_array($useFile['file_ext'], $categoryEsx)) {
$retVal = array(
"result" => "fail",
"error" => true,
"error_msgs" => ["Only ESXs"],
"files" => [
[
"name" => "Only ESX file extension type allowed"
]
]
);
return new JsonResponse($retVal);
}
}
}else{
$retVal = array(
"result" => "fail",
"error" => true,
"error_msgs" => ["No Document Type"],
"files" => [
[
"name" => "No Document Type selected"
]
]
);
return new JsonResponse($retVal);
}
$path = $useFile['tmp_name'];
# Save path to new file, also in /tmp folder
$get_num = md5(uniqid());
$new_file_name = is_numeric($get_num) ? round($get_num, 2) : $get_num;
$new_file_path = "/tmp/" . $new_file_name;
$useFile['new_file_name'] = $new_file_name;
$useFile['used_by_module'] = "UploadClaimReport";
$orig_file_name = $useFile['name'];
# Save session with $_FILE object array, including path to new /tmp file
$claimReportUploadFiles = array();
if ($session->has("claimreport_upload_files")) {
$claimReportUploadFiles = $session->get("claimreport_upload_files");
}
$claimReportUploadFiles[] = $useFile;
$session->set("claimreport_upload_files", $claimReportUploadFiles);
$slog = new SLogger();
$slog->log("claimReportUploadFiles: ");
$slog->log($claimReportUploadFiles);
# Move temporary uploaded file to new file
move_uploaded_file($path, $new_file_path);
}
$retVal = [
"files" => [
[
"name" => $orig_file_name
]
]
];
return new JsonResponse($retVal);
}
/**
* Generates view for "Create Report Document" ajax modal,
* and uses form builder
*
* @Route("/report/create/{claimId}")
*/
public function addClaimReportAjaxAction(Request $request, $claimId)
{
# Create Form Builder using Form Builder Helper for this Entity
$onlyServerSideVal = false;
$em = $this->container->get("doctrine.orm.entity_manager");
$formFactory = $this->container->get("form.factory");
$user = $this->container->get("security.token_storage")->getToken()->getUser();
$ReportFormHelper = new ClaimReportFormHelper($em, $formFactory, $user, $onlyServerSideVal);
$form = $ReportFormHelper->getAddForm();
# Get Logged In User
$loggedInUser = $this->container->get("security.token_storage")->getToken()->getUser();
# Set the current Logged In User as the value for the Adjuster Field
$resource = $em->getRepository("ResourceManagementBundle:Resource")->find($loggedInUser->getId());
$form->get('adjuster')->setData($resource);
# Reset session for claim report file upload
$session = new Session();
$session->remove("claimreport_upload_files");
$Claim = $em->getRepository("ClaimManagementBundle:Claim")->findOneBy([
"id" => $claimId
]);
$isSplCust='0';
$claimCustomerID=$Claim->getCustomer()->getId();
$SplCustomerID = $em->getRepository('CoreBundle:SystemControlMetadata')->findOneBy(['cmetaKey' => 'spl_cust_report_upload_allowed']);
$customerIds = explode(',', $SplCustomerID instanceof SystemControlMetadata ? $SplCustomerID->getCmetaValue() : "");
if(in_array($claimCustomerID,$customerIds)){
$isSplCust='1';
}
//dd($isSplCust);
return $this->render("ClaimManagementBundle:ClaimFlowScreen/Fragments/modals:add-report-modal.html.twig", [
"reportForm" => $form->createView(),
"onlyServerSideVal" => $onlyServerSideVal,
"claimId" => $claimId,
"isSplCustomer" => $isSplCust
]);
}
/**
* Generates view for "Update Report Document" ajax modal,
* and uses form builder
*
* @Route("/report/edit/{id}")
*/
public function editClaimReportAjaxAction(Request $request, ClaimReport $claim_report)
{
# Create Form Builder using Form Builder Helper for this Entity
$onlyServerSideVal = false;
$em = $this->container->get("doctrine.orm.entity_manager");
$formFactory = $this->container->get("form.factory");
$user = $this->container->get("security.token_storage")->getToken()->getUser();
$ReportFormHelper = new ClaimReportFormHelper($em, $formFactory, $user, $onlyServerSideVal);
$form = $ReportFormHelper->getEditForm($claim_report);
# Reset session for claim report file upload
$session = new Session();
$session->remove("claimreport_upload_files");
$image_id = "";
$claimId = $claim_report->getClaim()->getId();
$FileManager = $em->getRepository("ResourceManagementBundle:FileManager")->loadByFileIDEntity($claim_report->getId(), "ClaimReport", false, $claimId);
if ($FileManager) {
$image_id = $FileManager->getId();
}
return $this->render("ClaimManagementBundle:ClaimFlowScreen/Fragments/modals:edit-report-modal.html.twig", [
"reportForm" => $form->createView(),
"onlyServerSideVal" => $onlyServerSideVal,
"ClaimReport" => $claim_report,
"id" => $claim_report->getId(),
"image_id" => $image_id
]);
}
/**
* Update Report Document - ajax action,
* saves fields, and handles saving of uploaded file
*
* @Route("/report/save_edit/{id}")
*/
public function saveUpdateClaimReportAjaxAction(Request $request, ClaimReport $ClaimReport)
{
$em = $this->container->get("doctrine.orm.entity_manager");
# Retrieve Form Builder to validate
$formFactory = $this->container->get("form.factory");
$user = $this->container->get("security.token_storage")->getToken()->getUser();
$ReportFormHelper = new ClaimReportFormHelper($em, $formFactory, $user, false);
$form = $ReportFormHelper->getEditForm($ClaimReport);
# Handle the request from the Form Builder
$form->handleRequest($request);
$ClaimReport = $form->getData();
if ($form->isValid()) {
$session = new Session();
$claimReportUploadFiles = $session->get("claimreport_upload_files");
foreach ($claimReportUploadFiles as $i => $claimreport_upload_file) {
# Update File Upload Fields
$ClaimReport->setFileSize($claimreport_upload_file['size']);
$ClaimReport->setExt($claimreport_upload_file['file_ext']);
$em->persist($ClaimReport);
break;
}
# Persist Document
$em->flush();
# Save Uploaded File using File Manager Service
if (count($claimReportUploadFiles) > 0) {
$claimId = $ClaimReport->getClaim()->getId();
$file_manager = $this->container->get("app.file_manager");
$file_manager->saveFile($claimReportUploadFiles[0], $ClaimReport->getId(), "ClaimReport", false, $claimId);
}
$retVal = array(
"status" => "success",
"error_msgs" => []
);
return new JsonResponse($retVal);
} else { // if form not valid
# Send back errors to client
$data = array();
$errors2 = array();
$errors = $this->get("validator")->validate($ClaimReport);
if (count($errors) > 0) {
$data = [
"errors" => array()
];
foreach ($errors as $error) {
$nextError = array();
$nextError['id'] = $error->getPropertyPath();
$nextError['text'] = $error->getMessage();
$data['errors'][] = $nextError;
}
}
$retVal = array(
"result" => "fail",
"error_msgs" => $errors2,
"error" => true,
"data" => $data
);
return new JsonResponse($retVal);
}
}
/**
* Creates Report Document - ajax action,
* saves fields, and handles saving of uploaded file
*
* @Route("/report/save_create/{claimId}")
*/
public function saveAddClaimReportAjaxAction(Request $request, $claimId)
{
$em = $this->container->get("doctrine.orm.entity_manager");
ini_set("max_execution_time", 3600);
ini_set("max_input_time", 3600);
ini_set("post_max_size", '64M');
ini_set("upload_max_filesize", '64M');
# Retrieve Form Builder to validate
$formFactory = $this->container->get("form.factory");
$username = $this->container->get("security.token_storage")->getToken()->getUsername();
$Resource = $em->getRepository("ResourceManagementBundle:Resource")->findOneBy(['username' => $username]);
$ReportFormHelper = new ClaimReportFormHelper($em, $formFactory, $Resource, false);
$form = $ReportFormHelper->getAddForm();
# Handle the request from the Form Builder
$form->handleRequest($request);
$ClaimReport = $form->getData();
//$ClaimReport = $em->getRepository("ClaimManagementBundle:ClaimReport")->find($ClaimReport->getId());
if ($form->isValid()) {
# Check if session with file exists
$session = new Session();
if (!$session->has("claimreport_upload_files")) {
$data = array();
$errors2 = array();
$data = [
"errors" => array()
];
$nextError = array();
$nextError['id2'] = "uploaded_file_reportadd";
$nextError['id'] = "documentType";
$nextError['text'] = "You did not upload a document.";
$data['errors'][] = $nextError;
$retVal = array(
"result" => "fail",
"error_msgs" => $errors2,
"error" => true,
"data" => $data
);
return new JsonResponse($retVal);
}
$fileTitle2 = $ClaimReport->getFileTitle();
$claimReportUploadFiles = $session->get("claimreport_upload_files");
$claim = $em->getRepository("ClaimManagementBundle:Claim")->find($claimId);
//foreach ($claimReportUploadFiles as $i => $claimreport_upload_file) {
$i = 0;
$claimreport_upload_file = $claimReportUploadFiles[$i];
if($fileTitle2 == ""){
$fileTitle = str_replace(".".$claimreport_upload_file['file_ext'],"",$claimreport_upload_file['name']);
}else {
$fileTitle = $fileTitle2;
}
$ClaimReport2 = new ClaimReport();
$ClaimReport2->setDocumentType($ClaimReport->getDocumentType());
$ClaimReport2->setAdjuster($ClaimReport->getAdjuster());
if ($i > 0) {
$fileTitle .= " ($i)";
}
$ClaimReport2->setFileTitle($fileTitle);
$ClaimReport2->setFileSize($claimreport_upload_file['size']);
$ClaimReport2->setExt($claimreport_upload_file['file_ext']);
# Save Other Claim Report Fields
$ClaimReport2->setClaim($claim);
$ClaimReport2->setStatus(0);
$ClaimReport2->setCreatedOn(new \DateTime());
$em->persist($ClaimReport2);
$em->flush();
# Log File Note that Report was created
$tokenStorage = $this->container->get("security.token_storage");
$claim_note_service = new ClaimNotesProviderService($em, $tokenStorage);
//$comment = "Claim Report '" .$ClaimReport2->getFileTitle()."' has been created with ID: " . $ClaimReport2->getId();
$idNote = $ClaimReport2->getId();
$documentType = $ClaimReport2->getDocumentType();
$comment = $ClaimReport2->getFileTitle()." ".$idNote;
$claim_note_service->addClaimNoteFromAttach($claim, $comment, $documentType, false,$ClaimReport2);
# Save Uploaded File using File Manager Service
$claimId = $ClaimReport2->getClaim()->getId();
$file_manager = $this->container->get("app.file_manager");
$fileSaveError = false;
$validUpload = $file_manager->saveFile($claimreport_upload_file, $ClaimReport2->getId(), "ClaimReport", false, $claimId);
/*
* Symbility Upload here
*
*/
$symOutbound = $this->get('integration.symbility.outbound');
/** @var Claim $claim */
if($claim->getAssignmentId()){
$symOutbound->pushDocument($claim->getClaimNumber(), [
"document_name" => $ClaimReport2->getFileTitle() . "." . $claimreport_upload_file['file_ext'],
"document_path" => "/tmp/".$claimreport_upload_file['new_file_name'],
"document_bytes" => file_get_contents("/tmp/".$claimreport_upload_file['new_file_name']),
"document_sender" => false
],$claim->getAssignmentId());
}
if ($validUpload == true) {
if ($documentType <> '9 - Policy Information' && $documentType <> '10 - Other (NO MERGE)'
&& $documentType <> '11 - ESX (NO MERGE)' && $documentType <> '12 - Fast Draft Field Report') {
//advance report due date
$daysToDiary = $claim->getCustomer()->getDaysToDiary();
/** @var \DateTime $reportDueDate */
$reportDueDate = $claim->getReportDueDate();
$slog = new SLogger();
if ($reportDueDate != '') {
$modifiedDate = $reportDueDate->modify("+$daysToDiary day");
$claim->setReportDueDate(new \DateTime($modifiedDate->format("Y-m-d H:i:s")));
}
$em->persist($claim);
try {
$em->flush();
$slog->log("IT FLUSHED");
} catch (\Exception $e) {
$slog->log("DIDN'T FLUSH, WATCH MIRA " . $e->getMessage());
}
}
$retVal = array(
"status" => "success",
"error_msgs" => ""
);
} else { // error saving file
$ClaimReport2 = $em->getRepository("ClaimManagementBundle:ClaimReport")->find($ClaimReport2->getId());
$em->remove($ClaimReport2);
$em->flush();
$retVal = array(
"status" => "error",
"error_msgs" => ["Data connection error. Unable to save file."]
);
}
return new JsonResponse($retVal);
} else { // if form not valid
# Send back errors to client
$data = array();
$errors2 = array();
$errors = $this->get("validator")->validate($ClaimReport);
if (count($errors) > 0) {
$data = [
"errors" => array()
];
foreach ($errors as $error) {
$nextError = array();
$nextError['id'] = $error->getPropertyPath();
$nextError['text'] = $error->getMessage();
$data['errors'][] = $nextError;
}
}
$retVal = array(
"result" => "fail",
"error_msgs" => $errors2,
"error" => true,
"data" => $data
);
return new JsonResponse($retVal);
}
}
/**
* @Route("/report/delete")
* @Method(methods={"POST"})
*/
public function deleteClaimReportAction(Request $request)
{
$em = $this->container->get("doctrine.orm.entity_manager");
$id = intval($request->request->get("id"));
$ClaimReport = $em->getRepository("ClaimManagementBundle:ClaimReport")->find($id);
$this->denyAccessUnlessGranted("delete_diary", $ClaimReport);
if ($ClaimReport) {
# Validate that Claim is not closed
if ($ClaimReport->getClaim()->getStatus() == 30) { // if Claim is Closed
# return message, can't delete report
$retVal = array(
"error" => true,
"error_msgs" => ["This claim is already closed. You can't delete the Report."]
);
return new JsonResponse($retVal);
}
#### Don't need this validation. We can't delete the reports if they are associated to an invoice. Already taken care through FE validation.
# Validate claim does not have Invoice
/*$Invoice = $em->getRepository("InvoiceManagementBundle:Invoice")->findOneBy([
"claim" => $ClaimReport->getClaim()
]);
if ($Invoice) { // if claim already has an Invoice
# return message, can't delete report
$retVal = array(
"error" => true,
"error_msgs" => ["This claim has already been invoiced. You can't delete the Report."]
);
return new JsonResponse($retVal);
}*/
# Log Rev Note that Report was deleted
$tokenStorage = $this->container->get("security.token_storage");
$claim_note_service = new ClaimNotesProviderService($em, $tokenStorage);
$comment = "Claim Report '".$ClaimReport->getFileTitle()."' has been deleted, with ID: " . $id;
$claim_note_service->addClaimNote($ClaimReport->getClaim(), $comment, false, 62);
#Delete the corresponding record from document temp if exists
$sql = "DELETE FROM doc_library_temp WHERE claim_report_id = :claim_report_id";
$dataParams = array();
$dataParams['claim_report_id'] = $ClaimReport->getId();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute($dataParams);
$claimReportFile = $em->getRepository("ResourceManagementBundle:FileManager")->findOneBy([
"fileId" => $ClaimReport->getId()
]);
$em->remove($ClaimReport);
if(!empty($claimReportFile))
$em->remove($claimReportFile);
$em->flush();
# Delete file with File Manager Service
$claimId = $ClaimReport->getClaim()->getId();
$this->container->get("app.file_manager")->deleteFileByEntity($id, "ClaimReport", false, $claimId);
/*$retVal = array(
"status" => "success",
"error_msgs" => []
);*/
$retVal = array(
"error" => false,
"error_msgs" => []
);
return new JsonResponse($retVal);
} else {
$retVal = array(
"error" => true,
"error_msgs" => ["Claim Report Record does not exist."]
);
return new JsonResponse($retVal);
}
}
/**
* @Route("/report/view/{entity}/{fileId}")
*/
public function viewDocumentByEntityAndID($entity, $fileId)
{
$file_manager = $this->container->get("app.file_manager");
$em = $this->container->get("doctrine.orm.entity_manager");
$ClaimReport = $em->getRepository("ClaimManagementBundle:ClaimReport")->find($fileId);
if($ClaimReport->getDocumentType()->getId()==14)
$entity = 'PhotoSheetZip';
$path = $file_manager->retrieveFilePathByEntity($fileId, $entity, 1);
if($path[0] != '')
return new Response($path[0], $path[1], $path[2]);
else
return new Response("No File Found!");
}
/**
* @Route("/report/createzip/{claim_id}")
*/
public function createzip(Request $request,$claim_id)
{
$file_manager = $this->container->get("app.file_manager");
$em = $this->container->get("doctrine.orm.entity_manager");
$ClaimReport = $em->getRepository("ClaimManagementBundle:ClaimReport")->find($claim_id);
$fileManagerAws = $this->container->get("app.wasabi_manager");
$strphotoidArray = explode(",",$request->request->get('strreportid'));
$env = 1000;
$kernel = $this->container->get("kernel");
$fileNameRand = $fileManagerAws->random_strings(10);
$new_file_path = $kernel->getRootDir() . "/../web/" . $env . "/PhotoSheet/".$fileNameRand.".zip";
$zipStatus = '';
for($i=0;$i<=count($strphotoidArray);$i++){
if($strphotoidArray[$i]>0){
$fileManagerObj = $this->getDoctrine()->getRepository('ResourceManagementBundle:FileManager')->findOneBy(['fileId'=>$strphotoidArray[$i]]);
$zipStatus = $fileManagerAws->createZipFile($new_file_path,$fileManagerObj->getLegacyPath());
}
}
if($zipStatus=='yesZip') {
$env = $kernel->getEnvironment();
if ($env == 1005)
$env = 1000;
$uri = $request->getScheme() . '://' . $request->getHttpHost() . "/" . $env . "/PhotoSheet/" . $fileNameRand . ".zip";
$retVal = array(
"uri" => $uri,
"status" => 'yesZip',
"file_name" => $fileNameRand
);
}else{
$retVal = array(
"status" => 'noZip'
);
}
return new JsonResponse($retVal);
}
/**
* @Route("/report/deletecreatezip")
*/
public function deletecreatezip(Request $request)
{
$file_name = $request->request->get('file_name');
$kernel = $this->container->get("kernel");
$env= $kernel->getEnvironment();
if($env==1005)
$env = 1000;
$new_file_path = $kernel->getRootDir() . "/../web/" . $env . "/PhotoSheet/".$file_name.".zip";
unlink($new_file_path);
$retVal = array(
"delete" => 'yes'
);
return new JsonResponse($retVal);
}
/**
* @Route("/report/view/{claimId}")
*/
public function viewStackedPDFReport(Request $request, $claimId)
{
$file_manager = $this->container->get("app.file_manager");
$em = $this->container->get("doctrine.orm.entity_manager");
$slog = new SLogger();
$sql = "SELECT id
FROM claim_report
WHERE invoice_id = :invoice_id
AND claim_id = :claim_id
AND file_title = :file_title
AND document_type_id = 15 ";
$slog->log("1");
$dataParams = array();
$dataParams['invoice_id'] = 0;
$dataParams['claim_id'] = $claimId;
$dataParams['file_title'] = 'Review Reports';
$stmt = $em->getConnection()->prepare($sql);
try{
$stmt->execute($dataParams);
}catch (\PDOException $e){
return new Response("Exception occured while trying to fetch reports");
}
$reports = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$path = '';
if($reports) {
foreach ($reports as $report) {
$path = $file_manager->retrieveFilePathByEntity($report['id'], "ReviewReports");
}
if($path[0] != '')
return new Response($path[0], $path[1], $path[2]);
else
return new Response("No File Found!");
}else{
return new Response("No File Found!");
}
}
/**
* Generates view for "Edit Report title of Document" ajax modal,
* and uses form builder
*
* @Route("/report/edittitle/")
*/
public function editClaimReportTitleAjaxAction(Request $request)
{
$em = $this->container->get("doctrine.orm.entity_manager");
$rowid = intval($request->get("rowId"));
//echo $rowid;
$onlyServerSideVal = true;
$formFactory = $this->container->get("form.factory");
$user = $this->container->get("security.token_storage")->getToken()->getUser();
$ReportFormHelper = new ClaimReportFormHelper($em, $formFactory, $user, $onlyServerSideVal);
//$form = $ReportFormHelper->getEditDocTitle($claim_report);
$ClaimReport = $em->getRepository("ClaimManagementBundle:ClaimReport")->find($rowid);
//dd($ClaimReport);
if ($ClaimReport) {
$form = $ReportFormHelper->getEditDocTitle($ClaimReport);
# Validate that Claim is not closed
if ($ClaimReport->getClaim()->getStatus() == 30) { // if Claim is Closed
# return message, can't Edit report title
$retVal = array(
"error" => true,
"error_msgs" => ["This claim is already closed. You can't edit the Report title."]
);
return new JsonResponse($retVal);
}
}
return $this->render("ClaimManagementBundle:ClaimFlowScreen/Fragments/modals:edit-report-title-modal.html.twig", [
"reportForm" => $form->createView(),
"onlyServerSideVal" => $onlyServerSideVal,
"rowId" => $rowid
]);
}
/**
* Update Report Document Title - ajax action,
* @Route("/report/saveedittitle/")
*/
public function saveUpdateClaimReportTitleAjaxAction(Request $request)
{
$em = $this->container->get("doctrine.orm.entity_manager");
$rowid = intval($request->request->get("rowid"));
$FrmTitle=$request->request->get('formTitle');
//dd($rowid);
$ClaimReport = $em->getRepository("ClaimManagementBundle:ClaimReport")->find($rowid);
$ClaimReport->setFileTitle($FrmTitle);
$em->persist($ClaimReport);
$em->flush();
# Log Rev Note that Report was deleted
$tokenStorage = $this->container->get("security.token_storage");
$claim_note_service = new ClaimNotesProviderService($em, $tokenStorage);
$comment = "Claim Report attachment Title '".$ClaimReport->getFileTitle()."' has been updated.";
$claim_note_service->addClaimNote($ClaimReport->getClaim(), $comment, false, 52);
$retVal = array(
"status" => "success",
"error_msgs" => []
);
return new JsonResponse($retVal);
}
/**
* Generates view for "Edit Report title of Document" ajax modal,
* and uses form builder
*
* @Route("/report/openpdfmodel/{claim_id}")
*/
public function openPdfModelAjaxAction(Request $request)
{
$em = $this->container->get("doctrine.orm.entity_manager");
$claimId = $request->get('claim_id');
$rowId=$request->get("strpdfid") ;
$rowId=rtrim($rowId,',');
$onlyServerSideVal = true;
$user = $this->container->get("security.token_storage")->getToken()->getUser();
$sql = "SELECT *
FROM claim_report
WHERE ifnull(invoice_id,0) = 0 ";
$sql .= "AND id IN (" . $rowId . ") ";
$dataParams = array();
//$dataParams['invoice_id'] = $invoice['id'];
//$dataParams['claim_id'] = $claim_id;
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute($dataParams);
$reports = $stmt->fetchAll(\PDO::FETCH_ASSOC);
//dd($reports);
return $this->render("ClaimManagementBundle:ClaimFlowScreen/Fragments/modals:single-pdf-modal.html.twig", [
"onlyServerSideVal" => $onlyServerSideVal,
"rowId" => $rowId,
"reports" => $reports,
"claimId" => $claimId
]);
}
/**
* @Route("/report/createsinglepdf/{claim_id}")
*/
public function createsinglepdf(Request $request,$claim_id)
{
$PdfName=$request->get("strpdfname") ;
$rowId=$request->get("strpdfid") ;
$rowId=rtrim($rowId,',');
$em = $this->container->get("doctrine.orm.entity_manager");
$file_manager = $this->container->get("app.file_manager");
$kernel = $this->container->get("kernel");
$env= $kernel->getEnvironment();
$env = 1000;
$sql = "SELECT *
FROM claim_report
WHERE ifnull(invoice_id,0) = 0 ";
$sql .= "AND id IN (" . $rowId . ") ";
$dataParams = array();
//$dataParams['invoice_id'] = $invoice['id'];
//$dataParams['claim_id'] = $claim_id;
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute($dataParams);
$reports = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$array = explode(',', $rowId);
$finalReport=[];
for($i=0;$i<count($array);$i++){
for($j=0; $j<count($reports);$j++){
if($array[$i]==$reports[$j]['id']){
$finalReport[$i]= $reports[$j];
}
}
}
$file_str = '';
# Skip if the invoice if count of attchments is greater than 50
if (count($reports) <= 50) {
$FilePathArray=[];
foreach ($finalReport as $getReport) {
$get_num = md5(uniqid());
$filePath = $kernel->getRootDir() . "/../web/" . $env . "/SinglePdf/" . $get_num.".pdf";
$FilePathArray[]=$filePath;
$retVal = $file_manager->retrieveFilePathByEntity($getReport['id'], "ClaimReport");
$fh = fopen($filePath, 'w');
if ($file_str) {
$file_str .= " " . $filePath;
} else {
$file_str = $filePath;
}
//print_r($retVal);
fwrite($fh, $retVal[0]);
fclose($fh);
}
//echo "<pre>";
//print_r($file_str);
//die;
/*Build a new PDF for stacking */
$get_num_final = md5(uniqid());
$invfilePath = $kernel->getRootDir() . "/../web/" . $env . "/SinglePdf/" . $PdfName.".pdf";
//$shell_output = shell_exec("pdftk " . $file_str . " cat output " . $invfilePath . " 2>&1");
$shell_output = shell_exec("qpdf --empty --pages " . $file_str . " -- " . $invfilePath. " 2>&1");
$FilePathArray[]=$invfilePath;
}
if(file_exists($invfilePath) && filesize($invfilePath) > 0)
{
$content = file_get_contents($invfilePath);
//$fh = fopen($filePath, 'r');
//$content = fread($fh, filesize($filePath));
//fclose($fh);
}
else
{
$content = '';
}
#Save the file into database
$user = $this->get('security.token_storage')->getToken()->getUser();
$claim = $em->getRepository("ClaimManagementBundle:Claim")->find($claim_id);
$docType= $em->getRepository("ClaimManagementBundle:DocumentType")->find(13);
$Resource = $em->getRepository("ResourceManagementBundle:Resource")->findOneBy(['id' => $user->getId()]);
$ClaimReport = new ClaimReport();
$ClaimReport->setDocumentType($docType);
$ClaimReport->setAdjuster($Resource);
$ClaimReport->setFileTitle($PdfName);
$ClaimReport->setFileSize(filesize($invfilePath));
$ClaimReport->setExt('pdf');
# Save Other Claim Report Fields
$ClaimReport->setClaim($claim);
$ClaimReport->setStatus(0);
$ClaimReport->setCreatedOn(new \DateTime());
$em->persist($ClaimReport);
$em->flush();
# Save Uploaded File using File Manager Service
$claimId = $ClaimReport->getClaim()->getId();
$file_manager = $this->container->get("app.file_manager");
$claimreport_upload_file=[];
$claimreport_upload_file['used_by_module']="UploadClaimReport";
$claimreport_upload_file['file_ext']="pdf";
$claimreport_upload_file['type']="application/pdf";
$claimreport_upload_file['new_file_name']=$PdfName;
$claimreport_upload_file['name']=$PdfName;
$claimreport_upload_file['new_file_path']=$invfilePath;
$validUpload = $file_manager->saveFile($claimreport_upload_file, $ClaimReport->getId(), "ClaimReport", false, $claimId,'','mergepdf');
#unlink the files
foreach ($FilePathArray as $pathval){
unlink($pathval);
}
return new Response (
$content,
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="' . basename($PdfName.'.pdf') . '"',
"Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT",
"Cache-Control: no-store, no-cache, must-revalidate, max-age=0",
"Cache-Control: post-check=0, pre-check=0",
"Pragma: no-cache"
]
);
}
}