
PK 
<?php
namespace App\Http\Controllers;
use App\Mail\OrderPlaced;
use Illuminate\Support\Facades\Mail;
use Auth;
use Illuminate\Http\Request;
use App\Models\Cart;
use App\Models\Order;
use App\Models\Shipping;
use App\User;
use PDF;
use Notification;
use Helper;
use Illuminate\Support\Str;
use App\Notifications\StatusNotification;
class OrderController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$orders=Order::orderBy('id','DESC')->paginate(10);
return view('backend.order.index')->with('orders',$orders);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$validatedData = $this->validate($request, [
'first_name' => 'string|required',
'last_name' => 'string|required',
'address1' => 'string|required',
'address2' => 'string|nullable',
'coupon' => 'nullable|numeric',
'phone' => 'numeric|required',
'post_code' => 'string|nullable',
'email' => 'string|required',
'country' => 'string|required' // Added country validation
]);
if (!Cart::where('user_id', auth()->id())->whereNull('order_id')->exists()) {
return back()->with('error', 'Cart is Empty!');
}
$cartTotal = Helper::totalCartPrice();
$shippingCharge = ($cartTotal < 500) ? 100 : 0;
$couponValue = session('coupon')['value'] ?? 0;
$totalAmount = $cartTotal + $shippingCharge - $couponValue;
$orderData = [
'order_number' => 'ORD-' . strtoupper(Str::random(10)),
'user_id' => auth()->id(),
'shipping_id' => null,
'shipping_charge' => $shippingCharge, // Make sure this is included
'sub_total' => $cartTotal,
'quantity' => Helper::cartCount(),
'coupon' => $couponValue,
'total_amount' => $totalAmount,
'status' => 'new',
'payment_method' => $request->payment_method == 'paypal' ? 'paypal' : 'cod',
'payment_status' => $request->payment_method == 'paypal' ? 'paid' : 'Unpaid',
'first_name' => $validatedData['first_name'],
'last_name' => $validatedData['last_name'],
'email' => $validatedData['email'],
'phone' => $validatedData['phone'],
'country' => $validatedData['country'], // Added country
'address1' => $validatedData['address1'],
'address2' => $validatedData['address2'] ?? null,
'post_code' => $validatedData['post_code'] ?? null,
];
$order = Order::create($orderData);
Cart::where('user_id', auth()->id())
->whereNull('order_id')
->update(['order_id' => $order->id]);
// Admin notification
if ($admin = User::where('role', 'admin')->first()) {
$admin->notify(new StatusNotification([
'title' => 'New order created',
'actionURL' => route('order.show', $order->id),
'fas' => 'fa-file-alt'
]));
}
if ($request->payment_method == 'paypal') {
return redirect()->route('payment')->with(['id' => $order->id]);
}
session()->forget(['cart', 'coupon']);
$adminEmail = 'indusinfotek.vinay@gmail.com'; // Replace with your admin email
if (Auth::check()) {
$user = Auth::user();
$email = $user->email;
// Send email with the Order model instance
Mail::to($validatedData['email'])
->bcc($adminEmail)
->send(new OrderPlaced($order));
}
return redirect()->route('home')->with('success', 'Order placed successfully!');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$order=Order::find($id);
// return $order;
return view('backend.order.show')->with('order',$order);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$order=Order::find($id);
return view('backend.order.edit')->with('order',$order);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$order=Order::find($id);
$this->validate($request,[
'status'=>'required|in:new,process,delivered,cancel'
]);
$data=$request->all();
// return $request->status;
if($request->status=='delivered'){
foreach($order->cart as $cart){
$product=$cart->product;
// return $product;
$product->stock -=$cart->quantity;
$product->save();
}
}
$status=$order->fill($data)->save();
if($status){
request()->session()->flash('success','Successfully updated order');
}
else{
request()->session()->flash('error','Error while updating order');
}
return redirect()->route('order.index');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$order=Order::find($id);
if($order){
$status=$order->delete();
if($status){
request()->session()->flash('success','Order Successfully deleted');
}
else{
request()->session()->flash('error','Order can not deleted');
}
return redirect()->route('order.index');
}
else{
request()->session()->flash('error','Order can not found');
return redirect()->back();
}
}
public function orderTrack(){
return view('frontend.pages.order-track');
}
public function productTrackOrder(Request $request){
// return $request->all();
$order=Order::where('user_id',auth()->user()->id)->where('order_number',$request->order_number)->first();
if($order){
if($order->status=="new"){
request()->session()->flash('success','Your order has been placed. please wait.');
return redirect()->route('home');
}
elseif($order->status=="process"){
request()->session()->flash('success','Your order is under processing please wait.');
return redirect()->route('home');
}
elseif($order->status=="delivered"){
request()->session()->flash('success','Your order is successfully delivered.');
return redirect()->route('home');
}
else{
request()->session()->flash('error','Your order canceled. please try again');
return redirect()->route('home');
}
}
else{
request()->session()->flash('error','Invalid order numer please try again');
return back();
}
}
// PDF generate
public function pdf(Request $request){
$order=Order::getAllOrder($request->id);
// return $order;
$file_name=$order->order_number.'-'.$order->first_name.'.pdf';
// return $file_name;
$pdf=PDF::loadview('backend.order.pdf',compact('order'));
return $pdf->download($file_name);
}
// Income chart
public function incomeChart(Request $request){
$year=\Carbon\Carbon::now()->year;
// dd($year);
$items=Order::with(['cart_info'])->whereYear('created_at',$year)->where('status','delivered')->get()
->groupBy(function($d){
return \Carbon\Carbon::parse($d->created_at)->format('m');
});
// dd($items);
$result=[];
foreach($items as $month=>$item_collections){
foreach($item_collections as $item){
$amount=$item->cart_info->sum('amount');
// dd($amount);
$m=intval($month);
// return $m;
isset($result[$m]) ? $result[$m] += $amount :$result[$m]=$amount;
}
}
$data=[];
for($i=1; $i <=12; $i++){
$monthName=date('F', mktime(0,0,0,$i,1));
$data[$monthName] = (!empty($result[$i]))? number_format((float)($result[$i]), 2, '.', '') : 0.0;
}
return $data;
}
}


PK 99