EVOLUTION-NINJA
Edit File: AEController.php
<?php namespace App\Controllers; use App\Models\AETransactionModel; use App\Models\CreateCustomerModel; use App\Models\ProductModel; use App\Models\DealerModel; class AEController extends BaseController { // 🔹 Load AE Form public function index() { $customerModel = new CreateCustomerModel(); $productModel = new ProductModel(); $data['customers'] = $customerModel->findAll(); $data['products'] = $productModel->findAll(); return view('AEmaster/ae_transaction_form', $data); } public function save() { try { $model = new \App\Models\AETransactionModel(); // ✅ 1. GET INPUTS FIRST $customer_id = $this->request->getPost('customer_id'); $dealer_name = $this->request->getPost('dealer_name'); $db = \Config\Database::connect(); // ✅ 2. VALIDATION (PASTE YOUR CODE HERE) $lastTransaction = $db->table('ae_transactions') ->where('customer_id', $customer_id) ->where('dealer_name', $dealer_name) ->orderBy('created_at', 'DESC') ->get() ->getRowArray(); if ($lastTransaction) { $createdAt = strtotime($lastTransaction['created_at']); $fiveYearsAgo = strtotime('-5 years'); if ($createdAt > $fiveYearsAgo) { return $this->response->setJSON([ 'status' => 0, 'message' => 'This customer already purchased from this dealer within 5 years. Not eligible yet.' ]); } } // ✅ 3. AFTER VALIDATION → PREPARE DATA $data = [ 'customer_id' => $customer_id, 'product_id' => $this->request->getPost('product_id'), 'rc_price' => $this->request->getPost('rc_price'), 'subsidy_amount' => $this->request->getPost('subsidy_amount'), 'farmer_share' => $this->request->getPost('farmer_share'), 'ae_commission' => $this->request->getPost('ae_commission'), 'gst_difference' => $this->request->getPost('gst_difference'), 'billing_price' => $this->request->getPost('billing_price'), 'subsidy_utr' => $this->request->getPost('subsidy_utr'), 'subsidy_date' => $this->request->getPost('subsidy_date'), 'tds' => $this->request->getPost('tds'), 'gst' => $this->request->getPost('gst'), 'dealer_name' => $dealer_name, ]; // ✅ 4. INSERT if (!$model->insert($data)) { return $this->response->setJSON([ 'status' => 0, 'errors' => $model->errors() ]); } return $this->response->setJSON([ 'status' => 1, 'message' => 'Data saved successfully' ]); } catch (\Throwable $e) { return $this->response->setJSON([ 'status' => 0, 'error' => $e->getMessage() ]); } } // 🔹 Get Product Details (AJAX) public function getProductDetails() { $productModel = new ProductModel(); $product_id = $this->request->getPost('product_id'); $product = $productModel->find($product_id); if ($product) { return $this->response->setJSON([ 'status' => 1, 'data' => $product ]); } else { return $this->response->setJSON(['status' => 0]); } } // 🔹 AE Report // public function report() // { // $db = \Config\Database::connect(); // $data['records'] = $db->table('ae_transactions a') // ->select(' // a.*, // c.farmer_name, // c.address, // d.name as dealer_name, // p.model_name // ') // ->join('create_customer c', 'c.id = a.customer_id') // ->join('dealers d', 'd.id = c.dealer_id') // ->join('products p', 'p.product_id = a.product_id') // ->orderBy('a.id', 'DESC') // ->get() // ->getResultArray(); // return view('AEmaster/ae_report', $data); // } public function reportPage() { return view('AEmaster/ae_report'); } // working // public function getReport() // { // $search = $this->request->getGet('search'); // $db = \Config\Database::connect(); // $builder = $db->table('ae_transactions a') // ->select(' // a.*, // c.farmer_name, // d.name as dealer_name, // p.model_name // ') // ->join('create_customer c', 'c.id = a.customer_id', 'left') // // ->join('dealers d', 'd.id = c.dealer_id', 'left') // ->join('dealers d', 'd.dealer_code = c.dealer_id', 'left') // ✅ HERE // ->join('products p', 'p.product_id = a.product_id', 'left'); // if (!empty($search)) { // $builder->groupStart() // ->like('c.farmer_name', $search) // ->orLike('p.model_name', $search) // ->orLike('d.name', $search) // ->groupEnd(); // } // return $this->response->setJSON( // $builder->orderBy('a.id', 'DESC')->get()->getResultArray() // ); // } // public function getReport() // { // $db = \Config\Database::connect(); // $builder = $db->table('ae_transactions a') // ->select(' // a.*, // c.farmer_name, // d.name as dealer_name, // p.model_name, // ap.subsidy_amount as paid_subsidy, // ap.farmer_share as paid_farmer_share // ') // ->join('create_customer c', 'c.id = a.customer_id', 'left') // ->join('dealers d', 'd.dealer_code = c.dealer_id', 'left') // ->join('products p', 'p.product_id = a.product_id', 'left') // ->join('ae_payments ap', 'ap.transaction_id = a.id', 'left'); // // ✅ Filters // $farmer = $this->request->getPost('farmer_name'); // $dealer = $this->request->getPost('dealer_name'); // $model = $this->request->getPost('model_name'); // if ($farmer) { // $builder->where('c.farmer_name', $farmer); // } // if ($dealer) { // $builder->where('d.name', $dealer); // } // if ($model) { // $builder->where('p.model_name', $model); // } // return $this->response->setJSON( // $builder->orderBy('a.id', 'DESC')->get()->getResultArray() // ); // } public function getReport() { $db = \Config\Database::connect(); $builder = $db->table('ae_transactions a') ->select(' a.*, c.farmer_name, d.name as dealer_name, p.model_name, c.paid_amount as farmer_paid, ap.subsidy_amount as paid_subsidy, ap.farmer_share as paid_farmer_share ') ->join( 'create_customer c', 'c.id = a.customer_id', 'left' ) ->join( 'dealers d', 'd.dealer_code = c.dealer_id', 'left' ) ->join( 'products p', 'p.product_id = a.product_id', 'left' ) ->join( 'ae_payments ap', 'ap.transaction_id = a.id', 'left' ); // FILTERS $farmer = $this->request->getPost('farmer_name'); $dealer = $this->request->getPost('dealer_name'); $model = $this->request->getPost('model_name'); if ($farmer) { $builder->where( 'c.farmer_name', $farmer ); } if ($dealer) { $builder->where( 'd.name', $dealer ); } if ($model) { $builder->where( 'p.model_name', $model ); } return $this->response->setJSON( $builder ->orderBy('a.id', 'DESC') ->get() ->getResultArray() ); } // public function getCustomerDetails() // { // $customer_id = $this->request->getPost('customer_id'); // $db = \Config\Database::connect(); // $data = $db->table('create_customer c') // ->select('c.share_amount, d.name as dealer_name') // ->join('dealers d', 'd.id = c.dealer_id', 'left') // ->where('c.id', $customer_id) // ->get() // ->getRowArray(); // if ($data) { // return $this->response->setJSON([ // 'status' => 1, // 'data' => $data // ]); // } else { // return $this->response->setJSON(['status' => 0]); // } // } // public function getCustomerDetails() // { // $customer_id = $this->request->getPost('customer_id'); // $db = \Config\Database::connect(); // $data = $db->table('create_customer c') // ->select('c.share_amount, d.name as dealer_name') // ->join('dealers d', 'TRIM(d.dealer_code) = TRIM(c.dealer_id)', 'left') // ->where('c.id', $customer_id) // ->get() // ->getRowArray(); // return $this->response->setJSON([ // 'status' => 1, // 'data' => $data // ]); // } // public function getCustomerDetails() // { // $customer_id = $this->request->getPost('customer_id'); // $db = \Config\Database::connect(); // $data = $db->table('create_customer c') // ->select('c.share_amount, d.name as dealer_name') // ->join('dealers d', 'TRIM(d.dealer_code) = TRIM(c.dealer_id)', 'left') // ->where('c.id', $customer_id) // ->get() // ->getRowArray(); // return $this->response->setJSON([ // 'status' => 1, // 'data' => $data // ]); // } public function getCustomerDetails() { $customer_id = $this->request->getPost('customer_id'); $db = \Config\Database::connect(); $data = $db->table('create_customer c') ->select(' c.share_amount, c.product_id, d.name as dealer_name, p.model_name as product_name ') ->join( 'dealers d', 'TRIM(d.dealer_code) = TRIM(c.dealer_id)', 'left' ) ->join( 'products p', 'p.product_id = c.product_id', 'left' ) ->where('c.id', $customer_id) ->get() ->getRowArray(); return $this->response->setJSON([ 'status' => 1, 'data' => $data ]); } public function getFilters() { $db = \Config\Database::connect(); // Farmer $farmer = $db->table('create_customer') ->select('farmer_name') ->groupBy('farmer_name') ->get()->getResultArray(); // Dealer $dealer = $db->table('dealers') ->select('name as dealer_name') ->groupBy('name') ->get()->getResultArray(); // Model $model = $db->table('products') ->select('model_name') ->groupBy('model_name') ->get()->getResultArray(); return $this->response->setJSON([ 'farmer' => $farmer, 'dealer' => $dealer, 'model' => $model ]); } public function delete($id) { $model = new \App\Models\AETransactionModel(); if ($model->delete($id)) { return $this->response->setJSON(['status' => 1]); } else { return $this->response->setJSON(['status' => 0]); } } public function getSingle($id) { $db = \Config\Database::connect(); $data = $db->table('ae_transactions a') ->select('a.*, c.farmer_name, d.name as dealer_name, p.model_name') ->join('create_customer c', 'c.id = a.customer_id', 'left') ->join('dealers d', 'd.dealer_code = c.dealer_id', 'left') ->join('products p', 'p.product_id = a.product_id', 'left') ->where('a.id', $id) ->get() ->getRowArray(); return $this->response->setJSON($data); } public function edit($id) { $db = \Config\Database::connect(); $data['data'] = $db->table('ae_transactions a') ->select('a.*, c.farmer_name, d.name as dealer_name, p.model_name') ->join('create_customer c', 'c.id = a.customer_id', 'left') ->join('dealers d', 'd.dealer_code = c.dealer_id', 'left') ->join('products p', 'p.product_id = a.product_id', 'left') ->where('a.id', $id) ->get() ->getRowArray(); return view('AEmaster/ae_edit', $data); } public function update() { $model = new \App\Models\AETransactionModel(); $id = $this->request->getPost('id'); // 🔹 Get existing record $existing = $model->find($id); $oldPaid = (float) $existing['paid_amount']; $billing = (float) $existing['billing_price']; // total amount // 🔹 New payment from form $newPaid = (float) $this->request->getPost('paid_amount'); // ✅ ADD PAYMENTS $totalPaid = $oldPaid + $newPaid; // ✅ CALCULATE BALANCE $balance = $billing - $totalPaid; // 🔹 Update data $data = [ 'rc_price' => $this->request->getPost('rc_price'), 'subsidy_amount' => $this->request->getPost('subsidy_amount'), 'farmer_share' => $this->request->getPost('farmer_share'), 'ae_commission' => $this->request->getPost('ae_commission'), 'paid_amount' => $totalPaid, // ✅ updated total 'balance_amount' => $balance // ✅ updated balance ]; $model->update($id, $data); return $this->response->setJSON([ 'status' => 1, 'total_paid' => $totalPaid, 'balance' => $balance ]); } public function checkCustomerEligibility() { $customer_id = $this->request->getPost('customer_id'); $dealer_name = $this->request->getPost('dealer_name'); $db = \Config\Database::connect(); $last = $db->table('ae_transactions') ->where('customer_id', $customer_id) ->where('dealer_name', $dealer_name) ->orderBy('created_at', 'DESC') ->get() ->getRowArray(); if ($last) { $createdAt = strtotime($last['created_at']); $fiveYearsAgo = strtotime('-5 years'); if ($createdAt > $fiveYearsAgo) { return $this->response->setJSON([ 'status' => 0, 'message' => 'Customer is not eligible yet (5-year rule).' ]); } } return $this->response->setJSON([ 'status' => 1 ]); } }