diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index c794b782..fb60b7ad 100755
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -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');
diff --git a/app/Controllers/Emergencypurchaseorder.php b/app/Controllers/Emergencypurchaseorder.php
index 4e7fb046..08c9dd2d 100755
--- a/app/Controllers/Emergencypurchaseorder.php
+++ b/app/Controllers/Emergencypurchaseorder.php
@@ -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) {
diff --git a/app/Controllers/Inwardgateregister.php b/app/Controllers/Inwardgateregister.php
index 5a361bbd..3b241b69 100755
--- a/app/Controllers/Inwardgateregister.php
+++ b/app/Controllers/Inwardgateregister.php
@@ -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']."
" .$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.', "'.$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']
diff --git a/app/Controllers/Monthlypay.php b/app/Controllers/Monthlypay.php
index b25cd126..09f4cb68 100755
--- a/app/Controllers/Monthlypay.php
+++ b/app/Controllers/Monthlypay.php
@@ -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') : '';
diff --git a/app/Controllers/Payslip.php b/app/Controllers/Payslip.php
index 50d81424..5d09e9e2 100755
--- a/app/Controllers/Payslip.php
+++ b/app/Controllers/Payslip.php
@@ -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);
}
diff --git a/app/Controllers/Purchaseorder.php b/app/Controllers/Purchaseorder.php
index 0b69cc35..7ffdadc3 100755
--- a/app/Controllers/Purchaseorder.php
+++ b/app/Controllers/Purchaseorder.php
@@ -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";
}
}
diff --git a/app/Helpers/purchaseorder_helper.php b/app/Helpers/purchaseorder_helper.php
index 8946e7b5..bc1615f7 100755
--- a/app/Helpers/purchaseorder_helper.php
+++ b/app/Helpers/purchaseorder_helper.php
@@ -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);
diff --git a/app/Models/Inwardgateregister_model.php b/app/Models/Inwardgateregister_model.php
index 09cc930e..6ebb17a2 100755
--- a/app/Models/Inwardgateregister_model.php
+++ b/app/Models/Inwardgateregister_model.php
@@ -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;
diff --git a/app/Models/Monthlypay_model.php b/app/Models/Monthlypay_model.php
index db7f7cb7..2895d9c5 100755
--- a/app/Models/Monthlypay_model.php
+++ b/app/Models/Monthlypay_model.php
@@ -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];
+ }
+
}
\ No newline at end of file
diff --git a/app/Views/EditservicePurchaseorder.php b/app/Views/EditservicePurchaseorder.php
index df67aeac..b61dff04 100755
--- a/app/Views/EditservicePurchaseorder.php
+++ b/app/Views/EditservicePurchaseorder.php
@@ -1504,34 +1504,37 @@ if (!empty($getlogpodtl)) {
| Bill No | - + + +File | -Action | FilePath)) ? $gd->FilePath : "No File"; ?> | -+ | + + FilePath)) { ?> @@ -1561,6 +1566,7 @@ if (!empty($getlogpodtl)) { |
|---|