403Webshell
Server IP : 54.94.228.101  /  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/PerfilController.php
<?php

namespace App\Http\Controllers\Website;

use App\Http\Requests;
use App\Services\OfertaService;
use Illuminate\Http\Request;
use App\Http\Controllers\BaseController;

use App\Modules\Produto\Models\Produto;
use App\Modules\Cadastro\Models\Cadastro;
use App\Modules\ConfrariaConvite\Models\ConfrariaConvite;
use App\Modules\ConfrariaMembro\Models\ConfrariaMembro;
use App\Modules\ConfrariaConfig\Models\ConfrariaConfig;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\ContaCorrente\Models\ContaCorrente;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\CondicaoComercial\Models\CondicaoComercial;
use App\Modules\CadastroCartao\Models\CadastroCartao;
use App\Modules\Pais\Models\Pais;
use App\Modules\CadastroEndereco\Models\CadastroEndereco;
use App\Modules\PedidoEntrega\Models\PedidoEntrega;
use App\Modules\PedidoEntregaHasStatus\Models\PedidoEntregaHasStatus;
use App\Modules\Frete\Models\Frete;
use App\Modules\Cidade\Models\Cidade;
use App\Modules\Estado\Models\Estado;
use App\Modules\ProdutoAvaliacao\Models\ProdutoAvaliacao;
use App\Modules\AdegaViradaParticipanteIndicacao\Models\AdegaViradaParticipanteIndicacao;
use App\Modules\Empresa\Models\Empresa;
use Illuminate\Support\Str;

use App\Modules\Confraria\Services\ConfrariaService;
use App\Services\GeralService;
use App\Services\CepService;
use App\Services\CartService;
use App\Modules\AdegaVirada\Services\AdegaViradaService;



use App\User;
use App\BasicInfo;

use Cart;
use DB;

use Sentinel;

class PerfilController extends BaseController
{

    private $apiKey; // 'ak_test_SIQg7rtzZFTpJx0ZqXQhVua1dPA5X8'

    /**
     * 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');

        $this->apiKey = GeralService::getApiKeyPagarMe();
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $data = array();

        $data['cliente'] = GeralService::buscarClienteLogado();

        $data['titulo_pagina'] = 'Meus';
        $data['subtitulo_pagina'] = 'Dados';

        $data['cupomIndicado'] = CartService::buscarCupomIndicado();

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/index', $data);
    }

    public function meusVinhos(){

        $data = array();

        $adegaAberta = GeralService::buscarAdegaAberta();

        $data['meusVinhos']          = GeralService::buscarMeusVinhos(['somar' => true]);
        $data['meusVinhosPendentes'] = GeralService::buscarMeusVinhosPendentes();
        $data['meusVinhosPreVenda']  = GeralService::buscarMeusVinhosPreVenda();

        $totalDesconto   = 0;
        $totalCashback   = 0;
        $id_pedido_venda = 0;
        foreach ($data['meusVinhosPendentes'] as $produto) {
            if($id_pedido_venda != $produto->id_pedido_venda){
                $totalDesconto += $produto->total_desconto_pedido;
                $id_pedido_venda = $produto->id_pedido_venda;
                if($produto->total_desconto_pedido == 0){
                    $Cashback = ContaCorrente::where('pedido_venda_id', $produto->id_pedido_venda)->where('tipo_movimento', 'E')->first();
                    if($Cashback){
                        $totalCashback += $Cashback->valor;
                    }
                }
            }
        }

        $data['total_desconto_pedido'] = $totalDesconto;
        $data['total_cashback']        = $totalCashback;
        
        $data['cadastro']            = GeralService::buscarClienteLogado();

        if(!$data['cadastro'])
            return redirect('/');

        $data['tentativasCartao']    = CadastroCartao::where('cadastro_id', $data['cadastro']->id)->where('empresa_id', $data['cadastro']->empresa_id)->whereDate('data_cadastro', date('Y-m-d'))->where('ativo', 0)->count();

        if($data['cadastro'] && $adegaAberta){
            GeralService::recalcularAdega($data['cadastro']->id, FALSE, $adegaAberta->id, $adegaAberta->confraria_id);
            $adegaAberta = GeralService::buscarAdegaAberta();
        }

        $pagarMe =  new \PagarMe\Sdk\PagarMe($this->apiKey);

        foreach ($data['cadastro']->cartoes as $key => $cadastroCartao) {
            try {
                $cadastroCartao->info = $pagarMe->card()->get($cadastroCartao->cartao_id);
            } catch (\Exception $e) {
                unset($data['cadastro']->cartoes[$key]);
            }
        }

        $data['informacoesBasicasAdega'] = GeralService::buscarInformacoesBasicasAdegaAberta();

        $data['listaPaises'] = Pais::orderBy('nome', 'ASC')->get();

        $params = [
            'id_cliente' => $data['cadastro'] ? $data['cadastro']->id : null,
            'adega' => $adegaAberta
        ];
        $data['enderecos'] = GeralService::buscarEnderecosCliente($params);

        $data['titulo_pagina'] = 'Adega';
        $data['subtitulo_pagina'] = 'Virtual';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        $data['horas_retirada'] = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00'];
        $data['data_retirada']  = GeralService::calculaDataRetirada();
        $data['retirada_local'] = CadastroEndereco::select('id')->where('cadastro_id', $data['cadastro']->id)->where('estado_id', 23)->first();

        $data['idTipoMasterclass'] = DB::table('tipo_de_produto')
            ->where('slug', 'masterclass')
            ->value('id');

        return view('perfil/meus-vinhos', $data);
    }

    public function meusCartoes(){

        $data = [];

        $cadastro        = GeralService::buscarClienteLogado();
        $data['cartoes'] = CartService::buscarCartoesCliente();
        $data['tentativasCartao'] = CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->whereDate('data_cadastro', date('Y-m-d'))->where('ativo', 0)->count();

        $data['titulo_pagina'] = 'Meus';
        $data['subtitulo_pagina'] = 'Cartões';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/meus-cartoes', $data);
    }

    public function meusEnderecos(){
        $data = array();

        $data['cadastro'] = GeralService::buscarClienteLogado();
        $data['listaPaises'] = Pais::orderBy('nome', 'ASC')->get();

        $data['titulo_pagina'] = 'Meus';
        $data['subtitulo_pagina'] = 'Endereços';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/meus-enderecos', $data);
    }

    public function meuCashback(){

        $data = array();

        $data['info'] = \App\BasicInfo::find(1);

        if($data['info']->validade_cashback <= 0){
            return redirect('/');
        }

        $data['cadastro'] = GeralService::buscarClienteLogado();

        $data['titulo_pagina']    = 'Meu';
        $data['subtitulo_pagina'] = 'Cashback';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/meu-cashback', $data);
    }

    public function minhaCarteira(){

        $data = array();

        $data['info'] = \App\BasicInfo::find(1);

        if($data['info']->validade_creditos <= 0){
            return redirect('/');
        }

        $data['cadastro'] = GeralService::buscarClienteLogado();

        $data['titulo_pagina'] = 'Minha';
        $data['subtitulo_pagina'] = 'Carteira';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/minha-carteira', $data);
    }

    public function minhaConfraria(){

        $data = array();

        $data['cadastro'] = GeralService::buscarClienteLogado();

        $data['confraria'] = $data['cadastro']->confraria;

        $data['membro'] = $data['cadastro']->confrariaMembro;

        $data['convites'] = $data['cadastro']->confrariaConvites;

        $data['titulo_pagina'] = 'Confraria';
        $data['subtitulo_pagina'] = '';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        $data['link'] = '';
        if($data['confraria']){
            $data['link'] = ConfrariaService::gerarUrlConvite($data['confraria']->codigo);
        }

        return view('perfil/minha-confraria', $data);
    }

    public function salvarConviteConfraria(Request $request){

        $clienteLogado = GeralService::buscarClienteLogado();

        if($clienteLogado->confrariaMembro){
            return response()->json(array(
                'status'  => false,
                'message' => "Você já faz parte de uma Confraria: {$clienteLogado->confrariaMembro->confraria->nome}!"
            ));
        }

        $ConfrariaConvite = ConfrariaConvite::where('id', $request->input('convite_id'))->first();

        $confraria = $ConfrariaConvite->confraria;
        $basicInfo = \App\BasicInfo::first();

        if(count($confraria->membros) >= $basicInfo->max_membros_confraria){

            $ConfrariaConvite->situacao   = 'E'; //Erro
            $ConfrariaConvite->observacao = 'Confraria Lotada!';
            $ConfrariaConvite->save();

            return response()->json(array(
                'status'  => false,
                'message' => "Esta confraria já atingiu o máximo de membros!"
            ));
        }

        $ConfrariaConvite->situacao = 'A'; //Aceito
        $ConfrariaConvite->save();

        $ConfrariaMembro                       = new ConfrariaMembro;
        $ConfrariaMembro->confraria_id         = $ConfrariaConvite->confraria_id;
        $ConfrariaMembro->cadastro_id          = $clienteLogado->id;
        $ConfrariaMembro->confraria_convite_id = $ConfrariaConvite->id;
        $ConfrariaMembro->data_cadastro        = date('Y-m-d H:i:s');
        $ConfrariaMembro->origem               = $ConfrariaConvite->origem;
        $ConfrariaMembro->elegivel_kit         = $ConfrariaConvite->elegivel_kit;
        $ConfrariaMembro->save();

        return response()->json(array(
            'status'  => true,
            'message' => 'Convite aceito com sucesso!'
        ));

    }

    public function minhasEntregas(){
        $data = array();

        $data['entregas'] = GeralService::buscarMinhasEntregas();

        $data['titulo_pagina'] = 'Minhas';
        $data['subtitulo_pagina'] = 'Entregas';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/minhas-entregas', $data);
    }

    public function meusCupons(){
        $usuario = GeralService::buscarClienteLogado();
        
        $data = [];
        $data['cupons'] = GeralService::buscarMeusCupons();

        $data['titulo_pagina']    = 'Meus';
        $data['subtitulo_pagina'] = 'Cupons';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/meus-cupons', $data);
    }

    public function cuponsAdegaDaVirada(){

        $anoEdicao = 2022;
        $adegaViradaInfo = AdegaViradaService::buscarAdegaVirada($anoEdicao, TRUE);

        if(!$adegaViradaInfo || (($adegaViradaInfo) && (!$adegaViradaInfo->ativo || date('Y-m-d H:i:s') < $adegaViradaInfo->data_ativacao))){
            return redirect('/');
        }

        $usuario = GeralService::buscarClienteLogado();
        if(!$usuario)
            return redirect('/login?redirect=' . url('/perfil/cupons-adega-da-virada'));
        
        $data = [];
        $data['cupons'] = GeralService::buscarMeusCupons();

        $anoEdicao = 2022;
        $data['participando'] = isset($usuario->adegaViradaParticipante) && $usuario->adegaViradaParticipante->participando  ? true : false;
        $data['titulo_pagina']    = 'Cupons';
        $data['subtitulo_pagina'] = 'Adega da Virada';
        $data['adegaVirada'] = $adegaViradaInfo;
        $data['adegaViradaParticipante'] = $usuario->adegaViradaParticipante;
        
        $data['ofertaDia'] = GeralService::buscarOfertaDia();

        $data['configMenuLateral'] = GeralService::configMenuLateral();
        $data['regulamentoStatus'] = AdegaViradaService::regulamentoStatus(); 
        $data['indicacoes'] = AdegaViradaService::buscarIndicacoes(); 
        $data['codigo'] =   isset($usuario->adegaViradaParticipante) ? $usuario->adegaViradaParticipante->codigo : '';

        // Se o usuário logado foi indicado por um amigo, mostrar o código para ele usar
        $data['amigoQueIndicou'] = AdegaViradaParticipanteIndicacao::where('cadastro_id', $usuario->id)
        ->with('participante.cadastro')
        ->first();

        if(!$data['participando'])
            $data['cuponsCliente'] = [];
         else
            $data['cuponsCliente'] = AdegaViradaService::buscarCuponsCliente(false, $anoEdicao);

        return view('perfil/cupons-adega-da-virada', $data);
    }

    public function meusPagamentos($pedido_id = FALSE){

        $data = array();

        $data['pedido_id']  = $pedido_id;
        $data['pagamentos'] = GeralService::buscarMeusPagamentos();
        $empresas           = Empresa::all();
        $pagarMe            = [];
        foreach ($empresas as $empresa) {
            $apiKey = $empresa->api_key_pagar_me;
            $pagarMe[$empresa->id] =  new \PagarMe\Sdk\PagarMe($apiKey);
        }

        foreach ($data['pagamentos'] as $pagamento) {
            if($pagamento->transacao_id){
                $pagamento->transaction = $pagarMe[$pagamento->empresa_id]->transaction()->get($pagamento->transacao_id);
            }

            $pagamento->quantidade_produtos = 0;
            foreach ($pagamento->produtos as $produto) {
                $pagamento->quantidade_produtos += $produto->quantidade;
            }

            switch ($pagamento->tipo_deposito) {
                case 'D': $pagamento->tipo = 'Depósito'; break;
                case 'DOC': $pagamento->tipo = 'DOC'; break;
                case 'TED': $pagamento->tipo = 'TED'; break;
                case 'PIX': $pagamento->tipo = 'PIX'; break;
                case 'CASH': $pagamento->tipo = 'CASH'; break;
                case 'BRD': $pagamento->tipo = 'BRINDE'; break;
                case 'INT': $pagamento->tipo = 'INTERNO'; break;
            }
            //print_r($pagamento->transaction->getCard());die();
        }

        $data['titulo_pagina'] = 'Meus';
        $data['subtitulo_pagina'] = 'Pagamentos';

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/meus-pagamentos', $data);
    }



    public function meuHistorico(){
        $data = array();

        $data['titulo_pagina'] = 'Meu';
        $data['subtitulo_pagina'] = 'Histórico';

        $data['pedidosPaises'] = GeralService::buscarComprasPais();
        $data['pedidosTipos'] = GeralService::buscarComprasTipo();
        $data['pedidosSafras'] = GeralService::buscarComprasSafra();


        $data['totalGarrafas'] = $data['pedidosPaises']['quantidadeTotalPorPais'];
        // + $data['pedidosTipos']['quantidadeTotalPorTipo'] + $data['pedidosSafras']['quantidadeTotalPorSafra'];

        $data['valorTotal'] = $data['pedidosPaises']['valorTotalPorPais'];
        // + $data['pedidosTipos']['valorTotalPorTipo'] + $data['pedidosSafras']['valorTotalPorSafra'];

        $data['valorTotalEconomizado'] = $data['pedidosPaises']['valorTotalEconomizadoPorPais'];
        // + $data['pedidosTipos']['valorTotalPorTipo'] + $data['pedidosSafras']['valorTotalPorSafra'];

        $data['listaProdutosComprados'] = GeralService::buscarMeuHistorico();

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/meu-historico', $data);
    }


    public function buscarHistoricoAvaliacao(Request $request){
        $post = $request->input();
        $data['listaProdutosComprados'] = GeralService::buscarMeuHistorico($post['query']);

        $data['configMenuLateral'] = GeralService::configMenuLateral();

        return view('perfil/meu-historico-avaliacao', $data);
    }

    public function salvarAvaliacao(Request $request){
        $post = $request->input();
        
        $user = Sentinel::getUser();
        $cadastroId = DB::table('cadastro')
        ->where('user_id', $user->id)
        ->value('id');

        DB::table('produto_avaliacao')->insert([
            'id_cadastro' => $cadastroId,
            'id_produto' => $post['id_produto'],
            'valor' => $post['valor'],
            'experiencia' => $post['experiencia']
        ]);

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




    public function excluirCartao(Request $request){

        $post = $request->input();

        $cadastro = GeralService::buscarClienteLogado();

        $cartao = CadastroCartao::where('cadastro_id', $cadastro->id)->where('id', $post['id'])->where('ativo', 1)->first();

        if($cartao){

            $cartao->ativo   = 0;
            $cartao->retorno = 'Excluído';
            $cartao->data_exclusao = date('Y-m-d H:i:s');
            $cartao->save();

            return response()->json(array(
                'status' => true,
                'message' => 'Cartão removido com sucesso!'
            ));
        }else{
            return response()->json(array(
                'status' => false,
                'message' => 'Cartão inválido'
            ));
        }

    }

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

        $cadastro = GeralService::buscarClienteLogado();

		  $numeroPde = PedidoEntrega::where('id_cadastro_endereco', $post['id'])->count();

		  if($numeroPde > 0){
              CadastroEndereco::where('id', $post['id'])
                  ->update([
                      'deletado' => 1,
                      'deleted_at' => date('Y-m-d H:i:s')
                  ]);

              return response()->json(array(
                  'status' => true,
                  'message' => 'Endereço removido com sucesso!'
              ));
		  }

        $endereco = CadastroEndereco::where('cadastro_id', $cadastro->id)->where('id', $post['id'])->first();

        if($endereco){

            $endereco->delete();

            return response()->json(array(
                'status' => true,
                'message' => 'Endereço removido com sucesso!'
            ));
        }else{
            return response()->json(array(
                'status' => false,
                'message' => 'Endereço inválido'
            ));
        }

    }

    public function confirmarEntrega(Request $request){

        $post     = $request->input();
        $user     = Sentinel::getUser();
        $cadastro = Cadastro::where('user_id', $user->id)->first();

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

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

            $endereco = CadastroEndereco::where('cadastro_id', $cadastro->id)->where('id', $post['endereco_id'])->first();

            if(!$endereco && $post['endereco_id'] != 0){
                return response()->json(array(
                    'status' => false,
                    'message' => 'Endereço inválido'
                ));
            }

        }elseif(!isset($post['endereco_id'])){

            if(!isset($post['nome']) || !$post['nome']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'Endereço inválido'
                ));
            }
            if(!isset($post['cep']) || !$post['cep']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'CEP inválido'
                ));
            }
            if(!isset($post['bairro']) || !$post['bairro']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'Bairro inválido'
                ));
            }
            if(!isset($post['logradouro']) || !$post['logradouro']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'Logradouro inválido'
                ));
            }
            if(!isset($post['estado_id']) || !$post['estado_id']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'Estado inválido'
                ));
            }
            if(!isset($post['cidade_id']) || !$post['cidade_id']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'Cidade inválida'
                ));
            }
            if(!isset($post['numero']) || !$post['numero']){
                return response()->json(array(
                    'status' => false,
                    'message' => 'Número inválido'
                ));
            }

            $endereco = new CadastroEndereco();
            $endereco->cadastro_id = $cadastro->id;
            $endereco->fill($post);
            $endereco->save();

        }

        $adegaAberta = GeralService::buscarAdegaAberta();

        if(!$adegaAberta){
            return response()->json(array(
                'status' => false,
                'message' => 'Sua adega virtual está vazia.'
            ));
        }

        //Valida Disponibilidade Produtos x Adega
        $meusVinhos             = GeralService::buscarMeusVinhos(['somar' => true]);
        $data_fechamento        = date('Y-m-d', strtotime("-15 days",strtotime(date('Y-m-d'))));
        $disponibilidadeEntrega = TRUE;

        if(count($meusVinhos['produtos']) > 0){
            foreach ($meusVinhos['produtos'] as $oferta):

                //Se Data PedidoVenda for > 15 últimos dias segue adiante
                if($oferta->data_pedido_venda > $data_fechamento):
                    continue;
                endif;

                foreach ($oferta->produtos as $item):
                    if($item->produto->disponibilidade < 0):
                        $disponibilidadeEntrega = FALSE;
                    endif;
                endforeach;
            endforeach;
        }

        $pedidoEntrega = new PedidoEntrega();
        $pedidoEntrega->unidade_negocio_id = GeralService::checkUnidadeNegocio($pedidoEntrega, 'pedido-entrega', $adegaAberta->id);
        $pedidoEntrega->id_adega = $adegaAberta->id;
        $pedidoEntrega->data_solicitacao = date('Y-m-d H:i:s');
        if(!empty($adegaAberta->cliente->empresa_id)){
            $pedidoEntrega->empresa_id = $adegaAberta->cliente->empresa_id;
        }

        if(isset($endereco) && $endereco){
            $pedidoEntrega->id_cadastro_endereco = $endereco->id;
        }elseif(!isset($post['data_retirada']) || (isset($post['data_retirada']) && empty($post['data_retirada']))){
            return response()->json(array(
                'status' => false,
                'message' => 'Endereço ou Data de Retirada no Local não informado!'
            ));
        }else{

            $data_filtro_retirada = date('Y-m-d', strtotime("+5 days",strtotime(date('Y-m-d'))));
            $data_retirada        = date("Y-m-d", GeralService::dataToTimestamp($post['data_retirada']));

            if($data_retirada < $data_filtro_retirada){
                return response()->json(array(
                    'status'  => false,
                    'message' => 'A Data de Retirada deve ser maior ou igual: ' . date('d/m/Y', strtotime($data_filtro_retirada))
                ));
            }
            
            $checkDiasUteis = GeralService::checkDiasUteis($post['data_retirada']);

            if(!$checkDiasUteis){
                return response()->json(array(
                    'status'  => false,
                    'message' => 'A Data de Retirada deve ser um dia útil!'
                ));
            }

            if($cadastro->enderecoPrincipal){
                $pedidoEntrega->id_cadastro_endereco = $cadastro->enderecoPrincipal->id;
            }
            $pedidoEntrega->retirada_local = 1;
            $pedidoEntrega->data_retirada  = date("Y-m-d", GeralService::dataToTimestamp($post['data_retirada'])) . ' ' . $post['hora_retirada'] . ':00';
        }
        $pedidoEntrega->disponibilidade = ($disponibilidadeEntrega ? 1 : 0);
        $pedidoEntrega->observacoes     = isset($post['observacoes']) ? $post['observacoes'] : '';

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

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

            $pedidoVenda = new PedidoVenda();
            $pedidoVenda->unidade_negocio_id = $pedidoEntrega->unidade_negocio_id;

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

					$size = $file->getClientSize();

		         if($size > 5000000){
		            return response()->json(array(
                     'status' => false,
                     'message' => 'Tamanho excedido. O tamanho máximo do arquivo deve ser de 5 MB.'
                  ));
		         }

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

            $pedidoVenda->subtotal = $post['valor_frete'];
            $pedidoVenda->total = $post['valor_frete'];
            $pedidoVenda->data_fechamento = date('Y-m-d H:i:s');
            $pedidoVenda->nm_referencia = 'Intenção de pagamento de frete realizada por '.$cadastro->nome.' '.$cadastro->sobrenome;
            $pedidoVenda->assunto = 'Pagamento de frete 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 = $post['nome_depositante'];
            $pedidoVenda->id_status_pedido_venda = 1; // Pendente
            $pedidoVenda->frete = 1; // Pendente
            $pedidoVenda->save();

        }else{

            if($post['valor_frete'] > 0){

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

                $pagarMe =  new \PagarMe\Sdk\PagarMe($this->apiKey);

                $customer = null;

                if($cadastro->customer_id){
                    $customer = GeralService::buscarCustomerPagarme($cadastro);
                }

                if(!$customer){

                    $cadastroEndereco = CadastroEndereco::where('cadastro_id', $cadastro->id)->where('principal', 1)->first();

                    if(!$cadastroEndereco){
                        return response()->json(array(
                            'status' => false,
                            'message' => 'Você não possui um endereço principal definido. Defina um na página de seu perfil antes de finalizar a compra.'
                        ));
                    }

                    $cidade = Cidade::find($cadastroEndereco->cidade_id);

                    if(!$cidade){
                        return response()->json(array(
                            'status' => false,
                            'message' => 'Cidade do seu endereço não é válida. Por favor, verifique se se endereço principal está cadastro corretamente.'
                        ));
                    }

                    $estado = Estado::find($cadastroEndereco->estado_id);

                    if(!$estado){
                        return response()->json(array(
                            'status' => false,
                            'message' => 'Estado do seu endereço não é válido. Por favor, verifique se se endereço principal está cadastro corretamente.'
                        ));
                    }

                    $pais = Pais::find($cadastroEndereco->pais_id);

                    if(!$pais){
                        return response()->json(array(
                            'status' => false,
                            'message' => 'País do seu endereço não é válido. Por favor, verifique se se endereço principal está cadastro corretamente.'
                        ));
                    }

                    try {
                        $address = new \PagarMe\Sdk\Customer\Address([
                            'street'        => $cadastroEndereco->logradouro,
                            'streetNumber'  => $cadastroEndereco->numero,
                            'neighborhood'  => $cadastroEndereco->bairro,
                            'zipcode'       => str_replace(['-', '.'],'',$cadastroEndereco->cep),
                            'complementary' => $cadastroEndereco->complemento,
                            'city'          => $cidade->nome,
                            'state'         => $estado->nome,
                            'country'       => $pais->nome,
                        ]);
                    } catch (\Exception $e) {
                        return response()->json(array(
                            'status'  => false,
                            'message' => 'Não foi possível cadastrar seu endereço na plataforma de pagamento. Por favor, tente novamente mais tarde.'
                        ));
                    }

                    try {

                        $telefone = (int) $res = preg_replace("/[^0-9]/", "", $cadastro->telefone);
                        $phone    = new \PagarMe\Sdk\Customer\Phone(['ddd' => substr($telefone,0,2), 'number' => substr($telefone,2), 'ddi' => '55']);

                    } catch (\Exception $e) {
                        return response()->json(array(
                            'status'  => false,
                            'message' => 'Não foi possível cadastrar seu telefone na plataforma de pagamento. Por favor, verifique se seu perfil está preenchido devidamente.'
                        ));
                    }

                    $errors = [
                        'address[street_number]' => 'Número <strong>inválido</strong>.',
                        'address[street]'        => 'Logradouro <strong>inválido</strong>.',
                        'address[neighborhood]'  => 'Bairro <strong>inválido</strong>.',
                        'address[zipcode]'       => 'CEP <strong>inválido</strong>.',
                        'phone[number]'          => 'Telefone <strong>inválido</strong>. Por favor, ajuste seu cadastro ná pagina de seu perfil.',
                        'phone[ddd]'             => 'O seu DDD é inválido. Por favor verifique se o seu <b>Telefone</b> está preenchido corretamente no seu perfil.',
                    ];

                    try {

                        $customer = $pagarMe->customer()->create(
                            $cadastro->nome,
                            $user->email,
                            $cadastro->cpf,
                            /** @var $address \PagarMe\Sdk\Customer\Address */
                            $address,
                            /** @var $phone \PagarMe\Sdk\Customer\Phone */
                            $phone
                        );

                    } catch (\Exception $e) {
                        $exceptionErrors = json_decode(json_decode($e->getMessage()));

                        if ($exceptionErrors != null){

                            $message = (isset($errors[$exceptionErrors->errors[0]->parameter_name])) ? $errors[$exceptionErrors->errors[0]->parameter_name] : $exceptionErrors->errors[0]->message;
                        } else {
                            $message = $e->getMessage();
                        }

                        return response()->json(array(
                            'status' => false,
                            'message' => $message
                        ));
                    }


                    $cadastro->customer_id = $customer->getId();

                    $cadastro->save();
                }

                if(isset($post['cartao_id']) && $post['cartao_id']){ // Se está usando um cartão já cadastrado

                    $cartao = CadastroCartao::where('cadastro_id', $cadastro->id)->where('id', $post['cartao_id'])->where('ativo', 1)->first();

                    if(!$cartao){
                        return response()->json(array(
                            'status' => false,
                            'message' => 'Cartão selecionado é inválido.'
                        ));
                    }

                    $card = $pagarMe->card()->get($cartao->cartao_id);

                }else{

                    $tentativasCartao = CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->whereDate('data_cadastro', date('Y-m-d'))->where('ativo', 0)->count();
                    $cartoesCliente   = CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->where('ativo', 1)->count();

                    if($tentativasCartao >= 3){
                        return response()->json(array(
                            'status'  => false,
                            'message' => 'Tentativas Excedidas. Entre em contato com nossa equipe de suporte.'
                        ));
                    }elseif($cartoesCliente >= 3){
                        return response()->json(array(
                            'status'  => false,
                            'message' => 'Por razões de segurança são permitidos apenas 3 (três) cartões cadastrados.'
                        ));
                    }elseif($tentativasCartao >= 2 && (!isset($post['g-recaptcha-response']) || (isset($post['g-recaptcha-response']) && empty($post['g-recaptcha-response'])))){
                        return response()->json(array(
                            'status'  => false,
                            'message' => 'ReCaptcha inválido'
                        ));
                    }

                    $cadastroCartao = new CadastroCartao();
                    $cadastroCartao->cadastro_id   = $cadastro->id;
                    $cadastroCartao->empresa_id    = $cadastro->empresa_id;
                    $cadastroCartao->data_cadastro = date('Y-m-d H:i:s');
                    $cadastroCartao->principal     = 0;

                    try {

                        $card = $pagarMe->card()->create(
                            $post['number'],
                            $post['name'],
                            substr($post['expiry'],0,2).substr($post['expiry'],5,2)
                        );

                        if($card->getValid()){
                            
                            if(isset($post['salvar_cartao']) && $post['salvar_cartao']){
                                $cadastroCartao->cartao_id = $card->getId();
                                if(count($cadastro->cartoes) == 0){
                                    $cadastroCartao->principal = 1;
                                }
                                $cadastroCartao->save();
                            }

                        }else{

                            $cadastroCartao->retorno = 'Cartão Inválido';
                            $cadastroCartao->ativo   = 0;
                            $cadastroCartao->save();

                            return response()->json(array(
                                'status'           => false,
                                'tentativasCartao' => ($tentativasCartao+1),
                                'message'          => 'Dados do cartão são <strong>inválidos</strong>. Tente novamente.'
                            ));

                        }

                    } catch (\Exception $e) {

                        $errors = json_decode(json_decode($e->getMessage()));

                        $cadastroCartao->retorno  = isset($errors->errors) ? json_encode($errors->errors[0]->message) : 'Erro cartão checkout';
                        $cadastroCartao->ativo = 0;
                        $cadastroCartao->save();

                        return response()->json(array(
                            'status'           => false,
                            'tentativasCartao' => ($tentativasCartao+1),
                            'message'          => 'Dados do cartão são <strong>inválidos</strong>. Tente novamente.',
                        ));
                    }

                }

                $transaction = $pagarMe->transaction()->creditCardTransaction(
                    $post['valor_frete'] * 100,
                    $card,
                    $customer,
                    1, // parcelas
                    true // captura
                    //'http://requestb.in/pkt7pgpk', // postbackURL
                    //['idProduto' => 13933139] //metadata
                );

                $pedidoVenda = new PedidoVenda();
                $pedidoVenda->unidade_negocio_id = $pedidoEntrega->unidade_negocio_id;
                $pedidoVenda->subtotal = $post['valor_frete'];
                $pedidoVenda->total = $post['valor_frete'];
                $pedidoVenda->data_fechamento = date('Y-m-d H:i:s');
                $pedidoVenda->nm_referencia = 'Pagamento de frete realizado por '.$cadastro->nome.' '.$cadastro->sobrenome;
                $pedidoVenda->assunto = 'Pagamento de frete realizado através da plataforma.';
                $pedidoVenda->transacao_id = $transaction->getId();
                $pedidoVenda->id_condicao_comercial = 1;
                $pedidoVenda->id_cliente = $cadastro->id;
                $pedidoVenda->id_status_pedido_venda = 2; // Aprovado
                $pedidoVenda->frete = 1; // Pendente
                $pedidoVenda->save();

            }

        }

        /* Atualiza id_pedido_venda_frete do pedido de entrega */
        if(isset($pedidoVenda) && isset($pedidoVenda->id)){
            $pedidoEntrega->id_pedido_venda_frete = @$pedidoVenda->id;
        }
        $pedidoEntrega->save();

        // envia e-mail
        /*if(!$disponibilidadeEntrega):
            $envioMensagem = GeralService::enviarMensagem($cadastro, $pedidoEntrega);
        endif;*/

        return response()->json(array(
            'status'  => true,
            'message' => 'Entrega solicitada com sucesso',
            'id'      => $pedidoEntrega->id
        ));

    }

    public function confirmacaoCompra($id){
        $data = [];

        $vinhos = GeralService::buscarMeusVinhos();

        $clienteLogado = GeralService::buscarClienteLogado();

        $data['informacoesBasicasAdega'] = GeralService::buscarInformacoesBasicasAdegaAberta();
        $pedidoVenda = PedidoVenda::where('id', $id)->first();
        $pedidoVenda->integracao_analytics = 1;
        $pedidoVenda->save();
        $data['pedidoVenda']   = $pedidoVenda;
        $data['clienteLogado'] = $clienteLogado;

        $data['valorTotal'] = CartService::calcularValorTotalPedidoVenda($pedidoVenda);

        $data['titulo_pagina'] = 'Confirmação';
        $data['subtitulo_pagina'] = 'Compra';

        $data['cupomIndicacao'] = CartService::buscarCupomIndicacao();
        
        $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');

        $data['info'] = \App\BasicInfo::find(1);

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

        return view('perfil/confirmacao-compra', $data);
    }

    public function confirmacaoEntrega($id){
        
        $data = [];

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

        //$vinhos = GeralService::buscarMeusVinhos();

        //$data['informacoesBasicasAdega'] = GeralService::buscarInformacoesBasicasAdegaAberta();
        $data['pedidoEntrega'] = PedidoEntrega::where('id', $id)->first();
        $data['basic']         = BasicInfo::first();

        $data['titulo_pagina'] = 'Confirmação';
        $data['subtitulo_pagina'] = 'Entrega';

        $data['cupomIndicacao'] = CartService::buscarCupomIndicacao();

        return view('perfil/confirmacao-entrega', $data);
    }

    public function confirmacaoEntregaAnalise(Request $request){

        $data = [];

        $data['titulo_pagina'] = 'Confirmação';
        $data['subtitulo_pagina'] = 'Entrega';

        return view('perfil/confirmacao-entrega-analise', $data);
    }

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

        $entrega = PedidoEntrega::find($post['id']);

        if($entrega){

            $data['listaHistorico'] = PedidoEntregaHasStatus::where('id_pedido_entrega', $entrega->id)->orderBy('data', 'DESC')->with(/*'colaborador',*/ 'status')->get();

            $data['vinhosAdega'] = GeralService::buscarVinhosAdega(['id_adega' => $entrega->id_adega]);

            $data['vinhosAdega'] = GeralService::buscarProdutosAdega(['id_adega' => $entrega->id_adega]);

            $view = view('perfil/detalhes-adega', $data);

            return response()->json(array(
                'status' => true,
                'message' => 'Detalhes da adega buscados com sucesso!',
                'html' => $view->render()
            ));
        }else{
            return response()->json(array(
                'status' => false,
                'message' => 'Entrega inválida'
            ));
        }

    }

    public function detalhesPagamento(Request $request){

        $data      = $request->input();
        $pagamento = PedidoVenda::find($data['id']);

        if($pagamento){

            $data['vinhos']    = GeralService::buscarOfertasPagamento(['id_pedido_venda' => $pagamento->id]);
            $data['pagamento'] = $pagamento;

            $view = view('perfil/detalhes-pagamento', $data);

            return response()->json(array(
                'status' => true,
                'message' => 'Detalhes do pagamento buscados com sucesso!',
                'html' => $view->render()
            ));
        }else{
            return response()->json(array(
                'status' => false,
                'message' => 'ID do pagamento é inválido.'
            ));
        }

    }

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

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

        $tentativasCartao = CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->whereDate('data_cadastro', date('Y-m-d'))->where('ativo', 0)->count();
        $cartoesCliente   = CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->where('ativo', 1)->count();

        if($tentativasCartao >= 3){
            return response()->json(array(
                'status'  => false,
                'message' => 'Tentativas Excedidas. Entre em contato com nossa equipe de suporte.'
            ));
        }elseif($cartoesCliente >= 3){
            return response()->json(array(
                'status'  => false,
                'message' => 'Por razões de segurança são permitidos apenas 3 (três) cartões cadastrados.'
            ));
        }elseif($tentativasCartao >= 2 && (!isset($post['g-recaptcha-response']) || (isset($post['g-recaptcha-response']) && empty($post['g-recaptcha-response'])))){
            return response()->json(array(
                'status'  => false,
                'message' => 'ReCaptcha inválido'
            ));
        }

        $apiKey  = $this->apiKey;

        $pagarMe =  new \PagarMe\Sdk\PagarMe($apiKey);

        // $expiryDate = substr($post['expiry'],0,2).substr($post['expiry'],5,2); // Format MMAA
        $post['expiry'] = str_replace(" ", "", $post['expiry']);
        $expiryDate     = substr($post['expiry'],0,2).substr($post['expiry'],3,2); // Format MMAA

        $cadastroCartao = new CadastroCartao();
        $cadastroCartao->cadastro_id   = $cadastro->id;
        $cadastroCartao->empresa_id    = $cadastro->empresa_id;
        $cadastroCartao->data_cadastro = date('Y-m-d H:i:s');
        $cadastroCartao->principal     = 0;

        if(strlen($expiryDate) < 4){

            $cadastroCartao->retorno = "Data do Cartão Inválida: (expiryDate: {$expiryDate})";
            $cadastroCartao->ativo   = 0;
            $cadastroCartao->save();

            return response()->json(array(
                'status'  => false,
                'message' => "Data do Cartão Inválida"
            ));

        }

        try {

            $card = $pagarMe->card()->create(
                $post['number'],
                $post['name'],
                $expiryDate,
                $post['cvc']
            );

            if($card->getValid()){

                $cadastroCartao->cartao_id = $card->getId();
                if(count($cadastro->cartoes) == 0){
                    $cadastroCartao->principal = 1;
                }
                $cadastroCartao->save();

            }else{

                $cadastroCartao->cartao_id = ($card->getId() ? $card->getId() : '');
                $cadastroCartao->retorno   = "Cartão Inválido: (expiryDate: {$expiryDate})";
                $cadastroCartao->ativo     = 0;
                $cadastroCartao->save();

                return response()->json(array(
                    'status'           => false,
                    'tentativasCartao' => ($tentativasCartao+1),
                    'message'          => 'Dados do cartão são <strong>inválidos</strong>. Tente novamente.'
                ));
            }

        } catch (\Exception $e) {

            $errors = json_decode(json_decode($e->getMessage()));

            $cadastroCartao->retorno  = isset($errors->errors) ? json_encode($errors->errors[0]->message) : 'Erro cartão checkout';
            $cadastroCartao->ativo = 0;
            $cadastroCartao->save();

            return response()->json(array(
                'status'           => false,
                'tentativasCartao' => ($tentativasCartao+1),
                'message'          => 'Dados do cartão são <strong>inválidos</strong>. Tente novamente.'
            ));

        }

        $data['cartao'] = $cadastroCartao;
        $data['cartao']->info = $pagarMe->card()->get($cadastroCartao->cartao_id);

        return response()->json(array(
            'status'           => true,
            'message'          => 'Cartão adicionado com sucesso!',
            'html'             => view('perfil/cartao-item', $data)->render()
        ));

    }

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

        $cadastro = GeralService::buscarClienteLogado();

        $contadorEnderecos = CadastroEndereco::where('cadastro_id', $cadastro->id)->count();


        $cadastroEndereco = new CadastroEndereco();
        $cadastroEndereco->fill($post);
        $cadastroEndereco->cadastro_id = $cadastro->id;

        if ($contadorEnderecos == 0) {
            $cadastroEndereco->principal = 1;
        }

        $cadastroEndereco->save();

        $data['endereco'] = $cadastroEndereco;

        if(isset($post['no_view'])){
            return response()->json(array(
                'status' => true,
                'message' => 'Endereço adicionado com sucesso!'
            ));
        }

        return response()->json(array(
            'status' => true,
            'message' => 'Endereço adicionado com sucesso!',
            'html' => view('perfil/endereco-item', $data)->render()
        ));

    }

    public function calcularFrete(Request $request){

        $post = $request->input();
        $data = [];

        $cep       = $post['cep'];
        $resultado = CepService::buscar($cep);

        $adega = GeralService::buscarAdegaAberta();

        $frete = Frete::join('regiao as r', 'r.id', '=', 'frete.regiao_id')->join('estado as e', 'e.regiao_id', '=', 'r.id')->where('e.sigla', $resultado->uf)->where('valor_final', '>=', $adega->valor_total)->orWhere('valor_final', '=', '0')->where('valor_inicial', '<=', $adega->valor_total)->first();

        $freteMaximo = Frete::join('regiao as r', 'r.id', '=', 'frete.regiao_id')->join('estado as e', 'e.regiao_id', '=', 'r.id')->where('e.sigla', $resultado->uf)->where('custo', '=', 0)->first();


        if($frete){
            $html = 'R$ '.number_format($frete->custo,2,',','.');
            $frete_existente = 1;
        }else{
            $html = 'Não há fretes para esse endereço.';
            $frete_existente = 0;
        }

        $endereco = new \stdClass();
        $endereco->cep = $post['cep'];
        $endereco->cep_formatado = $post['cep_formatado'];
        $endereco->logradouro = $resultado->logradouro;
        $endereco->bairro = $resultado->bairro;
        $endereco->cidade = Cidade::where('nome', $resultado->cidade)->first();
        $endereco->estado = Estado::where('sigla', $resultado->uf)->first();
        $endereco->principal = 1;
        $endereco->custo_frete = $frete->custo;
        $endereco->valor_final_frete = $freteMaximo->valor_inicial;
        $endereco->nome = 'Novo endereço';
        $data['endereco'] = $endereco;

        return response()->json(array(
            'status'          => true,
            'message'         => 'Frete calculado com sucesso!',
            'html'            => view('perfil/calcular-frete', $data)->render(),
            'frete_existente' => $frete_existente,
            'result'          => $resultado
        ));

    }

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

        $cadastro = GeralService::buscarClienteLogado();

        CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->where('principal', 1)->update(['principal' => 0]);

        $cartao = CadastroCartao::find($post['id']);
        $cartao->principal = 1;
        $cartao->save();

        return response()->json(array(
            'status' => true,
            'message' => 'Cartão principal alterado com sucesso!'
        ));

    }

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

        $cadastro = GeralService::buscarClienteLogado();

        CadastroEndereco::where('cadastro_id', $cadastro->id)->where('principal', 1)->update(['principal' => 0]);

        $endereco = CadastroEndereco::find($post['id']);
        $endereco->principal = 1;
        $endereco->save();


        return response()->json(array(
            'status' => true,
            'message' => 'Endereço principal alterado com sucesso!'
        ));

    }

    public function editarPerfil(Request $request){

        $input = $request->input();
        $cadastro = GeralService::buscarClienteLogado();

        if($cadastro->tipo_pessoa == 'F'){
            $validate = $this->validate($request, [
                'cpf' => 'required|cpf'
            ]);
        }

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

        if((!isset($input['sobrenome']) || !$input['sobrenome']) && $cadastro->tipo_pessoa == 'F'){
            return response()->json(array(
                'status' => false,
                'message' => 'O sobrenome é obrigatório.'
            ));
        }

        if(!isset($input['data_nascimento']) || !$input['data_nascimento']){
            return response()->json(array(
                'status' => false,
                'message' => $cadastro->tipo_pessoa == 'J' ? 'A data de fundação é obrigatória' : 'A data de nascimento é obrigatória.'
            ));
        }


        if((!isset($input['cpf']) || !$input['cpf']) && $cadastro->tipo_pessoa == 'F'){
            return response()->json(array(
                'status' => false,
                'message' => 'O cpf é obrigatório.'
            ));
        }

        if((!isset($input['cnpj']) || !$input['cnpj']) && $cadastro->tipo_pessoa == 'J'){
            return response()->json(array(
                'status' => false,
                'message' => 'O cpf é obrigatório.'
            ));
        }

        if((!isset($input['genero']) || !$input['genero']) && $cadastro->tipo_pessoa == 'F'){
            return response()->json(array(
                'status' => false,
                'message' => 'O campo sexo é obrigatório.'
            ));
        }

        if(!isset($input['email']) || !$input['email']){
            return response()->json(array(
                'status' => false,
                'message' => 'O e-mail é obrigatório.'
            ));
        }

        if(User::where('email', $input['email'])->where('id', '!=', $this->current_user->id)->count()){

            return response()->json(array(
                'status' => false,
                'message' => 'Já existe um usuário com esse e-mail.'
            ));
        }

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

        if($input['password'] && $input['password'] != $input['confirm_password']){
            return response()->json(array(
                'status' => false,
                'message' => 'A senha e a confirmação de senha devem ser iguais.'
            ));
        }

        $cadastro->fill($input);
        $cadastro->save();


        $this->current_user->email = $input['email'];
        if(isset($input['password']) && $input['password']){
            $this->current_user->password = bcrypt($input['password']);
        }
        $this->current_user->save();

        return response()->json(array(
            'status' => true,
            'message' => 'Perfil atualizado com sucesso!'
        ));

    }

    public function enviarComprovante(Request $request){

        $post = $request->input();

        $cadastro = GeralService::buscarClienteLogado();

        /*if($cadastro && !$post['confraria']){
            $pedidoVenda = PedidoVenda::where('id_cliente', $cadastro->id)->where('id', $post['pagamento'])->first();
        }else{*/
        $pedidoVenda = PedidoVenda::where('id', $post['pagamento'])->first();
        // }

        if($pedidoVenda){
            if($request->hasFile('fileUpload')) {
                $file = $request->file('fileUpload');
					 $size = $file->getClientSize();
					 if($size > 5000000){
						return response()->json(array(
                       'status' => false,
                       'message' => 'Tamanho excedido. O tamanho máximo do arquivo deve ser de 5 MB.'
                  ));
 		         }

                 $filename = Str::random(14) . '.' . $file->extension();

	             $comprovante = GeralService::uploadFile($file, 'pedido-venda/comprovante', [], $filename);
	             $pedidoVenda->comprovante = $comprovante->filename;
	             $pedidoVenda->save();
                 
            }else{
                return response()->json(array(
                    'status' => false,
                    'message' => 'Arquivo inválido.'
                ));
            }
        }else{
            return response()->json(array(
                'status' => false,
                'message' => 'Pedido inválido.'
            ));
        }

        return response()->json(array(
            'status'  => true,
            'message' => 'Comprovante enviado com sucesso!',
            'url'     => GeralService::getFile($pedidoVenda->comprovante, 'pedido-venda/comprovante')
        ));

    }

    public function infoPedido($pedido_id, Request $request){

        $data = array();

        $data['pedido_id']      = $pedido_id;
        $data['saldo_expirado'] = ($request->input('saldo_expirado') ? $request->input('saldo_expirado') : 0);
        $data['pagamentos']     = GeralService::buscarMeusPagamentos($pedido_id);
        $empresas               = Empresa::all();
        $pagarMe                = [];
        foreach ($empresas as $empresa) {
            $apiKey = $empresa->api_key_pagar_me;
            $pagarMe[$empresa->id] =  new \PagarMe\Sdk\PagarMe($apiKey);
        }

        foreach ($data['pagamentos'] as $pagamento) {
            if($pagamento->transacao_id){
                $pagamento->transaction = $pagarMe[$pagamento->empresa_id]->transaction()->get($pagamento->transacao_id);
            }

            $pagamento->quantidade_produtos = 0;
            foreach ($pagamento->produtos as $produto) {
                $pagamento->quantidade_produtos += $produto->quantidade;
            }

            switch ($pagamento->tipo_deposito) {
                case 'D': $pagamento->tipo = 'Depósito'; break;
                case 'DOC': $pagamento->tipo = 'DOC'; break;
                case 'TED': $pagamento->tipo = 'TED'; break;
                case 'PIX': $pagamento->tipo = 'PIX'; break;
                case 'CASH': $pagamento->tipo = 'CASH'; break;
                case 'BRD': $pagamento->tipo = 'BRINDE'; break;
                case 'INT': $pagamento->tipo = 'INTERNO'; break;
            }
        }

        return response()->json(array(
            'status'  => true,
            'html' => view('perfil/lista-meus-pagamentos', $data)->render(),
        ));
    }

    public function uploadImagem(Request $request){
        
        if(!$request->hasFile('arquivo')){
            return response()->json(array(
                'status'  => false,
                'mensagem' => 'Nenhum arquivo encontrado!',
            ));
        }

        $cadastro = GeralService::buscarClienteLogado();

        $arquivo = $request->file('arquivo');

        $upload = GeralService::uploadFile($arquivo, 'cadastro/' . $cadastro->id);

        $cadastro->thumbnail_principal = $upload->url;
        $cadastro->save();

        return response()->json([
            'status' => true,
            'mensagem' => 'Imagem de perfil alterada com sucesso!',
            'url' => $upload->url,
        ]);
    }


    public function removerImagem(Request $request){
        $cadastro = GeralService::buscarClienteLogado();
        $cadastro->thumbnail_principal = NULL;
        $cadastro->save();

        return response()->json([
            'status' => true,
            'mensagem' => 'Imagem de perfil removida com sucesso!',
        ]);
    }

    public function alterarStatusCashbackMembros(Request $request){

        $status = (bool)$request->input('status');
        
        $cadastro = GeralService::buscarClienteLogado();

        if(!$cadastro->confraria){
            return response()->json([
                'status' => false,
                'mensagem' => 'Você não pode alterar o status!',
            ]);
        }

        $confraria = $cadastro->confraria;
        if(!$confraria->config){
            DB::table('confraria_config')->insert([
                [
                    'confraria_id'              => $confraria->id,
                    'permitir_cashback_membros' => 0
                ]
            ]);
        }

        ConfrariaConfig::where('confraria_id', $cadastro->confraria->id)
        ->update([
            'permitir_cashback_membros' => $status ? 1 : 0,
        ]);

        return response()->json([
            'status' => true,
            'mensagem' => 'Status alterado com sucesso!',
        ]);
    }

    public function indicar(){
        $data['configMenuLateral'] = GeralService::configMenuLateral();
		$data['cupomIndicacao'] = CartService::buscarCupomIndicacao();
        $data['clienteLogado'] = GeralService::buscarClienteLogado();

        return view('perfil/indicar', $data);
    }

    public function masterclass(){
        $data = [];
        $data['configMenuLateral'] = GeralService::configMenuLateral();
        $data['cupomIndicacao'] = CartService::buscarCupomIndicacao();
        $data['clienteLogado'] = GeralService::buscarClienteLogado();

        $data['produtos'] = OfertaService::buscarMeusProdutosMasterClass();

        return view('perfil/masterclass', $data);
    }

    public function buscarMeusEnderecosLista(){

        $cadastro = GeralService::buscarClienteLogado();
        $adegaAberta = GeralService::buscarAdegaAberta();

        $params = [
            'id_cliente' => $cadastro->id,
            'adega' => $adegaAberta
        ];

        $enderecos = GeralService::buscarEnderecosCliente($params);

        $view = view('perfil.enderecos-lista', ['enderecos' => $enderecos]);

        return response()->json([
            'status' => true,
            'mensagem' => 'Lista de endereços',
            'html' => $view->render()
        ]);
    }

    public function seguranca()
    {
        $data['configMenuLateral'] = GeralService::configMenuLateral();
        $data['cupomIndicacao'] = CartService::buscarCupomIndicacao();
        $data['clienteLogado'] = GeralService::buscarClienteLogado();
        $data['cliente'] = $data['clienteLogado'];

        if($data['clienteLogado']->bloqueio_cliente == 0){
            return url('/');
        }

        $data['cadastro_documentos'] = DB::table('cadastro_documentos_validacao')
            ->where('cadastro_id', $data['clienteLogado']->id)
            ->get();

        $status = 'N';

        if($data['cadastro_documentos']->where('status', 'R')->first()){
            $status = 'R';
        } else if($data['cadastro_documentos']->where('status', 'A')->first()){
            $status = 'A';
        } else if(count($data['cadastro_documentos']) > 0) {
            $status = 'V';
        }

        $data['status'] = $status;

        return view('perfil/seguranca', $data);
    }

    public function solicitacaoDocumentos(Request $request)
    {
        $arquivos = $request->file('arquivos_docs');
        $clienteLogado = GeralService::buscarClienteLogado();

        if(count($arquivos) > 3 || count($arquivos) < 2){
            return response()->json([
                'status' => false,
                'mensagem' => 'Você precisa enviar no mínimo 2 arquivos e no máximo 3!',
            ]);
        }


//        Deletar os arquivos enviados antes
        DB::table('cadastro_documentos_validacao')
            ->where('cadastro_id', $clienteLogado->id)
            ->delete();

        foreach($arquivos as $arquivo){
            $upload = GeralService::uploadFile($arquivo, 'cadastro_docs/' . $clienteLogado->id);

            DB::table('cadastro_documentos_validacao')
                ->insert([
                    'cadastro_id' => $clienteLogado->id,
                    'arquivo' => $upload->url,
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s')
                ]);
        }

        return response()->json([
            'status' => true,
            'mensagem' => 'Solicitação enviada com sucesso!',
        ]);
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit