nhance/app/Controllers/PendingActionsController.php
2024-09-13 09:00:09 +05:30

715 lines
27 KiB
PHP
Executable File

<?php
namespace App\Controllers;
use CodeIgniter\HTTP\IncomingRequest;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Helpers\MailHelper;
use App\Helpers\sendMailNotification;
use App\Models\EmployeeModel;
use App\Models\EmployeePolicyModel;
use App\Models\ClientModel;
use App\Models\ClientPolicyModel;
use App\Models\BatchListModel;
use App\Models\BatchFileModel;
use App\Models\EmpEndorsementModel;
use App\Controllers\Jobs;
use App\Controllers\JobWorker;
use CodeIgniter\API\ResponseTrait;
class PendingActionsController extends AdminController
{
use ResponseTrait;
protected $myLogger;
protected $employeeModel;
protected $employeePolicyModel;
protected $clientModel;
protected $clientPolicyModel;
protected $batchListModel;
protected $batchFileModel;
protected $empEndorsementModel;
protected $db;
public function __construct()
{
//session
set_session_context('PendingActionsController Called');
//log services
$this->myLogger = \Config\Services::mylogger();
$this->db = \Config\Database::connect();
//models
$this->employeeModel = new EmployeeModel();
$this->employeePolicyModel = new EmployeePolicyModel();
$this->clientModel = new ClientModel();
$this->clientPolicyModel = new ClientPolicyModel();
$this->batchListModel = new BatchListModel();
$this->batchFileModel = new BatchFileModel();
$this->empEndorsementModel = new EmpEndorsementModel();
}
//for AJAX
public function getPendingActions()
{
//get pending actions like inception, corrections,deletions,SI enhanccnement to users
$inception = $this->getPendingActionForInception();
$correction = $this->getPendingActionForCorrection();
$si_enhancement = $this->getPendingActionForSIEnhancement();
$deletion = $this->getPendingActionForDeletion();
$tpa = $this->getPendingActionForTPAIDEmpty();
$uhid = $this->getPendingActionForUHIDEmpty();
$PolicyRenewalData = $this->getPolicyRenewalDataForAllClient();
// dd($inception, $si_enhancement, $correction, $deletion, $tpa, $uhid);
$data = ['inception' => $inception, 'correction' => $correction, 'si_enhancement' => $si_enhancement, 'deletion' => $deletion, 'tpa' => $tpa, 'uhid' => $uhid, 'policy' => $PolicyRenewalData];
return $this->respond($data);
}
//for NORMAL
public function getPendingActionsForClientData()
{
$inception = $this->getPendingActionForInception();
$correction = $this->getPendingActionForCorrection();
$si_enhancement = $this->getPendingActionForSIEnhancement();
$deletion = $this->getPendingActionForDeletion();
$tpa = $this->getPendingActionForTPAIDEmpty();
$uhid = $this->getPendingActionForUHIDEmpty();
$PolicyRenewalData = $this->getPolicyRenewalDataForAllClient();
// dd($inception, $si_enhancement, $correction, $deletion, $tpa, $uhid);
$data = ['inception' => $inception, 'correction' => $correction, 'si_enhancement' => $si_enhancement, 'deletion' => $deletion, 'tpa' => $tpa, 'uhid' => $uhid, 'policy' => $PolicyRenewalData];
return $data;
}
//for only COUNT
public function getPendingActionsForDashBoard()
{
$tpa = $this->getPendingActionForTPAIDEmpty();
$uhid = $this->getPendingActionForUHIDEmpty();
$deletion = $this->getPendingActionForDeletion();
$inception = $this->getPendingActionForInception();
$ticketData = $this->getTicketsDataForDashBoard();
$correction = $this->getPendingActionForCorrection();
$si_enhancement = $this->getPendingActionForSIEnhancement();
$PolicyRenewalData = $this->getPolicyRenewalDataForAllClient();
$uhid_export_count = [];
$uhid_not_export_count = [];
foreach ($uhid as $value) {
if($value['batch_export_count'] == 1){
$uhid_export_count[] = $value['batch_export_count'];
}else{
$uhid_not_export_count[] = $value['batch_export_count'];
}
}
$tpa_export_count = [];
$tpa_not_export_count = [];
foreach ($tpa as $value) {
if($value['batch_export_count'] == 1){
$tpa_export_count[] = $value['batch_export_count'];
}else{
$tpa_not_export_count[] = $value['batch_export_count'];
}
}
$deletion_export_count = [];
$deletion_not_export_count = [];
foreach ($deletion as $value) {
if($value['batch_export_count'] == 1){
$deletion_export_count[] = $value['batch_export_count'];
}else{
$deletion_not_export_count[] = $value['batch_export_count'];
}
}
$correction_export_count = [];
$correction_not_export_count = [];
foreach ($correction as $value) {
if($value['batch_export_count'] == 1){
$correction_export_count[] = $value['batch_export_count'];
}else{
$correction_not_export_count[] = $value['batch_export_count'];
}
}
$si_export_count = [];
$si_not_export_count = [];
foreach ($si_enhancement as $value) {
if($value['batch_export_count'] == 1){
$si_export_count[] = $value['batch_export_count'];
}else{
$si_not_export_count[] = $value['batch_export_count'];
}
}
// dd($uhid_export_count, $tpa_export_count ,$deletion_export_count, $correction_export_count, $si_export_count, $ticketData, $inception, $si_enhancement, $correction, $deletion, $tpa, $uhid, $PolicyRenewalData);
$inception = count($inception);
$correction = count($correction);
$si_enhancement = count($si_enhancement);
$deletion = count($deletion);
$tpa = count($tpa);
$uhid = count($uhid);
$PolicyRenewalData = count($PolicyRenewalData);
$ticketData = count($ticketData);
$uhid_export_count = count($uhid_export_count);
$tpa_export_count = count($tpa_export_count);
$deletion_export_count = count($deletion_export_count);
$correction_export_count = count($correction_export_count);
$si_export_count = count($si_export_count);
$uhid_not_export_count = count($uhid_not_export_count);
$tpa_not_export_count = count($tpa_not_export_count);
$deletion_not_export_count = count($deletion_not_export_count);
$correction_not_export_count = count($correction_not_export_count);
$si_not_export_count = count($si_not_export_count);
// dd($inception, $si_enhancement, $correction, $deletion, $tpa, $uhid, $PolicyRenewalData);
$data = [
'inception' => $inception,
'correction' => $correction,
'si_enhancement' => $si_enhancement,
'deletion' => $deletion,
'tpa' => $tpa,
'uhid' => $uhid,
'PolicyRenewalData' => $PolicyRenewalData,
'ticketData' => $ticketData,
'uhid_export_count' => $uhid_export_count,
'tpa_export_count' => $tpa_export_count,
'deletion_export_count' => $deletion_export_count,
'correction_export_count' => $correction_export_count,
'si_export_count' => $si_export_count,
'uhid_not_export_count' => $uhid_not_export_count,
'tpa_not_export_count' => $tpa_not_export_count,
'deletion_not_export_count' => $deletion_not_export_count,
'correction_not_export_count' => $correction_not_export_count,
'si_not_export_count' => $si_not_export_count,
];
return $data;
}
public function getPendingActionForInception()
{
// Build the query
$builder = $this->db->table('client_policy cp');
$builder->select('
clients.client_name,
policy_type.policy_type as policy_name,
cp.id as client_policy_id,
cp.client_id,
cp.policy_id,
cp.policy_type_id,
cp.is_addon,
cp.policy_status,
cp.open_for_enrollment,
cp.inception_type,
cb.id as branch_id,
cb.branch_name,
COUNT(ep.id) AS employee_policy_count
');
$builder->join('employee_polices ep', 'cp.id = ep.client_policy_id AND ep.is_active = 1', 'left');
$builder->join('clients', 'cp.client_id = clients.id');
$builder->join('client_branch cb', 'cb.id = cp.client_branch_id');
$builder->join('policy_type', 'cp.policy_type_id = policy_type.id');
$builder->where('cp.is_active', 1);
$builder->where('cp.open_for_enrollment', 1);
$builder->where('cp.is_addon', 1);
$builder->where('cp.policy_status', 1);
$builder->where('cp.inception_type', 1);
$builder->whereIn('cp.policy_type_id', [1, 2, 3]);
$builder->groupBy('cp.id, cp.client_id, cp.policy_id, cp.policy_type_id, cp.is_addon, cp.policy_status, cp.open_for_enrollment');
$builder->having('employee_policy_count = 0 OR employee_policy_count IS NULL');
// Execute the query
$query = $builder->get();
// Fetch the results
$results = $query->getResultArray();
return $results;
}
public function getPendingActionForCorrection()
{
// Subquery for batch_export_count
$subQueryExport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_id = clients.id')
->where('bl.actions', 'export')
->where('bl.event_type', 'correction')
->where('bl.insurer_or_tpa', 'tpa')
->getCompiledSelect();
// Subquery for batch_import_count
$subQueryImport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_id = clients.id')
->where('bl.actions', 'import')
->where('bl.event_type', 'correction')
->where('bl.insurer_or_tpa', 'tpa')
->where('bl.status', 'success')
->getCompiledSelect();
// Subquery builder
$subqueryBuilder = $this->db->table('emp_endorsement')
->select('
clients.client_name as client_name,
clients.id as client_id,
client_branch.id as branch_id,
client_branch.branch_name,
policy_type.policy_type as policy_name,
emp_endorsement.id,
emp_endorsement.pk,
emp_endorsement.endorsement_id,
emp_endorsement.group_key,
emp_endorsement.emp_code,
emp_endorsement.table_name,
emp_endorsement.actions,
emp_endorsement.name,
emp_endorsement.status,
employees.name as ename,
(
SELECT COUNT(*)
FROM batch_files bl
WHERE bl.client_id = clients.id
AND bl.actions = "export"
AND bl.event_type = "correction"
AND bl.insurer_or_tpa = "tpa"
) AS export_count
')
->join('employees', 'emp_endorsement.pk = employees.id AND employees.is_active = 1 AND employees.emp_status = \'active\'')
->join('clients', 'employees.client_id = clients.id AND clients.is_active = 1', 'left')
->join('client_policy', 'client_policy.client_id = clients.id AND clients.is_active = 1', 'left')
->join('policy_type', 'client_policy.policy_type_id = policy_type.id ')
->join('client_branch', 'client_branch.id = employees.client_branch_id', 'left')
->where([
'emp_endorsement.actions' => 'c',
'emp_endorsement.is_active' => 1,
'emp_endorsement.status' => 'pending',
'emp_endorsement.endorsement_id' => null
])
->groupBy('emp_endorsement.pk, emp_endorsement.emp_code, emp_endorsement.table_name, emp_endorsement.actions, emp_endorsement.name');
// Main query builder
$builder = $this->db->table('clients');
$builder->select("
subquery.client_name,
subquery.client_id,
subquery.branch_name,
subquery.branch_id,
COUNT(subquery.id) AS subquery_count,
($subQueryExport) AS batch_export_count,
($subQueryImport) AS batch_import_count
");
$builder->join('(' . $subqueryBuilder->getCompiledSelect() . ') AS subquery', 'clients.id = subquery.client_id', 'left');
$builder->groupBy('clients.id');
// Execute the query
$query = $builder->get();
// Fetch the results
$results = $query->getResultArray();
$filteredResults = [];
foreach ($results as $value) {
if ($value['subquery_count'] != 0) {
$filteredResults[] = $value;
}
}
return $filteredResults;
}
public function getPendingActionForSIEnhancement()
{
// Subquery for batch_export_count
$subQueryExport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_id = clients.id')
->where('bl.actions', 'export')
->where('bl.event_type', 'si_enhancement')
->where('bl.insurer_or_tpa', 'tpa')
->getCompiledSelect();
// Subquery for batch_import_count
$subQueryImport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_id = clients.id')
->where('bl.actions', 'import')
->where('bl.event_type', 'si_enhancement')
->where('bl.insurer_or_tpa', 'tpa')
->where('bl.status', 'success')
->getCompiledSelect();
// Build the subquery
$subqueryBuilder = $this->db->table('emp_endorsement')
->select('
clients.client_name as client_name,
clients.id as client_id,
client_branch.id as branch_id,
client_branch.branch_name,
client_policy.id as client_policy_id,
policy_type.policy_type as policy_name,
emp_endorsement.id,
emp_endorsement.pk,
emp_endorsement.endorsement_id,
emp_endorsement.group_key,
emp_endorsement.emp_code,
emp_endorsement.table_name,
emp_endorsement.actions,
emp_endorsement.name,
emp_endorsement.status
')
->join('employee_polices', 'emp_endorsement.pk = employee_polices.id AND employee_polices.is_active = 1 AND employee_polices.status = \'active\'')
->join('client_policy', 'employee_polices.client_policy_id = client_policy.id AND client_policy.is_active = 1 AND client_policy.policy_status = 1')
->join('clients', 'client_policy.client_id = clients.id AND clients.is_active = 1')
->join('client_branch', 'client_branch.id = client_policy.client_branch_id')
->join('policy_type', 'client_policy.policy_type_id = policy_type.id')
->where([
'emp_endorsement.actions' => 'si',
'emp_endorsement.is_active' => 1,
'emp_endorsement.status' => 'pending',
'emp_endorsement.endorsement_id' => null
])
->groupBy('emp_endorsement.pk, emp_endorsement.emp_code, emp_endorsement.table_name, emp_endorsement.actions, emp_endorsement.name');
// Build the main query
$builder = $this->db->table('clients');
$builder->select("
clients.id,
subquery.client_name,
subquery.client_id,
subquery.client_policy_id,
subquery.policy_name,
subquery.branch_name,
subquery.branch_id,
COUNT(subquery.id) AS subquery_count,
($subQueryExport) AS batch_export_count,
($subQueryImport) AS batch_import_count
");
$builder->join('(' . $subqueryBuilder->getCompiledSelect() . ') AS subquery', 'clients.id = subquery.client_id', 'left');
$builder->groupBy('clients.id');
// Execute the query
$query = $builder->get();
// Fetch the results
$results = $query->getResultArray();
$filteredResults = [];
foreach ($results as $value) {
if ($value['subquery_count'] != 0) {
$filteredResults[] = $value;
}
}
return $filteredResults;
}
public function getPendingActionForDeletion()
{
// Subquery for batch_export_count
$subQueryExport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_id = clients.id')
->where('bl.actions', 'export')
->where('bl.event_type', 'deletion')
->where('bl.insurer_or_tpa', 'insurer')
->getCompiledSelect();
// Subquery for batch_import_count
$subQueryImport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_id = clients.id')
->where('bl.actions', 'import')
->where('bl.event_type', 'deletion')
->where('bl.insurer_or_tpa', 'insurer')
->where('bl.status', 'success')
->getCompiledSelect();
// Build the subquery
$subqueryBuilder = $this->db->table('emp_endorsement')
->select('
clients.id as client_id,
clients.client_name as client_name,
client_branch.id as branch_id,
client_branch.branch_name,
client_policy.id as client_policy_id,
policy_type.policy_type as policy_name,
emp_endorsement.pk,
emp_endorsement.id,
emp_endorsement.group_key,
emp_endorsement.emp_code,
emp_endorsement.table_name,
emp_endorsement.actions,
emp_endorsement.name,
emp_endorsement.status
')
->join('employee_polices', 'emp_endorsement.pk = employee_polices.id AND employee_polices.is_active = 1 AND employee_polices.status = \'active\' AND emp_endorsement.table_name = \'employee_polices\'', 'left')
->join('client_policy', 'employee_polices.client_policy_id = client_policy.id AND client_policy.is_active = 1 AND client_policy.policy_status = 1', 'left')
->join('clients', 'client_policy.client_id = clients.id AND clients.is_active = 1', 'left')
->join('client_branch', 'client_branch.id = client_policy.client_branch_id', 'left')
->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
->where([
'emp_endorsement.actions' => 'd',
'emp_endorsement.is_active' => 1,
'emp_endorsement.status' => 'pending',
'emp_endorsement.endorsement_id' => null,
'emp_endorsement.table_name' => 'employee_polices'
])
->groupBy('emp_endorsement.pk, emp_endorsement.emp_code, emp_endorsement.actions, emp_endorsement.name');
// Build the main query
$builder = $this->db->table('clients');
$builder->select("
clients.id,
subquery.client_name,
subquery.client_id,
subquery.client_policy_id,
subquery.policy_name,
subquery.branch_name,
subquery.branch_id,
COUNT(subquery.id) AS subquery_count,
($subQueryExport) AS batch_export_count,
($subQueryImport) AS batch_import_count
");
$builder->join('(' . $subqueryBuilder->getCompiledSelect() . ') AS subquery', 'clients.id = subquery.client_id', 'left');
$builder->groupBy('clients.id');
// Execute the query
$query = $builder->get();
// Fetch the results
$results = $query->getResultArray();
$filteredResults = [];
foreach ($results as $value) {
if ($value['subquery_count'] != 0) {
$filteredResults[] = $value;
}
}
return $filteredResults;
}
public function getPendingActionForUHIDEmpty()
{
// Subquery for batch_export_count
$subQueryExport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_policy_id = cp.id')
->where('bl.actions', 'export')
->where('bl.event_type', 'inception')
->where('bl.insurer_or_tpa', 'insurer')
->getCompiledSelect();
// Subquery for batch_import_count
$subQueryImport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_policy_id = cp.id')
->where('bl.actions', 'import')
->where('bl.event_type', 'inception')
->where('bl.insurer_or_tpa', 'insurer')
->where('bl.status', 'success')
->getCompiledSelect();
// Main query
$query = $this->db->table('employee_polices ep')
->select('c.id as client_id')
->select('ep.client_policy_id')
->select('c.client_name')
->select('c.short_name')
->select('policy_type.policy_type as policy_name')
->select('ep.uhid')
->select('cb.branch_name, cb.id as branch_id')
->select("($subQueryExport) AS batch_export_count", false)
->select("($subQueryImport) AS batch_import_count", false)
->join('client_policy cp', 'ep.client_policy_id = cp.id AND cp.is_active = 1 AND cp.policy_status = 1')
->join('clients c', 'c.id = cp.client_id')
->join('client_branch cb', 'cb.id = cp.client_branch_id')
->join('policy_type', 'policy_type.id = cp.policy_type_id')
->where('ep.uhid IS NULL')
->where('ep.status', 'active')
->where('ep.is_active', 1)
->groupBy('ep.client_policy_id, ep.uhid, c.short_name, policy_type.policy_type')
->get();
// Fetch the results
$results = $query->getResultArray();
return $results;
}
public function getPendingActionForTPAIDEmpty()
{
// Subquery for batch_export_count
$subQueryExport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_policy_id = client_policy.id')
->where('bl.actions', 'export')
->where('bl.event_type', 'inception')
->where('bl.insurer_or_tpa', 'tpa')
->getCompiledSelect();
// Subquery for batch_import_count
$subQueryImport = $this->db->table('batch_files bl')
->select('COUNT(*)')
->where('bl.client_policy_id = client_policy.id')
->where('bl.actions', 'import')
->where('bl.event_type', 'inception')
->where('bl.insurer_or_tpa', 'tpa')
->where('bl.status', 'success')
->getCompiledSelect();
// Build the query
$builder = $this->db->table('employee_polices');
$builder->select('
employee_polices.client_policy_id,
employee_polices.uhid,
employee_polices.tpa_id,
clients.short_name,
clients.client_name,
policy_type.policy_type as policy_name,
clients.id as client_id,
client_branch.id as branch_id,
client_branch.branch_name
');
$builder->select("($subQueryExport) AS batch_export_count", false);
$builder->select("($subQueryImport) AS batch_import_count", false);
$builder->join('client_policy', 'employee_polices.client_policy_id = client_policy.id AND client_policy.is_active = 1 AND client_policy.policy_status = 1');
$builder->join('clients', 'clients.id = client_policy.client_id');
$builder->join('client_branch', 'client_branch.id = client_policy.client_branch_id');
$builder->join('policy_type', 'policy_type.id = client_policy.policy_type_id');
$builder->where('employee_polices.tpa_id', null);
$builder->where('employee_polices.uhid IS NOT NULL');
$builder->where('employee_polices.status', 'active');
$builder->where('employee_polices.is_active', 1);
$builder->groupBy('employee_polices.client_policy_id');
// Execute the query
$query = $builder->get();
// Fetch the results
$results = $query->getResultArray();
return $results;
}
public function getPolicyRenewalDataForAllClient()
{
$PolicyRenewalData = $this->clientPolicyModel
->select('
clients.client_name,
client_branch.branch_name,
policy_type.policy_type as policy_name,
client_policy.policy_end_date,
client_branch.id as branch_id
')
->join('clients', 'clients.id = client_policy.client_id')
->join('client_branch', 'client_branch.id = client_policy.client_branch_id')
->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
->where('client_policy.is_active', 1)
->where('client_policy.policy_status', 0)
->where('clients.is_active', 1)
->where('client_branch.is_active', 1)
->where('client_policy.policy_end_date < DATE_ADD(CURDATE(), INTERVAL 2 MONTH)', null, false)
->get()
->getResultArray();
return $PolicyRenewalData;
}
public function getTicketsDataForDashBoard()
{
$db = \Config\Database::connect();
$ticket_data = $db->table('hdz_tickets')
->select('hdz_tickets.*, hdz_status.status')
->join('hdz_status', 'hdz_status.id = hdz_tickets.status')
->where('hdz_status.active', 1)
->where('hdz_tickets.status !=', 5)
->get()
->getResultArray();
return $ticket_data;
}
//ticket status count
public function getTicketStatusCount()
{
$db = \Config\Database::connect();
// Count status = 1
$countStatus1 = $db->table('hdz_tickets')
->selectCount('status')
->where('status', 1)
->get()
->getRowArray()['status'];
// Count status = 4
$countStatus4 = $db->table('hdz_tickets')
->selectCount('status')
->where('status', 4)
->get()
->getRowArray()['status'];
// Count status = 2
$countStatus2 = $db->table('hdz_tickets')
->selectCount('status')
->where('status', 2)
->get()
->getRowArray()['status'];
// Count status = 3
$countStatus3 = $db->table('hdz_tickets')
->selectCount('status')
->where('status', 3)
->get()
->getRowArray()['status'];
}
public function getexportCount()
{
}
}