This commit is contained in:
Juan Ferrer 2019-01-11 15:38:32 +01:00
commit 432085c301
51 changed files with 3987 additions and 2502 deletions

View File

@ -80,7 +80,6 @@ export default {
receivedCoreVNLCheckbox: `vn-check[label='Received core VNL'] > label > input`, receivedCoreVNLCheckbox: `vn-check[label='Received core VNL'] > label > input`,
receivedB2BVNLCheckbox: `vn-check[label='Received B2B VNL'] > label > input`, receivedB2BVNLCheckbox: `vn-check[label='Received B2B VNL'] > label > input`,
swiftBicAutocomplete: 'vn-client-billing-data vn-autocomplete[field="$ctrl.client.bankEntityFk"]', swiftBicAutocomplete: 'vn-client-billing-data vn-autocomplete[field="$ctrl.client.bankEntityFk"]',
firstSwiftBicOption: `vn-client-billing-data vn-autocomplete[field="$ctrl.client.bankEntityFk"] vn-drop-down ul > li:nth-child(1)`,
clearswiftBicButton: `vn-client-billing-data vn-autocomplete[field="$ctrl.client.bankEntityFk"] > div > div > div > vn-icon > i`, clearswiftBicButton: `vn-client-billing-data vn-autocomplete[field="$ctrl.client.bankEntityFk"] > div > div > div > vn-icon > i`,
newBankEntityButton: 'vn-client-billing-data vn-icon-button[vn-tooltip="New bank entity"] > button', newBankEntityButton: 'vn-client-billing-data vn-icon-button[vn-tooltip="New bank entity"] > button',
newBankEntityName: 'vn-client-billing-data > vn-dialog vn-textfield[label="Name"] input', newBankEntityName: 'vn-client-billing-data > vn-dialog vn-textfield[label="Name"] input',
@ -208,22 +207,16 @@ export default {
itemTags: { itemTags: {
goToItemIndexButton: 'vn-item-descriptor [ui-sref="item.index"]', goToItemIndexButton: 'vn-item-descriptor [ui-sref="item.index"]',
tagsButton: `vn-left-menu a[ui-sref="item.card.tags"]`, tagsButton: `vn-left-menu a[ui-sref="item.card.tags"]`,
firstRemoveTagButton: `vn-item-tags vn-horizontal:nth-child(2) vn-icon-button[icon="delete"]`,
firstTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(2) > vn-autocomplete[field="itemTag.tagFk"]`,
firstValueInput: `vn-item-tags vn-horizontal:nth-child(2) > vn-textfield[label="Value"] input`,
firstRelevancyInput: `vn-horizontal:nth-child(2) > vn-textfield[label="Relevancy"] input`,
secondTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(3) > vn-autocomplete[field="itemTag.tagFk"]`,
secondValueInput: `vn-item-tags vn-horizontal:nth-child(3) > vn-textfield[label="Value"] input`,
secondRelevancyInput: `vn-horizontal:nth-child(3) > vn-textfield[label="Relevancy"] input`,
thirdTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(4) > vn-autocomplete[field="itemTag.tagFk"]`,
thirdValueInput: `vn-item-tags vn-horizontal:nth-child(4) > vn-textfield[label="Value"] input`,
thirdRelevancyInput: `vn-horizontal:nth-child(4) > vn-textfield[label="Relevancy"] input`,
fourthTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(5) > vn-autocomplete[field="itemTag.tagFk"]`, fourthTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(5) > vn-autocomplete[field="itemTag.tagFk"]`,
fourthValueInput: `vn-item-tags vn-horizontal:nth-child(5) > vn-textfield[label="Value"] input`, fourthValueInput: `vn-item-tags vn-horizontal:nth-child(5) > vn-textfield[label="Value"] input`,
fourthRelevancyInput: `vn-horizontal:nth-child(5) > vn-textfield[label="Relevancy"] input`, fourthRelevancyInput: `vn-horizontal:nth-child(5) > vn-textfield[label="Relevancy"] input`,
fourthRemoveTagButton: `vn-item-tags vn-horizontal:nth-child(5) vn-icon-button[icon="delete"]`,
fifthTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(6) > vn-autocomplete[field="itemTag.tagFk"]`, fifthTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(6) > vn-autocomplete[field="itemTag.tagFk"]`,
fifthValueInput: `vn-item-tags vn-horizontal:nth-child(6) > vn-textfield[label="Value"] input`, fifthValueInput: `vn-item-tags vn-horizontal:nth-child(6) > vn-textfield[label="Value"] input`,
fifthRelevancyInput: `vn-horizontal:nth-child(6) > vn-textfield[label="Relevancy"] input`, fifthRelevancyInput: `vn-horizontal:nth-child(6) > vn-textfield[label="Relevancy"] input`,
sixthTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(7) > vn-autocomplete[field="itemTag.tagFk"]`,
sixthValueInput: `vn-item-tags vn-horizontal:nth-child(7) > vn-textfield[label="Value"] input`,
sixthRelevancyInput: `vn-horizontal:nth-child(7) > vn-textfield[label="Relevancy"] input`,
seventhTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(8) > vn-autocomplete[field="itemTag.tagFk"]`, seventhTagAutocomplete: `vn-item-tags vn-horizontal:nth-child(8) > vn-autocomplete[field="itemTag.tagFk"]`,
seventhValueInput: `vn-item-tags vn-horizontal:nth-child(8) > vn-textfield[label="Value"] input`, seventhValueInput: `vn-item-tags vn-horizontal:nth-child(8) > vn-textfield[label="Value"] input`,
seventhRelevancyInput: `vn-horizontal:nth-child(8) > vn-textfield[label="Relevancy"] input`, seventhRelevancyInput: `vn-horizontal:nth-child(8) > vn-textfield[label="Relevancy"] input`,
@ -346,7 +339,7 @@ export default {
firstSaleDiscountInput: 'vn-ticket-sale:nth-child(1) vn-ticket-sale-edit-discount > div > vn-textfield > div > div > div.infix > input.ng-not-empty', firstSaleDiscountInput: 'vn-ticket-sale:nth-child(1) vn-ticket-sale-edit-discount > div > vn-textfield > div > div > div.infix > input.ng-not-empty',
firstSaleImport: 'vn-ticket-sale:nth-child(1) vn-td:nth-child(9)', firstSaleImport: 'vn-ticket-sale:nth-child(1) vn-td:nth-child(9)',
firstSaleReservedIcon: 'vn-ticket-sale vn-tr:nth-child(1) > vn-td:nth-child(2) > vn-icon:nth-child(3)', firstSaleReservedIcon: 'vn-ticket-sale vn-tr:nth-child(1) > vn-td:nth-child(2) > vn-icon:nth-child(3)',
firstSaleColour: `vn-ticket-sale vn-tr:nth-child(1) vn-td:nth-child(5) section:nth-child(5)`, firstSaleColour: `vn-ticket-sale vn-tr:nth-child(1) vn-td:nth-child(5) section:nth-child(1)`,
firstSaleLength: `vn-ticket-sale vn-tr:nth-child(1) vn-td:nth-child(5) section:nth-child(3)`, firstSaleLength: `vn-ticket-sale vn-tr:nth-child(1) vn-td:nth-child(5) section:nth-child(3)`,
firstSaleCheckbox: `vn-ticket-sale vn-tr:nth-child(1) vn-check[field="sale.checked"] label`, firstSaleCheckbox: `vn-ticket-sale vn-tr:nth-child(1) vn-check[field="sale.checked"] label`,
secondSaleClaimId: 'vn-ticket-sale > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(2) > vn-td:nth-child(2) > a > vn-icon', secondSaleClaimId: 'vn-ticket-sale > vn-vertical > vn-card > div > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(2) > vn-td:nth-child(2) > a > vn-icon',

View File

@ -90,7 +90,7 @@ describe('Client Edit fiscalData path', () => {
.waitForLastSnackbar(); .waitForLastSnackbar();
expect(result).toEqual('Cannot check VIES and Equalization Tax'); expect(result).toEqual('Cannot check VIES and Equalization Tax');
}); }, 15000);
it('should receive an error if the fiscal id contains A or B at the beginning', async() => { it('should receive an error if the fiscal id contains A or B at the beginning', async() => {
const result = await nightmare const result = await nightmare

View File

@ -9,10 +9,10 @@ describe('Item summary path', () => {
.loginAndModule('employee', 'item'); .loginAndModule('employee', 'item');
}); });
it('should search for the item Gem of Time', async () => { it('should search for an item', async() => {
const result = await nightmare const result = await nightmare
.wait(selectors.itemsIndex.searchItemInput) .wait(selectors.itemsIndex.searchItemInput)
.type(selectors.itemsIndex.searchItemInput, 'Gem of Time') .type(selectors.itemsIndex.searchItemInput, 'Object1 Gem1 5')
.click(selectors.itemsIndex.searchButton) .click(selectors.itemsIndex.searchButton)
.waitForNumberOfElements(selectors.itemsIndex.searchResult, 1) .waitForNumberOfElements(selectors.itemsIndex.searchResult, 1)
.countElement(selectors.itemsIndex.searchResult); .countElement(selectors.itemsIndex.searchResult);
@ -20,9 +20,9 @@ describe('Item summary path', () => {
expect(result).toEqual(1); expect(result).toEqual(1);
}); });
it(`should click on the search result summary button to open the item summary popup`, async () => { it(`should click on the search result summary button to open the item summary popup`, async() => {
const isVisibleBefore = await nightmare const isVisibleBefore = await nightmare
.waitForTextInElement(selectors.itemsIndex.searchResult, 'Gem of Time') .waitForTextInElement(selectors.itemsIndex.searchResult, 'Object1 Gem1 5')
.isVisible(selectors.itemSummary.basicData); .isVisible(selectors.itemSummary.basicData);
const isVisibleAfter = await nightmare const isVisibleAfter = await nightmare
@ -33,15 +33,15 @@ describe('Item summary path', () => {
expect(isVisibleAfter).toBeTruthy(); expect(isVisibleAfter).toBeTruthy();
}); });
it(`should check the item summary preview shows fields from basic data`, async () => { it(`should check the item summary preview shows fields from basic data`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.basicData, 'Name: Gem of Time') .waitForTextInElement(selectors.itemSummary.basicData, 'Name: Object1 Gem1 5')
.waitToGetProperty(selectors.itemSummary.basicData, 'innerText'); .waitToGetProperty(selectors.itemSummary.basicData, 'innerText');
expect(result).toContain('Name: Gem of Time'); expect(result).toContain('Name: Object1 Gem1 5');
}); });
it(`should check the item summary preview shows fields from tags`, async () => { it(`should check the item summary preview shows fields from tags`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.tags, 'Color: Yellow') .waitForTextInElement(selectors.itemSummary.tags, 'Color: Yellow')
.waitToGetProperty(selectors.itemSummary.tags, 'innerText'); .waitToGetProperty(selectors.itemSummary.tags, 'innerText');
@ -49,7 +49,7 @@ describe('Item summary path', () => {
expect(result).toContain('Color: Yellow'); expect(result).toContain('Color: Yellow');
}); });
it(`should check the item summary preview shows fields from niche`, async () => { it(`should check the item summary preview shows fields from niche`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.niche, 'Warehouse One: A1') .waitForTextInElement(selectors.itemSummary.niche, 'Warehouse One: A1')
.waitToGetProperty(selectors.itemSummary.niche, 'innerText'); .waitToGetProperty(selectors.itemSummary.niche, 'innerText');
@ -57,7 +57,7 @@ describe('Item summary path', () => {
expect(result).toContain('Warehouse One: A1'); expect(result).toContain('Warehouse One: A1');
}); });
it(`should check the item summary preview shows fields from botanical`, async () => { it(`should check the item summary preview shows fields from botanical`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.botanical, 'Botanical: Hedera helix') .waitForTextInElement(selectors.itemSummary.botanical, 'Botanical: Hedera helix')
.waitToGetProperty(selectors.itemSummary.botanical, 'innerText'); .waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
@ -65,7 +65,7 @@ describe('Item summary path', () => {
expect(result).toContain('Botanical: Hedera helix'); expect(result).toContain('Botanical: Hedera helix');
}); });
it(`should check the item summary preview shows fields from barcode`, async () => { it(`should check the item summary preview shows fields from barcode`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.barcode, '1') .waitForTextInElement(selectors.itemSummary.barcode, '1')
.waitToGetProperty(selectors.itemSummary.barcode, 'innerText'); .waitToGetProperty(selectors.itemSummary.barcode, 'innerText');
@ -73,7 +73,7 @@ describe('Item summary path', () => {
expect(result).toContain('1'); expect(result).toContain('1');
}); });
it(`should close the summary popup`, async () => { it(`should close the summary popup`, async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.itemsIndex.closeItemSummaryPreview) .waitToClick(selectors.itemsIndex.closeItemSummaryPreview)
.isVisible(selectors.itemSummary.basicData); .isVisible(selectors.itemSummary.basicData);
@ -81,11 +81,11 @@ describe('Item summary path', () => {
expect(result).toBeFalsy(); expect(result).toBeFalsy();
}); });
it('should search for the item Gem of Mind', async () => { it('should search for other item', async() => {
const result = await nightmare const result = await nightmare
.clearInput('body > vn-app > vn-vertical > vn-vertical > ui-view > vn-item-index > div > div > vn-card:nth-child(1) > div > vn-searchbar > form > vn-horizontal > vn-textfield > div > div > div.infix > input') .clearInput('body > vn-app > vn-vertical > vn-vertical > ui-view > vn-item-index > div > div > vn-card:nth-child(1) > div > vn-searchbar > form > vn-horizontal > vn-textfield > div > div > div.infix > input')
.click(selectors.itemsIndex.searchButton) .click(selectors.itemsIndex.searchButton)
.type(selectors.itemsIndex.searchItemInput, 'Gem of Mind') .type(selectors.itemsIndex.searchItemInput, 'Object2 Gem2 3')
.click(selectors.itemsIndex.searchButton) .click(selectors.itemsIndex.searchButton)
.waitForNumberOfElements(selectors.itemsIndex.searchResult, 1) .waitForNumberOfElements(selectors.itemsIndex.searchResult, 1)
.countElement(selectors.itemsIndex.searchResult); .countElement(selectors.itemsIndex.searchResult);
@ -93,9 +93,9 @@ describe('Item summary path', () => {
expect(result).toEqual(1); expect(result).toEqual(1);
}); });
it(`should now click on the search result summary button to open the item summary popup`, async () => { it(`should now click on the search result summary button to open the item summary popup`, async() => {
const isVisibleBefore = await nightmare const isVisibleBefore = await nightmare
.waitForTextInElement(selectors.itemsIndex.searchResult, 'Gem of Mind') .waitForTextInElement(selectors.itemsIndex.searchResult, 'Object2 Gem2 3')
.isVisible(selectors.itemSummary.basicData); .isVisible(selectors.itemSummary.basicData);
const isVisibleAfter = await nightmare const isVisibleAfter = await nightmare
@ -107,15 +107,15 @@ describe('Item summary path', () => {
expect(isVisibleAfter).toBeTruthy(); expect(isVisibleAfter).toBeTruthy();
}); });
it(`should now check the item summary preview shows fields from basic data`, async () => { it(`should now check the item summary preview shows fields from basic data`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.basicData, 'Name: Gem of Mind') .waitForTextInElement(selectors.itemSummary.basicData, 'Name: Object2 Gem2 3')
.waitToGetProperty(selectors.itemSummary.basicData, 'innerText'); .waitToGetProperty(selectors.itemSummary.basicData, 'innerText');
expect(result).toContain('Name: Gem of Mind'); expect(result).toContain('Name: Object2 Gem2 3');
}); });
it(`should now check the item summary preview shows fields from tags`, async () => { it(`should now check the item summary preview shows fields from tags`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.tags, 'Color: Red') .waitForTextInElement(selectors.itemSummary.tags, 'Color: Red')
.waitToGetProperty(selectors.itemSummary.tags, 'innerText'); .waitToGetProperty(selectors.itemSummary.tags, 'innerText');
@ -123,7 +123,7 @@ describe('Item summary path', () => {
expect(result).toContain('Color: Red'); expect(result).toContain('Color: Red');
}); });
it(`should now check the item summary preview shows fields from niche`, async () => { it(`should now check the item summary preview shows fields from niche`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.niche, 'Warehouse One: A4') .waitForTextInElement(selectors.itemSummary.niche, 'Warehouse One: A4')
.waitToGetProperty(selectors.itemSummary.niche, 'innerText'); .waitToGetProperty(selectors.itemSummary.niche, 'innerText');
@ -131,7 +131,7 @@ describe('Item summary path', () => {
expect(result).toContain('Warehouse One: A4'); expect(result).toContain('Warehouse One: A4');
}); });
it(`should now check the item summary preview shows fields from botanical`, async () => { it(`should now check the item summary preview shows fields from botanical`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.botanical, 'Botanical: -') .waitForTextInElement(selectors.itemSummary.botanical, 'Botanical: -')
.waitToGetProperty(selectors.itemSummary.botanical, 'innerText'); .waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
@ -139,7 +139,7 @@ describe('Item summary path', () => {
expect(result).toContain('Botanical: -'); expect(result).toContain('Botanical: -');
}); });
it(`should now check the item summary preview shows fields from barcode`, async () => { it(`should now check the item summary preview shows fields from barcode`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.barcode, '4') .waitForTextInElement(selectors.itemSummary.barcode, '4')
.waitToGetProperty(selectors.itemSummary.barcode, 'innerText'); .waitToGetProperty(selectors.itemSummary.barcode, 'innerText');
@ -147,7 +147,7 @@ describe('Item summary path', () => {
expect(result).toContain('4'); expect(result).toContain('4');
}); });
it(`should now close the summary popup`, async () => { it(`should now close the summary popup`, async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.itemsIndex.closeItemSummaryPreview) .waitToClick(selectors.itemsIndex.closeItemSummaryPreview)
.isVisible(selectors.itemSummary.basicData); .isVisible(selectors.itemSummary.basicData);
@ -155,7 +155,7 @@ describe('Item summary path', () => {
expect(result).toBeFalsy(); expect(result).toBeFalsy();
}); });
it(`should navigate to the one of the items detailed section`, async () => { it(`should navigate to the one of the items detailed section`, async() => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.itemsIndex.searchResult) .waitToClick(selectors.itemsIndex.searchResult)
.waitForURL('summary') .waitForURL('summary')
@ -164,36 +164,36 @@ describe('Item summary path', () => {
expect(url.hash).toContain('summary'); expect(url.hash).toContain('summary');
}); });
it(`should check the item summary shows fields from basic data section`, async () => { it(`should check the item summary shows fields from basic data section`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInElement(selectors.itemSummary.basicData, 'Name: Gem of Mind') .waitForTextInElement(selectors.itemSummary.basicData, 'Name: Object2 Gem2 3')
.waitToGetProperty(selectors.itemSummary.basicData, 'innerText'); .waitToGetProperty(selectors.itemSummary.basicData, 'innerText');
expect(result).toContain('Name: Gem of Mind'); expect(result).toContain('Name: Object2 Gem2 3');
}); });
it(`should check the item summary shows fields from tags section`, async () => { it(`should check the item summary shows fields from tags section`, async() => {
const result = await nightmare const result = await nightmare
.waitToGetProperty(selectors.itemSummary.tags, 'innerText'); .waitToGetProperty(selectors.itemSummary.tags, 'innerText');
expect(result).toContain('Color: Red'); expect(result).toContain('Color: Red');
}); });
it(`should check the item summary shows fields from niches section`, async () => { it(`should check the item summary shows fields from niches section`, async() => {
const result = await nightmare const result = await nightmare
.waitToGetProperty(selectors.itemSummary.niche, 'innerText'); .waitToGetProperty(selectors.itemSummary.niche, 'innerText');
expect(result).toContain('Warehouse One: A4'); expect(result).toContain('Warehouse One: A4');
}); });
it(`should check the item summary shows fields from botanical section`, async () => { it(`should check the item summary shows fields from botanical section`, async() => {
const result = await nightmare const result = await nightmare
.waitToGetProperty(selectors.itemSummary.botanical, 'innerText'); .waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
expect(result).toContain('Botanical: -'); expect(result).toContain('Botanical: -');
}); });
it(`should check the item summary shows fields from barcodes section`, async () => { it(`should check the item summary shows fields from barcodes section`, async() => {
const result = await nightmare const result = await nightmare
.waitToGetProperty(selectors.itemSummary.barcode, 'innerText'); .waitToGetProperty(selectors.itemSummary.barcode, 'innerText');

View File

@ -7,7 +7,7 @@ describe('Item Edit basic data path', () => {
beforeAll(() => { beforeAll(() => {
nightmare nightmare
.loginAndModule('buyer', 'item') .loginAndModule('buyer', 'item')
.accessToSearchResult('Gem of Mind') .accessToSearchResult('Object2 Gem2 3')
.accessToSection('item.card.data'); .accessToSection('item.card.data');
}); });

View File

@ -7,7 +7,7 @@ describe('Item edit tax path', () => {
beforeAll(() => { beforeAll(() => {
nightmare nightmare
.loginAndModule('buyer', 'item') .loginAndModule('buyer', 'item')
.accessToSearchResult('Gem of Time') .accessToSearchResult('Object1 Gem1 5')
.accessToSection('item.card.tax'); .accessToSection('item.card.tax');
}); });

View File

@ -7,88 +7,43 @@ describe('Item create tags path', () => {
beforeAll(() => { beforeAll(() => {
nightmare nightmare
.loginAndModule('buyer', 'item') .loginAndModule('buyer', 'item')
.accessToSearchResult('Gem of Time') .accessToSearchResult('Object1 Gem1 5')
.accessToSection('item.card.tags'); .accessToSection('item.card.tags');
}); });
it(`should create a new tag and delete a former one`, async() => { it(`should create a new tag and delete a former one`, async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.itemTags.firstRemoveTagButton) .waitToClick(selectors.itemTags.fourthRemoveTagButton)
.waitToClick(selectors.itemTags.addItemTagButton) .waitToClick(selectors.itemTags.addItemTagButton)
.autocompleteSearch(selectors.itemTags.seventhTagAutocomplete, 'Ancho de la base') .autocompleteSearch(selectors.itemTags.seventhTagAutocomplete, 'Ancho de la base')
.type(selectors.itemTags.seventhValueInput, '50') .type(selectors.itemTags.seventhValueInput, '50')
.clearInput(selectors.itemTags.seventhRelevancyInput) .clearInput(selectors.itemTags.seventhRelevancyInput)
.type(selectors.itemTags.seventhRelevancyInput, '1') .type(selectors.itemTags.seventhRelevancyInput, '4')
.click(selectors.itemTags.submitItemTagsButton) .click(selectors.itemTags.submitItemTagsButton)
.waitForLastSnackbar(); .waitForLastSnackbar();
expect(result).toEqual('Data saved!'); expect(result).toEqual('Data saved!');
}); });
it(`should confirm the first row data is the expected one`, async() => { it(`should confirm the fourth row data is the expected one`, async() => {
let result = await nightmare let result = await nightmare
.click(selectors.itemBasicData.basicDataButton) .click(selectors.itemBasicData.basicDataButton)
.wait(selectors.itemBasicData.nameInput) .wait(selectors.itemBasicData.nameInput)
.click(selectors.itemTags.tagsButton) .click(selectors.itemTags.tagsButton)
.wait('vn-item-tags') .wait('vn-item-tags')
.waitToGetProperty(`${selectors.itemTags.firstTagAutocomplete} input`, 'value'); .waitToGetProperty(`${selectors.itemTags.fourthTagAutocomplete} input`, 'value');
expect(result).toEqual('Ancho de la base'); expect(result).toEqual('Ancho de la base');
result = await nightmare result = await nightmare
.waitToGetProperty(selectors.itemTags.firstValueInput, 'value'); .waitToGetProperty(selectors.itemTags.fourthValueInput, 'value');
expect(result).toEqual('50'); expect(result).toEqual('50');
result = await nightmare result = await nightmare
.waitToGetProperty(selectors.itemTags.firstRelevancyInput, 'value');
expect(result).toEqual('1');
});
it(`should confirm the second row data is the expected one`, async() => {
let tag = await nightmare
.waitToGetProperty(`${selectors.itemTags.secondTagAutocomplete} input`, 'value');
let value = await nightmare
.waitToGetProperty(selectors.itemTags.secondValueInput, 'value');
let relevancy = await nightmare
.waitToGetProperty(selectors.itemTags.secondRelevancyInput, 'value');
expect(tag).toEqual('Variedad');
expect(value).toEqual('Gem1');
expect(relevancy).toEqual('2');
});
it(`should confirm the third row data is the expected one`, async() => {
let tag = await nightmare
.waitToGetProperty(`${selectors.itemTags.thirdTagAutocomplete} input`, 'value');
let value = await nightmare
.waitToGetProperty(selectors.itemTags.thirdValueInput, 'value');
let relevancy = await nightmare
.waitToGetProperty(selectors.itemTags.thirdRelevancyInput, 'value');
expect(tag).toEqual('Longitud(cm)');
expect(value).toEqual('5');
expect(relevancy).toEqual('3');
});
it(`should confirm the fourth row data is the expected one`, async() => {
let tag = await nightmare
.waitToGetProperty(`${selectors.itemTags.fourthTagAutocomplete} input`, 'value');
let value = await nightmare
.waitToGetProperty(selectors.itemTags.fourthValueInput, 'value');
let relevancy = await nightmare
.waitToGetProperty(selectors.itemTags.fourthRelevancyInput, 'value'); .waitToGetProperty(selectors.itemTags.fourthRelevancyInput, 'value');
expect(tag).toEqual('Proveedor'); expect(result).toEqual('4');
expect(value).toEqual('Marvel1');
expect(relevancy).toEqual('4');
}); });
it(`should confirm the fifth row data is the expected one`, async() => { it(`should confirm the fifth row data is the expected one`, async() => {
@ -105,4 +60,19 @@ describe('Item create tags path', () => {
expect(value).toEqual('Yellow'); expect(value).toEqual('Yellow');
expect(relevancy).toEqual('5'); expect(relevancy).toEqual('5');
}); });
it(`should confirm the sixth row data is the expected one`, async() => {
let tag = await nightmare
.waitToGetProperty(`${selectors.itemTags.sixthTagAutocomplete} input`, 'value');
let value = await nightmare
.waitToGetProperty(selectors.itemTags.sixthValueInput, 'value');
let relevancy = await nightmare
.waitToGetProperty(selectors.itemTags.sixthRelevancyInput, 'value');
expect(tag).toEqual('Categoria');
expect(value).toEqual('A1');
expect(relevancy).toEqual('6');
});
}); });

View File

@ -7,7 +7,7 @@ describe('Item create niche path', () => {
beforeAll(() => { beforeAll(() => {
nightmare nightmare
.loginAndModule('buyer', 'item') .loginAndModule('buyer', 'item')
.accessToSearchResult('Gem of Time') .accessToSearchResult('Object1 Gem1 5')
.accessToSection('item.card.niche'); .accessToSection('item.card.niche');
}); });

View File

@ -7,11 +7,11 @@ describe('Item Create botanical path', () => {
beforeAll(() => { beforeAll(() => {
nightmare nightmare
.loginAndModule('buyer', 'item') .loginAndModule('buyer', 'item')
.accessToSearchResult('Mjolnir') .accessToSearchResult('Object5 Weapon 50')
.accessToSection('item.card.botanical'); .accessToSection('item.card.botanical');
}); });
it(`should create a new botanical for the item Mjolnir`, async() => { it(`should create a new botanical for the item`, async() => {
const result = await nightmare const result = await nightmare
.wait(selectors.itemBotanical.botanicalInput) .wait(selectors.itemBotanical.botanicalInput)
.type(selectors.itemBotanical.botanicalInput, 'Cicuta maculata') .type(selectors.itemBotanical.botanicalInput, 'Cicuta maculata')
@ -23,7 +23,7 @@ describe('Item Create botanical path', () => {
expect(result).toEqual('Data saved!'); expect(result).toEqual('Data saved!');
}); });
it(`should confirm the botanical for item Mjolnir was created`, async() => { it(`should confirm the botanical for the item was created`, async() => {
const result = await nightmare const result = await nightmare
.click(selectors.itemBasicData.basicDataButton) .click(selectors.itemBasicData.basicDataButton)
.wait(selectors.itemBasicData.nameInput) .wait(selectors.itemBasicData.nameInput)
@ -34,7 +34,7 @@ describe('Item Create botanical path', () => {
expect(result).toEqual('Cicuta maculata'); expect(result).toEqual('Cicuta maculata');
}); });
it(`should confirm the Genus for item Mjolnir was created`, async() => { it(`should confirm the Genus for the item was created`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInInput(`${selectors.itemBotanical.genusAutocomplete} input`, 'Abelia') .waitForTextInInput(`${selectors.itemBotanical.genusAutocomplete} input`, 'Abelia')
.waitToGetProperty(`${selectors.itemBotanical.genusAutocomplete} input`, 'value'); .waitToGetProperty(`${selectors.itemBotanical.genusAutocomplete} input`, 'value');
@ -42,14 +42,14 @@ describe('Item Create botanical path', () => {
expect(result).toEqual('Abelia'); expect(result).toEqual('Abelia');
}); });
it(`should confirm the Species for item Mjolnir was created`, async() => { it(`should confirm the Species for the item was created`, async() => {
const result = await nightmare const result = await nightmare
.waitToGetProperty(`${selectors.itemBotanical.speciesAutocomplete} input`, 'value'); .waitToGetProperty(`${selectors.itemBotanical.speciesAutocomplete} input`, 'value');
expect(result).toEqual('dealbata'); expect(result).toEqual('dealbata');
}); });
it(`should edit botanical for the item Mjolnir`, async() => { it(`should edit botanical for the item`, async() => {
const result = await nightmare const result = await nightmare
.clearInput(selectors.itemBotanical.botanicalInput) .clearInput(selectors.itemBotanical.botanicalInput)
.type(selectors.itemBotanical.botanicalInput, 'Herp Derp') .type(selectors.itemBotanical.botanicalInput, 'Herp Derp')
@ -61,7 +61,7 @@ describe('Item Create botanical path', () => {
expect(result).toEqual('Data saved!'); expect(result).toEqual('Data saved!');
}); });
it(`should confirm the botanical for item Mjolnir was edited`, async() => { it(`should confirm the botanical for the item was edited`, async() => {
const result = await nightmare const result = await nightmare
.click(selectors.itemBasicData.basicDataButton) .click(selectors.itemBasicData.basicDataButton)
.wait(selectors.itemBasicData.nameInput) .wait(selectors.itemBasicData.nameInput)
@ -72,7 +72,7 @@ describe('Item Create botanical path', () => {
expect(result).toEqual('Herp Derp'); expect(result).toEqual('Herp Derp');
}); });
it(`should confirm the Genus for item Mjolnir was edited`, async() => { it(`should confirm the Genus for the item was edited`, async() => {
const result = await nightmare const result = await nightmare
.waitForTextInInput(`${selectors.itemBotanical.genusAutocomplete} input`, 'Abies') .waitForTextInInput(`${selectors.itemBotanical.genusAutocomplete} input`, 'Abies')
.waitToGetProperty(`${selectors.itemBotanical.genusAutocomplete} input`, 'value'); .waitToGetProperty(`${selectors.itemBotanical.genusAutocomplete} input`, 'value');
@ -80,7 +80,7 @@ describe('Item Create botanical path', () => {
expect(result).toEqual('Abies'); expect(result).toEqual('Abies');
}); });
it(`should confirm the Species for item Mjolnir was edited`, async() => { it(`should confirm the Species for the item was edited`, async() => {
const result = await nightmare const result = await nightmare
.waitToGetProperty(`${selectors.itemBotanical.speciesAutocomplete} input`, 'value'); .waitToGetProperty(`${selectors.itemBotanical.speciesAutocomplete} input`, 'value');

View File

@ -7,11 +7,11 @@ describe('Item Create barcodes path', () => {
beforeAll(() => { beforeAll(() => {
nightmare nightmare
.loginAndModule('buyer', 'item') .loginAndModule('buyer', 'item')
.accessToSearchResult('Gem of Time') .accessToSearchResult('Object1 Gem1 5')
.accessToSection('item.card.itemBarcode'); .accessToSection('item.card.itemBarcode');
}); });
it(`should click create a new code and delete a former one`, async () => { it(`should click create a new code and delete a former one`, async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.itemBarcodes.firstCodeRemoveButton) .waitToClick(selectors.itemBarcodes.firstCodeRemoveButton)
.waitToClick(selectors.itemBarcodes.addBarcodeButton) .waitToClick(selectors.itemBarcodes.addBarcodeButton)
@ -23,7 +23,7 @@ describe('Item Create barcodes path', () => {
expect(result).toEqual('Data saved!'); expect(result).toEqual('Data saved!');
}); });
it(`should confirm the barcode 5 is created and it is now the third barcode as the first was deleted`, async () => { it(`should confirm the barcode 5 is created and it is now the third barcode as the first was deleted`, async() => {
const result = await nightmare const result = await nightmare
.click(selectors.itemBasicData.basicDataButton) .click(selectors.itemBasicData.basicDataButton)
.wait(selectors.itemBasicData.nameInput) .wait(selectors.itemBasicData.nameInput)

View File

@ -8,10 +8,10 @@ describe('Item regularize path', () => {
.loginAndModule('employee', 'item'); .loginAndModule('employee', 'item');
}); });
it('should search for the item Mjolnir', async() => { it('should search for the item', async() => {
const resultCount = await nightmare const resultCount = await nightmare
.wait(selectors.itemsIndex.searchItemInput) .wait(selectors.itemsIndex.searchItemInput)
.type(selectors.itemsIndex.searchItemInput, 'Mjolnir') .type(selectors.itemsIndex.searchItemInput, 'Object5 Weapon 50')
.click(selectors.itemsIndex.searchButton) .click(selectors.itemsIndex.searchButton)
.waitForNumberOfElements(selectors.itemsIndex.searchResult, 1) .waitForNumberOfElements(selectors.itemsIndex.searchResult, 1)
.countElement(selectors.itemsIndex.searchResult); .countElement(selectors.itemsIndex.searchResult);
@ -21,7 +21,7 @@ describe('Item regularize path', () => {
it(`should click on the search result to access to the item tax`, async() => { it(`should click on the search result to access to the item tax`, async() => {
const url = await nightmare const url = await nightmare
.waitForTextInElement(selectors.itemsIndex.searchResult, 'Mjolnir') .waitForTextInElement(selectors.itemsIndex.searchResult, 'Object5 Weapon 50')
.waitToClick(selectors.itemsIndex.searchResult) .waitToClick(selectors.itemsIndex.searchResult)
.waitForURL('/summary') .waitForURL('/summary')
.parsedUrl(); .parsedUrl();
@ -100,10 +100,10 @@ describe('Item regularize path', () => {
expect(url.hash).toEqual('#!/item/index'); expect(url.hash).toEqual('#!/item/index');
}); });
it('should search for the item Mjolnir once again', async() => { it('should search for the item once again', async() => {
const resultCount = await nightmare const resultCount = await nightmare
.wait(selectors.itemsIndex.searchItemInput) .wait(selectors.itemsIndex.searchItemInput)
.type(selectors.itemsIndex.searchItemInput, 'Mjolnir') .type(selectors.itemsIndex.searchItemInput, 'Object5 Weapon 50')
.click(selectors.itemsIndex.searchButton) .click(selectors.itemsIndex.searchButton)
.waitForNumberOfElements(selectors.itemsIndex.searchResult, 1) .waitForNumberOfElements(selectors.itemsIndex.searchResult, 1)
.countElement(selectors.itemsIndex.searchResult); .countElement(selectors.itemsIndex.searchResult);
@ -113,7 +113,7 @@ describe('Item regularize path', () => {
it(`should click on the search result to access to the item tax`, async() => { it(`should click on the search result to access to the item tax`, async() => {
const url = await nightmare const url = await nightmare
.waitForTextInElement(selectors.itemsIndex.searchResult, 'Mjolnir') .waitForTextInElement(selectors.itemsIndex.searchResult, 'Object5 Weapon 50')
.waitToClick(selectors.itemsIndex.searchResult) .waitToClick(selectors.itemsIndex.searchResult)
.waitForURL('/summary') .waitForURL('/summary')
.parsedUrl(); .parsedUrl();

View File

@ -11,42 +11,42 @@ describe('Ticket List sale path', () => {
.accessToSection('ticket.card.sale'); .accessToSection('ticket.card.sale');
}); });
it('should confirm the first ticket sale contains the colour', async () => { it('should confirm the first ticket sale contains the colour', async() => {
const value = await nightmare const value = await nightmare
.waitToGetProperty(selectors.ticketSales.firstSaleColour, 'innerText'); .waitToGetProperty(selectors.ticketSales.firstSaleColour, 'innerText');
expect(value).toContain('Red'); expect(value).toContain('Red');
}); });
it('should confirm the first ticket sale contains the lenght', async () => { it('should confirm the first ticket sale contains the lenght', async() => {
const value = await nightmare const value = await nightmare
.waitToGetProperty(selectors.ticketSales.firstSaleText, 'innerText'); .waitToGetProperty(selectors.ticketSales.firstSaleText, 'innerText');
expect(value).toContain('3'); expect(value).toContain('3');
}); });
it('should confirm the first ticket sale contains the price', async () => { it('should confirm the first ticket sale contains the price', async() => {
const value = await nightmare const value = await nightmare
.waitToGetProperty(selectors.ticketSales.firstSalePrice, 'innerText'); .waitToGetProperty(selectors.ticketSales.firstSalePrice, 'innerText');
expect(value).toContain('1.30'); expect(value).toContain('1.30');
}); });
it('should confirm the first ticket sale contains the discount', async () => { it('should confirm the first ticket sale contains the discount', async() => {
const value = await nightmare const value = await nightmare
.waitToGetProperty(selectors.ticketSales.firstSaleDiscount, 'innerText'); .waitToGetProperty(selectors.ticketSales.firstSaleDiscount, 'innerText');
expect(value).toContain('0 %'); expect(value).toContain('0 %');
}); });
it('should confirm the first ticket sale contains the total import', async () => { it('should confirm the first ticket sale contains the total import', async() => {
const value = await nightmare const value = await nightmare
.waitToGetProperty(selectors.ticketSales.firstSaleImport, 'innerText'); .waitToGetProperty(selectors.ticketSales.firstSaleImport, 'innerText');
expect(value).toContain('19.50'); expect(value).toContain('19.50');
}); });
it('should navigate to the catalog by pressing the new item button', async () => { it('should navigate to the catalog by pressing the new item button', async() => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.ticketSales.newItemButton) .waitToClick(selectors.ticketSales.newItemButton)
.waitForURL('/catalog') .waitForURL('/catalog')

View File

@ -72,7 +72,7 @@ describe('Ticket Edit basic data path', () => {
const result = await nightmare const result = await nightmare
.waitToGetProperty(selectors.ticketBasicData.stepTwoTotalPriceDif, 'innerText'); .waitToGetProperty(selectors.ticketBasicData.stepTwoTotalPriceDif, 'innerText');
expect(result).toContain('-20.65 €'); expect(result).toContain('-12.25 €');
}); });
it(`should then click next to move on to step three`, async() => { it(`should then click next to move on to step three`, async() => {

View File

@ -317,7 +317,7 @@ describe('Ticket Edit sale path', () => {
.wait(selectors.ticketSales.firstSaleText) .wait(selectors.ticketSales.firstSaleText)
.waitToGetProperty(selectors.ticketSales.firstSaleText, 'innerText'); .waitToGetProperty(selectors.ticketSales.firstSaleText, 'innerText');
expect(result).toContain(`Mark I`); expect(result).toContain(`Object4 Armor2 2`);
}); });
it('should go back to the original ticket sales section', async() => { it('should go back to the original ticket sales section', async() => {

View File

@ -9,7 +9,7 @@ describe('Ticket descriptor path', () => {
.loginAndModule('employee', 'ticket'); .loginAndModule('employee', 'ticket');
}); });
it('should count the mount of tickets in the turns section', async () => { it('should count the mount of tickets in the turns section', async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.ticketsIndex.moreMenu) .waitToClick(selectors.ticketsIndex.moreMenu)
.waitToClick(selectors.ticketsIndex.moreMenuTurns) .waitToClick(selectors.ticketsIndex.moreMenuTurns)
@ -19,7 +19,7 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual(5); expect(result).toEqual(5);
}); });
it('should now click on the Tickets button of the top bar menu', async () => { it('should now click on the Tickets button of the top bar menu', async() => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton) .waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible) .wait(selectors.globalItems.applicationsMenuVisible)
@ -30,7 +30,7 @@ describe('Ticket descriptor path', () => {
expect(url.hash).toEqual('#!/ticket/index'); expect(url.hash).toEqual('#!/ticket/index');
}); });
it('should search for the ticket 11', async () => { it('should search for the ticket 11', async() => {
const result = await nightmare const result = await nightmare
.wait(selectors.ticketsIndex.searchTicketInput) .wait(selectors.ticketsIndex.searchTicketInput)
.type(selectors.ticketsIndex.searchTicketInput, 'id:11') .type(selectors.ticketsIndex.searchTicketInput, 'id:11')
@ -41,7 +41,7 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual(1); expect(result).toEqual(1);
}); });
it(`should click on the search result to access to the ticket`, async () => { it(`should click on the search result to access to the ticket`, async() => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.ticketsIndex.searchResult) .waitToClick(selectors.ticketsIndex.searchResult)
.waitForURL('/summary') .waitForURL('/summary')
@ -50,7 +50,7 @@ describe('Ticket descriptor path', () => {
expect(url.hash).toContain('/summary'); expect(url.hash).toContain('/summary');
}); });
it('should add the ticket to thirsday turn using the descriptor more menu', async () => { it('should add the ticket to thirsday turn using the descriptor more menu', async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.ticketDescriptor.moreMenu) .waitToClick(selectors.ticketDescriptor.moreMenu)
.waitToClick(selectors.ticketDescriptor.moreMenuAddToTurn) .waitToClick(selectors.ticketDescriptor.moreMenuAddToTurn)
@ -60,7 +60,7 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual('Data saved!'); expect(result).toEqual('Data saved!');
}); });
it('should again click on the Tickets button of the top bar menu', async () => { it('should again click on the Tickets button of the top bar menu', async() => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton) .waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible) .wait(selectors.globalItems.applicationsMenuVisible)
@ -71,7 +71,7 @@ describe('Ticket descriptor path', () => {
expect(url.hash).toEqual('#!/ticket/index'); expect(url.hash).toEqual('#!/ticket/index');
}); });
it('should confirm the ticket 11 was added on thursday', async () => { it('should confirm the ticket 11 was added on thursday', async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.ticketsIndex.moreMenu) .waitToClick(selectors.ticketsIndex.moreMenu)
.waitToClick(selectors.ticketsIndex.moreMenuTurns) .waitToClick(selectors.ticketsIndex.moreMenuTurns)
@ -80,7 +80,7 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual('Thursday'); expect(result).toEqual('Thursday');
}); });
it('should click on the Tickets button of the top bar menu once more', async () => { it('should click on the Tickets button of the top bar menu once more', async() => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton) .waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible) .wait(selectors.globalItems.applicationsMenuVisible)
@ -91,7 +91,7 @@ describe('Ticket descriptor path', () => {
expect(url.hash).toEqual('#!/ticket/index'); expect(url.hash).toEqual('#!/ticket/index');
}); });
it('should now search for the ticket 11', async () => { it('should now search for the ticket 11', async() => {
const result = await nightmare const result = await nightmare
.wait(selectors.ticketsIndex.searchTicketInput) .wait(selectors.ticketsIndex.searchTicketInput)
.type(selectors.ticketsIndex.searchTicketInput, 'id:11') .type(selectors.ticketsIndex.searchTicketInput, 'id:11')
@ -102,7 +102,7 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual(1); expect(result).toEqual(1);
}); });
it(`should click on the search result to access to the ticket`, async () => { it(`should click on the search result to access to the ticket`, async() => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.ticketsIndex.searchResult) .waitToClick(selectors.ticketsIndex.searchResult)
.waitForURL('/summary') .waitForURL('/summary')
@ -111,7 +111,7 @@ describe('Ticket descriptor path', () => {
expect(url.hash).toContain('/summary'); expect(url.hash).toContain('/summary');
}); });
it('should add the ticket to saturday turn using the descriptor more menu', async () => { it('should add the ticket to saturday turn using the descriptor more menu', async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.ticketDescriptor.moreMenu) .waitToClick(selectors.ticketDescriptor.moreMenu)
.waitToClick(selectors.ticketDescriptor.moreMenuAddToTurn) .waitToClick(selectors.ticketDescriptor.moreMenuAddToTurn)
@ -121,7 +121,7 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual('Data saved!'); expect(result).toEqual('Data saved!');
}); });
it('should click on the Tickets button of the top bar menu once again', async () => { it('should click on the Tickets button of the top bar menu once again', async() => {
const url = await nightmare const url = await nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton) .waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible) .wait(selectors.globalItems.applicationsMenuVisible)
@ -132,7 +132,7 @@ describe('Ticket descriptor path', () => {
expect(url.hash).toEqual('#!/ticket/index'); expect(url.hash).toEqual('#!/ticket/index');
}); });
it('should confirm the ticket 11 was added on saturday', async () => { it('should confirm the ticket 11 was added on saturday', async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.ticketsIndex.moreMenu) .waitToClick(selectors.ticketsIndex.moreMenu)
.waitToClick(selectors.ticketsIndex.moreMenuTurns) .waitToClick(selectors.ticketsIndex.moreMenuTurns)
@ -141,7 +141,7 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual('Saturday'); expect(result).toEqual('Saturday');
}); });
it('should delete the weekly ticket 11', async () => { it('should delete the weekly ticket 11', async() => {
const result = await nightmare const result = await nightmare
.waitToClick(selectors.ticketsIndex.sixthWeeklyTicketDeleteIcon) .waitToClick(selectors.ticketsIndex.sixthWeeklyTicketDeleteIcon)
.waitForLastSnackbar(); .waitForLastSnackbar();
@ -149,7 +149,7 @@ describe('Ticket descriptor path', () => {
expect(result).toEqual('Data saved!'); expect(result).toEqual('Data saved!');
}); });
it('should confirm the sixth weekly ticket was deleted', async () => { it('should confirm the sixth weekly ticket was deleted', async() => {
const result = await nightmare const result = await nightmare
.countElement(selectors.ticketsIndex.weeklyTicket); .countElement(selectors.ticketsIndex.weeklyTicket);

View File

@ -12,12 +12,12 @@ module.exports = function(Self) {
Self.super_.setup.call(this); Self.super_.setup.call(this);
// Register field ACL validation // Register field ACL validation
this.beforeRemote('prototype.patchAttributes', ctx => this.checkUpdateAcls(ctx)); /* this.beforeRemote('prototype.patchAttributes', ctx => this.checkUpdateAcls(ctx));
this.beforeRemote('updateAll', ctx => this.checkUpdateAcls(ctx)); this.beforeRemote('updateAll', ctx => this.checkUpdateAcls(ctx));
this.beforeRemote('patchOrCreate', ctx => this.checkInsertAcls(ctx)); this.beforeRemote('patchOrCreate', ctx => this.checkInsertAcls(ctx));
this.beforeRemote('create', ctx => this.checkInsertAcls(ctx)); this.beforeRemote('create', ctx => this.checkInsertAcls(ctx));
this.beforeRemote('replaceById', ctx => this.checkInsertAcls(ctx)); this.beforeRemote('replaceById', ctx => this.checkInsertAcls(ctx));
this.beforeRemote('replaceOrCreate', ctx => this.checkInsertAcls(ctx)); this.beforeRemote('replaceOrCreate', ctx => this.checkInsertAcls(ctx)); */
this.remoteMethod('crud', { this.remoteMethod('crud', {
description: `Create, update or/and delete instances from model with a single request`, description: `Create, update or/and delete instances from model with a single request`,

View File

@ -1,7 +1,7 @@
const app = require(`${serviceRoot}/server/server`); const app = require(`${serviceRoot}/server/server`);
describe('Client activeWorkersWithRole', () => { describe('Client activeWorkersWithRole', () => {
it('should return the sales people as result', async () => { it('should return the sales people as result', async() => {
let filter = {where: {role: 'salesPerson'}}; let filter = {where: {role: 'salesPerson'}};
let result = await app.models.Client.activeWorkersWithRole(filter); let result = await app.models.Client.activeWorkersWithRole(filter);
@ -11,7 +11,7 @@ describe('Client activeWorkersWithRole', () => {
expect(isSalesPerson).toBeTruthy(); expect(isSalesPerson).toBeTruthy();
}); });
it('should return the buyers as result', async () => { it('should return the buyers as result', async() => {
let filter = {where: {role: 'buyer'}}; let filter = {where: {role: 'buyer'}};
let result = await app.models.Client.activeWorkersWithRole(filter); let result = await app.models.Client.activeWorkersWithRole(filter);

View File

@ -1,12 +1,12 @@
const app = require(`${serviceRoot}/server/server`); const app = require(`${serviceRoot}/server/server`);
describe('Client card', () => { describe('Client card', () => {
it('should call the card() method to receive a formated card of Bruce Wayne', async () => { it('should call the card() method to receive a formated card of Bruce Wayne', async() => {
let id = 101; let id = 101;
let result = await app.models.Client.getCard(id); let result = await app.models.Client.getCard(id);
expect(result.id).toEqual(101); expect(result.id).toEqual(101);
expect(result.name).toEqual('Bruce Wayne'); expect(result.name).toEqual('Bruce Wayne');
expect(result.debt).toEqual(79.1); expect(result.debt).toEqual(579.1);
}); });
}); });

View File

@ -1,44 +1,44 @@
const app = require(`${serviceRoot}/server/server`); const app = require(`${serviceRoot}/server/server`);
describe('client summary()', () => { describe('client summary()', () => {
it('should return a summary object containing data', async () => { it('should return a summary object containing data', async() => {
let result = await app.models.Client.summary(101); let result = await app.models.Client.summary(101);
expect(result.id).toEqual(101); expect(result.id).toEqual(101);
expect(result.name).toEqual('Bruce Wayne'); expect(result.name).toEqual('Bruce Wayne');
}); });
it('should return a summary object containing mana', async () => { it('should return a summary object containing mana', async() => {
let result = await app.models.Client.summary(101); let result = await app.models.Client.summary(101);
expect(result.mana.mana).toEqual(151.33); expect(result.mana.mana).toEqual(151.33);
}); });
it('should return a summary object containing debt', async () => { it('should return a summary object containing debt', async() => {
let result = await app.models.Client.summary(101); let result = await app.models.Client.summary(101);
expect(result.debt.debt).toEqual(79.1); expect(result.debt.debt).toEqual(579.1);
}); });
it('should return a summary object containing averageInvoiced', async () => { it('should return a summary object containing averageInvoiced', async() => {
let result = await app.models.Client.summary(101); let result = await app.models.Client.summary(101);
expect(result.averageInvoiced.invoiced).toEqual(1500); expect(result.averageInvoiced.invoiced).toEqual(1500);
}); });
it('should return a summary object containing totalGreuge', async () => { it('should return a summary object containing totalGreuge', async() => {
let result = await app.models.Client.summary(101); let result = await app.models.Client.summary(101);
expect(result.totalGreuge).toEqual(203.71); expect(result.totalGreuge).toEqual(203.71);
}); });
it('should return a summary object without containing active recoveries', async () => { it('should return a summary object without containing active recoveries', async() => {
let result = await app.models.Client.summary(101); let result = await app.models.Client.summary(101);
expect(result.recovery).toEqual(null); expect(result.recovery).toEqual(null);
}); });
it('should return a summary object containing active recoveries', async () => { it('should return a summary object containing active recoveries', async() => {
let result = await app.models.Client.summary(102); let result = await app.models.Client.summary(102);
expect(result.recovery.id).toEqual(3); expect(result.recovery.id).toEqual(3);

View File

@ -12,7 +12,7 @@ describe('item filter()', () => {
expect(result.length).toEqual(1); expect(result.length).toEqual(1);
expect(result[0].id).toEqual(2); expect(result[0].id).toEqual(2);
expect(result[0].name).toEqual('Gem of Mind'); expect(result[0].name).toEqual('Object2 Gem2 3');
expect(result[0].type).toEqual('Anthurium'); expect(result[0].type).toEqual('Anthurium');
}); });
}); });

View File

@ -14,7 +14,7 @@ describe('order catalogFilter()', () => {
let firstItemId = result[0].id; let firstItemId = result[0].id;
expect(result.length).toEqual(2); expect(result.length).toEqual(2);
expect(firstItemId).toEqual(1); expect(firstItemId).toEqual(2);
}); });
it('should return an array of items based on tag filter', async() => { it('should return an array of items based on tag filter', async() => {

View File

@ -4,7 +4,7 @@ describe('order getTotalVolume()', () => {
it('should return the total', async() => { it('should return the total', async() => {
let result = await app.models.Order.getTotalVolume(1); let result = await app.models.Order.getTotalVolume(1);
expect(result.totalVolume).toEqual(0.078); expect(result.totalVolume).toEqual(0.066);
expect(result.totalBoxes).toBeFalsy(); expect(result.totalBoxes).toBeFalsy();
}); });
}); });

View File

@ -1,14 +1,14 @@
const app = require(`${serviceRoot}/server/server`); const app = require(`${serviceRoot}/server/server`);
describe('ticket listSaleTracking()', () => { describe('ticket listSaleTracking()', () => {
it('should call the listSaleTracking method and return the response', async () => { it('should call the listSaleTracking method and return the response', async() => {
let filter = {where: {ticketFk: 1}}; let filter = {where: {ticketFk: 1}};
let result = await app.models.SaleTracking.listSaleTracking(filter); let result = await app.models.SaleTracking.listSaleTracking(filter);
expect(result[0].concept).toEqual('Gem of Time'); expect(result[0].concept).toEqual('Object1 Gem1 5');
}); });
it(`should call the listSaleTracking method and return zero if doesn't have lines`, async () => { it(`should call the listSaleTracking method and return zero if doesn't have lines`, async() => {
let filter = {where: {ticketFk: 2}}; let filter = {where: {ticketFk: 2}};
let result = await app.models.SaleTracking.listSaleTracking(filter); let result = await app.models.SaleTracking.listSaleTracking(filter);

View File

@ -1,10 +1,10 @@
const app = require(`${serviceRoot}/server/server`); const app = require(`${serviceRoot}/server/server`);
describe('sale getClaimableFromTicket()', () => { describe('sale getClaimableFromTicket()', () => {
it('should return the claimable sales of a given ticket', async () => { it('should return the claimable sales of a given ticket', async() => {
let claimableFromTicket = await app.models.Sale.getClaimableFromTicket(16); let claimableFromTicket = await app.models.Sale.getClaimableFromTicket(16);
expect(claimableFromTicket[0].concept).toBe('Gem of Time'); expect(claimableFromTicket[0].concept).toBe('Object1 Gem1 5');
expect(claimableFromTicket.length).toBe(3); expect(claimableFromTicket.length).toBe(3);
}); });
}); });

View File

@ -11,7 +11,7 @@ describe('sale priceDifference()', () => {
let result = await app.models.Sale.priceDifference(1, data); let result = await app.models.Sale.priceDifference(1, data);
expect(result.totalUnitPrice).toEqual(22.33); expect(result.totalUnitPrice).toEqual(22.33);
expect(result.totalNewPrice).toEqual(22.33); expect(result.totalNewPrice).toEqual(22.29);
expect(result.totalDifference).toEqual(0); expect(result.totalDifference).toEqual(0.8);
}); });
}); });

View File

@ -4,7 +4,7 @@ describe('ticket getTotalVolume()', () => {
it('should return the total volume of a ticket', async() => { it('should return the total volume of a ticket', async() => {
let ticketFk = 1; let ticketFk = 1;
let expectedResult = 0.078; let expectedResult = 0.066;
let result = await app.models.Ticket.getTotalVolume(ticketFk); let result = await app.models.Ticket.getTotalVolume(ticketFk);

View File

@ -2,7 +2,7 @@
echo USE `account`; > install/dump/dumpedFixtures.sql echo USE `account`; > install/dump/dumpedFixtures.sql
mysqldump --defaults-file=connect.ini --no-create-info account role roleRole roleInherit >> install/dump/dumpedFixtures.sql mysqldump --defaults-file=connect.ini --no-create-info account role roleRole roleInherit >> install/dump/dumpedFixtures.sql
echo USE `salix`; >> install/dump/dumpedFixtures.sql echo USE `salix`; >> install/dump/dumpedFixtures.sql
mysqldump --defaults-file=connect.ini --no-create-info salix ACL >> install/dump/dumpedFixtures.sql mysqldump --defaults-file=connect.ini --no-create-info salix ACL fieldAcl>> install/dump/dumpedFixtures.sql
echo USE `vn`; >> install/dump/dumpedFixtures.sql echo USE `vn`; >> install/dump/dumpedFixtures.sql
mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak bookingPlanner pgc tag alertLevel>> install/dump/dumpedFixtures.sql mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak bookingPlanner pgc tag alertLevel>> install/dump/dumpedFixtures.sql
echo USE `vn2008`; >> install/dump/dumpedFixtures.sql echo USE `vn2008`; >> install/dump/dumpedFixtures.sql

View File

@ -3,7 +3,7 @@
echo "USE \`account\`;" > install/dump/dumpedFixtures.sql echo "USE \`account\`;" > install/dump/dumpedFixtures.sql
mysqldump --defaults-file=connect.ini --no-create-info account role roleRole roleInherit >> install/dump/dumpedFixtures.sql mysqldump --defaults-file=connect.ini --no-create-info account role roleRole roleInherit >> install/dump/dumpedFixtures.sql
echo "USE \`salix\`;" >> install/dump/dumpedFixtures.sql echo "USE \`salix\`;" >> install/dump/dumpedFixtures.sql
mysqldump --defaults-file=connect.ini --no-create-info salix ACL >> install/dump/dumpedFixtures.sql mysqldump --defaults-file=connect.ini --no-create-info salix ACL fieldAcl>> install/dump/dumpedFixtures.sql
echo "USE \`vn\`;" >> install/dump/dumpedFixtures.sql echo "USE \`vn\`;" >> install/dump/dumpedFixtures.sql
mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak bookingPlanner pgc tag alertLevel >> install/dump/dumpedFixtures.sql mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak bookingPlanner pgc tag alertLevel >> install/dump/dumpedFixtures.sql
echo "USE \`vn2008\`;" >> install/dump/dumpedFixtures.sql echo "USE \`vn2008\`;" >> install/dump/dumpedFixtures.sql

View File

@ -1,84 +0,0 @@
/**
* Cambios para evitar fallos en local.
* Ya está en producción
**/
USE `vn`;
CREATE TABLE `salix`.`fieldAcl` (
`id` INT NOT NULL AUTO_INCREMENT,
`model` VARCHAR(255) NULL,
`property` VARCHAR(255) NULL,
`actionType` SET('insert', 'update', '*') NULL DEFAULT '*',
`role` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'name', 'update', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'contact', 'update', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'email', 'update', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'phone', 'update', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'mobile', 'update', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'contactChannelFk', 'update', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'socialName', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'fi', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'street', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'postcode', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'city', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'countryFk', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'provinceFk', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'isActive', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'salesPersonFk', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'hasToInvoice', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'isToBeMailed', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'isEqualizated', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'isFreezed', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'isVies', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'hasToInvoiceByAddress', 'update', 'salesPerson');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'isTaxDataChecked', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'payMethodFk', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'dueDay', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'iban', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'bankEntityFk', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'hasLcr', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'hasCoreVnl', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'hasSepaVnl', 'update', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Client', 'credit', 'update', 'teamBoss');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('BankEntity', '*', 'insert', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'isDefaultAddress', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'nickname', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'postalCode', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'provinceFk', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'agencyModeFk', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'phone', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'mobile', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'street', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'city', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'isActive', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'isEqualizated', '*', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Address', 'clientFk', 'insert', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('ClientObservation', '*', 'insert', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Recovery', '*', 'insert', 'administrative');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Recovery', 'finished', 'update', 'administrative');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('CreditClassification', 'finished', 'update', 'creditInsurance');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Account', '*', 'update', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Greuge', '*', 'insert', 'salesAssistant');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('ClientSample', '*', 'insert', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Item', '*', '*', 'buyer');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Item', '*', '*', 'marketingBoss');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('ItemBotanical', '*', '*', 'buyer');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('ClaimEnd', '*', '*', 'salesAssistant');
DELETE FROM `salix`.`ACL` WHERE `id`='28';
UPDATE `salix`.`ACL` SET `accessType`='*' WHERE `id`='60';
DELETE FROM `salix`.`ACL` WHERE `id`='59';
DELETE FROM `salix`.`ACL` WHERE `id`='57';
INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (116, 'BankEntity', '*', '*', 'ALLOW', 'role', 'employee');
INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (117, 'ClientSample', '*', '*', 'ALLOW', 'role', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('TicketWeekly', '*', '*', 'employee');
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`, `role`) VALUES ('Receipt', '*', '*', 'administrative');
INSERT INTO salix.fieldAcl (model,property,actionType,`role`) VALUES ('Zone','*','*','agency');

View File

@ -1,4 +0,0 @@
USE `vn`;
CREATE TABLE `vn`.`workerTeamCollegues` (
`workerFk` VARCHAR(255) NULL,
`collegueFk` VARCHAR(255) NULL);

View File

@ -1,15 +0,0 @@
USE `vn`;
CREATE
OR REPLACE ALGORITHM = UNDEFINED
DEFINER = `root`@`%`
SQL SECURITY DEFINER
VIEW `itemCategory` AS
SELECT
`r`.`id` AS `id`,
`r`.`reino` AS `name`,
`r`.`display` AS `display`,
`r`.`color` AS `color`,
`r`.`icon` AS `icon`,
`r`.`mercancia` AS `merchandise`
FROM
`vn2008`.`reinos` `r`;

View File

@ -1,11 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`itemLog_BEFORE_INSERT`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` TRIGGER `vn`.`itemLog_BEFORE_INSERT` BEFORE INSERT ON `itemLog` FOR EACH ROW
BEGIN
IF NEW.newInstance is NULL THEN
SET NEW.newInstance = NEW.description;
END IF;
END$$
DELIMITER ;

View File

@ -1,11 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`ticketLog_BEFORE_INSERT`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` TRIGGER `vn`.`ticketLog_BEFORE_INSERT` BEFORE INSERT ON `ticketLog` FOR EACH ROW
BEGIN
IF NEW.newInstance is NULL THEN
SET NEW.newInstance = NEW.description;
END IF;
END$$
DELIMITER ;

View File

@ -1,88 +0,0 @@
USE `vn`;
DROP procedure IF EXISTS `ticketCalculateClon`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` PROCEDURE `ticketCalculateClon`(IN vTicketNew INT, vTicketOld INT)
BEGIN
/*
* @vTicketNew id del nuevo ticket clonado
* @vTicketOld id ticket original, a partir del qual se clonara el nuevo
* Este procedimiento "rebioniza" una linea, eliminando los componentes existentes e insertandolos de nuevo
*/
DECLARE vShipped DATE;
DECLARE vClient INT;
DECLARE vWarehouse SMALLINT;
DECLARE vAgencyMode INT;
DECLARE vAddress INT;
DECLARE vLanded DATE;
DECLARE vAgency INT;
INSERT INTO orderTicket(orderFk,ticketFk)
SELECT orderFk, vTicketNew
FROM orderTicket
WHERE ticketFk = vTicketOld;
SELECT t.clientFk , t.warehouseFk, date(t.shipped), t.addressFk, t.agencyModeFk, t.landed, a.agencyFk
INTO vClient, vWarehouse, vShipped, vAddress, vAgencyMode, vLanded, vAgency
FROM vn.agencyMode a
JOIN vn.ticket t ON t.agencyModeFk = a.id
WHERE t.id = vTicketNew;
DROP TEMPORARY TABLE IF EXISTS tmp.agencyHourGetShipped;
CREATE TEMPORARY TABLE tmp.agencyHourGetShipped ENGINE = MEMORY
SELECT vWarehouse warehouseFk, vShipped shipped, vLanded landed;
CALL buyUltimate(vWarehouse, vShipped); -- rellena la tabla tmp.buyUltimate con la ultima compra
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot
SELECT vWarehouse warehouseFk,NULL available,s.itemFk, bu.buyFk
FROM sale s
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
WHERE s.ticketFk = vTicketOld GROUP BY s.itemFk;
CALL ticketComponentCalculate(vAddress,vAgencyMode);
-- Bionizamos lineas con Preu = 0
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
CREATE TEMPORARY TABLE tmp.sale
(PRIMARY KEY (saleFk)) ENGINE = MEMORY
SELECT s.id saleFk, vWarehouse warehouseFk
FROM sale s
JOIN ticket t on t.id = s.ticketFk WHERE s.ticketFk = vTicketNew AND s.price = 0;
CALL ticketComponentUpdateSale(1);
-- Bionizamos lineas con Preu > 0
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
CREATE TEMPORARY TABLE tmp.sale
(PRIMARY KEY (saleFk)) ENGINE = MEMORY
SELECT s.id saleFk, vWarehouse warehouseFk
FROM sale s
JOIN ticket t on t.id = s.ticketFk WHERE s.ticketFk = vTicketNew
AND s.price > 0;
CALL ticketComponentUpdateSale(6);
IF vLanded IS NULL THEN
CALL agencyHourGetLanded(vShipped, vAddress, vAgency,vWarehouse);
UPDATE ticket t
JOIN tmp.agencyHourGetLanded ah ON t.warehouseFk = ah.warehouseFk
SET t.landed = ah.landed
WHERE t.id = vTicketNew;
END IF;
-- Log
CALL `logAdd`(vTicketNew, 'update', ' ticket' , 'Bioniza Ticket');
-- Limpieza
DROP TEMPORARY TABLE IF EXISTS tmp.buyUltimate;
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
DROP TEMPORARY TABLE IF EXISTS agencyHourGetShipped;
END$$
DELIMITER ;

View File

@ -1,11 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`claimLog_BEFORE_INSERT`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` TRIGGER `vn`.`claimLog_BEFORE_INSERT` BEFORE INSERT ON `claimLog` FOR EACH ROW
BEGIN
IF NEW.newInstance is NULL THEN
SET NEW.newInstance = NEW.description;
END IF;
END$$
DELIMITER ;

View File

@ -1,11 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`clientLog_BEFORE_INSERT`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` TRIGGER `vn`.`clientLog_BEFORE_INSERT` BEFORE INSERT ON `clientLog` FOR EACH ROW
BEGIN
IF NEW.newInstance is NULL THEN
SET NEW.newInstance = NEW.description;
END IF;
END$$
DELIMITER ;

View File

@ -1,17 +0,0 @@
DROP TRIGGER IF EXISTS `vn`.`ticketLog_AFTER_INSERT`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` TRIGGER `vn`.`ticketLog_AFTER_INSERT` AFTER INSERT ON `ticketLog` FOR EACH ROW
BEGIN
DECLARE vActionId INT DEFAULT 84;
DECLARE vWorkerFk INT;
SELECT id INTO vWorkerFk
FROM worker w
WHERE w.userFk = NEW.userFk;
INSERT INTO vn2008.Tickets_dits(idaccion_dits,Id_Trabajador,Id_Ticket,value_old,value_new)
VALUES (vActionId, vWorkerFk, NEW.originFk, NULL, NULL);
END$$
DELIMITER ;

View File

@ -1,10 +0,0 @@
ALTER TABLE `vn`.`ticketLog`
DROP FOREIGN KEY `ticketLog_ibfk_2`;
ALTER TABLE `vn`.`ticketLog`
CHANGE COLUMN `userFk` `userFk` INT(10) UNSIGNED NULL DEFAULT NULL ;
ALTER TABLE `vn`.`ticketLog`
ADD CONSTRAINT `ticketLog_ibfk_2`
FOREIGN KEY (`userFk`)
REFERENCES `account`.`user` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE;

View File

@ -1,10 +0,0 @@
ALTER TABLE `vn2008`.`Tickets_dits`
DROP FOREIGN KEY `fgkey3`;
ALTER TABLE `vn2008`.`Tickets_dits`
CHANGE COLUMN `Id_Trabajador` `Id_Trabajador` INT(11) NULL DEFAULT NULL ;
ALTER TABLE `vn2008`.`Tickets_dits`
ADD CONSTRAINT `fgkey3`
FOREIGN KEY (`Id_Trabajador`)
REFERENCES `vn2008`.`Trabajadores` (`Id_Trabajador`)
ON DELETE NO ACTION
ON UPDATE CASCADE;

View File

@ -1,4 +1,4 @@
INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (118, 'WorkerTeam', '*', '*', 'ALLOW', 'role', 'salesPerson'); /* INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (118, 'WorkerTeam', '*', '*', 'ALLOW', 'role', 'salesPerson');
INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (119, 'Travel', '*', 'READ', 'ALLOW', 'role', 'employee'); INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (119, 'Travel', '*', 'READ', 'ALLOW', 'role', 'employee');
INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (120, 'Travel', '*', 'WRITE', 'ALLOW', 'role', 'buyer'); INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (120, 'Travel', '*', 'WRITE', 'ALLOW', 'role', 'buyer');
INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (121, 'Item', 'regularize', '*', 'ALLOW', 'role', 'employee'); INSERT INTO `salix`.`ACL` (`id`, `model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES (121, 'Item', 'regularize', '*', 'ALLOW', 'role', 'employee');
@ -8,3 +8,25 @@ UPDATE `salix`.`ACL` SET model='TicketRequest', property='*', accessType='*', pe
INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`,`role`) VALUES ('ClaimBeginning','*','*','salesAssistant'); INSERT INTO `salix`.`fieldAcl` (`model`, `property`, `actionType`,`role`) VALUES ('ClaimBeginning','*','*','salesAssistant');
INSERT INTO `salix`.`ACL`(`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Agency', 'getAgenciesWithWarehouse', '*', 'ALLOW', 'ROLE', 'employee'); INSERT INTO `salix`.`ACL`(`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('Agency', 'getAgenciesWithWarehouse', '*', 'ALLOW', 'ROLE', 'employee');
INSERT INTO `salix`.`ACL`(`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES('Client', 'activeWorkersWithRole', '*', 'ALLOW', 'ROLE', 'employee'); INSERT INTO `salix`.`ACL`(`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES('Client', 'activeWorkersWithRole', '*', 'ALLOW', 'ROLE', 'employee');
*/
INSERT INTO `salix`.`ACL`(`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES('CreditClassification', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
INSERT INTO `salix`.`ACL`(`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES('ClientObservation', '*', 'READ', 'ALLOW', 'ROLE', 'employee');
INSERT INTO `salix`.`ACL`(`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES('ItemTag', '*', 'WRITE', 'ALLOW', 'ROLE', 'marketingBoss');
INSERT INTO `salix`.`ACL`(`id`,`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`) VALUES (104,'Item','*','WRITE','ALLOW','ROLE','marketingBoss');
INSERT INTO `salix`.`ACL`(`id`,`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`) VALUES (105,'ItemBarcode','*','WRITE','ALLOW','ROLE','marketingBoss');
INSERT INTO `salix`.`ACL`(`id`,`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`) VALUES (106,'ItemBotanical','*','WRITE','ALLOW','ROLE','marketingBoss');
INSERT INTO `salix`.`ACL`(`id`,`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`) VALUES (107,'ItemNiche','*','WRITE','ALLOW','ROLE','marketingBoss');
INSERT INTO `salix`.`ACL`(`id`,`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`) VALUES (108,'ItemPlacement','*','WRITE','ALLOW','ROLE','marketingBoss');
INSERT INTO `salix`.`ACL`(`id`,`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`) VALUES (108,'ItemPlacement','*','WRITE','ALLOW','ROLE','marketingBoss');
INSERT INTO `ACLCopia` (`id`,`model`,`property`,`accessType`,`permission`,`principalType`,`principalId`) VALUES (59,'CreditInsurance','*','READ','ALLOW','ROLE','employee');
DELETE FROM `salix`.`ACL` WHERE `id`='67';
DELETE FROM `salix`.`ACL` WHERE `id`='74';
DELETE FROM `salix`.`ACL` WHERE `id`='92';
DELETE FROM `salix`.`ACL` WHERE `id`='93';
DELETE FROM `salix`.`ACL` WHERE `id`='95';

View File

@ -1,47 +0,0 @@
ALTER TABLE `vn2008`.`Ordenes`
ADD COLUMN `isOk` TINYINT(1) NULL DEFAULT NULL AFTER `odbc_date`,
ADD COLUMN `requesterFk` INT(11) NULL DEFAULT NULL AFTER `isOk`,
ADD COLUMN `atenderFk` INT(11) NULL DEFAULT NULL AFTER `requesterFk`;
ALTER TABLE `vn2008`.`Ordenes`
ADD COLUMN `ticketFk` INT(11) NULL DEFAULT NULL AFTER `atenderFk`;
ALTER TABLE `vn2008`.`Ordenes`
ADD INDEX `fgnRequester_idx` (`requesterFk` ASC),
ADD INDEX `fgnAtender_idx` (`atenderFk` ASC);
ALTER TABLE `vn2008`.`Ordenes`
ADD CONSTRAINT `fgnRequester`
FOREIGN KEY (`requesterFk`)
REFERENCES `vn2008`.`Trabajadores` (`Id_Trabajador`)
ON DELETE RESTRICT
ON UPDATE CASCADE,
ADD CONSTRAINT `fgnAtender`
FOREIGN KEY (`atenderFk`)
REFERENCES `vn2008`.`Trabajadores` (`Id_Trabajador`)
ON DELETE RESTRICT
ON UPDATE CASCADE,
ADD CONSTRAINT `fgbMovimiento`
FOREIGN KEY (`Id_Movimiento`)
REFERENCES `vn2008`.`Movimientos` (`Id_Movimiento`)
ON DELETE RESTRICT
ON UPDATE CASCADE;
ALTER TABLE `vn2008`.`Ordenes`
DROP FOREIGN KEY `fgbMovimiento`;
ALTER TABLE `vn2008`.`Ordenes`
ADD CONSTRAINT `fgbMovimiento`
FOREIGN KEY (`Id_Movimiento`)
REFERENCES `vn2008`.`Movimientos` (`Id_Movimiento`)
ON DELETE SET NULL
ON UPDATE CASCADE;
ALTER TABLE `vn2008`.`Ordenes`
ADD INDEX `fgnTicket_idx` (`ticketFk` ASC);
ALTER TABLE `vn2008`.`Ordenes`
ADD CONSTRAINT `fgnTicket`
FOREIGN KEY (`ticketFk`)
REFERENCES `vn2008`.`Tickets` (`Id_Ticket`)
ON DELETE RESTRICT
ON UPDATE CASCADE;

View File

@ -1,19 +0,0 @@
USE `vn`;
CREATE
OR REPLACE ALGORITHM = UNDEFINED
DEFINER = `root`@`%`
SQL SECURITY DEFINER
VIEW `ticketRequest` AS
SELECT
`t`.`Id_ORDEN` AS `id`,
`t`.`ORDEN` AS `description`,
`t`.`requesterFk` AS `requesterFk`,
`t`.`CodCOMPRADOR` AS `atenderFk`,
`t`.`CANTIDAD` AS `quantity`,
`t`.`PRECIOMAX` AS `price`,
`t`.`isOk` AS `isOk`,
`t`.`Id_Movimiento` AS `saleFk`,
`t`.`ticketFk` AS `ticketFk`,
`t`.`odbc_date` AS `created`
FROM
`vn2008`.`Ordenes` `t`;

View File

@ -1,134 +0,0 @@
USE `vn`;
DROP procedure IF EXISTS `ticketComponentPreview`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` PROCEDURE `ticketComponentPreview`(
vTicketFk INT,
vLanded DATE,
vAddressFk INT,
vAgencyModeFk INT,
vWarehouseFk SMALLINT)
BEGIN
/**
* Devuelve un listado previo de
* componentes para un ticket
*
* @param vTicketFk Id del ticket
* @param vLanded Fecha de recepcion
* @param vAddressFk Id del consignatario
* @param vAgencyModeFk Id del modo de agencia
* @param vWarehouseFk Id del almacén
*/
DECLARE vAgencyFk INT;
DECLARE vShipped DATE;
DECLARE vBuyOrderItem INT DEFAULT 100;
DECLARE vHasDataChanged BOOL DEFAULT FALSE;
DECLARE vHasAddressChanged BOOL;
DECLARE vHasAgencyModeChanged BOOL DEFAULT FALSE;
DECLARE vHasWarehouseChanged BOOL DEFAULT FALSE;
DECLARE vAddressTypeRateFk INT DEFAULT NULL;
DECLARE vAgencyModeTypeRateFk INT DEFAULT NULL;
DECLARE vHasChangeAll BOOL DEFAULT FALSE;
SELECT DATE(landed) <> vLanded,
addressFk <> vAddressFk,
agencyModeFk <> vAgencyModeFk,
warehouseFk <> vWarehouseFk
INTO
vHasDataChanged,
vHasAddressChanged,
vHasAgencyModeChanged,
vHasWarehouseChanged
FROM vn.ticket t
WHERE t.id = vTicketFk;
/*SELECT vHasDataChanged,
vHasAddressChanged,
vHasAgencyModeChanged,
vHasWarehouseChanged;
*/
IF vHasDataChanged OR vHasWarehouseChanged THEN
SET vHasChangeAll = TRUE;
END IF;
IF vHasAddressChanged THEN
SET vAddressTypeRateFk = 5;
END IF;
IF vHasAgencyModeChanged THEN
SET vAgencyModeTypeRateFk = 6;
END IF;
SELECT agencyFk INTO vAgencyFk
FROM agencyMode
WHERE id = vAgencyModeFk;
CALL agencyHourGetShipped(vLanded, vAddressFk, vAgencyFk);
SELECT shipped INTO vShipped
FROM tmp.agencyHourGetShipped
WHERE warehouseFk = vWarehouseFK;
CALL buyUltimate(vWarehouseFK, vShipped);
DROP TEMPORARY TABLE IF EXISTS tmp.ticketLot;
CREATE TEMPORARY TABLE tmp.ticketLot ENGINE = MEMORY (
SELECT
vWarehouseFK AS warehouseFk,
NULL AS available,
s.itemFk,
bu.buyFk
FROM sale s
LEFT JOIN tmp.buyUltimate bu ON bu.itemFk = s.itemFk
WHERE s.ticketFk = vTicketFk
AND s.itemFk != vBuyOrderItem
GROUP BY bu.warehouseFk, bu.itemFk);
CALL ticketComponentCalculate(vAddressFk, vAgencyModeFk);
/*SELECT *,vHasChangeAll,cr.isRenewable = FALSE,vHasChangeAll,
NOT (cr.componentTypeRate <=> vAddressTypeRateFk),NOT (cr.componentTypeRate <=> vAgencyModeTypeRateFk),
NOT (cr.componentTypeRate <=> vAddressTypeRateFk) OR NOT (cr.componentTypeRate <=> vAgencyModeTypeRateFk)
FROM saleComponent sc
JOIN sale s ON s.id = sc.saleFk
JOIN ticket t ON t.id = s.ticketFk
JOIN componentRate cr ON cr.id = sc.componentFk
WHERE s.ticketFk = vTicketFk
AND (cr.isRenewable = FALSE
OR
(NOT vHasChangeAll
AND (NOT (cr.componentTypeRate <=> vAddressTypeRateFk
OR cr.componentTypeRate <=> vAgencyModeTypeRateFk))));*/
/*SELECT * FROM tmp.ticketComponent;*/
-- Inserta los componentes que NO seran modificados
REPLACE INTO tmp.ticketComponent (warehouseFk, itemFk, componentFk, cost)
SELECT t.warehouseFk, s.itemFk, sc.componentFk, sc.value
FROM saleComponent sc
JOIN sale s ON s.id = sc.saleFk
JOIN ticket t ON t.id = s.ticketFk
JOIN componentRate cr ON cr.id = sc.componentFk
WHERE s.ticketFk = vTicketFk
AND (cr.isRenewable = FALSE
OR
(NOT vHasChangeAll
AND (NOT (cr.componentTypeRate <=> vAddressTypeRateFk
OR cr.componentTypeRate <=> vAgencyModeTypeRateFk))));
/*SELECT * FROM tmp.ticketComponent;*/
SET @shipped = vShipped;
DROP TEMPORARY TABLE
tmp.agencyHourGetShipped,
tmp.buyUltimate,
tmp.ticketLot;
IF IFNULL(vShipped, CURDATE() - 1) < CURDATE() THEN
CALL util.throw('NO_AGENCY_AVAILABLE');
END IF;
END$$
DELIMITER ;

View File

@ -1,54 +0,0 @@
USE `vn`;
DROP procedure IF EXISTS `ticketComponentPriceDifference`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` PROCEDURE `ticketComponentPriceDifference`(
vTicketFk INT,
vLanded DATE,
vAddressFk INT,
vAgencyModeFk INT,
vWarehouseFk INT)
BEGIN
/**
* Devuelve las diferencias de precio
* de los movimientos de un ticket.
*
* @param vTicketFk Id del ticket
* @param vLanded Fecha de recepcion
* @param vAddressFk Id del consignatario
* @param vAgencyModeFk Id del modo de agencia
* @param vWarehouseFk Id del almacén
*/
CALL vn.ticketComponentPreview(vTicketFk, vLanded, vAddressFk, vAgencyModeFk, vWarehouseFk);
SELECT s.itemFk,
i.name,
i.size,
i.category,
IFNULL(s.quantity, 0) AS quantity,
IFNULL(s.price, 0) AS price,
ROUND(SUM(tc.cost), 2) AS newPrice,
s.quantity * (s.price - ROUND(SUM(tc.cost), 2)) difference,
s.id AS saleFk
FROM sale s
JOIN item i ON i.id = s.itemFk
JOIN ticket t ON t.id = s.ticketFk
LEFT JOIN tmp.ticketComponent tc ON tc.itemFk = s.itemFk
AND tc.warehouseFk = t.warehouseFk
LEFT JOIN saleComponent sc ON sc.saleFk = s.id
AND sc.componentFk = tc.componentFk
LEFT JOIN componentRate cr ON cr.id = tc.componentFk
WHERE
t.id = vTicketFk
AND IF(sc.componentFk IS NULL
AND cr.classRate IS NOT NULL, FALSE, TRUE)
GROUP BY s.id ORDER BY s.id;
DROP TEMPORARY TABLE
tmp.ticketComponent,
tmp.ticketComponentPrice;
END$$
DELIMITER ;

View File

@ -1,10 +0,0 @@
USE `hedera`;
CREATE
OR REPLACE ALGORITHM = UNDEFINED
DEFINER = `root`@`%`
SQL SECURITY DEFINER
VIEW `orderTicket` AS
SELECT
`b`.`order_id` AS `orderFk`, `b`.`Id_Ticket` AS `ticketFk`
FROM
`vn2008`.`order_Tickets` `b`;

View File

@ -1,68 +0,0 @@
USE `vn`;
DROP function IF EXISTS `clientGetMana`;
DELIMITER $$
USE `vn`$$
CREATE DEFINER=`root`@`%` FUNCTION `clientGetMana`(vClient INT) RETURNS decimal(10,2)
BEGIN
/**
* Devuelve el maná del cliente.
*
* @param vClient Id del cliente
* @return Maná del cliente
*/
DECLARE vMana DECIMAL(10,2);
DECLARE vFromDated DATE;
SELECT max(dated) INTO vFromDated
FROM vn.clientManaCache;
SELECT sum(mana) INTO vMana
FROM
(
SELECT mana
FROM vn.clientManaCache
WHERE clientFk = vClient
AND dated = vFromDated
UNION ALL
SELECT s.quantity * Valor
FROM vn.ticket t
JOIN vn.address a ON a.id = t.addressFk
JOIN vn.sale s on s.ticketFk = t.id
JOIN vn2008.Movimientos_componentes mc on mc.Id_Movimiento = s.id
WHERE Id_Componente IN (37, 39)
AND t.shipped > vFromDated
AND t.shipped < TIMESTAMPADD(DAY,1,CURDATE())
AND a.clientFk = vClient
UNION ALL
SELECT - Entregado
FROM vn2008.Recibos r
JOIN vn2008.Clientes c using(Id_Cliente)
WHERE r.Id_Banco = 66
AND r.Fechacobro > vFromDated
AND r.Fechacobro <= CURDATE()
AND c.Id_Cliente = vClient
UNION ALL
SELECT g.Importe
FROM vn2008.Greuges g
JOIN vn2008.Clientes c using(Id_Cliente)
WHERE g.Greuges_type_id = 3 -- Maná
AND g.Fecha > vFromDated
AND g.Fecha <= CURDATE()
AND c.Id_Cliente = vClient
) sub;
RETURN IFNULL(vMana,0);
END$$
DELIMITER ;

View File

@ -1,50 +0,0 @@
USE `cache`;
DROP procedure IF EXISTS `last_buy_refresh`;
DELIMITER $$
USE `cache`$$
CREATE DEFINER=`root`@`%` PROCEDURE `last_buy_refresh`(vRefresh BOOL)
proc: BEGIN
/**
* Crea o actualiza la cache con la última compra y fecha de cada
* artículo hasta ayer. Para obtener la última compra hasta una fecha
* determinada utilizar el procedimiento vn2008.item_last_buy_().
*
* @param vRefresh %TRUE para forzar el recálculo de la cache
**/
DECLARE vCalc INT;
DECLARE started DATE;
DECLARE ended DATE;
DECLARE vLastRefresh DATE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
CALL cache_calc_unlock (vCalc);
RESIGNAL;
END;
CALL cache_calc_start (vCalc, vRefresh, 'last_buy', NULL);
IF !vRefresh
THEN
LEAVE proc;
END IF;
-- TODO: ¿Se puede usar la fecha del ultimo inventario?
SET started = vn2008.date_inv();-- TIMESTAMPADD(DAY, -90, CURDATE());
SET ended = CURDATE(); -- TIMESTAMPADD(DAY, -1, CURDATE());
CALL vn.buyUltimateFromInterval(NULL, started, ended);
DELETE FROM last_buy;
INSERT INTO last_buy (item_id, warehouse_id, buy_id, landing)
SELECT itemFk, warehouseFk, buyFk, landed
FROM tmp.buyUltimateFromInterval;
DROP TEMPORARY TABLE tmp.buyUltimateFromInterval;
CALL cache_calc_end (vCalc);
END$$
DELIMITER ;

View File

@ -1,11 +0,0 @@
use `vn`;
CREATE TABLE `ticketService` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`quantity` int(11) NOT NULL DEFAULT '0',
`price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
`taxClassFk` tinyint(3) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `ticketServiceIvaGroup_idx` (`taxClassFk`),
CONSTRAINT `ticketServiceIvaGroup` FOREIGN KEY (`taxClassFk`) REFERENCES `vn2008`.`iva_group` (`iva_group_id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

File diff suppressed because one or more lines are too long

View File

@ -498,13 +498,13 @@ INSERT INTO `vn`.`intrastat`(`id`, `description`, `taxClassFk`, `taxCodeFk`)
INSERT INTO `vn`.`item`(`id`, `name`,`typeFk`,`size`,`inkFk`,`category`,`stems`,`originFk`,`description`,`producerFk`,`intrastatFk`,`isOnOffer`,`expenceFk`,`isBargain`,`comment`,`relevancy`,`image`,`taxClassFk`,`longName`,`subName`,`tag5`,`value5`,`tag6`,`value6`,`tag7`,`value7`,`tag8`,`value8`) INSERT INTO `vn`.`item`(`id`, `name`,`typeFk`,`size`,`inkFk`,`category`,`stems`,`originFk`,`description`,`producerFk`,`intrastatFk`,`isOnOffer`,`expenceFk`,`isBargain`,`comment`,`relevancy`,`image`,`taxClassFk`,`longName`,`subName`,`tag5`,`value5`,`tag6`,`value6`,`tag7`,`value7`,`tag8`,`value8`)
VALUES VALUES
(1 , 'Gem of Time', 2, 70, 'AMA', 'EXT', 1 , 1, 'One of the infinity gems', 1, 06021010, 0, 2000000000, 0, NULL, 0, 66540, 1, 'Gem of Time', NULL, 'Medida', '70', 'Color', 'Amarillo' , 'Categoria', 'EXT', 'Tallos', '1'), (1 , 'Object1 Gem1 5', 2, 70, 'AMA', 'EXT', 1 , 1, 'One of the infinity gems', 1, 06021010, 0, 2000000000, 0, NULL, 0, 66540, 1, 'Object1 Gem1 5', NULL, 'Medida', '70', 'Color', 'Amarillo' , 'Categoria', 'EXT', 'Tallos', '1'),
(2 , 'Gem of Mind', 2, 70, 'AZL', 'EXT', 1 , 2, 'One of the infinity gems', 1, 06021010, 0, 2000000000, 0, NULL, 0, 65540, 1, 'Gem of Mind', NULL, 'Medida', '70', 'Color', 'Azul' , 'Categoria', 'EXT', 'Tallos', '1'), (2 , 'Object2 Gem2 3', 2, 70, 'AZL', 'EXT', 1 , 2, 'One of the infinity gems', 1, 06021010, 0, 2000000000, 0, NULL, 0, 65540, 1, 'Object2 Gem2 3', NULL, 'Medida', '70', 'Color', 'Azul' , 'Categoria', 'EXT', 'Tallos', '1'),
(3 , 'Iron Patriot', 1, 60, 'AMR', 'EXT', 1 , 3, 'Rhodeys armor', 1, 05080000, 0, 4751000000, 0, NULL, 0, 61692, 1, 'Iron Patriot', NULL, 'Medida', '60', 'Color', 'Rosa/Amarillo', 'Categoria', 'EXT', 'Tallos', '1'), (3 , 'Object3 Armor 3', 1, 60, 'AMR', 'EXT', 1 , 3, 'Rhodeys armor', 1, 05080000, 0, 4751000000, 0, NULL, 0, 61692, 1, 'Object3 Armor 3', NULL, 'Medida', '60', 'Color', 'Rosa/Amarillo', 'Categoria', 'EXT', 'Tallos', '1'),
(4 , 'Mark I', 1, 60, 'AMR', 'EXT', 1 , 1, 'Iron Mans first armor', 1, 05080000, 1, 4751000000, 0, NULL, 0, 66090, 2, 'Mark I', NULL, 'Medida', '60', 'Color', 'Rosa/Amarillo', 'Categoria', 'EXT', 'Tallos', '1'), (4 , 'Object4 Armor2 2', 1, 60, 'AMR', 'EXT', 1 , 1, 'Iron Mans first armor', 1, 05080000, 1, 4751000000, 0, NULL, 0, 66090, 2, 'Object4 Armor2 2', NULL, 'Medida', '60', 'Color', 'Rosa/Amarillo', 'Categoria', 'EXT', 'Tallos', '1'),
(5 , 'Mjolnir', 3, 30, 'GRE', 'EXT', 1 , 2, 'Thors hammer!', 2, 06021010, 1, 4751000000, 0, NULL, 0, 67350, 2, 'Mjolnir', NULL, 'Medida', '30', 'Color', 'Azul' , 'Categoria', 'EXT', 'Tallos', '1'), (5 , 'Object5 Weapon 50', 3, 30, 'GRE', 'EXT', 1 , 2, 'Thors hammer!', 2, 06021010, 1, 4751000000, 0, NULL, 0, 67350, 2, 'Object5 Weapon 50', NULL, 'Medida', '30', 'Color', 'Azul' , 'Categoria', 'EXT', 'Tallos', '1'),
(6 , 'Broken Box', 5, 30, 'GRE', 'EXT', 1 , 2, NULL, NULL, 06021010, 0, 4751000000, 0, NULL, 0, 67350, 2, 'Legendary Box', NULL, 'Medida', '30', 'Color', 'Gris' , NULL, NULL, NULL, NULL), (6 , 'Broken Box', 5, 30, 'GRE', 'EXT', 1 , 2, NULL, NULL, 06021010, 0, 4751000000, 0, NULL, 0, 67350, 2, 'Broken Box', NULL, 'Medida', '30', 'Color', 'Gris' , NULL, NULL, NULL, NULL),
(7 , 'Legendary Box', 5, 90, 'AZL', 'EXT', 1 , 2, NULL, NULL, 06021010, 0, 4751000000, 0, NULL, 0, 67350, 2, 'Broken Box', NULL, 'Medida', '90', 'Color', 'Gris' , NULL, NULL, NULL, NULL), (7 , 'Legendary Box', 5, 90, 'AZL', 'EXT', 1 , 2, NULL, NULL, 06021010, 0, 4751000000, 0, NULL, 0, 67350, 2, 'Legendary Box', NULL, 'Medida', '90', 'Color', 'Gris' , NULL, NULL, NULL, NULL),
(71, 'ShippingCost', 4, NULL, NULL, NULL, NULL, 1, NULL, NULL, 06021010, 1, 4751000000, 0, NULL, 0, NULL, 2, 'ShippingCost', NULL, NULL , NULL, NULL , NULL , NULL, NULL, NULL, NULL); (71, 'ShippingCost', 4, NULL, NULL, NULL, NULL, 1, NULL, NULL, 06021010, 1, 4751000000, 0, NULL, 0, NULL, 2, 'ShippingCost', NULL, NULL , NULL, NULL , NULL , NULL, NULL, NULL, NULL);
INSERT INTO `vn`.`expedition`(`id`, `agencyModeFk`, `ticketFk`, `isBox`, `created`, `itemFk`, `counter`, `checked`, `workerFk`) INSERT INTO `vn`.`expedition`(`id`, `agencyModeFk`, `ticketFk`, `isBox`, `created`, `itemFk`, `counter`, `checked`, `workerFk`)
@ -529,19 +529,19 @@ INSERT INTO `vn`.`ticketPackaging`(`id`, `ticketFk`, `packagingFk`, `quantity`,
INSERT INTO `vn`.`sale`(`id`, `itemFk`, `ticketFk`, `concept`, `quantity`, `price`, `discount`, `reserved`, `isPicked`, `created`) INSERT INTO `vn`.`sale`(`id`, `itemFk`, `ticketFk`, `concept`, `quantity`, `price`, `discount`, `reserved`, `isPicked`, `created`)
VALUES VALUES
(1, 1, 1 , 'Gem of Time', 5, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), (1, 1, 1 , 'Object1 Gem1 5', 5, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)),
(2, 2, 1 , 'Gem of Mind', 10, 1.07, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), (2, 2, 1 , 'Object2 Gem2 3', 10, 1.07, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)),
(3, 1, 1 , 'Gem of Time', 2, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), (3, 1, 1 , 'Object1 Gem1 5', 2, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)),
(4, 4, 1 , 'Mark I' , 20, 3.06, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), (4, 4, 1 , 'Object4 Armor2 2' , 20, 3.06, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY)),
(5, 1, 2 , 'Gem of Time', 10, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -10 DAY)), (5, 1, 2 , 'Object1 Gem1 5', 10, 9.10, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -10 DAY)),
(6, 1, 3 , 'Gem of Time', 15, 6.50, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -5 DAY)), (6, 1, 3 , 'Object1 Gem1 5', 15, 6.50, 0, 0, 0, DATE_ADD(CURDATE(), INTERVAL -5 DAY)),
(7, 2, 11, 'Gem of Mind', 15, 1.30, 0, 0, 0, CURDATE()), (7, 2, 11, 'Object2 Gem2 3', 15, 1.30, 0, 0, 0, CURDATE()),
(8, 4, 11, 'Mark I' , 10, 3.26, 0, 0, 0, CURDATE()), (8, 4, 11, 'Object4 Armor2 2' , 10, 3.26, 0, 0, 0, CURDATE()),
(9, 1, 16, 'Gem of Time', 5, 9.10, 0, 0, 0, CURDATE()), (9, 1, 16, 'Object1 Gem1 5', 5, 9.10, 0, 0, 0, CURDATE()),
(10, 2, 16, 'Gem of Mind', 10, 1.07, 0, 0, 0, CURDATE()), (10, 2, 16, 'Object2 Gem2 3', 10, 1.07, 0, 0, 0, CURDATE()),
(11, 1, 16, 'Gem of Time', 2, 9.10, 0, 0, 0, CURDATE()), (11, 1, 16, 'Object1 Gem1 5', 2, 9.10, 0, 0, 0, CURDATE()),
(12, 4, 16, 'Mark I' , 20, 3.06, 0, 0, 0, CURDATE()), (12, 4, 16, 'Object4 Armor2 2' , 20, 3.06, 0, 0, 0, CURDATE()),
(13, 2, 8, 'Gem of Mind', 15, 1.30, 0, 0, 0, CURDATE()); (13, 2, 8, 'Object2 Gem2 3', 15, 1.30, 0, 0, 0, CURDATE());
INSERT INTO `vn`.`saleChecked`(`saleFk`, `isChecked`) INSERT INTO `vn`.`saleChecked`(`saleFk`, `isChecked`)
VALUES VALUES
@ -677,7 +677,7 @@ INSERT INTO `vn`.`itemTag`(`id`,`itemFk`,`tagFk`,`value`,`priority`)
(19, 3, 1 , 'Green' , 5), (19, 3, 1 , 'Green' , 5),
(20, 3, 67, 'EXT' , 6), (20, 3, 67, 'EXT' , 6),
(21, 3, 23, '0' , 7), (21, 3, 23, '0' , 7),
(22, 4, 56, 'Object3', 1), (22, 4, 56, 'Object4', 1),
(23, 4, 58, 'Armor2' , 2), (23, 4, 58, 'Armor2' , 2),
(24, 4, 4, '2' , 3), (24, 4, 4, '2' , 3),
(25, 4, 36, 'Stark' , 4), (25, 4, 36, 'Stark' , 4),
@ -1026,7 +1026,13 @@ INSERT INTO `vn2008`.`workerTeam`(`id`, `team`, `user`)
INSERT INTO `vn`.`ticketRequest`(`id`, `description`, `requesterFk`, `atenderFk`, `quantity`, `price`, `isOk`, `saleFk`, `ticketFk`, `created`) INSERT INTO `vn`.`ticketRequest`(`id`, `description`, `requesterFk`, `atenderFk`, `quantity`, `price`, `isOk`, `saleFk`, `ticketFk`, `created`)
VALUES VALUES
(1, 'Gem of Time', 18, 35, 5, 9.10, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), (1, 'Object1 Gem1 5', 18, 35, 5, 9.10, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)),
(2, 'Gem of Mind', 18, 35, 10, 1.07, 0, NULL, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), (2, 'Object2 Gem2 3', 18, 35, 10, 1.07, 0, NULL, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)),
(3, 'Mark I', 18, 35, 20, 3.06, 0, NULL, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)), (3, 'Object4 Armor2 2', 18, 35, 20, 3.06, 0, NULL, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY)),
(4, 'Gem of Mind', 18, 35, 15, 1.30, NULL, NULL, 11, CURDATE()); (4, 'Object2 Gem2 3', 18, 35, 15, 1.30, NULL, NULL, 11, CURDATE());
delete from `account`.`roleRole` where role =52 and inheritsFrom = 35;
delete from `account`.`roleInherit` where role =52 and inheritsFrom = 35;

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@ let verbose = false;
if (process.argv[2] === '--v') if (process.argv[2] === '--v')
verbose = true; verbose = true;
serviceRoot = __dirname; loopbackApp = `vn-loopback/server/server`;
let Jasmine = require('jasmine'); let Jasmine = require('jasmine');
let jasmine = new Jasmine(); let jasmine = new Jasmine();