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