403Webshell
Server IP : 54.233.248.239  /  Your IP : 172.28.20.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/Console/Commands/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Console/Commands/AtualizaSaldoProdutos.php
<?php

namespace App\Console\Commands;

use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Helper\ProgressBar;

use Illuminate\Console\Command;
use App\Modules\Produto\Models\Produto;
use App\Modules\Empresa\Models\Empresa;
use App\Modules\Estoque\Models\Estoque;
use App\Services\GeralService;

class AtualizaSaldoProdutos extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'atualiza_saldo_produtos';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Atualização Automática Saldo Produtos';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
        $this->output = new ConsoleOutput;
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        
        $this->info("\n" . date('d/m/Y H:i:s') . " - START GENERAL");
        
        //Atualiza
        $dateDelete = date('Ymd', strtotime("-2 day",strtotime(date('Y-m-d'))));
        $dateUpdate = date('Ymd', strtotime("-1 day",strtotime(date('Y-m-d'))));
        $Empresas   = GeralService::buscarEmpresasIntegracao();
        $BasicInfo  = \App\BasicInfo::find(1);
        
        foreach ($Empresas as $empresa) {

            $sigla              = strtoupper($empresa->sigla);
            $ultima_atualizacao_empresa = ($sigla == 'VVR' ? $BasicInfo->ultima_atualizacao_vvr : $BasicInfo->ultima_atualizacao_vdb);
            $ultima_atualizacao = date('Y-m-d', strtotime($ultima_atualizacao_empresa));
            $this->info("\n" . date('d/m/Y H:i:s') . " - EMPRESA {$sigla}");
            
            if($ultima_atualizacao && $ultima_atualizacao >= date('Y-m-d')){
                $this->info("\n" . date('d/m/Y H:i:s') . " - Rotina já foi executada em {$ultima_atualizacao_empresa}!");
                continue;
            }

            //DELETE OLD FILE
            $fileDelete = "saldos_estoque_{$sigla}_{$dateDelete}.csv";
            GeralService::deleteFile($fileDelete, 'files');

            //IMPORT NEW FILE
            $fileUpdate = "saldos_estoque_{$sigla}_{$dateUpdate}.csv";
            $filePath   = 'files/' . $fileUpdate;
            $url = config('filesystems.disks.s3.url').$filePath;

            $resultado = $this->importarSaldos($url, $empresa);

            $this->info("\n" . date('d/m/Y H:i:s') . " - " . count($resultado['atualizados']) . " atualizados");
            $this->info("\n" . date('d/m/Y H:i:s') . " - " . count($resultado['falhas']) . " não atualizados/localizados");

            if(count($resultado['atualizados']) > 0){
                if($sigla == 'VVR'){
                    $BasicInfo->ultima_atualizacao_vvr = date('Y-m-d H:i:s');
                }else{
                    $BasicInfo->ultima_atualizacao_vdb = date('Y-m-d H:i:s');
                }
                $BasicInfo->save();
            }

        }
        
        $this->info("\n" . date('d/m/Y H:i:s') . " - DONE GENERAL");

    }

    public function importarSaldos($url, $empresa){

        $row                 = 0;
        $continued           = [];
        $updated             = [];
        $data                = [];
        $data['atualizados'] = [];
        $data['falhas']      = [];
        $produtos            = GeralService::calcularAdegaProcessamento();

        try {
            
            @$fileOpen = fopen($url, "r");

            if (($handle = $fileOpen) !== FALSE) {
                while (($dados = fgetcsv($handle, 0, ";")) !== FALSE) {

                    $row++;

                    if($row == 1){
                        // $continued[] = ['line' => $row, 'dados' => $dados, 'message' => 'Primeira linha ignorada (Cabeçalho)'];
                        continue;
                    }

                    $sku        = $dados[1];
                    $quantidade = $dados[5];

                    $Produto = Produto::where('sku', $sku)->first();
                    if(!$Produto){
                        $continued[] = ['line' => $row, 'dados' => $dados, 'message' => 'Produto não encontrado!'];
                        continue;
                    }

                    $Estoque = Estoque::where('empresa_id', $empresa->id)->where('produto_id', $Produto->id)->first();
                    if(!$Estoque){
                        $continued[] = ['line' => $row, 'dados' => $dados, 'message' => 'Estoque não encontrado!'];
                        continue;
                    }

                    //Atualização Saldo Estoque
                    $Estoque->quantidade = $quantidade;
                    $Estoque->data_ultima_atualizacao = date('Y-m-d H:i:s');
                    $Estoque->save();
                    $updated[] = ['line' => $row, 'dados' => $Estoque, 'message' => 'Estoque atualizado com sucesso!'];

                    //Atualização Saldo Produto
                    if(isset($produtos[$Produto->id])):

                        $estoque       = 0;
                        $adega         = $produtos[$Produto->id]['adega'];
                        $processamento = $produtos[$Produto->id]['processamento'];
                        $reserva       = $produtos[$Produto->id]['reserva'];
                        foreach ($Produto->estoque as $estoque_empresa) {
                            $estoque += $estoque_empresa->quantidade;
                        }

                        $disponibilidade = $estoque - $adega - $processamento - $reserva;

                    else:
                        $estoque         = GeralService::getEstoqueProduto($Produto);
                        $disponibilidade = $estoque['disponibilidade'];
                        $reserva         = $estoque['reserva'];
                        $adega           = $estoque['adega'];
                        $processamento   = $estoque['em_processamento'];
                    endif;

                    $Produto->disponibilidade          = $disponibilidade;
                    $Produto->reserva                  = $reserva;
                    $Produto->qtd_adega                = $adega;
                    $Produto->qtd_em_processamento     = $processamento;
                    $Produto->ultima_atualizacao_saldo = date('Y-m-d H:i:s');
                    $Produto->save();
                    
                }

            }else{
                $this->info("\n" . date('d/m/Y H:i:s') . " - Não foi possível abrir o arquivo para importação");
                $this->info("\n" . date('d/m/Y H:i:s') . " - URL: {$url}");
            }

            $data['atualizados'] = $updated;
            $data['falhas']      = $continued;

            return $data;

        } catch (Exception $e) {
            return $data;            
        }

        

    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit