Файловый менеджер - Редактировать - /home/clickysoft/public_html/calvary-p2.clickysoft.net/app/Http/Controllers/Front/LunchProgramController.php
Назад
<?php namespace App\Http\Controllers\Front; use App\Http\Controllers\Controller; use App\Http\Requests\Front\CardVerificationRequest; use App\Http\Requests\Front\UserAddSiblingRequest; use App\Mail\OrderPlacedForAdmin; use App\Mail\OrderPlacedForUser; use App\Models\Child; use App\Models\Coupon; use App\Models\Grade; use App\Models\HotLunch; use App\Models\HotLunchMenu; use App\Models\HotLunchMenuGrades; use App\Models\LunchOrder; use App\Models\LunchOrderChild; use App\Models\LunchOrderChildItem; use App\Models\LunchPaymentLog; use App\Models\School; use App\Models\ShirtSize; use App\Models\SiteSetting; use App\Models\VendorItem; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Session; class LunchProgramController extends Controller { public function index() { $now = Carbon::now()->format('Y-m-d'); $hotLunch = HotLunch::where('reg_starts', '<=', $now) ->where('reg_ends', '>=', $now) ->where('status', 1) ->first(); $schools = School::where('id', '!=', 1) ->with([ 'grades' => function ($query) { $query->where('status', 1); } ])->get(); $userCart = Session::get('user_cart'); if (!empty($hotLunch) && empty($userCart)) { $annual_due_check = LunchOrder::where('user_id', \auth()->id())->whereYear('created_at', '=', now()->format('Y'))->first(); Session::put('user_cart', [ 'hot_lunch_id' => $hotLunch->id, 'hot_lunch_half' => $hotLunch->lunch_half, 'annual_check' => (bool) $annual_due_check, ]); } $children = \auth()->user()->children ?? []; return view('front.lunch-program.index', compact('hotLunch', 'schools', 'children')); } public function addSibling(UserAddSiblingRequest $request) { $grade = Grade::where('title', $request->grade)->first(); $school = School::findOrFail($grade->school_id); $child = Child::find($request->child_id); $userCart = Session::get('user_cart'); $hot_lunch_menu_ids = HotLunchMenu::where('hot_lunch_id', $userCart['hot_lunch_id'])->pluck('id')->toArray(); $is_lunch_available = HotLunchMenuGrades::whereIn('hot_lunch_menu_id', $hot_lunch_menu_ids)->where('grade_id', $grade->id)->exists(); $response_data = [ 'success' => false, 'ps2' => false, 'url_name' => null, ]; $generateUrlName = $request->child_id; if ($grade->id == 1 || $is_lunch_available) { if (!isset($userCart['siblings'][$generateUrlName])) { $userCart['siblings'][$generateUrlName]['url_name'] = $generateUrlName; $userCart['siblings'][$generateUrlName]['child_id'] = $request->child_id; $userCart['siblings'][$generateUrlName]['full_name'] = $child->full_name; $userCart['siblings'][$generateUrlName]['teacher_name'] = $child->teacher?->full_name; $userCart['siblings'][$generateUrlName]['school_id'] = $school->id; $userCart['siblings'][$generateUrlName]['school_title'] = $school->title; $userCart['siblings'][$generateUrlName]['grade_id'] = $grade->id; $userCart['siblings'][$generateUrlName]['grade_title'] = $grade->title; $userCart['siblings'][$generateUrlName]['hot_lunch_id'] = (int) $userCart['hot_lunch_id']; $userCart['siblings'][$generateUrlName]['items'] = []; Session::put('user_cart', $userCart); } $response_data = [ 'success' => true, 'ps2' => $grade->id == 1, 'url_name' => $generateUrlName, ]; } return response()->json($response_data); } public function deleteSibling($siblingName, $currentSiblingName = null) { $userCart = Session::get('user_cart'); unset($userCart['siblings'][$siblingName]); Session::put('user_cart', $userCart); if (isset($userCart['siblings'][$currentSiblingName]) && !empty($currentSiblingName)) { return redirect()->route('lunch.items.selection', $currentSiblingName); } /*foreach ($userCart['siblings'] as $otherSibling){ return redirect()->route('lunch.items.selection', $otherSibling['url_name']); }*/ if (request()->has('summary') && count($userCart['siblings']) > 0) { return redirect()->route('lunch.cart.summary', array_key_first($userCart['siblings'])); } else { return redirect()->route('lunch.program'); } } public function lunchItemSelection($siblingName) { $userCart = Session::get('user_cart'); $sibling = $userCart['siblings'][$siblingName]; $otherSiblings = []; foreach ($userCart['siblings'] as $key => $otherSibling) { if ($siblingName !== $key) { $otherSiblings[] = $otherSibling; } } $hotLunchMenu = HotLunchMenu::where('hot_lunch_id', (int) $userCart['hot_lunch_id']) ->whereHas('grades', function ($query) use ($sibling) { $query->where('grade_id', $sibling['grade_id']); })->with([ 'vendor', 'items' => function ($query) { $query->orderBy('sort'); // Sort items by 'sort' column }, 'items.vendorItem' ]) ->get(); return view('front.lunch-program.lunch-items', compact('siblingName', 'sibling', 'otherSiblings', 'hotLunchMenu')); } public function addToItems($siblingName) { $userCart = Session::get('user_cart'); if ($userCart['siblings'][$siblingName]['school_title'] !== "Pre School") { $comboMenu = []; foreach (request()->all() as $item) { if (!isset($item['id'])) { return response()->json(['msg' => 'Something went wrong.'], 422); } $explodedTitle = explode('-', $item['id']); if (trim(end($explodedTitle)) === "A") { $comboMenu[] = $item; } elseif (trim(end($explodedTitle)) === "B") { $comboMenu[] = $item; } } $checkCollection = []; foreach ($comboMenu as $menu) { $explodedTitle = explode('-', $menu['id']); if (trim(end($explodedTitle)) === "A") { $key = trim(str_replace('- A', '', $menu['id'])); if (isset($checkCollection[$key])) { $checkCollection[$key] = 2; } else { $checkCollection[$key] = 1; } } elseif (trim(end($explodedTitle)) === "B") { $key = trim(str_replace('- B', '', $menu['id'])); if (isset($checkCollection[$key])) { $checkCollection[$key] = 2; } else { $checkCollection[$key] = 1; } } } foreach ($checkCollection as $count) { if ($count < 2) { return response()->json(['msg' => 'You MUST order both an (A) & (B) option. They can be different things or the same thing.'], 422); } } } $userCart['siblings'][$siblingName]['items'] = request()->all(); Session::put('user_cart', $userCart); return response()->json(['route' => route('display.selected.items', $siblingName)]); } public function displaySelectedItem($siblingName) { $userCart = Session::get('user_cart'); if ($userCart['hot_lunch_half'] == 'second_half' && empty(count($userCart['siblings'][$siblingName]['items']))) { return redirect()->route('lunch.items.selection', $siblingName); } $sibling = $userCart['siblings'][$siblingName]; return view('front.lunch-program.display-selected-item', compact('siblingName', 'sibling')); } public function lunchCartSummary($siblingName) { $userCart = Session::get('user_cart'); if ($userCart['hot_lunch_half'] == 'second_half') { foreach ($userCart['siblings'] as $data) { if (empty(count($data['items']))) { return redirect()->route('lunch.items.selection', $data['url_name']); } } } $siblings = $userCart['siblings']; $siteSettings = SiteSetting::first(); $shirtSizes = ShirtSize::all(); return view('front.lunch-program.cart-summary', compact('siblingName', 'siblings', 'siteSettings', 'shirtSizes')); } public function lunchCartSummaryData(Request $request, $siblingName) { $userCart = Session::get('user_cart'); $userId = Auth::id(); $hotLunch = HotLunch::where('id', $userCart['hot_lunch_id'])->where('status', 1)->first(); $siteSettings = SiteSetting::first(); if (empty($hotLunch) || empty($siteSettings)) { return response()->json(['msg' => 'Something went wrong.'], 422); } $totalPriceForOrder = $annual_graduation_contribution = $community_service = 0; if ($hotLunch->lunch_half == 'first_half') { $userCart['school_directory_quantity'] = (int) $request->school_directory_quantity; $userCart['school_directory_price'] = $siteSettings->school_directory * $userCart['school_directory_quantity']; $annual_dues = $userCart['annual_check'] ? 0 : $siteSettings->annual_dues; } else { $userCart['school_directory_quantity'] = 0; $userCart['school_directory_price'] = 0; $annual_dues = 0; } foreach ($userCart['siblings'] as $key => $sibling) { $totalPriceForChild = 0; if (count($sibling['items']) > 0) { foreach ($sibling['items'] as $makeItemKey => $makeItemData) { $menu = HotLunchMenu::where('id', $makeItemData['menuId'])->first(); $vendorItem = VendorItem::where('id', $makeItemData['itemId'])->first(); if (empty($menu) || empty($vendorItem)) { return response()->json(['msg' => 'Something went wrong.'], 422); } $userCart['siblings'][$key]['items'][$makeItemKey]['user_id'] = $userId; $userCart['siblings'][$key]['items'][$makeItemKey]['vendor_id'] = $menu->vendor_id; $userCart['siblings'][$key]['items'][$makeItemKey]['hot_lunch_id'] = $hotLunch->id; $userCart['siblings'][$key]['items'][$makeItemKey]['item_id'] = $vendorItem->id; $userCart['siblings'][$key]['items'][$makeItemKey]['price'] = $vendorItem->price; $totalPriceForChild += $vendorItem->price; } } if ($hotLunch->lunch_half == 'first_half') { $userCart['siblings'][$key]['annual_graduation_contribution'] = $request->other_data[$key]['contribution_amount'] ?? 0; $userCart['siblings'][$key]['community_service'] = $siteSettings->class_fund ?? 0; $userCart['siblings'][$key]['shirt_size'] = $request->other_data[$key]['t_type'] ?? 0; $annual_graduation_contribution += $userCart['siblings'][$key]['annual_graduation_contribution']; $community_service += $userCart['siblings'][$key]['community_service']; $totalPriceForChild += $userCart['siblings'][$key]['annual_graduation_contribution'] + $userCart['siblings'][$key]['community_service']; } else { $userCart['siblings'][$key]['annual_graduation_contribution'] = 0; $userCart['siblings'][$key]['community_service'] = 0; $userCart['siblings'][$key]['shirt_size'] = null; } $userCart['siblings'][$key]['user_id'] = $userId; $userCart['siblings'][$key]['school_id'] = $sibling['school_id']; $userCart['siblings'][$key]['hot_lunch_id'] = $hotLunch->id; $userCart['siblings'][$key]['grade_id'] = $sibling['grade_id']; $userCart['siblings'][$key]['full_name'] = $sibling['full_name']; $userCart['siblings'][$key]['total_amount'] = $totalPriceForChild; $totalPriceForOrder += $totalPriceForChild; } if ($hotLunch->late_fee) { $userCart['order']['late_fee'] = $siteSettings->late_fee; $totalPriceForOrder += $siteSettings->late_fee; } $totalPriceForOrder += $userCart['school_directory_price'] + $annual_dues; $userCart['order']['user_id'] = $userId; $userCart['order']['hot_lunch_id'] = $hotLunch->id; $userCart['order']['hot_lunch_title'] = $hotLunch->title; $userCart['order']['hot_lunch_reg_starts'] = $hotLunch->reg_starts; $userCart['order']['hot_lunch_reg_ends'] = $hotLunch->reg_ends; $userCart['order']['is_paid_annual_due'] = 1; $userCart['order']['annual_due'] = $annual_dues; $userCart['order']['school_directory_quantity'] = $userCart['school_directory_quantity']; $userCart['order']['school_directory_price'] = $userCart['school_directory_price']; $userCart['order']['annual_graduation_contribution'] = $annual_graduation_contribution; $userCart['order']['community_service'] = $community_service; $userCart['order']['total_price'] = $totalPriceForOrder; $userCart['order']['final_price'] = $totalPriceForOrder - ($userCart['order']['discount_amount'] ?? 0); Session::put('user_cart', $userCart); return response()->json(['route' => route('lunch.checkout', $siblingName)]); } public function checkout($siblingName) { $userCart = Session::get('user_cart'); if ($userCart['hot_lunch_half'] == 'second_half') { //If it is second lunch then lunch items are required foreach ($userCart['siblings'] as $data) { if (empty(count($data['items']))) { return redirect()->route('lunch.items.selection', $data['url_name']); } } } return view('front.lunch-program.checkout', compact('userCart', 'siblingName')); } public function checkoutData($siblingName, CardVerificationRequest $request) { $userCart = Session::get('user_cart'); $input = $request->input(); $input['amount'] = number_format($userCart['order']['final_price'], 2, '.', ''); $input['first_name'] = auth()->user()->first_name; if (auth()->user()->last_name) { $input['last_name'] = auth()->user()->last_name; } $response = processAuthorizeDotNetPayment($input); $message_text = "Transaction failed. Please try again later."; $msg_type = "error_msg"; if ($response != null) { // Check to see if the API request was successfully received and acted upon if ($response->getMessages()->getResultCode() == "Ok") { $t_response = $response->getTransactionResponse(); if ($t_response != null && $t_response->getMessages() != null) { $order = LunchOrder::create([ 'user_id' => Auth::id(), 'hot_lunch_id' => $userCart['order']['hot_lunch_id'], 'coupon_id' => $userCart['order']['coupon_id'] ?? 0, 'hot_lunch_title' => $userCart['order']['hot_lunch_title'], 'hot_lunch_reg_starts' => $userCart['order']['hot_lunch_reg_starts'], 'hot_lunch_reg_ends' => $userCart['order']['hot_lunch_reg_ends'], 'discount' => $userCart['order']['discount_amount'] ?? 0, 'total_price' => $userCart['order']['total_price'], 'is_paid_annual_due' => 1, 'annual_due' => $userCart['order']['annual_due'], 'school_directory_quantity' => $userCart['school_directory_quantity'], 'school_directory_price' => $userCart['school_directory_price'], 'annual_graduation_contribution' => $userCart['order']['annual_graduation_contribution'], 'community_service' => $userCart['order']['community_service'], 'late_fee' => $userCart['order']['late_fee'] ?? 0, 'final_price' => $userCart['order']['final_price'] ]); foreach ($userCart['siblings'] as $sibling) { $child = LunchOrderChild::create([ 'user_id' => $sibling['user_id'], 'child_id' => $sibling['child_id'], 'order_id' => $order->id, 'school_id' => $sibling['school_id'], 't_type' => $sibling['shirt_size'] ?? null, 'hot_lunch_id' => $sibling['hot_lunch_id'], 'grade_id' => $sibling['grade_id'], 'full_name' => $sibling['full_name'], 'teacher_name' => $sibling['teacher_name'], 'annual_graduation_contribution' => $sibling['annual_graduation_contribution'], 'community_service' => $sibling['community_service'], 'total_amount' => $sibling['total_amount'], ]); foreach ($sibling['items'] as $item) { LunchOrderChildItem::create([ 'user_id' => $sibling['user_id'], 'order_id' => $order->id, 'menu_id' => $item['menuId'], 'child_id' => $child->id, 'vendor_id' => $item['vendor_id'], 'hot_lunch_id' => $item['hot_lunch_id'], 'item_id' => $item['item_id'], 'price' => $item['price'] ]); } } LunchPaymentLog::create([ 'user_id' => Auth::id(), 'order_id' => $order->id, 'name_on_card' => Auth::user()->full_name, 'response_code' => $t_response->getResponseCode(), 'transaction_id' => $t_response->getTransId(), 'auth_id' => $t_response->getAuthCode(), 'message_code' => $t_response->getMessages()[0]->getCode() ]); $site_setting = SiteSetting::first(); Mail::to(Auth::user()->email)->later(now()->addSeconds(5), (new OrderPlacedForUser($order))); Mail::to($site_setting->admin_email)->later(now()->addSeconds(5), (new OrderPlacedForAdmin($order))); Session::put('user_cart', []); return redirect()->route('orders.hot-lunch')->with('success_msg', 'Your order has been placed successfully. Kindly check your Junk/Spam folder for order information/receipt'); } else { $message_text = 'There were some issue with the payment. Please try again later.'; if ($t_response->getErrors() != null) { $message_text = $t_response->getErrors()[0]->getErrorText(); } } } } else { $message_text = 'Unable to process payment. Please try again.'; } return redirect()->back()->withInput()->with($msg_type, $message_text); } public function validateCoupon() { $userCart = Session::get('user_cart'); if (!empty(request()->coupon)) { $coupon = Coupon::where('code', request()->coupon) ->where('status', 1) ->where('applicable_to', 'Hot Lunch') ->first(); if (!$coupon) { return response()->json(['msg' => 'Coupon is invalid.'], 422); } if (!empty($coupon->expiry_date) && $coupon->expiry_date < Carbon::now()->format('Y-m-d')) { return response()->json(['msg' => 'Coupon has expired.'], 422); } else if (!empty($coupon->number_of_usage) && $coupon->number_of_usage >= $coupon->redemption_count) { return response()->json(['msg' => 'Coupon limit reached.'], 422); } else { if ($coupon->discount_type === "Fixed") { $discountAmount = $coupon->discount_value; } else { $discountAmount = ((($coupon->discount_value / 100) * $userCart['order']['final_price'])); } $finalAmount = ($userCart['order']['total_price'] - $discountAmount); $userCart['order']['discount_amount'] = $discountAmount; $userCart['order']['final_price'] = $finalAmount; $userCart['order']['coupon_id'] = $coupon->id; $userCart['order']['coupon_code'] = $coupon->code; Session::put('user_cart', $userCart); return response()->json(['msg' => 'valid.', 'discount_amount' => $userCart['order']['discount_amount'], 'final_price' => $userCart['order']['final_price']]); } } return response()->json(['msg' => 'Coupon is invalid.'], 422); } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.29 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка