Files
Kent-logistics-Laravel/app/Http/Controllers/Admin/AdminCustomerController.php

163 lines
4.9 KiB
PHP
Raw Normal View History

2025-11-18 10:01:59 +05:30
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
class AdminCustomerController extends Controller
{
2025-11-27 19:39:36 +05:30
2025-11-18 10:01:59 +05:30
// ---------------------------------------------------------
// LIST CUSTOMERS (with search + status filter)
// ---------------------------------------------------------
public function index(Request $request)
2025-11-27 19:39:36 +05:30
{
$search = $request->search;
$status = $request->status;
2025-12-22 19:22:01 +05:30
$query = User::with([
'marks',
'orders',
'invoices.installments' // 🔥 IMPORTANT
])->orderBy('id', 'desc');
2025-11-27 19:39:36 +05:30
if (!empty($search)) {
$query->where(function ($q) use ($search) {
$q->where('customer_name', 'like', "%$search%")
2025-12-22 19:22:01 +05:30
->orWhere('email', 'like', "%$search%")
->orWhere('mobile_no', 'like', "%$search%")
->orWhere('customer_id', 'like', "%$search%");
2025-11-27 19:39:36 +05:30
});
}
2025-11-18 10:01:59 +05:30
2025-11-27 19:39:36 +05:30
if (!empty($status) && in_array($status, ['active', 'inactive'])) {
$query->where('status', $status);
}
2025-11-18 10:01:59 +05:30
2025-11-27 19:39:36 +05:30
$allCustomers = $query->get();
$customers = $query->paginate(10);
2025-11-18 10:01:59 +05:30
2025-12-22 19:22:01 +05:30
return view('admin.customers', compact(
'customers',
'allCustomers',
'search',
'status'
));
2025-11-27 19:39:36 +05:30
}
2025-11-18 10:01:59 +05:30
2025-12-22 19:22:01 +05:30
2025-11-18 10:01:59 +05:30
// ---------------------------------------------------------
// SHOW ADD CUSTOMER FORM
// ---------------------------------------------------------
public function create()
{
return view('admin.customers_add');
}
// ---------------------------------------------------------
// STORE NEW CUSTOMER
// ---------------------------------------------------------
public function store(Request $request)
{
$request->validate([
'customer_name' => 'required|string|max:255',
'company_name' => 'nullable|string|max:255',
'designation' => 'nullable|string|max:255',
'email' => 'required|email|unique:users,email',
'mobile_no' => 'required|string|max:20',
'address' => 'nullable|string',
'pincode' => 'nullable|string|max:10',
'customer_type' => 'required|in:regular,premium',
'status' => 'required|in:active,inactive',
]);
// AUTO GENERATE CUSTOMER ID
$year = date('Y');
$prefix = "CID-$year-";
$lastCustomer = User::whereYear('created_at', $year)
->orderBy('id', 'DESC')
->first();
$next = $lastCustomer ? intval(substr($lastCustomer->customer_id, -6)) + 1 : 1;
$customerId = $prefix . str_pad($next, 6, '0', STR_PAD_LEFT);
// CREATE CUSTOMER
User::create([
'customer_id' => $customerId,
'customer_name' => $request->customer_name,
'company_name' => $request->company_name,
'designation' => $request->designation,
'email' => $request->email,
'mobile_no' => $request->mobile_no,
'address' => $request->address,
'pincode' => $request->pincode,
'date' => date('Y-m-d'),
'customer_type' => $request->customer_type,
'status' => $request->status,
'password' => Hash::make('123456'), // DEFAULT PASSWORD
]);
return redirect()
->route('admin.customers.index')
->with('success', 'Customer added successfully!');
}
// ---------------------------------------------------------
// VIEW CUSTOMER FULL DETAILS
// ---------------------------------------------------------
public function view($id)
2025-12-22 19:22:01 +05:30
{
$customer = User::with([
'marks',
'orders',
'invoices.installments'
])->findOrFail($id);
// Orders
$totalOrders = $customer->orders->count();
$totalOrderAmount = $customer->orders->sum('ttl_amount');
// Invoices (PAYABLE)
$totalPayable = $customer->invoices->sum('final_amount_with_gst');
// Paid via installments
$totalPaid = $customer->invoiceInstallments->sum('amount');
// Remaining
$totalRemaining = max($totalPayable - $totalPaid, 0);
return view('admin.customers_view', compact(
'customer',
'totalOrders',
'totalOrderAmount',
'totalPayable',
'totalPaid',
'totalRemaining'
));
}
2025-11-18 10:01:59 +05:30
// ---------------------------------------------------------
// TOGGLE STATUS ACTIVE / INACTIVE
// ---------------------------------------------------------
public function toggleStatus($id)
{
$customer = User::findOrFail($id);
$customer->status = $customer->status === 'active'
? 'inactive'
: 'active';
$customer->save();
return back()->with('success', 'Customer status updated.');
}
2025-11-27 19:39:36 +05:30
2025-11-18 10:01:59 +05:30
}