'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; } }