IMMREX7

aku nok ndi : /home/spdtg/www/schoolmis/app/Http/Controllers/School/Stock/
File Up :
aku nok ndi : /home/spdtg/www/schoolmis/app/Http/Controllers/School/Stock/PurchaseOrderController.php

<?php

namespace App\Http\Controllers\School\Stock;

use Illuminate\Http\Request;
use App\Http\Controllers\School\SchoolController;
use Auth;
use DB;
use PDF;
use Mail;
use Carbon\Carbon;
use Session;

class PurchaseOrderController extends SchoolController {

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request) {
        $purchase_orders = \App\PurchaseOrder::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->orderBy('idPurchaseOrder', 'desc');
        if ($request->has('idFinancialYear')) {
            $purchase_orders = $purchase_orders->where('idFinancialYear', '=', $request->idFinancialYear)->get();
        } else {
            $purchase_orders = $purchase_orders->where('idFinancialYear', '=', Session::get('idFinancialYear'))->get();
        }
        return view('schools.stock.purchase_order_list', compact('purchase_orders'));
    }

    public function viewPO(Request $request){
        $purchase_orders = \App\PurchaseOrder::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
        ->orderBy('idPurchaseOrder', 'desc');
        if ($request->has('idFinancialYear')) {
             $purchase_orders = $purchase_orders->where('idFinancialYear', '=', $request->idFinancialYear)->get();
        } else {
            $purchase_orders = $purchase_orders->where('idFinancialYear', '=', Session::get('idFinancialYear'))->get();
        }
        return view('schools.stock.purchase_order_view', compact('purchase_orders'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create() {
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $products = ['' => '----Select----'] + \App\Product::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->get()->pluck('productName', 'idProduct')->toArray();
        $suppliers = ['' => '----Select----'] + \App\Supplier::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
                        ->get()->pluck('bussinessName', 'idSupplier')->toArray();
        $curr_no = \App\NoGenerator::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->where('type', '=', 'purchase')->first();

        if ($curr_no) {
            $next_no = $curr_no->no + 1;
        } else {
            $next_no = 1;
        }
        $po_no = 'PO-0000' . $next_no;
        return view('schools.stock.purchase_order', compact('products', 'suppliers', 'school', 'po_no'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request) {
        $rules = [
            'idSupplier' => 'required',
        ];
        if (count($request->products) > 0) {
            foreach ($request->products as $key => $value) {
                $rules['products.' . $key . '.idProduct'] = 'required';
            }
        }
        $messages = [
            'idSupplier.required' => 'Select Vendor First.',
            'products.*idProduct.required' => 'Item should be selected first.',
        ];
        $this->validate($request, $rules, $messages);
        //dd($request->all());
        $school = \App\School::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->first();
        $vendor = \App\Supplier::where('idSupplier','=',$request->idSupplier)->first()->toArray();
        
        $po = new \App\PurchaseOrder();
        $po->fill($request->all());

        $month = Carbon::parse($po->purchaseDate);
        $po->poMonth = $month->format('m');
        $po->idFinancialYear = Session::get('idFinancialYear');

        $po->idSchool = Auth::guard('school')->user()->idSchool;
        $next_receiptno = next_purchaseno();
        $po->poNo = 'PO-0000' . $next_receiptno;
        DB::beginTransaction();
        $po->save();
        foreach ($request->products as $k1 => $v1) {
            $podetails = new \App\PurchaseOrderDetail();
            $podetails->idPurchaseOrder = $po->idPurchaseOrder;
            $podetails->idProduct = $v1['idProduct'];
            $podetails->quantity = $v1['quantity'];
            $podetails->rate = $v1['rate'];
            $podetails->tax = $v1['tax'];
            $podetails->taxAmount = ($v1['rate'] * $v1['quantity']) * ($v1['tax'] / 100);
            $podetails->productTotal = $v1['productTotal'];
            $podetails->save();
        }
        DB::commit();


        // mail to client
        $pdf = PDF::loadView('schools.stock.print_purchase_order', ['margin_top' => 20], compact('po', 'school'));
        
        /*Mail::send('emails.feedback',["school1"=>$school], function($message) use ($vendor, $pdf,$school) {
            $message->from('schoolmis@online-login.online');
            $message->to($vendor['email']);
            $message->subject('Purchase Order Form '.$school->schoolName);
            //Attach PDF doc
            $message->attachData($pdf->output(), 'purchase_order.pdf');
        });*/
        
        flash('Purchase Order has been saved successfully');

        if ($request->ajax()) {
            return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
        }

        return redirect('school/purchaseorder');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id) {
        $po = \App\PurchaseOrder::where('idPurchaseOrder', '=', $id)->first();
        $school = \App\School::where('idSchool', '=', $po->idSchool)->first();
        $pdf = PDF::loadView('schools.stock.print_purchase_order', ['margin_top' => 20], compact('po', 'school'));
        return $pdf->stream('puchase_order.pdf');
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id) {
        $po = \App\PurchaseOrder::where('idPurchaseOrder', '=', $id)->first();
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id) {
        $po = \App\PurchaseOrder::where('idPurchaseOrder', '=', $id)->first();
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id) {
        try{
            $po = \App\PurchaseOrder::where('idPurchaseOrder', '=', $id)->first();
            DB::beginTransaction();
            $po->details()->delete();
            $po->delete();
            DB::commit(); 
        } catch(\Illuminate\Database\QueryException $ex){
            DB::rollback();
            return response()->json(['success' => "FAILED"], 200, ['app-status' => 'success']);
        }
        return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
    }

    public function getOrderDetails($id) {
        $po = \App\PurchaseOrder::where('idPurchaseOrder', '=', $id)->first();
        return view('schools.stock.purchaseorder_details', compact('po'));
    }

    public function productReceived(Request $request) {
        //dd($request->all());
        // Received Purchase Products

        DB::beginTransaction();
        $po = \App\PurchaseOrder::where('idPurchaseOrder', '=', $request->idPurchaseOrder)->first();
        $rec = \App\ProductReceived::where('idPurchaseOrder', '=', $request->idPurchaseOrder)->first();
        if($rec == null){
            $pr = new \App\ProductReceived();
            $pr->fill($request->all());
            $pr->idSchool = Auth::guard('school')->user()->idSchool;
            $pr->idSupplier = $po->idSupplier;
            $pr->receivedDate = today_date();
            $month = Carbon::parse($pr->receivedDate);
            $pr->poMonth = $month->format('m');
            $pr->idFinancialYear = Session::get('idFinancialYear');
            $next_receiptno = next_goodsreceiptno();
            $pr->receiptNo = 'GRN000' . $next_receiptno;
            $pr->save();
        }       

        foreach ($request->products as $key => $value) {
            if($rec == null){
                $pr_details = new \App\ProductReceivedDetail();
                $pr_details->idProduct = $value['idProduct'];
                $pr_details->quantity = $value['quantity'];
                $pr_details->serialNo = $value['serialNo'];
                $pr_details->idProductReceived = $pr->idProductReceived;
                $pr_details->save();
            }
            else{
                $details = \App\ProductReceivedDetail::where('idProductReceived',$rec->idProductReceived)->first();
                $details->quantity = $details->quantity + $value['quantity'];
                if($details->serialNo != null)
                $details->serialNo = $details->serialNo .','. $value['serialNo'];
                else $details->serialNo = $value['serialNo'];
                $details->update();
            }


            $stock = \App\StockLedger::where('idProduct', '=', $value['idProduct'])->first();
            if ($stock) {
                $prevqty = $stock->quantityInStock;
                $stock->quantityInStock = $prevqty + $value['quantity'];
                $stock->purchaseQuantity = $stock->purchaseQuantity + $value['quantity'];
                $stock->update();
            } else {
                $stock = new \App\StockLedger();
                $stock->idProduct = $value['idProduct'];
                $stock->quantityInStock = $value['quantity'];
                $stock->purchaseQuantity = $value['quantity'];
                $stock->idSchool = Auth::guard('school')->user()->idSchool;
                $stock->save();
            }
        }
        //  Close Purchase Order if received
        $products = \App\PurchaseOrderDetail::join('products','purchase_order_details.idProduct','=','products.idProduct')->where('idPurchaseOrder',$request->idPurchaseOrder)->sum('quantity');
        $rproducts = \App\ProductReceived::join('product_received_details','product_received.idProductReceived','=','product_received_details.idProductReceived')->join('products','product_received_details.idProduct','=','products.idProduct')->where('idPurchaseOrder',$request->idPurchaseOrder)->sum('quantity');
        if($products == $rproducts)
        $po->status = 'Closed';
        else $po->status = 'OPEN';
        $po->update();

        // Update Stock Ledger

        DB::commit();
        flash('Goods Received has been saved successfully');
        return redirect('school/purchaseorder');
    }

    public function payForGoods($id) {
        $po = \App\PurchaseOrder::where('idPurchaseOrder', '=', $id)->first();
        $pr = \App\ProductReceived::where('idPurchaseOrder', '=', $id)->first();
        $pr_payment = \App\ProductPayment::where('idProductReceived', '=', $pr->idProductReceived)
                        ->select(DB::raw('SUM(amountPaid) as amountPaid'))->first();
        return view('schools.stock.pay_for_goods', compact('po', 'pr', 'pr_payment'));
    }

    public function goodsPayment(Request $request) {
        $pr = new \App\ProductPayment();
        $pr->fill($request->all());
        $next_receiptno = next_productreceiptno();
        $pr->receiptNo = 'SFP000' . $next_receiptno;
        $pr->idSchool = Auth::guard('school')->user()->idSchool;
        if(isset($request->paymentDate))
        $pr->paymentDate = Carbon::parse($request->paymentDate)->format('d-m-Y');
        else
        $pr->paymentDate =Carbon::now()->format('d-m-Y');
        $pr->save();
        flash('Goods Payment successful');
        return redirect('school/purchaseorder');
    }

    public function getPurchaseProductDetail($poid, $prodid) {
        $podetails = \App\PurchaseOrderDetail::where('idPurchaseOrder', '=', $poid)
                        ->where('idProduct', '=', $prodid)->first();
        return json_encode($podetails);
    }

    public function goodsReceivedNote($id) {
        $po = \App\PurchaseOrder::where('idPurchaseOrder', '=', $id)->first();
        $pr = \App\ProductReceived::where('idPurchaseOrder', '=', $id)->first();
        $school = \App\School::where('idSchool', '=', $po->idSchool)->first();
        $pdf = PDF::loadView('schools.stock.goodsreceived_note', ['margin_top' => 20], compact('po', 'pr', 'school'));
        return $pdf->stream('goodsreceived_note.pdf');
    }

    public function productInStock($id) {
        $stock = \App\StockLedger::where('idProduct', '=', $id)->first();
        return json_encode($stock);
    }

}

Copyright © 2021 - 2025 IMMREX7