Controller.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
  4. use Illuminate\Foundation\Bus\DispatchesJobs;
  5. use Illuminate\Foundation\Validation\ValidatesRequests;
  6. use Illuminate\Routing\Controller as BaseController;
  7. use Illuminate\Support\Facades\Cookie;
  8. use Illuminate\Support\Facades\Http;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Storage;
  11. use App\Models\BaseModel;
  12. use Ramsey\Uuid\Uuid;
  13. use Illuminate\Support\Facades\Mail;
  14. use App\Mail\NotifyEmail;
  15. use App\Models\StoreOrder;
  16. use App\Models\AppSession;
  17. class Controller extends BaseController
  18. {
  19. use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
  20. protected $performer = null;
  21. protected $user = null;
  22. protected $sessionKey = null;
  23. protected $appInternalName = null;
  24. protected $stringMappingConfig = null;
  25. public function __construct()
  26. {
  27. $this->sessionKey = Cookie::get(config('app.sessionKeyName'));
  28. $this->performer = AppSession::where('session_key', $this->sessionKey)->where('is_active', true)->first();
  29. if($this->performer){
  30. $this->user = $this->performer ? $this->performer->user : null;
  31. }
  32. $this->appInternalName = config('app.internalName');
  33. $this->stringMappingConfig = config('constants.' . $this->appInternalName);
  34. view()->share('appInternalName', $this->appInternalName);
  35. view()->share('stringMappingConfig', $this->stringMappingConfig);
  36. view()->share('performer', $this->performer);
  37. view()->share('user', $this->user);
  38. }
  39. public function sendEmailNotification($details){
  40. $to = $details['to'];
  41. if(config('app.env') !== 'production'){
  42. $to = [
  43. ['email' => config('app.testEmailAddress'), 'name' => 'Test Email Address']
  44. ];
  45. }
  46. Mail::to($to)->send(new NotifyEmail($details));
  47. return true;
  48. }
  49. public function callJava($endPoint, $data, $sessionKey)
  50. {
  51. $url = config('app.backendUrl') . $endPoint;
  52. $response = Http::asForm()
  53. ->withHeaders([
  54. 'sessionKey' => $sessionKey
  55. ])
  56. ->post($url, $data)
  57. ->body();
  58. return json_decode($response, true);
  59. }
  60. public function pass($data = null): array
  61. {
  62. return [
  63. 'success' => true,
  64. 'data' => $data,
  65. ];
  66. }
  67. public function fail($message): array
  68. {
  69. return [
  70. 'success' => false,
  71. 'message' => $message
  72. ];
  73. return null;
  74. }
  75. public function filterMultiQuery(Request $request, $query, $columnName, $keyName, $valueName1, $valueName2) {
  76. switch($request->input($keyName)) {
  77. case 'EXACTLY':
  78. if($request->input($valueName1)) {
  79. $query->where($columnName, $request->input($valueName1));
  80. }
  81. break;
  82. case 'LESS_THAN':
  83. if($request->input($valueName1)) {
  84. $query->where($columnName, '<', $request->input($valueName1));
  85. }
  86. break;
  87. case 'GREATER_THAN':
  88. if($request->input($valueName1)) {
  89. $query->where($columnName, '>', $request->input($valueName1));
  90. }
  91. break;
  92. case 'BETWEEN':
  93. if($request->input($valueName1) && $request->input($valueName2)) {
  94. $query
  95. ->where($columnName, '>=', $request->input($valueName1))
  96. ->where($columnName, '<=', $request->input($valueName2));
  97. }
  98. break;
  99. case 'NOT_BETWEEN':
  100. if($request->input($valueName1) && $request->input($valueName2)) {
  101. $query
  102. ->where(function ($q) use ($request, $columnName, $valueName1, $valueName2) {
  103. $q->where($columnName, '<', $request->input($valueName1))
  104. ->orWhere($columnName, '>', $request->input($valueName2));
  105. });
  106. }
  107. break;
  108. }
  109. }
  110. public function filterDateMultiQuery(Request $request, $query, $columnName, $keyName, $valueName1, $valueName2) {
  111. switch($request->input($keyName)) {
  112. case 'EXACTLY':
  113. if($request->input($valueName1)) {
  114. $query->whereDate($columnName, $request->input($valueName1));
  115. }
  116. break;
  117. case 'LESS_THAN':
  118. if($request->input($valueName1)) {
  119. $query->whereDate($columnName, '<', $request->input($valueName1));
  120. }
  121. break;
  122. case 'GREATER_THAN':
  123. if($request->input($valueName1)) {
  124. $query->whereDate($columnName, '>', $request->input($valueName1));
  125. }
  126. break;
  127. case 'BETWEEN':
  128. if($request->input($valueName1) && $request->input($valueName2)) {
  129. $query
  130. ->whereDate($columnName, '>=', $request->input($valueName1))
  131. ->whereDate($columnName, '<=', $request->input($valueName2));
  132. }
  133. break;
  134. case 'NOT_BETWEEN':
  135. if($request->input($valueName1) && $request->input($valueName2)) {
  136. $query
  137. ->whereDate(function ($q) use ($request, $columnName, $valueName1, $valueName2) {
  138. $q->whereDate($columnName, '<', $request->input($valueName1))
  139. ->orWhereDate($columnName, '>', $request->input($valueName2));
  140. });
  141. }
  142. break;
  143. }
  144. }
  145. public function filterSimpleQuery(Request $request, $query, $columnName, $valueName) {
  146. if($request->input($valueName)) {
  147. $query->where($columnName, $request->input($valueName));
  148. }
  149. }
  150. public function filterSimpleQueryByValue(Request $request, $query, $columnName, $valueName) {
  151. if($valueName) {
  152. $query->where($columnName, $valueName);
  153. }
  154. }
  155. public function storeFileAs(Request $request, $fileRef, $path, $accessToken = null){
  156. $file = $request->file($fileRef);
  157. if ($file) {
  158. $uid = Uuid::uuid6();
  159. $originalFileName = $file->getClientOriginalName();
  160. $fileName = $uid . "." . $file->extension();
  161. $tempPath = Storage::disk('custom')->putFileAs($path, $file, $fileName);
  162. $data = [
  163. 'path' => $tempPath,
  164. 'fileName' => $fileName,
  165. 'url' => route('view-uploaded-file', $fileName),
  166. 'orginalFileName' => $originalFileName
  167. ];
  168. if($accessToken){
  169. $data['attachment_access_token'] = $accessToken;
  170. $data['attachmentAccessTokenUrl'] = route('view-uploaded-file-via-access-token', $accessToken);
  171. }
  172. return $data;
  173. }
  174. return null;
  175. }
  176. public function downloadFileByPath($file, $path){
  177. return Storage::disk('custom')->response($path . '/' . $file);
  178. }
  179. public function viewUploadedFile(Request $request, $file){
  180. return $this->downloadFileByPath($file, BaseModel::FILE_PATH);
  181. }
  182. public function viewUploadedFileViaToken(Request $request, $token){
  183. $fileType = $request->get('fileType', 'results_attachment');
  184. $order = StoreOrder::whereRaw("(detail_json)::json->?->>'attachment_access_token' = ?", [$fileType, $token])->first();
  185. if(!$order) abort(404);
  186. $orderDetailJson = $order->detailJson();
  187. $fileName = $orderDetailJson->{$fileType}->fileName;
  188. return $this->downloadFileByPath($fileName, BaseModel::FILE_PATH);
  189. }
  190. }