| 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 : |
<?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;
}
}
}