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/Oferta/Controllers/Admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Modules/Oferta/Controllers/Admin/AdminOfertaController.php
<?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);
	}

}

Youez - 2016 - github.com/yon3zu
LinuXploit