452 lines
16 KiB
PHP
452 lines
16 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Cardapio;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\ConfiguracaoCardapio;
|
|
use App\Models\CarrinhoCardapio;
|
|
use App\Models\Mesa;
|
|
use App\Models\ItemCarrinhoCardapio;
|
|
use App\Models\NotificaoCardapio;
|
|
use App\Models\ItemPizzaCarrinhoCardapio;
|
|
use App\Models\ItemCarrinhoAdicionalCardapio;
|
|
use App\Models\Produto;
|
|
use App\Models\ItemAdicional;
|
|
use App\Models\ItemPizzaPedido;
|
|
use App\Models\ItemPedido;
|
|
use App\Models\CategoriaProduto;
|
|
use App\Models\ImpressoraPedidoProduto;
|
|
use App\Models\Pedido;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class CarrinhoController extends Controller
|
|
{
|
|
public function __construct(){
|
|
// Session managed by Laravel
|
|
}
|
|
|
|
private function _getCarrinho(){
|
|
$data = [];
|
|
if(isset($_SESSION["session_cart_cardapio"])){
|
|
$data = CarrinhoCardapio::where('session_cart_cardapio', $_SESSION["session_cart_cardapio"])
|
|
->where('session_cart_user', $_SESSION["session_cart_user"])
|
|
->first();
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
public function index(Request $request){
|
|
|
|
$carrinho = $this->_getCarrinho();
|
|
$config = ConfiguracaoCardapio::findOrfail($request->config_id);
|
|
|
|
$mesa = Mesa::where('empresa_id', $config->empresa_id)->where('hash', $request->link)
|
|
->first();
|
|
|
|
// if($mesa->ocupada == 1){
|
|
// $pedido = Pedido::where('empresa_id', $mesa->empresa_id)
|
|
// ->where('status', 1)->orderBy('id', 'desc')
|
|
// ->first();
|
|
|
|
// $_SESSION['session_cart_cardapio'] = $pedido->session_cart_cardapio;
|
|
// // dd($pedido);
|
|
// $carrinho->session_cart_cardapio = $pedido->session_cart_cardapio;
|
|
// $carrinho->save();
|
|
// // session()->flash("flash_error", "Esta mesa já esta ocupada!");
|
|
// // return -1;
|
|
// }
|
|
|
|
if($mesa == null){
|
|
session()->flash("flash_error", "Mesa não encontrada!");
|
|
return redirect()->back();
|
|
}
|
|
|
|
$session_cart_user = null;
|
|
if(isset($_SESSION["session_cart_user"])){
|
|
$session_cart_user = $_SESSION["session_cart_user"];
|
|
}
|
|
|
|
$session_nome_cardapio = null;
|
|
if(isset($_SESSION["session_nome_cardapio"])){
|
|
$session_nome_cardapio = $_SESSION["session_nome_cardapio"];
|
|
}
|
|
|
|
$item = null;
|
|
if(isset($_SESSION["session_cart_cardapio"])){
|
|
$item = CarrinhoCardapio::where('session_cart_cardapio', $_SESSION["session_cart_cardapio"])
|
|
->first();
|
|
}
|
|
|
|
$categorias = CategoriaProduto::where('cardapio', 1)
|
|
->orderBy('nome', 'asc')
|
|
->where('status', 1)
|
|
->where('empresa_id', $config->empresa_id)->get();
|
|
|
|
$notSearch = true;
|
|
$pedido = null;
|
|
|
|
if($carrinho){
|
|
$pedido = Pedido::where('empresa_id', $carrinho->empresa_id)
|
|
->where('status', 1)->where('session_cart_cardapio', $carrinho->session_cart_cardapio)
|
|
->join('item_pedidos', 'item_pedidos.pedido_id', '=', 'pedidos.id')
|
|
->where('item_pedidos.nome_cardapio', $session_nome_cardapio)
|
|
->first();
|
|
}
|
|
|
|
$travaLimite = 0;
|
|
if($config->limite_pessoas_qr_code && $carrinho){
|
|
$contPedidos = Pedido::where('empresa_id', $carrinho->empresa_id)
|
|
->where('status', 1)->where('session_cart_cardapio', $carrinho->session_cart_cardapio)
|
|
->count();
|
|
|
|
if($contPedidos >= $config->limite_pessoas_qr_code){
|
|
$travaLimite = 1;
|
|
}
|
|
}
|
|
|
|
// echo $pedido;
|
|
// die;
|
|
|
|
$notInfoHeader = 1;
|
|
$link = $request->link;
|
|
|
|
return view('qr_code_cardapio.carrinho', compact('config', 'categorias', 'carrinho', 'notSearch', 'notInfoHeader', 'link',
|
|
'pedido', 'travaLimite', 'mesa'));
|
|
}
|
|
|
|
|
|
public function adicionar(Request $request){
|
|
// dd($request->all());
|
|
|
|
$config = ConfiguracaoCardapio::findOrfail($request->config_id);
|
|
$quantidade = (float)__convert_value_bd($request->quantidade);
|
|
if($request->produto_id){
|
|
$produto_id = $request->produto_id;
|
|
}else{
|
|
$produto_id = $request->pizza_id[0];
|
|
}
|
|
|
|
$produto = Produto::findOrFail($produto_id);
|
|
|
|
if($produto->gerenciar_estoque){
|
|
|
|
if(!$produto->estoque || $produto->estoque->quantidade < $quantidade){
|
|
session()->flash("flash_error", "Estoque insuficiente!");
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
try{
|
|
$carrinho = DB::transaction(function () use ($request, $config) {
|
|
|
|
if(!isset($_SESSION["session_cart_cardapio"])){
|
|
$session_cart_cardapio = Str::random(30);
|
|
$_SESSION['session_cart_cardapio'] = $session_cart_cardapio;
|
|
}else{
|
|
$session_cart_cardapio = $_SESSION['session_cart_cardapio'];
|
|
}
|
|
|
|
if(!isset($_SESSION["session_cart_user"])){
|
|
$session_cart_user = Str::random(30);
|
|
$_SESSION['session_cart_user'] = $session_cart_user;
|
|
}else{
|
|
$session_cart_user = $_SESSION['session_cart_user'];
|
|
}
|
|
|
|
if($request->produto_id){
|
|
$produto_id = $request->produto_id;
|
|
}else{
|
|
$produto_id = $request->pizza_id[0];
|
|
}
|
|
|
|
$adicionarSaborUnico = 0;
|
|
if(isset($request->tamanho_id)){
|
|
if(!isset($request->pizza_id)){
|
|
$adicionarSaborUnico = 1;
|
|
}
|
|
}
|
|
|
|
$carrinho = CarrinhoCardapio::where('session_cart_cardapio', $session_cart_cardapio)
|
|
->where('session_cart_user', $session_cart_user)
|
|
->first();
|
|
|
|
// dd($carrinho);
|
|
|
|
$quantidade = (float)__convert_value_bd($request->quantidade);
|
|
|
|
$itemCarrinho = null;
|
|
|
|
if(!isset($_SESSION["session_cart_user"])){
|
|
$session_cart_user = Str::random(30);
|
|
$_SESSION['session_cart_user'] = $session_cart_user;
|
|
}else{
|
|
$session_cart_user = $_SESSION['session_cart_user'];
|
|
}
|
|
|
|
if($carrinho == null){
|
|
//novo carrinho
|
|
|
|
$carrinho = CarrinhoCardapio::create([
|
|
'empresa_id' => $config->empresa_id,
|
|
'estado' => 'pendente',
|
|
'valor_total' => $request->sub_total,
|
|
'endereco_id' => null,
|
|
'valor_frete' => 0,
|
|
'session_cart_cardapio' => $session_cart_cardapio,
|
|
'session_cart_user' => $session_cart_user,
|
|
]);
|
|
$itemCarrinho = ItemCarrinhoCardapio::create([
|
|
'carrinho_id' => $carrinho->id,
|
|
'produto_id' => $produto_id,
|
|
'quantidade' => $quantidade,
|
|
'valor_unitario' => $request->sub_total/$quantidade,
|
|
'sub_total' => $request->sub_total,
|
|
'observacao' => $request->observacao ?? '',
|
|
'tamanho_id' => isset($request->tamanho_id) ? $request->tamanho_id : null
|
|
]);
|
|
session()->flash("flash_success", "Produto adicionado ao carrinho!");
|
|
|
|
}else{
|
|
|
|
$itemCarrinho = ItemCarrinhoCardapio::create([
|
|
'carrinho_id' => $carrinho->id,
|
|
'produto_id' => $produto_id,
|
|
'quantidade' => $quantidade,
|
|
'valor_unitario' => $request->sub_total/$quantidade,
|
|
'sub_total' => $request->sub_total,
|
|
'observacao' => $request->observacao ?? '',
|
|
'tamanho_id' => isset($request->tamanho_id) ? $request->tamanho_id : null
|
|
]);
|
|
|
|
session()->flash("flash_success", "Produto adicionado ao carrinho!");
|
|
}
|
|
|
|
if($request->adicional){
|
|
for($i=0; $i<sizeof($request->adicional); $i++){
|
|
|
|
ItemCarrinhoAdicionalCardapio::create([
|
|
'item_carrinho_id' => $itemCarrinho->id,
|
|
'adicional_id' => $request->adicional[$i]
|
|
]);
|
|
}
|
|
}
|
|
if(isset($request->pizza_id)){
|
|
|
|
for($i=0; $i<sizeof($request->pizza_id); $i++){
|
|
ItemPizzaCarrinhoCardapio::create([
|
|
'item_carrinho_id' => $itemCarrinho->id,
|
|
'produto_id' => $request->pizza_id[$i]
|
|
]);
|
|
}
|
|
}
|
|
|
|
if($adicionarSaborUnico){
|
|
ItemPizzaCarrinhoCardapio::create([
|
|
'item_carrinho_id' => $itemCarrinho->id,
|
|
'produto_id' => $produto_id
|
|
]);
|
|
}
|
|
return $carrinho;
|
|
});
|
|
}catch(\Exception $e){
|
|
// echo $e->getMessage();
|
|
// die;
|
|
session()->flash("flash_error", "Algo deu errado: " . $e->getMessage());
|
|
return redirect()->back();
|
|
|
|
}
|
|
$this->_atualizaValorCarrinho($carrinho->id);
|
|
|
|
return redirect()->route('cardapio.carrinho', 'link='.$request->link);
|
|
}
|
|
|
|
private function _atualizaValorCarrinho($carrinho_id){
|
|
$item = CarrinhoCardapio::findOrfail($carrinho_id);
|
|
$item->valor_total = $item->itens->sum('sub_total') + $item->valor_frete;
|
|
|
|
$item->save();
|
|
}
|
|
|
|
public function enviarPedido(Request $request){
|
|
$config = ConfiguracaoCardapio::findOrfail($request->config_id);
|
|
$mesa = Mesa::where('empresa_id', $config->empresa_id)->where('hash', $request->link)
|
|
->first();
|
|
|
|
// dd($mesa);
|
|
|
|
if(isset($request->telefone)){
|
|
|
|
$verifica = Pedido::where('empresa_id', $mesa->empresa_id)
|
|
->where('cliente_fone', $request->telefone)
|
|
->where('status', 1)
|
|
->first();
|
|
|
|
if($verifica != null){
|
|
session()->flash("flash_error", "Você já fez pedido em outra mesa!");
|
|
return redirect()->back();
|
|
}
|
|
|
|
$_SESSION['session_telefone_cardapio'] = $request->telefone;
|
|
}
|
|
|
|
if(isset($request->nome)){
|
|
$_SESSION['session_nome_cardapio'] = $request->nome;
|
|
}
|
|
|
|
// verifica ja esta em outra mesa
|
|
|
|
if(!isset($_SESSION["session_cart_user"])){
|
|
$session_cart_user = Str::random(30);
|
|
$_SESSION['session_cart_user'] = $session_cart_user;
|
|
}else{
|
|
$session_cart_user = $_SESSION['session_cart_user'];
|
|
}
|
|
|
|
$carrinho = $this->_getCarrinho();
|
|
|
|
if($mesa->ocupada == 1){
|
|
$pedido = Pedido::where('empresa_id', $mesa->empresa_id)
|
|
->where('status', 1)->orderBy('id', 'desc')
|
|
->where('mesa_id', $mesa->id)
|
|
->first();
|
|
|
|
$_SESSION['session_cart_cardapio'] = $pedido->session_cart_cardapio;
|
|
// dd($carrinho);
|
|
if($carrinho){
|
|
$carrinho->session_cart_cardapio = $pedido->session_cart_cardapio;
|
|
$carrinho->save();
|
|
}
|
|
// session()->flash("flash_error", "Esta mesa já esta ocupada!");
|
|
// return -1;
|
|
}
|
|
|
|
$pedido = DB::transaction(function () use ($request, $config, $mesa, $session_cart_user, $carrinho) {
|
|
|
|
$pedido = Pedido::where('empresa_id', $carrinho->empresa_id)
|
|
->where('status', 1)->where('session_cart_cardapio', $carrinho->session_cart_cardapio)
|
|
->first();
|
|
|
|
if($pedido == null){
|
|
$_SESSION['session_nome_cardapio'] = $request->nome;
|
|
$_SESSION['session_telefone_cardapio'] = $request->telefone;
|
|
|
|
$pedido = Pedido::create([
|
|
'empresa_id' => $config->empresa_id,
|
|
'cliente_nome' => $request->nome,
|
|
'cliente_fone' => $request->telefone,
|
|
'mesa_id' => $mesa->id,
|
|
'confirma_mesa' => $config->confirma_mesa,
|
|
'total' => $carrinho->valor_total,
|
|
'session_cart_cardapio' => $carrinho->session_cart_cardapio,
|
|
'session_cart_user' => $session_cart_user,
|
|
]);
|
|
$carrinho->cliente_nome = $request->nome;
|
|
$carrinho->save();
|
|
|
|
NotificaoCardapio::create([
|
|
'empresa_id' => $config->empresa_id,
|
|
'mesa' => $pedido->_mesa->nome,
|
|
'pedido_id' => $pedido->id,
|
|
'tipo' => 'fechar_mesa',
|
|
'observacao' => 'Abrindo mesa',
|
|
'avaliacao' => '',
|
|
'tipo_pagamento' => '',
|
|
]);
|
|
|
|
$mesa->ocupada = 1;
|
|
$mesa->save();
|
|
|
|
}else{
|
|
$pedido->total += $carrinho->valor_total;
|
|
$pedido->save();
|
|
}
|
|
|
|
foreach($carrinho->itens as $i){
|
|
$impresso = $this->validaItemImpressao($i->produto_id);
|
|
|
|
$itemPedido = ItemPedido::create([
|
|
'pedido_id' => $pedido->id,
|
|
'produto_id' => $i->produto_id,
|
|
'observacao' => $i->observacao,
|
|
'estado' => 'novo',
|
|
'quantidade' => $i->quantidade,
|
|
'valor_unitario' => $i->valor_unitario,
|
|
'sub_total' => $i->sub_total,
|
|
'tamanho_id' => $i->tamanho_id,
|
|
'impresso' => $impresso,
|
|
'nome_cardapio' => $_SESSION['session_nome_cardapio'],
|
|
'telefone_cardapio' => $_SESSION['session_telefone_cardapio'],
|
|
]);
|
|
|
|
foreach($i->adicionais as $a){
|
|
$itemAdicional = ItemAdicional::create([
|
|
'item_pedido_id' => $itemPedido->id,
|
|
'adicional_id' => $a->adicional_id
|
|
]);
|
|
}
|
|
|
|
foreach($i->pizzas as $pizza){
|
|
ItemPizzaPedido::create([
|
|
'item_pedido_id' => $itemPedido->id,
|
|
'produto_id' => $pizza->produto_id
|
|
]);
|
|
}
|
|
}
|
|
|
|
foreach($carrinho->itens as $it){
|
|
$it->adicionais()->delete();
|
|
$it->sabores()->delete();
|
|
$it->delete();
|
|
}
|
|
$carrinho->valor_total = 0;
|
|
$carrinho->save();
|
|
return $pedido;
|
|
});
|
|
|
|
if(isset($pedido->id)){
|
|
session()->flash("flash_success", "Pedido realizado!");
|
|
}
|
|
return redirect()->route('cardapio.index', ['link='.$request->link]);
|
|
|
|
}
|
|
|
|
private function validaItemImpressao($produto_id){
|
|
$imprime = ImpressoraPedidoProduto::where('produto_id', $produto_id)->first();
|
|
return $imprime != null ? 0 : 1;
|
|
}
|
|
|
|
public function pedirFechar(Request $request){
|
|
|
|
$config = ConfiguracaoCardapio::findOrfail($request->config_id);
|
|
$carrinho = $this->_getCarrinho();
|
|
|
|
$pedido = Pedido::where('empresa_id', $carrinho->empresa_id)
|
|
->where('status', 1)->where('session_cart_cardapio', $carrinho->session_cart_cardapio)
|
|
->first();
|
|
|
|
$pedido->em_atendimento = 0;
|
|
$pedido->save();
|
|
|
|
NotificaoCardapio::create([
|
|
'empresa_id' => $config->empresa_id,
|
|
'mesa' => $pedido->_mesa->nome,
|
|
'pedido_id' => $pedido->id,
|
|
'tipo' => 'fechar_mesa',
|
|
'observacao' => $request->observacao,
|
|
'avaliacao' => $request->avaliacao,
|
|
'tipo_pagamento' => $request->tipo_pagamento,
|
|
]);
|
|
|
|
$_SESSION["session_cart_cardapio"] = null;
|
|
$_SESSION["session_nome_cardapio"] = null;
|
|
$_SESSION["session_telefone_cardapio"] = null;
|
|
|
|
session()->flash("flash_success", "Mesa finalizada!");
|
|
return redirect()->route('cardapio.index', ['link='.$request->link]);
|
|
|
|
}
|
|
|
|
}
|