diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index 94478251..bb47a222 100755
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -77,6 +77,19 @@ $routes->get('deleteCostCenter', 'CostCenter::deleteCostCenter');
$routes->post('checkCostCenter', 'CostCenter::checkCostCenter');
$routes->get('exportcost', 'CostCenter::exportcost');
+// Driver Routes
+$routes->get('DriverListing', 'Driver::index');
+$routes->post('fetchDriverDetails', 'Driver::fetchDriverDetails');// for Ajax both add and edit....
+$routes->get('reActivateDriver', 'Driver::reActivateDriver');
+$routes->get('deleteDriver', 'Driver::deleteDriver');
+$routes->post('checkDriver', 'Driver::checkDriver');
+
+$routes->match(['GET', 'POST'], 'loadDriverAttendance', 'Driver::loadDriverAttendance');
+$routes->post('fetchDriverAttendanceDetails', 'Driver::fetchDriverAttendanceDetails');
+$routes->get('reActivateDriverAttendance', 'Driver::reActivateDriverAttendance');
+$routes->get('deleteDriverAttendance', 'Driver::deleteDriverAttendance');
+$routes->post('gatheredCustAndQty', 'Driver::gatheredCustAndQty');
+
// Asset Detail Routes
$routes->get('assetListing', 'Assetdetails::assetListing');
$routes->get('addasset', 'Assetdetails::addasset');
@@ -450,8 +463,7 @@ $routes->post('getSilicaIGR', 'Supplier::getSilicaIGR');
$routes->match(['GET', 'POST'], 'coatingMachineDetails', 'StockController::loadView_coatingMachineDetails');
$routes->post('addNewCoatingMachineDetails', 'StockController::addNewCoatingMachineDetails');
$routes->post('updateCoatingMachineDetails', 'StockController::updateCoatingMachineDetails');
-$routes->get('deleteCoatingMachineDetails', 'StockController::deleteCoatingMachineDetails');
-
+$routes->post('deleteBatchCardFile','StockController::deleteBatchCardFile');
//drier machine details
$routes->match(['GET', 'POST', 'PUT', 'DELETE'], 'drierMachineDetails', 'StockController::drierMachineDetails');
diff --git a/app/Controllers/Driver.php b/app/Controllers/Driver.php
new file mode 100755
index 00000000..0094c6e2
--- /dev/null
+++ b/app/Controllers/Driver.php
@@ -0,0 +1,280 @@
+driver_model = new Driver_model();
+ $this->session = session();
+ helper('form');
+ $this->isLoggedIn();
+ }
+
+ public function index()
+ {
+ $data['driver_list'] = $this->driver_model->useDriverTable()->getDriverList();
+ $this->global['pageTitle'] = 'Driver List';
+ $this->loadViews("driverListing", $this->global, $data, NULL);
+ }
+
+ /**
+ * This function is used to add/edit driver details
+ */
+ public function fetchDriverDetails() {
+
+ $id = $this->request->getPost('driver_id');
+ log_message('error', 'driver_id: ' . $id);
+ $Name = $this->request->getPost('driver_name');
+ $Mobile = $this->request->getPost('driver_mobile');
+ $userId = $this->session->get('userId');
+
+
+ $data = ['status' => false, 'message' => 'An error occurred while creating driver details'];
+
+ if ((int)$id == 0) {
+ log_message('error', 'LAST DriverID : ' . $id);
+ $driver_details = [
+ 'driver_name' => $Name,
+ 'driver_mobile' => $Mobile,
+ 'created_by' => $userId,
+ ];
+ $this->driver_model->useDriverTable()->insert($driver_details);
+ $insertedId = $this->driver_model->insertID();
+ if ($insertedId > 0) {
+ $data = ['status' => true, 'message' => 'Successfully created driver details'];
+ }
+ } else {
+ $driver_details = [
+ 'driver_id' => $id,
+ 'driver_name' => $Name,
+ 'driver_mobile' => $Mobile,
+ 'updated_by' => $userId,
+ ];
+ $this->driver_model->useDriverTable()->update($id, $driver_details);
+
+ if ($this->driver_model->affectedRows() > 0) {
+ $data = ['status' => true, 'message' => 'Successfully updated driver details'];
+ }
+
+ }
+
+ return $this->response->setJSON($data);
+ }
+
+ /**
+ * reactive the driver details isactive - 0 into 1
+ */
+ public function reActivateDriver(){
+
+ $driverId = $_GET['driverId'];
+ if(!empty($driverId)){
+ $data = ['isactive' => 1,'updated_by' => $this->session->get('userId')];
+ $this->driver_model->useDriverTable()->update($driverId, $data);
+ if ($this->driver_model->affectedRows() > 0) {
+ // $data = ['status' => true, 'message' => 'Successfully updated driver details'];
+ $message = 'Successfully Updated Driver details';
+ }
+ }else{
+ $message = "Driver details Not Avalable";
+ }
+ $this->session->setFlashdata('success', $message);
+ return redirect()->route('DriverListing');
+
+ }
+
+ /**
+ * delete the driver details
+ */
+ function deleteDriver($driverId = NULL)
+ {
+
+ $driverId = $driverId ?? $_GET['driverId'];
+ if(!empty($driverId)){
+ $data = ['isactive' => 0,'updated_by' => $this->session->get('userId')];
+ $this->driver_model->useDriverTable()->update($driverId, $data);
+ $message = ($this->driver_model->affectedRows() > 0) ? "Driver Deleted Successfully." : "Driver already Deleted States";
+ }else{
+ $message = "Driver details Not Avalable";
+ }
+ $this->session->setFlashdata('success', $message);
+ return redirect()->route('DriverListing');
+
+ }
+
+
+ /**
+ * check Driver mobile number Exsiting or not
+ */
+ function checkDriver(){
+
+ $data = $this->request->getPost();
+
+ $Id = $data['DriverId'];
+ $Mobile = $data['DriverMobile'];
+ $mobile = str_replace(' ', '', $Mobile);
+ $results = $this->driver_model->useDriverTable()
+ ->select('driver_mobile, driver_name, isactive')
+ ->where('driver_id !=', $Id)
+ ->where('REPLACE(driver_mobile, " ", "")', $mobile)
+ ->get()
+ ->getResult();
+
+ return $this->response->setJSON($results);
+ }
+
+ public function loadDriverAttendance()
+ {
+
+
+
+ // $input_driver_id = $this->request->getGet('driverId') ? $this->request->getGet('driverId') : '';
+ $input_driver_id = $this->request->getPost('driver_id') ? $this->request->getPost('driver_id') : $this->request->getGet('driverId');
+ // echo($input_driver_id);
+ $input_month_year = $this->request->getPost('monthyear') ? $this->request->getPost('monthyear') : date('M-Y');
+ list($month, $year) = explode('-', $input_month_year);
+
+ $month_in_number = get_date_time_dynamical_format('M','m',"$month");// refer helper
+ $get_last_date_of_the_month = cal_days_in_month(CAL_GREGORIAN, $month_in_number, $year);
+ $from_mysql_date = get_date_time_dynamical_format('d-m-Y','Y-m-d',"01-$month_in_number-$year");
+ $to_mysql_date = get_date_time_dynamical_format('d-m-Y','Y-m-d',"$get_last_date_of_the_month-$month_in_number-$year");
+ $indian_date = get_date_time_dynamical_format('d-m-Y','d-m-Y',"$get_last_date_of_the_month-$month_in_number-$year");
+ $data['driver_attendance_list'] = $this->driver_model->useDriverAttendanceTable()->getDriverAttendanceList($input_driver_id,$from_mysql_date,$to_mysql_date);
+ $data['page_driver_name'] = $this->driver_model->getDriverName($input_driver_id);
+ $data['invoice_info'] = $this->driver_model->getInvoiceInfo();
+ $data['datefordropdown'] = $input_month_year;
+ $data['driver_id'] = $input_driver_id;
+
+ $this->global['pageTitle'] = 'Driver Attendance List';
+ $this->loadViews("driverAttendance", $this->global, $data, NULL);
+ }
+
+ public function fetchDriverAttendanceDetails(){
+ $userId = $this->session->get('userId');
+
+ $id = $this->request->getPost('driver_attendance_id');
+ $date = $this->request->getPost('date');
+ $driver_id = $this->request->getPost('driver_id');
+ $inv = $this->request->getPost('invoice_number');
+ $veh = $this->request->getPost('vehicle_number');
+ $load = $this->request->getPost('load_type');
+ $sal = $this->request->getPost('salary_amount');
+ $food = $this->request->getPost('food_amount');
+
+
+
+ $data = ['status' => false, 'message' => 'An error occurred while creating driver Trip details'];
+
+ if ((int)$id == 0) {
+ log_message('error', 'LAST DriverID : ' . $id);
+ $driver_details = [
+
+ 'date' => $date,
+ 'driver_id' =>$driver_id,
+ 'invoice_number' =>$inv,
+ 'vehicle_number' =>$veh,
+ 'load_type' =>$load,
+ 'salary_amount' => $sal,
+ 'food_amount' =>$food,
+ 'created_by' => $userId,
+ ];
+ $this->driver_model->useDriverAttendanceTable()->insert($driver_details);
+ $insertedId = $this->driver_model->insertID();
+ if ($insertedId > 0) {
+ $data = ['status' => true, 'message' => 'Successfully created driver Trip details'];
+ }
+ } else {
+ $driver_details = [
+
+ 'driver_attendance_id' => $id,
+ 'date' => $date,
+ 'driver_id' =>$driver_id,
+ 'invoice_number' =>$inv,
+ 'vehicle_number' =>$veh,
+ 'load_type' =>$load,
+ 'salary_amount' => $sal,
+ 'food_amount' =>$food,
+ 'updated_by' => $userId,
+ ];
+ $this->driver_model->useDriverAttendanceTable()->update($id, $driver_details);
+
+ if ($this->driver_model->affectedRows() > 0) {
+ $data = ['status' => true, 'message' => 'Successfully updated driver Trip details'];
+ }
+
+ }
+
+ return $this->response->setJSON($data);
+ }
+
+ /**
+ * reactive the driver Attendance details isactive - 0 into 1
+ */
+ public function reActivateDriverAttendance(){
+
+ $driverAttendanceId = $_GET['driverAttendanceId'];
+ $driverId = $_GET['driverId'];
+ if(!empty($driverAttendanceId)){
+ $data = ['isactive' => 1,'updated_by' => $this->session->get('userId')];
+ $this->driver_model->useDriverAttendanceTable()->update($driverAttendanceId, $data);
+ if ($this->driver_model->affectedRows() > 0) {
+ // $data = ['status' => true, 'message' => 'Successfully updated Driver Trip details'];
+ $message = 'Successfully Updated Driver Trip details';
+ }
+ }else{
+ $message = "Driver Trip details Not Avalable";
+ }
+
+
+ $this->session->setFlashdata('success', $message);
+ return redirect()->to(current_url());
+ // return redirect()->route('loadDriverAttendance');
+ // return redirect()->to(base_url('loadDriverAttendance?driverId=' . $driverId));
+
+ }
+
+
+ /**
+ * delete the driver Attendance details
+ */
+ function deleteDriverAttendance()
+ {
+ $driverId = $this->request->getGet('driverId') ? $this->request->getGet('driverId') : '';
+ $driverAttendanceId = $this->request->getGet('driverAttendanceId') ? $this->request->getGet('driverAttendanceId') : '';
+ // echo "*****";
+ // echo $driverAttendanceId."**";
+ // echo "-------------";
+ // die;
+ if(!empty($driverAttendanceId)){
+ $data = ['isactive' => 0,'updated_by' => $this->session->get('userId')];
+ $this->driver_model->useDriverAttendanceTable()->update($driverAttendanceId, $data);
+ $message = ($this->driver_model->affectedRows() > 0) ? "Driver Trip Deleted Successfully." : "Driver Trip already Deleted States";
+ }else{
+ $message = "Driver Trip details Not Avalable";
+ }
+ $this->session->setFlashdata('success', $message);
+ // return redirect()->to(current_url());
+ return redirect()->route('loadDriverAttendance');
+ // return redirect()->to(base_url('loadDriverAttendance?driverId=' . $driverId));
+
+ }
+
+ function gatheredCustAndQty(){
+ $data = $this->request->getPost();
+ $invoice = $data['invoiceNumber'];
+ $results = $this->driver_model->gatheredCustAndQty($invoice);
+ return $this->response->setJSON($results);
+ }
+
+
+
+}
diff --git a/app/Controllers/Inwardgateregister.php b/app/Controllers/Inwardgateregister.php
index 485a6421..2465fd89 100755
--- a/app/Controllers/Inwardgateregister.php
+++ b/app/Controllers/Inwardgateregister.php
@@ -400,9 +400,9 @@ class Inwardgateregister extends BaseController
$IsThisOpenOrderPO = $this->request->getPost('hiddenIsOpenOrder');
$DeliveryChellanOrInvoiceNo = $this->request->getPost('InvoiceNo');
$DeliveryChellan = (string)$this->request->getPost('InvoiceDate');
- $DeliveryChellanDate = get_date_time_dynamical_format('d-m-Y',$DeliveryChellan);
+ $DeliveryChellanDate = get_date_time_dynamical_format('d-m-Y','',$DeliveryChellan);
$Mat_Rcvd_Dt = (string)$this->request->getPost('MaterialRcvdDate');
- $MaterialRcvdDt = get_date_time_dynamical_format('d-m-Y',$Mat_Rcvd_Dt);
+ $MaterialRcvdDt = get_date_time_dynamical_format('d-m-Y','',$Mat_Rcvd_Dt);
$VehicleNo = $this->request->getPost('VehicleNo');
$TransporterId = $this->request->getPost('TransporterId');
$DriverName = $this->request->getPost('DriverName');
diff --git a/app/Controllers/StockController.php b/app/Controllers/StockController.php
index 6267b06c..bacb93b4 100644
--- a/app/Controllers/StockController.php
+++ b/app/Controllers/StockController.php
@@ -149,12 +149,21 @@ class StockController extends BaseController
$startDate = "$month-01";
$endDate = date("Y-m-t", strtotime($startDate));
$data['coatingMachineDetails'] = $this->coatingMachineDetails_model
- ->select('t_coatingMachineDetails.*, t_batchcard_files.*') // Select required fields
- ->join('t_batchcard_files', 't_batchcard_files.coating_id = t_coatingMachineDetails.id', 'left')
- ->where('t_coatingMachineDetails.date >=', $startDate)
- ->where('t_coatingMachineDetails.date <=', $endDate)
- ->orderBy('t_coatingMachineDetails.date', 'asc')
- ->findAll();
+ ->select('t_coatingMachineDetails.*,
+ JSON_ARRAYAGG(
+ JSON_OBJECT(
+ "client_given_name", t_batchcard_files.client_file_name,
+ "filename", t_batchcard_files.filename,
+ "batchCardId" , t_batchcard_files.id
+ )
+ ) as batchcard_files')
+ ->join('t_batchcard_files', 't_batchcard_files.coating_id = t_coatingMachineDetails.id', 'left')
+ ->where('t_coatingMachineDetails.date >=', $startDate)
+ ->where('t_coatingMachineDetails.date <=', $endDate)
+ ->groupBy('t_coatingMachineDetails.id')
+ ->orderBy('t_coatingMachineDetails.date', 'asc')
+ ->findAll();
+
$date = DateTime::createFromFormat('Y-m', $month);
@@ -268,6 +277,8 @@ class StockController extends BaseController
public function updateCoatingMachineDetails()
{
+
+
$message1 = '';
$message2 = '';
$message3 = '';
@@ -282,6 +293,40 @@ class StockController extends BaseController
$this->db->transBegin();
try {
$updated = $this->coatingMachineDetails_model->update($id, $putData);
+
+
+
+ if ($updated !== false && $updated > 0) { // Assuming $id is the record ID being updated
+
+ $batchCardFiles = $this->request->getFileMultiple('batchCard');
+
+
+ // Step 4: Upload new files and insert into DB
+ foreach ($batchCardFiles as $index => $file) {
+
+ if ( !empty($batchCardFiles[$index]) && !($batchCardFiles[$index]->getError() === UPLOAD_ERR_NO_FILE)) {
+
+ $db = \Config\Database::connect();
+ $builder = $db->table('t_batchcard_files');
+
+ if ($file->isValid() && !$file->hasMoved()) {
+ $clientGivenName = $file->getClientName(); // User-given filename
+ $newName = $file->getRandomName(); // Randomized unique filename
+
+ // Move the new file to storage
+ if ($file->move(WRITEPATH . 'uploads/batchcard', $newName)) {
+ // Insert new file record into the database
+ $data = [
+ 'client_file_name' => $clientGivenName,
+ 'filename' => $newName,
+ 'coating_id' => $id
+ ];
+ $builder->insert($data);
+ }
+ }
+ }
+ }
+ }
if ($updated !== false && $updated > 0) {
$message1 = "successfully updated Coating machineDetail .";
@@ -289,7 +334,7 @@ class StockController extends BaseController
$dateToBeUpdated = $putData['date'];
$existingCoatingGasConsumption = $putData['existingTotalGasConsumption'];
- $updatedCoatingGasConsumption = $putData['totalGasConsumption'];
+ $updatedCoatingGasConsumption = $putData['totalGasConsumption'];
if ($existingCoatingGasConsumption != $updatedCoatingGasConsumption) {
@@ -321,59 +366,7 @@ class StockController extends BaseController
} else {
throw new \Exception('Failed to update Coating machine details.');
}
-
- if ($updated !== false && $updated > 0) { // Assuming $id is the record ID being updated
-
- $batchCardFiles = $this->request->getFileMultiple('batchCard');
- if (!empty($batchCardFiles) && !($batchCardFiles[0]->getError() === UPLOAD_ERR_NO_FILE)) {
-
- // Optional: Delete only files that need to be replaced (if you have a way to identify which are replaced)
- // Step 1: Fetch existing files linked with the $coating_id
- $db = \Config\Database::connect();
- $builder = $db->table('t_batchcard_files');
- $oldFiles = $builder->where('coating_id', $id)->findAll();
-
- // Step 2: Upload new files and save them in the database
- foreach ($batchCardFiles as $file) {
- if ($file->isValid() && !$file->hasMoved()) {
- $clientGivenName = $file->getClientName(); // User-given filename
- $newName = $file->getRandomName();
-
- // Check if the new file is different from the old ones (if needed)
- $isNewFile = true;
- foreach ($oldFiles as $oldFile) {
- if ($oldFile['filename'] === $newName) {
- $isNewFile = false; // File already exists, skip uploading
- break;
- }
- }
-
- if ($isNewFile) {
- // Move the new file and save to DB
- if ($file->move(WRITEPATH . 'uploads/batchcard', $newName)) {
- $data = [
- 'client_file_name' => $clientGivenName,
- 'filename' => $newName,
- 'coating_id' => $id
- ];
- $builder->insert($data);
- }
- }
- }
- }
-
-
- foreach ($oldFiles as $oldFile) {
- $filePath = WRITEPATH . 'uploads/batchcard/' . $oldFile['filename'];
- if (file_exists($filePath)) {
- unlink($filePath); // Delete old file from storage
- }
- }
-
-
- }
- }
@@ -384,23 +377,56 @@ class StockController extends BaseController
}
}
- public function deleteCoatingMachineDetails()
+ public function deleteBatchCardFile()
{
-
- $id = $this->request->getGet('id');
-
- $data['is_active'] = 0;
-
- $updated = $this->coatingMachineDetails_model->update($id, $data);
-
- if ($updated) {
- // Set flashdata for success message
- return redirect()->to('/coatingMachineDetails')->with('success', 'Coating Machine details deleted successfully');
- } else {
- // Set flashdata for error message
- return redirect()->back()->with('error', 'Failed to delete Coating machine details');
+ $data = $this->request->getPost();
+
+ if (!empty($data)) {
+
+ $batchId = $data['id'];
+ $db = \Config\Database::connect();
+ $builder = $db->table('t_batchcard_files');
+
+ // Step 1: Fetch the filename from DB before deleting
+ $fileRecord = $builder->select('filename')->where('id', $batchId)->get()->getRow();
+
+ if ($fileRecord) {
+ $filePath = WRITEPATH . 'uploads/batchcard/' . $fileRecord->filename;
+
+ // Step 2: Delete the file from storage
+ if (file_exists($filePath)) {
+ unlink($filePath);
+ }
+
+ // Step 3: Delete the record from the database
+ $sql = "DELETE FROM t_batchcard_files WHERE id = ?";
+ $deleted = $db->query($sql, [$batchId]);
+
+ if ($deleted) {
+ return $this->response->setJSON([
+ 'status' => '200',
+ 'message' => "Deleted Batch Card File Successfully..!!"
+ ]);
+ } else {
+ return $this->response->setJSON([
+ 'status' => '400',
+ 'message' => "Failed to Delete..!! Try Again Later"
+ ]);
+ }
+ } else {
+ return $this->response->setJSON([
+ 'status' => '404',
+ 'message' => "File Not Found..!!"
+ ]);
+ }
}
+
+ return $this->response->setJSON([
+ 'status' => '400',
+ 'message' => "Invalid Request..!!"
+ ]);
}
+
//incoming Silica Sand Details starts
public function loadView_incomingSilicaSandDetails()
diff --git a/app/Helpers/datetime_helper.php b/app/Helpers/datetime_helper.php
index e3638ecb..75a9dd26 100755
--- a/app/Helpers/datetime_helper.php
+++ b/app/Helpers/datetime_helper.php
@@ -33,10 +33,14 @@ if (!function_exists('get_date_time_format')) {
}
if (!function_exists('get_date_time_dynamical_format')) {
- function get_date_time_dynamical_format($format,$val)
- {
- $date = \DateTime::createFromFormat($format, $val, new \DateTimeZone('Asia/Kolkata'));
- return $date->format('Y-m-d H:i:s');
+ function get_date_time_dynamical_format($inputformat, $outputformat, $val)
+ {
+ $format = !empty($outputformat) ? $outputformat : 'Y-m-d H:i:s';
+ $date = \DateTime::createFromFormat($inputformat, $val, new \DateTimeZone('Asia/Kolkata'));
+ if (!$date) {
+ return "Invalid Date: $val (Expected format: $inputformat)";
+ }
+ return $date->format($format);
}
}
@@ -257,6 +261,7 @@ if (!function_exists('get_pre_financial_years')) {
return $fiscalYears;
}
}
+
if (!function_exists('generate_pos_number')) {
diff --git a/app/Models/CoatingMachineDetailsModel.php b/app/Models/CoatingMachineDetailsModel.php
index f7f48d08..46819fe7 100644
--- a/app/Models/CoatingMachineDetailsModel.php
+++ b/app/Models/CoatingMachineDetailsModel.php
@@ -13,7 +13,7 @@ class CoatingMachineDetailsModel extends Model
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = ['shift','machineOnTime','machineOffTime','totalCoating','date',
- 'machineRunningInHrs' , 'perHourCoatingSandQTY' , 'perHourGasConsumption' ,'grade','batchCard',
+ 'machineRunningInHrs' , 'perHourCoatingSandQTY' , 'perHourGasConsumption' ,'grade',
'totalCoatingSandInKg','totalGasConsumption','customerName', 'is_active','created_at','updated_at'];
protected bool $allowEmptyInserts = false;
diff --git a/app/Models/Driver_model.php b/app/Models/Driver_model.php
new file mode 100755
index 00000000..75a801ec
--- /dev/null
+++ b/app/Models/Driver_model.php
@@ -0,0 +1,96 @@
+table = 't_driver';
+ $this->primaryKey = 'driver_id';
+ $this->allowedFields = ['driver_id', 'driver_name', 'driver_mobile','created_on','created_by','updated_on','updated_by','isactive'];
+ return $this;
+ }
+
+ public function useDriverAttendanceTable()
+ {
+ $this->table = 't_driver_attendance';
+ $this->primaryKey = 'driver_attendance_id';
+ $this->allowedFields = ['driver_attendance_id','date','driver_id','invoice_number','vehicle_number','load_type','salary_amount','food_amount','created_on','created_by','updated_on','updated_by','isactive'];
+ return $this;
+ }
+
+ public function getDriverList()
+ {
+ if (empty($this->allowedFields)) { return []; }
+ $fields = implode(', ', array_map(function($field) {
+ return $this->table . '.' . $field;
+ }, $this->allowedFields));
+
+
+ $selectFields = "CONCAT_WS(' ', t_employee_details.FirstName, t_employee_details.LastName) AS FullName, t_employee_details.IsActive as employee_isactive, " . $fields;
+
+ return $this->select($selectFields)
+ ->join('tbl_users', 'tbl_users.userId = ' . $this->table . '.created_by', 'left')
+ ->join('t_employee_details', 'tbl_users.EmpID = t_employee_details.EmpID', 'left')
+ ->findAll();
+ }
+
+ public function getDriverAttendanceList($driver_id,$from,$to){
+ if (empty($this->allowedFields)) { return []; }
+ $fields = implode(', ', array_map(function($field) {
+ return $this->table . '.' . $field;
+ }, $this->allowedFields));
+
+ $selectFields = "CONCAT_WS(' ', t_employee_details.FirstName, t_employee_details.LastName) AS FullName, t_employee_details.IsActive as employee_isactive, t_driver.driver_name,ip_clients.client_name as customer,ip_invoices.received_qty as quantity," . $fields;
+
+ return $this->select($selectFields)
+ ->join('t_driver', 't_driver.driver_id = ' . $this->table . '.driver_id', 'left')
+ ->join('tbl_users', 'tbl_users.userId = ' . $this->table . '.created_by', 'left')
+ ->join('t_employee_details', 'tbl_users.EmpID = t_employee_details.EmpID', 'left')
+ ->join('ip_invoices', 'ip_invoices.invoice_number = ' . $this->table . '.invoice_number', 'left')
+ ->join('ip_clients', 'ip_clients.client_id = ip_invoices.client_id', 'left')
+ ->where($this->table.'.date BETWEEN "'.$from.'" AND "'.$to.'"')
+ ->where($this->table . '.driver_id', $driver_id)
+ ->findAll();
+
+ }
+ function getInvoiceInfo()
+ {
+ $builder = $this->db->table('ip_invoices')
+ ->select('invoice_number,invoice_id');
+ $query = $builder->get();
+ return $query->getResult();
+ }
+
+ function getDriverName($id)
+ {
+ $builder = $this->db->table('t_driver')
+ ->select('driver_name')
+ ->where('driver_id', $id);
+
+ $query = $builder->get()->getRow();
+
+ $driver_name = $query ? $query->driver_name : null;
+
+ return $driver_name;
+ }
+
+ function gatheredCustAndQty($invoice){
+ $builder = $this->db->table('ip_invoices')
+ ->select('invoice_number,received_qty as quantity,ip_clients.client_name as customer')
+ ->join('ip_clients', 'ip_clients.client_id = ip_invoices.client_id', 'left')
+ ->where('invoice_number', $invoice);
+ $query = $builder->get();
+ return $query->getRowArray() ?: [];
+ }
+
+
+
+}
+?>
diff --git a/app/Views/CoatingMachineDetail.php b/app/Views/CoatingMachineDetail.php
index 0f6e57e9..6e356d93 100644
--- a/app/Views/CoatingMachineDetail.php
+++ b/app/Views/CoatingMachineDetail.php
@@ -341,6 +341,7 @@
+
+
@@ -703,7 +706,7 @@
Add More
-
+
@@ -911,16 +914,23 @@
-