namespace App\Http\Controllers;
use Illuminate\Cache\RateLimiter;
use Illuminate\Http\Request;
use App\Models\Plan;
use App\Models\PlanRecord;
use App\Models\BankDetail;
use App\Models\User;
use App\Models\DailyIncome;
use App\Models\Transaction;
use App\Models\Sponsor;
use App\Models\UserWithLevel;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
class HomeController extends Controller {
public function __construct() {
$this->middleware("auth");
}
public function index() {
$plans = Plan::all();
$user = Auth::user();
return view("home", compact("plans", "user"));
}
public function myprofile() {
$user = Auth::user();
$sponsorCode = $user->sponsor_code;
$level1Commission = Transaction::where("sponsor_code", $sponsorCode)->where("transaction_type", "Level 1 of commission")->sum("amount");
$level2Commission = Transaction::where("sponsor_code", $sponsorCode)->where("transaction_type", "Level of commission")->sum("amount");
$level3Commission = Transaction::where("sponsor_code", $sponsorCode)->where("transaction_type", "Level 3 of commission")->sum("amount");
$totalTransactionCommission = $level1Commission + $level2Commission + $level3Commission;
$totalDailyIncome = DailyIncome::where("user_id", $sponsorCode)->sum("amount");
$totalIncome = $totalTransactionCommission + $totalDailyIncome;
return view("my", array("user" => $user, "totalIncome" => $totalIncome));
}
public function setting() {
$user = Auth::user();
return view("set", array("user" => $user));
}
public function our_bank() {
$user = Auth::user();
$bankDetails = BankDetail::where("user_id", $user->sponsor_code)->first();
return view("bind_bank", compact("bankDetails"));
}
public function change_pwd() {
$user = Auth::user();
return view("edit_pwd", array("user" => $user));
}
public function pay_fundpasschange() {
$user = Auth::user();
return view("edit_deposit_pwd", array("user" => $user));
}
public function companyProfile() {
$user = Auth::user();
return view("msg", array("user" => $user));
}
public function planRecord() {
$user = Auth::user();
$planRecords = \App\Models\PlanRecord::where("user_id", $user->sponsor_code)->orderBy("id", "desc")->get();
return view("lixibao_list", array("user" => $user, "planRecords" => $planRecords));
}
public function invite() {
$user = Auth::user();
return view("invite", array("user" => $user));
}
public function BuyProducts(Request $request) {
$user = Auth::user();
$postcid = $request->input("cid");
$date = Carbon::now()->format("d-m-Y");
$time = Carbon::now()->format("H:i:s");
$limiter = app(RateLimiter::class);
$key = "buy-products:" . $user->id;
if ($limiter->tooManyAttempts($key, 1, 10)) {
return response()->json(array("info" => "Too many requests. Please try again later."));
}
$limiter->hit($key, 10);
$userdata = $this->getUserDataBySponsorCode($user->sponsor_code);
$user_wallet_balance = $userdata->wallet_balance;
$user_recharge = $userdata->recharge;
$getpackagedetails = $this->getPackageDetails($postcid);
$package_price = trim($getpackagedetails->price);
$package_status = $getpackagedetails->status;
$package_per_day = $getpackagedetails->daily;
$total_days = $getpackagedetails->total_days;
$limit = $getpackagedetails->total_limit;
$packageType = $getpackagedetails->plan_type;
$planName = $getpackagedetails->plan_name;
$total_income = $getpackagedetails->total;
$getActivePackageCountForUser = $this->getUserPackageCount($user->sponsor_code, $postcid);
if ($getActivePackageCountForUser < $limit) {
if ($package_status == 1) {
if ($user_recharge >= $package_price) {
$new_recharge = $user_recharge - $package_price;
$this->updateUserFundWallet($user->sponsor_code, $new_recharge);
$expiry_date = Carbon::now()->addDays($total_days)->format("d-m-Y");
DB::table("plan_record")->insert(array("user_id" => $user->sponsor_code, "phone" => $user->phone, "plan_id" => $postcid, "plan_name" => $planName, "plan_limit" => $limit, "total_income" => $total_income, "amount" => $package_price, "start_date" => $date, "time" => $time, "total_days" => $total_days, "status" => 1, "daily_income" => $package_per_day, "end_date" => $expiry_date, "plan_type" => $packageType));
DB::table("transactions")->insert(array("user_id" => $user->id, "phone" => $user->phone, "sponsor_code" => $user->sponsor_code, "transaction_type" => "Plan amount", "cdtype" => "Debit", "amount" => $package_price, "status" => 1, "admin_status" => 1, "created_at" => $date, "time" => $time));
$this->distributeCommission($user->sponsor_code, $package_price);
return response()->json(array("info" => "Purchased Successful!"));
}
else {
return response()->json(array("info" => "The available balance is insufficient, please recharge"));
}
}
else {
return response()->json(array("info" => "Presale, temporarily not for purchase"));
}
}
else {
return response()->json(array("info" => "Plan limit over!"));
}
}
private function getUserDataBySponsorCode($sponsor_code) {
return DB::table("users")->where("sponsor_code", $sponsor_code)->first();
}
private function getPackageDetails($postcid) {
return DB::table("plans")->where("id", $postcid)->first();
}
private function getUserPackageCount($sponsor_code, $plan_id) {
return DB::table("plan_record")->where("user_id", $sponsor_code)->where("plan_id", $plan_id)->count();
}
private function updateUserFundWallet($sponsor_code, $amount) {
DB::table("users")->where("sponsor_code", $sponsor_code)->update(array("recharge" => $amount));
}
private function distributeCommission($sponsor_code, $package_price) {
$pinfinal = $sponsor_code;
for ($i = 1;
$i <= 3;
$i++) {
$mysponserid = $this->getSponsorId($pinfinal);
$sponserdetails = $this->getUserDataBySponsorCode($mysponserid);
if (!$sponserdetails) {
continue;
}
$spcode = $sponserdetails->sponsor_code;
$spamont = $sponserdetails->wallet_balance;
if ($i == 1) {
$direcamount = $package_price * 20 / 100;
$messagenext1 = "Level 1 of commission";
}
elseif ($i == 2) {
$direcamount = $package_price * 3 / 100;
$messagenext1 = "Level 2 of commission";
}
elseif ($i == 3) {
$direcamount = $package_price * 2 / 100;
$messagenext1 = "Level of commission";
}
if ($spcode != '') {
$total_amount = $spamont + $direcamount;
$this->updateUserWallet($spcode, $total_amount);
$this->insertTransaction($spcode, $direcamount, $messagenext1, "Credit");
}
$pinfinal = $spcode;
}
}
private function getSponsorId($sponsor_code) {
$user = DB::table("users")->where("sponsor_code", $sponsor_code)->first();
return $user ? $user->invite_code : null;
}
private function updateUserWallet($sponsor_code, $amount) {
DB::table("users")->where("sponsor_code", $sponsor_code)->update(array("wallet_balance" => $amount));
}
private function insertTransaction($sponsor_code, $amount, $description, $type) {
DB::table("transactions")->insert(array("user_id" => "null", "sponsor_code" => $sponsor_code, "transaction_type" => $description, "cdtype" => $type, "amount" => $amount, "status" => 1, "admin_status" => 1, "created_at" => Carbon::now()->format("d-m-Y"), "time" => Carbon::now()->format("H:i:s")));
}
}
© 2023 Quttera Ltd. All rights reserved.