stock changes 08-04-2025

This commit is contained in:
vadivelJ96 2025-04-08 17:59:23 +05:30
parent 0eb8ce8e28
commit 0883be155c
4 changed files with 384 additions and 305 deletions

View File

@ -330,6 +330,7 @@ $routes->post('updateGasShortage','Inwardgateregister::updateGasShortage');
$routes->get('gasCylinderEntered','Inwardgateregister::gasCylinderEntered'); $routes->get('gasCylinderEntered','Inwardgateregister::gasCylinderEntered');
$routes->get('gasCylinderPending','Inwardgateregister::gasCylinderPending'); $routes->get('gasCylinderPending','Inwardgateregister::gasCylinderPending');
$routes->get('gasCylinderReturned','Inwardgateregister::gasCylinderReturned'); $routes->get('gasCylinderReturned','Inwardgateregister::gasCylinderReturned');
$routes->post('gasCylindersByIgr','Inwardgateregister::gasCylindersByIgr');
$routes->post('getGasShortageDetail',"Inwardgateregister::getGasShortageDetail"); $routes->post('getGasShortageDetail',"Inwardgateregister::getGasShortageDetail");

View File

@ -1696,6 +1696,26 @@ function updateIGRWeight(){
]); ]);
} }
} }
public function gasCylindersByIgr(){
$IGRNO = $this->request->getPost('IGRNO');
$gasMaterialCodes = $this->rawMaterialDetails_model->getAllGasMaterialCode();
$gasMaterialCodes = array_column($gasMaterialCodes,'MaterialCode');
$cylinderDetails = $this->inwardgateregister_model->gasCylindersByIgr($IGRNO , $gasMaterialCodes);
$response = [
'status' => 'success',
'message' => 'Gas cylinders retrieved successfully.',
'data' => $cylinderDetails
];
return $this->response->setJSON($response);
}
/* /*
********************************************************* sec_gas_shortage_ends ************************************************************** ********************************************************* sec_gas_shortage_ends **************************************************************

View File

@ -1515,4 +1515,41 @@ class Inwardgateregister_model extends Model
return $result; return $result;
} }
public function gasCylindersByIgr($IGRNO, $gasMaterialCodes) {
$builder = $this->db->table('t_igr_master as t_igrm')
->select("
t_igrm.IGRNO,
tgsd.fullCylinderDate,
tgsd.cylinderNo,
tgsd.grossWeight,
tgsd.emptyCylinderDate,
tgsd.tareWeight,
tgsd.netWeight,
tgsd.actualWeight,
tgsd.shortage,
tgsd.invoiceNo,
t_igrm.DeliveryChellanDate,
t_igrm.DriverName,
t_igrm.VehicleNo
")
->join('t_igr_details tigrd', 'tigrd.IGRNO = t_igrm.IGRNO')
->join('t_purchaseorder_master tpom', 'tpom.PONO = t_igrm.PONO', 'left')
->join('t_supplierdetailsn tsd', 'tsd.SupplierID = tpom.SupplierID')
->join('t_gasshortagedetails tgsd', 'tgsd.IGRNO = t_igrm.IGRNO', 'left')
->whereIn('tigrd.MaterialCode', $gasMaterialCodes)
->where("DATE(tigrd.CreatedDate) >= '2025-04-01'")
->where('tgsd.gas_cylinder_status', 'gas_returned')
->where('t_igrm.IGRNO', $IGRNO); // Direct where clause on IGRNO in master table
$result = $builder->get()->getResultArray();
return $result;
}
} }

View File

@ -3,17 +3,15 @@
<!-- Flatpickr JS --> <!-- Flatpickr JS -->
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script> <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
<style> <style>
.num { .num {
text-align: right; text-align: right;
} }
#Inwardgateregistertable1 thead tr th{ #Inwardgateregistertable1 thead tr th {
width: 150px; width: 150px;
word-wrap: break-word; word-wrap: break-word;
white-space: normal; white-space: normal;
} }
th { th {
@ -75,27 +73,26 @@
.footer-textarea { .footer-textarea {
width: 100%; width: 100%;
padding: 10px; padding: 10px;
border-radius: 5px; border-radius: 5px;
border: 1px solid #ccc; border: 1px solid #ccc;
} }
.send-btn { .send-btn {
padding: 10px 20px; padding: 10px 20px;
background-color: #2ecc71; /* Green color */ background-color: #2ecc71;
color: white; /* Green color */
border: none; color: white;
border-radius: 5px; border: none;
cursor: pointer; border-radius: 5px;
cursor: pointer;
} }
.send-btn:hover { .send-btn:hover {
background-color: #27ae60; /* Darker green on hover */ background-color: #27ae60;
/* Darker green on hover */
} }
</style> </style>
<script> <script>
$(function() { $(function() {
@ -117,22 +114,25 @@
/* background-color: darkgrey; */ /* background-color: darkgrey; */
outline: 1px solid slategrey; outline: 1px solid slategrey;
} }
.igr-remarks{
.igr-remarks {
position: relative; position: relative;
} }
.igr-remarks i{
.igr-remarks i {
font-size: 14px; font-size: 14px;
} }
.igr-remarks span{
.igr-remarks span {
position: absolute; position: absolute;
top: -5px; top: -5px;
right: -6px; right: -6px;
background-color: transparent; background-color: transparent;
border-radius: 50px!important; border-radius: 50px !important;
font-weight: 600; font-weight: 600;
width: 14px; width: 14px;
box-shadow: 0 0 20px 0 rgba(0,0,0,0.2); box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2);
color:#35462c; color: #35462c;
} }
</style> </style>
<script type="text/javascript" src="<?php echo base_url(); ?>public/assets/Autocomplete/jquery.autocomplete.js"></script> <script type="text/javascript" src="<?php echo base_url(); ?>public/assets/Autocomplete/jquery.autocomplete.js"></script>
@ -148,14 +148,14 @@
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<div class="page-title-box page-title-box-alt"> <div class="page-title-box page-title-box-alt">
<div class="page-title-right"> <div class="page-title-right">
<ol class="breadcrumb m-0"> <ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="javascript: void(0);">Inward</a></li> <li class="breadcrumb-item"><a href="javascript: void(0);">Inward</a></li>
<li class="breadcrumb-item active"> <li class="breadcrumb-item active">
<h4 class="page-title">Gas Cylinder Returned </h4> <h4 class="page-title">Gas Cylinder Returned </h4>
</li> </li>
</ol> </ol>
</div> </div>
</div> </div>
</div> </div>
@ -171,30 +171,30 @@
<div class="card"> <div class="card">
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">
<form class="Date-filter-form" style="margin-top: 14px;margin-bottom: -11px;margin-left: 33px;" method="post" action="<?= base_url('ViewIGR'); ?>"> <form class="Date-filter-form" style="margin-top: 14px;margin-bottom: -11px;margin-left: 33px;" method="post" action="<?= base_url('ViewIGR'); ?>">
<label for="fromDate">From:</label>
<input class="form-control date_range form-date-search"
value=""
id="fromDate" name="fromDate" placeholder="Select From Date" autocomplete="off" required>
<label for="toDate">To:</label> <label for="fromDate">From:</label>
<input class="form-control date_range to-date-search" <input class="form-control date_range form-date-search"
value="" value=""
id="toDate" name="toDate" placeholder="Select To Date" autocomplete="off" required> id="fromDate" name="fromDate" placeholder="Select From Date" autocomplete="off" required>
<button type="submit" class="range_search_button" > <label for="toDate">To:</label>
<i class="fe-search" aria-hidden="true" class="icon-button" title="Search"></i> <input class="form-control date_range to-date-search"
</button> value=""
id="toDate" name="toDate" placeholder="Select To Date" autocomplete="off" required>
<i class="fe-rotate-cw range_reset_button"
style="cursor:pointer;" <button type="submit" class="range_search_button">
aria-hidden="true" class="icon-button" id="resetButton" title="Reset"></i> <i class="fe-search" aria-hidden="true" class="icon-button" title="Search"></i>
</button>
<div class="error" id="error"></div> <i class="fe-rotate-cw range_reset_button"
</form> style="cursor:pointer;"
</div> aria-hidden="true" class="icon-button" id="resetButton" title="Reset"></i>
<div class="error" id="error"></div>
</form>
</div>
<!-- <div class="col-md-4"> <!-- <div class="col-md-4">
<button id="downloadExcel" class="btn btn-primary" style="margin-top: 14px;margin-bottom: -11px;margin-right: 25px;float: right;">Download Excel</button> <button id="downloadExcel" class="btn btn-primary" style="margin-top: 14px;margin-bottom: -11px;margin-right: 25px;float: right;">Download Excel</button>
</div> --> </div> -->
@ -203,76 +203,92 @@
<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 --> <!-- 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> <th>Cylinder Name</th>
<!-- cylinderdetails --> <!-- cylinderdetails -->
<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>Cylinder Count</th>
<th>Cylinder Pending</th> <th>Cylinder Pending</th>
<!-- least details --> <!-- 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>Download</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php if(empty($gasCylinderReturnedList)){?> <?php if (empty($gasCylinderReturnedList)) { ?>
<p align="center" > No Gas Cylinder Returned in the Given Dates..!!</p> <p align="center"> No Gas Cylinder Returned in the Given Dates..!!</p>
<?php }else{ ?> <?php } else { ?>
<?php foreach($gasCylinderReturnedList as $index => $gasCylinder): <?php foreach ($gasCylinderReturnedList as $index => $gasCylinder):
$gasCylinder['MaterialRcvdDate'] = date('d-m-Y',strtotime($gasCylinder['MaterialRcvdDate'])); $gasCylinder['MaterialRcvdDate'] = date('d-m-Y', strtotime($gasCylinder['MaterialRcvdDate']));
$gasCylinder['DeliveryChellanDate'] = date('d-m-Y',strtotime($gasCylinder['DeliveryChellanDate'])); $gasCylinder['DeliveryChellanDate'] = date('d-m-Y', strtotime($gasCylinder['DeliveryChellanDate']));
$gasCylinder['emptyCylinderDate'] = date('d-m-Y',strtotime($gasCylinder['emptyCylinderDate'])); $gasCylinder['emptyCylinderDate'] = date('d-m-Y', strtotime($gasCylinder['emptyCylinderDate']));
?> ?>
<tr> <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['grossWeight']?></td>
<td><?=$gasCylinder['emptyCylinderDate']?></td>
<td><?=$gasCylinder['tareWeight']?></td>
<td><?=$gasCylinder['netWeight']?></td>
<td><?=$gasCylinder['actualWeight']?></td>
<td><?=$gasCylinder['shortage']?></td>
<td><?=$gasCylinder['gasCylinderPendingCount']?></td>
<!-- basic details -->
<td><?= $gasCylinder['MaterialRcvdDate'] ?></td>
<td><?= $gasCylinder['IGRNO-'] ?></td>
<td><?= $gasCylinder['SupplierName'] ?></td>
<td><?= $gasCylinder['DeliveryChellanOrInvoiceNo'] ?></td>
<td><?= $gasCylinder['MaterialName'] ?></td>
<!-- least details --> <!-- cylinderdetails -->
<td><?=$gasCylinder['DeliveryChellanDate']?></td> <td><?= $gasCylinder['grossWeight'] ?></td>
<td><?=$gasCylinder['DriverName']?></td> <td><?= $gasCylinder['emptyCylinderDate'] ?></td>
<td><?=$gasCylinder['VehicleNo']?></td> <td><?= $gasCylinder['tareWeight'] ?></td>
<td><?= $gasCylinder['netWeight'] ?></td>
<td><?= $gasCylinder['actualWeight'] ?></td>
<td><?= $gasCylinder['shortage'] ?></td>
<td><?= $gasCylinder['gasCylinderCount'] ?></td>
<td><?= $gasCylinder['gasCylinderPendingCount'] ?></td>
</tr>
<?php endforeach ?>
<!-- least details -->
<?php } ?> <td><?= $gasCylinder['DeliveryChellanDate'] ?></td>
<td><?= $gasCylinder['DriverName'] ?></td>
<td><?= $gasCylinder['VehicleNo'] ?></td>
<td style="text-align: center;">
<i class="fa fa-download"
onclick="downloadExcel(this)"
title="Download" aria-hidden="true"
style="font-size:large;
cursor:pointer;
color:rgb(23, 162, 162);">
</i>
</td>
</tr>
<?php endforeach ?>
<?php } ?>
</tbody> </tbody>
</table> </table>
<div>
<div style="display: none;" id="excelTableDiv"></div>
</div>
</div> <!-- end card body--> </div> <!-- end card body-->
</div> <!-- end card --> </div> <!-- end card -->
@ -304,31 +320,41 @@
console.log("Received date string:", dateString); console.log("Received date string:", dateString);
// Split the date string into date and time components // Split the date string into date and time components
var dateTimeParts = dateString.split(' '); var dateTimeParts = dateString?.split(' ');
var dateParts = dateTimeParts[0].split('-'); var dateParts = dateTimeParts[0]?.split('-');
var timeParts = dateTimeParts[1].split(':'); var timeParts = dateTimeParts[1]?.split(':');
// Extract individual components // Extract individual components
var year = parseInt(dateParts[0], 10); var year = parseInt(dateParts[0], 10);
var month = parseInt(dateParts[1], 10) - 1; // Months are zero-based in JavaScript var month = parseInt(dateParts[1], 10) - 1; // Months are zero-based in JavaScript
var day = parseInt(dateParts[2], 10); var day = parseInt(dateParts[2], 10);
var hours = parseInt(timeParts[0], 10); var hours = 0;
var minutes = parseInt(timeParts[1], 10); var minutes = 0;
var seconds = parseInt(timeParts[2], 10); var seconds = 0;
if(timeParts){
// Extract time components
hours = parseInt(timeParts[0], 10);
minutes = parseInt(timeParts[1], 10);
seconds = parseInt(timeParts[2], 10);
}
// Create a new Date object // Create a new Date object
var date = new Date(year, month, day, hours, minutes, seconds); var date = new Date(year, month, day, hours, minutes, seconds);
// Extract date components // Extract date components
var day = date.getDate().toString().padStart(2, '0'); day = date.getDate().toString().padStart(2, '0');
var month = (date.getMonth() + 1).toString().padStart(2, '0'); // Months are zero-based month = (date.getMonth() + 1).toString().padStart(2, '0'); // Months are zero-based
var year = date.getFullYear(); year = date.getFullYear();
// Extract time components // Extract time components
var hours = date.getHours().toString().padStart(2, '0'); hours = date.getHours().toString().padStart(2, '0');
var minutes = date.getMinutes().toString().padStart(2, '0'); minutes = date.getMinutes().toString().padStart(2, '0');
var seconds = date.getSeconds().toString().padStart(2, '0'); seconds = date.getSeconds().toString().padStart(2, '0');
var formattedDate = ''; var formattedDate = '';
// Format the date and time in DD-MM-YYYY HH:MM:SS format // Format the date and time in DD-MM-YYYY HH:MM:SS format
if (flag == 1) { if (flag == 1) {
@ -355,9 +381,8 @@
<!-- data table related initialization --> <!-- data table related initialization -->
<script> <script>
$(document).ready(function() { $(document).ready(function() {
// this code for table date filed ordering // this code for table date filed ordering
$.fn.dataTable.ext.type.order['date-dd-mm-yyyy-pre'] = function(date) { $.fn.dataTable.ext.type.order['date-dd-mm-yyyy-pre'] = function(date) {
if (!date) return 0; if (!date) return 0;
@ -367,27 +392,29 @@
var orderColumnIndex = <?php echo (session()->get('roleText') == 'Auditor') ? 6 : 0; ?>; var orderColumnIndex = <?php echo (session()->get('roleText') == 'Auditor') ? 6 : 0; ?>;
table = $('#view_inward_gate_register').DataTable({ table = $('#view_inward_gate_register').DataTable({
dom: 'Blfrtip', dom: 'Blfrtip',
buttons: [ buttons: [{
{ extend: 'excel',
extend: 'excel', text: 'Excel',
text: 'Excel', exportOptions: {
exportOptions: { columns: ':not(:last-child)' // Exclude the last column
columns: ':not(:last-child)' // Exclude the last column
}
} }
], }],
pageLength: 10, pageLength: 10,
lengthMenu: [ lengthMenu: [
[10, 20, 30, 50, -1], [10, 20, 30, 50, -1],
[10, 20, 30, 50, "All"] [10, 20, 30, 50, "All"]
],
responsive: false,
ordering: true,
columnDefs: [
{ targets: parseInt(orderColumnIndex), type: 'date-dd-mm-yyyy' } // Apply custom sorting
], ],
order: [[parseInt(orderColumnIndex), 'desc']], responsive: false,
ordering: true,
columnDefs: [{
targets: parseInt(orderColumnIndex),
type: 'date-dd-mm-yyyy'
} // Apply custom sorting
],
order: [
[parseInt(orderColumnIndex), 'desc']
],
language: { language: {
paginate: { paginate: {
next: '<i class="fas fa-angle-right"></i>', // Next button icon next: '<i class="fas fa-angle-right"></i>', // Next button icon
@ -400,7 +427,7 @@
$("#resetButton").click(function() { $("#resetButton").click(function() {
$("#fromDate").val(''); $("#fromDate").val('');
$("#toDate").val(''); $("#toDate").val('');
window.location="gasCylinderReturned" 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
@ -422,198 +449,192 @@
<!-- data table related date filter --> <!-- data table related date filter -->
<script> <script>
$(document).ready(function() { $(document).ready(function() {
$('#fromDate , #toDate').change(function() { $('#fromDate , #toDate').change(function() {
let fromDate = $('#fromDate').val();
let toDate = $('#toDate').val();
let fromDateObj = new Date(fromDate.split('-').reverse().join('-')); let fromDate = $('#fromDate').val();
let toDateObj = new Date(toDate.split('-').reverse().join('-')); let toDate = $('#toDate').val();
if (fromDateObj > toDateObj) {
alert('Incorrect Date Applied For Filter..!!');
$('#toDate').attr('min', fromDate);
$('#toDate').val('');
}
});
});
let fromDateObj = new Date(fromDate.split('-').reverse().join('-'));
</script> let toDateObj = new Date(toDate.split('-').reverse().join('-'));
if (fromDateObj > toDateObj) {
alert('Incorrect Date Applied For Filter..!!');
$('#toDate').attr('min', fromDate);
$('#toDate').val('');
}
<!-- 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 -->
<script>
$(document).ready(function(){
$('#gasEnteredDetails').on("hide.bs.modal", function(e){
$('#fullCylinderDate').val(" ");
$('#IGRNO').val(" ");
$('#supplierName').val(" ");
$('#invoiceNo').val(" ");
$('#billDate').val(" ");
$('#driverName').val(" ");
$('#vehicleNo').val(" ");
$('#cylinderName').val(" ");
$('#cylinderCount').val(" ");
$('#cylinderDiv').html("");
}); });
}); });
</script> </script>
<!-- end of add gas shortage calculator -->
<!-- ajax call for gas Shortage -->
<script> <script>
function downloadExcel(clickedElement) {
$(document).ready(function () { var row = $(clickedElement).closest("tr");
$("#gasEnteredDetails form").submit(function (event) { var igrNo = row.find("td:eq(1)").text().trim();
event.preventDefault(); // Prevent form reload var cylinderPendingCount = row.find("td:eq(12)").text().trim();
let method = $("#gasEnteredDetails").data("form"); // Get form type cylinderPendingCount = parseInt(cylinderPendingCount, 10);
// Collecting form data if (cylinderPendingCount > 0) {
let formData = { alert("Please clear the " + cylinderPendingCount + " pending cylinders before downloading the Excel file.");
fullCylinderDate: $("#fullCylinderDate").val(), return false;
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
};
// Loop through dynamically generated cylinder inputs
$("#cylinderDiv .form-group.row.dynamicField").each(function () {
let cylinderData = {
cylinderNo : $(this).find("input[name='cylinderNumber[]']").val(),
grossWeight : $(this).find("input[name='grossWeight[]']").val(),
actualWeight: $(this).find("input[name='actualWeight[]']").val(),
};
formData.cylinders.push(cylinderData);
});
console.log(formData); // Debugging - Check if data is correct
$('#loader').show(); // Show loader
$.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>
$("#loader").show();
$.ajax({
type: "POST",
url: "<?php echo base_url() ?>gasCylindersByIgr",
data: {
IGRNO: igrNo
},
success: function(response) {
$("#loader").hide();
if (response.status === "success") {
console.log(response.data); // Debugging - Check if data is correct
let tableHTML = `
<table border="1" id="excelTable" >
<thead>
<tr>
<th>IGRNO</th>
<th>Full Cylinder Date</th>
<th>Cylinder No</th>
<th>Gross Weight</th>
<th>Empty Cylinder Return Date</th>
<th>Tare Weight</th>
<th>Net Weight</th>
<th>Actual Weight</th>
<th>Shortage</th>
<th>Bill No</th>
<th>Bill Date</th>
<th>Driver Name</th>
<th>Vehicle No</th>
</tr>
</thead>
<tbody>
`;
let totalShortage = 0;
let totalNetWeight = 0;
let totalActualWeight = 0;
response.data.forEach(item => {
totalShortage += Number(item.shortage);
totalNetWeight += Number(item.netWeight);
totalActualWeight += Number(item.actualWeight);
item.fullCylinderDate = formatDateTime(item.fullCylinderDate, 1);
item.emptyCylinderDate = formatDateTime(item.emptyCylinderDate, 1);
item.DeliveryChellanDate = formatDateTime(item.DeliveryChellanDate, 1);
tableHTML += `
<tr>
<td>${item.IGRNO}</td>
<td>${item.fullCylinderDate}</td>
<td>${item.cylinderNo}</td>
<td>${item.grossWeight}</td>
<td>${item.emptyCylinderDate}</td>
<td>${item.tareWeight}</td>
<td>${item.netWeight}</td>
<td>${item.actualWeight}</td>
<td>${item.shortage}</td>
<td>${item.invoiceNo}</td>
<td>${item.DeliveryChellanDate}</td>
<td>${item.DriverName}</td>
<td>${item.VehicleNo}</td>
</tr>
`;
});
tableHTML += `
</tbody>
<tfoot>
<tr class="empty-row">
<td colspan="13">&nbsp;</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td> Weight</td>
<td>${totalNetWeight}</td>
<td>${totalActualWeight}</td>
<td>${totalShortage}</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tfoot>
</table>
`;
$("#excelTableDiv").html(tableHTML);
let table = document.getElementById('excelTable');
let filename = "GasCylinderReturned_" + igrNo + ".xlsx";
let rows = [];
// Extract table data row-by-row
$(table).find('tr').each(function(rowIndex) {
let rowData = [];
$(this).find('th, td').each(function(colIndex) {
// Skip hidden columns
if ($(this).css('display') === 'none') return;
let cellText = $(this).text().trim();
rowData.push(cellText);
});
// Add the cleaned row only if it has data
if (rowData.length > 0) {
rows.push(rowData);
}
});
// Create a worksheet from array (no DOM needed!)
let ws = XLSX.utils.aoa_to_sheet(rows);
// Define column widths (in character units)
const columnWidth = 15; // Set your desired width here
const wscols = [];
for (let i = 0; i < Object.keys(response.data[0]).length; i++) {
wscols.push({
wch: columnWidth
});
}
ws['!cols'] = wscols;
let wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
XLSX.writeFile(wb, filename || 'export.xlsx');
}
},
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(); // Hide loader
}
});
}
</script>