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/OrdemCompra/Controllers/Admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Modules/OrdemCompra/Controllers/Admin/AdminOrdemCompraController.php
<?php

namespace App\Modules\OrdemCompra\Controllers\Admin;

use Illuminate\Http\Request;
use DB;
use Mail;
use Exception;
use Sentinel;
use App\Http\Requests;
use App\Http\Controllers\BaseController;
use App\Modules\QuantidadeReserva\Models\QuantidadeReserva;
use App\Modules\RequisicaoCompra\Models\RequisicaoCompra;
use App\Modules\UnidadeNegocio\Models\UnidadeNegocio;
use App\Modules\OrdemCompra\Models\OrdemCompra;
use App\Modules\OrdemCompraItem\Models\OrdemCompraItem;
use App\Modules\CanalHasOferta\Models\CanalHasOferta;
use App\Modules\Relatorio\Models\Relatorio;
use App\Modules\Empresa\Models\Empresa;
use App\Modules\Fornecedor\Models\Fornecedor;
use App\Modules\FornecedorContato\Models\FornecedorContato;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\Canal\Models\Canal;
use App\Modules\Produto\Models\Produto;
use App\Modules\PedidoVendaHasProduto\Models\PedidoVendaHasProduto;

use App\Services\GeralService;
use App\Services\OrdemCompraService;
use App\Services\PaginationService;
use Notification;
use App\Notifications\NotificacaoOrdemCompra;
use App\User;
use Illuminate\Support\Facades\Log;

class AdminOrdemCompraController extends BaseController
{
	private $modulo;
	private $fields;
	private $fks;
	private $lastInsertId;

    public function __construct(){
		parent::__construct();
		$this->middleware('auth');
		$this->modulo = \App\Gerador::where('nome', 'OrdemCompra')->with('campos', 'fks')->first();
		$this->fields = $this->modulo->campos;
		$this->fieldsForm = $this->modulo->camposForm;
		$this->fks = $this->modulo->fks;
		$this->fksForm = $this->modulo->fksForm;
		$this->ordem_compra_m = new OrdemCompra();
	}

	public function index(Request $request){

		$post = $request->input();

		$query = $this->ordem_compra_m->select('ordem_compra.*');

		$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, 'ordem_compra.'.$fk->nome, '=', $on);
				$query->addSelect($table.'.'.$fk->campoRelacionado->nome.' as fk'.$fk->id);
				$data['fields_listagem'][] = $fk;
			}
		}

		if(isset($post['filtro']) && $post['filtro']){
			$filtro = Relatorio::with('grupos.criterios')->find($post['filtro']);
			foreach ($filtro->grupos as $grupo) {
				if($grupo->condicao == 'AND'){
					$method = 'where';
				}else{
					$method = 'orWhere';
				}
				$query->$method(function ($query) use($grupo) {
					foreach ($grupo->criterios as $criterio) {
						if($criterio->condicao == 'AND'){
							$query->where($criterio->coluna, $criterio->operador, $criterio->valor);
						}else{
							$query->orWhere($criterio->coluna, $criterio->operador, $criterio->valor);
						}
					}
	            });
			}
		}

		$query->join('sis_users', 'ordem_compra.responsavel_id', '=', 'sis_users.id');

		$query->orderBy('id', 'DESC');

		if ($request->input('term'))
        {
        	$query->where(function($qr) use ($request){
        		$qr->where('ordem_compra.id', '=', $request->input('term'));
            	$qr->orWhere('ordem_compra.observacoes', 'like', '%'.$request->input('term').'%');
				$qr->orWhere('sis_users.first_name', 'like', '%'.$request->input('term').'%');
        	});
        }

        if($request->input('term_empresa_id')){
        	$query->where('ordem_compra.empresa_id', '=', $request->input('term_empresa_id'));
        }

        if($request->input('term_unidade_id')){
        	$query->where('ordem_compra.unidade_negocio_id', '=', $request->input('term_unidade_id'));
        }

        if($request->input('term_fornecedor_id')){
        	$query->where('ordem_compra.fornecedor_id', '=', $request->input('term_fornecedor_id'));
        }

        if ($request->input('term_data_inicio') && $request->input('term_data_fim'))
        {
        	$query->whereBetween('ordem_compra.data_inclusao', [$request->input('term_data_inicio') . " 00:00:00", $request->input('term_data_fim') . " 23:59:59"]);
        }
        elseif($request->input('term_data_inicio'))
        {
        	$query->whereBetween('ordem_compra.data_inclusao', [$request->input('term_data_inicio') . " 00:00:00", $request->input('term_data_inicio') . " 23:59:59"]);
        }

		$data['ordens_compra'] = $query->groupBy('ordem_compra.id')->orderBy('id', 'DESC')->paginate(20);

		$data['filtros'] = Relatorio::where('tipo', 'F')->where('modulo', 'OrdemCompra')->orderBy('relatorio.sequencia', 'ASC')->get();

		$data['fornecedores'] = Fornecedor::select('id','nome')->orderBy('nome','ASC')->get();

		$data['empresas'] = Empresa::all();
		$data['unidades'] = UnidadeNegocio::orderBy('id','ASC')->get();

		$data['filtro_atual'] = $post['filtro'] ?? null;

		$data['termos'] = $request->all();

		usort($data['fields_listagem'], function($a, $b) {
		    return $a->ordem - $b->ordem;
		});

		return view('OrdemCompra::admin/ordem-compra',$data);
	}

	public function playground(Request $request){

        $data = $request->input();

        if($request->input('format') && $request->input('format') == 'json'){

            if($request->input('status')){
                $query = $this->ordem_compra_m->select('ordem_compra.*')->where('ordem_compra.status', '=', $request->input('status'));
            }else{
                $query = $this->ordem_compra_m->select('ordem_compra.*')->where('ordem_compra.status', '<>', '');
            }

            $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, 'ordem_compra.'.$fk->nome, '=', $on);
                    $query->addSelect($table.'.'.$fk->campoRelacionado->nome.' as '.$table.'_'.$fk->campoRelacionado->nome);
                    $data['fields_listagem'][] = $fk;
                }
            }

            //Termos de Pesquisa
            if ($request->input('pesquisa'))
            {
                $query->where(function($qr) use ($request){
                    $qr->orWhere(DB::raw("fornecedor.nome"), 'LIKE', "%" . $request->input('pesquisa') . "%");
                    $qr->orWhere('ordem_compra.id', '=', $request->input('pesquisa'));
                });
            }

            //Status de Aprovação
            if ($request->input('status'))
            {
                $query->where('ordem_compra.status', '=', $request->input('status'));
            }

            $query->groupBy('ordem_compra.id')->orderBy($request->input('column'), $request->input('order'));

            $pagination = new PaginationService([
                'query'        => $query, 
                'path'         => url('/admin/ordem-compra/' . $request->input('rota')),
                'request'      => $request
            ]);

            $data['pagination'] = $pagination;

            $query->offset($pagination->pagesize * ($pagination->current_page - 1))->limit($pagination->pagesize);

            $data['registros'] = $query->get();

            usort($data['fields_listagem'], function($a, $b) {
                return $a->ordem - $b->ordem;
            });

            $data['html'] = view('OrdemCompra::admin/_ordem-'.$request->input('rota'), $data)->render();

            return response()->json($data);
        }

		$data['segment']     = \Request::segment(3);
		$data['listaStatus'] = OrdemCompraService::getStatus();

        return view('OrdemCompra::admin/ordem-'.$data['segment'], $data);
    }

    public function getFormOrdemCompra($id){

        $data = [];
		$data['empresas']          = OrdemCompraService::getEmpresas();
		$data['unidades']          = UnidadeNegocio::orderBy('id','ASC')->get();
		$data['fornecedores']      = OrdemCompraService::getFornecedores();
		$data['listaStatus']       = OrdemCompraService::getStatus();
		$data['objectOrdemCompra'] = false; 
		$data['title_form']        = "Nova Ordem de Compra";

        if($id!=0){
			$data['ordem_compra']      = $this->ordem_compra_m->find($id);
			$data['objectOrdemCompra'] = $data['ordem_compra'];
			$data['title_form']        = "Editar Ordem de Compra {$data['ordem_compra']->id}";
            $data['responsaveis']      = OrdemCompraService::getResponsaveis($data['ordem_compra']->responsavel_id);
        }

        $html = view('OrdemCompra::admin/_form-ordem-compra', $data)->render();

        return response()->json(['status' => true, 'html' => $html]);

    }

	public function envioFornecedor(Request $request){

		try {
			
			$ordemCompra     = OrdemCompra::find($request->input('id'));
			$queryFornecedor = FornecedorContato::where('fornecedor_id', $request->input('fornecedor_id'));

			if($request->input('contato_id')){
				$queryFornecedor->where('id', $request->input('contato_id'));
			}

			$contato     = $queryFornecedor->orderBy('id','DESC')->first();

			if(!$contato){
				$json = [
					'status'  => false,
					'message' => 'Nenhum contato cadastrado para este Fornecedor'
				];
			}else{

				$user        = User::find(Sentinel::getUser()->id);
				$user->email = $contato->email;

				Notification::send($user, new NotificacaoOrdemCompra($ordemCompra, $contato));

				$json = [
					'status'  => true,
					'message' => 'Envio realizado com sucesso!'
				];
				
			}

		} catch (Exception $e) {
			Log::info('OrdemCompra::envioFornecedor => ' . $e->getMessage());
			$json = [
				'status'  => false,
				'message' => 'Falha ao Realizar Envio'
			];
		}

        return response()->json($json);

	}

	public function gerador(Request $request){

		$oferta = new Oferta;

		$data = [];
		$data['listaFornecedores'] = Fornecedor::orderBy('nome', 'ASC')->get();
		$data['tiposOferta']       = $oferta->tipos();
		$data['periodosOferta']    = [5,15,30];
		$data['periodosCompra']    = [5,10,15,30];
		$data['listaCanais']       = Canal::orderBy('nome', 'ASC')->get();
		$data['listaProdutos']     = Produto::orderBy('nome', 'ASC')->get();
		$data['listaEmpresas']     = Empresa::all();
		$data['unidades']          = UnidadeNegocio::orderBy('id','ASC')->get();
		$data['ordenacao']         = '';

		return view('OrdemCompra::admin/gerador',$data);
	}

	public function itemListaProdutos(Request $request){

		$data     = [];
		$produtos = GeralService::listarProdutosCompra($request);
		$produto  = $produtos[0];

		$data['produto']     = $produto;
		$htmlProduto         = view('OrdemCompra::admin/_produto-lista', $data)->render();
		$htmlDetalhesProduto = view('OrdemCompra::admin/_detalhes-produto', $data)->render();

		$json = [
			'status'                => true,
			'message'               => 'Produto atualizado com sucesso!',
			'html_produto'          => $htmlProduto,
			'html_detalhes_produto' => $htmlDetalhesProduto
		];

        return response()->json($json);

	}

	public function geradorListaProdutos(Request $request){

		$data             = [];
		$produtos         = GeralService::listarProdutosCompra($request);
		$data['produtos'] = $produtos;

		$html       = view('OrdemCompra::admin/produtos-lista', $data)->render();
		$fornecedor = Fornecedor::select('id','nome')->where('id', $request->input('fornecedor_id'))->first();

		$json = [
			'status'     => true,
			'html'       => $html,
			'fornecedor' => $fornecedor
		];

        return response()->json($json);

	}

	public function deleteProdutoCompra(Request $request){

		$Produto = Produto::where('id', $request->input('produto_id'))->first();
		$Produto->listar_compras  = 0;
		$Produto->save();

		GeralService::atualizarEstoqueOfertasProduto($Produto->id);

		$json = ['status' => true, 'message' => "Produto removido da Lista!"];

        return response()->json($json);

	}

	public function fornecedorContatos(Request $request){

		$data               = [];
		$data['fornecedor'] = Fornecedor::select('id','nome')->where('id', $request->input('fornecedor_id'))->first();
		$data['ordem_id']   = $request->input('id');
		$html               = view('OrdemCompra::admin/_fornecedor-contatos', $data)->render();

		$json = [
			'status' => true,
			'html'   => $html
		];

        return response()->json($json);

	}

	public function geradorOrdem(Request $request){

		//Gera Ordem
		$OrdemCompra = new OrdemCompra;
		$OrdemCompra->empresa_id         = $request->input('empresa_id');
		$OrdemCompra->unidade_negocio_id = $request->input('unidade_negocio_id');
		$OrdemCompra->fornecedor_id      = $request->input('fornecedor_ordem_id');
		$OrdemCompra->responsavel_id     = Sentinel::getUser()->id;
		$OrdemCompra->status             = 'P';
		$OrdemCompra->zerar_disponibilidade_oferta = ($request->input('zerar_disponibilidade_oferta') ? $request->input('zerar_disponibilidade_oferta') : 0);
		$OrdemCompra->observacoes    = $request->input('observacoes');

		//Inclui Items
		if($OrdemCompra->save()){

			$ordem_compra_id = $OrdemCompra->id;
			$produtos        = $request->input('produtos');
			$quantidade   	 = 0;
			$valor_total     = 0;
			$itemsProdutos   = [];

			foreach ($produtos as $produto) {

				$OrdemCompraItem                      = new OrdemCompraItem();
				$OrdemCompraItem->produto_id          = $produto['produto_id'];
				$OrdemCompraItem->ordem_compra_id     = $ordem_compra_id;
				$OrdemCompraItem->quantidade          = $produto['quantidade'];

				$percentual_desconto = (!empty($produto['preco_mercado']) && $produto['preco_mercado'] != '0' ? (1 - ($produto['preco_venda']  / $produto['preco_mercado'])) * 100 : 0);
				$OrdemCompraItem->percentual_desconto = number_format($percentual_desconto, 2, '.', '');
				
            	$percentual_markup = (!empty($produto['preco_custo']) && $produto['preco_custo'] != '0' ? (($produto['preco_venda']  / $produto['preco_custo']) - 1) * 100 : 0);
				$OrdemCompraItem->percentual_markup   = number_format($percentual_markup, 2, '.', '');

				$OrdemCompraItem->preco_unitario      = $produto['preco_custo'];
				$OrdemCompraItem->valor_total         = $produto['quantidade'] * $produto['preco_custo'];
				
				if($OrdemCompraItem->save()){

					$itemsProdutos[] = $produto['produto_id'];
					$quantidade      += $OrdemCompraItem->quantidade;
					$valor_total     += $OrdemCompraItem->valor_total;

					//Finalizar Compra Produto
					if($produto['finalizar_compra']){
						$OrdemCompraItem->produto->listar_compras = 0;
					}

					//Zera Disponibilidade Ofertas Não Vigentes Associadas ao Produto
					// GeralService::atualizarEstoqueOfertasProduto($OrdemCompraItem->produto_id); deprecated

					//Zera Disponibilidade Ofertas Associadas ao Produto
					if($OrdemCompra->zerar_disponibilidade_oferta == 1){
						GeralService::zerarEstoqueOfertasProduto($OrdemCompraItem->produto_id);
					}
						
					if($OrdemCompraItem->produto->preco_custo != $OrdemCompraItem->preco_unitario){
						$OrdemCompraItem->produto->preco_custo  = $produto['preco_custo'];
						$OrdemCompraItem->produto->origem_preco = 'ordem';
						$OrdemCompraItem->produto->save();
					}

				}else{
					Log::info("Erro ao salvar Item Ordem Produto {$OrdemCompraItem->produto_id}: " . $e->getMessage());
				}

			}

		}else{
			//erro ordem compra
		}

		//Atualiza Ordem
		$OrdemCompra->quantidade  = $quantidade;
		$OrdemCompra->valor_total = $valor_total;
		$OrdemCompra->save();

		//Atualiza Requisições de Compra
		//Somente ao Atender/Finalizar Ordem
		if(count($itemsProdutos) > 0){
			$RequisicoesCompra = RequisicaoCompra::whereIn('produto_id', $itemsProdutos)->where('status', 'P')->get();
			foreach ($RequisicoesCompra as $RequisicaoCompra) {
				$RequisicaoCompra->ordem_compra_id = $OrdemCompra->id;
				$RequisicaoCompra->save();
			}
		}

		$json = ['status' => true, 'message' => "Ordem gravada com sucesso!"];
        return response()->json($json);

	}

	public function detalhe($hashkey){
		$ordem = OrdemCompra::where('hashkey', $hashkey)->first();

		$data               = [];
		$data['ordem']      = $ordem;
		$data['fornecedor'] = $ordem->fornecedor;

		return view('OrdemCompra::admin/detalhe', $data);

	}

	public function add(){
		$data = array();
		$data['modulo'] = $this->modulo;
		$data['fields'] = [];
		foreach ($this->fieldsForm 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;
			if($fk->nome == 'fornecedor_id'){
				$data['array_'.$fk->nome] = $classPath::orderBy('nome', 'ASC')->get();
			}else{
				$data['array_'.$fk->nome] = $classPath::get();
			}
		}
		$data['unidades'] = UnidadeNegocio::orderBy('id','ASC')->get();
		$data['nextId'] = $this->ordem_compra_m->getNextAutoIncrement();
		return view('OrdemCompra::admin/form-ordem-compra', $data);
	}

	public function edit($slug){
		$id = OrdemCompra::where('id', $slug)->value('id');
		$data['modulo'] = $this->modulo;
		$data['fields'] = [];
		foreach ($this->fieldsForm 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;
			if($fk->nome == 'fornecedor_id'){
				$data['array_'.$fk->nome] = $classPath::orderBy('nome', 'ASC')->get();
			}else{
				$data['array_'.$fk->nome] = $classPath::get();
			}
		}
		$data['ordem_compra'] = $this->ordem_compra_m->find($id);
		if($this->modulo->galeria){
			$data['ordem_compra']->imagens = $this->ordem_compra_m->getImagens($id);
		}
		$data['unidades'] = UnidadeNegocio::orderBy('id','ASC')->get();
		return view('OrdemCompra::admin/form-ordem-compra',$data);
	}

	public function getProdutos($id){

		$data['ordem'] = OrdemCompra::with('produtos')->find($id);

		return view('OrdemCompra::admin/produtos-ordem', $data)->render();
	}

	public function getProduto(Request $request){

        $data = $request->input();

        $html = view('OrdemCompra::admin/_produto-ordem', $data)->render();

        return response()->json(['status' => true, 'html' => $html]);

    }

    public function saveAjax(Request $request){

        try {
            $resultado = OrdemCompraService::save($request);
        } catch (Exception $e) {
            return response()->json(['status' => false, 'message' => $e->getMessage()]);
        }

        return response()->json($resultado);
        
    }

	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($post['status'] == 'A' && empty($post['data_entrega'])){
			$post['data_entrega'] = date('Y-m-d');
		}

		if($post['data_entrega'] == '0000-00-00' || empty($post['data_entrega'])){
			$post['data_entrega'] = NULL;
		}

		if($post['previsao_entrega'] == '0000-00-00' || empty($post['previsao_entrega'])){
			$post['previsao_entrega'] = NULL;
		}

		$arrayFields[] = 'unidade_negocio_id';

		if($request->input('id')){

			$ordem_compra = $this->ordem_compra_m->find($request->input('id'));

			$arrayFields[] = 'responsavel_id_update';
			$arrayFields[] = 'data_update';
			$post['responsavel_id_update'] = Sentinel::getUser()->id;
			$post['data_update'] = date('Y-m-d H:i:s');

			if($post['status'] == 'AR' && empty($ordem_compra->responsavel_id_aprovacao)){
				$arrayFields[] = 'responsavel_id_aprovacao';
				$post['responsavel_id_aprovacao'] = Sentinel::getUser()->id;
			}

			unset($arrayFields[0]);
			$id_ordem_compra = $this->ordem_compra_m->editar($arrayFields, $post, $request->input('id'));

		}else{

			$post['data_inclusao'] = date('Y-m-d H:i:s');

			$arrayFields[] = 'responsavel_id';
			$post['responsavel_id'] = Sentinel::getUser()->id;

			$id_ordem_compra = $this->ordem_compra_m->criar($arrayFields, $post);

		}

		$itemsProdutos = [];
		$quantidade    = 0;
		$valor_total   = 0;

		if (isset($post['produto-checkbox']) && count($post['produto-checkbox'])){
			foreach ($post['produto-checkbox'] as $key => $id_produto) {

				$itemsProdutos[] = $id_produto;

                $ordemCompraItem = OrdemCompraItem::where('ordem_compra_id', $id_ordem_compra)->where('produto_id', $id_produto)->first();
                if(!$ordemCompraItem){
				    $ordemCompraItem = new OrdemCompraItem();
                    $ordemCompraItem->produto_id          = $id_produto;
                    $ordemCompraItem->ordem_compra_id     = $id_ordem_compra;
                }

                $quantidade  += $post['produto-quantidade-checkbox'][$key];
				$valor_total += $post['produto-preco-custo'][$key] * $post['produto-quantidade-checkbox'][$key];

				//Alteração Preço Custo Produto
				if($ordemCompraItem->produto->preco_custo != $post['produto-preco-custo'][$key]){
					$ordemCompraItem->produto->preco_custo  = $post['produto-preco-custo'][$key];
					$ordemCompraItem->produto->origem_preco = 'ordem';
					$ordemCompraItem->produto->save();
				}

                Log::info("Quantidade: {$ordemCompraItem->quantidade}|".$post['produto-quantidade-checkbox'][$key]."; Preço Unitário: {$ordemCompraItem->preco_unitario}|" . $post['produto-preco-custo'][$key]);
                if($ordemCompraItem->quantidade == $post['produto-quantidade-checkbox'][$key] && $ordemCompraItem->preco_unitario == $post['produto-preco-custo'][$key]){
                    Log::info("OrdemCompra::save => Ordem: {$id_ordem_compra} | item {$ordemCompraItem->produto_id}");
                    continue;
                }

				$ordemCompraItem->quantidade          = $post['produto-quantidade-checkbox'][$key];
				$ordemCompraItem->preco_unitario      = $post['produto-preco-custo'][$key];
				
				$percentual_desconto = (!empty($post['produto-preco-mercado'][$key]) && $post['produto-preco-mercado'][$key] != '0' ? (1 - ($post['produto-preco-venda'][$key]  / $post['produto-preco-mercado'][$key])) * 100 : 0);
				$ordemCompraItem->percentual_desconto = number_format($percentual_desconto, 2, '.', '');
				
				$percentual_markup = (!empty($post['produto-preco-custo'][$key]) && $post['produto-preco-custo'][$key] != '0' ? (($post['produto-preco-venda'][$key]  / $post['produto-preco-custo'][$key]) - 1) * 100 : 0);
				$ordemCompraItem->percentual_markup   = number_format($percentual_markup, 2, '.', '');

				$ordemCompraItem->valor_total = $post['produto-preco-custo'][$key] * $post['produto-quantidade-checkbox'][$key];
				$ordemCompraItem->save();

			}

            OrdemCompraItem::where('ordem_compra_id', $id_ordem_compra)->whereNotIn('produto_id', $itemsProdutos)->delete();

		}else{
            OrdemCompraItem::where('ordem_compra_id', $id_ordem_compra)->delete();
        }

		//Atualiza Ordem
		$OrdemCompra = OrdemCompra::find($id_ordem_compra);
        $OrdemCompra->insert_log = true;
		$OrdemCompra->quantidade  = $quantidade;
		$OrdemCompra->valor_total = $valor_total;
		$OrdemCompra->save();
 
		//Atualiza Requisições de Compra
		//Somente ao Atender/Finalizar Ordem
		if($post['status'] == 'A' && count($itemsProdutos) > 0){
			$RequisicoesCompra = RequisicaoCompra::whereIn('produto_id', $itemsProdutos)->where('status', 'P')->where('ordem_compra_id', $id_ordem_compra)->get();
			foreach ($RequisicoesCompra as $RequisicaoCompra) {
				$RequisicaoCompra->status = 'A';
				$RequisicaoCompra->save();
			}
		}

		\Session::flash('type', 'success');
      	\Session::flash('message', "Alteracoes salvas com sucesso!");
		return redirect('admin/ordem-compra');

	}

	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/ordem-compra/';
			$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/ordem-compra/';
			$tmpFileName = time() . '-' . $file->getClientOriginalName();
			$file = $file->move(public_path() . $tmpFilePath, $tmpFileName);
			$path = $tmpFilePath . $tmpFileName;

			$this->ordem_compra_m->criar_imagem(array('id_ordem_compra' => $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/ordem-compra/'.$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/ordem-compra/thumb_'.$request->input('file_name'))){
			@unlink('uploads/ordem-compra/'.$request->input('file_name'));
			echo json_encode(array(
				'status' => true,
				'path' => '/uploads/ordem-compra/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 = OrdemCompra::where('id', $slug)->value('id');
		$this->ordem_compra_m->deletar($id);

		\Session::flash('type', 'success');
      \Session::flash('message', "Registro removido com sucesso!");
		return redirect('admin/ordem-compra');
	}

	public function deletar(Request $request){

        $ordens = $request->input('ids');

        foreach ($ordens as $id) {
        	OrdemCompraItem::where('ordem_compra_id', $id)->delete();
            $this->ordem_compra_m->deletar($id);
        }

        return response()->json(['status' => true, 'message' => 'Registro(s) removido(s) com sucesso!']);
        
    }

	public function delete_imagem($id){
		try{
			$imagem = $this->ordem_compra_m->getImagem($id);
			$this->ordem_compra_m->deletar_imagem($id);

			unlink('uploads/ordem-compra/'.$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')), '-'));
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit