403Webshell
Server IP : 54.233.248.239  /  Your IP : 172.28.1.13
Web Server : Apache
System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/vinumday2_0/app/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Services/OfertaService.php
<?php 

namespace App\Services;

use App\Modules\Produto\Models\Produto;
use DB;
use Sentinel;
use Illuminate\Support\Facades\Log;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use Exception;
use Session;

use App\User;
use App\BasicInfo;
use App\CampoOption;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\Tema\Models\Tema;
use App\Modules\Instituicao\Models\Instituicao;
use App\Modules\OfertaHasProduto\Models\OfertaHasProduto;
use App\Modules\Colaborador\Models\Colaborador;

class OfertaService {

    public static function getTemas(){
        return Tema::select('id', 'nome')->orderBy('nome', 'ASC')->get();
    }

    public static function getInstituicoes(){
        return Instituicao::select('id', 'nome')->orderBy('nome', 'ASC')->get();
    }

    public static function getResponsaveis(){
        return 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 IN (1,12))'))->orderBy('first_name','ASC')->get();
    }

    public static function getTipos(){  
        return CampoOption::select('sis_campo_options.chave', 'sis_campo_options.valor')
        ->join('sis_campo_modulo as c', 'c.id', '=', 'sis_campo_options.id_campo_modulo')
        ->join('sis_modulos as m', 'm.id', '=', 'c.id_modulo')
        ->where('c.nome', 'tipo')->where('m.nome', 'Oferta')
        ->get();
    }

    public static function getCustoEfetivo($id_oferta){
        return OfertaHasProduto::select(DB::raw('SUM(produto.custo_efetivo * oferta_has_produto.quantidade) custo_efetivo'))->join('produto', 'produto.id', '=', 'oferta_has_produto.id_produto')->where('id_oferta', $id_oferta)->value('custo_efetivo');
    }

    public static function getTeorAlcoolico($id_oferta){
//        return OfertaHasProduto::selectRaw(DB::raw('MIN(cast(produto_caracteristica.teor_alcoolico as unsigned INTEGER)) teor_alcoolico'))
        $teor_alcoolico = OfertaHasProduto::selectRaw(DB::raw("REPLACE(MIN(produto_caracteristica.teor_alcoolico), '%', '') teor_alcoolico"))
        ->join('produto', 'produto.id', '=', 'oferta_has_produto.id_produto')
        ->join('produto_caracteristica', 'produto.id', '=', 'produto_caracteristica.id_produto')
        ->where('id_oferta', $id_oferta)
        ->value('teor_alcoolico');
        $teor_alcoolico = str_replace(',', '.', $teor_alcoolico);
        return $teor_alcoolico;
    }

    public static function save($request){

        $modulo    = \App\Gerador::where('nome', 'Oferta')->with('campos', 'fks')->first();
        $fields    = $modulo->campos;
        $fks       = $modulo->fks;
        $oferta_m = new Oferta();
        $post = $request->input();
        $post['meta_keywords'] = (isset($post['meta_keywords'])) ? implode(',',$post['meta_keywords']) : null;

        foreach ($fields as $field) {
            $arrayFields[] = $field->nome;
        }
        foreach ($fks as $fk) {
            $arrayFields[] = $fk->nome;
        }

        if(isset($post['titulo']) && empty($post['titulo'])){
            throw new \Exception('Campo obrigatório não informado: Título');
        }

        $enabledUpload = TRUE;
        if($request->input('oferta_id') && !empty($request->input('oferta_id'))){
            $Oferta = Oferta::find($request->input('oferta_id'));
            if(isset($post['thumbnail']) && $Oferta && $Oferta->thumbnail_principal == $post['thumbnail']){
                $enabledUpload = FALSE;
            }
        }

        //Salva Thumbnail
        if(isset($post['thumbnail']) && !empty($post['thumbnail']) && $enabledUpload){
            $arquivo = GeralService::uploadFile(FALSE, 'oferta', ['filename' => $post['thumbnail']]);
            if(!empty($arquivo->filename)){
                $arrayFields[] = 'thumbnail_principal';
                $post['thumbnail_principal'] = $arquivo->url;
                @unlink('uploads/oferta/' . $post['thumbnail']);
            }
        }

        $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[] = 'responsavel_id';
        $arrayFields[] = 'valor_desconto';
        $arrayFields[] = 'ocultar_desconto';

        $post['ocultar_desconto'] = $post['ocultar_desconto'] == 'true' ? 1 : 0;

        // $post['ocultar_desconto'] = 0;
        if($request->input('oferta_id') && !empty($request->input('oferta_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('oferta_id'))
            ->first();

            $id_oferta = $oferta_m->editar($arrayFields, $post, $request->input('oferta_id'));

        }else{
            $arrayFields[]          = 'responsavel_id';
            $post['responsavel_id'] = Sentinel::getUser()->id;
            $id_oferta = $oferta_m->criar($arrayFields, $post);
        }

        $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->valor_unitario = $post['produto-preco-venda'][$key];
                $ofertaHasProduto->custo_efetivo  = $post['produto-custo-efetivo'][$key];
                $ofertaHasProduto->valor_total    = $post['produto-preco-venda'][$key] * $post['produto-quantidade-checkbox'][$key];
                $ofertaHasProduto->valor_caixa_status    = isset($post['valor_caixa_status'][$key]) ? $post['valor_caixa_status'][$key] : 0;
				$ofertaHasProduto->qtd_produtos_caixa    = isset($post['qtd_produtos_caixa'][$key]) ? $post['qtd_produtos_caixa'][$key] : 0;
                $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();
        }

        DB::table('oferta_has_tag')->where('oferta_id', $id_oferta)
        ->delete();

        $tagsArray = $request->input('tags');

        if(isset($tagsArray) && empty($tagsArray) == false){
            foreach($tagsArray as $tag){
                DB::table('oferta_has_tag')->insert([
                    'oferta_id' => $id_oferta,
                    'tag_id'     => $tag,
                ]);
            }	
        }

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

            }
            
        }

        return ['status' => true, 'id' => $id_oferta];

    }

    public static function getColaboradoresOfertaEquipe(){
        $colaboradores = Colaborador::where('permitir_oferta_equipe', 1)->get();
        return $colaboradores;
    }

    public static function buscarOfertaEquipe(){
        $ofertaEquipe = Oferta::select('colaborador.frase', 'colaborador.citacao', 'colaborador.nome as nome_colaborador', 'colaborador.thumbnail_principal as imagem_colaborador', 'oferta.*')
        ->where('oferta.tipo', 'EQ')
        ->whereYear('oferta.data', date('Y'))
        ->whereMonth('oferta.data', date('m'))
        ->leftJoin('colaborador', 'colaborador.usuario_id', 'oferta.responsavel_id')
        ->with('produtos.produto')
        ->first();

        if (!$ofertaEquipe) {
            return false;
        }

        return $ofertaEquipe;
    }

    public static function buscarMeusProdutosMasterClass(){
        $clienteLogado = GeralService::buscarClienteLogado();

        $ofertas = Oferta::query()
            ->select('oferta.*')
            ->join('pedido_venda_has_oferta', 'pedido_venda_has_oferta.oferta_id', 'oferta.id')
            ->join('pedido_venda', 'pedido_venda.id', 'pedido_venda_has_oferta.pedido_venda_id')
            ->where('pedido_venda.id_cliente', $clienteLogado->id)
            ->whereIn('pedido_venda.id_status_pedido_venda', [2, 3, 7])
            ->pluck('oferta.id')
            ->toArray();

        if(count($ofertas) == 0){
            return [];
        }

        $produtos = Produto::query()
            ->select('produto.*', 'oferta.slug as slug_oferta')
            ->join('oferta_has_produto', 'oferta_has_produto.id_produto', 'produto.id')
            ->join('tipo_de_produto', 'tipo_de_produto.id', 'produto.id_tipo_produto')
            ->join('oferta', 'oferta.id', 'oferta_has_produto.id_oferta')
            ->whereIn('oferta_has_produto.id_oferta', $ofertas)
            ->where('tipo_de_produto.slug', 'masterclass')
            ->groupBy('produto.id')
            ->get();


        return $produtos;
    }

}

Youez - 2016 - github.com/yon3zu
LinuXploit