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 '
+
+
+ ';
+ })
+ ->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')}}:
-
-
-
-
-
- {{__('Currency')}} |
- {{__('Number of payments')}} |
- {{__('Total income')}} |
-
-
-
- @foreach($counters['payments']['lastMonth'] as $currency => $income)
-
- {{$currency}} |
- {{$income->count}} |
- {{$income->total}} |
-
- @endforeach
-
-
-
-
+ @if($counters['payments']['lastMonth']->count())
+
+
{{__('Last month')}}:
+
+
+
+
+
+ {{__('Currency')}} |
+ {{__('Number of payments')}} |
+ {{__('Total amount')}} |
+
+
+
+ @foreach($counters['payments']['lastMonth'] as $currency => $income)
+
+ {{$currency}} |
+ {{$income->count}} |
+ {{$income->total}} |
+
+ @endforeach
+
+
+
+
+ @endif
+ @if($counters['payments']['lastMonth']->count())
+ @else
@endif
{{__('This month')}}:
{{__('Currency')}} |
{{__('Number of payments')}} |
-
{{__('Total income')}} |
+
{{__('Total amount')}} |
@@ -321,6 +326,75 @@
+
+
+
+ @if($counters['taxPayments']['lastYear']->count())
+
{{__('Last year')}}:
+
+
+
+
+
+ {{__('Currency')}} |
+ {{__('Number of payments')}} |
+ {{__('Base amount')}} |
+ {{__('Total taxes')}} |
+ {{__('Total amount')}} |
+
+
+
+ @foreach($counters['taxPayments']['lastYear'] as $currency => $income)
+
+ {{$currency}} |
+ {{$income->count}} |
+ {{$income->price}} |
+ {{$income->taxes}} |
+ {{$income->total}} |
+
+ @endforeach
+
+
+
+ @endif
+
{{__('This year')}}:
+
+
+
+
+
+ {{__('Currency')}} |
+ {{__('Number of payments')}} |
+ {{__('Base amount')}} |
+ {{__('Total taxes')}} |
+ {{__('Total amount')}} |
+
+
+
+ @foreach($counters['taxPayments']['thisYear'] as $currency => $income)
+
+ {{$currency}} |
+ {{$income->count}} |
+ {{$income->price}} |
+ {{$income->taxes}} |
+ {{$income->total}} |
+
+ @endforeach
+
+
+
+
+
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')
+
+
+
+
+
+
+
+
+
+
+
+
+@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')
+
+
+
+
+
+
+
+
+
+
+
+
+@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')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{__('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 @@
{{__('Vouchers')}}
{{__('Edit')}}
+ href="{{route('admin.vouchers.edit' , $voucher->id)}}">{{__('Edit')}}
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))
+
+
+
+
+ @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 @@
+
+
+
+ {{ __('Partners') }}
+
+
+
{{-- --}}
{{-- --}}
diff --git a/resources/views/store/checkout.blade.php b/resources/views/store/checkout.blade.php
index 1c742780..dbbe6cb3 100644
--- a/resources/views/store/checkout.blade.php
+++ b/resources/views/store/checkout.blade.php
@@ -107,18 +107,20 @@
+ @if($discountpercent&&$discountvalue)
+
+ {{ __('Discount') }} ({{ $discountpercent }}%): |
+ {{$product->formatToCurrency($discountvalue)}} |
+
+ @endif
{{ __('Subtotal') }}: |
- {{ $product->formatToCurrency($product->price) }} |
+ {{ $product->formatToCurrency($discountedprice) }} |
- {{ __('Tax') }} ({{ $taxpercent }}%) |
+ {{ __('Tax') }} ({{ $taxpercent }}%): |
{{ $product->formatToCurrency($taxvalue) }} |
-
- {{ __('Quantity') }}: |
- 1 |
-
{{ __('Total') }}: |
{{ $product->formatToCurrency($total) }} |
@@ -154,7 +156,6 @@
//loading
paymentMethod: '',
paymentRoute: '',
-
setPaymentRoute(provider) {
switch (provider) {
case 'paypal':
@@ -167,12 +168,9 @@
this.paymentRoute = '{{ route('payment.PaypalPay', $product->id) }}';
}
},
-
-
-
}
}
-@endsection
+@endsection
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
index 47dc9c82..400676ad 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -30,6 +30,7 @@ use Illuminate\Support\Facades\Route;
use App\Classes\Settings\Language;
use App\Classes\Settings\Invoices;
use App\Classes\Settings\System;
+use App\Http\Controllers\PartnerController;
/*
|--------------------------------------------------------------------------
@@ -184,6 +185,11 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
Route::get('vouchers/{voucher}/users', [VoucherController::class, 'users'])->name('vouchers.users');
Route::resource('vouchers', VoucherController::class);
+ #partners
+ Route::get('partners/datatable', [PartnerController::class, 'datatable'])->name('partners.datatable');
+ Route::get('partners/{voucher}/users', [PartnerController::class, 'users'])->name('partners.users');
+ Route::resource('partners', PartnerController::class);
+
#api-keys
Route::get('api/datatable', [ApplicationApiController::class, 'datatable'])->name('api.datatable');
Route::resource('api', ApplicationApiController::class)->parameters([
@@ -209,4 +215,4 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
});
Route::get('/home', [HomeController::class, 'index'])->name('home');
-});
+});
\ No newline at end of file