From fd9d319773da0abb7c011590e212f4958c14d84e Mon Sep 17 00:00:00 2001 From: sriramv Date: Fri, 17 May 2024 17:05:12 +0530 Subject: [PATCH] CHANGE_add_new_module_os:ss --- app/Config/Routes.php | 7 + app/Controllers/Jobcard.php | 142 +++++++- app/Controllers/Outsourcing.php | 78 ++++ app/Models/JobcardModel.php | 46 +++ app/Models/OutsourceModel.php | 9 + app/Models/jobcardOSModel.php | 9 + app/Views/invoice_pdf_template_jobcard.php | 28 +- app/Views/job_card_form.php | 392 +++++++++++++++------ app/Views/jobs_list.php | 29 +- app/Views/layout/header.php | 16 +- app/Views/outsourcing_list.php | 232 ++++++++++++ app/Views/outsourcing_template.php | 215 +++++++++++ app/Views/purchase_list.php | 22 +- app/Views/sales_list.php | 11 +- app/Views/service_list.php | 6 +- app/Views/user_list.php | 4 +- 16 files changed, 1092 insertions(+), 154 deletions(-) create mode 100644 app/Controllers/Outsourcing.php create mode 100644 app/Models/OutsourceModel.php create mode 100644 app/Models/jobcardOSModel.php create mode 100644 app/Views/outsourcing_list.php create mode 100644 app/Views/outsourcing_template.php diff --git a/app/Config/Routes.php b/app/Config/Routes.php index ad3825f..1aedcc5 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -88,6 +88,7 @@ $routes->get("delete_jobcard/(:any)", "Jobcard::delete_jobcard/$1"); $routes->get("download_jobcard_invoice/(:any)", "Jobcard::download_jobcard_invoice/$1"); // $routes->post("save_vehicle", "Jobcard::save_vehicle"); $routes->get("download_jobcard/(:any)", "Jobcard::download_jobcard/$1"); +$routes->get("download_os", "Jobcard::download_os"); $routes->post("getServices", "Jobcard::getServices"); //End Job Card // @@ -202,3 +203,9 @@ $routes->get('dashboard', 'Users::dashboard'); $routes->get('edit_complaint/(:any)', 'Complaint::edit_complaint/$1'); $routes->get("delete_complaint/(:any)", "Complaint::delete_complaint/$1"); // Complaint End's// + +// Out sourcing + $routes->get('outsourcing_index', 'Outsourcing::outsourcing_index'); + $routes->post('create_os', 'Outsourcing::create_os'); + $routes->get('edit_os/(:any)', 'Outsourcing::edit_OS/$1'); +// Complaint End's diff --git a/app/Controllers/Jobcard.php b/app/Controllers/Jobcard.php index 9d50386..9d39914 100644 --- a/app/Controllers/Jobcard.php +++ b/app/Controllers/Jobcard.php @@ -6,12 +6,14 @@ use App\Models\BranchModel; use App\Models\JobcardModel; use App\Models\JobcardComplaintModel; use App\Models\JobcardCustomComplaintModel; +use App\Models\JobcardOSModel; use App\Models\JobcardServiceModel; use App\Models\JobcardProductModel; use App\Models\ProductModel; use App\Models\ServiceModel; use App\Models\ClientModel; use App\Models\ComplaintModel; +use App\Models\OutsourceModel; use App\Models\BikemodelsModel; use App\Models\BikemakeModel; use App\Models\VehicleModel; @@ -97,8 +99,9 @@ class Jobcard extends BaseController $servicedata = $this->JobcardModel->get_jobcard_service($job_card_id); $complaintdata = $this->JobcardModel->get_jobcard_complaint($job_card_id); + $osdata = $this->JobcardModel->get_jobcard_os($job_card_id); $customcomplaintdata = $this->JobcardModel->get_jobcard_custom_complaint($job_card_id); - $labourcost = array_merge($servicedata, $complaintdata,$customcomplaintdata); + $labourcost = array_merge($servicedata, $complaintdata,$customcomplaintdata,$osdata); /** CALCULATE LABOURCOST WITH TAX */ $totalAmount = 0; $totalTax = 0; @@ -111,9 +114,9 @@ class Jobcard extends BaseController // Calculate total $total = $totalAmount + $totalTax; - + $discount = ($data['job_card'][0]['is_rework'] == 1) ? 0 : $data['job_card'][0]['discount'] ; $amt_with_tax = $totalAmount + ($totalAmount * $totalTax / 100); - $totalAmount = ($amt_with_tax - $data['job_card'][0]['discount']) / (1 + ($totalTax/100)); + $totalAmount = ($amt_with_tax - $discount) / (1 + ($totalTax/100)); // Create single output array $labour_data[0] = [ "product_name" => "Labour Cost", @@ -211,6 +214,61 @@ class Jobcard extends BaseController } + public function download_os() + { + $JobcardProductModel = new JobcardProductModel(); + $outsource = $this->JobcardModel->download_os($this->session->get('logged_user_branch_id')); + + foreach ($outsource as &$value) { + $products = []; + $product_ids = !empty(json_decode($value['product_id'], true)) ? json_decode($value['product_id'], true) : [0]; + $product = $JobcardProductModel->select('job_card_product.job_card_product_id,job_card_product.product_id,job_card_product.qty,products.product_name as pname') + ->join('products', 'products.product_id = job_card_product.product_id') + ->whereIn('job_card_product.job_card_product_id', $product_ids)->find(); + + foreach ($product as $pr_value) { + array_push($products,$pr_value); + } + $value['products'] = $products; + } + $data['outsource'] = $outsource; + + // Create an mPDF object + $mpdf = new Mpdf([ + 'mode' => '', + 'format' => 'A5', + 'default_font_size' => 0, + 'default_font' => '', + + // 'margin_right' => 1, + 'margin_top' => 6, + 'margin_bottom' => 6, + 'margin_header' => 6, + 'margin_footer' =>-30, + 'orientation' => 'P', + ]); + + + + $mpdf->autoLangToFont = true; + $mpdf->autoScriptToLang = true; + // Set PDF properties + $mpdf->SetTitle('Invoice'); + // $mpdf->SetAuthor($data[0]->branch_name); + $mpdf->SetCreator(''); + + + // Generate the PDF content (HTML) with data + $html = view('outsourcing_template', $data); + // echo $html;die; + // Load HTML into the mPDF instance + $mpdf->WriteHTML($html); + + // Output the PDF to the browser for download + $mpdf->Output('OS_' . date('Y-m-d H-i-s') . '.pdf', 'D'); + + } + public function new_jobcard($job_card_id,$rework = null) { @@ -233,11 +291,15 @@ class Jobcard extends BaseController $ComplaintModel = new ComplaintModel(); $complaint=$ComplaintModel->where('isactive',1)->findAll(); + $OutsourceModel = new OutsourceModel(); + $os_data=$OutsourceModel->where('is_active',1)->findAll(); + $data['complaint']= $complaint; $data['product_1']=$product; $data['product']=""; $data['service_1']=$service; - $data['service']=""; + $data['service']=""; + $data['os_data']=$os_data; $data['client']=$client; $data['vehicle']=$vehicle; $data['logged_user_role'] = $this->session->get('logged_user_role'); @@ -251,7 +313,9 @@ class Jobcard extends BaseController $JobcardServiceModel = new JobcardServiceModel(); $JobcardComplaintModel = new JobcardComplaintModel(); $JobcardCustomComplaintModel = new JobcardCustomComplaintModel(); + $JobcardOSModel = new JobcardOSModel(); $ComplaintModel = new ComplaintModel(); + $OutsourceModel = new OutsourceModel(); /*** SERVICE DATA ***/ $servicedata = $JobcardModel->service_data($job_card_id, $this->session->get('logged_user_branch_id')); @@ -288,9 +352,22 @@ class Jobcard extends BaseController } $data['editccomplaintdata'] = $ccomplaintdata; + /*** OUTSOURCING DATA ***/ + $os_data = $JobcardModel->os_data($job_card_id, $this->session->get('logged_user_branch_id')); + // Using '&' to reference the original array element + foreach ($os_data as &$value) { + $product_ids = !empty(json_decode($value['product_id'], true)) ? json_decode($value['product_id'], true) : [0]; + $product = $JobcardProductModel->select('job_card_product.* , products.product_name as pname, products.qty_stock') + ->join('products', 'products.product_id = job_card_product.product_id') + ->whereIn('job_card_product_id', $product_ids)->findAll(); + $value['product'] = $product; + } + $data['editosdata'] = $os_data; + $complaint=$ComplaintModel->where('isactive',1)->findAll(); $data['complaint']= $complaint; + $data['os_data'] = $OutsourceModel->where('is_active',1)->findAll(); $data['page_name']="Edit Job Card"; $ClientModel = new ClientModel(); @@ -391,6 +468,7 @@ class Jobcard extends BaseController $JobcardServiceModel = new JobcardServiceModel(); $JobcardComplaintModel = new JobcardComplaintModel(); $JobcardCustomComplaintModel = new JobcardCustomComplaintModel(); + $JobcardOSModel = new JobcardOSModel(); $this->delete_items($this->request->getPost('delete_items')); $rework = $this->request->getPost('rework'); @@ -410,10 +488,10 @@ class Jobcard extends BaseController 'note'=> $this->request->getPost('note'), 'status'=> $this->request->getPost('status'), 'assigned_to'=> json_encode($this->request->getPost('assigned_to')), - 'subtotal'=> (isset($rework) ? 0 : $this->request->getPost('sub_total') ), - 'tax'=> (isset($rework) ? 0 : $this->request->getPost('invoicetax') ), - 'discount'=> ($this->request->getPost('discount')) == '' ? 0 : $this->request->getPost('discount'), - 'total'=> (isset($rework) ? 0 : $this->request->getPost('grand_total') ), + 'subtotal'=> $this->request->getPost('sub_total'), // (isset($rework) ? 0 : $this->request->getPost('sub_total') ), + 'tax'=> $this->request->getPost('invoicetax'), //(isset($rework) ? 0 : $this->request->getPost('invoicetax') ), + 'discount'=> $this->request->getPost('discount'), //($this->request->getPost('discount')) == '' ? 0 : $this->request->getPost('discount'), + 'total'=> $this->request->getPost('grand_total'), //(isset($rework) ? 0 : $this->request->getPost('grand_total') ), 'isactive' => 1 ]; $status = $this->request->getPost('status'); @@ -453,8 +531,8 @@ class Jobcard extends BaseController $service['service_id'] = $item->service_id; $service['qty'] = $item->quality; $service['tax'] = $item->tax; - $service['labour_cost'] = (isset($rework) ? 0 : $item->labour_cost ); - $service['amount'] = (isset($rework) ? 0 : $item->amount ); + $service['labour_cost'] = $item->labour_cost; //(isset($rework) ? 0 : $item->labour_cost ); + $service['amount'] = $item->amount; //(isset($rework) ? 0 : $item->amount ); if(empty($item->id)) { $JobcardServiceModel->insert($service); @@ -480,7 +558,7 @@ class Jobcard extends BaseController // Insert into the service table $service['job_card_id'] = $job_card_id; $service['complaint_id'] = $item->complaint_id; - $service['labour_cost'] = $item->labour_cost; + $service['labour_cost'] = $item->amount; $service['qty'] = $item->quality; $service['tax'] = $item->tax; $service['amount'] = $item->amount; @@ -529,6 +607,34 @@ class Jobcard extends BaseController if(isset($item->product)) { $this->product_data_insertion($job_card_id, $cc_complaint_id, $JobcardCustomComplaintModel, $item, $JobcardProductModel, $status, $rework); } } + /********** INSERT OUTSOURCE DATA ************/ + $os_data = $data[0]->os; + + foreach ($os_data as $item) { + // Insert into the service table + $service['job_card_id'] = $job_card_id; + $service['os_id'] = $item->os_id; + $service['labour_cost'] = $item->amount; + $service['qty'] = $item->quality; + $service['tax'] = $item->tax; + $service['amount'] = $item->amount; + if(empty($item->id)) { + $JobcardOSModel->insert($service); + $os_id = $JobcardOSModel->getInsertID(); + } + else { + if($status == 'Cancelled') + { + $service = []; + $service['isactive'] = 0; + } + $JobcardOSModel->update($item->id, $service); + $os_id = $item->id; + } + + if(isset($item->product)) { $this->product_data_insertion($job_card_id, $os_id, $JobcardOSModel, $item, $JobcardProductModel, $status, $rework); } + } + return redirect()->to('job_card_index'); } @@ -564,7 +670,7 @@ class Jobcard extends BaseController $product['product_id'] = $pt->p_id; $product['qty'] = $pt->qty; $product['tax'] = $pt->tax; - $product['amount'] = (isset($rework) ? 0 : $pt->amount / $pt->qty ); + $product['amount'] = $pt->amount / $pt->qty; //(isset($rework) ? 0 : $pt->amount / $pt->qty ); if(empty($pt->id)) { $JobcardProductModel->insert($product); $job_card_product_id = $JobcardProductModel->getInsertID(); @@ -597,6 +703,7 @@ class Jobcard extends BaseController $JobcardServiceModel = new JobcardServiceModel(); $JobcardComplaintModel = new JobcardComplaintModel(); $JobcardCustomComplaintModel = new JobcardCustomComplaintModel(); + $JobcardOSModel = new JobcardOSModel(); $data = json_decode($delArr); $product_data = $data[0]->product; @@ -641,6 +748,17 @@ class Jobcard extends BaseController $JobcardCustomComplaintModel->where($conditions)->delete(); } } + + $os_data = $data[0]->os; + if(!empty($os_data)) { + foreach ($os_data as $item) { + $conditions = [ 'job_card_os_id' => $item ]; + $os_deleted_data = $JobcardOSModel->where($conditions)->findAll(); + if(isset($os_deleted_data[0]['product_id'])) + $this->product_delete($os_deleted_data[0]['product_id']); + $JobcardOSModel->where($conditions)->delete(); + } + } } /** DELETE JOB CARD-PRODUCT */ diff --git a/app/Controllers/Outsourcing.php b/app/Controllers/Outsourcing.php new file mode 100644 index 0000000..3c33f72 --- /dev/null +++ b/app/Controllers/Outsourcing.php @@ -0,0 +1,78 @@ +session = session(); + } + + public function outsourcing_index() + { + if(!$this->session->has('logged_user')) { return redirect()->to(base_url()); } + $OutsourceModel = new OutsourceModel(); + $os_data = $OutsourceModel->where('is_active', 1)->findAll(); + $data['out_source'] = $os_data; + return view('outsourcing_list', $data); + } + + public function create_os() + { + if(!$this->session->has('logged_user')) { return redirect()->to(base_url()); } + try { + + $data = [ + "name" => $this->request->getPost('name'), + "labour_cost" => $this->request->getPost('labour_cost'), + "cost_with_tax" => $this->request->getPost('cost_with_tax'), + "tax" => $this->request->getPost('tax'), + ]; + + if ($this->request->getPost('id') == '') { + $OutsourceModel = new OutsourceModel(); + $data['business_id'] = $this->session->get('logged_user_business_id'); + $inserted = $OutsourceModel->insert($data); + if ($inserted) { + $result = $data; + return $this->respond(['status' => 'success','code' => 200,'data' => $result],200); + } else { + $result = "No Match's"; + return $this->respond(['status' => 'failed','code' => 404,'data' => $result],404); + } + } else { + $OutsourceModel = new OutsourceModel(); + $updated = $OutsourceModel->update($this->request->getPost('id'),$data); + if ($updated) { + $result = $data; + return $this->respond(['status' => 'success','code' => 200,'data' => $result],200); + } else { + $result = "No Match's"; + return $this->respond(['status' => 'failed','code' => 404,'data' => $result],404); + } + } + + } catch (\Exception $e) { + return $this->respond(['status' => 'failed','code' => 500,'data' => $e],500); + } + } + + public function edit_OS($id) + { + $OutsourceModel = new OutsourceModel(); + $os_data = $OutsourceModel->where('id',$id)->findAll(); + + $data['page_name']= 'Edit Out Source'; + $data['os_data']= $os_data; + return json_encode($data); + } + +} +?> \ No newline at end of file diff --git a/app/Models/JobcardModel.php b/app/Models/JobcardModel.php index 55c9992..a4f8379 100644 --- a/app/Models/JobcardModel.php +++ b/app/Models/JobcardModel.php @@ -48,6 +48,16 @@ class JobcardModel extends Model return $this->findAll(); } + public function os_data($job_card_id, $logged_user_branch_id) + { + $this->select('job_card.job_card_id, job_card_os.*'); + $this->join('job_card_os', 'job_card_os.job_card_id = job_card.job_card_id'); + $this->where('job_card_os.is_active', 1); + $this->where('job_card.job_card_id',$job_card_id); + $this->where('job_card.branch_id',$logged_user_branch_id); + return $this->findAll(); + } + public function ccomplaint_data($job_card_id, $logged_user_branch_id) { $this->select('job_card.job_card_id, job_card_custom_complaint.* , job_card_custom_complaint.complaint_name as name'); @@ -99,6 +109,16 @@ class JobcardModel extends Model return $this->findAll(); } + public function get_jobcard_os($job_id) + { + $this->select('job_card.*, job_card_os.*, out_source.name as product_name, job_card_os.labour_cost as labour_amount'); + $this->join('job_card_os', 'job_card_os.job_card_id = job_card.job_card_id'); + $this->join('out_source', 'out_source.id = job_card_os.os_id'); + $this->where('job_card.isactive', 1); + $this->where('job_card.job_card_id', $job_id); + return $this->findAll(); + } + public function get_jobcard_custom_complaint($job_id) { $this->select('job_card.*, job_card_custom_complaint.*, job_card_custom_complaint.complaint_name as product_name, job_card_custom_complaint.labour_cost as labour_amount'); @@ -120,6 +140,32 @@ class JobcardModel extends Model return $this->findAll(); } + // $this->session->get('logged_user_branch_id') + public function download_os($logged_user_branch_id) + { + + $this->select( + 'job_card.job_card_id,job_card.created_at,job_card.branch_id,job_card.isactive,job_card.vehicle_id, + job_card_os.job_card_id,job_card_os.os_id,job_card_os.product_id, + out_source.name, + vehicle.reg_no, vehicle.make, vehicle.colour,vehicle.model, + make.make as bike_name, model.model_name as bike_modal_name' + ); + // $this->from('job_card'); + $this->join('job_card_os', 'job_card_os.job_card_id = job_card.job_card_id'); + $this->join('out_source', 'out_source.id = job_card_os.os_id', 'left'); + $this->join('vehicle', 'vehicle.vehicle_id = job_card.vehicle_id', 'left'); + $this->join('make', 'make.make_id = vehicle.make', 'left'); + $this->join('model', 'model.model_id = vehicle.model', 'left'); + $this->where('job_card.isactive', 1); + $this->where('job_card.branch_id',$logged_user_branch_id); + $current_date = date('Y-m-d'); + $this->where('DATE(job_card.created_at)', $current_date); + // $this->groupBy('job_card.job_card_id'); + $this->orderBy('job_card.job_card_id','DESC'); + return $this->findAll(); + } + } \ No newline at end of file diff --git a/app/Models/OutsourceModel.php b/app/Models/OutsourceModel.php new file mode 100644 index 0000000..6110589 --- /dev/null +++ b/app/Models/OutsourceModel.php @@ -0,0 +1,9 @@ + - % - - + % + + - + Subtotal - + @@ -293,18 +293,18 @@ p { Estimate - + Discount - + Amount Chargeable (in words): format($sub_tot + round($tax)); + $words = $formatter->format(round($sub_tot + $tax)); echo ucfirst($words); ?> diff --git a/app/Views/job_card_form.php b/app/Views/job_card_form.php index 2718e17..865c685 100644 --- a/app/Views/job_card_form.php +++ b/app/Views/job_card_form.php @@ -1,13 +1,17 @@ +

- - " class="download-button" title="Download Jobcard"> -
- " class="btn btn-secondary waves-effect">Cancel + " class="btn btn-secondary waves-effect">Cancel