ActivityController.php 6.5 KB

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