#6321 - Negative tickets #1945
|
@ -0,0 +1,69 @@
|
|||
/* eslint-disable no-console */
|
||||
module.exports = Self => {
|
||||
Self.remoteMethod('itemLackDetail', {
|
||||
description: 'Download a ticket delivery note document',
|
||||
accessType: 'READ',
|
||||
jsegarra marked this conversation as resolved
Outdated
|
||||
accepts: [
|
||||
{
|
||||
arg: 'id',
|
||||
type: 'number',
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
si estamos en la seccion ticket, yo el argumento lo llamaria itemFk, porque a mitad codigo, id puede dar confusion a que es el id de la entidad, en este caso ticket si estamos en la seccion ticket, yo el argumento lo llamaria itemFk, porque a mitad codigo, id puede dar confusion a que es el id de la entidad, en este caso ticket
|
||||
description: 'The item id',
|
||||
}
|
||||
],
|
||||
returns: [
|
||||
{
|
||||
arg: 'body',
|
||||
type: ['object'],
|
||||
root: true
|
||||
}
|
||||
],
|
||||
http: {
|
||||
path: `/itemLack/:id/detail`,
|
||||
verb: 'GET'
|
||||
}
|
||||
});
|
||||
|
||||
Self.itemLackDetail = async(id, options) => {
|
||||
const myOptions = {};
|
||||
// const versionSQL = false;
|
||||
if (typeof options == 'object')
|
||||
Object.assign(myOptions, options);
|
||||
|
||||
const detail = await Self.rawSQL(`
|
||||
SELECT
|
||||
s.Id_Movimiento, st.code, t.Id_Ticket, t.Alias, t.Fecha, s.Cantidad, ag.Agencia,
|
||||
ts.alertLevel alertLevel,
|
||||
st.name stateName,
|
||||
st.id stateId,
|
||||
s.Id_Article id,
|
||||
al.code alertLevelCode,
|
||||
z.name,
|
||||
jgallego
commented
este dos? este dos?
jsegarra
commented
Este 2 lo he puesto para que cuando filter.where no tenga scopeDays no de error la consulta, sin embargo, para ser lo mas agnóstico posible a quien lo llame, si no me lo pasas, asigno un 0 que es más lógico Este 2 lo he puesto para que cuando filter.where no tenga scopeDays no de error la consulta, sin embargo, para ser lo mas agnóstico posible a quien lo llame, si no me lo pasas, asigno un 0 que es más lógico
jsegarra
commented
Si lo ves correcto, te pido fusionar Si lo ves correcto, te pido fusionar
jgallego
commented
mejora aun, no pases nada si no pasan nada. mejora aun, no pases nada si no pasan nada.
|
||||
z.hour theoreticalhour,
|
||||
cn.isRookie,
|
||||
sc.saleClonedFk turno,
|
||||
tr.saleFk peticionCompra,
|
||||
t.Fecha minTimed
|
||||
FROM
|
||||
Sale s
|
||||
JOIN Tickets t ON t.Id_Ticket=s.Id_Ticket -- vn.ticket
|
||||
LEFT JOIN zone z ON z.id = t.zoneFk -- vn.zone
|
||||
LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk AND zc.dated = DateValue(t.Fecha)
|
||||
JOIN Clientes c ON c.Id_Cliente=t.Id_Cliente -- vn.client
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
yo estoy cambiando los alertLevel, no podemos poner numero en el codigo, si no hay ..null yo estoy cambiando los alertLevel, no podemos poner numero en el codigo, si no hay ..null
jsegarra
commented
ok, lo reviso ok, lo reviso
jsegarra
commented
Lo he valorado con otros compañeros y esto de momento lo dejamos así Lo he valorado con otros compañeros y esto de momento lo dejamos así
|
||||
LEFT JOIN clientNewBorn cn ON cn.clientFk=c.Id_Cliente
|
||||
JOIN Agencias ag ON ag.Id_Agencia=t.Id_Agencia -- vn.agencyMode
|
||||
JOIN ticketState tls ON ts.ticketFk=t.Id_Ticket -- vn.sale
|
||||
LEFT JOIN state s ON st.id=ts.state
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
es una chorrada pero comovas a cambiar cosas, no solemos poner los AS en los select es una chorrada pero comovas a cambiar cosas, no solemos poner los AS en los select
|
||||
LEFT JOIN alertLevel al ON al.id = st.alertLevel
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
tls.alertLevel tls.alertLevel
|
||||
LEFT JOIN saleCloned sc ON sc.saleClonedFk = s.Id_Movimiento
|
||||
LEFT JOIN ticketRequest tr ON tr.saleFk = s.Id_Movimiento
|
||||
WHERE
|
||||
AND s.Id_Article = ?
|
||||
AND NOT Cantidad
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
aqui puedes devolver el codigo y en front gestionas como necesites, sino estas haciendo 2 funciones por cada linea..lo cual tiene un coste en velocidad al select aqui puedes devolver el codigo y en front gestionas como necesites, sino estas haciendo 2 funciones por cada linea..lo cual tiene un coste en velocidad al select
jsegarra
commented
cual select? al de zona? El siguiente es de hora y a continuación son booleanos cual select? al de zona? El siguiente es de hora y a continuación son booleanos
jsegarra
commented
cambiado cambiado
|
||||
AND Fecha >= util.VN_CURDATE()
|
||||
AND Fecha < INTERVAL util.VN_CURDATE() + INTERVAL ? + 1 DAY
|
||||
ORDER BY s.Id_Movimiento DESC+
|
||||
`, [id, 2], myOptions);
|
||||
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
esto lo confirmamos con ellos, yo intentaria llevarlo a front sin este campo hasToIgnore y que se lo filtren, de lo contrario..mañana cuando cambien codigos esto habra que cambiarlo esto lo confirmamos con ellos, yo intentaria llevarlo a front sin este campo hasToIgnore y que se lo filtren, de lo contrario..mañana cuando cambien codigos esto habra que cambiarlo
jsegarra
commented
La consulta que estas viendo está copiada y traducida desde access La consulta que estas viendo está copiada y traducida desde access
Solo la he migrado.
Este campo sirve para ordenar los resultados
jsegarra
commented
cambiado cambiado
|
||||
return detail;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,46 @@
|
|||
const models = require('vn-loopback/server/server').models;
|
||||
|
||||
describe('Item Lack Detail', () => {
|
||||
it('should return false if id is null', async() => {
|
||||
const tx = await models.Ticket.beginTransaction({});
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
const id = null;
|
||||
|
||||
const result = await models.Ticket.itemLackDetail(id, options);
|
||||
|
||||
expect(result).toBeFalsy();
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
|
||||
it('should return data if id exists', async() => {
|
||||
const tx = await models.Ticket.beginTransaction({});
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
const id = 1167;
|
||||
const result = await models.Ticket.itemLackDetail(id, options);
|
||||
|
||||
expect(result).toBeFalsy();
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
|
||||
it('should return error is if not exists', async() => {
|
||||
const tx = await models.Ticket.beginTransaction({});
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
const id = 0;
|
||||
const result = await models.Ticket.itemLackDetail(id, options);
|
||||
|
||||
expect(result).toBeFalsy();
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
});
|
|
@ -44,4 +44,5 @@ module.exports = function(Self) {
|
|||
require('../methods/ticket/invoiceTickets')(Self);
|
||||
require('../methods/ticket/docuwareDownload')(Self);
|
||||
require('../methods/ticket/itemLack')(Self);
|
||||
require('../methods/ticket/itemLackDetail')(Self);
|
||||
};
|
||||
|
|
esta descripcion corresponde ?