#7710 - clone with ticket packaging #2878
|
@ -0,0 +1,24 @@
|
|||
DELETE FROM `salix`.`ACL`
|
||||
|
||||
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';
|
|
@ -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);
|
||||
jsegarra
commented
Si la clave tiene el mismo nombre que la variable del valor, basta con hacer 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);
|
||||
|
||||
|
|
|
@ -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.'
|
||||
jsegarra
commented
Siguiendo con el patrón del campo anterior. 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)
|
||||
jsegarra
commented
Si una promesa falla...la siguientes fallaran. Si una promesa falla...la siguientes fallaran.
Propuesta, usar allSettled
jgallego
commented
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
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.
jsegarra
commented
en realidad queremos que si una falle el resto también. 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);
|
||||
|
||||
jsegarra
commented
Propuesta: Y podria servir para las otras 2 más O incluso en la linea 52 en vez de hacer Por ejemplo: ` const results = await Promise.allSettled([
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,
|
||||
|
|
Entiendo que con estos DELETES quitamos permisos a 2 roles