mirror of https://github.com/4xmen/xshop.git
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.
247 lines
6.5 KiB
PHP
247 lines
6.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\AddressSaveRequest;
|
|
use App\Http\Requests\TicketSaveRequest;
|
|
use App\Models\Address;
|
|
use App\Models\Credit;
|
|
use App\Models\Customer;
|
|
use App\Models\Invoice;
|
|
use App\Models\Ticket;
|
|
use chillerlan\QRCode\Data\QRMatrix;
|
|
use chillerlan\QRCode\QRCode;
|
|
use chillerlan\QRCode\QROptions;
|
|
use chillerlan\Settings\SettingsContainerAbstract;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\App;
|
|
use PHPUnit\Util\Color;
|
|
use PDF;
|
|
|
|
|
|
class CustomerController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index()
|
|
{
|
|
//
|
|
if (!\Auth::guard('customer')->check()) {
|
|
return redirect()->route('sign');
|
|
}
|
|
$customer = Customer::whereId(\Auth::guard('customer')->id())->firstOrFail();
|
|
return view('website.customer', compact('customer'));
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function create()
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*
|
|
* @param \App\Models\Customer $customer
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function show(Customer $customer)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param \App\Models\Customer $customer
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function edit(Customer $customer)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \App\Models\Customer $customer
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update(Request $request, Customer $customer)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param \App\Models\Customer $customer
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function destroy(Customer $customer)
|
|
{
|
|
//
|
|
}
|
|
|
|
public function invoiceLang($lang, Invoice $invoice)
|
|
{
|
|
return $this->invoice($invoice);
|
|
}
|
|
|
|
public function invoice(Invoice $invoice)
|
|
{
|
|
$options = new QROptions([
|
|
'version' => 5,
|
|
'outputType' => QRCode::OUTPUT_MARKUP_SVG,
|
|
'eccLevel' => QRCode::ECC_L,
|
|
// 'imageTransparent' => true,
|
|
]);
|
|
$qr = new QRCode($options);
|
|
return view('website.invoice', compact('invoice', 'qr'));
|
|
}
|
|
|
|
|
|
public function qrLang($lang, $hash)
|
|
{
|
|
return $this->qr($hash);
|
|
}
|
|
|
|
public function qr($hash)
|
|
{
|
|
$invoice = Invoice::where('hash', $hash)->firstOrFail();
|
|
$options = new QROptions([
|
|
'version' => 5,
|
|
'outputType' => QRCode::OUTPUT_MARKUP_SVG,
|
|
'eccLevel' => QRCode::ECC_L,
|
|
// 'imageTransparent' => true,
|
|
]);
|
|
$qr = new QRCode($options);
|
|
return view('website.qr', compact('invoice', 'qr'));
|
|
}
|
|
|
|
public function pdfLang($lang, $hash)
|
|
{
|
|
return $this->pdf($hash);
|
|
}
|
|
|
|
public function pdf($hash)
|
|
{
|
|
$invoice = Invoice::where('hash', $hash)->firstOrFail();
|
|
$options = new QROptions([
|
|
'version' => 5,
|
|
'outputType' => QRCode::OUTPUT_MARKUP_SVG,
|
|
'eccLevel' => QRCode::ECC_L,
|
|
// 'imageTransparent' => true,
|
|
]);
|
|
$qr = new QRCode($options);
|
|
|
|
$data = [
|
|
'invoice' => $invoice,
|
|
'qr' => $qr,
|
|
];
|
|
$pdf = PDF::loadView('website.pdf', $data);
|
|
return $pdf->stream('website.pdf');
|
|
|
|
// $p = view('website.pdf',compact('invoice','qr'))->render();
|
|
}
|
|
|
|
public function SendTicket(TicketSaveRequest $request)
|
|
{
|
|
$t = new Ticket();
|
|
if ($request->has('title')) {
|
|
$t->title = $request->title;
|
|
} else {
|
|
if (Ticket::whereId($request->parent_id)->firstOrFail()->customer_id != auth('customer')->id()) {
|
|
return abort(403);
|
|
} else {
|
|
$t->parent_id = $request->parent_id;
|
|
}
|
|
}
|
|
$t->body = $request->body;
|
|
$t->customer_id = auth('customer')->id();
|
|
$t->save();
|
|
return redirect()->back()->with(['message' => __('Ticket has been sent')]);
|
|
}
|
|
|
|
public function ticketLang($lang, Ticket $ticket)
|
|
{
|
|
return $this->ticket($ticket);
|
|
}
|
|
|
|
public function ticket(Ticket $ticket)
|
|
{
|
|
if ($ticket->customer_id != auth('customer')->id()) {
|
|
return abort(403);
|
|
}
|
|
return view('website.ticket', compact('ticket'));
|
|
}
|
|
|
|
public function credit(Invoice $invoice)
|
|
{
|
|
$c = Customer::whereId(auth('customer')->id())->first();
|
|
if ($c->credit == 0) {
|
|
return redirect()->back()->with(['error' => __("You don't have any credit")]);
|
|
}
|
|
if ($c->credit > $invoice->total_price) {
|
|
$invoice->credit_price = $invoice->total_price;
|
|
$invoice->status = Invoice::COMPLETED;
|
|
$c->credit = $c->credit - $invoice->total_price;
|
|
} else {
|
|
$invoice->credit_price = $c->credit;
|
|
$c->credit = 0;
|
|
}
|
|
$invoice->save();
|
|
$c->save();
|
|
$cr = new Credit();
|
|
$cr->invoice_id = $invoice->id;
|
|
$cr->customer_id = $c->id;
|
|
$cr->amount = $invoice->credit_price;
|
|
$cr->save();
|
|
return redirect()->route('customer')->with(['message' => __('Credit applied')]);
|
|
}
|
|
|
|
public function saveAddress(AddressSaveRequest $request)
|
|
{
|
|
$ad = new Address();
|
|
$ad->address = $request->address;
|
|
$ad->customer_id = auth('customer')->id();
|
|
$ad->state = $request->state;
|
|
$ad->city = $request->city;
|
|
$ad->data = '{}';
|
|
$ad->save();
|
|
return redirect()->route('customer')->with(['message' => __('Address saved')]);
|
|
}
|
|
|
|
public function remAddressLang($lang, Address $address)
|
|
{
|
|
return $this->remAddress($address);
|
|
}
|
|
|
|
public function remAddress(Address $address)
|
|
{
|
|
if ($address->customer_id == auth('customer')->id()) {
|
|
$address->delete();
|
|
}
|
|
return redirect()->route('customer')->with(['message' => __('Address removed')]);
|
|
}
|
|
}
|