CustomerController.php 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Customer;
  4. use App\Models\SaleDetail;
  5. use App\Exports\CustomerHistoryExport;
  6. use App\Http\Requests\Customer\StoreCustomerRequest;
  7. use App\Http\Requests\Customer\UpdateCustomerRequest;
  8. class CustomerController extends Controller
  9. {
  10. public function __construct()
  11. {
  12. $this->authorizeResource(Customer::class);
  13. }
  14. /**
  15. * Display a listing of the resource.
  16. *
  17. * @return \Illuminate\Http\Response
  18. */
  19. public function index()
  20. {
  21. return inertia("Customers/Index", [
  22. "initialFilters" => request()->only("search"),
  23. "customers" => Customer::search(request()->only("search"))
  24. ->latest()
  25. ->paginate(10)
  26. ->withQueryString()
  27. ->through(
  28. fn($customer) => [
  29. "id" => $customer->id,
  30. "name" => $customer->name,
  31. "address" => $customer->address,
  32. "phone" => $customer->phone,
  33. "npwp" => $customer->npwp,
  34. "isUsed" => $customer->sales()->exists(),
  35. ]
  36. ),
  37. ]);
  38. }
  39. /**
  40. * Show the form for creating a new resource.
  41. *
  42. * @return \Illuminate\Http\Response
  43. */
  44. public function create()
  45. {
  46. return inertia("Customers/Create");
  47. }
  48. /**
  49. * Store a newly created resource in storage.
  50. *
  51. * @param \Illuminate\Http\Request $request
  52. * @return \Illuminate\Http\Response
  53. */
  54. public function store(StoreCustomerRequest $request)
  55. {
  56. Customer::create($request->validated());
  57. return back()->with("success", __("messages.success.store.customer"));
  58. }
  59. /**
  60. * Display the specified resource.
  61. *
  62. * @param Customer $customer
  63. * @return \Illuminate\Http\Response
  64. */
  65. public function show(Customer $customer)
  66. {
  67. return inertia("Customers/Show", [
  68. "initialFilters" => request()->only(
  69. "start_date",
  70. "end_date",
  71. "number_product"
  72. ),
  73. "customer" => $customer,
  74. "historyPurchase" => $customer
  75. ->sales()
  76. ->filter(
  77. request()->only("start_date", "end_date", "product_number")
  78. )
  79. ->latest()
  80. ->paginate(1)
  81. ->withQueryString()
  82. ->through(
  83. fn($sale) => [
  84. "id" => $sale->id,
  85. "createdAt" => $sale->created_at,
  86. "number" => $sale->number,
  87. "status" => $sale->status,
  88. "ppn" => $sale->ppn,
  89. ]
  90. ),
  91. ]);
  92. }
  93. /**
  94. * Show the form for editing the specified resource.
  95. *
  96. * @param Customer $customer
  97. * @return \Illuminate\Http\Response
  98. */
  99. public function edit(Customer $customer)
  100. {
  101. return inertia("Customers/Edit", compact("customer"));
  102. }
  103. /**
  104. * Update the specified resource in storage.
  105. *
  106. * @param \Illuminate\Http\Request $request
  107. * @param Customer $customer
  108. * @return \Illuminate\Http\Response
  109. */
  110. public function update(UpdateCustomerRequest $request, Customer $customer)
  111. {
  112. $customer->update($request->validated());
  113. return back()->with("success", __("messages.success.update.customer"));
  114. }
  115. /**
  116. * Remove the specified resource from storage.
  117. *
  118. * @param Customer $customer
  119. * @return \Illuminate\Http\Response
  120. */
  121. public function destroy(Customer $customer)
  122. {
  123. $customer->delete();
  124. return back()->with("success", __("messages.success.destroy.customer"));
  125. }
  126. public function historyPurchaseExcel()
  127. {
  128. $this->authorize("viewAny", Customer::class);
  129. return new CustomerHistoryExport([
  130. "sales" => SaleDetail::filter(
  131. request()->only("start_date", "end_date", "product_number")
  132. )
  133. ->latest()
  134. ->get()
  135. ->map(
  136. fn($saleDetail) => [
  137. "createdAt" => $saleDetail->created_at,
  138. "name" => $saleDetail->product->name,
  139. "number" => $saleDetail->sale->number,
  140. "qty" => $saleDetail->qty,
  141. "status" => $saleDetail->sale->status,
  142. "ppn" => $saleDetail->sale->ppn,
  143. "price" => $saleDetail->price * $saleDetail->qty,
  144. ]
  145. ),
  146. ]);
  147. }
  148. }