#7710 - clone with ticket packaging #2878

Merged
jgallego merged 2 commits from 7710-cloneWithTicketPackaging into dev 2024-08-23 13:41:40 +00:00
3 changed files with 30 additions and 9 deletions
Showing only changes of commit 32d36cda21 - Show all commits

View File

@ -0,0 +1,24 @@
DELETE FROM `salix`.`ACL`
Review

Entiendo que con estos DELETES quitamos permisos a 2 roles

Entiendo que con estos DELETES quitamos permisos a 2 roles
WHERE `model` = 'Ticket'
AND `property` = 'refund'
AND `accessType` = 'WRITE'
AND `permission` = 'ALLOW'
AND `principalType` = 'ROLE'
AND `principalId` = 'salesAssistant';
UPDATE `salix`.`ACL`
SET `property` = 'cloneAll'
WHERE `model` = 'Ticket'
AND `property` = 'refund'
AND `accessType` = 'WRITE'
AND `permission` = 'ALLOW'
AND `principalType` = 'ROLE'
AND `principalId` IN ('invoicing', 'claimManager', 'logistic');
DELETE FROM `salix`.`ACL`
WHERE `model` = 'Ticket'
AND `property` = 'clone'
AND `accessType` = 'WRITE'
AND `permission` = 'ALLOW'
AND `principalType` = 'ROLE'
AND `principalId` = 'administrative';

View File

@ -82,7 +82,7 @@ module.exports = Self => {
myOptions.transaction = tx;
}
try {
const tickets = await models.Ticket.find({where: {refFk: refFk}}, myOptions);
const tickets = await models.Ticket.find({where: {refFk}}, myOptions);

Si la clave tiene el mismo nombre que la variable del valor, basta con hacer {where:{refFk}

Si la clave tiene el mismo nombre que la variable del valor, basta con hacer `{where:{refFk}`
const ticketsIds = tickets.map(ticket => ticket.id);
const refundTickets = await models.Ticket.cloneAll(ctx, ticketsIds, false, true, myOptions);

View File

@ -19,7 +19,7 @@ module.exports = Self => {
arg: 'negative',
type: 'boolean',
required: true,
description: 'Whether to invert quantities (for credit notes)'
description: 'true: invert quantities; false: keep as is.'

Siguiendo con el patrón del campo anterior.
Se asume que si es true: Whether...

Siguiendo con el patrón del campo anterior. Se asume que si es true: Whether...
}
],
returns: {
@ -35,12 +35,9 @@ module.exports = Self => {
Self.cloneAll = async(ctx, ticketsIds, withWarehouse, negative, options) => {
const models = Self.app.models;
const myOptions = {};
const myOptions = typeof options == 'object' ? {...options} : {};
let tx;
if (typeof options == 'object')
Object.assign(myOptions, options);
if (!myOptions.transaction) {
tx = await Self.beginTransaction({});
myOptions.transaction = tx;
@ -55,9 +52,9 @@ module.exports = Self => {
models.TicketPackaging.find(filter, myOptions)
Review

Si una promesa falla...la siguientes fallaran.
Propuesta, usar allSettled

Si una promesa falla...la siguientes fallaran. Propuesta, usar allSettled
Review

No lo sabia, he preguntado a chatgpt, las diferencias, no tengo claro que en este caso nos aporte algo, PERO decidelo tu leyendo esto que tendras mas criterio

Promise.all puede ser adecuado si deseas abortar todo el proceso tan pronto como una promesa falle. Esto puede ser útil para asegurarte de que, si hay un error temprano, no continúas con acciones que dependen de ese estado.

Promise.allSettled sería útil si prefieres recopilar los resultados o errores de todas las promesas y luego decidir cómo proceder. Esto es útil cuando fallas en una parte del proceso no deben impedirte completar otras partes.

No lo sabia, he preguntado a chatgpt, las diferencias, no tengo claro que en este caso nos aporte algo, PERO decidelo tu leyendo esto que tendras mas criterio > Promise.all puede ser adecuado si deseas abortar todo el proceso tan pronto como una promesa falle. Esto puede ser útil para asegurarte de que, si hay un error temprano, no continúas con acciones que dependen de ese estado. > Promise.allSettled sería útil si prefieres recopilar los resultados o errores de todas las promesas y luego decidir cómo proceder. Esto es útil cuando fallas en una parte del proceso no deben impedirte completar otras partes.
Review

en realidad queremos que si una falle el resto también.
Lo había planteado al revés. dejamos Promises.all

en realidad queremos que si una falle el resto también. Lo había planteado al revés. dejamos Promises.all
]);
const salesIds = sales.map(sale => sale.id);
const servicesIds = services.map(service => service.id);
const ticketPackagingIds = ticketPackaging.map(packaging => packaging.id);
const salesIds = sales.map(({id}) => id);
const servicesIds = services.map(({id}) => id);
const ticketPackagingIds = ticketPackaging.map(({id}) => id);
Review

Propuesta:
const salesIds = sales.map(({id})=> id);

Y podria servir para las otras 2 más

O incluso en la linea 52 en vez de hacer [sales, services, ticketPackaging] podrías usar ese map para cada elemento del array

Por ejemplo:

` const results = await Promise.allSettled([
models.Sale.find(filter, myOptions),
models.TicketService.find(filter, myOptions),
models.TicketPackaging.find(filter, myOptions)
]);

const [salesIds, servicesIds, ticketPackagingIds] = results.map(result =>
    result.value.map(({ id }) => id) 
);`
Propuesta: `const salesIds = sales.map(({id})=> id);` Y podria servir para las otras 2 más O incluso en la linea 52 en vez de hacer `[sales, services, ticketPackaging]` podrías usar ese map para cada elemento del array Por ejemplo: ` const results = await Promise.allSettled([ models.Sale.find(filter, myOptions), models.TicketService.find(filter, myOptions), models.TicketPackaging.find(filter, myOptions) ]); const [salesIds, servicesIds, ticketPackagingIds] = results.map(result => result.value.map(({ id }) => id) );`
const clonedTickets = await models.Sale.clone(
ctx,