Merge branch 'test' into 6222-test-saleCcomponentUpdate
gitea/salix/pipeline/head There was a failure building this commit
Details
gitea/salix/pipeline/head There was a failure building this commit
Details
This commit is contained in:
commit
3c778216a4
|
@ -20,7 +20,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.internationalExpedition = async expeditionFk => {
|
Self.internationalExpedition = async (expeditionFk) => {
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
|
|
||||||
const viaexpressConfig = await models.ViaexpressConfig.findOne({
|
const viaexpressConfig = await models.ViaexpressConfig.findOne({
|
||||||
|
|
|
@ -20,11 +20,11 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.renderer = async expeditionFk => {
|
Self.renderer = async (expeditionFk) => {
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
|
|
||||||
const viaexpressConfig = await models.ViaexpressConfig.findOne({
|
const viaexpressConfig = await models.ViaexpressConfig.findOne({
|
||||||
fields: ['client', 'user', 'password', 'defaultWeight', 'deliveryType']
|
fields: ['client', 'user', 'password', 'defaultWeight', 'deliveryType', 'agencyModeFk']
|
||||||
});
|
});
|
||||||
|
|
||||||
const expedition = await models.Expedition.findOne({
|
const expedition = await models.Expedition.findOne({
|
||||||
|
@ -34,7 +34,7 @@ module.exports = Self => {
|
||||||
{
|
{
|
||||||
relation: 'ticket',
|
relation: 'ticket',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['shipped', 'addressFk', 'clientFk', 'companyFk'],
|
fields: ['shipped', 'addressFk', 'clientFk', 'companyFk', 'agencyModeFk'],
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
relation: 'client',
|
relation: 'client',
|
||||||
|
@ -102,7 +102,6 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
@ -110,13 +109,15 @@ module.exports = Self => {
|
||||||
const ticket = expedition.ticket();
|
const ticket = expedition.ticket();
|
||||||
const sender = ticket.company().client();
|
const sender = ticket.company().client();
|
||||||
const shipped = ticket.shipped.toISOString();
|
const shipped = ticket.shipped.toISOString();
|
||||||
|
const isInterdia = (ticket.agencyModeFk === viaexpressConfig.agencyModeFk)
|
||||||
const data = {
|
const data = {
|
||||||
viaexpressConfig,
|
viaexpressConfig,
|
||||||
sender,
|
sender,
|
||||||
senderAddress: sender.defaultAddress(),
|
senderAddress: sender.defaultAddress(),
|
||||||
client: ticket.client(),
|
client: ticket.client(),
|
||||||
address: ticket.address(),
|
address: ticket.address(),
|
||||||
shipped
|
shipped,
|
||||||
|
isInterdia
|
||||||
};
|
};
|
||||||
|
|
||||||
const template = fs.readFileSync(__dirname + '/template.ejs', 'utf-8');
|
const template = fs.readFileSync(__dirname + '/template.ejs', 'utf-8');
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<Asegurado>0</Asegurado>
|
<Asegurado>0</Asegurado>
|
||||||
<Imprimir>0</Imprimir>
|
<Imprimir>0</Imprimir>
|
||||||
<ConDevolucionAlbaran>0</ConDevolucionAlbaran>
|
<ConDevolucionAlbaran>0</ConDevolucionAlbaran>
|
||||||
<Intradia>0</Intradia>
|
<Intradia><%= isInterdia %></Intradia>
|
||||||
<Observaciones></Observaciones>
|
<Observaciones></Observaciones>
|
||||||
<AlbaranRemitente></AlbaranRemitente>
|
<AlbaranRemitente></AlbaranRemitente>
|
||||||
<Modo>0</Modo>
|
<Modo>0</Modo>
|
||||||
|
|
|
@ -29,6 +29,9 @@
|
||||||
},
|
},
|
||||||
"deliveryType": {
|
"deliveryType": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"agencyModeFk": {
|
||||||
|
"type": "number"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
ALTER TABLE `vn`.`viaexpressConfig` ADD agencyModeFk int DEFAULT NULL NULL COMMENT 'Indica el agencyMode que es interdia';
|
||||||
|
ALTER TABLE `vn`.`viaexpressConfig` ADD CONSTRAINT viaexpressConfig_agencyMode_Fk FOREIGN KEY (agencyModeFK) REFERENCES vn.agencyMode(id) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
|
@ -14,17 +14,30 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const salesFilter = {
|
let sales;
|
||||||
where: {id: {inq: salesIds}},
|
let services;
|
||||||
include: {
|
|
||||||
relation: 'components',
|
if (salesIds && salesIds.length) {
|
||||||
scope: {
|
sales = await models.Sale.find({
|
||||||
fields: ['saleFk', 'componentFk', 'value']
|
where: {id: {inq: salesIds}},
|
||||||
|
include: {
|
||||||
|
relation: 'components',
|
||||||
|
scope: {
|
||||||
|
fields: ['saleFk', 'componentFk', 'value']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}, myOptions);
|
||||||
};
|
}
|
||||||
const sales = await models.Sale.find(salesFilter, myOptions);
|
|
||||||
let ticketsIds = [...new Set(sales.map(sale => sale.ticketFk))];
|
if (servicesIds && servicesIds.length) {
|
||||||
|
services = await models.TicketService.find({
|
||||||
|
where: {id: {inq: servicesIds}}
|
||||||
|
}, myOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
let ticketsIds = sales ?
|
||||||
|
[...new Set(sales.map(sale => sale.ticketFk))] :
|
||||||
|
[...new Set(services.map(service => service.ticketFk))];
|
||||||
|
|
||||||
const mappedTickets = new Map();
|
const mappedTickets = new Map();
|
||||||
|
|
||||||
|
@ -41,32 +54,28 @@ module.exports = Self => {
|
||||||
newTickets.push(newTicket);
|
newTickets.push(newTicket);
|
||||||
mappedTickets.set(ticketId, newTicket.id);
|
mappedTickets.set(ticketId, newTicket.id);
|
||||||
}
|
}
|
||||||
|
if (sales) {
|
||||||
|
for (const sale of sales) {
|
||||||
|
const newTicketId = mappedTickets.get(sale.ticketFk);
|
||||||
|
|
||||||
for (const sale of sales) {
|
const createdSale = await models.Sale.create({
|
||||||
const newTicketId = mappedTickets.get(sale.ticketFk);
|
ticketFk: newTicketId,
|
||||||
|
itemFk: sale.itemFk,
|
||||||
|
quantity: negative ? - sale.quantity : sale.quantity,
|
||||||
|
concept: sale.concept,
|
||||||
|
price: sale.price,
|
||||||
|
discount: sale.discount,
|
||||||
|
}, myOptions);
|
||||||
|
|
||||||
const createdSale = await models.Sale.create({
|
const components = sale.components();
|
||||||
ticketFk: newTicketId,
|
for (const component of components)
|
||||||
itemFk: sale.itemFk,
|
component.saleFk = createdSale.id;
|
||||||
quantity: negative ? - sale.quantity : sale.quantity,
|
|
||||||
concept: sale.concept,
|
|
||||||
price: sale.price,
|
|
||||||
discount: sale.discount,
|
|
||||||
}, myOptions);
|
|
||||||
|
|
||||||
const components = sale.components();
|
await models.SaleComponent.create(components, myOptions);
|
||||||
for (const component of components)
|
}
|
||||||
component.saleFk = createdSale.id;
|
|
||||||
|
|
||||||
await models.SaleComponent.create(components, myOptions);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (servicesIds && servicesIds.length) {
|
if (services) {
|
||||||
const servicesFilter = {
|
|
||||||
where: {id: {inq: servicesIds}}
|
|
||||||
};
|
|
||||||
const services = await models.TicketService.find(servicesFilter, myOptions);
|
|
||||||
|
|
||||||
for (const service of services) {
|
for (const service of services) {
|
||||||
const newTicketId = mappedTickets.get(service.ticketFk);
|
const newTicketId = mappedTickets.get(service.ticketFk);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ module.exports = Self => {
|
||||||
{
|
{
|
||||||
arg: 'salesIds',
|
arg: 'salesIds',
|
||||||
type: ['number'],
|
type: ['number'],
|
||||||
required: true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'servicesIds',
|
arg: 'servicesIds',
|
||||||
|
|
|
@ -44,24 +44,7 @@ describe('Sale refund()', () => {
|
||||||
|
|
||||||
const tickets = await models.Sale.refund(ctx, salesIds, servicesIds, withWarehouse, options);
|
const tickets = await models.Sale.refund(ctx, salesIds, servicesIds, withWarehouse, options);
|
||||||
|
|
||||||
const refundedTicket = await models.Ticket.findOne({
|
const refundedTicket = await getTicketRefund(tickets[0].id, options);
|
||||||
where: {
|
|
||||||
id: tickets[0].id
|
|
||||||
},
|
|
||||||
include: [
|
|
||||||
{
|
|
||||||
relation: 'ticketSales',
|
|
||||||
scope: {
|
|
||||||
include: {
|
|
||||||
relation: 'components'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
relation: 'ticketServices',
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}, options);
|
|
||||||
const ticketsAfter = await models.Ticket.find({}, options);
|
const ticketsAfter = await models.Ticket.find({}, options);
|
||||||
const salesLength = refundedTicket.ticketSales().length;
|
const salesLength = refundedTicket.ticketSales().length;
|
||||||
const componentsLength = refundedTicket.ticketSales()[0].components().length;
|
const componentsLength = refundedTicket.ticketSales()[0].components().length;
|
||||||
|
@ -77,4 +60,42 @@ describe('Sale refund()', () => {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should create a ticket without sales', async() => {
|
||||||
|
const servicesIds = [4];
|
||||||
|
const tx = await models.Sale.beginTransaction({});
|
||||||
|
const options = {transaction: tx};
|
||||||
|
try {
|
||||||
|
const tickets = await models.Sale.refund(ctx, null, servicesIds, withWarehouse, options);
|
||||||
|
const refundedTicket = await getTicketRefund(tickets[0].id, options);
|
||||||
|
|
||||||
|
expect(refundedTicket).toBeDefined();
|
||||||
|
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function getTicketRefund(id, options) {
|
||||||
|
return models.Ticket.findOne({
|
||||||
|
where: {
|
||||||
|
id
|
||||||
|
},
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
relation: 'ticketSales',
|
||||||
|
scope: {
|
||||||
|
include: {
|
||||||
|
relation: 'components'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
relation: 'ticketServices',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, options);
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ const UserError = require('vn-loopback/util/user-error');
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('updateTimeEntry', {
|
Self.remoteMethodCtx('updateTimeEntry', {
|
||||||
description: 'Updates a time entry for a worker if the user role is above the worker',
|
description: 'Updates a time entry for a worker if the user role is above the worker',
|
||||||
accessType: 'READ',
|
accessType: 'WRITE',
|
||||||
accepts: [{
|
accepts: [{
|
||||||
arg: 'id',
|
arg: 'id',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
|
|
Loading…
Reference in New Issue