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/ConfrariaEntregaController.php
<?php

namespace App\Http\Controllers\Website;

use DB;
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 Illuminate\Support\Facades\Log;
use App\Modules\Cidade\Models\Cidade;
use App\Modules\Estado\Models\Estado;
use App\Services\PedidoEntregaService;
use App\Http\Controllers\BaseController;
use App\Modules\Confraria\Models\Confraria;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\BannerFooter\Models\BannerFooter;
use App\Modules\PedidoEntrega\Models\PedidoEntrega;
use App\Modules\Confraria\Services\ConfrariaService;
use App\Modules\CadastroCartao\Models\CadastroCartao;
use App\Modules\ConfrariaMembro\Models\ConfrariaMembro;
use App\Modules\CadastroEndereco\Models\CadastroEndereco;
use App\Modules\ConfrariaConvite\Models\ConfrariaConvite;
use App\Modules\Confraria\Services\ConfrariaEntregaService;
use App\Modules\PedidoEntregaStatus\Models\PedidoEntregaStatus;
use App\Modules\PedidoEntregaHasStatus\Models\PedidoEntregaHasStatus;

class ConfrariaEntregaController extends BaseController
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    public function confrariaEntregaHome(Request $request)
    {
        $data = [];

        $clienteLogado = GeralService::buscarClienteLogado();
        $confraria     = ConfrariaService::buscarConfrariaUsuarioLogado();

        if(!$clienteLogado || !$confraria){
            return redirect('/confraria');
        }

        $data['confraria'] = $confraria;

        $data['pedidosEntrega'] = PedidoEntrega::where('confraria_id', $data['confraria']->id)
        ->with('status', 'adega')
        ->get();

        foreach($data['pedidosEntrega'] as $key => $pedidoEntrega){

            $ofertasAdega          = ConfrariaService::buscarOfertasAdegaMembroConfraria($pedidoEntrega->id_adega);
            $valorTotalEconomizado = 0;
            $quantidade_garrafas   = 0;

            foreach($ofertasAdega as $ofertaAdega){
                $valorTotalEconomizado += ($ofertaAdega->preco_mercado - $ofertaAdega->preco_oferta) *  $ofertaAdega->quantidadeProdutos;
                $quantidade_garrafas   += $ofertaAdega->quantidadeProdutos;
            }

            $pedidoEntregaStatus = PedidoEntregaStatus::where('id', $pedidoEntrega->id_pedido_entrega_status)->first();
            
            $data['pedidosEntrega'][$key]['frase_observacao'] = PedidoEntregaService::getFraseObservacao($pedidoEntrega, $pedidoEntregaStatus);
            $data['pedidosEntrega'][$key]['qtd_garrafas'] = $quantidade_garrafas;
            $data['pedidosEntrega'][$key]['valorEconomizado'] = $valorTotalEconomizado;

            $data['pedidosEntrega'][$key]['pedido_venda'] = ConfrariaService::buscarPedidoVenda($pedidoEntrega->id_adega);
        }

        if(count($data['pedidosEntrega']) > 0){
            $data['ultimoPedido'] = $data['pedidosEntrega'][0];
        }

        return view('confraria/entrega/home-entrega', $data);
    }

    public function confrariaEntregaDetalhe($id, Request $request)
    {
        $data = [];

        $data['confraria'] = ConfrariaService::buscarConfrariaUsuarioLogado();

        $data['pedidoEntrega'] = PedidoEntrega::where('id', $id)
        ->with('endereco.cidade', 'endereco.estado', 'status', 'transportadora')
        ->first();

        $pedidoEntregaStatus = PedidoEntregaStatus::where('id', $data['pedidoEntrega']->id_pedido_entrega_status)->first();

        $data['frase_observacao'] = PedidoEntregaService::getFraseObservacao($data['pedidoEntrega'], $pedidoEntregaStatus);

        $ofertasAdega = ConfrariaService::buscarOfertasAdegaMembroConfraria($data['pedidoEntrega']->id_adega);

        $valorTotalEconomizado = 0;
        $quantidade_garrafas = 0;
        foreach($ofertasAdega as $key => $ofertaAdega){
            $valorTotalEconomizado += ($ofertaAdega->preco_mercado - $ofertaAdega->preco_oferta) *  $ofertaAdega->quantidadeProdutos;
            $quantidade_garrafas += $ofertaAdega->quantidadeProdutos;
        }

        $data['pedidoEntrega']['totalEconomizado'] = $valorTotalEconomizado;
        $data['pedidoEntrega']['qtd_garrafas'] = $quantidade_garrafas;

        $data['pedidoEntrega']['produtos']     = ConfrariaService::buscarProdutosAdegaMembroConfraria($data['pedidoEntrega']->id_adega);
        $data['pedidoEntrega']['pedido_venda'] = ConfrariaService::buscarPedidoVenda($data['pedidoEntrega']->id_adega);


        $data['pedidoEntrega']['historico'] = DB::table('pedido_entrega_has_status')
        ->where('id_pedido_entrega', $data['pedidoEntrega']->id)
        ->get();

        $data['pedidoEntrega']['historico'] = PedidoEntregaHasStatus::where('id_pedido_entrega', $data['pedidoEntrega']->id)->orderBy('data', 'ASC')->with('status')->get();

        return view('confraria/entrega/detalhe-entrega', $data);
    }

    public function confrariaEntregaSolicitar(Request $request)
    {
        $data = [];

        $adegaAberta = ConfrariaEntregaService::buscarAdegaAberta();
        $confraria   = ConfrariaService::buscarConfrariaUsuarioLogado();

        if(!$adegaAberta){
            return redirect('/confraria/adega');
        }

        $data['confraria'] = $confraria;

        $data['informacoesBasicasAdega'] = ConfrariaEntregaService::buscarInformacoesBasicasAdegaAberta($confraria->id);
        $data['cadastro']                = GeralService::buscarClienteLogado();

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

        $params = [
            'id_cadastro_endereco' => $adegaAberta && !empty($adegaAberta->cadastro_endereco_id) ? $adegaAberta->cadastro_endereco_id : false,
            'id_cliente'           => $data['cadastro'] ? $data['cadastro']->id : null,
            'adega'                => $adegaAberta
        ];

        $data['endereco'] = GeralService::buscarEnderecosCliente($params);

        if($adegaAberta && $data['endereco'] && empty($adegaAberta->cadastro_endereco_id)){
            $sql = "UPDATE adega SET cadastro_endereco_id = {$data['endereco']->id} WHERE id = {$adegaAberta->id}";
            DB::update($sql);
        }

        $data['produtos'] = [];
        if($adegaAberta){
            $data['produtos'] = ConfrariaService::buscarProdutosAdegaMembroConfraria($adegaAberta->id, 2);
        }

        return view('confraria/entrega/solicitar-entrega', $data);
    }

    public function confrariaEntregaConfirmar(Request $request)
    {
        $post     = $request->input();
        $user     = Sentinel::getUser();
        $cadastro = GeralService::buscarClienteLogado();

        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>.'
            ));
        }

        $adegaAberta = ConfrariaEntregaService::buscarAdegaAberta();

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

        //Valida Disponibilidade Produtos x Adega
        $meusVinhos             = ConfrariaEntregaService::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->confraria_id = $adegaAberta->confraria_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($adegaAberta->endereco) || (isset($adegaAberta->endereco) && !$adegaAberta->endereco)){
            return response()->json(array(
                'status'  => false,
                'message' => 'Endereço não informado!'
            ));
        }

        $cadastroEndereco = $adegaAberta->endereco;

        if(isset($cadastroEndereco) && $cadastroEndereco){
            $pedidoEntrega->id_cadastro_endereco = $cadastroEndereco->id;
        }else{
            return response()->json(array(
                'status'  => false,
                'message' => 'Endereço inválido!'
            ));   
        }
        $pedidoEntrega->disponibilidade = ($disponibilidadeEntrega ? 1 : 0);
        $pedidoEntrega->observacoes     = isset($post['observacoes']) ? $post['observacoes'] : '';

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

            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.'
                ));
            }

            $pedidoVenda = new PedidoVenda();
            $pedidoVenda->unidade_negocio_id = $pedidoEntrega->unidade_negocio_id;
            // $pedidoVenda->confraria_id = $pedidoEntrega->confraria_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 = (isset($post['nome_depositante']) ? $post['nome_depositante'] : '');
            $pedidoVenda->id_status_pedido_venda = 1; // Pendente
            $pedidoVenda->frete = 1; // Frete
            $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){

                    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.',
                        ));
                    }

                }

                $totalTransaction = $post['valor_frete'] * 100;
                $totalTransaction = number_format($totalTransaction, 0, '','');

                $transaction = $pagarMe->transaction()->creditCardTransaction(
                    $totalTransaction,
                    $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->confraria_id = $pedidoEntrega->confraria_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; // Frete
                $pedidoVenda->save();

            }

        }

        /* Atualiza id_pedido_venda_frete do pedido de entrega */
        if(isset($pedidoVenda)){
            $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 confrariaEntregaConfirmarPagamento(Request $request)
    {
        $data = [];

        $adegaAberta       = ConfrariaEntregaService::buscarAdegaAberta();
        $data['cadastro']  = GeralService::buscarClienteLogado();
        $data['confraria'] = ConfrariaService::buscarConfrariaUsuarioLogado();

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

        $params = [
            'id_cadastro_endereco' => $adegaAberta && !empty($adegaAberta->cadastro_endereco_id) ? $adegaAberta->cadastro_endereco_id : false,
            'id_cliente'           => $data['cadastro'] ? $data['cadastro']->id : null,
            'adega'                => $adegaAberta
        ];

        $data['endereco'] = GeralService::buscarEnderecosCliente($params);

        $data['informacoesBasicasAdega'] = ConfrariaEntregaService::buscarInformacoesBasicasAdega($adegaAberta->confraria_id, $adegaAberta->id);

        return view('confraria/entrega/confirmar-pagamento-entrega', $data);
    }

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

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

        $data['confraria'] = ConfrariaService::buscarConfrariaUsuarioLogado();

        $data['pedidoEntrega'] = PedidoEntrega::where('id', $id)->with('endereco.cidade', 'endereco.estado', 'status', 'transportadora')->first();

        $data['informacoesBasicasAdega'] = ConfrariaEntregaService::buscarInformacoesBasicasAdega($data['pedidoEntrega']->confraria_id, $data['pedidoEntrega']->id_adega);

        return view('confraria/entrega/entrega-solicitada', $data);
    }

    public function confrariaEntregaEndereco(Request $request)
    {
        $data = [];

        $adegaAberta       = ConfrariaEntregaService::buscarAdegaAberta();
        $data['cadastro']  = GeralService::buscarClienteLogado();
        $data['confraria'] = ConfrariaService::buscarConfrariaUsuarioLogado();

        if(!$adegaAberta){
            return redirect('/confraria/home');
        }

        //Endereço Atual Adega ou Principal Cliente
        $params = [
            'id_cadastro_endereco' => $adegaAberta && !empty($adegaAberta->cadastro_endereco_id) ? $adegaAberta->cadastro_endereco_id : false,
            'id_cliente'           => $data['cadastro'] ? $data['cadastro']->id : null,
            'adega'                => $adegaAberta
        ];

        $data['endereco'] = GeralService::buscarEnderecosCliente($params);

        $params = [
            'id_cliente' => $data['cadastro'] ? $data['cadastro']->id : null,
            'adega'      => $adegaAberta
        ];

        $data['enderecos'] = GeralService::buscarEnderecosCliente($params);

        $data['informacoesBasicasAdega'] = ConfrariaEntregaService::buscarInformacoesBasicasAdega($adegaAberta->confraria_id, $adegaAberta->id);

        $data['adega'] = $adegaAberta;

        return view('confraria/entrega/endereco-entrega', $data);
    }

    public function confrariaEntregaEnderecoNovo(Request $request)
    {
        $data = [];

        $adegaAberta       = ConfrariaEntregaService::buscarAdegaAberta();
        $data['cadastro']  = GeralService::buscarClienteLogado();
        $data['confraria'] = ConfrariaService::buscarConfrariaUsuarioLogado();

        //Endereço Atual Adega ou Principal Cliente
        $params = [
            'id_cadastro_endereco' => $adegaAberta && !empty($adegaAberta->cadastro_endereco_id) ? $adegaAberta->cadastro_endereco_id : false,
            'id_cliente'           => $data['cadastro'] ? $data['cadastro']->id : null,
            'adega'                => $adegaAberta
        ];

        $data['endereco'] = GeralService::buscarEnderecosCliente($params);

        $data['informacoesBasicasAdega'] = ConfrariaEntregaService::buscarInformacoesBasicasAdega($adegaAberta->confraria_id, $adegaAberta->id);

        $data['adega'] = $adegaAberta;

        return view('confraria/entrega/endereco-entrega-novo', $data);
    }

    public function confrariaEntregaEnderecoSalvar(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();

        $adegaAberta      = ConfrariaEntregaService::buscarAdegaAberta();

        $sql = "UPDATE adega SET cadastro_endereco_id = {$cadastroEndereco->id} WHERE id = {$adegaAberta->id}";
        DB::update($sql);

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

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

        $adegaAberta = ConfrariaEntregaService::buscarAdegaAberta();

        $sql = "UPDATE adega SET cadastro_endereco_id = {$post['cadastro_endereco_id']} WHERE id = {$adegaAberta->id}";
        DB::update($sql);

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

}

Youez - 2016 - github.com/yon3zu
LinuXploit