241 lines
9.7 KiB
PHP
Executable file
241 lines
9.7 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;
|
|
|
|
use function Ramsey\Uuid\v1;
|
|
|
|
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::getTransMonths(),
|
|
'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::getTransMonths(),
|
|
'filter_years' => HTMLHelper::getYearRange(2022),
|
|
];
|
|
return view('user.team.points', $data);
|
|
}
|
|
|
|
public function export()
|
|
{
|
|
|
|
$user = User::find(\Auth::user()->id);
|
|
if (!$user->isVIP()) {
|
|
abort(404);
|
|
}
|
|
$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 = __('team.filename_export') . date('Y-m-d-H-i-s');
|
|
$headers = array(
|
|
__('tables.line'),
|
|
__('tables.level'),
|
|
__('tables.email'),
|
|
__('tables.firstname'),
|
|
__('tables.lastname'),
|
|
__('tables.address'),
|
|
__('tables.addition'),
|
|
__('tables.postcode'),
|
|
__('tables.city'),
|
|
__('tables.country'),
|
|
__('tables.phone'),
|
|
__('tables.mobil'),
|
|
__('tables.birthday'),
|
|
__('tables.partner_since'),
|
|
__('tables.account'),
|
|
__('tables.account_to'),
|
|
__('tables.sponsor'),
|
|
);
|
|
if (isset($ExportBot->user_list->childs)) {
|
|
foreach ($ExportBot->user_list->childs as $child) {
|
|
$columns[] = array(
|
|
__('tables.line') => $child->line,
|
|
__('tables.level') => $child->level_name,
|
|
__('tables.email') => $child->email,
|
|
__('tables.firstname') => $child->first_name,
|
|
__('tables.lastname') => $child->last_name,
|
|
__('tables.address') => $child->address,
|
|
__('tables.addition') => $child->address_2,
|
|
__('tables.postcode') => $child->zipcode,
|
|
__('tables.city') => $child->city,
|
|
__('tables.country') => $child->country_id,
|
|
__('tables.phone') => $child->phone,
|
|
__('tables.mobil') => $child->mobil,
|
|
__('tables.birthday') => $child->birthday,
|
|
__('tables.partner_since') => $child->partner_since,
|
|
__('tables.account') => ($child->active_account == 1 ? __('yes') : __('no')),
|
|
__('tables.account_to') => $child->payment_account_date,
|
|
__('tables.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) . ' €';
|
|
})
|
|
->addColumn('status_turnover', function (UserSalesVolume $UserSalesVolume) {
|
|
return '<span class="badge badge-pill badge-' . $UserSalesVolume->getStatusTurnoverColor() . '">' . $UserSalesVolume->getStatusTurnoverType() . '</span>';
|
|
})
|
|
->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_turnover', '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]);
|
|
}
|
|
}
|