VoucherController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Voucher;
  5. use Illuminate\Contracts\Foundation\Application;
  6. use Illuminate\Contracts\View\Factory;
  7. use Illuminate\Contracts\View\View;
  8. use Illuminate\Http\RedirectResponse;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Http\Response;
  11. class VoucherController extends Controller
  12. {
  13. /**
  14. * Display a listing of the resource.
  15. *
  16. * @return Application|Factory|View
  17. */
  18. public function index()
  19. {
  20. return view('admin.vouchers.index');
  21. }
  22. /**
  23. * Show the form for creating a new resource.
  24. *
  25. * @return Application|Factory|View
  26. */
  27. public function create()
  28. {
  29. return view('admin.vouchers.create');
  30. }
  31. /**
  32. * Store a newly created resource in storage.
  33. *
  34. * @param Request $request
  35. * @return RedirectResponse
  36. */
  37. public function store(Request $request)
  38. {
  39. $request->validate([
  40. 'memo' => 'sometimes|string|max:191',
  41. 'code' => 'required|string|alpha_dash|max:36',
  42. 'uses' => 'required|numeric|max:2147483647',
  43. 'credits' => 'required|numeric|between:0,99999999',
  44. 'expires_at' => 'required|date|after:today',
  45. ]);
  46. Voucher::create($request->except('_token'));
  47. return redirect()->route('admin.vouchers.index')->with('success', 'voucher has been created!');
  48. }
  49. /**
  50. * Display the specified resource.
  51. *
  52. * @param Voucher $voucher
  53. * @return Response
  54. */
  55. public function show(Voucher $voucher)
  56. {
  57. //
  58. }
  59. /**
  60. * Show the form for editing the specified resource.
  61. *
  62. * @param Voucher $voucher
  63. * @return Response
  64. */
  65. public function edit(Voucher $voucher)
  66. {
  67. //
  68. }
  69. /**
  70. * Update the specified resource in storage.
  71. *
  72. * @param Request $request
  73. * @param Voucher $voucher
  74. * @return Response
  75. */
  76. public function update(Request $request, Voucher $voucher)
  77. {
  78. //
  79. }
  80. /**
  81. * Remove the specified resource from storage.
  82. *
  83. * @param Voucher $voucher
  84. * @return RedirectResponse
  85. */
  86. public function destroy(Voucher $voucher)
  87. {
  88. $voucher->delete();
  89. return redirect()->back()->with('success', 'voucher has been removed!');
  90. }
  91. public function dataTable()
  92. {
  93. $query = Voucher::with(['users']);
  94. return datatables($query)
  95. ->addColumn('actions', function (Voucher $voucher) {
  96. return '
  97. <a data-content="Show" data-toggle="popover" data-trigger="hover" data-placement="top" href="' . route('admin.vouchers.show', $voucher->id) . '" class="btn btn-sm text-white btn-warning mr-1"><i class="fas fa-eye"></i></a>
  98. <a data-content="Edit" data-toggle="popover" data-trigger="hover" data-placement="top" href="' . route('admin.vouchers.edit', $voucher->id) . '" class="btn btn-sm btn-info mr-1"><i class="fas fa-pen"></i></a>
  99. <form class="d-inline" onsubmit="return submitResult();" method="post" action="' . route('admin.vouchers.destroy', $voucher->id) . '">
  100. ' . csrf_field() . '
  101. ' . method_field("DELETE") . '
  102. <button data-content="Delete" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm btn-danger mr-1"><i class="fas fa-trash"></i></button>
  103. </form>
  104. ';
  105. })
  106. ->addColumn('status', function (Voucher $voucher) {
  107. $color = 'success';
  108. if ($voucher->getStatus() != 'VALID') $color = 'danger';
  109. return '<span class="badge badge-'.$color.'">'. $voucher->getStatus() .'</span>';
  110. })
  111. ->editColumn('uses', function (Voucher $voucher) {
  112. $userCount = $voucher->users()->count();
  113. return "{$userCount} / {$voucher->uses}";
  114. })
  115. ->editColumn('credits', function (Voucher $voucher) {
  116. return number_format($voucher->credits, 2, '.', '');
  117. })
  118. ->editColumn('expires_at', function (Voucher $voucher) {
  119. return $voucher->expires_at ? $voucher->expires_at->diffForHumans() : '';
  120. })
  121. ->editColumn('code' , function (Voucher $voucher) {
  122. return "<code>{$voucher->code}</code>";
  123. })
  124. ->rawColumns(['actions' , 'code' , 'status'])
  125. ->make();
  126. }
  127. }