diff --git a/app/Classes/Settings/Misc.php b/app/Classes/Settings/Misc.php index 1b67b562..496bac73 100644 --- a/app/Classes/Settings/Misc.php +++ b/app/Classes/Settings/Misc.php @@ -40,6 +40,7 @@ class Misc 'enable_referral' => 'nullable|string', 'referral_reward' => 'nullable|numeric', 'referral_allowed' => 'nullable|string', + 'always_give_commission' => 'nullable|string', 'referral_percentage' => 'nullable|numeric', 'referral_mode' => 'nullable|string', 'ticket_enabled' => 'nullable|string', @@ -87,6 +88,7 @@ class Misc "SETTINGS::REFERRAL::REWARD" => "referral_reward", "SETTINGS::REFERRAL::ALLOWED" => "referral_allowed", "SETTINGS::REFERRAL:MODE" => "referral_mode", + "SETTINGS::REFERRAL::ALWAYS_GIVE_COMMISSION" => "always_give_commission", "SETTINGS::REFERRAL:PERCENTAGE" => "referral_percentage", "SETTINGS::TICKET:ENABLED" => "ticket_enabled" diff --git a/app/Http/Controllers/Admin/OverViewController.php b/app/Http/Controllers/Admin/OverViewController.php index 20fe0c17..f46f803d 100644 --- a/app/Http/Controllers/Admin/OverViewController.php +++ b/app/Http/Controllers/Admin/OverViewController.php @@ -52,6 +52,19 @@ class OverViewController extends Controller $counters['payments']['thisMonth']->timeEnd = Carbon::today()->toDateString(); $counters['payments']['lastMonth']->timeStart = Carbon::today()->startOfMonth()->subMonth()->toDateString(); $counters['payments']['lastMonth']->timeEnd = Carbon::today()->endOfMonth()->subMonth()->toDateString(); + + + //Prepare subCollection 'taxPayments' + $counters->put('taxPayments', collect()); + //Get and save taxPayments from last 2 years for later filtering and looping + $taxPayments = Payment::query()->where('created_at', '>=', Carbon::today()->startOfYear()->subYear())->where('status', 'paid')->get(); + //Prepare collections and set a few variables + $counters['taxPayments']->put('thisYear', collect()); + $counters['taxPayments']->put('lastYear', collect()); + $counters['taxPayments']['thisYear']->timeStart = Carbon::today()->startOfYear()->toDateString(); + $counters['taxPayments']['thisYear']->timeEnd = Carbon::today()->toDateString(); + $counters['taxPayments']['lastYear']->timeStart = Carbon::today()->startOfYear()->subYear()->toDateString(); + $counters['taxPayments']['lastYear']->timeEnd = Carbon::today()->endOfYear()->subYear()->toDateString(); //Fill out variables for each currency separately foreach($payments->where('created_at', '>=', Carbon::today()->startOfMonth()) as $payment){ @@ -76,6 +89,35 @@ class OverViewController extends Controller } $counters['payments']->total = Payment::query()->count(); + foreach($taxPayments->where('created_at', '>=', Carbon::today()->startOfYear()->subYear()) as $taxPayment){ + $paymentCurrency = $payment->currency_code; + if(!isset($counters['taxPayments']['thisYear'][$paymentCurrency])){ + $counters['taxPayments']['thisYear']->put($paymentCurrency, collect()); + $counters['taxPayments']['thisYear'][$paymentCurrency]->total = 0; + $counters['taxPayments']['thisYear'][$paymentCurrency]->count = 0; + $counters['taxPayments']['thisYear'][$paymentCurrency]->price = 0; + $counters['taxPayments']['thisYear'][$paymentCurrency]->taxes = 0; + } + $counters['taxPayments']['thisYear'][$paymentCurrency]->total += $taxPayment->total_price; + $counters['taxPayments']['thisYear'][$paymentCurrency]->count ++; + $counters['taxPayments']['thisYear'][$paymentCurrency]->price += $taxPayment->price; + $counters['taxPayments']['thisYear'][$paymentCurrency]->taxes += $taxPayment->tax_value; + } + foreach($taxPayments->where('created_at', '<', Carbon::today()->startOfYear()) as $taxPayment){ + $paymentCurrency = $payment->currency_code; + if(!isset($counters['taxPayments']['lastYear'][$paymentCurrency])){ + $counters['taxPayments']['lastYear']->put($paymentCurrency, collect()); + $counters['taxPayments']['lastYear'][$paymentCurrency]->total = 0; + $counters['taxPayments']['lastYear'][$paymentCurrency]->count = 0; + $counters['taxPayments']['lastYear'][$paymentCurrency]->price = 0; + $counters['taxPayments']['lastYear'][$paymentCurrency]->taxes = 0; + } + $counters['taxPayments']['lastYear'][$paymentCurrency]->total += $taxPayment->total_price; + $counters['taxPayments']['lastYear'][$paymentCurrency]->count ++; + $counters['taxPayments']['lastYear'][$paymentCurrency]->price += $taxPayment->price; + $counters['taxPayments']['lastYear'][$paymentCurrency]->taxes += $taxPayment->tax_value; + } + $lastEgg = Egg::query()->latest('updated_at')->first(); $syncLastUpdate = $lastEgg ? $lastEgg->updated_at->isoFormat('LLL') : __('unknown'); @@ -124,33 +166,30 @@ class OverViewController extends Controller //Get latest tickets - $tickets = Cache::remember('tickets', self::TTL, function(){ - $output = collect(); - foreach(Ticket::query()->latest()->take(3)->get() as $ticket){ - $output->put($ticket->ticket_id, collect()); - $output[$ticket->ticket_id]->title = $ticket->title; - $user = User::query()->where('id', $ticket->user_id)->first(); - $output[$ticket->ticket_id]->user_id = $user->id; - $output[$ticket->ticket_id]->user = $user->name; - $output[$ticket->ticket_id]->status = $ticket->status; - $output[$ticket->ticket_id]->last_updated = $ticket->updated_at->diffForHumans(); - switch ($ticket->status) { - case 'Open': - $output[$ticket->ticket_id]->statusBadgeColor = 'badge-success'; - break; - case 'Closed': - $output[$ticket->ticket_id]->statusBadgeColor = 'badge-danger'; - break; - case 'Answered': - $output[$ticket->ticket_id]->statusBadgeColor = 'badge-info'; - break; - default: - $output[$ticket->ticket_id]->statusBadgeColor = 'badge-warning'; - break; - } + $tickets = collect(); + foreach(Ticket::query()->latest()->take(5)->get() as $ticket){ + $tickets->put($ticket->ticket_id, collect()); + $tickets[$ticket->ticket_id]->title = $ticket->title; + $user = User::query()->where('id', $ticket->user_id)->first(); + $tickets[$ticket->ticket_id]->user_id = $user->id; + $tickets[$ticket->ticket_id]->user = $user->name; + $tickets[$ticket->ticket_id]->status = $ticket->status; + $tickets[$ticket->ticket_id]->last_updated = $ticket->updated_at->diffForHumans(); + switch ($ticket->status) { + case 'Open': + $tickets[$ticket->ticket_id]->statusBadgeColor = 'badge-success'; + break; + case 'Closed': + $tickets[$ticket->ticket_id]->statusBadgeColor = 'badge-danger'; + break; + case 'Answered': + $tickets[$ticket->ticket_id]->statusBadgeColor = 'badge-info'; + break; + default: + $tickets[$ticket->ticket_id]->statusBadgeColor = 'badge-warning'; + break; } - return $output; - }); + } return view('admin.overview.index', [ 'counters' => $counters, diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 8d3a0d23..30f03085 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin; use App\Events\UserUpdateCreditsEvent; use App\Http\Controllers\Controller; use App\Models\InvoiceSettings; +use App\Models\PartnerDiscount; use App\Models\Payment; use App\Models\ShopProduct; use App\Models\Settings; @@ -57,10 +58,13 @@ class PaymentController extends Controller public function checkOut(Request $request, ShopProduct $shopProduct) { return view('store.checkout')->with([ - 'product' => $shopProduct, - 'taxvalue' => $shopProduct->getTaxValue(), - 'taxpercent' => $shopProduct->getTaxPercent(), - 'total' => $shopProduct->getTotalPrice() + 'product' => $shopProduct, + 'discountpercent' => PartnerDiscount::getDiscount(), + 'discountvalue' => PartnerDiscount::getDiscount() * $shopProduct->price/100, + 'discountedprice' => $shopProduct->getPriceAfterDiscount(), + 'taxvalue' => $shopProduct->getTaxValue(), + 'taxpercent' => $shopProduct->getTaxPercent(), + 'total' => $shopProduct->getTotalPrice() ]); } @@ -78,7 +82,7 @@ class PaymentController extends Controller "purchase_units" => [ [ "reference_id" => uniqid(), - "description" => $shopProduct->description, + "description" => $shopProduct->display . (PartnerDiscount::getDiscount()?(" (" . __('Discount') . " " . PartnerDiscount::getDiscount() . '%)'):""), "amount" => [ "value" => $shopProduct->getTotalPrice(), 'currency_code' => strtoupper($shopProduct->currency_code), @@ -86,7 +90,7 @@ class PaymentController extends Controller 'item_total' => [ 'currency_code' => strtoupper($shopProduct->currency_code), - 'value' => $shopProduct->price, + 'value' => $shopProduct->getPriceAfterDiscount(), ], 'tax_total' => [ @@ -180,15 +184,31 @@ class PaymentController extends Controller $user->increment('server_limit', $shopProduct->quantity); } + //give referral commission always + if((config("SETTINGS::REFERRAL:MODE") == "commission" || config("SETTINGS::REFERRAL:MODE") == "both") && $shopProduct->type=="Credits" && config("SETTINGS::REFERRAL::ALWAYS_GIVE_COMMISSION") == "true"){ + if($ref_user = DB::table("user_referrals")->where('registered_user_id', '=', $user->id)->first()){ + $ref_user = User::findOrFail($ref_user->referral_id); + $increment = number_format($shopProduct->quantity*(PartnerDiscount::getCommission($ref_user->id))/100,0,"",""); + $ref_user->increment('credits', $increment); + + //LOGS REFERRALS IN THE ACTIVITY LOG + activity() + ->performedOn($user) + ->causedBy($ref_user) + ->log('gained '. $increment.' '.config("SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME").' for commission-referral of '.$user->name.' (ID:'.$user->id.')'); + } + + } //update role give Referral-reward if ($user->role == 'member') { $user->update(['role' => 'client']); - if((config("SETTINGS::REFERRAL:MODE") == "commission" || config("SETTINGS::REFERRAL:MODE") == "both") && $shopProduct->type=="Credits"){ + //give referral commission only on first purchase + if((config("SETTINGS::REFERRAL:MODE") == "commission" || config("SETTINGS::REFERRAL:MODE") == "both") && $shopProduct->type=="Credits" && config("SETTINGS::REFERRAL::ALWAYS_GIVE_COMMISSION") == "false"){ if($ref_user = DB::table("user_referrals")->where('registered_user_id', '=', $user->id)->first()){ $ref_user = User::findOrFail($ref_user->referral_id); - $increment = number_format($shopProduct->quantity/100*config("SETTINGS::REFERRAL:PERCENTAGE"),0,"",""); + $increment = number_format($shopProduct->quantity*(PartnerDiscount::getCommission($ref_user->id))/100,0,"",""); $ref_user->increment('credits', $increment); //LOGS REFERRALS IN THE ACTIVITY LOG @@ -210,7 +230,7 @@ class PaymentController extends Controller 'type' => $shopProduct->type, 'status' => 'paid', 'amount' => $shopProduct->quantity, - 'price' => $shopProduct->price, + 'price' => $shopProduct->price - ($shopProduct->price*PartnerDiscount::getDiscount()/100), 'tax_value' => $shopProduct->getTaxValue(), 'tax_percent' => $shopProduct->getTaxPercent(), 'total_price' => $shopProduct->getTotalPrice(), @@ -273,10 +293,10 @@ class PaymentController extends Controller 'price_data' => [ 'currency' => $shopProduct->currency_code, 'product_data' => [ - 'name' => $shopProduct->display, + 'name' => $shopProduct->display . (PartnerDiscount::getDiscount()?(" (" . __('Discount') . " " . PartnerDiscount::getDiscount() . '%)'):""), 'description' => $shopProduct->description, ], - 'unit_amount_decimal' => round($shopProduct->price * 100, 2), + 'unit_amount_decimal' => round($shopProduct->getPriceAfterDiscount() * 100, 2), ], 'quantity' => 1, ], @@ -284,7 +304,7 @@ class PaymentController extends Controller 'price_data' => [ 'currency' => $shopProduct->currency_code, 'product_data' => [ - 'name' => 'Product Tax', + 'name' => __('Tax'), 'description' => $shopProduct->getTaxPercent() . "%", ], 'unit_amount_decimal' => round($shopProduct->getTaxValue(), 2) * 100, @@ -373,7 +393,7 @@ class PaymentController extends Controller 'type' => $shopProduct->type, 'status' => 'paid', 'amount' => $shopProduct->quantity, - 'price' => $shopProduct->price, + 'price' => $shopProduct->price - ($shopProduct->price*PartnerDiscount::getDiscount()/100), 'tax_value' => $shopProduct->getTaxValue(), 'total_price' => $shopProduct->getTotalPrice(), 'tax_percent' => $shopProduct->getTaxPercent(), @@ -611,7 +631,7 @@ class PaymentController extends Controller ->name(__("Invoice")) ->buyer($customer) ->seller($seller) - ->discountByPercent(0) + ->discountByPercent(PartnerDiscount::getDiscount()) ->taxRate(floatval($shopProduct->getTaxPercent())) ->shipping(0) ->addItem($item) @@ -654,7 +674,8 @@ class PaymentController extends Controller return datatables($query) ->editColumn('user', function (Payment $payment) { - return $payment->user->name; + return + ($payment->user)?''.$payment->user->name.'':__('Unknown user'); }) ->editColumn('price', function (Payment $payment) { return $payment->formatToCurrency($payment->price); @@ -675,7 +696,7 @@ class PaymentController extends Controller ->addColumn('actions', function (Payment $payment) { return ''; }) - ->rawColumns(['actions']) + ->rawColumns(['actions', 'user']) ->make(true); } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index f4f7de1b..e372f121 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -288,7 +288,8 @@ class UserController extends Controller return $user->discordUser ? $user->discordUser->id : ''; }) ->addColumn('last_seen', function (User $user) { - return $user->last_seen ? $user->last_seen->diffForHumans() : ''; + return ['display' => $user->last_seen ? $user->last_seen->diffForHumans() : '', + 'raw' => $user->last_seen ? strtotime($user->last_seen) : '']; }) ->addColumn('actions', function (User $user) { $suspendColor = $user->isSuspended() ? "btn-success" : "btn-warning"; @@ -331,9 +332,9 @@ class UserController extends Controller ->editColumn('name', function (User $user) { return 'pterodactyl_id . '">' . strip_tags($user->name) . ''; }) - ->orderColumn('last_seen', function ($query) { + /*->orderColumn('last_seen', function ($query) { $query->orderBy('last_seen', "desc"); - }) + })*/ ->rawColumns(['avatar', 'name', 'credits', 'role', 'usage', 'referrals', 'actions', 'last_seen']) ->make(true); } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 27ff778b..472d0345 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,9 +2,11 @@ namespace App\Http\Controllers; +use App\Models\PartnerDiscount; use App\Models\UsefulLink; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Storage; @@ -105,7 +107,10 @@ class HomeController extends Controller 'useful_links' => UsefulLink::all()->sortBy('id'), 'bg' => $bg, 'boxText' => $boxText, - 'unit' => $unit + 'unit' => $unit, + 'numberOfReferrals' => DB::table('user_referrals')->where("referral_id","=",Auth::user()->id)->count(), + 'partnerDiscount' => PartnerDiscount::where('user_id', Auth::user()->id)->first(), + 'myDiscount' => PartnerDiscount::getDiscount() ]); } } diff --git a/app/Http/Controllers/PartnerController.php b/app/Http/Controllers/PartnerController.php new file mode 100644 index 00000000..bc546511 --- /dev/null +++ b/app/Http/Controllers/PartnerController.php @@ -0,0 +1,206 @@ +PartnerDiscount::get(), + 'users' => User::orderBy('name')->get() + ]); + } + + /** + * Store a newly created resource in storage. + * + * @param Request $request + * @return RedirectResponse + */ + public function store(Request $request) + { + $request->validate([ + 'user_id' => 'required|integer|min:0', + 'partner_discount' => 'required|integer|max:100|min:0', + 'registered_user_discount' => 'required|integer|max:100|min:0' + ]); + + PartnerDiscount::create($request->all()); + + return redirect()->route('admin.partners.index')->with('success', __('partner has been created!')); + } + + /** + * Display the specified resource. + * + * @param Voucher $voucher + * @return Response + */ + public function show(Voucher $voucher) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param Voucher $voucher + * @return Application|Factory|View + */ + public function edit(PartnerDiscount $partner) + { + return view('admin.partners.edit', [ + 'partners' =>PartnerDiscount::get(), + 'partner' => $partner, + 'users' => User::orderBy('name')->get() + ]); + } + + /** + * Update the specified resource in storage. + * + * @param Request $request + * @param Voucher $voucher + * @return RedirectResponse + */ + public function update(Request $request, PartnerDiscount $partner) + { + //dd($request); + $request->validate([ + 'user_id' => 'required|integer|min:0', + 'partner_discount' => 'required|integer|max:100|min:0', + 'registered_user_discount' => 'required|integer|max:100|min:0' + ]); + + $partner->update($request->all()); + + return redirect()->route('admin.partners.index')->with('success', __('partner has been updated!')); + } + + /** + * Remove the specified resource from storage. + * + * @param Voucher $voucher + * @return RedirectResponse + */ + public function destroy(PartnerDiscount $partner) + { + $partner->delete(); + return redirect()->back()->with('success', __('partner has been removed!')); + } + + public function users(Voucher $voucher) + { + return view('admin.vouchers.users', [ + 'voucher' => $voucher + ]); + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ValidationException + */ + public function redeem(Request $request) + { + #general validations + $request->validate([ + 'code' => 'required|exists:vouchers,code' + ]); + + #get voucher by code + $voucher = Voucher::where('code', '=', $request->input('code'))->firstOrFail(); + + #extra validations + if ($voucher->getStatus() == 'USES_LIMIT_REACHED') throw ValidationException::withMessages([ + 'code' => __('This voucher has reached the maximum amount of uses') + ]); + + if ($voucher->getStatus() == 'EXPIRED') throw ValidationException::withMessages([ + 'code' => __('This voucher has expired') + ]); + + if (!$request->user()->vouchers()->where('id', '=', $voucher->id)->get()->isEmpty()) throw ValidationException::withMessages([ + 'code' => __('You already redeemed this voucher code') + ]); + + if ($request->user()->credits + $voucher->credits >= 99999999) throw ValidationException::withMessages([ + 'code' => "You can't redeem this voucher because you would exceed the limit of " . CREDITS_DISPLAY_NAME + ]); + + #redeem voucher + $voucher->redeem($request->user()); + + event(new UserUpdateCreditsEvent($request->user())); + + return response()->json([ + 'success' => "{$voucher->credits} " . CREDITS_DISPLAY_NAME ." ". __("have been added to your balance!") + ]); + } + + public function usersDataTable(Voucher $voucher) + { + $users = $voucher->users(); + + return datatables($users) + ->editColumn('name', function (User $user) { + return '' . $user->name . ''; + }) + ->addColumn('credits', function (User $user) { + return ' ' . $user->credits(); + }) + ->addColumn('last_seen', function (User $user) { + return $user->last_seen ? $user->last_seen->diffForHumans() : ''; + }) + ->rawColumns(['name', 'credits', 'last_seen']) + ->make(); + } + public function dataTable() + { + $query = PartnerDiscount::query(); + + return datatables($query) + ->addColumn('actions', function (PartnerDiscount $partner) { + return ' + +
+ ' . csrf_field() . ' + ' . method_field("DELETE") . ' + +
+ '; + }) + ->addColumn('user', function (PartnerDiscount $partner) { + return ($user=User::where('id', $partner->user_id)->first())?''.$user->name.'':__('Unknown user'); + }) + ->editColumn('created_at', function (PartnerDiscount $partner) { + return $partner->created_at ? $partner->created_at->diffForHumans() : ''; + }) + ->editColumn('partner_discount', function (PartnerDiscount $partner) { + return $partner->partner_discount ? $partner->partner_discount . "%" : "0%"; + }) + ->editColumn('registered_user_discount', function (PartnerDiscount $partner) { + return $partner->registered_user_discount ? $partner->registered_user_discount . "%" : "0%"; + }) + ->editColumn('referral_system_commission', function (PartnerDiscount $partner) { + return $partner->referral_system_commission>=0 ? $partner->referral_system_commission . "%" : __('Default') . " (" . config("SETTINGS::REFERRAL:PERCENTAGE") . "%)"; + }) + ->rawColumns(['user', 'actions']) + ->make(); + } +} \ No newline at end of file diff --git a/app/Models/PartnerDiscount.php b/app/Models/PartnerDiscount.php new file mode 100644 index 00000000..c2bea233 --- /dev/null +++ b/app/Models/PartnerDiscount.php @@ -0,0 +1,41 @@ +id)->first()){ + return $partnerDiscount->partner_discount; + } + else if($ref_user = DB::table("user_referrals")->where('registered_user_id', '=', Auth::user()->id)->first()){ + if($partnerDiscount = PartnerDiscount::where('user_id', $ref_user->referral_id)->first()){ + return $partnerDiscount->registered_user_discount; + } + return 0; + } + return 0; + } + public static function getCommission($user_id) + { + if($partnerDiscount = PartnerDiscount::where('user_id', $user_id)->first()){ + if($partnerDiscount->referral_system_commission>=0) return $partnerDiscount->referral_system_commission>=0; + } + return config("SETTINGS::REFERRAL:PERCENTAGE"); + } +} \ No newline at end of file diff --git a/app/Models/ShopProduct.php b/app/Models/ShopProduct.php index 4d158be8..3339a169 100644 --- a/app/Models/ShopProduct.php +++ b/app/Models/ShopProduct.php @@ -63,6 +63,11 @@ class ShopProduct extends Model return $tax < 0 ? 0 : $tax; } + public function getPriceAfterDiscount() + { + return number_format($this->price - ($this->price * PartnerDiscount::getDiscount() / 100), 2); + } + /** * @description Returns the tax as Number * @@ -70,7 +75,7 @@ class ShopProduct extends Model */ public function getTaxValue() { - return number_format($this->price * $this->getTaxPercent() / 100, 2); + return number_format($this->getPriceAfterDiscount() * $this->getTaxPercent() / 100, 2); } /** @@ -80,6 +85,6 @@ class ShopProduct extends Model */ public function getTotalPrice() { - return number_format($this->price + $this->getTaxValue(), 2); + return number_format($this->getPriceAfterDiscount() + $this->getTaxValue(), 2); } -} +} \ No newline at end of file diff --git a/database/migrations/2022_08_25_202109_create_partner_discounts_table.php b/database/migrations/2022_08_25_202109_create_partner_discounts_table.php new file mode 100644 index 00000000..976aa3a8 --- /dev/null +++ b/database/migrations/2022_08_25_202109_create_partner_discounts_table.php @@ -0,0 +1,35 @@ +id(); + $table->foreignId('user_id'); + $table->integer('partner_discount'); + $table->integer('registered_user_discount'); + $table->integer('referral_system_commission'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('partner_discounts'); + } +} \ No newline at end of file diff --git a/database/seeders/Seeds/SettingsSeeder.php b/database/seeders/Seeds/SettingsSeeder.php index 6a6479ef..83f88da4 100644 --- a/database/seeders/Seeds/SettingsSeeder.php +++ b/database/seeders/Seeds/SettingsSeeder.php @@ -479,6 +479,13 @@ class SettingsSeeder extends Seeder 'type' => 'string', 'description' => 'Enable or disable the referral system' ]); + Settings::firstOrCreate([ + 'key' => 'SETTINGS::REFERRAL::ALWAYS_GIVE_COMMISSION', + ], [ + 'value' =>"false", + 'type' => 'string', + 'description' => 'Whether referrals get percentage commission only on first purchase or on every purchase' + ]); Settings::firstOrCreate([ 'key' => 'SETTINGS::REFERRAL::REWARD', ], [ diff --git a/resources/views/admin/overview/index.blade.php b/resources/views/admin/overview/index.blade.php index 6fca3730..7bf2664a 100644 --- a/resources/views/admin/overview/index.blade.php +++ b/resources/views/admin/overview/index.blade.php @@ -254,6 +254,7 @@ +
@@ -266,32 +267,36 @@
-
- {{__('Last month')}}: - - - - - - - - - - - - @foreach($counters['payments']['lastMonth'] as $currency => $income) - - - - - - @endforeach - -
{{__('Currency')}}{{__('Number of payments')}}{{__('Total income')}}
{{$currency}}{{$income->count}}{{$income->total}}
-
-
+ @if($counters['payments']['lastMonth']->count()) +
+ {{__('Last month')}}: + + + + + + + + + + + + @foreach($counters['payments']['lastMonth'] as $currency => $income) + + + + + + @endforeach + +
{{__('Currency')}}{{__('Number of payments')}}{{__('Total amount')}}
{{$currency}}{{$income->count}}{{$income->total}}
+
+
+ @endif + @if($counters['payments']['lastMonth']->count())
+ @else
@endif {{__('This month')}}: {{__('Currency')}} {{__('Number of payments')}} - {{__('Total income')}} + {{__('Total amount')}} @@ -321,6 +326,75 @@
+
+
+
+
+ {{__('Tax overview')}} +
+
+
+
+ @if($counters['taxPayments']['lastYear']->count()) + {{__('Last year')}}: + + + + + + + + + + + + + + @foreach($counters['taxPayments']['lastYear'] as $currency => $income) + + + + + + + + @endforeach + +
{{__('Currency')}}{{__('Number of payments')}}{{__('Base amount')}}{{__('Total taxes')}}{{__('Total amount')}}
{{$currency}}{{$income->count}}{{$income->price}}{{$income->taxes}}{{$income->total}}
+
+ @endif + {{__('This year')}}: + + + + + + + + + + + + + + @foreach($counters['taxPayments']['thisYear'] as $currency => $income) + + + + + + + + @endforeach + +
{{__('Currency')}}{{__('Number of payments')}}{{__('Base amount')}}{{__('Total taxes')}}{{__('Total amount')}}
{{$currency}}{{$income->count}}{{$income->price}}{{$income->taxes}}{{$income->total}}
+
+
+
diff --git a/resources/views/admin/partners/create.blade.php b/resources/views/admin/partners/create.blade.php new file mode 100644 index 00000000..8ac26d54 --- /dev/null +++ b/resources/views/admin/partners/create.blade.php @@ -0,0 +1,139 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Vouchers')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ {{__('Partner details')}} +
+
+
+
+ @csrf + +
+ + + @error('user') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('partner_discount') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+ +
+ @error('registered_user_discount') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('referral_system_commission') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+
+
+
+
+
+ + + +
+
+ + + + + + +@endsection \ No newline at end of file diff --git a/resources/views/admin/partners/edit.blade.php b/resources/views/admin/partners/edit.blade.php new file mode 100644 index 00000000..2806f749 --- /dev/null +++ b/resources/views/admin/partners/edit.blade.php @@ -0,0 +1,158 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Partners')}}

+
+ +
+
+
+ + + +
+
+ +
+
+
+
+
+ {{__('Partner details')}} +
+
+
+
+ @csrf + @method('PATCH') + +
+ + + @error('user') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('partner_discount') +
+ {{$message}} +
+ @enderror +
+ + +
+ +
+ +
+ @error('registered_user_discount') +
+ {{$message}} +
+ @enderror +
+ +
+ + + @error('referral_system_commission') +
+ {{$message}} +
+ @enderror +
+ +
+ +
+
+
+
+
+
+ +
+
+ + + + + + +@endsection \ No newline at end of file diff --git a/resources/views/admin/partners/index.blade.php b/resources/views/admin/partners/index.blade.php new file mode 100644 index 00000000..59369b01 --- /dev/null +++ b/resources/views/admin/partners/index.blade.php @@ -0,0 +1,94 @@ +@extends('layouts.main') + +@section('content') + +
+
+
+
+

{{__('Partners')}}

+
+ +
+
+
+ + + +
+
+ +
+ +
+
+
{{__('Partners')}}
+ {{__('Create new')}} +
+
+ +
+ + + + + + + + + + + + + + +
{{__('User')}}{{__('Partner discount')}}{{__('Registered user discount')}}{{__('Referral system commission')}}{{__('Created')}}{{__('Actions')}}
+ +
+
+ + +
+ + +
+ + + + + + +@endsection \ No newline at end of file diff --git a/resources/views/admin/payments/index.blade.php b/resources/views/admin/payments/index.blade.php index 69f09a44..6dd7c7af 100644 --- a/resources/views/admin/payments/index.blade.php +++ b/resources/views/admin/payments/index.blade.php @@ -39,6 +39,7 @@ {{ __('ID') }} {{ __('Type') }} + {{ __('User') }} {{ __('Amount') }} {{ __('Product Price') }} {{ __('Tax Value') }} @@ -77,6 +78,7 @@ columns: [ {data: 'id',name: 'payments.id'}, {data: 'type'}, + {data: 'user', sortable: false}, {data: 'amount'}, {data: 'price'}, {data: 'tax_value'}, diff --git a/resources/views/admin/settings/tabs/misc.blade.php b/resources/views/admin/settings/tabs/misc.blade.php index 48b505c8..01a57b68 100644 --- a/resources/views/admin/settings/tabs/misc.blade.php +++ b/resources/views/admin/settings/tabs/misc.blade.php @@ -222,6 +222,20 @@
+
+
+
+ + +
+
+
+
diff --git a/resources/views/admin/vouchers/edit.blade.php b/resources/views/admin/vouchers/edit.blade.php index df7d945b..11c7c5e3 100644 --- a/resources/views/admin/vouchers/edit.blade.php +++ b/resources/views/admin/vouchers/edit.blade.php @@ -14,7 +14,7 @@ diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 407b127d..e7c90b95 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -140,8 +140,7 @@
    - @foreach (Auth::user()->actions()->take(8)->orderBy('created_at', 'desc')->get() - as $log) + @foreach (Auth::user()->actions()->take(8)->orderBy('created_at', 'desc')->get() as $log)
  • @if(str_starts_with($log->description,"created")) @@ -168,6 +167,80 @@
+ @if((config('SETTINGS::REFERRAL::ENABLED') ==true)) +
+
+

+ + {{ __('Partner program') }} +

+
+ +
+ @if((config('SETTINGS::REFERRAL::ALLOWED') == "client" && Auth::user()->role != "member") || config('SETTINGS::REFERRAL::ALLOWED') == "everyone") +
+
+ + + {{__("Your referral URL")}}: + + {{__('Click to copy')}} + + +
+
+ {{__("Number of referred users:")}} {{$numberOfReferrals}} +
+
+ @if($partnerDiscount) +
+ + + + + + + + + + + + + + + + + +
{{__('Your discount')}}{{__('Discount for your new users')}}{{__('Reward per registered user')}}{{__('New user payment commision')}}
{{$partnerDiscount->partner_discount}}%{{$partnerDiscount->registered_user_discount}}%{{config('SETTINGS::REFERRAL::REWARD')}} {{config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME')}}{{($partnerDiscount->referral_system_commission==-1)?config('SETTINGS::REFERRAL:PERCENTAGE'):($partnerDiscount->referral_system_commission)}}%
+
+ @else +
+ + + + + + + + + + + + + +
{{__('Reward per registered user')}}{{__('New user payment commision')}}
{{config('SETTINGS::REFERRAL::REWARD')}} {{config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME')}}{{config('SETTINGS::REFERRAL:PERCENTAGE')}}%
+
+ @endif + @else + + {{__("Make a purchase to reveal your referral-URL")}} + @endif +
+ +
+ @endif + @@ -176,5 +249,41 @@ - + @endsection diff --git a/resources/views/layouts/main.blade.php b/resources/views/layouts/main.blade.php index 20f1fb0d..80059395 100644 --- a/resources/views/layouts/main.blade.php +++ b/resources/views/layouts/main.blade.php @@ -330,6 +330,14 @@ + + {{-- --}} {{--