#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,
|
||||||
|
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
|
||||||
|
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
|
||||||
|
LEFT JOIN alertLevel al ON al.id = st.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
|
||||||
|
AND Fecha >= util.VN_CURDATE()
|
||||||
|
AND Fecha < INTERVAL util.VN_CURDATE() + INTERVAL ? + 1 DAY
|
||||||
|
ORDER BY s.Id_Movimiento DESC+
|
||||||
|
`, [id, 2], myOptions);
|
||||||
|
|
||||||
|
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/invoiceTickets')(Self);
|
||||||
require('../methods/ticket/docuwareDownload')(Self);
|
require('../methods/ticket/docuwareDownload')(Self);
|
||||||
require('../methods/ticket/itemLack')(Self);
|
require('../methods/ticket/itemLack')(Self);
|
||||||
|
require('../methods/ticket/itemLackDetail')(Self);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
esta descripcion corresponde ?