diff --git a/modules/travel/back/methods/travel/cloneWithEntries.js b/modules/travel/back/methods/travel/cloneWithEntries.js index 82d6b40e2b..ef385f1e05 100644 --- a/modules/travel/back/methods/travel/cloneWithEntries.js +++ b/modules/travel/back/methods/travel/cloneWithEntries.js @@ -48,40 +48,46 @@ module.exports = Self => { let stmts = []; let stmt; - stmt = new ParameterizedSQL( - `CALL travel_cloneWithEntries(?, ?, ?, ?, @vTravelFk)`, [ - id, started, ended, travel.ref]); + try { + stmt = new ParameterizedSQL( + `CALL travel_cloneWithEntries(?, ?, ?, ?, @vTravelFk)`, [ + id, started, ended, travel.ref]); - stmts.push(stmt); - const index = stmts.push('SELECT @vTravelFk AS id') - 1; + stmts.push(stmt); + const index = stmts.push('SELECT @vTravelFk AS id') - 1; - const sql = ParameterizedSQL.join(stmts, ';'); - const result = await conn.executeStmt(sql); - const [lastInsert] = result[index]; - const newTravel = await Self.findById(lastInsert.id, { - fields: [ - 'id', - 'shipped', - 'landed', - 'warehouseInFk', - 'warehouseOutFk', - 'agencyFk', - 'ref' - ] - }); + const sql = ParameterizedSQL.join(stmts, ';'); + const result = await conn.executeStmt(sql); + const [lastInsert] = result[index]; + const newTravel = await Self.findById(lastInsert.id, { + fields: [ + 'id', + 'shipped', + 'landed', + 'warehouseInFk', + 'warehouseOutFk', + 'agencyFk', + 'ref' + ] + }); - const oldProperties = await loggable.translateValues(Self, travel); - const newProperties = await loggable.translateValues(Self, newTravel); - await models.TravelLog.create({ - originFk: newTravel.id, - userFk: userId, - action: 'insert', - changedModel: 'Travel', - changedModelId: newTravel.id, - oldInstance: oldProperties, - newInstance: newProperties - }); + const oldProperties = await loggable.translateValues(Self, travel); + const newProperties = await loggable.translateValues(Self, newTravel); + await models.TravelLog.create({ + originFk: newTravel.id, + userFk: userId, + action: 'insert', + changedModel: 'Travel', + changedModelId: newTravel.id, + oldInstance: oldProperties, + newInstance: newProperties + }); - return newTravel.id; + return newTravel.id; + } catch (error) { + if (error.code === 'ER_DUP_ENTRY') + throw new UserError('A travel with this data already exists'); + throw error; + } }; };