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/PedidoVenda/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Modules/PedidoVenda/Services/PedidoVendaService.php
<?php 

namespace App\Modules\PedidoVenda\Services;

use DB;
use Sentinel;
use App\BasicInfo;
use App\Services\GeralService;
use Illuminate\Support\Facades\Log;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\Produto\Models\Produto;
use App\Modules\Cadastro\Models\Cadastro;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\CanalHasOferta\Models\CanalHasOferta;
use App\Modules\OfertaHasProduto\Models\OfertaHasProduto;
use App\Modules\QuantidadeReserva\Models\QuantidadeReserva;
use App\Modules\PedidoVendaHistorico\Models\PedidoVendaHistorico;
use App\Modules\PedidoVendaHasProduto\Models\PedidoVendaHasProduto;

class PedidoVendaService{

	public static function gerarPedidoInterno($request){

		$resultado = new \stdClass;
        $resultado->status  = true;
        $resultado->message = 'Pedido Interno criado com sucesso!';

        $cadastro = Cadastro::where('id', $request->input('id_cliente'))->first();

		// CRIAR PEDIDO VENDA
		$custo_efetivo = 0;
		$quantidade    = 0;
		$produtos      = $request->input('produtos');
        $ofertas       = [];
        $preco_oferta  = 0;
        $preco_mercado = 0;

        foreach ($produtos as $produto) {

            $Produto = Produto::where('id', $produto['produto_id'])->first();

            $produto_preco_oferta  = $produto['preco_venda'] * $produto['quantidade'];
            $produto_preco_mercado = $produto['preco_mercado'] * $produto['quantidade'];
            $produto_preco_custo   = $produto['preco_custo'] * $produto['quantidade'];

            //CRIAÇÃO DA OFERTA
            $oferta = new Oferta;
            $oferta->titulo = $Produto->nome; // CONFIRMAR
            $oferta->data = date('Y-m-d', strtotime($request->input('data_fechamento')));
            $oferta->created_at = date('Y-m-d H:i:s');
            $oferta->estoque = 1;
            $oferta->qtde_vendida = 0;
            $percentual_desconto = (!empty($produto_preco_mercado) && $produto_preco_mercado != '0' ? (1 - ($produto_preco_oferta  / $produto_preco_mercado)) * 100 : 0);
            $oferta->percentual_desconto = number_format($percentual_desconto, 2, '.', '');
            $oferta->preco_mercado = $produto_preco_mercado;
            $oferta->preco_custo = $produto_preco_custo;
            $oferta->preco_oferta = $produto_preco_oferta;
            $oferta->valor_desconto = 0;
            $oferta->quantidade_maxima_por_cliente = 1;
            $oferta->resolucao_imagem = 'resolucao-1';
            $oferta->tema_id = 1; // CONFIRMAR
            $oferta->responsavel_id = Sentinel::getUser()->id; //Usuário Logado
            $oferta->tipo = 'INT'; //INTERNA
            $oferta->save();

            if($oferta){

                $preco_oferta   += $oferta->preco_oferta;
                $preco_mercado  += $oferta->preco_mercado;
                $quantidade     += 1;

                $id_oferta  = $oferta->id;
                $id_produto = $produto['produto_id'];

                $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          = 1;
                $ofertaHasProduto->quantidade     = $produto['quantidade'];
                $ofertaHasProduto->estoque        = $produto['quantidade'];
                $ofertaHasProduto->preco_mercado  = $produto['preco_mercado'];
                $ofertaHasProduto->preco_custo    = $produto['preco_custo'];
                $ofertaHasProduto->valor_unitario = $produto['preco_venda'];
                $ofertaHasProduto->valor_total    = $produto['preco_venda'] * $produto['quantidade'];
                $ofertaHasProduto->valor_caixa_status = $produto['valor_caixa_status'];
                $ofertaHasProduto->qtd_produtos_caixa = $produto['qtd_produtos_caixa'];
                $ofertaHasProduto->save();

                $ofertas[]  = $oferta;

            }

        }

        $pedidoVenda = new PedidoVenda();
        $pedidoVenda->saldo_usado = 0;
        $pedidoVendaHistorico = new PedidoVendaHistorico();

        $pedidoVenda->id_cliente             = $cadastro->id;
        $pedidoVenda->empresa_id             = $cadastro->empresa_id;
        $pedidoVenda->unidade_negocio_id     = GeralService::checkUnidadeNegocio($pedidoVenda, 'pedido-venda');
        $pedidoVenda->id_usuario_responsavel = Sentinel::getUser()->id; //Usuário Logado

        $subtotal = $preco_oferta;
        $ajuste   = 0;
        $total    = $preco_oferta;

        $pedidoVenda->subtotal        = $subtotal;
        $pedidoVenda->total           = $total;
        $pedidoVenda->ajuste          = $ajuste;
        $pedidoVenda->data_fechamento = $request->input('data_fechamento');

        $pedidoVenda->nm_referencia          = 'Pedido Interno Plataforma';
        $pedidoVenda->assunto                = $request->input('assunto');
        $pedidoVenda->id_condicao_comercial  = 1;
        $pedidoVenda->id_pedido_venda_categoria  = $request->input('id_pedido_venda_categoria');
        $pedidoVenda->tipo_deposito          = 'INT';                                         // INTERNO
        $pedidoVenda->nome_depositante       = $cadastro->nome . ' ' . $cadastro->sobrenome;
        $pedidoVenda->id_status_pedido_venda = 2;                                             // Aprovado
        $pedidoVenda->save();

        $pedidoVendaHistorico->id_pedido_venda_status = $pedidoVenda->id_status_pedido_venda;
        $pedidoVendaHistorico->id_pedido_venda        = $pedidoVenda->id;
        $pedidoVendaHistorico->data                   = date('Y-m-d H:i');
        $pedidoVendaHistorico->notificar_cliente      = 0;
        $pedidoVendaHistorico->id_colaborador         = 1;

        $nr_ofertas        = $quantidade;
        $valor_economizado = $preco_mercado - $preco_oferta;
        $qtd_garrafas      = 0;

        foreach ($ofertas as $oferta) {
            foreach ($oferta->produtos as $ofertaHasProduto) {
                $pedidoVendaProduto = new PedidoVendaHasProduto();
                $pedidoVendaProduto->id_oferta       = $oferta->id;
                $pedidoVendaProduto->id_produto      = $ofertaHasProduto->id_produto;
                $pedidoVendaProduto->id_pedido_venda = $pedidoVenda->id;
                $pedidoVendaProduto->quantidade      = $ofertaHasProduto->quantidade;
                $pedidoVendaProduto->valor_total     = $ofertaHasProduto->valor_total;
                $pedidoVendaProduto->save();
                $qtd_garrafas += $ofertaHasProduto->quantidade;
            }
        }

        DB::table('pedido_venda_has_oferta')->insert([
            [
                'pedido_venda_id'   => $pedidoVenda->id,
                'oferta_id'         => $oferta->id,
                'quantidade'        => 1,
                'valor_unitario'    => $oferta->preco_oferta,
                'valor_total'       => $oferta->preco_oferta,
                'desconto_ocultado' => 0,
                'created_at'        => date('Y-m-d H:i:s')
            ]
        ]);

        $pedidoVenda->qtd_garrafas      = $qtd_garrafas;
        $pedidoVenda->valor_economizado = $valor_economizado;
        $pedidoVenda->nr_ofertas        = $nr_ofertas;

        $pedidoVenda->save();
        $pedidoVendaHistorico->save();

        GeralService::recalcularAdega($pedidoVenda->id_cliente, $pedidoVenda->id, FALSE, FALSE);

        $resultado->url = url('/admin/pedido-venda/edit/' . $pedidoVenda->id);

        return $resultado;

	}

	public static function geradorItemProduto($request){

        //Verifica Filtro Última Compra
        $filtro_ultimas_compras = "";
        if($request->input('periodo_compra')){

            $data_inicio_compra = date('Y-m-d', strtotime("-".$request->input('periodo_compra')." day",strtotime(date('Y-m-d'))));
            $data_fim_compra    = date('Y-m-d');

            $filtro_ultimas_compras = " AND oc.data_inclusao BETWEEN '{$data_inicio_compra}' AND '{$data_fim_compra} 23:59:59'";

        }

        $query = Produto::select(
            'produto.*', 
            DB::raw("(SELECT SUM(rc.quantidade) FROM requisicao_compra rc WHERE rc.produto_id = produto.id AND rc.`status` = 'P' AND rc.tipo = 'P') AS 'pedidos_extras'"),
            DB::raw("(SELECT SUM(rc.quantidade) FROM requisicao_compra rc WHERE rc.produto_id = produto.id AND rc.`status` = 'P' AND rc.tipo = 'R') AS 'requisicoes'"),
            DB::raw("(SELECT SUM(oci.quantidade) FROM ordem_compra_item oci WHERE oci.produto_id = produto.id AND EXISTS(
                        SELECT 1 FROM ordem_compra oc WHERE oc.id = oci.ordem_compra_id AND oc.status IN ('P','AR','EN') {$filtro_ultimas_compras}
                    )) AS 'ultimas_compras'"),
            DB::raw("(SELECT SUM(oci.quantidade) FROM ordem_compra_item oci WHERE oci.produto_id = produto.id AND EXISTS(
                        SELECT 1 FROM ordem_compra oc WHERE oc.id = oci.ordem_compra_id AND oc.status IN ('AP') {$filtro_ultimas_compras}
                    )) AS 'ultimas_compras_parcial'")
        );

        //FILTROS

        //fornecedor
        if($request->input('fornecedor_id')){
            $query->where('produto.id_fornecedor', $request->input('fornecedor_id'));
        }

        //canal
        if($request->input('canal_id')){
            $query->whereRaw(DB::raw('EXISTS (SELECT 1 FROM oferta_has_produto ohp, canal_has_oferta cho WHERE cho.deleted_at IS NULL AND ohp.id_produto = produto.id AND cho.id_oferta = ohp.id_oferta AND cho.id_canal = ' . $request->input('canal_id') . ')'));
        }

        //tipo oferta
        if($request->input('tipo_oferta')){
            $query->whereRaw(DB::raw("EXISTS (SELECT 1 FROM oferta_has_produto ohp, oferta o WHERE ohp.id_produto = produto.id AND o.id = ohp.id_oferta AND o.tipo = '" . $request->input('tipo_oferta') . "')"));
        }

        //período oferta
        if($request->input('periodo_oferta')){

            $data_inicio_oferta = date('Y-m-d', strtotime("-".$request->input('periodo_oferta')." day",strtotime(date('Y-m-d'))));
            $data_fim_oferta    = date('Y-m-d');
            
            $query->whereRaw(DB::raw("EXISTS (SELECT 1 FROM oferta_has_produto ohp, oferta o WHERE ohp.id_produto = produto.id AND o.id = ohp.id_oferta AND o.data BETWEEN '{$data_inicio_oferta}' AND '{$data_fim_oferta}')"));
        }

        //período compra
        if($request->input('periodo_compra')){

            $data_inicio_compra = date('Y-m-d', strtotime("-".$request->input('periodo_compra')." day",strtotime(date('Y-m-d'))));
            $data_fim_compra    = date('Y-m-d');
            
            $query->whereRaw(DB::raw("EXISTS (SELECT 1 FROM ordem_compra_item oci, ordem_compra o WHERE oci.produto_id = produto.id AND o.id = oci.ordem_compra_id AND o.data_inclusao BETWEEN '{$data_inicio_compra}' AND '{$data_fim_compra} 23:59:59')"));
        }

        //produto
        if($request->input('produto_id')){
            $query->where('produto.id', $request->input('produto_id'));
        }

        //produto
        if($request->input('item_id')){
            $query->where('produto.id', $request->input('item_id'));
        }

        //Novos Produtos
        if($request->input('produtos_novos') && $request->input('produtos_novos') == 'S'){
            $query->whereRaw(DB::raw('NOT EXISTS (SELECT 1 FROM oferta_has_produto ofp_new WHERE ofp_new.id_produto = produto.id)'));
            $query->whereRaw(DB::raw('NOT EXISTS (SELECT 1 FROM pedido_venda_has_produto pvhp WHERE pvhp.id_produto = produto.id)'));
        }

        $produto = $query->first();

        $produto->percentual_desconto = (!empty($produto->preco_mercado) && $produto->preco_mercado != '0' ? (1 - ($produto->preco_de_venda  / $produto->preco_mercado)) * 100 : 0);
        $produto->percentual_markup   = (!empty($produto->preco_custo) && $produto->preco_custo != '0' ? (($produto->preco_de_venda  / $produto->preco_custo) - 1) * 100 : 0);

        //Ofertas x Canal
        foreach ($produto->ofertas as $oferta){

            if(isset($oferta->oferta) && $oferta->oferta->tipo == 'C'){
                $CanalHasOferta = CanalHasOferta::where('id_oferta', $oferta->id_oferta)->orderBy('id', 'desc')->first();
                if($CanalHasOferta){
                    $oferta->oferta->canal = $CanalHasOferta->canal;
                }
            }

            $PedidoVendaHasProduto = PedidoVendaHasProduto::select(DB::raw("SUM(quantidade) AS 'quantidade'"))
            ->where('id_oferta', $oferta->id_oferta)
            ->where('id_produto', $produto->id)
            ->whereRaw(DB::raw("EXISTS (SELECT 1 FROM pedido_venda pv WHERE pv.id = pedido_venda_has_produto.id_pedido_venda AND pv.id_status_pedido_venda IN (1,2,7,9))"))
            ->groupBy('id_oferta')
            ->first();

            $oferta->quantidade = ($PedidoVendaHasProduto ? $PedidoVendaHasProduto->quantidade : 0);

        }

        //Estoque
        $produto->estoque = GeralService::getEstoqueProduto($produto);

        $adega            = str_replace(['.', ','], "", $produto->estoque['adega']);
        $em_processamento = str_replace(['.', ','], "", $produto->estoque['em_processamento']);
        $disponibilidade  = str_replace(['.', ','], "", $produto->estoque['disponibilidade']);

        //VALIDAÇÃO VALORES ACIMA DE 1 MIL
        $estoque = ['adega' => $adega, 'em_processamento' => $em_processamento, 'disponibilidade' => $disponibilidade];
        $produto->estoque = array_merge($produto->estoque, $estoque);

        $produto->saldo = ($produto->estoque['estoque'] - $produto->estoque['adega'] - $produto->estoque['em_processamento'] - $produto->pedidos_extras - $produto->requisicoes) + $produto->ultimas_compras + $produto->ultimas_compras_parcial;
        $saldo          = $produto->saldo;

		$QuantidadeReserva      = QuantidadeReserva::select('qtde_sugerida')->where('qtde_inicial_saldo', '<=', abs($produto->saldo))->where('qtde_final_saldo', '>=', abs($produto->saldo))->first();
		$produto->reserva       = $produto->estoque['reserva'];
		$produto->qtde_sugerida = $produto->saldo > 0 ? 0 : abs($produto->saldo) + $produto->reserva;
		$produto->saldo_final   = ($saldo > 0 ? (abs($produto->saldo) - $produto->reserva) : abs($produto->saldo) + $produto->reserva);
        if($saldo < 0){
            $produto->saldo_final = -abs($produto->saldo_final);
        }
        $produto->saldo           = abs($produto->saldo);
        $produto->saldo           = ($saldo >= 0 ? $produto->saldo : -abs($produto->saldo));
        $produto->disponibilidade = ($produto->estoque['disponibilidade'] > 0 ? $produto->estoque['disponibilidade'] : $produto->estoque['disponibilidade'] + $produto->reserva);

        return $produto;

    }

}

Youez - 2016 - github.com/yon3zu
LinuXploit