diff --git a/back/models/accounting-type.json b/back/models/accounting-type.json
index c2bf977b2..be08ac533 100644
--- a/back/models/accounting-type.json
+++ b/back/models/accounting-type.json
@@ -25,6 +25,9 @@
},
"isAutoConciliated": {
"type": "boolean"
+ },
+ "maxAmount": {
+ "type": "number"
}
},
"acls": [{
diff --git a/db/changes/10370-pickles/00-accountingType.sql b/db/changes/10370-pickles/00-accountingType.sql
new file mode 100644
index 000000000..1313e8223
--- /dev/null
+++ b/db/changes/10370-pickles/00-accountingType.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.accountingType ADD maxAmount INT DEFAULT NULL NULL;
+
+UPDATE vn.accountingType SET maxAmount = 1000 WHERE code = 'cash';
diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql
index 4c82be909..49a78ec98 100644
--- a/db/dump/fixtures.sql
+++ b/db/dump/fixtures.sql
@@ -7,7 +7,7 @@ ALTER TABLE `vn`.`zoneGeo` AUTO_INCREMENT = 1;
ALTER TABLE `vn`.`ticket` AUTO_INCREMENT = 1;
INSERT INTO `salix`.`AccessToken` (`id`, `ttl`, `created`, `userId`)
- VALUES
+ VALUES
('TOTALLY_SECURE_TOKEN', '1209600', CURDATE(), 66);
@@ -154,16 +154,16 @@ INSERT INTO `vn`.`shelving` (`code`, `parkingFk`, `isPrinted`, `priority`, `park
('GVC', '1', '0', '1', '0', '1106'),
('HEJ', '2', '0', '1', '0', '1106');
-INSERT INTO `vn`.`accountingType`(`id`, `description`, `receiptDescription`,`code`)
+INSERT INTO `vn`.`accountingType`(`id`, `description`, `receiptDescription`,`code`, `maxAmount`)
VALUES
- (1, 'CC y Polizas de crédito', NULL, NULL),
- (2, 'Cash', 'Cash', 'cash'),
- (3, 'Credit card', 'Credit Card', 'creditCard'),
- (4, 'Finalcial lines', NULL, NULL),
- (5, 'Other products', NULL, NULL),
- (6, 'Loans', NULL, NULL),
- (7, 'Leasing', NULL, NULL),
- (8, 'Compensations', 'Compensations', 'compensation');
+ (1, 'CC y Polizas de crédito', NULL, NULL, NULL),
+ (2, 'Cash', 'Cash', 'cash', 1000),
+ (3, 'Credit card', 'Credit Card', 'creditCard', NULL),
+ (4, 'Finalcial lines', NULL, NULL, NULL),
+ (5, 'Other products', NULL, NULL, NULL),
+ (6, 'Loans', NULL, NULL, NULL),
+ (7, 'Leasing', NULL, NULL, NULL),
+ (8, 'Compensations', 'Compensations', 'compensation', NULL);
INSERT INTO `vn`.`bank`(`id`, `bank`, `account`, `cash`, `entityFk`, `isActive`, `currencyFk`)
VALUES
@@ -1285,11 +1285,11 @@ INSERT INTO `vn`.`supplierAddress`(`id`, `supplierFk`, `nickname`, `street`, `pr
(5, 442, 'GCR building', 'Bristol district', 1, '46000', 'Gotham', '111111111', '222222222'),
(6, 442, 'The Gotham Tonight building', 'Bristol district', 1, '46000', 'Gotham', '111111111', '222222222');
-INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`commission`, `created`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`, `taxTypeSageFk`, `withholdingSageFk`, `transactionTypeSageFk`, `workerFk`, `supplierActivityFk`)
+INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`commission`, `created`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`, `taxTypeSageFk`, `withholdingSageFk`, `transactionTypeSageFk`, `workerFk`, `supplierActivityFk`, `isPayMethodChecked`)
VALUES
- (1, 'Plants SL', 'Plants nick', 4100000001, 1, '06089160W', 0, 0, CURDATE(), 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15, 4, 1, 1, 18, 'flowerPlants'),
- (2, 'Farmer King', 'The farmer', 4000020002, 1, '87945234L', 1, 0, CURDATE(), 1, 'supplier address 2', 'SILLA', 2, 43022, 1, 2, 10, 93, 2, 8, 18, 'animals'),
- (442, 'Verdnatura Levante SL', 'Verdnatura', 5115000442, 1, '06815934E', 0, 0, CURDATE(), 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 15, 6, 9, 3, 18, 'flowerPlants');
+ (1, 'Plants SL', 'Plants nick', 4100000001, 1, '06089160W', 0, 0, CURDATE(), 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15, 4, 1, 1, 18, 'flowerPlants', 1),
+ (2, 'Farmer King', 'The farmer', 4000020002, 1, '87945234L', 1, 0, CURDATE(), 1, 'supplier address 2', 'SILLA', 2, 43022, 1, 2, 10, 93, 2, 8, 18, 'animals', 1),
+ (442, 'Verdnatura Levante SL', 'Verdnatura', 5115000442, 1, '06815934E', 0, 0, CURDATE(), 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 15, 6, 9, 3, 18, 'flowerPlants', 1);
INSERT INTO `vn`.`supplierContact`(`id`, `supplierFk`, `phone`, `mobile`, `email`, `observation`, `name`)
VALUES
diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js
index 08a21f838..d4d5d33aa 100644
--- a/e2e/helpers/selectors.js
+++ b/e2e/helpers/selectors.js
@@ -1147,6 +1147,7 @@ export default {
alias: 'vn-supplier-basic-data vn-textfield[ng-model="$ctrl.supplier.nickname"]',
isSerious: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isSerious"]',
isActive: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isActive"]',
+ isPayMethodChecked: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isPayMethodChecked"]',
notes: 'vn-supplier-basic-data vn-textarea[ng-model="$ctrl.supplier.note"]',
saveButton: 'vn-supplier-basic-data button[type="submit"]',
},
diff --git a/e2e/paths/02-client/14_balance.spec.js b/e2e/paths/02-client/14_balance.spec.js
index d408215ff..d3de842e3 100644
--- a/e2e/paths/02-client/14_balance.spec.js
+++ b/e2e/paths/02-client/14_balance.spec.js
@@ -105,7 +105,23 @@ describe('Client balance path', () => {
expect(result).toContain('-€100.00');
});
+ it('should create a new payment and check the cash exceeded the maximum', async() => {
+ const amountPaid = '1001';
+
+ await page.closePopup();
+ await page.waitToClick(selectors.clientBalance.newPaymentButton);
+ await page.autocompleteSearch(selectors.clientBalance.newPaymentBank, 'Cash');
+ await page.write(selectors.clientBalance.newPaymentAmount, amountPaid);
+ await page.clearInput(selectors.clientBalance.newDescription);
+ await page.write(selectors.clientBalance.newDescription, 'Payment');
+ await page.waitToClick(selectors.clientBalance.saveButton);
+ const message = await page.waitForSnackbar();
+
+ expect(message.text).toContain('Amount exceeded');
+ });
+
it('should create a new payment that sets the balance back to the original negative value', async() => {
+ await page.closePopup();
await page.waitToClick(selectors.clientBalance.newPaymentButton);
await page.autocompleteSearch(selectors.clientBalance.newPaymentBank, 'Pay on receipt');
await page.overwrite(selectors.clientBalance.newPaymentAmount, '-150');
diff --git a/e2e/paths/13-supplier/02_basic_data.spec.js b/e2e/paths/13-supplier/02_basic_data.spec.js
index 2bc94402b..f98fa779e 100644
--- a/e2e/paths/13-supplier/02_basic_data.spec.js
+++ b/e2e/paths/13-supplier/02_basic_data.spec.js
@@ -22,6 +22,7 @@ describe('Supplier basic data path', () => {
await page.write(selectors.supplierBasicData.alias, 'Plants Nick SL');
await page.waitToClick(selectors.supplierBasicData.isSerious);
await page.waitToClick(selectors.supplierBasicData.isActive);
+ await page.waitToClick(selectors.supplierBasicData.isPayMethodChecked);
await page.write(selectors.supplierBasicData.notes, 'Some notes');
await page.waitToClick(selectors.supplierBasicData.saveButton);
@@ -52,6 +53,12 @@ describe('Supplier basic data path', () => {
expect(result).toBe('unchecked');
});
+ it('should check the isPayMethodChecked checkbox is now unchecked', async() => {
+ const result = await page.checkboxState(selectors.supplierBasicData.isPayMethodChecked);
+
+ expect(result).toBe('unchecked');
+ });
+
it('should check the notes were edited', async() => {
const result = await page.waitToGetProperty(selectors.supplierBasicData.notes, 'value');
diff --git a/modules/client/front/balance/create/index.html b/modules/client/front/balance/create/index.html
index f9bf89b04..56e505463 100644
--- a/modules/client/front/balance/create/index.html
+++ b/modules/client/front/balance/create/index.html
@@ -44,7 +44,8 @@
label="Amount"
ng-model="$ctrl.amountPaid"
step="0.01"
- required="true">
+ required="true"
+ max="$ctrl.maxAmount">
diff --git a/modules/client/front/balance/create/index.js b/modules/client/front/balance/create/index.js
index 5b5866732..d306c6f84 100644
--- a/modules/client/front/balance/create/index.js
+++ b/modules/client/front/balance/create/index.js
@@ -61,8 +61,14 @@ class Controller extends Dialog {
if (value) {
const accountingType = value.accountingType;
- this.receipt.description =
+ if (this.originalDescription) {
+ this.receipt.description =
`${accountingType && accountingType.receiptDescription}, ${this.originalDescription}`;
+ } else {
+ this.receipt.description =
+ `${accountingType && accountingType.receiptDescription}`;
+ }
+ this.maxAmount = accountingType && accountingType.maxAmount;
}
}
@@ -123,6 +129,11 @@ class Controller extends Dialog {
if (response !== 'accept')
return super.responseHandler(response);
+ const exceededAmount = this.receipt.amountPaid > this.maxAmount;
+
+ if (this.bankSelection.accountingType.code == 'cash' && exceededAmount)
+ return this.vnApp.showError(this.$t('Amount exceeded', {maxAmount: this.maxAmount}));
+
let receiptId;
return this.$http.post(`Clients/${this.clientFk}/createReceipt`, this.receipt)
.then(res => {
diff --git a/modules/client/front/balance/create/index.spec.js b/modules/client/front/balance/create/index.spec.js
index a2e3e2015..77fe32e0f 100644
--- a/modules/client/front/balance/create/index.spec.js
+++ b/modules/client/front/balance/create/index.spec.js
@@ -23,6 +23,7 @@ describe('Client', () => {
clientFk: 1101,
companyFk: 442
};
+ controller.bankSelection = {accountingType: {code: 'myCode'}};
}));
describe('bankSelection() setter', () => {
diff --git a/modules/client/front/balance/create/locale/es.yml b/modules/client/front/balance/create/locale/es.yml
index 266e4365c..056590966 100644
--- a/modules/client/front/balance/create/locale/es.yml
+++ b/modules/client/front/balance/create/locale/es.yml
@@ -1 +1,2 @@
-View receipt: Ver recibo
\ No newline at end of file
+View receipt: Ver recibo
+Amount exceeded: Según ley contra el fraude no se puede recibir cobros por importe igual o superior a {{maxAmount}}
\ No newline at end of file
diff --git a/modules/item/front/last-entries/index.js b/modules/item/front/last-entries/index.js
index a92ec4858..014761da9 100644
--- a/modules/item/front/last-entries/index.js
+++ b/modules/item/front/last-entries/index.js
@@ -6,7 +6,7 @@ class Controller extends Section {
super($element, $);
const from = new Date();
- from.setDate(from.getDate());
+ from.setDate(from.getDate() - 75);
from.setHours(0, 0, 0, 0);
const to = new Date();
diff --git a/modules/supplier/back/models/supplier.json b/modules/supplier/back/models/supplier.json
index 30ed721a5..d08383576 100644
--- a/modules/supplier/back/models/supplier.json
+++ b/modules/supplier/back/models/supplier.json
@@ -101,7 +101,10 @@
"mysql": {
"columnName": "withholdingSageFk"
}
- }
+ },
+ "isPayMethodChecked": {
+ "type": "boolean"
+ }
},
"relations": {
"payMethod": {
diff --git a/modules/supplier/front/basic-data/index.html b/modules/supplier/front/basic-data/index.html
index a30eee719..0ec80641d 100644
--- a/modules/supplier/front/basic-data/index.html
+++ b/modules/supplier/front/basic-data/index.html
@@ -36,6 +36,10 @@
label="Active"
ng-model="$ctrl.supplier.isActive">
+
+
{
const stmts = [];
- const startedMinusOne = new Date(started);
- startedMinusOne.setDate(started.getDate() - 1);
-
- const endedPlusOne = new Date(ended);
- endedPlusOne.setDate(ended.getDate() + 1);
-
stmts.push(`
DROP TEMPORARY TABLE IF EXISTS
tmp.timeControlCalculate,
tmp.timeBusinessCalculate
`);
- stmts.push(new ParameterizedSQL('CALL vn.timeControl_calculateByUser(?, ?, ?)', [userId, startedMinusOne, endedPlusOne]));
+ stmts.push(new ParameterizedSQL('CALL vn.timeControl_calculateByUser(?, ?, ?)', [userId, started, ended]));
- stmts.push(new ParameterizedSQL('CALL vn.timeBusiness_calculateByUser(?, ?, ?)', [userId, startedMinusOne, endedPlusOne]));
+ stmts.push(new ParameterizedSQL('CALL vn.timeBusiness_calculateByUser(?, ?, ?)', [userId, started, ended]));
const resultIndex = stmts.push(new ParameterizedSQL(`
- SELECT tbc.dated, tbc.timeWorkSeconds expectedHours, tcc.timeWorkSeconds workedHours
- FROM tmp.timeBusinessCalculate tbc
- LEFT JOIN tmp.timeControlCalculate tcc ON tcc.dated = tbc.dated
- WHERE tbc.dated BETWEEN ? AND ?
+ SELECT tcc.dated, tbc.timeWorkSeconds expectedHours, tcc.timeWorkSeconds workedHours
+ FROM tmp.timeControlCalculate tcc
+ LEFT JOIN tmp.timeBusinessCalculate tbc ON tcc.dated = tbc.dated
+ WHERE tcc.dated BETWEEN DATE(?) AND DATE(?)
`, [started, ended])) - 1;
stmts.push(`
diff --git a/modules/worker/back/methods/worker/specs/getWorkedHours.spec.js b/modules/worker/back/methods/worker/specs/getWorkedHours.spec.js
index c06ff8502..3132a9003 100644
--- a/modules/worker/back/methods/worker/specs/getWorkedHours.spec.js
+++ b/modules/worker/back/methods/worker/specs/getWorkedHours.spec.js
@@ -1,17 +1,17 @@
-const app = require('vn-loopback/server/server');
+const models = require('vn-loopback/server/server').models;
describe('Worker getWorkedHours()', () => {
it(`should return the expected hours and the worked hours of a given date`, async() => {
const workerID = 1106;
- let started = new Date();
+ const started = new Date();
started.setHours(0, 0, 0, 0);
- let ended = new Date();
- ended.setHours(0, 0, 0, 0);
+ const ended = new Date();
+ ended.setHours(23, 59, 59, 999);
- const [result] = await app.models.Worker.getWorkedHours(workerID, started, ended);
+ const [result] = await models.Worker.getWorkedHours(workerID, started, ended);
- expect(result.expectedHours).toEqual(28800); // 8:00 hours seconds
+ expect(result.expectedHours).toEqual(28800); // 8:00 hours in seconds
expect(result.workedHours).toEqual(29400); // 8:10 hours in seconds
});
});
diff --git a/modules/worker/front/time-control/index.js b/modules/worker/front/time-control/index.js
index 0fb5f9dbe..96913c505 100644
--- a/modules/worker/front/time-control/index.js
+++ b/modules/worker/front/time-control/index.js
@@ -171,7 +171,6 @@ class Controller extends Section {
from: from,
to: to
};
-
const query = `Workers/${this.$params.id}/getWorkedHours`;
return this.$http.get(query, {params}).then(res => {
const workDays = res.data;
@@ -212,7 +211,8 @@ class Controller extends Section {
let todayInWeek = this.weekDays.find(day => day.dated.getTime() === today.getTime());
if (todayInWeek && todayInWeek.hours && todayInWeek.hours.length) {
- const remainingTime = todayInWeek.workedHours ? ((todayInWeek.expectedHours - todayInWeek.workedHours) * 1000) : null;
+ const remainingTime = todayInWeek.workedHours ?
+ ((todayInWeek.expectedHours - todayInWeek.workedHours) * 1000) : null;
const lastKnownEntry = todayInWeek.hours[todayInWeek.hours.length - 1];
const lastKnownTime = new Date(lastKnownEntry.timed).getTime();
const finishTimeStamp = lastKnownTime && remainingTime ? lastKnownTime + remainingTime : null;
diff --git a/modules/zone/back/methods/zone/getEventsFiltered.js b/modules/zone/back/methods/zone/getEventsFiltered.js
new file mode 100644
index 000000000..2788f45d0
--- /dev/null
+++ b/modules/zone/back/methods/zone/getEventsFiltered.js
@@ -0,0 +1,63 @@
+module.exports = Self => {
+ Self.remoteMethod('getEventsFiltered', {
+ description: 'Get events filtered for zone and date',
+ accepts: [
+ {
+ arg: 'zoneFk',
+ type: 'number',
+ description: 'The zone id',
+ required: true
+ },
+ {
+ arg: 'started',
+ type: 'date',
+ description: 'The date calendar start',
+ },
+ {
+ arg: 'ended',
+ type: 'date',
+ description: 'The date calendar end',
+ }
+ ],
+ returns: {
+ type: 'object',
+ root: true
+ },
+ http: {
+ path: `/getEventsFiltered`,
+ verb: 'GET'
+ }
+ });
+
+ Self.getEventsFiltered = async(zoneFk, started, ended, options) => {
+ const myOptions = {};
+
+ if (typeof options == 'object')
+ Object.assign(myOptions, options);
+
+ query = `
+ SELECT *
+ FROM vn.zoneEvent
+ WHERE zoneFk = ?
+ AND ((type = 'indefinitely')
+ OR (type = 'day' AND dated BETWEEN ? AND ?)
+ OR (type = 'range'
+ AND (
+ (started BETWEEN ? AND ?)
+ OR (ended BETWEEN ? AND ?)
+ )
+ )
+ )
+ ORDER BY type='indefinitely' DESC, type='range' DESC, type='day' DESC;`;
+ const events = await Self.rawSql(query, [zoneFk, started, ended, started, ended, started, ended], myOptions);
+
+ query = `
+ SELECT *
+ FROM vn.zoneExclusion
+ WHERE zoneFk = ?
+ AND dated BETWEEN ? AND ?;`;
+ const exclusions = await Self.rawSql(query, [zoneFk, started, ended], myOptions);
+
+ return {events, exclusions};
+ };
+};
diff --git a/modules/zone/back/methods/zone/specs/clone.spec.js b/modules/zone/back/methods/zone/specs/clone.spec.js
index 1ede5feb7..92392d789 100644
--- a/modules/zone/back/methods/zone/specs/clone.spec.js
+++ b/modules/zone/back/methods/zone/specs/clone.spec.js
@@ -1,12 +1,12 @@
-const app = require('vn-loopback/server/server');
+const models = require('vn-loopback/server/server').models;
describe('agency clone()', () => {
it('should clone a zone', async() => {
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- const newZone = await app.models.Zone.clone(1, options);
+ const newZone = await models.Zone.clone(1, options);
expect(newZone.name).toEqual('Zone pickup A');
diff --git a/modules/zone/back/methods/zone/specs/deleteZone.spec.js b/modules/zone/back/methods/zone/specs/deleteZone.spec.js
index d8abe1da8..968685fec 100644
--- a/modules/zone/back/methods/zone/specs/deleteZone.spec.js
+++ b/modules/zone/back/methods/zone/specs/deleteZone.spec.js
@@ -1,4 +1,4 @@
-const app = require('vn-loopback/server/server');
+const models = require('vn-loopback/server/server').models;
const LoopBackContext = require('loopback-context');
describe('zone deletezone()', () => {
@@ -16,13 +16,13 @@ describe('zone deletezone()', () => {
active: activeCtx
});
try {
- const originalTickets = await app.models.Ticket.find({
+ const originalTickets = await models.Ticket.find({
where: {
zoneFk: zoneId
}
});
ticketIDs = originalTickets.map(ticket => ticket.id);
- originalTicketStates = await app.models.TicketState.find({where: {
+ originalTicketStates = await models.TicketState.find({where: {
ticketFk: {inq: ticketIDs},
code: 'FIXING'}});
} catch (error) {
@@ -31,16 +31,16 @@ describe('zone deletezone()', () => {
});
it('should delete a zone and update their tickets', async() => {
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- await app.models.Zone.deleteZone(ctx, zoneId, options);
+ await models.Zone.deleteZone(ctx, zoneId, options);
- const updatedZone = await app.models.Zone.findById(zoneId, null, options);
- const anUpdatedTicket = await app.models.Ticket.findById(ticketIDs[0], null, options);
+ const updatedZone = await models.Zone.findById(zoneId, null, options);
+ const anUpdatedTicket = await models.Ticket.findById(ticketIDs[0], null, options);
- const updatedTicketStates = await app.models.TicketState.find({
+ const updatedTicketStates = await models.TicketState.find({
where: {
ticketFk: {inq: ticketIDs},
code: 'FIXING'
diff --git a/modules/zone/back/methods/zone/specs/getEvents.spec.js b/modules/zone/back/methods/zone/specs/getEvents.spec.js
index 4227908bb..d1c51baff 100644
--- a/modules/zone/back/methods/zone/specs/getEvents.spec.js
+++ b/modules/zone/back/methods/zone/specs/getEvents.spec.js
@@ -1,13 +1,13 @@
-const app = require('vn-loopback/server/server');
+const models = require('vn-loopback/server/server').models;
describe('zone getEvents()', () => {
it('should return all events for the specified geo and agency mode', async() => {
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- let result = await app.models.Zone.getEvents(20, 1, options);
+ let result = await models.Zone.getEvents(20, 1, options);
expect(result.events.length).toEqual(10);
diff --git a/modules/zone/back/methods/zone/specs/getEventsFiltered.spec.js b/modules/zone/back/methods/zone/specs/getEventsFiltered.spec.js
new file mode 100644
index 000000000..ffa416282
--- /dev/null
+++ b/modules/zone/back/methods/zone/specs/getEventsFiltered.spec.js
@@ -0,0 +1,21 @@
+const models = require('vn-loopback/server/server').models;
+
+describe('zone getEventsFiltered()', () => {
+ it('should return events and exclusions for the specified zoneFk in a range of dates', async() => {
+ const tx = await models.Zone.beginTransaction({});
+
+ try {
+ const options = {transaction: tx};
+
+ let result = await models.Zone.getEventsFiltered(10, '2021-10-01', '2021-10-02', options);
+
+ expect(result.events.length).toEqual(1);
+ expect(result.exclusions.length).toEqual(0);
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
+});
diff --git a/modules/zone/back/methods/zone/specs/getLeaves.spec.js b/modules/zone/back/methods/zone/specs/getLeaves.spec.js
index 853962cc4..db7359671 100644
--- a/modules/zone/back/methods/zone/specs/getLeaves.spec.js
+++ b/modules/zone/back/methods/zone/specs/getLeaves.spec.js
@@ -1,13 +1,13 @@
-const app = require('vn-loopback/server/server');
+const models = require('vn-loopback/server/server').models;
describe('zone getLeaves()', () => {
it('should return the country and the childs containing the search value', async() => {
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- let result = await app.models.Zone.getLeaves(1, null, '46000', options);
+ let result = await models.Zone.getLeaves(1, null, '46000', options);
expect(result.length).toEqual(1);
diff --git a/modules/zone/back/methods/zone/specs/includingExpired.spec.js b/modules/zone/back/methods/zone/specs/includingExpired.spec.js
index ea28727f4..98fdc272d 100644
--- a/modules/zone/back/methods/zone/specs/includingExpired.spec.js
+++ b/modules/zone/back/methods/zone/specs/includingExpired.spec.js
@@ -1,4 +1,4 @@
-const app = require('vn-loopback/server/server');
+const models = require('vn-loopback/server/server').models;
describe('zone includingExpired()', () => {
const inhousePickupId = 1;
@@ -6,14 +6,14 @@ describe('zone includingExpired()', () => {
const warehouseId = 1;
it('should return an array containing all zones', async() => {
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
const ctx = {req: {accessToken: {userId: 1}}};
const where = {};
try {
const options = {transaction: tx};
- const result = await app.models.Zone.includingExpired(ctx, {where}, options);
+ const result = await models.Zone.includingExpired(ctx, {where}, options);
expect(result.length).toBeGreaterThan(2);
@@ -28,12 +28,12 @@ describe('zone includingExpired()', () => {
const ctx = {req: {accessToken: {userId: 1}}};
const where = {agencyModeFk: inhousePickupId};
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- const result = await app.models.Zone.includingExpired(ctx, {where}, options);
+ const result = await models.Zone.includingExpired(ctx, {where}, options);
const validAgency = result.every(zone => zone.agencyModeFk = inhousePickupId);
@@ -56,12 +56,12 @@ describe('zone includingExpired()', () => {
warehouseFk: warehouseId
};
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- const result = await app.models.Zone.includingExpired(ctx, {where}, options);
+ const result = await models.Zone.includingExpired(ctx, {where}, options);
const firstZone = result[0];
expect(firstZone.name).toEqual('Zone pickup A');
diff --git a/modules/zone/back/methods/zone/specs/toggleIsIncluded.spec.js b/modules/zone/back/methods/zone/specs/toggleIsIncluded.spec.js
index 5fe948747..562e62f5f 100644
--- a/modules/zone/back/methods/zone/specs/toggleIsIncluded.spec.js
+++ b/modules/zone/back/methods/zone/specs/toggleIsIncluded.spec.js
@@ -1,13 +1,13 @@
-const app = require('vn-loopback/server/server');
+const models = require('vn-loopback/server/server').models;
describe('zone toggleIsIncluded()', () => {
it('should return the created location with isIncluded true', async() => {
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- let result = await app.models.Zone.toggleIsIncluded(1, 20, true, options);
+ let result = await models.Zone.toggleIsIncluded(1, 20, true, options);
expect(result.isIncluded).toBeTrue();
@@ -19,12 +19,12 @@ describe('zone toggleIsIncluded()', () => {
});
it('should return the created location with isIncluded false', async() => {
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- let result = await app.models.Zone.toggleIsIncluded(1, 20, false, options);
+ let result = await models.Zone.toggleIsIncluded(1, 20, false, options);
expect(result.isIncluded).toBeFalse();
@@ -36,14 +36,14 @@ describe('zone toggleIsIncluded()', () => {
});
it('should return the amount of deleted locations', async() => {
- const tx = await app.models.Zone.beginTransaction({});
+ const tx = await models.Zone.beginTransaction({});
try {
const options = {transaction: tx};
- await app.models.Zone.toggleIsIncluded(1, 20, false, options);
+ await models.Zone.toggleIsIncluded(1, 20, false, options);
- let result = await app.models.Zone.toggleIsIncluded(1, 20, undefined, options);
+ let result = await models.Zone.toggleIsIncluded(1, 20, undefined, options);
expect(result).toEqual({count: 1});
diff --git a/modules/zone/back/models/zone.js b/modules/zone/back/models/zone.js
index 0b1b9d106..9771c958b 100644
--- a/modules/zone/back/models/zone.js
+++ b/modules/zone/back/models/zone.js
@@ -2,6 +2,7 @@ module.exports = Self => {
require('../methods/zone/clone')(Self);
require('../methods/zone/getLeaves')(Self);
require('../methods/zone/getEvents')(Self);
+ require('../methods/zone/getEventsFiltered')(Self);
require('../methods/zone/toggleIsIncluded')(Self);
require('../methods/zone/getUpcomingDeliveries')(Self);
require('../methods/zone/deleteZone')(Self);
diff --git a/modules/zone/front/events/index.html b/modules/zone/front/events/index.html
index d48b5f0d8..25ec2827f 100644
--- a/modules/zone/front/events/index.html
+++ b/modules/zone/front/events/index.html
@@ -1,5 +1,6 @@
diff --git a/modules/zone/front/events/index.js b/modules/zone/front/events/index.js
index 29b534c0c..0df16a42a 100644
--- a/modules/zone/front/events/index.js
+++ b/modules/zone/front/events/index.js
@@ -21,14 +21,18 @@ class Controller extends Section {
}
refresh() {
- let data = {};
- this.$q.all([
- this.$http.get(this.path)
- .then(res => data.events = res.data),
- this.$http.get(this.exclusionsPath)
- .then(res => data.exclusions = res.data)
- ]).finally(() => {
- this.$.data = data;
+ this.$.data = null;
+ this.$.$applyAsync(() => {
+ const params = {
+ zoneFk: this.$params.id,
+ started: this.$.calendar.firstDay,
+ ended: this.$.calendar.lastDay
+ };
+
+ this.$http.get(`Zones/getEventsFiltered`, {params}).then(res => {
+ const data = res.data;
+ this.$.data = data;
+ });
});
}
diff --git a/modules/zone/front/events/index.spec.js b/modules/zone/front/events/index.spec.js
index c1b0d78b3..ed2c91c31 100644
--- a/modules/zone/front/events/index.spec.js
+++ b/modules/zone/front/events/index.spec.js
@@ -17,8 +17,26 @@ describe('component vnZoneEvents', () => {
describe('refresh()', () => {
it('should set the zone and then call both getSummary() and getWarehouses()', () => {
- $httpBackend.expectGET(`Zones/1/events`).respond({id: 1});
- $httpBackend.expectGET(`Zones/1/exclusions`).respond({id: 1});
+ const date = '2021-10-01';
+
+ controller.$params.id = 999;
+ controller.$.calendar = {
+ firstDay: date,
+ lastDay: date
+ };
+
+ const params = {
+ zoneFk: controller.$params.id,
+ started: date,
+ ended: date
+ };
+
+ const query = `Zones/getEventsFiltered?ended=${date}&started=${date}&zoneFk=${params.zoneFk}`;
+ const response = {
+ events: 'myEvents',
+ exclusions: 'myExclusions'
+ };
+ $httpBackend.whenGET(query).respond(response);
controller.refresh();
$httpBackend.flush();