403Webshell
Server IP : 139.59.63.204  /  Your IP : 216.73.216.39
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux ubuntu-s-1vcpu-1gb-blr1-01 6.8.0-110-generic #110-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 19 15:09:20 UTC 2026 x86_64
User : root ( 0)
PHP Version : 8.3.6
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/html/app/Http/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/app/Http/Controllers/PurchaseOrderController.php
<?php

namespace App\Http\Controllers;

use App\Models\Invoice;
use App\Models\Product;
use App\Models\Customer;
use App\Models\LineItem;
use App\Exports\InvoiceExport;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Arr;
use Barryvdh\DomPDF\Facade\Pdf;
use Auth;
use Mail;
use DataTables;
use App\Helpers\Helper;
use App\Mail\SendInvoice;

class PurchaseOrderController extends Controller
{
    private $TYPE = 3;
   // use CommonTrait;
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {     
       
        if ($request->ajax()) {

            $cust_ids = Arr::flatten(Auth::user()->customer->toArray());  
            $invoices =    Invoice::with('lineItem','customers')->whereIn('customer_id',$cust_ids)->where('type',$this->TYPE);//->orderBy('invoices.id','desc');
         
            return DataTables::of($invoices)
            ->addIndexColumn()
            ->addColumn('customer_name', function ($invoice) {
               return  $invoice->customers->firstname.' '.$invoice->customers->lastname;
                
            })
            ->addColumn('p_name', function ($invoice) {
                $arr =[];
                foreach($invoice->lineItem as $item)
                {
                    $arr[] = $item->product->name;
                }
               return implode(', ', $arr);
            })
            ->addColumn('date', function($invoice){
                return $invoice->created_at->format('M d Y');
            })
            ->addColumn('action', function($invoice){
                     $id = $invoice->id;
                    $btn = ' <a  href="'.route('purchase_order.view',$id).'" ><i class="fas fa-eye text-success fs-2"></i></a>
                    &nbsp; | &nbsp;<a href="';                  
                    $btn .= route('purchase_order.edit',$id);
                    $btn .= '"><i class="fas fa-edit text-info fs-2"></i></a> &nbsp; | &nbsp;<a href="javascript:void(0)" data-bs-toggle="modal" data-bs-target="#delete" id="deleteBtn" onclick="setValue(';
                    $btn .= $id;
                    $status = $invoice->email_status;
                    $class=($status == 0)?'text-danger':'text-success';
                    $msg=($status == 0)?'Send Email':'Email Sent';
                    $btn .=')"><i class="fas fa-trash text-danger fs-2"></i></a>&nbsp; |&nbsp; <a href="'. route('purchase_order.pdfview',$id).'"> PDF</a>&nbsp;|&nbsp; <a class="'.$class.'" href="'. route('purchase_order.sendemail',$id).'" title="'.$msg.'"> Email</a>';
                  
                    return $btn;
                })
            ->rawColumns(['p_name','action'])
            ->make(true);
            
          }
        
        
        return view('purchase_order.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $products = Product::where(['status'=>1,'posted_by'=>auth()->user()->id])->where('qty','>',0)->orderBy('name')->get();
        $customers = Customer::where('user_id',auth()->user()->id)->orderBy('firstname')->get();
        // $count = Invoice::where(['user_id'=>auth()->user()->id,'type'=>$this->TYPE])->count("*");
        // $inv_id = 'PUO0'.$count+1;
        $inv_id =  Helper::getInvoiceId('PUO0',$this->TYPE,auth()->user()->id);
        return view('purchase_order.create',compact('products','customers','inv_id'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
       
      //  dd($request->all(),$request->line["product"][0]);
        $this->validate($request,[
            'customer' => 'required|numeric',
            'line.product' => 'required|array',            
            'line.product.*' => 'required',            
            'billing_address' => 'string|max:255',            
            'billing_city' => 'string|max:255',
            'billing_state' => 'string|max:255',
            'billing_country' => 'string|max:255',
            'billing_pin' => 'digits:6',
            'shipping_address' => 'string|max:255',            
            'shipping_city' => 'string|max:255',
            'shipping_state' => 'string|max:255',
            'shipping_country' => 'string|max:255',
            'shipping_pin' => 'digits:6',
        ],['line.product.required'=>'Line item selection is required',
         'line.product.*.required'=>'Line item selection is required',
           ]);
      // dd($d);
        $invoice   = new Invoice;
        $invoice->inv_id  = $request->inv_id; 
        $invoice->customer_id  = $request->customer; 
        $invoice->billing_address = $request->billing_address;
        $invoice->billing_city = $request->billing_city;
        $invoice->billing_state = $request->billing_state;
        $invoice->billing_country = $request->billing_country;
        $invoice->billing_pin = $request->billing_pin;
        $invoice->shipping_address = $request->shipping_address;
        $invoice->shipping_city = $request->shipping_city;
        $invoice->shipping_state = $request->shipping_state;
        $invoice->shipping_country = $request->shipping_country;
        $invoice->shipping_pin = $request->shipping_pin;
        $invoice->type =$this->TYPE;
        $invoice->user_id =auth()->user()->id;
        if($invoice->save())
        {  $line = $request->line;  $result = false;
          foreach($line['product'] as $key=> $product)
          {
            $item = new LineItem;           
            $item->product_id = $product; 
            $item->price = $line["price"][$key]; 
            $item->qty = $line["qty"][$key];       
            $item->invoice_id = $invoice->id;  
            $item->posted_by  = auth()->user()->id;
            $result =  $item->save();
            $stock =( @auth()->user()->industry->stock_management== null)?0: auth()->user()->industry->stock_management;
            if($stock != 0){
            $prod = Product::findOrFail($product);
            $qty = $prod->qty - $line["qty"][$key];
            $prod->where('id',$product)->update(['qty'=>$qty]);
            }
           }
           if($result)
           {
            return redirect()->route('purchase_order.index')->with('success','Purchase Order Added Successfully!!');
           }
           return redirect()->route('purchase_order.create')->with('fail','Fail!! To Add Purchase Order');
        }
       
        
        return redirect()->route('purchase_order.create')->with('fail','Fail!! To Add Purchase Order');

    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Invoice  $invoice
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
       
        $invoice = Invoice::findOrFail($id);
        $invoice = $invoice->leftjoin('line_items as li','li.invoice_id','=','invoices.id')->select('invoices.*','li.price','li.product_id','li.qty')->where(['li.invoice_id'=>$id,'li.posted_by'=>auth()->user()->id])->first();
        $view_name = @auth()->user()->invoice_template;
        $view_name = !empty($view_name)?$view_name:'invoice1';
        $view = strtok($view_name,'.');
        return view('purchase_order.'.$view ,compact('invoice'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Invoice  $invoice
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $products = Product::where(['status'=>1,'posted_by'=>auth()->user()->id])->orderBy('name')->get();
        $customers = Customer::where('user_id',auth()->user()->id)->orderBy('firstname')->get();
        $invoice = Invoice::findOrFail($id);
        $invoice = $invoice->leftjoin('line_items as li','li.invoice_id','=','invoices.id')->select('invoices.*','li.price','li.product_id','li.qty')->where(['li.invoice_id'=>$id,'li.posted_by'=>auth()->user()->id])->first();
        $gst = auth()->user()->gst_percent;      
       
        return view('purchase_order.edit',compact('invoice','products','customers','gst'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Invoice  $invoice
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $this->validate($request,[
            'customer' => 'required|numeric',
            'line.product' => 'required|array',
            'line.product.*' => 'required',
            'billing_address' => 'string|max:255',            
            'billing_city' => 'string|max:255',
            'billing_state' => 'string|max:255',
            'billing_country' => 'string|max:255',
            'billing_pin' => 'digits:6',
            'shipping_address' => 'string|max:255',            
            'shipping_city' => 'string|max:255',
            'shipping_state' => 'string|max:255',
            'shipping_country' => 'string|max:255',
            'shipping_pin' => 'digits:6',
        ],['line.product.required'=>'Line item selection is required',
        'line.product.*.required'=>'Line item selection is required',
          ]);
        //dd($request->all());
        $invoice   = Invoice::findOrFail($id);
        $invoice->customer_id  = $request->customer; 
        $invoice->billing_address = $request->billing_address;
        $invoice->billing_city = $request->billing_city;
        $invoice->billing_state = $request->billing_state;
        $invoice->billing_country = $request->billing_country;
        $invoice->billing_pin = $request->billing_pin;
        $invoice->shipping_address = $request->shipping_address;
        $invoice->shipping_city = $request->shipping_city;
        $invoice->shipping_state = $request->shipping_state;
        $invoice->shipping_country = $request->shipping_country;
        $invoice->shipping_pin = $request->shipping_pin;

        if($invoice->save())
        {   
            $oldData = LineItem::where(['invoice_id'=>$id])->get(['id'])->toArray();
            $deleted_items = Arr::flatten($request->line['id']);
            //get product id and quantity to update product
            $data= LineItem::where(['invoice_id'=>$id])->whereNotIn('id',$deleted_items)->get(['product_id','qty']);
            //delete record line items which deleted by user
            LineItem::where(['invoice_id'=>$id])->whereNotIn('id',$deleted_items)->delete();
            $stock =( @auth()->user()->industry->stock_management== null)?0: auth()->user()->industry->stock_management;
        
            if(!is_null($data) && $stock != 0)
            {
                foreach($data as $d)
                {
                    $prod = Product::findOrFail($d->product_id);
                    $newQty = $prod->qty+$d->qty;
                    $prod->where('id',$d->product_id)->update(['qty'=>$newQty]);
                }
             }
           
           // $item = LineItem::where(['invoice_id'=>$id])->delete();    
                 
            $line = $request->line;  $result = false;
          foreach($line['product'] as $key=> $product)
          {
            if(!empty($line["id"][$key]))
            {
                $item =LineItem::find( $line["id"][$key]); 
                $old_qty =    $item->qty;
                $decrese_qty =  $line["qty"][$key]-$old_qty;      
                $item->product_id = $product; 
                $item->price = $line["price"][$key]; 
                $item->qty = $line["qty"][$key];       
                $item->invoice_id = $invoice->id;  
                $item->posted_by  = auth()->user()->id;
                $result =  $item->save();
              if($stock != 0){
                $prod = Product::findOrFail($product);
                $qty = $prod->qty - $decrese_qty;
                if($qty<0)
                {
                    $qty =  $prod->qty+(int)$qty;
                }
                $prod->where('id',$product)->update(['qty'=>$qty]);
               }
            }
            else{
                $item = new LineItem;          
                $item->product_id = $product; 
                $item->price = $line["price"][$key]; 
                $item->qty = $line["qty"][$key];       
                $item->invoice_id = $invoice->id;  
                $item->posted_by  = auth()->user()->id;
                $result =  $item->save();
                if($stock != 0){
                $prod = Product::findOrFail($product);
                $qty = $prod->qty - $line["qty"][$key];              
                $prod->where('id',$product)->update(['qty'=>$qty]);
                }
            }
           }
           if($result)   
           {
            return redirect()->route('purchase_order.index')->with('success','Purchase Order Updated Successfully!!');
           }
           return redirect()->route('purchase_order.edit')->with('fail','Fail!! To Update Purchase Order');
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Invoice  $invoice
     * @return \Illuminate\Http\Response
     */
    public function destroy(Request $request)
    {
        $id   = trim($request->delete_id);
        $invoice   = Invoice::where('id',$id)->delete();
        if($invoice)
        {
            
            //product id and qty to update product
            $data   = LineItem::where('invoice_id',$id)->get(['product_id','qty']);
            //delete line items
            $lineItem   = LineItem::where('invoice_id',$id)->delete();
            $stock =( @auth()->user()->industry->stock_management== null)?0: auth()->user()->industry->stock_management;
            if($stock != 0){
            if(!is_null($data))
            {
                foreach($data as $d)
                {
                    $prod = Product::findOrFail($d->product_id);
                    $newQty = $prod->qty+$d->qty;
                    $prod->where('id',$d->product_id)->update(['qty'=>$newQty]);
                }
             }
            }
           
            if($lineItem)
            {
                return redirect()->route('purchase_order.index')->with('success','Purchase Order deleted Successfully!!'); 
            }
            return redirect()->route('purchase_order.index')->with('fail','Fail!! To delete Purchase Order');
        }
        return redirect()->route('purchase_order.index')->with('fail','Fail!! To delete Purchase Order');

    }

     public function export() 
    {
        return Excel::download(new InvoiceExport($this->TYPE), 'invoices.xlsx');
    }
    public function getline(){
        $n = $_REQUEST['n'];
        $products = Product::where(['status'=>1,'posted_by'=>auth()->user()->id])->where('qty','>',0)->orderBy('name')->get();
        $str = '<tr> <td><input type="hidden" name="line[id][]" value=""/><select onchange="calculateme('.$n.')" id="line_product_'.$n.'" name="line[product][]" class="form-select line"><option value="">Select Product</option>';
        foreach($products as $p) {
            $str .= '<option value="'.$p->id.'">'.$p->name.'</option>';
        }
        $str .= '</select></td> <td><input onblur="changeqty('.$n.')" id="line_qty_'.$n.'" min="1"  type="number" name="line[qty][]" class="form-control"></td> <td><input type="text" id="line_price_'.$n.'" data-initial-value="" name="line[price][]" class="form-control"></td> <td><input type="hidden" name="line[totalprice][]" id="line_total_price_'.$n.'" data-initial-value="" class="form-control price">
        </td> <td><a href="javascript:void(0)"  class="deleteLine" ><i class="fas fa-trash text-danger fs-2"></i> </a></td> </tr>';
        echo $str;
    }

    public function getprd() {
        $n = $_REQUEST['id'];
        $p = Product::where('id',$n)->first();
        $gst = $p->user->gst_percent;       
        $total = !empty($gst)?Helper::totalPrice($gst,$p->price,1):$p->price;
        $ar = ['id'=>$p->id, 'price'=>$p->price,'qty'=>$p->qty,'gst'=>$gst];
        return response()->json($ar);
    }

    public function getAddress(Request $request)
    {
        $id = $request->customerId;
        $customerAddress = Customer::where('id',$id)->first(['address','city','state','country','pin'])->toArray();       
        return response()->json(compact('customerAddress'),200);
    }
    public function pdfview($id)
    {
      
       $invoice = Invoice::findOrFail($id);
       $invoice = $invoice->leftjoin('line_items as li','li.invoice_id','=','invoices.id')->select('invoices.*','li.price','li.product_id','li.qty')->where(['li.invoice_id'=>$id,'li.posted_by'=>auth()->user()->id])->first();
       $view_name = @auth()->user()->invoice_template;
       $view_name = !empty($view_name)?$view_name:'invoice1';
       $view = strtok($view_name,'.');
      
       $pdf = pdf::loadView('purchase_order.pdf'.$view, compact('invoice'))->setOptions(['defaultFont' => 'sans-serif']);
     //  return view('invoices.pdf',compact('invoice'));
       return $pdf->stream('invoices.pdf');
    }

    // public function totalPrice($gst,$price,$QTY )
    // {
    //     $price = round($price,2)*$QTY;
    //     $tax=round($price,2)*round(($gst/100),2);
    //     $total=round(($price+$tax),2);
    //     return $total;
    //     //$calculatedTaxRate=(($total-$price)/$price)*100; 
    // }
    function sendEmail($id)
    {
        $invoice = Invoice::findOrFail($id);
        $invoice = $invoice->leftjoin('line_items as li','li.invoice_id','=','invoices.id')->select('invoices.*','li.price','li.product_id','li.qty')->where(['li.invoice_id'=>$id,'li.posted_by'=>auth()->user()->id])->first();
        $view_name = @auth()->user()->invoice_template;
        $view_name = !empty($view_name)?$view_name:'invoice1';
        $view = strtok($view_name,'.');
        $pdf = pdf::loadView('purchase_order.pdf'.$view, compact('invoice'))->setOptions(['defaultFont' => 'Helvetica']);//Poppins, Helvetica, "sans-serif"
        //  return view('invoices.pdf',compact('invoice'));
          $customerData['name'] =$invoice->customers->firstname.' '.$invoice->customers->lastname;

          $data['attachment']= $pdf->stream('invoices.pdf');
          $data['attachment_name'] = $invoice->inv_id.'.pdf';
          $data['subject'] =$invoice->customers->firstname.' '.$invoice->customers->lastname ." Your New Purchase Order ".$invoice->inv_id.".pdf Generated";
         Mail::to($invoice->customers->email )->send(new SendInvoice($data,$customerData));

        Invoice::where(['id'=>$id])->update(['email_status'=>1]);
         return redirect()->back()->withSuccess("Mail send successfully");
    }

}

Youez - 2016 - github.com/yon3zu
LinuXploit