first(); } return $data; } public function index(Request $request){ $carrinho = $this->_getCarrinho(); $config = MarketPlaceConfig::findOrfail($request->loja_id); $item = null; if(isset($_SESSION["session_cart_delivery"])){ $item = CarrinhoDelivery::where('session_cart_delivery', $_SESSION["session_cart_delivery"]) ->first(); } $temServico = 0; $temProduto = 0; $tempoServico = 0; if($item){ foreach($item->itens as $i){ if($i->servico){ $temServico = 1; $tempoServico += $i->servico->tempo_servico + $i->servico->tempo_adicional; } if($i->produto) $temProduto = 1; } } $clienteLogado = $this->_getClienteLogado(); $categorias = CategoriaProduto::where('delivery', 1) ->orderBy('nome', 'asc') ->where('status', 1) ->where('empresa_id', $config->empresa_id)->get(); $notSearch = true; $funcionamento = $this->getFuncionamento($config); $notInfoHeader = 1; $config->tipo_entrega = json_decode($config->tipo_entrega); return view('food.carrinho', compact('config', 'categorias', 'carrinho', 'notSearch', 'clienteLogado', 'funcionamento', 'notInfoHeader', 'temServico', 'temProduto', 'tempoServico')); } private function getFuncionamento($config){ $dia = date('w'); $hora = date('H:i'); $dia = FuncionamentoDelivery::getDia($dia); $funcionamento = FuncionamentoDelivery::where('dia', $dia) ->where('empresa_id', $config->empresa_id)->first(); if($funcionamento != null){ $atual = strtotime(date('Y-m-d H:i')); $dataHoje = date('Y-m-d'); $inicio = strtotime($dataHoje . " " . $funcionamento->inicio); $fim = strtotime($dataHoje . " " . $funcionamento->fim); if($atual > $inicio && $atual < $fim){ $funcionamento->aberto = true; }else{ $funcionamento->aberto = false; } return $funcionamento; } return null; } public function adicionar(Request $request){ // dd($request->all()); $config = MarketPlaceConfig::findOrfail($request->loja_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->combo){ foreach($produto->itensDoCombo as $c){ if(!$c->produtoDoCombo->estoque || $c->produtoDoCombo->estoque->quantidade <= 0){ session()->flash("flash_error", "Estoque insuficiente!"); return redirect()->back(); } } }else{ 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_delivery"])){ $session_cart_delivery = Str::random(30); $_SESSION['session_cart_delivery'] = $session_cart_delivery; }else{ $session_cart_delivery = $_SESSION['session_cart_delivery']; } if($request->produto_id){ $produto_id = $request->produto_id; }else{ $produto_id = $request->pizza_id[0]; } // dd($request->all()); $carrinho = CarrinhoDelivery::where('session_cart_delivery', $session_cart_delivery) ->first(); $quantidade = (float)__convert_value_bd($request->quantidade); $itemCarrinho = null; if($carrinho == null){ //novo carrinho $clienteLogado = $this->_getClienteLogado(); $cli = Cliente::where('uid', $clienteLogado)->first(); $carrinho = CarrinhoDelivery::create([ 'cliente_id' => $cli ? $cli->id : null, 'empresa_id' => $config->empresa_id, 'estado' => 'pendente', 'valor_total' => $request->sub_total, 'endereco_id' => null, 'valor_frete' => 0, 'session_cart_delivery' => $session_cart_delivery ]); $itemCarrinho = ItemCarrinhoDelivery::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 = ItemCarrinhoDelivery::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; $iadicional); $i++){ ItemCarrinhoAdicionalDelivery::create([ 'item_carrinho_id' => $itemCarrinho->id, 'adicional_id' => $request->adicional[$i] ]); } } if(isset($request->pizza_id)){ for($i=0; $ipizza_id); $i++){ ItemPizzaCarrinho::create([ 'item_carrinho_id' => $itemCarrinho->id, 'produto_id' => $request->pizza_id[$i] ]); } } 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('food.carrinho', 'link='.$config->loja_id); } private function _atualizaValorCarrinho($carrinho_id){ $item = CarrinhoDelivery::findOrfail($carrinho_id); $item->valor_total = $item->itens->sum('sub_total') + $item->valor_frete; $item->save(); } private function _getClienteLogado(){ if(isset($_SESSION['cliente_delivery'])){ return $_SESSION['cliente_delivery']; } return null; } public function updateQuantidades(Request $request){ $session_cart_delivery = $_SESSION['session_cart_delivery']; $itemCarrinho = ItemCarrinhoDelivery::findOrFail($request->item_id); if($request->quantidade == 0){ $itemCarrinho->adicionais()->delete(); $itemCarrinho->delete(); }else{ $itemCarrinho->quantidade = $request->quantidade; $itemCarrinho->sub_total = $itemCarrinho->valor_unitario * $request->quantidade; $itemCarrinho->save(); } $carrinho = CarrinhoDelivery::where('session_cart_delivery', $session_cart_delivery) ->first(); $this->_atualizaValorCarrinho($carrinho->id); session()->flash("flash_success", "Carrinho atualizado!"); return redirect()->back(); } public function removeItem($id){ $session_cart_delivery = $_SESSION['session_cart_delivery']; $itemCarrinho = ItemCarrinhoDelivery::findOrFail($id); $itemCarrinho->adicionais()->delete(); $itemCarrinho->delete(); $carrinho = CarrinhoDelivery::where('session_cart_delivery', $session_cart_delivery) ->first(); $this->_atualizaValorCarrinho($carrinho->id); session()->flash("flash_success", "Carrinho atualizado!"); return redirect()->back(); } public function adicionarServico(Request $request){ // dd($request->all()); $config = MarketPlaceConfig::findOrfail($request->loja_id); try{ $carrinho = DB::transaction(function () use ($request, $config) { if(!isset($_SESSION["session_cart_delivery"])){ $session_cart_delivery = Str::random(30); $_SESSION['session_cart_delivery'] = $session_cart_delivery; }else{ $session_cart_delivery = $_SESSION['session_cart_delivery']; } $servico_id = $request->servico_id; $carrinho = CarrinhoDelivery::where('session_cart_delivery', $session_cart_delivery) ->first(); $quantidade = __convert_value_bd($request->quantidade); $itemCarrinho = null; // dd($request->all()); if($carrinho == null){ //novo carrinho $clienteLogado = $this->_getClienteLogado(); $cli = Cliente::where('uid', $clienteLogado)->first(); $carrinho = CarrinhoDelivery::create([ 'cliente_id' => $cli ? $cli->id : null, 'empresa_id' => $config->empresa_id, 'estado' => 'pendente', 'valor_total' => $request->sub_total, 'endereco_id' => null, 'valor_frete' => 0, 'session_cart_delivery' => $session_cart_delivery ]); $itemCarrinho = ItemCarrinhoDelivery::create([ 'carrinho_id' => $carrinho->id, 'servico_id' => $servico_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", "Serviço adicionado ao carrinho!"); }else{ $itemCarrinho = ItemCarrinhoDelivery::create([ 'carrinho_id' => $carrinho->id, 'servico_id' => $servico_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!"); } return $carrinho; }); }catch(\Exception $e){ echo $e->getMessage(); die; } $this->_atualizaValorCarrinho($carrinho->id); return redirect()->route('food.carrinho', 'link='.$config->loja_id); } }