CHANGE_RFQ_AND TESTING_VIEW_MEMBERS_STATUS_TO_CHANGE_MULTISELCT : RV

This commit is contained in:
VENKATESHWARAN 2024-11-11 15:49:59 +05:30
parent 4fa40f0fc8
commit 179ec28118
5 changed files with 241 additions and 105 deletions

View File

@ -87,22 +87,31 @@ class EmployeeController extends AdminController
{
// $model = new UserModel();
$data = [];
$data['status'] = ['draft' => 'Draft', 'active' => 'Active', 'inactive' => 'In-Active', 'pending' => 'Pending'];
$data['status'] = ['draft' => 'Draft', 'enrolled' => 'Enrolled', 'active' => 'Active', 'inactive' => 'In-Active', 'pending' => 'Pending'];
if (count($this->request->getGet())) {
$filterData = $this->request->getGet();
// Convert the status field to an array if it exists in the request data
if (isset($filterData['status'])) {
$filterData['status'] = explode(",", $filterData['status']);
}
// Fetch employees with the modified $filterData array
$data['employees'] = $this->employeePolicyModel->getEmployeePolicy(
client_id: $filterData['client_id'],
policy_id: $filterData['policy_id'],
branch_id: $filterData['branch_id'],
emp_code : $filterData['emp_code'],
emp_name : $filterData['emp_name'],
status : $filterData['status'],
client_id: $filterData['client_id'] ?? null,
policy_id: $filterData['policy_id'] ?? null,
branch_id: $filterData['branch_id'] ?? null,
emp_code : $filterData['emp_code'] ?? null,
emp_name : $filterData['emp_name'] ?? null,
status : $filterData['status'] ?? [],
);
// dd($this->employeePolicyModel->getLastQuery());
// Set getData in $data array with the processed $filterData
$data['getData'] = $filterData;
}
// dd($this->employeeModel->getLastQuery());
// dd( $data['getData']);
// dd($this->request->getGet());

View File

@ -500,26 +500,31 @@ class LeadsController extends BaseController
$rowNumber++;
}
// Leave two blank rows
$rowNumber += 2;
// Set headers and subheaders starting from current row
$headers = $data['table_data']['headers'];
$subHeaderRow = $rowNumber + 1;
$columnLetter = 'A';
// Add headers in the first row and subheaders in the second row
// Set column width and apply word wrap to headers and subheaders
foreach ($headers as $header) {
if ($header['parentHeader'] === 'Item Key' || $header['parentHeader'] == 'Action') {
continue; // Skip "Item Key" and "Action" columns
}
if($header['parentHeader'] === 'Sno'){
if ($header['parentHeader'] === 'Sno') {
$header['parentHeader'] = 'S.No.';
}
// Set the header cell value
$sheet->setCellValue("{$columnLetter}{$rowNumber}", $header['parentHeader']);
// Set column width for header
$sheet->getColumnDimension($columnLetter)->setWidth(20); // Adjust width as needed
$sheet->getStyle("{$columnLetter}{$rowNumber}")->getAlignment()->setWrapText(true);
// Apply bold style to the header
$sheet->getStyle("{$columnLetter}{$rowNumber}")->applyFromArray([
@ -528,9 +533,13 @@ class LeadsController extends BaseController
],
]);
// Add subheaders in the second row
foreach ($header['subHeaders'] as $subHeader) {
$sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader);
// Enable word wrap for subheaders
$sheet->getStyle("{$columnLetter}{$subHeaderRow}")->getAlignment()->setWrapText(true);
// Apply bold style to the subheader
$sheet->getStyle("{$columnLetter}{$subHeaderRow}")->applyFromArray([
'font' => [
@ -541,11 +550,11 @@ class LeadsController extends BaseController
$columnLetter++;
}
}
// Move to next row for data entries
$rowNumber = $subHeaderRow + 1;
// Add data rows
// Add data rows and enable word wrap for data cells
foreach ($data['table_data']['data'] as $dataRow) {
$columnLetter = 'A';
foreach ($dataRow['data'] as $cellData) {
@ -553,11 +562,20 @@ class LeadsController extends BaseController
continue; // Skip "Item Key" data
}
$sheet->setCellValue("{$columnLetter}{$rowNumber}", $cellData['value']);
// Enable word wrap for data cells
$sheet->getStyle("{$columnLetter}{$rowNumber}")->getAlignment()->setWrapText(true);
$columnLetter++;
}
$rowNumber++;
}
// Auto-size all columns after data is entered
foreach ($sheet->getColumnIterator() as $column) {
$sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
}
// Set filename based on type
$string = ($type == 2) ? 'QCR' : 'RFQ';
$filename = $string . '_' . $rfq_data['client_short_name'] . '_' . $rfq_data['policy_type'] . '_' . date('Ymdhis') . '.xlsx';
@ -586,7 +604,8 @@ class LeadsController extends BaseController
$recipient_type = $params['recipient_type'];//insurer or client
$recipient_mail = $params['recipient_mail'];// - only primary key of contacts
$recipient_mail = json_decode($params['recipient_mail'], true);;// - only primary key of contacts
$cc = 'velz1990@gmail.com,vitvelz@gmail.com';
// $cc = 'velz1990@gmail.com,vitvelz@gmail.com';
$cc = "";
$result_data = [];
// dd($recipient_mail);

View File

@ -78,6 +78,7 @@ class EmployeePolicyModel extends Model
// ----------------------------------------------------------------------------------------------------------
public function getEmployeePolicy($client_id = 0, $policy_id=0, $status=0, $branch_id=0, $emp_code="", $emp_name="")
{
// dd($status);
$result = $this->select([
'employee_polices.*',
@ -132,17 +133,39 @@ class EmployeePolicyModel extends Model
if ($policy_id !=0 && !empty($policy_id)) {
$result->where('employee_polices.client_policy_id', $policy_id);
}
if ($status !=0 && !empty($status)) {
if($status == 'active'){
if (is_array($status) && count($status) > 0) {
$result->where('employee_polices.status !=', 'expired');
if (in_array("active", $status)) {
$result->where('employee_polices.tpa_id IS NOT NULL');
$result->where('employee_polices.uhid IS NOT NULL');
}else if($status == 'pending'){
$status = 'active';
$result->where('employee_polices.status', $status);
}else{
$result->where('employee_polices.status', $status);
$result->where('employee_polices.uhid IS NOT NULL');
$result->whereIn('employee_polices.status', $status);
} elseif (in_array("pending", $status)) {
$result->where('employee_polices.tpa_id IS NULL');
$result->where('employee_polices.uhid IS NULL');
$result->whereIn('employee_polices.status', array_merge($status, ['active']));
} else {
$result->whereIn('employee_polices.status', $status);
}
// if($status == 'active'){
// $result->where('employee_polices.tpa_id IS NOT NULL');
// $result->where('employee_polices.uhid IS NOT NULL');
// }else if($status == 'pending'){
// $status = 'active';
// $result->where('employee_polices.status', $status);
// }else{
// $result->where('employee_polices.status', $status);
// }
}
if (!empty($emp_code)) {
$result->where('emp.emp_code', $emp_code);
}

View File

@ -7,6 +7,17 @@
table.dataTable tbody td {
padding: 4px 4px !important;
}
.select2-selection__choice {
background-color: #0a8794 !important;
color: white !important;
font-weight: bold;
}
.select2-selection__choice__remove {
color: white !important;
margin-right: 5px;
}
</style>
<div class="row">
@ -48,17 +59,22 @@ table.dataTable tbody td {
<div class="form-group col-md-4">
<label>Status</label> <br />
<select class="form-control" id="status2">
<select class="form-control" name="status2[]" id="status2" multiple>
<option value="0">Select</option>
<?php foreach($status as $key => $value) { ?>
<option value="<?= $key ?>"
<?= (isset($getData) && $getData['status'] == $key) ? 'selected' : '' ?>>
<?php
if ((!isset($getData) || count($getData['status']) == 0) && $key == 'active') {
echo 'selected';
}
?>>
<?= $value ?>
</option>
<?php } ?>
</select>
</div>
<div class="form-group col-md-4">
<label>Employee Code</label> <br />
<input type="text" class="form-control" id="emp_code" name="emp_code" value="<?= isset($getData['emp_code']) && !empty($getData['emp_code']) ? $getData['emp_code'] : '' ?>">
@ -106,6 +122,13 @@ $(document).ready(function() {
$("#policies").select2();
$("#branch_id").select2();
$("#status2").select2({
placeholder : 'Select Status'
});
$("textarea.select2-search__field").attr('rows', '1');
$("textarea.select2-search__field").css('resize', 'none');
// if ($('.select2-selection__arrow').length > 0) {
// $('.select2-selection__arrow').removeClass('select2-selection__arrow').addClass('fa fa-chevron-down');
// }
@ -119,11 +142,22 @@ var clientPoliciesWithBranch = {
var client_id = '<?= isset($getData) ? $getData['client_id'] : '0' ?>';
var client_branch_id = '<?= isset($getData) ? $getData['branch_id'] : '0' ?>';
var statusData = <?= json_encode(isset($getData['status']) ? $getData['status'] : []) ?>;
$(document).ready(function() {
// Loop through each item in statusData and set the option as selected.
statusData.forEach(function(status) {
$('#status2 option[value="' + status + '"]').prop('selected', true);
});
// Refresh the select element (necessary if you are using a plugin like Select2).
$('#status2').trigger('change');
});
$(document).ready(function() {
console.log("document loaded");
//fetchClientPolicies();
});
$(window).on("load", function() {
@ -330,6 +364,11 @@ function fetchEmpolyeeList(event) {
var emp_code = $('#emp_code').val();
var emp_name = $('#emp_name').val();
var statusArray = [];
$('#status2 option:selected').each(function() {
statusArray.push($(this).val());
});
// console.log(client_id + '-' + policy_id);
// if (client_id == '0' || policy_id == '0') {
// alert('Please select values in both dropdowns.');
@ -343,7 +382,7 @@ function fetchEmpolyeeList(event) {
branch_id: branch_id,
emp_code : emp_code,
emp_name : emp_name,
status : status,
status : statusArray,
};
const queryString = objectToQueryString(queryParams);

View File

@ -216,6 +216,7 @@ body {
<button id="submitMail"class="btn btn-primary" onclick="showModal()">Send Mail</button>
<input type="hidden" id="lead_id" name="lead_id" value="<?= isset($lead_id) ? $lead_id : '' ?>">
<input type="hidden" id="qcr_count" value="<?= isset($qcr_count) ? $qcr_count : 0 ?>">
<!-- <button id="openDialogBtn">Open Dialog</button> -->
<div class="table-container">
@ -765,6 +766,7 @@ function moveAddRowButton() {
// Event listener to handle row removal
rfqTable.addEventListener('click', function(e) {
if (e.target.classList.contains('removeRow')) {
const row = e.target.closest('tr'); // Get the row to be removed
const rowKey = row.getAttribute('id');
@ -778,6 +780,7 @@ rfqTable.addEventListener('click', function(e) {
moveAddRowButton(); // Move the add row button to the last row
realignSpecialConditions();
}
});
// Function to add new columns
@ -1670,8 +1673,16 @@ function changeInsurer(event) {
function changeState(event) {
var type = event.target.className;
console.log(type);
let type = event.target.className;
console.log('1 : ', type);
// if (type.includes('sendClientProposal') && type.includes('fa fa-check-square')) {
// type = 'sendClientProposal';
// } else if (type.includes('qcrProposal') && type.includes('fa fa-check-square')) {
// type = 'qcrProposal';
// }
// console.log('2 : ',type);
if (['qcrProposal', 'sendClientProposal'].includes(type)) {
@ -2175,6 +2186,7 @@ function showModal(){
}
function ajaxRequestForGetMailData(url){
$.ajax({
url: url,
type: "GET",
@ -2212,7 +2224,7 @@ function appendInput(data) {
if (!data.contact_person_email) {
html += `
<div class="form-group col-md-12">
<a href="${url}">Click here to add mail</a>
<a href="${url}">Click here to update mail ID</a>
</div>
`;
}
@ -2282,36 +2294,49 @@ function constructURL() {
}
function ajaxRequest(url){
console.log(url);
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
$.ajax({
url: url,
type: "GET",
dataType: 'json',
success: function (res) {
url: url,
type: "GET",
dataType: 'json',
success: function (res) {
console.log(res);
if(res.status == 'success' && res.code == 200){
toastr.success('Mail send Successfully', 'SUCCESS')
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.log(res);
if(res.status == 'success' && res.code == 200){
toastr.success('Mail send Successfully', 'SUCCESS')
}else{
if(res.messgae){
toastr.error(res.messgae, 'ERROR')
}else{
if(res.messgae){
toastr.error(res.messgae, 'ERROR')
}else{
toastr.error('Mail send failed', 'ERROR')
}
toastr.error('Mail send failed', 'ERROR')
}
}
$('.close').click()
},
error: function (xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
}
$('.close').click()
},
error: function (xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error(xhr.responseText);
console.error(status, error);
}
});
}
//--------------------------------------------------------------------------------------------------------------------------------------------
// not in use do not remove this function
function tableToJson() {
const headers = [];
@ -2522,14 +2547,14 @@ function jsonToTable(json) {
proposel_count++;
// Extract qcr and stc status for the main headers
const dropdown_data_qcr = proposels[header.parentHeader]?.qcr === 1 ?
const dropdown_data_qcr = proposels[header.parentHeader]?.qcr == 1 ?
'style="background-color: rgb(221, 221, 221);"' : '';
const dropdown_data_stc = proposels[header.parentHeader]?.stc === 1 ?
const dropdown_data_stc = proposels[header.parentHeader]?.stc == 1 ?
'style="background-color: rgb(221, 221, 221);"' : '';
const check_icon_qcr = proposels[header.parentHeader]?.qcr === 1 ?
const check_icon_qcr = proposels[header.parentHeader]?.qcr == 1 ?
`<i class="fa fa-check-square" style="color: green; margin-left: 8px;"></i>` : '';
const check_icon_stc = proposels[header.parentHeader]?.stc === 1 ?
const check_icon_stc = proposels[header.parentHeader]?.stc == 1 ?
`<i class="fa fa-check-square" style="color: green; margin-left: 8px;"></i>` : '';
@ -2539,7 +2564,7 @@ function jsonToTable(json) {
<div class="dropdown-content">
<a href="#" class="addInsurer">Add Insurer</a>
<a href="#" class="qcrProposal" ${dropdown_data_qcr}>QCR${check_icon_qcr}</a>
<a href="#" class="sendClientProposal" ${dropdown_data_stc}>Send to Client${check_icon_qcr}</a>
<a href="#" class="sendClientProposal" ${dropdown_data_stc}>Send to Client${check_icon_stc}</a>
<a href="#" class="removeProposal">Remove</a>
</div>
</span>`;
@ -2603,15 +2628,15 @@ function jsonToTable(json) {
const insurerData = proposels[header.parentHeader]?.insurers[index - 1] || {};
dropdownDataQCRForInsurer = insurerData.qcr === 1 ?
dropdownDataQCRForInsurer = insurerData.qcr == 1 ?
'style="background-color: rgb(221, 221, 221);"' : '';
dropdownDataSTCForInsurer = insurerData.stc === 1 ?
dropdownDataSTCForInsurer = insurerData.stc == 1 ?
'style="background-color: rgb(221, 221, 221);"' : '';
checkDropdownDataQCRForInsurer = insurerData.qcr === 1 ?
checkDropdownDataQCRForInsurer = insurerData.qcr == 1 ?
`<i class="fa fa-check-square" style="color: green; margin-left: 8px;"></i>` :
'';
checkDropdownDataSTCForInsurer = insurerData.stc === 1 ?
checkDropdownDataSTCForInsurer = insurerData.stc == 1 ?
`<i class="fa fa-check-square" style="color: green; margin-left: 8px;"></i>` :
'';
@ -2814,57 +2839,72 @@ function jsonToTable(json) {
console.log(over_all_column_data);
try {
let qcr_count = $('#qcr_count').val()
let lead_id = $('#lead_id').val()
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
if(qcr_count != 0){
const jsonData = await convertJsonForQCR(); // Construct the JSON data
console.log('qcr found')
// Create a FormData object
const formData = new FormData();
url = '<?= base_url('rfq/list/') ?>' + lead_id + '/' + 2;
window.location.href = url;
let lead_id = $('#lead_id').val();
}else{
formData.append('json', JSON.stringify(jsonData));
formData.append('lead_id', lead_id);
console.log('qcr not found')
const postUrl = '<?= base_url('rfq/createQCR')?>';
console.log(postUrl);
try {
const response = await $.ajax({
url: postUrl,
type: 'POST',
data: formData,
processData: false, // Important to prevent jQuery from processing the data
contentType: false, // Important to set this to false to let jQuery set the content type correctly
});
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
console.log('Data sent successfully:', response);
if(response.status == true){
toastr.success(response.message, 'SUCCESS');
}else{
toastr.warning(response.message, 'WARNING');
}
const jsonData = await convertJsonForQCR(); // Construct the JSON data
window.location.href = '<?= base_url('rfq/list/') ?>' + lead_id + '/' + 2;
// Create a FormData object
const formData = new FormData();
} catch (error) {
console.error('An error occurred during the AJAX request:');
if (error.responseText) {
try {
const errorResponse = JSON.parse(error.responseText);
console.error('Server Response:', errorResponse);
} catch (parseError) {
console.error('Error Message:', error.message);
console.error('Could not parse error response:', error.responseText);
let lead_id = $('#lead_id').val();
formData.append('json', JSON.stringify(jsonData));
formData.append('lead_id', lead_id);
const postUrl = '<?= base_url('rfq/createQCR')?>';
console.log(postUrl);
const response = await $.ajax({
url: postUrl,
type: 'POST',
data: formData,
processData: false, // Important to prevent jQuery from processing the data
contentType: false, // Important to set this to false to let jQuery set the content type correctly
});
console.log('Data sent successfully:', response);
if(response.status == true){
toastr.success(response.message, 'SUCCESS');
}else{
toastr.warning(response.message, 'WARNING');
}
} else {
console.error('Error Message:', error.message);
}
console.error('Full Error Object:', error);
window.location.href = '<?= base_url('rfq/list/') ?>' + lead_id + '/' + 2;
} catch (error) {
console.error('An error occurred during the AJAX request:');
if (error.responseText) {
try {
const errorResponse = JSON.parse(error.responseText);
console.error('Server Response:', errorResponse);
} catch (parseError) {
console.error('Error Message:', error.message);
console.error('Could not parse error response:', error.responseText);
}
} else {
console.error('Error Message:', error.message);
}
console.error('Full Error Object:', error);
}
}
});
});
@ -2882,15 +2922,21 @@ function jsonToTable(json) {
let headerIndex = 0;
parentHeaders.forEach((header) => {
console.log('header names', header);
console.log('header header.innerText', header.innerText);
const colspan = header.getAttribute('colspan') || 1;
const subHeaderArray = [];
for (let i = 0; i < colspan; i++) {
subHeaderArray.push(subHeaders[headerIndex].innerText.replace('⋮', '').trim());
const cleanedText = subHeaders[headerIndex].innerText.split('⋮')[0].trim();
subHeaderArray.push(cleanedText);
headerIndex++;
}
headers.push({
parentHeader: header.innerText.replace('⋮', '').trim(),
parentHeader: header.innerText.split('⋮')[0].trim(),
subHeaders: subHeaderArray
});
});