actualizar viaje padre
This commit is contained in:
@@ -476,6 +476,60 @@ const logTripIncidenceAudit = ({ tripId, userId, result, emailStatus, errorCode
|
||||
});
|
||||
};
|
||||
|
||||
const normalizeParentTripId = (value) => {
|
||||
const parsed = Number.parseInt(value, 10);
|
||||
return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
|
||||
};
|
||||
|
||||
const propagateTripStatusToParentTrips = async (
|
||||
queryExecutor,
|
||||
{ initialParentTripId, statusId, userId, requestId, flow }
|
||||
) => {
|
||||
let parentTripId = normalizeParentTripId(initialParentTripId);
|
||||
const visitedParentTripIds = new Set();
|
||||
const updatedParentTripIds = [];
|
||||
|
||||
while (parentTripId !== null) {
|
||||
if (visitedParentTripIds.has(parentTripId)) {
|
||||
throw new Error(`Detected c_viajes parent cycle at id_viaje ${parentTripId}`);
|
||||
}
|
||||
|
||||
visitedParentTripIds.add(parentTripId);
|
||||
|
||||
const [updateParentTripResult] = await queryExecutor.query(
|
||||
`UPDATE c_viajes
|
||||
SET id_estado = ?,
|
||||
ind_edi_app = 1,
|
||||
fecha_ultima_edicion = NOW(),
|
||||
id_usuarios_ultima_edicion = ?
|
||||
WHERE id_viaje = ?`,
|
||||
[statusId, userId, parentTripId]
|
||||
);
|
||||
|
||||
updatedParentTripIds.push(parentTripId);
|
||||
appendTripStatusDebugLog({
|
||||
stage: 'trip_status:parent_trip_updated',
|
||||
request_id: requestId || null,
|
||||
flow: flow || null,
|
||||
parent_trip_id: parentTripId,
|
||||
id_estado: statusId,
|
||||
affected_rows: updateParentTripResult?.affectedRows ?? null
|
||||
});
|
||||
|
||||
const [parentTripRows] = await queryExecutor.query(
|
||||
`SELECT id_viaje_padre
|
||||
FROM c_viajes
|
||||
WHERE id_viaje = ?
|
||||
LIMIT 1`,
|
||||
[parentTripId]
|
||||
);
|
||||
|
||||
parentTripId = normalizeParentTripId(parentTripRows[0]?.id_viaje_padre);
|
||||
}
|
||||
|
||||
return updatedParentTripIds;
|
||||
};
|
||||
|
||||
const startTrip = async (req, res) => {
|
||||
const dni = req.user?.dni;
|
||||
const userId = req.user?.id || null;
|
||||
@@ -509,7 +563,7 @@ const startTrip = async (req, res) => {
|
||||
);
|
||||
|
||||
const [tripRows] = await connection.query(
|
||||
`SELECT id_viaje, cod_viaje, id_estado
|
||||
`SELECT id_viaje, cod_viaje, id_estado, id_viaje_padre
|
||||
FROM c_viajes
|
||||
WHERE id_viaje = ?
|
||||
LIMIT 1
|
||||
@@ -591,12 +645,20 @@ const startTrip = async (req, res) => {
|
||||
await connection.query(
|
||||
`UPDATE c_viajes
|
||||
SET id_estado = ?,
|
||||
ind_edi_app = 1,
|
||||
fecha_inicio_real = ?,
|
||||
fecha_ultima_edicion = NOW(),
|
||||
id_usuarios_ultima_edicion = ?
|
||||
WHERE id_viaje = ?`,
|
||||
[START_TRIP_TARGET_STATE, now, userId, tripId]
|
||||
);
|
||||
await propagateTripStatusToParentTrips(connection, {
|
||||
initialParentTripId: tripRows[0].id_viaje_padre,
|
||||
statusId: START_TRIP_TARGET_STATE,
|
||||
userId,
|
||||
requestId,
|
||||
flow: 'start_trip'
|
||||
});
|
||||
|
||||
const [insertStartStatusResult] = await connection.query(
|
||||
`INSERT INTO c_cambios_estado
|
||||
@@ -1358,7 +1420,7 @@ const updateTripStatus = async (req, res) => {
|
||||
await connection.beginTransaction();
|
||||
|
||||
const [tripRows] = await connection.query(
|
||||
`SELECT id_viaje, id_estado
|
||||
`SELECT id_viaje, id_estado, id_viaje_padre
|
||||
FROM c_viajes
|
||||
WHERE id_viaje = ?
|
||||
LIMIT 1
|
||||
@@ -1606,11 +1668,19 @@ const updateTripStatus = async (req, res) => {
|
||||
await connection.query(
|
||||
`UPDATE c_viajes
|
||||
SET id_estado = ?,
|
||||
ind_edi_app = 1,
|
||||
fecha_ultima_edicion = NOW(),
|
||||
id_usuarios_ultima_edicion = ?
|
||||
WHERE id_viaje = ?`,
|
||||
[FAILED_TRIP_STATE, userId, tripId]
|
||||
);
|
||||
await propagateTripStatusToParentTrips(connection, {
|
||||
initialParentTripId: tripRows[0].id_viaje_padre,
|
||||
statusId: FAILED_TRIP_STATE,
|
||||
userId,
|
||||
requestId,
|
||||
flow: 'failed_branch_manual'
|
||||
});
|
||||
|
||||
await connection.commit();
|
||||
|
||||
@@ -1682,7 +1752,7 @@ const updateTripStatus = async (req, res) => {
|
||||
}
|
||||
|
||||
const [tripRows] = await db.query(
|
||||
`SELECT id_viaje
|
||||
`SELECT id_viaje, id_viaje_padre
|
||||
FROM c_viajes
|
||||
WHERE id_viaje = ?
|
||||
LIMIT 1`,
|
||||
@@ -1761,6 +1831,7 @@ const updateTripStatus = async (req, res) => {
|
||||
await db.query(
|
||||
`UPDATE c_viajes
|
||||
SET id_estado = ?,
|
||||
ind_edi_app = 1,
|
||||
fecha_ultima_edicion = NOW(),
|
||||
id_usuarios_ultima_edicion = ?
|
||||
WHERE id_viaje = ?`,
|
||||
@@ -1797,6 +1868,13 @@ const updateTripStatus = async (req, res) => {
|
||||
userId
|
||||
]
|
||||
);
|
||||
await propagateTripStatusToParentTrips(db, {
|
||||
initialParentTripId: tripRows[0].id_viaje_padre,
|
||||
statusId: idEstado,
|
||||
userId,
|
||||
requestId,
|
||||
flow: 'normal_manual'
|
||||
});
|
||||
appendTripStatusDebugLog({
|
||||
stage: 'update_trip_status:c_cambios_estado_persisted',
|
||||
request_id: requestId,
|
||||
@@ -2330,7 +2408,7 @@ const clearTripStatus = async (req, res) => {
|
||||
}
|
||||
|
||||
const [tripRows] = await db.query(
|
||||
`SELECT id_viaje, id_estado
|
||||
`SELECT id_viaje, id_estado, id_viaje_padre
|
||||
FROM c_viajes
|
||||
WHERE id_viaje = ?
|
||||
LIMIT 1`,
|
||||
@@ -2666,11 +2744,19 @@ const clearTripStatus = async (req, res) => {
|
||||
await connection.query(
|
||||
`UPDATE c_viajes
|
||||
SET id_estado = ?,
|
||||
ind_edi_app = 1,
|
||||
fecha_ultima_edicion = NOW(),
|
||||
id_usuarios_ultima_edicion = ?
|
||||
WHERE id_viaje = ?`,
|
||||
[currentStatusId, userId, tripId]
|
||||
);
|
||||
await propagateTripStatusToParentTrips(connection, {
|
||||
initialParentTripId: tripRows[0].id_viaje_padre,
|
||||
statusId: currentStatusId,
|
||||
userId,
|
||||
requestId,
|
||||
flow: 'clear_status_manual'
|
||||
});
|
||||
|
||||
await connection.commit();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user