mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
168 lines
6.7 KiB
PHP
Executable File
168 lines
6.7 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Models\OrdenTrabajo;
|
|
|
|
use App\Entities\Produccion\OrdenTrabajoEntity;
|
|
use CodeIgniter\Database\BaseBuilder;
|
|
use CodeIgniter\Model;
|
|
|
|
class OrdenTrabajoModel extends Model
|
|
{
|
|
protected $table = 'ordenes_trabajo';
|
|
protected $primaryKey = 'id';
|
|
protected $useAutoIncrement = true;
|
|
protected $returnType = OrdenTrabajoEntity::class;
|
|
protected $useSoftDeletes = true;
|
|
protected $protectFields = true;
|
|
protected $allowedFields = [
|
|
"pedido_id",
|
|
"user_created_id",
|
|
"user_updated_id",
|
|
"fecha_entrega_warning",
|
|
"fecha_entrega_warning_revised",
|
|
"total_tirada",
|
|
"total_precio",
|
|
"tipo_entrada",
|
|
"progreso",
|
|
"estado",
|
|
"comentarios",
|
|
"comment_interior",
|
|
"comment_cubierta",
|
|
"comment_encuadernacion",
|
|
"comment_logistica",
|
|
"info_solapa_guillotina",
|
|
"revisar_formato",
|
|
"revisar_lomo",
|
|
"revisar_solapa",
|
|
"revisar_isbn",
|
|
"revisar_codigo_barras",
|
|
"realizar_imposicion",
|
|
"enviar_impresion",
|
|
"portada_path",
|
|
"is_pedido_espera",
|
|
"pedido_espera_by",
|
|
"preimpresion_revisada",
|
|
"preimpresion_revisada_by",
|
|
|
|
];
|
|
|
|
protected bool $allowEmptyInserts = false;
|
|
protected bool $updateOnlyChanged = true;
|
|
|
|
protected array $casts = [];
|
|
protected array $castHandlers = [];
|
|
|
|
// Dates
|
|
protected $useTimestamps = true;
|
|
protected $dateFormat = 'datetime';
|
|
protected $createdField = 'created_at';
|
|
protected $updatedField = 'updated_at';
|
|
protected $deletedField = 'deleted_at';
|
|
|
|
// Validation
|
|
protected $validationRules = [];
|
|
protected $validationMessages = [];
|
|
protected $skipValidation = false;
|
|
protected $cleanValidationRules = true;
|
|
|
|
// Callbacks
|
|
protected $allowCallbacks = true;
|
|
protected $beforeInsert = [];
|
|
protected $afterInsert = [];
|
|
protected $beforeUpdate = [];
|
|
protected $afterUpdate = [];
|
|
protected $beforeFind = [];
|
|
protected $afterFind = [];
|
|
protected $beforeDelete = [];
|
|
protected $afterDelete = [];
|
|
|
|
public function getDatatableQuery(): BaseBuilder
|
|
{
|
|
$q = $this->builder()
|
|
->select([
|
|
"ordenes_trabajo.id",
|
|
"ordenes_trabajo.pedido_id",
|
|
"pedidos.fecha_encuadernado as fecha_encuadernado_at",
|
|
"clientes.nombre as cliente_nombre",
|
|
"presupuestos.titulo as presupuesto_titulo",
|
|
"ordenes_trabajo.estado",
|
|
"ubicaciones.nombre as ubicacion_nombre",
|
|
"pedidos.total_tirada",
|
|
"tipos_presupuestos.codigo as tipo_presupuesto_impresion",
|
|
"ordenes_trabajo.progreso",
|
|
"presupuesto_linea.tipo as presupuesto_linea_tipo",
|
|
"orden_trabajo_dates.ferro_ok_at",
|
|
"CONCAT(lg_imposiciones.ancho,'x',lg_imposiciones.alto,'_',COALESCE(lg_imposiciones.unidades,'NULL'),'_',COALESCE(lg_imposiciones.orientacion,'NULL')) as imposicion_name"
|
|
|
|
])
|
|
->join("orden_trabajo_dates", "orden_trabajo_dates.orden_trabajo_id = ordenes_trabajo.id", "left")
|
|
->join("pedidos", "pedidos.id = ordenes_trabajo.pedido_id", "left")
|
|
->join("pedidos_linea", "pedidos.id = pedidos_linea.pedido_id", "left")
|
|
->join("presupuestos", "presupuestos.id = pedidos_linea.presupuesto_id", "left")
|
|
->join("presupuesto_linea", "presupuestos.id = presupuesto_linea.presupuesto_id", "left")
|
|
->join("clientes", "clientes.id = presupuestos.cliente_id", "left")
|
|
->join("tipos_presupuestos", "presupuestos.tipo_impresion_id = tipos_presupuestos.id", "left")
|
|
->join("ubicaciones", "ubicaciones.id = pedidos_linea.ubicacion_id", "left")
|
|
->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left")
|
|
->join("lg_imposiciones", "lg_imposiciones.id = orden_trabajo_tareas.imposicion_id", "left")
|
|
|
|
->whereIn("presupuesto_linea.tipo", ["lp_bn", "lp_bnhq", "lp_rot_bn", "lp_color", "lp_colorhq", "lp_rot_color"])
|
|
->where("ordenes_trabajo.deleted_at", null)
|
|
->groupBy("ordenes_trabajo.id");
|
|
return $q;
|
|
}
|
|
public function queryMaquinaTareas(int $maquina_id, ?array $tareaEstados = null)
|
|
{
|
|
$query = $this->builder()->select([
|
|
'orden_trabajo_tareas.*',
|
|
'tarea_progress.estado'
|
|
])
|
|
->join('orden_trabajo_tareas', 'orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id', 'left')
|
|
->join('lg_maquinas', 'orden_trabajo_tareas.maquina_id = lg_maquinas.id', 'left');
|
|
//* Obtener el ultimo estado de la tarea
|
|
if ($tareaEstados) {
|
|
$query->join(
|
|
'(SELECT ot_tarea_id, estado
|
|
FROM orden_trabajo_tarea_progress_dates
|
|
WHERE (ot_tarea_id, created_at) IN (
|
|
SELECT ot_tarea_id, MAX(created_at)
|
|
FROM orden_trabajo_tarea_progress_dates
|
|
GROUP BY ot_tarea_id
|
|
)
|
|
) as tarea_progress',
|
|
'tarea_progress.ot_tarea_id = orden_trabajo_tareas.id',
|
|
'left'
|
|
)
|
|
->groupStart()
|
|
->whereIn('tarea_progress.estado', $tareaEstados)
|
|
->orWhere('tarea_progress.estado',null)
|
|
->groupEnd();
|
|
}
|
|
$query->where('orden_trabajo_tareas.deleted_at', null)
|
|
->where('lg_maquinas.id', $maquina_id)
|
|
->groupBy('orden_trabajo_tareas.id');
|
|
return $query;
|
|
}
|
|
|
|
public function queryProximosEnvios()
|
|
{
|
|
$query = $this->builder()
|
|
->select([
|
|
'ordenes_trabajo.id as ot',
|
|
'orden_trabajo_dates.encuadernacion_at as fechaEncuadernado',
|
|
])
|
|
->join('pedidos', 'pedidos.id = ordenes_trabajo.pedido_id', 'left')
|
|
->join('pedidos_linea', 'pedidos.id = pedidos_linea.pedido_id', 'left')
|
|
->join('presupuestos', 'presupuestos.id = pedidos_linea.presupuesto_id', 'left')
|
|
->join('presupuesto_direcciones', 'presupuestos.id = presupuesto_direcciones.presupuesto_id', 'left')
|
|
->join('orden_trabajo_dates', 'orden_trabajo_dates.orden_trabajo_id = ordenes_trabajo.id', 'left')
|
|
->where('ordenes_trabajo.deleted_at', null)
|
|
->where('orden_trabajo_dates.encuadernacion_at !=', null)
|
|
|
|
//->where('orden_trabajo_dates.fecha_encuadernado_at >=', 0)
|
|
//->where('ordenes_trabajo.fecha_entrega_warning >=', date("Y-m-d H:i:s"))
|
|
->groupBy('ordenes_trabajo.id');
|
|
return $query;
|
|
}
|
|
}
|