render('quotation::index'); } public function create() { abort_if(Gate::denies('create_quotations'), 403); Cart::instance('quotation')->destroy(); return view('quotation::create'); } public function store(StoreQuotationRequest $request) { DB::transaction(function () use ($request) { $quotation = Quotation::create([ 'date' => $request->date, 'customer_id' => $request->customer_id, 'customer_name' => Customer::findOrFail($request->customer_id)->customer_name, 'tax_percentage' => $request->tax_percentage, 'discount_percentage' => $request->discount_percentage, 'shipping_amount' => $request->shipping_amount * 100, 'total_amount' => $request->total_amount * 100, 'status' => $request->status, 'note' => $request->note, 'tax_amount' => Cart::instance('quotation')->tax() * 100, 'discount_amount' => Cart::instance('quotation')->discount() * 100, ]); foreach (Cart::instance('quotation')->content() as $cart_item) { QuotationDetails::create([ 'quotation_id' => $quotation->id, 'product_id' => $cart_item->id, 'product_name' => $cart_item->name, 'product_code' => $cart_item->options->code, 'quantity' => $cart_item->qty, 'price' => $cart_item->price * 100, 'unit_price' => $cart_item->options->unit_price * 100, 'sub_total' => $cart_item->options->sub_total * 100, 'product_discount_amount' => $cart_item->options->product_discount * 100, 'product_discount_type' => $cart_item->options->product_discount_type, 'product_tax_amount' => $cart_item->options->product_tax * 100, ]); } Cart::instance('quotation')->destroy(); }); toast('Quotation Created!', 'success'); return redirect()->route('quotations.index'); } public function show(Quotation $quotation) { abort_if(Gate::denies('show_quotations'), 403); $customer = Customer::findOrFail($quotation->customer_id); return view('quotation::show', compact('quotation', 'customer')); } public function edit(Quotation $quotation) { abort_if(Gate::denies('edit_quotations'), 403); $quotation_details = $quotation->quotationDetails; Cart::instance('quotation')->destroy(); $cart = Cart::instance('quotation'); foreach ($quotation_details as $quotation_detail) { $cart->add([ 'id' => $quotation_detail->product_id, 'name' => $quotation_detail->product_name, 'qty' => $quotation_detail->quantity, 'price' => $quotation_detail->price, 'weight' => 1, 'options' => [ 'product_discount' => $quotation_detail->product_discount_amount, 'product_discount_type' => $quotation_detail->product_discount_type, 'sub_total' => $quotation_detail->sub_total, 'code' => $quotation_detail->product_code, 'stock' => Product::findOrFail($quotation_detail->product_id)->product_quantity, 'product_tax' => $quotation_detail->product_tax_amount, 'unit_price' => $quotation_detail->unit_price ] ]); } return view('quotation::edit', compact('quotation')); } public function update(UpdateQuotationRequest $request, Quotation $quotation) { DB::transaction(function () use ($request, $quotation) { foreach ($quotation->quotationDetails as $quotation_detail) { $quotation_detail->delete(); } $quotation->update([ 'date' => $request->date, 'reference' => $request->reference, 'customer_id' => $request->customer_id, 'customer_name' => Customer::findOrFail($request->customer_id)->customer_name, 'tax_percentage' => $request->tax_percentage, 'discount_percentage' => $request->discount_percentage, 'shipping_amount' => $request->shipping_amount * 100, 'total_amount' => $request->total_amount * 100, 'status' => $request->status, 'note' => $request->note, 'tax_amount' => Cart::instance('quotation')->tax() * 100, 'discount_amount' => Cart::instance('quotation')->discount() * 100, ]); foreach (Cart::instance('quotation')->content() as $cart_item) { QuotationDetails::create([ 'quotation_id' => $quotation->id, 'product_id' => $cart_item->id, 'product_name' => $cart_item->name, 'product_code' => $cart_item->options->code, 'quantity' => $cart_item->qty, 'price' => $cart_item->price * 100, 'unit_price' => $cart_item->options->unit_price * 100, 'sub_total' => $cart_item->options->sub_total * 100, 'product_discount_amount' => $cart_item->options->product_discount * 100, 'product_discount_type' => $cart_item->options->product_discount_type, 'product_tax_amount' => $cart_item->options->product_tax * 100, ]); } Cart::instance('quotation')->destroy(); }); toast('Quotation Updated!', 'info'); return redirect()->route('quotations.index'); } public function destroy(Quotation $quotation) { abort_if(Gate::denies('delete_quotations'), 403); $quotation->delete(); toast('Quotation Deleted!', 'warning'); return redirect()->route('quotations.index'); } }