RecipientsController.php 6.9 KB

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