ActivityController.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Activity;
  4. use App\Models\User;
  5. use App\Models\Recipients;
  6. use App\Models\Prize;
  7. use App\Models\CheckIn;
  8. use App\Http\Requests\StoreActivityRequest;
  9. use App\Http\Requests\UpdateActivityRequest;
  10. use App\Http\Controllers\Controller;
  11. use Illuminate\Http\Request;
  12. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  13. use PhpOffice\PhpSpreadsheet\Reader\IReader;
  14. use PhpOffice\PhpSpreadsheet\Reader\Csv;
  15. use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  16. use PhpOffice\PhpSpreadsheet\Reader\Xls;
  17. use PhpOffice\PhpSpreadsheet\IOFactory;
  18. use Illuminate\Support\Facades\DB;
  19. use Illuminate\Support\Facades\File;
  20. class ActivityController extends Controller
  21. {
  22. /**
  23. * Display a listing of the resource.
  24. *
  25. * @return \Illuminate\Http\Response
  26. */
  27. public function index()
  28. {
  29. //
  30. $activities = Activity::all();
  31. return $activities;
  32. }
  33. /**
  34. * Show the form for creating a new resource.
  35. *
  36. * @return \Illuminate\Http\Response
  37. */
  38. public function create()
  39. {
  40. //
  41. }
  42. /**
  43. * Store a newly created resource in storage.
  44. *
  45. * @param \App\Http\Requests\StoreActivityRequest $request
  46. * @return \Illuminate\Http\Response
  47. */
  48. public function store(StoreActivityRequest $request)
  49. {
  50. //
  51. $activity = new Activity;
  52. $activity->activity_name = $request->activity_name;
  53. $activity->date = $request->date;
  54. $activity->place = $request->place;
  55. $activity->user_id = $request->user_id;
  56. $activity->deadline = $request->deadline;
  57. $activity->save();
  58. }
  59. /**
  60. * Display the specified resource.
  61. *
  62. * @param \App\Models\Activity $activity
  63. * @return \Illuminate\Http\Response
  64. */
  65. public function show(Activity $activity)
  66. {
  67. //
  68. }
  69. /**
  70. * Show the form for editing the specified resource.
  71. *
  72. * @param \App\Models\Activity $activity
  73. * @return \Illuminate\Http\Response
  74. */
  75. public function edit(Activity $activity)
  76. {
  77. //
  78. }
  79. /**
  80. * Update the specified resource in storage.
  81. *
  82. * @param \App\Http\Requests\UpdateActivityRequest $request
  83. * @param \App\Models\Activity $activity
  84. * @return \Illuminate\Http\Response
  85. */
  86. public function update(UpdateActivityRequest $request, Activity $activity)
  87. {
  88. //
  89. Activity::where('id', '=', $request->activity_id)->update([
  90. 'activity_name' => $request->activity_name,
  91. 'date' => $request->date,
  92. 'place' => $request->place,
  93. 'user_id' => $request->user_id,
  94. 'deadline' => $request->deadline,
  95. ]);
  96. }
  97. /**
  98. * Remove the specified resource from storage.
  99. *
  100. * @param \App\Models\Activity $activity
  101. * @return \Illuminate\Http\Response
  102. */
  103. public function destroy(Activity $activity)
  104. {
  105. //
  106. }
  107. public function claim(Request $request)
  108. {
  109. $prize = '';
  110. $prize_id = 0;
  111. $isClaimed = false;
  112. $user_id = $request->user_id;
  113. $activity_id = $request->activity_id;
  114. $user = CheckIn::where('activity_id', '=', $activity_id)
  115. ->where('user_id', '=', $user_id)->get()[0];
  116. if (Recipients::where('user_id', '=', $user_id)->exists()) {
  117. $recipients = Recipients::where('user_id', '=', $user_id)->get()[0];
  118. $prize_id = $recipients->prize_id;
  119. //因為重新匯入後prize_id在prize下面有改動,但是在recipients下面沒有改動,因此會有問題產生
  120. //檢查prize_id是不是在activity_id底下
  121. $aid = Prize::where('id', '=', $prize_id)->get()[0]->activity_id;
  122. if ($aid == $activity_id) {
  123. $isRecipients = true;
  124. $isClaimed = $recipients->is_claimed;
  125. $prize = Prize::where('id', '=', $prize_id)->get()[0]->name;
  126. } else {
  127. $isRecipients = false;
  128. }
  129. } else {
  130. $isRecipients = false;
  131. }
  132. $response = [
  133. 'user' => $user,
  134. 'isRecipients' => $isRecipients,
  135. 'isClaimed' => $isClaimed,
  136. 'prize' => $prize,
  137. 'prize_id' => $prize_id,
  138. ];
  139. return response($response, 201);
  140. }
  141. public function isClaimed(UpdateActivityRequest $request)
  142. {
  143. $recipient = Recipients::where('prize_id', '=', $request->prize_id)
  144. ->where('user_id', '=', $request->user_id)->get()[0];
  145. $recipient->is_claimed = true;
  146. $recipient->save();
  147. return $recipient;
  148. }
  149. //這邊有兩種insert,要怎麼處理StoreRequest?
  150. public function uploadFile(Request $request)
  151. {
  152. $option = $request->option;
  153. $upload_path = public_path('upload');
  154. $file_name = $request->file->getClientOriginalName();
  155. $file_path = $upload_path . '/' . $file_name;
  156. if (File::exists($file_path)) {
  157. File::delete($file_path);
  158. }
  159. $request->file->move($upload_path, $file_name);
  160. $extension = pathinfo($file_path, PATHINFO_EXTENSION);
  161. if ('csv' == $extension) {
  162. $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
  163. } else if ('xls' == $extension) {
  164. $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
  165. } else if ('xlsx' == $extension) {
  166. $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
  167. }
  168. $reader->setReadDataOnly(true);
  169. $reader->setReadEmptyCells(false);
  170. $inputFileName = public_path('upload') . '\\' . $file_name;
  171. $spreadsheet = $reader->load($inputFileName);
  172. $worksheet = $spreadsheet->getActiveSheet();
  173. $highestRow = $worksheet->getHighestDataRow();
  174. $activity_id = ($request->activity_id == 0 ? Activity::where('activity_name', '=', $request->activity_name)->first()->id : $request->activity_id);
  175. if ($option == 'prize') {
  176. DB::table('prizes')->where('activity_id', '=', $activity_id)->delete();
  177. date_default_timezone_set('Asia/Taipei');
  178. for ($row = 2; $row <= $highestRow; $row++) {
  179. DB::table('prizes')->insert([
  180. 'activity_id' => $activity_id,
  181. 'name' => $worksheet->getCell([1, $row])->getValue(),
  182. 'count' => $worksheet->getCell([2, $row])->getValue(),
  183. 'provider' => $worksheet->getCell([3, $row])->getValue(),
  184. 'created_at' => now(),
  185. 'updated_at' => now(),
  186. ]);
  187. }
  188. } else if ($option == 'guest') {
  189. DB::table('check_ins')->where('region', '=', '來賓')->delete();
  190. date_default_timezone_set('Asia/Taipei');
  191. for ($row = 2; $row <= $highestRow; $row++) {
  192. DB::table('check_ins')->insert([
  193. 'user_id' => $worksheet->getCell([1, $row])->getValue(),
  194. 'name' => $worksheet->getCell([2, $row])->getValue(),
  195. 'department_id' => '空',
  196. 'region' => '來賓',
  197. 'is_checked_in' => false,
  198. 'activity_id' => $activity_id,
  199. 'created_at' => now(),
  200. 'updated_at' => now(),
  201. ]);
  202. }
  203. }
  204. $successText = 'You have successfully uploaded "' . $file_name . '"';
  205. $response = [
  206. 'success' => $successText,
  207. ];
  208. return response($response, 201);
  209. }
  210. }