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/Modules/Estoque/Controllers/Admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Modules/Estoque/Controllers/Admin/AdminEstoqueController.php
<?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;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit