ot general features

This commit is contained in:
amazuecos
2025-04-16 15:51:09 +02:00
parent 7ee844fb0c
commit c76f4428a6
15 changed files with 427 additions and 96 deletions

View File

@ -35,7 +35,17 @@ use Exception;
*/
class ProductionService extends BaseService
{
/**
* Tipos de impresion para identificar linea de impresion plana/general
*
* @var array
*/
public array $TIPOS_PLANA = ['lp_bn', 'lp_color', 'lp_colorhq'];
/**
* Tipos de impresion para idenficiar si es rotativa
*
* @var array
*/
public array $TIPOS_ROTATIVA = ['lp_rot_bn', 'lp_rot_color'];
protected OrdenTrabajoModel $otModel;
@ -48,14 +58,98 @@ class ProductionService extends BaseService
protected PedidoModel $pedidoModel;
protected UserModel $userModel;
protected ConfigVariableModel $configVariableModel;
protected string $defaultMaquinaCorteName = 'HT-1000';
protected int $podValue = 0;
protected bool $isPOD = false;
protected MaquinaEntity $defaultMaquinaCorte;
protected MaquinaModel $maquinaModel;
protected OrdenTrabajo $ordenTrabajoConfig;
public string $statusColor;
/**
* Nombre de la maquina por defecto para realizar la tarea de corte.
*
* @var string 'HT-1000'
*/
protected string $defaultMaquinaCorteName = 'HT-1000';
/**
* Color del header en el formulario de orden de trabajo
*
* @var string
*/
public string $statusColor;
/**
* Valor límite del POD
*
* `$this->configVariableModel->getVariable('POD')->value;`
* @var integer
*/
protected int $podValue = 0;
/**
* Indica si es POD
*
* `tirada <= podValue`
* @var boolean
*/
protected bool $isPOD = false;
/**
* Indica si la orden de trabajo contiene gofrado
* Se usa para mostrar la fecha correspondiente en la vista
* @var boolean
*/
public bool $isGofrado = false; //* CHECK DONE
/**
* Indica si la orden de trabajo contiene gofrado
* Se usa para mostrar la fecha correspondiente en la vista
* TODO Hay que implementar un boolean en `lg_tarifa_acabado` para identificar
* @var boolean
*/
public bool $isGrapado = true; //TODO
/**
* Indica si la orden de trabajo contiene espiral
* Se usa para mostrar la fecha correspondiente en la vista
* TODO Hay que implementar un boolean en `lg_tarifa_manipulado` para identificar
* DEFAULT true hasta implementacion
* @var boolean
*/
public bool $isEspiral = true; //TODO
/**
* Indica si la orden de trabajo contiene UVI
* Se usa para mostrar la fecha correspondiente en la vista
* @var boolean
*/
public bool $isUVI = false; //* CHECK DONE
/**
* Indica si la orden de trabajo contiene plastificado
* Se usa para mostrar la fecha correspondiente en la vista
* TODO Hay que implementar un boolean en `lg_tarifa_acabado` para identificar
* DEFAULT true hasta implementacion
* @var boolean
*/
public bool $isPlastificado = true; //TODO
/**
* Indica si la orden de trabajo contiene cubierta
* Se usa para mostrar la fecha correspondiente en la vista
* @var boolean
*/
public bool $isCubierta = false; //* CHECK DONE
/**
* Indica si la impresion es en color
* Se usa para mostrar la fecha correspondiente en la vista
* @var boolean
*/
public bool $isColor = false; //* CHECK DONE
/**
* Indica si la impresion es en bn
* Se usa para mostrar la fecha correspondiente en la vista
* @var boolean
*/
public bool $isBN = false; //* CHECK DONE
/**
* Indica si hay una tarea de corte
* Se usa para mostrar la fecha correspondiente en la vista
* ! Se añade por defecto siempre en una rotativa una tarea de corte
* @var boolean
*/
public bool $isCorte = false; //* CHECK DONE
/**
* Pedido Entity
*
@ -83,10 +177,10 @@ class ProductionService extends BaseService
$this->configVariableModel = model(ConfigVariableModel::class);
$this->podValue = $this->configVariableModel->getVariable('POD')->value;
}
public function init(int $orden_trabajo_id): self
{
try {
//code...
$this->maquinaModel = model(MaquinaModel::class);
$this->otModel = model(OrdenTrabajoModel::class);
$this->ot = $this->otModel->find($orden_trabajo_id);
@ -177,12 +271,22 @@ class ProductionService extends BaseService
$this->otDate->updateUserDateMap($this->ot->id, $data);
return $otDateId;
}
/**
* Crea un registro en `orden_trabajo_users`
*
* @return integer|boolean|string
*/
protected function storeOrdenTrabajoUsers(): int|bool|string
{
return $this->otUser->insert([
"orden_trabajo_id" => $this->ot->id,
]);
}
/**
* Crea un registro en `orden_trabajo_users` si no ha sido creado previamente
*
* @return integer|boolean|string
*/
public function reInsertOrdenTrabajoUsers(): int|bool|string
{
$status = false;
@ -191,6 +295,11 @@ class ProductionService extends BaseService
}
return $status;
}
/**
* Crea un registro en `orden_trabajo_dates` si no ha sido creado previamente
*
* @return integer|boolean|string
*/
public function reInsertOrdenTrabajoDates(): int|bool|string
{
$status = false;
@ -199,6 +308,11 @@ class ProductionService extends BaseService
}
return $status;
}
/**
* General las correspondientes tareas de la orden de trabajo en la table `orden_trabajo_tareas`
*
* @return integer|boolean|string
*/
protected function storeAllTareas()
{
$this->storeOrdenTrabajoTareas();
@ -208,6 +322,12 @@ class ProductionService extends BaseService
$this->storeOrdenTrabajoEncuadernacionTareas();
// $this->storeOrdenTrabajoExtraTareas();
}
/**
* Regenera las tareas.
* !! Se eliminan las que hay previamente sin `softDelete`
*
* @return integer|boolean|string
*/
public function resetAllTareas(): BaseResult|bool
{
$r = $this->otTarea->where("orden_trabajo_id", $this->ot->id)->delete(purge: true);
@ -244,6 +364,12 @@ class ProductionService extends BaseService
}
return $insert_query_result;
}
/**
* Inserta una tarea de corte si la impresion es en `rotativa`
*
* @param PresupuestoLineaEntity $pLinea
* @return OrdenTrabajoTareaEntity|null
*/
protected function storeTareaCorte(PresupuestoLineaEntity $pLinea): ?OrdenTrabajoTareaEntity
{
$otCorte = null;
@ -264,6 +390,11 @@ class ProductionService extends BaseService
return $otCorte;
}
/**
* General las tareas de acabado segun las líneas de presupuesto_acabados
*
* @return boolean
*/
protected function storeOrdenTrabajoAcabadoTareas(): bool
{
$p_lineas = $this->presupuesto_lineas_acabado();
@ -290,6 +421,11 @@ class ProductionService extends BaseService
}
return true;
}
/**
* General las tareas de acabado segun las líneas de presupuesto_manipulados
*
* @return boolean
*/
protected function storeOrdenTrabajoManipuladoTareas(): bool
{
$p_lineas = $this->presupuesto_lineas_manipulado();
@ -316,6 +452,11 @@ class ProductionService extends BaseService
}
return true;
}
/**
* General las tareas de acabado segun las líneas de presupuesto_preimpresion
*
* @return boolean
*/
protected function storeOrdenTrabajoPreimpresionTareas(): bool
{
$p_lineas = $this->presupuesto_lineas_preimpresion();
@ -342,6 +483,11 @@ class ProductionService extends BaseService
}
return true;
}
/**
* General las tareas de acabado segun las líneas de presupuesto_encuadernaciones
*
* @return boolean
*/
protected function storeOrdenTrabajoEncuadernacionTareas(): bool
{
$p_lineas = $this->presupuesto_lineas_encuadernaciones();
@ -1126,19 +1272,23 @@ class ProductionService extends BaseService
$seconds = array_sum($time_tareas_seconds);
return float_seconds_to_hhmm_string($seconds);
}
public function getTiempoTareasImpresionHHMM():string {
public function getTiempoTareasImpresionHHMM(): string
{
$tareas_impresion = $this->ot->tareas_impresion();
$time_tareas_seconds = array_map(fn($q) => $q->tiempo_estimado ?? 0, $tareas_impresion);
$seconds = array_sum($time_tareas_seconds);
return float_seconds_to_hhmm_string($seconds);
$tiempo_seconds = 0;
foreach ($tareas_impresion as $key => $tarea) {
if ($tarea->is_corte == false) {
$tiempo_seconds += $tarea->tiempo_estimado;
}
}
return float_seconds_to_hhmm_string($tiempo_seconds);
}
public function getUVI() : ?TarifaAcabadoEntity
public function getUVI(): ?TarifaAcabadoEntity
{
$uvi = null;
$acabados = $this->presupuesto->acabados();
foreach ($acabados as $key => $acabado) {
if($acabado->tarifa()->isUVI()){
if ($acabado->tarifa()->isUVI()) {
$uvi = $acabado->tarifa();
}
}
@ -1360,6 +1510,9 @@ class ProductionService extends BaseService
if ($plastificado_code == "SAND") {
$color = $this->ordenTrabajoConfig->OT_PLASTIFICADO_COLOR['SANDY'];
}
if ($plastificado_code == "GOF") {
$color = $this->ordenTrabajoConfig->OT_PLASTIFICADO_COLOR['GOFRADO'];
}
}
}
return $color;
@ -1367,10 +1520,9 @@ class ProductionService extends BaseService
public function getImpresionInteriorPPALColor()
{
$isRotativa = $this->presupuesto->presupuestoLineaImpresion()->isRotativa();
$color = $isRotativa ? $this->ordenTrabajoConfig->OT_IMPRESION_INTERIOR_PPAL_COLOR['ROTATIVA'] : $this->ordenTrabajoConfig->OT_IMPRESION_INTERIOR_PPAL_COLOR['GENERAL'] ;
$color = $isRotativa ? $this->ordenTrabajoConfig->OT_IMPRESION_INTERIOR_PPAL_COLOR['ROTATIVA'] : $this->ordenTrabajoConfig->OT_IMPRESION_INTERIOR_PPAL_COLOR['GENERAL'];
$color = $this->isPOD ? $this->ordenTrabajoConfig->OT_IMPRESION_INTERIOR_PPAL_COLOR['POD'] : $color;
return $color;
}
public function getPdfColors(): array
{
@ -1384,4 +1536,80 @@ class ProductionService extends BaseService
"impresion_interior_ppal" => $this->getImpresionInteriorPPALColor()
];
}
public function getFlags()
{
$this->color();
return [
"isGofrado" => $this->gofrado(),
"isEspiral" => $this->isEspiral,
"isUVI" => $this->uvi(),
"isPlastificado" => $this->isPlastificado,
"isCubierta" => $this->cubierta(),
"isColor" => $this->isColor,
"isBN" => $this->isBN,
"isCorte" => $this->corte(),
"isGrapado" => $this->isGrapado
];
}
public function gofrado(): bool
{
$flag = false;
$acabados = $this->presupuesto->acabados();
foreach ($acabados as $key => $acabado) {
$tarifa_acabado = $acabado->tarifa();
if ($tarifa_acabado->code) {
$plastificado_code = $tarifa_acabado->code;
if ($plastificado_code == "GOF") {
$flag = true;
break;
}
}
}
$this->isGofrado = $flag;
return $this->isGofrado;
}
public function uvi(): bool
{
$flag = false;
$tarifa_acabado_uvi = $this->getUVI();
if ($tarifa_acabado_uvi) {
$flag = true;
}
$this->isUVI = $flag;
return $this->isUVI;
}
public function cubierta(): bool
{
$lineaCubierta = $this->presupuesto->presupuestoLineaCubierta();
if ($lineaCubierta) {
$this->isCubierta = true;
}
return $this->isCubierta;
}
public function color(): bool
{
$linea_impresion = $this->presupuesto->presupuestoLineaImpresion();
if ($linea_impresion) {
if ($linea_impresion->isColor()) {
$this->isColor = true;
$this->isBN = false;
} else {
$this->isColor = false;
$this->isBN = true;
}
}
return $this->isColor;
}
public function corte(): bool
{
$ot_tareas = $this->ot->tareas();
foreach ($ot_tareas as $key => $tarea) {
if ($tarea->is_corte) {
$this->isCorte = true;
break;
}
}
return $this->isCorte;
}
}