arcadiasuite/plus/app/Http/Controllers/API/CardapioController.php

295 lines
8.9 KiB
PHP

<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\CategoriaProduto;
use App\Models\CarrosselCardapio;
use App\Models\ConfiguracaoCardapio;
use App\Models\Produto;
use App\Models\Pedido;
use App\Models\ItemPedido;
use App\Models\ItemPizzaPedido;
use App\Models\ItemAdicional;
use App\Models\TamanhoPizza;
use App\Models\NotificaoCardapio;
use App\Models\ImpressoraPedidoProduto;
use App\Models\Nfe;
class CardapioController extends Controller
{
public function setConfig(Request $request){
$item = ConfiguracaoCardapio::where('api_token', $request->token)
->first();
if($item == null){
return response()->json("Configuração não encontrada!", 401);
}
return response()->json($item, 200);
}
public function categorias(Request $request){
$data = CategoriaProduto::where('empresa_id', $request->empresa_id)
->orderBy('nome', 'asc')
->where('status', 1)
->where('categoria_id', null)
->where('cardapio', 1)->get();
return response()->json($data, 200);
}
public function destaques(Request $request){
$data = CarrosselCardapio::where('empresa_id', $request->empresa_id)
->where('status', 1)->get();
return response()->json($data, 200);
}
public function config(Request $request){
$item = ConfiguracaoCardapio::where('empresa_id', $request->empresa_id)
->first();
return response()->json($item, 200);
}
public function categoria(Request $request, $id){
$item = CategoriaProduto::where('empresa_id', $request->empresa_id)
->where('id', $id)
->with('produtosCardapio')
->first();
return response()->json($item, 200);
}
public function produto(Request $request, $id){
$item = Produto::where('empresa_id', $request->empresa_id)
->where('id', $id)
->with(['adicionais', 'ingredientes'])
->first();
return response()->json($item, 200);
}
public function ingredientes(Request $request){
$produtos = [];
foreach($request->data as $c){
$produto = Produto::findOrFail($c['id']);
array_push($produtos, $produto);
}
$ingredientes = [];
$ingredientesTemp = [];
foreach($produtos as $p){
foreach($p->ingredientes as $i){
if(!in_array($i->ingrediente, $ingredientesTemp)){
array_push($ingredientesTemp, $i->ingrediente);
array_push($ingredientes, $i);
}
}
}
return response()->json($ingredientes, 200);
}
private function validaItemImpressao($produto_id){
$imprime = ImpressoraPedidoProduto::where('produto_id', $produto_id)->first();
return $imprime != null ? 0 : 1;
}
public function storePedido(Request $request){
$item = Pedido::where('empresa_id', $request->empresa_id)
->where('status', 1)
->where('em_atendimento', 1)
->where('mesa', $request->mesa)
->first();
if($item == null){
return response()->json("nada encontrado", 404);
}
//salvando itens
foreach($request->carrinho as $cartItem){
$cartItem = (object)$cartItem;
$observacao = $cartItem->observacao;
if($cartItem->remover_ingredientes != ''){
$observacao .= ' - remover: '. $cartItem->remover_ingredientes;
}
$estado = 'novo';
$prod = Produto::findOrFail($cartItem->produto_id);
if($prod->tempo_preparo){
$estado = 'pendente';
}
$impresso = $this->validaItemImpressao($cartItem->produto_id);
$itemPedido = ItemPedido::create([
'pedido_id' => $item->id,
'produto_id' => $cartItem->produto_id,
'observacao' => $observacao,
'quantidade' => $cartItem->quantidade,
'valor_unitario' => $cartItem->valor_unitario > 0 ? $cartItem->valor_unitario : $cartItem->produto_valor,
'sub_total' => $cartItem->sub_total,
'ponto_carne' => $cartItem->ponto_carne,
'tamanho_id' => $cartItem->tamanho_id,
'estado' => $estado,
'impresso' => $impresso
]);
foreach($cartItem->sabores as $s){
$s = (object)$s;
ItemPizzaPedido::create([
'item_pedido_id' => $itemPedido->id,
'produto_id' => $s->id
]);
}
foreach($cartItem->adicionais as $a){
$a = (object)$a;
if($a){
$dataItemAdicional = [
'item_pedido_id' => $itemPedido->id,
'adicional_id' => $a->adicional_id,
];
ItemAdicional::create($dataItemAdicional);
}
}
}
$item->sumTotal();
return response()->json($item, 200);
}
public function storeMesa(Request $request){
$item = Pedido::where('empresa_id', $request->empresa_id)
->where('status', 1)
->where('em_atendimento', 1)
->where('mesa', $request->mesa)
->first();
// dd($request->all());
if($item != null){
return response()->json("esta mesa já se encontra aberta", 401);
}
$item = Pedido::create([
'empresa_id' => $request->empresa_id,
'cliente_nome' => $request->nome,
'cliente_fone' => $request->telefone,
'mesa' => $request->mesa,
'total' => 0,
'comanda' => 'M'.$request->mesa,
'local_pedido' => 'App'
]);
return response()->json($item, 200);
}
public function conta(Request $request){
$item = Pedido::where('empresa_id', $request->empresa_id)
->where('status', 1)
->where('em_atendimento', 1)
->where('mesa', $request->mesa)
->with('itens')
->first();
foreach($item->itens as $it){
if($it->produto->tempo_preparo > 0){
$it->tempo_preparo = $it->tempoPreparoRestante();
}
}
return response()->json($item, 200);
}
public function chamarGarcom(Request $request){
$item = Pedido::where('empresa_id', $request->empresa_id)
->where('status', 1)
->where('mesa', $request->mesa)
->first();
if($item == null){
return response()->json("nada encontrado", 404);
}
$notificacao = NotificaoCardapio::create([
'empresa_id' => $request->empresa_id,
'mesa' => $request->mesa,
'tipo' => 'garcom'
]);
return response()->json($notificacao, 200);
}
public function tiposDePagamento(){
$data = Nfe::tiposPagamento();
$tipos = [];
foreach($data as $key => $t){
array_push($tipos, [
'codigo' => $key,
'nome' => $t
]);
}
return response()->json($tipos, 200);
}
public function finalizarConta(Request $request){
$item = Pedido::where('empresa_id', $request->empresa_id)
->where('status', 1)
->where('em_atendimento', 1)
->where('mesa', $request->mesa)
->first();
if($item == null){
return response()->json("nada encontrado", 404);
}
$notificacao = NotificaoCardapio::create([
'empresa_id' => $request->empresa_id,
'mesa' => $request->mesa,
'pedido_id' => $item->id,
'tipo' => 'fechar_mesa',
'observacao' => $request->observacao,
'avaliacao' => $request->avaliacao,
'tipo_pagamento' => $request->tipo_pagamento,
]);
$item->em_atendimento = 0;
$item->save();
return response()->json($notificacao, 200);
}
public function emAtendimento(Request $request){
$item = Pedido::where('empresa_id', $request->empresa_id)
->where('status', 1)
->where('em_atendimento', 1)
->where('mesa', $request->mesa)
->first();
if($item == null){
return response()->json("nada encontrado", 404);
}
return response()->json($item, 200);
}
public function pesquisa(Request $request){
$data = Produto::where('empresa_id', $request->empresa_id)
->where('nome', 'like', "%$request->pesquisa%")
->where('cardapio', 1)
->get();
return response()->json($data, 200);
}
public function tamanhosPizza(Request $request){
$data = TamanhoPizza::where('empresa_id', $request->empresa_id)
->get();
return response()->json($data, 200);
}
}