spotlightInvestment()['data']; $featuredMarketplaceListed = $this->featuredInvestments(); $nonFeaturedMarketplaceListed = $this->nonFeaturedInvestments(); return view('Frontend.Pages.marketplace.index', compact('spotlightMarketPlaceListed', 'featuredMarketplaceListed', 'nonFeaturedMarketplaceListed')); } public function spotlightInvestment() { $data = null; if (MarketplaceFractionalRealEstateSeller::where('listing_status', 'Spotlight')->exists()) { $data = MarketplaceFractionalRealEstateSeller::where('listing_status', 'Spotlight')->first(); $table = 'fractional-real-estate'; } elseif (MarketplaceAlternativeInvestmentFundSeller::where('listing_status', 'Spotlight')->exists()) { $data = MarketplaceAlternativeInvestmentFundSeller::where('listing_status', 'Spotlight')->first(); $table = 'alternative-investment-fund'; } elseif (MarketplaceOtherProductsSeller::where('listing_status', 'Spotlight')->exists()) { $data = MarketplaceOtherProductsSeller::where('listing_status', 'Spotlight')->first(); $table = 'other-products'; } if ($data) { $expectedSale = $data->getRawOriginal('expected_selling_price') ?? $data->getRawOriginal('expected_sale_per_unit') ?? $data->getRawOriginal('expected_sale_price_per_unit'); $data = [ 'data' => [ 'product_name' => $data->property_name ?? $data->name_of_the_aif_fund ?? $data->security_name, 'expected_sale' => $this->IND_money_format($expectedSale), 'category' => $data->type_of_fund ?? $data->product_category ?? 'Fractional Real Estate', 'slug' => $data->slug, 'table' => $table ] ]; } else { $data = [ 'data' => [] ]; } return $data; } public function featuredInvestments() { $freMarketplace['fractional-real-estate'] = MarketplaceFractionalRealEstateSeller::where(['status' => 'Approved', 'listing_status' => 'Featured']) ->select('id', 'property_name', 'asset_type', 'fractional_real_estate_platform', 'property_address', 'expected_selling_price', 'annual_rental_yield_earned', 'slug', 'rental_escalation', 'property_grade', 'current_market_value_of_the_property', 'id as sold_status', 'id as category', 'id as discount', 'id as bid') ->get(); $aifMarketplace['alternative-investment-fund'] = MarketplaceAlternativeInvestmentFundSeller::where(['status' => 'Approved', 'listing_status' => 'Featured']) ->select('id', 'name_of_the_aif_fund', 'current_or_latest_nav', 'credit_rating', 'fund_category', 'type_of_fund', 'expected_sale_per_unit', 'no_of_units_you_wish_to_sell', 'slug', 'id as sold_status', 'id as discount', 'id as bid') ->get(); $opMarketplace['other-products'] = MarketplaceOtherProductsSeller::where(['status' => 'Approved', 'listing_status' => 'Featured']) ->select('id', 'face_value_per_unit', 'security_name', 'product_category', 'instrument_issuer', 'no_of_units_offered_for_sale', 'expected_sale_price_per_unit', 'slug', 'principal_repaid', 'id as sold_status', 'payout_frequency', 'id as discount', 'id as bid') ->get(); $marketplaceListed = []; array_push($marketplaceListed, $freMarketplace); array_push($marketplaceListed, $aifMarketplace); array_push($marketplaceListed, $opMarketplace); return [ 'data' => $marketplaceListed ]; // return [ // 'fractional-real-estate' => $freMarketplace, // 'alternative-investment-fund' => $aifMarketplace, // 'other-products' => $opMarketplace // ]; } public function nonFeaturedInvestments() { $freMarketplace['fractional-real-estate'] = MarketplaceFractionalRealEstateSeller::where(['status' => 'Approved', 'listing_status' => 'Non-Featured'])->select('id', 'property_name', 'asset_type', 'fractional_real_estate_platform', 'property_address', 'expected_selling_price', 'annual_rental_yield_earned', 'slug', 'rental_escalation', 'property_grade', 'current_market_value_of_the_property', 'id as sold_status', 'id as category', 'id as discount', 'id as bid')->get(); $aifMarketplace['alternative-investment-fund'] = MarketplaceAlternativeInvestmentFundSeller::where(['status' => 'Approved', 'listing_status' => 'Non-Featured'])->select('id', 'name_of_the_aif_fund', 'current_or_latest_nav', 'credit_rating', 'fund_category', 'type_of_fund', 'expected_sale_per_unit', 'no_of_units_you_wish_to_sell', 'slug', 'id as sold_status', 'id as discount', 'id as bid') ->get(); $opMarketplace['other-products'] = MarketplaceOtherProductsSeller::where(['status' => 'Approved', 'listing_status' => 'Non-Featured'])->select('id', 'face_value_per_unit', 'security_name', 'product_category', 'instrument_issuer', 'no_of_units_offered_for_sale', 'expected_sale_price_per_unit', 'slug', 'principal_repaid', 'id as sold_status', 'payout_frequency', 'id as discount', 'id as bid') ->get(); $marketplaceListed = []; array_push($marketplaceListed, $freMarketplace); array_push($marketplaceListed, $aifMarketplace); array_push($marketplaceListed, $opMarketplace); // return $marketplaceListed; return [ 'data' => $marketplaceListed ]; // return [ // 'fractional-real-estate' => $freMarketplace, // 'alternative-investment-fund' => $aifMarketplace, // 'other-products' => $opMarketplace // ]; } public function viewOffering($slug) { $offering = $this->viewOfferingData($slug); $invested = $offering['invested']; $totalInterestedBuyers = $offering['total-interested-buyers']; $type = $offering['type']; $ownProduct = $offering['own-product']; $logged_in = auth()->guard('users')->check() == true ? true : false; return view('Frontend.Pages.marketplace.view-offering', compact('offering', 'type', 'invested', 'totalInterestedBuyers', 'logged_in', 'ownProduct')); } public function viewOfferingData($slug) { // if(auth()->guard('users')->id()) // { // } $user_id = auth()->guard('users')->id(); $offering = array(); if (!auth()->guard('users')->check()) { $offering['invested'] = false; }; if (MarketplaceFractionalRealEstateSeller::where('slug', $slug)->exists()) { $offering['type'] = 'fractional-real-estate'; $marketFRE = MarketplaceFractionalRealEstateSeller::where('slug', $slug)->first(); // if($user_id){ $offering['own-product'] = $user_id != null ? MarketplaceSellerForm::where(['id' => $marketFRE->seller_forms_id, 'users_id' => $user_id])->exists() : ''; // } $offering['data'] = $marketFRE; $offering['invested'] = $this->checkInvestmentInterested($offering['data'], 'marketplace_fre_sellers')['interested-status']; $offering['total-interested-buyers'] = $this->checkInvestmentInterested($offering['data'], 'marketplace_fre_sellers')['total-interested-buyers']; } elseif (MarketplaceAlternativeInvestmentFundSeller::where('slug', $slug)->exists()) { $offering['type'] = 'alternative-investment-funds'; $marketAIF = MarketplaceAlternativeInvestmentFundSeller::where('slug', $slug)->first(); $offering['own-product'] = $user_id != null ? MarketplaceSellerForm::where(['id' => $marketAIF->seller_forms_id, 'users_id' => $user_id])->exists() : ''; $offering['data'] = $marketAIF; $offering['invested'] = $this->checkInvestmentInterested($offering['data'], 'marketplace_aif_sellers')['interested-status']; $offering['total-interested-buyers'] = $this->checkInvestmentInterested($offering['data'], 'marketplace_aif_sellers')['total-interested-buyers']; } elseif (MarketplaceOtherProductsSeller::where('slug', $slug)->exists()) { $offering['type'] = 'other-products'; $marketOP = MarketplaceOtherProductsSeller::where('slug', $slug)->first(); $offering['own-product'] = $user_id != null ? MarketplaceSellerForm::where(['id' => $marketOP->seller_forms_id, 'users_id' => $user_id])->exists() : ''; $offering['data'] = $marketOP; $offering['invested'] = $this->checkInvestmentInterested($offering['data'], 'marketplace_op_sellers')['interested-status']; $offering['total-interested-buyers'] = $this->checkInvestmentInterested($offering['data'], 'marketplace_op_sellers')['total-interested-buyers']; } return $offering; } public function checkInvestmentInterested($offering, $table) { $interestedStatus = false; if (auth()->guard('users')->check()) { $interestedStatus = MarketplaceBuyerForm::where(['users_id' => auth()->guard('users')->user()->id, 'table' => $table, 'associated_id' => $offering->id])->exists(); } $totalInterestedBuyers = MarketplaceBuyerForm::where(['table' => $table, 'associated_id' => $offering->id])->count(); return [ 'total-interested-buyers' => $totalInterestedBuyers . ' buyer(s) interested!', 'interested-status' => $interestedStatus ]; } public function buyerForm($slug) { $offering = $this->viewOfferingData($slug); $table = $offering['type']; $id = $offering['data']->id; $userData = array(); $user = ModelsUser::find(auth()->guard('users')->user()->id); $userData = (object)[ 'name' => $user->name ?? null, 'contact_number' => $user->contact_number ?? null, 'email' => $user->email ?? $user->email, ]; return view('Frontend.Pages.profile.market-list.buyer-form', compact('table', 'id', 'userData')); } public function buyerFormSubmit(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required', 'table' => 'required', 'name' => 'required', 'city' => 'required', 'country' => 'required', 'contact_number' => 'required|numeric|digits:10', 'email_id' => 'required', 'no_of_units_you_wish_to_buy' => 'required|numeric', 'offer_price_per_unit' => 'required|numeric', ], [ 'required' => 'The :attribute field must be required', 'numeric' => 'The :attribute field must be in digits', 'digits' => 'The :attribute field must have 10 digits', ]); $validationMessage = $this->validationError($validator); if ($validationMessage) { return response()->json(['status' => 400, 'message' => $validationMessage]); } if ($request->table == 'fractional-real-estate') { $table = 'marketplace_fre_sellers'; $productName = \DB::table($table)->where('id', $request->id)->value('property_name'); } elseif ($request->table == 'alternative-investment-funds') { $table = 'marketplace_aif_sellers'; $productName = \DB::table($table)->where('id', $request->id)->value('name_of_the_aif_fund'); } elseif ($request->table == 'other-products') { $table = 'marketplace_op_sellers'; $productName = \DB::table($table)->where('id', $request->id)->value('security_name'); } $buyerForm = MarketplaceBuyerForm::create([ 'users_id' => auth()->guard('users')->user()->id, 'associated_id' => $request->id, 'table' => $table, 'name' => $request->name, 'city' => $request->city, 'country' => $request->country, 'contact_number' => $request->contact_number, 'email_id' => $request->email_id, 'no_of_units_you_wish_to_buy' => $request->no_of_units_you_wish_to_buy, 'offer_price_per_unit' => $request->offer_price_per_unit, 'total_purchase_value' => $request->total_purchase_value, ]); if ($buyerForm) { $name = auth()->guard('users')->user()->name; $notify['message'] = "$name has submitted a buyer form for $productName!"; $type = 'Buyer Form'; $users = ModelsUser::admins()->get(); foreach ($users as $data) { $data->notify(new UserAdmin($notify, $type)); } return response()->json(['status' => 200, 'message' => "Buyer Form Submitted For Review"]); } return response()->json(['status' => 400, 'message' => "Buyer Form Could Not Be Submitted!"]); } public function buyerFormAPI($slug) { $offering = $this->viewOfferingData($slug); $table = $offering['type']; $id = $offering['data']->id; $userData = array(); $user = ModelsUser::find(request()->user()->id); $userData = (object)[ 'name' => $user->name ?? null, 'contact_number' => $user->contact_number ?? null, 'email' => $user->email ?? $user->email, ]; $data['data'] = [ 'table' => $offering['type'], 'id' => $offering['data']->id, 'user' => $userData ]; return $data; } public function buyerFormSubmitAPI(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required', 'table' => 'required', 'name' => 'required', 'city' => 'required', 'country' => 'required', 'contact_number' => 'required|numeric|digits:10', 'email_id' => 'required', 'no_of_units_you_wish_to_buy' => 'required|numeric', 'offer_price_per_unit' => 'required|numeric', ], [ 'required' => 'The :attribute field must be required', 'numeric' => 'The :attribute field must be in digits', 'digits' => 'The :attribute field must have 10 digits', ]); $validationMessage = $this->validationError($validator); if ($validationMessage) { return response()->json(['status' => 400, 'message' => $validationMessage], 400); } if ($request->table == 'fractional-real-estate') { $table = 'marketplace_fre_sellers'; $productName = \DB::table($table)->where('id', $request->id)->value('property_name'); } elseif ($request->table == 'alternative-investment-funds') { $table = 'marketplace_aif_sellers'; $productName = \DB::table($table)->where('id', $request->id)->value('name_of_the_aif_fund'); } elseif ($request->table == 'other-products') { $table = 'marketplace_op_sellers'; $productName = \DB::table($table)->where('id', $request->id)->value('security_name'); } $buyerForm = MarketplaceBuyerForm::create([ 'users_id' => $request->user()->id, 'associated_id' => $request->id, 'table' => $table, 'name' => $request->name, 'city' => $request->city, 'country' => $request->country, 'contact_number' => $request->contact_number, 'email_id' => $request->email_id, 'no_of_units_you_wish_to_buy' => $request->no_of_units_you_wish_to_buy, 'offer_price_per_unit' => $request->offer_price_per_unit, // 'total_purchase_value' => $request->total_purchase_value, 'total_purchase_value' => $request->no_of_units_you_wish_to_buy * $request->offer_price_per_unit ]); $user = ModelsUser::find($request->user()->id); if ($buyerForm) { $name = $user->name; $notify['message'] = "$name has submitted a buyer form for $productName!"; $type = 'Buyer Form'; $users = ModelsUser::admins()->get(); foreach ($users as $data) { $data->notify(new UserAdmin($notify, $type)); } return response()->json(['status' => 200, 'message' => "Buyer Form Submitted For Review"]); } return response()->json(['status' => 400, 'message' => "Buyer Form Could Not Be Submitted!"], 400); } public function viewOfferingDataAPI($slug) { $offering = array(); if (request()->user()) { $offering['invested'] = false; }; if (MarketplaceFractionalRealEstateSeller::where('slug', $slug)->exists()) { $offering['type'] = 'fractional-real-estate'; $marketFRE = MarketplaceFractionalRealEstateSeller::where('slug', $slug)->first(); $offering['own-product'] = MarketplaceSellerForm::where(['id' => $marketFRE->seller_forms_id, 'users_id' => auth('sanctum')->id()])->exists(); $offering['data'] = $marketFRE; $offering['invested'] = $this->checkInvestmentInterestedAPI($offering['data'], 'marketplace_fre_sellers')['interested-status']; $offering['total-interested-buyers'] = $this->checkInvestmentInterestedAPI($offering['data'], 'marketplace_fre_sellers')['total-interested-buyers']; } elseif (MarketplaceAlternativeInvestmentFundSeller::where('slug', $slug)->exists()) { $offering['type'] = 'alternative-investment-funds'; $marketAIF = MarketplaceAlternativeInvestmentFundSeller::where('slug', $slug)->first(); $offering['own-product'] = MarketplaceSellerForm::where(['id' => $marketAIF->seller_forms_id, 'users_id' => auth('sanctum')->id()])->exists(); $offering['data'] = $marketAIF; $offering['invested'] = $this->checkInvestmentInterestedAPI($offering['data'], 'marketplace_aif_sellers')['interested-status']; $offering['total-interested-buyers'] = $this->checkInvestmentInterestedAPI($offering['data'], 'marketplace_aif_sellers')['total-interested-buyers']; } elseif (MarketplaceOtherProductsSeller::where('slug', $slug)->exists()) { $offering['type'] = 'other-products'; $marketOP = MarketplaceOtherProductsSeller::where('slug', $slug)->first(); $offering['own-product'] = MarketplaceSellerForm::where(['id' => $marketOP->seller_forms_id, 'users_id' => auth('sanctum')->id()])->exists(); $offering['data'] = $marketOP; $offering['invested'] = $this->checkInvestmentInterestedAPI($offering['data'], 'marketplace_op_sellers')['interested-status']; $offering['total-interested-buyers'] = $this->checkInvestmentInterestedAPI($offering['data'], 'marketplace_op_sellers')['total-interested-buyers']; } return $offering; } public function checkInvestmentInterestedAPI($offering, $table) { $interestedStatus = false; if (request()->user()) { $interestedStatus = MarketplaceBuyerForm::where(['users_id' => request()->user()->id, 'table' => $table, 'associated_id' => $offering->id])->exists(); } $totalInterestedBuyers = MarketplaceBuyerForm::where(['table' => $table, 'associated_id' => $offering->id])->count(); return [ 'total-interested-buyers' => $totalInterestedBuyers . ' buyer(s) interested!', 'interested-status' => $interestedStatus ]; } function IND_money_format($number) { $decimal = (string)($number - floor($number)); $money = floor($number); $length = strlen($money); $delimiter = ''; $money = strrev($money); for ($i = 0; $i < $length; $i++) { if (($i == 3 || ($i > 3 && ($i - 1) % 2 == 0)) && $i != $length) { $delimiter .= ','; } $delimiter .= $money[$i]; } $result = strrev($delimiter); $decimal = preg_replace("/0\./i", ".", $decimal); $decimal = substr($decimal, 0, 3); if ($decimal != '0') { $result = $result . $decimal; } return '₹ ' . $result; } public function validationError($validator) { if ($validator->fails()) { $errors = $validator->errors(); $messages = ''; foreach ($errors->all() as $message) { $messages .= $message . '
'; } return $messages; } } }