IMMREX7
<?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 -