Merge & fixes

This commit is contained in:
Juan Ferrer 2019-09-30 13:02:03 +02:00
commit 84572dc398
11 changed files with 117 additions and 30 deletions

View File

@ -652,8 +652,8 @@ export default {
kmStartInput: 'vn-route-basic-data vn-input-number[field="$ctrl.route.kmStart"] input', kmStartInput: 'vn-route-basic-data vn-input-number[field="$ctrl.route.kmStart"] input',
kmEndInput: 'vn-route-basic-data vn-input-number[model="$ctrl.route.kmEnd"] input', kmEndInput: 'vn-route-basic-data vn-input-number[model="$ctrl.route.kmEnd"] input',
createdDateInput: 'vn-route-basic-data vn-date-picker[model="$ctrl.route.created"] > div > input', createdDateInput: 'vn-route-basic-data vn-date-picker[model="$ctrl.route.created"] > div > input',
startedDateInput: 'vn-route-basic-data vn-date-picker[model="$ctrl.route.started"] > div > input', startedHourInput: 'vn-route-basic-data vn-input-time[model="$ctrl.route.started"] input',
finishedDateInput: 'vn-route-basic-data vn-date-picker[model="$ctrl.route.finished"] > div > input', finishedHourInput: 'vn-route-basic-data vn-input-time[model="$ctrl.route.finished"] input',
saveButton: 'vn-route-basic-data vn-submit[label="Save"] input' saveButton: 'vn-route-basic-data vn-submit[label="Save"] input'
}, },
routeTickets: { routeTickets: {

View File

@ -20,8 +20,8 @@ describe('Route basic Data path', () => {
.write(selectors.routeBasicData.kmStartInput, 1) .write(selectors.routeBasicData.kmStartInput, 1)
.clearInput(selectors.routeBasicData.kmEndInput) .clearInput(selectors.routeBasicData.kmEndInput)
.write(selectors.routeBasicData.kmEndInput, 2) .write(selectors.routeBasicData.kmEndInput, 2)
.datePicker(selectors.routeBasicData.startedDateInput, 1, null) .write(selectors.routeBasicData.startedHourInput, '0800')
.datePicker(selectors.routeBasicData.finishedDateInput, 1, null) .write(selectors.routeBasicData.finishedHourInput, '1230')
.waitToClick(selectors.routeBasicData.saveButton) .waitToClick(selectors.routeBasicData.saveButton)
.waitForLastSnackbar(); .waitForLastSnackbar();

View File

@ -5,7 +5,7 @@
form="form" form="form"
save="patch"> save="patch">
</vn-watcher> </vn-watcher>
<form name="form" ng-submit="watcher.submit()" compact> <form name="form" ng-submit="$ctrl.onSubmit()" compact>
<vn-card pad-large> <vn-card pad-large>
<vn-horizontal> <vn-horizontal>
<vn-autocomplete <vn-autocomplete
@ -56,18 +56,21 @@
</vn-input-number> </vn-input-number>
</vn-horizontal> </vn-horizontal>
<vn-horizontal> <vn-horizontal>
<vn-date-picker <vn-input-time
label="Hour started"
model="$ctrl.route.started">
</vn-input-time>
<vn-input-time
label="Hour finished"
model="$ctrl.route.finished">
</vn-input-time>
</vn-horizontal>
<vn-horizontal>
<vn-textfield
vn-one vn-one
label="Date started" label="Description"
model="$ctrl.route.started" field="$ctrl.route.description" vn-focus>
ini-options="{dateFormat: 'd-m-Y'}"> </vn-textfield>
</vn-date-picker>
<vn-date-picker
vn-one
label="Date finished"
model="$ctrl.route.finished"
ini-options="{dateFormat: 'd-m-Y'}">
</vn-date-picker>
</vn-horizontal> </vn-horizontal>
</vn-card> </vn-card>
<vn-button-bar> <vn-button-bar>

View File

@ -1,8 +1,24 @@
import ngModule from '../module'; import ngModule from '../module';
class Controller {
constructor($scope, $state) {
this.$scope = $scope;
this.$state = $state;
}
onSubmit() {
this.$scope.watcher.submit().then(() => {
this.card.reload();
});
}
}
ngModule.component('vnRouteBasicData', { ngModule.component('vnRouteBasicData', {
template: require('./index.html'), template: require('./index.html'),
controller: Controller,
bindings: { bindings: {
route: '<' route: '<'
},
require: {
card: '^vnRouteCard'
} }
}); });

View File

@ -2,3 +2,4 @@ Date finished: Fecha fin
Date started: Fecha inicio Date started: Fecha inicio
Km start: Km de inicio Km start: Km de inicio
Km end: Km de fin Km end: Km de fin
Description: Descripción

View File

@ -40,7 +40,7 @@
<vn-icon <vn-icon
vn-tooltip="Volume exceded" vn-tooltip="Volume exceded"
icon="icon-volume" icon="icon-volume"
ng-class="{bright: $ctrl.route.m3 > $ctrl.route.vehicle.m3}"> ng-class="{bright: $ctrl.route.m3 > $ctrl.route.vehicle.m3 && $ctrl.route.vehicle.m3 != NULL}">
</vn-icon> </vn-icon>
</div> </div>
<div class="quicklinks"> <div class="quicklinks">
@ -74,5 +74,5 @@
<vn-confirm <vn-confirm
vn-id="updateVolumeConfirmation" vn-id="updateVolumeConfirmation"
on-response="$ctrl.updateVolume(response)" on-response="$ctrl.updateVolume(response)"
question="Are you sure you want to book this invoice?"> question="Are you sure you want to update the volume?">
</vn-confirm> </vn-confirm>

View File

@ -1,5 +1,4 @@
import ngModule from '../module'; import ngModule from '../module';
import {createDecipher} from 'crypto';
class Controller { class Controller {
constructor($, $http, vnApp, $translate, aclService) { constructor($, $http, vnApp, $translate, aclService) {

View File

@ -3,4 +3,5 @@ Volume: Volumen
Send route report: Enviar informe de ruta Send route report: Enviar informe de ruta
Show route report: Ver informe de ruta Show route report: Ver informe de ruta
Update volume: Actualizar volumen Update volume: Actualizar volumen
Volume updated: Volumen actualizado Volume updated: Volumen actualizado
Are you sure you want to update the volume?: Estas seguro que quieres actualizar el volumen?

View File

@ -6,8 +6,8 @@
"dependencies": ["client", "worker", "ticket"], "dependencies": ["client", "worker", "ticket"],
"menu": [ "menu": [
{"state": "route.card.basicData", "icon": "settings"}, {"state": "route.card.basicData", "icon": "settings"},
{"state": "route.card.log", "icon": "history"}, {"state": "route.card.tickets", "icon": "icon-ticket"},
{"state": "route.card.tickets", "icon": "icon-ticket"}], {"state": "route.card.log", "icon": "history"}],
"routes": [ "routes": [
{ {
"url": "/route", "url": "/route",

View File

@ -2,9 +2,12 @@ const app = require('vn-loopback/server/server');
describe('sale transferSales()', () => { describe('sale transferSales()', () => {
let createdTicketId; let createdTicketId;
let createdTicketsIds = [];
afterAll(async done => { afterAll(async done => {
await app.models.Ticket.destroyById(createdTicketId); createdTicketsIds.forEach(async createdTicketId => {
await app.models.Ticket.destroyById(createdTicketId);
});
done(); done();
}); });
@ -62,22 +65,23 @@ describe('sale transferSales()', () => {
it('should transfer the sales from one ticket to a new one', async() => { it('should transfer the sales from one ticket to a new one', async() => {
const ctx = {req: {accessToken: {userId: 101}}}; const ctx = {req: {accessToken: {userId: 101}}};
let currentTicket = await app.models.Ticket.findById(11); let currentTicket = await app.models.Ticket.findById(11);
let currentTicketSales = await app.models.Ticket.getSales(currentTicket.id); let originalTicketSales = await app.models.Ticket.getSales(currentTicket.id);
salesToRestone = originalTicketSales;
expect(currentTicketSales.length).toEqual(2); expect(originalTicketSales.length).toEqual(2);
const currentTicketId = currentTicket.id; const currentTicketId = currentTicket.id;
const receiverTicketId = undefined; const receiverTicketId = undefined;
const sales = currentTicketSales;
let createdTicket = await app.models.Ticket.transferSales( let createdTicket = await app.models.Ticket.transferSales(
ctx, currentTicketId, receiverTicketId, sales); ctx, currentTicketId, receiverTicketId, originalTicketSales);
createdTicketId = createdTicket.id; createdTicketId = createdTicket.id;
createdTicketsIds.push(createdTicket.id);
currentTicketSales = await app.models.Ticket.getSales(currentTicket.id); originalTicketSales = await app.models.Ticket.getSales(currentTicket.id);
receiverTicketSales = await app.models.Ticket.getSales(createdTicket.id); receiverTicketSales = await app.models.Ticket.getSales(createdTicket.id);
expect(currentTicketSales.length).toEqual(0); expect(originalTicketSales.length).toEqual(0);
expect(receiverTicketSales.length).toEqual(2); expect(receiverTicketSales.length).toEqual(2);
}); });
@ -108,4 +112,67 @@ describe('sale transferSales()', () => {
expect(createdTicketSales.length).toEqual(0); expect(createdTicketSales.length).toEqual(0);
expect(receiverTicketSales.length).toEqual(2); expect(receiverTicketSales.length).toEqual(2);
}); });
describe('sale transferPartialSales()', () => {
it('should throw an error in the quantity to transfer exceeds the amount from the original sale', async() => {
const ctx = {req: {accessToken: {userId: 101}}};
let error;
let currentTicket = await app.models.Ticket.findById(11);
let currentTicketSales = await app.models.Ticket.getSales(currentTicket.id);
const currentTicketId = currentTicket.id;
const receiverTicketId = undefined;
currentTicketSales[0].quantity = 99;
await app.models.Ticket.transferSales(
ctx, currentTicketId, receiverTicketId, currentTicketSales)
.catch(response => {
expect(response.message).toEqual(`Invalid quantity`);
error = response;
});
expect(error).toBeDefined();
});
it('should partially transfer the sales from one ticket to a new one', async() => {
const ctx = {req: {accessToken: {userId: 101}}};
let currentTicket = await app.models.Ticket.findById(11);
let currentTicketSales = [];
let saleToRestore = await app.models.Sale.findById(7);
currentTicketSales.push(saleToRestore);
expect(currentTicketSales[0].quantity).toEqual(15);
const currentTicketId = currentTicket.id;
const receiverTicketId = undefined;
const originalQuantity = currentTicketSales[0].quantity;
currentTicketSales[0].quantity = 1;
let salesToPartiallyTransfer = [currentTicketSales[0]];
const saleIdToRestore = currentTicketSales[0].id;
let createdTicket = await app.models.Ticket.transferSales(
ctx, currentTicketId, receiverTicketId, salesToPartiallyTransfer);
createdTicketId = createdTicket.id;
createdTicketsIds.push(createdTicket.id);
currentTicketSales = await app.models.Ticket.getSales(currentTicket.id);
receiverTicketSales = await app.models.Ticket.getSales(createdTicket.id);
expect(currentTicketSales.length).toEqual(2);
expect(currentTicketSales[0].quantity).toEqual(14);
expect(receiverTicketSales.length).toEqual(1);
expect(receiverTicketSales[0].quantity).toEqual(1);
saleToRestore.updateAttribute('quantity', originalQuantity);
currentTicketSales = await app.models.Ticket.getSales(currentTicket.id);
expect(currentTicketSales[0].quantity).toEqual(15);
expect(currentTicketSales[0].id).toEqual(saleIdToRestore);
});
});
}); });

View File

@ -72,7 +72,7 @@ module.exports = Self => {
await models.Sale.updateAll({ await models.Sale.updateAll({
id: sale.id id: sale.id
}, {ticketFk: ticketId}, options); }, {ticketFk: ticketId}, options);
} else if (sale.quantity < originalSale.quantity) { } else if (sale.quantity != originalSale.quantity) {
await transferPartialSale( await transferPartialSale(
ticketId, originalSale, sale, options); ticketId, originalSale, sale, options);
} }