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 Session;
use Carbon\Carbon;
class InvoiceController extends SchoolController {
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request) {
$invoices = \App\Invoice::where('idSchool', '=', Auth::guard('school')->user()->idSchool)
->orderBy('idInvoice', 'desc');
if ($request->has('idFinancialYear')) {
$invoices = $invoices->where('idFinancialYear', '=', $request->idFinancialYear)->get();
} else {
$invoices = $invoices->where('idFinancialYear', '=', Session::get('idFinancialYear'))->get();
}
return view('schools.stock.invoice_list', compact('invoices'));
}
/**
* 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)
->orderBy('idProduct', 'desc')->pluck('productName', 'idProduct')->toArray();
$curr_no = \App\NoGenerator::where('idSchool', '=', Auth::guard('school')->user()->idSchool)->where('type', '=', 'invoice')->first();
if ($curr_no) {
$next_no = $curr_no->no + 1;
} else {
$next_no = 1;
}
if($school->invoice_prefix != null){
$invoice_no = $school->invoice_prefix . $next_no;
}else
$invoice_no = 'INV-0000' . $next_no;
return view('schools.stock.invoice', compact('products', 'invoice_no'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request) {
$school = \App\School::where('idSchool',Auth::guard('school')->user()->idSchool)->first();
$rules = [
'idCustomer' => 'required',
];
if($request->paymentMode == "IMPS" && $request->idAccount == ""){
$rules = [
'idCustomer' => 'required',
'accountNo' => 'required'
];
}
if (count($request->products) > 0) {
foreach ($request->products as $key => $value) {
$rules['products.' . $key . '.idProduct'] = 'required';
if ((isset($value['idProduct']) && isset($value['quantity']))) {
$stock = \App\StockLedger::where('idProduct', '=', $value['idProduct'])->first();
// dd($stock);
if ($stock != null) {
$available_products = $stock->quantityInStock;
if ($value['quantity'] > $available_products) {
$rules['products.' . $key . '.aval_qty'] = 'required';
}
} else {
$rules['products.' . $key . '.noitem'] = 'required';
}
}
}
}
$messages = [
'idCustomer.required' => 'Select Customer First.',
'products.*idProduct.required' => 'Item should be selected first.',
'products.*noitem.required' => 'No Item is available in Stock.',
];
if($request->paymentMode == "IMPS" && $request->idAccount == ""){
$messages = [
'idCustome.required' => 'Select Customer First.',
'products.*idProduct.required' => 'Item should be selected first.',
'products.*noitem.required' => 'No Item is available in Stock.',
'accountNo.required' => 'Account Number cannot be empty'
];
}
foreach ($request->products as $key => $value) {
if ((isset($value['idProduct']) && isset($value['quantity']))) {
$stock = \App\StockLedger::where('idProduct', '=', $value['idProduct'])->first();
if($stock){
$messages += [
'products.*aval_qty.required' => 'Only ' . $stock->quantityInStock . ' items available in Stock.',
];
}
}
}
if(isset($request->utr)){
$utr = \App\StockInvoicePayment::where('utr',$request->utr)->first();
if($utr != null){
flash('UTR Number already exits in the system. Failed to save the invoice data.');
if ($request->ajax()) {
return response()->json(['success' => "Failed"], 200, ['app-status' => 'success']);
}else
return redirect()->back();
}
}
$this->validate($request, $rules, $messages);
$invoice = new \App\Invoice();
$invoice->fill($request->all());
$invoice->idSchool = Auth::guard('school')->user()->idSchool;
$invoice->idFinancialYear = Session::get('idFinancialYear');
$month = Carbon::parse($invoice->invoiceDate);
$invoice->poMonth = $month->format('m');
$next_receiptno = next_invoiceno();
if($school->invoice_prefix != null){
$invoice->invoiceNo = $school->invoice_prefix . $next_receiptno;
}else
$invoice->invoiceNo = 'INV-0000' . $next_receiptno;
DB::beginTransaction();
$invoice->save();
// Invoice Payment Statrt
$invoice_payment = new \App\StockInvoicePayment();
$invoice_payment->fill($request->all());
$month = Carbon::parse($invoice_payment->paymentDate);
$invoice_payment->poMonth = $month->format('m');
$invoice_payment->idFinancialYear = Session::get('idFinancialYear');
$invoice_payment->idSchool = Auth::guard('school')->user()->idSchool;
$invoice_payment->idInvoice = $invoice->idInvoice;
$invoice_payment->paymentDate = Carbon::now()->format('Y-m-d');
$next_receiptno = next_invoice_receiptno();
$invoice_payment->receiptNo = 'RCPT000' . $next_receiptno;
$invoice_payment->created_by = Auth::guard('school')->user()->idSchoolUser;
$invoice_payment->save();
if ($request->hasFile('utrFile')) {
$hw = 'utr_' . $invoice_payment->receiptNo . '.' . $request->file('utrFile')->getClientOriginalExtension();
$request->file('utrFile')->storeAs('public/schools/' . Auth::guard('school')->user()->idSchool . '/utr/', $hw);
$invoice_payment->utrFile = $hw;
$invoice_payment->update();
}
// Invoice Payment End
foreach ($request->products as $k1 => $v1) {
$invoicedetails = new \App\InvoiceDetail();
$invoicedetails->idInvoice = $invoice->idInvoice;
$invoicedetails->idProduct = $v1['idProduct'];
$invoicedetails->quantity = $v1['quantity'];
$invoicedetails->rate = $v1['rate'];
$invoicedetails->tax = $v1['tax'];
$invoicedetails->taxAmount = ($v1['rate'] * $v1['quantity']) * ($v1['tax'] / 100);
$invoicedetails->productTotal = $v1['productTotal'];
$invoicedetails->save();
if (array_key_exists("serial", $v1)){
$arr = explode(",",$v1['serial'] );
if(count($arr) > 0){
foreach($arr as $indx => $serial){
DB::table('invoice_serial')->insert([
'idInvoiceDetial' => $invoicedetails->idInvoiceDetail,
'idInvoice' => $invoice->idInvoice,
'serialNo' => $serial,
'renewal_date' => $v1['renew']
]);
}
}
}
$stock = \App\StockLedger::where('idProduct', '=', $v1['idProduct'])->first();
if ($stock) {
$prevqty = $stock->quantityInStock;
$stock->quantityInStock = $prevqty - $v1['quantity'];
$stock->totalSell = $stock->totalSell + $v1['quantity'];
$stock->update();
}
}
/*if(isset($request->accountNo)){
$paidAccount = \App\PaidAccounts::where('accountNo',$request->accountNo)->first();
if( $paidAccount == null){
$bankAccount = new \App\PaidAccounts();
$bankAccount->fill($request->all());
$bankAccount->idSchool = Auth::guard('school')->user()->idSchool;
$bankAccount->save();
$invoice_payment->idAccount = $bankAccount->idAccount;
$invoice_payment->update();
}
}*/
DB::commit();
flash('Invoice has been saved successfully');
if ($request->ajax()) {
return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
}
return redirect('school/invoices');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id) {
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id) {
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id) {
$data = $request->all();
//dd($data);
$invoice = \App\Invoice::where('idInvoice', '=', $id)->first();
$ip = \App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)
->select(DB::raw('SUM(paidAmount) as amountPaid'))->where('paymentStatus','!=','Cancelled')->first();
$inv_payments = \App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)->where('paymentStatus','!=','Cancelled')->get();
$school = \App\School::where('idSchool', '=', $invoice->idSchool)->first();
if($school->idCountry == 1)
$pdf = PDF::loadView('schools.stock.print_invoice_modify', ['margin_top' => 20], compact('invoice','ip','inv_payments', 'school','data'));
else $pdf = PDF::loadView('schools.stock.print_invoice_modify_qatar', ['margin_top' => 20], compact('invoice','ip','inv_payments', 'school','data'));
return $pdf->stream('invoice.pdf');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id) {
try{
$invoice = \App\Invoice::where('idInvoice', '=', $id)->first();
DB::beginTransaction();
if(\App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)->where('paymentStatus','Cancelled')->count() > 0){
\App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)->where('paymentStatus','Cancelled')->delete();
}
$invoice->details()->delete();
$invoice->delete();
DB::commit();
} catch(\Illuminate\Database\QueryException $ex){
DB::rollback();
return response()->json(['success' => "FAILED", 'message' => $ex->getMessage()], 200, ['app-status' => 'success']);
}
return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
}
public function printInvoice($id) {
$invoice = \App\Invoice::where('idInvoice', '=', $id)->first();
$ip = \App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)
->select(DB::raw('SUM(paidAmount) as amountPaid'))->where('paymentStatus','!=','Cancelled')->first();
$inv_payments = \App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)->where('paymentStatus','!=','Cancelled')->get();
$school = \App\School::where('idSchool', '=', $invoice->idSchool)->first();
if($school->idCountry == 1)
$pdf = PDF::loadView('schools.stock.print_invoice', ['margin_top' => 20], compact('invoice','ip','inv_payments', 'school'));
else $pdf = PDF::loadView('schools.stock.print_invoice_qatar', ['margin_top' => 20], compact('invoice','ip','inv_payments', 'school'));
return $pdf->stream('invoice.pdf');
}
public function printFakeInvoice($id){
$invoice = \App\Invoice::where('idInvoice', '=', $id)->first();
$ip = \App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)
->select(DB::raw('SUM(paidAmount) as amountPaid'))->where('paymentStatus','!=','Cancelled')->first();
$inv_payments = \App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)->where('paymentStatus','!=','Cancelled')->get();
$school = \App\School::where('idSchool', '=', $invoice->idSchool)->first();
return view('schools.stock.invoice-print', compact('invoice', 'inv_payments','ip','school'));
}
public function payBalanceForm($id) {
$invoice = \App\Invoice::where('idInvoice', '=', $id)->first();
$ip = \App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)
->select(DB::raw('SUM(paidAmount) as amountPaid'))->where('paymentStatus','!=','Cancelled')->first();
$inv_payments = \App\StockInvoicePayment::where('idInvoice','=',$invoice->idInvoice)->where('paymentStatus','!=','Cancelled')->get();
return view('schools.stock.paybalance', compact('invoice','ip','inv_payments'));
}
public function payBalance(Request $request) {
$invoice = \App\Invoice::where('idInvoice', '=', $request->idInvoice)->first();
//check utr exits
$utr = \App\StockInvoicePayment::where('utr',$request->utr)->first();
if($utr != null){
flash('UTR Number already exits in the system. Failed to save the invoice data.');
return redirect()->back();
}
// Invoice Payment Statrt
$invoice_payment = new \App\StockInvoicePayment();
$invoice_payment->fill($request->all());
$invoice_payment->idSchool = Auth::guard('school')->user()->idSchool;
$invoice_payment->idInvoice = $invoice->idInvoice;
if(isset($request->paymentDate))
$invoice_payment->paymentDate = Carbon::parse($request->paymentDate)->format('Y-m-d');
else
$invoice_payment->paymentDate =Carbon::now()->format('Y-m-d');
$month = Carbon::parse($invoice_payment->paymentDate);
$invoice_payment->poMonth = $month->format('m');
if(isset($request->idFinancialYear))
$invoice_payment->idFinancialYear = $request->idFinancialYear;
else
$invoice_payment->idFinancialYear = Session::get('idFinancialYear');
$next_receiptno = next_invoice_receiptno();
$invoice_payment->receiptNo = 'RCPT000' . $next_receiptno;
$invoice_payment->created_by = Auth::guard('school')->user()->idSchoolUser;
$invoice_payment->save();
if ($request->hasFile('utrFile')) {
$hw = 'utr_' . $invoice_payment->receiptNo . '.' . $request->file('utrFile')->getClientOriginalExtension();
$request->file('utrFile')->storeAs('public/schools/' . Auth::guard('school')->user()->idSchool . '/utr/', $hw);
$invoice_payment->utrFile = $hw;
$invoice_payment->update();
}
if($request->returnAmount > 0){
DB::table('invoice_serial')->insert([
'idInvoice' => $invoice->idInvoice,
'idInvoiceDetial' => $invoice_payment->idInvoicePayment,
'renewal_date' => Carbon::now()->format('Y-m-d'),
'return_amount' => $request->returnAmount,
'is_return' => 'Y'
]);
}
/*if(isset($request->accountNo)){
$paidAccount = \App\PaidAccounts::where('accountNo',$request->accountNo)->first();
if( $paidAccount == null){
$bankAccount = new \App\PaidAccounts();
$bankAccount->fill($request->all());
$bankAccount->idSchool = Auth::guard('school')->user()->idSchool;
$bankAccount->save();
$invoice_payment->idAccount = $bankAccount->idAccount;
$invoice_payment->update();
}
}*/
return redirect('school/inventoryreport');
}
public function invoiceReceipts($id) {
$receipts = DB::table('stock_invoicepayment')
->join('invoices','stock_invoicepayment.idInvoice','=','invoices.idInvoice')
->where('stock_invoicepayment.idInvoice','=',$id)
->where(function($query) {
$query->whereNull('paymentStatus');
$query->orWhere('paymentStatus', '=', 'Cleared');
$query->orWhere('paymentStatus', '=', 'In-Process');
$query->orWhere('paymentStatus', '=', 'Success');
})
->get();
return view('schools.stock.invoice_receipts', compact('receipts'));
}
public function cancelReceipt($id) {
$pay = \App\StockInvoicePayment::where('idInvoicePayment','=',$id)->first();
$pay->paymentStatus = 'Cancelled';
$pay->update();
$invoice = DB::table('invoice_details')
->where('invoice_details.idInvoice', '=', $pay->idInvoice)
->get();
foreach ($invoice as $products) {
$stock = \App\StockLedger::where('idProduct', '=', $products->idProduct)->first();
$stock->quantityInStock = $stock->quantityInStock + $products->quantity;
$stock->totalSell = $stock->totalSell - $products->quantity;
//$stock->returnedQuantity = $stock->returnedQuantity + $products->quantity;
$stock->update();
}
return response()->json(['success' => "SUCCESS"], 200, ['app-status' => 'success']);
}
}
Copyright © 2021 -