AdminController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\PaymentMethod;
  4. use App\Models\FinancialTransaction;
  5. use App\Models\PromoCode;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Cookie;
  8. use App\Models\User;
  9. use App\Models\StoreOrder;
  10. use App\Http\Services\EmailService;
  11. use App\Models\AppSession;
  12. use App\Models\AppUserTransaction;
  13. use App\Models\Message;
  14. use App\Models\UserEvent;
  15. use Barryvdh\DomPDF\Facade\Pdf;
  16. use OpenTok\MediaMode;
  17. use OpenTok\OpenTok;
  18. class AdminController extends Controller
  19. {
  20. protected $emailService;
  21. public function __construct(EmailService $emailService)
  22. {
  23. parent::__construct();
  24. $this->emailService = $emailService;
  25. }
  26. public function dashboard(Request $request)
  27. {
  28. $ordersTotal = $this->getOrdersTotal();
  29. return view('app.my-account.admin.dashboard', compact('ordersTotal'));
  30. }
  31. public function getOrdersTotal(){
  32. $orders = StoreOrder::all();
  33. $total = 0;
  34. foreach($orders as $order){
  35. $total = $total + $order->total();
  36. }
  37. return $total;
  38. }
  39. public function users(Request $request)
  40. {
  41. $filters = $request->all();
  42. $users = User::query();
  43. $query = $request->get('query', null);
  44. $payment_profile = $request->get('payment_profile');
  45. if($payment_profile){
  46. if($payment_profile == 'YES'){
  47. $users = $users->whereHas('paymentMethods');
  48. }else{
  49. $users = $users->whereDoesntHave('paymentMethods');
  50. }
  51. }
  52. $customer_name = $request->get('customer_name');
  53. if($customer_name){
  54. $wildCardedCustomer = '%' . $customer_name . '%';
  55. $users = $users->where(function($qry)use($wildCardedCustomer){
  56. $qry->where('name_first', 'ilike', $wildCardedCustomer)
  57. ->orWhere('name_last', 'ilike', $wildCardedCustomer)
  58. ->orWhere('full_name', 'ilike', $wildCardedCustomer);
  59. });
  60. }
  61. $users = $users->orderBy('created_at', 'DESC')->paginate(30);
  62. return view('app.my-account.admin.users.index', compact('users', 'filters'));
  63. }
  64. public function userDashboard(User $user)
  65. {
  66. return view('app.my-account.admin.users.sub.dashboard', compact('user'));
  67. }
  68. public function userOrders(User $user)
  69. {
  70. $orders = StoreOrder::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  71. return view('app.my-account.admin.users.sub.orders', compact('user', 'orders'));
  72. }
  73. public function userTransactions(User $user)
  74. {
  75. $transactions = FinancialTransaction::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  76. return view('app.my-account.admin.users.sub.transactions', compact('transactions', 'user'));
  77. }
  78. public function userSessions(User $user)
  79. {
  80. $sessions = AppSession::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  81. return view('app.my-account.admin.users.sub.sessions', compact('sessions', 'user'));
  82. }
  83. public function userUserEvents(User $user)
  84. {
  85. $userEvents = UserEvent::where('performer_user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  86. return view('app.my-account.admin.users.sub.user-events', compact('userEvents', 'user'));
  87. }
  88. public function userPaymentMethods(User $user){
  89. $userPaymentMethods = PaymentMethod::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  90. return view('app.my-account.admin.users.sub.payment-methods', compact('user', 'userPaymentMethods'));
  91. }
  92. public function paymentMethods(Request $request)
  93. {
  94. $filters = $request->all();
  95. $paymentMethods = PaymentMethod::query();
  96. $expirationDate = $request->get('expiration_date');
  97. if($expirationDate){
  98. $month = date("m",strtotime($expirationDate));
  99. $year = date("Y",strtotime($expirationDate));
  100. $paymentMethods = $paymentMethods->whereRaw("((stripe_detail_json)::json->'card'->>'exp_month')::integer <= $month AND ((stripe_detail_json)::json->'card'->>'exp_year')::integer <= $year");
  101. }
  102. $paymentMethods = $paymentMethods->orderBy('created_at', 'DESC')->paginate(30);
  103. return view('app.my-account.admin.payment-methods.index', compact('paymentMethods', 'filters'));
  104. }
  105. public function paymentMethodDashboard(PaymentMethod $paymentMethod)
  106. {
  107. return view('app.my-account.admin.payment-methods.sub.dashboard', compact('paymentMethod'));
  108. }
  109. public function financialTransactions(Request $request)
  110. {
  111. $filters = $request->all();
  112. $transactions = FinancialTransaction::query();
  113. $this->filterDateMultiQuery($request, $transactions, 'created_at', 'created_at_date_category', 'created_at_date_value_1', 'created_at_date_value_2');
  114. $customer = $request->get('customer');
  115. if($customer){
  116. $wildCardedCustomer = '%' . $customer . '%';
  117. $transactions = $transactions->whereHas('user', function($query) use($wildCardedCustomer){
  118. $query->where('name_first', 'ilike', $wildCardedCustomer)
  119. ->orWhere('name_last', 'ilike', $wildCardedCustomer)
  120. ->orWhere('full_name', 'ilike', $wildCardedCustomer);
  121. });
  122. }
  123. $transactions = $transactions->orderBy('created_at', 'DESC')->paginate(30);
  124. return view('app.my-account.admin.financial-transactions.index', compact('transactions', 'filters'));
  125. }
  126. public function financialTransactionDashboard()
  127. {
  128. return view('app.my-account.admin.financial-transactions.sub.dashboard');
  129. }
  130. public function orders(Request $request)
  131. {
  132. $filters = $request->all();
  133. $orders = StoreOrder::query();
  134. $name = $request->get('name', null);
  135. if ($name) {
  136. $wildCardedName = '%' . $name . '%';
  137. $orders = $orders->whereHas('User', function($query) use($wildCardedName){
  138. return $query->where('name_first', 'ilike', $wildCardedName)
  139. ->orWhere('name_last', 'ilike', $wildCardedName)
  140. ->orWhere('full_name', 'ilike', $wildCardedName);
  141. });
  142. }
  143. $orderNumber = $request->get('order_number');
  144. if($orderNumber){
  145. $wildCardedOrderNumber = '%' . $orderNumber . '%';
  146. $orders = $orders->where('iid', 'ilike', $wildCardedOrderNumber);
  147. }
  148. $this->filterDateMultiQuery($request, $orders, 'created_at', 'created_at_date_category', 'created_at_date_value_1', 'created_at_date_value_2');
  149. $orders = $orders->orderBy('created_at', 'DESC');
  150. $clonedOrdersQuery = clone $orders;
  151. $orders = $orders->paginate(30);
  152. return view('app.my-account.admin.orders.index', compact('orders', 'filters'));
  153. }
  154. public function orderDashboard(StoreOrder $order)
  155. {
  156. return view('app.my-account.admin.orders.sub.dashboard', compact('order'));
  157. }
  158. public function orderFinancialTransactions(StoreOrder $order)
  159. {
  160. $transactions = FinancialTransaction::where('order_id', $order->id)->orderBy('created_at', 'DESC')->get();
  161. return view('app.my-account.admin.orders.sub.financial-transactions', compact('order', 'transactions'));
  162. }
  163. public function report(Request $request, $report) {
  164. $rows = [];
  165. switch ($report) {
  166. case 'new-orders-pending-processing':
  167. $rows = User::whereNotNull('upcoming_fill_date')
  168. ->whereRaw("(id NOT IN (SELECT store_order.user_id FROM store_order))")
  169. ->paginate(30);
  170. break;
  171. case 'refills-pending-processing':
  172. $rows = User::whereRaw("fill2date <= NOW()::date")
  173. ->whereRaw("(id IN (SELECT store_order.user_id FROM store_order))")
  174. ->paginate(30);
  175. default:
  176. break;
  177. }
  178. return view('app.my-account.reports.' . $report, compact('rows'));
  179. }
  180. public function sessions(Request $request){
  181. $filters = $request->all();
  182. $sessions = AppSession::query();
  183. if($request->get('name')){
  184. $wildCardedName = '%' . $request->get('name') . '%';
  185. $sessions = $sessions->whereHas('user', function($qry) use($wildCardedName){
  186. return $qry->where('name_first', 'ilike', $wildCardedName)
  187. ->orWhere('name_last', 'ilike', $wildCardedName)
  188. ->orWhere('full_name', 'ilike', $wildCardedName);
  189. });
  190. }
  191. $this->filterDateMultiQuery($request, $sessions, 'created_at', 'created_at_date_category', 'created_at_date_value_1', 'created_at_date_value_2');
  192. $sessions = $sessions->orderBy('created_at', 'DESC')->paginate(30);
  193. return view('app.my-account.admin.sessions.index', compact('sessions', 'filters'));
  194. }
  195. public function userEvents(Request $request){
  196. $filters = $request->all();
  197. $userEvents = UserEvent::query();
  198. if($request->get('name')){
  199. $wildCardedName = '%' . $request->get('name') . '%';
  200. $userEvents = $userEvents->whereHas('user', function($qry) use($wildCardedName){
  201. return $qry->where('name_first', 'ilike', $wildCardedName)
  202. ->orWhere('name_last', 'ilike', $wildCardedName)
  203. ->orWhere('full_name', 'ilike', $wildCardedName);
  204. });
  205. }
  206. $this->filterDateMultiQuery($request, $userEvents, 'created_at', 'created_at_date_category', 'created_at_date_value_1', 'created_at_date_value_2');
  207. $userEvents = $userEvents->orderBy('created_at', 'DESC')->paginate(30);
  208. return view('app.my-account.admin.user-events.index', compact('userEvents', 'filters'));
  209. }
  210. public function orderCharge(Request $request){
  211. $data = [
  212. 'orderUid' => $request->get('orderUid'),
  213. 'paymentMethodUid' => $request->get('paymentMethodUid'),
  214. 'amount' => $request->get('amount')
  215. ];
  216. $response = $this->callJava('/api/financialTransaction/createCharge', $data, $this->sessionKey);
  217. if (!@$response['success']) {
  218. $storeOrder = StoreOrder::where('uid', $request->get('orderUid'))->first();
  219. if($storeOrder){
  220. $this->emailService->notifyUserOnFailedTransaction($storeOrder->user);
  221. }
  222. return $this->fail($response['message']);
  223. }
  224. return $this->pass();
  225. }
  226. public function userMessages(Request $request, User $user){
  227. $messages = Message::where('to_user_id', $user->id)->orWhere('from_user_id', $user->id);
  228. $messages = $messages->orderBy('created_at', 'ASC')->paginate(25);
  229. $opentok = null;
  230. $otSession = null;
  231. $otSessionId = null;
  232. $otToken = null;
  233. try {
  234. $opentok = new OpenTok(config('app.opentokApiKey'), config('app.opentokApiSecret'));
  235. $otSession = $opentok->createSession(array('mediaMode' => MediaMode::ROUTED));
  236. $otSessionId = $otSession->getSessionId();
  237. $otToken = $opentok->generateToken($otSessionId);
  238. } catch (\Exception $e) {
  239. return redirect()->back()->with('error', 'OpenTok issue!');
  240. }
  241. $toUser = $user;
  242. return view('app.my-account.admin.users.sub.messages', compact('otSessionId', 'otToken', 'messages', 'toUser'));
  243. }
  244. public function userMessageAttachments(Request $request, User $user, Message $message){
  245. if(!$message) return '';
  246. $output = [];
  247. foreach ($message->attachments as $attachment) {
  248. $output[] = '<a native target="_blank" ' .
  249. 'href="/api/systemFile/view/' . $attachment->systemFile->uid . '" ' .
  250. 'class="attachment text-sm my-1">' .
  251. '<i class="fa fa-paperclip"></i>&nbsp;' .
  252. $attachment->systemFile->file_name .
  253. '</a>';
  254. }
  255. return implode("", $output);
  256. }
  257. }