From 3f2fbd6d5bdb6b2e80c26f96c340040971b151ea Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Fri, 29 Jul 2022 18:18:05 +0200 Subject: [PATCH] #51 Festschreiben der Points, Gutschriftenmodul --- .env | 2 +- app/Console/Commands/BusinessStore.php | 78 +++ app/Console/Kernel.php | 3 +- app/Cron/BusinessUsersStore.php | 159 +++++ app/Http/Controllers/BusinessController.php | 271 ++++++--- .../Controllers/BusinessPointsController.php | 4 +- app/Http/Controllers/FileController.php | 46 +- app/Http/Controllers/ModalController.php | 18 +- .../Controllers/PaymentCreditController.php | 196 +++--- .../Controllers/PaymentInvoiceController.php | 4 +- app/Http/Controllers/SyS/SysController.php | 27 +- .../Controllers/User/PaymentController.php | 133 ++++ app/Http/Controllers/User/TeamController.php | 105 +++- app/Mail/MailCredit.php | 54 ++ app/Models/UserBusiness.php | 104 ++++ app/Models/UserBusinessStructure.php | 73 +++ app/Models/UserCredit.php | 172 ++++++ app/Models/UserCreditItem.php | 99 +++ app/Models/UserSalesVolume.php | 2 + app/Repositories/CreditRepository.php | 125 ++++ .../BusinessPlan/BusinessTreeUserItem.php | 172 ++++++ .../BusinessPlan/BusinessUserItem.php | 257 ++++++++ app/Services/BusinessPlan/TreeCalcBot.php | 297 +++++---- app/Services/BusinessPlan/TreeUserItem.php | 136 +++-- app/Services/Credit.php | 82 +++ app/Services/HomepartyCart.php | 75 ++- app/Services/Payment.php | 10 + app/Services/ShopApiOrderCart.php | 2 +- app/Services/SyS/BusinessStructur.php | 51 ++ app/User.php | 8 +- app/helpers.php | 9 +- config/app.php | 1 + ...15_151136_create_homeparty_users_table.php | 1 - ...25_140152_create_user_businesses_table.php | 95 +++ ..._create_user_business_structures_table.php | 44 ++ ...28_140152_create_user_businesses_table.php | 98 +++ ...07_29_135844_create_user_credits_table.php | 68 +++ ..._141050_create_user_credit_items_table.php | 46 ++ public/js/custom.js | 74 +-- .../admin/business/_user_detail_in.blade.php | 164 +++++ .../views/admin/business/points.blade.php | 91 +-- resources/views/admin/business/show.blade.php | 18 +- .../views/admin/business/structure.blade.php | 1 + .../admin/business/user_detail.blade.php | 155 +---- .../modal/business_user_detail.blade.php | 139 +---- .../views/admin/payment/credit.blade.php | 182 ++---- .../views/admin/payment/invoice.blade.php | 81 +-- .../admin/payment/modal_add_credit.blade.php | 45 ++ .../payment/modal_credit_status.blade.php | 82 +++ .../views/admin/settings/index.blade.php | 14 +- resources/views/dashboard/_points.blade.php | 26 +- resources/views/home.blade.php | 1 - .../layouts/includes/layout-sidenav.blade.php | 8 +- resources/views/pdf/credit.blade.php | 413 +++++++++++++ resources/views/sys/index.blade.php | 1 + .../sys/tools/business_structur.blade.php | 16 + resources/views/user/payment/credit.blade.php | 111 ++++ .../views/user/team/_points_detail.blade.php | 110 ++++ .../views/user/team/_points_sum.blade.php | 10 + resources/views/user/team/points.blade.php | 125 ++++ resources/views/user/team/structure.blade.php | 1 + routes/web.php | 14 +- storage/fonts/Helvetica-Oblique.afm.php | 572 ++++++++++++++++++ 63 files changed, 4610 insertions(+), 971 deletions(-) create mode 100644 app/Console/Commands/BusinessStore.php create mode 100644 app/Cron/BusinessUsersStore.php create mode 100644 app/Http/Controllers/User/PaymentController.php create mode 100644 app/Mail/MailCredit.php create mode 100644 app/Models/UserBusiness.php create mode 100644 app/Models/UserBusinessStructure.php create mode 100644 app/Models/UserCredit.php create mode 100644 app/Models/UserCreditItem.php create mode 100644 app/Repositories/CreditRepository.php create mode 100644 app/Services/BusinessPlan/BusinessTreeUserItem.php create mode 100644 app/Services/BusinessPlan/BusinessUserItem.php create mode 100644 app/Services/Credit.php create mode 100644 app/Services/SyS/BusinessStructur.php create mode 100644 database/migrations/2022_07_25_140152_create_user_businesses_table.php create mode 100644 database/migrations/2022_07_27_151941_create_user_business_structures_table.php create mode 100644 database/migrations/2022_07_28_140152_create_user_businesses_table.php create mode 100644 database/migrations/2022_07_29_135844_create_user_credits_table.php create mode 100644 database/migrations/2022_07_29_141050_create_user_credit_items_table.php create mode 100644 resources/views/admin/business/_user_detail_in.blade.php create mode 100644 resources/views/admin/payment/modal_add_credit.blade.php create mode 100644 resources/views/admin/payment/modal_credit_status.blade.php create mode 100644 resources/views/pdf/credit.blade.php create mode 100644 resources/views/sys/tools/business_structur.blade.php create mode 100644 resources/views/user/payment/credit.blade.php create mode 100644 resources/views/user/team/_points_detail.blade.php create mode 100644 resources/views/user/team/_points_sum.blade.php create mode 100644 resources/views/user/team/points.blade.php create mode 100644 storage/fonts/Helvetica-Oblique.afm.php diff --git a/.env b/.env index d58c144..4a89cf2 100644 --- a/.env +++ b/.env @@ -21,7 +21,7 @@ APP_CHECKOUT_TEST_MAIL=kevin.adametz@me.com APP_INFO_TEST_MAIL=kevin.adametz@me.com APP_MAIN_TAX = 1.19 -APP_SHIPPING_TAX = 19 +APP_MAIN_TAX_RATE = 19 LOG_CHANNEL=stack diff --git a/app/Console/Commands/BusinessStore.php b/app/Console/Commands/BusinessStore.php new file mode 100644 index 0000000..3670dc5 --- /dev/null +++ b/app/Console/Commands/BusinessStore.php @@ -0,0 +1,78 @@ +info('RUN Command BusinessStore on Day '. $day); + + $timeStart = microtime(true); + $this->info('RUN Command BusinessStore'); + + $month = $this->argument('month'); + $year = $this->argument('year'); + if(!$month || !$year){ + $this->info('need arguments month & year'); + return 0; + } + + //$this->info('month: '.$month.' year:'.$year); + for($i = 1; $i<=6; $i++){ + $month = $i; + $this->info('month: '.$month.' year:'.$year); + $businessUsersStore = new BusinessUsersStore($month, $year); + $businessUsersStore->storeUserBusinessStructure(); + $businessUsersStore->storeBusinessUsersDetail(); + $bool = $businessUsersStore->storeBusinessCompleted(); + + $diff = microtime(true) - $timeStart; + $sec = intval($diff); + $micro = $diff - $sec; + $this->info('BusinessStore: '.$bool. ' | Time: '.$sec. 'sec :' . round($micro * 1000, 4) . " ms"); + + } + + + //$this->info('END Command BusinessStore: '.$bool. ' | Time: '.$sec. 'sec :' . round($micro * 1000, 4) . " ms"); + + // \Log::info('Cron is running'); + //return 0; + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index a8c5158..ce5cf2c 100755 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -2,6 +2,7 @@ namespace App\Console; +use App\Console\Commands\BusinessStore; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; @@ -13,7 +14,7 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ - // + BusinessStore::class, ]; /** diff --git a/app/Cron/BusinessUsersStore.php b/app/Cron/BusinessUsersStore.php new file mode 100644 index 0000000..71c913e --- /dev/null +++ b/app/Cron/BusinessUsersStore.php @@ -0,0 +1,159 @@ +month = $month; + $this->year = $year; + } + + + public function getStoreUserBusinessStructure(){ + return UserBusinessStructure::where('year', $this->year)->where('month', $this->month)->first(); + } + + public function storeUserBusinessStructure() + { + if($this->user_business_structure = $this->getStoreUserBusinessStructure()){ + return $this->user_business_structure; + } + $treeCalcBot = new TreeCalcBot($this->month, $this->year, 'admin'); + //only load, when no structur is save + $treeCalcBot->initStructureAdmin(false); + $this->storeStructure($treeCalcBot); + } + + public function storeBusinessUsersDetail() + { + if(!$this->user_business_structure){ + $this->user_business_structure = $this->getStoreUserBusinessStructure(); + if(!$this->user_business_structure){ + abort(403, 'not found UserBusinessStructure'); + } + } + foreach($this->user_business_structure->users as $user_id=>$completed){ + if($completed === 0){ + $user = User::findOrFail($user_id); + $TreeCalcBot = new TreeCalcBot($this->month, $this->year, 'admin'); + $TreeCalcBot->initBusinesslUserDetail($user); + if(!$TreeCalcBot->business_user){ + abort(403, 'not found TreeCalcBot->business_user'); + } + $this->storeBusinesslUser($TreeCalcBot->business_user); + $users = $this->user_business_structure->users; + $users[$user_id] = 1; + $this->user_business_structure->users = $users; + $this->user_business_structure->save(); + } + } + } + + + public function storeBusinesslUser($business_user){ + $b_user = $business_user->getBUser(); + $b_user->user_items = $this->storeUserItems($business_user->businessUserItems, 1); + $b_user->b_structure_id = $this->user_business_structure->id; + $b_user->save(); + } + + + public function storeBusinessCompleted(){ + if(!$this->user_business_structure){ + $this->user_business_structure = $this->getStoreUserBusinessStructure(); + } + foreach($this->user_business_structure->users as $user_id=>$completed){ + if($completed === 0){ + return false; + } + $this->user_business_structure->completed = 1; + $this->user_business_structure->save(); + } + return true; + } + + + private function storeUserItems($userItems, $line){ + $ret = []; + foreach($userItems as $userItem){ + $temp = null; + if(count($userItem->businessUserItems) > 0){ + $temp = $this->storeUserItems($userItem->businessUserItems, $line+1); + } + $obj = new stdClass(); + $obj->user_id = $userItem->user_id; + $obj->line = $line; + $obj->points = $userItem->sales_volume_points_sum; + $obj->parents = $temp; + $ret[] = $obj; + } + return $ret; + } + + + private function storeStructure($treeCalcBot) + { + /*if($this->user_business_structure = $this->getStoreUserBusinessStructure()){ + return $this->user_business_structure; + }*/ + + $structure = []; + foreach($treeCalcBot->business_users as $business_user){ + $structure[] = $this->storeStructureItem($business_user, 0); + } + + $parentless = []; + if($treeCalcBot->parentless){ + foreach($treeCalcBot->parentless as $pless){ + $parentless[] = $this->storeStructureItem($pless, 0); + } + } + $fill = [ + 'month' => $this->month, + 'year' => $this->year, + 'structure' => $structure, + 'parentless' => $parentless, + 'users' => $this->users_structure, + 'completed' => false, + 'status' => 0 + ]; + $this->user_business_structure = UserBusinessStructure::create($fill); + return $this->user_business_structure; + } + + + + private function storeStructureItem($item, $deep){ + $temp = null; + if($item->businessUserItems){ + foreach($item->businessUserItems as $parent){ + $temp[] = $this->storeStructureItem($parent, $deep+1); + } + } + $this->users_structure[$item->user_id] = 0; + $obj = new stdClass(); + $obj->user_id = $item->user_id; + //$obj->name = $item->first_name .' '. $item->last_name ; + $obj->email = $item->email; + $obj->deep = $deep; + //$obj->points = $item->sales_volume_points_sum; + $obj->parents = $temp; + return $obj; + } + + + +} diff --git a/app/Http/Controllers/BusinessController.php b/app/Http/Controllers/BusinessController.php index ae98a3b..a8bb9a1 100644 --- a/app/Http/Controllers/BusinessController.php +++ b/app/Http/Controllers/BusinessController.php @@ -2,11 +2,13 @@ namespace App\Http\Controllers; -use App\Services\BusinessPlan\TreeCalcBot; use Request; use App\User; use Carbon\Carbon; +use App\Models\UserBusiness; use App\Services\HTMLHelper; +use App\Models\UserBusinessStructure; +use App\Services\BusinessPlan\TreeCalcBot; class BusinessController extends Controller @@ -21,7 +23,6 @@ class BusinessController extends Controller public function show() { $this->setFilterVars(); - $data = [ 'filter_months' => HTMLHelper::$months, 'filter_years' => HTMLHelper::getYearRange(), @@ -31,12 +32,15 @@ class BusinessController extends Controller return view('admin.business.show', $data); } - public function structure() { $this->setFilterVars(); - $TreeCalcBot = new TreeCalcBot(session('business_user_filter_month'), session('business_user_filter_year'), 'admin'); - $TreeCalcBot->initMain(); + $this->month = session('business_user_filter_month'); + $this->year = session('business_user_filter_year'); + + $TreeCalcBot = new TreeCalcBot($this->month, $this->year, 'admin'); + $TreeCalcBot->initStructureAdmin(); + $data = [ 'filter_months' => HTMLHelper::$months, 'filter_years' => HTMLHelper::getYearRange(), @@ -50,18 +54,31 @@ class BusinessController extends Controller $user = User::findOrFail($user_id); $this->setFilterVars(); - $TreeCalcBot = new TreeCalcBot(session('business_user_filter_month'), session('business_user_filter_year'), 'admin'); - $TreeCalcBot->initDetailUser($user); - if(!$TreeCalcBot->user){ + $data = []; + $data['month'] = session('business_user_filter_month'); + $data['year'] = session('business_user_filter_year'); + + $TreeCalcBot = new TreeCalcBot($data['month'], $data['year'], 'admin'); + $TreeCalcBot->initBusinesslUserDetail($user); + if(!$TreeCalcBot->business_user){ abort(403, 'no user found'); } - $data = [ - 'month' => HTMLHelper::getMonth(session('business_user_filter_month')), - 'year' => session('business_user_filter_year'), - 'TreeCalcBot' => $TreeCalcBot, - 'user' => $user, - ]; - return view('admin.business.user_detail', $data); + return view('admin.business.user_detail', compact('TreeCalcBot', 'user', 'data')); + } + + public function userStore($user_id) + { + dd('function on: App\Console\Commands\BusinessStore'); + /*$data = Request::all(); + $user = User::findOrFail($data['user_id']); + $TreeCalcBot = new TreeCalcBot($data['month'], $data['year'], 'admin'); + $TreeCalcBot->initBusinesslUserDetail($user); + if(!$TreeCalcBot->business_user){ + abort(403, 'no user found'); + } + //$TreeCalcBot->storeBusinesslUser();*/ + + //return back(); } private function setFilterVars(){ @@ -90,12 +107,123 @@ class BusinessController extends Controller } } - private function initSearch($archive = false, $request = true) - { - $this->setFilterVars(); + + public function userDatatable() + { $this->month = Request::get('business_user_filter_month'); $this->year = Request::get('business_user_filter_year'); + //only the currently month get from Users -> older month from UserBusiness + //return $this->userCurrentlyDatatable(); + if(TreeCalcBot::isFromStored($this->month, $this->year)){ + return $this->userStoredDatatable(); + }else{ + return $this->userCurrentlyDatatable(); + } + } + + private function initStoredSearch($archive = false, $request = true) + { + $this->setFilterVars(); + + $query = UserBusiness::select('user_businesses.*')->where('month', $this->month)->where('year', $this->year); + if(Request::get('business_user_filter_active')){ + if(Request::get('business_user_filter_active') == 1){ + $query->where('user_businesses.active_account', 1); + } + if(Request::get('business_user_filter_active') == 2){ + $query->where('user_businesses.active_account', 0); + } + if(Request::get('business_user_filter_active') == 3){ + //both -> payment_account only not null + } + } + return $query; + } + + private function userStoredDatatable() + { + $query = $this->initStoredSearch(); + return \DataTables::eloquent($query) + ->addColumn('id', function (UserBusiness $userBusiness) { + return ''; + //.''; + }) + ->addColumn('m_account', function (UserBusiness $userBusiness) { + return $userBusiness->m_account; + }) + ->addColumn('user_level', function (UserBusiness $userBusiness) { + return $userBusiness->user_level_name; + }) + ->addColumn('is_qual_kp', function (UserBusiness $userBusiness) { + if($userBusiness->m_level_id){ + $isQualKP = ($userBusiness->sales_volume_points_sum >= $userBusiness->qual_kp) ? true : false; + return ' KD '.$userBusiness->qual_kp.''; + } + return '-'; + }) + ->addColumn('sales_volume_points', function (UserBusiness $userBusiness) { + return '
'.$userBusiness->sales_volume_points_sum.'
'. + 'B: '.$userBusiness->sales_volume_points.' | S: '.$userBusiness->sales_volume_points_shop.''; + }) + ->addColumn('sales_volume_total', function (UserBusiness $userBusiness) { + return '
'.formatNumber($userBusiness->sales_volume_total_sum).' €
'. + 'B: '.formatNumber($userBusiness->sales_volume_total).' | S: '.formatNumber($userBusiness->sales_volume_total_shop).''; + }) + ->addColumn('email', function (UserBusiness $userBusiness) { + return $userBusiness->email; + }) + ->addColumn('first_name', function (UserBusiness $userBusiness) { + return $userBusiness->first_name; + }) + ->addColumn('last_name', function (UserBusiness $userBusiness) { + return $userBusiness->last_name; + }) + ->addColumn('sponsor', function (UserBusiness $userBusiness) { + if($userBusiness->sponsor){ + $sponsor = ""; + if($userBusiness->sponsor->is_sponsor){ + $sponsor .= $userBusiness->sponsor->first_name." ".$userBusiness->sponsor->last_name; + $sponsor .= "  ".'
'; + + $sponsor .= ''.$userBusiness->sponsor->email; + $sponsor .= ' | '.$userBusiness->sponsor->m_account; + $sponsor .= ''; + } + + return $sponsor; + } + return '-'; + }) + + ->addColumn('active_account', function (UserBusiness $userBusiness) { + return get_active_badge($userBusiness->active_account); + }) + ->addColumn('payment_account_date', function (UserBusiness $userBusiness) { + return $userBusiness->active_date ? formatDate($userBusiness->active_date) : "-"; + }) + ->orderColumn('id', 'id $1') + ->orderColumn('active_account', 'payment_account $1') + ->rawColumns(['id', 'is_qual_kp', 'sales_volume_points', 'sales_volume_total', 'sponsor', 'active_account']) + ->make(true); + } + + private function initCurrentlySearch($archive = false, $request = true) + { + $this->setFilterVars(); + $query = User::with('account')->select('users.*') ->where('users.deleted_at', '=', null) ->where('users.id', '!=', 1) @@ -114,26 +242,12 @@ class BusinessController extends Controller //both -> payment_account only not null } } - - if(Request::get('business_user_filter_name')){ - //$query->where('users.account.first_name', 'LIKE', '%'.Request::get('business_user_filter_name').'%'); - //$query->where('users.account.last_name', 'LIKE', '%'.Request::get('business_user_filter_name').'%'); - //$query->where('users.account.m_account', 'LIKE', '%'.Request::get('business_user_filter_name').'%'); - //$query->where('users.email', 'LIKE', '%'.Request::get('business_user_filter_name').'%'); - - } - - //->orderBy('created_at', 'DESC'); - /* $query = FlexHour::leftJoin("flex_hour_items", function($join) { - $join->on("flex_hour_items.flex_hour_id","=","flex_hours.id"); - $join->where("flex_hour_items.date","=", FlexHourItemBot::$date); - })*/ return $query; } - - public function userDatatable() - { - $query = $this->initSearch(); + + private function userCurrentlyDatatable() + { + $query = $this->initCurrentlySearch(); return \DataTables::eloquent($query) ->addColumn('id', function (User $user) { return ''; - // + data-route="'.route('modal_load').'">' + .''; + }) + ->addColumn('m_account', function (User $user) { + return $user->account ? $user->account->m_account : ''; }) ->addColumn('user_level', function (User $user) { return $user->user_level ? $user->user_level->name : ''; }) - ->addColumn('active_account', function (User $user) { - return get_active_badge($user->isActiveAccount()); - }) - ->addColumn('payment_account_date', function (User $user) { - return $user->payment_account ? $user->getPaymentAccountDateFormat(false) : "-"; - }) - ->addColumn('sales_volume_points', function (User $user) { + ->addColumn('is_qual_kp', function (User $user) { + if($user->user_level){ + $qual_kp = $user->user_level->qual_kp; + $sales_volume_points_sum = $user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_points_sum'); + $isQualKP = ($sales_volume_points_sum >= $qual_kp) ? true : false; + return ' KD '.$qual_kp.''; + } + return '-'; + }) + ->addColumn('sales_volume_points', function (User $user) { return '
'.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_points_sum').'
'. 'B: '.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_points').' | S: '.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_points_shop').''; }) ->addColumn('sales_volume_total', function (User $user) { - return '
'.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total_sum').'
'. - 'B: '.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total').' | S: '.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total_shop').''; + return '
'.formatNumber($user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total_sum')).' €
'. + 'B: '.formatNumber($user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total')).' | S: '.formatNumber($user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total_shop')).''; + }) + ->addColumn('email', function (User $user) { + return $user->email; + }) + ->addColumn('first_name', function (User $user) { + return $user->account ? $user->account->first_name : ''; + }) + ->addColumn('last_name', function (User $user) { + return $user->account ? $user->account->last_name : ''; }) ->addColumn('sponsor', function (User $user) { if($user->user_sponsor){ @@ -175,7 +304,7 @@ class BusinessController extends Controller data-init_from="admin" data-route="'.route('modal_load').'">
'; } - $sponsor .= ''.$user->email; + $sponsor .= ''.$user->user_sponsor->email; if($user->user_sponsor->account){ $sponsor .= ' | '.$user->user_sponsor->account->m_account; } @@ -184,51 +313,17 @@ class BusinessController extends Controller return $sponsor; } return '-'; - - return '
'.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total_sum').'
'. - 'B: '.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total').' | S: '.$user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total_shop').''; }) - ->addColumn('is_qual_kp', function (User $user) { - if($user->user_level){ - $qual_kp = $user->user_level->qual_kp; - $sales_volume_points_sum = $user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_points_sum'); - $isQualKP = ($sales_volume_points_sum >= $qual_kp) ? true : false; - return ' KD '.$qual_kp.''; - } - return '-'; + ->addColumn('active_account', function (User $user) { + return get_active_badge($user->isActiveAccount()); }) - - - - - - /* ->addColumn('sales_volume_points', function (User $user) { - return $user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_points'); + ->addColumn('payment_account_date', function (User $user) { + return $user->payment_account ? $user->getPaymentAccountDateFormat(false) : "-"; }) - ->addColumn('sales_volume_points_shop', function (User $user) { - return $user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_points_shop'); - }) - ->addColumn('sales_volume_points_sum', function (User $user) { - return $user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_points_sum'); - }) - ->addColumn('sales_volume_total', function (User $user) { - return $user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total'); - }) - ->addColumn('sales_volume_total_shop', function (User $user) { - return $user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total_shop'); - }) - ->addColumn('sales_volume_total_sum', function (User $user) { - return $user->getUserSalesVolumeBy($this->month, $this->year, 'sales_volume_total_sum'); - })*/ - ->orderColumn('id', 'id $1') - ->orderColumn('m_account', 'm_account $1') - ->orderColumn('first_name', 'first_name $1') - ->orderColumn('last_name', 'last_name $1') - ->orderColumn('user_level', 'm_level $1') ->orderColumn('active_account', 'payment_account $1') - ->rawColumns(['id', 'is_qual_kp', 'confirmed', 'sales_volume_points', 'sales_volume_total', 'sponsor', 'active', 'active_account']) + ->rawColumns(['id', 'is_qual_kp', 'sales_volume_points', 'sales_volume_total', 'sponsor', 'active_account']) ->make(true); - } + } } \ No newline at end of file diff --git a/app/Http/Controllers/BusinessPointsController.php b/app/Http/Controllers/BusinessPointsController.php index 39623a3..e345403 100644 --- a/app/Http/Controllers/BusinessPointsController.php +++ b/app/Http/Controllers/BusinessPointsController.php @@ -118,7 +118,7 @@ class BusinessPointsController extends Controller } } - private function initSearch($archive = false, $request = true) + private function initSearch() { $this->setFilterVars(); @@ -184,7 +184,7 @@ class BusinessPointsController extends Controller ->orderColumn('id', 'id $1') ->orderColumn('order', 'order $1') ->orderColumn('status', 'status $1') - ->orderColumn('status', 'message $1') + ->orderColumn('message', 'message $1') ->rawColumns(['id', 'order', 'status', 'message', 'total_net']) ->make(true); diff --git a/app/Http/Controllers/FileController.php b/app/Http/Controllers/FileController.php index 78b3802..ee92b1a 100644 --- a/app/Http/Controllers/FileController.php +++ b/app/Http/Controllers/FileController.php @@ -17,13 +17,19 @@ class FileController extends Controller { } - private function isPermission($shopping_order){ + private function isPermissionShoppingOrder($shopping_order){ $user_id = $shopping_order->auth_user_id ? $shopping_order->auth_user_id : $shopping_order->member_id; if(Auth::user()->isAdmin() || $user_id == Auth::user()->id){ return true; } abort(404); + } + private function isPermissionUserCredit($user_credit){ + if(Auth::user()->isAdmin() || $user_credit->user_id == Auth::user()->id){ + return true; + } + abort(404); } public function show($id = null, $disk = null, $do='file') @@ -43,7 +49,7 @@ class FileController extends Controller if ($disk === 'invoice'){ $shopping_order = \App\Models\ShoppingOrder::findOrFail($id); if($shopping_order->user_invoice){ - $this->isPermission($shopping_order); + $this->isPermissionShoppingOrder($shopping_order); $user_invoice = $shopping_order->user_invoice; $filename = $user_invoice->filename; $disk = $user_invoice->disk; @@ -52,25 +58,15 @@ class FileController extends Controller return Response::make('File no found.', 404);; } $file = Storage::disk($disk)->get($path); - $mime = Storage::disk($disk)->mimeType($path); - - } - if($do === 'download'){ - return Response::make($file, 200) - ->header("Content-Type", $mime) - ->header('Content-disposition', 'attachment; filename="'.$filename.'"'); - } - if($do === 'stream'){ - return Response::make($file, 200) - ->header("Content-Type", $mime) - ->header('Content-disposition','inline; filename="'.$filename.'"'); + $mime = Storage::disk($disk)->mimeType($path); } + } if ($disk === 'delivery'){ $shopping_order = \App\Models\ShoppingOrder::findOrFail($id); if($shopping_order->user_invoice){ - $this->isPermission($shopping_order); + $this->isPermissionShoppingOrder($shopping_order); $user_invoice = $shopping_order->user_invoice; $filename = $user_invoice->delivery_filename; $disk = $user_invoice->disk; @@ -80,8 +76,24 @@ class FileController extends Controller } $file = Storage::disk($disk)->get($path); $mime = Storage::disk($disk)->mimeType($path); - } + + } + + if ($disk === 'credit'){ + $user_credit = \App\Models\UserCredit::findOrFail($id); + $this->isPermissionUserCredit($user_credit); + $filename = $user_credit->filename; + $disk = $user_credit->disk; + $path = $user_credit->getDownloadPath(); + if (!Storage::disk($disk)->exists($path)) { + return Response::make('File no found.', 404);; + } + $file = Storage::disk($disk)->get($path); + $mime = Storage::disk($disk)->mimeType($path); + } + + if(isset($file)){ if($do === 'download'){ return Response::make($file, 200) ->header("Content-Type", $mime) @@ -93,9 +105,9 @@ class FileController extends Controller ->header('Content-disposition','inline; filename="'.$filename.'"'); } } + /*if ($disk === 'credit'){ - $UserCredit = \App\Models\UserCredit::findOrFail($id); $this->isPermission($UserCredit->auth_user_id); $filename = Credit::getFilename($UserCredit); diff --git a/app/Http/Controllers/ModalController.php b/app/Http/Controllers/ModalController.php index 199f4b2..19876b9 100644 --- a/app/Http/Controllers/ModalController.php +++ b/app/Http/Controllers/ModalController.php @@ -8,6 +8,7 @@ use App\Models\Product; use App\Models\Homeparty; use App\Models\UserLevel; +use App\Models\UserCredit; use App\Models\ShoppingUser; use App\Services\HTMLHelper; use App\Models\HomepartyUser; @@ -116,11 +117,10 @@ class ModalController extends Controller $data['month'] = session('team_user_filter_month'); $data['year'] = session('team_user_filter_year'); } - $TreeCalcBot = $this->getForBusinessUserDetail($user, $data); + $TreeCalcBot = $this->getForBusinessUserDetail($user, $data); $route = ""; $ret = view("admin.modal.business_user_detail", compact('TreeCalcBot', 'user', 'data'))->render(); } - if($data['action'] === 'edit_user_sales_volume'){ $userSalesVolume = UserSalesVolume::findOrFail($data['id']); $route = route('admin_business_points_store', ); @@ -130,7 +130,15 @@ class ModalController extends Controller $userSalesVolume = new UserSalesVolume(); $route = route('admin_business_points_store', ); $ret = view("admin.business.modal_add_points", compact('userSalesVolume', 'data', 'route'))->render(); - } + } + if($data['action'] === 'add-user-credit'){ + $value = []; + $ret = view("admin.payment.modal_add_credit", compact('value', 'data'))->render(); + } + if($data['action'] === 'user-credit-status'){ + $UserCredit = UserCredit::find($data['id']); //current user form order + $ret = view("admin.payment.modal_credit_status", compact('UserCredit', 'data'))->render(); + } } return response()->json(['response' => $data, 'html'=>$ret, 'status'=>$status]); } @@ -140,8 +148,8 @@ class ModalController extends Controller $auth_user = \Auth::user(); if($auth_user->isAdmin() || $auth_user->id === $user->id){ $TreeCalcBot = new TreeCalcBot($data['month'], $data['year'], $data['init_from']); - $TreeCalcBot->initDetailUser($user); - if(!$TreeCalcBot->user){ + $TreeCalcBot->initBusinesslUserDetail($user); + if(!$TreeCalcBot->business_user){ abort(403, 'no user found'); } return $TreeCalcBot; diff --git a/app/Http/Controllers/PaymentCreditController.php b/app/Http/Controllers/PaymentCreditController.php index 83f305e..64ecc5c 100644 --- a/app/Http/Controllers/PaymentCreditController.php +++ b/app/Http/Controllers/PaymentCreditController.php @@ -10,9 +10,15 @@ use App\Services\Util; use App\Services\Credit; use App\Services\Payment; use App\Models\UserCredit; -use App\Models\ShoppingOrderMargin; +use App\Services\HTMLHelper; +use App\Models\UserCreditItem; use App\Models\UserCreditMargin; +use Illuminate\Support\Collection; +use App\Models\ShoppingOrderMargin; + use App\Repositories\CreditRepository; +use App\Models\Models\UserCreditMargin as ModelsUserCreditMargin; +use stdClass; class PaymentCreditController extends Controller { @@ -24,8 +30,8 @@ class PaymentCreditController extends Controller public function __construct() { - $this->middleware('auth'); - $this->startYear = 2021; + $this->middleware('admin'); + $this->startYear = 2022; $this->endYear = date('Y'); $this->rangeYears = range($this->startYear, $this->endYear); $this->activeYear = $this->endYear; @@ -34,36 +40,35 @@ class PaymentCreditController extends Controller public function index() { - abort(403, "in progress"); - $data = $this->makeData(); - return view('admin.payment.credit.index', $data); + $this->setFilterVars(); + + $data = [ + 'filter_months' => HTMLHelper::$months, + 'filter_years' => HTMLHelper::getYearRange(2022), + 'user_credit_items' => $this->makeUserCreditItems(), + ]; + return view('admin.payment.credit', $data); } - public function store(){ $data = Request::all(); - if(isset($data['action']) && $data['action'] === 'add-user-credit'){ - $add_credit_error = false; if(!isset($data['member_id']) || !$user = User::find($data['member_id'])){ - $add_credit_error = 'Vertriebspartner nicht gefunden'; + \Session()->flash('alert-error', 'Vertriebspartner nicht gefunden'); + return back(); } if(!isset($data['credit'])){ - $add_credit_error = 'Bitte Betrag eingeben'; + \Session()->flash('alert-error', 'Bitte Betrag eingebe'); + return back(); } if(!isset($data['message'])){ - $add_credit_error = 'Bitte Mitteilung eingeben'; - } - if($add_credit_error){ - $data = $this->makeData(); - $data['add_credit_error'] = $add_credit_error; - return view('admin.payment.credit.index', $data); + \Session()->flash('alert-error', 'Bitte Betreff eingeben'); + return back(); } $credit = Util::reFormatNumber($data['credit']); $credit = number_format($credit, 2, '.', ''); - Payment::addUserCreditMargin($user, $credit, 3, $data['message']); \Session()->flash('alert-success', "Guthaben hinzugefügt"); } @@ -79,8 +84,8 @@ class PaymentCreditController extends Controller abort(404); } $user = User::findOrFail($data['userid']); - $invoice_repo = new CreditRepository($user); - $invoice_repo->create($data); + $credit_repo = new CreditRepository($user); + $credit_repo->create($data); \Session()->flash('alert-success', "Gutschrift erstellt"); return redirect($data['back']); } @@ -94,79 +99,52 @@ class PaymentCreditController extends Controller } } - private function makeData(){ - $this->setActiveYears(); - //$date1 = Carbon::parse('01.01.'.$this->activeYear." 00:00:00")->format('Y-m-d H:i:s'); - //$date2 = Carbon::parse('31.12.'.$this->activeYear." 23:59:59")->toDateString(); - - $ShoppingOrderMargins = ShoppingOrderMargin::join('users', 'm_sponsor_id', '=', 'users.id') - ->groupBy('m_sponsor_id') - ->join('user_accounts', 'account_id', '=', 'user_accounts.id') - ->select('users.id as user_id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name') - ->wherePaid(true) - ->whereCancellation(false) - ->wherePartnerCommissionPaid(false) - ->where('partner_commission_pending_to', '<', Carbon::now()) - ->get(); - - $ShoppingOrderMarginPendings = ShoppingOrderMargin::join('users', 'm_sponsor_id', '=', 'users.id') - ->groupBy('m_sponsor_id') - ->join('user_accounts', 'account_id', '=', 'user_accounts.id') - ->select('users.id as user_id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name') - ->wherePaid(true) - ->whereCancellation(false) - ->wherePartnerCommissionPaid(false) - ->where('partner_commission_pending_to', '>=', Carbon::now()) - ->get(); - - $UserCreditMargins = UserCreditMargin::wherePaid(false)->get(); - $ShoppingOrderMarginUserIds = ShoppingOrderMargin::select('m_sponsor_id')->groupBy('m_sponsor_id') - ->wherePaid(true) - ->whereCancellation(false) - ->wherePartnerCommissionPaid(false) - ->where('partner_commission_pending_to', '<', Carbon::now()) - ->get()->pluck('m_sponsor_id')->toArray(); - - $onlyUserCreditMargins = []; - foreach($UserCreditMargins as $key => $UserCreditMargin){ - if(!in_array($UserCreditMargin->user_id, $ShoppingOrderMarginUserIds)){ - if(isset($onlyUserCreditMargins[$UserCreditMargin->user_id])){ - $onlyUserCreditMargins[$UserCreditMargin->user_id]['sum'] += $UserCreditMargin->credit; - $onlyUserCreditMargins[$UserCreditMargin->user_id]['entries'][$UserCreditMargin->id] = $UserCreditMargin; - }else{ - $onlyUserCreditMargins[$UserCreditMargin->user_id] = [ - 'user_id' => $UserCreditMargin->user->id, - 'first_name' => $UserCreditMargin->user->account->first_name, - 'last_name' => $UserCreditMargin->user->account->last_name, - 'email' => $UserCreditMargin->user->email, - 'sum' => $UserCreditMargin->credit, - 'entries' => [$UserCreditMargin->id => $UserCreditMargin], - ]; - } - } + private function setFilterVars(){ + if(!session('credit_filter_month')){ + session(['credit_filter_month' => intval(date('m'))]); } - $data = [ - 'years' => $this->rangeYears, - 'active_year' => $this->activeYear, - 'ShoppingOrderMargins' => $ShoppingOrderMargins, - 'ShoppingOrderMarginPendings' => $ShoppingOrderMarginPendings, - 'onlyUserCreditMargins' => $onlyUserCreditMargins, - ]; - return $data; - } - - private function setActiveYears(){ - if(Request::get('filter_sales_year')){ - $this->activeYear = Request::get('filter_sales_year'); + if(!session('credit_filter_year')){ + session(['credit_filter_year' => intval(date('Y'))]); + } + if(Request::get('credit_filter_name')){ + session(['credit_filter_name' => Request::get('credit_filter_name')]); + } + if(Request::get('credit_filter_month')){ + session(['credit_filter_month' => Request::get('credit_filter_month')]); + } + if(Request::get('credit_filter_year')){ + session(['credit_filter_year' => Request::get('credit_filter_year')]); } } + private function makeUserCreditItems(){ + $ret = []; + $UserCreditItems = UserCreditItem::wherePaid(false)->get(); + foreach($UserCreditItems as $userCreditItem){ + if(isset($ret[$userCreditItem->user_id])){ + $ret[$userCreditItem->user_id]['sum'] += $userCreditItem->credit; + $ret[$userCreditItem->user_id]['entries'][$userCreditItem->id] = $userCreditItem; + }else{ + $ret[$userCreditItem->user_id] = [ + 'user_id' => $userCreditItem->user_id, + 'm_account' => $userCreditItem->user->account->m_account, + 'first_name' => $userCreditItem->user->account->first_name, + 'last_name' => $userCreditItem->user->account->last_name, + 'email' => $userCreditItem->user->email, + 'sum' => $userCreditItem->credit, + 'entries' => [$userCreditItem->id => $userCreditItem], + ]; + } + } + return $ret; + } + public function delete($id, $del){ - if($del === 'user_credit_margin'){ - $UserCreditMargin = UserCreditMargin::findOrFail($id); - if($deleteTime = $UserCreditMargin->deleteTime()){ - $UserCreditMargin->delete(); + if($del === 'user_credit_item'){ + $UserCreditItem = UserCreditItem::findOrFail($id); + if($deleteTime = $UserCreditItem->deleteTime()){ + $UserCreditItem->delete(); \Session()->flash('alert-success', "Guthaben ist gelöscht"); }else{ \Session()->flash('alert-error', "Guthaben kann nicht gelöscht werden"); @@ -177,7 +155,7 @@ class PaymentCreditController extends Controller public function datatable(){ - $this->setActiveYears(); + $this->setFilterVars(); $date1 = Carbon::parse('01.01.'.$this->activeYear)->format('Y-m-d'); $date2 = Carbon::parse('31.12.'.$this->activeYear)->format('Y-m-d'); @@ -188,32 +166,9 @@ class PaymentCreditController extends Controller //->orderBy('created_at', 'DESC'); return \DataTables::eloquent($query) - - - ->addColumn('total', function (UserCredit $UserCredit) { - return $UserCredit->getFormattedTotal()." €"; - }) - ->addColumn('user_margins', function (UserCredit $UserCredit) { + ->addColumn('view', function (UserCredit $UserCredit) { $ret = ""; - if($UserCredit->user_margins){ - foreach($UserCredit->user_margins as $user_margin){ - $ret .= $user_margin->firstname."/".$user_margin->lastname."/".$user_margin->reference."/".$user_margin->created_at."
"; - } - } - if($UserCredit->user_credits){ - foreach($UserCredit->user_credits as $user_credit){ - $ret .= nl2br($user_credit->message)." / ".$user_credit->created_at."
"; - - } - } - return $ret; - }) - /* ->addColumn('txaction', function (ShoppingOrder $ShoppingOrder) { - return Payment::getShoppingOrderBadge($ShoppingOrder); - })*/ - ->addColumn('credit', function (UserCredit $UserCredit) { - $ret = ""; - if(Credit::isCredit($UserCredit)){ + if($UserCredit->isCredit()){ $ret .= ' '; $ret .= ''; }else{ @@ -222,6 +177,19 @@ class PaymentCreditController extends Controller return $ret; }) + ->addColumn('total', function (UserCredit $UserCredit) { + return $UserCredit->getFormattedTotal()." €"; + }) + ->addColumn('credits', function (UserCredit $UserCredit) { + $ret = ""; + if($UserCredit->user_credit_items){ + foreach($UserCredit->user_credit_items as $user_credit_item){ + $ret .= nl2br($user_credit_item->message)." / ".$user_credit_item->created_at->format('d.m.Y')."
"; + + } + } + return $ret; + }) ->addColumn('status', function (UserCredit $UserCredit) { return ' @@ -233,7 +201,7 @@ class PaymentCreditController extends Controller ->orderColumn('id', 'id $1') ->orderColumn('status', 'status $1') ->orderColumn('total', 'total $1') - ->rawColumns(['shipping_order', 'total', 'credit', 'status', 'user_margins']) + ->rawColumns(['total', 'credits', 'status', 'view']) ->make(true); } } \ No newline at end of file diff --git a/app/Http/Controllers/PaymentInvoiceController.php b/app/Http/Controllers/PaymentInvoiceController.php index 23fb580..5d559ed 100644 --- a/app/Http/Controllers/PaymentInvoiceController.php +++ b/app/Http/Controllers/PaymentInvoiceController.php @@ -18,7 +18,7 @@ class PaymentInvoiceController extends Controller public function __construct() { - $this->middleware('auth'); + $this->middleware('admin'); } public function index() @@ -115,10 +115,8 @@ class PaymentInvoiceController extends Controller $ret = ""; $ret .= ' '; $ret .= ''; - return $ret; }) - ->orderColumn('id', 'id $1') ->orderColumn('invoice_number', 'invoice_number $1') ->orderColumn('txaction', 'txaction $1') diff --git a/app/Http/Controllers/SyS/SysController.php b/app/Http/Controllers/SyS/SysController.php index 738642c..f87bc9d 100644 --- a/app/Http/Controllers/SyS/SysController.php +++ b/app/Http/Controllers/SyS/SysController.php @@ -9,10 +9,10 @@ use App\Services\SyS\Import; use App\Services\SyS\Cronjobs; use App\Services\SyS\Customers; use App\Services\SyS\DomainSSL; -use App\Http\Controllers\Controller; -use App\Models\UserSalesVolume; use App\Services\SyS\Correction; +use App\Http\Controllers\Controller; use App\Services\SyS\ShoppingOrders; +use App\Services\SyS\BusinessStructur; class SysController extends Controller { @@ -26,27 +26,16 @@ class SysController extends Controller public function index() { - $UserSalesVolumes =UserSalesVolume::all(); - - foreach($UserSalesVolumes as $UserSalesVolume){ - if($UserSalesVolume->shopping_order->member_id !== NULL && $UserSalesVolume->user_id !== $UserSalesVolume->shopping_order->member_id){ - if($UserSalesVolume->shopping_order->member_id !== 6){ - dump($UserSalesVolume->shopping_order_id); - dump($UserSalesVolume->shopping_order->member_id); - dump($UserSalesVolume->user_id); - - dump("##"); - } - - } - } - dd("ebd"); return view('sys.index'); } public function tool($serve) { switch ($serve) { + + case 'business_structur': + return BusinessStructur::show(); + break; case 'sales_members': return Sales::show(); break; @@ -76,6 +65,10 @@ class SysController extends Controller public function store($serve) { switch ($serve) { + + case 'business_structur': + return BusinessStructur::show(); + break; case 'sales_members': return Sales::show(); break; diff --git a/app/Http/Controllers/User/PaymentController.php b/app/Http/Controllers/User/PaymentController.php new file mode 100644 index 0000000..910bd8c --- /dev/null +++ b/app/Http/Controllers/User/PaymentController.php @@ -0,0 +1,133 @@ +middleware('auth'); + /* $this->startYear = 2021; + $this->endYear = date('Y'); + $this->rangeYears = range($this->startYear, $this->endYear); + $this->activeYear = $this->endYear;*/ + } + + public function credit() + { + $user = \Auth::user(); + $data = [ + 'user' => $user, + ]; + return view('user.payment.credit', $data); + } + + + public function credit_datatable(){ + + $user = \Auth::user(); + $query = UserCredit::with('user', 'user.account')->select('user_credits.*')->where('user_id', $user->id); + + return \DataTables::eloquent($query) + + ->addColumn('view', function (UserCredit $UserCredit) { + $ret = ""; + if(Credit::isCredit($UserCredit)){ + $ret .= ' '; + $ret .= ''; + }else{ + $ret = "-"; + } + return $ret; + }) + ->addColumn('total', function (UserCredit $UserCredit) { + return $UserCredit->getFormattedTotal()." €"; + }) + ->addColumn('credits', function (UserCredit $UserCredit) { + $ret = ""; + if($UserCredit->user_credit_items){ + foreach($UserCredit->user_credit_items as $user_credit_item){ + $ret .= nl2br($user_credit_item->message)." / ".$user_credit_item->created_at->format('d.m.Y')."
"; + + } + } + return $ret; + }) + ->addColumn('status', function (UserCredit $UserCredit) { + return ''.$UserCredit->getStatusType().' '; + }) + ->orderColumn('id', 'id $1') + ->orderColumn('status', 'status $1') + ->orderColumn('total', 'total $1') + ->rawColumns(['total', 'credits', 'status', 'view']) + ->make(true); + } + + public function credit_item_datatable(){ + + $user = \Auth::user(); + $query = UserCreditItem::select('user_credit_items.*')->where('user_id', $user->id); + + return \DataTables::eloquent($query) + + ->addColumn('message', function (UserCreditItem $user_credit_item) { + return nl2br($user_credit_item->message); + }) + ->addColumn('credit', function (UserCreditItem $user_credit_item) { + return formatNumber($user_credit_item->credit)." €"; + }) + ->addColumn('created_at', function (UserCreditItem $user_credit_item) { + return formatDate($user_credit_item->created_at); + }) + ->addColumn('status', function (UserCreditItem $user_credit_item) { + return ''.$user_credit_item->getStatusType().' '; + }) + ->addColumn('paid', function (UserCreditItem $user_credit_item) { + return ($user_credit_item->paid && $user_credit_item->user_credit) ? + ' '.$user_credit_item->user_credit->full_number.'' + : ''; + }) + + ->orderColumn('message', 'message $1') + ->orderColumn('credit', 'credit $1') + ->orderColumn('created_at', 'created_at $1') + ->orderColumn('status', 'status $1') + ->rawColumns(['message', 'status', 'paid']) + ->make(true); + } + + + /*private function setActiveYears(){ + if(Request::get('filter_year')){ + $this->activeYear = Request::get('filter_year'); + } + } + + public function revenue() + { + $this->setActiveYears(); + + $user = \Auth::user(); + $data = [ + 'user' => $user, + 'years' => $this->rangeYears, + 'active_year' => $this->activeYear, + 'months' => range(1, 12), + ]; + return view('user.payment.revenue', $data); + }*/ +} \ No newline at end of file diff --git a/app/Http/Controllers/User/TeamController.php b/app/Http/Controllers/User/TeamController.php index 4045db8..f8cf8a7 100755 --- a/app/Http/Controllers/User/TeamController.php +++ b/app/Http/Controllers/User/TeamController.php @@ -2,13 +2,13 @@ namespace App\Http\Controllers\User; +use Request; use App\User; use App\Services\HTMLHelper; +use App\Models\UserSalesVolume; use App\Http\Controllers\Controller; use App\Services\BusinessPlan\TreeCalcBot; -use Request; - - +use Auth; class TeamController extends Controller { @@ -38,18 +38,32 @@ class TeamController extends Controller $user = User::find(\Auth::user()->id); $this->setFilterVars(); $TreeCalcBot = new TreeCalcBot(session('team_user_filter_month'), session('team_user_filter_year'), 'member'); - $TreeCalcBot->initUser($user->id); + $TreeCalcBot->initStructureUser($user->id); //for testing //$TreeCalcBot->initUser(56); $data = [ 'filter_months' => HTMLHelper::$months, - 'filter_years' => HTMLHelper::getYearRange(2022), + 'filter_years' => HTMLHelper::getYearRange(date('Y')), 'TreeCalcBot' => $TreeCalcBot, ]; return view('user.team.structure', $data); } + public function points() + { + $this->setFilterVars(); + $user = User::find(\Auth::user()->id); + $userSalesVolume = $user->getUserSalesVolume(intval(session('team_user_points_filter_month')), intval(session('team_user_points_filter_year')), 'first'); + $data = [ + 'userSalesVolume' => $userSalesVolume, + 'filter_months' => HTMLHelper::$months, + 'filter_years' => HTMLHelper::getYearRange(date('Y')), + ]; + return view('user.team.points', $data); + } + + private function setFilterVars(){ if(!session('team_user_filter_month')){ @@ -58,13 +72,90 @@ class TeamController extends Controller if(!session('team_user_filter_year')){ session(['team_user_filter_year' => intval(date('Y'))]); } + + if(!session('team_user_points_filter_month')){ + session(['team_user_points_filter_month' => intval(date('m'))]); + } + if(!session('team_user_points_filter_year')){ + session(['team_user_points_filter_year' => intval(date('Y'))]); + } if(Request::get('team_user_filter_month')){ session(['team_user_filter_month' => Request::get('team_user_filter_month')]); } - if(Request::get('team_user_filter_year')){ - session(['team_user_filter_year' => Request::get('team_user_filter_year')]); + if(Request::get('team_user_points_filter_year')){ + session(['team_user_points_filter_year' => Request::get('team_user_points_filter_year')]); } + + if(Request::get('team_user_points_filter_month')){ + session(['team_user_points_filter_month' => Request::get('team_user_points_filter_month')]); + } + if(Request::get('team_user_points_filter_year')){ + session(['team_user_points_filter_year' => Request::get('team_user_points_filter_year')]); + } + } + + private function initSearchPoints() + { + $this->setFilterVars(); + + $user_id = \Auth::user()->id; + $query = UserSalesVolume::with('user', 'user.account')->with('shopping_order')->select('user_sales_volumes.*') + ->where('user_sales_volumes.user_id', '=', $user_id) + ->where('user_sales_volumes.month', '=', Request::get('team_user_points_filter_month')) + ->where('user_sales_volumes.year', '=', Request::get('team_user_points_filter_year')); + + return $query; + } + + + public function datatablePoints(){ + + $query = $this->initSearchPoints(); + return \DataTables::eloquent($query) + + ->addColumn('order', function (UserSalesVolume $UserSalesVolume) { + if($UserSalesVolume->shopping_order){ + if($UserSalesVolume->status === 1 && $UserSalesVolume->shopping_order->auth_user_id === $UserSalesVolume->user_id){ + return ''.$UserSalesVolume->shopping_order->id.''; + } + if(($UserSalesVolume->status === 2 || $UserSalesVolume->status === 3) && $UserSalesVolume->shopping_order->member_id === $UserSalesVolume->user_id){ + return ''.$UserSalesVolume->shopping_order->id.''; + } + } + return ''; + }) + ->addColumn('total_net', function (UserSalesVolume $UserSalesVolume) { + return formatNumber($UserSalesVolume->total_net).' €'; + }) + + ->addColumn('status', function (UserSalesVolume $UserSalesVolume) { + return ''.$UserSalesVolume->getStatusType().''; + }) + ->addColumn('message', function (UserSalesVolume $UserSalesVolume) { + return ''.$UserSalesVolume->message.''; + }) + + ->orderColumn('id', 'id $1') + ->orderColumn('order', 'order $1') + ->orderColumn('status', 'status $1') + ->orderColumn('message', 'message $1') + + ->rawColumns(['id', 'order', 'status', 'message', 'total_net']) + ->make(true); + } + + public function load(){ + + $user = User::find(\Auth::user()->id); + $userSalesVolume = $user->getUserSalesVolume(intval(session('team_user_points_filter_month')), intval(session('team_user_points_filter_year')), 'first'); + + $data = [ + 'userSalesVolume' => $userSalesVolume, + ]; + $html = view('user.team._points_sum', $data)->render(); + return response()->json(['response' => true, 'data'=>$data, 'html'=>$html]); + } diff --git a/app/Mail/MailCredit.php b/app/Mail/MailCredit.php new file mode 100644 index 0000000..7508347 --- /dev/null +++ b/app/Mail/MailCredit.php @@ -0,0 +1,54 @@ +user_credit = $user_credit; + $this->subject = 'Deine Gutschrift auf mivita.care'; + } + + public function build() + { + $title = __('email.credit_title'); + $copy1line = __('email.credit_copy1line'); + + $filename = $this->user_credit->filename; + $disk = $this->user_credit->disk; + $path = $this->user_credit->getDownloadPath(); + + if (!Storage::disk($disk)->exists($path)) { + return; + } + $file = Storage::disk($disk)->path($path); + $file = str_replace('//', '/', $file); + $mime = Storage::disk($disk)->mimeType($path); + + return $this->view('emails.blank')->with([ + 'title' => $title, + 'copy1line' => $copy1line, + ])->attach($file,[ + 'as' => $filename, + 'mime' => $mime, + ]); // attach file; + } +} \ No newline at end of file diff --git a/app/Models/UserBusiness.php b/app/Models/UserBusiness.php new file mode 100644 index 0000000..48c8379 --- /dev/null +++ b/app/Models/UserBusiness.php @@ -0,0 +1,104 @@ + 'int', + 'month' => 'int', + 'year' => 'int', + 'b_structure_id' => 'int', + 'm_level_id' => 'int', + 'active_account' => 'bool', + 'm_account' => 'int', + 'sales_volume_points' => 'int', + 'sales_volume_points_shop' => 'int', + 'sales_volume_points_sum' => 'int', + 'sales_volume_total' => 'float', + 'sales_volume_total_shop' => 'float', + 'sales_volume_total_sum' => 'float', + 'margin' => 'int', + 'margin_shop' => 'int', + 'qual_kp' => 'int', + 'qual_tp' => 'int', + 'total_tp' => 'int', + 'total_qual_tp' => 'int', + 'commission_team_total' => 'float', + 'commission_shop_sales' => 'float', + 'qual_user_level' => 'array', + 'sponsor' => 'object', + 'business_lines' => AsArrayObject::class, + 'user_items' => AsArrayObject::class + ]; + + protected $dates = [ + 'payment_account_date', + 'active_date' + ]; + + protected $fillable = [ + 'user_id', + 'month', + 'year', + 'b_structure_id', + 'm_level_id', + 'sponsor', + 'user_level_name', + 'active_account', + 'payment_account_date', + 'active_date', + 'm_account', + 'email', + 'first_name', + 'last_name', + 'sales_volume_points', + 'sales_volume_points_shop', + 'sales_volume_points_sum', + 'sales_volume_total', + 'sales_volume_total_shop', + 'sales_volume_total_sum', + 'margin', + 'margin_shop', + 'qual_kp', + 'qual_tp', + 'qual_user_level', + 'total_tp', + 'total_qual_tp', + 'commission_team_total', + 'commission_shop_sales', + 'business_lines', + 'user_items', + ]; + + public function user_business_structure() + { + return $this->belongsTo(UserBusinessStructure::class, 'b_structure_id'); + } + + public function isSave(){ + return $this->id !== null ? true : false; + } + + public function setPaymentAccountDateAttribute( $value ) { + $this->attributes['payment_account_date'] = isset($value) ? (new Carbon($value))->format('Y-m-d') : NULL; + } + + + public function setActiveDateAttribute( $value ) { + $this->attributes['active_date'] = isset($value) ? (new Carbon($value))->format('Y-m-d') : NULL; + } + + + +} diff --git a/app/Models/UserBusinessStructure.php b/app/Models/UserBusinessStructure.php new file mode 100644 index 0000000..1ecc9bb --- /dev/null +++ b/app/Models/UserBusinessStructure.php @@ -0,0 +1,73 @@ + 'int', + 'year' => 'int', + 'completed' => 'bool', + 'status' => 'int', + 'structure' => 'object', + 'parentless' => 'object', + 'users' => 'array', + ]; + + protected $fillable = [ + 'month', + 'year', + 'structure', + 'parentless', + 'users', + 'completed', + 'status' + ]; + + + public function user_businesses() + { + return $this->hasMany(UserBusiness::class, 'b_structure_id'); + } +} diff --git a/app/Models/UserCredit.php b/app/Models/UserCredit.php new file mode 100644 index 0000000..d7ec7c4 --- /dev/null +++ b/app/Models/UserCredit.php @@ -0,0 +1,172 @@ + 'int', + 'month' => 'int', + 'year' => 'int', + 'number' => 'int', + 'net' => 'float', + 'tax_rate' => 'float', + 'tax' => 'float', + 'taxable' => 'bool', + 'total' => 'float', + 'paid_out' => 'bool', + 'cancellation' => 'bool', + 'cancellation_id' => 'int', + 'status' => 'int', + 'infos' => 'array' + ]; + + protected $dates = [ + 'date', + 'paid_out_date', + 'cancellation_date' + ]; + + protected $fillable = [ + 'user_id', + 'month', + 'year', + 'date', + 'full_number', + 'number', + 'net', + 'tax_rate', + 'tax', + 'total', + 'taxable', + 'filename', + 'dir', + 'disk', + 'infos', + 'paid_out', + 'paid_out_date', + 'cancellation', + 'cancellation_id', + 'cancellation_date', + 'status' + ]; + + public static $statusTypes = [ + 0 => 'offen', + 1 => 'bezahlt', + 2 => 'prüfen', + 10 => 'storniert' + ]; + + public static $statusColors = [ + 0 => 'warning', + 1 => 'success', + 2 => 'secondary', + 10 => 'danger', + ]; + + + public function user() + { + return $this->belongsTo(User::class); + } + + public function user_credit_items() + { + return $this->hasMany(UserCreditItem::class); + } + + public function isCredit(){ + return $this->filename ? true : false; + } + + public function getDateAttribute($value) + { + return $value ? Carbon::parse($value)->format(\Util::formatDateDB()) : ""; + } + + + public function setDateAttribute( $value ) { + $this->attributes['date'] = isset($value) ? (new Carbon($value))->format('Y-m-d') : NULL; + } + public function getDateRaw(){ + return isset($this->attributes['date']) ? $this->attributes['date'] : NULL; + } + + public function getFormattedTax() + { + return formatNumber($this->attributes['tax']); + } + + public function getFormattedNet() + { + return formatNumber($this->attributes['net']); + } + + public function getFormattedTotal() + { + return formatNumber($this->attributes['total']); + } + + + public function getStatusType(){ + return isset(self::$statusTypes[$this->status]) ? self::$statusTypes[$this->status] : ""; + } + + public function getStatusColor(){ + return isset(self::$statusColors[$this->status]) ? self::$statusColors[$this->status] : "default"; + } + + public function getDownloadPath($full = false){ + if(!$full){ + return $this->dir.$this->filename; + } + return \Storage::disk($this->disk)->path($this->dir.$this->filename); + } +} diff --git a/app/Models/UserCreditItem.php b/app/Models/UserCreditItem.php new file mode 100644 index 0000000..e795ddf --- /dev/null +++ b/app/Models/UserCreditItem.php @@ -0,0 +1,99 @@ + 'Provision Shop', + 2 => 'Provision Team', + 3 => 'Guthaben hinzugefügt', + 4 => 'commission ...', + ]; + + public static $statusColors = [ + 0 => 'warning', + 1 => 'success', + 2 => 'secondary', + 3 => 'warning', + 4 => 'info', + 10 => 'danger', + ]; + + + protected $table = 'user_credit_items'; + + protected $casts = [ + 'user_id' => 'int', + 'user_credit_id' => 'int', + 'credit' => 'float', + 'status' => 'int', + 'paid' => 'bool' + ]; + + protected $fillable = [ + 'user_id', + 'user_credit_id', + 'credit', + 'message', + 'status', + 'paid' + ]; + + public function user_credit() + { + return $this->belongsTo(UserCredit::class); + } + + public function user() + { + return $this->belongsTo(User::class); + } + + + public function deleteTime(){ + $time = '+100 min'; + if(Carbon::parse($this->created_at)->modify($time)->gt(Carbon::now())){ + return Carbon::now()->diffInMinutes(Carbon::parse($this->created_at)->modify($time)); + } + return false; + } + + public function getStatusType(){ + return isset(self::$statusTypes[$this->status]) ? self::$statusTypes[$this->status] : ""; + } + + public function getStatusColor(){ + return isset(self::$statusColors[$this->status]) ? self::$statusColors[$this->status] : "default"; + } + + +} diff --git a/app/Models/UserSalesVolume.php b/app/Models/UserSalesVolume.php index 93ec826..ef68259 100644 --- a/app/Models/UserSalesVolume.php +++ b/app/Models/UserSalesVolume.php @@ -56,6 +56,8 @@ use App\User; * @method static \Illuminate\Database\Eloquent\Builder|UserSalesVolume whereUserInvoiceId($value) * @method static \Illuminate\Database\Eloquent\Builder|UserSalesVolume whereYear($value) * @mixin \Eloquent + * @property array|null $syslog + * @method static \Illuminate\Database\Eloquent\Builder|UserSalesVolume whereSyslog($value) */ class UserSalesVolume extends Model { diff --git a/app/Repositories/CreditRepository.php b/app/Repositories/CreditRepository.php new file mode 100644 index 0000000..4df185b --- /dev/null +++ b/app/Repositories/CreditRepository.php @@ -0,0 +1,125 @@ +model = $model; + } + + public function create($request = []) + { + //need invoice $data + $number = Credit::getCreditNumber(); + $credit_date = isset($request['credit_date']) ? $request['credit_date'] : \Carbon::now()->format("d.m.Y"); + $credit_send_mail = isset($request['credit_send_mail']) ? true: false; + $credit_number = Credit::createCreditNumber($number, $credit_date); + + $this->user_credit = new UserCredit(); + $user_credit_items = $this->makeUserCredit(); + $data = [ + 'user' => $this->model, + 'credit_date' => $credit_date, + 'credit_number' => $credit_number, + 'user_credits' => $this->user_credit, + 'user_credit_items' => $user_credit_items, + ]; + $pdf = PDF::loadView('pdf.credit', $data); + $pdf->setPaper('A4', 'portrait'); + + $dir = Credit::getCreditStorageDir($credit_date); + if(!Storage::disk('public')->exists( $dir )){ + Storage::disk('public')->makeDirectory($dir); //creates directory + } + $path = Storage::disk('public')->getAdapter()->getPathPrefix(); + $filename = Credit::makeCreditFilename($credit_number); + + $pdf->save($path.$dir.$filename); + + $pdfMerger = new MyPDFMerger(); + $pdfMerger->addPDF($path.$dir.$filename); + $file = $pdfMerger->myMerge('string', $filename, 'template_invoice_de'); + Storage::disk('public')->put($dir.$filename, $file); + + + + $this->user_credit->user_id = $this->model->id; + $this->user_credit->year = \Carbon::parse($credit_date)->format('Y'); + $this->user_credit->month = \Carbon::parse($credit_date)->format('n'); + $this->user_credit->date = $credit_date; + $this->user_credit->filename = $filename; + $this->user_credit->dir = $dir; + $this->user_credit->disk = 'public'; + $this->user_credit->number = $number; + $this->user_credit->full_number = $credit_number; + $this->user_credit->save(); + + if($credit_send_mail){ + Credit::sendCreditMail($this->user_credit); + } + $this->finishUserCredit($this->user_credit->id, $user_credit_items); + return true; + } + + private function finishUserCredit($user_credit_id, $user_credit_items){ + //next credits + Credit::makeNextCreditNumber(); + //mark as payed + //$UserCreditItems = UserCreditItem::where('user_id', $this->model->id)->wherePaid(false)->get(); + foreach($user_credit_items as $user_credit_item){ + $user_credit_item->paid = true; + $user_credit_item->user_credit_id = $user_credit_id; + $user_credit_item->save(); + } + } + + + private function makeUserCredit(){ + + $this->user_credit->net = 0; + $this->user_credit->infos = []; + $infos = []; + $user_credit_items = []; + + + $UserCreditItems = UserCreditItem::where('user_id', $this->model->id)->wherePaid(false)->get(); + foreach($UserCreditItems as $userCreditItem){ + $user_credit_items[] = $userCreditItem; + $infos[] = ['id' => $userCreditItem->id, 'credit' => $userCreditItem->credit]; + $this->user_credit->net += $userCreditItem->credit; + } + /* taxable_sales //user tax + 1 //umsatzsteuerpflichtig + 2 // nicht umsatzsteuerpflichtig + */ + if($this->model->account){ + $this->user_credit->taxable = $this->model->account->taxable_sales == 2 ? false : true; + if($this->user_credit->taxable){ + $this->user_credit->tax_rate = config('app.main_tax_rate'); + $this->user_credit->total = round($this->user_credit->net * config('app.main_tax'), 2); + $this->user_credit->tax = $this->user_credit->total - $this->user_credit->net; + + }else{ + $this->user_credit->tax_rate = 0; + $this->user_credit->total = $this->user_credit->net; + $this->user_credit->tax = 0; + } + } + $this->user_credit->infos = $infos; + return $user_credit_items; + } + +} \ No newline at end of file diff --git a/app/Services/BusinessPlan/BusinessTreeUserItem.php b/app/Services/BusinessPlan/BusinessTreeUserItem.php new file mode 100644 index 0000000..ec59ebe --- /dev/null +++ b/app/Services/BusinessPlan/BusinessTreeUserItem.php @@ -0,0 +1,172 @@ +date = $date; + return $this; + } + + public function makeUser(User $user){ + + $this->user_level_active = $user->user_level ? $user->user_level : null; + $this->b_user = new UserBusiness(); + $fill = [ + 'user_id' => $user->id, + 'month' => $this->date->month, + 'year' => $this->date->year, + 'm_level' => $user->m_level, + 'm_sponsor' => $user->m_sponsor, + 'user_level_name' => $user->user_level ? $user->user_level->name : '', + 'active_account' => $user->payment_account ? Carbon::parse($user->payment_account)->gt(Carbon::parse($this->date->start_date)) : false, + 'payment_account_date' => $user->payment_account ? $user->getPaymentAccountDateFormat(false) : NULL, + 'active_date' => $user->active_date ? $user->active_date : NULL, + 'm_account' => $user->account->m_account, + 'email' => $user->email, + 'first_name' => $user->account->first_name, + 'last_name' => $user->account->last_name, + 'sales_volume_points' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points'), + 'sales_volume_points_shop' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points_shop'), + 'sales_volume_points_sum' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points_sum'), + 'sales_volume_total' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total'), + 'sales_volume_total_shop' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total_shop'), + 'sales_volume_total_sum' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total_sum'), + 'margin' => $user->user_level_active ? $user->user_level_active->margin : 0, + 'margin_shop' => $user->user_level_active ? $user->user_level_active->margin_shop : 0, + 'qual_kp' => $user->user_level_active ? $user->user_level_active->qual_kp : 0, + 'qual_tp' => $user->user_level_active ? $user->user_level_active->qual_tp : 0, + ]; + $this->b_user->fill($fill); + } + + public function addUserID(){ + TreeCalcBot::addUserID($this->user_id); + } + + public function isQualKP(){ + return ($this->sales_volume_points_sum >= $this->qual_kp) ? true : false; + } + + public function getRestQualKP(){ + return $this->sales_volume_points_sum - $this->qual_kp; + } + + public function checkSponsor(){ + if($this->m_sponsor === null){ + $this->m_sponsor_name = 'Keinen Sponsor zugewiesen'; + return; + } + $user = User::find($this->m_sponsor); + if($user){ + if($user->account){ + $this->m_sponsor_name = substr('Sponsor: '.$user->account->first_name.' '.$user->account->last_name.' | '.$user->email.' | '.$user->account->m_account, 0, 190); + }else{ + $this->m_sponsor_name = 'Sponsor: '.$user->email; + } + return; + } + $this->m_sponsor_name = 'Sponsor wurde gelöscht.'; + return; + } + /* + + 'total_tp' => , + 'total_qual_tp' => , + 'commission_total' => , + 'lines', + 'items', + 'qual_user_level_id' + */ + public function readParentsUser(){ + + $users = User::with('account')->select('users.*') + ->where('users.deleted_at', '=', null) + ->where('users.id', '!=', 1) + ->where('users.admin', "<", 4) + ->where('users.m_level', "!=", null) + ->where('users.m_sponsor', "=", $this->user_id) //<- need the id for parents / sponsors + ->where('users.payment_account', "!=", null) + ->where('users.active_date', "<=", $this->date->end_date) + ->get(); + dd($users); + if($users){ + foreach($users as $user){ + $TreeUserItem = new TreeUserItem($this->date); + $TreeUserItem->makeUser($user); + $TreeUserItem->addUserID(); + $this->items[] = $TreeUserItem; + } + } + + foreach($this->items as $item){ + $item->readParentsUser(); + } + + } + + + public function calcUserTP($line){ + if(!isset($this->lines[$line])){ + $this->lines[$line] = new stdClass(); + $this->lines[$line]->points = 0; + } + foreach($this->items as $item){ + if(count($item->items) > 0){ + $this->calcUserTP($line+1); + } + $this->lines[$line]->points += $item->sales_volume_points_sum; + $this->total_tp += $item->sales_volume_points_sum; + + } + } + + + public function calcQualTP(){ + if($this->isQualKP()){ + $this->total_qual_tp = $this->total_tp + $this->getRestQualKP(); + $this->qual_user_level = UserLevel::where('qual_tp', '<=', $this->total_qual_tp)->where('pos', '<=', $this->user->user_level->pos)->orderBy('qual_tp', 'desc')->first(); + $this->commission_total = 0; + if($this->qual_user_level){ + foreach($this->lines as $line => $values){ + $values->margin = $this->qual_user_level->{'pr_line_'.$line}; + if($line > 6){ + //wachstumsbonus + $values->margin = $this->qual_user_level->growth_bonus; + } + $values->commission = round($values->points / 100 * $values->margin, 2); + + $this->commission_total += $values->commission; + $this->lines[$line] = $values; + } + } + } + } + + + public function __get($property) { + if (property_exists($this->b_user, $property)) { + return $this->b_user->$property; + } + if (isset($this->b_user->{$property})) { + return $this->b_user->{$property}; + } + } + +} diff --git a/app/Services/BusinessPlan/BusinessUserItem.php b/app/Services/BusinessPlan/BusinessUserItem.php new file mode 100644 index 0000000..1bfa0b1 --- /dev/null +++ b/app/Services/BusinessPlan/BusinessUserItem.php @@ -0,0 +1,257 @@ +date = $date; + return $this; + } + + public function makeUser($user_id){ + + //check for user an load + $this->b_user = UserBusiness::where('user_id', $user_id)->where('month', $this->date->month)->where('year', $this->date->year)->first(); + if($this->b_user !== null){ + return; + } + //read User here, can delete in stored data. + $user = User::find($user_id); + $user_level_active = $user->user_level ? $user->user_level : null; + $this->user_level_active_pos = $user_level_active ? $user_level_active->pos : 0; + $this->b_user = new UserBusiness(); + $fill = [ + 'user_id' => $user->id, + 'month' => $this->date->month, + 'year' => $this->date->year, + 'm_level_id' => $user->m_level, + 'user_level_name' => $user_level_active ? $user_level_active->name : '', + 'active_account' => $user->payment_account ? Carbon::parse($user->payment_account)->gt(Carbon::parse($this->date->start_date)) : false, + 'payment_account_date' => $user->payment_account ? $user->getPaymentAccountDateFormat(false) : NULL, + 'active_date' => $user->active_date ? $user->active_date : NULL, + 'm_account' => $user->account->m_account, + 'email' => $user->email, + 'first_name' => $user->account->first_name, + 'last_name' => $user->account->last_name, + 'sales_volume_points' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points'), + 'sales_volume_points_shop' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points_shop'), + 'sales_volume_points_sum' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points_sum'), + 'sales_volume_total' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total'), + 'sales_volume_total_shop' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total_shop'), + 'sales_volume_total_sum' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total_sum'), + 'margin' => $user_level_active ? $user_level_active->margin : 0, + 'margin_shop' => $user_level_active ? $user_level_active->margin_shop : 0, + 'qual_kp' => $user_level_active ? $user_level_active->qual_kp : 0, + 'qual_tp' => $user_level_active ? $user_level_active->qual_tp : 0, + 'commission_team_total' => 0, + 'commission_shop_sales' => 0, + ]; + $this->b_user->fill($fill); + $this->b_user->business_lines = []; + $this->b_user->user_items = []; + $this->b_user->commission_shop_sales = round($this->b_user->sales_volume_total_shop / 100 * $this->b_user->margin_shop, 2); + + } + + public function addUserID(){ + TreeCalcBot::addUserID($this->b_user->user_id); + } + public function getBUser(){ + return $this->b_user; + } + + public function addBusinessLineToUser($line, $obj){ + $this->b_user->business_lines[$line] = $obj; + } + + public function addBusinessLinePoints($line, $points){ + $obj = $this->business_lines[$line]; + $obj->points += $points; + $this->b_user->business_lines[$line] = $obj; + } + + public function addTotalTP($points){ + $this->b_user->total_tp += $points; + + } + + public function isQualKP(){ + return ($this->sales_volume_points_sum >= $this->qual_kp) ? true : false; + } + + public function getRestQualKP(){ + return $this->sales_volume_points_sum - $this->qual_kp; + } + + public function getCommissionTotal(){ + return round($this->commission_shop_sales + $this->commission_team_total, 2); + } + + public function calcQualTP(){ + if($this->isQualKP()){ + $this->b_user->total_qual_tp = $this->total_tp + $this->getRestQualKP(); + $commission_total = 0; + $qualUserLevel = UserLevel::where('qual_tp', '<=', $this->total_qual_tp)->where('pos', '<=', $this->user_level_active_pos)->orderBy('qual_tp', 'desc')->first(); + if($qualUserLevel){ + $this->b_user->qual_user_level = $qualUserLevel->toArray(); + foreach($this->business_lines as $line => $object){ + //growth_bonus = ab ebene 6 wachstumsbonus + $object->margin = ($line <= 6) ? $this->qual_user_level['pr_line_'.$line] : $this->qual_user_level['growth_bonus']; + $object->commission = round($object->points / 100 * $object->margin, 2); + $commission_total += $object->commission; + $this->b_user->business_lines[$line] = $object; + } + } + $this->b_user->commission_team_total = $commission_total; + } + } + + /*public function storeUser(){ + $this->b_user->user_items = $this->storeUserItems($this->businessUserItems, 1); + $this->b_user->save(); + } + + private function storeUserItems($userItems, $line){ + $ret = []; + foreach($userItems as $userItem){ + $temp = null; + if(count($userItem->businessUserItems) > 0){ + $temp = $this->storeUserItems($userItem->businessUserItems, $line+1); + } + $obj = new stdClass(); + $obj->user_id = $userItem->user_id; + $obj->line = $line; + $obj->points = $userItem->sales_volume_points_sum; + $obj->parents = $temp; + $ret[] = $obj; + } + return $ret; + }*/ + + public function readParentsBusinessUsers(){ + + $users = User::with('account')->select('users.*') + ->where('users.deleted_at', '=', null) + ->where('users.id', '!=', 1) + ->where('users.admin', "<", 4) + ->where('users.m_level', "!=", null) + ->where('users.m_sponsor', "=", $this->b_user->user_id) //<- need the id for parents / sponsors + ->where('users.payment_account', "!=", null) + ->where('users.active_date', "<=", $this->date->end_date) + ->get(); + + if($users){ + foreach($users as $user){ + $BusinessUserItem = new BusinessUserItem($this->date); + $BusinessUserItem->makeUser($user->id); + $BusinessUserItem->addUserID(); + $this->businessUserItems[] = $BusinessUserItem; + } + } + foreach($this->businessUserItems as $businessUserItem){ + $businessUserItem->readParentsBusinessUsers(); + } + } + + + public function readStoredParentsBusinessUsers($structure){ + + $parents = $this->findParentsBusinessOnStored($this->b_user->user_id, $structure); + if($parents){ + foreach($parents as $obj){ + $BusinessUserItem = new BusinessUserItem($this->date); + $BusinessUserItem->makeUser($obj->user_id); + $BusinessUserItem->addUserID(); + $this->businessUserItems[] = $BusinessUserItem; + } + foreach($this->businessUserItems as $businessUserItem){ + $businessUserItem->readStoredParentsBusinessUsers($parents); + } + } + } + + private function findParentsBusinessOnStored($user_id, $structures){ + if($structures){ + foreach($structures as $obj){ + if($user_id === $obj->user_id){ + return $obj->parents; + } + if($obj->parents){ + if($ret = $this->findParentsBusinessOnStored($user_id, $obj->parents)){ + return $ret; + } + } + } + } + return null; + } + + public function checkSponsor($user){ + + //check is store? has ID + if($this->b_user->isSave()){ + return; + } + $sponsor = new stdClass(); + + $sponsor->is_sponsor = false; + $sponsor->user_id = false; + $sponsor->first_name = ''; + $sponsor->last_name = ''; + $sponsor->email = ''; + $sponsor->m_account = ''; + $sponsor->full_name = 'Keinen Sponsor zugewiesen'; + + if($user->m_sponsor){ + + if($user->user_sponsor){ + $sponsor->is_sponsor = true; + $sponsor->user_id = $user->user_sponsor->id; + if($user->user_sponsor->account){ + $sponsor->full_name = substr('Sponsor: '.$user->user_sponsor->account->first_name.' '.$user->user_sponsor->account->last_name.' | '.$user->user_sponsor->email.' | '.$user->user_sponsor->account->m_account, 0, 250); + $sponsor->first_name = $user->user_sponsor->account->last_name; + $sponsor->last_name = $user->user_sponsor->account->first_name; + $sponsor->m_account = $user->user_sponsor->account->m_account; + }else{ + $sponsor->full_name = 'Sponsor: '.$user->user_sponsor->email; + } + $sponsor->email = $user->user_sponsor->email; + }else{ + $sponsor->full_name = 'Sponsor wurde gelöscht.'; + } + } + $this->b_user->sponsor = $sponsor; + return; + } + + public function isSave(){ + return $this->b_user->isSave(); + } + + public function __get($property) { + if (property_exists($this->b_user, $property)) { + return $this->b_user->$property; + } + if (isset($this->b_user->{$property})) { + return $this->b_user->{$property}; + } + } + +} diff --git a/app/Services/BusinessPlan/TreeCalcBot.php b/app/Services/BusinessPlan/TreeCalcBot.php index 0243717..f9e9f76 100644 --- a/app/Services/BusinessPlan/TreeCalcBot.php +++ b/app/Services/BusinessPlan/TreeCalcBot.php @@ -1,27 +1,20 @@ init_from = $init_from; } - public function initMain() + public function initStructureAdmin($check = true) { - $this->readMain(); - $this->readParentsUser(); - $this->readParentlessUser(); - } - - public function initUser($user_id) - { - $user = User::find($user_id); - $TreeUserItem = new TreeUserItem($this->date); - $TreeUserItem->makeUser($user); - $TreeUserItem->addUserID(); - $this->items[] = $TreeUserItem; - - $this->readParentsUser(); - $this->readSponsorUser($user->m_sponsor); - } - - - public function initDetailUser($user) - { - $this->user = new TreeUserItem($this->date); - $this->user->makeUser($user); - $this->user->readParentsUser(); - - - //calculate Lines - if(count($this->user->items) > 0){ - $this->calcUserTP($this->user->items, 1); + //check is month is saved. + if($check && $UserBusinessStructure = self::isFromStored($this->date->month, $this->date->year)){ + $this->readStoredRootUsers($UserBusinessStructure); + $this->readStoredParentsUsers($UserBusinessStructure); + $this->readStoredParentlessUser($UserBusinessStructure); + }else{ + $this->readRootUsers(); + $this->readParentsUsers(); + $this->readParentlessUser(); } - $this->calcQualTP(); - + } - private function calcUserTP($items, $line){ - if(!isset($this->lines[$line])){ - $this->lines[$line] = new stdClass(); - $this->lines[$line]->points = 0; - } - foreach($items as $item){ - if(count($item->items) > 0){ - $this->calcUserTP($item->items, $line+1); + public function initStructureUser($user_id) + { + + $BusinessUserItem = new BusinessUserItem($this->date); + $BusinessUserItem->makeUser($user_id); + $BusinessUserItem->addUserID(); + $this->business_users[] = $BusinessUserItem; + + //check is month is saved. + if($UserBusinessStructure = self::isFromStored($this->date->month, $this->date->year)){ + $this->readStoredParentsUsers($UserBusinessStructure); + + if(isset($this->business_users[0]) && $this->business_users[0]->sponsor){ + $this->readStoredSponsorUser($this->business_users[0]->sponsor->user_id); } - $this->lines[$line]->points += $item->sales_volume_points_sum; - $this->total_tp += $item->sales_volume_points_sum; - + + + }else{ + $this->readParentsUsers(); + $this->readSponsorUser($user_id); + } + + + } + + + public function initBusinesslUserDetail($user) + { + $this->business_user = new BusinessUserItem($this->date); + $this->business_user->makeUser($user->id); + $this->business_user->checkSponsor($user); + if(!$this->business_user->isSave()){ + $this->business_user->readParentsBusinessUsers(); + //calculate Lines + if(count($this->business_user->businessUserItems) > 0){ + $this->calcUserTP($this->business_user->businessUserItems, 1); + } + $this->business_user->calcQualTP(); } } + /*public function storeBusinesslUser() + { + $this->business_user->storeUser(); + }*/ + + public static function isFromStored($month, $year){ + //when is stored an completed + $UserBusinessStructure = UserBusinessStructure::where('year', $year)->where('month', $month)->first(); + if($UserBusinessStructure && $UserBusinessStructure->completed){ + return $UserBusinessStructure; + } + return false; + } + + private function calcUserTP($businessUserItems, $line){ + if(!isset($this->business_user->business_lines[$line])){ + $obj = new stdClass(); + $obj->points = 0; + $this->business_user->addBusinessLineToUser($line, $obj); + } + foreach($businessUserItems as $business_user_item){ + if(count($business_user_item->businessUserItems) > 0){ + $this->calcUserTP($business_user_item->businessUserItems, $line+1); + } + $this->business_user->addBusinessLinePoints($line, $business_user_item->sales_volume_points_sum); + $this->business_user->addTotalTP($business_user_item->sales_volume_points_sum); + } + } + + public function getGrowthBonus(){ + if(count($this->business_user->business_lines) > 6){ + $b_lines = $this->business_user->business_lines->toArray(); + return array_slice($b_lines, 6); + } + return []; + } + + public function getKeybyLine($line, $key){ - if(!isset($this->lines[$line])){ - return 0; - } - return isset($this->lines[$line]->{$key}) ? $this->lines[$line]->{$key} : 0; - - } - - public function calcQualTP(){ - if($this->user->isQualKP()){ - $this->total_qual_tp = $this->total_tp + $this->user->getRestQualKP(); - $this->qual_user_level = UserLevel::where('qual_tp', '<=', $this->total_qual_tp)->orderBy('qual_tp', 'desc')->first(); - $this->commission_total = 0; - if($this->qual_user_level){ - foreach($this->lines as $line => $values){ - $values->margin = $this->qual_user_level->{'pr_line_'.$line}; - $values->commission = round($values->points / 100 * $values->margin, 2); - $this->commission_total += $values->commission; - $this->lines[$line] = $values; + if($this->business_user->business_lines){ + $b_lines = $this->business_user->business_lines; + if(isset($b_lines[$line])){ + if($b_lines[$line] instanceof stdClass){ + if(isset($b_lines[$line]->{$key})){ + return $b_lines[$line]->{$key}; + } + }else{ + if(isset($b_lines[$line][$key])){ + return $b_lines[$line][$key]; + } } + } } + return 0; } - private function readMain(){ - + //* reading from current*// + private function readRootUsers(){ $users = User::with('account')->select('users.*') ->where('users.deleted_at', '=', null) ->where('users.id', '!=', 1) @@ -126,18 +158,17 @@ class TreeCalcBot ->get(); if($users){ foreach($users as $user){ - $TreeUserItem = new TreeUserItem($this->date); - $TreeUserItem->makeUser($user); - $TreeUserItem->addUserID(); - $this->items[] = $TreeUserItem; + $BusinessUserItem = new BusinessUserItem($this->date); + $BusinessUserItem->makeUser($user->id); + $BusinessUserItem->addUserID(); + $this->business_users[] = $BusinessUserItem; } } } - - private function readParentsUser(){ - foreach($this->items as $item){ - $item->readParentsUser(); + private function readParentsUsers(){ + foreach($this->business_users as $business_user){ + $business_user->readParentsBusinessUsers(); } } @@ -149,34 +180,77 @@ class TreeCalcBot ->where('users.payment_account', "!=", null) ->where('users.active_date', "<=", $this->date->end_date) ->get(); + foreach($users as $user){ if(!isset(self::$userIDs[$user->id])){ - $TreeUserItem = new TreeUserItem($this->date); - $TreeUserItem->makeUser($user); - $TreeUserItem->checkSponsor(); - - $this->parentless[] = $TreeUserItem; + $BusinessUserItem = new BusinessUserItem($this->date); + $BusinessUserItem->makeUser($user->id); + $this->parentless[] = $BusinessUserItem; } } } - public function readSponsorUser($m_sponsor_id){ - $sponsor = User::find($m_sponsor_id); - if($sponsor){ - $this->sponsor = new TreeUserItem($this->date); - $this->sponsor->makeUser($sponsor); + + //* reading from stored*// + private function readStoredRootUsers(UserBusinessStructure $userBusinessStructure){ + //first level is root + if($userBusinessStructure->structure){ + foreach($userBusinessStructure->structure as $obj){ + $BusinessUserItem = new BusinessUserItem($this->date); + $BusinessUserItem->makeUser($obj->user_id); + $BusinessUserItem->addUserID(); + $this->business_users[] = $BusinessUserItem; + + } } } + private function readStoredParentsUsers(UserBusinessStructure $userBusinessStructure){ + foreach($this->business_users as $business_user){ + $business_user->readStoredParentsBusinessUsers($userBusinessStructure->structure); + } + } + + private function readStoredParentlessUser(UserBusinessStructure $userBusinessStructure){ + if($userBusinessStructure->parentless){ + foreach($userBusinessStructure->parentless as $obj){ + if(!isset(self::$userIDs[$obj->user_id])){ + $BusinessUserItem = new BusinessUserItem($this->date); + $BusinessUserItem->makeUser($obj->user_id); + $this->parentless[] = $BusinessUserItem; + + } + } + } + } + + + public function readSponsorUser($user_id){ + $user = User::find($user_id); + $userSponsor = User::find($user->m_sponsor); + if($userSponsor){ + $this->sponsor = new BusinessUserItem($this->date); + $this->sponsor->makeUser($userSponsor->id); + } + } + + public function readStoredSponsorUser($user_id){ + + $this->sponsor = new BusinessUserItem($this->date); + $this->sponsor->makeUser($user_id); + + } + + public function getItems(){ - return $this->items; + return $this->business_users; } public function makeHtmlTree(){ $deep = 0; $ret = '
    '; - foreach($this->items as $item){ - $ret .= $this->addItem($item, $deep); + foreach($this->business_users as $business_user){ + $ret .= $this->addItem($business_user, $deep); } $ret .= '
'; return $ret; @@ -185,16 +259,16 @@ class TreeCalcBot private function addItem($item, $deep){ $button = ''; - if(($this->init_from === 'admin' && \Auth::user()->isAdmin()) || ($this->init_from === 'member' && \Auth::user()->id === $item->id)){ + if(($this->init_from === 'admin' && \Auth::user()->isAdmin()) || ($this->init_from === 'member' && \Auth::user()->id === $item->user_id)){ $button = ' | '; } - return '
  • '. + return '
  • '. '
    @@ -203,10 +277,11 @@ class TreeCalcBot
  • '. + $ret .= '
  • '. '
    @endif
    - - {!! Form::open(['url' => route('admin_business_points'), 'class' => 'form-horizontal', 'id'=>'form_admin_business_points']) !!} + + {!! Form::open(['url' => route('admin_business_points'), 'class' => 'form-horizontal', 'id'=>'form_admin_business_points']) !!} -
    -
    - -
    - -
    - + + @foreach($filter_members as $member) + @endforeach - -
    -
    - + +
    + +
    + +
    +
    + +
    + {!! Form::close() !!} + +
    + + + + + + + + + + + + + + + + + +
    #{{__('Datum') }}{{__('Points')}}{{__('Umsatz netto')}}{{__('Art')}}{{__('Bestellung')}}{{__('Vorname')}}{{__('Nachname') }}{{__('E-Mail') }}{{__('Info') }}
    - {!! Form::close() !!} - -
    - - - - - - - - - - - - - - - - - -
    #{{__('Datum') }}{{__('Points')}}{{__('Umsatz netto')}}{{__('Art')}}{{__('Bestellung')}}{{__('Vorname')}}{{__('Nachname') }}{{__('E-Mail') }}{{__('Info') }}
    diff --git a/resources/views/admin/business/show.blade.php b/resources/views/admin/business/show.blade.php index 911eaec..eab589a 100644 --- a/resources/views/admin/business/show.blade.php +++ b/resources/views/admin/business/show.blade.php @@ -42,8 +42,8 @@ {{__('Berater-ID') }} {{ __('Level') }} {{ __('KD') }} - {{__('Points')}} - {{__('Umsatz')}} + {{__('Gesamte Points')}} + {{__('Umsatz netto')}} {{__('E-Mail')}} {{__('Vorname')}} {{__('Nachname')}} @@ -57,7 +57,7 @@ - + diff --git a/resources/views/admin/payment/modal_credit_status.blade.php b/resources/views/admin/payment/modal_credit_status.blade.php new file mode 100644 index 0000000..2577213 --- /dev/null +++ b/resources/views/admin/payment/modal_credit_status.blade.php @@ -0,0 +1,82 @@ +{!! Form::open(['url' => route('admin_payments_credit_create'), 'class' => 'modal-content', 'enctype' => 'multipart/form-data']) !!} + + + + + + + + +{!! Form::close() !!} + + diff --git a/resources/views/admin/settings/index.blade.php b/resources/views/admin/settings/index.blade.php index 61d85e7..8b0b859 100755 --- a/resources/views/admin/settings/index.blade.php +++ b/resources/views/admin/settings/index.blade.php @@ -6,13 +6,13 @@ {!! Form::open(['url' => route('admin_setting_store'), 'class' => 'form-horizontal']) !!} - {{--
    +
    -

    Rechnungen Einstellungen

    +

    Rechnungen / Gutschriften Einstellungen

    - {{ Form::text('settings[invoice-number][val]', \App\Models\Setting::getContentBySlug('invoice-number'), array('class'=>'form-control')) }} + {{ Form::text('settings[invoice-number][val]', \App\Models\Setting::getContentBySlug('invoice-number'), array('class'=>'form-control', 'disabled')) }} {{ Form::hidden('settings[invoice-number][type]', 'int') }}
    @@ -23,10 +23,16 @@ {{ Form::hidden('settings[credit-number][type]', 'int') }}
    +
    +
    + + {{ Form::text('settings[day-exectute-business-structur][val]', \App\Models\Setting::getContentBySlug('day-exectute-business-structur'), array('class'=>'form-control')) }} + {{ Form::hidden('settings[day-exectute-business-structur][type]', 'int') }} +
    +
    - --}} {!! Form::close() !!} diff --git a/resources/views/dashboard/_points.blade.php b/resources/views/dashboard/_points.blade.php index 25a14c3..0a846cb 100644 --- a/resources/views/dashboard/_points.blade.php +++ b/resources/views/dashboard/_points.blade.php @@ -16,7 +16,8 @@ @endif - +
    +
    @@ -62,12 +63,31 @@ @endif
    {{__('Datum') }}
    + @endif @if($user->isActiveAccount()) @endif - \ No newline at end of file + + + \ No newline at end of file diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 686e079..7180e65 100755 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -31,7 +31,6 @@ @include('dashboard._reminder') - @include('dashboard._membership') @include('dashboard._shop') diff --git a/resources/views/layouts/includes/layout-sidenav.blade.php b/resources/views/layouts/includes/layout-sidenav.blade.php index 7c10265..3ae2825 100755 --- a/resources/views/layouts/includes/layout-sidenav.blade.php +++ b/resources/views/layouts/includes/layout-sidenav.blade.php @@ -19,6 +19,9 @@
    {{ __('navigation.my_account') }}
  • diff --git a/resources/views/pdf/credit.blade.php b/resources/views/pdf/credit.blade.php new file mode 100644 index 0000000..49d53b8 --- /dev/null +++ b/resources/views/pdf/credit.blade.php @@ -0,0 +1,413 @@ + + + + + mivita.care + + + + + +
    +
    mivita e.K. • Leinfeld 2 • 87755 Kirchhaslach
    + @if($user->account) + @if($user->account->company) + {{ $user->account->company }}
    + @else + Firma
    + @endif + {{ \App\Services\HTMLHelper::getSalutationLang($user->account->salutation) }} + {{ $user->account->first_name }} {{ $user->account->last_name }}
    + {{ $user->account->address }}
    + @if($user->account->address_2) + {{ $user->account->address_2 }}
    + @endif + {{ $user->account->zipcode}} {{ $user->account->city }}
    + @if($user->account->country) + {{ $user->account->country->getLocated() }} + @endif + @endif +
    + +
    + + + + + + + + + + + + + + @if($user->account->tax_number) + + + + @else + @if($user->account->tax_identification_number) + + + + @endif + @endif +
    {{ __('Berater-ID') }}: + @if(isset($user->account)) + {!! str_pad($user->account->m_account, 5, "0", STR_PAD_LEFT) !!} + @endif +
    {{ __('Datum') }}:{{ $credit_date }}
    {{ __('Gutschrifts-Nr.') }}:{{ $credit_number }}
    + {{ __('St.-Nr') }}: {{ $user->account->tax_number}} +
    + {{ __('USt-IdNr.') }}: {{ $user->account->tax_identification_number}} +
    +
    + +
    +
    GUTSCHRIFT
    + {{-- @if($cancellation) +
    {{ $invoice->invoice_name }}
    + @endif--}} +
    + + +
    + + + + + + + + + + @foreach($user_credit_items as $user_credit_item) + + + + + @endforeach + + + + + + + + @if ($user_credits->taxable) + + + + + + @else + + + + + @endif + + + + + + + +
    Gutschrift ausBetrag
    + {!! nl2br($user_credit_item->message) !!} / {{ $user_credit_item->created_at->format('d.m.Y') }} + + {{ \App\Services\Util::formatNumber($user_credit_item->credit) }} €* +
    + Zwischensumme + + {{ \App\Services\Util::formatNumber($user_credits->net) }} €* +
    + Mehrwertsteuer: {{ $user_credits->tax_rate }} %
    +
    + {{ \App\Services\Util::formatNumber($user_credits->tax) }} € +
    + Mehrwertsteuer: {{ $user_credits->tax_rate }} %
    + Gutschriftsempfänger ist Kleinunternehmer nach § 19 (1) UStG. + +
    + {{ \App\Services\Util::formatNumber($user_credits->tax) }} € +
    + Auszahlungsbetrag (Brutto): + + {{ \App\Services\Util::formatNumber($user_credits->total) }} € +
    + * Nettobeträge +
    +
    + + + + + \ No newline at end of file diff --git a/resources/views/sys/index.blade.php b/resources/views/sys/index.blade.php index 98853db..8699a5b 100644 --- a/resources/views/sys/index.blade.php +++ b/resources/views/sys/index.blade.php @@ -6,6 +6,7 @@
    Sys Admin Tools
    +   Business Strukrur speichern   Buchnungen Pakete Berater nach Jahren   Kundenhoheit prüfen   Cron Jobs diff --git a/resources/views/sys/tools/business_structur.blade.php b/resources/views/sys/tools/business_structur.blade.php new file mode 100644 index 0000000..72248a4 --- /dev/null +++ b/resources/views/sys/tools/business_structur.blade.php @@ -0,0 +1,16 @@ +@extends('layouts.layout-2') + +@section('content') +
    +
    + SysAdmin Business Struktur speichern +
    +
    + {!! Form::open(['url' => route('sysadmin_tool_store', ['business_structur']), 'class' => 'form-horizontal', 'id'=>'filter_sales_member']) !!} + + + {!! Form::close() !!} + +
    +
    +@endsection diff --git a/resources/views/user/payment/credit.blade.php b/resources/views/user/payment/credit.blade.php new file mode 100644 index 0000000..cbe2618 --- /dev/null +++ b/resources/views/user/payment/credit.blade.php @@ -0,0 +1,111 @@ +@extends('layouts.layout-2') + +@section('content') +

    + {{ __('navigation.my_account') }} / {{ __('navigation.credit') }} +

    + +
    +
    + + + + + + + + + + + + + +
    {{ __('G.Nr.') }}{{ __('Gutschrift') }}{{ __('Betrag') }}{{ __('Datum') }}{{ __('Zahlung') }}{{ __('aus Guthaben') }}
    +
    +
    +
    +
    +
    + Mein Guthaben +
    +
    + + + + + + + + + + + + + +
    BetreffBetragDatumStatusGutschrift
    +
    +
    + +@endsection diff --git a/resources/views/user/team/_points_detail.blade.php b/resources/views/user/team/_points_detail.blade.php new file mode 100644 index 0000000..3173fad --- /dev/null +++ b/resources/views/user/team/_points_detail.blade.php @@ -0,0 +1,110 @@ +@extends('layouts.layout-2') + +@section('content') + + @if ($errors->any()) +
    +
    +
    +
      + @foreach ($errors->all() as $error) +
    • {{ $error }}
    • + @endforeach +
    +
    +
    +
    + @endif +

    + {{ __('navigation.my_team') }} +

    +
    +
    + {{__('Points')}} +
    +
    + {!! Form::open(['url' => route('user_team_points'), 'class' => 'form-horizontal', 'id'=>'form_filter_user_points']) !!} + +
    +
    + +
    +
    + +
    +
    + {!! Form::close() !!} +
    + + + +
    +
    + + + + + + + + + + + + +
    {{__('Datum') }}{{__('Points')}}{{__('Umsatz netto')}}{{__('Art')}}{{__('Bestellung')}}{{__('Info') }}
    +
    +
    +
    + +@endsection diff --git a/resources/views/user/team/_points_sum.blade.php b/resources/views/user/team/_points_sum.blade.php new file mode 100644 index 0000000..64b112a --- /dev/null +++ b/resources/views/user/team/_points_sum.blade.php @@ -0,0 +1,10 @@ +
    + @if($userSalesVolume) +
    + Gesamte Points: {{ $userSalesVolume->getPointsSum() }} | Berater: {{ $userSalesVolume->month_points }} | Shop: {{ $userSalesVolume->month_shop_points }}
    +
    +
    + Gesamter Umsatz: {{ formatNumber($userSalesVolume->getTotalNetSum()) }} € | Berater: {{ formatNumber($userSalesVolume->month_total_net) }} € | Shop: {{ formatNumber($userSalesVolume->month_shop_total_net) }} € +
    + @endif +
    \ No newline at end of file diff --git a/resources/views/user/team/points.blade.php b/resources/views/user/team/points.blade.php new file mode 100644 index 0000000..528f0fd --- /dev/null +++ b/resources/views/user/team/points.blade.php @@ -0,0 +1,125 @@ +@extends('layouts.layout-2') + +@section('content') + + @if ($errors->any()) +
    +
    +
    +
      + @foreach ($errors->all() as $error) +
    • {{ $error }}
    • + @endforeach +
    +
    +
    +
    + @endif +

    + {{ __('navigation.my_team') }} +

    +
    +
    + {{__('Points')}} +
    +
    + {!! Form::open(['url' => route('user_team_points'), 'class' => 'form-horizontal', 'id'=>'form_filter_user_points']) !!} + +
    +
    + +
    +
    + +
    +
    + {!! Form::close() !!} +
    +
    + @include('user.team._points_sum', ['userSalesVolume' => $userSalesVolume]) +
    +
    +
    + + + + + + + + + + + + +
    {{__('Datum') }}{{__('Points')}}{{__('Umsatz netto')}}{{__('Art')}}{{__('Bestellung')}}{{__('Info') }}
    +
    +
    +
    +
    + +@endsection diff --git a/resources/views/user/team/structure.blade.php b/resources/views/user/team/structure.blade.php index fdfb784..c24f82a 100644 --- a/resources/views/user/team/structure.blade.php +++ b/resources/views/user/team/structure.blade.php @@ -74,6 +74,7 @@
    +