stock module - 03-04-2025

This commit is contained in:
vadivelJ96 2025-04-03 17:22:40 +05:30
parent 663e526f29
commit 81d569dc01
6 changed files with 792 additions and 1334 deletions

View File

@ -1525,6 +1525,10 @@ function updateIGRWeight(){
/*
********************************************************* sec_gas_shortage_starts **************************************************************
*/
public function gasCylinderEntered(){ public function gasCylinderEntered(){
$this->global['pageTitle'] = 'Gas Cylinder Entered'; $this->global['pageTitle'] = 'Gas Cylinder Entered';
@ -1533,7 +1537,7 @@ function updateIGRWeight(){
$gasMaterialCodes = array_column($gasMaterialCodes,'MaterialCode'); $gasMaterialCodes = array_column($gasMaterialCodes,'MaterialCode');
$igrDetailsListByMcatGas = $this->inwardgateregister_model->getIgrDetailsListByMcatGas($gasMaterialCodes); $igrDetailsListByMcatGas = $this->inwardgateregister_model->getIgrDetailsListByMcatGas($gasMaterialCodes,"gas_entered");
$data['gasCylinderEnteredList'] = $igrDetailsListByMcatGas; $data['gasCylinderEnteredList'] = $igrDetailsListByMcatGas;
@ -1544,9 +1548,16 @@ function updateIGRWeight(){
public function gasCylinderPending(){ public function gasCylinderPending(){
$this->global['pageTitle'] = 'Gas Shortage List';
$data['gasShortageList'] = $this->gasShortage_model->findAll(); $this->global['pageTitle'] = 'Gas Cylinder Pending';
$gasMaterialCodes = $this->rawMaterialDetails_model->getAllGasMaterialCode();
$gasMaterialCodes = array_column($gasMaterialCodes,'MaterialCode');
$igrDetailsListByMcatGas = $this->inwardgateregister_model->getIgrDetailsListByMcatGas($gasMaterialCodes,"gas_pending");
$data['gasCylinderPendingList'] = $igrDetailsListByMcatGas;
$this->loadViews("gasCylinderPending", $this->global, $data, NULL); $this->loadViews("gasCylinderPending", $this->global, $data, NULL);
@ -1555,58 +1566,125 @@ function updateIGRWeight(){
public function gasCylinderReturned(){ public function gasCylinderReturned(){
$this->global['pageTitle'] = 'Gas Shortage List'; $this->global['pageTitle'] = 'Gas Cylinder Returned';
$data['gasShortageList'] = $this->gasShortage_model->findAll(); $gasMaterialCodes = $this->rawMaterialDetails_model->getAllGasMaterialCode();
$gasMaterialCodes = array_column($gasMaterialCodes,'MaterialCode');
$igrDetailsListByMcatGas = $this->inwardgateregister_model->getIgrDetailsListByMcatGas($gasMaterialCodes,"gas_returned");
$data['gasCylinderReturnedList'] = $igrDetailsListByMcatGas;
$this->loadViews("gasCylinderReturned", $this->global, $data, NULL); $this->loadViews("gasCylinderReturned", $this->global, $data, NULL);
} }
public function getGasShortageDetail(){
$postData = $this->request->getPost();
$shortage = $this->gasShortage_model->where('id',$postData['id'])->find();
return $this->response->setJSON(['status' => 'success', 'data' => $shortage]);
}
public function updateGasShortage() public function updateGasShortage()
{ {
$postData = $this->request->getPost(); try {
// Validate required data $postData = $this->request->getJSON(true); // Convert JSON to an associative array
if (!$postData) {
return $this->response->setJSON(['status' => 'error', 'message' => 'Invalid request. No data received.']); // Validate if any data is received
if (!$postData) {
return $this->response->setJSON([
'status' => 'error',
'message' => 'Invalid request. No data received.'
]);
}
// Validate required fields
if (empty($postData['invoiceNo']) ) {
return $this->response->setJSON([
'status' => 'error',
'message' => 'Missing invoiceNo data.'
]);
}
$updates = [];
$inserts = [];
if(isset($postData['id'])){ //update operation
$cylinderData = [
'id' => $postData['id'],
'IGRNO' => $postData['IGRNO'] ?? '',
'fullCylinderDate' => $postData['fullCylinderDate'] ?? '',
'emptyCylinderDate' => $postData['emptyCylinderDate'] ?? '',
'invoiceNo' => $postData['invoiceNo'] ?? '',
'cylinderNo' => $postData['cylinderNo'],
'grossWeight' => $postData['grossWeight'],
'tareWeight' => $postData['tareWeight'] ?? '',
'netWeight' => $postData['netWeight'] ?? '',
'actualWeight' => $postData['actualWeight'],
'shortage' => $postData['shortage'] ?? '',
'gas_cylinder_status' => "gas_returned"
];
$updates[] = $cylinderData ;
}else{//Insert Operation
// Process each cylinder entry
foreach ($postData['cylinders'] as $cylinder) {
// Ensure cylinder data is valid
if (!isset($cylinder['cylinderNo'], $cylinder['grossWeight'], $cylinder['actualWeight'])) {
continue; // Skip incomplete data
}
$cylinderData = [
'IGRNO' => $postData['IGRNO'] ?? '',
'fullCylinderDate' => $postData['fullCylinderDate'] ?? '',
'emptyCylinderDate' => $postData['emptyCylinderDate'] ?? '',
'invoiceNo' => $postData['invoiceNo'] ?? '',
'cylinderNo' => $cylinder['cylinderNo'],
'grossWeight' => $cylinder['grossWeight'],
'tareWeight' => $cylinder['tareWeight'] ?? '',
'netWeight' => $cylinder['netWeight'] ?? '',
'actualWeight' => $cylinder['actualWeight'],
'shortage' => $cylinder['shortage'] ?? '',
'gas_cylinder_status' => 'gas_pending'
];
$inserts[] = $cylinderData;
}
}
if (!empty($updates)) {
$this->gasShortage_model->updateBatch($updates, 'id');
}
if (!empty($inserts)) {
$this->gasShortage_model->insertBatch($inserts);
}
return $this->response->setJSON([
'status' => 'success',
'message' => 'Gas shortage details processed successfully.'
]);
} catch (\Throwable $th) {
// Log the error for debugging
log_message('error', 'Gas Shortage Update Error: ' . $th->getMessage());
return $this->response->setJSON([
'status' => 'error',
'message' => 'An unexpected error occurred while processing gas shortage details.',
'error' => $th->getMessage()
]);
} }
// Validate required fields for adding
if ( !isset($postData['invoiceNo']) ) {
return $this->response->setJSON(['status' => 'error', 'message' => 'Missing required fields: invoice No.']);
}
// Handle update (edit)
if (isset($postData["id"])) {
return $this->gasShortage_model->update($postData["id"], $postData)
? $this->response->setJSON(['status' => 'success', 'message' => 'Gas shortage details updated successfully.'])
: $this->response->setJSON(['status' => 'error', 'message' => 'Failed to update gas shortage details.']);
}
// Insert new shortage (add)
return ($insertId = $this->gasShortage_model->insert($postData))
? $this->response->setJSON(['status' => 'success', 'message' => 'Gas shortage details added successfully.', 'data' => ['id' => $insertId]])
: $this->response->setJSON(['status' => 'error', 'message' => 'Failed to save gas shortage details.']);
} }
/*
********************************************************* sec_gas_shortage_ends **************************************************************
*/
} }

View File

@ -13,8 +13,18 @@ class GasShortageModel extends Model
protected $useSoftDeletes = false; protected $useSoftDeletes = false;
protected $protectFields = true; protected $protectFields = true;
protected $allowedFields = protected $allowedFields =
['fullCylinderDate','emptyCylinderDate','invoiceNo', ['id',
'cylinderNo','grossWeight','tareWeight','netWeight','actualWeight','shortage' 'IGRNO',
'fullCylinderDate',
'emptyCylinderDate',
'invoiceNo',
'cylinderNo',
'grossWeight',
'tareWeight',
'netWeight',
'actualWeight',
'shortage',
'gas_cylinder_status'
]; ];
protected bool $allowEmptyInserts = false; protected bool $allowEmptyInserts = false;

View File

@ -1380,26 +1380,42 @@ $builder = $this->db->table('t_igr_history')
} }
//Mcat -materialCategory //Mcat -materialCategory
public function getIgrDetailsListByMcatGas($gasMaterialCodes){ public function getIgrDetailsListByMcatGas($gasMaterialCodes,$gas_status){
$result = $this->db->table('t_igr_details as t_igrd') $builder = $this->db->table('t_igr_details as t_igrd')
->select(" ->select("
t_igrd.IGRNO, t_igrd.IGRNO as IGRNO-,
SUM(t_igrd.QuantityAsPerInvoice) as gasCylinderCount, (t_igrd.QuantityAsPerInvoice) as gasCylinderCount,
t_sd.SupplierName, t_sd.SupplierName,
t_igrm.*, t_igrm.*,
'gas entered' AS status t_mm.MaterialName,
t_gsd.*
") ")
->join('t_igr_master t_igrm', 't_igrm.IGRNO = t_igrd.IGRNO') ->join('t_igr_master t_igrm', 't_igrm.IGRNO = t_igrd.IGRNO')
->join('t_purchaseorder_master t_pom', 't_igrm.PONO = t_pom.PONO', 'left') ->join('t_purchaseorder_master t_pom', 't_igrm.PONO = t_pom.PONO', 'left')
->join('t_supplierdetailsn t_sd', 't_sd.SupplierID = t_pom.SupplierID') ->join('t_supplierdetailsn t_sd', 't_sd.SupplierID = t_pom.SupplierID')
->join('t_gasshortagedetails t_gsd', 't_gsd.IGRNO = t_igrd.IGRNO', 'left') ->join('t_gasshortagedetails t_gsd', 't_gsd.IGRNO = t_igrd.IGRNO', 'left')
->whereIn('MaterialCode', $gasMaterialCodes) ->join('t_materialmaster t_mm','t_mm.MaterialCode = t_igrd.MaterialCode','left')
->where("DATE(t_igrd.CreatedDate) BETWEEN '2025-01-01' AND '2025-01-31' ") ->whereIn('t_igrd.MaterialCode', $gasMaterialCodes)
->where('t_gsd.IGRNO IS NULL') ->where("DATE(t_igrd.CreatedDate) >= '2025-04-01' ");
->groupBy('t_igrd.IGRNO')
->get()
->getResultArray(); switch ($gas_status) {
case "gas_entered":
$builder->where('t_gsd.gas_cylinder_status IS NULL');
break;
case "gas_pending":
$builder->where('t_gsd.gas_cylinder_status','gas_pending');
break;
case "gas_returned":
$builder->where('t_gsd.gas_cylinder_status','gas_returned');
break;
default:
$builder->where('t_gsd.gas_cylinder_status IS NULL');
}
$result = $builder->get()->getResultArray();

View File

@ -203,22 +203,27 @@
<table id="view_inward_gate_register" class="table table-bordered table-hover"> <table id="view_inward_gate_register" class="table table-bordered table-hover">
<thead> <thead>
<tr> <tr>
<!-- basic details -->
<th>Full Cylinder Date</th> <th>Full Cylinder Date</th>
<th>IGR No</th> <th>IGR No</th>
<th>Supplier</th> <th>Supplier</th>
<th>Bill/Invoice No</th> <th>Bill/Invoice No</th>
<th>Cylinder Name</th>
<!-- cylinderdetails -->
<!-- least details -->
<th>Bill Date</th> <th>Bill Date</th>
<th>Driver Name</th> <th>Driver Name</th>
<th>Vehicle No</th> <th>Vehicle No</th>
<th>Cylinder Count</th> <th>Cylinder Count</th>
<th>Status</th>
<th>Gas Details</th> <th>Gas Details</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php if(empty($gasCylinderEnteredList)){?> <?php if(empty($gasCylinderEnteredList)){?>
<p> No Gas Cylinder Entered in the Given Dates..!!</p> <p align="center"> No Gas Cylinder Entered in the Given Dates..!!</p>
<?php }else{ ?> <?php }else{ ?>
<?php foreach($gasCylinderEnteredList as $index => $gasCylinder): <?php foreach($gasCylinderEnteredList as $index => $gasCylinder):
@ -228,22 +233,39 @@
<tr> <tr>
<!-- basic details -->
<!-- td:eq(0) -->
<td><?=$gasCylinder['MaterialRcvdDate']?></td> <td><?=$gasCylinder['MaterialRcvdDate']?></td>
<td><?=$gasCylinder['IGRNO']?></td> <!-- td:eq(1) -->
<td><?=$gasCylinder['IGRNO-']?></td>
<!-- td:eq(2) -->
<td><?=$gasCylinder['SupplierName']?></td> <td><?=$gasCylinder['SupplierName']?></td>
<!-- td:eq(3) -->
<td><?=$gasCylinder['DeliveryChellanOrInvoiceNo']?></td> <td><?=$gasCylinder['DeliveryChellanOrInvoiceNo']?></td>
<!-- td:eq(4) -->
<td><?=$gasCylinder['MaterialName']?></td>
<!-- cylinderdetails -->
<!-- least details -->
<!-- td:eq(5) -->
<td><?=$gasCylinder['DeliveryChellanDate']?></td> <td><?=$gasCylinder['DeliveryChellanDate']?></td>
<!-- td:eq(6) -->
<td><?=$gasCylinder['DriverName']?></td> <td><?=$gasCylinder['DriverName']?></td>
<!-- td:eq(7) -->
<td><?=$gasCylinder['VehicleNo']?></td> <td><?=$gasCylinder['VehicleNo']?></td>
<!-- td:eq(8) -->
<td><?=$gasCylinder['gasCylinderCount']?></td> <td><?=$gasCylinder['gasCylinderCount']?></td>
<td><?=$gasCylinder['status']?></td>
<!-- #gasEnteredDetails modal will open when clicking this button --> <!-- #gasEnteredDetails modal will open when clicking this button -->
<td> <td>
<a href="#"> <a href="#">
<i class="fa fa-edit enter-gas-details" ></i> <i class="fa fa-edit gas-entered-details" ></i>
</a> </a>
</td> </td>
@ -277,7 +299,7 @@
<div class="modal-dialog modal-xl"> <div class="modal-dialog modal-xl">
<div class="modal-content" style="border: 1px solid #ddd; margin-top: 73px; box-shadow: 0 0 40px rgb(0 0 0 / 43%);"> <div class="modal-content" style="border: 1px solid #ddd; margin-top: 73px; box-shadow: 0 0 40px rgb(0 0 0 / 43%);">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">Enter Gas Cylinder Details </h4> <h4 class="modal-title">Gas Cylinder Details </h4>
<button type="button" class="close" data-dismiss="modal" <button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button> aria-hidden="true">×</button>
@ -340,6 +362,11 @@
<input type="text" class="form-control" id="vehicleNo" name="vehicleNo" value="" readonly> <input type="text" class="form-control" id="vehicleNo" name="vehicleNo" value="" readonly>
</div> </div>
<div class="col-md-4">
<label for="cylinderCount"> Cylinder Name </label>
<input type="text" class="form-control" id="cylinderName" name="cylinderName" value="" readonly>
</div>
<div class="col-md-4"> <div class="col-md-4">
<label for="cylinderCount"> Cylinder Count </label> <label for="cylinderCount"> Cylinder Count </label>
<input type="text" class="form-control" id="cylinderCount" name="cylinderCount" value="" readonly> <input type="text" class="form-control" id="cylinderCount" name="cylinderCount" value="" readonly>
@ -485,7 +512,7 @@
$("#resetButton").click(function() { $("#resetButton").click(function() {
$("#fromDate").val(''); $("#fromDate").val('');
$("#toDate").val(''); $("#toDate").val('');
window.location="ViewIGR" window.location="gasCylinderEntered"
}); });
// Automatically focus and open the To Date picker when From Date is selected // Automatically focus and open the To Date picker when From Date is selected
@ -533,7 +560,7 @@
<!-- while Opening gasEnteredDetails modal --> <!-- while Opening gasEnteredDetails modal -->
<script> <script>
$(document).on('click', '.enter-gas-details', function() { $(document).on('click', '.gas-entered-details', function() {
let row = $(this).closest("tr"); let row = $(this).closest("tr");
@ -542,10 +569,13 @@
let igrNo = row.find("td:eq(1)").text().trim(); let igrNo = row.find("td:eq(1)").text().trim();
let supplierName = row.find("td:eq(2)").text().trim(); let supplierName = row.find("td:eq(2)").text().trim();
let invoiceNo = row.find("td:eq(3)").text().trim(); let invoiceNo = row.find("td:eq(3)").text().trim();
let billDate = row.find("td:eq(4)").text().trim(); let cylinderName = row.find("td:eq(4)").text().trim();
let driverName = row.find("td:eq(5)").text().trim();
let vehicleNo = row.find("td:eq(6)").text().trim();
let cylinderCount = parseInt(row.find("td:eq(7)").text().trim(), 10); let billDate = row.find("td:eq(5)").text().trim();
let driverName = row.find("td:eq(6)").text().trim();
let vehicleNo = row.find("td:eq(7)").text().trim();
let cylinderCount = parseInt(row.find("td:eq(8)").text().trim(), 10);
// Convert fullCylinderDate to YYYY-MM-DD // Convert fullCylinderDate to YYYY-MM-DD
if (fullCylinderDate) { if (fullCylinderDate) {
@ -567,6 +597,7 @@
$('#billDate').val(billDate); $('#billDate').val(billDate);
$('#driverName').val(driverName); $('#driverName').val(driverName);
$('#vehicleNo').val(vehicleNo); $('#vehicleNo').val(vehicleNo);
$('#cylinderName').val(cylinderName);
$('#cylinderCount').val(cylinderCount); $('#cylinderCount').val(cylinderCount);
// Clear previous cylinder inputs // Clear previous cylinder inputs
@ -618,6 +649,7 @@
$('#billDate').val(" "); $('#billDate').val(" ");
$('#driverName').val(" "); $('#driverName').val(" ");
$('#vehicleNo').val(" "); $('#vehicleNo').val(" ");
$('#cylinderName').val(" ");
$('#cylinderCount').val(" "); $('#cylinderCount').val(" ");
$('#cylinderDiv').html(""); $('#cylinderDiv').html("");
}); });
@ -644,21 +676,22 @@ $(document).ready(function () {
// Collecting form data // Collecting form data
let formData = { let formData = {
fullCylinderDate: $("#fullCylinderDate").val(), fullCylinderDate: $("#fullCylinderDate").val(),
igrNo: $("#IGRNO").val(), IGRNO: $("#IGRNO").val(),
supplierName: $("#supplierName").val(), supplierName: $("#supplierName").val(),
invoiceNo: $("#invoiceNo").val(), invoiceNo: $("#invoiceNo").val(),
billDate: $("#billDate").val(), billDate: $("#billDate").val(),
driverName: $("#driverName").val(), driverName: $("#driverName").val(),
vehicleNo: $("#vehicleNo").val(), vehicleNo: $("#vehicleNo").val(),
cylinderCount: $("#cylinderCount").val(), cylinderName: $('#cylinderName').val(),
cylinderCount: $("#cylinderCount").val(),
cylinders: [] // Array to store cylinder details cylinders: [] // Array to store cylinder details
}; };
// Loop through dynamically generated cylinder inputs // Loop through dynamically generated cylinder inputs
$("#cylinderDiv .form-group.row.dynamicField").each(function () { $("#cylinderDiv .form-group.row.dynamicField").each(function () {
let cylinderData = { let cylinderData = {
cylinderNo: $(this).find("input[name='cylinderNumber[]']").val(), cylinderNo : $(this).find("input[name='cylinderNumber[]']").val(),
grossWeight: $(this).find("input[name='grossWeight[]']").val(), grossWeight : $(this).find("input[name='grossWeight[]']").val(),
actualWeight: $(this).find("input[name='actualWeight[]']").val(), actualWeight: $(this).find("input[name='actualWeight[]']").val(),
}; };
formData.cylinders.push(cylinderData); formData.cylinders.push(cylinderData);
@ -666,8 +699,6 @@ $(document).ready(function () {
console.log(formData); // Debugging - Check if data is correct console.log(formData); // Debugging - Check if data is correct
return;
$('#loader').show(); // Show loader $('#loader').show(); // Show loader
$.ajax({ $.ajax({

File diff suppressed because it is too large Load Diff

View File

@ -203,31 +203,83 @@
<table id="view_inward_gate_register" class="table table-bordered table-hover"> <table id="view_inward_gate_register" class="table table-bordered table-hover">
<thead> <thead>
<tr> <tr>
<th>Full Cylinder Date</th> <!-- basic details -->
<th>Full Cylinder Date</th>
<th>IGR No</th> <th>IGR No</th>
<th>Supplier</th> <th>Supplier</th>
<th>Bill/Invoice No</th>
<th>Cylinder Name</th>
<!-- cylinderdetails -->
<th>Cylinder No</th> <th>Cylinder No</th>
<th>Gross Weight</th> <th>Gross Weight</th>
<th>Empty Cylinder Date</th> <th>Empty Cylinder Date</th>
<th>Tare Weight</th> <th>Tare Weight</th>
<th>Net Weight</th> <th>Net Weight</th>
<th>Actual Weight</th> <th>Actual Weight</th>
<th>shortage</th> <th>Shortage</th>
<th>Bill/Invoice No</th>
<!-- least details -->
<th>Bill Date</th> <th>Bill Date</th>
<th>Driver Name</th> <th>Driver Name</th>
<th>Vehicle No</th> <th>Vehicle No</th>
<th>Gas Details</th>
<th>Status</th>
<th>Action</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php if(empty($gasCylinderReturnedList)){?>
<p align="center" > No Gas Cylinder Entered in the Given Dates..!!</p>
<?php }else{ ?>
<?php foreach($gasCylinderReturnedList as $index => $gasCylinder):
$gasCylinder['MaterialRcvdDate'] = date('d-m-Y',strtotime($gasCylinder['MaterialRcvdDate']));
$gasCylinder['DeliveryChellanDate'] = date('d-m-Y',strtotime($gasCylinder['DeliveryChellanDate']));
$gasCylinder['emptyCylinderDate'] = date('d-m-Y',strtotime($gasCylinder['emptyCylinderDate']));
?>
<tr>
<!-- basic details -->
<td><?=$gasCylinder['MaterialRcvdDate']?></td>
<td><?=$gasCylinder['IGRNO-']?></td>
<td><?=$gasCylinder['SupplierName']?></td>
<td><?=$gasCylinder['DeliveryChellanOrInvoiceNo']?></td>
<td><?=$gasCylinder['MaterialName']?></td>
<!-- cylinderdetails -->
<td><?=$gasCylinder['cylinderNo']?></td>
<td><?=$gasCylinder['grossWeight']?></td>
<td><?=$gasCylinder['emptyCylinderDate']?></td>
<td><?=$gasCylinder['tareWeight']?></td>
<td><?=$gasCylinder['netWeight']?></td>
<td><?=$gasCylinder['actualWeight']?></td>
<td><?=$gasCylinder['shortage']?></td>
<!-- least details -->
<td><?=$gasCylinder['DeliveryChellanDate']?></td>
<td><?=$gasCylinder['DriverName']?></td>
<td><?=$gasCylinder['VehicleNo']?></td>
<!-- #gasEnteredDetails modal will open when clicking this button -->
<td>
<a href="#">
<i class="fa fa-edit gas-entered-details" ></i>
</a>
</td>
</tr>
<?php endforeach ?>
<?php } ?>
</tbody> </tbody>
</table> </table>
@ -246,68 +298,14 @@
<!-- gas shortage list gasShortageList--> <!-- gas Entered modal -->
<div id="gasEnteredDetails" data-form="add" class="modal fade" tabindex="-1" role="dialog"
<!-- Modal -->
<div id="gasShortageList" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gasShortageListLabel" aria-hidden="true">
<div class="modal-dialog modal-xl " role="document">
<div class="modal-content" style="border: 1px solid #ddd; margin-top: 73px; box-shadow: 0 0 40px rgb(0 0 0 / 43%);">
<div class="modal-header">
<h5 class="modal-title" id="gasShortageListLabel" align="center">List of Gas Shortages</h5>
<button type="button" class="btn btn-primary btn-sm" id="exportGasShortage" style="margin-left: 10px;">
Export &nbsp;
<i class="fa fa-download" style="color:white;"></i>
</button>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" >
<table id="gasShortageTable" class="table table-bordered table-hover">
<thead>
<tr>
<th>Full Cylinder Date</th>
<th>Empty Cylinder Date</th>
<th>Invoice No</th>
<th>Cylinder No</th>
<th>Gross Weight</th>
<th>Tare Weight</th>
<th>Net Weight</th>
<th>Actual Weight</th>
<th>Shortage</th>
<th style="display:none">ID</th>
<th>Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- end of gas shortage list -->
<!-- gas Shortage Calculator modal addGasShortageCalculator -->
<div id="gasShortageCalculator" data-form="add" class="modal fade" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;"> aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-large"> <div class="modal-dialog modal-xl">
<div class="modal-content" style="border: 1px solid #ddd; margin-top: 73px; box-shadow: 0 0 40px rgb(0 0 0 / 43%);"> <div class="modal-content" style="border: 1px solid #ddd; margin-top: 73px; box-shadow: 0 0 40px rgb(0 0 0 / 43%);">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">Add Gas Shortage </h4> <h4 class="modal-title">Gas Cylinder Details </h4>
<button type="button" class="close" data-dismiss="modal" <button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button> aria-hidden="true">×</button>
</div> </div>
@ -317,78 +315,81 @@
<form action="#"> <form action="#">
<!-- first row full cylinder date and empty cylinder date --> <!-- first row -->
<div class="form-group row"> <div class="form-group row">
<div class="col-md-6"> <div class="col-md-4">
<label for="fullCylinderDateId"> Full Cylinder Date</label> <label for="fullCylinderDate"> Full Cylinder Date</label>
<input type="date" class="form-control" id="fullCylinderDateId" name="fullCylinderDate" value="" required> <input type="date" class="form-control" id="fullCylinderDate" name="fullCylinderDate" value="" readonly>
</div>
<div class="col-md-6">
<label for="emptyCylinderDateId"> Empty Cylinder Date</label>
<input type="date" class="form-control" id="emptyCylinderDateId" name="emptyCylinderDate" value="" required>
</div>
</div>
<!-- second row cylinder no and Invoice No-->
<div class="form-group row">
<div class="col-md-6">
<label for="invoiceNoId"> Invoice No / Bill No</label>
<input type="text" class="form-control" id="invoiceNoId" name="invoiceNo" value="" readonly>
</div> </div>
<div class="col-md-6"> <div class="col-md-4">
<label for="cylinderNoId"> Cylinder No </label> <label for="IGRNO"> IGRNO</label>
<input type="text" class="form-control" id="cylinderNoId" name="cylinderNo" value="" required> <input type="text" class="form-control" id="IGRNO" name="IGRNO" value="" readonly>
</div> </div>
</div> <div class="col-md-4">
<label for="supplierName"> Supplier Name</label>
<!-- third row gross weight and tare weight --> <input type="text" class="form-control" id="supplierName" name="supplierName" value="" readonly>
<div class="form-group row">
<div class="col-md-6">
<label for="grossWeightId"> Gross Weight </label>
<input type="text" class="form-control" id="grossWeightId" name="grossWeight" value="" required>
</div>
<div class="col-md-6">
<label for="tareWeightId"> Tare Weight </label>
<input type="text" class="form-control" id="tareWeightId" name="tareWeight" value="" required>
</div> </div>
</div>
<!-- fourth row NetWeight and actual weight -->
<div class="form-group row">
<div class="col-md-6">
<label for="actualWeightId"> Actual Weight </label>
<input type="text" class="form-control" id="actualWeightId" name="actualWeight" value="" required>
</div>
<div class="col-md-6">
<label for="netWeightId"> Net Weight (Gross-Tare)</label>
<input type="text" class="form-control" id="netWeightId" name="netWeight" value="" readonly>
</div>
</div> </div>
<!-- fifth row Gas Shortage --> <!-- second row -->
<div class="form-group row"> <div class="form-group row">
<div class="col-md-6">
<label for="shortageId"> Gas Shortage(Actual-Net)</label> <div class="col-md-4">
<input type="text" class="form-control" id="shortageId" name="shortage" value="" readonly> <label for="invoiceNo"> Bill No/Invoice No </label>
<input type="text" class="form-control" id="invoiceNo" name="invoiceNo" value="" readonly>
</div> </div>
<div class="col-md-4">
<label for="billDate"> Bill Date</label>
<input type="date" class="form-control" id="billDate" name="billDate" value="" readonly>
</div>
<div class="col-md-4">
<label for="driverName"> Driver Name</label>
<input type="text" class="form-control" id="driverName" name="driverName" value="" readonly>
</div>
</div> </div>
<!-- third row -->
<div class="form-group row">
<div class="col-md-4">
<label for="vehicleNo"> Vehicle No</label>
<input type="text" class="form-control" id="vehicleNo" name="vehicleNo" value="" readonly>
</div>
<div class="col-md-4">
<label for="cylinderCount"> Cylinder Name </label>
<input type="text" class="form-control" id="cylinderName" name="cylinderName" value="" readonly>
</div>
<div class="col-md-4">
<label for="cylinderCount"> Cylinder Count </label>
<input type="text" class="form-control" id="cylinderCount" name="cylinderCount" value="" readonly>
</div>
</div>
<hr>
<!-- fourth row -->
<div id="cylinderDiv">
</div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary waves-effect" <button type="button" class="btn btn-secondary waves-effect"
data-dismiss="modal" value="Cancel">Cancel</button> data-dismiss="modal" value="Cancel">Cancel</button>
@ -404,102 +405,6 @@
<!-- end gas shortage calculator modal --> <!-- end gas shortage calculator modal -->
<!-- Edit gas Shortage Calculator modal editgasShortageCalculator -->
<div id="editGasShortageCalculator" data-form="edit" class="modal fade" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-large">
<div class="modal-content" style="border: 1px solid #ddd; margin-top: 73px; box-shadow: 0 0 40px rgb(0 0 0 / 43%);">
<div class="modal-header">
<h4 class="modal-title">Update Gas Shortage </h4>
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button>
</div>
<form action="#">
<div class="modal-body p-4">
<!-- first row full cylinder date and empty cylinder date -->
<div class="form-group row">
<div class="col-md-6">
<label for="editFullCylinderDateId"> Full Cylinder Date</label>
<input type="date" class="form-control" id="editFullCylinderDateId" name="fullCylinderDate" value="" required>
</div>
<div class="col-md-6">
<label for="editEmptyCylinderDateId"> Empty Cylinder Date</label>
<input type="date" class="form-control" id="editEmptyCylinderDateId" name="emptyCylinderDate" value="" required>
</div>
</div>
<!-- second row cylinder no and Invoice No-->
<div class="form-group row">
<div class="col-md-6">
<label for="editInvoiceNoId"> Invoice No / Bill No</label>
<input type="text" class="form-control" id="editInvoiceNoId" name="invoiceNo" value="" readonly>
</div>
<div class="col-md-6">
<label for="editCylinderNoId"> Cylinder No </label>
<input type="text" class="form-control" id="editCylinderNoId" name="cylinderNo" value="" required>
</div>
</div>
<!-- third row gross weight and tare weight -->
<div class="form-group row">
<div class="col-md-6">
<label for="editGrossWeightId"> Gross Weight </label>
<input type="text" class="form-control" id="editGrossWeightId" name="grossWeight" value="" required>
</div>
<div class="col-md-6">
<label for="editTareWeightId"> Tare Weight </label>
<input type="text" class="form-control" id="editTareWeightId" name="tareWeight" value="" required>
</div>
</div>
<!-- fourth row NetWeight and actual weight -->
<div class="form-group row">
<div class="col-md-6">
<label for="editActualWeightId"> Actual Weight </label>
<input type="text" class="form-control" id="editActualWeightId" name="actualWeight" value="" required>
</div>
<div class="col-md-6">
<label for="editNetWeightId"> Net Weight (Gross-Tare)</label>
<input type="text" class="form-control" id="editNetWeightId" name="netWeight" value="" readonly>
</div>
</div>
<!-- fifth row Gas Shortage -->
<div class="form-group row">
<div class="col-md-6">
<label for="editShortageId"> Gas Shortage(Actual-Net)</label>
<input type="text" class="form-control" id="editShortageId" name="shortage" value="" readonly>
</div>
</div>
<!-- hidden fields -->
<input type="hidden" id="editId" name="id" value="" >
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary waves-effect"
data-dismiss="modal" value="Cancel">Cancel</button>
<button type="submit"
class="btn btn-info waves-effect waves-light" >Save</button>
</div>
</form>
</div>
</div>
</div>
<!-- end gas shortage calculator modal -->
@ -612,7 +517,7 @@
$("#resetButton").click(function() { $("#resetButton").click(function() {
$("#fromDate").val(''); $("#fromDate").val('');
$("#toDate").val(''); $("#toDate").val('');
window.location="ViewIGR" window.location="gasCylinderReturned"
}); });
// Automatically focus and open the To Date picker when From Date is selected // Automatically focus and open the To Date picker when From Date is selected
@ -657,95 +562,99 @@
<!-- while Opening gasEnteredDetails modal -->
<script>
$(document).on('click', '.gas-entered-details', function() {
let row = $(this).closest("tr");
let fullCylinderDate = row.find("td:eq(0)").text().trim();
let igrNo = row.find("td:eq(1)").text().trim();
let supplierName = row.find("td:eq(2)").text().trim();
let invoiceNo = row.find("td:eq(3)").text().trim();
let billDate = row.find("td:eq(4)").text().trim();
let driverName = row.find("td:eq(5)").text().trim();
let vehicleNo = row.find("td:eq(6)").text().trim();
let cylinderName = row.find("td:eq(7)").text().trim();
let cylinderCount = parseInt(row.find("td:eq(8)").text().trim(), 10);
// Convert fullCylinderDate to YYYY-MM-DD
if (fullCylinderDate) {
let dateParts = fullCylinderDate.split("-");
fullCylinderDate = `${dateParts[2]}-${dateParts[1]}-${dateParts[0]}`;
}
// Convert billDate to YYYY-MM-DD
if (billDate) {
let dateParts = billDate.split("-");
billDate = `${dateParts[2]}-${dateParts[1]}-${dateParts[0]}`;
}
// Assign values to modal inputs
$('#fullCylinderDate').val(fullCylinderDate);
$('#IGRNO').val(igrNo);
$('#supplierName').val(supplierName);
$('#invoiceNo').val(invoiceNo);
$('#billDate').val(billDate);
$('#driverName').val(driverName);
$('#vehicleNo').val(vehicleNo);
$('#cylinderName').val(cylinderName);
$('#cylinderCount').val(cylinderCount);
// Clear previous cylinder inputs
$('#cylinderDiv').html("");
// Generate cylinder input fields dynamically
if (cylinderCount > 0) {
let inputFields = `
<div class="form-group row">
<div class="col-md-4"><label>Cylinder Number</label> <span class="text-danger">*</span> </div>
<div class="col-md-4"><label>Gross Weight</label> <span class="text-danger">*</span> </div>
<div class="col-md-4"><label>Actual Weight</label> <span class="text-danger">*</span> </div>
</div>`;
for (let i = 1; i <= cylinderCount; i++) {
inputFields += `
<div class="form-group row dynamicField">
<div class="col-md-4">
<input type="text" class="form-control" name="cylinderNumber[]" placeholder="Cylinder ${i}" required>
</div>
<div class="col-md-4">
<input type="number" class="form-control" name="grossWeight[]" placeholder="Gross Weight ${i}" required>
</div>
<div class="col-md-4">
<input type="number" class="form-control" name="actualWeight[]" placeholder="Actual Weight ${i}" required>
</div>
</div>`;
}
$('#cylinderDiv').html(inputFields);
}
// Show the modal
$('#gasEnteredDetails').modal('show');
});
</script>
<!-- while closing gasEnteredDetails modal -->
<!-- 02-04-2025 new gas shortage calculator -->
<!-- add gas shortage calculator -->
<script>
$('#grossWeightId, #tareWeightId,#actualWeightId').change(function() {
console.log("fine here ");
let grossWeightVal = $('#grossWeightId').val().trim();
let tareWeightVal = $('#tareWeightId').val().trim();
// Ensure both fields have values before calculation
if (grossWeightVal === '' || tareWeightVal === '') {
return;
}
let grossWeight = validateNumber(grossWeightVal);
let tareWeight = validateNumber(tareWeightVal);
let netWeight = grossWeight - tareWeight;
$('#netWeightId').val(netWeight);
let actualWeightVal = $('#actualWeightId').val().trim();
// Ensure both fields have values before calculation
if (actualWeightVal === '' || netWeight === '') {
return;
}
let actualWeight = validateNumber(actualWeightVal);
let shortage = actualWeight - netWeight;
$('#shortageId').val(shortage);
});
function validateNumber(givenValue) {
givenValue = givenValue.trim();
if (/^\d+$/.test(givenValue)) {
return parseInt(givenValue, 10); // Convert string to number
} else {
alert('Please Enter a Valid Number..!!');
return 0; // Invalid number
}
}
</script>
<!-- while opening add gas shortage modal -->
<script> <script>
$(document).ready(function(){ $(document).ready(function(){
$('#gasShortageCalculator').on("shown.bs.modal", function(e){ $('#gasEnteredDetails').on("hide.bs.modal", function(e){
//invoice needed to store it in the shortage table ,
// coz based on this we can limit the addition of shortage must not exceed than given qty
let invoiceNo = $('#Invoice_No').val();
let materialReceivedDate = $('#MaterialRcvdDate').val().split("-");
//converting it to y-m-d format;
console.log(`${materialReceivedDate[2]}-${materialReceivedDate[1]}-${materialReceivedDate[0]}`);
$('#invoiceNoId').val(invoiceNo);
$('#fullCylinderDateId').val(`${materialReceivedDate[2]}-${materialReceivedDate[1]}-${materialReceivedDate[0]}`);
});
});
</script>
<!-- while closing add gas shortage modal -->
<script>
$(document).ready(function(){
$('#gasShortageCalculator').on("hide.bs.modal", function(e){
$('#invoiceNoId').val(' ');
$('#fullCylinderDateId').val(" ");
$('#emptyCylinderDateId').val(" ");
$('#cylinderNoId').val(" ");
$('#grossWeightId').val(" ");
$('#tareWeightId').val(" ");
$('#actualWeightId').val(" ");
$('#netWeightId').val(" ");
$('#shortageId').val(" ");
$('#fullCylinderDate').val(" ");
$('#IGRNO').val(" ");
$('#supplierName').val(" ");
$('#invoiceNo').val(" ");
$('#billDate').val(" ");
$('#driverName').val(" ");
$('#vehicleNo').val(" ");
$('#cylinderName').val(" ");
$('#cylinderCount').val(" ");
$('#cylinderDiv').html("");
}); });
}); });
</script> </script>
@ -753,357 +662,75 @@
<!-- end of add gas shortage calculator --> <!-- end of add gas shortage calculator -->
<!-- edit gasShortageCalculator -->
<script>
$('#editGrossWeightId,#editTareWeightId,#editActualWeightId').change(function() {
let grossWeightVal = $('#editGrossWeightId').val().trim();
let tareWeightVal = $('#editTareWeightId').val().trim();
// Ensure both fields have values before calculation
if (grossWeightVal === '' || tareWeightVal === '') {
return;
}
let grossWeight = validateNumber(grossWeightVal);
let tareWeight = validateNumber(tareWeightVal);
let netWeight = grossWeight - tareWeight;
$('#editNetWeightId').val(netWeight);
let actualWeightVal = $('#editActualWeightId').val().trim();
// Ensure both fields have values before calculation
if (actualWeightVal === '' || netWeight === '') {
return;
}
let actualWeight = validateNumber(actualWeightVal);
let shortage = actualWeight - netWeight;
$('#editShortageId').val(shortage);
});
</script>
<!-- while opening edit gas shortage modal -->
<script>
$(document).ready(function(){
$('#editGasShortageCalculator').on("shown.bs.modal", function(e){
//invoice needed to store it in the shortage table ,
// coz based on this we can limit the addition of shortage must not exceed than given qty
let invoiceNo = $('#Invoice_No').val();
let materialReceivedDate = $('#MaterialRcvdDate').val().split("-");
//converting it to y-m-d format;
console.log(`${materialReceivedDate[2]}-${materialReceivedDate[1]}-${materialReceivedDate[0]}`);
$('#editInvoiceNoId').val(invoiceNo);
$('#editFullCylinderDateId').val(`${materialReceivedDate[2]}-${materialReceivedDate[1]}-${materialReceivedDate[0]}`);
});
});
</script>
<!-- while closing edit gas shortage modal -->
<script>
$(document).ready(function(){
$('#editGasShortageCalculator').on("hide.bs.modal", function(e){
$('#editInvoiceNoId').val(' ');
$('#editFullCylinderDateId').val(" ");
$('#editEmptyCylinderDateId').val(" ");
$('#editCylinderNoId').val(" ");
$('#editGrossWeightId').val(" ");
$('#editTareWeightId').val(" ");
$('#editActualWeightId').val(" ");
$('#editNetWeightId').val(" ");
$('#editShortageId').val(" ");
});
});
</script>
<!-- end of edit gasShortageCalculator -->
<!-- while opening gasShortageList -->
<script>
$(document).ready(function(){
$('#gasShortageList').on("shown.bs.modal",function(e){
let invoiceNo = $('#Invoice_No').val();
console.log("invoice no", invoiceNo);
$('#loader').show();
$.ajax({
type: "POST",
url: "<?php echo base_url()?>/gasShortageList", // 🔹 Change this to your actual backend endpoint
data: {invoiceNo},
dataType: "json",
success: function (response) {
if (response.status === "success") {
let data = response.data ;
let tableData = '';
data.forEach((val) => {
let fullCylinderDate = val.fullCylinderDate.split("-").reverse().join("-");
let emptyCylinderDate = val.emptyCylinderDate.split("-").reverse().join('-');
tableData += `
<tr>
<td>${fullCylinderDate}</td>
<td>${emptyCylinderDate}</td>
<td>${val.invoiceNo}</td>
<td>${val.cylinderNo}</td>
<td>${val.grossWeight}</td>
<td>${val.tareWeight}</td>
<td>${val.netWeight}</td>
<td>${val.actualWeight}</td>
<td>${val.shortage}</td>
<td style="display:none">${val.id}</td>
<td style="width: 25px; cursor: pointer;">
<i class="fa fa-solid fa-edit btnEditGasShortageCalculator"
style="text-align: center;"
data-toggle="modal"
data-target="#editGasShortageCalculator"
data-id="${val.id}"
title="Edit Gas Shortage List">
</i>
</td>
</tr>`;
});
// Assuming you have a table with ID "gasShortageTable"
$("#gasShortageTable tbody").html(tableData);
} else {
alert("Error: " + response.message);
}
},
error: function (xhr, status, error) {
console.log(xhr.responseText);
alert("Something went wrong! Please try again.");
},
complete:function(){
console.log("ajax call is completed..!!");
$('#loader').hide();
}
});
})
})
</script>
<!-- while closing gasShortageList -->
<script>
$(document).ready(function(){
$('#gasShortageList').on("hide.bs.modal",function(){
$("#gasShortageTable tbody").html(" ");
})
})
</script>
<!-- ajax call for gas Shortage --> <!-- ajax call for gas Shortage -->
<script> <script>
$("#gasShortageCalculator, #editGasShortageCalculator").submit(function (event) { $(document).ready(function () {
$("#gasEnteredDetails form").submit(function (event) {
event.preventDefault(); // Prevent form reload
event.preventDefault(); // Prevent form reload let method = $("#gasEnteredDetails").data("form"); // Get form type
let formData; // Collecting form data
let formData = {
fullCylinderDate: $("#fullCylinderDate").val(),
IGRNO: $("#IGRNO").val(),
supplierName: $("#supplierName").val(),
invoiceNo: $("#invoiceNo").val(),
billDate: $("#billDate").val(),
driverName: $("#driverName").val(),
vehicleNo: $("#vehicleNo").val(),
cylinderName: $('#cylinderName').val(),
cylinderCount: $("#cylinderCount").val(),
cylinders: [] // Array to store cylinder details
};
let method = $(this).closest(".modal").data("form"); // Loop through dynamically generated cylinder inputs
$("#cylinderDiv .form-group.row.dynamicField").each(function () {
// Prepare form data let cylinderData = {
let addFormData = { cylinderNo : $(this).find("input[name='cylinderNumber[]']").val(),
fullCylinderDate: $('#fullCylinderDateId').val(), grossWeight : $(this).find("input[name='grossWeight[]']").val(),
emptyCylinderDate: $('#emptyCylinderDateId').val(), actualWeight: $(this).find("input[name='actualWeight[]']").val(),
invoiceNo: $('#invoiceNoId').val(),
cylinderNo: $('#cylinderNoId').val(),
grossWeight: $('#grossWeightId').val(),
tareWeight: $('#tareWeightId').val(),
actualWeight: $('#actualWeightId').val(),
netWeight: $('#netWeightId').val(),
shortage: $('#shortageId').val()
}; };
formData.cylinders.push(cylinderData);
let editFormData = {
fullCylinderDate: $('#editFullCylinderDateId').val(),
emptyCylinderDate: $('#editEmptyCylinderDateId').val(),
invoiceNo: $('#editInvoiceNoId').val(),
cylinderNo: $('#editCylinderNoId').val(),
grossWeight: $('#editGrossWeightId').val(),
tareWeight: $('#editTareWeightId').val(),
actualWeight: $('#editActualWeightId').val(),
netWeight: $('#editNetWeightId').val(),
shortage: $('#editShortageId').val(),
id : $('#editId').val()
};
if(method == "add"){ formData = addFormData ;}
if(method == "edit"){ formData = editFormData ;}
$('#loader').show();
$.ajax({
type: "POST",
url: "<?php echo base_url()?>/updateGasShortage", // 🔹 Change this to your actual backend endpoint
data: formData,
dataType: "json",
success: function (response) {
if (response.status === "success") {
alert("Gas Shortage Data Saved Successfully!");
$('#gasShortageCalculator').modal('hide'); // Close modal
$('#editGasShortageCalculator').modal('hide');
} else {
alert("Error: " + response.message);
}
},
error: function (xhr, status, error) {
console.log(xhr.responseText);
alert("Something went wrong! Please try again.");
},
complete:function(){
console.log("ajax call is completed..!!");
$('#loader').hide();
}
});
}); });
</script>
console.log(formData); // Debugging - Check if data is correct
<!-- when edit modal of #editGasShortageCalculator clicked..!!--> $('#loader').show(); // Show loader
<script>
$(document).on("click", ".btnEditGasShortageCalculator", function () {
console.log("Edit modal opening place");
let id = $(this).data("id");
console.log("Editing ID:", id);
// Smooth transition: First hide, then show after 300ms
$("#gasShortageList").modal("hide");
setTimeout(() => {
$("#editGasShortageCalculator").modal("show");
}, 300);
$('#loader').show();
// AJAX request to fetch data
$.ajax({
type: "POST",
url: "<?php echo base_url()?>/getGasShortageDetail",
data: { id: id },
dataType: "json",
success: function (response) {
if (response.status === "success") {
let data = response.data;
console.log(data);
if(data.length > 0){
data = data[0];
console.log(data);
// Populate the modal fields
$("#editFullCylinderDateId").val(data.fullCylinderDate);
$("#editEmptyCylinderDateId").val(data.emptyCylinderDate);
$("#editInvoiceNoId").val(data.invoiceNo);
$("#editCylinderNoId").val(data.cylinderNo);
$("#editGrossWeightId").val(data.grossWeight);
$("#editTareWeightId").val(data.tareWeight);
$("#editNetWeightId").val(data.netWeight);
$("#editActualWeightId").val(data.actualWeight);
$("#editShortageId").val(data.shortage);
$("#editId").val(data.id); // Hidden field for ID
}
} else {
alert("Error: " + response.message);
}
},
error: function (xhr, status, error) {
console.log(xhr.responseText);
alert("Something went wrong! Please try again.");
},
complete:function(){
console.log("ajax call is completed..!!");
$('#loader').hide();
}
});
});
$.ajax({
type: "POST",
url: "<?php echo base_url()?>/updateGasShortage", // Adjust endpoint as needed
data: JSON.stringify(formData), // Send data as JSON
contentType: "application/json",
dataType: "json",
success: function (response) {
if (response.status === "success") {
alert("Gas Shortage Data Saved Successfully!");
$('#gasEnteredDetails').modal('hide'); // Close modal
} else {
alert("Error: " + response.message);
}
},
error: function (xhr, status, error) {
console.log(xhr.responseText);
alert("Something went wrong! Please try again.");
},
complete: function () {
console.log("AJAX request completed.");
$('#loader').hide();
}
});
});
});
</script> </script>
<!-- this script is to export the shortage list in excel format -->
<script>
$(document).ready(function(){
function exportTableToExcel(tableID, filename = '') {
let table = document.getElementById(tableID);
let cloneTable = table.cloneNode(true); // Clone the table to modify
// Remove hidden rows
$(cloneTable).find('tr').filter(function () {
return $(this).css('display') === 'none';
}).remove();
// Remove hidden columns
$(cloneTable).find('th, td').each(function () {
if ($(this).css('display') === 'none') {
$(this).remove();
}
});
let ws = XLSX.utils.table_to_sheet(cloneTable); // Convert modified table to sheet
let wb = XLSX.utils.book_new(); // Create a new workbook
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); // Append sheet to workbook
XLSX.writeFile(wb, filename || 'export.xlsx'); // Save the file
}
let tableId = 'gasShortageTable';
document.getElementById('exportGasShortage').addEventListener('click',function(){
exportTableToExcel(tableId, 'gas_shortage.xlsx');
})
})
</script>