| 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/Oferta/Controllers/Admin/ |
Upload File : |
<?php
namespace App\Modules\Oferta\Controllers\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Cviebrock\EloquentSluggable\Services\SlugService;
use Mail;
use Exception;
use App\Http\Requests;
use App\Http\Controllers\BaseController;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\OfertaReserva\Models\OfertaReserva;
use App\Modules\OfertaHasProduto\Models\OfertaHasProduto;
use App\Modules\CanalHasOferta\Models\CanalHasOferta;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\Canal\Models\Canal;
use App\Modules\Produto\Models\Produto;
use App\Modules\Fornecedor\Models\Fornecedor;
use App\Modules\TipoDeProduto\Models\TipoDeProduto;
use App\Modules\Instituicao\Models\Instituicao;
use App\Modules\Pais\Models\Pais;
use App\Services\GeralService;
use App\Services\OfertaService;
use App\Services\PaginationService;
use App\BasicInfo;
use App\User;
use App\Modules\Tag\Models\Tag;
use Sentinel;
use DB;
class AdminOfertaController extends BaseController
{
private $modulo;
private $fields;
private $fks;
private $lastInsertId;
public function __construct(){
parent::__construct();
$this->middleware('auth');
$this->modulo = \App\Gerador::where('nome', 'Oferta')->with('campos', 'fks')->first();
$this->fields = $this->modulo->campos;
$this->fks = $this->modulo->fks;
$this->oferta_m = new Oferta();
}
public function atualizarAgenda(Request $request) {
if (!isset($request->start) || !isset($request->end)) {
die("Informe um período de datas.");
}
$filtro = array();
$filtro['data_inicio'] = ($request->start);
$filtro['data_fim'] = ($request->end);
$filtro['tipo'] = 'D';
$timezone = null;
if (isset($_GET['timezone'])) {
$timezone = new DateTimeZone($_GET['timezone']);
}
$listaEventos = GeralService::buscarOfertasToCalendar($filtro);
return response()->json($listaEventos);
}
public function disponibilidade($oferta){
$oferta = Oferta::with('produtos')->find($oferta);
$produtos = [];
foreach ($oferta->produtos as $item) {
$produtos[] = ['disponibilidade' => $item->produto->disponibilidade];
}
$json = array('disponibilidade' => $oferta->estoque, 'produtos' => $produtos);
return response()->json($json);
}
public function index(){
$query = $this->oferta_m->select('oferta.*')->where('tipo', '=', 'D');
$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, 'oferta.'.$fk->nome, '=', $on);
$query->addSelect($table.'.'.$fk->campoRelacionado->nome.' as fk'.$fk->id);
$data['fields_listagem'][] = $fk;
}
}
$data['ofertas'] = $query->groupBy('oferta.id')->orderBy('data', 'desc')->get();
usort($data['fields_listagem'], function($a, $b) {
return $a->ordem - $b->ordem;
});
return view('Oferta::admin/oferta',$data);
}
public function importar(Request $request){
$post = $request->input();
$data = [];
if(empty($post)){
}else{
$data = $post;
$produtos = GeralService::getProdutosSKU();
$ofertas = GeralService::getOfertasCanaisProdutos($request->input('canal_id'));
if($request->hasFile('file')) {
$file = $request->file('file');
$tmpFileName = $file->getClientOriginalName();
$file = $file->move(public_path(), $tmpFileName);
$row = 0;
$continued = [];
$updated = [];
$start = date('Y-m-d H:i:s');
$cabecalho = ['SKU','TÍTULO','SUBTÍTULO','DISP.','QTDE. MÁX. CLIENTE','POUCAS UNIDADES','PREÇO CUSTO','PREÇO MERCADO','PREÇO OFERTA','PERCENTUAL DESCONTO','ORDENAÇÃO','DATA INICIAL','DATA FINAL'];
$logs = [];
if (($handle = fopen($tmpFileName, "r")) !== FALSE) {
while (($dados = fgetcsv($handle, 0, ";")) !== FALSE) {
$prefix = substr($dados[0], 0, 2);
if($prefix != 'VD'){
continue;
}
$sku = $dados[0];
if(!isset($produtos[$sku])){
$continued[] = ['line' => $row, 'dados' => $dados, 'message' => "Produto não cadastrado: SKU {$sku}"];
continue;
}
$Produto = $produtos[$sku];
$encodeTitle = mb_detect_encoding($dados[1]);
$encodeSubTitle = mb_detect_encoding($dados[2]);
$titulo = ($encodeTitle == 'UTF-8' ? ($dados[1]) : utf8_encode($dados[1]));
$sub_titulo = ($encodeSubTitle == 'UTF-8' ? ($dados[2]) : utf8_encode($dados[2]));
$disponibilidade = $dados[3];
$qtde_max_cliente = $dados[4];
$poucas_unidades = $dados[5];
$preco_custo = GeralService::formataValor($dados[6]);
$preco_mercado = GeralService::formataValor($dados[7]);
$preco_oferta = GeralService::formataValor($dados[8]);
$percentual_desconto = GeralService::formataValor($dados[9]);
$ordenacao = $dados[10];
$data_inicial = $dados[11];
$data_final = $dados[12];
$data_inicial = GeralService::dataToTimestamp($data_inicial);
$data_inicial = date('Y-m-d', $data_inicial);
$data_final = GeralService::dataToTimestamp($data_final);
$data_final = date('Y-m-d', $data_final);
if(isset($ofertas[$Produto->id])){
$Oferta = $ofertas[$Produto->id];
if(strlen($Oferta->slug) <= 5){
$Oferta->titulo = $titulo;
$Oferta->sub_titulo = $sub_titulo;
$Oferta->save();
}
$updated[] = ['line' => $row, 'dados' => $Oferta, 'message' => 'Oferta atualizada com sucesso!'];
}else{
$Oferta = new Oferta();
$Oferta->titulo = $titulo;
$Oferta->sub_titulo = $sub_titulo;
$Oferta->pre_venda = 0;
$Oferta->data = $data_inicial;
$Oferta->estoque = $disponibilidade;
$Oferta->poucas_unidades = $poucas_unidades;
$Oferta->tipo = 'C';
$Oferta->tema_id = 2;
$Oferta->preco_mercado = $preco_mercado;
$Oferta->preco_custo = $preco_custo;
// $Oferta->custo_efetivo = $custo_efetivo;
$Oferta->preco_oferta = $preco_oferta;
$Oferta->percentual_desconto = $percentual_desconto;
$Oferta->resolucao_imagem = 'resolucao-1';
$Oferta->thumbnail_principal = $Produto->thumbnail_principal;
$Oferta->quantidade_maxima_por_cliente = $qtde_max_cliente;
if($Oferta->save()){
$id_oferta = $Oferta->id;
$ofertaHasProduto = new OfertaHasProduto();
$ofertaHasProduto->id_produto = $Produto->id;
$ofertaHasProduto->id_oferta = $id_oferta;
$ofertaHasProduto->quantidade = 1;
$ofertaHasProduto->preco_mercado = $preco_mercado;
$ofertaHasProduto->preco_custo = $preco_custo;
// $ofertaHasProduto->custo_efetivo = $custo_efetivo;
$ofertaHasProduto->valor_unitario = $preco_oferta;
$ofertaHasProduto->valor_total = $preco_oferta;
$ofertaHasProduto->save();
if($Oferta->tipo == 'C'){
$CanalHasOferta = new CanalHasOferta();
$CanalHasOferta->id_oferta = $id_oferta;
$CanalHasOferta->id_canal = $request->input('canal_id');
$CanalHasOferta->data_inicial = $data_inicial;
$CanalHasOferta->data_final = $data_final;
$CanalHasOferta->ordenacao = $ordenacao;
$CanalHasOferta->ordenacao_original = $ordenacao;
$CanalHasOferta->qtde_vendida = 0;
$CanalHasOferta->quantidade = $Oferta->estoque;
$CanalHasOferta->disponibilidade_canal = $Oferta->estoque;
$CanalHasOferta->save();
}
$updated[] = ['line' => $row, 'dados' => $Oferta, 'message' => 'Oferta inserida com sucesso!'];
}else{
$continued[] = ['line' => $row, 'dados' => $dados, 'message' => "Falha ao cadastrar Oferta: SKU {$sku}"];
continue;
}
}
}
}
$end = date('Y-m-d H:i:s');
$data['cabecalhos'] = $cabecalho;
$data['inseridos'] = $updated;
$data['falhas'] = $continued;
@unlink($tmpFileName);
}
}
$data['listaCanais'] = Canal::orderBy('id','desc')->get();
return view('Oferta::admin/importar',$data);
}
public function monitoramento(Request $request){
$data = [];
$data = $request->input();
$data['listaCanais'] = Canal::orderBy('id','desc')->get();
return view('Oferta::admin/monitoramento', $data);
}
public function monitoramentoListaOfertas(Request $request){
$data = $request->input();
DB::enableQueryLog();
$query = PedidoVenda::select(DB::raw("
SUM(pvho.quantidade) qtde_vendida,
cho.quantidade,
pvho.oferta_id 'id_oferta',
oferta.estoque,
cho.id_canal,
cho.ordenacao,
(SELECT SUM(quantidade) FROM oferta_reserva r WHERE r.oferta_id = oferta.id) 'reserva',
CONCAT(oferta.titulo, ' ', oferta.sub_titulo) 'nome_oferta',
cho.quantidade - (SUM(pvho.quantidade) + oferta.estoque) 'diferenca'"
))
->join('pedido_venda_has_oferta AS pvho', 'pvho.pedido_venda_id', '=', 'pedido_venda.id')
->join('oferta', 'oferta.id', '=', 'pvho.oferta_id')
->join('canal_has_oferta AS cho', 'cho.id_oferta', '=', 'oferta.id')
->join('canal', 'canal.id', '=', 'cho.id_canal')
->where('cho.id_canal', $request->input('canal_id'));
if($request->input('oferta')){
$query->having('nome_oferta', 'like', '%'.$request->input('oferta').'%');
$data['pesquisa'] = $request->input('oferta');
}
// $query->whereRaw("CONCAT(oferta.titulo, ' ', oferta.sub_titulo) NOT LIKE '%Coleção%'");
$query->groupBy('pvho.oferta_id');
$ofertas = $query->orderBy('diferenca', 'ASC')
->orderBy('oferta.estoque', 'ASC')
->orderBy('nome_oferta', 'ASC')
->get();
$data['ofertas'] = $ofertas;
$queries = DB::getQueryLog();
// dd($queries);
$html = view('Oferta::admin/_monitoramento-lista-ofertas', $data)->render();
$json = [
'status' => true,
'html' => $html
];
return response()->json($json);
}
public function monitoramentoEsgotarOfertas(Request $request){
$ofertas = $request->input('ids_oferta');
$id_canal = $request->input('id_canal');
for($i=0;$i<count($ofertas);$i++){
$id_oferta = $ofertas[$i];
$sqlOferta = "UPDATE oferta SET estoque=0 WHERE id={$id_oferta}";
DB::update($sqlOferta);
$sqlCanalHasOferta = "UPDATE canal_has_oferta SET disponibilidade_canal=0 WHERE deleted_at IS NULL AND id_oferta={$id_oferta} AND id_canal={$id_canal}";
DB::update($sqlCanalHasOferta);
DB::table('oferta_reserva')->where('oferta_id', '=', $id_oferta)->delete();
}
return response()->json(['status' => true, 'message' => 'Operação realizada com sucesso!']);
}
public function monitoramentoAjustarEstoqueOfertas(Request $request){
$ofertas = $request->input('ids_oferta');
$id_canal = $request->input('id_canal');
GeralService::monitoramentoAjustarEstoqueOfertas($id_canal, $ofertas);
return response()->json(['status' => true, 'message' => 'Operação realizada com sucesso!']);
}
public function gerador(Request $request){
$data = [];
$data['listaTipoOfertas'] = [
'D' => 'Diária',
'C' => 'Canal',
'E' => 'Exclusiva',
'M' => 'Mercado',
'S' => 'Semanal'
];
$data['listaCanais'] = Canal::orderBy('nome','asc')->get();
$data['listaFornecedores'] = Fornecedor::orderBy('nome', 'ASC')->get();
$data['listaTipos'] = TipoDeProduto::orderBy('nome', 'ASC')->get();
$data['listaPaises'] = Pais::orderBy('nome', 'ASC')->get();
$data['ordenacao'] = '';
$data['produto_ofertado'] = '';
return view('Oferta::admin/gerador',$data);
}
public function geradorOfertas(Request $request){
$ofertas = $request->input('ofertas');
foreach ($ofertas as $oferta) {
$Produto = Produto::select('thumbnail_principal')->where('id', '=', $oferta['produto'])->first();
$Oferta = new Oferta();
$Oferta->titulo = $oferta['titulo'];
$Oferta->sub_titulo = $oferta['sub_titulo'];
$Oferta->pre_venda = $oferta['pre_venda'];
$Oferta->data = $oferta['data_inicio'];
$Oferta->estoque = $oferta['disponibilidade'];
$Oferta->poucas_unidades = $oferta['poucas_unidades'];
$Oferta->tipo = $oferta['tipo'];
$Oferta->tema_id = 2;
$Oferta->preco_mercado = $oferta['preco_mercado'];
$Oferta->preco_custo = $oferta['preco_custo'];
$Oferta->custo_efetivo = $oferta['custo_efetivo'];
$Oferta->preco_oferta = $oferta['preco'];
$Oferta->percentual_desconto = $oferta['percentual_desconto'];
$Oferta->resolucao_imagem = 'resolucao-1';
$Oferta->thumbnail_principal = $Produto->thumbnail_principal;
$Oferta->quantidade_maxima_por_cliente = $oferta['quantidade_maxima_por_cliente'];
if($Oferta->save()){
$id_oferta = $Oferta->id;
$ofertaHasProduto = new OfertaHasProduto();
$ofertaHasProduto->id_produto = $oferta['produto'];
$ofertaHasProduto->id_oferta = $id_oferta;
$ofertaHasProduto->quantidade = 1;
$ofertaHasProduto->preco_mercado = $oferta['preco_mercado'];
$ofertaHasProduto->preco_custo = $oferta['preco_custo'];
$ofertaHasProduto->custo_efetivo = $oferta['custo_efetivo'];
$ofertaHasProduto->valor_unitario = $oferta['preco'];
$ofertaHasProduto->valor_total = $oferta['preco'];
$ofertaHasProduto->save();
if($Oferta->tipo == 'C'){
$CanalHasOferta = new CanalHasOferta();
$CanalHasOferta->id_oferta = $id_oferta;
$CanalHasOferta->id_canal = $oferta['canal'];
$CanalHasOferta->data_inicial = $oferta['data_inicio'];
$CanalHasOferta->data_final = $oferta['data_fim'];
$CanalHasOferta->ordenacao = 1;
$CanalHasOferta->ordenacao_original = 1;
$CanalHasOferta->qtde_vendida = 0;
$CanalHasOferta->quantidade = $Oferta->estoque;
$CanalHasOferta->disponibilidade_canal = $Oferta->estoque;
$CanalHasOferta->save();
}
}
}
$json = ['status' => true, 'message' => "Ofertas gravadas com sucesso!"];
return response()->json($json);
}
public function geradorListaProdutos(Request $request){
$query = Produto::select(
'produto.*',
DB::raw('(SELECT SUM(pedido_venda_has_produto.quantidade)
FROM `pedido_venda`
INNER JOIN `pedido_venda_has_produto` ON `pedido_venda_has_produto`.`id_pedido_venda` = `pedido_venda`.`id`
WHERE `pedido_venda`.`id_status_pedido_venda` IN (1,2)
AND `produto`.`id` = `pedido_venda_has_produto`.`id_produto`) adega')
);
$query->where('situacao', '=', 'A')->where('indisponibilizar_ofertas', '<>', 1);
if($request->input('disponibilidade')){
$query->where('disponibilidade', '>=', $request->input('disponibilidade'));
}
if($request->input('disponibilidade_maxima')){
$query->where('disponibilidade', '<=', $request->input('disponibilidade_maxima'));
}
if($request->input('fornecedor_id')){
$query->where('id_fornecedor', '=', $request->input('fornecedor_id'));
}
if($request->input('tipo_id')){
$query->where('id_tipo_produto', '=', $request->input('tipo_id'));
}
if($request->input('pais_id')){
$query->where('id_pais_origem', '=', $request->input('pais_id'));
}
if($request->input('preco_custo_inicial') && $request->input('preco_custo_final')){
$query->whereBetween('preco_custo', [$request->input('preco_custo_inicial'), $request->input('preco_custo_final')]);
}elseif($request->input('preco_custo_inicial')){
$query->where('preco_custo', '>=', $request->input('preco_custo_inicial'));
}elseif($request->input('preco_custo_final')){
$query->where('preco_custo', '<=', $request->input('preco_custo_final'));
}
if($request->input('produto')){
$query->where('nome', 'LIKE', '%' . $request->input('produto') . '%');
}
if($request->input('produto_ofertado') && !empty($request->input('produto_ofertado'))){
if($request->input('produto_ofertado') == 'S'){
$query->whereRaw("EXISTS (SELECT 1 FROM oferta_has_produto ohp, oferta o WHERE ohp.id_produto = produto.id AND ohp.id_oferta = o.id AND o.tipo IN ('D','S','C'))");
}elseif($request->input('produto_ofertado') == 'N'){
$query->whereRaw("NOT EXISTS (SELECT 1 FROM oferta_has_produto ohp, oferta o WHERE ohp.id_produto = produto.id AND ohp.id_oferta = o.id AND o.tipo IN ('D','S','C'))");
}
}
if($request->input('ordenacao') && !empty($request->input('ordenacao'))){
$query->orderBy($request->input('ordenacao'), 'asc');
}
$listaProdutos = $query->get();
$produtos = [];
foreach ($listaProdutos as $produto) {
$result = explode(" ", $produto->nome);
$sub_titulo = '';
for($i=1;$i<count($result);$i++){
$sub_titulo .= $result[$i]. " ";
}
$sub_titulo = trim($sub_titulo);
$produtos[] = [
'id' => $produto->id,
'titulo' => $result[0],
'sub_titulo' => $sub_titulo,
'adega' => (is_numeric($produto->adega) ? number_format($produto->adega, 0) : 0),
'disponibilidade' => (is_numeric($produto->disponibilidade) ? $produto->disponibilidade : 0),
'reserva' => (is_numeric($produto->reserva) ? $produto->reserva : 0),
'preco_custo' => $produto->preco_custo,
'custo_efetivo' => $produto->custo_efetivo,
'preco_mercado' => $produto->preco_mercado,
'preco_de_venda' => $produto->preco_de_venda,
'poucas_unidades' => 1,
'qtde_max_cliente' => 1
];
}
$json = ['produtos' => $produtos];
return response()->json($json);
}
public function preVenda(Request $request){
$query = $this->oferta_m->select(
'oferta.*',
DB::raw('(SELECT SUM(pvhp.quantidade) FROM pedido_venda_has_produto pvhp, pedido_venda pv WHERE pvhp.id_oferta = oferta.id AND pv.id = pvhp.id_pedido_venda AND pv.id_status_pedido_venda = 9) qtd_produtos'),
DB::raw('(SELECT COUNT(pv.id) FROM pedido_venda_has_produto pvhp, pedido_venda pv WHERE pvhp.id_oferta = oferta.id AND pv.id = pvhp.id_pedido_venda AND pv.id_status_pedido_venda = 9) qtd_pedidos')
)->where('pre_venda', 1);
if($request->input('id_oferta')){
$query->where('oferta.id', $request->input('id_oferta'));
}
$listaOfertas = $query->get();
$ofertas = [];
foreach ($listaOfertas as $oferta) {
if($oferta->tipo == 'C'){
$CanalHasOferta = CanalHasOferta::where('id_oferta', $oferta->id)->orderBy('id', 'desc')->first();
if($CanalHasOferta){
$oferta->canal = $CanalHasOferta->canal;
}
}
$ofertas[] = $oferta;
}
$data['ofertas'] = $ofertas;
return view('Oferta::admin/oferta-pre-venda',$data);
}
/**
* Atualiza Oferta Pré-Venda e Pedidos para entrarem na Adega
* @param $id oferta.id
*/
public function moverPedidosAdega($id){
//Atualiza Pedidos Venda Pré-Venda -> Aprovados
$pedidos = PedidoVenda::where('id_status_pedido_venda', 9)->whereRaw("EXISTS (SELECT 1 FROM pedido_venda_has_produto pvhp WHERE pvhp.id_pedido_venda = pedido_venda.id AND pvhp.id_oferta = {$id})")->get();
$erros = [];
foreach ($pedidos as $pedido) {
try {
DB::beginTransaction();
$pedido->id_status_pedido_venda = 2;
$pedido->save();
$sqlHistorico = "INSERT INTO pedido_venda_historico (data, id_pedido_venda, id_pedido_venda_status, id_colaborador, notificar_cliente)
SELECT NOW(), id, 2, 1, 0 FROM pedido_venda WHERE id = {$pedido->id}";
DB::insert($sqlHistorico);
DB::commit();
} catch (Exception $e) {
DB::rollBack();
Log::info($e->getMessage());
$erros[] = $pedido->id;
}
}
//Atualiza Oferta Pré-Venda
if(count($erros) == 0){
$sqlOferta = "UPDATE oferta SET pre_venda = 0 WHERE id = {$id}";
DB::update($sqlOferta);
$message = "Pedidos Aprovados e movidos para as suas respectivas Adegas!";
}else{
$message = "Não foi possível mover todos os Pedidos";
}
$json = ['status' => true, 'message' => $message];
return response()->json($json);
}
public function playground(Request $request){
$data = $request->input();
if($request->input('format') && $request->input('format') == 'json'){
if($request->input('tipo')){
$query = $this->oferta_m->select('oferta.*')->where('tipo', '=', $request->input('tipo'));
}else{
$query = $this->oferta_m->select('oferta.*')->where('tipo', '=', 'D');
}
$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, 'oferta.'.$fk->nome, '=', $on);
$query->addSelect($table.'.'.$fk->campoRelacionado->nome.' as fk'.$fk->id);
$data['fields_listagem'][] = $fk;
}
}
//Termos de Pesquisa
if ($request->input('pesquisa'))
{
$query->where(function($qr) use ($request){
$qr->orWhere(DB::raw("CONCAT(`titulo`, ' ', `sub_titulo`)"), 'LIKE', "%" . $request->input('pesquisa') . "%");
$qr->orWhere('oferta.id', '=', $request->input('pesquisa'));
});
}
//Pesquisa Disponibilidade
if ($request->input('disponibilidade'))
{
$filtro = explode(":", $request->input('disponibilidade'));
if(count($filtro) > 1 && !empty($filtro[1])){
if($filtro[0] == 'maior'){
$query->where('oferta.estoque', '>', $filtro[1]);
}elseif($filtro[0] == 'menor'){
$query->where('oferta.estoque', '<', $filtro[1]);
}elseif($filtro[0] == 'entre'){
$value = explode(",", $filtro[1]);
if(count($value) > 1 && !empty($value[1])){
$query->whereBetween('oferta.estoque', [$value[0], $value[1]]);
}
}
}
}
//Pesquisa Disponibilidade
if ($request->input('preco-mercado'))
{
$filtro = explode(":", $request->input('preco-mercado'));
if(count($filtro) > 1 && !empty($filtro[1])){
$valor = (empty($filtro[1]) ? $filtro[1] : 0);
if($filtro[0] == 'maior'){
$query->where('oferta.preco_mercado', '>', $valor);
}elseif($filtro[0] == 'menor'){
$query->where('oferta.preco_mercado', '<', $valor);
}elseif($filtro[0] == 'entre'){
$value = explode(",", $filtro[1]);
if(count($value) > 1 && !empty($value[1])){
$query->whereBetween('oferta.preco_mercado', [$value[0], $value[1]]);
}
}
}
}
//Pesquisa Disponibilidade
if ($request->input('preco-oferta'))
{
$filtro = explode(":", $request->input('preco-oferta'));
if(count($filtro) > 1 && !empty($filtro[1])){
if($filtro[0] == 'maior'){
$query->where('oferta.preco_oferta', '>', $filtro[1]);
}elseif($filtro[0] == 'menor'){
$query->where('oferta.preco_oferta', '<', $filtro[1]);
}elseif($filtro[0] == 'entre'){
$value = explode(",", $filtro[1]);
if(count($value) > 1 && !empty($value[1])){
$query->whereBetween('oferta.preco_oferta', [$value[0], $value[1]]);
}
}
}
}
$query->groupBy('oferta.id')->orderBy($request->input('column'), $request->input('order'));
$pagination = new PaginationService([
'query' => $query,
'path' => url('/admin/oferta/' . $request->input('rota')),
'request' => $request
]);
$data['pagination'] = $pagination;
$query->offset($pagination->pagesize * ($pagination->current_page - 1))->limit($pagination->pagesize);
$data['ofertas'] = $query->get();
usort($data['fields_listagem'], function($a, $b) {
return $a->ordem - $b->ordem;
});
$data['html'] = view('Oferta::admin/_oferta-'.$request->input('rota'), $data)->render();
return response()->json($data);
}
$data['temas'] = OfertaService::getTemas();
$data['instituicoes'] = OfertaService::getInstituicoes();
$data['responsaveis'] = OfertaService::getResponsaveis();
$data['tipos'] = OfertaService::getTipos();
$data['segment'] = \Request::segment(3);
return view('Oferta::admin/oferta-'.$data['segment'], $data);
}
public function lista(Request $request){
$query = $this->oferta_m->select('oferta.*')->where('tipo', '=', 'D');
$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, 'oferta.'.$fk->nome, '=', $on);
$query->addSelect($table.'.'.$fk->campoRelacionado->nome.' as fk'.$fk->id);
$data['fields_listagem'][] = $fk;
}
}
$query->orderBy('data', 'DESC');
if ($request->input('term'))
{
$query->where(function($qr) use ($request){
$qr->orWhere(DB::raw("CONCAT(`titulo`, ' ', `sub_titulo`)"), 'LIKE', "%".$request->input('term')."%");
$qr->orWhere('oferta.id', '=', $request->input('term'));
});
}
$data['ofertas'] = $query->groupBy('oferta.id')->paginate(20);
usort($data['fields_listagem'], function($a, $b) {
return $a->ordem - $b->ordem;
});
return view('Oferta::admin/oferta-lista',$data);
}
public function canal(Request $request){
$query = $this->oferta_m->select('oferta.*')->where('oferta.tipo', '=', 'C');
$query->join('canal_has_oferta as cho', 'cho.id_oferta', '=', 'oferta.id');
$query->join('canal as c', 'c.id', '=', 'cho.id_canal');
$query->with('canalHasOferta.canal');
$query->whereRaw('cho.deleted_at IS NULL');
$query->orderBy('cho.data_final', 'DESC');
if ($request->input('term'))
{
$query->where(function($qr) use ($request){
$qr->orWhere(DB::raw("CONCAT(`oferta`.`titulo`, ' ', `oferta`.`sub_titulo`)"), 'LIKE', "%".$request->input('term')."%");
$qr->orWhere('oferta.id', '=', $request->input('term'));
});
}
if($request->input('canal'))
{
$query->where('c.id', $request->input('canal'));
}
$data['ofertas'] = $query->groupBy('oferta.id')->paginate(20);
$data['canais'] = Canal::orderBy('data_inicio', 'desc')->get();
return view('Oferta::admin/oferta-canal', $data);
}
public function exclusiva(Request $request){
$query = $this->oferta_m->select('oferta.*')->where('oferta.tipo', '=', 'E');
$query->orderBy('oferta.data', 'DESC');
if ($request->input('term'))
{
$query->where(function($qr) use ($request){
$qr->orWhere(DB::raw("CONCAT(`oferta`.`titulo`, ' ', `oferta`.`sub_titulo`)"), 'LIKE', "%".$request->input('term')."%");
$qr->orWhere('oferta.id', '=', $request->input('term'));
});
}
$data['ofertas'] = $query->groupBy('oferta.id')->paginate(20);
return view('Oferta::admin/lista-oferta-exclusiva', $data);
}
public function mercado(Request $request){
$query = $this->oferta_m->select('oferta.*')->where('oferta.tipo', '=', 'M');
$query->orderBy('oferta.data', 'DESC');
if ($request->input('term'))
{
$query->where(function($qr) use ($request){
$qr->orWhere(DB::raw("CONCAT(`oferta`.`titulo`, ' ', `oferta`.`sub_titulo`)"), 'LIKE', "%".$request->input('term')."%");
$qr->orWhere('oferta.id', '=', $request->input('term'));
});
}
$data['ofertas'] = $query->groupBy('oferta.id')->paginate(20);
return view('Oferta::admin/lista-oferta-mercado', $data);
}
public function semanal(Request $request){
$query = $this->oferta_m->select('oferta.*')->where('oferta.tipo', '=', 'S');
$query->orderBy('oferta.data', 'DESC');
if ($request->input('term'))
{
$query->where(function($qr) use ($request){
$qr->orWhere(DB::raw("CONCAT(`oferta`.`titulo`, ' ', `oferta`.`sub_titulo`)"), 'LIKE', "%".$request->input('term')."%");
$qr->orWhere('oferta.id', '=', $request->input('term'));
});
}
$data['ofertas'] = $query->groupBy('oferta.id')->paginate(20);
return view('Oferta::admin/oferta-semanal', $data);
}
public function solidaria(Request $request){
$query = $this->oferta_m->select('oferta.*')->where('oferta.tipo', '=', 'L');
$query->orderBy('oferta.data', 'DESC');
if ($request->input('term'))
{
$query->where(function($qr) use ($request){
$qr->orWhere(DB::raw("CONCAT(`oferta`.`titulo`, ' ', `oferta`.`sub_titulo`)"), 'LIKE', "%".$request->input('term')."%");
$qr->orWhere('oferta.id', '=', $request->input('term'));
});
}
$data['ofertas'] = $query->groupBy('oferta.id')->paginate(20);
return view('Oferta::admin/lista-oferta-solidaria', $data);
}
public function casada(Request $request){
$query = $this->oferta_m->select('oferta.*')->where('oferta.tipo', '=', 'CS');
$query->orderBy('oferta.data', 'DESC');
if ($request->input('term'))
{
$query->where(function($qr) use ($request){
$qr->orWhere(DB::raw("CONCAT(`oferta`.`titulo`, ' ', `oferta`.`sub_titulo`)"), 'LIKE', "%".$request->input('term')."%");
$qr->orWhere('oferta.id', '=', $request->input('term'));
});
}
$data['ofertas'] = $query->groupBy('oferta.id')->paginate(20);
return view('Oferta::admin/lista-oferta-casada', $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;
if($fk->nome == 'tema_id'){
$data['array_'.$fk->nome] = $classPath::orderBy('nome','asc')->get();
}else{
$data['array_'.$fk->nome] = $classPath::get();
}
}
$data['nextId'] = $this->oferta_m->getNextAutoIncrement();
$data['usuarios'] = User::select('id','first_name')->whereRaw(DB::raw('EXISTS (SELECT 1 FROM sis_role_users sru WHERE sru.user_id = sis_users.id AND sru.role_id = 1)'))->orderBy('first_name','ASC')->get();
$data['instituicoes'] = Instituicao::orderBy('nome', 'ASC')->get();
$data['tags'] = Tag::get();
return view('Oferta::admin/form-oferta', $data);
}
public function edit($slug, Request $request){
$id = Oferta::where('slug', $slug)->value('id');
$post = $request->input();
$data = $post;
$data['query_string'] = http_build_query($post);
$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;
if($fk->nome == 'tema_id'){
$data['array_'.$fk->nome] = $classPath::orderBy('nome','asc')->get();
}else{
$data['array_'.$fk->nome] = $classPath::get();
}
}
$data['oferta'] = $this->oferta_m->find($id);
if($this->modulo->galeria){
$data['oferta']->imagens = $this->oferta_m->getImagens($id);
}
$data['usuarios'] = User::select('id','first_name')->whereRaw(DB::raw('EXISTS (SELECT 1 FROM sis_role_users sru WHERE sru.user_id = sis_users.id AND sru.role_id = 1)'))->orderBy('first_name','ASC')->get();
$data['instituicoes'] = Instituicao::orderBy('nome', 'ASC')->get();
$tags = Tag::select('tag.id', 'tag.nome', 'tag_tipo.nome as nomeTipo')
->join('tag_tipo', 'tag_tipo.id', 'tag.tag_tipo_id')
->get();
$arr_tags = [];
foreach($tags as $tag){
$arr_tags[$tag['nomeTipo']][] = $tag;
}
$data['tags'] = $arr_tags;
$data['oferta_tags'] = DB::table('oferta_has_tag')->where('oferta_id', $id)->pluck('tag_id')->toArray();
return view('Oferta::admin/form-oferta',$data);
}
//Modal Produtos
public function produtos($id_oferta){
$data['oferta'] = Oferta::with('produtos')->find($id_oferta);
return view('Oferta::admin/modal-produtos-oferta', $data);
}
public function getProdutos($id_oferta){
$data = [];
if($id_oferta != 0){
$data['oferta'] = Oferta::with('produtos')->find($id_oferta);
}
return view('Oferta::admin/produtos-oferta', $data)->render();
}
public function getProduto(Request $request){
$data = $request->input();
$html = view('Oferta::admin/_produto-oferta', $data)->render();
return response()->json(['status' => true, 'html' => $html]);
}
public function getFormOferta($id, $tipoOferta = null){
$data = [];
$data['tipoOferta'] = $tipoOferta;
$data['temas'] = OfertaService::getTemas();
$data['instituicoes'] = OfertaService::getInstituicoes();
$data['responsaveis'] = OfertaService::getResponsaveis();
$data['tipos'] = OfertaService::getTipos();
$data['objectOferta'] = false;
$data['title_form'] = "Nova Oferta";
$tags = Tag::select('tag.id', 'tag.nome', 'tag_tipo.nome as nomeTipo')
->join('tag_tipo', 'tag_tipo.id', 'tag.tag_tipo_id')
->get();
$arr_tags = [];
foreach($tags as $tag){
$arr_tags[$tag['nomeTipo']][] = $tag;
}
$data['tags'] = $arr_tags;
//$data['tags'] = Tag::get();
if($id!=0){
$data['oferta'] = $this->oferta_m->find($id);
$data['objectOferta'] = $data['oferta'];
$data['title_form'] = "Editar Oferta {$data['oferta']->titulo}";
$data['oferta_tags'] = DB::table('oferta_has_tag')->where('oferta_id', $id)->pluck('tag_id')->toArray();
}
if($tipoOferta == 'equipe' || (isset($data['oferta']) && $data['oferta']->tipo == 'EQ')){
$data['colaboradores'] = OfertaService::getColaboradoresOfertaEquipe();
}
$html = view('Oferta::admin/_form-oferta', $data)->render();
return response()->json(['status' => true, 'html' => $html]);
}
public function getPedidosPreVenda(Request $request){
$oferta = $this->oferta_m->find($request->input('id_oferta'));
$pedidos = 0;
if($oferta->pre_venda != $request->input('pre_venda') && $request->input('pre_venda') == 0){
$pedidos = GeralService::countPedidosPreVendaOferta($request->input('id_oferta'));
$pedidos = count($pedidos);
}
$json = ['status' => true, 'pedidos' => $pedidos];
return response()->json($json);
}
public function saveAjax(Request $request){
try {
$resultado = OfertaService::save($request);
} catch (Exception $e) {
return response()->json(['status' => false, 'message' => $e->getMessage()]);
}
return response()->json($resultado);
}
public function save(Request $request){
$post = $request->input();
$post['meta_keywords'] = (isset($post['meta_keywords'])) ? implode(',',$post['meta_keywords']) : null;
//$post['ocultar_desconto'] = 0;
foreach ($this->fields as $field) {
$arrayFields[] = $field->nome;
}
foreach ($this->fks as $fk) {
$arrayFields[] = $fk->nome;
}
if($request->hasFile('imagem')) {
//upload an image to the /img/tmp directory and return the filepath.
$file = $request->file('imagem');
$oferta = GeralService::uploadFile($file, 'oferta');
@unlink($file);
$arrayFields[] = 'thumbnail_principal';
$post['thumbnail_principal'] = $oferta->url;
}
$arrayFields[] = 'resolucao_imagem';
$arrayFields[] = 'preco_oferta';
$arrayFields[] = 'preco_mercado';
$arrayFields[] = 'preco_custo';
$arrayFields[] = 'custo_efetivo';
$arrayFields[] = 'percentual_desconto';
$arrayFields[] = 'url_video';
$arrayFields[] = 'agrupamento_produtos';
$arrayFields[] = 'instituicao_id';
$arrayFields[] = 'valor_desconto';
//$arrayFields[] = 'ocultar_desconto';
if($request->input('id')){
$dataAtual = date('Y-m-d H:i');
$OfertaCanal = Oferta::select(DB::raw("cho.id, cho.quantidade, cho.qtde_vendida, c.tipo, cho.disponibilidade_canal, cho.ordenacao"))
->join('canal_has_oferta as cho', 'cho.id_oferta', '=', 'oferta.id')
->join('canal as c', 'c.id', '=', 'cho.id_canal')
->whereRaw('cho.deleted_at IS NULL')
->where('c.data_inicio', '<=', $dataAtual)
->where('c.data_fim', '>=', $dataAtual)
->where('oferta.id', $request->input('id'))
->first();
$id_oferta = $this->oferta_m->editar($arrayFields, $post, $request->input('id'));
}else{
$arrayFields[] = 'responsavel_id';
$post['responsavel_id'] = Sentinel::getUser()->id;
$id_oferta = $this->oferta_m->criar($arrayFields, $post);
}
DB::table('oferta_has_tag')->where('oferta_id', $id_oferta)
->delete();
if(isset($post['tags']) && empty($post['tags'] == false)){
foreach($post['tags'] as $tag){
DB::table('oferta_has_tag')->insert([
'oferta_id' => $id_oferta,
'tag_id' => $tag,
]);
}
}
$produtos = [];
$estoque_oferta = 0;
if (isset($post['produto-checkbox']) && count($post['produto-checkbox'])){
foreach ($post['produto-checkbox'] as $key => $id_produto) {
$ofertaHasProduto = OfertaHasProduto::where('id_produto', $id_produto)->where('id_oferta', $id_oferta)->first();
if(!$ofertaHasProduto){
$ofertaHasProduto = new OfertaHasProduto();
$ofertaHasProduto->id_produto = $id_produto;
$ofertaHasProduto->id_oferta = $id_oferta;
}
$ofertaHasProduto->ordem = !empty($post['produto-ordem'][$key]) ? $post['produto-ordem'][$key] : (count($produtos) + 1);
$ofertaHasProduto->quantidade = $post['produto-quantidade-checkbox'][$key];
$ofertaHasProduto->estoque = $post['produto-estoque'][$key];
$ofertaHasProduto->preco_mercado = $post['produto-preco-mercado'][$key];
$ofertaHasProduto->preco_custo = $post['produto-preco-custo'][$key];
$ofertaHasProduto->custo_efetivo = $post['produto-custo-efetivo'][$key];
$ofertaHasProduto->valor_unitario = $post['produto-preco-venda'][$key];
$ofertaHasProduto->valor_total = $post['produto-preco-venda'][$key] * $post['produto-quantidade-checkbox'][$key];
$ofertaHasProduto->valor_caixa_status = $post['valor_caixa_status'][$key];
$ofertaHasProduto->qtd_produtos_caixa = $post['qtd_produtos_caixa'][$key];
$ofertaHasProduto->save();
$produtos[] = $id_produto;
$estoque_oferta += $ofertaHasProduto->estoque;
}
OfertaHasProduto::where('id_oferta', $id_oferta)->whereNotIn('id_produto', $produtos)->delete();
}else{
OfertaHasProduto::where('id_oferta', $id_oferta)->delete();
}
$basicInfo = BasicInfo::first();
if($basicInfo->liberar_canais == 1 && $request->input('id')){
$estoque_oferta = $post['agrupamento_produtos'] == 0 ? $post['estoque'] : $estoque_oferta;
if($OfertaCanal){
if($OfertaCanal->tipo == 'BF' || $OfertaCanal->tipo == 'OU'){
if($OfertaCanal->qtde_vendida > $OfertaCanal->quantidade){
$diferenca = $OfertaCanal->quantidade - $OfertaCanal->qtde_vendida;
$estoque_oferta = $estoque_oferta - abs($diferenca);
$sqlChanged = "disponibilidade_canal = {$estoque_oferta}";
$sqlUpdateOferta = "UPDATE oferta SET estoque = {$estoque_oferta} WHERE id = {$id_oferta}";
DB::update(DB::raw($sqlUpdateOferta));
}else{
$sqlChanged = "disponibilidade_canal = {$estoque_oferta}";
}
if($post['estoque'] > 0 && (empty($OfertaCanal->disponibilidade_canal) || $OfertaCanal->disponibilidade_canal == 0)){
$quantidade = $OfertaCanal->quantidade + $post['estoque'];
$sqlChanged .= ", quantidade = {$quantidade}";
if($OfertaCanal->ordenacao == 999){
$sqlChanged .= ", ordenacao = 10"; //calcular ordenação conforme quantidade disponível
}
}
}else{
$quantidade = $estoque_oferta + $OfertaCanal->qtde_vendida;
$sqlChanged = "disponibilidade_canal = {$estoque_oferta}, quantidade = {$quantidade}";
if($OfertaCanal->ordenacao == 999){
$sqlChanged .= ", ordenacao = 10";
}
}
$sqlUpdate = "UPDATE canal_has_oferta SET {$sqlChanged} WHERE id = {$OfertaCanal->id}";
DB::update(DB::raw($sqlUpdate));
Log::info($sqlUpdate);
}
}
\Session::flash('type', 'success');
\Session::flash('message', "Alteracoes salvas com sucesso!");
if($request->input('canal_id')){
return redirect('/admin/oferta/monitoramento?canal_id='.$request->input('canal_id').'&pesquisa='.$request->input('pesquisa'));
}else{
return redirect()->back();
}
}
public function uploadAjax(Request $request) {
if($request->hasFile('file')) {
//upload an image to the /img/tmp directory and return the filepath.
$file = $request->file('file');
$tmpFilePath = '/uploads/oferta/';
$tmpFileName = time() . '-' . $file->getClientOriginalName();
$file = $file->move(public_path() . $tmpFilePath, $tmpFileName);
$path = $tmpFilePath . $tmpFileName;
return response()->json(array('path'=> $path, 'filename' => $tmpFileName, 'url' => url($tmpFilePath.$tmpFileName)), 200);
} else {
return response()->json(false, 400);
}
}
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/oferta/';
$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/oferta/';
$tmpFileName = time() . '-' . $file->getClientOriginalName();
$file = $file->move(public_path() . $tmpFilePath, $tmpFileName);
$path = $tmpFilePath . $tmpFileName;
$info = pathinfo($tmpFilePath.$tmpFileName);
$ext = $info['extension'];
$imageMerged = GeralService::mergeImages($path, $ext);
$nome = 'quadrado-'.$tmpFileName;
$pathToMergedImage = "uploads/oferta/".$nome;
imagepng($imageMerged,$pathToMergedImage);
$this->oferta_m->criar_imagem(array('id_oferta' => $id, 'miniatura' => url($tmpFilePath.$nome),'thumbnail_principal' => url($tmpFilePath.$tmpFileName)));
return response()->json(array('path'=> $path, 'file_name'=>$nome), 200);
} else {
return response()->json(false, 200);
}
}
public function crop_image(Request $request) {
$img = \Image::make('uploads/oferta/'.$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/oferta/thumb_'.$request->input('file_name'))){
@unlink('uploads/oferta/'.$request->input('file_name'));
echo json_encode(array(
'status' => true,
'path' => '/uploads/oferta/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 delete($slug){
$id = Oferta::where('slug', $slug)->value('id');
$this->oferta_m->deletar($id);
\Session::flash('type', 'success');
\Session::flash('message', "Registro removido com sucesso!");
return redirect('admin/oferta');
}
public function deletar(Request $request){
$ofertas = $request->input('ids');
foreach ($ofertas as $id) {
$this->oferta_m->deletar($id);
}
return response()->json(['status' => true, 'message' => 'Registro(s) removido(s) com sucesso!']);
}
public function delete_imagem($id){
try{
$imagem = $this->oferta_m->getImagem($id);
$this->oferta_m->deletar_imagem($id);
unlink('uploads/oferta/'.$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()));
}
}
public function changeDate(Request $request, $slug){
$post = $request->input();
try{
$oferta = Oferta::where('slug', $slug)->first();
$days = abs($post['timeLapse'])/1000/60/60/24;
$time = ($post['timeLapse'] > 0) ? $oferta->data.' + '.$days.' days' : $oferta->data.' - '.$days.' days';
$oferta->data = date('Y-m-d', strtotime($time));
$oferta->save();
return response()->json(array('status' => true, 'message' => 'Registro atualizado 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 buscar(Request $request){
$post = $request->input();
$query = Oferta::select('oferta.*', DB::raw("CONCAT(oferta.titulo, ' ', oferta.sub_titulo) as nome_oferta"));
if($request->input('tipo')){
$query->where('oferta.tipo', $request->input('tipo'));
}else{
$query->whereNotIn('oferta.tipo', ['M']);
}
$query->having('nome_oferta', 'like', '%'.$post['term']['term'].'%');
$listaOfertas = $query->get();
$lista = [];
foreach ($listaOfertas as $objOferta) {
$objOferta->disponibilidade = ((isset($objOferta->produtos) && count($objOferta->produtos) == 1) ? $objOferta->produtos[0]->produto->disponibilidade : 0);
$lista[] = $objOferta;
}
return response()->json(array('items' => $lista));
}
public function ofertasEmDestaque(){
$data = [];
$data['ofertas'] = Oferta::select('oferta.*')
->join('canal_has_oferta as cho', 'cho.id_oferta', '=', 'oferta.id')
->join('canal as c', 'c.id', '=', 'cho.id_canal')
->where('c.data_inicio', '<', date('Y-m-d H:i:s'))
->where('c.data_fim', '>', date('Y-m-d H:i:s'))
->where('oferta.estoque' , '>', 0)
->orderBy('oferta.titulo', 'ASC')
->orderBy('oferta.sub_titulo', 'ASC')
->groupBy('oferta.id')
->with('canalHasOferta.canal')
->get();
//$data['ofertas'] = Oferta::orderBy('titulo', 'ASC')->orderBy('sub_titulo', 'ASC')->get();
$result = GeralService::buscarHtmlOfertasDestaqueAdmin();
if($result['status']){
$data['htmlOfertasDestaque'] = $result['html'];
}else{
$data['htmlOfertasDestaque'] = '';
}
return view('Oferta::admin/ofertas-destaque',$data);
}
public function adicionarOfertaDestaque(Request $request){
$post = $request->input();
$oferta = Oferta::find($post['id_oferta']);
$oferta->destaque = 1;
$oferta->save();
return response()->json(GeralService::buscarHtmlOfertasDestaqueAdmin());
}
public function removerOfertaDestaque(Request $request){
$post = $request->input();
$oferta = Oferta::find($post['id_oferta']);
$oferta->destaque = 0;
$oferta->save();
return response()->json(GeralService::buscarHtmlOfertasDestaqueAdmin());
}
public function duplicarOferta(Request $request){
$oferta_id = $request->input('oferta_id');
$nova_data = $request->input('nova_data');
$duplicar_canal = $request->input('duplicar_canal') ? $request->input('duplicar_canal') : false;
$response = GeralService::duplicarOferta($oferta_id, $nova_data, $duplicar_canal);
return response()->json($response);
}
}