mivita/app/Http/Controllers/User/TeamController.php
2023-07-03 10:07:08 +02:00

230 lines
No EOL
8.8 KiB
PHP
Executable file

<?php
namespace App\Http\Controllers\User;
use Auth;
use Request;
use App\User;
use App\Services\HTMLHelper;
use App\Exports\UserTeamExport;
use App\Models\UserSalesVolume;
use App\Http\Controllers\Controller;
use Maatwebsite\Excel\Facades\Excel;
use App\Services\BusinessPlan\ExportBot;
use App\Services\BusinessPlan\TreeCalcBot;
class TeamController extends Controller
{
public function __construct()
{
$this->middleware('active.account');
}
public function members()
{
$user = User::find(\Auth::user()->id);
if($user->isActiveShop() && $user->shop){
$shop_register_link = $user->shop->getSubdomain(false)."/reg";
}else{
$member_id = 'm'.($user->id + config('mivita.add_number_id'));
$shop_register_link = config('app.protocol').config('app.domain').config('app.tld_care').'/reg/'.$member_id;
}
$data = [
'shop_register_link' => $shop_register_link
];
return view('user.team.members', $data);
}
public function structure()
{
$user = User::find(\Auth::user()->id);
$this->setFilterVars();
$TreeCalcBot = new TreeCalcBot(session('team_user_filter_month'), session('team_user_filter_year'), 'member');
$TreeCalcBot->initStructureUser($user->id);
//for testing
//$TreeCalcBot->initUser(56);
$data = [
'filter_months' => HTMLHelper::$months,
'filter_years' => HTMLHelper::getYearRange(2022),
'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(2022),
];
return view('user.team.points', $data);
}
public function export()
{
$user = User::find(\Auth::user()->id);
$ExportBot = new ExportBot('member');
$ExportBot->initStructureUser($user, 'list'); //tree or list
$data = [
'ExportBot' => $ExportBot,
];
return view('user.team.export', $data);
}
public function userTeamExport(){
if(Request::get('action') === "export"){
$user = User::find(\Auth::user()->id);
$ExportBot = new ExportBot('member');
$ExportBot->initStructureUser($user, 'list'); //tree or list
$columns = [];
$filename = "mivita-mein-team-export-".date('Y-m-d-H-i-s');
$headers = array(
'Line',
'Level',
'E-Mail',
'Vorname',
'Nachname',
'Adresse',
'Zusatz',
'PLZ',
'Ort',
'Land',
'Tel',
'Mobil',
'Geburtstag',
'Account',
'Account bis',
'Sponsor',
);
if(isset($ExportBot->user_list->childs)){
foreach ($ExportBot->user_list->childs as $child){
$columns[] = array(
'Line' => $child->line,
'Level' => $child->level_name,
'E-Mail' => $child->email,
'Vorname' => $child->first_name,
'Nachname' => $child->last_name,
'Adresse' => $child->address,
'Zusatz' => $child->address_2,
'PLZ' => $child->zipcode,
'Ort' => $child->city,
'Land' => $child->country_id,
'Tel' => $child->phone,
'Mobil' => $child->mobil,
'Geburtstag' => $child->birthday,
'Account' => ($child->active_account == 1 ? 'JA' : 'NEIN'),
'Account bis' => $child->payment_account_date,
'Sponsor' => $child->sponsor_name,
);
}
}
return Excel::download(new UserTeamExport($columns, $headers), $filename.'.xls');
}
}
private function setFilterVars(){
if(!session('team_user_filter_month')){
session(['team_user_filter_month' => intval(date('m'))]);
}
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_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 '<a href="' . route('user_order_detail', [$UserSalesVolume->shopping_order->id]) . '" class="btn btn-xs btn-primary">'.$UserSalesVolume->shopping_order->id.'</a>';
}
if(($UserSalesVolume->status === 2 || $UserSalesVolume->status === 3) && $UserSalesVolume->shopping_order->member_id === $UserSalesVolume->user_id){
return '<a href="' . route('user_shop_order_detail', [$UserSalesVolume->shopping_order->id]) . '" class="btn btn-xs btn-secondary">'.$UserSalesVolume->shopping_order->id.'</a>';
}
}
return '';
})
->addColumn('total_net', function (UserSalesVolume $UserSalesVolume) {
return formatNumber($UserSalesVolume->total_net).' &euro;';
})
->addColumn('status', function (UserSalesVolume $UserSalesVolume) {
return '<span class="badge badge-pill badge-'.$UserSalesVolume->getStatusColor().'">'.$UserSalesVolume->getStatusType().'</span>';
})
->addColumn('message', function (UserSalesVolume $UserSalesVolume) {
return '<span class="no-line-break">'.$UserSalesVolume->message.'</span>';
})
->addColumn('info', function (UserSalesVolume $UserSalesVolume) {
return '<span class="no-line-break">'.$UserSalesVolume->info.'</span>';
})
->orderColumn('id', 'id $1')
->orderColumn('order', 'order $1')
->orderColumn('status', 'status $1')
->orderColumn('message', 'message $1')
->orderColumn('info', 'info $1')
->rawColumns(['id', 'order', 'status', 'message', 'info', '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]);
}
}