RecipientsController.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Recipients;
  4. use App\Models\Prize;
  5. use App\Models\CheckIn;
  6. use App\Models\User;
  7. use App\Models\Department;
  8. use App\Http\Requests\StoreRecipientsRequest;
  9. use App\Http\Requests\UpdateRecipientsRequest;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\DB;
  12. class RecipientsController extends Controller
  13. {
  14. /**
  15. * Display a listing of the resource.
  16. *
  17. * @return \Illuminate\Http\Response
  18. */
  19. public function index()
  20. {
  21. return Recipients::all();
  22. }
  23. public function index_by_activity(UpdateRecipientsRequest $request)
  24. {
  25. return Recipients::join('prizes', 'recipients.prize_id', '=', 'prizes.id')
  26. ->join('users', 'recipients.user_id', '=', 'users.user_id')
  27. ->select(
  28. 'prizes.activity_id',
  29. 'recipients.user_id',
  30. 'users.name as user_name',
  31. 'recipients.prize_id',
  32. 'prizes.name as prize_name',
  33. 'prizes.provider',
  34. 'recipients.created_at'
  35. )
  36. ->where('prizes.activity_id', $request->activity_id)
  37. ->orderBy('recipients.created_at', 'DESC')
  38. ->get();
  39. }
  40. /**
  41. * Show the form for creating a new resource.
  42. *
  43. * @return \Illuminate\Http\Response
  44. */
  45. public function create()
  46. {
  47. //
  48. }
  49. /**
  50. * Store a newly created resource in storage.
  51. *
  52. * @param \App\Http\Requests\StoreRecipientsRequest $request
  53. * @return \Illuminate\Http\Response
  54. */
  55. public function store(StoreRecipientsRequest $request)
  56. {
  57. Recipients::insert([
  58. 'prize_id' => $request->prizeId,
  59. 'user_id' => $request->userId,
  60. 'is_claimed' => false,
  61. 'created_at' => now(),
  62. 'updated_at' => now(),
  63. ]);
  64. return 'success';
  65. }
  66. public function store_patch(StoreRecipientsRequest $request)
  67. {
  68. $data = [];
  69. foreach ($request->userIdList as $userId) {
  70. array_push($data, [
  71. 'prize_id' => $request->prizeId,
  72. 'user_id' => $userId,
  73. 'is_claimed' => false,
  74. 'created_at' => now(),
  75. 'updated_at' => now(),
  76. ]);
  77. }
  78. Recipients::insert($data);
  79. return 'success';
  80. }
  81. /**
  82. * Display the specified resource.
  83. *
  84. * @param \App\Models\Recipients $recipients
  85. * @return \Illuminate\Http\Response
  86. */
  87. public function show(Request $request, Recipients $recipients)
  88. {
  89. //
  90. }
  91. /**
  92. * Show the form for editing the specified resource.
  93. *
  94. * @param \App\Models\Recipients $recipients
  95. * @return \Illuminate\Http\Response
  96. */
  97. public function edit(Recipients $recipients)
  98. {
  99. //
  100. }
  101. /**
  102. * Update the specified resource in storage.
  103. *
  104. * @param \App\Http\Requests\UpdateRecipientsRequest $request
  105. * @param \App\Models\Recipients $recipients
  106. * @return \Illuminate\Http\Response
  107. */
  108. public function update(UpdateRecipientsRequest $request, Recipients $recipients)
  109. {
  110. Recipients::where('user_id', $request->userId)->update(['prize_id' => $request->prizeId]);
  111. return 'success';
  112. }
  113. /**
  114. * Remove the specified resource from storage.
  115. *
  116. * @param \App\Models\Recipients $recipients
  117. * @return \Illuminate\Http\Response
  118. */
  119. public function destroy(Recipients $recipients)
  120. {
  121. //
  122. }
  123. public function claim(Request $request)
  124. {
  125. $prize = '';
  126. $prize_id = 0;
  127. $isClaimed = false;
  128. $user_id = $request->user_id;
  129. $activity_id = $request->activity_id;
  130. $user = CheckIn::where('activity_id', '=', $activity_id)
  131. ->where('user_id', '=', $user_id)->get()[0];
  132. $department_id = CheckIn::where('user_id', '=', $user_id)->get()[0]->department_id;
  133. if ($department_id != '空') {
  134. $department_name = Department::where('department_id', '=', $department_id)->get()[0]->department_name;
  135. } else {
  136. $department_name = '空';
  137. }
  138. if (Recipients::where('user_id', '=', $user_id)->exists()) {
  139. $recipients = Recipients::where('user_id', '=', $user_id)->get()[0];
  140. $prize_id = $recipients->prize_id;
  141. //因為重新匯入後prize_id在prize下面有改動,但是在recipients下面沒有改動,因此會有問題產生
  142. //檢查prize_id是不是在activity_id底下
  143. $aid = Prize::where('id', '=', $prize_id)->get()[0]->activity_id;
  144. if ($aid == $activity_id) {
  145. $isRecipients = true;
  146. $isClaimed = $recipients->is_claimed;
  147. $prize = Prize::where('id', '=', $prize_id)->get()[0]->name;
  148. } else {
  149. $isRecipients = false;
  150. }
  151. } else {
  152. $isRecipients = false;
  153. }
  154. $response = [
  155. 'user' => $user,
  156. 'isRecipients' => $isRecipients,
  157. 'isClaimed' => $isClaimed,
  158. 'prize' => $prize,
  159. 'prize_id' => $prize_id,
  160. 'department_name' => $department_name,
  161. ];
  162. return response($response, 201);
  163. }
  164. public function isClaimed(UpdateRecipientsRequest $request)
  165. {
  166. $recipient = Recipients::where('prize_id', '=', $request->prize_id)
  167. ->where('user_id', '=', $request->user_id)->get()[0];
  168. $recipient->is_claimed = true;
  169. $recipient->save();
  170. return $recipient;
  171. }
  172. public function export(Request $request)
  173. {
  174. $recipients = Recipients::join('prizes', 'recipients.prize_id', '=', 'prizes.id')
  175. ->join('check_ins', 'recipients.user_id', '=', 'check_ins.user_id')
  176. ->select('prizes.activity_id', 'prizes.id', 'prizes.name as prize', 'check_ins.name', 'prizes.created_at')
  177. ->where('prizes.activity_id', '=', $request->activity_id)
  178. ->orderBy('prizes.id')
  179. ->get();
  180. $filename = "recipients_list_" . date('Y_m_d_H_i_s', time()) . ".csv";
  181. $filepath = "./upload/" . $filename;
  182. $handle = fopen($filepath, 'w+');
  183. fputcsv($handle, array('prize', 'name', 'created_at'));
  184. foreach ($recipients as $element) {
  185. fputcsv($handle, array($element->prize, $element->name, $element->created_at));
  186. }
  187. fclose($handle);
  188. $headers = array(
  189. 'Content-Type' => 'text/csv',
  190. );
  191. return response()->download($filepath, $filename, $headers);
  192. }
  193. public function indexByPrize(Request $request)
  194. {
  195. //
  196. $prize_id = $request->prize_id;
  197. $prizeList = DB::select("SELECT [check_ins].[user_id],[name],[is_claimed],[alias] FROM [recipients]
  198. LEFT JOIN [check_ins] ON [recipients].[user_id] = [check_ins].[user_id]
  199. LEFT JOIN [departments] ON [check_ins].[department_id] = [departments].[department_id]
  200. WHERE [prize_id] = ? ORDER BY CASE
  201. WHEN [check_ins].[department_id] = 'guest' then 1 END DESC,[check_ins].[department_id],[check_ins].[user_id];", [$prize_id]);
  202. $prize = DB::select("SELECT [name] FROM [prizes] WHERE [id] = ?;", [$prize_id]);
  203. $response = [
  204. "prize" => $prize,
  205. "list" => $prizeList,
  206. ];
  207. return response($response, 201);
  208. }
  209. }