Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into dev
gitea/salix/dev This commit looks good
Details
gitea/salix/dev This commit looks good
Details
This commit is contained in:
commit
d90ebbef2e
|
@ -51,7 +51,12 @@
|
||||||
"type": "hasOne",
|
"type": "hasOne",
|
||||||
"model": "EmailUser",
|
"model": "EmailUser",
|
||||||
"foreignKey": "userFk"
|
"foreignKey": "userFk"
|
||||||
}
|
},
|
||||||
|
"worker": {
|
||||||
|
"type": "hasOne",
|
||||||
|
"model": "Worker",
|
||||||
|
"foreignKey": "userFk"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"acls": [
|
"acls": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -58,11 +58,11 @@ INSERT INTO `vn`.`country`(`id`, `country`, `isUeeMember`, `code`, `currencyFk`,
|
||||||
|
|
||||||
INSERT INTO `vn`.`warehouse`(`id`, `name`, `isComparative`, `isInventory`, `hasAvailable`, `isManaged`)
|
INSERT INTO `vn`.`warehouse`(`id`, `name`, `isComparative`, `isInventory`, `hasAvailable`, `isManaged`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'Warehouse One', 0, 1, 1, 1),
|
(1, 'Warehouse One', 1, 1, 1, 1),
|
||||||
(2, 'Warehouse Two', 0, 1, 1, 1),
|
(2, 'Warehouse Two', 1, 1, 1, 1),
|
||||||
(3, 'Warehouse Three', 1, 1, 1, 1),
|
(3, 'Warehouse Three', 1, 1, 1, 1),
|
||||||
(4, 'Warehouse Four', 1, 1, 1, 1),
|
(4, 'Warehouse Four', 1, 1, 1, 1),
|
||||||
(5, 'Warehouse Five', 1, 0, 1, 0);
|
(5, 'Warehouse Five', 1, 1, 1, 1);
|
||||||
|
|
||||||
INSERT INTO `vn`.`warehouseAlias`(`id`, `name`)
|
INSERT INTO `vn`.`warehouseAlias`(`id`, `name`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -566,9 +566,9 @@ INSERT INTO `vn`.`itemType`(`id`, `code`, `name`, `categoryFk`, `life`,`workerFk
|
||||||
|
|
||||||
INSERT INTO `vn`.`ink`(`id`, `name`, `picture`, `showOrder`)
|
INSERT INTO `vn`.`ink`(`id`, `name`, `picture`, `showOrder`)
|
||||||
VALUES
|
VALUES
|
||||||
('YEL', 'Yellow', 1 , 1),
|
('YEL', 'Yellow', 1, 1),
|
||||||
('BLU', 'Blue', 1 , 2),
|
('BLU', 'Blue', 1, 2),
|
||||||
('RED', 'Red', 1 , 3);
|
('RED', 'Red', 1, 3);
|
||||||
|
|
||||||
INSERT INTO `vn`.`origin`(`id`,`code`, `name`)
|
INSERT INTO `vn`.`origin`(`id`,`code`, `name`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -1062,10 +1062,10 @@ INSERT INTO `vn`.`buy`(`id`,`entryFk`,`itemFk`,`buyingValue`,`quantity`,`package
|
||||||
(9, 4, 4, 1.25, 1000, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0.00, NULL, 0, 1, 0, CURDATE()),
|
(9, 4, 4, 1.25, 1000, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0.00, NULL, 0, 1, 0, CURDATE()),
|
||||||
(10, 5, 1, 50, 10, 4, 1, 0.000, 0.000, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0.00, NULL, 0, 1, 0, CURDATE()),
|
(10, 5, 1, 50, 10, 4, 1, 0.000, 0.000, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0.00, NULL, 0, 1, 0, CURDATE()),
|
||||||
(11, 5, 4, 1.25, 10, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0.00, NULL, 0, 1, 0, CURDATE()),
|
(11, 5, 4, 1.25, 10, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0.00, NULL, 0, 1, 0, CURDATE()),
|
||||||
(12, 6, 4, 1.25, 1, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0.00, NULL, 0, 1, 0, CURDATE()),
|
(12, 6, 4, 1.25, 0, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0.00, NULL, 0, 1, 0, CURDATE()),
|
||||||
(13, 7, 1, 50, 1, 4, 1, 0.000, 0.000, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0.00, NULL, 0, 1, 0, CURDATE()),
|
(13, 7, 1, 50, 0, 3, 1, 0.000, 0.000, 0.000, 1, 1, 1, NULL, 0.00, 99.6, 99.4, 0.00, NULL, 0, 1, 0, CURDATE()),
|
||||||
(14, 7, 2, 5, 100, 1, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 7.30, 7.00, 0.00, NULL, 0, 1, 0, CURDATE()),
|
(14, 7, 2, 5, 0, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 7.30, 7.00, 0.00, NULL, 0, 1, 0, CURDATE()),
|
||||||
(15, 7, 4, 1.25, 10, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0.00, NULL, 0, 1, 0, CURDATE());
|
(15, 7, 4, 1.25, 0, 3, 1, 0.000, 0.000, 0.000, 10, 10, 1, NULL, 0.00, 1.75, 1.67, 0.00, NULL, 0, 1, 0, CURDATE());
|
||||||
|
|
||||||
INSERT INTO `vn2008`.`tblContadores`(`id`,`FechaInventario`)
|
INSERT INTO `vn2008`.`tblContadores`(`id`,`FechaInventario`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -1343,10 +1343,9 @@ INSERT INTO `vn`.`claim`(`id`, `ticketCreated`, `claimStateFk`, `observation`, `
|
||||||
INSERT INTO `vn`.`claimBeginning`(`id`, `claimFk`, `saleFk`, `quantity`)
|
INSERT INTO `vn`.`claimBeginning`(`id`, `claimFk`, `saleFk`, `quantity`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 1, 7, 5),
|
(1, 1, 7, 5),
|
||||||
(2, 1, 8, 4),
|
(2, 2, 10, 10),
|
||||||
(3, 2, 10, 10),
|
(3, 3, 22, 1),
|
||||||
(4, 3, 22, 1),
|
(4, 4, 13, 5);
|
||||||
(5, 4, 13, 5);
|
|
||||||
|
|
||||||
INSERT INTO `vn`.`claimDestination`(`id`, `description`, `addressFk`)
|
INSERT INTO `vn`.`claimDestination`(`id`, `description`, `addressFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -1460,7 +1459,7 @@ INSERT INTO `postgresql`.`person`(`person_id`, `name`, `nickname`, `nif`, `first
|
||||||
|
|
||||||
INSERT INTO `postgresql`.`person`(`person_id`, `name`, `nickname`, `nif`, `firstname`, `id_trabajador`)
|
INSERT INTO `postgresql`.`person`(`person_id`, `name`, `nickname`, `nif`, `firstname`, `id_trabajador`)
|
||||||
VALUES
|
VALUES
|
||||||
(1000, 'VERDNATURA LEVANTE SL', 'VNL', 'B78945612', NULL, NULL);
|
(1000, 'VERDNATURA LEVANTE SL', 'VNL', 'B78945612', NULL, NULL);
|
||||||
|
|
||||||
INSERT INTO `postgresql`.`profile`(`profile_id`, `person_id`, `profile_type_id`)
|
INSERT INTO `postgresql`.`profile`(`profile_id`, `person_id`, `profile_type_id`)
|
||||||
SELECT p.person_id, p.person_id, 1
|
SELECT p.person_id, p.person_id, 1
|
||||||
|
|
|
@ -508,7 +508,9 @@ export default {
|
||||||
itemDescriptorPopover: 'vn-claim-summary vn-item-descriptor-popover > vn-popover',
|
itemDescriptorPopover: 'vn-claim-summary vn-item-descriptor-popover > vn-popover',
|
||||||
itemDescriptorPopoverItemDiaryButton: 'vn-claim-summary > vn-item-descriptor-popover a[href="#!/item/2/diary"]',
|
itemDescriptorPopoverItemDiaryButton: 'vn-claim-summary > vn-item-descriptor-popover a[href="#!/item/2/diary"]',
|
||||||
firstDevelopmentWorker: 'vn-claim-summary vn-horizontal > vn-auto:nth-child(5) > vn-table > div > vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(4) > span',
|
firstDevelopmentWorker: 'vn-claim-summary vn-horizontal > vn-auto:nth-child(5) > vn-table > div > vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(4) > span',
|
||||||
firstdevelopmentWorkerGoToClientButton: 'vn-claim-summary > vn-worker-descriptor-popover > vn-popover vn-worker-descriptor div.quicklinks > a[href="#!/client/21/summary"]'
|
firstDevelopmentWorkerGoToClientButton: 'vn-claim-summary > vn-worker-descriptor-popover > vn-popover vn-worker-descriptor div.quicklinks > a[href="#!/client/21/summary"]',
|
||||||
|
firstActionTicketId: 'vn-claim-summary > vn-card > div > vn-horizontal > vn-auto:nth-child(6) > vn-table > div > vn-tbody > vn-tr > vn-td:nth-child(2) > span',
|
||||||
|
firstActionTicketDescriptor: 'vn-claim-summary > vn-ticket-descriptor-popover > vn-popover > div > div.content > vn-ticket-descriptor'
|
||||||
},
|
},
|
||||||
claimBasicData: {
|
claimBasicData: {
|
||||||
claimStateAutocomplete: 'vn-claim-basic-data vn-autocomplete[field="$ctrl.claim.claimStateFk"]',
|
claimStateAutocomplete: 'vn-claim-basic-data vn-autocomplete[field="$ctrl.claim.claimStateFk"]',
|
||||||
|
@ -517,10 +519,13 @@ export default {
|
||||||
saveButton: `${components.vnSubmit}`
|
saveButton: `${components.vnSubmit}`
|
||||||
},
|
},
|
||||||
claimDetail: {
|
claimDetail: {
|
||||||
|
secondItemDiscount: 'vn-claim-detail > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(2) > vn-td:nth-child(7) > span',
|
||||||
|
discountInput: 'vn-claim-detail vn-popover vn-input-number[model="$ctrl.newDiscount"] > div > div > div.infix > input',
|
||||||
|
discoutPopoverMana: 'vn-claim-detail > vn-popover > div > div.content > div > vn-horizontal > h5',
|
||||||
addItemButton: 'vn-claim-detail a vn-float-button',
|
addItemButton: 'vn-claim-detail a vn-float-button',
|
||||||
firstClaimableSaleFromTicket: 'vn-claim-detail > vn-dialog vn-tbody > vn-tr',
|
firstClaimableSaleFromTicket: 'vn-claim-detail > vn-dialog vn-tbody > vn-tr',
|
||||||
claimDetailLine: 'vn-claim-detail > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr',
|
claimDetailLine: 'vn-claim-detail > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr',
|
||||||
secondItemQuantityInput: 'vn-claim-detail vn-tr:nth-child(2) vn-input-number[model="saleClaimed.quantity"] input',
|
firstItemQuantityInput: 'vn-claim-detail vn-tr:nth-child(1) vn-input-number[model="saleClaimed.quantity"] input',
|
||||||
totalClaimed: 'vn-claim-detail > vn-vertical > vn-card > div > vn-vertical > vn-horizontal > div > vn-label-value:nth-child(2) > section > span',
|
totalClaimed: 'vn-claim-detail > vn-vertical > vn-card > div > vn-vertical > vn-horizontal > div > vn-label-value:nth-child(2) > section > span',
|
||||||
secondItemDeleteButton: 'vn-claim-detail > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(2) > vn-td:nth-child(9) > vn-icon-button > button > vn-icon > i'
|
secondItemDeleteButton: 'vn-claim-detail > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(2) > vn-td:nth-child(9) > vn-icon-button > button > vn-icon > i'
|
||||||
},
|
},
|
||||||
|
@ -623,6 +628,7 @@ export default {
|
||||||
secondTicketPriority: 'vn-route-tickets vn-tr:nth-child(2) vn-textfield[model="ticket.priority"] input',
|
secondTicketPriority: 'vn-route-tickets vn-tr:nth-child(2) vn-textfield[model="ticket.priority"] input',
|
||||||
thirdTicketPriority: 'vn-route-tickets vn-tr:nth-child(3) vn-textfield[model="ticket.priority"] input',
|
thirdTicketPriority: 'vn-route-tickets vn-tr:nth-child(3) vn-textfield[model="ticket.priority"] input',
|
||||||
fourthTicketPriority: 'vn-route-tickets vn-tr:nth-child(4) vn-textfield[model="ticket.priority"] input',
|
fourthTicketPriority: 'vn-route-tickets vn-tr:nth-child(4) vn-textfield[model="ticket.priority"] input',
|
||||||
|
eleventhTicketPriority: 'vn-route-tickets vn-tr:nth-child(11) vn-textfield[model="ticket.priority"] input',
|
||||||
firstTicketCheckbox: 'vn-route-tickets vn-tr:nth-child(1) vn-check md-checkbox',
|
firstTicketCheckbox: 'vn-route-tickets vn-tr:nth-child(1) vn-check md-checkbox',
|
||||||
buscamanButton: 'vn-route-tickets vn-button[icon="icon-buscaman"]',
|
buscamanButton: 'vn-route-tickets vn-button[icon="icon-buscaman"]',
|
||||||
firstTicketDeleteButton: 'vn-route-tickets vn-tr:nth-child(1) vn-icon[icon="delete"]',
|
firstTicketDeleteButton: 'vn-route-tickets vn-tr:nth-child(1) vn-icon[icon="delete"]',
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
import selectors from '../../helpers/selectors.js';
|
import selectors from '../../helpers/selectors.js';
|
||||||
import createNightmare from '../../helpers/nightmare';
|
import createNightmare from '../../helpers/nightmare';
|
||||||
|
|
||||||
describe('Claim detail', () => {
|
// #1528 e2e claim/detail
|
||||||
|
xdescribe('Claim detail', () => {
|
||||||
const nightmare = createNightmare();
|
const nightmare = createNightmare();
|
||||||
|
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
nightmare
|
nightmare
|
||||||
.loginAndModule('salesPerson', 'claim')
|
.loginAndModule('salesPerson', 'claim')
|
||||||
.accessToSearchResult('4')
|
.accessToSearchResult(1)
|
||||||
.accessToSection('claim.card.detail');
|
.accessToSection('claim.card.detail');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -27,25 +28,54 @@ describe('Claim detail', () => {
|
||||||
expect(result).toEqual(2);
|
expect(result).toEqual(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should edit de second item claimed quantity', async() => {
|
it('should edit de first item claimed quantity', async() => {
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.clearInput(selectors.claimDetail.secondItemQuantityInput)
|
.clearInput(selectors.claimDetail.firstItemQuantityInput)
|
||||||
.write(selectors.claimDetail.secondItemQuantityInput, 1)
|
.write(selectors.claimDetail.firstItemQuantityInput, 4)
|
||||||
.write('body', '\u000d') // simulates enter
|
.write('body', '\u000d') // simulates enter
|
||||||
.waitForLastSnackbar();
|
.waitForLastSnackbar();
|
||||||
|
|
||||||
expect(result).toEqual('Data saved!');
|
expect(result).toEqual('Data saved!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should confirm the second item, and the claimed total were correctly edited', async() => {
|
it('should confirm the first item quantity, and the claimed total were correctly edited', async() => {
|
||||||
const claimedQuantity = await nightmare
|
const claimedQuantity = await nightmare
|
||||||
.waitToGetProperty(selectors.claimDetail.secondItemQuantityInput, 'value');
|
.waitToGetProperty(selectors.claimDetail.firstItemQuantityInput, 'value');
|
||||||
|
|
||||||
const totalClaimed = await nightmare
|
const totalClaimed = await nightmare
|
||||||
.waitToGetProperty(selectors.claimDetail.totalClaimed, 'innerText');
|
.waitToGetProperty(selectors.claimDetail.totalClaimed, 'innerText');
|
||||||
|
|
||||||
expect(claimedQuantity).toEqual('1');
|
expect(claimedQuantity).toEqual('4');
|
||||||
expect(totalClaimed).toContain('138.89');
|
expect(totalClaimed).toContain('€47.62');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should login as salesAssistant and navigate to the claim.detail section', async() => {
|
||||||
|
const url = await nightmare
|
||||||
|
.loginAndModule('salesAssistant', 'claim')
|
||||||
|
.accessToSearchResult(1)
|
||||||
|
.accessToSection('claim.card.detail')
|
||||||
|
.waitForURL('/detail')
|
||||||
|
.parsedUrl();
|
||||||
|
|
||||||
|
expect(url.hash).toContain('/detail');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should edit de second item claimed discount', async() => {
|
||||||
|
const result = await nightmare
|
||||||
|
.waitToClick(selectors.claimDetail.secondItemDiscount)
|
||||||
|
.write(selectors.claimDetail.discountInput, 100)
|
||||||
|
.write('body', '\u000d') // simulates enter
|
||||||
|
.waitForLastSnackbar();
|
||||||
|
|
||||||
|
expect(result).toEqual('Data saved!');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should check the mana is the expected one', async() => {
|
||||||
|
const result = await nightmare
|
||||||
|
.waitToClick(selectors.claimDetail.secondItemDiscount)
|
||||||
|
.waitToGetProperty(selectors.claimDetail.discoutPopoverMana, 'innerText');
|
||||||
|
|
||||||
|
expect(result).toContain('MANÁ: €106');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should delete the second item from the claim', async() => {
|
it('should delete the second item from the claim', async() => {
|
||||||
|
@ -63,11 +93,8 @@ describe('Claim detail', () => {
|
||||||
expect(result).toEqual(1);
|
expect(result).toEqual(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should login as salesAssistant to be redirected to the next claim section', async() => {
|
it('should add the deleted ticket from to the claim', async() => {
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.loginAndModule('salesAssistant', 'claim')
|
|
||||||
.accessToSearchResult('2')
|
|
||||||
.accessToSection('claim.card.detail')
|
|
||||||
.waitToClick(selectors.claimDetail.addItemButton)
|
.waitToClick(selectors.claimDetail.addItemButton)
|
||||||
.waitToClick(selectors.claimDetail.firstClaimableSaleFromTicket)
|
.waitToClick(selectors.claimDetail.firstClaimableSaleFromTicket)
|
||||||
.waitForLastSnackbar();
|
.waitForLastSnackbar();
|
||||||
|
@ -82,4 +109,13 @@ describe('Claim detail', () => {
|
||||||
|
|
||||||
expect(url.hash).toContain('development');
|
expect(url.hash).toContain('development');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should navigate back to claim.detail to confirm the claim contains now two items', async() => {
|
||||||
|
const result = await nightmare
|
||||||
|
.accessToSection('claim.card.detail')
|
||||||
|
.wait(selectors.claimDetail.claimDetailLine)
|
||||||
|
.countElement(selectors.claimDetail.claimDetailLine);
|
||||||
|
|
||||||
|
expect(result).toEqual(2);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -71,16 +71,25 @@ describe('claim Summary path', () => {
|
||||||
it(`should click on the first development worker making the worker descriptor visible`, async() => {
|
it(`should click on the first development worker making the worker descriptor visible`, async() => {
|
||||||
const visible = await nightmare
|
const visible = await nightmare
|
||||||
.waitToClick(selectors.claimSummary.firstDevelopmentWorker)
|
.waitToClick(selectors.claimSummary.firstDevelopmentWorker)
|
||||||
.wait(selectors.claimSummary.firstdevelopmentWorkerGoToClientButton)
|
.wait(selectors.claimSummary.firstDevelopmentWorkerGoToClientButton)
|
||||||
.isVisible(selectors.claimSummary.firstdevelopmentWorkerGoToClientButton);
|
.isVisible(selectors.claimSummary.firstDevelopmentWorkerGoToClientButton);
|
||||||
|
|
||||||
expect(visible).toBeTruthy();
|
expect(visible).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should check the url for the go to clientlink of the descriptor is for the right client id`, async() => {
|
it(`should check the url for the go to clientlink of the descriptor is for the right client id`, async() => {
|
||||||
const exists = await nightmare
|
const exists = await nightmare
|
||||||
.exists(selectors.claimSummary.firstdevelopmentWorkerGoToClientButton);
|
.exists(selectors.claimSummary.firstDevelopmentWorkerGoToClientButton);
|
||||||
|
|
||||||
expect(exists).toBeTruthy();
|
expect(exists).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it(`should click on the first action ticket ID making the ticket descriptor visible`, async() => {
|
||||||
|
const visible = await nightmare
|
||||||
|
.waitToClick(selectors.claimSummary.firstActionTicketId)
|
||||||
|
.wait(selectors.claimSummary.firstActionTicketDescriptor)
|
||||||
|
.isVisible(selectors.claimSummary.firstActionTicketDescriptor);
|
||||||
|
|
||||||
|
expect(visible).toBeTruthy();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,26 +1,18 @@
|
||||||
import selectors from '../../helpers/selectors.js';
|
import selectors from '../../helpers/selectors.js';
|
||||||
import createNightmare from '../../helpers/nightmare';
|
import createNightmare from '../../helpers/nightmare';
|
||||||
|
|
||||||
describe('Route basic Data path', () => {
|
// #1528 e2e claim/detail
|
||||||
|
xdescribe('Route basic Data path', () => {
|
||||||
const nightmare = createNightmare();
|
const nightmare = createNightmare();
|
||||||
|
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
nightmare
|
nightmare
|
||||||
.loginAndModule('delivery', 'route')
|
.loginAndModule('delivery', 'route')
|
||||||
.accessToSearchResult(2)
|
.accessToSearchResult(3)
|
||||||
.accessToSection('route.card.tickets');
|
.accessToSection('route.card.tickets');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should next modify the first ticket priority', async() => {
|
it('should modify the first ticket priority', async() => {
|
||||||
const result = await nightmare
|
|
||||||
.write(selectors.routeTickets.firstTicketPriority, 3)
|
|
||||||
.write('body', '\u000d') // simulates enter
|
|
||||||
.waitForLastSnackbar();
|
|
||||||
|
|
||||||
expect(result).toEqual('Data saved!');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should once more modify the first ticket priority', async() => {
|
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.write(selectors.routeTickets.firstTicketPriority, 2)
|
.write(selectors.routeTickets.firstTicketPriority, 2)
|
||||||
.write('body', '\u000d') // simulates enter
|
.write('body', '\u000d') // simulates enter
|
||||||
|
@ -29,37 +21,6 @@ describe('Route basic Data path', () => {
|
||||||
expect(result).toEqual('Data saved!');
|
expect(result).toEqual('Data saved!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should finally modify the first ticket priority', async() => {
|
|
||||||
const result = await nightmare
|
|
||||||
.write(selectors.routeTickets.firstTicketPriority, 1)
|
|
||||||
.write('body', '\u000d') // simulates enter
|
|
||||||
.waitForLastSnackbar();
|
|
||||||
|
|
||||||
expect(result).toEqual('Data saved!');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should reload the section as a pre-step to check the first ticket priority', async() => {
|
|
||||||
const result = await nightmare
|
|
||||||
.reloadSection('route.card.tickets')
|
|
||||||
.waitToGetProperty(selectors.routeTickets.firstTicketPriority, 'value');
|
|
||||||
|
|
||||||
expect(result).toEqual('1');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should confirm the second ticket priority', async() => {
|
|
||||||
const result = await nightmare
|
|
||||||
.waitToGetProperty(selectors.routeTickets.secondTicketPriority, 'value');
|
|
||||||
|
|
||||||
expect(result).toEqual('2');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should confirm the third ticket priority', async() => {
|
|
||||||
const result = await nightmare
|
|
||||||
.waitToGetProperty(selectors.routeTickets.thirdTicketPriority, 'value');
|
|
||||||
|
|
||||||
expect(result).toEqual('3');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should confirm the buscamanButton is disabled', async() => {
|
it('should confirm the buscamanButton is disabled', async() => {
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.evaluate(selector => {
|
.evaluate(selector => {
|
||||||
|
@ -69,7 +30,7 @@ describe('Route basic Data path', () => {
|
||||||
expect(result).toBeTruthy();
|
expect(result).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should check the first ticket checkbox and confirm the buscamanButton button isnt disabled anymore', async() => {
|
it('should check the first ticket checkbox and confirm the buscamanButton button is no longer disabled', async() => {
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.waitToClick(selectors.routeTickets.firstTicketCheckbox)
|
.waitToClick(selectors.routeTickets.firstTicketCheckbox)
|
||||||
.evaluate(selector => {
|
.evaluate(selector => {
|
||||||
|
@ -83,14 +44,14 @@ describe('Route basic Data path', () => {
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.waitToGetProperty(selectors.routeDescriptor.volume, 'innerText');
|
.waitToGetProperty(selectors.routeDescriptor.volume, 'innerText');
|
||||||
|
|
||||||
expect(result).toEqual('0.9 / 50 m³');
|
expect(result).toEqual('1.1 / 18 m³');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should count how many tickets are in route', async() => {
|
it('should count how many tickets are in route', async() => {
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.countElement('vn-route-tickets vn-textfield[model="ticket.priority"]');
|
.countElement('vn-route-tickets vn-textfield[model="ticket.priority"]');
|
||||||
|
|
||||||
expect(result).toEqual(3);
|
expect(result).toEqual(11);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should delete the first ticket in route', async() => {
|
it('should delete the first ticket in route', async() => {
|
||||||
|
@ -102,17 +63,26 @@ describe('Route basic Data path', () => {
|
||||||
expect(result).toEqual('Ticket removed from route');
|
expect(result).toEqual('Ticket removed from route');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should again delete the first ticket in route', async() => {
|
||||||
|
const result = await nightmare
|
||||||
|
.waitToClick(selectors.routeTickets.firstTicketDeleteButton)
|
||||||
|
.waitToClick(selectors.routeTickets.confirmButton)
|
||||||
|
.waitForLastSnackbar();
|
||||||
|
|
||||||
|
expect(result).toEqual('Ticket removed from route');
|
||||||
|
});
|
||||||
|
|
||||||
it('should now count how many tickets are in route to find one less', async() => {
|
it('should now count how many tickets are in route to find one less', async() => {
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.countElement('vn-route-tickets vn-textfield[model="ticket.priority"]');
|
.countElement('vn-route-tickets vn-textfield[model="ticket.priority"]');
|
||||||
|
|
||||||
expect(result).toEqual(2);
|
expect(result).toEqual(9);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should confirm the route volume on the descriptor has been updated by the changes made', async() => {
|
it('should confirm the route volume on the descriptor has been updated by the changes made', async() => {
|
||||||
const result = await nightmare
|
const result = await nightmare
|
||||||
.waitToGetProperty(selectors.routeDescriptor.volume, 'innerText');
|
.waitToGetProperty(selectors.routeDescriptor.volume, 'innerText');
|
||||||
|
|
||||||
expect(result).toEqual('0.7 / 50 m³');
|
expect(result).toEqual('0.9 / 18 m³');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -28,13 +28,11 @@ describe('claimBeginning', () => {
|
||||||
let refundTicketState = await app.models.TicketState.findById(ticket.id);
|
let refundTicketState = await app.models.TicketState.findById(ticket.id);
|
||||||
salesInsertedInClaimEnd = await app.models.ClaimEnd.find({where: {claimFk: claimId}});
|
salesInsertedInClaimEnd = await app.models.ClaimEnd.find({where: {claimFk: claimId}});
|
||||||
|
|
||||||
expect(refundTicketSales.length).toEqual(2);
|
expect(refundTicketSales.length).toEqual(1);
|
||||||
expect(refundTicketSales[0].quantity).toEqual(-5);
|
expect(refundTicketSales[0].quantity).toEqual(-5);
|
||||||
expect(refundTicketSales[1].quantity).toEqual(-4);
|
|
||||||
expect(refundTicketObservations[0].description).toEqual('Reclama ticket: 11');
|
expect(refundTicketObservations[0].description).toEqual('Reclama ticket: 11');
|
||||||
expect(refundTicketState.stateFk).toEqual(16);
|
expect(refundTicketState.stateFk).toEqual(16);
|
||||||
expect(salesInsertedInClaimEnd[0].saleFk).toEqual(refundTicketSales[0].id);
|
expect(salesInsertedInClaimEnd[0].saleFk).toEqual(refundTicketSales[0].id);
|
||||||
expect(salesInsertedInClaimEnd[1].saleFk).toEqual(refundTicketSales[1].id);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,9 +1 @@
|
||||||
<vn-crud-model
|
<vn-log url="/api/ClientLogs" origin-id="$ctrl.$stateParams.id"></vn-log>
|
||||||
vn-id="model"
|
|
||||||
url="/client/api/ClientLogs"
|
|
||||||
link="{originFk: $ctrl.$stateParams.id}"
|
|
||||||
filter="$ctrl.filter"
|
|
||||||
limit="20"
|
|
||||||
data="$ctrl.logs" auto-load="false">
|
|
||||||
</vn-crud-model>
|
|
||||||
<vn-log model="model"></vn-log>
|
|
|
@ -4,44 +4,6 @@ class Controller {
|
||||||
constructor($scope, $stateParams) {
|
constructor($scope, $stateParams) {
|
||||||
this.$scope = $scope;
|
this.$scope = $scope;
|
||||||
this.$stateParams = $stateParams;
|
this.$stateParams = $stateParams;
|
||||||
this.filter = {
|
|
||||||
include: [{
|
|
||||||
relation: 'user',
|
|
||||||
scope: {
|
|
||||||
fields: ['name'],
|
|
||||||
},
|
|
||||||
}],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
get logs() {
|
|
||||||
return this._logs;
|
|
||||||
}
|
|
||||||
|
|
||||||
set logs(value) {
|
|
||||||
this._logs = value;
|
|
||||||
|
|
||||||
if (this.logs) {
|
|
||||||
this.logs.forEach(log => {
|
|
||||||
log.oldProperties = this.getInstance(log.oldInstance);
|
|
||||||
log.newProperties = this.getInstance(log.newInstance);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getInstance(instance) {
|
|
||||||
let validDate = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$/;
|
|
||||||
const properties = [];
|
|
||||||
if (typeof instance == 'object' && instance != null) {
|
|
||||||
Object.keys(instance).forEach(property => {
|
|
||||||
if (validDate.test(instance[property]))
|
|
||||||
instance[property] = new Date(instance[property]).toLocaleString('es-ES');
|
|
||||||
|
|
||||||
properties.push({key: property, value: instance[property]});
|
|
||||||
});
|
|
||||||
return properties;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
import './index';
|
|
||||||
|
|
||||||
describe('Client', () => {
|
|
||||||
describe('Component vnClientLog', () => {
|
|
||||||
let $componentController;
|
|
||||||
let $scope;
|
|
||||||
let controller;
|
|
||||||
|
|
||||||
beforeEach(ngModule('client'));
|
|
||||||
|
|
||||||
beforeEach(angular.mock.inject((_$componentController_, $rootScope) => {
|
|
||||||
$componentController = _$componentController_;
|
|
||||||
$scope = $rootScope.$new();
|
|
||||||
controller = $componentController('vnClientLog', {$scope: $scope});
|
|
||||||
controller.$scope.model = {data: [{newInstance: {id: 1}, oldInstance: {id: 2}}]};
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('logs setter', () => {
|
|
||||||
it('should call the function getInstance() twice', () => {
|
|
||||||
spyOn(controller, 'getInstance');
|
|
||||||
controller.logs = [{newInstance: {id: 1}, oldInstance: {id: 2}}];
|
|
||||||
|
|
||||||
expect(controller.getInstance.calls.count()).toBe(2);
|
|
||||||
expect(controller.getInstance).toHaveBeenCalledWith({id: 1});
|
|
||||||
expect(controller.getInstance).toHaveBeenCalledWith({id: 2});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('getInstance(instance)', () => {
|
|
||||||
it('should transform the object given in to an array', () => {
|
|
||||||
let newInstance = controller.getInstance(controller.$scope.model.data[0].newInstance);
|
|
||||||
|
|
||||||
expect(newInstance).toEqual([{key: 'id', value: 1}]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -8,7 +8,7 @@ describe('item getDiary()', () => {
|
||||||
expect(result.length).toBe(4);
|
expect(result.length).toBe(4);
|
||||||
expect(result[0].balance).toBe(-100);
|
expect(result[0].balance).toBe(-100);
|
||||||
expect(result[1].balance).toBe(-110);
|
expect(result[1].balance).toBe(-110);
|
||||||
expect(result[2].balance).toBe(-111);
|
expect(result[2].balance).toBe(-110);
|
||||||
expect(result[3].balance).toBe(-211);
|
expect(result[3].balance).toBe(-210);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,9 +1 @@
|
||||||
<vn-crud-model
|
<vn-log url="/api/ItemLogs" origin-id="$ctrl.$stateParams.id"></vn-log>
|
||||||
vn-id="model"
|
|
||||||
url="/api/ItemLogs"
|
|
||||||
link="{originFk: $ctrl.$stateParams.id}"
|
|
||||||
filter="$ctrl.filter"
|
|
||||||
limit="20"
|
|
||||||
data="$ctrl.logs" auto-load="false">
|
|
||||||
</vn-crud-model>
|
|
||||||
<vn-log model="model"></vn-log>
|
|
|
@ -4,44 +4,6 @@ class Controller {
|
||||||
constructor($scope, $stateParams) {
|
constructor($scope, $stateParams) {
|
||||||
this.$scope = $scope;
|
this.$scope = $scope;
|
||||||
this.$stateParams = $stateParams;
|
this.$stateParams = $stateParams;
|
||||||
this.filter = {
|
|
||||||
include: [{
|
|
||||||
relation: 'user',
|
|
||||||
scope: {
|
|
||||||
fields: ['name'],
|
|
||||||
},
|
|
||||||
}],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
get logs() {
|
|
||||||
return this._logs;
|
|
||||||
}
|
|
||||||
|
|
||||||
set logs(value) {
|
|
||||||
this._logs = value;
|
|
||||||
|
|
||||||
if (this.logs) {
|
|
||||||
this.logs.forEach(log => {
|
|
||||||
log.oldProperties = this.getInstance(log.oldInstance);
|
|
||||||
log.newProperties = this.getInstance(log.newInstance);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getInstance(instance) {
|
|
||||||
let validDate = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$/;
|
|
||||||
const properties = [];
|
|
||||||
if (typeof instance == 'object' && instance != null) {
|
|
||||||
Object.keys(instance).forEach(property => {
|
|
||||||
if (validDate.test(instance[property]))
|
|
||||||
instance[property] = new Date(instance[property]).toLocaleString('es-ES');
|
|
||||||
|
|
||||||
properties.push({key: property, value: instance[property]});
|
|
||||||
});
|
|
||||||
return properties;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1 @@
|
||||||
<vn-crud-model
|
<vn-log url="/api/RouteLogs" origin-id="$ctrl.$stateParams.id"></vn-log>
|
||||||
vn-id="model"
|
|
||||||
url="/api/RouteLogs"
|
|
||||||
link="{originFk: $ctrl.$stateParams.id}"
|
|
||||||
filter="$ctrl.filter"
|
|
||||||
limit="20"
|
|
||||||
data="$ctrl.logs" auto-load="false">
|
|
||||||
</vn-crud-model>
|
|
||||||
<vn-log model="model"></vn-log>
|
|
|
@ -4,44 +4,6 @@ class Controller {
|
||||||
constructor($scope, $stateParams) {
|
constructor($scope, $stateParams) {
|
||||||
this.$scope = $scope;
|
this.$scope = $scope;
|
||||||
this.$stateParams = $stateParams;
|
this.$stateParams = $stateParams;
|
||||||
this.filter = {
|
|
||||||
include: [{
|
|
||||||
relation: 'user',
|
|
||||||
scope: {
|
|
||||||
fields: ['name'],
|
|
||||||
},
|
|
||||||
}],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
get logs() {
|
|
||||||
return this._logs;
|
|
||||||
}
|
|
||||||
|
|
||||||
set logs(value) {
|
|
||||||
this._logs = value;
|
|
||||||
|
|
||||||
if (this.logs) {
|
|
||||||
this.logs.forEach(log => {
|
|
||||||
log.oldProperties = this.getInstance(log.oldInstance);
|
|
||||||
log.newProperties = this.getInstance(log.newInstance);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getInstance(instance) {
|
|
||||||
let validDate = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$/;
|
|
||||||
const properties = [];
|
|
||||||
if (typeof instance == 'object' && instance != null) {
|
|
||||||
Object.keys(instance).forEach(property => {
|
|
||||||
if (validDate.test(instance[property]))
|
|
||||||
instance[property] = new Date(instance[property]).toLocaleString('es-ES');
|
|
||||||
|
|
||||||
properties.push({key: property, value: instance[property]});
|
|
||||||
});
|
|
||||||
return properties;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
import './index';
|
|
||||||
|
|
||||||
describe('Route', () => {
|
|
||||||
describe('Component vnRouteLog', () => {
|
|
||||||
let $componentController;
|
|
||||||
let $scope;
|
|
||||||
let controller;
|
|
||||||
|
|
||||||
beforeEach(ngModule('route'));
|
|
||||||
|
|
||||||
beforeEach(angular.mock.inject((_$componentController_, $rootScope) => {
|
|
||||||
$componentController = _$componentController_;
|
|
||||||
$scope = $rootScope.$new();
|
|
||||||
controller = $componentController('vnRouteLog', {$scope: $scope});
|
|
||||||
controller.$scope.model = {data: [{newInstance: {id: 1}, oldInstance: {id: 2}}]};
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('logs setter', () => {
|
|
||||||
it('should call the function getInstance() twice', () => {
|
|
||||||
spyOn(controller, 'getInstance');
|
|
||||||
controller.logs = [{newInstance: {id: 1}, oldInstance: {id: 2}}];
|
|
||||||
|
|
||||||
expect(controller.getInstance.calls.count()).toBe(2);
|
|
||||||
expect(controller.getInstance).toHaveBeenCalledWith({id: 1});
|
|
||||||
expect(controller.getInstance).toHaveBeenCalledWith({id: 2});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('getInstance(instance)', () => {
|
|
||||||
it('should transform the object given in to an array', () => {
|
|
||||||
let newInstance = controller.getInstance(controller.$scope.model.data[0].newInstance);
|
|
||||||
|
|
||||||
expect(newInstance).toEqual([{key: 'id', value: 1}]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
require('../methods/ticket/changeWorker')(Self);
|
require('../methods/ticket/changeWorker')(Self);
|
||||||
require('../methods/ticket/getVolume')(Self);
|
require('../methods/ticket/getVolume')(Self);
|
||||||
|
@ -23,4 +24,24 @@ module.exports = Self => {
|
||||||
require('../methods/ticket/updateDiscount')(Self);
|
require('../methods/ticket/updateDiscount')(Self);
|
||||||
require('../methods/ticket/uploadFile')(Self);
|
require('../methods/ticket/uploadFile')(Self);
|
||||||
require('../methods/ticket/addSale')(Self);
|
require('../methods/ticket/addSale')(Self);
|
||||||
|
|
||||||
|
Self.observe('before save', async function(ctx) {
|
||||||
|
if (ctx.isNewInstance) return;
|
||||||
|
|
||||||
|
let changes = ctx.data || ctx.instance;
|
||||||
|
|
||||||
|
if (changes.routeFk === null && ctx.currentInstance.routeFk != null) {
|
||||||
|
let instance = JSON.parse(JSON.stringify(ctx.currentInstance));
|
||||||
|
let userId = ctx.options.accessToken.userId;
|
||||||
|
let logRecord = {
|
||||||
|
originFk: ctx.currentInstance.routeFk,
|
||||||
|
userFk: userId,
|
||||||
|
action: 'delete',
|
||||||
|
changedModel: 'Route',
|
||||||
|
oldInstance: {ticket: instance.id},
|
||||||
|
newInstance: null
|
||||||
|
};
|
||||||
|
await Self.app.models.RouteLog.create(logRecord);
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,9 +1 @@
|
||||||
<vn-crud-model auto-load="false"
|
<vn-log url="/api/TicketLogs" origin-id="$ctrl.$stateParams.id"></vn-log>
|
||||||
vn-id="model"
|
|
||||||
url="/ticket/api/TicketLogs"
|
|
||||||
link="{originFk: $ctrl.$stateParams.id}"
|
|
||||||
filter="$ctrl.filter"
|
|
||||||
limit="20"
|
|
||||||
data="$ctrl.logs">
|
|
||||||
</vn-crud-model>
|
|
||||||
<vn-log model="model"></vn-log>
|
|
|
@ -4,45 +4,6 @@ class Controller {
|
||||||
constructor($scope, $stateParams) {
|
constructor($scope, $stateParams) {
|
||||||
this.$scope = $scope;
|
this.$scope = $scope;
|
||||||
this.$stateParams = $stateParams;
|
this.$stateParams = $stateParams;
|
||||||
this.filter = {
|
|
||||||
include: [{
|
|
||||||
relation: 'user',
|
|
||||||
scope: {
|
|
||||||
fields: ['name'],
|
|
||||||
},
|
|
||||||
}],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
get logs() {
|
|
||||||
return this._logs;
|
|
||||||
}
|
|
||||||
|
|
||||||
set logs(value) {
|
|
||||||
this._logs = value;
|
|
||||||
|
|
||||||
if (this.logs) {
|
|
||||||
this.logs.forEach(log => {
|
|
||||||
log.oldProperties = this.getInstance(log.oldInstance);
|
|
||||||
log.newProperties = this.getInstance(log.newInstance);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getInstance(instance) {
|
|
||||||
const properties = [];
|
|
||||||
let validDate = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$/;
|
|
||||||
|
|
||||||
if (typeof instance == 'object' && instance != null) {
|
|
||||||
Object.keys(instance).forEach(property => {
|
|
||||||
if (validDate.test(instance[property]))
|
|
||||||
instance[property] = new Date(instance[property]).toLocaleString('es-ES');
|
|
||||||
|
|
||||||
properties.push({key: property, value: instance[property]});
|
|
||||||
});
|
|
||||||
return properties;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
import './index';
|
|
||||||
|
|
||||||
describe('Ticket', () => {
|
|
||||||
describe('Component vnTicketLog', () => {
|
|
||||||
let $componentController;
|
|
||||||
let $scope;
|
|
||||||
let controller;
|
|
||||||
|
|
||||||
beforeEach(ngModule('ticket'));
|
|
||||||
|
|
||||||
beforeEach(angular.mock.inject((_$componentController_, $rootScope) => {
|
|
||||||
$componentController = _$componentController_;
|
|
||||||
$scope = $rootScope.$new();
|
|
||||||
controller = $componentController('vnTicketLog', {$scope: $scope});
|
|
||||||
controller.$scope.model = {data: [{newInstance: {id: 1}, oldInstance: {id: 2}}]};
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('logs setter', () => {
|
|
||||||
it('should call the function getInstance() twice', () => {
|
|
||||||
spyOn(controller, 'getInstance');
|
|
||||||
controller.logs = [{newInstance: {id: 1}, oldInstance: {id: 2}}];
|
|
||||||
|
|
||||||
expect(controller.getInstance.calls.count()).toBe(2);
|
|
||||||
expect(controller.getInstance).toHaveBeenCalledWith({id: 1});
|
|
||||||
expect(controller.getInstance).toHaveBeenCalledWith({id: 2});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('getInstance(instance)', () => {
|
|
||||||
it('should transform the object given in to an array', () => {
|
|
||||||
const newInstance = controller.getInstance(controller.$scope.model.data[0].newInstance);
|
|
||||||
|
|
||||||
expect(newInstance).toEqual([{key: 'id', value: 1}]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,8 +1,17 @@
|
||||||
|
<vn-crud-model
|
||||||
|
vn-id="model"
|
||||||
|
url="{{$ctrl.url}}"
|
||||||
|
filter="$ctrl.filter"
|
||||||
|
link="{originFk: $ctrl.originId}"
|
||||||
|
data="$ctrl.logs"
|
||||||
|
limit="20"
|
||||||
|
auto-load="true">
|
||||||
|
</vn-crud-model>
|
||||||
<vn-vertical>
|
<vn-vertical>
|
||||||
<vn-card pad-large>
|
<vn-card pad-large>
|
||||||
<vn-vertical>
|
<vn-vertical>
|
||||||
<vn-title>History</vn-title>
|
<vn-title>History</vn-title>
|
||||||
<vn-table model="$ctrl.model">
|
<vn-table model="model">
|
||||||
<vn-thead>
|
<vn-thead>
|
||||||
<vn-tr>
|
<vn-tr>
|
||||||
<vn-th field="creationDate">Date</vn-th>
|
<vn-th field="creationDate">Date</vn-th>
|
||||||
|
@ -15,7 +24,7 @@
|
||||||
</vn-tr>
|
</vn-tr>
|
||||||
</vn-thead>
|
</vn-thead>
|
||||||
<vn-tbody>
|
<vn-tbody>
|
||||||
<vn-tr ng-repeat="log in $ctrl.model.data">
|
<vn-tr ng-repeat="log in $ctrl.logs">
|
||||||
<vn-td>
|
<vn-td>
|
||||||
{{::log.creationDate | dateTime:'dd/MM/yyyy HH:mm'}}
|
{{::log.creationDate | dateTime:'dd/MM/yyyy HH:mm'}}
|
||||||
<div class="changes">
|
<div class="changes">
|
||||||
|
@ -23,7 +32,7 @@
|
||||||
<span translate class="label">Changed by</span><span class="label">: </span>
|
<span translate class="label">Changed by</span><span class="label">: </span>
|
||||||
<span
|
<span
|
||||||
class="link"
|
class="link"
|
||||||
ng-click="$ctrl.showWorkerDescriptor($event, log.user.id)"
|
ng-click="$ctrl.showWorkerDescriptor($event, log.user.worker.id)"
|
||||||
translate
|
translate
|
||||||
class="value">{{::log.user.name | dashIfEmpty}}
|
class="value">{{::log.user.name | dashIfEmpty}}
|
||||||
</span>
|
</span>
|
||||||
|
@ -45,7 +54,7 @@
|
||||||
<vn-td class="expendable">
|
<vn-td class="expendable">
|
||||||
<span
|
<span
|
||||||
class="link"
|
class="link"
|
||||||
ng-click="$ctrl.showWorkerDescriptor($event, log.user.id)"
|
ng-click="$ctrl.showWorkerDescriptor($event, log.user.worker.id)"
|
||||||
translate
|
translate
|
||||||
class="value">{{::log.user.name | dashIfEmpty}}
|
class="value">{{::log.user.name | dashIfEmpty}}
|
||||||
</span>
|
</span>
|
||||||
|
@ -89,7 +98,7 @@
|
||||||
</vn-tbody>
|
</vn-tbody>
|
||||||
</vn-table>
|
</vn-table>
|
||||||
</vn-vertical>
|
</vn-vertical>
|
||||||
<vn-pagination model="$ctrl.model"></vn-pagination>
|
<vn-pagination model="model"></vn-pagination>
|
||||||
</vn-card>
|
</vn-card>
|
||||||
</vn-vertical>
|
</vn-vertical>
|
||||||
<vn-worker-descriptor-popover
|
<vn-worker-descriptor-popover
|
||||||
|
|
|
@ -10,6 +10,35 @@ export default class Controller {
|
||||||
'delete': 'Deletes',
|
'delete': 'Deletes',
|
||||||
'select': 'Views'
|
'select': 'Views'
|
||||||
};
|
};
|
||||||
|
this.filter = {
|
||||||
|
include: [{
|
||||||
|
relation: 'user',
|
||||||
|
scope: {
|
||||||
|
fields: ['name'],
|
||||||
|
include: {
|
||||||
|
relation: 'worker',
|
||||||
|
scope: {
|
||||||
|
fields: ['id']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
get logs() {
|
||||||
|
return this._logs;
|
||||||
|
}
|
||||||
|
|
||||||
|
set logs(value) {
|
||||||
|
this._logs = value;
|
||||||
|
|
||||||
|
if (this.logs) {
|
||||||
|
this.logs.forEach(log => {
|
||||||
|
log.oldProperties = this.getInstance(log.oldInstance);
|
||||||
|
log.newProperties = this.getInstance(log.newInstance);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
showWorkerDescriptor(event, workerFk) {
|
showWorkerDescriptor(event, workerFk) {
|
||||||
|
@ -22,6 +51,22 @@ export default class Controller {
|
||||||
this.$.workerDescriptor.parent = event.target;
|
this.$.workerDescriptor.parent = event.target;
|
||||||
this.$.workerDescriptor.show();
|
this.$.workerDescriptor.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getInstance(instance) {
|
||||||
|
const properties = [];
|
||||||
|
let validDate = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$/;
|
||||||
|
|
||||||
|
if (typeof instance == 'object' && instance != null) {
|
||||||
|
Object.keys(instance).forEach(property => {
|
||||||
|
if (validDate.test(instance[property]))
|
||||||
|
instance[property] = new Date(instance[property]).toLocaleString('es-ES');
|
||||||
|
|
||||||
|
properties.push({key: property, value: instance[property]});
|
||||||
|
});
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Controller.$inject = ['$scope'];
|
Controller.$inject = ['$scope'];
|
||||||
|
@ -30,6 +75,8 @@ ngModule.component('vnLog', {
|
||||||
controller: Controller,
|
controller: Controller,
|
||||||
template: require('./index.html'),
|
template: require('./index.html'),
|
||||||
bindings: {
|
bindings: {
|
||||||
model: '<'
|
model: '<',
|
||||||
|
originId: '<',
|
||||||
|
url: '@'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue