3278 - Disallow claim creation for a ticket delivered more than seven days ago #791
|
@ -212,5 +212,6 @@
|
|||
"You don't have enough privileges to set this credit amount": "No tienes suficientes privilegios para establecer esta cantidad de crédito",
|
||||
"You can't change the credit set to zero from a manager": "No puedes cambiar el cŕedito establecido a cero por un gerente",
|
||||
"The PDF document does not exists": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'",
|
||||
"The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos"
|
||||
"The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos",
|
||||
"You can't create a claim from a ticket delivered more than seven days ago": "No puedes crear una reclamación de un ticket entregado hace más de siete días"
|
||||
}
|
|
@ -57,8 +57,14 @@ module.exports = Self => {
|
|||
}
|
||||
}, myOptions);
|
||||
|
||||
const landedPlusWeek = new Date(ticket.landed);
|
||||
landedPlusWeek.setDate(landedPlusWeek.getDate() + 7);
|
||||
const isClaimable = landedPlusWeek >= new Date();
|
||||
|
||||
if (ticket.isDeleted)
|
||||
throw new UserError(`You can't create a claim for a removed ticket`);
|
||||
if (!isClaimable)
|
||||
throw new UserError(`You can't create a claim from a ticket delivered more than seven days ago`);
|
||||
|
||||
const newClaim = await Self.create({
|
||||
ticketFk: ticketId,
|
||||
|
|
|
@ -1,31 +1,40 @@
|
|||
const app = require('vn-loopback/server/server');
|
||||
const models = require('vn-loopback/server/server').models;
|
||||
const LoopBackContext = require('loopback-context');
|
||||
|
||||
describe('Claim createFromSales()', () => {
|
||||
const ticketId = 2;
|
||||
const ticketId = 16;
|
||||
const newSale = [{
|
||||
id: 3,
|
||||
instance: 0,
|
||||
quantity: 10
|
||||
}];
|
||||
const ctx = {
|
||||
req: {
|
||||
accessToken: {userId: 1},
|
||||
headers: {origin: 'localhost:5000'},
|
||||
__: () => {}
|
||||
}
|
||||
const activeCtx = {
|
||||
accessToken: {userId: 1},
|
||||
headers: {origin: 'localhost:5000'},
|
||||
__: () => {}
|
||||
};
|
||||
|
||||
const ctx = {
|
||||
req: activeCtx
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||
active: activeCtx
|
||||
});
|
||||
});
|
||||
|
||||
it('should create a new claim', async() => {
|
||||
const tx = await app.models.Claim.beginTransaction({});
|
||||
const tx = await models.Claim.beginTransaction({});
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
|
||||
const claim = await app.models.Claim.createFromSales(ctx, ticketId, newSale, options);
|
||||
const claim = await models.Claim.createFromSales(ctx, ticketId, newSale, options);
|
||||
|
||||
expect(claim.ticketFk).toEqual(ticketId);
|
||||
|
||||
let claimBeginning = await app.models.ClaimBeginning.findOne({where: {claimFk: claim.id}}, options);
|
||||
let claimBeginning = await models.ClaimBeginning.findOne({where: {claimFk: claim.id}}, options);
|
||||
|
||||
expect(claimBeginning.saleFk).toEqual(newSale[0].id);
|
||||
expect(claimBeginning.quantity).toEqual(newSale[0].quantity);
|
||||
|
@ -37,17 +46,42 @@ describe('Claim createFromSales()', () => {
|
|||
}
|
||||
});
|
||||
|
||||
it('should not be able to create a claim if exists that sale', async() => {
|
||||
const tx = await app.models.Claim.beginTransaction({});
|
||||
it('should not be able to create a claim for a ticket delivered more than seven days ago', async() => {
|
||||
const tx = await models.Claim.beginTransaction({});
|
||||
|
||||
let error;
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
|
||||
await app.models.Claim.createFromSales(ctx, ticketId, newSale, options);
|
||||
const todayMinusEightDays = new Date();
|
||||
todayMinusEightDays.setDate(todayMinusEightDays.getDate() - 8);
|
||||
|
||||
await app.models.Claim.createFromSales(ctx, ticketId, newSale, options);
|
||||
const ticket = await models.Ticket.findById(ticketId, options);
|
||||
await ticket.updateAttribute('landed', todayMinusEightDays, options);
|
||||
|
||||
await models.Claim.createFromSales(ctx, ticketId, newSale, options);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
error = e;
|
||||
await tx.rollback();
|
||||
}
|
||||
|
||||
expect(error.toString()).toContain(`You can't create a claim from a ticket delivered more than seven days ago`);
|
||||
});
|
||||
|
||||
it('should not be able to create a claim if exists that sale', async() => {
|
||||
const tx = await models.Claim.beginTransaction({});
|
||||
|
||||
let error;
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
|
||||
await models.Claim.createFromSales(ctx, ticketId, newSale, options);
|
||||
|
||||
await models.Claim.createFromSales(ctx, ticketId, newSale, options);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
|
|
@ -469,7 +469,8 @@
|
|||
</vn-item>
|
||||
<vn-item translate
|
||||
name="claim"
|
||||
ng-click="$ctrl.createClaim()">
|
||||
ng-click="$ctrl.createClaim()"
|
||||
ng-if="$ctrl.isClaimable">
|
||||
Add claim
|
||||
</vn-item>
|
||||
<vn-item translate
|
||||
|
|
|
@ -35,6 +35,16 @@ class Controller extends Section {
|
|||
return ticketState && ticketState.state.code;
|
||||
}
|
||||
|
||||
get isClaimable() {
|
||||
if (this.ticket) {
|
||||
const landedPlusWeek = new Date(this.ticket.landed);
|
||||
landedPlusWeek.setDate(landedPlusWeek.getDate() + 7);
|
||||
|
||||
return landedPlusWeek >= new Date();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
getSaleTotal(sale) {
|
||||
if (sale.quantity == null || sale.price == null)
|
||||
return null;
|
||||
|
|
|
@ -15,7 +15,8 @@ describe('Ticket', () => {
|
|||
const ticket = {
|
||||
id: 1,
|
||||
clientFk: 1101,
|
||||
shipped: 1,
|
||||
shipped: new Date(),
|
||||
landed: new Date(),
|
||||
created: new Date(),
|
||||
client: {salesPersonFk: 1},
|
||||
address: {mobile: 111111111}
|
||||
|
@ -74,6 +75,25 @@ describe('Ticket', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('isClaimable() getter', () => {
|
||||
it('should return true for a ticket delivered less than seven days ago', () => {
|
||||
const result = controller.isClaimable;
|
||||
|
||||
expect(result).toEqual(true);
|
||||
});
|
||||
|
||||
it('should return false for a ticket delivered more than seven days ago', () => {
|
||||
const ticket = controller.ticket;
|
||||
const landedMinusEightDays = new Date(ticket.landed);
|
||||
landedMinusEightDays.setDate(landedMinusEightDays.getDate() - 8);
|
||||
ticket.landed = landedMinusEightDays;
|
||||
|
||||
const result = controller.isClaimable;
|
||||
|
||||
expect(result).toEqual(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getSaleTotal()', () => {
|
||||
it('should return the sale total amount', () => {
|
||||
const sale = {
|
||||
|
|
Loading…
Reference in New Issue