null, "orden_trabajo_id" => null, "presupuesto_linea_id" => null, "presupuesto_acabado_id" => null, "presupuesto_preimpresion_id" => null, "presupuesto_encuadernado_id" => null, "presupuesto_extra_id" => null, "presupuesto_manipulado_id" => null, "nombre" => null, "orden" => null, "maquina_id" => null, "imposicion_id" => null, "tiempo_estimado" => null, "tiempo_real" => null, "is_corte" => null, "tipo_corte" => null, "comment" => null, "click_init" => null, "click_end" => null, "pliego_1" => null, "pliego_1_total" => null, "pliego_2" => null, "pliego_2_total" => null, ]; protected $dates = ['created_at', 'updated_at', 'deleted_at']; protected $casts = [ "id" => "integer", "orden_trabajo_id" => "integer", "presupuesto_linea_id" => "?integer", "nombre" => "string", "orden" => "integer", "maquina_id" => "?integer", "imposicion_id" => "?integer", "tiempo_estimado" => "?float", "tiempo_real" => "?float", "is_corte" => "boolean", "tipo_corte" => "string", "comment" => "?string", "click_init" => "integer", "click_end" => "integer", "pliego_1" => "integer", "pliego_1_total" => "integer", "pliego_2" => "integer", "pliego_2_total" => "integer", ]; /** * Orden de trabajo de la tarea * * @return OrdenTrabajoEntity */ public function orden_trabajo(): OrdenTrabajoEntity { $m = model(OrdenTrabajoModel::class); return $m->find($this->attributes["orden_trabajo_id"]); } /** * Tarea orden de trabajo con orden de trabajo * * @return self */ public function withOrdenTrabajo(): self { $this->attributes["orden_trabajo"] = $this->orden_trabajo(); return $this; } /** * Devuelve la maquina actual de esta tarea * * @return Maquina */ public function maquina_actual(): Maquina { $m = model(MaquinaModel::class); return $m->find($this->attributes["maquina_id"]); } /** * Devuelve el presupuesto linea origen de esta tarea * * @return PresupuestoLineaEntity */ public function presupuesto_linea(): ?PresupuestoLineaEntity { $presupuesto_linea = null; $m = model(PresupuestoLineaModel::class); if ($this->attributes['presupuesto_linea_id']) { $presupuesto_linea = $m->find($this->attributes["presupuesto_linea_id"]); } return $presupuesto_linea; } /** * Devuelve la maquina original del presupuesto linea * * @return Maquina */ public function maquina_presupuesto_linea(): Maquina { return $this->presupuesto_linea()?->maquina(); } /** * Devuelve el presupuesto acabado origen de esta tarea * * @return PresupuestoAcabadosEntity */ public function presupuesto_acabado(): ?PresupuestoAcabadosEntity { $presupuesto_acabado = null; $m = model(PresupuestoAcabadosModel::class); if ($this->attributes["presupuesto_acabado_id"]) { $presupuesto_acabado = $m->find($this->attributes["presupuesto_acabado_id"]); } return $presupuesto_acabado; } /** * Devuelve el presupuesto enducadernacion origen de esta tarea * * @return PresupuestoEncuadernacionesEntity */ public function presupuesto_encuadernacion(): ?PresupuestoEncuadernacionesEntity { $presupuesto_encuadernacion = null; $m = model(PresupuestoEncuadernacionesModel::class); if ($this->attributes["presupuesto_encuadernado_id"]) { $presupuesto_encuadernacion = $m->find($this->attributes["presupuesto_encuadernado_id"]); } return $presupuesto_encuadernacion; } /** * Devuelve el presupuesto acabado origen de esta tarea * * @return ?PresupuestoManipuladosEntity */ public function presupuesto_manipulado(): ?PresupuestoManipuladosEntity { $m = model(PresupuestoManipuladosModel::class); $p = null; if ($this->attributes['presupuesto_manipulado_id']) { $p = $m->find($this->attributes["presupuesto_manipulado_id"]); } return $p; } public function imposicion(): ?Imposicion { $m = model(ImposicionModel::class); $imposicion = null; if ($this->attributes["imposicion_id"]) { $imposicion = $m->find($this->attributes["imposicion_id"]); } return $imposicion; } public function progress_dates(): array { $m = model(OrdenTrabajoTareaProgressDate::class); return $m->where('ot_tarea_id', $this->attributes["id"])->findAll() ?? []; } public function lastState(): ?OrdenTrabajoTareaProgressDateEntity { $m = model(OrdenTrabajoTareaProgressDate::class); $progressDates = $m->where('ot_tarea_id', $this->attributes["id"])->orderBy('action_at', 'DESC')->first(); return $progressDates; } public function tiempo_trabajado() { $dates = $this->progress_dates(); $intervals = []; $init = null; $end = null; foreach ($dates as $key => $date) { if ($date->estado == "I") { if ($date->action_at) { $init = $date->action_at; } } if ($date->estado == "S" || $date->estado == "F") { if ($date->action_at && $init) { $end = $date->action_at; $intervals[] = $init->difference($end)->getSeconds(); } } } return array_sum($intervals); } public function getClickTarea(): int { return $this->attributes['click_end'] - $this->attributes['click_init']; } public function isCosido(): bool { $isTareaCosido = false; $pm = $this->presupuesto_encuadernacion(); if ($pm) { $isTareaCosido = $pm->tarifa()->isCosido(); } return $isTareaCosido; } public function isImpresion(): bool { return $this->attributes['presupuesto_linea_id'] != null; } public function isAcabado(): bool { return $this->attributes['presupuesto_acabado_id'] != null; } public function isManipulado(): bool { return $this->attributes['presupuesto_manipulado_id'] != null; } public function isEncuadernado(): bool { return $this->attributes['presupuesto_encuadernado_id'] != null; } public function isCorte(): bool { return $this->attributes['is_corte']; } }