minor issues and alignment changes and igr number new series

This commit is contained in:
VE10-Sanjeev 2025-04-03 04:14:27 +00:00
parent 957616db54
commit fff8d5ed6c
13 changed files with 341 additions and 115 deletions

View File

@ -200,6 +200,7 @@ $routes->post('monthlypay/deletePublicHoliday', 'Monthlypay::deletePublicHoliday
$routes->get('leaveApplicationForm', 'Monthlypay::leaveApplicationForm');
$routes->post('fetchLeaveApplicationForm', 'Monthlypay::fetchLeaveApplicationForm');
$routes->get('deleteLeaveApplicationForm', 'Monthlypay::deleteLeaveApplicationForm');
$routes->post('validateDateRange', 'Monthlypay::validateDateRange');
$routes->match(['GET', 'POST'], 'leaveApplicationPDF/(:any)', 'Monthlypay::leaveApplicationPDF/$1');
$routes->match(['GET', 'POST'], 'overTimeDetails', 'Monthlypay::overTimeDetails');

View File

@ -617,12 +617,14 @@ class Emergencypurchaseorder extends BaseController
$igr = array();
$paymentstatus = NO_PAIDIGR;
$igr = array('PONO' => $PONO, 'VehicleNo' => $Vehicle, 'DeliveryChellanOrInvoiceNo' => $DeliveryChellanInvoiceNo, 'DeliveryChellanDate' => $DeliveryChellanDate, 'MaterialRcvdDate' => $DeliveryChellanDate, 'CourierNo' => $Courier, 'IGRStatus' => $IGRStatus, 'CreatedBy' => $CreatedBy, 'CreatedDate' => $createddt, 'MaterialRcvdDate' => $MaterialReceivedate, 'Paymentstatus' => $paymentstatus);
$last_igrno = $this->inwardgateregister_model->lastIGRNO();
$newIGRNO = generate_igr_number($last_igrno);
$igr = array('IGRNO'=>$newIGRNO,'PONO' => $PONO, 'VehicleNo' => $Vehicle, 'DeliveryChellanOrInvoiceNo' => $DeliveryChellanInvoiceNo, 'DeliveryChellanDate' => $DeliveryChellanDate, 'MaterialRcvdDate' => $DeliveryChellanDate, 'CourierNo' => $Courier, 'IGRStatus' => $IGRStatus, 'CreatedBy' => $CreatedBy, 'CreatedDate' => $createddt, 'MaterialRcvdDate' => $MaterialReceivedate, 'Paymentstatus' => $paymentstatus);
//print_r($igr);
$igrM = $this->inwardgateregister_model->addigrM($igr);
$IGRNO = !empty($igrM) ? $igrM : '';
$IGRNO = $newIGRNO;
if ($Qualitycheck == 0) {

View File

@ -447,7 +447,11 @@ class Inwardgateregister extends BaseController
}
}
#Step 3 Master Details Gathering to Save In DB
$igr = array('PONO' => $PONO, 'VehicleNo' => $VehicleNo, 'TransporterId'=>$TransporterId,'DeliveryChellanOrInvoiceNo' => $DeliveryChellanOrInvoiceNo, 'DeliveryChellanDate' => $DeliveryChellanDate, 'MaterialRcvdDate' => $MaterialRcvdDt, 'DriverName' => $DriverName, 'DriverMobileNumber' => $DriverMobileNumber,'IGRStatus' => $IGRStatus, 'CreatedBy' => $CreatedBy, 'CreatedDate' => $createddt, 'PaymentStatus' => $paymentstatus, 'Remark'=>$MasterRemarks);
$last_igrno = $this->inwardgateregister_model->lastIGRNO();
// echo $last_igrno;
$newIGRNO = generate_igr_number($last_igrno);
// echo $newIGRNO;die;
$igr = array('IGRNO'=>$newIGRNO,'PONO' => $PONO, 'VehicleNo' => $VehicleNo, 'TransporterId'=>$TransporterId,'DeliveryChellanOrInvoiceNo' => $DeliveryChellanOrInvoiceNo, 'DeliveryChellanDate' => $DeliveryChellanDate, 'MaterialRcvdDate' => $MaterialRcvdDt, 'DriverName' => $DriverName, 'DriverMobileNumber' => $DriverMobileNumber,'IGRStatus' => $IGRStatus, 'CreatedBy' => $CreatedBy, 'CreatedDate' => $createddt, 'PaymentStatus' => $paymentstatus, 'Remark'=>$MasterRemarks);
$igr['MasterFile'] = $requestMasterFileName;
#Step 4 Calling DB to Save IGR Master
$IGRNO = $this->inwardgateregister_model->addigrM($igr);
@ -987,14 +991,14 @@ function viewIGRDetails()
$to_email_addr = "";
for ($i = 0; $i < count($result_for_email['to_mails']); $i++) {
$to_email_addr .= $result_for_email['to_mails'][$i]->email . " , ";
// $to_email_addr .= "sanjeev.p@venbainfotech.com,gowtham.m@venbainfotech.com";
// $to_email_addr .= $result_for_email['to_mails'][$i]->email . " , ";
}
$to_email_addr .= "sanjeev.p@venbainfotech.com,gowtham.m@venbainfotech.com";
$to_email_addr = rtrim($to_email_addr, " ,");
$email_response = $notification->sendEmail([
'recipient_email' => $to_email_addr,
'subject' => $result_for_email['company'].' - IGR Notification',
// 'carboncopy'=>Sales@resicoindustries.com,Factory@resicoindustries.com,Invoice@resicoindustries.com,
'carboncopy' =>"pavithra.t@venbainfotech.com",
// 'description' => 'IGR Number : '.$IGRNo.' is Edited By '.($result_for_email['full_name'] ?? $this->session->get('name'))." On ".date('d-m-Y H:i A', strtotime(get_current_date_time() . ' +30 seconds')). $history_content,
'description' => $result_for_history['first_line']."<br>" .$history_content,
'company' => $result_for_email['company'],
@ -1430,9 +1434,9 @@ function updateIGRWeight(){
$to_email_addr = '';
for ($i = 0; $i < count($result_for_email['to_mails']); $i++) {
$to_email_addr .= $result_for_email['to_mails'][$i]->email . " , ";
// $to_email_addr .= $result_for_email['to_mails'][$i]->email . " , ";
}
// $to_email_addr = " gowtham.m@venbainfotech.com , sanjeev.p@venbainfotech.com";
$to_email_addr = " venbalap08@gmail.com , sanjeev.p@venbainfotech.com";
$to_email_addr = rtrim($to_email_addr, " ,");
$content = 'A new remark was created by '.$result_for_email['full_name'].' against IGR no '.$IGRNo.',</br></br> "'.$remark.'"';
@ -1441,6 +1445,7 @@ function updateIGRWeight(){
$notification->sendEmail([
'recipient_email' => $to_email_addr,
'subject' => $result_for_email['company'].' - IGR Remark Raised',
'carboncopy' =>"pavithra.t@venbainfotech.com",
'description' => $content,
'company' => $result_for_email['company'],
'from_mail'=> $result_for_email['from_mails']

View File

@ -101,7 +101,7 @@ class Monthlypay extends BaseController
function attendanceLoad()
{
$month['month'] = '';
$monthdays = 0;
$begin = 0;
@ -111,7 +111,7 @@ class Monthlypay extends BaseController
$current = $this->request->getPost('month');
$month_short_name = substr((string)$current, 0, 3);
$year = substr((string)$current, 4);
$year = substr((string)$current, 4);// also used
$month_arr = date_parse($month_short_name);
$month = $month_arr['month'];
$current = $year . "-" . $month . '-01';
@ -151,7 +151,44 @@ class Monthlypay extends BaseController
$data['datefordropdown'] = $current;
$data['attendance'] = $this->monthlypay_model->monthlyAttendance($current);
$data['emppay'] = $this->monthlypay_model->getEmpPayDetails($current, $string);
// dd($data);
$leavedate = $this->monthlypay_model->employeeLeaveDates($month . "-" . $year);
$employeeLeaveDate = [];
if(!empty($leavedate)){
foreach ($leavedate as $entry) {
$empId = $entry['emp_id'];
list($stYear,$stMonth,$stDate) = explode('-', $entry['start_date']);
list($eYear,$eMonth,$eDate) = explode('-', $entry['end_date']);
$start = (int)$stDate;
$end = (int)$eDate;
if ((int)$stYear < (int)$year || ((int)$stYear == (int)$year && (int)$stMonth < (int)$month)) {
$start = 1;
}
// if ((int)$stMonth < (int)$month) $start = 1; // old if
if ((int)$eYear > (int)$year || ((int)$eYear == (int)$year && (int)$eMonth > (int)$month)) {
$end = $monthdays;
}
// if ((int)$eMonth > (int)$month) $end = $monthdays; // old if
if ($start > $monthdays) $start = 1;
for ($i = $start; $i <= $end; $i++) {
$employeeLeaveDate[$empId][] = $i;
// $employeeLeaveDate[$empId][] = str_pad($i, 2, '0', STR_PAD_LEFT);
}
}
if($employeeLeaveDate){
array_walk($employeeLeaveDate, fn(&$dates) => $dates = array_unique($dates));
}
}
$data['employeeleavedate'] = $employeeLeaveDate;
// dd($data['employeeleavedate']);
$this->global['pageTitle'] = 'Monthly Attendance';
$this->loadViews("attendance", $this->global, $data, NULL);
}
@ -971,7 +1008,21 @@ class Monthlypay extends BaseController
return $this->response->setJSON($data);
}
public function validateDateRange(){
$emp_id = $this->request->getPost('emp_id');
$start_date = $this->request->getPost('start_date');
$end_date = $this->request->getPost('end_date');
$array = $this->monthlypay_model->validateDateRange($emp_id,$start_date,$end_date);
if (!empty($array) && count($array) > 0) {
$data = ['status' => true, 'message' => 'The selected date range overlaps with an existing approved leave.','details'=>$array];
}else{
$data = ['status' => false, 'message' => '','details'=>$array];
}
return $this->response->setJSON($data);
}
function deleteLeaveApplicationForm()
{
$leave_application_id = $this->request->getGet('leave_application_id') ? $this->request->getGet('leave_application_id') : '';

View File

@ -178,6 +178,8 @@ class Payslip extends BaseController
$data['fresh'] = $this->monthlypay_model->getEmpPayDetailsforMonthInputs($current);
// dd($data['fresh']);
$data['drivermonthinputs'] = $this->driverMonthlyPayInputs($current);
// $leavedate = $this->monthlypay_model->employeeLeaveDates($current);
$employeeSalary = [];
$esi = [];
$pf = [];
@ -302,8 +304,7 @@ class Payslip extends BaseController
$data['esi'] = $esi;
$data['pf'] = $pf;
$data['over_time'] = $ot;
$this->global['pageTitle'] = 'Payroll Monthly Inputs';
$this->loadViews("monthlypayinputs", $this->global, $data, NULL);
}

View File

@ -2597,7 +2597,7 @@ class Purchaseorder extends BaseController
} else {
$store = array('Status' => $StatusCode, 'OnHoldOn' => $ApprovedDate, 'OnHoldBy' => $ApprovedBy, 'Remarks' => $Remarks);
$this->purchaseorder_model->UpdatePO($store, $PONO);
echo "The Purchase Order No: " . $PONO . "is On Hold";
echo "The Purchase Order No: " . $PONO . " is On Hold";
}
}

View File

@ -27,6 +27,48 @@ if (!function_exists('generate_po_number')) {
}
}
if (!function_exists('generate_igr_number')) {
function generate_igr_number($last_igrno)
{
$shortenFinYear = get_shorten_financial_year();
if (preg_match('/^\w+\/\d+-\d+\/\d+$/', $last_igrno)) {
// echo $last_igrno;
$type = 1; // IGRNO/25-26/00001 // 2025 april onwards karthick asked to changed this type.
} elseif (preg_match('/^\w+-\d+$/', $last_igrno)) {
// echo $last_igrno;
$type = 2; // IGRNO-00001 // karthick asked to checked this type 2023- 2025 april
} else {
// echo $last_igrno;
$type = 3; // IGRNO00001 // very first time we followed this type
}
if ($type == 1) {
$result = explode('/', $last_igrno);
$requestedFinYear = $result[1];
$leftPad = "IGR";
$digit = 5;
if($requestedFinYear == $shortenFinYear){ // here i am comparing the shoren fin year
$number = ((int)$result[2])+1;
$IgrNo = $leftPad . '/' . $shortenFinYear . '/' . str_pad($number, $digit, '0', STR_PAD_LEFT);
}else{
// here not same means ressetted type 1 format
$counter = 1;
$IgrNo = $leftPad . '/' . $shortenFinYear . '/' . str_pad($counter, $digit, '0', STR_PAD_LEFT);
}
return $IgrNo;
}else{
// type 2 and type 3 is converted into type 1 format
$leftPad = "IGR";
$digit = 5;
$counter = 1;
$IgrNo = $leftPad . '/' . $shortenFinYear . '/' . str_pad($counter, $digit, '0', STR_PAD_LEFT);
return $IgrNo;
}
}
}
function generate_amendment_po_number($PoNo, $increment = 1) {
if (strpos($PoNo, '.') !== false) {
list($base, $decimal) = explode('.', $PoNo);

View File

@ -221,7 +221,9 @@ class Inwardgateregister_model extends Model
}
public function igr_history($hsty_arr) {
$keysToRemove = ["UpdateBY", "MaterialRcvdDate", "DeliveryChellanDate"];
$keysToRemove = ["UpdateBY","UpdateBy", "MaterialRcvdDate", "DeliveryChellanDate"];
foreach ($keysToRemove as $key) {
if (isset($hsty_arr[$key])) {
unset($hsty_arr[$key]);
@ -230,8 +232,7 @@ class Inwardgateregister_model extends Model
$builder = $this->db->table('t_igr_history');
$builder->insert($hsty_arr);
return $this->db->insertID(); // Return last inserted ID
return $this->db->insertID();
}
function get_igr_history($col,$IGR,$IGRITEM = null)
@ -273,6 +274,13 @@ class Inwardgateregister_model extends Model
return $result; // Return the field value directly
}
function lastIGRNO()
{
$query = $this->db->table('t_igr_master')->select('IGRNO')->orderBy('IGRID', 'DESC')->limit(1)->get();
$lastIGRNO = $query->getRow()->IGRNO;
return $lastIGRNO;
}
function addigrM($igrM)
{
// print_r($igrM);die;

View File

@ -571,6 +571,26 @@ where Month_Year = ? and att.EmpID in (select EmpID from t_attendance)";
return $this->db->affectedRows();
}
}
public function validateDateRange($emp_id,$start_date,$end_date){
$array = $this->db->table('t_employee_leave_application_form')
->where('emp_id', $emp_id)
->where('status', 'Approved')
->groupStart() // Start grouping OR conditions
->where("'$start_date' BETWEEN start_date AND end_date", null, false)
->orWhere("'$end_date' BETWEEN start_date AND end_date", null, false)
->orWhere("start_date BETWEEN '$start_date' AND '$end_date'", null, false)
->orWhere("end_date BETWEEN '$start_date' AND '$end_date'", null, false)
->groupEnd() // End grouping
->get()
->getRowArray();
// $last_query = $this->db->getLastQuery();
// echo $last_query;
return $array;
}
function getEmpPayDetailsforOTListing($current = "")
{
@ -617,5 +637,25 @@ where Month_Year = ? and att.EmpID in (select EmpID from t_attendance)";
return $query->getResult();
}
function employeeLeaveDates($current){
$current =get_date_time_dynamical_format('m-Y','Y-m',"$current");
$array = $this->db->table('t_employee_leave_application_form')
->select("emp_id,start_date,end_date,status")
->where('status', 'Approved')
->groupStart() // Start grouping OR conditions
->where("DATE_FORMAT(start_date, '%Y-%m') = '$current'", null, false)
->orWhere("DATE_FORMAT(end_date, '%Y-%m') = '$current'", null, false)
->orWhere("DATE_FORMAT(start_date, '%Y-%m') <= '$current' AND DATE_FORMAT(end_date, '%Y-%m') >= '$current'", null, false)
->groupEnd() // End grouping
->get()
->getResultArray();
// $last_query = $this->db->getLastQuery();
// echo $last_query;
return $array;
// return [$current];
}
}

View File

@ -1504,34 +1504,37 @@ if (!empty($getlogpodtl)) {
<div class="form-row ">
<div class="form-group col-md-12" id="splpodiv">
<label>Special po Table List</label>
<table id="table2" class="table table-striped table-hover mb-0" style="font-size:12px;">
<div class="form-group col-md-12">
<div class="col-md-offset-10 col-md-8">
<button type="button" class="btn btn-success" id="addmorebutton">ADD FILES</button>
<div class="form-row">
<div class="col-md-5 text-left">
<label class="mt-2">Special po Table List</label>
</div>
<div class="col-md-7 text-right">
<button type="button" class="btn btn-success btn-sm" id="addmorebutton">ADD FILES</button>
</div>
</div>
<div class="col-md-12" style="text-align:right">
<div id="newdiv"></div>
<input type="hidden" name="hidecounter" id="hidecounter" value="0" />
<input type="hidden" name="hideconstant" id="hideconstant" value="0" />
</div>
</div>
<table id="table2" class="table table-striped table-hover mb-0" style="font-size: 12px;border-collapse: collapse;margin: auto;width: 60%;">
<thead>
<tr>
<th>Bill No </th>
<!-- <th>Materials</th> -->
<!-- <th>Delivery Challan No</th> -->
<!-- <th>Delivery Challan Date</th>
<th>Vehicle No</th>
<th>Courier No</th> -->
<!-- <th>Delivery Challan Date</th> -->
<!-- <th>Vehicle No</th> -->
<!-- <th>Courier No</th> -->
<!-- <th>Quantity</th> -->
<th>File</th>
<th>Action</th>
</tr>
</thead>
@ -1547,7 +1550,9 @@ if (!empty($getlogpodtl)) {
<input type="hidden" id="billnos<?= $row ?>" value="<?= $gd->BillNo ?>">
<input type="hidden" id="file<?= $row ?>" value="<?= $gd->FilePath ?>">
<td><?php echo (!empty($gd->FilePath)) ? $gd->FilePath : "No File"; ?></td>
<td><span onclick="openmodel(<?= $row ?>);"><i class="ri-pencil-fill" data-toggle="tooltip" title="Click here to Edit the Revenue SplPO details"></i></span>
<td><a href="javascript:void(0);" onclick="openmodel(<?= $row ?>);" data-toggle="tooltip" title="Click here to Edit the Special PO details">
<i class="ri-pencil-fill"></i>
</a>&nbsp;&nbsp;&nbsp;
<?php if (!empty($gd->FilePath)) { ?>
<a target="_blank" href="<?php echo base_url() . 'public/uploads/BillFiles/' ?><?php echo $gd->FilePath ?>"><i class="fa fa-download"></i></a>
<?php } ?>
@ -1561,6 +1566,7 @@ if (!empty($getlogpodtl)) {
</table>
</div>
<!-- update if condition here -->
<?php if (!empty($update)) { ?>
<!-- <div class="form-group col-md-12" id="editpodiv">
<div class="form-group col-md-12"><label>Editable POScreen</label>
@ -1592,7 +1598,6 @@ if (!empty($getlogpodtl)) {
$inde = $inde + 1;
?>
<tr id="<?php echo $inde; ?>">
<td><?php echo $inde; ?></td>
<td><?php echo $oldpo->PONO ?></td>
@ -1633,8 +1638,9 @@ if (!empty($getlogpodtl)) {
</tbody>
</table>
</div>
</div>--> <?php } else {} ?>
<!-- ends here -->
</div>-->
<?php } else {} ?>
<!-- ends here -->
<!-- f i l e c h o o s e n -->
<div class="col-md-12">
@ -1715,10 +1721,9 @@ if (!empty($getlogpodtl)) {
</div>
<!--/. f o o t e r b u t t o n -->
</div>
</div> <!-- end card body-->
</div> <!-- end card -->
</div><!-- end col-->
</div><!-- end col @945-->
</div><!-- end form row -->
</div> <!-- end container-fluid -->
</div> <!-- end content -->
@ -1969,26 +1974,25 @@ if (!empty($getlogpodtl)) {
<!-- Service Special PO Modal Starts Here -->
<div id="EditServiceSplPOModel" class="modal fade" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-full-width">
<div class="modal-dialog"><!-- class="modal-dialog modal-full-width" -->
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Update Bill <span id="bill"><span> Details</h4>
<h4 class="modal-title" id="bill-title">Update Bill</h4>
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button>
</div>
<form class="tagForm" id="tag-form" method="post" enctype="multipart/form-data">
<div class="modal-body p-4">
<div class="form-group col-md-12">
<div class="form-group col-md-5">
<label for="oldimagename">Old file Name :<div class="oldimage"></div></label>
<input type="file" size="20" input accept=".docx,.pdf,.doc.JPG,.PNG,.jpg" id="imag" name="images" onChange="filecheck();" />
<label for="images">Select file <br /><small>(only .pdf,.excel,.doc,.png,.jpg)</small></label>
</div>
<div class="modal-body">
<div class="col-md-12">
<span><label for="images">Select file </label><small>&nbsp;&nbsp;(only .pdf,.excel,.doc,.png,.jpg)</small></span><br>
<input type="file" size="20" input accept=".docx,.pdf,.doc.JPG,.PNG,.jpg" id="imag" name="images" onChange="filecheck();" />
<label class="oldimage mt-2"></label>
</div>
<input type="hidden" name="hideoldfile" id="hideoldfile" class="form-control" readonly>
<input type="hidden" name="hidebillno" id="hidebillno" class="form-control" readonly>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary waves-effect"
data-dismiss="modal" value="Cancel" onclick="SetExciseCalculationCancel();">Cancel</button>
@ -2731,10 +2735,11 @@ if (!empty($getlogpodtl)) {
var Billno = $("#billnos" + i).val();
//alert(Billno);
$("#EditServiceSplPOModel").modal("show");
$(".oldimage").text(file);
$(".oldimage").text("Previous Upload - "+file);
$("#hideoldfile").val(file);
$("#hidebillno").val(Billno);
$("#bill").text(Billno);
$("#bill-title").text("Update Bill Number - "+Billno);
}
$('.EditService').click(function() {
tinyMCE.triggerSave();
@ -3817,8 +3822,8 @@ if (!empty($getlogpodtl)) {
'<div class="form-group col">' +
'<label><br></label>' +
'<input type="file" name="browseFiles" id="images' + counter + '" onchange="Copyfilename(this.name); "><br>' +
'<button class="btn btn-success btn-sm add add_this" id="addbtn" onclick="addRow()">ADD</button>'
'<input type="file" name="browseFiles" id="images' + counter + '" onchange="Copyfilename(this.name); ">' +
'<button class="btn btn-success btn-sm add add_this ml-1" id="addbtn" onclick="addRow()">ADD</button>'
'</div>' +
'</div>' +

View File

@ -1,14 +1,11 @@
<
<?php
$datefordropdown = format_date($datefordropdown, 0, 'M-Y');
//echo $datefordropdown;
$attendance = array_merge($attendance, $emppay);
date_default_timezone_set('Asia/Kolkata');
$currentday = date('d');
// print_r($attendance);
// print_r($employeeleavedate);
// dd($attendance);die;
// echo "<br>------------------------------<br>";
?>
@ -327,6 +324,7 @@ $currentday = date('d');
}
}
?>
@ -377,6 +375,7 @@ $currentday = date('d');
</tr>
</thead>
<tbody style="background-color: #fff;">
<?php $index = 0;
@ -396,6 +395,7 @@ $currentday = date('d');
<?php for ($col = 1; $col <= $monthdays; $col++) {
$flag = 0;
$flag2 = 0;
$absent = 0;
if ($col == $currentday) {
$todayflag = 1;
@ -423,9 +423,26 @@ $currentday = date('d');
$WH = 'WH' . $col;
$OT = 'OT' . $col;
foreach ($employeeleavedate as $eid => $absentdate){
if($a->EmpID == $eid){
foreach ($absentdate as $particulardate){
// echo " $eid particulardate = ".$particulardate ." col = ".$col;
if($col === $particulardate){
$absent = 1;
// echo "1) empid = $a->EmpID, date = $col, absent = $absent";
}// else $absent = 0;
}
}
}
// echo "<pre>"."empid = $a->EmpID, date = $col, absent = $absent"."</pre>";
// echo "<pre>"."2) all Flags : flag2 = $flag2, flag = $flag2, absent = $absent"."</pre>";
?>
<td <?php if ($flag2 == 1) { ?> title=" <?php echo $title; ?> "
<?php } else if ($flag == 1) { ?> title="sunday" <?php } ?>
<?php if ($absent == 1) { ?> title="absent" <?php } ?>
class="celda_normal"
onkeyup="myFunction(this.parentNode.id,this.id,this.textContent);"
id="<?php echo $row . 'row' . $col . 'W'; ?>"
@ -434,7 +451,12 @@ $currentday = date('d');
} else if ($todayflag == 1) {
echo "style='background: #cef0ad ;'";
} ?>
contenteditable="true" tabindex="<?php echo $col; ?>">
<?php if ($absent == 1) {
echo "contenteditable='false'";
} else if ($absent == 0) {
echo "contenteditable='true'";
} ?>
tabindex="<?php echo $col; ?>">
<?php if (!empty($a->$WH)) {
echo $a->$WH;
} else {
@ -442,6 +464,7 @@ $currentday = date('d');
} ?></td>
<td <?php if ($flag2 == 1) { ?> title=" <?php echo $title; ?> "
<?php } else if ($flag == 1) { ?> title="sunday" <?php } ?>
<?php if ($absent == 1) { ?> title="absent" <?php } ?>
class="celda_normal"
onkeyup="myFunction(this.parentNode.id,this.id,this.textContent);"
id="<?php echo $row . 'row' . $col . 'OT'; ?>"
@ -450,7 +473,12 @@ $currentday = date('d');
} else if ($todayflag == 1) {
echo "style='background: #cef0ad ;'";
} ?>
contenteditable="true" tabindex="<?php echo $col; ?>">
<?php if ($absent == 1) {
echo "contenteditable='false'";
} else if ($absent == 0) {
echo "contenteditable='true'";
} ?>
tabindex="<?php echo $col; ?>">
<?php if (!empty($a->$OT)) {
echo $a->$OT;
} else {

View File

@ -2720,8 +2720,8 @@ if (!empty($getlogpodtl)) {
style="background-color:#fff;font-size:12px;">
<thead style="background-color: #ddd;">
<tr>
<!-- <th>Bill No </th> -->
<!-- <th>Materials</th> -->
<!-- <th>Bill No </th> -->
<!-- <th>Materials</th> -->
<th>Delivery Challan No</th>
<th>Delivery Challan Date</th>
<th>MaterialReceived Date </th>
@ -2764,9 +2764,10 @@ if (!empty($getlogpodtl)) {
<input type="hidden" id="MaterialRcvdDate<?= $row ?>"
value="<?= $gd->MaterialRcvdDate ?>">
<td style="cursor:pointer;"><span onclick="openmodel(<?= $row ?>);"><i
class="ri-pencil-fill"></i></span>
<td style="cursor:pointer;">
<a href="javascript:void(0);" onclick="openmodel(<?= $row ?>);" data-toggle="tooltip" title="Click here to Edit the Special PO details">
<i class="ri-pencil-fill"></i>
</a>&nbsp;&nbsp;&nbsp;
</td>
</tr>
<?php
@ -2801,7 +2802,6 @@ if (!empty($getlogpodtl)) {
<thead>
<tr>
<th>Bill No </th>
<th>File</th>
<th>Action</th>
</tr>

View File

@ -212,7 +212,7 @@
</div>
<div class="col-md-3">
<label class="form" for="no_of_days">No Of Days </label>
<input type="text" class="form-control" id="no_of_days" name="no_of_days">
<input type="text" class="form-control" id="no_of_days" name="no_of_days" readonly>
</div>
</div><!--/. r o w 5 -->
<div class="row mt-2">
@ -261,58 +261,64 @@
$(document).ready(function () {
$(".searchabledropdown").select2();
let today = new Date().toISOString().split("T")[0]; // Format: YYYY-MM-DD
$("#start_date").attr("min", today);
$("#start_date").attr("min", today);
$("#end_date").attr("min", today);
$('#start_date, #end_date').change(function() {
const start = new Date($('#start_date').val());
const end = new Date($('#end_date').val());
if (!isNaN(start.getTime())) {
$('#end_date').val("");
let minDate = start.toISOString().split("T")[0]; // Convert Date to YYYY-MM-DD format
$("#end_date").attr("min", minDate); // Set min attribute for end_date
}
$('#start_date').change(function() {
let start = new Date($('#start_date').val());
let formattedStart = start.toISOString().split('T')[0]; // Convert to YYYY-MM-DD format
// Reset the end_date input and set its min attribute
$('#end_date').val('').attr('min', formattedStart);
});
$('#start_date, #end_date').change(function() {
let start = new Date($('#start_date').val());
let end = new Date($('#end_date').val());
let formattedStart = start.toISOString().split('T')[0]; // Convert to YYYY-MM-DD format
$("#end_date").attr("min", formattedStart);
if (!isNaN(start) && !isNaN(end)) {
const days = Math.floor((end - start) / 86400000) + 1;
$('#no_of_days').val(days > 0 ? days : 1);
} else {
$('#no_of_days').val('');
}
validateDateRange();
});
$("#applicationModal").on("shown.bs.modal", function (e) {
var id = $(e.relatedTarget).data('id');
let fields = ['leave_application_id','emp_name','emp_id','start_date','end_date','no_of_days','reason','status_val','department','designation'];
fields.forEach(function(field) {
$("#" + field).val("");
});
if (id == 0) {
$('#emp_name').val("").select2();
$('#applicationformTitle').html("Apply Leave");
$("#leave_application_id").val(0);
} else {
var arr = $(e.relatedTarget).data('arr');
fields.forEach(function(field) {
if(field == 'emp_name'){
let empID = arr && arr['emp_id'] ? arr['emp_id'] : "";
$("#emp_name").val(empID).select2();
}else if(field == 'status_val'){
$("#status_val").val(arr && arr['status']);
}else{
$("#" + field).val(arr && arr[field] ? arr[field] : "");
}
});
$('#applicationformTitle').html("Edit Leave");
}
var id = $(e.relatedTarget).data('id');
var arr = $(e.relatedTarget).data('arr') || {};
let fields = ['leave_application_id','emp_name','emp_id','start_date','end_date','no_of_days','reason','status_val','department','designation'];
fields.forEach(field => $("#" + field).val(arr[field] || "").prop('readonly', true));
if (id == 0) {
$('#emp_name').val("").select2();
$('#applicationformTitle').text("Apply Leave");
$("#leave_application_id").val(0);
$("#tempClick").show();
} else {
$('#applicationformTitle').text(arr.status === "Approved" ? "View Leave" : "Edit Leave");
$("#tempClick").toggle(arr.status !== "Approved");
}
if (id == 0 || arr.status !== "Approved") {
$("#emp_name, #start_date, #end_date, #status_val, #reason").prop({readonly: false, disabled: false});
$("#start_date, #end_date").prop('required', true);
} else {
$("#emp_name, #status_val").prop('disabled', true);
}
if (arr.emp_id) $("#emp_name").val(arr.emp_id).select2();
if (arr.status) $("#status_val").val(arr.status);
});
$('#tempClick').click(function () {
if ($('#emp_id').val() === '') {
alert('Please Select the Valid Employee');
return;
@ -333,19 +339,23 @@
alert('Please Select Status');
return;
}
// validateDateRange(function(isValid) {
// if (!isValid) {
// alert("The selected date range overlaps with an existing approved leave.");
// return;
// }
var formData = {
leave_application_id:$('#leave_application_id').val(),
emp_id:$('#emp_id').val(),
start_date:$('#start_date').val(),
end_date:$('#end_date').val(),
no_of_days:$('#no_of_days').val(),
reason:$('#reason').val(),
status:$('#status_val').val(),
};
var formData = {
leave_application_id:$('#leave_application_id').val(),
emp_id:$('#emp_id').val(),
start_date:$('#start_date').val(),
end_date:$('#end_date').val(),
no_of_days:$('#no_of_days').val(),
reason:$('#reason').val(),
status:$('#status_val').val(),
};
$('#loader').show();
$('#loader').show();
$.ajax({
type: 'POST',
@ -372,7 +382,7 @@
}
});
// });
});
@ -463,6 +473,39 @@
// }
// });
});
function validateDateRange() {
let startDate = $("#start_date").val();
let endDate = $("#end_date").val();
let empId = $("#emp_name").val();
if (!startDate || !endDate || !empId) return;
else{
$.ajax({
url: "<?php echo base_url(); ?>validateDateRange", // Replace with your actual API endpoint
type: "POST",
data: { emp_id: empId, start_date: startDate, end_date: endDate },
dataType: 'json',
success: function (response) {
if (response.status) {
alert(response.message);
$("#start_date, #end_date, #no_of_days").val("");
}else{
console.log(response.status,response.array);
}
},
error: function (xhr, status, error) {
alert("Error checking leave dates.");
},
complete: function () {
console.log("validate leave dates ajax call completed");
}
});
}
}
</script>
<script>