middleware('admin'); $this->aboRepository = $aboRepository; } public function index() { if (Request::get('reset') === 'filter') { foreach (['filter_member_id', 'filter_status', 'filter_active', 'filter_is_for', 'filter_payment', 'filter_start_month', 'filter_start_year', 'filter_next_day'] as $attr) { set_user_attr($attr, null); } return redirect(route('admin_abos')); } $filter_members = UserAbo::join('users', 'user_id', '=', 'users.id')->groupBy('user_id')->join('user_accounts', 'account_id', '=', 'user_accounts.id')->select('users.id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name')->get(); $data = [ 'filter_members' => $filter_members, 'filter_statuses' => $this->getStatusFilterOptions(), 'filter_months' => $this->getMonthFilterOptions(), 'filter_years' => $this->getStartYearFilterOptions(), 'filter_next_days' => UserAbo::$aboDeliveryDays, ]; return view('admin.abo.index', $data); } /** * @return array */ private function getStatusFilterOptions(): array { return UserAbo::query() ->select('status') ->distinct() ->orderBy('status') ->pluck('status') ->mapWithKeys(fn ($status) => [$status => __('abo.'.(UserAbo::$statusTypes[$status] ?? $status))]) ->toArray(); } /** * @return array */ private function getMonthFilterOptions(): array { $months = []; for ($month = 1; $month <= 12; $month++) { $months[$month] = Carbon::create(null, $month, 1)->locale(app()->getLocale())->translatedFormat('F'); } return $months; } /** * @return array */ private function getStartYearFilterOptions(): array { $minStart = UserAbo::whereNotNull('start_date')->min('start_date'); $fromYear = $minStart ? (int) substr($minStart, 0, 4) : (int) date('Y'); return range((int) date('Y'), $fromYear); } public function detail($id) { $data = Request::all(); $user_abo = UserAbo::findOrFail($id); // init Yard AboOrderCart::initYard($user_abo); $customer_detail = AboOrderCart::getCustomerDetail(); AboOrderCart::makeOrderYard($user_abo); $comp_products = []; if ($user_abo->is_for === 'me') { $comp_products = Shop::getCompProducts('abo-me'); } $data = [ 'user_abo' => $user_abo, 'isAdmin' => true, 'customer_detail' => $customer_detail, 'view' => $user_abo->is_for, 'comp_products' => $comp_products, ]; return view('admin.abo.detail', $data); } public function update($id) { $data = Request::all(); if (isset($data['action'])) { if ($data['action'] === 'abo_update_settings') { $user_abo = UserAbo::findOrFail($data['id']); $this->aboRepository->setModel($user_abo); $this->aboRepository->update($data); return redirect(route('admin_abos_detail', [$id])); } } } public function rollback($id) { $user_abo = UserAbo::findOrFail($id); AboOrderCart::initYard($user_abo); $success = AboItemHistoryService::rollbackToInitial($user_abo); if ($success) { $user_abo->refresh(); AboOrderCart::makeOrderYard($user_abo); AboOrderCart::checkNumOfCompProducts($user_abo); \Session()->flash('alert-success', __('abo_history.rollback_success')); } else { \Session()->flash('alert-error', __('abo_history.rollback_no_data')); } return redirect(route('admin_abos_detail', [$id])); } public function retryPayment($id, AboRetryPaymentService $retryPaymentService) { $user_abo = UserAbo::findOrFail($id); $result = $retryPaymentService->retry($user_abo); \Session()->flash($result['success'] ? 'alert-success' : 'alert-error', $result['message']); return redirect(route('admin_abos_detail', [$id])); } public function externDone($id, AboExternalCompletionService $externalCompletion) { $user_abo = UserAbo::findOrFail($id); $result = $externalCompletion->completeForAbo($user_abo); \Session()->flash($result['success'] ? 'alert-success' : 'alert-error', $result['message']); return redirect(route('admin_abos_detail', [$id])); } public function destroy($id) { $user_abo = UserAbo::findOrFail($id); $user_abo->delete(); \Session()->flash('alert-success', __('abo.admin_delete_success')); return redirect(route('admin_abos')); } public function datatable() { $query = UserAbo::with('user_abo_orders')->with('shopping_user')->select('user_abos.*'); set_user_attr('filter_member_id', Request::get('filter_member_id')); if (Request::get('filter_member_id') != '') { $query->where('user_id', '=', Request::get('filter_member_id')); } set_user_attr('filter_status', Request::get('filter_status')); if (Request::get('filter_status') != '') { $query->where('status', '=', Request::get('filter_status')); } set_user_attr('filter_active', Request::get('filter_active')); if (Request::get('filter_active') != '') { $query->where('active', '=', (int) Request::get('filter_active')); } set_user_attr('filter_is_for', Request::get('filter_is_for')); if (Request::get('filter_is_for') != '') { $query->where('is_for', '=', Request::get('filter_is_for')); } set_user_attr('filter_payment', Request::get('filter_payment')); if (Request::get('filter_payment') != '') { $query->where('clearingtype', '=', Request::get('filter_payment')); } set_user_attr('filter_start_month', Request::get('filter_start_month')); if (Request::get('filter_start_month') != '') { $query->whereMonth('start_date', (int) Request::get('filter_start_month')); } set_user_attr('filter_start_year', Request::get('filter_start_year')); if (Request::get('filter_start_year') != '') { $query->whereYear('start_date', (int) Request::get('filter_start_year')); } set_user_attr('filter_next_day', Request::get('filter_next_day')); if (Request::get('filter_next_day') != '') { $query->where('abo_interval', '=', (int) Request::get('filter_next_day')); } return \DataTables::eloquent($query) ->addColumn('id', function (UserAbo $user_abo) { return ''; }) ->addColumn('start_date', function (UserAbo $user_abo) { return $user_abo->start_date; }) ->addColumn('next_date', function (UserAbo $user_abo) { return $user_abo->next_date; }) ->addColumn('abo_interval', function (UserAbo $user_abo) { return HTMLHelper::getAboStrLang($user_abo->abo_interval); }) ->addColumn('status', function (UserAbo $user_abo) { return $user_abo->getStatusFormated(); }) ->addColumn('active', function (UserAbo $user_abo) { return get_active_badge($user_abo->active); }) ->addColumn('is_for', function (UserAbo $user_abo) { return $user_abo->getIsForFormated(); }) ->addColumn('count', function (UserAbo $user_abo) { return $user_abo->getCountOrders(); }) ->addColumn('amount', function (UserAbo $user_abo) { return $user_abo->getFormattedAmount().' €'; }) ->addColumn('payment', function (UserAbo $user_abo) { return $user_abo->getPaymentType(); }) ->addColumn('member', function (UserAbo $user_abo) { if (isset($user_abo->shopping_user) && $user_abo->shopping_user->member_id > 0) { return ''.$user_abo->shopping_user->member->getFullName().''; } }) ->addColumn('payone_userid', function (UserAbo $user_abo) { return $user_abo->payone_userid; }) ->filterColumn('payone_userid', function ($query, $keyword) { if ($keyword != '') { $query->whereRaw('user_abos.payone_userid LIKE ?', ['%'.$keyword.'%']); } }) ->orderColumn('id', 'id $1') ->orderColumn('start_date', 'start_date $1') ->orderColumn('next_date', 'next_date $1') ->orderColumn('abo_interval', 'abo_interval $1') ->orderColumn('status', 'status $1') ->orderColumn('active', 'active $1') ->orderColumn('is_for', 'is_for $1') ->orderColumn('count', 'count $1') ->orderColumn('amount', 'amount $1') ->orderColumn('payone_userid', 'payone_userid $1') ->rawColumns(['id', 'status', 'active', 'is_for', 'member']) ->make(true); } }