| Server IP : 54.94.228.101 / 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/Services/ |
Upload File : |
<?php
namespace App\Services;
use DB;
use Sentinel;
use Illuminate\Support\Facades\Log;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use Exception;
use Session;
use App\User;
use App\BasicInfo;
use App\CampoOption;
use App\Modules\OrdemCompra\Models\OrdemCompra;
use App\Modules\Empresa\Models\Empresa;
use App\Modules\Fornecedor\Models\Fornecedor;
use App\Modules\OrdemCompraItem\Models\OrdemCompraItem;
use App\Modules\RequisicaoCompra\Models\RequisicaoCompra;
class OrdemCompraService {
public static function getEmpresas(){
return Empresa::select('id', 'nome')->orderBy('nome', 'ASC')->get();
}
public static function getFornecedores(){
return Fornecedor::select('id', 'nome')->orderBy('nome', 'ASC')->get();
}
public static function getResponsaveis($user_id = FALSE){
if($user_id){
$responsaveis = User::select('id','first_name', 'last_name')->where('id', $user_id)->orderBy('first_name','ASC')->get();
}else{
$responsaveis = User::select('id','first_name', 'last_name')->whereRaw(DB::raw('EXISTS (SELECT 1 FROM sis_role_users sru WHERE sru.user_id = sis_users.id AND sru.role_id IN (1))'))->orderBy('first_name','ASC')->get();
}
return $responsaveis;
}
public static function getStatus(){
return CampoOption::select('sis_campo_options.chave', 'sis_campo_options.valor')
->join('sis_campo_modulo as c', 'c.id', '=', 'sis_campo_options.id_campo_modulo')
->join('sis_modulos as m', 'm.id', '=', 'c.id_modulo')
->where('c.nome', 'status')->where('m.nome', 'OrdemCompra')
->orderBy('sis_campo_options.ordem', 'ASC')
->get();
}
public static function save($request){
$message = "Ordem de Compra registrada com sucesso!";
$modulo = \App\Gerador::where('nome', 'OrdemCompra')->with('campos', 'fks')->first();
$fields = $modulo->campos;
$fks = $modulo->fks;
$ordem_compra_m = new OrdemCompra();
$post = $request->input();
$post['meta_keywords'] = (isset($post['meta_keywords'])) ? implode(',',$post['meta_keywords']) : null;
foreach ($fields as $field) {
$arrayFields[] = $field->nome;
}
foreach ($fks as $fk) {
$arrayFields[] = $fk->nome;
}
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('ordem_compra_id')){
$ordem_compra = $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 = $ordem_compra_m->editar($arrayFields, $post, $request->input('ordem_compra_id'));
OrdemCompraItem::where('ordem_compra_id', $id_ordem_compra)->delete();
$message = "Alterações realizadas com sucesso!";
}else{
$post['data_inclusao'] = date('Y-m-d H:i:s');
$arrayFields[] = 'responsavel_id';
$post['responsavel_id'] = Sentinel::getUser()->id;
$id_ordem_compra = $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 = new OrdemCompraItem();
$ordemCompraItem->produto_id = $id_produto;
$ordemCompraItem->ordem_compra_id = $id_ordem_compra;
$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();
$quantidade += $ordemCompraItem->quantidade;
$valor_total += $ordemCompraItem->valor_total;
//Alteração Preço Custo Produto
if($ordemCompraItem->produto->preco_custo != $ordemCompraItem->preco_unitario){
$ordemCompraItem->produto->preco_custo = $ordemCompraItem->preco_unitario;
$ordemCompraItem->produto->origem_preco = 'ordem';
$ordemCompraItem->produto->save();
}
}
}
//Atualiza Ordem
$OrdemCompra = OrdemCompra::find($id_ordem_compra);
$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();
}
}
return ['status' => true, 'id' => $id_ordem_compra, 'message' => $message];
}
}