diff --git a/Mechanics.txt b/Mechanics.txt
new file mode 100644
index 0000000..2c1fd20
--- /dev/null
+++ b/Mechanics.txt
@@ -0,0 +1,32 @@
+Mechanics
+
+Sales order
+1.vehicle id readonly issue
+2.add more item in edit
+3.default qty should be 1 .amount should be qty*rate+tax (calculation changes)
+4.Sales order list client mobile tax subtotal should remove
+status cancel in red,create in blue and paid in green
+5.status label bracket hide in creat
+6.In edit make and model not show
+
+Product
+1.model handle(reload existing selcted id should not remove)
+
+
+vehicle
+1.adding new client mobille number not populate
+
+
+Purchase order
+1.to set vendor read only
+2.add more item in edit
+3.STYLE IN ITEM SELCT
+4.Search in selct vendor column
+5.calculation should be removed only qty product name
+6.qty add in product when status is release is based on checkbox slected .only update will done if checked
+7.Pdf same as sales order
+
+Return Products
+1.Same as purchase model .user can selct the product to be returned
+2.initially status is in draft nothing happens
+3.when status is returned qty should be decrease
diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index feabbab..61f9d1f 100644
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -145,5 +145,15 @@ $routes->get("new_purchase/(:any)", "Purchase::new_purchase/$1");
$routes->get('get_vendor/(:any)', 'Purchase::get_vendor/$1');
$routes->post("add_purchase", "Purchase::add_purchase");
$routes->get("delete_purchase/(:any)", "Purchase::delete_purchase/$1");
+$routes->post("getVendorProducts", "Purchase::getVendorProducts");
+$routes->post("delete_purchase_product", "Purchase::delete_purchase_product");
+$routes->get("download_purchase_invoice/(:any)", "Purchase::download_purchase_invoice/$1");
// Reorder Level//
$routes->get('reorder_level_index', 'Reorderlevel::reorder_level_index');
+$routes->get('rise_order/(:any)', 'Reorderlevel::rise_order/$1');
+// Return Order//
+$routes->get('return_order_index', 'ReturnOrder::return_order_index');
+$routes->get('return_order', 'ReturnOrder::return_order');
+$routes->get("new_return/(:any)", "ReturnOrder::new_return/$1");
+$routes->get('get_vendor/(:any)', 'Purchase::get_vendor/$1');
+$routes->post("add_purchase", "Purchase::add_purchase");
diff --git a/app/Controllers/Products.php b/app/Controllers/Products.php
index c93149b..5053650 100644
--- a/app/Controllers/Products.php
+++ b/app/Controllers/Products.php
@@ -313,10 +313,14 @@ public function save_model() {
];
- $BikemodelsModel->insert($modelData);
+ $model_id = $BikemodelsModel->insert($modelData);
+
+ $modelData = $BikemodelsModel->where('make_id',$make_id)->findAll();
$response['success'] = true;
+ $response['model_id'] = $model_id;
+ $response['model_value'] = $model;
} else {
$response['success'] = false;
diff --git a/app/Controllers/Purchase.php b/app/Controllers/Purchase.php
index 7920bb7..ad1d7d2 100644
--- a/app/Controllers/Purchase.php
+++ b/app/Controllers/Purchase.php
@@ -7,6 +7,8 @@ use App\Models\PurchaseOrderModel;
use App\Models\VendorModel;
use App\Models\BranchModel;
use App\Models\BusinessModel;
+ use App\Models\PurchaseOrderChildModel;
+ use Mpdf\Mpdf;
class Purchase extends BaseController
@@ -21,10 +23,12 @@ class Purchase extends BaseController
{
$PurchaseOrderModel = new PurchaseOrderModel();
- $purchase = $PurchaseOrderModel->where('purchase_order.branch_id', $this->session->get('logged_user_business_id'))
- ->select('purchase_order.*, vendor.vendor_name')
- ->join('vendor', 'vendor.vendor_id = purchase_order.vendor_id')
- ->findAll();
+ // $purchase = $PurchaseOrderModel->where('purchase_order.branch_id', $this->session->get('logged_user_business_id'))
+ // ->select('purchase_order.*, vendor.vendor_name')
+ // ->join('vendor', 'vendor.vendor_id = purchase_order.vendor_id')
+ // ->findAll();
+
+ $purchase = $PurchaseOrderModel->getPurchaseOrdersWithProducts($this->session->get('logged_user_branch_id'));
// echo "
";
// print_r($product);die;
$data['purchase']=$purchase;
@@ -45,11 +49,16 @@ class Purchase extends BaseController
$vendor = $VendorModel->where('branch_id',$this->session->get('logged_user_branch_id'))->select('vendor_id,vendor_name')->findAll();
+
$BranchModel = new BranchModel();
$BusinessModel = new BusinessModel();
$branch = $BranchModel->where('branch_id', $this->session->get('logged_user_branch_id'))->get()->getRowArray();
$business = $BusinessModel->where('business_id', $this->session->get('logged_user_business_id'))->get()->getRowArray();
-
+ $ProductModel = new ProductModel();
+ $product=$ProductModel
+ ->where('isactive',1)
+ ->where('branch_id',$this->session->get('logged_user_branch_id'))->findAll();
+ $data['product']=$product;
$data['branch'] = $branch;
$data['business'] = $business;
@@ -66,8 +75,32 @@ class Purchase extends BaseController
$VendorModel = new VendorModel();
$vendor = $VendorModel->where('branch_id',$this->session->get('logged_user_business_id'))->select('vendor_id,vendor_name')->findAll();
$data['vendor']=$vendor;
+
$data['purchase'] = $purchase;
+
+
+
+ $VendorModel = new VendorModel();
+ $vendor = $VendorModel->findAll();
+ $data['vendor'] = $vendor;
+
$data['vendor_id'] = $purchase['vendor_id'];
+// print_r($vendor);die;
+ $vendorId=$purchase['vendor_id'];
+ $encodedVendorId = json_encode([$vendorId]);
+ $productModel = new ProductModel();
+
+ // Query the database to find the product based on make_id and model_id
+ $product = $productModel->where('JSON_CONTAINS(vendor, \'' . $encodedVendorId . '\')', null, false)
+ ->findAll();
+ $data['product']=$product;
+// print_r($product);die;
+
+
+
+ $PurchaseOrderChildModel = new PurchaseOrderChildModel();
+ $purchase_product=$PurchaseOrderChildModel->where('purchase_order_id', $purchase_order_id)->findAll();
+ $data['purchase_product']=$purchase_product;
}
// echo "";
@@ -78,6 +111,8 @@ class Purchase extends BaseController
public function add_purchase()
{
$PurchaseOrderModel = new PurchaseOrderModel();
+ $ProductModel = new ProductModel();
+ $PurchaseOrderChildModel = new PurchaseOrderChildModel();
$data = [
'vendor_id' => $this->request->getPost('vendor_id'),
'order_date' => $this->request->getPost('order_date'),
@@ -92,23 +127,100 @@ class Purchase extends BaseController
'shipping_state' => $this->request->getPost('shipping_state'),
'shipping_city' =>$this->request->getPost('shipping_city'),
'shipping_postal_code' => $this->request->getPost('shipping_postal_code'),
- 'description' => $this->request->getPost('description'),
+ 'bill_number' => $this->request->getPost('bill_number')? $this->request->getPost('bill_number') : '',
+ 'return_date' => $this->request->getPost('return_date') ? $this->request->getPost('return_date') : '',
+ 'terms_condition' => $this->request->getPost('terms_condition'),
+ 'branch_id'=> $this->session->get('logged_user_branch_id'),
];
- // echo "";
- // print_r($this->request->getPost());die;
+
+ // print_r($data);die;
$purchase_order_id = $this->request->getPost('purchase_order_id');
-
+ // echo $purchase_order_id;die;
if (!empty($purchase_order_id)) {
$PurchaseOrderModel->update($purchase_order_id, $data);
} else {
$PurchaseOrderModel->insert($data);
+ $purchase_order_id = $PurchaseOrderModel->getInsertID();
}
-
+ $orderNumber = 'PO' . str_pad($purchase_order_id, 8, '0', STR_PAD_LEFT);
+ // print_r($orderNumber);die;
+ // Update sales order with generated order number
+ $PurchaseOrderModel->update($purchase_order_id, ['order_number' => $orderNumber]);
+ // print_r();die;
+ // Prepare data for sales order product
+ $product_ids = $this->request->getPost('item_details');
+ $quantities = $this->request->getPost('quantity');
+ // $discounts = $this->request->getPost('discount_amount');
+ // $discount_types = $this->request->getPost('discount_type');
+ $amounts = $this->request->getPost('amount');
+ $itemtax=$this->request->getPost('item-tax');
+ $unitprice=$this->request->getPost('unit-price');
+ $selected_items=$this->request->getPost('selected_items');
+ $purchase_order_child_id = $this->request->getPost('purchase_order_child_id');
+ // print_r($selected_items);die;
+
+ // print_r($status);die;
+ $status = $this->request->getPost('purchase_status');
+ foreach ($product_ids as $key => $product_id) {
+ $qty = isset($quantities[$key]) ? $quantities[$key] : 0;
+ $selected_item= isset($selected_items[$key]) ? $selected_items[$key] : 0;
+ // print_r($selected_item);die;
+ if ($status == 'Received' && $selected_item == 1) {
+ $this->addBackProductQuantity($ProductModel, $product_id, $qty);
+ }
+
+ $discount = isset($discounts[$key]) ? $discounts[$key] : 0;
+ $discount_type = isset($discount_types[$key]) ? $discount_types[$key] : '';
+ $tax=isset($itemtax[$key]) ? $itemtax[$key] : 0;
+ $rate=isset($unitprice[$key]) ? $unitprice[$key] : 0;
+ $amount = isset($amounts[$key]) ? $amounts[$key] : 0;
+
+ // $new_qty = $this->calculateUpdatedQuantity($ProductModel, $product_id, $qty);
+ // print_r($discount_type);die;
+ $child_data = [
+ 'purchase_order_id' => $purchase_order_id,
+ 'product_id' => $product_id,
+ 'qty' => $qty,
+ // 'discount' => $discount,
+ // 'discount_type' => $discount_type,
+ 'net_price'=>$rate,
+ 'tax'=>$tax,
+ 'amount' => $amount,
+ 'is_selected'=>$selected_item,
+ 'isactive'=>1,
+ ];
+ // print_r($child_data);die;
+ if (!empty($purchase_order_child_id[$key])) {
+
+ // print_r($purchase_order_child_id[$key]);die;
+ $PurchaseOrderChildModel->update($purchase_order_child_id[$key], $child_data);
+
+ } else {
+ $PurchaseOrderChildModel->insert($child_data);
+
+ }
+
+
+ }
+
return redirect()->to('purchase_index');
}
+ private function addBackProductQuantity($ProductModel, $product_id, $sold_qty)
+{
+
+ // Fetch current product quantity
+ $product = $ProductModel->find($product_id);
+ $current_qty = $product['qty_stock'];
+
+ // Calculate updated quantity
+ $new_qty = $current_qty + $sold_qty;
+
+ // Update quantity in Product table
+ $ProductModel->update($product_id, ['qty_stock' => $new_qty]);
+}
public function delete_purchase($purchase_order_id)
{
@@ -143,5 +255,114 @@ class Purchase extends BaseController
return json_encode($products);
}
+ public function getVendorProducts()
+{
+ // Retrieve make_id and model_id from the request
+ // $makeId = $this->request->getPost('');
+ $vendorId = $this->request->getPost('vendor_id');
+ // Encode the modelId before searching
+ $encodedVendorId = json_encode([$vendorId]);
+
+ // Load the ProductModel
+ $productModel = new ProductModel();
+
+ // Query the database to find the product based on make_id and model_id
+ $product = $productModel
+ ->where('JSON_CONTAINS(vendor, \'' . $encodedVendorId . '\')', null, false)
+ ->findAll();
+
+ // print_r($product);die;
+ if($product){
+ // Send JSON response
+ return $this->response->setJSON(['product'=>$product] );
+ } else {
+ // If product is not found, return an empty response or appropriate message
+ return $this->response->setJSON(['product'=>[] , 'modelName'=>$modelName ,'makeName'=>$makeName]);
+ }
+}
+public function delete_purchase_product()
+{
+ $purchase_order_child_id = $this->request->getPost('purchase_order_child_id');
+
+ if (!empty($purchase_order_child_id)) {
+ $PurchaseOrderChildModel = new PurchaseOrderChildModel();
+ $data['isactive'] = 0;
+
+ if ($PurchaseOrderChildModel->update($purchase_order_child_id, $data)) {
+ // Return success response
+ return $this->response->setJSON(['success' => true]);
+ }
+ }
+
+ // Return error response if deletion fails
+ return $this->response->setJSON(['success' => false]);
+}
+public function download_purchase_invoice($purchase_order_id)
+{
+ // echo "hello"; die;
+ // Fetch the invoice data based on $invoice_id
+ $model = new PurchaseOrderModel();
+ $data = $model->getPurchasePdf($purchase_order_id);
+
+ $items = $model->getPurchaseOrderProductsForPdf($purchase_order_id);
+
+
+
+ // print_r($items);die();
+
+ // print_r($invoiceItems);die();
+
+ // 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)
+ // if ($data[0]->status === 'Draft') {
+ // // Set the watermark text and options
+ // $mpdf->SetWatermarkText('Draft');
+ // $mpdf->showWatermarkText = true;
+ // }
+ // if ($data[0]->status === 'Cancelled') {
+ // // Set the watermark text and options
+ // $mpdf->SetWatermarkText('Cancelled');
+ // $mpdf->showWatermarkText = true;
+ // }
+ // if ($data[0]->status === 'Void') {
+ // // Set the watermark text and options
+ // $mpdf->SetWatermarkText('Void');
+ // $mpdf->showWatermarkText = true;
+ // }
+
+
+ // Generate the PDF content (HTML) with data
+ $html = view('invoice_purchase_template', ['sales' => $data,'items'=>$items]);
+// echo $html;die;
+ // Load HTML into the mPDF instance
+ $mpdf->WriteHTML($html);
+
+ // Output the PDF to the browser for download
+ $mpdf->Output('invoice_' . date('Y-m-d H-i-s') . '.pdf', 'D');
+}
}
\ No newline at end of file
diff --git a/app/Controllers/Reorderlevel.php b/app/Controllers/Reorderlevel.php
index 4a67041..1266a82 100644
--- a/app/Controllers/Reorderlevel.php
+++ b/app/Controllers/Reorderlevel.php
@@ -3,6 +3,7 @@
namespace App\Controllers;
use App\Models\ProductModel;
+use App\Models\VendorModel;
class Reorderlevel extends BaseController
@@ -28,5 +29,15 @@ class Reorderlevel extends BaseController
return view('reorder_level_list',$data);
}
+ public function rise_order($product_id)
+ {
+ $ProductModel = new ProductModel();
+ $products=$ProductModel->where('product_id', $product_id)->get()->getRowArray();
+ $data['products']=$products;
+ $vendorid= $products['prefered_vendor'];
+ $VendorModel = new VendorModel();
+ $vendor=$VendorModel->where('vendor_id',$vendorid)->findAll();
+ print_r($vendor);die;
+ }
}
?>
\ No newline at end of file
diff --git a/app/Controllers/ReturnOrder.php b/app/Controllers/ReturnOrder.php
new file mode 100644
index 0000000..1f8a318
--- /dev/null
+++ b/app/Controllers/ReturnOrder.php
@@ -0,0 +1,375 @@
+session = session();
+ }
+
+ public function return_order_index()
+ {
+ $PurchaseOrderModel = new PurchaseOrderModel();
+
+ $purchase = $PurchaseOrderModel->getPurchaseOrdersWithProducts($this->session->get('logged_user_branch_id'));
+ // echo "";
+ // print_r($product);die;
+ $data['purchase']=$purchase;
+
+ $ReturnModel = new ReturnModel();
+
+ $return = $ReturnModel->findAll();
+ $data['return']=$return;
+ // echo "";
+ // print_r($data);die;
+ return view('return_order_liist',$data);
+ }
+
+ public function return_order()
+ {
+ $PurchaseOrderModel = new PurchaseOrderModel();
+
+ $purchase = $PurchaseOrderModel->getPurchaseOrdersWithProducts($this->session->get('logged_user_branch_id'));
+ // echo "";
+ // print_r($product);die;
+ $data['purchase']=$purchase;
+
+ // echo "";
+ // print_r($data);die;
+ return view('return_list',$data);
+ }
+ public function new_return($purchase_order_id)
+ {
+ if ($purchase_order_id === '0') {
+
+
+ $PurchaseOrderModel = new PurchaseOrderModel();
+ $data['purchase'] =$PurchaseOrderModel->getdata($this->session->get('logged_user_branch_id'));
+ // print_r($data);die;
+ $VendorModel = new VendorModel();
+ $vendor = $VendorModel->findAll();
+
+
+ $BranchModel = new BranchModel();
+ $BusinessModel = new BusinessModel();
+ $branch = $BranchModel->where('branch_id', $this->session->get('logged_user_branch_id'))->get()->getRowArray();
+ $business = $BusinessModel->where('business_id', $this->session->get('logged_user_business_id'))->get()->getRowArray();
+ $ProductModel = new ProductModel();
+ $product=$ProductModel
+ ->where('isactive',1)
+ ->where('branch_id',$this->session->get('logged_user_branch_id'))->findAll();
+ $data['product']=$product;
+ $data['branch'] = $branch;
+ $data['business'] = $business;
+
+ $data['page_name']="Add Purchase Order";
+ $data['vendor']=$vendor;
+
+ $data['vendor_id'] = [];
+ } else if ($purchase_order_id !== '0') {
+ $data['page_name']="Edit Purchase Order";
+
+ $PurchaseOrderModel = new PurchaseOrderModel();
+ $purchase=$PurchaseOrderModel->where('purchase_order_id', $purchase_order_id)->get()->getRowArray();
+ $data['purchase'] = $purchase;
+
+
+
+ $VendorModel = new VendorModel();
+ $vendor = $VendorModel->findAll();
+ $data['vendor'] = $vendor;
+
+ $data['vendor_id'] = $purchase['vendor_id'];
+// print_r($vendor);die;
+ $vendorId=$purchase['vendor_id'];
+ $encodedVendorId = json_encode([$vendorId]);
+ $productModel = new ProductModel();
+
+ // Query the database to find the product based on make_id and model_id
+ $product = $productModel->where('JSON_CONTAINS(vendor, \'' . $encodedVendorId . '\')', null, false)
+ ->findAll();
+ $data['product']=$product;
+// print_r($product);die;
+
+
+
+ $PurchaseOrderChildModel = new PurchaseOrderChildModel();
+ $purchase_product=$PurchaseOrderChildModel->where('purchase_order_id', $purchase_order_id)->findAll();
+ $data['purchase_product']=$purchase_product;
+
+ }
+ // echo "";
+ // print_r($data);die;
+ echo view('return_order_form',$data);
+ }
+
+ public function add_purchase()
+ {
+ $PurchaseOrderModel = new PurchaseOrderModel();
+ $ProductModel = new ProductModel();
+ $PurchaseOrderChildModel = new PurchaseOrderChildModel();
+ $data = [
+ 'vendor_id' => $this->request->getPost('vendor_id'),
+ 'order_date' => $this->request->getPost('order_date'),
+ 'contact_person_name' => $this->request->getPost('contact_person_name'),
+ 'contact_person_mobile'=> $this->request->getPost('contact_person_mobile'),
+ 'status'=> $this->request->getPost('purchase_status'),
+ 'billing_address' => $this->request->getPost('billing_address'),
+ 'billing_state' => $this->request->getPost('billing_state'),
+ 'billing_city' => $this->request->getPost('billing_city'),
+ 'billing_postal_code' => $this->request->getPost('billing_postal_code'),
+ 'shipping_address' => $this->request->getPost('shipping_address'),
+ 'shipping_state' => $this->request->getPost('shipping_state'),
+ 'shipping_city' =>$this->request->getPost('shipping_city'),
+ 'shipping_postal_code' => $this->request->getPost('shipping_postal_code'),
+ 'return_date' => $this->request->getPost('return_date') ? $this->request->getPost('return_date') : '',
+ 'terms_condition' => $this->request->getPost('terms_condition'),
+ 'branch_id'=> $this->session->get('logged_user_branch_id'),
+ ];
+
+ // print_r($data);die;
+ $purchase_order_id = $this->request->getPost('purchase_order_id');
+ // echo $purchase_order_id;die;
+ if (!empty($purchase_order_id)) {
+
+ $PurchaseOrderModel->update($purchase_order_id, $data);
+ } else {
+
+ $PurchaseOrderModel->insert($data);
+ $purchase_order_id = $PurchaseOrderModel->getInsertID();
+ }
+ $orderNumber = 'PO' . str_pad($purchase_order_id, 8, '0', STR_PAD_LEFT);
+ // print_r($orderNumber);die;
+ // Update sales order with generated order number
+ $PurchaseOrderModel->update($purchase_order_id, ['order_number' => $orderNumber]);
+ // print_r();die;
+ // Prepare data for sales order product
+ $product_ids = $this->request->getPost('item_details');
+ $quantities = $this->request->getPost('quantity');
+ // $discounts = $this->request->getPost('discount_amount');
+ // $discount_types = $this->request->getPost('discount_type');
+ $amounts = $this->request->getPost('amount');
+ $itemtax=$this->request->getPost('item-tax');
+ $unitprice=$this->request->getPost('unit-price');
+ $selected_items=$this->request->getPost('selected_items');
+ $purchase_order_child_id = $this->request->getPost('purchase_order_child_id');
+ // print_r($selected_items);die;
+
+ // print_r($status);die;
+ $status = $this->request->getPost('purchase_status');
+ foreach ($product_ids as $key => $product_id) {
+ $qty = isset($quantities[$key]) ? $quantities[$key] : 0;
+ $selected_item= isset($selected_items[$key]) ? $selected_items[$key] : 0;
+ // print_r($selected_item);die;
+ if ($status == 'Released' && $selected_item == 1) {
+ $this->addBackProductQuantity($ProductModel, $product_id, $qty);
+ }
+
+ $discount = isset($discounts[$key]) ? $discounts[$key] : 0;
+ $discount_type = isset($discount_types[$key]) ? $discount_types[$key] : '';
+ $tax=isset($itemtax[$key]) ? $itemtax[$key] : 0;
+ $rate=isset($unitprice[$key]) ? $unitprice[$key] : 0;
+ $amount = isset($amounts[$key]) ? $amounts[$key] : 0;
+
+ // $new_qty = $this->calculateUpdatedQuantity($ProductModel, $product_id, $qty);
+ // print_r($discount_type);die;
+ $child_data = [
+ 'purchase_order_id' => $purchase_order_id,
+ 'product_id' => $product_id,
+ 'qty' => $qty,
+ // 'discount' => $discount,
+ // 'discount_type' => $discount_type,
+ 'net_price'=>$rate,
+ 'tax'=>$tax,
+ 'amount' => $amount,
+ 'is_selected'=>$selected_item,
+ 'isactive'=>1,
+ ];
+ // print_r($child_data);die;
+ if (!empty($purchase_order_child_id[$key])) {
+
+ // print_r($purchase_order_child_id[$key]);die;
+ $PurchaseOrderChildModel->update($purchase_order_child_id[$key], $child_data);
+
+ } else {
+ $PurchaseOrderChildModel->insert($child_data);
+
+ }
+
+
+ }
+
+
+ return redirect()->to('purchase_index');
+ }
+ private function addBackProductQuantity($ProductModel, $product_id, $sold_qty)
+{
+
+ // Fetch current product quantity
+ $product = $ProductModel->find($product_id);
+ $current_qty = $product['qty_stock'];
+
+ // Calculate updated quantity
+ $new_qty = $current_qty + $sold_qty;
+
+ // Update quantity in Product table
+ $ProductModel->update($product_id, ['qty_stock' => $new_qty]);
+}
+
+ public function delete_purchase($purchase_order_id)
+ {
+ $PurchaseOrderModel = new PurchaseOrderModel();
+ $where = ['purchase_order_id' => $purchase_order_id, 'isactive' => 1 ]; // Assuming 'isactive' is a column in your database
+ $existingPurchase = $PurchaseOrderModel->where($where)->first();
+
+ if ($existingPurchase) {
+ $data['isactive'] = 0;
+
+ if ($PurchaseOrderModel->update($purchase_order_id, $data)) {
+ session()->setFlashdata('success', 'Deleted successfully.');
+ $this->logger->info("Purchase Order: has been Inactivated successfully. Inactivated ID = ".$purchase_order_id);
+ }
+ }
+
+
+ return redirect()->to('purchase_index');
+ }
+
+
+
+
+ public function get_vendor($vendor_id)
+ {
+
+ $VendorModel = new VendorModel();
+
+ $products =$VendorModel->where('vendor_id',$vendor_id)->select('vendor_name,contact_person_name1,contact_person_mobile1')->get()->getRowArray();
+
+
+ return json_encode($products);
+
+ }
+ public function getVendorProducts()
+{
+ // Retrieve make_id and model_id from the request
+ // $makeId = $this->request->getPost('');
+ $vendorId = $this->request->getPost('vendor_id');
+
+ // Encode the modelId before searching
+ $encodedVendorId = json_encode([$vendorId]);
+
+ // Load the ProductModel
+ $productModel = new ProductModel();
+
+ // Query the database to find the product based on make_id and model_id
+ $product = $productModel
+ ->where('JSON_CONTAINS(vendor, \'' . $encodedVendorId . '\')', null, false)
+ ->findAll();
+
+ // print_r($product);die;
+ if($product){
+ // Send JSON response
+ return $this->response->setJSON(['product'=>$product] );
+ } else {
+ // If product is not found, return an empty response or appropriate message
+ return $this->response->setJSON(['product'=>[] , 'modelName'=>$modelName ,'makeName'=>$makeName]);
+ }
+}
+public function delete_purchase_product()
+{
+ $purchase_order_child_id = $this->request->getPost('purchase_order_child_id');
+
+ if (!empty($purchase_order_child_id)) {
+ $PurchaseOrderChildModel = new PurchaseOrderChildModel();
+ $data['isactive'] = 0;
+
+ if ($PurchaseOrderChildModel->update($purchase_order_child_id, $data)) {
+ // Return success response
+ return $this->response->setJSON(['success' => true]);
+ }
+ }
+
+ // Return error response if deletion fails
+ return $this->response->setJSON(['success' => false]);
+}
+public function download_purchase_invoice($purchase_order_id)
+{
+ // echo "hello"; die;
+ // Fetch the invoice data based on $invoice_id
+ $model = new PurchaseOrderModel();
+ $data = $model->getPurchasePdf($purchase_order_id);
+
+ $items = $model->getPurchaseOrderProductsForPdf($purchase_order_id);
+
+
+
+ // print_r($items);die();
+
+ // print_r($invoiceItems);die();
+
+ // 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)
+ // if ($data[0]->status === 'Draft') {
+ // // Set the watermark text and options
+ // $mpdf->SetWatermarkText('Draft');
+ // $mpdf->showWatermarkText = true;
+ // }
+ // if ($data[0]->status === 'Cancelled') {
+ // // Set the watermark text and options
+ // $mpdf->SetWatermarkText('Cancelled');
+ // $mpdf->showWatermarkText = true;
+ // }
+ // if ($data[0]->status === 'Void') {
+ // // Set the watermark text and options
+ // $mpdf->SetWatermarkText('Void');
+ // $mpdf->showWatermarkText = true;
+ // }
+
+
+ // Generate the PDF content (HTML) with data
+ $html = view('invoice_purchase_template', ['sales' => $data,'items'=>$items]);
+// echo $html;die;
+ // Load HTML into the mPDF instance
+ $mpdf->WriteHTML($html);
+
+ // Output the PDF to the browser for download
+ $mpdf->Output('invoice_' . date('Y-m-d H-i-s') . '.pdf', 'D');
+}
+}
\ No newline at end of file
diff --git a/app/Controllers/Sales.php b/app/Controllers/Sales.php
index a746dc4..428e09f 100644
--- a/app/Controllers/Sales.php
+++ b/app/Controllers/Sales.php
@@ -69,6 +69,7 @@ class Sales extends BaseController
$SalesOrderModel = new SalesOrderModel();
$sales=$SalesOrderModel->where('sales_order_id', $sales_order_id)->get()->getRowArray();
$data['sales']=$sales;
+
$VehicleModel = new VehicleModel();
$vehicles = $VehicleModel->where('isactive',1)->where('vehicle_id',$sales['vehicle_id'])
->where('branch_id',$this->session->get('logged_user_branch_id'))
@@ -133,7 +134,7 @@ $VehicleModel = new VehicleModel();
'isactive' => 1, // Assuming this is a default value or handled separately
'branch_id'=> $this->session->get('logged_user_branch_id'),
];
-// print_r($data);die;
+// print_r($data);die;
// Insert or update sales order
$sales_order_id = $this->request->getPost('sales_order_id');
if (!empty($sales_order_id)) {
@@ -143,7 +144,7 @@ $VehicleModel = new VehicleModel();
$SalesOrderModel->insert($data);
$sales_order_id = $SalesOrderModel->getInsertID(); // Get the last inserted ID
}
- $orderNumber = 'SO-' . date('md') . '-' . str_pad($sales_order_id, 5, '0', STR_PAD_LEFT);
+ $orderNumber = 'SO' . str_pad($sales_order_id, 8, '0', STR_PAD_LEFT);
// print_r($orderNumber);die;
// Update sales order with generated order number
$SalesOrderModel->update($sales_order_id, ['order_number' => $orderNumber]);
diff --git a/app/Models/PurchaseOrderChildModel.php b/app/Models/PurchaseOrderChildModel.php
new file mode 100644
index 0000000..0473c36
--- /dev/null
+++ b/app/Models/PurchaseOrderChildModel.php
@@ -0,0 +1,11 @@
+select('purchase_order.*, COUNT(purchase_order_child.purchase_order_id) AS product_count,vendor.vendor_name');
+
+ // Join the sales_order_product table based on sales_order_id
+ $this->join('purchase_order_child', 'purchase_order_child.purchase_order_id = purchase_order.purchase_order_id');
+ $this ->join('vendor', 'vendor.vendor_id = purchase_order.vendor_id');
+ // Group by sales_order_id to get count of products per sales order
+ $this->groupBy('purchase_order.purchase_order_id');
+ // Add condition to fetch only active sales orders
+ $this->where('purchase_order_child.isactive', 1);
+ $this ->where('purchase_order.branch_id',$logged_user_branch_id);
+ $this->orderBy('purchase_order.purchase_order_id','DESC');
+ // Get the results
+ return $this->findAll();
+ }
+ public function getPurchasePdf($purchase_order_id){
+ return $this->db->table('purchase_order')
+ ->where('purchase_order_id', $purchase_order_id)
+
+ ->join('branches as B','B.branch_id = purchase_order.branch_id','left')
+ ->join('vendor as V','V.vendor_id = purchase_order.vendor_id','left')
+ ->select('purchase_order.*')
+ ->select('V.vendor_name,V.contact_person_mobile1,V.address as vendor_address,V.city as vendor_city,V.state,V.postal_code as vendor_postal,B.branch_name ,B.address as company_address,B.city as company_city,B.state as company_state,B.postal_code as company_postal_code,B.mobile_no as company_mobile_no')
+
+ ->get()
+ ->getResult();
+ }
+ public function getPurchaseOrderProductsForPdf($purchase_order_id)
+ {
+ // Select required fields from the sales_order_product table
+ $result = $this->db->table('purchase_order_child')
+ ->where('purchase_order_child.purchase_order_id', $purchase_order_id)
+ ->join('products', 'products.product_id = purchase_order_child.product_id')
+ ->select('purchase_order_child.*, products.product_name')
+ ->get()
+ ->getResult();
+
+ return $result;
+ }
+ public function getdata($logged_user_branch_id)
+ {
+ $result = $this->db->table('purchase_order')
+
+ ->join('purchase_order_child','purchase_order_child.product_id=purchase_order_child.product_id')
+ ->join('products', 'products.product_id = purchase_order_child.product_id')
+ ->join('vendor', 'vendor.vendor_id = purchase_order.vendor_id')
+ ->select('purchase_order_child.*,vendor.*, products.product_name')
+ ->get()
+ ->getResult();
+
+ return $result;
+ }
}
\ No newline at end of file
diff --git a/app/Models/ReturnModel.php b/app/Models/ReturnModel.php
new file mode 100644
index 0000000..6d3d8c6
--- /dev/null
+++ b/app/Models/ReturnModel.php
@@ -0,0 +1,9 @@
+order_number) ? 'Order # ' . $value->order_number : 'Invoice # ' . $value->invoice_number; ?>
- Invoice Date : = date('d-m-Y', strtotime($value->created_at)) ?>
+ Date : = date('d-m-Y', strtotime($value->created_at)) ?>
diff --git a/app/Views/invoice_purchase_template.php b/app/Views/invoice_purchase_template.php
new file mode 100644
index 0000000..c3267e4
--- /dev/null
+++ b/app/Views/invoice_purchase_template.php
@@ -0,0 +1,302 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ THE MECHANIC
+
+
+
+
+
+
+ = $value->company_address ?>,
+ = $value->company_city ?>,
+ = $value->company_state ?>
+ = $value->company_postal_code ?>.
+
+ = $value->company_mobile_no ?>
+
+
+
+
+
+
+
+
+
+ order_number) ? 'Order # ' . $value->order_number : 'Invoice # ' . $value->invoice_number; ?>
+
+
+ Date : = date('d-m-Y', strtotime($value->created_at)) ?>
+
+
+
+ Status := $value->status ?>
+
+
+
+
+
+
+
+
+
+ Vendor Address
+ Shipping Address
+
+
+
+
+
+ = $value->vendor_name ?>
+ = $value->vendor_address != '' ? $value->vendor_address." , " : ''; ?>
+ = $value->vendor_city ?>
+ vendor_postal!=0): ?>
+ = $value->vendor_postal ?>
+
+ = $value->contact_person_mobile1." ." ?>
+
+
+
+
+
+
+
+ = $value->billing_address != '' ? $value->vendor_address." , " : ''; ?>
+ = $value->billing_city ?>
+ billing_postal_code!=0): ?>
+ = $value->billing_postal_code ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+status === 'Approved'): ?>
+
+ Paid : ₹= number_format($value->total_amount, 2, '.', ',') ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
= $value->terms_condition;?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/Views/layout/header.php b/app/Views/layout/header.php
index 768947e..6a338d9 100644
--- a/app/Views/layout/header.php
+++ b/app/Views/layout/header.php
@@ -124,6 +124,8 @@
+
+
get('logged_user_role') == 'Floor Manager' ||
session()->get('logged_user_role') == 'Job Card Manager' ||
@@ -147,7 +149,7 @@
Vendor
- Purchase
+ Purchase Order
@@ -159,18 +161,7 @@
-
-
-
-
-
-
-
-
- Make & Models
-
-
-
+
@@ -178,10 +169,21 @@
+
+
+
Reorder Level Products
+
+
+
+
+ Return Products
+
+
+
@@ -209,20 +211,18 @@
-
-
+
diff --git a/app/Views/product_form.php b/app/Views/product_form.php
index 1db817f..ceb66cb 100644
--- a/app/Views/product_form.php
+++ b/app/Views/product_form.php
@@ -26,59 +26,62 @@
Product Name*
- Manufacturer*
-
- Select a Manufacturer
-
- >
- = $value['manufacturer_name'] ?>
-
-
-
-
-
- Quality*
-
-
-
-
+ Manufacturer*
+
+ Select a Manufacturer
+
+ >
+ = $value['manufacturer_name'] ?>
+
+
+
+
+
+ Quality*
+
+
+
+
Manfacturer Part Number
-
+
+ Submit
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+function initializeSelect2() {
+ $('.SelExample').select2({
+ width: '249px' // Adjust width as needed
+ });
+ }
+
\ No newline at end of file
+ .select2-container--default .select2-selection--single .select2-selection__arrow{
+ top:4px;
+ }
+
+
+
diff --git a/app/Views/purchase_list.php b/app/Views/purchase_list.php
index 4ca0f97..c171e8e 100644
--- a/app/Views/purchase_list.php
+++ b/app/Views/purchase_list.php
@@ -1,4 +1,25 @@
+