forked from a1gard/xshop
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.6 KiB
PHP
142 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\WebsiteController;
|
|
use App\Http\Requests\InvoiceSaveRequest;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Invoice;
|
|
use App\Models\Quantity;
|
|
use Illuminate\Http\Request;
|
|
use function Xmen\StarterKit\Helpers\logAdmin;
|
|
use function Xmen\StarterKit\Helpers\logAdminBatch;
|
|
|
|
class InvoiceController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
}
|
|
|
|
public function createOrUpdate(Invoice $invoice, InvoiceSaveRequest $request)
|
|
{
|
|
$invoice->customer_id = $request->input('customer_id');
|
|
$invoice->status = $request->input('status');
|
|
$invoice->tracking_code = $request->input('tracking_code');
|
|
if ($invoice->status == Invoice::CANCELED) {
|
|
// $this->remQ([$invoice->id]);
|
|
}
|
|
$invoice->save();
|
|
foreach ($request->products_ids as $k => $products_id) {
|
|
$invoice->products[$k]->pivot->update(['count' => $request->products_counts[$k]]);
|
|
}
|
|
|
|
WebsiteController::resetStockStatus();
|
|
WebsiteController::resetQuantity();
|
|
return $invoice;
|
|
}
|
|
|
|
public function remQ($invoices)
|
|
{
|
|
foreach ($invoices as $id) {
|
|
$inv = Invoice::whereId($id)->first();
|
|
if ($inv->status != Invoice::CANCELED) {
|
|
$pros = $inv->products()->withPivot(['quantity_id', 'count'])->get();
|
|
foreach ($pros as $pr) {
|
|
$q = Quantity::whereId($pr->pivot->quantity_id)->first();
|
|
$q->count += $pr->pivot->count;
|
|
$q->save();
|
|
$q->product->stock_quantity += $pr->pivot->count;
|
|
$q->product->save();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public function bulk(Request $request)
|
|
{
|
|
|
|
switch ($request->input('bulk')) {
|
|
case 'delete':
|
|
$msg = __('Invoices deleted successfully');
|
|
logAdminBatch(__METHOD__ . '.' . $request->input('bulk'), Invoice::class, $request->input('id'));
|
|
Invoice::destroy($request->input('id'));
|
|
break;
|
|
case 'PENDING':
|
|
case 'PROCESSING':
|
|
case 'COMPLETED':
|
|
case 'CANCELED':
|
|
case 'FAILED':
|
|
$msg = __('Invoices status changed successfully');
|
|
logAdminBatch(__METHOD__ . '.' . $request->input('bulk'), Invoice::class, $request->input('id'));
|
|
Invoice::whereIn('id', $request->input('id'))->update(['status' => $request->input('bulk')]);
|
|
// if ($request->input('bulk') == Invoice::CANCELED) {
|
|
// $this->remQ($request->input('id'));
|
|
// }
|
|
break;
|
|
default:
|
|
$msg = __('Unknown bulk action :' . $request->input('bulk'));
|
|
}
|
|
return redirect()->route('admin.invoice.index')->with(['message' => $msg]);
|
|
}
|
|
|
|
|
|
public function index(Request $request)
|
|
{
|
|
$n = Invoice::latest();
|
|
if ($request->has('filter')) {
|
|
$n = $n->where('status', $request->filter);
|
|
}
|
|
$invoices = $n->with('successPayments', 'payments')->paginate(20);
|
|
return view('admin.invoice.invoiceIndex', compact('invoices'));
|
|
}
|
|
|
|
|
|
public function create()
|
|
{
|
|
return view('admin.invoice.invoiceForm');
|
|
}
|
|
|
|
|
|
public function store(InvoiceSaveRequest $request)
|
|
{
|
|
$invoice = new Invoice();
|
|
$invoice = $this->createOrUpdate($invoice, $request);
|
|
logAdmin(__METHOD__, Invoice::class, $invoice->id);
|
|
return redirect()->route('admin.invoice.index')->with(['message' => __('invoice created successfully')]);
|
|
}
|
|
|
|
|
|
public function show(Invoice $invoice)
|
|
{
|
|
//
|
|
return view('admin.invoice.invoiceShow', compact('invoice'));
|
|
}
|
|
|
|
|
|
public function edit(Invoice $invoice)
|
|
{
|
|
$invoice = $invoice->load('customer', 'products')->refresh();
|
|
return view('admin.invoice.invoiceForm', compact('invoice'));
|
|
|
|
}
|
|
|
|
|
|
public function update(InvoiceSaveRequest $request, Invoice $invoice)
|
|
{
|
|
$this->createOrUpdate($invoice, $request);
|
|
logAdmin(__METHOD__, Invoice::class, $invoice->id);
|
|
return redirect()->route('admin.invoice.index')->with(['message' => __('Product invoice updated successfully')]);
|
|
|
|
}
|
|
|
|
|
|
public function destroy(Invoice $invoice)
|
|
{
|
|
logAdmin(__METHOD__, Invoice::class, $invoice->id);
|
|
$invoice->delete();
|
|
return redirect()->route('admin.invoice.index')->with(['message' => __('Product invoice deleted successfully')]);
|
|
}
|
|
}
|