AdminController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  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\UserEvent;
  14. use Barryvdh\DomPDF\Facade\Pdf;
  15. class AdminController extends Controller
  16. {
  17. protected $emailService;
  18. public function __construct(EmailService $emailService)
  19. {
  20. parent::__construct();
  21. $this->emailService = $emailService;
  22. }
  23. public function dashboard(Request $request)
  24. {
  25. $ordersTotal = $this->getOrdersTotal();
  26. return view('app.my-account.admin.dashboard', compact('ordersTotal'));
  27. }
  28. public function getOrdersTotal(){
  29. $orders = StoreOrder::all();
  30. $total = 0;
  31. foreach($orders as $order){
  32. $total = $total + $order->total();
  33. }
  34. return $total;
  35. }
  36. public function users(Request $request)
  37. {
  38. $filters = $request->all();
  39. $users = User::query();
  40. $query = $request->get('query', null);
  41. $payment_profile = $request->get('payment_profile');
  42. if($payment_profile){
  43. if($payment_profile == 'YES'){
  44. $users = $users->whereHas('paymentMethods');
  45. }else{
  46. $users = $users->whereDoesntHave('paymentMethods');
  47. }
  48. }
  49. $customer_name = $request->get('customer_name');
  50. if($customer_name){
  51. $wildCardedCustomer = '%' . $customer_name . '%';
  52. $users = $users->where(function($qry)use($wildCardedCustomer){
  53. $qry->where('name_first', 'ilike', $wildCardedCustomer)
  54. ->orWhere('name_last', 'ilike', $wildCardedCustomer)
  55. ->orWhere('full_name', 'ilike', $wildCardedCustomer);
  56. });
  57. }
  58. $users = $users->orderBy('created_at', 'DESC')->paginate(30);
  59. return view('app.my-account.admin.users.index', compact('users', 'filters'));
  60. }
  61. public function userDashboard(User $user)
  62. {
  63. return view('app.my-account.admin.users.sub.dashboard', compact('user'));
  64. }
  65. public function userOrders(User $user)
  66. {
  67. $orders = StoreOrder::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  68. return view('app.my-account.admin.users.sub.orders', compact('user', 'orders'));
  69. }
  70. public function userTransactions(User $user)
  71. {
  72. $transactions = FinancialTransaction::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  73. return view('app.my-account.admin.users.sub.transactions', compact('transactions', 'user'));
  74. }
  75. public function userSessions(User $user)
  76. {
  77. $sessions = AppSession::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  78. return view('app.my-account.admin.users.sub.sessions', compact('sessions', 'user'));
  79. }
  80. public function userUserEvents(User $user)
  81. {
  82. $userEvents = UserEvent::where('performer_user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  83. return view('app.my-account.admin.users.sub.user-events', compact('userEvents', 'user'));
  84. }
  85. public function userPaymentMethods(User $user){
  86. $userPaymentMethods = PaymentMethod::where('user_id', $user->id)->orderBy('created_at', 'DESC')->paginate(30);
  87. return view('app.my-account.admin.users.sub.payment-methods', compact('user', 'userPaymentMethods'));
  88. }
  89. public function paymentMethods(Request $request)
  90. {
  91. $filters = $request->all();
  92. $paymentMethods = PaymentMethod::query();
  93. $expirationDate = $request->get('expiration_date');
  94. if($expirationDate){
  95. $month = date("m",strtotime($expirationDate));
  96. $year = date("Y",strtotime($expirationDate));
  97. $paymentMethods = $paymentMethods->whereRaw("((stripe_detail_json)::json->'card'->>'exp_month')::integer <= $month AND ((stripe_detail_json)::json->'card'->>'exp_year')::integer <= $year");
  98. }
  99. $paymentMethods = $paymentMethods->orderBy('created_at', 'DESC')->paginate(30);
  100. return view('app.my-account.admin.payment-methods.index', compact('paymentMethods', 'filters'));
  101. }
  102. public function paymentMethodDashboard(PaymentMethod $paymentMethod)
  103. {
  104. return view('app.my-account.admin.payment-methods.sub.dashboard', compact('paymentMethod'));
  105. }
  106. public function financialTransactions(Request $request)
  107. {
  108. $filters = $request->all();
  109. $transactions = FinancialTransaction::query();
  110. $this->filterDateMultiQuery($request, $transactions, 'created_at', 'created_at_date_category', 'created_at_date_value_1', 'created_at_date_value_2');
  111. $customer = $request->get('customer');
  112. if($customer){
  113. $wildCardedCustomer = '%' . $customer . '%';
  114. $transactions = $transactions->whereHas('user', function($query) use($wildCardedCustomer){
  115. $query->where('name_first', 'ilike', $wildCardedCustomer)
  116. ->orWhere('name_last', 'ilike', $wildCardedCustomer)
  117. ->orWhere('full_name', 'ilike', $wildCardedCustomer);
  118. });
  119. }
  120. $transactions = $transactions->orderBy('created_at', 'DESC')->paginate(30);
  121. return view('app.my-account.admin.financial-transactions.index', compact('transactions', 'filters'));
  122. }
  123. public function financialTransactionDashboard()
  124. {
  125. return view('app.my-account.admin.financial-transactions.sub.dashboard');
  126. }
  127. public function orders(Request $request)
  128. {
  129. $filters = $request->all();
  130. $orders = StoreOrder::query();
  131. $name = $request->get('name', null);
  132. if ($name) {
  133. $wildCardedName = '%' . $name . '%';
  134. $orders = $orders->whereHas('User', function($query) use($wildCardedName){
  135. return $query->where('name_first', 'ilike', $wildCardedName)
  136. ->orWhere('name_last', 'ilike', $wildCardedName)
  137. ->orWhere('full_name', 'ilike', $wildCardedName);
  138. });
  139. }
  140. $orderNumber = $request->get('order_number');
  141. if($orderNumber){
  142. $wildCardedOrderNumber = '%' . $orderNumber . '%';
  143. $orders = $orders->where('iid', 'ilike', $wildCardedOrderNumber);
  144. }
  145. $this->filterDateMultiQuery($request, $orders, 'created_at', 'created_at_date_category', 'created_at_date_value_1', 'created_at_date_value_2');
  146. $orders = $orders->orderBy('created_at', 'DESC');
  147. $clonedOrdersQuery = clone $orders;
  148. $orders = $orders->paginate(30);
  149. return view('app.my-account.admin.orders.index', compact('orders', 'filters'));
  150. }
  151. public function orderDashboard(StoreOrder $order)
  152. {
  153. return view('app.my-account.admin.orders.sub.dashboard', compact('order'));
  154. }
  155. public function orderFinancialTransactions(StoreOrder $order)
  156. {
  157. $transactions = FinancialTransaction::where('order_id', $order->id)->orderBy('created_at', 'DESC')->get();
  158. return view('app.my-account.admin.orders.sub.financial-transactions', compact('order', 'transactions'));
  159. }
  160. public function report(Request $request, $report) {
  161. $rows = [];
  162. switch ($report) {
  163. case 'new-orders-pending-processing':
  164. $rows = User::whereNotNull('upcoming_fill_date')
  165. ->whereRaw("(id NOT IN (SELECT store_order.user_id FROM store_order))")
  166. ->paginate(30);
  167. break;
  168. case 'refills-pending-processing':
  169. $rows = User::whereRaw("fill2date <= NOW()::date")
  170. ->whereRaw("(id IN (SELECT store_order.user_id FROM store_order))")
  171. ->paginate(30);
  172. default:
  173. break;
  174. }
  175. return view('app.my-account.reports.' . $report, compact('rows'));
  176. }
  177. public function sessions(Request $request){
  178. $filters = $request->all();
  179. $sessions = AppSession::query();
  180. if($request->get('name')){
  181. $wildCardedName = '%' . $request->get('name') . '%';
  182. $sessions = $sessions->whereHas('user', function($qry) use($wildCardedName){
  183. return $qry->where('name_first', 'ilike', $wildCardedName)
  184. ->orWhere('name_last', 'ilike', $wildCardedName)
  185. ->orWhere('full_name', 'ilike', $wildCardedName);
  186. });
  187. }
  188. $this->filterDateMultiQuery($request, $sessions, 'created_at', 'created_at_date_category', 'created_at_date_value_1', 'created_at_date_value_2');
  189. $sessions = $sessions->orderBy('created_at', 'DESC')->paginate(30);
  190. return view('app.my-account.admin.sessions.index', compact('sessions', 'filters'));
  191. }
  192. public function userEvents(Request $request){
  193. $filters = $request->all();
  194. $userEvents = UserEvent::query();
  195. if($request->get('name')){
  196. $wildCardedName = '%' . $request->get('name') . '%';
  197. $userEvents = $userEvents->whereHas('user', function($qry) use($wildCardedName){
  198. return $qry->where('name_first', 'ilike', $wildCardedName)
  199. ->orWhere('name_last', 'ilike', $wildCardedName)
  200. ->orWhere('full_name', 'ilike', $wildCardedName);
  201. });
  202. }
  203. $this->filterDateMultiQuery($request, $userEvents, 'created_at', 'created_at_date_category', 'created_at_date_value_1', 'created_at_date_value_2');
  204. $userEvents = $userEvents->orderBy('created_at', 'DESC')->paginate(30);
  205. return view('app.my-account.admin.user-events.index', compact('userEvents', 'filters'));
  206. }
  207. public function orderCharge(Request $request){
  208. $data = [
  209. 'orderUid' => $request->get('orderUid'),
  210. 'paymentMethodUid' => $request->get('paymentMethodUid'),
  211. 'amount' => $request->get('amount')
  212. ];
  213. $response = $this->callJava('/api/financialTransaction/createCharge', $data, $this->sessionKey);
  214. if (!@$response['success']) {
  215. $storeOrder = StoreOrder::where('uid', $request->get('orderUid'))->first();
  216. if($storeOrder){
  217. $this->emailService->notifyUserOnFailedTransaction($storeOrder->user);
  218. }
  219. return $this->fail($response['message']);
  220. }
  221. return $this->pass();
  222. }
  223. }