SalesController.php 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\Sales\StoreSaleRequest;
  4. use App\Http\Requests\Sales\UpdateSaleRequest;
  5. use App\Models\Customer;
  6. use App\Models\Product;
  7. use App\Models\Sale;
  8. use Illuminate\Database\QueryException;
  9. use Illuminate\Support\Facades\DB;
  10. use Inertia\Inertia;
  11. class SalesController extends Controller
  12. {
  13. public function __construct()
  14. {
  15. $this->authorizeResource(Sale::class);
  16. }
  17. /**
  18. * Display a listing of the resource.
  19. *
  20. * @return \Illuminate\Http\Response
  21. */
  22. public function index()
  23. {
  24. return inertia('Sales/Index', [
  25. 'initialSearch' => request('search'),
  26. 'sales' => Sale::filter(request()->only('search'))
  27. ->latest()
  28. ->paginate(10)
  29. ->withQueryString()
  30. ->through(fn($sale) => [
  31. 'id' => $sale->id,
  32. 'updatedAt' => $sale->updated_at,
  33. 'number' => $sale->number,
  34. 'status' => $sale->status,
  35. 'price' => $sale->saleDetail->price,
  36. 'ppn' => $sale->saleDetail->ppn . '%',
  37. 'qty' => $sale->saleDetail->qty,
  38. 'productName' => $sale->product->name,
  39. 'productNumber' => $sale->product->number
  40. ])
  41. ]);
  42. }
  43. /**
  44. * Show the form for creating a new resource.
  45. *
  46. * @return \Illuminate\Http\Response
  47. */
  48. public function create()
  49. {
  50. return inertia('Sales/Create', [
  51. 'number' => 'PJN' . now()->format('YmdHis'),
  52. 'productNumber' => Inertia::lazy(
  53. fn() => 'PDK' . now()->format('YmdHis')
  54. ),
  55. 'customers' => Inertia::lazy(
  56. fn() => Customer::filter(['search' => request('customer')])
  57. ->get()
  58. ->transform(fn($customer) => [
  59. 'id' => $customer->id,
  60. 'name' => $customer->name,
  61. 'address' => $customer->address,
  62. 'npwp' => $customer->npwp
  63. ])),
  64. 'products' => Inertia::lazy(
  65. fn() => Product::filter(['search' => request('product')])
  66. ->get()
  67. ->transform(fn($product) => [
  68. 'id' => $product->id,
  69. 'number' => $product->number,
  70. 'name' => $product->name,
  71. 'unit' => $product->unit
  72. ])
  73. )
  74. ]);
  75. }
  76. /**
  77. * Store a newly created resource in storage.
  78. *
  79. * @param \Illuminate\Http\Request $request
  80. * @return \Illuminate\Http\Response
  81. */
  82. public function store(StoreSaleRequest $request)
  83. {
  84. DB::beginTransaction();
  85. try {
  86. $validated = $request->safe()->merge([
  87. 'user_id' => auth()->user()->id,
  88. 'ppn' => 11
  89. ])->all();
  90. $sale = Sale::create($validated);
  91. $sale->saleDetail()->create($validated);
  92. DB::commit();
  93. return back()->with('success', __('messages.success.store.sale'));
  94. } catch (QueryException $e) {
  95. DB::rollBack();
  96. return back()->with('error', __('messages.error.store.sale'));
  97. }
  98. }
  99. /**
  100. * Display the specified resource.
  101. *
  102. * @param Sale $sale
  103. * @return \Illuminate\Http\Response
  104. */
  105. public function show(Sale $sale)
  106. {
  107. //
  108. }
  109. /**
  110. * Show the form for editing the specified resource.
  111. *
  112. * @param Sale $sale
  113. * @return \Illuminate\Http\Response
  114. */
  115. public function edit(Sale $sale)
  116. {
  117. return inertia('Sales/Edit', [
  118. 'sale' => [
  119. 'id' => $sale->id,
  120. 'number' => $sale->number,
  121. 'status' => $sale->status,
  122. 'price' => $sale->saleDetail->getRawOriginal('price'),
  123. 'qty' => $sale->saleDetail->qty,
  124. 'ppn' => $sale->saleDetail->ppn,
  125. 'customer' => $sale->customer,
  126. 'product' => $sale->product
  127. ]
  128. ]);
  129. }
  130. /**
  131. * Update the specified resource in storage.
  132. *
  133. * @param \Illuminate\Http\Request $request
  134. * @param Sale $sale
  135. * @return \Illuminate\Http\Response
  136. */
  137. public function update(UpdateSaleRequest $request, Sale $sale)
  138. {
  139. DB::beginTransaction();
  140. try {
  141. $sale->create($request->validated());
  142. $sale->saleDetail()->create($request->validated());
  143. DB::commit();
  144. return back()->with('succes', __('messages.success.update.sale'));
  145. } catch (QueryException $e) {
  146. DB::rollBack();
  147. return back()->with('error', __('messages.error.update.sale'));
  148. }
  149. }
  150. /**
  151. * Remove the specified resource from storage.
  152. *
  153. * @param Sale $sale
  154. * @return \Illuminate\Http\Response
  155. */
  156. public function destroy(Sale $sale)
  157. {
  158. //
  159. }
  160. }