purityselect/app/Http/Controllers/OrderController.php
2024-10-25 01:05:27 +05:00

249 lines
8.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Classes\Constant;
use App\Models\Appointment;
use App\Models\Cart;
use App\Models\Item;
use App\Models\ItemHistory;
use App\Models\PatientNote;
use App\Models\PatientPrescription;
use App\Models\Payment;
use App\Models\Prescription;
use Carbon\Carbon;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use PhpParser\Node\Stmt\Const_;
class OrderController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
protected $user_id;
protected $url;
public function __construct(UrlGenerator $url)
{
$this->middleware('auth');
$this->user_id = Auth::guard('patient')->user()->id;
$this->url = $url;
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
public function orderList(Request $request)
{
$fromDate = $request->get('from_date');
$toDate = $request->get('to_date');
$orderList = Cart::where('carts.patient_id', $this->user_id);
if ($fromDate != "") {
$from_date = Carbon::createFromFormat('m-d-Y', $fromDate)->format('Y-m-d');
$orderList->where('created_at', ">=", $from_date . " 00:00:00");
}
if ($toDate != "") {
$to_date = Carbon::createFromFormat('m-d-Y', $toDate)->format('Y-m-d');
$orderList->where('created_at', "<=", $to_date . " 23:59:59");
}
$orderListData = $orderList->get();
$totalPrice = 0;
$totalShippingCost = 0;
foreach ($orderListData as $order) {
$totalPrice = 0;
$total_products = 0;
$quantity = [];
$totalShippingCost = 0;
$order->order_total_amount = $totalPrice;
$order->order_total_shipping = $totalShippingCost;
$items = Item::leftJoin('plans_v1', 'items.plans_id', 'plans_v1.id')
->where('cart_id', $order->id)
->get();
//$order->appointment_status = Appointment::where('id', $order->appointment_id)->first()->status;
$orderItems = [];
foreach ($items as $item) {
array_push($orderItems, $item->plansV1);
$totalShippingCost += $item->shipping_cost;
$item->total_price = $item->quantity * $item->price;
$totalPrice += $item->total_price;
$order->order_total_amount = $totalPrice;
$order->order_total_shipping = $totalShippingCost;
$item->plansV1->qty = $item->quantity;
}
$order->total_items = $total_products;
$order->order_items = $orderItems;
}
return response()
->json([
'order_data' => $orderListData
]);
}
public function orderDetails($id)
{
$orderItems = $this->getOrderItems($id);
$orderDetails = Cart::find($id);
$items = Item::where('cart_id', $orderDetails->id)->get();
$appointments = Appointment::select(
'appointments.*',
'telemed_pros.name as provider_name',
'telemed_pros.email as provider_email',
'telemed_pros.phone_number as provider_phone',
'carts.total_amount',
'carts.shipping_amount'
)
->leftJoin('telemed_pros', 'telemed_pros.id', 'appointments.telemed_pros_id')
->leftJoin('carts', 'carts.appointment_id', 'appointments.id')
->where('appointments.id', $orderDetails->appointment_id)
->first();
$prescription = PatientPrescription::select(
'patient_prescription.direction_quantity',
'patient_prescription.refill_quantity',
'patient_prescription.dosage',
'patient_prescription.status',
'patient_prescription.direction_one',
'patient_prescription.direction_two',
'patient_prescription.dont_substitute',
'patient_prescription.comments',
'patient_prescription.brand',
'patient_prescription.from',
'patient_prescription.quantity',
'patient_prescription.created_at as prescription_date',
'prescriptions.name as prescription_name',
'patient_prescription.prescription_id',
'telemed_pros.name as provide_name',
'telemed_pros.id as provider_id'
)
->where("appointment_id", $orderDetails->appointment_id)
->leftJoin('appointments', 'appointments.id', 'patient_prescription.appointment_id')
->leftJoin('prescriptions', 'prescriptions.id', 'patient_prescription.prescription_id')
->leftJoin('telemed_pros', 'appointments.telemed_pros_id', 'telemed_pros.id')
->get();
$patientNotes = PatientNote::where("appointment_id", $orderDetails->appointment_id)->get();
if ($appointments)
$appointments->provider_id = $appointments->telemed_pros_id;
$patient = $orderDetails->patient;
$patient->profile_picture = $this->url->to("storage/profile_pictures/" . $patient->profile_picture);
return response()
->json([
'order_details' => $orderDetails,
'order_items' => $orderItems,
'patient_details' => $patient,
'appointment_details' => $appointments,
'items_activity' => $this->getShippingActivity($id),
'appointment_notes' => $patientNotes,
'prescription' => $prescription
]);
}
public function getShippingActivity($id)
{
$itemsHistory = ItemHistory::select('items_history.*', 'plans_v1.title as item_name')
->where('items_history.cart_id', $id)
->leftJoin('items', 'items.id', 'items_history.item_id')
->leftJoin('plans_v1', 'plans_v1.id', 'items.plans_id')
->get();
return $itemsHistory;
}
public function getPatientShippingActivity()
{
$orderDetails = Cart::where('patient_id', $this->user_id)->orderBy('id', 'Desc')->first();
$itemsHistory = ItemHistory::select('items_history.*', 'plans_v1.title as item_name')
->where('items_history.cart_id', $orderDetails->id)
->leftJoin('items', 'items.id', 'items_history.item_id')
->leftJoin('plans_v1', 'plans_v1.id', 'items.plans_id')
->get();
return response()
->json([
'item_history' => $itemsHistory
]);
}
public function getOrderItems($id)
{
$items = Item::leftJoin('plans_v1', 'items.plans_id', 'plans_v1.id')
->where('cart_id', $id)
->get();
$totalPrice = 0;
$totalShippingCost = 0;
$total_products = 0;
foreach ($items as $item) {
$totalShippingCost += $item->shipping_cost;
$item->total_price = $item->quantity * $item->price;
$totalPrice += $item->total_price;
$total_products += $item->quantity;
$item->image_url = $this->url->to("product/" . $item->image_url);
}
return [
'items' => $items,
'total_amount' => $totalPrice,
'total_shipping_cost' => $totalShippingCost,
'total_products' => $total_products,
'total' => $totalPrice + $totalShippingCost
];
}
public function subscriptionList()
{
$orderDetails = Cart::leftJoin('items', 'carts.id', 'items.cart_id')
->leftJoin('plans_v1', 'items.plans_id', 'plans_v1.id')
->where('patient_id', $this->user_id)
->where('plans_v1.is_prescription_required', '1')
->get();
foreach ($orderDetails as $details) {
$details->image_url = $this->url->to("product/" . $details->image_url);
}
return response()
->json([
'subscriptions' => $orderDetails
]);
}
public function getSubscriptionDetails($id)
{
$orderDetails = Cart::find($id);
$items = Item::leftJoin('plans_v1', 'items.plans_id', 'plans_v1.id')
->where('plans_v1.is_prescription_required', '1')
->get();
$appointments = Appointment::find($orderDetails->appointment_id);
$patient = $orderDetails->patient;
$patient->profile_picture = $this->url->to("storage/profile_pictures/" . $patient->profile_picture);
return response()
->json([
'order_details' => $orderDetails,
'order_items' => $items,
'patient_details' => $patient,
'appointment_details' => $appointments
]);
}
}