CouponController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Coupon;
  5. use App\Traits\Coupon as CouponTrait;
  6. use Illuminate\Http\Request;
  7. use Carbon\Carbon;
  8. class CouponController extends Controller
  9. {
  10. const READ_PERMISSION = "admin.coupons.read";
  11. const WRITE_PERMISSION = "admin.coupons.write";
  12. use CouponTrait;
  13. /**
  14. * Display a listing of the resource.
  15. *
  16. * @return \Illuminate\Http\Response
  17. */
  18. public function index()
  19. {
  20. $this->checkPermission(self::READ_PERMISSION);
  21. return view('admin.coupons.index');
  22. }
  23. /**
  24. * Show the form for creating a new resource.
  25. *
  26. * @return \Illuminate\Http\Response
  27. */
  28. public function create()
  29. {
  30. $this->checkPermission(self::WRITE_PERMISSION);
  31. return view('admin.coupons.create');
  32. }
  33. /**
  34. * Store a newly created resource in storage.
  35. *
  36. * @param \Illuminate\Http\Request $request
  37. * @return \Illuminate\Http\Response
  38. */
  39. public function store(Request $request)
  40. {
  41. $coupon_code = $request->input('coupon_code');
  42. $coupon_type = $request->input('coupon_type');
  43. $coupon_value = $request->input('coupon_value');
  44. $coupon_max_uses = $request->input('coupon_uses');
  45. $coupon_datepicker = $request->input('datepicker');
  46. $random_codes_amount = $request->input('range_codes');
  47. $rules = [
  48. "coupon_type" => "required|string|in:percentage,amount",
  49. "coupon_uses" => "required|integer|digits_between:1,100",
  50. "coupon_value" => "required|numeric|between:0,100",
  51. "datepicker" => "required|date|after:" . Carbon::now()->format(Coupon::formatDate())
  52. ];
  53. // If for some reason you pass both fields at once.
  54. if ($coupon_code && $random_codes_amount) {
  55. return redirect()->back()->with('error', __('Only one of the two code inputs must be provided.'))->withInput($request->all());
  56. }
  57. if (!$coupon_code && !$random_codes_amount) {
  58. return redirect()->back()->with('error', __('At least one of the two code inputs must be provided.'))->withInput($request->all());
  59. }
  60. if ($coupon_code) {
  61. $rules['coupon_code'] = 'required|string|min:4';
  62. } elseif ($random_codes_amount) {
  63. $rules['range_codes'] = 'required|integer|digits_between:1,100';
  64. }
  65. $request->validate($rules);
  66. if (array_key_exists('range_codes', $rules)) {
  67. $data = [];
  68. $coupons = Coupon::generateRandomCoupon($random_codes_amount);
  69. // Scroll through all the randomly generated coupons.
  70. foreach ($coupons as $coupon) {
  71. $data[] = [
  72. 'code' => $coupon,
  73. 'type' => $coupon_type,
  74. 'value' => $coupon_value,
  75. 'max_uses' => $coupon_max_uses,
  76. 'expires_at' => $coupon_datepicker,
  77. 'created_at' => Carbon::now(), // Does not fill in by itself when using the 'insert' method.
  78. 'updated_at' => Carbon::now()
  79. ];
  80. }
  81. Coupon::insert($data);
  82. } else {
  83. Coupon::create([
  84. 'code' => $coupon_code,
  85. 'type' => $coupon_type,
  86. 'value' => $coupon_value,
  87. 'max_uses' => $coupon_max_uses,
  88. 'expires_at' => $coupon_datepicker,
  89. ]);
  90. }
  91. return redirect()->route('admin.coupons.index')->with('success', __("The coupon's was registered successfully."));
  92. }
  93. /**
  94. * Display the specified resource.
  95. *
  96. * @param \App\Models\Coupon $coupon
  97. * @return \Illuminate\Http\Response
  98. */
  99. public function show(Coupon $coupon)
  100. {
  101. //
  102. }
  103. /**
  104. * Show the form for editing the specified resource.
  105. *
  106. * @param \App\Models\Coupon $coupon
  107. * @return \Illuminate\Http\Response
  108. */
  109. public function edit(Coupon $coupon)
  110. {
  111. //
  112. }
  113. /**
  114. * Update the specified resource in storage.
  115. *
  116. * @param \Illuminate\Http\Request $request
  117. * @param \App\Models\Coupon $coupon
  118. * @return \Illuminate\Http\Response
  119. */
  120. public function update(Request $request, Coupon $coupon)
  121. {
  122. //
  123. }
  124. /**
  125. * Remove the specified resource from storage.
  126. *
  127. * @param \App\Models\Coupon $coupon
  128. * @return \Illuminate\Http\Response
  129. */
  130. public function destroy(Coupon $coupon)
  131. {
  132. //
  133. }
  134. public function redeem(Request $request)
  135. {
  136. return $this->validateCoupon($request->user(), $request->input('couponCode'), $request->input('productId'));
  137. }
  138. }