| 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 : |
<?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()
]);
}
}