| 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/Modules/Estoque/Controllers/Admin/ |
Upload File : |
<?php
namespace App\Modules\Estoque\Controllers\Admin;
set_time_limit(0);
ini_set('max_execution_time', 600); //10 minutes
use Sentinel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Mail;
use DB;
use Exception;
use App\Http\Requests;
use App\Http\Controllers\BaseController;
use App\Modules\Estoque\Models\Estoque;
use App\Modules\EstoqueLog\Models\EstoqueLog;
use App\Modules\EstoqueLogTransferencia\Models\EstoqueLogTransferencia;
use App\Modules\Produto\Models\Produto;
use App\Modules\ProdutoErp\Models\ProdutoErp;
use App\Modules\Empresa\Models\Empresa;
use App\Services\GeralService;
use App\Services\ErpService;
class AdminEstoqueController extends BaseController
{
private $modulo;
private $fields;
private $fks;
private $lastInsertId;
public function __construct(){
parent::__construct();
$this->middleware('auth');
$this->modulo = \App\Gerador::where('nome', 'Estoque')->with('campos', 'fks')->first();
$this->fields = $this->modulo->campos;
$this->fks = $this->modulo->fks;
$this->estoque_m = new Estoque();
}
public function index(){
$query = $this->estoque_m->select('estoque.*');
$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, 'estoque.'.$fk->nome, '=', $on);
$query->addSelect($table.'.'.$fk->campoRelacionado->nome.' as fk'.$fk->id);
$data['fields_listagem'][] = $fk;
}
}
$data['estoques'] = $query->groupBy('estoque.id')->get();
usort($data['fields_listagem'], function($a, $b) {
return $a->ordem - $b->ordem;
});
return view('Estoque::admin/estoque',$data);
}
public function importacaoSaldos(Request $request){
set_time_limit(1800);
ini_set('memory_limit', '1024M');
$post = $request->input();
if(empty($post)){
return view('Estoque::admin/importacao-saldos', ['empresas' => Empresa::all()]);
}
$produtos = GeralService::calcularAdegaProcessamento();
if(!$produtos){
return redirect('admin/estoque/importacao-saldos')
->with('type', 'error')
->with('message', "Erro ao Calcular Adega e Processamento!");
}
if(!$request->hasFile('file')) {
return redirect('admin/estoque/importacao-saldos')
->with('type', 'error')
->with('message', "Nenhum arquivo enviado!");
}
$file = $request->file('file');
$tmpFileName = $file->getClientOriginalName();
$file->move(public_path(), $tmpFileName);
$userLogado = Sentinel::getUser();
$empresaId = $post['empresa_id'];
$row = 0;
$continued = [];
$updated = [];
$logs = [];
$start = date('Y-m-d H:i:s');
DB::beginTransaction();
try {
$produtosCache = [];
$estoquesCache = [];
if (($handle = fopen($tmpFileName, "r")) !== FALSE) {
while (($dados = fgetcsv($handle, 0, ";")) !== FALSE) {
$row++;
if($row == 1){
$cabecalho = $dados;
continue;
}
$sku = $dados[2];
$quantidade = $dados[5];
if (!isset($produtosCache[$sku])) {
$produtosCache[$sku] = Produto::where('sku', $sku)->first();
}
$Produto = $produtosCache[$sku];
if(!$Produto){
$continued[] = ['line' => $row, 'dados' => $dados, 'message' => 'Produto não encontrado!'];
continue;
}
$cacheKey = $empresaId . '_' . $Produto->id;
if (!isset($estoquesCache[$cacheKey])) {
$estoquesCache[$cacheKey] = Estoque::where('empresa_id', $empresaId)
->where('produto_id', $Produto->id)
->first();
}
$Estoque = $estoquesCache[$cacheKey];
if(!$Estoque){
$continued[] = ['line' => $row, 'dados' => $dados, 'message' => 'Estoque não encontrado!'];
continue;
}
DB::table('estoque')
->where('id', $Estoque->id)
->update([
'quantidade' => $quantidade,
'data_ultima_atualizacao' => date('Y-m-d H:i:s')
]);
$updated[] = ['line' => $row, 'dados' => $Estoque, 'message' => 'Estoque atualizado com sucesso!'];
$estoque = 0;
if(isset($produtos[$Produto->id])){
$adega = $produtos[$Produto->id]['adega'];
$processamento = $produtos[$Produto->id]['processamento'];
$reserva = $produtos[$Produto->id]['reserva'] ?? 0;
foreach ($Produto->estoque as $estoque_empresa) {
$estoque += $estoque_empresa->quantidade;
}
$disponibilidade = $estoque - $adega - $processamento - $reserva;
} else {
$estoqueCalc = GeralService::getEstoqueProduto($Produto);
$estoque = $estoqueCalc['disponibilidade'];
$disponibilidade = $estoqueCalc['disponibilidade'];
$reserva = $estoqueCalc['reserva'];
$adega = $estoqueCalc['adega'];
$processamento = $estoqueCalc['em_processamento'];
}
DB::table('produto')
->where('id', $Produto->id)
->update([
'disponibilidade' => $disponibilidade,
'reserva' => $reserva,
'qtd_adega' => $adega,
'qtd_em_processamento' => $processamento,
'ultima_atualizacao_saldo' => date('Y-m-d H:i:s')
]);
$logs[] = [
'produto_id' => $Produto->id,
'data_ultima_atualizacao' => date('Y-m-d H:i:s'),
'observacao' => '',
'quantidade_empresa' => json_encode([$Estoque->empresa->sigla => $quantidade]),
'estoque' => $estoque,
'adega' => $adega,
'em_processamento' => $processamento,
'disponibilidade' => $disponibilidade,
'reserva' => $reserva,
'status' => 1,
'user_id' => $userLogado ? $userLogado->id : 1,
];
if (count($logs) >= 500) {
DB::table('estoque_log')->insert($logs);
$logs = [];
}
}
fclose($handle);
}
if (!empty($logs)) {
DB::table('estoque_log')->insert($logs);
}
DB::commit();
@unlink($tmpFileName);
} catch (\Exception $e) {
// Rollback em caso de erro
DB::rollBack();
// Log do erro
\Log::error('Erro na importação de saldos: ' . $e->getMessage());
return redirect('admin/estoque/importacao-saldos')
->with('type', 'error')
->with('message', "Erro durante a importação: " . $e->getMessage());
}
$data = [
'empresas' => Empresa::all(),
'cabecalhos' => $cabecalho ?? [],
'atualizados' => $updated,
'falhas' => $continued
];
return view('Estoque::admin/importacao-saldos', $data);
}
public function OldimportacaoSaldos(Request $request){
$post = $request->input();
$data = [];
if(empty($post)){
}else{
$data = $post;
$produtos = GeralService::calcularAdegaProcessamento();
if(!$produtos){
\Session::flash('type', 'error');
\Session::flash('message', "Erro ao Calcular Adega e Processamento!");
return redirect('admin/estoque/importacao-saldos');
}
if($request->hasFile('file')) {
$file = $request->file('file');
$tmpFileName = $file->getClientOriginalName();
$file = $file->move(public_path(), $tmpFileName);
$userLogado = Sentinel::getUser();
$row = 0;
$continued = [];
$updated = [];
$start = date('Y-m-d H:i:s');
// $cabecalho = ['Produto','Código','Preço','UN','Localização','Estoque atual'];
$cabecalho = ['ID','Produto','Código (SKU)','GTIN/EAN','Localização','Saldo em estoque'];
$logs = [];
if (($handle = fopen($tmpFileName, "r")) !== FALSE) {
while (($dados = fgetcsv($handle, 0, ";")) !== FALSE) {
$row++;
if($row == 1){
$continued[] = ['line' => $row, 'dados' => $dados, 'message' => 'Primeira linha ignorada (Cabeçalho)'];
$cabecalho = $dados;
continue;
}
$sku = $dados[2];
$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', $post['empresa_id'])->where('produto_id', $Produto->id)->first();
if(!$Estoque){
$continued[] = ['line' => $row, 'dados' => $dados, 'message' => 'Estoque não encontrado!'];
continue;
}
DB::table('estoque')
->where('id', $Estoque->id)
->update([
'quantidade' => $quantidade,
'data_ultima_atualizacao' => date('Y-m-d H:i:s')
]);
$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 = isset($produtos[$Produto->id]['reserva']) ? $produtos[$Produto->id]['reserva'] : 0;
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;
DB::table('produto')
->where('id', $Produto->id)
->update([
'disponibilidade' => $disponibilidade,
'reserva' => $reserva,
'qtd_adega' => $adega,
'qtd_em_processamento' => $processamento,
'ultima_atualizacao_saldo' => date('Y-m-d H:i:s')
]);
$log = [
'produto_id' => $Produto->id,
'data_ultima_atualizacao' => $Produto->ultima_atualizacao_saldo,
'observacao' => '',
'quantidade_empresa' => json_encode([$Estoque->empresa->sigla => $quantidade]),
'estoque' => $estoque,
'adega' => $adega,
'em_processamento' => $processamento,
'disponibilidade' => $disponibilidade,
'reserva' => $reserva,
'status' => 1,
'user_id' => $userLogado ? $userLogado->id : 1,
];
$logs[] = $log;
}
}
$end = date('Y-m-d H:i:s');
$data['cabecalhos'] = $cabecalho;
$data['atualizados'] = $updated;
$data['falhas'] = $continued;
@unlink($tmpFileName);
DB::table('estoque_log')
->insert($logs);
}
}
$data['empresas'] = Empresa::all();
return view('Estoque::admin/importacao-saldos', $data);
}
public function transferirEstoqueProdutos(Request $request){
$post = $request->input();
$siglaDestino = 'VVR';
$destino = Empresa::where('sigla', $siglaDestino)->first();
$produtos = $post['produtos'];
if(!$destino){
$status = false;
$message = "Empresa Desino Sigla: {$siglaDestino} não Localizada";
}else{
$status = true;
$message = "Transferências realizadas com sucesso!";
$Produtos = Produto::whereIn('id', $produtos)->get();
$Origens = Empresa::whereRaw("api_key_tiny_erp <> '' AND sigla <> '{$siglaDestino}'")->get();
foreach ($Produtos as $produto) {
foreach ($Origens as $origem) {
try {
//Alteração Estoque Saída (ORIGEM)
$EstoqueSaida = Estoque::where('produto_id', $produto->id)->where('empresa_id', $origem->id)->first();
$quantidade = $EstoqueSaida->quantidade;
$dados = ['produto_id' => $produto->id, 'origem' => $origem->id, 'destino' => $destino->id, 'quantidade' => $quantidade];
if($EstoqueSaida->quantidade > 0){
DB::beginTransaction();
//Alteração Estoque Saída (ORIGEM)
$ProdutoErp = ProdutoErp::where('produto_id', $produto->id)->where('empresa_id', $origem->id)->first();
$objEstoque = new \stdClass();
$objEstoque->produto_erp = $ProdutoErp;
$objEstoque->tipo = 'S';
$objEstoque->quantidade = $quantidade;
$objEstoque->observacoes = "Acerto MKP";
$response = ErpService::alterarEstoque($objEstoque);
if($response && $response->retorno->status_processamento != 3){
throw new Exception(json_encode($response));
}
$EstoqueSaida->quantidade = 0;
$EstoqueSaida->data_ultima_atualizacao = date('Y-m-d H:i:s');
$EstoqueSaida->save();
//Alteração Estoque Entrada (DESTINO)
$ProdutoErp = ProdutoErp::where('produto_id', $produto->id)->where('empresa_id', $destino->id)->first();
$objEstoque = new \stdClass();
$objEstoque->produto_erp = $ProdutoErp;
$objEstoque->tipo = 'E';
$objEstoque->quantidade = $quantidade;
$objEstoque->observacoes = "Acerto MKP";
$response = ErpService::alterarEstoque($objEstoque);
if($response && $response->retorno->status_processamento != 3){
throw new Exception(json_encode($response));
}
$ultima_atualizacao = date('Y-m-d H:i:s');
$EstoqueEntrada = Estoque::where('produto_id', $produto->id)->where('empresa_id', $destino->id)->first();
if(!$EstoqueEntrada){
$EstoqueEntrada = new Estoque;
$EstoqueEntrada->produto_id = $produto->id;
$EstoqueEntrada->empresa_id = $destino->id;
$EstoqueEntrada->quantidade = $quantidade;
}else{
$EstoqueEntrada->quantidade = $EstoqueEntrada->quantidade + $quantidade;
}
$EstoqueEntrada->data_ultima_atualizacao = $ultima_atualizacao;
$EstoqueEntrada->save();
$Produto = Produto::where('id', $produto->id)->first();
$Produto->ultima_atualizacao_saldo = $ultima_atualizacao;
$Produto->save();
//SaveLog
EstoqueLogTransferencia::saveLog($dados);
DB::commit();
}
} catch (Exception $e) {
DB::rollBack();
EstoqueLogTransferencia::saveLog($dados, false, $e->getMessage());
$status = false;
$message = "Produto: {$produto->sku} x Empresa: {$origem->sigla} " . $e->getMessage();
}
if($status == false){ break; }
}
if($status == false){ break; }
}
}
$json = ['status' => $status, 'message' => $message];
return response()->json($json);
}
public function transferirEstoqueProduto(Request $request){
$post = $request->input();
$user = Sentinel::getUser();
try {
DB::beginTransaction();
//Alteração Estoque Saída (ORIGEM)
$EstoqueSaida = Estoque::where('produto_id', $post['produto_id'])->where('empresa_id', $post['origem'])->first();
if($EstoqueSaida->quantidade < $post['quantidade']){
throw new Exception("Quantidade não pode ser maior que Saldo " . $EstoqueSaida->empresa->sigla);
}
//Alteração Estoque Saída (ORIGEM)
$ProdutoErp = ProdutoErp::where('produto_id', $post['produto_id'])->where('empresa_id', $post['origem'])->first();
$objEstoque = new \stdClass();
$objEstoque->produto_erp = $ProdutoErp;
$objEstoque->tipo = 'S';
$objEstoque->quantidade = $post['quantidade'];
$objEstoque->observacoes = "Acerto MKP";
$response = ErpService::alterarEstoque($objEstoque);
if($response && $response->retorno->status_processamento != 3){
throw new Exception(json_encode($response));
}
$EstoqueSaida->quantidade = $EstoqueSaida->quantidade - $post['quantidade'];
$EstoqueSaida->data_ultima_atualizacao = date('Y-m-d H:i:s');
$EstoqueSaida->save();
//Alteração Estoque Entrada (DESTINO)
$ProdutoErp = ProdutoErp::where('produto_id', $post['produto_id'])->where('empresa_id', $post['destino'])->first();
$objEstoque = new \stdClass();
$objEstoque->produto_erp = $ProdutoErp;
$objEstoque->tipo = 'E';
$objEstoque->quantidade = $post['quantidade'];
$objEstoque->observacoes = "Acerto MKP";
$response = ErpService::alterarEstoque($objEstoque);
if($response && $response->retorno->status_processamento != 3){
throw new Exception(json_encode($response));
}
$ultima_atualizacao = date('Y-m-d H:i:s');
$EstoqueEntrada = Estoque::where('produto_id', $post['produto_id'])->where('empresa_id', $post['destino'])->first();
if(!$EstoqueEntrada){
$EstoqueEntrada = new Estoque;
$EstoqueEntrada->produto_id = $post['produto_id'];
$EstoqueEntrada->empresa_id = $post['destino'];
$EstoqueEntrada->quantidade = $post['quantidade'];
}else{
$EstoqueEntrada->quantidade = $EstoqueEntrada->quantidade + $post['quantidade'];
}
$EstoqueEntrada->data_ultima_atualizacao = $ultima_atualizacao;
$EstoqueEntrada->save();
$Produto = Produto::where('id', $post['produto_id'])->first();
$Produto->ultima_atualizacao_saldo = $ultima_atualizacao;
$Produto->save();
//SaveLog
EstoqueLogTransferencia::saveLog($post);
$json = array(
'status' => true,
'message' => "Estoque transferido com sucesso!",
'ultima_atualizacao' => date('d/m/Y H:i', strtotime($ultima_atualizacao))
);
DB::commit();
return response()->json($json);
} catch (Exception $e) {
DB::rollBack();
EstoqueLogTransferencia::saveLog($post, false, $e->getMessage());
$json = array(
'status' => false,
'message' => $e->getMessage()
);
return response()->json($json);
}
}
public function transferenciasEstoque(Request $request){
$post = $request->input();
$data = [];
if(empty($post)){
$data['produtos'] = [];
}else{
$data = $post;
$query = Produto::where('situacao', '=', 'A');
if(isset($post['produto']) && $post['produto']){
$query->where(function ($query) use ($post) {
$query->where('produto.nome', 'like', '%'.$post['produto'].'%')
->OrWhere('produto.sku', 'like', '%'.$post['produto'].'%');
});
}
if(isset($post['data_inicial']) && $post['data_inicial']){
$query->where('ultima_atualizacao_saldo', '>=', $post['data_inicial'] . ' 00:00:00');
}
if(isset($post['data_final']) && $post['data_final']){
$query->where('ultima_atualizacao_saldo', '<=', $post['data_final'].' 23:59:59');
}
if(isset($post['saldo_minimo']) && (!empty($post['saldo_minimo']) || $post['saldo_minimo'] == '0')){
$query->whereRaw('EXISTS (SELECT 1 FROM estoque WHERE estoque.produto_id = produto.id AND estoque.quantidade >= ' . $post['saldo_minimo'] . ')');
}
if(isset($post['saldo_maximo']) && (!empty($post['saldo_maximo']) || $post['saldo_maximo'] == '0')){
$query->whereRaw('EXISTS (SELECT 1 FROM estoque WHERE estoque.produto_id = produto.id AND estoque.quantidade <= ' . $post['saldo_maximo'] . ')');
}
if(isset($post['disponibilidade']) && (!empty($post['disponibilidade']) || $post['disponibilidade'] == '0')){
$query->where('produto.disponibilidade', '>=', $post['disponibilidade']);
}
if(isset($post['disponibilidade_maxima']) && (!empty($post['disponibilidade_maxima']) || $post['disponibilidade_maxima'] == '0')){
$query->where('produto.disponibilidade', '<', $post['disponibilidade_maxima']);
}
$data['produtos'] = $query->orderBy('produto.id', 'desc')->get();
foreach ($data['produtos'] as $produto) {
$produto->estoque = GeralService::getEstoqueProduto($produto, TRUE);
}
}
$data['empresas'] = GeralService::buscarEmpresasIntegracao();
return view('Estoque::admin/transferencias-estoque',$data);
}
public function atualizacaoSaldos(Request $request){
$post = $request->input();
$data = [];
if(empty($post)){
$data['produtos'] = [];
}else{
$data = $post;
$query = Produto::where('situacao', '=', 'A');
if(isset($post['produto']) && $post['produto']){
$query->where(function ($query) use ($post) {
$query->where('produto.nome', 'like', '%'.$post['produto'].'%')
->OrWhere('produto.sku', 'like', '%'.$post['produto'].'%');
});
}
if(isset($post['data_inicial']) && $post['data_inicial']){
$query->where('ultima_atualizacao_saldo', '>=', $post['data_inicial'] . ' 00:00:00');
}
if(isset($post['data_final']) && $post['data_final']){
$query->where('ultima_atualizacao_saldo', '<=', $post['data_final'].' 23:59:59');
}
if(isset($post['disponibilidade']) && (!empty($post['disponibilidade']) || $post['disponibilidade'] == '0')){
$query->where('produto.disponibilidade', '>=', $post['disponibilidade']);
}
if(isset($post['disponibilidade_maxima']) && (!empty($post['disponibilidade_maxima']) || $post['disponibilidade_maxima'] == '0')){
$query->where('produto.disponibilidade', '<', $post['disponibilidade_maxima']);
}
$data['produtos'] = $query->orderBy('produto.id', 'desc')->get();
foreach ($data['produtos'] as $produto) {
$produto->estoque = GeralService::getEstoqueProduto($produto);
}
}
$data['empresas'] = GeralService::buscarEmpresasIntegracao();
return view('Estoque::admin/atualizacao-saldos',$data);
}
public function movimentacaoProdutos(){
$data = [];
$data['listaProdutos'] = Produto::where('situacao', '=', 'A')->orderBy('nome', 'ASC')->get();
return view('Estoque::admin/movimentacao-produtos',$data);
}
public function movimentacaoProduto(Request $request){
$post = $request->input();
$produto = Produto::find($post['produto_id']);
$produto->localizador = $post['local_novo'];
$produto->save();
$json = array(
'status' => true,
'message' => "Movimentação realizada com sucesso!",
'data_movimentacao' => date('d/m/Y')
);
return response()->json($json);
}
public function etiquetas(Request $request){
$post = $request->input();
$data = [];
if(empty($post)){
$data['produtos'] = [];
}else{
$data = $post;
$query = Produto::select(['produto.id_estoque', 'produto.nome'])->where('situacao', '=', 'A');
if(isset($post['produto']) && $post['produto']){
$query->where('produto.nome', 'like', "%{$post['produto']}%");
}
if(isset($post['id_estoque_inicial']) && $post['id_estoque_inicial']){
$query->where('id_estoque', '>=', $post['id_estoque_inicial']);
}
if(isset($post['id_estoque_final']) && $post['id_estoque_final']){
$query->where('id_estoque', '<=', $post['id_estoque_final']);
}
if(isset($post['id_especifico']) && $post['id_especifico']){
$query->where(function($q) use ($post){
$q->whereIn('id_estoque', explode(",", $post['id_especifico']));
});
}
$data['produtos'] = $query->orderBy('produto.id', 'asc')->get();
}
return view('Estoque::admin/etiquetas', $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;
$data['array_'.$fk->nome] = $classPath::get();
}
$data['nextId'] = $this->estoque_m->getNextAutoIncrement();
return view('Estoque::admin/form-estoque', $data);
}
public function edit($slug){
$id = Estoque::where('slug', $slug)->value('id');
$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;
$data['array_'.$fk->nome] = $classPath::get();
}
$data['estoque'] = $this->estoque_m->find($id);
if($this->modulo->galeria){
$data['estoque']->imagens = $this->estoque_m->getImagens($id);
}
return view('Estoque::admin/form-estoque',$data);
}
public function save(Request $request){
$post = $request->input();
$post['meta_keywords'] = (isset($post['meta_keywords'])) ? implode(',',$post['meta_keywords']) : null;
foreach ($this->fields as $field) {
$arrayFields[] = $field->nome;
}
foreach ($this->fks as $fk) {
$arrayFields[] = $fk->nome;
}
if($this->modulo->imagem){
$arrayFields[] = 'thumbnail_principal';
}
if($request->input('id')){
$id_estoque = $this->estoque_m->editar($arrayFields, $post, $request->input('id'));
}else{
$id_estoque = $this->estoque_m->criar($arrayFields, $post);
}
\Session::flash('type', 'success');
\Session::flash('message', "Alteracoes salvas com sucesso!");
return redirect('admin/estoque');
}
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/estoque/';
$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/estoque/';
$tmpFileName = time() . '-' . $file->getClientOriginalName();
$file = $file->move(public_path() . $tmpFilePath, $tmpFileName);
$path = $tmpFilePath . $tmpFileName;
$this->estoque_m->criar_imagem(array('id_estoque' => $id, 'thumbnail_principal' => $tmpFileName));
return response()->json(array('path'=> $path, 'file_name'=>$tmpFileName), 200);
} else {
return response()->json(false, 200);
}
}
public function crop_image(Request $request) {
$img = \Image::make('uploads/estoque/'.$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/estoque/thumb_'.$request->input('file_name'))){
@unlink('uploads/estoque/'.$request->input('file_name'));
echo json_encode(array(
'status' => true,
'path' => '/uploads/estoque/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 = Estoque::where('slug', $slug)->value('id');
$this->estoque_m->deletar($id);
\Session::flash('type', 'success');
\Session::flash('message', "Registro removido com sucesso!");
return redirect('admin/estoque');
}
public function delete_imagem($id){
try{
$imagem = $this->estoque_m->getImagem($id);
$this->estoque_m->deletar_imagem($id);
unlink('uploads/estoque/'.$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()));
}
}
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 buscarProdutos(Request $request){
$term = $request->input('term')['term'];
$produtos = DB::table('produto')
->select('produto.nome', 'produto.id')
->where('produto.nome', 'like', '%'.$term.'%')
->orWhere('produto.id', 'like', '%'.$term.'%')
->orderBy('nome', 'ASC')
->get();
return $produtos;
}
}