#6434 - SignIn issue_improve-signInLogMethod #1848
File diff suppressed because one or more lines are too long
|
@ -59,10 +59,6 @@ INSERT IGNORE INTO `vn`.`greugeConfig`(`id`, `freightPickUpPrice`)
|
||||||
VALUES
|
VALUES
|
||||||
('1', '11');
|
('1', '11');
|
||||||
|
|
||||||
INSERT INTO `vn`.`packagingConfig`(`upperGap`)
|
|
||||||
VALUES
|
|
||||||
('10');
|
|
||||||
|
|
||||||
UPDATE `account`.`role` SET id = 100 WHERE id = 0;
|
UPDATE `account`.`role` SET id = 100 WHERE id = 0;
|
||||||
|
|
||||||
INSERT INTO `account`.`roleConfig`(`id`, `mysqlPassword`, `rolePrefix`, `userPrefix`, `userHost`, `tplUser`)
|
INSERT INTO `account`.`roleConfig`(`id`, `mysqlPassword`, `rolePrefix`, `userPrefix`, `userHost`, `tplUser`)
|
||||||
|
@ -73,7 +69,7 @@ CALL `account`.`role_sync`;
|
||||||
|
|
||||||
INSERT INTO `account`.`user`(`id`,`name`, `nickname`, `role`,`active`,`email`, `lang`, `image`, `password`)
|
INSERT INTO `account`.`user`(`id`,`name`, `nickname`, `role`,`active`,`email`, `lang`, `image`, `password`)
|
||||||
SELECT id, name, CONCAT(name, 'Nick'), id, 1, CONCAT(name, '@mydomain.com'), 'en', '4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2'
|
SELECT id, name, CONCAT(name, 'Nick'), id, 1, CONCAT(name, '@mydomain.com'), 'en', '4fa3ada0-3ac4-11eb-9ab8-27f6fc3b85fd', '$2b$10$UzQHth.9UUQ1T5aiQJ21lOU0oVlbxoqH4PFM9V8T90KNSAcg0eEL2'
|
||||||
FROM `account`.`role` WHERE id <> 20
|
FROM `account`.`role`
|
||||||
ORDER BY id;
|
ORDER BY id;
|
||||||
|
|
||||||
INSERT INTO `account`.`account`(`id`)
|
INSERT INTO `account`.`account`(`id`)
|
||||||
|
@ -87,9 +83,15 @@ INSERT INTO `vn`.`educationLevel` (`id`, `name`)
|
||||||
(1, 'ESTUDIOS PRIMARIOS COMPLETOS'),
|
(1, 'ESTUDIOS PRIMARIOS COMPLETOS'),
|
||||||
(2, 'ENSEÑANZAS DE BACHILLERATO');
|
(2, 'ENSEÑANZAS DE BACHILLERATO');
|
||||||
|
|
||||||
|
INSERT INTO `vn`.`worker`(`id`,`code`, `firstName`, `lastName`, `bossFk`)
|
||||||
|
SELECT id,UPPER(LPAD(role, 3, '0')), name, name, NULL
|
||||||
|
FROM `account`.`user`
|
||||||
|
WHERE `id` = 9;
|
||||||
|
|
||||||
INSERT INTO `vn`.`worker`(`id`,`code`, `firstName`, `lastName`, `bossFk`)
|
INSERT INTO `vn`.`worker`(`id`,`code`, `firstName`, `lastName`, `bossFk`)
|
||||||
SELECT id,UPPER(LPAD(role, 3, '0')), name, name, 9
|
SELECT id,UPPER(LPAD(role, 3, '0')), name, name, 9
|
||||||
FROM `account`.`user`;
|
FROM `account`.`user`
|
||||||
|
WHERE `id` <> 9;
|
||||||
|
|
||||||
UPDATE `vn`.`worker` SET bossFk = NULL WHERE id = 20;
|
UPDATE `vn`.`worker` SET bossFk = NULL WHERE id = 20;
|
||||||
UPDATE `vn`.`worker` SET bossFk = 20 WHERE id = 1 OR id = 9;
|
UPDATE `vn`.`worker` SET bossFk = 20 WHERE id = 1 OR id = 9;
|
||||||
|
@ -549,15 +551,6 @@ INSERT INTO `vn`.`supplierActivity`(`code`, `name`)
|
||||||
('flowerPlants', 'Wholesale of flowers and plants'),
|
('flowerPlants', 'Wholesale of flowers and plants'),
|
||||||
('vegetablesFruits', 'Fruit and vegetable trade');
|
('vegetablesFruits', 'Fruit and vegetable trade');
|
||||||
|
|
||||||
INSERT INTO `vn`.`supplierAddress`(`id`, `supplierFk`, `nickname`, `street`, `provinceFk`, `postalCode`, `city`, `phone`, `mobile`)
|
|
||||||
VALUES
|
|
||||||
(1, 1, 'Ace Chemicals', 'The Midtown', 1, '46000', 'Gotham', '111111111', '222222222'),
|
|
||||||
(2, 1, 'Arkham Asylum', 'Grand Avenue', 1, '46000', 'Gotham', '111111111', '222222222'),
|
|
||||||
(3, 2, 'Wayne Tower', 'Grand Avenue', 1, '46000', 'Gotham', '111111111', '222222222'),
|
|
||||||
(4, 2, 'Bank of Gotham', 'Founders Island', 1, '46000', 'Gotham', '111111111', '222222222'),
|
|
||||||
(5, 442, 'GCR building', 'Bristol district', 1, '46000', 'Gotham', '111111111', '222222222'),
|
|
||||||
(6, 442, 'The Gotham Tonight building', 'Bristol district', 1, '46000', 'Gotham', '111111111', '222222222');
|
|
||||||
|
|
||||||
INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`, `commission`, `created`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`, `taxTypeSageFk`, `withholdingSageFk`, `transactionTypeSageFk`, `workerFk`, `supplierActivityFk`, `isPayMethodChecked`, `healthRegister`)
|
INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`, `commission`, `created`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`, `taxTypeSageFk`, `withholdingSageFk`, `transactionTypeSageFk`, `workerFk`, `supplierActivityFk`, `isPayMethodChecked`, `healthRegister`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'Plants SL', 'Plants nick', 4100000001, 1, '06089160W', 0, util.VN_CURDATE(), 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15, 4, 1, 1, 18, 'flowerPlants', 1, '400664487V'),
|
(1, 'Plants SL', 'Plants nick', 4100000001, 1, '06089160W', 0, util.VN_CURDATE(), 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15, 4, 1, 1, 18, 'flowerPlants', 1, '400664487V'),
|
||||||
|
@ -568,6 +561,15 @@ INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`
|
||||||
(791, 'Bros SL', 'Bros nick', 5115000791, 1, '37718083S', 0, util.VN_CURDATE(), 1, 'supplier address 7', 'ASGARD', 3, 46600, 1, 2, 15, 6, 9, 3, 18, 'complements', 1, '400664487V'),
|
(791, 'Bros SL', 'Bros nick', 5115000791, 1, '37718083S', 0, util.VN_CURDATE(), 1, 'supplier address 7', 'ASGARD', 3, 46600, 1, 2, 15, 6, 9, 3, 18, 'complements', 1, '400664487V'),
|
||||||
(1381, 'Ornamentales', 'Ornamentales', 7185001381, 1, '07972486L', 0, util.VN_CURDATE(), 1, 'supplier address 4', 'GOTHAM', 1, 43022, 1, 2, 15, 6, 9, 3, 18, 'complements', 1, '400664487V');
|
(1381, 'Ornamentales', 'Ornamentales', 7185001381, 1, '07972486L', 0, util.VN_CURDATE(), 1, 'supplier address 4', 'GOTHAM', 1, 43022, 1, 2, 15, 6, 9, 3, 18, 'complements', 1, '400664487V');
|
||||||
|
|
||||||
|
INSERT INTO `vn`.`supplierAddress`(`id`, `supplierFk`, `nickname`, `street`, `provinceFk`, `postalCode`, `city`, `phone`, `mobile`)
|
||||||
|
VALUES
|
||||||
|
(1, 1, 'Ace Chemicals', 'The Midtown', 1, '46000', 'Gotham', '111111111', '222222222'),
|
||||||
|
(2, 1, 'Arkham Asylum', 'Grand Avenue', 1, '46000', 'Gotham', '111111111', '222222222'),
|
||||||
|
(3, 2, 'Wayne Tower', 'Grand Avenue', 1, '46000', 'Gotham', '111111111', '222222222'),
|
||||||
|
(4, 2, 'Bank of Gotham', 'Founders Island', 1, '46000', 'Gotham', '111111111', '222222222'),
|
||||||
|
(5, 442, 'GCR building', 'Bristol district', 1, '46000', 'Gotham', '111111111', '222222222'),
|
||||||
|
(6, 442, 'The Gotham Tonight building', 'Bristol district', 1, '46000', 'Gotham', '111111111', '222222222');
|
||||||
|
|
||||||
INSERT INTO `vn`.`supplierContact`(`id`, `supplierFk`, `phone`, `mobile`, `email`, `observation`, `name`)
|
INSERT INTO `vn`.`supplierContact`(`id`, `supplierFk`, `phone`, `mobile`, `email`, `observation`, `name`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 1, 123121212, 654789123, 'supplier1@email.es', 'observation1', 'the boss'),
|
(1, 1, 123121212, 654789123, 'supplier1@email.es', 'observation1', 'the boss'),
|
||||||
|
@ -966,6 +968,10 @@ INSERT INTO `vn`.`packaging`(`id`, `volume`, `width`, `height`, `depth`, `isPack
|
||||||
('cc', 1640038.00, 56.00, 220.00, 128.00, 1, util.VN_CURDATE(), 15, 90.00),
|
('cc', 1640038.00, 56.00, 220.00, 128.00, 1, util.VN_CURDATE(), 15, 90.00),
|
||||||
('pallet 100', 2745600.00, 100.00, 220.00, 120.00, 1, util.VN_CURDATE(), 16, 0.00);
|
('pallet 100', 2745600.00, 100.00, 220.00, 120.00, 1, util.VN_CURDATE(), 16, 0.00);
|
||||||
|
|
||||||
|
INSERT INTO `vn`.`packagingConfig`(`upperGap`, `defaultSmallPackageFk`, `defaultBigPackageFk`)
|
||||||
|
VALUES
|
||||||
|
('10', 1, 'pallet 100');
|
||||||
|
|
||||||
INSERT INTO `vn`.`expeditionStateType`(`id`, `description`, `code`)
|
INSERT INTO `vn`.`expeditionStateType`(`id`, `description`, `code`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'En reparto', 'ON DELIVERY'),
|
(1, 'En reparto', 'ON DELIVERY'),
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -45,12 +45,12 @@ TABLES=(
|
||||||
alertLevel
|
alertLevel
|
||||||
bookingPlanner
|
bookingPlanner
|
||||||
businessType
|
businessType
|
||||||
cplusInvoiceType472
|
siiTypeInvoiceIn
|
||||||
siiTypeInvoiceOut
|
siiTypeInvoiceOut
|
||||||
cplusRectificationType
|
cplusRectificationType
|
||||||
cplusSubjectOp
|
cplusSubjectOp
|
||||||
cplusTaxBreak
|
cplusTaxBreak
|
||||||
cplusTrascendency472
|
siiTrascendencyInvoiceIn
|
||||||
claimResponsible
|
claimResponsible
|
||||||
claimReason
|
claimReason
|
||||||
claimRedelivery
|
claimRedelivery
|
||||||
|
@ -68,6 +68,8 @@ TABLES=(
|
||||||
volumeConfig
|
volumeConfig
|
||||||
workCenter
|
workCenter
|
||||||
companyI18n
|
companyI18n
|
||||||
|
workerTimeControlError
|
||||||
|
silexACL
|
||||||
)
|
)
|
||||||
dump_tables ${TABLES[@]}
|
dump_tables ${TABLES[@]}
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,7 @@ export default {
|
||||||
adController: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adController"]',
|
adController: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adController"]',
|
||||||
adUser: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adUser"]',
|
adUser: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adUser"]',
|
||||||
adPassword: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adPassword"]',
|
adPassword: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.adPassword"]',
|
||||||
|
userDn: 'vn-account-samba vn-textfield[ng-model="$ctrl.config.userDn"]',
|
||||||
verifyCert: 'vn-account-samba vn-check[ng-model="$ctrl.config.verifyCert"]',
|
verifyCert: 'vn-account-samba vn-check[ng-model="$ctrl.config.verifyCert"]',
|
||||||
save: 'vn-account-samba vn-submit'
|
save: 'vn-account-samba vn-submit'
|
||||||
},
|
},
|
||||||
|
|
|
@ -22,7 +22,7 @@ describe('Travel basic data path', () => {
|
||||||
await page.waitForState('travel.card.basicData');
|
await page.waitForState('travel.card.basicData');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set a wrong delivery date then receive an error on submit', async() => {
|
it('should throw error if try move a travel with entries', async() => {
|
||||||
const lastMonth = Date.vnNew();
|
const lastMonth = Date.vnNew();
|
||||||
lastMonth.setMonth(lastMonth.getMonth() - 1);
|
lastMonth.setMonth(lastMonth.getMonth() - 1);
|
||||||
|
|
||||||
|
@ -30,6 +30,23 @@ describe('Travel basic data path', () => {
|
||||||
await page.waitToClick(selectors.travelBasicData.save);
|
await page.waitToClick(selectors.travelBasicData.save);
|
||||||
const message = await page.waitForSnackbar();
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
|
expect(message.text).toContain('Cannot past travels with entries');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should set a wrong delivery date then receive an error on submit', async() => {
|
||||||
|
await page.loginAndModule('buyer', 'travel');
|
||||||
|
await page.write(selectors.travelIndex.generalSearchFilter, '4');
|
||||||
|
await page.keyboard.press('Enter');
|
||||||
|
await page.accessToSection('travel.card.basicData');
|
||||||
|
await page.waitForState('travel.card.basicData');
|
||||||
|
|
||||||
|
const lastMonth = Date.vnNew();
|
||||||
|
lastMonth.setMonth(lastMonth.getMonth() - 2);
|
||||||
|
|
||||||
|
await page.pickDate(selectors.travelBasicData.deliveryDate, lastMonth);
|
||||||
|
await page.waitToClick(selectors.travelBasicData.save);
|
||||||
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
expect(message.text).toContain('Landing cannot be lesser than shipment');
|
expect(message.text).toContain('Landing cannot be lesser than shipment');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -39,7 +56,7 @@ describe('Travel basic data path', () => {
|
||||||
await page.waitToClick(selectors.travelBasicData.undoChanges);
|
await page.waitToClick(selectors.travelBasicData.undoChanges);
|
||||||
const result = await page.waitToGetProperty(selectors.travelBasicData.reference, 'value');
|
const result = await page.waitToGetProperty(selectors.travelBasicData.reference, 'value');
|
||||||
|
|
||||||
expect(result).toEqual('third travel');
|
expect(result).toEqual('fourth travel');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should now edit the whole form then save', async() => {
|
it('should now edit the whole form then save', async() => {
|
||||||
|
|
|
@ -23,18 +23,6 @@ describe('Account Accounts path', () => {
|
||||||
expect(message.text).toContain('Roles synchronized!');
|
expect(message.text).toContain('Roles synchronized!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should sync user', async() => {
|
|
||||||
await page.waitToClick(selectors.accountAccounts.syncUser);
|
|
||||||
await page.write(selectors.accountAccounts.syncUserName, 'sysadmin');
|
|
||||||
await page.write(selectors.accountAccounts.syncUserPassword, 'nightmare');
|
|
||||||
|
|
||||||
await page.waitToClick(selectors.accountAccounts.buttonAccept);
|
|
||||||
|
|
||||||
const message = await page.waitForSnackbar();
|
|
||||||
|
|
||||||
expect(message.text).toContain('User synchronized!');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should relogin', async() => {
|
it('should relogin', async() => {
|
||||||
await page.loginAndModule('sysadmin', 'account');
|
await page.loginAndModule('sysadmin', 'account');
|
||||||
await page.accessToSection('account.accounts');
|
await page.accessToSection('account.accounts');
|
||||||
|
|
|
@ -20,8 +20,9 @@ describe('Account Samba path', () => {
|
||||||
await page.waitToClick(selectors.accountSamba.checkEnable);
|
await page.waitToClick(selectors.accountSamba.checkEnable);
|
||||||
await page.write(selectors.accountSamba.adDomain, '1234');
|
await page.write(selectors.accountSamba.adDomain, '1234');
|
||||||
await page.write(selectors.accountSamba.adController, '1234');
|
await page.write(selectors.accountSamba.adController, '1234');
|
||||||
await page.write(selectors.accountSamba.adUser, 'nightmare');
|
await page.write(selectors.accountSamba.adUser, 'sysadmin');
|
||||||
await page.write(selectors.accountSamba.adPassword, 'sysadmin');
|
await page.write(selectors.accountSamba.adPassword, 'nightmare');
|
||||||
|
await page.write(selectors.accountSamba.userDn, 'testDn');
|
||||||
await page.waitToClick(selectors.accountSamba.verifyCert);
|
await page.waitToClick(selectors.accountSamba.verifyCert);
|
||||||
await page.waitToClick(selectors.accountSamba.save);
|
await page.waitToClick(selectors.accountSamba.save);
|
||||||
|
|
||||||
|
|
|
@ -197,5 +197,7 @@
|
||||||
"Booking completed": "Booking complete",
|
"Booking completed": "Booking complete",
|
||||||
"The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation",
|
"The ticket is in preparation": "The ticket [{{ticketId}}]({{{ticketUrl}}}) of the sales person {{salesPersonId}} is in preparation",
|
||||||
"You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
|
"You can only add negative amounts in refund tickets": "You can only add negative amounts in refund tickets",
|
||||||
"Try again": "Try again"
|
"Try again": "Try again",
|
||||||
|
"keepPrice": "keepPrice",
|
||||||
|
"Cannot past travels with entries": "Cannot past travels with entries"
|
||||||
}
|
}
|
|
@ -327,5 +327,6 @@
|
||||||
"The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada",
|
"The notification subscription of this worker cant be modified": "La subscripción a la notificación de este trabajador no puede ser modificada",
|
||||||
"User disabled": "Usuario desactivado",
|
"User disabled": "Usuario desactivado",
|
||||||
"The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima",
|
"The amount cannot be less than the minimum": "La cantidad no puede ser menor que la cantidad mínima",
|
||||||
"quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima"
|
"quantityLessThanMin": "La cantidad no puede ser menor que la cantidad mínima",
|
||||||
|
"Cannot past travels with entries": "No se pueden pasar envíos con entradas"
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,12 +82,15 @@ module.exports = Self => {
|
||||||
if (args.zoneFk) {
|
if (args.zoneFk) {
|
||||||
let stmts = [];
|
let stmts = [];
|
||||||
stmts.push(new ParameterizedSQL('CALL vn.zone_getPostalCode(?)', [args.zoneFk]));
|
stmts.push(new ParameterizedSQL('CALL vn.zone_getPostalCode(?)', [args.zoneFk]));
|
||||||
stmts.push(`SELECT name FROM tmp.zoneNodes`);
|
stmts.push(`
|
||||||
|
SELECT zn.geoFk, zn.name
|
||||||
|
FROM tmp.zoneNodes zn
|
||||||
|
JOIN zone z ON z.id = zn.zoneFk`);
|
||||||
stmts.push(`DROP TEMPORARY TABLE tmp.zoneNodes`);
|
stmts.push(`DROP TEMPORARY TABLE tmp.zoneNodes`);
|
||||||
const sql = ParameterizedSQL.join(stmts, ';');
|
const sql = ParameterizedSQL.join(stmts, ';');
|
||||||
const [results] = await conn.executeStmt(sql);
|
const results = await conn.executeStmt(sql);
|
||||||
|
|
||||||
for (let result of results)
|
for (let result of results[1])
|
||||||
postalCode.push(result.name);
|
postalCode.push(result.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -163,19 +163,16 @@ module.exports = Self => {
|
||||||
const stmts = [];
|
const stmts = [];
|
||||||
let stmt;
|
let stmt;
|
||||||
|
|
||||||
stmts.push('DROP TEMPORARY TABLE IF EXISTS tmp.filter');
|
|
||||||
|
|
||||||
stmts.push(`SET @_optimizer_search_depth = @@optimizer_search_depth`);
|
stmts.push(`SET @_optimizer_search_depth = @@optimizer_search_depth`);
|
||||||
stmts.push(`SET SESSION optimizer_search_depth = 0`);
|
stmts.push(`SET SESSION optimizer_search_depth = 0`);
|
||||||
|
|
||||||
stmt = new ParameterizedSQL(
|
stmt = new ParameterizedSQL(`
|
||||||
`CREATE TEMPORARY TABLE tmp.filter
|
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
|
||||||
(PRIMARY KEY (id))
|
(PRIMARY KEY (id))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT
|
SELECT t.id,
|
||||||
t.id,
|
|
||||||
t.shipped,
|
t.shipped,
|
||||||
CAST(DATE(t.shipped) AS CHAR) AS shippedDate,
|
CAST(DATE(t.shipped) AS CHAR) shippedDate,
|
||||||
t.nickname,
|
t.nickname,
|
||||||
t.refFk,
|
t.refFk,
|
||||||
t.routeFk,
|
t.routeFk,
|
||||||
|
@ -183,27 +180,27 @@ module.exports = Self => {
|
||||||
t.clientFk,
|
t.clientFk,
|
||||||
t.totalWithoutVat,
|
t.totalWithoutVat,
|
||||||
t.totalWithVat,
|
t.totalWithVat,
|
||||||
io.id AS invoiceOutId,
|
io.id invoiceOutId,
|
||||||
a.provinceFk,
|
a.provinceFk,
|
||||||
p.name AS province,
|
p.name province,
|
||||||
w.name AS warehouse,
|
w.name warehouse,
|
||||||
am.name AS agencyMode,
|
am.name agencyMode,
|
||||||
am.id AS agencyModeFk,
|
am.id agencyModeFk,
|
||||||
st.name AS state,
|
st.name state,
|
||||||
wk.lastName AS salesPerson,
|
wk.lastName salesPerson,
|
||||||
ts.stateFk AS stateFk,
|
ts.stateFk stateFk,
|
||||||
ts.alertLevel AS alertLevel,
|
ts.alertLevel alertLevel,
|
||||||
ts.code AS alertLevelCode,
|
ts.code alertLevelCode,
|
||||||
u.name AS userName,
|
u.name userName,
|
||||||
c.salesPersonFk,
|
c.salesPersonFk,
|
||||||
c.credit,
|
c.credit,
|
||||||
z.hour AS zoneLanding,
|
z.hour zoneLanding,
|
||||||
z.name AS zoneName,
|
z.name zoneName,
|
||||||
z.id AS zoneFk,
|
z.id zoneFk,
|
||||||
st.classColor,
|
st.classColor,
|
||||||
TIME_FORMAT(t.shipped, '%H:%i') AS preparationHour,
|
TIME_FORMAT(t.shipped, '%H:%i') preparationHour,
|
||||||
TIME_FORMAT(z.hour, '%H:%i') AS theoreticalhour,
|
TIME_FORMAT(z.hour, '%H:%i') theoreticalhour,
|
||||||
TIME_FORMAT(zed.etc, '%H:%i') AS practicalHour
|
TIME_FORMAT(zed.etc, '%H:%i') practicalHour
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
LEFT JOIN invoiceOut io ON t.refFk = io.ref
|
LEFT JOIN invoiceOut io ON t.refFk = io.ref
|
||||||
LEFT JOIN zone z ON z.id = t.zoneFk
|
LEFT JOIN zone z ON z.id = t.zoneFk
|
||||||
|
@ -216,7 +213,18 @@ module.exports = Self => {
|
||||||
LEFT JOIN client c ON c.id = t.clientFk
|
LEFT JOIN client c ON c.id = t.clientFk
|
||||||
LEFT JOIN worker wk ON wk.id = c.salesPersonFk
|
LEFT JOIN worker wk ON wk.id = c.salesPersonFk
|
||||||
LEFT JOIN account.user u ON u.id = wk.id
|
LEFT JOIN account.user u ON u.id = wk.id
|
||||||
LEFT JOIN zoneEstimatedDelivery zed ON zed.zoneFk = t.zoneFk`);
|
LEFT JOIN (
|
||||||
|
SELECT zoneFk,
|
||||||
|
CAST(
|
||||||
|
IFNULL(zoneClosureHour, zoneHour) +
|
||||||
|
SUM(IF(hasToRecalcPrice, volume, 0)) * 60 /
|
||||||
|
GREATEST(IFNULL(m3, 0), IFNULL(minSpeed, 0))
|
||||||
|
AS time
|
||||||
|
) etc
|
||||||
|
FROM zoneEstimatedDelivery
|
||||||
|
GROUP BY zoneFk
|
||||||
|
) zed ON zed.zoneFk = t.zoneFk
|
||||||
|
`);
|
||||||
|
|
||||||
if (args.orderFk) {
|
if (args.orderFk) {
|
||||||
stmt.merge({
|
stmt.merge({
|
||||||
|
|
|
@ -140,12 +140,11 @@ module.exports = Self => {
|
||||||
const stmts = [];
|
const stmts = [];
|
||||||
let stmt;
|
let stmt;
|
||||||
|
|
||||||
stmt = new ParameterizedSQL(
|
stmt = new ParameterizedSQL(`
|
||||||
`CREATE OR REPLACE TEMPORARY TABLE tmp.filter
|
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
|
||||||
(INDEX (id))
|
(INDEX (id))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT
|
SELECT o.id,
|
||||||
o.id,
|
|
||||||
o.total,
|
o.total,
|
||||||
o.date_send landed,
|
o.date_send landed,
|
||||||
o.date_make created,
|
o.date_make created,
|
||||||
|
@ -163,7 +162,7 @@ module.exports = Self => {
|
||||||
zed.zoneFk,
|
zed.zoneFk,
|
||||||
zed.hourTheoretical,
|
zed.hourTheoretical,
|
||||||
zed.hourEffective,
|
zed.hourEffective,
|
||||||
am.name AS agencyName
|
am.name agencyName
|
||||||
FROM hedera.order o
|
FROM hedera.order o
|
||||||
LEFT JOIN address a ON a.id = o.address_id
|
LEFT JOIN address a ON a.id = o.address_id
|
||||||
LEFT JOIN agencyMode am ON am.id = o.agency_id
|
LEFT JOIN agencyMode am ON am.id = o.agency_id
|
||||||
|
@ -173,7 +172,24 @@ module.exports = Self => {
|
||||||
LEFT JOIN company co ON co.id = o.company_id
|
LEFT JOIN company co ON co.id = o.company_id
|
||||||
LEFT JOIN orderTicket ot ON ot.orderFk = o.id
|
LEFT JOIN orderTicket ot ON ot.orderFk = o.id
|
||||||
LEFT JOIN ticket t ON t.id = ot.ticketFk
|
LEFT JOIN ticket t ON t.id = ot.ticketFk
|
||||||
LEFT JOIN zoneEstimatedDelivery zed ON zed.zoneFk = t.zoneFk`);
|
LEFT JOIN (
|
||||||
|
SELECT zoneFk,
|
||||||
|
CAST(
|
||||||
|
util.VN_CURDATE() +
|
||||||
|
INTERVAL HOUR(IFNULL(zoneClosureHour, zoneHour)) * 60 +
|
||||||
|
MINUTE(IFNULL(zoneClosureHour, zoneHour)) MINUTE
|
||||||
|
AS time
|
||||||
|
) hourTheoretical,
|
||||||
|
CAST(
|
||||||
|
IFNULL(zoneClosureHour, zoneHour) +
|
||||||
|
SUM(IF(hasToRecalcPrice, volume, 0)) * 60 /
|
||||||
|
GREATEST(IFNULL(m3, 0), IFNULL(minSpeed, 0))
|
||||||
|
AS time
|
||||||
|
) hourEffective
|
||||||
|
FROM zoneEstimatedDelivery
|
||||||
|
GROUP BY zoneFk
|
||||||
|
) zed ON zed.zoneFk = t.zoneFk
|
||||||
|
`);
|
||||||
|
|
||||||
stmt.merge(conn.makeWhere(filter.where));
|
stmt.merge(conn.makeWhere(filter.where));
|
||||||
stmt.merge(`GROUP BY id`);
|
stmt.merge(`GROUP BY id`);
|
||||||
|
|
|
@ -3,33 +3,30 @@ const LoopBackContext = require('loopback-context');
|
||||||
|
|
||||||
describe('ticket addSale()', () => {
|
describe('ticket addSale()', () => {
|
||||||
const ticketId = 13;
|
const ticketId = 13;
|
||||||
beforeAll(async() => {
|
function getActiveCtx(userId) {
|
||||||
const activeCtx = {
|
return {
|
||||||
accessToken: {userId: 9},
|
accessToken: {userId},
|
||||||
http: {
|
http: {
|
||||||
req: {
|
req: {
|
||||||
headers: {origin: 'http://localhost'}
|
accessToken: {userId},
|
||||||
|
headers: {origin: 'http://localhost'},
|
||||||
|
__: () => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
}
|
||||||
active: activeCtx
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create a new sale for the ticket with id 13', async() => {
|
it('should create a new sale for the ticket with id 13', async() => {
|
||||||
const tx = await models.Ticket.beginTransaction({});
|
const tx = await models.Ticket.beginTransaction({});
|
||||||
|
const activeCtx = getActiveCtx(9);
|
||||||
|
const ctx = activeCtx.http;
|
||||||
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||||
|
active: activeCtx
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
const ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
headers: {origin: 'localhost:5000'},
|
|
||||||
__: () => {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const itemId = 4;
|
const itemId = 4;
|
||||||
const quantity = 10;
|
const quantity = 10;
|
||||||
const newSale = await models.Ticket.addSale(ctx, ticketId, itemId, quantity, options);
|
const newSale = await models.Ticket.addSale(ctx, ticketId, itemId, quantity, options);
|
||||||
|
@ -45,19 +42,16 @@ describe('ticket addSale()', () => {
|
||||||
|
|
||||||
it('should not be able to add a sale if the item quantity is not available', async() => {
|
it('should not be able to add a sale if the item quantity is not available', async() => {
|
||||||
const tx = await models.Ticket.beginTransaction({});
|
const tx = await models.Ticket.beginTransaction({});
|
||||||
|
const activeCtx = getActiveCtx(18);
|
||||||
|
const ctx = activeCtx.http;
|
||||||
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||||
|
active: activeCtx
|
||||||
|
});
|
||||||
|
|
||||||
let error;
|
let error;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
const ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
headers: {origin: 'localhost:5000'},
|
|
||||||
__: () => {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const itemId = 11;
|
const itemId = 11;
|
||||||
const quantity = 10;
|
const quantity = 10;
|
||||||
|
|
||||||
|
@ -74,18 +68,16 @@ describe('ticket addSale()', () => {
|
||||||
|
|
||||||
it('should not be able to add a sale if the ticket is not editable', async() => {
|
it('should not be able to add a sale if the ticket is not editable', async() => {
|
||||||
const tx = await models.Ticket.beginTransaction({});
|
const tx = await models.Ticket.beginTransaction({});
|
||||||
|
const activeCtx = getActiveCtx(9);
|
||||||
|
const ctx = activeCtx.http;
|
||||||
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||||
|
active: activeCtx
|
||||||
|
});
|
||||||
|
|
||||||
let error;
|
let error;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
const ctx = {
|
|
||||||
req: {
|
|
||||||
accessToken: {userId: 9},
|
|
||||||
headers: {origin: 'localhost:5000'},
|
|
||||||
__: () => {}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const notEditableTicketId = 1;
|
const notEditableTicketId = 1;
|
||||||
const itemId = 4;
|
const itemId = 4;
|
||||||
const quantity = 10;
|
const quantity = 10;
|
||||||
|
|
|
@ -9,7 +9,7 @@ describe('ticket getSalesPersonMana()', () => {
|
||||||
|
|
||||||
const mana = await models.Ticket.getSalesPersonMana(1, options);
|
const mana = await models.Ticket.getSalesPersonMana(1, options);
|
||||||
|
|
||||||
expect(mana).toEqual(124);
|
expect(mana).toEqual(73);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -37,17 +37,8 @@ class Controller extends SearchPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
applyFilters(param) {
|
applyFilters(param) {
|
||||||
if (typeof this.filter.scopeDays === 'number') {
|
if (this.filter?.search)
|
||||||
const today = Date.vnNew();
|
delete this.filter.scopeDays;
|
||||||
const shippedFrom = new Date(today.getTime());
|
|
||||||
shippedFrom.setDate(today.getDate() - 30);
|
|
||||||
shippedFrom.setHours(0, 0, 0, 0);
|
|
||||||
|
|
||||||
const shippedTo = new Date(today.getTime());
|
|
||||||
shippedTo.setDate(shippedTo.getDate() + this.filter.scopeDays);
|
|
||||||
shippedTo.setHours(23, 59, 59, 999);
|
|
||||||
Object.assign(this.filter, {shippedFrom, shippedTo});
|
|
||||||
}
|
|
||||||
|
|
||||||
this.model.applyFilter({}, this.filter)
|
this.model.applyFilter({}, this.filter)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
|
|
@ -11,28 +11,24 @@
|
||||||
"id": true,
|
"id": true,
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
"hourTheoretical": {
|
"zoneClosureHour": {
|
||||||
"type": "date"
|
"type": "date"
|
||||||
},
|
},
|
||||||
"totalVolume": {
|
"zoneHour": {
|
||||||
|
"type": "date"
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
"remainingVolume": {
|
"hasToRecalcPrice": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"m3": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
},
|
||||||
"speed": {
|
"minSpeed": {
|
||||||
"type": "number"
|
"type": "number"
|
||||||
},
|
|
||||||
"hourEffective": {
|
|
||||||
"type": "date"
|
|
||||||
},
|
|
||||||
"minutesLess": {
|
|
||||||
"type": "date"
|
|
||||||
},
|
|
||||||
"etc": {
|
|
||||||
"type": "date"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
"zone": {
|
"zone": {
|
||||||
|
|
|
@ -56,9 +56,6 @@ html {
|
||||||
margin-left: 35px;
|
margin-left: 35px;
|
||||||
float:left;
|
float:left;
|
||||||
}
|
}
|
||||||
#barcode{
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#right {
|
#right {
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div v-html="getBarcode(labelData.palletFk)" id="barcode"></div>
|
|
||||||
<table v-for="labelData in labelsData" class="zoneTable">
|
<table v-for="labelData in labelsData" class="zoneTable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr v-if="!labelData.isMatch" id="black">
|
<tr v-if="!labelData.isMatch" id="black">
|
||||||
|
|
|
@ -39,19 +39,5 @@ module.exports = {
|
||||||
const data = String(id);
|
const data = String(id);
|
||||||
return qrcode.toDataURL(data, {margin: 0});
|
return qrcode.toDataURL(data, {margin: 0});
|
||||||
},
|
},
|
||||||
getBarcode(id) {
|
|
||||||
const xmlSerializer = new XMLSerializer();
|
|
||||||
const document = new DOMImplementation().createDocument('http://www.w3.org/1999/xhtml', 'html', null);
|
|
||||||
const svgNode = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
||||||
|
|
||||||
jsBarcode(svgNode, id, {
|
|
||||||
xmlDocument: document,
|
|
||||||
format: 'code128',
|
|
||||||
displayValue: false,
|
|
||||||
width: 6,
|
|
||||||
height: 90,
|
|
||||||
});
|
|
||||||
return xmlSerializer.serializeToString(svgNode);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue