diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql
index 58a4dc9f1..d4bc13730 100644
--- a/db/dump/fixtures.before.sql
+++ b/db/dump/fixtures.before.sql
@@ -185,6 +185,7 @@ INSERT INTO `vn`.`warehouse`(`id`, `name`, `code`, `isComparative`, `isInventory
(3, 'Warehouse Three', NULL, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0),
(4, 'Warehouse Four', NULL, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1),
(5, 'Warehouse Five', NULL, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0),
+ (6, 'Warehouse six', 'vnh', 1, 1, 1, 1, 0, 0, 1, 1, 0, 0),
(13, 'Inventory', 'inv', 1, 1, 1, 0, 0, 0, 1, 0, 0, 0),
(60, 'Algemesi', NULL, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0);
@@ -3941,6 +3942,11 @@ INSERT INTO vn.medicalReview
(id, workerFk, centerFk, `date`, `time`, isFit, amount, invoice, remark)
VALUES(3, 9, 2, '2000-01-01', '8:00', 1, 150.0, NULL, NULL);
+INSERT INTO vn.stockBought (workerFk, bought, reserve, dated)
+ VALUES(35, 1.00, 1.00, '2001-01-01');
+INSERT INTO vn.auctionConfig (id,conversionCoefficient,warehouseFk)
+ VALUES (1,0.6,6);
+
INSERT INTO vn.payrollComponent
(id, name, isSalaryAgreed, isVariable, isException)
VALUES
diff --git a/db/routines/hedera/procedures/orderRow_updateOverstocking.sql b/db/routines/hedera/procedures/orderRow_updateOverstocking.sql
index ff8362c65..b383cd135 100644
--- a/db/routines/hedera/procedures/orderRow_updateOverstocking.sql
+++ b/db/routines/hedera/procedures/orderRow_updateOverstocking.sql
@@ -15,7 +15,7 @@ BEGIN
SELECT DISTINCT warehouseFk
FROM orderRow
WHERE orderFk = vOrderFk
- AND shipped = util.VN_CURDATE();
+ AND shipment = util.VN_CURDATE();
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
diff --git a/db/routines/vn/procedures/expeditionPallet_build.sql b/db/routines/vn/procedures/expeditionPallet_build.sql
index 2df73bb85..a33439061 100644
--- a/db/routines/vn/procedures/expeditionPallet_build.sql
+++ b/db/routines/vn/procedures/expeditionPallet_build.sql
@@ -5,22 +5,26 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`expeditionPallet_buil
vWorkerFk INT,
OUT vPalletFk INT
)
-BEGIN
-/** Construye un pallet de expediciones.
+proc: BEGIN
+/**
+ * Builds an expedition pallet.
*
- * Primero comprueba si esas expediciones ya pertenecen a otro pallet,
- * en cuyo caso actualiza ese pallet.
+ * First, it checks if these expeditions already belong to another pallet,
+ * in which case it returns an error.
*
- * @param vExpeditions JSON_ARRAY con esta estructura [exp1, exp2, exp3, ...]
- * @param vArcId INT Identificador de arcRead
- * @param vWorkerFk INT Identificador de worker
- * @param out vPalletFk Identificador de expeditionPallet
+ * @param vExpeditions JSON_ARRAY with this structure [exp1, exp2, exp3, ...]
+ * @param vArcId INT Identifier of arcRead
+ * @param vWorkerFk INT Identifier of worker
+ * @param out vPalletFk Identifier of expeditionPallet
*/
+
DECLARE vCounter INT;
DECLARE vExpeditionFk INT;
DECLARE vTruckFk INT;
DECLARE vPrinterFk INT;
DECLARE vExpeditionStateTypeFk INT;
+ DECLARE vFreeExpeditionCount INT;
+ DECLARE vExpeditionWithPallet INT;
CREATE OR REPLACE TEMPORARY TABLE tExpedition (
expeditionFk INT,
@@ -44,48 +48,63 @@ BEGIN
WHERE e.id = vExpeditionFk;
END WHILE;
- SELECT palletFk INTO vPalletFk
- FROM (
- SELECT palletFk, count(*) n
- FROM tExpedition
- WHERE palletFk > 0
- GROUP BY palletFk
- ORDER BY n DESC
- LIMIT 100
- ) sub
- LIMIT 1;
+ SELECT COUNT(expeditionFk) INTO vFreeExpeditionCount
+ FROM tExpedition
+ WHERE palletFk IS NULL;
- IF vPalletFk IS NULL THEN
- SELECT roadmapStopFk INTO vTruckFk
- FROM (
- SELECT rm.roadmapStopFk, count(*) n
- FROM routesMonitor rm
- JOIN tExpedition e ON e.routeFk = rm.routeFk
- GROUP BY roadmapStopFk
- ORDER BY n DESC
- LIMIT 1
- ) sub;
+ SELECT COUNT(expeditionFk) INTO vExpeditionWithPallet
+ FROM tExpedition
+ WHERE palletFk;
- IF vTruckFk IS NULL THEN
- CALL util.throw ('TRUCK_NOT_AVAILABLE');
- END IF;
-
- INSERT INTO expeditionPallet SET truckFk = vTruckFk;
-
- SET vPalletFk = LAST_INSERT_ID();
+ IF vExpeditionWithPallet THEN
+ UPDATE arcRead
+ SET error = (
+ SELECT GROUP_CONCAT(expeditionFk SEPARATOR ', ')
+ FROM tExpedition
+ WHERE palletFk
+ )
+ WHERE id = vArcId;
+ LEAVE proc;
END IF;
+ IF NOT vFreeExpeditionCount THEN
+ CALL util.throw ('NO_FREE_EXPEDITIONS');
+ END IF;
+
+ SELECT roadmapStopFk INTO vTruckFk
+ FROM (
+ SELECT rm.roadmapStopFk, count(*) n
+ FROM routesMonitor rm
+ JOIN tExpedition e ON e.routeFk = rm.routeFk
+ WHERE e.palletFk IS NULL
+ GROUP BY roadmapStopFk
+ ORDER BY n DESC
+ LIMIT 1
+ ) sub;
+
+ IF vTruckFk IS NULL THEN
+ CALL util.throw ('TRUCK_NOT_AVAILABLE');
+ END IF;
+
+ INSERT INTO expeditionPallet SET truckFk = vTruckFk;
+
+ SET vPalletFk = LAST_INSERT_ID();
+
INSERT INTO expeditionScan(expeditionFk, palletFk, workerFk)
SELECT expeditionFk, vPalletFk, vWorkerFk
FROM tExpedition
- ON DUPLICATE KEY UPDATE palletFk = vPalletFk, workerFk = vWorkerFk;
+ WHERE palletFk IS NULL;
SELECT id INTO vExpeditionStateTypeFk
FROM expeditionStateType
WHERE code = 'PALLETIZED';
-
+
INSERT INTO expeditionState(expeditionFk, typeFk)
- SELECT expeditionFk, vExpeditionStateTypeFk FROM tExpedition;
+ SELECT expeditionFk, vExpeditionStateTypeFk
+ FROM tExpedition
+ WHERE palletFk IS NULL;
+
+ UPDATE arcRead SET error = NULL WHERE id = vArcId;
SELECT printerFk INTO vPrinterFk FROM arcRead WHERE id = vArcId;
diff --git a/db/routines/vn/procedures/item_getSimilar.sql b/db/routines/vn/procedures/item_getSimilar.sql
index 243aacc2f..537f53848 100644
--- a/db/routines/vn/procedures/item_getSimilar.sql
+++ b/db/routines/vn/procedures/item_getSimilar.sql
@@ -8,17 +8,18 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getSimilar`(
)
BEGIN
/**
-* Propone articulos ordenados, con la cantidad
-* de veces usado y segun sus caracteristicas.
-*
-* @param vSelf Id de artículo
-* @param vWarehouseFk Id de almacen
-* @param vDated Fecha
-* @param vShowType Mostrar tipos
-* @param vDaysInForward Días de alcance para las ventas
-*/
+ * Propone articulos ordenados, con la cantidad
+ * de veces usado y segun sus caracteristicas.
+ *
+ * @param vSelf Id de artículo
+ * @param vWarehouseFk Id de almacen
+ * @param vDated Fecha
+ * @param vShowType Mostrar tipos
+ * @param vDaysInForward Días de alcance para las ventas (https://redmine.verdnatura.es/issues/7956#note-4)
+ */
DECLARE vAvailableCalcFk INT;
DECLARE vVisibleCalcFk INT;
+ DECLARE vTypeFk INT;
DECLARE vPriority INT DEFAULT 1;
CALL cache.available_refresh(vAvailableCalcFk, FALSE, vWarehouseFk, vDated);
@@ -42,19 +43,9 @@ BEGIN
AND it.priority = vPriority
LEFT JOIN vn.tag t ON t.id = it.tagFk
WHERE i.id = vSelf
- ),
- sold AS (
- SELECT SUM(s.quantity) quantity, s.itemFk
- FROM vn.sale s
- JOIN vn.ticket t ON t.id = s.ticketFk
- LEFT JOIN vn.itemShelvingSale iss ON iss.saleFk = s.id
- WHERE t.shipped >= CURDATE() + INTERVAL vDaysInForward DAY
- AND iss.saleFk IS NULL
- AND t.warehouseFk = vWarehouseFk
- GROUP BY s.itemFk
)
SELECT i.id itemFk,
- LEAST(CAST(sd.quantity AS INT), v.visible) advanceable,
+ NULL advanceable, -- https://redmine.verdnatura.es/issues/7956#note-4
i.longName,
i.subName,
i.tag5,
@@ -79,7 +70,6 @@ BEGIN
v.visible located,
b.price2
FROM vn.item i
- LEFT JOIN sold sd ON sd.itemFk = i.id
JOIN cache.available a ON a.item_id = i.id
AND a.calc_id = vAvailableCalcFk
LEFT JOIN cache.visible v ON v.item_id = i.id
@@ -93,21 +83,20 @@ BEGIN
LEFT JOIN vn.tag t ON t.id = it.tagFk
LEFT JOIN vn.buy b ON b.id = lb.buy_id
JOIN itemTags its
- WHERE (a.available > 0 OR sd.quantity < v.visible)
+ WHERE a.available > 0
AND (i.typeFk = its.typeFk OR NOT vShowType)
AND i.id <> vSelf
- ORDER BY (a.available > 0) DESC,
- `counter` DESC,
- (t.name = its.name) DESC,
- (it.value = its.value) DESC,
- (i.tag5 = its.tag5) DESC,
- match5 DESC,
- (i.tag6 = its.tag6) DESC,
- match6 DESC,
- (i.tag7 = its.tag7) DESC,
- match7 DESC,
- (i.tag8 = its.tag8) DESC,
- match8 DESC
+ ORDER BY `counter` DESC,
+ (t.name = its.name) DESC,
+ (it.value = its.value) DESC,
+ (i.tag5 = its.tag5) DESC,
+ match5 DESC,
+ (i.tag6 = its.tag6) DESC,
+ match6 DESC,
+ (i.tag7 = its.tag7) DESC,
+ match7 DESC,
+ (i.tag8 = its.tag8) DESC,
+ match8 DESC
LIMIT 100;
END$$
DELIMITER ;
diff --git a/e2e/paths/07-order/01_summary.spec.js b/e2e/paths/07-order/01_summary.spec.js
deleted file mode 100644
index 9df481ef6..000000000
--- a/e2e/paths/07-order/01_summary.spec.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import getBrowser from '../../helpers/puppeteer';
-
-const $ = {
- id: 'vn-order-summary vn-one:nth-child(1) > vn-label-value:nth-child(1) span',
- alias: 'vn-order-summary vn-one:nth-child(1) > vn-label-value:nth-child(2) span',
- consignee: 'vn-order-summary vn-one:nth-child(2) > vn-label-value:nth-child(6) span',
- subtotal: 'vn-order-summary vn-one.taxes > p:nth-child(1)',
- vat: 'vn-order-summary vn-one.taxes > p:nth-child(2)',
- total: 'vn-order-summary vn-one.taxes > p:nth-child(3)',
- sale: 'vn-order-summary vn-tbody > vn-tr',
-};
-
-describe('Order summary path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'order');
- await page.accessToSearchResult('16');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the order summary section and check data', async() => {
- await page.waitForState('order.card.summary');
-
- const id = await page.innerText($.id);
- const alias = await page.innerText($.alias);
- const consignee = await page.innerText($.consignee);
- const subtotal = await page.innerText($.subtotal);
- const vat = await page.innerText($.vat);
- const total = await page.innerText($.total);
- const sale = await page.countElement($.sale);
-
- expect(id).toEqual('16');
- expect(alias).toEqual('Many places');
- expect(consignee).toEqual('address 26 - Gotham (Province one)');
- expect(subtotal.length).toBeGreaterThan(1);
- expect(vat.length).toBeGreaterThan(1);
- expect(total.length).toBeGreaterThan(1);
- expect(sale).toBeGreaterThan(0);
- });
-});
diff --git a/e2e/paths/07-order/02_basic_data.spec.js b/e2e/paths/07-order/02_basic_data.spec.js
deleted file mode 100644
index b2c21b071..000000000
--- a/e2e/paths/07-order/02_basic_data.spec.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-const $ = {
- form: 'vn-order-basic-data form',
- observation: 'vn-order-basic-data form [vn-name="note"]',
- saveButton: `vn-order-basic-data form button[type=submit]`,
- acceptButton: '.vn-confirm.shown button[response="accept"]'
-};
-
-describe('Order edit basic data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
-
- await page.loginAndModule('employee', 'order');
- await page.accessToSearchResult('1');
- await page.accessToSection('order.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- describe('when confirmed order', () => {
- it('should not be able to change the client', async() => {
- const message = await page.sendForm($.form, {
- client: 'Tony Stark',
- address: 'Tony Stark',
- });
-
- expect(message.text).toContain(`You can't make changes on the basic data`);
- });
- });
-
- describe('when new order', () => {
- it('should create an order and edit its basic data', async() => {
- await page.waitToClick(selectors.globalItems.returnToModuleIndexButton);
- await page.waitToClick($.acceptButton);
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.ordersIndex.createOrderButton);
- await page.waitForState('order.create');
-
- await page.autocompleteSearch(selectors.createOrderView.client, 'Jessica Jones');
- await page.pickDate(selectors.createOrderView.landedDatePicker);
- await page.autocompleteSearch(selectors.createOrderView.agency, 'Other agency');
- await page.waitToClick(selectors.createOrderView.createButton);
- await page.waitForState('order.card.catalog');
-
- await page.accessToSection('order.card.basicData');
-
- const values = {
- client: 'Tony Stark',
- address: 'Tony Stark',
- agencyMode: 'Other agency'
- };
-
- const message = await page.sendForm($.form, values);
- await page.reloadSection('order.card.basicData');
- const formValues = await page.fetchForm($.form, Object.keys(values));
-
- expect(message.isSuccess).toBeTrue();
- expect(formValues).toEqual(values);
- });
- });
-});
diff --git a/e2e/paths/07-order/03_lines.spec.js b/e2e/paths/07-order/03_lines.spec.js
deleted file mode 100644
index 718ea5ce5..000000000
--- a/e2e/paths/07-order/03_lines.spec.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Order lines', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'order');
- await page.accessToSearchResult('8');
- await page.accessToSection('order.card.line');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should check the order subtotal', async() => {
- const result = await page
- .waitToGetProperty(selectors.orderLine.orderSubtotal, 'innerText');
-
- expect(result).toContain('112.30');
- });
-
- it('should delete the first line in the order', async() => {
- await page.waitToClick(selectors.orderLine.firstLineDeleteButton);
- await page.waitToClick(selectors.orderLine.confirmButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should confirm the order subtotal has changed', async() => {
- await page.waitForTextInElement(selectors.orderLine.orderSubtotal, '92.80');
- const result = await page
- .waitToGetProperty(selectors.orderLine.orderSubtotal, 'innerText');
-
- expect(result).toContain('92.80');
- });
-
- it('should confirm the whole order and redirect to ticket index filtered by clientFk', async() => {
- await page.waitToClick(selectors.orderLine.confirmOrder);
-
- await page.expectURL('ticket/index');
- await page.expectURL('clientFk');
- });
-});
diff --git a/e2e/paths/07-order/04_catalog.spec.js b/e2e/paths/07-order/04_catalog.spec.js
deleted file mode 100644
index b8a20e938..000000000
--- a/e2e/paths/07-order/04_catalog.spec.js
+++ /dev/null
@@ -1,97 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Order catalog', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'order');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should open the create new order form', async() => {
- await page.waitToClick(selectors.ordersIndex.createOrderButton);
- await page.waitForState('order.create');
- });
-
- it('should create a new order', async() => {
- await page.autocompleteSearch(selectors.createOrderView.client, 'Tony Stark');
- await page.pickDate(selectors.createOrderView.landedDatePicker);
- await page.autocompleteSearch(selectors.createOrderView.agency, 'Other agency');
- await page.waitToClick(selectors.createOrderView.createButton);
- await page.waitForState('order.card.catalog');
- });
-
- it('should add the realm and type filters and obtain results', async() => {
- await page.waitToClick(selectors.orderCatalog.plantRealmButton);
- await page.autocompleteSearch(selectors.orderCatalog.type, 'Anthurium');
- await page.waitForNumberOfElements('section.product', 4);
- const result = await page.countElement('section.product');
-
- expect(result).toEqual(4);
- });
-
- it('should perfom an "OR" search for the item tag colors silver and brown', async() => {
- await page.waitToClick(selectors.orderCatalog.openTagSearch);
- await page.autocompleteSearch(selectors.orderCatalog.tag, 'Color');
- await page.autocompleteSearch(selectors.orderCatalog.firstTagAutocomplete, 'silver');
- await page.waitToClick(selectors.orderCatalog.addTagButton);
- await page.autocompleteSearch(selectors.orderCatalog.secondTagAutocomplete, 'brown');
- await page.waitToClick(selectors.orderCatalog.searchTagButton);
- await page.waitForNumberOfElements('section.product', 4);
- });
-
- it('should perfom an "OR" search for the item tag tallos 2 and 9', async() => {
- await page.waitToClick(selectors.orderCatalog.openTagSearch);
- await page.autocompleteSearch(selectors.orderCatalog.tag, 'Tallos');
- await page.write(selectors.orderCatalog.firstTagValue, '2');
- await page.waitToClick(selectors.orderCatalog.addTagButton);
- await page.write(selectors.orderCatalog.secondTagValue, '9');
- await page.waitToClick(selectors.orderCatalog.searchTagButton);
- await page.waitForNumberOfElements('section.product', 2);
- });
-
- it('should perform a general search for category', async() => {
- await page.write(selectors.orderCatalog.itemTagValue, 'concussion');
- await page.keyboard.press('Enter');
- await page.waitForNumberOfElements('section.product', 2);
- });
-
- it('should perfom an "AND" search for the item tag tallos 2', async() => {
- await page.waitToClick(selectors.orderCatalog.openTagSearch);
- await page.autocompleteSearch(selectors.orderCatalog.tag, 'Tallos');
- await page.write(selectors.orderCatalog.firstTagValue, '2');
- await page.waitToClick(selectors.orderCatalog.searchTagButton);
- await page.waitForNumberOfElements('section.product', 1);
- });
-
- it('should remove the tag filters and have 4 results', async() => {
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.orderCatalog.sixthFilterRemoveButton);
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.orderCatalog.fifthFilterRemoveButton);
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.orderCatalog.fourthFilterRemoveButton);
- await page.waitForContentLoaded();
- await page.waitToClick(selectors.orderCatalog.thirdFilterRemoveButton);
-
- await page.waitForNumberOfElements('.product', 4);
- const result = await page.countElement('section.product');
-
- expect(result).toEqual(4);
- });
-
- it('should search for an item by id', async() => {
- await page.accessToSearchResult('2');
- await page.waitForNumberOfElements('section.product', 1);
- const result = await page.countElement('section.product');
-
- expect(result).toEqual(1);
- });
-});
diff --git a/e2e/paths/07-order/05_index.spec.js b/e2e/paths/07-order/05_index.spec.js
deleted file mode 100644
index 23769766c..000000000
--- a/e2e/paths/07-order/05_index.spec.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Order Index', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'order');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it(`should check the second search result doesn't contain a total of 0€`, async() => {
- await page.waitToClick(selectors.globalItems.searchButton);
- const result = await page.waitToGetProperty(selectors.ordersIndex.secondSearchResultTotal, 'innerText');
-
- expect(result).not.toContain('0.00');
- });
-
- it('should search including empty orders', async() => {
- await page.waitToClick(selectors.ordersIndex.openAdvancedSearch);
- await page.waitToClick(selectors.ordersIndex.advancedSearchShowEmptyCheckbox);
- await page.waitToClick(selectors.ordersIndex.advancedSearchButton);
- await page.waitForTextInElement(selectors.ordersIndex.secondSearchResultTotal, '0.00');
- const result = await page.waitToGetProperty(selectors.ordersIndex.secondSearchResultTotal, 'innerText');
-
- expect(result).toContain('0.00');
- });
-});
diff --git a/front/core/services/app.js b/front/core/services/app.js
index b8fcc43e1..fa129c3fc 100644
--- a/front/core/services/app.js
+++ b/front/core/services/app.js
@@ -66,10 +66,16 @@ export default class App {
]}
};
-
- if (this.logger.$params.q)
- newRoute = newRoute.concat(`?table=${this.logger.$params.q}`);
+ if (this.logger.$params.q) {
+ let tableValue = this.logger.$params.q;
+ const q = JSON.parse(tableValue);
+ if (typeof q === 'number')
+ tableValue = JSON.stringify({id: tableValue});
+ newRoute = newRoute.concat(`?table=${tableValue}`);
+ }
+ if (this.logger.$params.id && newRoute.indexOf(this.logger.$params.id) < 0)
+ newRoute = newRoute.concat(`${this.logger.$params.id}`);
return this.logger.$http.get('Urls/findOne', {filter})
.then(res => {
diff --git a/modules/client/front/defaulter/index.html b/modules/client/front/defaulter/index.html
index 33bb751f1..440f34d3d 100644
--- a/modules/client/front/defaulter/index.html
+++ b/modules/client/front/defaulter/index.html
@@ -54,7 +54,7 @@
Client
|
-
+ |
Es trabajador
|
diff --git a/modules/client/front/defaulter/index.js b/modules/client/front/defaulter/index.js
index bc8686c10..2ec53d380 100644
--- a/modules/client/front/defaulter/index.js
+++ b/modules/client/front/defaulter/index.js
@@ -57,6 +57,11 @@ export default class Controller extends Section {
field: 'observation',
searchable: false
},
+ {
+ field: 'isWorker',
+ checkbox: true,
+
+ },
{
field: 'created',
datepicker: true
@@ -73,9 +78,6 @@ export default class Controller extends Section {
set defaulters(value) {
if (!value || !value.length) return;
- for (let defaulter of value)
- defaulter.isWorker = defaulter.businessTypeFk === 'worker';
-
this._defaulters = value;
}
@@ -164,6 +166,8 @@ export default class Controller extends Section {
exprBuilder(param, value) {
switch (param) {
+ case 'isWorker':
+ return {isWorker: value};
case 'creditInsurance':
case 'amount':
case 'clientFk':
diff --git a/modules/entry/back/methods/entry/specs/filter.spec.js b/modules/entry/back/methods/entry/specs/filter.spec.js
index 105838858..4bf5127b0 100644
--- a/modules/entry/back/methods/entry/specs/filter.spec.js
+++ b/modules/entry/back/methods/entry/specs/filter.spec.js
@@ -39,7 +39,7 @@ describe('Entry filter()', () => {
const result = await models.Entry.filter(ctx, options);
- expect(result.length).toEqual(11);
+ expect(result.length).toEqual(12);
await tx.rollback();
} catch (e) {
@@ -152,7 +152,7 @@ describe('Entry filter()', () => {
const result = await models.Entry.filter(ctx, options);
- expect(result.length).toEqual(10);
+ expect(result.length).toEqual(11);
await tx.rollback();
} catch (e) {
diff --git a/modules/entry/back/methods/stock-bought/getStockBoughtDetail.js b/modules/entry/back/methods/stock-bought/getStockBoughtDetail.js
index 3e040d0d3..d5f712edf 100644
--- a/modules/entry/back/methods/stock-bought/getStockBoughtDetail.js
+++ b/modules/entry/back/methods/stock-bought/getStockBoughtDetail.js
@@ -45,8 +45,8 @@ module.exports = Self => {
i.id itemFk,
i.name itemName,
ti.quantity,
- (ac.conversionCoefficient * (ti.quantity / b.packing) * buy_getVolume(b.id))
- / (vc.trolleyM3 * 1000000) volume,
+ ROUND((ac.conversionCoefficient * (ti.quantity / b.packing) * buy_getVolume(b.id))
+ / (vc.trolleyM3 * 1000000),1) volume,
b.packagingFk packagingFk,
b.packing
FROM tmp.item ti
diff --git a/modules/entry/front/descriptor-popover/index.html b/modules/entry/front/descriptor-popover/index.html
new file mode 100644
index 000000000..23f641632
--- /dev/null
+++ b/modules/entry/front/descriptor-popover/index.html
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/modules/entry/front/descriptor-popover/index.js b/modules/entry/front/descriptor-popover/index.js
new file mode 100644
index 000000000..d79aed03e
--- /dev/null
+++ b/modules/entry/front/descriptor-popover/index.js
@@ -0,0 +1,9 @@
+import ngModule from '../module';
+import DescriptorPopover from 'salix/components/descriptor-popover';
+
+class Controller extends DescriptorPopover {}
+
+ngModule.vnComponent('vnEntryDescriptorPopover', {
+ slotTemplate: require('./index.html'),
+ controller: Controller
+});
diff --git a/modules/entry/front/descriptor/index.html b/modules/entry/front/descriptor/index.html
new file mode 100644
index 000000000..3354d4155
--- /dev/null
+++ b/modules/entry/front/descriptor/index.html
@@ -0,0 +1,65 @@
+
+
+
+ Show entry report
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/entry/front/descriptor/index.js b/modules/entry/front/descriptor/index.js
new file mode 100644
index 000000000..3452a6d34
--- /dev/null
+++ b/modules/entry/front/descriptor/index.js
@@ -0,0 +1,99 @@
+import ngModule from '../module';
+import Descriptor from 'salix/components/descriptor';
+
+class Controller extends Descriptor {
+ get entry() {
+ return this.entity;
+ }
+
+ set entry(value) {
+ this.entity = value;
+ }
+
+ get travelFilter() {
+ let travelFilter;
+ const entryTravel = this.entry && this.entry.travel;
+
+ if (entryTravel && entryTravel.agencyModeFk) {
+ travelFilter = this.entry && JSON.stringify({
+ agencyModeFk: entryTravel.agencyModeFk
+ });
+ }
+ return travelFilter;
+ }
+
+ get entryFilter() {
+ let entryTravel = this.entry && this.entry.travel;
+
+ if (!entryTravel || !entryTravel.landed) return null;
+
+ const date = new Date(entryTravel.landed);
+ date.setHours(0, 0, 0, 0);
+
+ const from = new Date(date.getTime());
+ from.setDate(from.getDate() - 10);
+
+ const to = new Date(date.getTime());
+ to.setDate(to.getDate() + 10);
+
+ return JSON.stringify({
+ supplierFk: this.entry.supplierFk,
+ from,
+ to
+ });
+ }
+
+ loadData() {
+ const filter = {
+ include: [
+ {
+ relation: 'travel',
+ scope: {
+ fields: ['id', 'landed', 'agencyModeFk', 'warehouseOutFk'],
+ include: [
+ {
+ relation: 'agency',
+ scope: {
+ fields: ['name']
+ }
+ },
+ {
+ relation: 'warehouseOut',
+ scope: {
+ fields: ['name']
+ }
+ },
+ {
+ relation: 'warehouseIn',
+ scope: {
+ fields: ['name']
+ }
+ }
+ ]
+ }
+ },
+ {
+ relation: 'supplier',
+ scope: {
+ fields: ['id', 'nickname']
+ }
+ }
+ ]
+ };
+
+ return this.getData(`Entries/${this.id}`, {filter})
+ .then(res => this.entity = res.data);
+ }
+
+ showEntryReport() {
+ this.vnReport.show(`Entries/${this.id}/entry-order-pdf`);
+ }
+}
+
+ngModule.vnComponent('vnEntryDescriptor', {
+ template: require('./index.html'),
+ controller: Controller,
+ bindings: {
+ entry: '<'
+ }
+});
diff --git a/modules/entry/front/index.js b/modules/entry/front/index.js
index a7209a0bd..0f2208862 100644
--- a/modules/entry/front/index.js
+++ b/modules/entry/front/index.js
@@ -1,3 +1,6 @@
export * from './module';
import './main';
+import './descriptor';
+import './descriptor-popover';
+import './summary';
diff --git a/modules/entry/front/routes.json b/modules/entry/front/routes.json
index 53c599cf1..a2e70e37d 100644
--- a/modules/entry/front/routes.json
+++ b/modules/entry/front/routes.json
@@ -8,6 +8,12 @@
"main": [
{"state": "entry.index", "icon": "icon-entry"},
{"state": "entry.latestBuys", "icon": "contact_support"}
+ ],
+ "card": [
+ {"state": "entry.card.basicData", "icon": "settings"},
+ {"state": "entry.card.buy.index", "icon": "icon-lines"},
+ {"state": "entry.card.observation", "icon": "insert_drive_file"},
+ {"state": "entry.card.log", "icon": "history"}
]
},
"keybindings": [
@@ -27,6 +33,90 @@
"component": "vn-entry-index",
"description": "Entries",
"acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/latest-buys?q",
+ "state": "entry.latestBuys",
+ "component": "vn-entry-latest-buys",
+ "description": "Latest buys",
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/create?supplierFk&travelFk&companyFk",
+ "state": "entry.create",
+ "component": "vn-entry-create",
+ "description": "New entry",
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/:id",
+ "state": "entry.card",
+ "abstract": true,
+ "component": "vn-entry-card"
+ },
+ {
+ "url": "/summary",
+ "state": "entry.card.summary",
+ "component": "vn-entry-summary",
+ "description": "Summary",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/basic-data",
+ "state": "entry.card.basicData",
+ "component": "vn-entry-basic-data",
+ "description": "Basic data",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/observation",
+ "state": "entry.card.observation",
+ "component": "vn-entry-observation",
+ "description": "Notes",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url" : "/log",
+ "state": "entry.card.log",
+ "component": "vn-entry-log",
+ "description": "Log",
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url": "/buy",
+ "state": "entry.card.buy",
+ "abstract": true,
+ "component": "ui-view",
+ "acl": ["buyer"]
+ },
+ {
+ "url" : "/index",
+ "state": "entry.card.buy.index",
+ "component": "vn-entry-buy-index",
+ "description": "Buys",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer", "administrative"]
+ },
+ {
+ "url" : "/import",
+ "state": "entry.card.buy.import",
+ "component": "vn-entry-buy-import",
+ "description": "Import buys",
+ "params": {
+ "entry": "$ctrl.entry"
+ },
+ "acl": ["buyer"]
}
]
}
diff --git a/modules/entry/front/summary/index.html b/modules/entry/front/summary/index.html
new file mode 100644
index 000000000..22ea87bdf
--- /dev/null
+++ b/modules/entry/front/summary/index.html
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+ #{{$ctrl.entryData.id}} - {{$ctrl.entryData.supplier.nickname}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$ctrl.entryData.travel.ref}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Buys
+
+
+
+ Quantity |
+ Stickers |
+ Package |
+ Weight |
+ Packing |
+ Grouping |
+ Buying value |
+ Import |
+ PVP |
+
+
+
+
+ {{::line.quantity}} |
+ {{::line.stickers | dashIfEmpty}} |
+ {{::line.packagingFk | dashIfEmpty}} |
+ {{::line.weight}} |
+
+
+ {{::line.packing | dashIfEmpty}}
+
+ |
+
+
+ {{::line.grouping | dashIfEmpty}}
+
+
+ | {{::line.buyingValue | currency: 'EUR':2}} |
+ {{::line.quantity * line.buyingValue | currency: 'EUR':2}} |
+ {{::line.price2 | currency: 'EUR':2 | dashIfEmpty}} / {{::line.price3 | currency: 'EUR':2 | dashIfEmpty}} |
+
+
+
+
+ {{::line.item.itemType.code}}
+
+ |
+
+
+ {{::line.item.id}}
+
+ |
+
+
+ {{::line.item.size}}
+
+ |
+
+
+ {{::line.item.minPrice | currency: 'EUR':2}}
+
+ |
+
+
+ {{::line.item.name}}
+
+ {{::line.item.subName}}
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/entry/front/summary/index.js b/modules/entry/front/summary/index.js
new file mode 100644
index 000000000..6e18bc959
--- /dev/null
+++ b/modules/entry/front/summary/index.js
@@ -0,0 +1,33 @@
+import ngModule from '../module';
+import './style.scss';
+import Summary from 'salix/components/summary';
+
+class Controller extends Summary {
+ get entry() {
+ if (!this._entry)
+ return this.$params;
+
+ return this._entry;
+ }
+
+ set entry(value) {
+ this._entry = value;
+
+ if (value && value.id)
+ this.getEntryData();
+ }
+
+ getEntryData() {
+ return this.$http.get(`Entries/${this.entry.id}/getEntry`).then(response => {
+ this.entryData = response.data;
+ });
+ }
+}
+
+ngModule.vnComponent('vnEntrySummary', {
+ template: require('./index.html'),
+ controller: Controller,
+ bindings: {
+ entry: '<'
+ }
+});
diff --git a/modules/entry/front/summary/style.scss b/modules/entry/front/summary/style.scss
new file mode 100644
index 000000000..1d5b22e30
--- /dev/null
+++ b/modules/entry/front/summary/style.scss
@@ -0,0 +1,30 @@
+@import "variables";
+
+
+vn-entry-summary .summary {
+ max-width: $width-lg;
+
+ .dark-row {
+ background-color: lighten($color-marginal, 10%);
+ }
+
+ tbody tr:nth-child(1) {
+ border-top: $border-thin;
+ }
+
+ tbody tr:nth-child(1),
+ tbody tr:nth-child(2) {
+ border-left: $border-thin;
+ border-right: $border-thin
+ }
+
+ tbody tr:nth-child(3) {
+ height: inherit
+ }
+
+ tr {
+ margin-bottom: 10px;
+ }
+}
+
+$color-font-link-medium: lighten($color-font-link, 20%)
\ No newline at end of file
diff --git a/modules/item/back/methods/item/specs/lastEntriesFilter.spec.js b/modules/item/back/methods/item/specs/lastEntriesFilter.spec.js
index 00488e534..2fd30c2ca 100644
--- a/modules/item/back/methods/item/specs/lastEntriesFilter.spec.js
+++ b/modules/item/back/methods/item/specs/lastEntriesFilter.spec.js
@@ -1,6 +1,6 @@
const {models} = require('vn-loopback/server/server');
describe('item lastEntriesFilter()', () => {
- it('should return one entry for the given item', async() => {
+ it('should return two entry for the given item', async() => {
const minDate = Date.vnNew();
minDate.setHours(0, 0, 0, 0);
const maxDate = Date.vnNew();
@@ -13,7 +13,7 @@ describe('item lastEntriesFilter()', () => {
const filter = {where: {itemFk: 1, landed: {between: [minDate, maxDate]}}};
const result = await models.Item.lastEntriesFilter(filter, options);
- expect(result.length).toEqual(1);
+ expect(result.length).toEqual(2);
await tx.rollback();
} catch (e) {
@@ -22,7 +22,7 @@ describe('item lastEntriesFilter()', () => {
}
});
- it('should return five entries for the given item', async() => {
+ it('should return six entries for the given item', async() => {
const minDate = Date.vnNew();
minDate.setHours(0, 0, 0, 0);
minDate.setMonth(minDate.getMonth() - 2, 1);
@@ -37,7 +37,7 @@ describe('item lastEntriesFilter()', () => {
const filter = {where: {itemFk: 1, landed: {between: [minDate, maxDate]}}};
const result = await models.Item.lastEntriesFilter(filter, options);
- expect(result.length).toEqual(5);
+ expect(result.length).toEqual(6);
await tx.rollback();
} catch (e) {
diff --git a/modules/item/front/routes.json b/modules/item/front/routes.json
index 4b7cd1490..05b887a96 100644
--- a/modules/item/front/routes.json
+++ b/modules/item/front/routes.json
@@ -3,7 +3,7 @@
"name": "Items",
"icon": "icon-item",
"validations" : true,
- "dependencies": ["worker", "client", "ticket"],
+ "dependencies": ["worker", "client", "ticket", "entry"],
"menus": {
"main": [
{"state": "item.index", "icon": "icon-item"},
diff --git a/modules/order/front/basic-data/index.html b/modules/order/front/basic-data/index.html
deleted file mode 100644
index 019153b0d..000000000
--- a/modules/order/front/basic-data/index.html
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/order/front/basic-data/index.js b/modules/order/front/basic-data/index.js
deleted file mode 100644
index 16a3cea5e..000000000
--- a/modules/order/front/basic-data/index.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- let isDirty = false;
- this.$.$watch('$ctrl.selection', newValue => {
- if (newValue) {
- this.$.addressModel.where = {clientFk: newValue.id};
- this.$.addressModel.refresh();
- if (isDirty)
- this.order.addressFk = newValue.defaultAddressFk;
- isDirty = true;
- } else {
- this.$.addressModel.clear();
- if (isDirty)
- this.order.addressFk = null;
- }
- });
- }
-
- set order(value = {}) {
- this._order = value;
-
- const agencyModeFk = value.agencyModeFk;
- this.getAvailableAgencies();
- this._order.agencyModeFk = agencyModeFk;
- }
-
- get order() {
- return this._order;
- }
-
- getAvailableAgencies() {
- const order = this.order;
- order.agencyModeFk = null;
-
- const params = {
- addressFk: order.addressFk,
- landed: order.landed
- };
- if (params.landed && params.addressFk) {
- this.$http.get(`Agencies/landsThatDay`, {params})
- .then(res => this._availableAgencies = res.data);
- }
- }
-}
-
-ngModule.vnComponent('vnOrderBasicData', {
- controller: Controller,
- template: require('./index.html'),
- bindings: {
- order: '<'
- }
-});
diff --git a/modules/order/front/basic-data/index.spec.js b/modules/order/front/basic-data/index.spec.js
deleted file mode 100644
index 21dee0765..000000000
--- a/modules/order/front/basic-data/index.spec.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderBasicData', () => {
- let $httpBackend;
- let $httpParamSerializer;
- let controller;
- let $scope;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($compile, _$httpBackend_, $rootScope, _$httpParamSerializer_) => {
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- $scope = $rootScope.$new();
-
- $httpBackend.whenRoute('GET', 'Addresses')
- .respond([{id: 2, nickname: 'address 2'}]);
- $httpBackend.whenRoute('GET', 'Clients')
- .respond([{id: 1, defaultAddressFk: 1}]);
- $scope.order = {clientFk: 1, addressFk: 1};
-
- let $element = $compile('')($scope);
- $httpBackend.flush();
- controller = $element.controller('vnOrderBasicData');
- }));
-
- afterAll(() => {
- $scope.$destroy();
- $element.remove();
- });
-
- describe('constructor()', () => {
- it('should update the address after the client changes', async() => {
- const addressId = 999;
- const id = 444;
-
- controller.selection = {id: id, defaultAddressFk: addressId};
- $scope.$digest();
-
- expect(controller.order.addressFk).toEqual(addressId);
- });
- });
-
- describe('getAvailableAgencies()', () => {
- it('should set agencyModeFk to null and get the available agencies if the order has landed and client', async() => {
- controller.order.agencyModeFk = 999;
- controller.order.addressFk = 999;
- controller.order.landed = Date.vnNew();
-
- const expectedAgencies = [{id: 1}, {id: 2}];
-
- const paramsObj = {
- addressFk: controller.order.addressFk,
- landed: controller.order.landed
- };
- const serializedParams = $httpParamSerializer(paramsObj);
- $httpBackend.expect('GET', `Agencies/landsThatDay?${serializedParams}`).respond(expectedAgencies);
- controller.getAvailableAgencies();
- $httpBackend.flush();
-
- expect(controller.order.agencyModeFk).toBeDefined();
- expect(controller._availableAgencies).toEqual(expectedAgencies);
- });
- });
- });
-});
diff --git a/modules/order/front/basic-data/locale/es.yml b/modules/order/front/basic-data/locale/es.yml
deleted file mode 100644
index 5c6014c9c..000000000
--- a/modules/order/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-This form has been disabled because there are lines in this order or it's confirmed: Este formulario ha sido deshabilitado por que esta orden contiene líneas o está confirmada
\ No newline at end of file
diff --git a/modules/order/front/basic-data/style.scss b/modules/order/front/basic-data/style.scss
deleted file mode 100644
index 34d6c2931..000000000
--- a/modules/order/front/basic-data/style.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-vn-order-basic-data {
- .disabledForm {
- text-align: center;
- color: red;
- span {
- margin: 0 auto;
- }
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/card/index.html b/modules/order/front/card/index.html
deleted file mode 100644
index 4f10c1728..000000000
--- a/modules/order/front/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/order/front/card/index.js b/modules/order/front/card/index.js
deleted file mode 100644
index a7e5eeb5d..000000000
--- a/modules/order/front/card/index.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import ngModule from '../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- let filter = {
- include: [
- {
- relation: 'agencyMode',
- scope: {
- fields: ['name']
- }
- }, {
- relation: 'address',
- scope: {
- fields: ['nickname']
- }
- }, {
- relation: 'rows',
- scope: {
- fields: ['id']
- }
- }, {
- relation: 'client',
- scope: {
- fields: [
- 'salesPersonFk',
- 'name',
- 'isActive',
- 'isFreezed',
- 'isTaxDataChecked'
- ],
- include: {
- relation: 'salesPersonUser',
- scope: {
- fields: ['id', 'name']
- }
- }
- }
- }
- ]
- };
-
- return this.$q.all([
- this.$http.get(`Orders/${this.$params.id}`, {filter})
- .then(res => this.order = res.data),
- this.$http.get(`Orders/${this.$params.id}/getTotal`)
- .then(res => ({total: res.data}))
- ]).then(res => {
- this.order = Object.assign.apply(null, res);
- });
- }
-}
-
-ngModule.vnComponent('vnOrderCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/order/front/card/index.spec.js b/modules/order/front/card/index.spec.js
deleted file mode 100644
index f0de26b72..000000000
--- a/modules/order/front/card/index.spec.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderCard', () => {
- let controller;
- let $httpBackend;
- let data = {id: 1, name: 'fooName'};
- let total = 10.5;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$httpBackend_, $stateParams) => {
- $httpBackend = _$httpBackend_;
-
- let $element = angular.element('');
- controller = $componentController('vnOrderCard', {$element});
-
- $stateParams.id = data.id;
- $httpBackend.whenRoute('GET', 'Orders/:id').respond(data);
- $httpBackend.whenRoute('GET', 'Orders/:id/getTotal').respond(200, total);
- }));
-
- it('should request data and total, merge them, and set it on the controller', () => {
- controller.reload();
- $httpBackend.flush();
-
- expect(controller.order).toEqual(Object.assign({}, data, {total}));
- });
- });
-});
-
diff --git a/modules/order/front/catalog-search-panel/index.html b/modules/order/front/catalog-search-panel/index.html
deleted file mode 100644
index 42f2e0f50..000000000
--- a/modules/order/front/catalog-search-panel/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
diff --git a/modules/order/front/catalog-search-panel/index.js b/modules/order/front/catalog-search-panel/index.js
deleted file mode 100644
index b84243ca7..000000000
--- a/modules/order/front/catalog-search-panel/index.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-class Controller extends SearchPanel {
- constructor($element, $) {
- super($element, $);
-
- this.filter = {};
- }
-
- get filter() {
- return this.$.filter;
- }
-
- set filter(value) {
- if (!value)
- value = {};
- if (!value.values)
- value.values = [{}];
-
- this.$.filter = value;
- }
-
- addValue() {
- this.filter.values.push({});
- setTimeout(() => this.parentPopover.relocate());
- }
-}
-
-ngModule.vnComponent('vnOrderCatalogSearchPanel', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- onSubmit: '&?',
- parentPopover: '',
- resultTags: ''
- }
-});
diff --git a/modules/order/front/catalog-view/index.html b/modules/order/front/catalog-view/index.html
deleted file mode 100644
index b047e1e6a..000000000
--- a/modules/order/front/catalog-view/index.html
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{::item.name}}
-
-
- {{::item.subName}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{::item.minQuantity}}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/order/front/catalog-view/index.js b/modules/order/front/catalog-view/index.js
deleted file mode 100644
index 6f2cead8f..000000000
--- a/modules/order/front/catalog-view/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import ngModule from '../module';
-import Component from 'core/lib/component';
-import './style.scss';
-
-ngModule.vnComponent('vnOrderCatalogView', {
- template: require('./index.html'),
- controller: Component,
- bindings: {
- order: '<',
- model: '<'
- }
-});
diff --git a/modules/order/front/catalog-view/locale/es.yml b/modules/order/front/catalog-view/locale/es.yml
deleted file mode 100644
index 187dbbc83..000000000
--- a/modules/order/front/catalog-view/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Order created: Orden creada
\ No newline at end of file
diff --git a/modules/order/front/catalog-view/style.scss b/modules/order/front/catalog-view/style.scss
deleted file mode 100644
index 1e48745ca..000000000
--- a/modules/order/front/catalog-view/style.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-@import "variables";
-
-vn-order-catalog {
- .catalog-header {
- border-bottom: $border-thin;
- padding: $spacing-md;
- align-items: center;
-
- & > vn-one {
- display: flex;
- flex: 1;
-
- span {
- color: $color-font-secondary
- }
- }
- & > vn-auto {
- width: 448px;
- display: flex;
- overflow: hidden;
-
- & > * {
- padding-left: $spacing-md;
- }
- }
- }
- .catalog-list {
- padding-top: $spacing-sm;
- }
- .item-color-background {
- background: linear-gradient($color-bg-panel, $color-main);
- border-radius: 50%;
- margin-left: 140px;
- margin-top: 140px;
- width: 40px;
- height: 40px;
- position: absolute;
- }
- .item-color {
- margin: auto;
- margin-top: 5px;
- border-radius: 50%;
- width: 30px;
- height: 30px;
- position: relative;
- }
- .alert {
- color: $color-alert;
- }
-}
diff --git a/modules/order/front/catalog/index.html b/modules/order/front/catalog/index.html
deleted file mode 100644
index 0f7928c8b..000000000
--- a/modules/order/front/catalog/index.html
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{name}}
-
- {{categoryName}}
-
-
-
-
-
-
-
-
-
-
- More than {{model.limit}} results
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id: {{$ctrl.itemId}}
-
-
-
-
- Name:
-
- {{$ctrl.itemName}}
-
-
-
- {{category.selection.name}}
-
-
- {{type.selection.name}}
-
-
-
-
- {{::tagGroup.tagSelection.name}}:
-
-
- ,
- "{{::tagValue.value}}"
-
-
-
-
-
diff --git a/modules/order/front/catalog/index.js b/modules/order/front/catalog/index.js
deleted file mode 100644
index c0777ebc9..000000000
--- a/modules/order/front/catalog/index.js
+++ /dev/null
@@ -1,377 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.itemTypes = [];
- this._tagGroups = [];
-
- // Static autocomplete data
- this.orderWays = [
- {way: 'ASC', name: 'Ascendant'},
- {way: 'DESC', name: 'Descendant'},
- ];
- this.defaultOrderFields = [
- {field: 'relevancy DESC, name', name: 'Relevancy', priority: 999},
- {field: 'showOrder, price', name: 'Color and price', priority: 999},
- {field: 'name', name: 'Name', priority: 999},
- {field: 'price', name: 'Price', priority: 999}
- ];
- this.orderFields = [].concat(this.defaultOrderFields);
- this._orderWay = this.orderWays[0].way;
- this.orderField = this.orderFields[0].field;
- }
-
- $onChanges() {
- this.getData().then(() => {
- if (this.order && this.order.isConfirmed)
- this.$state.go('order.card.line');
- });
- }
-
- getData() {
- return this.$http.get(`Orders/${this.$params.id}`)
- .then(res => this.order = res.data);
- }
-
- /**
- * Fills order autocomplete with tags
- * obtained from last filtered
- */
- get order() {
- return this._order;
- }
-
- /**
- * Sets filter values from state params
- *
- * @param {Object} value - Order data
- */
- set order(value) {
- this._order = value;
-
- if (!value) return;
-
- this.$.$applyAsync(() => {
- if (this.$params.categoryId)
- this.categoryId = parseInt(this.$params.categoryId);
-
- if (this.$params.typeId)
- this.typeId = parseInt(this.$params.typeId);
-
- if (this.$params.tagGroups)
- this.tagGroups = JSON.parse(this.$params.tagGroups);
- });
- }
-
- get items() {
- return this._items;
- }
-
- set items(value) {
- this._items = value;
-
- if (!value) return;
-
- this.fetchResultTags(value);
- this.buildOrderFilter();
- }
-
- get categoryId() {
- return this._categoryId;
- }
-
- set categoryId(value = null) {
- this._categoryId = value;
- this.itemTypes = [];
- this.typeId = null;
-
- this.updateStateParams();
-
- if (this.tagGroups.length > 0)
- this.applyFilters();
-
- if (value)
- this.updateItemTypes();
- }
-
- changeCategory(id) {
- if (this._categoryId == id) id = null;
- this.categoryId = id;
- }
-
- get typeId() {
- return this._typeId;
- }
-
- set typeId(value) {
- this._typeId = value;
-
- this.updateStateParams();
-
- if (value || this.tagGroups.length > 0)
- this.applyFilters();
- }
-
- get tagGroups() {
- return this._tagGroups;
- }
-
- set tagGroups(value) {
- this._tagGroups = value;
-
- this.updateStateParams();
-
- if (value.length)
- this.applyFilters();
- }
-
- /**
- * Get order way ASC/DESC
- */
- get orderWay() {
- return this._orderWay;
- }
-
- set orderWay(value) {
- this._orderWay = value;
- if (value) this.applyOrder();
- }
-
- /**
- * Returns the order way selection
- */
- get orderSelection() {
- return this._orderSelection;
- }
-
- set orderSelection(value) {
- this._orderSelection = value;
-
- if (value) this.applyOrder();
- }
-
- /**
- * Apply order to model
- */
- applyOrder() {
- if (this.typeId || this.tagGroups.length > 0 || this.itemName)
- this.$.model.addFilter(null, {orderBy: this.getOrderBy()});
- }
-
- /**
- * Returns order param
- *
- * @return {Object} - Order param
- */
- getOrderBy() {
- const isTag = !!(this.orderSelection && this.orderSelection.isTag);
- return {
- field: this.orderField,
- way: this.orderWay,
- isTag: isTag
- };
- }
-
- /**
- * Refreshes item type dropdown data
- */
- updateItemTypes() {
- let params = {
- itemCategoryId: this.categoryId
- };
-
- const query = `Orders/${this.order.id}/getItemTypeAvailable`;
- this.$http.get(query, {params}).then(res =>
- this.itemTypes = res.data);
- }
-
- /**
- * Search by tag value
- * @param {object} event
- */
- onSearchByTag(event) {
- const value = this.$.search.value;
- if (event.key !== 'Enter' || !value) return;
- this.tagGroups.push({values: [{value: value}]});
- this.$.search.value = null;
- this.updateStateParams();
- this.applyFilters();
- }
-
- remove(index) {
- this.tagGroups.splice(index, 1);
- this.updateStateParams();
-
- if (this.tagGroups.length >= 0 || this.itemId || this.typeId)
- this.applyFilters();
- }
-
- removeItemId() {
- this.itemId = null;
- this.$.searchbar.doSearch({}, 'bar');
- }
-
- removeItemName() {
- this.itemName = null;
- this.$.searchbar.doSearch({}, 'bar');
- }
-
- applyFilters(filter = {}) {
- let newParams = {};
- let newFilter = Object.assign({}, filter);
- const model = this.$.model;
-
- if (this.categoryId)
- newFilter.categoryFk = this.categoryId;
-
- if (this.typeId)
- newFilter.typeFk = this.typeId;
-
- newParams = {
- orderFk: this.$params.id,
- orderBy: this.getOrderBy(),
- tagGroups: this.tagGroups,
- };
-
- return model.applyFilter({where: newFilter}, newParams);
- }
-
- openPanel(event) {
- if (event.defaultPrevented) return;
- event.preventDefault();
-
- this.panelFilter = {};
- this.$.popover.show(this.$.search.element);
- }
-
- onPanelSubmit(filter) {
- this.$.popover.hide();
- const values = filter.values;
- const nonEmptyValues = values.filter(tagValue => {
- return tagValue.value;
- });
-
- filter.values = nonEmptyValues;
-
- if (filter.tagFk && nonEmptyValues.length) {
- this.tagGroups.push(filter);
- this.updateStateParams();
- this.applyFilters();
- }
- }
-
- /**
- * Updates url state params from filter values
- */
- updateStateParams() {
- const params = {};
-
- params.categoryId = undefined;
- if (this.categoryId)
- params.categoryId = this.categoryId;
-
- params.typeId = undefined;
- if (this.typeId)
- params.typeId = this.typeId;
-
- params.tagGroups = undefined;
- if (this.tagGroups && this.tagGroups.length)
- params.tagGroups = JSON.stringify(this.sanitizedTagGroupParam());
-
- this.$state.go(this.$state.current.name, params);
- }
-
- sanitizedTagGroupParam() {
- const tagGroups = [];
- for (let tagGroup of this.tagGroups) {
- const tagParam = {values: []};
-
- for (let tagValue of tagGroup.values)
- tagParam.values.push({value: tagValue.value});
-
- if (tagGroup.tagFk)
- tagParam.tagFk = tagGroup.tagFk;
-
- if (tagGroup.tagSelection) {
- tagParam.tagSelection = {
- name: tagGroup.tagSelection.name
- };
- }
-
- tagGroups.push(tagParam);
- }
-
- return tagGroups;
- }
-
- fetchResultTags(items) {
- const resultTags = [];
- for (let item of items) {
- for (let itemTag of item.tags) {
- const alreadyAdded = resultTags.findIndex(tag => {
- return tag.tagFk == itemTag.tagFk;
- });
-
- if (alreadyAdded == -1)
- resultTags.push({...itemTag, priority: 1});
- else
- resultTags[alreadyAdded].priority += 1;
- }
- }
- this.resultTags = resultTags;
- }
-
- buildOrderFilter() {
- const filter = [].concat(this.defaultOrderFields);
- for (let tag of this.resultTags)
- filter.push({...tag, field: tag.id, isTag: true});
-
- this.orderFields = filter;
- }
-
- onSearch(params) {
- if (!params) return;
-
- this.itemId = null;
- this.itemName = null;
-
- if (params.search) {
- if (/^\d+$/.test(params.search)) {
- this.itemId = params.search;
- return this.applyFilters({
- 'i.id': params.search
- });
- } else {
- this.itemName = params.search;
- return this.applyFilters({
- 'i.name': {like: `%${params.search}%`}
- });
- }
- } else return this.applyFilters();
- }
-
- formatTooltip(tagGroup) {
- const tagValues = tagGroup.values;
-
- let title = '';
- if (tagGroup.tagFk) {
- const tagName = tagGroup.tagSelection.name;
- title += `${tagName}: `;
- }
-
- for (let [i, tagValue] of tagValues.entries()) {
- if (i > 0) title += ', ';
- title += `"${tagValue.value}"`;
- }
-
- return `${title}`;
- }
-}
-
-ngModule.vnComponent('vnOrderCatalog', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/order/front/catalog/index.spec.js b/modules/order/front/catalog/index.spec.js
deleted file mode 100644
index 03d7c41ba..000000000
--- a/modules/order/front/catalog/index.spec.js
+++ /dev/null
@@ -1,386 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Order', () => {
- describe('Component vnOrderCatalog', () => {
- let $scope;
- let $state;
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$state_, _$httpBackend_, $rootScope) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- $scope.model = crudModel;
- $scope.search = {};
- $scope.itemId = {};
- $state = _$state_;
- $state.current.name = 'my.current.state';
- const $element = angular.element('');
- controller = $componentController('vnOrderCatalog', {$element, $scope});
- controller._order = {id: 4};
- controller.$params = {
- categoryId: 1,
- typeId: 2,
- id: 4
- };
- }));
-
- describe('getData()', () => {
- it(`should make a query an fetch the order data`, () => {
- controller._order = null;
-
- $httpBackend.expect('GET', `Orders/4`).respond(200, {id: 4, isConfirmed: true});
- $httpBackend.expect('GET', `Orders/4/getItemTypeAvailable?itemCategoryId=1`).respond();
- controller.getData();
- $httpBackend.flush();
-
- const order = controller.order;
-
- expect(order.id).toEqual(4);
- expect(order.isConfirmed).toBeTruthy();
- });
- });
-
- describe('order() setter', () => {
- it(`should call scope $applyAsync() method and apply filters from state params`, () => {
- $httpBackend.expect('GET', `Orders/4/getItemTypeAvailable?itemCategoryId=1`).respond();
- controller.order = {id: 4};
-
- $scope.$apply();
-
- expect(controller.categoryId).toEqual(1);
- expect(controller.typeId).toEqual(2);
- });
- });
-
- describe('items() setter', () => {
- it(`should return an object with order params`, () => {
- jest.spyOn(controller, 'fetchResultTags');
- jest.spyOn(controller, 'buildOrderFilter');
-
- const expectedResult = [{field: 'showOrder, price', name: 'Color and price', priority: 999}];
- const items = [{id: 1, name: 'My Item', tags: [
- {tagFk: 4, name: 'Length'},
- {tagFk: 5, name: 'Color'}
- ]}];
- controller.items = items;
-
- expect(controller.orderFields.length).toEqual(6);
- expect(controller.orderFields).toEqual(jasmine.arrayContaining(expectedResult));
- expect(controller.fetchResultTags).toHaveBeenCalledWith(items);
- expect(controller.buildOrderFilter).toHaveBeenCalledWith();
- });
- });
-
- describe('categoryId() setter', () => {
- it(`should set category property to null, call updateStateParams() method and not call applyFilters()`, () => {
- jest.spyOn(controller, 'updateStateParams');
-
- controller.categoryId = null;
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- });
-
- it(`should set category property and then call updateStateParams() and applyFilters() methods`, () => {
- jest.spyOn(controller, 'updateStateParams');
-
- controller.categoryId = 2;
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- });
- });
-
- describe('changeCategory()', () => {
- it(`should set categoryId property to null if the new value equals to the old one`, () => {
- controller.categoryId = 2;
- controller.changeCategory(2);
-
- expect(controller.categoryId).toBeNull();
- });
-
- it(`should set categoryId property`, () => {
- controller.categoryId = 2;
- controller.changeCategory(1);
-
- expect(controller.categoryId).toEqual(1);
- });
- });
-
- describe('typeId() setter', () => {
- it(`should set type property to null, call updateStateParams() method and not call applyFilters()`, () => {
- jest.spyOn(controller, 'updateStateParams');
- jest.spyOn(controller, 'applyFilters');
-
- controller.typeId = null;
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- expect(controller.applyFilters).not.toHaveBeenCalledWith();
- });
-
- it(`should set category property and then call updateStateParams() and applyFilters() methods`, () => {
- jest.spyOn(controller, 'updateStateParams');
- jest.spyOn(controller, 'applyFilters');
-
- controller.typeId = 2;
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
- });
-
- describe('tagGroups() setter', () => {
- it(`should set tagGroups property and then call updateStateParams() and applyFilters() methods`, () => {
- jest.spyOn(controller, 'updateStateParams');
- jest.spyOn(controller, 'applyFilters');
-
- controller.tagGroups = [{tagFk: 11, values: [{value: 'Brown'}]}];
-
- expect(controller.updateStateParams).toHaveBeenCalledWith();
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
- });
-
- describe('onSearchByTag()', () => {
- it(`should not add a new tag if the event key code doesn't equals to 'Enter'`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- controller.order = {id: 4};
- controller.$.search.value = 'Brown';
- controller.onSearchByTag({key: 'Tab'});
-
- expect(controller.applyFilters).not.toHaveBeenCalledWith();
- });
-
- it(`should add a new tag if the event key code equals to 'Enter' an then call applyFilters()`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- controller.order = {id: 4};
- controller.$.search.value = 'Brown';
- controller.onSearchByTag({key: 'Enter'});
-
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
- });
-
- describe('onSearch()', () => {
- it(`should apply a filter by item id an then call the applyFilters method`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- const itemId = 1;
- controller.onSearch({search: itemId});
-
- expect(controller.applyFilters).toHaveBeenCalledWith({
- 'i.id': itemId
- });
- });
-
- it(`should apply a filter by item name an then call the applyFilters method`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- const itemName = 'Bow';
- controller.onSearch({search: itemName});
-
- expect(controller.applyFilters).toHaveBeenCalledWith({
- 'i.name': {like: `%${itemName}%`}
- });
- });
- });
-
- describe('applyFilters()', () => {
- it(`should call model applyFilter() method with a new filter`, () => {
- jest.spyOn(controller.$.model, 'applyFilter');
-
- controller._categoryId = 2;
- controller._typeId = 4;
-
- controller.applyFilters();
-
- expect(controller.$.model.applyFilter).toHaveBeenCalledWith(
- {where: {categoryFk: 2, typeFk: 4}},
- {orderFk: 4, orderBy: controller.getOrderBy(), tagGroups: []});
- });
- });
-
- describe('remove()', () => {
- it(`should remove a tag from tags property`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- controller.tagGroups = [
- {tagFk: 1, values: [{value: 'Brown'}]},
- {tagFk: 67, values: [{value: 'Concussion'}]}
- ];
- controller.remove(0);
-
- const firstTag = controller.tagGroups[0];
-
- expect(controller.tagGroups.length).toEqual(1);
- expect(firstTag.tagFk).toEqual(67);
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
-
- it(`should remove a tag from tags property and call applyFilters() if there's no more tags`, () => {
- jest.spyOn(controller, 'applyFilters');
-
- controller._categoryId = 1;
- controller._typeId = 1;
- controller.tagGroups = [{tagFk: 1, values: [{value: 'Blue'}]}];
- controller.remove(0);
-
- expect(controller.tagGroups.length).toEqual(0);
- expect(controller.applyFilters).toHaveBeenCalledWith();
- });
- });
-
- describe('updateStateParams()', () => {
- it(`should call state go() method passing category and type state params`, () => {
- jest.spyOn(controller.$state, 'go');
-
- controller._categoryId = 2;
- controller._typeId = 4;
- controller._tagGroups = [
- {tagFk: 67, values: [{value: 'Concussion'}], tagSelection: {name: 'Category'}}
- ];
- const tagGroups = JSON.stringify([
- {values: [{value: 'Concussion'}], tagFk: 67, tagSelection: {name: 'Category'}}
- ]);
- const expectedResult = {categoryId: 2, typeId: 4, tagGroups: tagGroups};
- controller.updateStateParams();
-
- expect(controller.$state.go).toHaveBeenCalledWith('my.current.state', expectedResult);
- });
- });
-
- describe('getOrderBy()', () => {
- it(`should return an object with order params`, () => {
- controller.orderField = 'relevancy DESC, name';
- controller.orderWay = 'DESC';
- let expectedResult = {
- field: 'relevancy DESC, name',
- way: 'DESC',
- isTag: false
- };
- let result = controller.getOrderBy();
-
- expect(result).toEqual(expectedResult);
- });
- });
-
- describe('applyOrder()', () => {
- it(`should apply order param to model calling getOrderBy()`, () => {
- jest.spyOn(controller, 'getOrderBy');
- jest.spyOn(controller.$.model, 'addFilter');
-
- controller.field = 'relevancy DESC, name';
- controller.way = 'ASC';
- controller._categoryId = 1;
- controller._typeId = 1;
- let expectedOrder = {orderBy: controller.getOrderBy()};
-
- controller.applyOrder();
-
- expect(controller.getOrderBy).toHaveBeenCalledWith();
- expect(controller.$.model.addFilter).toHaveBeenCalledWith(null, expectedOrder);
- });
- });
-
- describe('fetchResultTags()', () => {
- it(`should create an array of non repeated tags then set the resultTags property`, () => {
- const items = [
- {
- id: 1, name: 'My Item 1', tags: [
- {tagFk: 4, name: 'Length', value: 1},
- {tagFk: 5, name: 'Color', value: 'red'}
- ]
- },
- {
- id: 2, name: 'My Item 2', tags: [
- {tagFk: 4, name: 'Length', value: 1},
- {tagFk: 5, name: 'Color', value: 'blue'}
- ]
- }];
- controller.fetchResultTags(items);
-
- expect(controller.resultTags.length).toEqual(2);
- });
- });
-
- describe('buildOrderFilter()', () => {
- it(`should create an array of non repeated tags plus default filters and then set the orderFields property`, () => {
- const items = [
- {
- id: 1, name: 'My Item 1', tags: [
- {tagFk: 4, name: 'Length'},
- {tagFk: 5, name: 'Color'}
- ]
- },
- {
- id: 2, name: 'My Item 2', tags: [
- {tagFk: 5, name: 'Color'},
- {tagFk: 6, name: 'Relevancy'}
- ]
- }];
-
- controller.fetchResultTags(items);
- controller.buildOrderFilter();
-
- expect(controller.orderFields.length).toEqual(7);
- });
- });
-
- describe('formatTooltip()', () => {
- it(`should return a formatted text with the tag name and values`, () => {
- const tagGroup = {
- values: [{value: 'Silver'}, {value: 'Brown'}],
- tagFk: 1,
- tagSelection: {
- name: 'Color'
- }
- };
-
- const result = controller.formatTooltip(tagGroup);
-
- expect(result).toEqual(`Color: "Silver", "Brown"`);
- });
-
- it(`should return a formatted text with the tag value`, () => {
- const tagGroup = {
- values: [{value: 'Silver'}]
- };
-
- const result = controller.formatTooltip(tagGroup);
-
- expect(result).toEqual(`"Silver"`);
- });
- });
-
- describe('sanitizedTagGroupParam()', () => {
- it(`should return an array of tags`, () => {
- const dirtyTagGroups = [{
- values: [{value: 'Silver'}, {value: 'Brown'}],
- tagFk: 1,
- tagSelection: {
- name: 'Color',
- $orgRow: {name: 'Color'}
- },
- $orgIndex: 1
- }];
- controller.tagGroups = dirtyTagGroups;
-
- const expectedResult = [{
- values: [{value: 'Silver'}, {value: 'Brown'}],
- tagFk: 1,
- tagSelection: {
- name: 'Color'
- }
- }];
- const result = controller.sanitizedTagGroupParam();
-
- expect(result).toEqual(expect.objectContaining(expectedResult));
- });
- });
- });
-});
-
diff --git a/modules/order/front/catalog/locale/es.yml b/modules/order/front/catalog/locale/es.yml
deleted file mode 100644
index fc78755ae..000000000
--- a/modules/order/front/catalog/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Name: Nombre
-Search by item id or name: Buscar por id de artículo o nombre
-OR: O
\ No newline at end of file
diff --git a/modules/order/front/catalog/style.scss b/modules/order/front/catalog/style.scss
deleted file mode 100644
index 9ffe81dfb..000000000
--- a/modules/order/front/catalog/style.scss
+++ /dev/null
@@ -1,54 +0,0 @@
-@import "variables";
-
-vn-order-catalog vn-side-menu div {
- & > .input {
- padding-left: $spacing-md;
- padding-right: $spacing-md;
- border-color: $color-spacer;
- border-bottom: $border-thin;
- }
- .item-category {
- padding: $spacing-sm;
- justify-content: flex-start;
- align-items: flex-start;
- flex-wrap: wrap;
-
- vn-autocomplete[vn-id="category"] {
- display: none
- }
-
- & > vn-one {
- padding: $spacing-sm;
- min-width: 33.33%;
- text-align: center;
- box-sizing: border-box;
-
- & > vn-icon {
- padding: $spacing-sm;
- background-color: $color-font-secondary;
- border-radius: 50%;
- cursor: pointer;
-
- &.active {
- background-color: $color-main;
- color: #FFF
- }
- & > i:before {
- font-size: 2.6rem;
- width: 16px;
- height: 16px;
- }
- }
- }
- }
- .chips {
- display: flex;
- flex-wrap: wrap;
- padding: $spacing-md;
- overflow: hidden;
- max-width: 100%;
- }
- vn-autocomplete[vn-id="type"] .list {
- max-height: 320px
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/create/card.html b/modules/order/front/create/card.html
deleted file mode 100644
index ed6f752d3..000000000
--- a/modules/order/front/create/card.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
- {{id}}: {{name}}
-
-
- {{nickname}}: {{street}}, {{city}}
-
-
-
-
-
diff --git a/modules/order/front/create/card.js b/modules/order/front/create/card.js
deleted file mode 100644
index 315cc8255..000000000
--- a/modules/order/front/create/card.js
+++ /dev/null
@@ -1,114 +0,0 @@
-import ngModule from '../module';
-import Component from 'core/lib/component';
-
-class Controller extends Component {
- constructor($element, $) {
- super($element, $);
- this.order = {};
- this.clientFk = this.$params.clientFk;
- }
-
- $onInit() {
- if (this.$params && this.$params.clientFk)
- this.clientFk = this.$params.clientFk;
- }
-
- set order(value) {
- if (value)
- this._order = value;
- }
-
- get order() {
- return this._order;
- }
-
- set clientFk(value) {
- this.order.clientFk = value;
-
- if (value) {
- let filter = {
- include: {
- relation: 'defaultAddress',
- scope: {
- fields: 'id'
- }
- },
- where: {id: value}
- };
- filter = encodeURIComponent(JSON.stringify(filter));
- let query = `Clients?filter=${filter}`;
- this.$http.get(query).then(res => {
- if (res.data) {
- let client = res.data[0];
- let defaultAddress = client.defaultAddress;
- this.addressFk = defaultAddress.id;
- }
- });
- } else
- this.addressFk = null;
- }
-
- get clientFk() {
- return this.order.clientFk;
- }
-
- set addressFk(value) {
- this.order.addressFk = value;
- this.getAvailableAgencies();
- }
-
- get addressFk() {
- return this.order.addressFk;
- }
-
- set landed(value) {
- this.order.landed = value;
- this.getAvailableAgencies();
- }
-
- get landed() {
- return this.order.landed;
- }
-
- get warehouseFk() {
- return this.order.warehouseFk;
- }
-
- getAvailableAgencies() {
- let order = this.order;
- order.agencyModeFk = null;
-
- let params = {
- addressFk: order.addressFk,
- landed: order.landed
- };
- if (params.landed && params.addressFk) {
- this.$http.get(`Agencies/landsThatDay`, {params})
- .then(res => this._availableAgencies = res.data);
- }
- }
-
- onSubmit() {
- this.createOrder();
- }
-
- createOrder() {
- let params = {
- landed: this.order.landed,
- addressId: this.order.addressFk,
- agencyModeId: this.order.agencyModeFk
- };
- this.$http.post(`Orders/new`, params).then(res => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$state.go('order.card.catalog', {id: res.data});
- });
- }
-}
-
-ngModule.vnComponent('vnOrderCreateCard', {
- template: require('./card.html'),
- controller: Controller,
- bindings: {
- order: ''
- }
-});
diff --git a/modules/order/front/create/card.spec.js b/modules/order/front/create/card.spec.js
deleted file mode 100644
index e37900af6..000000000
--- a/modules/order/front/create/card.spec.js
+++ /dev/null
@@ -1,104 +0,0 @@
-import './card.js';
-
-describe('Order', () => {
- describe('Component vnOrderCreateCard', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$httpBackend_, _vnApp_, $rootScope) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- const $element = angular.element('');
- controller = $componentController('vnOrderCreateCard', {$element, $scope});
- controller.item = {id: 3};
- }));
-
- describe('set order', () => {
- it(`should set order if the value given is not null`, () => {
- controller.order = 1;
-
- expect(controller.order).toEqual(1);
- });
- });
-
- describe('set clientFk', () => {
- it(`should set addressFk to null and clientFk to a value and set addressFk to a value given`, () => {
- let filter = {
- include: {
- relation: 'defaultAddress',
- scope: {
- fields: 'id'
- }
- },
- where: {id: 2}
- };
- filter = encodeURIComponent(JSON.stringify(filter));
- let response = [
- {
- defaultAddress: {id: 1}
- }
- ];
- $httpBackend.whenGET(`Clients?filter=${filter}`).respond(response);
- $httpBackend.expectGET(`Clients?filter=${filter}`);
-
- controller.clientFk = 2;
- $httpBackend.flush();
-
- expect(controller.clientFk).toEqual(2);
- expect(controller.order.addressFk).toBe(1);
- });
- });
-
- describe('set addressFk', () => {
- it(`should set agencyModeFk property to null and addressFk to a value`, () => {
- controller.addressFk = 1101;
-
- expect(controller.addressFk).toEqual(1101);
- expect(controller.order.agencyModeFk).toBe(null);
- });
- });
-
- describe('getAvailableAgencies()', () => {
- it(`should make a query if landed and addressFk exists`, () => {
- controller.order.addressFk = 1101;
- controller.order.landed = 1101;
-
- $httpBackend.whenRoute('GET', 'Agencies/landsThatDay')
- .respond({data: 1});
-
- controller.getAvailableAgencies();
- $httpBackend.flush();
- });
- });
-
- describe('onSubmit()', () => {
- it(`should call createOrder()`, () => {
- jest.spyOn(controller, 'createOrder');
- controller.onSubmit();
-
- expect(controller.createOrder).toHaveBeenCalledWith();
- });
- });
-
- describe('createOrder()', () => {
- it(`should make a query, call vnApp.showSuccess and $state.go if the response is defined`, () => {
- controller.order.landed = 1101;
- controller.order.addressFk = 1101;
- controller.order.agencyModeFk = 1101;
-
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.$state, 'go');
- $httpBackend.expect('POST', 'Orders/new', {landed: 1101, addressId: 1101, agencyModeId: 1101}).respond(200, 1);
- controller.createOrder();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$state.go).toHaveBeenCalledWith('order.card.catalog', {id: 1});
- });
- });
- });
-});
-
diff --git a/modules/order/front/create/index.html b/modules/order/front/create/index.html
deleted file mode 100644
index 86df579a6..000000000
--- a/modules/order/front/create/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/order/front/create/index.js b/modules/order/front/create/index.js
deleted file mode 100644
index 317c4e27e..000000000
--- a/modules/order/front/create/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- async onSubmit() {
- let newOrderID = await this.$.card.createOrder();
- this.$state.go('order.card.summary', {id: newOrderID});
- }
-}
-
-ngModule.vnComponent('vnOrderCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/order/front/create/index.spec.js b/modules/order/front/create/index.spec.js
deleted file mode 100644
index af8c8f974..000000000
--- a/modules/order/front/create/index.spec.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderCreate', () => {
- let $scope;
- let controller;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, $rootScope) => {
- $scope = $rootScope.$new();
- $scope.card = {createOrder: () => {}};
- const $element = angular.element('');
- controller = $componentController('vnOrderCreate', {$element, $scope});
- }));
-
- describe('onSubmit()', () => {
- it(`should call createOrder()`, () => {
- jest.spyOn(controller.$.card, 'createOrder');
- controller.onSubmit();
-
- expect(controller.$.card.createOrder).toHaveBeenCalledWith();
- });
-
- it(`should call go()`, async() => {
- jest.spyOn(controller.$state, 'go');
- await controller.onSubmit();
-
- expect(controller.$state.go).toHaveBeenCalledWith('order.card.summary', {id: undefined});
- });
- });
- });
-});
-
diff --git a/modules/order/front/create/locale/es.yml b/modules/order/front/create/locale/es.yml
deleted file mode 100644
index 49cd64c4a..000000000
--- a/modules/order/front/create/locale/es.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-You can't create an order for a frozen client: No puedes crear una orden a un cliente congelado
-You can't create an order for an inactive client: No puedes crear una orden a un cliente inactivo
-You can't create an order for a client that doesn't has tax data verified:
- No puedes crear una orden a un cliente cuyos datos fiscales no han sido verificados
-You can't create an order for a client that has a debt: No puedes crear una orden a un cliente que tiene deuda
-New order: Nueva orden
\ No newline at end of file
diff --git a/modules/order/front/descriptor/index.html b/modules/order/front/descriptor/index.html
deleted file mode 100644
index 538789027..000000000
--- a/modules/order/front/descriptor/index.html
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
- Delete order
-
-
-
-
-
-
-
-
- {{$ctrl.order.client.salesPersonUser.name}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/order/front/descriptor/index.js b/modules/order/front/descriptor/index.js
deleted file mode 100644
index 5d22dd721..000000000
--- a/modules/order/front/descriptor/index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import ngModule from '../module';
-import Descriptor from 'salix/components/descriptor';
-
-class Controller extends Descriptor {
- get order() {
- return this.entity;
- }
-
- set order(value) {
- this.entity = value;
- }
-
- get ticketFilter() {
- return JSON.stringify({orderFk: this.id});
- }
-
- deleteOrder() {
- return this.$http.delete(`Orders/${this.id}`)
- .then(() => {
- this.$state.go('order.index');
- this.vnApp.showSuccess(this.$t('Order deleted'));
- });
- }
-}
-
-ngModule.vnComponent('vnOrderDescriptor', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- }
-});
diff --git a/modules/order/front/descriptor/index.spec.js b/modules/order/front/descriptor/index.spec.js
deleted file mode 100644
index e6147faee..000000000
--- a/modules/order/front/descriptor/index.spec.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import './index.js';
-
-describe('Order Component vnOrderDescriptor', () => {
- let $httpBackend;
- let controller;
- const order = {id: 1};
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnOrderDescriptor', {$element: null}, {order});
- }));
-
- describe('deleteOrder()', () => {
- it(`should perform a DELETE query`, () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.$state, 'go');
-
- $httpBackend.expectDELETE(`Orders/${order.id}`).respond();
- controller.deleteOrder();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$state.go).toHaveBeenCalledWith('order.index');
- });
- });
-});
-
diff --git a/modules/order/front/descriptor/locale/es.yml b/modules/order/front/descriptor/locale/es.yml
deleted file mode 100644
index 0734d7638..000000000
--- a/modules/order/front/descriptor/locale/es.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-Client: Cliente
-Confirmed: Confirmado
-Not confirmed: Sin confirmar
-State: Estado
-Landed: F. entrega
-Items: Articulos
-Agency: Agencia
-Sales person: Comercial
-Order ticket list: Ticket del pedido
-Delete order: Eliminar pedido
-You are going to delete this order: El pedido se eliminará
-continue anyway?: ¿Continuar de todos modos?
\ No newline at end of file
diff --git a/modules/order/front/index.js b/modules/order/front/index.js
index 4d5b5615e..a7209a0bd 100644
--- a/modules/order/front/index.js
+++ b/modules/order/front/index.js
@@ -1,17 +1,3 @@
export * from './module';
import './main';
-import './index/';
-import './card';
-import './descriptor';
-import './search-panel';
-import './catalog-search-panel';
-import './catalog-view';
-import './catalog';
-import './summary';
-import './line';
-import './prices-popover';
-import './volume';
-import './create';
-import './create/card';
-import './basic-data';
diff --git a/modules/order/front/index/index.html b/modules/order/front/index/index.html
deleted file mode 100644
index c4bed7307..000000000
--- a/modules/order/front/index/index.html
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-
-
- Id
- Sales person
- Client
- Confirmed
- Created
- Landed
- Hour
- Agency
- Total
-
-
-
-
- {{::order.id}}
-
-
- {{::order.name | dashIfEmpty}}
-
-
-
-
- {{::order.clientName}}
-
-
-
-
-
-
- {{::order.created | date: 'dd/MM/yyyy HH:mm'}}
-
-
- {{::order.landed | date:'dd/MM/yyyy'}}
-
-
- {{::(order.hourTheoretical
- ? order.hourTheoretical
- : order.hourEffective) | dashIfEmpty
- }}
- {{::order.agencyName}}
- {{::order.total | currency: 'EUR': 2 | dashIfEmpty}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/order/front/index/index.js b/modules/order/front/index/index.js
deleted file mode 100644
index 750f2e226..000000000
--- a/modules/order/front/index/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- preview(order) {
- this.selectedOrder = order;
- this.$.summary.show();
- }
-
- compareDate(date) {
- let today = Date.vnNew();
- today.setHours(0, 0, 0, 0);
-
- date = new Date(date);
- date.setHours(0, 0, 0, 0);
-
- const timeDifference = today - date;
- if (timeDifference == 0) return 'warning';
- if (timeDifference < 0) return 'success';
- }
-}
-
-ngModule.vnComponent('vnOrderIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/order/front/index/index.spec.js b/modules/order/front/index/index.spec.js
deleted file mode 100644
index abe336478..000000000
--- a/modules/order/front/index/index.spec.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import './index.js';
-describe('Component vnOrderIndex', () => {
- let controller;
- let $window;
- let orders = [{
- id: 1,
- clientFk: 1,
- isConfirmed: false
- }, {
- id: 2,
- clientFk: 1,
- isConfirmed: false
- }, {
- id: 3,
- clientFk: 1,
- isConfirmed: true
- }];
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$window_) => {
- $window = _$window_;
- const $element = angular.element('');
- controller = $componentController('vnOrderIndex', {$element});
- }));
-
- describe('compareDate()', () => {
- it('should return warning when the date is the present', () => {
- let curDate = Date.vnNew();
- let result = controller.compareDate(curDate);
-
- expect(result).toEqual('warning');
- });
-
- it('should return sucess when the date is in the future', () => {
- let futureDate = Date.vnNew();
- futureDate = futureDate.setDate(futureDate.getDate() + 10);
- let result = controller.compareDate(futureDate);
-
- expect(result).toEqual('success');
- });
-
- it('should return undefined when the date is in the past', () => {
- let pastDate = Date.vnNew();
- pastDate = pastDate.setDate(pastDate.getDate() - 10);
- let result = controller.compareDate(pastDate);
-
- expect(result).toEqual(undefined);
- });
- });
-
- describe('preview()', () => {
- it('should show the dialog summary', () => {
- controller.$.summary = {show: () => {}};
- jest.spyOn(controller.$.summary, 'show');
-
- let event = new MouseEvent('click', {
- view: $window,
- bubbles: true,
- cancelable: true
- });
- controller.preview(event, orders[0]);
-
- expect(controller.$.summary.show).toHaveBeenCalledWith();
- });
- });
-});
diff --git a/modules/order/front/line/index.html b/modules/order/front/line/index.html
deleted file mode 100644
index 7be5a00af..000000000
--- a/modules/order/front/line/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
- Id
- Description
- Warehouse
- Shipped
- Quantity
- Price
- Amount
-
-
-
-
-
-
-
-
-
-
- {{::row.itemFk}}
-
-
-
-
- {{::row.item.name}}
-
- {{::row.item.subName}}
-
-
-
-
-
- {{::row.warehouse.name}}
- {{::row.shipped | date: 'dd/MM/yyyy'}}
- {{::row.quantity}}
-
- {{::row.price | currency: 'EUR':2}}
-
-
- {{::row.price * row.quantity | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/order/front/line/index.js b/modules/order/front/line/index.js
deleted file mode 100644
index 94d1fbfbf..000000000
--- a/modules/order/front/line/index.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- $onInit() {
- this.getRows();
- }
-
- set order(value) {
- this._order = value;
- this.getVAT();
- }
-
- get order() {
- return this._order;
- }
-
- get subtotal() {
- return this.order ? this.order.total - this.VAT : 0;
- }
-
- getRows() {
- let filter = {
- where: {orderFk: this.$params.id},
- include: [
- {relation: 'item'},
- {relation: 'warehouse'}
- ]
- };
- this.$http.get(`OrderRows`, {filter})
- .then(res => this.rows = res.data);
- }
-
- getVAT() {
- this.$http.get(`Orders/${this.$params.id}/getVAT`)
- .then(res => this.VAT = res.data);
- }
-
- deleteRow(index) {
- let [row] = this.rows.splice(index, 1);
- let params = {
- rows: [row.id],
- actualOrderId: this.$params.id
- };
- return this.$http.post(`OrderRows/removes`, params)
- .then(() => this.card.reload())
- .then(() => this.vnApp.showSuccess(this.$t('Data saved!')));
- }
-
- save() {
- this.$http.post(`Orders/${this.$params.id}/confirm`).then(() => {
- this.vnApp.showSuccess(this.$t('Order confirmed'));
- this.$state.go(`ticket.index`, {
- q: JSON.stringify({clientFk: this.order.clientFk})
- });
- });
- }
-}
-
-ngModule.vnComponent('vnOrderLine', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- },
- require: {
- card: '^vnOrderCard'
- }
-});
diff --git a/modules/order/front/line/index.spec.js b/modules/order/front/line/index.spec.js
deleted file mode 100644
index ad0e1edbc..000000000
--- a/modules/order/front/line/index.spec.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderLine', () => {
- let $state;
- let controller;
- let $httpBackend;
-
- const vat = 10.5;
- const rows = [
- {
- quantity: 4,
- price: 10.5
- }, {
- quantity: 3,
- price: 2.4
- }
- ];
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$state_, _$httpBackend_) => {
- $state = _$state_;
- $httpBackend = _$httpBackend_;
-
- $state.params.id = 1;
- $httpBackend.whenGET(`OrderRows`).respond(rows);
- $httpBackend.whenRoute('GET', `Orders/:id/getVAT`).respond(200, vat);
-
- controller = $componentController('vnOrderLine', {$element: null});
- }));
-
- describe('getRows()', () => {
- it('should make a query to get the rows of a given order', () => {
- controller.getRows();
- $httpBackend.flush();
-
- expect(controller.rows).toEqual(rows);
- });
- });
-
- describe('getVAT()', () => {
- it('should make a query to get the VAT of a given order', () => {
- controller.getVAT();
- $httpBackend.flush();
-
- expect(controller.VAT).toBe(vat);
- });
- });
-
- describe('deleteRow()', () => {
- it('should remove a row from rows and add save the data if the response is accept', () => {
- controller.getRows();
- $httpBackend.flush();
-
- controller.card = {reload: jasmine.createSpy('reload')};
- $httpBackend.expectPOST(`OrderRows/removes`).respond();
- controller.deleteRow(0);
- $httpBackend.flush();
-
- expect(controller.rows.length).toBe(1);
- expect(controller.card.reload).toHaveBeenCalled();
- });
- });
- });
-});
diff --git a/modules/order/front/line/locale/es.yml b/modules/order/front/line/locale/es.yml
deleted file mode 100644
index d1368d369..000000000
--- a/modules/order/front/line/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Delete row: Eliminar linea
-Order confirmed: Pedido confirmado
-Are you sure you want to delete this row?: ¿Estas seguro de que quieres eliminar esta línea?
\ No newline at end of file
diff --git a/modules/order/front/line/style.scss b/modules/order/front/line/style.scss
deleted file mode 100644
index 4da941a2c..000000000
--- a/modules/order/front/line/style.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-@import "./variables";
-
-vn-order-line {
- vn-table {
- img {
- border-radius: 50%;
- width: 50px;
- height: 50px;
- }
- }
- .header {
- text-align: right;
-
- & > div {
- margin-bottom: $spacing-xs;
- }
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/main/index.js b/modules/order/front/main/index.js
index caf819c9d..61b0201fd 100644
--- a/modules/order/front/main/index.js
+++ b/modules/order/front/main/index.js
@@ -2,8 +2,12 @@ import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
export default class Order extends ModuleMain {
- $postLink() {
- this.filter = {showEmpty: false};
+ constructor($element, $) {
+ super($element, $);
+ }
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`order/`);
}
}
diff --git a/modules/order/front/prices-popover/index.html b/modules/order/front/prices-popover/index.html
deleted file mode 100644
index 2551853e6..000000000
--- a/modules/order/front/prices-popover/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
diff --git a/modules/order/front/prices-popover/index.js b/modules/order/front/prices-popover/index.js
deleted file mode 100644
index aa5570f59..000000000
--- a/modules/order/front/prices-popover/index.js
+++ /dev/null
@@ -1,115 +0,0 @@
-import ngModule from '../module';
-import Popover from 'core/components/popover';
-import './style.scss';
-
-class Controller extends Popover {
- constructor(...args) {
- super(...args);
- this.totalBasquet = 0;
- }
-
- set prices(value) {
- this._prices = value;
- if (value && value[0].grouping)
- this.getTotalQuantity();
- }
-
- get prices() {
- return this._prices;
- }
-
- show(parent, item) {
- this.id = item.id;
- this.item = JSON.parse(JSON.stringify(item));
- this.maxQuantity = this.item.available;
- this.prices = this.item.prices;
-
- super.show(parent);
- }
-
- onClose() {
- this.id = null;
- this.item = {};
- this.tags = {};
- this._prices = {};
- this.totalQuantity = 0;
- super.onClose();
- }
-
- getTotalQuantity() {
- let total = 0;
- for (let price of this.prices) {
- if (!price.quantity) price.quantity = 0;
- total += price.quantity;
- }
-
- this.totalQuantity = total;
- }
-
- addQuantity(price) {
- this.getTotalQuantity();
- const quantity = this.totalQuantity + price.grouping;
- if (quantity <= this.maxQuantity)
- price.quantity += price.grouping;
- }
-
- getGroupings() {
- const filledRows = [];
- for (let priceOption of this.prices) {
- if (priceOption.quantity && priceOption.quantity > 0) {
- const priceMatch = filledRows.find(row => {
- return row.warehouseFk == priceOption.warehouseFk
- && row.price == priceOption.price;
- });
-
- if (!priceMatch)
- filledRows.push(Object.assign({}, priceOption));
- else priceMatch.quantity += priceOption.quantity;
- }
- }
-
- return filledRows;
- }
-
- submit() {
- const filledRows = this.getGroupings();
-
- try {
- const hasInvalidGropings = filledRows.some(row =>
- row.quantity % row.grouping != 0
- );
-
- if (filledRows.length <= 0)
- throw new Error('First you must add some quantity');
-
- if (hasInvalidGropings)
- throw new Error(`The amounts doesn't match with the grouping`);
-
- const params = {
- orderFk: this.order.id,
- items: filledRows
- };
- this.$http.post(`OrderRows/addToOrder`, params)
- .then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.hide();
- if (this.card) this.card.reload();
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- return false;
- }
- return true;
- }
-}
-
-ngModule.vnComponent('vnOrderPricesPopover', {
- slotTemplate: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- },
- require: {
- card: '?^vnOrderCard'
- }
-});
diff --git a/modules/order/front/prices-popover/index.spec.js b/modules/order/front/prices-popover/index.spec.js
deleted file mode 100644
index 734a9e254..000000000
--- a/modules/order/front/prices-popover/index.spec.js
+++ /dev/null
@@ -1,171 +0,0 @@
-import './index.js';
-
-describe('Order', () => {
- describe('Component vnOrderPricesPopover', () => {
- let controller;
- let $httpBackend;
- let orderId = 16;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $scope = $rootScope.$new();
- const $element = angular.element('');
- const $transclude = {
- $$boundTransclude: {
- $$slots: []
- }
- };
- controller = $componentController('vnOrderPricesPopover', {$element, $scope, $transclude});
- controller._prices = [
- {warehouseFk: 1, grouping: 10, quantity: 0},
- {warehouseFk: 1, grouping: 100, quantity: 100}
- ];
- controller.item = {available: 1000};
- controller.maxQuantity = 1000;
- controller.order = {id: orderId};
- }));
-
- describe('prices() setter', () => {
- it('should call to the getTotalQuantity() method', () => {
- controller.getTotalQuantity = jest.fn();
-
- controller.prices = [
- {grouping: 10, quantity: 0},
- {grouping: 100, quantity: 0},
- {grouping: 1000, quantity: 0},
- ];
-
- expect(controller.getTotalQuantity).toHaveBeenCalledWith();
- });
- });
-
- describe('getTotalQuantity()', () => {
- it('should set the totalQuantity property', () => {
- controller.getTotalQuantity();
-
- expect(controller.totalQuantity).toEqual(100);
- });
- });
-
- describe('addQuantity()', () => {
- it('should call to the getTotalQuantity() method and NOT set the quantity property', () => {
- jest.spyOn(controller, 'getTotalQuantity');
-
- controller.prices = [
- {grouping: 10, quantity: 0},
- {grouping: 100, quantity: 0},
- {grouping: 1000, quantity: 1000},
- ];
-
- const oneThousandGrouping = controller.prices[2];
-
- expect(oneThousandGrouping.quantity).toEqual(1000);
-
- controller.addQuantity(oneThousandGrouping);
-
- expect(controller.getTotalQuantity).toHaveBeenCalledWith();
- expect(oneThousandGrouping.quantity).toEqual(1000);
- });
-
- it('should call to the getTotalQuantity() method and then set the quantity property', () => {
- jest.spyOn(controller, 'getTotalQuantity');
-
- const oneHandredGrouping = controller.prices[1];
- controller.addQuantity(oneHandredGrouping);
-
- expect(controller.getTotalQuantity).toHaveBeenCalledWith();
- expect(oneHandredGrouping.quantity).toEqual(200);
- });
- });
-
- describe('getGroupings()', () => {
- it('should return a row with the total filled quantity', () => {
- jest.spyOn(controller, 'getTotalQuantity');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 10},
- {warehouseFk: 1, grouping: 100, quantity: 100},
- {warehouseFk: 1, grouping: 1000, quantity: 1000},
- ];
-
- const rows = controller.getGroupings();
- const firstRow = rows[0];
-
- expect(rows.length).toEqual(1);
- expect(firstRow.quantity).toEqual(1110);
- });
-
- it('should return two filled rows with a quantity', () => {
- jest.spyOn(controller, 'getTotalQuantity');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 10},
- {warehouseFk: 2, grouping: 10, quantity: 10},
- {warehouseFk: 1, grouping: 100, quantity: 0},
- {warehouseFk: 1, grouping: 1000, quantity: 1000},
- ];
-
- const rows = controller.getGroupings();
- const firstRow = rows[0];
- const secondRow = rows[1];
-
- expect(rows.length).toEqual(2);
- expect(firstRow.quantity).toEqual(1010);
- expect(secondRow.quantity).toEqual(10);
- });
- });
-
- describe('submit()', () => {
- it('should throw an error if none of the rows contains a quantity', () => {
- jest.spyOn(controller, 'getTotalQuantity');
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 0},
- {warehouseFk: 1, grouping: 100, quantity: 0}
- ];
-
- controller.submit();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`First you must add some quantity`);
- });
-
- it(`should throw an error if the quantity doesn't match the grouping value`, () => {
- jest.spyOn(controller, 'getTotalQuantity');
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 0},
- {warehouseFk: 1, grouping: 100, quantity: 1101}
- ];
-
- controller.submit();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The amounts doesn't match with the grouping`);
- });
-
- it('should should make an http query and then show a success message', () => {
- jest.spyOn(controller, 'getTotalQuantity');
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- controller.prices = [
- {warehouseFk: 1, grouping: 10, quantity: 0},
- {warehouseFk: 1, grouping: 100, quantity: 100}
- ];
-
- const params = {
- orderFk: orderId,
- items: [{warehouseFk: 1, grouping: 100, quantity: 100}]
- };
-
- $httpBackend.expectPOST('OrderRows/addToOrder', params).respond(200);
- controller.submit();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalledWith(`Data saved!`);
- });
- });
- });
-});
diff --git a/modules/order/front/prices-popover/locale/es.yml b/modules/order/front/prices-popover/locale/es.yml
deleted file mode 100644
index 27eac802d..000000000
--- a/modules/order/front/prices-popover/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Qty.: Cant.
-First you must add some quantity: Primero debes agregar alguna cantidad
-The amounts doesn't match with the grouping: Las cantidades no coinciden con el grouping
\ No newline at end of file
diff --git a/modules/order/front/prices-popover/style.scss b/modules/order/front/prices-popover/style.scss
deleted file mode 100644
index deaeab044..000000000
--- a/modules/order/front/prices-popover/style.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-@import "variables";
-
-.vn-order-prices-popover .content {
- .prices {
- vn-table {
- .price-kg {
- color: $color-font-secondary;
- font-size: .75rem
- }
- .vn-input-number {
- width: 80px;
- }
- }
- .footer {
- text-align: center;
- }
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/routes.json b/modules/order/front/routes.json
index 2eeb60553..25c68300f 100644
--- a/modules/order/front/routes.json
+++ b/modules/order/front/routes.json
@@ -28,19 +28,19 @@
"abstract": true,
"component": "vn-order",
"description": "Orders"
- },
+ },
{
"url": "/index?q",
"state": "order.index",
"component": "vn-order-index",
"description": "Orders"
- },
+ },
{
"url": "/:id",
"state": "order.card",
"abstract": true,
"component": "vn-order-card"
- },
+ },
{
"url": "/summary",
"state": "order.card.summary",
@@ -49,48 +49,6 @@
"params": {
"order": "$ctrl.order"
}
- },
- {
- "url": "/catalog?q&categoryId&typeId&tagGroups",
- "state": "order.card.catalog",
- "component": "vn-order-catalog",
- "description": "Catalog",
- "params": {
- "order": "$ctrl.order"
- }
- },
- {
- "url": "/volume",
- "state": "order.card.volume",
- "component": "vn-order-volume",
- "description": "Volume",
- "params": {
- "order": "$ctrl.order"
- }
- },
- {
- "url": "/line",
- "state": "order.card.line",
- "component": "vn-order-line",
- "description": "Lines",
- "params": {
- "order": "$ctrl.order"
- }
- },
- {
- "url": "/create?clientFk",
- "state": "order.create",
- "component": "vn-order-create",
- "description": "New order"
- },
- {
- "url": "/basic-data",
- "state": "order.card.basicData",
- "component": "vn-order-basic-data",
- "description": "Basic data",
- "params": {
- "order": "$ctrl.order"
- }
}
]
-}
\ No newline at end of file
+}
diff --git a/modules/order/front/search-panel/index.html b/modules/order/front/search-panel/index.html
deleted file mode 100644
index 001fc0bcb..000000000
--- a/modules/order/front/search-panel/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
diff --git a/modules/order/front/search-panel/index.js b/modules/order/front/search-panel/index.js
deleted file mode 100644
index 07be9ca24..000000000
--- a/modules/order/front/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.vnComponent('vnOrderSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/order/front/search-panel/locale/es.yml b/modules/order/front/search-panel/locale/es.yml
deleted file mode 100644
index 9801e151f..000000000
--- a/modules/order/front/search-panel/locale/es.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-Order id: Id cesta
-Client id: Id cliente
-From landed: Desde f. entrega
-To landed: Hasta f. entrega
-To: Hasta
-Agency: Agencia
-Application: Aplicación
-SalesPerson: Comercial
-Order confirmed: Pedido confirmado
-Show empty: Mostrar vacías
-Search orders by ticket id: Buscar pedido por id ticket
\ No newline at end of file
diff --git a/modules/order/front/summary/index.html b/modules/order/front/summary/index.html
deleted file mode 100644
index 218359992..000000000
--- a/modules/order/front/summary/index.html
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
- Basket #{{$ctrl.summary.id}} - {{$ctrl.summary.client.name}}
- ({{$ctrl.summary.client.id}})
-
-
-
-
-
-
-
-
-
-
- {{$ctrl.summary.address.nickname}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Subtotal {{$ctrl.summary.subTotal | currency: 'EUR':2}}
- VAT {{$ctrl.summary.VAT | currency: 'EUR':2}}
- Total {{$ctrl.summary.total | currency: 'EUR':2}}
-
-
-
-
-
-
- Item
- Description
- Quantity
- Price
- Amount
-
-
-
-
-
-
-
-
-
-
-
- {{::row.itemFk}}
-
-
-
-
- {{::row.item.name}}
-
- {{::row.item.subName}}
-
-
-
-
-
- {{::row.quantity}}
- {{::row.price | currency: 'EUR':2}}
- {{::row.quantity * row.price | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/order/front/summary/index.js b/modules/order/front/summary/index.js
deleted file mode 100644
index cc1df8f5d..000000000
--- a/modules/order/front/summary/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import ngModule from '../module';
-import Summary from 'salix/components/summary';
-import './style.scss';
-
-class Controller extends Summary {
- setSummary() {
- this.$http.get(`Orders/${this.order.id}/summary`)
- .then(res => this.summary = res.data);
- }
-
- get formattedAddress() {
- if (!this.summary) return null;
-
- let address = this.summary.address;
- let province = address.province ? `(${address.province.name})` : '';
-
- return `${address.street} - ${address.city} ${province}`;
- }
-
- $onChanges() {
- if (this.order && this.order.id)
- this.setSummary();
- }
-
- save() {
- this.$http.post(`Orders/${this.order.id}/confirm`).then(() => {
- this.vnApp.showSuccess(this.$t('Order confirmed'));
- this.$state.go(`ticket.index`, {
- q: JSON.stringify({clientFk: this.order.clientFk})
- });
- });
- }
-}
-
-ngModule.vnComponent('vnOrderSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- }
-});
diff --git a/modules/order/front/summary/index.spec.js b/modules/order/front/summary/index.spec.js
deleted file mode 100644
index 0c04593e1..000000000
--- a/modules/order/front/summary/index.spec.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import './index';
-
-describe('Order', () => {
- describe('Component vnOrderSummary', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $element = angular.element('');
- controller = $componentController('vnOrderSummary', {$element});
- controller.order = {id: 1};
- }));
-
- describe('getSummary()', () => {
- it('should now perform a GET query and define the summary property', () => {
- let res = {
- id: 1,
- nickname: 'Batman'
- };
- $httpBackend.expectGET(`Orders/1/summary`).respond(res);
- controller.setSummary();
- $httpBackend.flush();
-
- expect(controller.summary).toEqual(res);
- });
- });
-
- describe('formattedAddress()', () => {
- it('should return a full fromatted address with city and province', () => {
- controller.summary = {
- address: {
- province: {
- name: 'Gotham'
- },
- street: '1007 Mountain Drive',
- city: 'Gotham'
- }
- };
-
- expect(controller.formattedAddress).toEqual('1007 Mountain Drive - Gotham (Gotham)');
- });
- });
- });
-});
diff --git a/modules/order/front/summary/style.scss b/modules/order/front/summary/style.scss
deleted file mode 100644
index a2537c58f..000000000
--- a/modules/order/front/summary/style.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-@import "./variables";
-
-vn-order-summary .summary{
- max-width: $width-lg;
-
- & > vn-horizontal > vn-one {
- min-width: 160px;
-
- &.taxes {
- border: $border-thin-light;
- text-align: right;
- padding: 8px;
-
- & > p {
- font-size: 1.2rem;
- margin: 3px;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/modules/order/front/volume/index.html b/modules/order/front/volume/index.html
deleted file mode 100644
index e0053f9ed..000000000
--- a/modules/order/front/volume/index.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
diff --git a/modules/order/front/volume/index.js b/modules/order/front/volume/index.js
deleted file mode 100644
index c1bc5ec7d..000000000
--- a/modules/order/front/volume/index.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.filter = {
- include: {
- relation: 'item'
- },
- order: 'itemFk'
- };
- this.order = {};
- this.ticketVolumes = [];
- }
-
- onDataChange() {
- this.$http.get(`Orders/${this.$params.id}/getVolumes`)
- .then(res => {
- this.$.model.data.forEach(order => {
- res.data.volumes.forEach(volume => {
- if (order.itemFk === volume.itemFk)
- order.volume = volume.volume;
- });
- });
- });
- }
-}
-
-ngModule.vnComponent('vnOrderVolume', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- order: '<'
- }
-});
diff --git a/modules/order/front/volume/index.spec.js b/modules/order/front/volume/index.spec.js
deleted file mode 100644
index 6d7b18865..000000000
--- a/modules/order/front/volume/index.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import './index';
-
-describe('Order', () => {
- describe('Component vnOrderVolume', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('order'));
-
- beforeEach(inject(($componentController, $state, _$httpBackend_, $rootScope) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- $scope.model = {
- data: [
- {itemFk: 1},
- {itemFk: 2}
- ]
- };
-
- $state.params.id = 1;
- const $element = angular.element('');
- controller = $componentController('vnOrderVolume', {$element, $scope});
- }));
-
- it('should join the sale volumes to its respective sale', () => {
- let response = {
- volumes: [
- {itemFk: 1, volume: 0.008},
- {itemFk: 2, volume: 0.003}
- ]
- };
-
- $httpBackend.expectGET(`Orders/1/getVolumes`).respond(response);
- controller.onDataChange();
- $httpBackend.flush();
-
- expect(controller.$.model.data[0].volume).toBe(0.008);
- expect(controller.$.model.data[1].volume).toBe(0.003);
- });
- });
-});
diff --git a/modules/order/front/volume/style.scss b/modules/order/front/volume/style.scss
deleted file mode 100644
index da13eca0d..000000000
--- a/modules/order/front/volume/style.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-
-@import "./variables";
-
-vn-order-volume {
- .header {
- text-align: right;
-
- & > div {
- margin-bottom: $spacing-xs;
- }
- }
-}
diff --git a/modules/route/back/methods/route/driverRouteEmail.js b/modules/route/back/methods/route/driverRouteEmail.js
index 62147db87..bbac2b0e8 100644
--- a/modules/route/back/methods/route/driverRouteEmail.js
+++ b/modules/route/back/methods/route/driverRouteEmail.js
@@ -39,8 +39,6 @@ module.exports = Self => {
const {reportMail} = agencyMode();
let user;
let account;
- let userEmail;
- ctx.args.recipients = reportMail ? reportMail.split(',').map(email => email.trim()) : [];
if (workerFk) {
user = await models.VnUser.findById(workerFk, {
@@ -50,17 +48,10 @@ module.exports = Self => {
account = await models.Account.findById(workerFk);
}
- if (user?.active && account)
- userEmail = user.emailUser().email;
-
- if (userEmail)
- ctx.args.recipients.push(userEmail);
-
- ctx.args.recipients = [...new Set(ctx.args.recipients)];
-
- if (!ctx.args.recipients.length)
- throw new UserError('An email is necessary');
+ if (user?.active && account) ctx.args.recipient = user.emailUser().email;
+ else ctx.args.recipient = reportMail;
+ if (!ctx.args.recipient) throw new UserError('An email is necessary');
return Self.sendTemplate(ctx, 'driver-route');
};
};
diff --git a/modules/travel/front/routes.json b/modules/travel/front/routes.json
index 6ae61bd02..6891a46cf 100644
--- a/modules/travel/front/routes.json
+++ b/modules/travel/front/routes.json
@@ -3,7 +3,7 @@
"name": "Travels",
"icon": "local_airport",
"validations": true,
- "dependencies": ["worker"],
+ "dependencies": ["worker", "entry"],
"menus": {
"main": [
{"state": "travel.index", "icon": "local_airport"},
diff --git a/package.json b/package.json
index 8f9670903..32c1f21d8 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
"@babel/register": "^7.7.7",
"@commitlint/cli": "^19.2.1",
"@commitlint/config-conventional": "^19.1.0",
- "@verdnatura/myt": "^1.6.11",
+ "@verdnatura/myt": "^1.6.12",
"angular-mocks": "^1.7.9",
"babel-jest": "^26.0.1",
"babel-loader": "^8.2.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e2480cf4a..042b91fe0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -143,8 +143,8 @@ devDependencies:
specifier: ^19.1.0
version: 19.1.0
'@verdnatura/myt':
- specifier: ^1.6.11
- version: 1.6.11
+ specifier: ^1.6.12
+ version: 1.6.12
angular-mocks:
specifier: ^1.7.9
version: 1.8.3
@@ -2846,8 +2846,8 @@ packages:
dev: false
optional: true
- /@verdnatura/myt@1.6.11:
- resolution: {integrity: sha512-uqdbSJSznBBzAoRkvBt600nUMEPL1PJ2v73eWMZbaoGUMiZiNAehYjs4gIrObP1cxC85JOx97XoLpG0BzPsaig==}
+ /@verdnatura/myt@1.6.12:
+ resolution: {integrity: sha512-t/SiDuQW9KJkcjhwQ9AkrcoTwghxQ7IyQ56e+88eYdoMi24l6bQGF0wHzMaIPRfQAoR8hqgfMOief4OAqW4Iqw==}
hasBin: true
dependencies:
'@sqltools/formatter': 1.2.5
@@ -6548,7 +6548,7 @@ packages:
resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==}
engines: {node: '>= 4.0'}
os: [darwin]
- deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2
+ deprecated: Upgrade to fsevents v2 to mitigate potential security issues
requiresBuild: true
dependencies:
bindings: 1.5.0
@@ -10485,7 +10485,7 @@ packages:
engines: {node: '>=10'}
requiresBuild: true
dependencies:
- semver: 7.5.4
+ semver: 7.6.0
dev: false
optional: true
@@ -12501,6 +12501,7 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
+ dev: true
/semver@7.6.0:
resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
@@ -12508,7 +12509,6 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
- dev: true
/send@0.18.0(supports-color@6.1.0):
resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
|