diff --git a/back/methods/collection/assign.js b/back/methods/collection/assign.js
index 718cd48c5..f246043b8 100644
--- a/back/methods/collection/assign.js
+++ b/back/methods/collection/assign.js
@@ -20,13 +20,14 @@ module.exports = Self => {
if (typeof options == 'object')
Object.assign(myOptions, options);
+ const randStr = Math.random().toString(36).substring(3);
const result = await Self.rawSql(`
CALL vn.collection_assign(?, @vCollectionFk);
- SELECT @vCollectionFk collectionFk
- `, [userId], myOptions);
+ SELECT @vCollectionFk ?
+ `, [userId, randStr], myOptions);
- // Por si entra en el SELECT FOR UPDATE y retorna un array más
- const collectionFk = result[2]?.[0]?.collectionFk || result[3]?.[0]?.collectionFk;
+ // Por si entra en SELECT FOR UPDATE una o varias veces
+ const collectionFk = result.find(item => item[0]?.[randStr] !== undefined)?.[0]?.[randStr];
if (!collectionFk) throw new UserError('There are not picking tickets');
await Self.rawSql('CALL vn.collection_printSticker(?, NULL)', [collectionFk], myOptions);
diff --git a/back/methods/mrw-config/cancelShipment.js b/back/methods/mrw-config/cancelShipment.js
index 0efd00874..56d206529 100644
--- a/back/methods/mrw-config/cancelShipment.js
+++ b/back/methods/mrw-config/cancelShipment.js
@@ -37,7 +37,6 @@ module.exports = Self => {
});
const xmlString = response.data;
- console.log('xmlString: ', xmlString);
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
const result = xmlDoc.getElementsByTagName('Mensaje')[0].textContent;
diff --git a/back/methods/mrw-config/createShipment.js b/back/methods/mrw-config/createShipment.js
index 3b91f4486..2ebb80774 100644
--- a/back/methods/mrw-config/createShipment.js
+++ b/back/methods/mrw-config/createShipment.js
@@ -47,7 +47,7 @@ module.exports = Self => {
co.code countryCode,
c.fi,
c.name clientName,
- a.mobile,
+ IFNULL(a.mobile, c.mobile) mobile,
DATE_FORMAT(t.shipped, '%d/%m/%Y') created,
t.shipped,
CONCAT( e.ticketFk, LPAD(e.counter, mc.counterWidth, '0')) reference,
diff --git a/back/model-config.json b/back/model-config.json
index a16fe4e8a..13c06ef54 100644
--- a/back/model-config.json
+++ b/back/model-config.json
@@ -28,6 +28,9 @@
"Company": {
"dataSource": "vn"
},
+ "Config": {
+ "dataSource": "vn"
+ },
"Continent": {
"dataSource": "vn"
},
diff --git a/back/models/config.json b/back/models/config.json
new file mode 100644
index 000000000..e5ba1f134
--- /dev/null
+++ b/back/models/config.json
@@ -0,0 +1,22 @@
+{
+ "name": "Config",
+ "base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "config"
+ }
+ },
+ "properties": {
+ "inventoried": {
+ "type": "date"
+ }
+ },
+ "acls": [
+ {
+ "accessType": "READ",
+ "principalType": "ROLE",
+ "principalId": "$authenticated",
+ "permission": "ALLOW"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/db/routines/vn/events/travel_setDelivered.sql b/db/routines/vn/events/travel_setDelivered.sql
new file mode 100644
index 000000000..769ee9d24
--- /dev/null
+++ b/db/routines/vn/events/travel_setDelivered.sql
@@ -0,0 +1,12 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`travel_setDelivered`
+ ON SCHEDULE EVERY 1 DAY
+ STARTS '2024-07-12 00:10:00.000'
+ ON COMPLETION PRESERVE
+ ENABLE
+DO BEGIN
+ UPDATE travel t
+ SET t.isDelivered = TRUE
+ WHERE t.shipped < util.VN_CURDATE();
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/duaInvoiceInBooking.sql b/db/routines/vn/procedures/duaInvoiceInBooking.sql
index 10c0714e5..80166db62 100644
--- a/db/routines/vn/procedures/duaInvoiceInBooking.sql
+++ b/db/routines/vn/procedures/duaInvoiceInBooking.sql
@@ -12,6 +12,7 @@ BEGIN
DECLARE vInvoiceFk INT;
DECLARE vBookEntry INT;
DECLARE vFiscalYear INT;
+ DECLARE vIncorrectInvoiceInDueDay INT;
DECLARE vInvoicesIn CURSOR FOR
SELECT DISTINCT e.invoiceInFk
@@ -24,6 +25,19 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+ SELECT GROUP_CONCAT(ii.id) INTO vIncorrectInvoiceInDueDay
+ FROM invoiceInDueDay iidd
+ JOIN invoiceIn ii ON iidd.invoiceInFk = ii.id
+ JOIN `entry` e ON e.invoiceInFk = ii.id
+ JOIN duaEntry de ON de.entryFk = e.id
+ JOIN invoiceInConfig iic
+ WHERE de.duaFk = vDuaFk
+ AND iidd.dueDated <= util.VN_CURDATE() + INTERVAL iic.dueDateMarginDays DAY;
+
+ IF vIncorrectInvoiceInDueDay THEN
+ CALL util.throw(CONCAT('Incorrect due date, invoice: ', vIncorrectInvoiceInDueDay));
+ END IF;
+
UPDATE invoiceIn ii
JOIN entry e ON e.invoiceInFk = ii.id
JOIN duaEntry de ON de.entryFk = e.id
diff --git a/db/routines/vn/procedures/invoiceInDueDay_calculate.sql b/db/routines/vn/procedures/invoiceInDueDay_calculate.sql
index e51b5f64d..7929bee6f 100644
--- a/db/routines/vn/procedures/invoiceInDueDay_calculate.sql
+++ b/db/routines/vn/procedures/invoiceInDueDay_calculate.sql
@@ -1,5 +1,7 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInDueDay_calculate`(vInvoiceInFk INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInDueDay_calculate`(
+vInvoiceInFk INT
+)
BEGIN
/**
* Calcula los vctos. de una factura recibida
@@ -56,12 +58,13 @@ BEGIN
COUNT(DISTINCT(pdd.detail)) cont,
s.payDay,
ii.issued,
- DATE(ii.created) + INTERVAL 2 DAY created
+ DATE(ii.created) + INTERVAL iic.dueDateMarginDays DAY created
FROM invoiceIn ii
JOIN invoiceInTax iit ON iit.invoiceInFk = ii.id
LEFT JOIN sage.TiposIva ti ON ti.CodigoIva= iit.taxTypeSageFk
JOIN supplier s ON s.id = ii.supplierFk
- JOIN payDemDetail pdd ON pdd.id = s.payDemFk
+ JOIN payDemDetail pdd ON pdd.id = s.payDemFk
+ JOIN invoiceInConfig iic
WHERE ii.id = vInvoiceInFk
GROUP BY ii.id
)sub
diff --git a/db/routines/vn/procedures/itemShelvingSale_addBySale.sql b/db/routines/vn/procedures/itemShelvingSale_addBySale.sql
index 757f880f9..454ea877f 100644
--- a/db/routines/vn/procedures/itemShelvingSale_addBySale.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_addBySale.sql
@@ -98,6 +98,7 @@ proc: BEGIN
itemShelvingFk,
saleFk,
quantity,
+ userFk,
isPicked)
SELECT vItemShelvingFk,
vSaleFk,
diff --git a/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql b/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql
index 30abefec8..9d21e6a6f 100644
--- a/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_setQuantity.sql
@@ -103,7 +103,7 @@ BEGIN
COMMIT;
IF vIsItemShelvingSaleEmpty AND vQuantity <> vReservedQuantity THEN
- INSERT INTO itemShelvingSaleReserve (saleFk, vSectorFk)
+ INSERT INTO itemShelvingSaleReserve (saleFk, sectorFk)
SELECT vSaleFk, vSectorFk;
CALL itemShelvingSale_reallocate(vItemShelvingFk, vItemFk, vSectorFk);
END IF;
diff --git a/db/routines/vn/procedures/item_getBalance.sql b/db/routines/vn/procedures/item_getBalance.sql
index 0de59b478..3a594c81c 100644
--- a/db/routines/vn/procedures/item_getBalance.sql
+++ b/db/routines/vn/procedures/item_getBalance.sql
@@ -240,7 +240,7 @@ BEGIN
NULL reference,
NULL entityType,
NULL entityId,
- 'Inventario calculado',
+ 'Inventario calculado' entityName,
@a invalue,
NULL `out`,
@a balance,
diff --git a/db/routines/vn/procedures/multipleInventory.sql b/db/routines/vn/procedures/multipleInventory.sql
index dc34f040e..99fb92cc8 100644
--- a/db/routines/vn/procedures/multipleInventory.sql
+++ b/db/routines/vn/procedures/multipleInventory.sql
@@ -86,8 +86,8 @@ proc: BEGIN
WHERE calc_id = vCalcFk;
UPDATE tmp.itemInventory it
- JOIN tItemInventoryCalc iic ON iic.itemFk = it.id
- JOIN tItemVisibleCalc ivc ON ivc.item_id = it.id
+ LEFT JOIN tItemInventoryCalc iic ON iic.itemFk = it.id
+ LEFT JOIN tItemVisibleCalc ivc ON ivc.item_id = it.id
SET it.inventory = iic.quantity,
it.visible = ivc.visible,
it.avalaible = iic.quantity,
@@ -139,31 +139,35 @@ proc: BEGIN
CALL item_getAtp(vDate);
CALL travel_upcomingArrivals(vWarehouseFk, vDate);
- UPDATE tmp.itemInventory ai
- JOIN (
- SELECT it.itemFk,
- SUM(it.quantity) quantity,
- im.quantity minQuantity
- FROM tmp.itemCalc it
- JOIN tmp.itemAtp im ON im.itemFk = it.itemFk
- JOIN item i ON i.id = it.itemFk
- LEFT JOIN origin o ON o.id = i.originFk
- LEFT JOIN tmp.itemTravel t ON t.wh = o.warehouseFk
- WHERE it.dated < IF(vMaxDays < 0 AND t.landing IS NOT NULL,
- t.landing,
- vDateToTomorrow)
- GROUP BY it.itemFk
- ) sub ON sub.itemFk = ai.id
- SET ai.avalaible = IF(sub.minQuantity > 0,
- ai.avalaible,
- ai.avalaible + sub.minQuantity),
- ai.sd = ai.inventory + sub.quantity;
+ CREATE OR REPLACE TEMPORARY TABLE tItemAvailableCalc
+ (PRIMARY KEY (itemFk))
+ ENGINE = MEMORY
+ SELECT it.itemFk,
+ SUM(it.quantity) quantity,
+ im.quantity minQuantity
+ FROM tmp.itemCalc it
+ JOIN tmp.itemAtp im ON im.itemFk = it.itemFk
+ JOIN item i ON i.id = it.itemFk
+ LEFT JOIN origin o ON o.id = i.originFk
+ LEFT JOIN tmp.itemTravel t ON t.wh = o.warehouseFk
+ WHERE it.dated < IF(vMaxDays < 0 AND t.landing IS NOT NULL,
+ t.landing,
+ vDateToTomorrow)
+ GROUP BY it.itemFk;
+
+ UPDATE tmp.itemInventory it
+ JOIN tItemAvailableCalc iac ON iac.itemFk = it.id
+ SET it.avalaible = IF(iac.minQuantity > 0,
+ it.avalaible,
+ it.avalaible + iac.minQuantity),
+ it.sd = it.inventory + iac.quantity;
DROP TEMPORARY TABLE
tmp.itemTravel,
tmp.itemCalc,
tmp.itemAtp,
tItemInventoryCalc,
- tItemVisibleCalc;
+ tItemVisibleCalc,
+ tItemAvailableCalc;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/productionControl.sql b/db/routines/vn/procedures/productionControl.sql
index dad46393d..af6d929d7 100644
--- a/db/routines/vn/procedures/productionControl.sql
+++ b/db/routines/vn/procedures/productionControl.sql
@@ -174,27 +174,30 @@ proc: BEGIN
WHERE NOT `lines`;
-- Lineas por linea de encajado
+ CREATE OR REPLACE TEMPORARY TABLE tItemPackingType
+ (PRIMARY KEY(ticketFk))
+ ENGINE = MEMORY
+ SELECT ticketFk,
+ SUM(sub.H) H,
+ SUM(sub.V) V,
+ SUM(sub.N) N
+ FROM (
+ SELECT t.ticketFk,
+ SUM(i.itemPackingTypeFk = 'H') H,
+ SUM(i.itemPackingTypeFk = 'V') V,
+ SUM(i.itemPackingTypeFk IS NULL) N
+ FROM tmp.productionTicket t
+ JOIN sale s ON s.ticketFk = t.ticketFk
+ JOIN item i ON i.id = s.itemFk
+ GROUP BY t.ticketFk, i.itemPackingTypeFk
+ ) sub
+ GROUP BY ticketFk;
+
UPDATE tmp.productionBuffer pb
- JOIN (
- SELECT ticketFk,
- SUM(sub.H) H,
- SUM(sub.V) V,
- SUM(sub.N) N
- FROM (
- SELECT t.ticketFk,
- SUM(i.itemPackingTypeFk = 'H') H,
- SUM(i.itemPackingTypeFk = 'V') V,
- SUM(i.itemPackingTypeFk IS NULL) N
- FROM tmp.productionTicket t
- JOIN sale s ON s.ticketFk = t.ticketFk
- JOIN item i ON i.id = s.itemFk
- GROUP BY t.ticketFk, i.itemPackingTypeFk
- ) sub
- GROUP BY ticketFk
- ) sub2 ON sub2.ticketFk = pb.ticketFk
- SET pb.H = sub2.H,
- pb.V = sub2.V,
- pb.N = sub2.N;
+ JOIN tItemPackingType ti ON ti.ticketFk = pb.ticketFk
+ SET pb.H = ti.H,
+ pb.V = ti.V,
+ pb.N = ti.N;
-- Colecciones segun tipo de encajado
UPDATE tmp.productionBuffer pb
@@ -273,6 +276,7 @@ proc: BEGIN
tmp.risk,
tmp.ticket_problems,
tmp.ticketWithPrevia,
- tItemShelvingStock;
+ tItemShelvingStock,
+ tItemPackingType;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/saleGroup_setParking.sql b/db/routines/vn/procedures/saleGroup_setParking.sql
index 551ca6386..fffe5e154 100644
--- a/db/routines/vn/procedures/saleGroup_setParking.sql
+++ b/db/routines/vn/procedures/saleGroup_setParking.sql
@@ -10,15 +10,10 @@ BEGIN
* @param vSaleGroupFk id de la preparación previa
* @param vParkingFk id del parking
*/
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- RESIGNAL;
- END;
-
UPDATE saleGroup sg
SET sg.parkingFk = vParkingFk
- WHERE sg.id = vSaleGroupFk
- AND sg.created >= util.VN_CURDATE() - INTERVAL 1 WEEK;
+ WHERE sg.id = vSaleGroupFk
+ AND sg.created >= util.VN_CURDATE() - INTERVAL 1 WEEK;
CALL ticket_setNextState(ticket_get(vSaleGroupFk));
END$$
diff --git a/db/routines/vn/procedures/setParking.sql b/db/routines/vn/procedures/setParking.sql
index 1aa4f920a..b3edf350d 100644
--- a/db/routines/vn/procedures/setParking.sql
+++ b/db/routines/vn/procedures/setParking.sql
@@ -13,12 +13,6 @@ BEGIN
DECLARE vParkingFk INT;
DECLARE vLastWeek DATE;
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- ROLLBACK;
- RESIGNAL;
- END;
-
SET vParkingCode = REPLACE(vParkingCode, ' ', '');
SELECT id INTO vParkingFk
@@ -29,8 +23,6 @@ BEGIN
CALL util.throw('parkingNotExist');
END IF;
- START TRANSACTION;
-
SET vLastWeek = util.VN_CURDATE() - INTERVAL 1 WEEK;
-- Comprobamos si es una prep. previa, ticket, colección o shelving
@@ -45,7 +37,5 @@ BEGIN
ELSE
CALL util.throw('paramNotExist');
END IF;
-
- COMMIT;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/shelving_setParking.sql b/db/routines/vn/procedures/shelving_setParking.sql
index 0ff07ef5d..3e8717197 100644
--- a/db/routines/vn/procedures/shelving_setParking.sql
+++ b/db/routines/vn/procedures/shelving_setParking.sql
@@ -1,20 +1,20 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`shelving_setParking`(IN `vShelvingCode` VARCHAR(8), IN `vParkingFk` INT)
-proc: BEGIN
+BEGIN
/**
* Aparca una matrícula en un parking
*
* @param vShelvingCode code de la matrícula
* @param vParkingFk id del parking
*/
- INSERT INTO vn.shelvingLog (originFk, userFk, action , description,changedModel,changedModelId)
+ INSERT INTO shelvingLog (originFk, userFk, action , description,changedModel,changedModelId)
SELECT s.id, account.myUser_getId(), 'update', CONCAT("Cambio parking ",vShelvingCode," de ", p.code," a ", pNew.code),'Shelving',s.id
FROM parking p
JOIN shelving s ON s.parkingFk = p.id
JOIN parking pNew ON pNew.id = vParkingFk
WHERE s.code = vShelvingCode COLLATE utf8_unicode_ci;
- UPDATE vn.shelving
+ UPDATE shelving
SET parkingFk = vParkingFk,
parked = util.VN_NOW(),
isPrinted = TRUE
diff --git a/db/routines/vn/procedures/ticket_setParking.sql b/db/routines/vn/procedures/ticket_setParking.sql
index 7935e0d60..bd2a5370a 100644
--- a/db/routines/vn/procedures/ticket_setParking.sql
+++ b/db/routines/vn/procedures/ticket_setParking.sql
@@ -21,11 +21,6 @@ BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- DECLARE EXIT HANDLER FOR SQLEXCEPTION
- BEGIN
- RESIGNAL;
- END;
-
INSERT INTO vn.ticketParking(ticketFk, parkingFk)
SELECT IFNULL(tc2.ticketFk, t.id), vParkingFk
FROM ticket t
diff --git a/db/routines/vn/procedures/ticket_splitItemPackingType.sql b/db/routines/vn/procedures/ticket_splitItemPackingType.sql
index c2ec50fd9..5ae9fb9bc 100644
--- a/db/routines/vn/procedures/ticket_splitItemPackingType.sql
+++ b/db/routines/vn/procedures/ticket_splitItemPackingType.sql
@@ -1,7 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_splitItemPackingType`(
vSelf INT,
- vItemPackingTypeFk VARCHAR(1)
+ vOriginalItemPackingTypeFk VARCHAR(1)
)
BEGIN
/**
@@ -9,7 +9,7 @@ BEGIN
* Respeta el id inicial para el tipo propuesto.
*
* @param vSelf Id ticket
- * @param vItemPackingTypeFk Tipo para el que se reserva el número de ticket original
+ * @param vOriginalItemPackingTypeFk Tipo para el que se reserva el número de ticket original
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
*/
DECLARE vItemPackingTypeFk VARCHAR(1) DEFAULT 'H';
@@ -23,7 +23,7 @@ BEGIN
SELECT itemPackingTypeFk
FROM tSaleGroup
WHERE itemPackingTypeFk IS NOT NULL
- ORDER BY (itemPackingTypeFk = vItemPackingTypeFk) DESC;
+ ORDER BY (itemPackingTypeFk = vOriginalItemPackingTypeFk) DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
diff --git a/db/versions/11155-purpleMoss/00-firstScript.sql b/db/versions/11155-purpleMoss/00-firstScript.sql
new file mode 100644
index 000000000..fec63b193
--- /dev/null
+++ b/db/versions/11155-purpleMoss/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.invoiceInConfig
+ ADD dueDateMarginDays INT UNSIGNED DEFAULT 2 NULL;
diff --git a/db/versions/11168-redFern/00-firstScript.sql b/db/versions/11168-redFern/00-firstScript.sql
new file mode 100644
index 000000000..f91780e37
--- /dev/null
+++ b/db/versions/11168-redFern/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.calendar
+ ADD CONSTRAINT calendar_user_FK FOREIGN KEY (editorFk) REFERENCES account.`user`(id);
diff --git a/db/versions/11169-azureCyca/00-firstScript.sql b/db/versions/11169-azureCyca/00-firstScript.sql
new file mode 100644
index 000000000..49adcfc05
--- /dev/null
+++ b/db/versions/11169-azureCyca/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE IF EXISTS vn.itemShelving
+MODIFY COLUMN IF EXISTS isSplit tinyint(1) DEFAULT 0 NOT NULL COMMENT 'Este valor cambia al splitar un carro que se ha quedado en holanda';
diff --git a/e2e/paths/08-route/01_summary.spec.js b/e2e/paths/08-route/01_summary.spec.js
deleted file mode 100644
index 44f66ba2d..000000000
--- a/e2e/paths/08-route/01_summary.spec.js
+++ /dev/null
@@ -1,62 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Route summary path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'route');
- await page.waitToClick(selectors.routeIndex.previewButton);
- await page.waitToClick(selectors.routeSummary.goToRouteSummaryButton);
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the first route summary section', async() => {
- await page.waitForState('route.card.summary');
- });
-
- it(`should display details from the route on the header`, async() => {
- await page.waitForTextInElement(selectors.routeSummary.header, 'first route');
- const result = await page.waitToGetProperty(selectors.routeSummary.header, 'innerText');
-
- expect(result).toContain('first route');
- });
-
- it('should display some route details like the cost', async() => {
- const result = await page.waitToGetProperty(selectors.routeSummary.cost, 'innerText');
-
- expect(result).toContain('€10.00');
- });
-
- it('should click on the first ticket ID making the descriptor popover visible', async() => {
- await page.waitForState('route.card.summary');
- await page.waitForTimeout(250);
- await page.waitToClick(selectors.routeSummary.firstTicketID);
- await page.waitForSelector(selectors.routeSummary.firstTicketDescriptor);
- const visible = await page.isVisible(selectors.routeSummary.firstTicketDescriptor);
-
- expect(visible).toBe(true);
- });
-
- it('should close the ticket descriptor', async() => {
- await page.closePopup();
- });
-
- it('should click on the first alias making the client descriptor popover visible', async() => {
- await page.waitToClick(selectors.routeSummary.firstAlias);
- await page.waitForSelector(selectors.routeSummary.firstClientDescriptor);
- const visible = await page.isVisible(selectors.routeSummary.firstClientDescriptor);
-
- expect(visible).toBe(true);
- });
-
- it('should close the client descriptor', async() => {
- await page.closePopup();
- });
-});
diff --git a/e2e/paths/08-route/02_basic_data.spec.js b/e2e/paths/08-route/02_basic_data.spec.js
deleted file mode 100644
index 7ab7dda42..000000000
--- a/e2e/paths/08-route/02_basic_data.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Route basic Data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('delivery', 'route');
- await page.accessToSearchResult('1');
- await page.accessToSection('route.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should edit the route basic data and confirm the route was edited', async() => {
- const nextMonth = Date.vnNew();
- nextMonth.setMonth(nextMonth.getMonth() + 1);
- nextMonth.setUTCHours(0, 0, 0, 0);
-
- const form = 'vn-route-basic-data form';
- const values = {
- worker: 'adminBossNick',
- vehicle: '1111-IMK',
- created: nextMonth,
- kmStart: 1,
- kmEnd: 2,
- started: '08:00',
- finished: '12:30',
- };
-
- const message = await page.sendForm(form, values);
- await page.reloadSection('route.card.basicData');
- const formValues = await page.fetchForm(form, Object.keys(values));
-
- expect(message.isSuccess).toBeTrue();
- expect(formValues).toEqual(values);
- });
-});
diff --git a/e2e/paths/08-route/03_create_and_clone.spec.js b/e2e/paths/08-route/03_create_and_clone.spec.js
deleted file mode 100644
index 31c0cfc18..000000000
--- a/e2e/paths/08-route/03_create_and_clone.spec.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Route create path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'route');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- describe('as employee', () => {
- it('should click on the add new route button and open the creation form', async() => {
- await page.waitToClick(selectors.routeIndex.addNewRouteButton);
- await page.waitForState('route.create');
- });
-
- it(`should attempt to create a new route but fail since employee has no access rights`, async() => {
- await page.write(selectors.createRouteView.description, 'faster faster!!');
- await page.waitToClick(selectors.createRouteView.submitButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Access Denied');
- });
- });
-
- describe('as delivery', () => {
- beforeAll(async() => {
- await page.login('delivery');
- await page.selectModule('route');
- });
-
- it('should again click on the add new route button and open the creation form', async() => {
- await page.waitToClick(selectors.routeIndex.addNewRouteButton);
- await page.waitForState('route.create');
- });
-
- it(`should create a new route`, async() => {
- await page.autocompleteSearch(selectors.createRouteView.worker, 'teamManagerNick');
- await page.pickDate(selectors.createRouteView.createdDatePicker);
- await page.autocompleteSearch(selectors.createRouteView.vehicleAuto, '4444-IMK');
- await page.autocompleteSearch(selectors.createRouteView.agency, 'Teleportation device');
- await page.write(selectors.createRouteView.description, 'faster faster!!');
- await page.waitToClick(selectors.createRouteView.submitButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should confirm the redirection to the created route summary`, async() => {
- await page.waitForState('route.card.summary');
- });
-
- it(`should navigate back to the route index`, async() => {
- await page.waitToClick(selectors.globalItems.returnToModuleIndexButton);
- await page.waitForState('route.index');
- });
-
- let count;
- it(`should count the amount of routes before clonation`, async() => {
- await page.waitForFunction(selector => {
- return document.querySelectorAll(selector).length > 6;
- }, {}, selectors.routeIndex.anyResult);
- count = await page.countElement(selectors.routeIndex.anyResult);
-
- expect(count).toBeGreaterThanOrEqual(7);
- });
-
- it(`should clone the first route`, async() => {
- await page.waitToClick(selectors.routeIndex.firstRouteCheckbox);
- await page.waitToClick(selectors.routeIndex.cloneButton);
- await page.waitToClick(selectors.routeIndex.submitClonationButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should reload the section and count the amount of routes after clonation`, async() => {
- await page.waitForNumberOfElements(selectors.routeIndex.anyResult, count + 1);
- const result = await page.countElement(selectors.routeIndex.anyResult);
-
- expect(result).toEqual(count + 1);
- });
- });
-});
diff --git a/e2e/paths/08-route/04_tickets.spec.js b/e2e/paths/08-route/04_tickets.spec.js
deleted file mode 100644
index c890162a1..000000000
--- a/e2e/paths/08-route/04_tickets.spec.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Route tickets path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('delivery', 'route');
- await page.accessToSearchResult('2');
- await page.accessToSection('route.card.tickets');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should modify the first ticket priority', async() => {
- await page.writeOnEditableTD(selectors.routeTickets.firstTicketPriority, '9');
- await page.keyboard.press('Enter');
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should confirm the buscaman button is disabled', async() => {
- await page.waitForSelector(`${selectors.routeTickets.buscamanButton}.disabled`);
- });
-
- it('should check the first ticket checkbox and confirm the buscamanButton button is no longer disabled', async() => {
- await page.waitForSelector(`${selectors.routeTickets.buscamanButton}.disabled`, {visible: false});
- });
-
- it('should check the route volume on the descriptor', async() => {
- const result = await page.waitToGetProperty(selectors.routeDescriptor.volume, 'innerText');
-
- expect(result).toEqual('0.2 / 50 m³');
- });
-
- it('should count how many tickets are in route', async() => {
- const result = await page.countElement(selectors.routeTickets.anyTicket);
-
- expect(result).toEqual(1);
- });
-
- it('should delete the first ticket in route', async() => {
- await page.waitToClick(selectors.routeTickets.firstTicketDeleteButton);
- await page.waitToClick(selectors.routeTickets.confirmButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Ticket removed from route');
- });
-
- it('should now count how many tickets are in route to find one less', async() => {
- await page.waitForNumberOfElements(selectors.routeTickets.anyTicket, 0);
- });
-});
diff --git a/front/salix/routes.js b/front/salix/routes.js
index be210b749..2c6f1b848 100644
--- a/front/salix/routes.js
+++ b/front/salix/routes.js
@@ -4,7 +4,17 @@ import getMainRoute from 'core/lib/get-main-route';
config.$inject = ['$stateProvider', '$urlRouterProvider'];
function config($stateProvider, $urlRouterProvider) {
$urlRouterProvider
- .otherwise('/');
+ .otherwise(async($injector, {$location}) => {
+ const prefix = '#!';
+ if (!$location.$$path) return window.location.href = `/${prefix}/`;
+
+ const url = $location.$$absUrl
+ .replace('5000', '9000')
+ .replace('salix', 'lilium')
+ .replace(prefix, '#')
+ .replace('client', 'customer');
+ window.location.href = url;
+ });
$stateProvider
.state('layout', {
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index e2be5d013..acc3d69f6 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -367,5 +367,6 @@
"It has been invoiced but the PDF of refund not be generated": "Se ha facturado pero no se ha podido generar el PDF del abono",
"Payment method is required": "El método de pago es obligatorio",
"Cannot send mail": "Não é possível enviar o email",
- "CONSTRAINT `supplierAccountTooShort` failed for `vn`.`supplier`": "La cuenta debe tener exactamente 10 dígitos"
-}
+ "CONSTRAINT `supplierAccountTooShort` failed for `vn`.`supplier`": "La cuenta debe tener exactamente 10 dígitos",
+ "The sale not exists in the item shelving": "La venta no existe en la estantería del artículo"
+}
\ No newline at end of file
diff --git a/modules/client/back/methods/client/hasCustomerRole.js b/modules/client/back/methods/client/hasCustomerRole.js
index e790d6e3a..08e90077e 100644
--- a/modules/client/back/methods/client/hasCustomerRole.js
+++ b/modules/client/back/methods/client/hasCustomerRole.js
@@ -29,7 +29,7 @@ module.exports = Self => {
SELECT COUNT(*) > 0 isCustomer
FROM salix.Account A
JOIN salix.Role r ON r.id = A.roleFK
- WHERE r.name = 'customer'
+ WHERE r.name IN ('customer', 'supplier')
AND A.id IN (?)`;
const [result] = await Self.rawSql(query, [id], myOptions);
const {isCustomer} = result;
diff --git a/modules/entry/back/methods/entry/filter.js b/modules/entry/back/methods/entry/filter.js
index 5963e9c72..dcb1e3158 100644
--- a/modules/entry/back/methods/entry/filter.js
+++ b/modules/entry/back/methods/entry/filter.js
@@ -95,6 +95,16 @@ module.exports = Self => {
type: 'date',
description: `The to date filter`
},
+ {
+ arg: 'fromShipped',
+ type: 'date',
+ description: `The from shipped date filter`
+ },
+ {
+ arg: 'toShipped',
+ type: 'date',
+ description: `The to shipped date filter`
+ },
{
arg: 'days',
type: 'number',
@@ -133,8 +143,12 @@ module.exports = Self => {
return {'e.created': {gte: value}};
case 'from':
return {'t.landed': {gte: value}};
+ case 'fromShipped':
+ return {'t.shipped': {gte: value}};
case 'to':
return {'t.landed': {lte: value}};
+ case 'toShipped':
+ return {'t.shipped': {lte: value}};
case 'id':
case 'isBooked':
case 'isConfirmed':
diff --git a/modules/invoiceIn/back/methods/invoice-in/filter.js b/modules/invoiceIn/back/methods/invoice-in/filter.js
index 0d3b5f14a..d72d7fc63 100644
--- a/modules/invoiceIn/back/methods/invoice-in/filter.js
+++ b/modules/invoiceIn/back/methods/invoice-in/filter.js
@@ -82,7 +82,15 @@ module.exports = Self => {
{
arg: 'correctedFk',
type: 'number',
- description: 'The corrected invoice',
+ description: 'The rectified invoice',
+ },
+ {
+ arg: 'correctingFk',
+ type: 'Boolean',
+ },
+ {
+ arg: 'supplierActivityFk',
+ type: 'string',
}
],
returns: {
@@ -111,6 +119,7 @@ module.exports = Self => {
}
let correctings;
+ let correcteds;
if (args.correctedFk) {
correctings = await models.InvoiceInCorrection.find({
fields: ['correctingFk'],
@@ -118,6 +127,9 @@ module.exports = Self => {
});
}
+ if (args.correctingFk || args.correctingFk === false)
+ correcteds = await models.InvoiceInCorrection.find();
+
const where = buildFilter(ctx.args, (param, value) => {
switch (param) {
case 'search':
@@ -141,8 +153,14 @@ module.exports = Self => {
return {[`ii.${param}`]: value};
case 'awbCode':
return {'sub.code': value};
+ case 'correctingFk':
+ return args.correctingFk
+ ? {'ii.id': {inq: correcteds.map(x => x.correctingFk)}}
+ : {'ii.id': {nin: correcteds.map(x => x.correctingFk)}};
case 'correctedFk':
return {'ii.id': {inq: correctings.map(x => x.correctingFk)}};
+ case 'supplierActivityFk':
+ return {'s.supplierActivityFk': value};
}
});
diff --git a/modules/item/back/methods/item-shelving/updateFromSale.js b/modules/item/back/methods/item-shelving/updateFromSale.js
index 2b9f49cae..167509074 100644
--- a/modules/item/back/methods/item-shelving/updateFromSale.js
+++ b/modules/item/back/methods/item-shelving/updateFromSale.js
@@ -1,3 +1,4 @@
+const UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.remoteMethod('updateFromSale', {
description: 'Update the visible items',
@@ -32,6 +33,9 @@ module.exports = Self => {
include: {relation: 'itemShelving'}
}, myOptions);
+ if (!itemShelvingSale?.itemShelving())
+ throw new UserError('The sale not exists in the item shelving');
+
const itemShelving = itemShelvingSale.itemShelving();
const quantity = itemShelving.visible + itemShelvingSale.quantity;
diff --git a/modules/route/front/agency-term-search-panel/index.html b/modules/route/front/agency-term-search-panel/index.html
deleted file mode 100644
index fdd6b649b..000000000
--- a/modules/route/front/agency-term-search-panel/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
diff --git a/modules/route/front/agency-term-search-panel/index.js b/modules/route/front/agency-term-search-panel/index.js
deleted file mode 100644
index d5d8ea7a6..000000000
--- a/modules/route/front/agency-term-search-panel/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-class Controller extends SearchPanel {
- get filter() {
- return this.$.filter;
- }
-
- set filter(value = {}) {
- this.$.filter = value;
- }
-}
-
-ngModule.vnComponent('vnAgencyTermSearchPanel', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/agency-term-search-panel/locale/es.yml b/modules/route/front/agency-term-search-panel/locale/es.yml
deleted file mode 100644
index 74336a03b..000000000
--- a/modules/route/front/agency-term-search-panel/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-Search by invoiceIn id or autonomous name: Buscar por id de recibida o por nombre de autónomo
-Search autonomous: Buscar autónomos
\ No newline at end of file
diff --git a/modules/route/front/agency-term/createInvoiceIn/index.html b/modules/route/front/agency-term/createInvoiceIn/index.html
deleted file mode 100644
index 8f270378f..000000000
--- a/modules/route/front/agency-term/createInvoiceIn/index.html
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/agency-term/createInvoiceIn/index.js b/modules/route/front/agency-term/createInvoiceIn/index.js
deleted file mode 100644
index 0198ab80f..000000000
--- a/modules/route/front/agency-term/createInvoiceIn/index.js
+++ /dev/null
@@ -1,120 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-import UserError from 'core/lib/user-error';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.dms = {
- files: [],
- hasFile: false,
- hasFileAttached: false
- };
- }
-
- get route() {
- return this._route;
- }
-
- set route(value) {
- this._route = value;
-
- this.setDefaultParams();
- this.getAllowedContentTypes();
- }
-
- $onChanges() {
- if (this.$params && this.$params.q)
- this.params = JSON.parse(this.$params.q);
- }
-
- getAllowedContentTypes() {
- this.$http.get('DmsContainers/allowedContentTypes').then(res => {
- const contentTypes = res.data.join(', ');
- this.allowedContentTypes = contentTypes;
- });
- }
-
- get contentTypesInfo() {
- return this.$t('ContentTypesInfo', {
- allowedContentTypes: this.allowedContentTypes
- });
- }
-
- setDefaultParams() {
- const params = {filter: {
- where: {code: 'invoiceIn'}
- }};
- this.$http.get('DmsTypes/findOne', {params}).then(res => {
- const dmsType = res.data && res.data;
- const companyId = this.vnConfig.companyFk;
- const warehouseId = this.vnConfig.warehouseFk;
- const defaultParams = {
- warehouseId: warehouseId,
- companyId: companyId,
- dmsTypeId: dmsType.id,
- description: this.params.supplierName
- };
-
- this.dms = Object.assign(this.dms, defaultParams);
- });
- }
-
- onSubmit() {
- if (this.dms.files.length > 1) throw new UserError('You cannot attach more than one document');
- const query = `dms/uploadFile`;
- const options = {
- method: 'POST',
- url: query,
- params: this.dms,
- headers: {
- 'Content-Type': undefined
- },
- transformRequest: files => {
- const formData = new FormData();
- formData.append(files[0].name, files[0]);
- return formData;
- },
- data: this.dms.files
- };
- this.$http(options).then(res => {
- if (res) {
- const addedDms = res.data;
- this.$.watcher.updateOriginalData();
-
- const params = {
- rows: this.params.rows,
- dms: addedDms
- };
-
- this.$http.post('AgencyTerms/createInvoiceIn', params)
- .then(() => {
- this.$state.go('route.agencyTerm.index');
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
- });
- }
-
- onFileChange(files) {
- let hasFileAttached = false;
-
- if (files.length > 0)
- hasFileAttached = true;
-
- this.$.$applyAsync(() => {
- this.dms.hasFileAttached = hasFileAttached;
- });
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnAgencyTermCreateInvoiceIn', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- route: '<'
- }
-});
diff --git a/modules/route/front/agency-term/createInvoiceIn/index.spec.js b/modules/route/front/agency-term/createInvoiceIn/index.spec.js
deleted file mode 100644
index d6d9883a7..000000000
--- a/modules/route/front/agency-term/createInvoiceIn/index.spec.js
+++ /dev/null
@@ -1,107 +0,0 @@
-import './index';
-import watcher from 'core/mocks/watcher.js';
-
-describe('AgencyTerm', () => {
- describe('Component vnAgencyTermCreateInvoiceIn', () => {
- let controller;
- let $scope;
- let $httpBackend;
- let $httpParamSerializer;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => {
- $scope = $rootScope.$new();
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- const $element = angular.element(' ');
- controller = $componentController('vnAgencyTermCreateInvoiceIn', {$element});
- controller._route = {
- id: 1
- };
- }));
-
- describe('$onChanges()', () => {
- it('should update the params data when $params.q is defined', () => {
- controller.$params = {q: '{"supplierName": "Plants SL","rows": null}'};
-
- const params = {q: '{"supplierName": "Plants SL", "rows": null}'};
- const json = JSON.parse(params.q);
-
- controller.$onChanges();
-
- expect(controller.params).toEqual(json);
- });
- });
-
- describe('route() setter', () => {
- it('should set the ticket data and then call setDefaultParams() and getAllowedContentTypes()', () => {
- jest.spyOn(controller, 'setDefaultParams');
- jest.spyOn(controller, 'getAllowedContentTypes');
- controller.route = {
- id: 1
- };
-
- expect(controller.route).toBeDefined();
- expect(controller.setDefaultParams).toHaveBeenCalledWith();
- expect(controller.getAllowedContentTypes).toHaveBeenCalledWith();
- });
- });
-
- describe('getAllowedContentTypes()', () => {
- it('should make an HTTP GET request to get the allowed content types', () => {
- const expectedResponse = ['image/png', 'image/jpg'];
- $httpBackend.expect('GET', `DmsContainers/allowedContentTypes`).respond(expectedResponse);
- controller.getAllowedContentTypes();
- $httpBackend.flush();
-
- expect(controller.allowedContentTypes).toBeDefined();
- expect(controller.allowedContentTypes).toEqual('image/png, image/jpg');
- });
- });
-
- describe('setDefaultParams()', () => {
- it('should perform a GET query and define the dms property on controller', () => {
- const params = {filter: {
- where: {code: 'invoiceIn'}
- }};
- const serializedParams = $httpParamSerializer(params);
- $httpBackend.expect('GET', `DmsTypes/findOne?${serializedParams}`).respond({id: 1, code: 'invoiceIn'});
- controller.params = {supplierName: 'Plants SL'};
- controller.setDefaultParams();
- $httpBackend.flush();
-
- expect(controller.dms).toBeDefined();
- expect(controller.dms.dmsTypeId).toEqual(1);
- });
- });
-
- describe('onSubmit()', () => {
- it('should make an HTTP POST request to save the form data', () => {
- controller.$.watcher = watcher;
-
- jest.spyOn(controller.$.watcher, 'updateOriginalData');
- const files = [{id: 1, name: 'MyFile'}];
- controller.dms = {files};
- const serializedParams = $httpParamSerializer(controller.dms);
- const query = `dms/uploadFile?${serializedParams}`;
- controller.params = {rows: null};
-
- $httpBackend.expect('POST', query).respond({});
- $httpBackend.expect('POST', 'AgencyTerms/createInvoiceIn').respond({});
- controller.onSubmit();
- $httpBackend.flush();
- });
- });
-
- describe('onFileChange()', () => {
- it('should set dms hasFileAttached property to true if has any files', () => {
- const files = [{id: 1, name: 'MyFile'}];
- controller.onFileChange(files);
- $scope.$apply();
-
- expect(controller.dms.hasFileAttached).toBeTruthy();
- });
- });
- });
-});
diff --git a/modules/route/front/agency-term/createInvoiceIn/style.scss b/modules/route/front/agency-term/createInvoiceIn/style.scss
deleted file mode 100644
index 73f136fc1..000000000
--- a/modules/route/front/agency-term/createInvoiceIn/style.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-vn-ticket-request {
- .vn-textfield {
- margin: 0!important;
- max-width: 100px;
- }
-}
-
diff --git a/modules/route/front/agency-term/index/index.html b/modules/route/front/agency-term/index/index.html
deleted file mode 100644
index 0d8ea40e7..000000000
--- a/modules/route/front/agency-term/index/index.html
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id
-
-
- Date
-
-
- Agency route
-
-
- Agency Agreement
-
-
- Packages
-
-
- M3
-
-
- Km
-
-
- Price
-
-
- Received
-
-
- Autonomous
-
-
-
-
-
-
-
-
-
-
-
-
- {{::agencyTerm.routeFk}}
-
-
- {{::agencyTerm.created | date:'dd/MM/yyyy'}}
- {{::agencyTerm.agencyModeName | dashIfEmpty}}
- {{::agencyTerm.agencyAgreement | dashIfEmpty}}
- {{::agencyTerm.packages | dashIfEmpty}}
- {{::agencyTerm.m3 | dashIfEmpty}}
- {{::agencyTerm.kmTotal | dashIfEmpty}}
- {{::agencyTerm.price | dashIfEmpty}}
-
-
- {{::agencyTerm.invoiceInFk}}
-
-
-
-
- {{::agencyTerm.supplierName}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/agency-term/index/index.js b/modules/route/front/agency-term/index/index.js
deleted file mode 100644
index 6c3bafc9a..000000000
--- a/modules/route/front/agency-term/index/index.js
+++ /dev/null
@@ -1,121 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
-
- this.smartTableOptions = {
- activeButtons: {
- search: true
- },
- columns: [
- {
- field: 'agencyModeFk',
- autocomplete: {
- url: 'AgencyModes',
- showField: 'name',
- valueField: 'id'
- }
- },
- {
- field: 'agencyFk',
- autocomplete: {
- url: 'Agencies',
- showField: 'name',
- valueField: 'id'
- }
- },
- {
- field: 'supplierFk',
- autocomplete: {
- url: 'Suppliers',
- showField: 'name',
- valueField: 'name',
- }
- }
- ]
- };
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'agencyModeFk':
- return {'a.agencyModeFk': value};
- case 'supplierFk':
- return {'a.supplierName': value};
- case 'routeFk':
- return {'a.routeFk': value};
- case 'created':
- case 'agencyFk':
- case 'packages':
- case 'm3':
- case 'kmTotal':
- case 'price':
- case 'invoiceInFk':
- return {[`a.${param}`]: value};
- }
- }
-
- get checked() {
- const agencyTerms = this.$.model.data || [];
- const checkedAgencyTerms = [];
- for (let agencyTerm of agencyTerms) {
- if (agencyTerm.checked)
- checkedAgencyTerms.push(agencyTerm);
- }
-
- return checkedAgencyTerms;
- }
-
- get totalChecked() {
- return this.checked.length;
- }
-
- get totalPrice() {
- let totalPrice = 0;
-
- if (this.checked.length > 0) {
- for (let agencyTerm of this.checked)
- totalPrice += agencyTerm.price;
-
- return totalPrice;
- }
-
- return totalPrice;
- }
-
- preview(route) {
- this.routeSelected = route;
- this.$.summary.show();
- }
-
- createInvoiceIn() {
- const rowsToCreateInvoiceIn = [];
- const supplierFk = this.checked[0].supplierFk;
-
- for (let agencyTerm of this.checked) {
- let hasSameSupplier = supplierFk == agencyTerm.supplierFk;
- if (hasSameSupplier) {
- rowsToCreateInvoiceIn.push({
- routeFk: agencyTerm.routeFk,
- supplierFk: agencyTerm.supplierFk,
- created: agencyTerm.created,
- totalPrice: this.totalPrice});
- } else {
- this.vnApp.showError(this.$t('Two autonomous cannot be counted at the same time'));
- return false;
- }
- }
- const params = JSON.stringify({
- supplierName: this.checked[0].supplierName,
- rows: rowsToCreateInvoiceIn
- });
- this.$state.go('route.agencyTerm.createInvoiceIn', {q: params});
- }
-}
-
-ngModule.vnComponent('vnAgencyTermIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/agency-term/index/index.spec.js b/modules/route/front/agency-term/index/index.spec.js
deleted file mode 100644
index 55c40daa5..000000000
--- a/modules/route/front/agency-term/index/index.spec.js
+++ /dev/null
@@ -1,94 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('AgencyTerm', () => {
- describe('Component vnAgencyTermIndex', () => {
- let controller;
- let $window;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, _$window_) => {
- $window = _$window_;
- const $element = angular.element(' ');
- controller = $componentController('vnAgencyTermIndex', {$element});
- controller.$.model = crudModel;
- controller.$.model.data = [
- {supplierFk: 1, totalPrice: null},
- {supplierFk: 1},
- {supplierFk: 2}
- ];
- }));
-
- describe('checked() getter', () => {
- it('should return the checked lines', () => {
- const data = controller.$.model.data;
- data[0].checked = true;
-
- const checkedRows = controller.checked;
-
- const firstCheckedRow = checkedRows[0];
-
- expect(firstCheckedRow.supplierFk).toEqual(1);
- });
- });
-
- describe('totalCheked() getter', () => {
- it('should return the total checked lines', () => {
- const data = controller.$.model.data;
- data[0].checked = true;
-
- const checkedRows = controller.totalChecked;
-
- expect(checkedRows).toEqual(1);
- });
- });
-
- describe('preview()', () => {
- it('should show the summary dialog', () => {
- controller.$.summary = {show: () => {}};
- jest.spyOn(controller.$.summary, 'show');
-
- let event = new MouseEvent('click', {
- view: $window,
- bubbles: true,
- cancelable: true
- });
- const route = {id: 1};
-
- controller.preview(event, route);
-
- expect(controller.$.summary.show).toHaveBeenCalledWith();
- });
- });
-
- describe('createInvoiceIn()', () => {
- it('should throw an error if more than one autonomous are checked', () => {
- jest.spyOn(controller.vnApp, 'showError');
- const data = controller.$.model.data;
- data[0].checked = true;
- data[2].checked = true;
-
- controller.createInvoiceIn();
-
- expect(controller.vnApp.showError).toHaveBeenCalled();
- });
-
- it('should call the function go() on $state to go to the file management', () => {
- jest.spyOn(controller.$state, 'go');
- const data = controller.$.model.data;
- data[0].checked = true;
-
- controller.createInvoiceIn();
-
- delete data[0].checked;
- const params = JSON.stringify({
- supplierName: data[0].supplierName,
- rows: [data[0]]
- });
-
- expect(controller.$state.go).toHaveBeenCalledWith('route.agencyTerm.createInvoiceIn', {q: params});
- });
- });
- });
-});
diff --git a/modules/route/front/agency-term/locale/es.yml b/modules/route/front/agency-term/locale/es.yml
deleted file mode 100644
index 0f6797188..000000000
--- a/modules/route/front/agency-term/locale/es.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-Agency route: Agencia ruta
-Agency Agreement: Acuerdo agencia
-Autonomous: Autónomos
-Two autonomous cannot be counted at the same time: Dos autonónomos no pueden ser contabilizados al mismo tiempo
-You cannot attach more than one document: No puedes adjuntar más de un documento
\ No newline at end of file
diff --git a/modules/route/front/basic-data/index.html b/modules/route/front/basic-data/index.html
deleted file mode 100644
index 7f9aef0d0..000000000
--- a/modules/route/front/basic-data/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
diff --git a/modules/route/front/basic-data/index.js b/modules/route/front/basic-data/index.js
deleted file mode 100644
index f051e23c5..000000000
--- a/modules/route/front/basic-data/index.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- $onInit() {
- this.$http.post(`Vehicles/sorted`, {warehouseFk: this.vnConfig.warehouseFk})
- .then(res => {
- this.vehicles = res.data;
- });
- }
-
- onSubmit() {
- this.$.watcher.submit().then(() =>
- this.card.reload()
- );
- }
-}
-
-ngModule.vnComponent('vnRouteBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- route: '<'
- },
- require: {
- card: '^vnRouteCard'
- }
-});
diff --git a/modules/route/front/basic-data/locale/es.yml b/modules/route/front/basic-data/locale/es.yml
deleted file mode 100644
index 9dcacbe9a..000000000
--- a/modules/route/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-Date finished: Fecha fin
-Date started: Fecha inicio
-Km start: Km de inicio
-Km end: Km de fin
-Description: Descripción
-Hour started: Hora inicio
-Hour finished: Hora fin
-Is served: Se ha servido
diff --git a/modules/route/front/card/index.html b/modules/route/front/card/index.html
deleted file mode 100644
index 9e0ae4e8c..000000000
--- a/modules/route/front/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/route/front/card/index.js b/modules/route/front/card/index.js
deleted file mode 100644
index 07b5a547c..000000000
--- a/modules/route/front/card/index.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import ngModule from '../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- let filter = {
- fields: [
- 'id',
- 'workerFk',
- 'agencyModeFk',
- 'created',
- 'm3',
- 'warehouseFk',
- 'description',
- 'vehicleFk',
- 'kmStart',
- 'kmEnd',
- 'started',
- 'finished',
- 'cost',
- 'zoneFk',
- 'isOk'
- ],
- include: [
- {
- relation: 'agencyMode',
- scope: {
- fields: ['id', 'name']
- }
- }, {
- relation: 'vehicle',
- scope: {
- fields: ['id', 'm3']
- }
- }, {
- relation: 'zone',
- scope: {
- fields: ['id', 'name']
- }
- },
- {
- relation: 'worker',
- scope: {
- fields: ['id'],
- include: {
- relation: 'user',
- scope: {
- fields: ['id'],
- include: {
- relation: 'emailUser',
- scope: {
- fields: ['email']
- }
- }
- }
- }
- }
- }
- ]
- };
-
- this.$http.get(`Routes/${this.$params.id}`, {filter})
- .then(res => this.route = res.data);
- }
-}
-
-ngModule.vnComponent('vnRouteCard', {
- template: require('./index.html'),
- controller: Controller
-});
-
diff --git a/modules/route/front/create/index.html b/modules/route/front/create/index.html
deleted file mode 100644
index de341220e..000000000
--- a/modules/route/front/create/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
diff --git a/modules/route/front/create/index.js b/modules/route/front/create/index.js
deleted file mode 100644
index c81394c10..000000000
--- a/modules/route/front/create/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onSubmit() {
- this.$.watcher.submit().then(
- res => {
- this.$http.post(`Routes/${res.data.id}/updateWorkCenter`, null)
- .then(() => {
- this.$state.go('route.card.summary', {id: res.data.id});
- });
- }
- );
- }
-}
-
-ngModule.vnComponent('vnRouteCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/index.js b/modules/route/front/index.js
index 803fc1045..0f2208862 100644
--- a/modules/route/front/index.js
+++ b/modules/route/front/index.js
@@ -1,19 +1,6 @@
export * from './module';
import './main';
-import './index/';
-import './search-panel';
import './descriptor';
import './descriptor-popover';
import './summary';
-import './card';
-import './create';
-import './basic-data';
-import './log';
-import './tickets';
-import './agency-term/index';
-import './agency-term/createInvoiceIn';
-import './agency-term-search-panel';
-import './ticket-popup';
-import './sms';
-import './roadmap';
diff --git a/modules/route/front/index/index.html b/modules/route/front/index/index.html
deleted file mode 100644
index 9384af6be..000000000
--- a/modules/route/front/index/index.html
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Id
-
-
- Worker
-
-
- Agency
-
-
- Vehicle
-
-
- Date
-
-
- m³
-
-
- Description
-
-
- Hour started
-
-
- Hour finished
-
-
-
-
-
-
-
-
-
-
- {{::route.id | dashIfEmpty}}
-
-
-
- {{name}} - {{nickname}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{::route.m3 | dashIfEmpty}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Clone
-
-
diff --git a/modules/route/front/index/index.js b/modules/route/front/index/index.js
deleted file mode 100644
index bb32e1f13..000000000
--- a/modules/route/front/index/index.js
+++ /dev/null
@@ -1,151 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $, vnReport) {
- super($element, $);
- this.vnReport = vnReport;
- this.droppableElement = 'a.vn-tr';
- }
-
- preview(route) {
- this.routeSelected = route;
- this.$.summary.show();
- }
-
- showTicketPopup(route) {
- this.routeSelected = route;
- this.$.ticketPopup.show();
- }
-
- get checked() {
- const rows = this.$.model.data || [];
- const checkedRows = [];
- for (let row of rows) {
- if (row.checked)
- checkedRows.push(row);
- }
-
- return checkedRows;
- }
-
- get totalChecked() {
- return this.checked.length;
- }
-
- showRouteReport() {
- const routesIds = [];
- const access_token = this.vnToken.tokenMultimedia;
-
- for (let route of this.checked)
- routesIds.push(route.id);
- const stringRoutesIds = routesIds.join(',');
-
- if (this.checked.length <= 1) {
- const url = `api/Routes/${stringRoutesIds}/driver-route-pdf?access_token=${access_token}`;
- window.open(url, '_blank');
- } else {
- const serializedParams = this.$httpParamSerializer({
- access_token,
- id: stringRoutesIds
- });
- const url = `api/Routes/downloadZip?${serializedParams}`;
- window.open(url, '_blank');
- }
- }
-
- openClonationDialog() {
- this.$.clonationDialog.show();
- this.createdDate = Date.vnNew();
- }
-
- cloneSelectedRoutes() {
- try {
- if (!this.createdDate)
- throw new Error(`The date can't be empty`);
-
- const routesIds = [];
- for (let route of this.checked)
- routesIds.push(route.id);
-
- return this.$http.post('Routes/clone', {ids: routesIds, created: this.createdDate}).then(() => {
- this.$.model.refresh();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- }
- }
-
- onDrop($event) {
- const target = $event.target;
- const droppable = target.closest(this.droppableElement);
- const ticketId = $event.dataTransfer.getData('Text');
- const routeId = droppable.id;
-
- if (isNaN(ticketId)) {
- const regexp = new RegExp(/\/ticket\/([0-9]+)\//i);
- const matches = ticketId.match(regexp);
-
- if (matches && matches.length)
- this.insert(routeId, matches[1]);
- else
- this.vnApp.showError(this.$t('Ticket not found'));
- }
-
- if (!isNaN(ticketId))
- this.insert(routeId, ticketId);
- }
-
- insert(routeId, ticketId) {
- routeId = parseInt(routeId);
- ticketId = parseInt(ticketId);
-
- const query = `Routes/${routeId}/insertTicket`;
- return this.$http.patch(query, {ticketId}).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.model.refresh();
- }).catch(error => {
- if (error.status == 404)
- return this.vnApp.showError(this.$t('Ticket not found'));
- throw error;
- });
- }
-
- updateAttributes(route) {
- if (route.started == null || route.finished == null)
- return this.vnApp.showError(this.$t('You must select a valid time'));
- if (route.created == null)
- return this.vnApp.showError(this.$t('You must select a valid date'));
- const params = {
- workerFk: route.workerFk,
- agencyModeFk: route.agencyModeFk,
- vehicleFk: route.vehicleFk,
- created: route.created,
- description: route.description,
- started: route.started,
- finished: route.finished
- };
- const query = `Routes/${route.id}/`;
- this.$http.patch(query, params).then(res => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- markAsServed() {
- const routes = [];
- for (let route of this.checked)
- routes.push(route.id);
-
- const params = {isOk: true};
- for (let routeId of routes)
- this.$http.patch(`Routes/${routeId}`, params);
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnReport'];
-
-ngModule.vnComponent('vnRouteIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/index/index.spec.js b/modules/route/front/index/index.spec.js
deleted file mode 100644
index 399ece714..000000000
--- a/modules/route/front/index/index.spec.js
+++ /dev/null
@@ -1,156 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Component vnRouteIndex', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- const $element = angular.element(' ');
- controller = $componentController('vnRouteIndex', {$element});
- controller.$.model = crudModel;
- controller.$.model.data = [{id: 1, checked: true}, {id: 2}, {id: 3}];
- }));
-
- describe('checked() getter', () => {
- it('should return the checked lines', () => {
- const data = controller.$.model.data;
- data[0].checked = true;
- data[2].checked = true;
-
- const checkedRows = controller.checked;
-
- const firstCheckedRow = checkedRows[0];
- const secondCheckedRow = checkedRows[1];
-
- expect(firstCheckedRow.id).toEqual(1);
- expect(secondCheckedRow.id).toEqual(3);
- });
- });
-
- describe('totalCheked() getter', () => {
- it('should return the total checked lines', () => {
- const data = controller.$.model.data;
- data[0].checked = true;
-
- const checkedRows = controller.totalChecked;
-
- expect(checkedRows).toEqual(1);
- });
- });
-
- describe('showRouteReport()', () => {
- it('should call to the vnReport show method', () => {
- jest.spyOn(window, 'open').mockReturnThis();
-
- const data = controller.$.model.data;
- data[0].checked = true;
- data[2].checked = true;
-
- controller.showRouteReport();
-
- expect(window.open).toHaveBeenCalled();
- });
- });
-
- describe('cloneSelectedRoutes()', () => {
- it('should perform an http request to Routes/clone', () => {
- controller.createdDate = Date.vnNew();
-
- $httpBackend.expect('POST', 'Routes/clone').respond();
- controller.cloneSelectedRoutes();
- $httpBackend.flush();
- });
- });
-
- describe('onDrop()', () => {
- it('should call the insert method when dragging a ticket number', () => {
- jest.spyOn(controller, 'insert');
-
- const routeId = '1';
- const expectedTicketId = '16';
- const draggedElement = '16';
- const droppable = document.createElement('a');
- droppable.setAttribute('id', 1);
- droppable.classList.add('vn-tr');
-
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- },
- target: droppable
- };
- controller.onDrop($event);
-
- expect(controller.insert).toHaveBeenCalledWith(routeId, expectedTicketId);
- });
-
- it('should call the insert method when dragging a ticket link', () => {
- jest.spyOn(controller, 'insert');
-
- const routeId = '1';
- const expectedTicketId = '11';
- const draggedElement = 'http://arkamcity.com/#!/ticket/11/summary';
- const droppable = document.createElement('a');
- droppable.setAttribute('id', 1);
- droppable.classList.add('vn-tr');
-
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- },
- target: droppable
- };
- controller.onDrop($event);
-
- expect(controller.insert).toHaveBeenCalledWith(routeId, expectedTicketId);
- });
-
- it('should throw an error when dragging an invalid ticket link', () => {
- jest.spyOn(controller.vnApp, 'showError');
-
- const draggedElement = 'http://arkamcity.com/#!/item/11/summary';
- const droppable = document.createElement('a');
- droppable.setAttribute('id', 1);
- droppable.classList.add('vn-tr');
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- },
- target: droppable
- };
- controller.onDrop($event);
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith('Ticket not found');
- });
- });
-
- describe('insert()', () => {
- it('should perform a HTTP patch query and then call both refresh and showSuccess methods', () => {
- jest.spyOn(controller.$.model, 'refresh').mockReturnThis();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const routeId = 1;
- const ticketId = 11;
- const data = {ticketId};
- $httpBackend.expect('PATCH', `Routes/1/insertTicket`, data).respond();
- controller.insert(routeId, ticketId);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('markAsServed()', () => {
- it('should perform a HTTP patch query', () => {
- const data = {isOk: true};
- $httpBackend.expect('PATCH', `Routes/1`, data).respond();
- controller.markAsServed();
- $httpBackend.flush();
- });
- });
-});
diff --git a/modules/route/front/index/locale/es.yml b/modules/route/front/index/locale/es.yml
deleted file mode 100644
index 3db84d81e..000000000
--- a/modules/route/front/index/locale/es.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-Vehicle: Vehículo
-Download selected routes as PDF: Descargar rutas seleccionadas como PDF
-Clone selected routes: Clonar rutas seleccionadas
-The date can't be empty: La fecha no puede estar vacía
-Starting date: Fecha de inicio
-Hour started: Hora inicio
-Hour finished: Hora fin
-Go to route: Ir a la ruta
-You must select a valid time: Debe seleccionar una hora válida
-You must select a valid date: Debe seleccionar una fecha válida
-Mark as served: Marcar como servidas
-Retrieving data from the routes: Recuperando datos de las rutas
-Send SMS to all clients: Mandar sms a todos los clientes de las rutas
\ No newline at end of file
diff --git a/modules/route/front/locale/en.yml b/modules/route/front/locale/en.yml
deleted file mode 100644
index 0e5302b14..000000000
--- a/modules/route/front/locale/en.yml
+++ /dev/null
@@ -1 +0,0 @@
-Unlink zone: Unlink zone {{zoneName}} from agency {{agencyName}}
\ No newline at end of file
diff --git a/modules/route/front/locale/es.yml b/modules/route/front/locale/es.yml
deleted file mode 100644
index 74ab2cd61..000000000
--- a/modules/route/front/locale/es.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-Routes: Rutas
-Search routes by id: Buscar rutas por identificador
-New route: Nueva ruta
-route: ruta
-Unlink zone: Desvincular zona {{zoneName}} de agencia {{agencyName}}
\ No newline at end of file
diff --git a/modules/route/front/log/index.html b/modules/route/front/log/index.html
deleted file mode 100644
index 7df2e30ae..000000000
--- a/modules/route/front/log/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/route/front/log/index.js b/modules/route/front/log/index.js
deleted file mode 100644
index c1a7052a9..000000000
--- a/modules/route/front/log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnRouteLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/route/front/main/index.html b/modules/route/front/main/index.html
index f1bed84ff..e69de29bb 100644
--- a/modules/route/front/main/index.html
+++ b/modules/route/front/main/index.html
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/main/index.js b/modules/route/front/main/index.js
index 8c57bbad6..a567e3072 100644
--- a/modules/route/front/main/index.js
+++ b/modules/route/front/main/index.js
@@ -2,36 +2,12 @@ import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
export default class Route extends ModuleMain {
- $postLink() {
- const to = Date.vnNew();
- to.setDate(to.getDate() + 1);
- to.setHours(0, 0, 0, 0);
-
- const from = Date.vnNew();
- from.setDate(from.getDate());
- from.setHours(0, 0, 0, 0);
-
- this.filterParams = {from, to};
- this.$.model.applyFilter(null, this.filterParams);
+ constructor($element, $) {
+ super($element, $);
}
-
- fetchParams($params) {
- const hasEntries = Object.entries($params).length;
- if (!hasEntries)
- $params.scopeDays = 1;
-
- if (typeof $params.scopeDays === 'number') {
- const from = Date.vnNew();
- from.setHours(0, 0, 0, 0);
-
- const to = new Date(from.getTime());
- to.setDate(to.getDate() + $params.scopeDays);
- to.setHours(23, 59, 59, 999);
-
- Object.assign($params, {from, to});
- }
-
- return $params;
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`route/`);
}
}
diff --git a/modules/route/front/main/index.spec.js b/modules/route/front/main/index.spec.js
deleted file mode 100644
index 0c16a7b1f..000000000
--- a/modules/route/front/main/index.spec.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import './index.js';
-
-describe('Route Component vnRoute', () => {
- let controller;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject($componentController => {
- let $element = angular.element(`
`);
- controller = $componentController('vnRoute', {$element});
- }));
-
- describe('fetchParams()', () => {
- it('should return a range of dates with passed scope days', () => {
- let params = controller.fetchParams({
- scopeDays: 2
- });
- const from = Date.vnNew();
- from.setHours(0, 0, 0, 0);
- const to = new Date(from.getTime());
- to.setDate(to.getDate() + params.scopeDays);
- to.setHours(23, 59, 59, 999);
-
- const expectedParams = {
- from,
- scopeDays: params.scopeDays,
- to
- };
-
- expect(params).toEqual(expectedParams);
- });
-
- it('should return default value for scope days', () => {
- let params = controller.fetchParams({
- scopeDays: 1
- });
-
- expect(params.scopeDays).toEqual(1);
- });
-
- it('should return the given scope days', () => {
- let params = controller.fetchParams({
- scopeDays: 2
- });
-
- expect(params.scopeDays).toEqual(2);
- });
- });
-});
diff --git a/modules/route/front/roadmap/basic-data/index.html b/modules/route/front/roadmap/basic-data/index.html
deleted file mode 100644
index 28c67eb47..000000000
--- a/modules/route/front/roadmap/basic-data/index.html
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
diff --git a/modules/route/front/roadmap/basic-data/index.js b/modules/route/front/roadmap/basic-data/index.js
deleted file mode 100644
index d5b39b76e..000000000
--- a/modules/route/front/roadmap/basic-data/index.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onSubmit() {
- this.$.watcher.submit();
- }
-}
-
-ngModule.component('vnRoadmapBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- roadmap: '<'
- }
-});
diff --git a/modules/route/front/roadmap/card/index.html b/modules/route/front/roadmap/card/index.html
deleted file mode 100644
index 97ca40f95..000000000
--- a/modules/route/front/roadmap/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/route/front/roadmap/card/index.js b/modules/route/front/roadmap/card/index.js
deleted file mode 100644
index ff2d13616..000000000
--- a/modules/route/front/roadmap/card/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import ngModule from '../../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- const filter = {
- include: [
- {relation: 'supplier'}
- ]
- };
- this.$http.get(`Roadmaps/${this.$params.id}`, {filter})
- .then(res => this.roadmap = res.data);
- }
-}
-
-ngModule.vnComponent('vnRoadmapCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/roadmap/create/index.html b/modules/route/front/roadmap/create/index.html
deleted file mode 100644
index f5a26566e..000000000
--- a/modules/route/front/roadmap/create/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
diff --git a/modules/route/front/roadmap/create/index.js b/modules/route/front/roadmap/create/index.js
deleted file mode 100644
index 7e638da94..000000000
--- a/modules/route/front/roadmap/create/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $, $transclude, vnReport, vnEmail) {
- super($element, $, $transclude);
- this.roadmap = {etd: Date.vnNew()};
- }
-
- onSubmit() {
- this.$.watcher.submit().then(
- res => this.$state.go('route.roadmap.card.summary', {id: res.data.id})
- );
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnRoadmapCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/roadmap/create/style.scss b/modules/route/front/roadmap/create/style.scss
deleted file mode 100644
index 8ee7ecb09..000000000
--- a/modules/route/front/roadmap/create/style.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-vn-ticket-request {
- .vn-textfield {
- margin: 0!important;
- max-width: 100px;
- }
-}
diff --git a/modules/route/front/roadmap/descriptor/index.html b/modules/route/front/roadmap/descriptor/index.html
deleted file mode 100644
index 92ae8eab1..000000000
--- a/modules/route/front/roadmap/descriptor/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- Delete roadmap
-
-
-
-
-
-
-
-
-
-
- {{$ctrl.roadmap.supplier.nickname}}
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/roadmap/descriptor/index.js b/modules/route/front/roadmap/descriptor/index.js
deleted file mode 100644
index 2846b073a..000000000
--- a/modules/route/front/roadmap/descriptor/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ngModule from '../../module';
-import Descriptor from 'salix/components/descriptor';
-
-class Controller extends Descriptor {
- get roadmap() {
- return this.entity;
- }
-
- set roadmap(value) {
- this.entity = value;
- }
-
- onDelete() {
- return this.$http.delete(`Roadmaps/${this.roadmap.id}`)
- .then(() => this.$state.go('route.roadmap'))
- .then(() => this.vnApp.showSuccess(this.$t('Roadmap removed')));
- }
-}
-
-ngModule.component('vnRoadmapDescriptor', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- roadmap: '<'
- }
-});
diff --git a/modules/route/front/roadmap/descriptor/locale/es.yml b/modules/route/front/roadmap/descriptor/locale/es.yml
deleted file mode 100644
index 376209694..000000000
--- a/modules/route/front/roadmap/descriptor/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Delete roadmap: Eliminar troncal
-The roadmap will be removed: La troncal será eliminada
-Roadmap removed: Troncal eliminada
diff --git a/modules/route/front/roadmap/index.js b/modules/route/front/roadmap/index.js
deleted file mode 100644
index 91b782a9b..000000000
--- a/modules/route/front/roadmap/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import './main';
-import './index/';
-import './summary';
-import './card';
-import './descriptor';
-import './create';
-import './basic-data';
-import './search-panel';
-import './stops';
diff --git a/modules/route/front/roadmap/index/index.html b/modules/route/front/roadmap/index/index.html
deleted file mode 100644
index 6f8cbecc4..000000000
--- a/modules/route/front/roadmap/index/index.html
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Roadmap
- ETD
- Carrier
- Plate
- Price
- Observations
-
-
-
-
-
-
-
-
-
- {{::roadmap.name}}
- {{::roadmap.etd | date:'dd/MM/yyyy HH:mm'}}
-
-
- {{::roadmap.supplier.nickname}}
-
-
- {{::roadmap.tractorPlate | dashIfEmpty}}
- {{::roadmap.price | currency: 'EUR':2 | dashIfEmpty}}
- {{::roadmap.observations | dashIfEmpty}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Clone
-
-
-
-
diff --git a/modules/route/front/roadmap/index/index.js b/modules/route/front/roadmap/index/index.js
deleted file mode 100644
index c5f5ef9d1..000000000
--- a/modules/route/front/roadmap/index/index.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- get checked() {
- const roadmaps = this.$.model.data || [];
- const checkedRoadmap = [];
- for (let roadmap of roadmaps) {
- if (roadmap.checked)
- checkedRoadmap.push(roadmap);
- }
-
- return checkedRoadmap;
- }
-
- get totalChecked() {
- return this.checked.length;
- }
-
- preview(roadmap) {
- this.roadmapSelected = roadmap;
- this.$.summary.show();
- }
-
- openClonationDialog() {
- this.$.clonationDialog.show();
- this.etd = Date.vnNew();
- }
-
- cloneSelectedRoadmaps() {
- try {
- if (!this.etd)
- throw new Error(`The date can't be empty`);
-
- const roadmapsIds = [];
- for (let roadmap of this.checked)
- roadmapsIds.push(roadmap.id);
-
- return this.$http.post('Roadmaps/clone', {ids: roadmapsIds, etd: this.etd}).then(() => {
- this.$.model.refresh();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- }
- }
-
- deleteRoadmaps() {
- for (const roadmap of this.checked) {
- this.$http.delete(`Roadmaps/${roadmap.id}`)
- .then(() => this.$.model.refresh())
- .then(() => this.vnApp.showSuccess(this.$t('Roadmaps removed')));
- }
- }
-}
-
-ngModule.vnComponent('vnRoadmapIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/roadmap/index/locale/es.yml b/modules/route/front/roadmap/index/locale/es.yml
deleted file mode 100644
index dd93eac6e..000000000
--- a/modules/route/front/roadmap/index/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Delete roadmap(s): Eliminar troncal(es)
-Selected roadmaps will be removed: Los troncales seleccionados serán eliminados
-Roadmaps removed: Troncales eliminados
diff --git a/modules/route/front/roadmap/locale/es.yml b/modules/route/front/roadmap/locale/es.yml
deleted file mode 100644
index e136eca31..000000000
--- a/modules/route/front/roadmap/locale/es.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-Roadmaps: Troncales
-Roadmap: Troncal
-Driver name: Nombre conductor
-Plate: Matrícula
-Price: Precio
-Observations: Observaciones
-Clone selected roadmaps: Clonar troncales seleccionadas
-Select the estimated time of departure (ETD): Seleccione la hora estimada de salida (ETD)
-Create roadmap: Crear troncal
-Tractor plate: Matrícula tractor
-Trailer plate: Matrícula trailer
-Carrier: Transportista
-ETD date: Fecha ETD
-ETD hour: Hora ETD
diff --git a/modules/route/front/roadmap/main/index.html b/modules/route/front/roadmap/main/index.html
deleted file mode 100644
index 3a8eb2599..000000000
--- a/modules/route/front/roadmap/main/index.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/roadmap/main/index.js b/modules/route/front/roadmap/main/index.js
deleted file mode 100644
index e7b3366f2..000000000
--- a/modules/route/front/roadmap/main/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import ngModule from '../../module';
-import ModuleMain from 'salix/components/module-main';
-
-export default class Roadmap extends ModuleMain {
- constructor($element, $) {
- super($element, $);
-
- this.include = {
- relation: 'supplier',
- scope: {
- fields: ['nickname']
- }
- };
- }
-
- $postLink() {
- const from = Date.vnNew();
- from.setHours(0, 0, 0, 0);
-
- const to = Date.vnNew();
- to.setHours(23, 59, 59, 999);
-
- this.filterParams = {
- from: from,
- to: to
- };
-
- this.$.model.addFilter({where: {
- and: [
- {etd: {gte: from}},
- {etd: {lte: to}}
- ]
- }});
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'search':
- return /^\d+$/.test(value)
- ? {id: value}
- : {name: {like: `%${value}%`}};
- case 'from':
- return {etd: {gte: value}};
- case 'to':
- return {etd: {lte: value}};
- case 'supplierFk':
- case 'price':
- return {[param]: value};
- case 'tractorPlate':
- case 'trailerPlate':
- case 'phone':
- case 'driverName':
- return {[param]: {like: `%${value}%`}};
- }
- }
-}
-
-ngModule.vnComponent('vnRoadmap', {
- controller: Roadmap,
- template: require('./index.html')
-});
diff --git a/modules/route/front/roadmap/main/locale/es.yml b/modules/route/front/roadmap/main/locale/es.yml
deleted file mode 100644
index 78342bce8..000000000
--- a/modules/route/front/roadmap/main/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Search roadmap by id or trunk: Buscar troncales por id o troncal
diff --git a/modules/route/front/roadmap/search-panel/index.html b/modules/route/front/roadmap/search-panel/index.html
deleted file mode 100644
index 53fd37344..000000000
--- a/modules/route/front/roadmap/search-panel/index.html
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
diff --git a/modules/route/front/roadmap/search-panel/index.js b/modules/route/front/roadmap/search-panel/index.js
deleted file mode 100644
index 499027d14..000000000
--- a/modules/route/front/roadmap/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.component('vnRoadmapSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/route/front/roadmap/stops/index.html b/modules/route/front/roadmap/stops/index.html
deleted file mode 100644
index 82f30c326..000000000
--- a/modules/route/front/roadmap/stops/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
-
-
diff --git a/modules/route/front/roadmap/stops/index.js b/modules/route/front/roadmap/stops/index.js
deleted file mode 100644
index 075a1c8a4..000000000
--- a/modules/route/front/roadmap/stops/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- add() {
- const filter = {
- fields: ['etd']
- };
- this.$http.get(`Roadmaps/${this.$params.id}`, {filter})
- .then(res => {
- this.roadmap = res.data;
-
- const eta = new Date(this.roadmap.etd);
- eta.setDate(eta.getDate() + 1);
-
- this.$.model.insert({
- roadmapFk: this.$params.id,
- eta: eta
- });
- });
- }
-
- onSubmit() {
- this.$.watcher.check();
- this.$.model.save().then(() => {
- this.$.watcher.notifySaved();
- this.$.watcher.updateOriginalData();
- this.$.model.refresh();
- });
- }
-}
-
-ngModule.component('vnRoadmapStops', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- roadmap: '<'
- }
-});
diff --git a/modules/route/front/roadmap/stops/locale/es.yml b/modules/route/front/roadmap/stops/locale/es.yml
deleted file mode 100644
index 1db275949..000000000
--- a/modules/route/front/roadmap/stops/locale/es.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-Remove stop: Eliminar parada
-Add stop: Añadir parada
-ETA date: Fecha ETA
-ETA hour: Hora ETA
diff --git a/modules/route/front/roadmap/summary/index.html b/modules/route/front/roadmap/summary/index.html
deleted file mode 100644
index abf5ff90a..000000000
--- a/modules/route/front/roadmap/summary/index.html
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
- {{summary.id}} - {{summary.name}}
-
-
-
-
-
- {{summary.supplier.nickname}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Wharehouse
- ETA
-
-
-
-
- {{roadmapStop.warehouse.name}}
- {{roadmapStop.eta | date:'dd/MM/yyyy HH:mm'}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Confirm
-
-
diff --git a/modules/route/front/roadmap/summary/index.js b/modules/route/front/roadmap/summary/index.js
deleted file mode 100644
index 46abe5ca2..000000000
--- a/modules/route/front/roadmap/summary/index.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import ngModule from '../../module';
-import Component from 'core/lib/component';
-import './style.scss';
-
-class Controller extends Component {
- set roadmap(value) {
- this._roadmap = value;
- this.$.summary = null;
- if (!value) return;
-
- this.loadData();
- }
-
- get roadmap() {
- return this._roadmap;
- }
-
- loadData() {
- const filter = {
- include: [
- {relation: 'supplier'},
- {relation: 'worker'},
- {relation: 'roadmapStop',
- scope: {
- include: [
- {relation: 'warehouse'}
- ]
- }}
- ]
- };
- this.$http.get(`Roadmaps/${this.roadmap.id}`, {filter})
- .then(res => this.$.summary = res.data);
- }
-
- getETD() {
- const eta = new Date(this.roadmap.etd);
- eta.setDate(eta.getDate() + 1);
-
- this.roadmapStop = {eta: eta};
- }
-
- onAddAccept() {
- try {
- const data = {
- roadmapFk: this.roadmap.id,
- warehouseFk: this.roadmapStop.warehouseFk,
- eta: this.roadmapStop.eta,
- description: this.roadmapStop.description
- };
-
- this.$http.post(`RoadmapStops`, data)
- .then(() => {
- this.loadData();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- }
- }
-}
-
-ngModule.component('vnRoadmapSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- roadmap: '<'
- }
-});
diff --git a/modules/route/front/roadmap/summary/locale/es.yml b/modules/route/front/roadmap/summary/locale/es.yml
deleted file mode 100644
index f2d82438a..000000000
--- a/modules/route/front/roadmap/summary/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Stops: Paradas
-Wharehouse: Almacén
-You must fill all the fields: Debes rellenar todos los campos
diff --git a/modules/route/front/roadmap/summary/style.scss b/modules/route/front/roadmap/summary/style.scss
deleted file mode 100644
index 743500cef..000000000
--- a/modules/route/front/roadmap/summary/style.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-@import "variables";
-
-vn-roadmap-summary .summary {
- a:not(vn-link-phone a) {
- display: flex;
- align-items: center;
- height: 18.328px;
- }
-}
diff --git a/modules/route/front/routes.json b/modules/route/front/routes.json
index 3b866581d..00fedc259 100644
--- a/modules/route/front/routes.json
+++ b/modules/route/front/routes.json
@@ -6,18 +6,7 @@
"dependencies": ["client", "worker", "ticket", "supplier", "invoiceIn"],
"menus": {
"main": [
- {"state": "route.index", "icon": "icon-delivery"},
- {"state": "route.agencyTerm.index", "icon": "icon-agency-term"},
- {"state": "route.roadmap", "icon": "icon-trailer"}
- ],
- "card": [
- {"state": "route.card.basicData", "icon": "settings"},
- {"state": "route.card.tickets", "icon": "icon-ticket"},
- {"state": "route.card.log", "icon": "history"}
- ],
- "roadmap": [
- {"state": "route.roadmap.card.basicData", "icon": "settings"},
- {"state": "route.roadmap.card.stops", "icon": "icon-lines"}
+ {"state": "route.index", "icon": "icon-delivery"}
]
},
"routes": [
@@ -33,108 +22,6 @@
"state": "route.index",
"component": "vn-route-index",
"description": "Routes"
- }, {
- "url": "/create",
- "state": "route.create",
- "component": "vn-route-create",
- "description": "New route"
- }, {
- "url": "/:id",
- "state": "route.card",
- "abstract": true,
- "component": "vn-route-card"
- }, {
- "url": "/agency-term?q",
- "abstract": true,
- "state": "route.agencyTerm",
- "component": "ui-view"
- }, {
- "url": "/index",
- "state": "route.agencyTerm.index",
- "component": "vn-agency-term-index",
- "description": "Autonomous",
- "acl": ["administrative"]
- },{
- "url": "/createInvoiceIn?q",
- "state": "route.agencyTerm.createInvoiceIn",
- "component": "vn-agency-term-create-invoice-in",
- "description": "File management",
- "params": {
- "route": "$ctrl.route"
- },
- "acl": ["administrative"]
- }, {
- "url": "/summary",
- "state": "route.card.summary",
- "component": "vn-route-summary",
- "description": "Summary",
- "params": {
- "route": "$ctrl.route"
- }
- }, {
- "url": "/basic-data",
- "state": "route.card.basicData",
- "component": "vn-route-basic-data",
- "description": "Basic data",
- "params": {
- "route": "$ctrl.route"
- },
- "acl": ["delivery"]
- }, {
- "url" : "/log",
- "state": "route.card.log",
- "component": "vn-route-log",
- "description": "Log",
- "acl": ["delivery"]
- }, {
- "url": "/tickets",
- "state": "route.card.tickets",
- "component": "vn-route-tickets",
- "description": "Tickets",
- "params": {
- "route": "$ctrl.route"
- },
- "acl": ["delivery"]
- }, {
- "url": "/roadmap?q",
- "state": "route.roadmap",
- "component": "vn-roadmap",
- "description": "Roadmaps"
- }, {
- "url": "/create",
- "state": "route.roadmap.create",
- "component": "vn-roadmap-create",
- "description": "Create roadmap"
- },{
- "url": "/:id",
- "state": "route.roadmap.card",
- "component": "vn-roadmap-card",
- "abstract": true,
- "description": "Detail"
- },{
- "url": "/summary",
- "state": "route.roadmap.card.summary",
- "component": "vn-roadmap-summary",
- "description": "Summary",
- "params": {
- "roadmap": "$ctrl.roadmap"
- }
- },{
- "url": "/basic-data",
- "state": "route.roadmap.card.basicData",
- "component": "vn-roadmap-basic-data",
- "description": "Basic data",
- "params": {
- "roadmap": "$ctrl.roadmap"
- }
- }, {
- "url": "/stops",
- "state": "route.roadmap.card.stops",
- "component": "vn-roadmap-stops",
- "description": "Stops",
- "params": {
- "route": "$ctrl.roadmap"
- }
}
]
}
diff --git a/modules/route/front/search-panel/index.html b/modules/route/front/search-panel/index.html
deleted file mode 100644
index f3d392580..000000000
--- a/modules/route/front/search-panel/index.html
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
diff --git a/modules/route/front/search-panel/index.js b/modules/route/front/search-panel/index.js
deleted file mode 100644
index b5abbd94a..000000000
--- a/modules/route/front/search-panel/index.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-class Controller extends SearchPanel {
- constructor($, $element) {
- super($, $element);
- this.filter = this.$.filter;
- }
-
- get from() {
- return this._from;
- }
-
- set from(value) {
- this._from = value;
- this.filter.scopeDays = null;
- }
-
- get to() {
- return this._to;
- }
-
- set to(value) {
- this._to = value;
- this.filter.scopeDays = null;
- }
-
- get scopeDays() {
- return this._scopeDays;
- }
-
- set scopeDays(value) {
- this._scopeDays = value;
-
- this.filter.from = null;
- this.filter.to = null;
- }
-}
-
-ngModule.vnComponent('vnRouteSearchPanel', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/route/front/search-panel/index.spec.js b/modules/route/front/search-panel/index.spec.js
deleted file mode 100644
index ae15e16e4..000000000
--- a/modules/route/front/search-panel/index.spec.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import './index';
-
-describe('Route Component vnRouteSearchPanel', () => {
- let controller;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject($componentController => {
- controller = $componentController('vnRouteSearchPanel', {$element: null});
- controller.$t = () => {};
- controller.filter = {};
- }));
-
- describe('from() setter', () => {
- it('should clear the scope days when setting the from property', () => {
- controller.filter.scopeDays = 1;
-
- controller.from = Date.vnNew();
-
- expect(controller.filter.scopeDays).toBeNull();
- expect(controller.from).toBeDefined();
- });
- });
-
- describe('to() setter', () => {
- it('should clear the scope days when setting the to property', () => {
- controller.filter.scopeDays = 1;
-
- controller.to = Date.vnNew();
-
- expect(controller.filter.scopeDays).toBeNull();
- expect(controller.to).toBeDefined();
- });
- });
-
- describe('scopeDays() setter', () => {
- it('should clear the date range when setting the scopeDays property', () => {
- controller.filter.from = Date.vnNew();
- controller.filter.to = Date.vnNew();
-
- controller.scopeDays = 1;
-
- expect(controller.filter.from).toBeNull();
- expect(controller.filter.to).toBeNull();
- expect(controller.scopeDays).toBeDefined();
- });
- });
-});
diff --git a/modules/route/front/sms/index.html b/modules/route/front/sms/index.html
deleted file mode 100644
index 0d7dd7c11..000000000
--- a/modules/route/front/sms/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{'Characters remaining' | translate}}:
-
- {{$ctrl.charactersRemaining()}}
-
-
-
-
-
-
-
- Send
-
-
\ No newline at end of file
diff --git a/modules/route/front/sms/index.js b/modules/route/front/sms/index.js
deleted file mode 100644
index f466adea7..000000000
--- a/modules/route/front/sms/index.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import ngModule from '../module';
-import Component from 'core/lib/component';
-import './style.scss';
-
-class Controller extends Component {
- open() {
- this.$.SMSDialog.show();
- }
-
- charactersRemaining() {
- const element = this.$.message;
- const value = element.input.value;
-
- const maxLength = 160;
- const textAreaLength = new Blob([value]).size;
- return maxLength - textAreaLength;
- }
-
- onResponse() {
- try {
- if (!this.sms.destination)
- throw new Error(`The destination can't be empty`);
- if (!this.sms.message)
- throw new Error(`The message can't be empty`);
- if (this.charactersRemaining() < 0)
- throw new Error(`The message it's too long`);
-
- this.$http.post(`Routes/sendSms`, this.sms).then(res => {
- this.vnApp.showMessage(this.$t('SMS sent'));
-
- if (res.data) this.emit('send', {response: res.data});
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- return false;
- }
- return true;
- }
-}
-
-ngModule.vnComponent('vnRouteSms', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- sms: '<',
- }
-});
diff --git a/modules/route/front/sms/index.spec.js b/modules/route/front/sms/index.spec.js
deleted file mode 100644
index 8bf35e673..000000000
--- a/modules/route/front/sms/index.spec.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import './index';
-
-describe('Route', () => {
- describe('Component vnRouteSms', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- let $scope = $rootScope.$new();
- const $element = angular.element(' ');
- controller = $componentController('vnRouteSms', {$element, $scope});
- controller.$.message = {
- input: {
- value: 'My SMS'
- }
- };
- }));
-
- describe('onResponse()', () => {
- it('should perform a POST query and show a success snackbar', () => {
- let params = {destinationFk: 1101, destination: 111111111, message: 'My SMS'};
- controller.sms = {destinationFk: 1101, destination: 111111111, message: 'My SMS'};
-
- jest.spyOn(controller.vnApp, 'showMessage');
- $httpBackend.expect('POST', `Routes/sendSms`, params).respond(200, params);
-
- controller.onResponse();
- $httpBackend.flush();
-
- expect(controller.vnApp.showMessage).toHaveBeenCalledWith('SMS sent');
- });
-
- it('should call onResponse without the destination and show an error snackbar', () => {
- controller.sms = {destinationFk: 1101, message: 'My SMS'};
-
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.onResponse();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The destination can't be empty`);
- });
-
- it('should call onResponse without the message and show an error snackbar', () => {
- controller.sms = {destinationFk: 1101, destination: 222222222};
-
- jest.spyOn(controller.vnApp, 'showError');
-
- controller.onResponse();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The message can't be empty`);
- });
- });
-
- describe('charactersRemaining()', () => {
- it('should return the characters remaining in a element', () => {
- controller.$.message = {
- input: {
- value: 'My message 0€'
- }
- };
-
- let result = controller.charactersRemaining();
-
- expect(result).toEqual(145);
- });
- });
- });
-});
diff --git a/modules/route/front/sms/locale/es.yml b/modules/route/front/sms/locale/es.yml
deleted file mode 100644
index 0168a6eb6..000000000
--- a/modules/route/front/sms/locale/es.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-Send SMS to the selected tickets: Enviar SMS a los tickets seleccionados
-Routes to notify: Rutas a notificar
-Message: Mensaje
-SMS sent!: ¡SMS enviado!
-Characters remaining: Carácteres restantes
-The destination can't be empty: El destinatario no puede estar vacio
-The message can't be empty: El mensaje no puede estar vacio
-The message it's too long: El mensaje es demasiado largo
-Special characters like accents counts as a multiple: Carácteres especiales como los acentos cuentan como varios
\ No newline at end of file
diff --git a/modules/route/front/sms/style.scss b/modules/route/front/sms/style.scss
deleted file mode 100644
index 84571a5f4..000000000
--- a/modules/route/front/sms/style.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-@import "variables";
-
-.SMSDialog {
- min-width: 400px
-}
\ No newline at end of file
diff --git a/modules/route/front/ticket-popup/index.html b/modules/route/front/ticket-popup/index.html
deleted file mode 100644
index 5046d5e43..000000000
--- a/modules/route/front/ticket-popup/index.html
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
- Tickets to add
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ticket
- Client
- Province
-
-
- Population
-
-
- PC
- Address
- Zone
-
-
-
-
-
-
-
-
-
-
- {{::ticket.id}}
-
-
-
-
- {{::ticket.nickname}}
-
-
- {{::ticket.address.province.name}}
- {{::ticket.address.city}}
- {{::ticket.address.postalCode}}
- {{::ticket.address.street}}
-
- {{::ticket.zone.name}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/ticket-popup/index.js b/modules/route/front/ticket-popup/index.js
deleted file mode 100644
index 8fd7b5d71..000000000
--- a/modules/route/front/ticket-popup/index.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import ngModule from '../module';
-import Dialog from 'core/components/dialog';
-import './style.scss';
-
-class Controller extends Dialog {
- constructor($element, $, $transclude) {
- super($element, $, $transclude);
- }
-
- getSelectedTickets(tickets) {
- const selectedTickets = [];
-
- if (tickets) {
- for (let i = 0; i < tickets.length; i++) {
- if (tickets[i].checked)
- selectedTickets.push(tickets[i]);
- }
- }
- return selectedTickets;
- }
-
- updateVolume() {
- let url = `Routes/${this.route.id}/updateVolume`;
- this.$http.post(url).then(() => {
- this.$.model.refresh();
- if (this.parentReload)
- this.parentReload();
- });
- }
-
- setTicketsRoute() {
- const tickets = this.getSelectedTickets(this.possibleTickets);
- if (tickets.length === 0) return;
-
- const updates = [];
-
- for (let ticket of tickets) {
- delete ticket.checked;
- const update = {
- where: {id: ticket.id},
- data: {routeFk: this.route.id}
- };
-
- updates.push(update);
- }
-
- const data = {creates: [], updates: updates, deletes: []};
- return this.$http.post(`Tickets/crud`, data)
- .then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.updateVolume();
- this.hide();
- });
- }
-
- unlinkZone(ticket) {
- const params = {
- agencyModeId: this.route.agencyModeFk,
- zoneId: ticket.zoneFk,
- };
-
- const query = `Routes/unlink`;
- this.$http.post(query, params).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.model.refresh();
- this.hide();
- });
- }
-}
-Controller.$inject = ['$element', '$scope', '$transclude'];
-
-ngModule.vnComponent('vnRouteTicketPopup', {
- slotTemplate: require('./index.html'),
- controller: Controller,
- bindings: {
- route: '<',
- model: '',
- parentReload: '&'
- }
-});
diff --git a/modules/route/front/ticket-popup/index.spec.js b/modules/route/front/ticket-popup/index.spec.js
deleted file mode 100644
index b4313024b..000000000
--- a/modules/route/front/ticket-popup/index.spec.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/* eslint max-len: ["error", { "code": 150 }]*/
-import './index';
-
-describe('Route', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- const $element = angular.element(' ');
- const $transclude = {
- $$boundTransclude: {
- $$slots: []
- }
- };
- controller = $componentController('vnRouteTicketPopup', {$element, $scope, $transclude});
- controller.route = {id: 1};
- controller.$.model = {
- refresh: () => {},
- remove: () => {}
- };
- controller.card = {reload: () => {}};
- }));
-
- describe('unlink()', () => {
- it('should call the route unlink endpoint with the agency and zone ids', () => {
- controller.$.model = {refresh: jest.fn()};
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller, 'hide');
-
- controller.route = {
- agencyModeFk: 1
- };
-
- const ticket = {
- zoneFk: 2,
- };
- const params = {
- agencyModeId: controller.route.agencyModeFk,
- zoneId: ticket.zoneFk,
- };
-
- $httpBackend.expectPOST(`Routes/unlink`, params).respond('ok');
- controller.unlinkZone(ticket);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.hide).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('setTicketsRoute()', () => {
- it('should perform a POST query to add tickets to the route', () => {
- controller.$.model = {refresh: jest.fn()};
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller, 'hide');
-
- controller.route = {id: 111};
-
- controller.possibleTickets = [
- {id: 2, checked: false},
- {id: 3, checked: true},
- {id: 4, checked: false},
- {id: 5, checked: true},
- ];
-
- $httpBackend.whenPOST(`Routes/${controller.route.id}/updateVolume`).respond(200);
- $httpBackend.expectPOST('Tickets/crud').respond();
- controller.setTicketsRoute();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.hide).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-});
diff --git a/modules/route/front/ticket-popup/style.scss b/modules/route/front/ticket-popup/style.scss
deleted file mode 100644
index 77fa48f20..000000000
--- a/modules/route/front/ticket-popup/style.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-@import "variables";
-
-.dialog{
- padding: $float-spacing
-}
\ No newline at end of file
diff --git a/modules/route/front/tickets/__snapshots__/index.spec.js.snap b/modules/route/front/tickets/__snapshots__/index.spec.js.snap
deleted file mode 100644
index 9476a8e09..000000000
--- a/modules/route/front/tickets/__snapshots__/index.spec.js.snap
+++ /dev/null
@@ -1,18 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Route getSelectedItems() should return the selected items 1`] = `
-Array [
- Object {
- "checked": true,
- "id": 1,
- },
- Object {
- "checked": true,
- "id": 3,
- },
- Object {
- "checked": true,
- "id": 5,
- },
-]
-`;
diff --git a/modules/route/front/tickets/index.html b/modules/route/front/tickets/index.html
deleted file mode 100644
index 7fafeb0ba..000000000
--- a/modules/route/front/tickets/index.html
+++ /dev/null
@@ -1,203 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/route/front/tickets/index.js b/modules/route/front/tickets/index.js
deleted file mode 100644
index a1b97005e..000000000
--- a/modules/route/front/tickets/index.js
+++ /dev/null
@@ -1,201 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-import UserError from 'core/lib/user-error';
-
-class Controller extends Section {
- get isChecked() {
- if (this.tickets) {
- for (let instance of this.tickets)
- if (instance.checked) return true;
- }
-
- return false;
- }
-
- getHighestPriority() {
- let highestPriority = Math.max(...this.$.model.data.map(tag => {
- return tag.priority;
- }));
- return highestPriority + 1;
- }
-
- setHighestPriority(ticket) {
- const highestPriority = this.getHighestPriority();
- if (highestPriority - 1 != ticket.priority) {
- const params = {priority: highestPriority};
- const query = `Tickets/${ticket.id}/`;
- this.$http.patch(query, params).then(res => {
- ticket.priority = res.data.priority;
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
- }
-
- setPriority(id, priority) {
- let params = {priority: priority};
- let query = `Tickets/${id}/`;
- this.$http.patch(query, params).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- deletePriority() {
- const lines = this.getSelectedItems(this.tickets);
-
- for (const line of lines) {
- this.$http.patch(`Tickets/${line.id}/`, {priority: null}).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.model.refresh();
- });
- }
- }
-
- setOrderedPriority(lines) {
- let priority = 1;
- for (const line of lines) {
- this.$http.patch(`Tickets/${line.id}/`, {priority: priority}).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.model.refresh();
- });
- priority++;
- }
- }
-
- getSelectedItems(items) {
- const selectedItems = [];
-
- if (items) {
- for (let i = 0; i < items.length; i++) {
- if (items[i].checked)
- selectedItems.push(items[i]);
- }
- }
- return selectedItems;
- }
-
- goToBuscaman(ticket) {
- if (!this.route.vehicleFk)
- throw new UserError(`The route doesn't have a vehicle`);
-
- this.$http.get(`Routes/${this.route.vehicleFk}/getDeliveryPoint`).then(res => {
- if (!res.data)
- throw new UserError(`The route's vehicle doesn't have a delivery point`);
-
- let addresses = res.data;
- const lines = ticket ? [ticket] : this.getSelectedItems(this.tickets);
- lines.forEach((line, index) => {
- const previousLine = lines[index - 1] ? lines[index - 1].street : null;
- if (previousLine != line.street)
- addresses = addresses + '+to:' + line.postalCode + ' ' + line.city + ' ' + line.street;
- });
-
- const url = 'http://gps.buscalia.com/usuario/localizar.aspx?bmi=true&addr=';
- window.open(url + encodeURI(addresses), '_blank');
- });
- }
-
- showDeleteConfirm(id) {
- this.selectedTicket = id;
- this.$.confirm.show();
- }
-
- removeTicketFromRoute($index) {
- let params = {routeFk: null};
- let query = `Tickets/${this.selectedTicket}/`;
- this.$http.patch(query, params).then(() => {
- this.$.model.remove($index);
- this.vnApp.showSuccess(this.$t('Ticket removed from route'));
- this.updateVolume();
- });
- }
-
- updateVolume() {
- let url = `Routes/${this.$params.id}/updateVolume`;
- this.$http.post(url).then(() => {
- this.card.reload();
- this.$.model.refresh();
- });
- }
-
- guessPriority() {
- let query = `Routes/${this.$params.id}/guessPriority/`;
- this.$http.patch(query).then(() => {
- this.vnApp.showSuccess(this.$t('Order changed'));
- this.$.model.refresh();
- });
- }
-
- onDrop($event) {
- const ticketId = $event.dataTransfer.getData('Text');
-
- if (isNaN(ticketId)) {
- const regexp = new RegExp(/\/ticket\/([0-9]+)\//i);
- const matches = ticketId.match(regexp);
-
- if (matches && matches.length)
- this.insert(matches[1]);
- else
- this.vnApp.showError(this.$t('Ticket not found'));
- }
-
- if (!isNaN(ticketId))
- this.insert(ticketId);
- }
-
- insert(ticketId) {
- ticketId = parseInt(ticketId);
-
- const query = `Routes/${this.route.id}/insertTicket`;
- return this.$http.patch(query, {ticketId}).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.updateVolume();
- }).catch(error => {
- if (error.status == 404)
- return this.vnApp.showError(this.$t('Ticket not found'));
- throw error;
- });
- }
-
- async sendSms() {
- try {
- const clientsFk = [];
- const clientsName = [];
- const clients = [];
-
- const selectedTickets = this.getSelectedItems(this.$.$ctrl.tickets);
-
- for (let ticket of selectedTickets) {
- clientsFk.push(ticket.clientFk);
- let userContact = await this.$http.get(`Clients/${ticket.clientFk}`);
- clientsName.push(userContact.data.name);
- clients.push(userContact.data.phone);
- }
-
- const destinationFk = String(clientsFk);
- const destination = String(clients);
-
- this.newSMS = Object.assign({
- destinationFk: destinationFk,
- destination: destination
- });
-
- this.$.sms.open();
- return true;
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- return false;
- }
- }
-}
-
-ngModule.vnComponent('vnRouteTickets', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnRouteCard'
- },
- bindings: {
- route: '<'
- }
-});
diff --git a/modules/route/front/tickets/index.spec.js b/modules/route/front/tickets/index.spec.js
deleted file mode 100644
index fef4b8331..000000000
--- a/modules/route/front/tickets/index.spec.js
+++ /dev/null
@@ -1,277 +0,0 @@
-/* eslint max-len: ["error", { "code": 150 }]*/
-import './index';
-
-describe('Route', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('route'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- const $element = angular.element(' ');
- controller = $componentController('vnRouteTickets', {$element, $scope});
- controller.route = {id: 1};
- controller.$.model = {
- refresh: () => {},
- remove: () => {}
- };
- controller.card = {reload: () => {}};
- }));
-
- describe('route setter/getter', () => {
- it('should return the route id', () => {
- controller.route = 2;
-
- expect(controller.route).toEqual(2);
- });
- });
-
- describe('isChecked getter', () => {
- it('should return false if none of the tickets is checked or there are no tickets', () => {
- expect(controller.isChecked).toBeFalsy();
- });
-
- it('should return true if any of the tickets is checked', () => {
- controller.tickets = [{checked: true}];
-
- expect(controller.isChecked).toBeTruthy();
- });
- });
-
- describe('getHighestPriority()', () => {
- it('should return the highest value found in priorities plus 1', () => {
- controller.$.model = {data: [
- {priority: 99},
- {priority: 1},
- {priority: 2},
- {priority: 3},
- {priority: 4},
- {priority: 5},
- ]};
-
- let result = controller.getHighestPriority();
-
- expect(result).toEqual(100);
- });
- });
-
- describe('setHighestPriority()', () => {
- it('should set a ticket highest priority', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- controller.$.model.data = [{priority: 3}];
- const ticket = {id: 1, priority: 2};
- const res = {data: {priority: 4}};
-
- $httpBackend.expectPATCH(`Tickets/${ticket.id}/`).respond(res);
- controller.setHighestPriority(ticket);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('setPriority()', () => {
- it('should set a ticket priority', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- const ticketId = 1;
- const priority = 999;
-
- $httpBackend.expectPATCH(`Tickets/${ticketId}/`).respond('ok');
- controller.setPriority(ticketId, priority);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('deletePriority()', () => {
- it('should delete priority of all tickets', () => {
- jest.spyOn(controller.$.model, 'refresh');
- jest.spyOn(controller.vnApp, 'showSuccess');
- controller.tickets = [{id: 1, checked: true}];
-
- $httpBackend.expectPATCH(`Tickets/${controller.tickets[0].id}/`).respond();
- controller.deletePriority();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('setOrderedPriority()', () => {
- it('should set priority of all tickets starting by 1', () => {
- jest.spyOn(controller.$.model, 'refresh');
- jest.spyOn(controller.vnApp, 'showSuccess');
- const tickets = [{id: 1, checked: true}];
-
- $httpBackend.expectPATCH(`Tickets/${tickets[0].id}/`).respond();
- controller.setOrderedPriority(tickets);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('getSelectedItems()', () => {
- it('should return the selected items', () => {
- let items = [
- {id: 1, checked: true},
- {id: 2, checked: false},
- {id: 3, checked: true},
- {id: 4, checked: false},
- {id: 5, checked: true},
- ];
-
- let selectedItems = controller.getSelectedItems(items);
-
- expect(selectedItems).toMatchSnapshot();
- });
- });
-
- describe('goToBuscaman()', () => {
- it('should open buscaman with the given arguments', () => {
- jest.spyOn(window, 'open').mockReturnThis();
- const expectedUrl = 'http://gps.buscalia.com/usuario/localizar.aspx?bmi=true&addr=46460%20Av%20Espioca%20100+to:n19%20London%20my%20street';
- controller.route = {vehicleFk: 1};
- const url = `Routes/${controller.route.vehicleFk}/getDeliveryPoint`;
- $httpBackend.expectGET(url).respond('46460 Av Espioca 100');
-
- controller.tickets = [
- {
- id: 1,
- checked: true,
- street: 'my street',
- postalCode: 'n19',
- city: 'London'
- },
- ];
-
- controller.goToBuscaman();
- $httpBackend.flush();
-
- expect(window.open).toHaveBeenCalledWith(expectedUrl, '_blank');
- });
- });
-
- describe('showDeleteConfirm()', () => {
- it('should open a confirm dialog after setting the selected ticket into the controller', () => {
- controller.$.confirm = {show: () => {}};
- jest.spyOn(controller.$.confirm, 'show');
- let ticketId = 1;
-
- controller.showDeleteConfirm(ticketId);
-
- expect(controller.selectedTicket).toEqual(ticketId);
- expect(controller.$.confirm.show).toHaveBeenCalledWith();
- });
- });
-
- describe('removeTicketFromRoute()', () => {
- it('should perform a patch query then call showSuccess and updateVolume methods', () => {
- controller.$params = {id: 1101};
-
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.$.model, 'remove');
-
- let ticketId = 1;
- controller.selectedTicket = ticketId;
-
- $httpBackend.whenPOST(`Routes/${controller.$params.id}/updateVolume`).respond(200);
- $httpBackend.expectPATCH(`Tickets/${ticketId}/`).respond('ok');
- controller.removeTicketFromRoute();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Ticket removed from route');
- });
- });
-
- describe('updateVolume()', () => {
- it('should perform a POST query then call both reload and refresh methods', () => {
- controller.$params = {id: 999};
- jest.spyOn(controller.$.model, 'refresh');
- jest.spyOn(controller.card, 'reload');
-
- let ticketId = 1;
- controller.selectedTicket = ticketId;
-
- const url = `Routes/${controller.$params.id}/updateVolume`;
- $httpBackend.expectPOST(url).respond('ok');
- controller.updateVolume();
- $httpBackend.flush();
-
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- expect(controller.card.reload).toHaveBeenCalledWith();
- });
- });
-
- describe('onDrop()', () => {
- it('should call the insert method when dragging a ticket number', () => {
- jest.spyOn(controller, 'insert');
-
- const expectedTicketId = '11';
- const draggedElement = '11';
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- }
- };
- controller.onDrop($event);
-
- expect(controller.insert).toHaveBeenCalledWith(expectedTicketId);
- });
-
- it('should call the insert method when dragging a ticket link', () => {
- jest.spyOn(controller, 'insert');
-
- const expectedTicketId = '11';
- const draggedElement = 'http://arkamcity.com/#!/ticket/11/summary';
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- }
- };
- controller.onDrop($event);
-
- expect(controller.insert).toHaveBeenCalledWith(expectedTicketId);
- });
-
- it('should throw an error when dragging an invalid ticket link', () => {
- jest.spyOn(controller.vnApp, 'showError');
-
- const draggedElement = 'http://arkamcity.com/#!/item/11/summary';
- const $event = {
- dataTransfer: {
- getData: () => draggedElement
- }
- };
- controller.onDrop($event);
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith('Ticket not found');
- });
- });
-
- describe('insert()', () => {
- it('should make a HTTP patch query and then call both refresh and showSuccess methods', () => {
- controller.$params = {id: 1101};
-
- jest.spyOn(controller.$.model, 'refresh').mockReturnThis();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const ticketId = 11;
- const data = {ticketId};
-
- $httpBackend.whenPOST(`Routes/${controller.$params.id}/updateVolume`).respond(200);
- $httpBackend.expect('PATCH', `Routes/1/insertTicket`, data).respond();
- controller.insert(ticketId);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.model.refresh).toHaveBeenCalledWith();
- });
- });
-});
diff --git a/modules/route/front/tickets/locale/es.yml b/modules/route/front/tickets/locale/es.yml
deleted file mode 100644
index e7f483d2f..000000000
--- a/modules/route/front/tickets/locale/es.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-Remove ticket: Eliminar ticket
-Open buscaman: Abrir buscaman
-Ticket removed from route: Ticket quitado de la ruta
-Order changed: Orden cambiado
-Delete ticket from route?: ¿Quitar el ticket de la ruta?
-Sort routes: Ordenar rutas
-Add ticket: Añadir ticket
-Tickets to add: Tickets a añadir
-Ticket not found: No se ha encontrado el ticket
-The selected ticket is not suitable for this route: El ticket seleccionado no es apto para esta ruta
-PC: CP
-The route's vehicle doesn't have a delivery point: El vehículo de la ruta no tiene un punto de entrega
-The route doesn't have a vehicle: La ruta no tiene un vehículo
-Population: Población
-Unlink selected zone?: Desvincular zona seleccionada?
-Delete priority: Borrar orden
-Renumber all tickets in the order you see on the screen: Renumerar todos los tickets con el orden que ves por pantalla
-Assign highest priority: Asignar máxima prioridad
\ No newline at end of file
diff --git a/modules/route/front/tickets/style.scss b/modules/route/front/tickets/style.scss
deleted file mode 100644
index 9393a7d59..000000000
--- a/modules/route/front/tickets/style.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-@import "variables";
-
-vn-route-tickets form{
- margin: 0 auto;
- max-width: $width-lg;
-
- .order-field {
- max-width: 30px;
- }
-}
-
-.button-right{
- display: block;
- padding-right: 50px;
- text-align: right;
-}
\ No newline at end of file
diff --git a/modules/ticket/front/advance/index.js b/modules/ticket/front/advance/index.js
index 1f47d8242..15ad303e3 100644
--- a/modules/ticket/front/advance/index.js
+++ b/modules/ticket/front/advance/index.js
@@ -62,8 +62,11 @@ export default class Controller extends Section {
setDefaultFilter() {
let today = Date.vnNew();
+ today.setHours(0, 0, 0, 0);
const tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate() + 1);
+ tomorrow.setHours(23, 59, 59, 999);
+
this.$http.get(`UserConfigs/getUserConfig`)
.then(res => {
this.filterParams = {
@@ -86,15 +89,6 @@ export default class Controller extends Section {
return checkedLines;
}
- dateRange(value) {
- const minHour = new Date(value);
- minHour.setHours(0, 0, 0, 0);
- const maxHour = new Date(value);
- maxHour.setHours(23, 59, 59, 59);
-
- return [minHour, maxHour];
- }
-
totalPriceColor(totalWithVat) {
return this.isLessThan50(totalWithVat) ? 'warning' : '';
}
diff --git a/modules/ticket/front/advance/index.spec.js b/modules/ticket/front/advance/index.spec.js
index 883993c1c..5caca742c 100644
--- a/modules/ticket/front/advance/index.spec.js
+++ b/modules/ticket/front/advance/index.spec.js
@@ -36,24 +36,6 @@ describe('Component vnTicketAdvance', () => {
});
});
- describe('dateRange()', () => {
- it('should return two dates with the hours at the start and end of the given date', () => {
- const now = Date.vnNew();
-
- const today = now.getDate();
-
- const dateRange = controller.dateRange(now);
- const start = dateRange[0].toString();
- const end = dateRange[1].toString();
-
- expect(start).toContain(today);
- expect(start).toContain('00:00:00');
-
- expect(end).toContain(today);
- expect(end).toContain('23:59:59');
- });
- });
-
describe('moveTicketsAdvance()', () => {
it('should make an HTTP Post query', () => {
jest.spyOn(controller.$.model, 'refresh');
diff --git a/modules/worker/back/models/calendar.json b/modules/worker/back/models/calendar.json
index 40d29c519..4c68c7793 100644
--- a/modules/worker/back/models/calendar.json
+++ b/modules/worker/back/models/calendar.json
@@ -1,9 +1,8 @@
{
"name": "Calendar",
"base": "VnModel",
- "log": {
- "model": "WorkerLog",
- "relation": "labour"
+ "mixins": {
+ "Loggable": true
},
"options": {
"mysql": {
diff --git a/package.json b/package.json
index 9016f74a6..261b877dd 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "salix-back",
- "version": "24.32.0",
+ "version": "24.34.0",
"author": "Verdnatura Levante SL",
"description": "Salix backend",
"license": "GPL-3.0",
diff --git a/print/templates/email/printer-setup/locale/fr.yml b/print/templates/email/printer-setup/locale/fr.yml
new file mode 100644
index 000000000..0c9f7031a
--- /dev/null
+++ b/print/templates/email/printer-setup/locale/fr.yml
@@ -0,0 +1,39 @@
+subject: Instalation et configuration de l'imprimante
+title: "Merci pour votre confiance !"
+description:
+ dear: Cher client
+ instructions: Veuillez suivre les instructions spécifiées dans cet e-mail pour procéder à l'installation de l'imprimante.
+ followGuide: Vous pouvez utiliser comme guide la vidéo du montage du ruban et de la bande.
+ https://www.youtube.com/watch?v=qhb0kgQF3o8 . Vous
+ aurez également besoin de GoLabel, le programme pour imprimer les bandes.
+ downloadFrom: Vous pouvez le télécharger depuis ce lien. https://cdn.verdnatura.es/public/GoLabel.zip
+ downloadDriver: Vous pouvez télécharger le pilote de l'imprimante depuis ce lien. https://es.seagullscientific.com/support/downloads/drivers/godex/download/
+sections:
+ GoLabel:
+ title: Utilisation de GoLabel
+ description: Pour utiliser le programme d'impression des bandes, suivez ces étapes
+ steps:
+ - Ci-joint à cet e-mail, vous trouverez le fichier 'model.ezp' (le modèle de bandes de corona standard). Téléchargez-le et vous le trouverez probablement dans le dossier 'Téléchargements'.
+ - Ouvrez le programme GoLabel.
+ - Cliquez sur l'icône de la barre supérieure en forme de dossier avec une feuille.
+ - Sélectionnez le fichier nommé 'model.ezp' (qui se trouve probablement dans 'Téléchargements'), puis cliquez sur Ouvrir.
+ - Une fois le fichier ouvert, double-cliquez sur le texte. Dans la boîte qui s'ouvre, cliquez sur le texte d'exemple (dans ce cas "TUS HERMANOS") et il apparaîtra dans la même zone à gauche pour que vous puissiez l'éditer et écrire ce que vous souhaitez.
+ - Lorsque vous avez le texte souhaité, cliquez sur le bouton 'OK'.
+ - Allez dans 'Fichier' → 'Enregistrer sous' et enregistrez-le sur le bureau sous un autre nom.
+ - Ensuite, pour imprimer, vous devez d'abord configurer l'imprimante.
+ - Cliquez sur la huitième icône de la barre supérieure, qui sera ici une imprimante avec un engrenage orange.
+ - Une fois là, cliquez sur le menu déroulant du modèle d'imprimante et choisissez le modèle qui correspond au vôtre 'G***'.
+ - Cliquez sur 'Enregistrer' et notre imprimante sera configurée et prête.
+ - Et enfin, pour imprimer, cliquez sur la neuvième icône, qui correspond à une imprimante bleue.
+ help:
+ title: "Avez-vous besoin d'aide ?"
+ description: Si vous avez besoin d'aide, téléchargez notre programme de support afin que nous puissions nous connecter à distance à votre ordinateur et effectuer l'installation. Veuillez nous fournir un horaire de contact pour vous assister, et nous vous contacterons.
+ remoteSupport: Vous pouvez télécharger le programme depuis ce lien. http://soporte.verdnatura.es .
+help: Pour toute question que vous pourriez avoir, n'hésitez pas à nous la poser. Nous sommes là pour vous aider !
+salesPersonName: Je suis votre commercial et mon nom est
+salesPersonPhone: Téléphone et WhatsApp.
+salesPersonEmail: Adresse e-mail.
diff --git a/print/templates/reports/buy-label/assets/css/style.css b/print/templates/reports/buy-label/assets/css/style.css
index 0d4a2891d..3b1f2f91e 100644
--- a/print/templates/reports/buy-label/assets/css/style.css
+++ b/print/templates/reports/buy-label/assets/css/style.css
@@ -33,9 +33,6 @@ span {
.barcode {
text-align: center;
}
-#variant {
+.one-third {
width: 314px;
-}
-#producer {
- width: 471px;
}
\ No newline at end of file
diff --git a/print/templates/reports/buy-label/buy-label.html b/print/templates/reports/buy-label/buy-label.html
index b14e54759..4a0d7f3fc 100644
--- a/print/templates/reports/buy-label/buy-label.html
+++ b/print/templates/reports/buy-label/buy-label.html
@@ -4,7 +4,7 @@
-
+
{{$t('variety')}}
{{buy.name}}
@@ -63,18 +63,24 @@
-
-
+
+
{{$t('producer')}}
{{buy.producer}}
+
+
+ {{$t('control')}}
+ {{`${weekNum} / ${dayNum}`}}
+
+
-
-
{{$t('control')}}
- {{`${weekNum} / ${dayNum}`}}
+
+ {{$t('reference')}}
+ {{buy.comment}}
diff --git a/print/templates/reports/buy-label/locale/en.yml b/print/templates/reports/buy-label/locale/en.yml
index d48d00771..333282759 100644
--- a/print/templates/reports/buy-label/locale/en.yml
+++ b/print/templates/reports/buy-label/locale/en.yml
@@ -9,4 +9,5 @@ grouping: Grouping
unitSale: Un. sale
producer: Producer
control: Control
-boxNum: Box no.
\ No newline at end of file
+boxNum: Box no.
+reference: Reference
\ No newline at end of file
diff --git a/print/templates/reports/buy-label/locale/es.yml b/print/templates/reports/buy-label/locale/es.yml
index 33a4a499d..af1d9aa1c 100644
--- a/print/templates/reports/buy-label/locale/es.yml
+++ b/print/templates/reports/buy-label/locale/es.yml
@@ -9,4 +9,5 @@ grouping: Grouping
saleUnit: Sale un.
producer: Productor
control: Control
-boxNum: Caja nº
\ No newline at end of file
+boxNum: Caja nº
+reference: Referencia
\ No newline at end of file
diff --git a/print/templates/reports/buy-label/sql/buys.sql b/print/templates/reports/buy-label/sql/buys.sql
index d75366815..015a74797 100644
--- a/print/templates/reports/buy-label/sql/buys.sql
+++ b/print/templates/reports/buy-label/sql/buys.sql
@@ -20,7 +20,8 @@ SELECT ROW_NUMBER() OVER(ORDER BY b.id, num.n) labelNum,
i.stems,
b.id,
b.itemFk,
- p.name producer
+ p.name producer,
+ i.comment
FROM buy b
JOIN item i ON i.id = b.itemFk
LEFT JOIN producer p ON p.id = i.producerFk