#51 Festschreiben der Points, Gutschriftenmodul

This commit is contained in:
Kevin Adametz 2022-07-29 18:18:05 +02:00
parent dfd049aaa9
commit 3f2fbd6d5b
63 changed files with 4610 additions and 971 deletions

View file

@ -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."<br>";
}
}
if($UserCredit->user_credits){
foreach($UserCredit->user_credits as $user_credit){
$ret .= nl2br($user_credit->message)." / ".$user_credit->created_at."<br>";
}
}
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 .= '<a href="'.route('storage_file', [$UserCredit->id, 'credit', 'download']).'" class="btn btn-primary btn-xs"><i class="fa fa-download"></i></a> ';
$ret .= '<a href="'.route('storage_file', [$UserCredit->id, 'credit', 'stream']).'" target="_blank" class="btn btn-warning btn-xs"><i class="fa fa-eye"></i></a>';
}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')."<br>";
}
}
return $ret;
})
->addColumn('status', function (UserCredit $UserCredit) {
return '<a href="#" data-toggle="modal" data-target="#modals-load-content" data-modal="modal-lg"
data-id="'.$UserCredit->id.'" data-route="'.route('modal_load').'" data-action="user-credit-status" data-view="">
@ -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);
}
}