179 lines
5.1 KiB
PHP
179 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Models\Almoxarifado;
|
|
|
|
use App\Models\Cadastro\Fabricante\Fabricante;
|
|
use App\Models\Cadastro\Material\Material;
|
|
use App\Models\Integracao\Bnafar\Medicamento;
|
|
use App\Models\Model;
|
|
|
|
class EntradaItem extends Model
|
|
{
|
|
protected $table = 'almoxarifado_entrada_item';
|
|
|
|
protected $casts = [
|
|
'validade_lote' => 'datetime:d/m/Y',
|
|
'estornado_em' => 'datetime:d/m/Y',
|
|
];
|
|
|
|
protected $fillable = [
|
|
'entrada_id',
|
|
'material_id',
|
|
'integracao_bnafar_medicamento_id',
|
|
'quantidade',
|
|
'lote',
|
|
'validade_lote',
|
|
'valor_total',
|
|
'valor_unitario',
|
|
'numero_empenho',
|
|
'despesas',
|
|
'numero_autorizacao_fornecimento',
|
|
'fabricante_id',
|
|
'codigo_barras',
|
|
'estornado_em',
|
|
'saida_item_estornado_id',
|
|
];
|
|
|
|
protected $hidden = [
|
|
'entrada_id',
|
|
'created_at',
|
|
'created_lotacao_id',
|
|
'created_centro_custo_id',
|
|
'updated_at',
|
|
'updated_lotacao_id',
|
|
'updated_centro_custo_id',
|
|
];
|
|
|
|
protected $appends = [
|
|
'possui_lote',
|
|
'valor_unitario_formatted',
|
|
'valor_total_formatted',
|
|
'despesas_formatted',
|
|
'estornado',
|
|
];
|
|
|
|
public static function boot()
|
|
{
|
|
parent::boot();
|
|
|
|
self::saved(function($model) {
|
|
$model = (object) $model->fresh()->getRawOriginal();
|
|
|
|
EntradaItemLog::create([
|
|
'entrada_item_id' => $model->id,
|
|
'entrada_id' => $model->entrada_id,
|
|
'material_id' => $model->material_id,
|
|
'integracao_bnafar_medicamento_id' => $model->integracao_bnafar_medicamento_id,
|
|
'quantidade' => $model->quantidade,
|
|
'lote' => $model->lote,
|
|
'validade_lote' => $model->validade_lote,
|
|
'valor_total' => $model->valor_total,
|
|
'valor_unitario' => $model->valor_unitario,
|
|
'numero_empenho' => $model->numero_empenho,
|
|
'despesas' => $model->despesas,
|
|
'numero_autorizacao_fornecimento' => $model->numero_autorizacao_fornecimento,
|
|
'fabricante_id' => $model->fabricante_id,
|
|
'codigo_barras' => $model->codigo_barras,
|
|
'estornado_em' => $model->estornado_em,
|
|
'saida_item_estornado_id' => $model->saida_item_estornado_id,
|
|
]);
|
|
});
|
|
}
|
|
|
|
public function entrada()
|
|
{
|
|
return $this->belongsTo(Entrada::class);
|
|
}
|
|
|
|
public function material()
|
|
{
|
|
return $this->belongsTo(Material::class);
|
|
}
|
|
|
|
public function integracaoBnafarMedicamento()
|
|
{
|
|
return $this->belongsTo(Medicamento::class);
|
|
}
|
|
|
|
public function fabricante()
|
|
{
|
|
return $this->belongsTo(Fabricante::class);
|
|
}
|
|
|
|
public function saidaItemEstornado()
|
|
{
|
|
return $this->belongsTo(SaidaItem::class);
|
|
}
|
|
|
|
public function saidaItens()
|
|
{
|
|
return $this->belongsToMany(SaidaItem::class, 'almoxarifado_saida_item_entrada_item')
|
|
->using(SaidaItemEntradaItem::class)
|
|
->as('pivotSaidaItemEntradaItem')
|
|
->withPivot(['quantidade_saida', 'entrada_item_estornado_id'])
|
|
->withTimestamps();
|
|
}
|
|
|
|
public function saidaItensTransferencia()
|
|
{
|
|
return $this->belongsToMany(
|
|
SaidaItem::class,
|
|
'almoxarifado_saida_item_entrada_item_transferencia',
|
|
'entrada_item_destino_id',
|
|
'saida_item_origem_id',
|
|
)
|
|
->using(SaidaItemEntradaItemTransferencia::class)
|
|
->as('pivotSaidaItemEntradaItemTransferencia')
|
|
->withTimestamps();
|
|
}
|
|
|
|
public function reservaItens()
|
|
{
|
|
return $this->belongsToMany(ReservaItem::class, 'almoxarifado_reserva_item_entrada_item')
|
|
->using(ReservaItemEntradaItem::class)
|
|
->as('pivotReservaItemEntradaItem')
|
|
->withPivot(['quantidade_saida'])
|
|
->withTimestamps();
|
|
}
|
|
|
|
public function requisicaoRespotaItens()
|
|
{
|
|
return $this->belongsToMany(RequisicaoRespostaItem::class, 'almoxarifado_requisicao_resposta_item_entrada_item')
|
|
->using(RequisicaoRespostaItemEntradaItem::class)
|
|
->as('pivotRequisicaoRespostaItemEntradaItem')
|
|
->withTimestamps();
|
|
}
|
|
|
|
public function getPossuiLoteAttribute()
|
|
{
|
|
return !is_null($this->lote);
|
|
}
|
|
|
|
public function getValorUnitarioFormattedAttribute()
|
|
{
|
|
return number_format($this->valor_unitario, 6, ',', '.');
|
|
}
|
|
|
|
public function getValorTotalFormattedAttribute()
|
|
{
|
|
return number_format($this->valor_total, 6, ',', '.');
|
|
}
|
|
|
|
public function getDespesasFormattedAttribute()
|
|
{
|
|
return number_format($this->despesas, 6, ',', '.');
|
|
}
|
|
|
|
public function getEstornadoAttribute()
|
|
{
|
|
return !is_null($this->estornado_em);
|
|
}
|
|
|
|
public function getHasSaidasFinalizadasAttribute()
|
|
{
|
|
return $this->saidaItens()
|
|
->whereHas('saida', fn ($q) => $q->where('finalizada', true))
|
|
->count() > 0;
|
|
}
|
|
}
|