#51 2 Business Points edit / add, user dashboard

This commit is contained in:
Kevin Adametz 2022-07-22 13:43:24 +02:00
parent 263cf93a1e
commit dfd049aaa9
25 changed files with 1291 additions and 381 deletions

View file

@ -7,6 +7,8 @@ use Request;
use App\Services\Payment;
use App\Models\UserInvoice;
use App\Services\HTMLHelper;
use App\Models\UserSalesVolume;
use App\Services\BusinessPlan\SalesPointsVolume;
class BusinessPointsController extends Controller
{
@ -24,45 +26,108 @@ class BusinessPointsController extends Controller
public function index()
{
$filter_members = UserSalesVolume::join('users', 'user_id', '=', 'users.id')
->groupBy('user_id')->join('user_accounts', 'account_id', '=', 'user_accounts.id')
->select('users.id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name')->get();
$this->setFilterVars();
$data = [
'filter_months' => HTMLHelper::$months,
'filter_years' => HTMLHelper::getYearRange(),
'filter_members' => $filter_members,
];
return view('admin.payment.invoice', $data);
return view('admin.business.points', $data);
}
public function store(){
$data = Request::all();
if(!isset($data['action'])){
return back();
}
if(!isset($data['change_member_key']) || $data['change_member_key'] !== config('mivita.edit_data_pass')){
\Session()->flash('alert-error', 'Das Passwort ist falsch.');
return back();
}
if(!isset($data['is_checked_action'])){
\Session()->flash('alert-error', 'Änderung nicht bestätigt');
return back();
}
if($data['action'] === 'add_user_sales_volume'){
SalesPointsVolume::addSalesPointsVolume($data);
return back(); }
if($data['action'] === 'edit_user_sales_volume'){
SalesPointsVolume::editSalesPointsVolume($data);
return back();
}
dd($data);
return redirect(route('admin_business_points'));
//
//
/*
$add_credit_error = false;
if(!isset($data['member_id']) || !$user = User::find($data['member_id'])){
$add_credit_error = 'Vertriebspartner nicht gefunden';
}
if(!isset($data['credit'])){
$add_credit_error = 'Bitte Betrag eingeben';
}
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);
}
// $credit = Util::reFormatNumber($data['credit']);
//$credit = number_format($credit, 2, '.', '');
//Payment::addUserCreditMargin($user, $credit, 3, $data['message']);
\Session()->flash('alert-success', "Guthaben hinzugefügt");
}*/
}
private function setFilterVars(){
if(!session('invoice_filter_month')){
session(['invoice_filter_month' => intval(date('m'))]);
if(!session('points_filter_month')){
session(['points_filter_month' => intval(date('m'))]);
}
if(!session('invoice_filter_year')){
session(['invoice_filter_year' => intval(date('Y'))]);
if(!session('points_filter_year')){
session(['points_filter_year' => intval(date('Y'))]);
}
if(Request::get('invoice_filter_name')){
session(['invoice_filter_name' => Request::get('invoice_filter_name')]);
if(Request::get('points_filter_member_id')){
session(['points_filter_member_id' => Request::get('points_filter_member_id')]);
}
if(Request::get('invoice_filter_month')){
session(['invoice_filter_month' => Request::get('invoice_filter_month')]);
if(Request::get('points_filter_month')){
session(['points_filter_month' => Request::get('points_filter_month')]);
}
if(Request::get('invoice_filter_year')){
session(['invoice_filter_year' => Request::get('invoice_filter_year')]);
if(Request::get('points_filter_year')){
session(['points_filter_year' => Request::get('points_filter_year')]);
}
}
private function initSearch($archive = false, $request = true)
{
$this->setFilterVars();
$query = UserInvoice::with('shopping_order')->with('shopping_order.shopping_user')->select('user_invoices.*')
->where('user_invoices.month', '=', Request::get('invoice_filter_month'))
->where('user_invoices.year', '=', Request::get('invoice_filter_year'));
if(Request::get('invoice_filter_name')){
$query->where('shopping_order.shopping_user.billing_firstname', 'LIKE', '%'.Request::get('invoice_filter_name').'%');
$query->where('shopping_order.shopping_user.billing_lastname', 'LIKE', '%'.Request::get('invoice_filter_name').'%');
$query->where('shopping_order.shopping_user.billing_email', 'LIKE', '%'.Request::get('invoice_filter_name').'%');
$query = UserSalesVolume::with('user', 'user.account')->with('shopping_order')->select('user_sales_volumes.*')
->where('user_sales_volumes.month', '=', Request::get('points_filter_month'))
->where('user_sales_volumes.year', '=', Request::get('points_filter_year'));
if(Request::get('points_filter_member_id')){
$query->where('user_sales_volumes.user_id', '=', Request::get('points_filter_member_id'));
}
//->orderBy('created_at', 'DESC');
@ -77,54 +142,51 @@ class BusinessPointsController extends Controller
$query = $this->initSearch();
return \DataTables::eloquent($query)
->addColumn('id', function (UserInvoice $UserInvoice) {
if($UserInvoice->shopping_order->auth_user_id){
return '<a href="' . route('admin_sales_users_detail', [$UserInvoice->shopping_order->id]) . '" class="btn icon-btn btn-sm btn-primary"><span class="fa fa-edit"></span></a>';
->addColumn('id', function (UserSalesVolume $UserSalesVolume) {
return '<button type="button" class="btn btn-xs btn-secondary" data-toggle="modal" data-target="#modals-load-content"
data-id="'.$UserSalesVolume->id.'"
data-action="edit_user_sales_volume"
data-back=""
data-modal="modal-xl"
data-init_from="user"
data-route="'.route('modal_load').'"><span class="far fa-eye"></span></button>';
})
->addColumn('order', function (UserSalesVolume $UserSalesVolume) {
if($UserSalesVolume->shopping_order){
if($UserSalesVolume->status === 1){
return '<a href="' . route('admin_sales_users_detail', [$UserSalesVolume->shopping_order->id]) . '" class="btn btn-xs btn-primary">'.$UserSalesVolume->shopping_order->id.'</a>';
}
if($UserSalesVolume->status === 2 || $UserSalesVolume->status === 3){
return '<a href="' . route('admin_sales_customers_detail', [$UserSalesVolume->shopping_order->id]) . '" class="btn btn-xs btn-secondary">'.$UserSalesVolume->shopping_order->id.'</a>';
}
}
return '<a href="' . route('admin_sales_customers_detail', [$UserInvoice->shopping_order->id]) . '" class="btn icon-btn btn-sm btn-primary"><span class="fa fa-edit"></span></a>';
return '';
})
->addColumn('total_shipping', function (UserInvoice $UserInvoice) {
return '<span class="no-line-break">'.$UserInvoice->shopping_order->getFormattedTotalShipping()." €</span>";
->addColumn('total_net', function (UserSalesVolume $UserSalesVolume) {
return formatNumber($UserSalesVolume->total_net).' &euro;';
})
->addColumn('created_at', function (UserInvoice $UserInvoice) {
return $UserInvoice->created_at->format("d.m.Y");
->addColumn('first_name', function (UserSalesVolume $UserSalesVolume) {
return isset($UserSalesVolume->user) ? $UserSalesVolume->user->account->first_name : '';
})
/*
->addColumn('shipping_order', function (UserInvoice $UserInvoice) {
$ret = "";
foreach($UserInvoice->shopping_order_items as $shopping_order_item){
$ret .= $shopping_order_item->product->name."<br>";
}
return $ret;
->addColumn('last_name', function (UserSalesVolume $UserSalesVolume) {
return isset($UserSalesVolume->user) ? $UserSalesVolume->user->account->last_name : '';
})
*/
->addColumn('txaction', function (UserInvoice $UserInvoice) {
if($UserInvoice->shopping_order){
return Payment::getShoppingOrderBadge($UserInvoice->shopping_order);
}
return "-";
->addColumn('email', function (UserSalesVolume $UserSalesVolume) {
return isset($UserSalesVolume->user) ? $UserSalesVolume->user->email : '';
})
->addColumn('status', function (UserInvoice $UserInvoice) {
return '<a href="#" data-toggle="modal" data-target="#modals-load-content" data-modal="modal-lg"
data-id="'.$UserInvoice->id.'" data-route="'.route('modal_load').'" data-action="user-credit-status" data-view="">
<span class="badge badge-pill badge-'.$UserInvoice->getStatusColor().'">'.$UserInvoice->getStatusType().'</span>
</a>';
->addColumn('status', function (UserSalesVolume $UserSalesVolume) {
return '<span class="badge badge-pill badge-'.$UserSalesVolume->getStatusColor().'">'.$UserSalesVolume->getStatusType().'</span>';
})
->addColumn('invoice', function (UserInvoice $UserInvoice) {
$ret = "";
$ret .= '<a href="'.route('storage_file', [$UserInvoice->shopping_order->id, 'invoice', 'download']).'" class="btn btn-primary btn-xs"><i class="fa fa-download"></i></a> ';
$ret .= '<a href="'.route('storage_file', [$UserInvoice->shopping_order->id, 'invoice', 'stream']).'" target="_blank" class="btn btn-warning btn-xs"><i class="fa fa-eye"></i></a>';
return $ret;
->addColumn('message', function (UserSalesVolume $UserSalesVolume) {
return '<span class="no-line-break">'.$UserSalesVolume->message.'</span>';
})
->orderColumn('id', 'id $1')
->orderColumn('invoice_number', 'invoice_number $1')
->orderColumn('txaction', 'txaction $1')
->orderColumn('shipped', 'shipped $1')
->orderColumn('total_shipping', 'total_shipping $1')
->rawColumns(['id', 'shipping_order', 'txaction', 'total_shipping', 'status', 'txaction', 'invoice'])
->orderColumn('order', 'order $1')
->orderColumn('status', 'status $1')
->orderColumn('status', 'message $1')
->rawColumns(['id', 'order', 'status', 'message', 'total_net'])
->make(true);
}
}

View file

@ -12,6 +12,7 @@ use App\Models\ShoppingUser;
use App\Services\HTMLHelper;
use App\Models\HomepartyUser;
use App\Models\ShoppingOrder;
use App\Models\UserSalesVolume;
use App\Services\BusinessPlan\TreeCalcBot;
class ModalController extends Controller
@ -83,7 +84,6 @@ class ModalController extends Controller
$ret = view("user.shop.sales.modal_api_order_shipping_detail", compact('shopping_order', 'isAdmin', 'data'))->render();
}
if($data['action'] === 'user-order-my-delivery-show'){
$user = \Auth::user();
$ret = view("admin.modal.show_user_customers", compact('user', 'data'))->render();
@ -120,6 +120,17 @@ class ModalController extends Controller
$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', );
$ret = view("admin.business.modal_edit_points", compact('userSalesVolume', 'data', 'route'))->render();
}
if($data['action'] === 'add_user_sales_volume'){
$userSalesVolume = new UserSalesVolume();
$route = route('admin_business_points_store', );
$ret = view("admin.business.modal_add_points", compact('userSalesVolume', 'data', 'route'))->render();
}
}
return response()->json(['response' => $data, 'html'=>$ret, 'status'=>$status]);
}

View file

@ -133,7 +133,8 @@ class SalesController extends Controller
return redirect(route('admin_sales_customers'));
}
$filter_user_shops = ShoppingOrder::join('user_shops', 'user_shop_id', '=', 'user_shops.id')->orderBy('slug')->get()->pluck('slug', 'id')->unique()->toArray();
$filter_members = ShoppingOrder::join('users', 'member_id', '=', 'users.id')->groupBy('member_id')->join('user_accounts', 'account_id', '=', 'user_accounts.id')->select('users.id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name')->get(); //->pluck('email', 'id')->unique()->toArray();
$filter_members = ShoppingOrder::join('users', 'member_id', '=', 'users.id')->groupBy('member_id')->join('user_accounts', 'account_id', '=', 'user_accounts.id')->select('users.id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name')->get();
//->pluck('email', 'id')->unique()->toArray();
$data = [
'filter_user_shops' => $filter_user_shops,
'filter_members' => $filter_members,

View file

@ -38,6 +38,7 @@ class ShopSalesController extends Controller
'shopping_order' => $shopping_order,
'isAdmin' => false,
];
return view('user.shop.sales.order_detail', $data);
}

View file

@ -102,12 +102,22 @@ class UserSalesVolume extends Model
public static $statusTypes = [
0 => 'nicht zugewiesen',
1 => 'hinzugefügt aus Beraterbestellung',
2 => 'hinzugefügt aus Shopbestellung',
3 => 'hinzugefügt aus Shopbestellung / pending',
1 => 'Beraterbestellung', //hinzugefügt aus
2 => 'Shopbestellung', //hinzugefügt aus
3 => 'Shopbestellung / pending', //hinzugefügt aus
4 => 'Gutschrift', //hinzugefügt aus
10 => ''
];
public static $statusColors = [
0 => 'warning',
1 => 'success',
2 => 'secondary',
3 => 'warning',
4 => 'info',
10 => 'danger',
];
public function shopping_order()
{
return $this->belongsTo(ShoppingOrder::class);
@ -133,10 +143,21 @@ class UserSalesVolume extends Model
return isset($this->attributes['date']) ? $this->attributes['date'] : NULL;
}
public function getPointsSum(){
return $this->month_points + $this->month_shop_points;
}
public function getTotalNetSum(){
return $this->month_total_net + $this->month_shop_total_net;
}
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 getFormatedMonthYear(){
return str_pad($this->month, 2, "0", STR_PAD_LEFT)."/".$this->year;
}

View file

@ -2,6 +2,7 @@
namespace App\Services\BusinessPlan;
use App\User;
use App\Services\Util;
use App\Models\ShoppingOrder;
use App\Models\UserSalesVolume;
@ -29,7 +30,7 @@ class SalesPointsVolume
$form_user = User::find($form_user_id);
$shoppingOrder->user_sales_volume->user_id = $to_user_id;
$shoppingOrder->user_sales_volume->message = 'Punkte zugewiesen am: '.date('d.m.Y');
$shoppingOrder->user_sales_volume->message = 'zugewiesen: '.date('d.m.Y');
$syslog = $shoppingOrder->user_sales_volume->syslog;
$syslog[date('d.m.Y-h:i:s')] = 'change form: #'.$form_user_id.' '.$form_user->email.' to: #'.$to_user_id.' '.$to_user->email;
@ -57,7 +58,7 @@ class SalesPointsVolume
foreach($userSalesVolumes as $userSalesVolume){
switch ($userSalesVolume->status) {
case 1: //Bestellung
case 1: //Bestellung Berater
$month_points += $userSalesVolume->points;
$month_total_net += $userSalesVolume->total_net;
break;
@ -65,6 +66,10 @@ class SalesPointsVolume
$month_shop_points += $userSalesVolume->points;
$month_shop_total_net += $userSalesVolume->total_net;
break;
case 4: //add Berater
$month_points += $userSalesVolume->points;
$month_total_net += $userSalesVolume->total_net;
break;
}
$userSalesVolume->month_shop_points = $month_shop_points;
$userSalesVolume->month_shop_total_net = $month_shop_total_net;
@ -163,4 +168,71 @@ class SalesPointsVolume
}
public static function editSalesPointsVolume($data){
$user_sales_volume = UserSalesVolume::findOrFail($data['id']);
if(!$user_sales_volume->isCurrentMonthYear()){
\Session()->flash('alert-error', 'Änderung muss im selben Monat sein');
return;
}
$old_points = $user_sales_volume->points;
$old_total_net = $user_sales_volume->total_net;
$user_sales_volume->total_net = Util::reFormatNumber($data['total_net']);
$user_sales_volume->points = intval($data['points']);
$user_sales_volume->message = 'geändert: '.date('d.m.Y');
$syslog = $user_sales_volume->syslog;
$syslog[date('d.m.Y-h:i:s')] = 'edit points: #'.$old_points.' '.$user_sales_volume->points .' total: #'.$old_total_net.' '.$user_sales_volume->total_ne;
$user_sales_volume->syslog = $syslog;
$user_sales_volume->save();
self::reCalculateSalesPointsVolume($user_sales_volume->user_id, $user_sales_volume->month, $user_sales_volume->year);
\Session()->flash('alert-success', "Points geändert");
return;
}
public static function addSalesPointsVolume($data){
if(!isset($data['user_id'])){
\Session()->flash('alert-error', 'Kein Berater ausgewählt');
return;
}
$user = User::findOrFail($data['user_id']);
$month = date('m');
$year = date('Y');
$date = date('d.m.Y');
$total_net = isset($data['total_net']) ? Util::reFormatNumber($data['total_net']) : 0;
$points = isset($data['points']) ? intval($data['points']) : 0;
$syslog[date('d.m.Y-h:i:s')] = 'add points: #'.$points.' total: #'.$total_net;
$user_sales_volume = UserSalesVolume::create([
'user_id' => $user->id,
'shopping_order_id' => null,
'month' => $month,
'year' => $year,
'date' => $date,
'points' => $points,
'total_net' => $total_net,
'message' => 'hinzugefügt: '.date('d.m.Y'),
'syslog' => $syslog,
'status' => 4,
]);
self::reCalculateSalesPointsVolume($user_sales_volume->user_id, $user_sales_volume->month, $user_sales_volume->year);
\Session()->flash('alert-success', "Points hinzugefügt");
}
}

View file

@ -25,6 +25,18 @@ class Payment
'NULL' => 'keine Zahlung',
];
public static $txaction_filter_text = [
'paid' => "Zahlung bezahlt",
'appointed' => "Zahlung offen",
'failed' => "Zahlung abbruch",
'extern' => "Extern offen", //offen
'extern_paid' => "Extern bezahlt",
'invoice_open' => "Rechnung offen",
'invoice_paid' => "Rechnung bezahlt",
'invoice_non' => "Rechnung keine Zahlung",
'NULL' => 'keine Zahlung',
];
public static $txaction_invoice = [
'invoice_open' => "Rechnung offen",
'invoice_paid' => "Rechnung bezahlt",

View file

@ -52,7 +52,7 @@ class Util
}
public static function _format_number($value){
return preg_replace("/[^0-9,]/", "", $value);
return preg_replace("/[^0-9,-]/", "", $value);
}

View file

@ -476,8 +476,9 @@ class User extends Authenticatable
public function getUserSalesVolumeBy($month, $year, $key)
{
//NOTE check ist, cant change month year !
if($this->userSalesVolume === false){
$this->userSalesVolume = UserSalesVolume::where('user_id', $this->id)->where('month', $month)->where('year', $year)->get()->last();
$this->userSalesVolume = $this->getUserSalesVolume($month, $year, 'first');
}
if($this->userSalesVolume){
switch ($key) {
@ -507,7 +508,18 @@ class User extends Authenticatable
}
}
return 0;
}
public function getUserSalesVolume($month, $year, $record = 'get')
{
$query = UserSalesVolume::where('user_id', $this->id)->where('month', $month)->where('year', $year)->orderBy('id', 'DESC');
switch ($record) {
case 'get':
return $query->get();
break;
case 'first':
return $query->first();
break;
}
}
}