This commit is contained in:
Carlos Jimenez Ruiz 2019-02-15 12:43:18 +01:00
commit 3ab0b2eb19
58 changed files with 666 additions and 475 deletions

23
Jenkinsfile vendored
View File

@ -15,7 +15,7 @@ pipeline {
stage('Checkout') {
steps {
script {
env.COMPOSE_PROJECT_NAME = env.JOB_NAME.replace('/', '-');
env.COMPOSE_PROJECT_NAME = env.JOB_NAME.replace('/', '-')
env.GIT_COMMITTER_EMAIL = sh(
script: 'git --no-pager show -s --format="%ae"',
returnStdout: true
@ -24,21 +24,24 @@ pipeline {
switch (env.BRANCH_NAME) {
case 'master':
env.PORT = 5002
break;
case 'test':
break
case 'test':
env.PORT = 5001
break;
break
case 'test':
env.PORT = 5000
break
}
switch (env.BRANCH_NAME) {
case 'master':
env.NODE_ENV = 'production'
break;
case 'test':
break
case 'test':
env.NODE_ENV = 'test'
break;
break
case 'dev':
env.NODE_ENV = 'development'
break;
break
}
}
echo "Committer: ${env.GIT_COMMITTER_EMAIL}"
@ -57,7 +60,7 @@ pipeline {
}
stage('Test') {
when {
branch 'dev';
branch 'dev'
}
environment {
NODE_ENV = ""
@ -67,7 +70,7 @@ pipeline {
steps {
nodejs('node-lts') {
sh 'karma start --junit'
sh 'gulp backTestDocker --junit --random --run-chown'
sh 'gulp backTestDockerOnce --junit --random --run-chown'
}
}
}

View File

@ -441,6 +441,31 @@ let actions = {
.waitToClick(`vn-left-menu li > a[ui-sref="${sectionRoute}"]`)
.then(done)
.catch(done);
},
checkboxState: function(selector, done) {
this.wait(selector)
.evaluate(checkboxSelector => {
return document.querySelector(checkboxSelector).getAttribute('class');
}, selector)
.then(elementClass => {
let classList = elementClass.split(' ');
let className;
if (classList.includes('md-checked'))
className = 'checked';
if (classList.includes('md-intermediate'))
className = 'intermediate';
if (!classList.includes('md-intermediate') && !classList.includes('md-checked'))
className = 'unchecked';
if (!className)
throw new Error(`selector: ${selector} is not a md-checkbox`);
done(null, className);
})
.then(done)
.catch(done);
}
};

View File

@ -57,34 +57,29 @@ export default {
fiscalDataButton: `vn-left-menu a[ui-sref="client.card.fiscalData"]`,
socialNameInput: `${components.vnTextfield}[name="socialName"]`,
fiscalIdInput: `${components.vnTextfield}[name="fi"]`,
equalizationTaxCheckboxLabel: `vn-check[label='Is equalizated'] > label > input`,
equalizationTaxCheckbox: `vn-check[label='Is equalizated'] md-checkbox`,
acceptPropagationButton: `vn-client-fiscal-data > vn-confirm button[response=ACCEPT]`,
addressInput: `${components.vnTextfield}[name="street"]`,
cityInput: `${components.vnTextfield}[name="city"]`,
postcodeInput: `${components.vnTextfield}[name="postcode"]`,
provinceAutocomplete: `vn-autocomplete[field="$ctrl.client.provinceFk"]`,
countryAutocomplete: `vn-autocomplete[field="$ctrl.client.countryFk"]`,
activeCheckboxLabel: `vn-check[label="Active"] > label`,
activeCheckboxInput: `vn-check[label="Active"] input`,
frozenCheckboxLabel: `vn-check[label="Frozen"] > label`,
frozenCheckboxInput: `vn-check[label="Frozen"] input`,
invoiceByAddressCheckboxInput: `vn-check[label='Invoice by address'] > label > input`,
verifiedDataCheckbox: `vn-check[label="Verified data"] input`,
verifiedDataCheckboxInput: `vn-check[label="Verified data"] > label > input`,
hasToInvoiceCheckboxLabel: `vn-check[label='Has to invoice'] > label`,
hasToInvoiceCheckboxInput: `vn-check[label='Has to invoice'] input`,
invoiceByMailCheckboxLabel: `vn-check[label='Invoice by mail'] > label`,
invoiceByMailCheckboxInput: `vn-check[label='Invoice by mail'] input`,
viesCheckboxInput: `vn-check[label='Vies'] > label > input`,
activeCheckbox: `vn-check[label="Active"] md-checkbox`,
frozenCheckbox: `vn-check[label="Frozen"] md-checkbox`,
invoiceByAddressCheckbox: `vn-check[label='Invoice by address'] md-checkbox`,
verifiedDataCheckbox: `vn-check[label="Verified data"] md-checkbox`,
hasToInvoiceCheckbox: `vn-check[label='Has to invoice'] md-checkbox`,
invoiceByMailCheckbox: `vn-check[label='Invoice by mail'] md-checkbox`,
viesCheckbox: `vn-check[label='Vies'] md-checkbox`,
saveButton: `${components.vnSubmit}`
},
clientPayMethod: {
payMethodAutocomplete: `vn-autocomplete[field="$ctrl.client.payMethodFk"]`,
IBANInput: `${components.vnTextfield}[name="iban"]`,
dueDayInput: `${components.vnTextfield}[name="dueDay"]`,
receivedCoreLCRCheckbox: `vn-check[label='Received LCR'] > label > input`,
receivedCoreVNLCheckbox: `vn-check[label='Received core VNL'] > label > input`,
receivedB2BVNLCheckbox: `vn-check[label='Received B2B VNL'] > label > input`,
receivedCoreLCRCheckbox: `vn-check[label='Received LCR'] md-checkbox`,
receivedCoreVNLCheckbox: `vn-check[label='Received core VNL'] md-checkbox`,
receivedB2BVNLCheckbox: `vn-check[label='Received B2B VNL'] md-checkbox`,
swiftBicAutocomplete: 'vn-client-billing-data vn-autocomplete[field="$ctrl.client.bankEntityFk"]',
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',
@ -96,7 +91,7 @@ export default {
clientAddresses: {
addressesButton: `vn-left-menu a[ui-sref="client.card.address.index"]`,
createAddress: `vn-client-address-index ${components.vnFloatButton}`,
defaultCheckboxInput: `vn-check[label='Default'] > label > input`,
defaultCheckboxInput: `vn-check[label='Default'] md-checkbox`,
consigneeInput: `${components.vnTextfield}[name="nickname"]`,
streetAddressInput: `${components.vnTextfield}[name="street"]`,
postcodeInput: `${components.vnTextfield}[name="postalCode"]`,
@ -109,8 +104,8 @@ export default {
secondMakeDefaultStar: 'vn-client-address-index vn-card vn-horizontal:nth-child(2) vn-icon-button[icon="star_border"]',
firstEditButton: `vn-client-address-index vn-icon-button[icon='edit']`,
secondEditButton: `vn-client-address-index vn-horizontal:nth-child(2) vn-icon-button[icon='edit']`,
activeCheckbox: `vn-check[label='Enabled'] > label > input`,
equalizationTaxCheckboxLabel: `vn-client-address-edit vn-check[label='Is equalizated'] > label > input`,
activeCheckbox: `vn-check[label='Enabled'] md-checkbox`,
equalizationTaxCheckbox: `vn-client-address-edit vn-check[label="Is equalizated"] md-checkbox`,
firstObservationTypeAutocomplete: `vn-client-address-edit [name=observations] :nth-child(1) [field="observation.observationTypeFk"]`,
firstObservationDescriptionInput: `vn-client-address-edit [name=observations] :nth-child(1) [model="observation.description"] input`,
secondObservationTypeAutocomplete: `vn-client-address-edit [name=observations] :nth-child(2) [field="observation.observationTypeFk"]`,
@ -122,7 +117,7 @@ export default {
},
clientWebAccess: {
webAccessButton: `vn-left-menu a[ui-sref="client.card.webAccess"]`,
enableWebAccessCheckbox: `vn-check[label='Enable web access'] > label > input`,
enableWebAccessCheckbox: `vn-check[label='Enable web access'] md-checkbox`,
userNameInput: `${components.vnTextfield}[name="name"]`,
saveButton: `${components.vnSubmit}`
},
@ -205,7 +200,7 @@ export default {
originAutocomplete: `vn-autocomplete[field="$ctrl.item.originFk"]`,
expenceAutocomplete: `vn-autocomplete[field="$ctrl.item.expenceFk"]`,
longNameInput: `vn-textfield[field="$ctrl.item.longName"] input`,
isActiveCheckbox: `vn-check[label='Active'] > label > input`,
isActiveCheckbox: `vn-check[label='Active'] md-checkbox`,
submitBasicDataButton: `${components.vnSubmit}`
},
itemTags: {
@ -350,7 +345,7 @@ export default {
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(1)`,
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"] md-checkbox`,
secondSaleClaimIcon: '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',
secondSaleColour: `vn-ticket-sale vn-tr:nth-child(2) vn-td:nth-child(5) section:nth-child(5)`,
secondSalePrice: `vn-ticket-sale vn-tr:nth-child(2) vn-td:nth-child(7)`,
@ -358,9 +353,9 @@ export default {
secondSaleImport: `vn-ticket-sale vn-tr:nth-child(2) vn-td:nth-child(9)`,
secondSaleText: `vn-table div > vn-tbody > vn-tr:nth-child(2)`,
totalImport: 'vn-ticket-sale > vn-vertical > vn-card > div > vn-vertical > vn-horizontal > vn-one > p:nth-child(3) > strong',
selectAllSalesCheckbox: `vn-ticket-sale vn-thead vn-check label`,
secondSaleCheckbox: `vn-ticket-sale vn-tr:nth-child(2) vn-check[field="sale.checked"] label`,
thirdSaleCheckbox: `vn-ticket-sale vn-tr:nth-child(3) vn-check[field="sale.checked"] label`,
selectAllSalesCheckbox: `vn-ticket-sale vn-thead vn-check md-checkbox`,
secondSaleCheckbox: `vn-ticket-sale vn-tr:nth-child(2) vn-check[field="sale.checked"] md-checkbox`,
thirdSaleCheckbox: `vn-ticket-sale vn-tr:nth-child(3) vn-check[field="sale.checked"] md-checkbox`,
deleteSaleButton: 'vn-ticket-sale vn-tool-bar > vn-button[icon="delete"]',
transferSaleButton: 'vn-ticket-sale vn-tool-bar > vn-button[icon="call_split"]',
moveToTicketInput: 'vn-ticket-sale vn-popover.transfer vn-textfield[model="$ctrl.moveToTicketFk"] input',
@ -441,7 +436,7 @@ export default {
},
claimBasicData: {
claimStateAutocomplete: 'vn-claim-basic-data vn-autocomplete[field="$ctrl.claim.claimStateFk"]',
isPaidWithManaCheckbox: 'vn-check[field="$ctrl.claim.isChargedToMana"] > label > input',
isPaidWithManaCheckbox: 'vn-check[field="$ctrl.claim.isChargedToMana"] md-checkbox',
responsabilityInputRange: `vn-input-range`,
observationInput: `vn-textarea[label="Observation"] textarea`,
saveButton: `${components.vnSubmit}`

View File

@ -33,12 +33,10 @@ describe('Claim edit basic data path', () => {
});
it('should confirm the Is paid with mana checkbox is checked', async() => {
const value = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.claimBasicData.isPaidWithManaCheckbox);
const result = await nightmare
.checkboxState(selectors.claimBasicData.isPaidWithManaCheckbox);
expect(value).toBeTruthy();
expect(result).toBe('checked');
});
it('should confirm the claim observation was edited', async() => {

View File

@ -15,12 +15,9 @@ describe('Client Edit fiscalData path', () => {
it(`should click on the 1st edit icon to check EQtax isnt checked`, async() => {
const result = await nightmare
.waitToClick(selectors.clientAddresses.firstEditButton)
.wait(selectors.clientAddresses.equalizationTaxCheckboxLabel)
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientAddresses.equalizationTaxCheckboxLabel);
.checkboxState(selectors.clientAddresses.equalizationTaxCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
// Confirms all addresses have EQtax false for future propagation test step 2
@ -28,12 +25,9 @@ describe('Client Edit fiscalData path', () => {
const result = await nightmare
.waitToClick(selectors.clientAddresses.addressesButton)
.waitToClick(selectors.clientAddresses.secondEditButton)
.wait(selectors.clientAddresses.equalizationTaxCheckboxLabel)
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientAddresses.equalizationTaxCheckboxLabel);
.checkboxState(selectors.clientAddresses.equalizationTaxCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
it(`should click on the fiscal data button`, async() => {
@ -47,9 +41,10 @@ describe('Client Edit fiscalData path', () => {
it('should not be able to edit the verified data checkbox', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
.evaluate(selector => {
return document.querySelector(selector).disabled;
}, selectors.clientFiscalData.verifiedDataCheckboxInput);
return document.querySelector(selector).getAttribute('disabled');
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBeTruthy();
});
@ -78,14 +73,14 @@ describe('Client Edit fiscalData path', () => {
.write(selectors.clientFiscalData.cityInput, 'N/A')
.autocompleteSearch(selectors.clientFiscalData.countryAutocomplete, 'Francia')
.autocompleteSearch(selectors.clientFiscalData.provinceAutocomplete, 'Province two')
.waitToClick(selectors.clientFiscalData.activeCheckboxLabel)
.waitToClick(selectors.clientFiscalData.frozenCheckboxLabel)
.waitToClick(selectors.clientFiscalData.hasToInvoiceCheckboxLabel)
.waitToClick(selectors.clientFiscalData.viesCheckboxInput)
.waitToClick(selectors.clientFiscalData.invoiceByMailCheckboxLabel)
.waitToClick(selectors.clientFiscalData.invoiceByAddressCheckboxInput)
.waitToClick(selectors.clientFiscalData.equalizationTaxCheckboxLabel)
.waitToClick(selectors.clientFiscalData.verifiedDataCheckboxInput)
.waitToClick(selectors.clientFiscalData.activeCheckbox)
.waitToClick(selectors.clientFiscalData.frozenCheckbox)
.waitToClick(selectors.clientFiscalData.hasToInvoiceCheckbox)
.waitToClick(selectors.clientFiscalData.viesCheckbox)
.waitToClick(selectors.clientFiscalData.invoiceByMailCheckbox)
.waitToClick(selectors.clientFiscalData.invoiceByAddressCheckbox)
.waitToClick(selectors.clientFiscalData.equalizationTaxCheckbox)
.waitToClick(selectors.clientFiscalData.verifiedDataCheckbox)
.waitToClick(selectors.clientFiscalData.saveButton)
.waitForLastSnackbar();
@ -94,7 +89,7 @@ describe('Client Edit fiscalData path', () => {
it('should receive an error if the fiscal id contains A or B at the beginning', async() => {
const result = await nightmare
.waitToClick(selectors.clientFiscalData.viesCheckboxInput)
.waitToClick(selectors.clientFiscalData.viesCheckbox)
.clearInput(selectors.clientFiscalData.fiscalIdInput)
.write(selectors.clientFiscalData.fiscalIdInput, 'A94980061C')
.waitToClick(selectors.clientFiscalData.saveButton)
@ -135,12 +130,9 @@ describe('Client Edit fiscalData path', () => {
it(`should click on the 1st edit icon to confirm EQtax is checked`, async() => {
const result = await nightmare
.waitToClick(selectors.clientAddresses.firstEditButton)
.wait(selectors.clientAddresses.equalizationTaxCheckboxLabel)
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientAddresses.equalizationTaxCheckboxLabel);
.checkboxState(selectors.clientAddresses.equalizationTaxCheckbox);
expect(result).toBeTruthy();
expect(result).toBe('checked');
});
// confirm all addresses have now EQtax checked step 3
@ -148,19 +140,16 @@ describe('Client Edit fiscalData path', () => {
const result = await nightmare
.waitToClick(selectors.clientAddresses.addressesButton)
.waitToClick(selectors.clientAddresses.secondEditButton)
.wait(selectors.clientAddresses.equalizationTaxCheckboxLabel)
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientAddresses.equalizationTaxCheckboxLabel);
.checkboxState(selectors.clientAddresses.equalizationTaxCheckbox);
expect(result).toBeTruthy();
expect(result).toBe('checked');
});
it('should navigate back to fiscal data and uncheck EQtax then check VIES', async() => {
const result = await nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitToClick(selectors.clientFiscalData.viesCheckboxInput)
.waitToClick(selectors.clientFiscalData.equalizationTaxCheckboxLabel)
.waitToClick(selectors.clientFiscalData.viesCheckbox)
.waitToClick(selectors.clientFiscalData.equalizationTaxCheckbox)
.waitToClick(selectors.clientFiscalData.saveButton)
.waitForLastSnackbar();
@ -227,74 +216,58 @@ describe('Client Edit fiscalData path', () => {
it('should confirm active checkbox is unchecked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.activeCheckboxLabel);
.checkboxState(selectors.clientFiscalData.activeCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
it('should confirm frozen checkbox is unchecked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.frozenCheckboxLabel);
.checkboxState(selectors.clientFiscalData.frozenCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
it('should confirm Has to invoice checkbox is unchecked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.hasToInvoiceCheckboxLabel);
.checkboxState(selectors.clientFiscalData.hasToInvoiceCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
it('should confirm Vies checkbox is checked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.viesCheckboxInput);
.checkboxState(selectors.clientFiscalData.viesCheckbox);
expect(result).toBeTruthy();
expect(result).toBe('checked');
});
it('should confirm Invoice by mail checkbox is unchecked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.invoiceByMailCheckboxLabel);
.checkboxState(selectors.clientFiscalData.invoiceByMailCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
it('should confirm invoice by address checkbox is unchecked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.invoiceByAddressCheckboxInput);
.checkboxState(selectors.clientFiscalData.invoiceByAddressCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
it('should confirm Equalization tax checkbox is unchecked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.equalizationTaxCheckboxLabel);
.checkboxState(selectors.clientFiscalData.equalizationTaxCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
it('should confirm Verified data checkbox is checked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.verifiedDataCheckboxInput);
.checkboxState(selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBeTruthy();
expect(result).toBe('checked');
});
// confirm invoice by address checkbox gets checked if the EQtax differs between addresses step 1
@ -311,7 +284,7 @@ describe('Client Edit fiscalData path', () => {
it(`should click on the 1st edit icon to access the address details and uncheck EQtax checkbox`, async() => {
const result = await nightmare
.waitToClick(selectors.clientAddresses.firstEditButton)
.waitToClick(selectors.clientAddresses.equalizationTaxCheckboxLabel)
.waitToClick(selectors.clientAddresses.equalizationTaxCheckbox)
.waitToClick(selectors.clientAddresses.saveButton)
.waitForLastSnackbar();
@ -322,12 +295,9 @@ describe('Client Edit fiscalData path', () => {
it('should navigate back to fiscal data to confirm invoice by address is now checked', async() => {
const result = await nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.wait(selectors.clientFiscalData.invoiceByAddressCheckboxInput)
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.invoiceByAddressCheckboxInput);
.checkboxState(selectors.clientFiscalData.invoiceByAddressCheckbox);
expect(result).toBeTruthy();
expect(result).toBe('checked');
});
});
});

View File

@ -98,29 +98,23 @@ describe('Client Edit pay method path', () => {
});
it('should confirm Received LCR checkbox is checked', async() => {
const checkedBox = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientPayMethod.receivedCoreLCRCheckbox);
const result = await nightmare
.checkboxState(selectors.clientPayMethod.receivedCoreLCRCheckbox);
expect(checkedBox).toBeTruthy();
expect(result).toBe('checked');
});
it('should confirm Received core VNL checkbox is unchecked', async() => {
const checkedBox = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientPayMethod.receivedCoreVNLCheckbox);
const result = await nightmare
.checkboxState(selectors.clientPayMethod.receivedCoreVNLCheckbox);
expect(checkedBox).toBeFalsy();
expect(result).toBe('unchecked');
});
it('should confirm Received B2B VNL checkbox is unchecked', async() => {
const checkedBox = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientPayMethod.receivedB2BVNLCheckbox);
const result = await nightmare
.checkboxState(selectors.clientPayMethod.receivedB2BVNLCheckbox);
expect(checkedBox).toBeFalsy();
expect(result).toBe('unchecked');
});
});

View File

@ -28,12 +28,9 @@ describe('Client Edit web access path', () => {
.wait(selectors.clientBasicData.nameInput)
.waitToClick(selectors.clientsIndex.othersButton)
.waitToClick(selectors.clientWebAccess.webAccessButton)
.wait(selectors.clientWebAccess.enableWebAccessCheckbox)
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientWebAccess.enableWebAccessCheckbox);
.checkboxState(selectors.clientWebAccess.enableWebAccessCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
it('should confirm web access name have been updated', async() => {

View File

@ -15,9 +15,9 @@ describe('Client lock verified data path', () => {
it('should confirm verified data button is disabled for salesPerson', async() => {
const result = await nightmare
.wait(200)
.wait(selectors.clientFiscalData.verifiedDataCheckboxInput)
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
.evaluate(selector => {
return document.querySelector(selector).disabled;
return document.querySelector(selector).getAttribute('disabled');
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBeTruthy();
@ -92,17 +92,17 @@ describe('Client lock verified data path', () => {
it('should confirm verified data button is enabled for administrative', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.verifiedDataCheckboxInput)
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
.evaluate(selector => {
return document.querySelector(selector).disabled;
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).not.toBeTruthy();
expect(result).toBeFalsy();
});
it('should check the Verified data checkbox', async() => {
const result = await nightmare
.waitToClick(selectors.clientFiscalData.verifiedDataCheckboxInput)
.waitToClick(selectors.clientFiscalData.verifiedDataCheckbox)
.waitToClick(selectors.clientFiscalData.saveButton)
.waitForLastSnackbar();
@ -112,12 +112,9 @@ describe('Client lock verified data path', () => {
it('should confirm Verified data checkbox is checked', async() => {
const result = await nightmare
.reloadSection('client.card.fiscalData')
.wait(selectors.clientFiscalData.verifiedDataCheckboxInput)
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.clientFiscalData.verifiedDataCheckboxInput);
.checkboxState(selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBeTruthy();
expect(result).toBe('checked');
});
it('should again edit the social name', async() => {
@ -189,12 +186,12 @@ describe('Client lock verified data path', () => {
it('should confirm verified data button is disabled once again for salesPerson', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.verifiedDataCheckboxInput)
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
.evaluate(selector => {
return document.querySelector(selector).disabled;
return document.querySelector(selector).getAttribute('disabled');
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBe(true);
expect(result).toBeTruthy();
});
it('should not be able to save change throwing a verified data error', async() => {
@ -258,9 +255,9 @@ describe('Client lock verified data path', () => {
it('should confirm verified data button is enabled for salesAssistant', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.verifiedDataCheckboxInput)
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
.evaluate(selector => {
return document.querySelector(selector).disabled;
return document.querySelector(selector).getAttribute('disabled');
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBeFalsy();
@ -334,12 +331,12 @@ describe('Client lock verified data path', () => {
it('should confirm verified data button is enabled once again', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.verifiedDataCheckboxInput)
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
.evaluate(selector => {
return document.querySelector(selector).disabled;
return document.querySelector(selector).getAttribute('disabled');
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBe(true);
expect(result).toBeTruthy();
});
it('should confirm the form is enabled for salesPerson', async() => {
@ -349,7 +346,7 @@ describe('Client lock verified data path', () => {
return document.querySelector(selector).disabled;
}, 'vn-textfield[field="$ctrl.client.socialName"] > div');
expect(result).not.toBe(true);
expect(result).toBeFalsy();
});
});
});

View File

@ -89,10 +89,8 @@ describe('Item Edit basic data path', () => {
it('should confirm isActive checkbox is unchecked', async() => {
const result = await nightmare
.evaluate(selector => {
return document.querySelector(selector).checked;
}, selectors.itemBasicData.isActiveCheckbox);
.checkboxState(selectors.itemBasicData.isActiveCheckbox);
expect(result).toBeFalsy();
expect(result).toBe('unchecked');
});
});

View File

@ -1,7 +1,11 @@
<label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
<input type="checkbox" class="mdl-checkbox__input"/>
<span class="mdl-checkbox__label" translate>{{::$ctrl.label}}</span>
</label>
<md-checkbox
aria-label="Checkbox 1"
md-indeterminate="$ctrl.isIntermediate"
ng-disabled="$ctrl.disabled"
ng-checked="$ctrl.checkValue"
ng-model="$ctrl.checkValue">
<span translate>{{::$ctrl.label}}</span>
</md-checkbox>
<i class="material-icons"
ng-if="$ctrl.hasInfo"
vn-tooltip="{{$ctrl.info}}">

View File

@ -1,41 +1,59 @@
import ngModule from '../../module';
import Input from '../../lib/input';
import Component from '../../lib/component';
import './style.scss';
export default class Controller extends Input {
export default class Controller extends Component {
constructor($element, $scope, $attrs) {
super($element, $scope);
componentHandler.upgradeElement(this.element.firstChild);
this.mdlElement = this.element.firstChild.MaterialCheckbox;
this.input.addEventListener('change', () => this.onChange());
this.hasInfo = Boolean($attrs.info);
this.info = $attrs.info || null;
}
set field(value) {
set checkValue(value) {
this.checkIntermediate();
if (this.isIntermediate)
value = false;
this._field = value;
this.input.checked = value == true;
this.mdlUpdate();
if (typeof this._checkValue === 'boolean')
this.emit('change', {value: this.field});
this._checkValue = value;
}
get checkValue() {
return this._checkValue;
}
set field(value) {
this.checkValue = value;
}
get field() {
if (!this._field && this.isIntermediate)
return null;
return this._field;
}
$onInit() {
if (this.model) {
this.model.$render = () => {
this.input.checked = this.model.$viewValue || false;
this.mdlUpdate();
};
this.$element.on('blur keyup change', () => {
this.$.$evalAsync(() => {
this.model.$setViewValue(this.input.checked);
});
});
}
set tripleState(value) {
this._tripleState = value;
this.checkIntermediate();
}
onChange() {
this._field = this.input.checked == true;
this.$.$applyAsync();
this.emit('change');
get tripleState() {
return this._tripleState;
}
checkIntermediate() {
if ((this.intermediate || (!this._field && this.tripleState)) && !this.isIntermediate) {
this.isIntermediate = true;
return;
}
if (!this.intermediate)
this.isIntermediate = false;
}
}
Controller.$inject = ['$element', '$scope', '$attrs'];
@ -48,9 +66,10 @@ ngModule.component('vnCheck', {
},
bindings: {
field: '=?',
onChange: '&?',
label: '@?',
disabled: '<?',
rule: '@?'
checked: '<?',
tripleState: '<?',
intermediate: '<?'
}
});

View File

@ -22,7 +22,7 @@
& > div {
position: relative;
box-shadow: 0 0 .4em $color-shadow;
background-color: white;
background-color: $color-bg-panel;
border-radius: .2em;
overflow: auto;
padding: 2em;

View File

@ -6,7 +6,7 @@ export default class IconButton {
if ($element[0].getAttribute('tabindex') == null)
$element[0].tabIndex = 0;
$element.on("keyup", event => this.onKeyDown(event, $element));
$element.on('keyup', event => this.onKeyDown(event, $element));
let button = $element[0].querySelector('button');
$element[0].addEventListener('click', event => {
if (this.disabled || button.disabled)

View File

@ -3,16 +3,20 @@
vn-icon-button {
outline: 0;
color: $color-main;
display: inline-block;
button {
background: transparent !important;
background-color: transparent !important;
display: inline-block;
& > button {
background-color: transparent;
display: block;
color: inherit;
border: 0;
padding: .25em;
&.mdl-button--colored {
color: inherit;
&:hover {
background-color: initial;
}
& > vn-icon {
display: block;
}
}
}

View File

@ -61,7 +61,8 @@ export default class Controller extends Component {
if (event.defaultPrevented) return;
event.preventDefault();
this.$panel = this.$compile(`<${this.panel}/>`)(this.$.$new());
this.$panelScope = this.$.$new();
this.$panel = this.$compile(`<${this.panel}/>`)(this.$panelScope);
let panel = this.$panel.isolateScope().$ctrl;
panel.filter = this._filter;
panel.onSubmit = filter => this.onPanelSubmit(filter);
@ -72,7 +73,7 @@ export default class Controller extends Component {
}
onPopoverClose() {
this.$panel.scope().$destroy();
this.$panelScope.$destroy();
this.$panel.remove();
this.$panel = null;
}

View File

@ -15,7 +15,7 @@ vn-table {
display: table-header-group;
border-bottom: .15em solid $color-spacer;
vn-th[field] {
& > * > vn-th[field] {
position: relative;
overflow: visible;
cursor: pointer;
@ -49,17 +49,22 @@ vn-table {
border-top: .15em solid $color-spacer;
display: table-footer-group
}
vn-tr, a.vn-tr {
& > * > vn-tr,
& > * > a.vn-tr {
display: table-row
}
vn-thead, vn-tbody, vn-tfoot {
& > * {
display: table-row;
vn-th {
font-weight: bold
& > vn-th {
font-weight: bold;
padding-top: 1em;
padding-bottom: .8em;
}
vn-td, vn-th, vn-td-editable {
& > vn-th,
& > vn-td,
& > vn-td-editable {
vertical-align: middle;
display: table-cell;
text-align: left;
@ -87,11 +92,6 @@ vn-table {
color: #f7931e;
}
}
vn-th {
font-weight: bold;
padding-top: 1em;
padding-bottom: .8em;
}
& > :last-child {
padding-right: 1em;
}
@ -99,18 +99,13 @@ vn-table {
padding-left: 1em;
}
}
a.vn-tr {
& > a.vn-tr {
color: inherit;
}
}
vn-tbody > * {
border-bottom: .1em solid $color-spacer-light;
&,
& > vn-td,
& > vn-td > .chip {
transition: background-color 200ms ease-in-out;
}
&:last-child {
border-bottom: none;
}
@ -124,37 +119,44 @@ vn-table {
&.notice,
& > .notice,
& > vn-td > .notice {
color: white;
background-color: $color-notice;
color: $color-font-bg;
background-color: $color-notice-medium;
}
&.success,
& > .success,
& > vn-td > .success {
color: white;
background-color: $color-success;
color: $color-font-bg;
background-color: $color-success-medium;
}
&.warning,
& > .warning,
& > vn-td > .warning {
color: white;
background-color: $color-main;
color: $color-font-bg;
background-color: $color-main-medium;
}
&.alert,
& > .alert,
& > vn-td > .alert {
color: white;
background-color: $color-alert;
color: $color-font-bg;
background-color: $color-alert-medium;
}
& > [actions] {
width: 1px;
& > * {
vertical-align: middle;
}
}
}
}
vn-empty-rows {
display: table-caption;
caption-side: bottom;
text-align: center;
padding: 1.5em;
width: 100%;
box-sizing: border-box;
color: $color-font-secondary;
& > vn-empty-rows {
display: table-caption;
caption-side: bottom;
text-align: center;
padding: 1.5em;
width: 100%;
box-sizing: border-box;
color: $color-font-secondary;
}
}
vn-autocomplete {
div.mdl-textfield {

View File

@ -40,7 +40,7 @@ function vnAcl(aclService, $timeout) {
if (!aclService.hasAny(acls)) {
if (action === 'disabled') {
let input = $element[0];
let selector = 'input, textarea, button, submit';
let selector = 'input, textarea, button, submit, md-checkbox';
if (!input.matches(selector))
input = input.querySelector(selector);

View File

@ -1,8 +1,9 @@
@font-face {
font-family: 'salixfont';
src: url('./salixfont.ttf?1qesj4') format('truetype'),
url('./salixfont.woff?1qesj4') format('woff'),
url('./salixfont.svg?1qesj4#salixfont') format('svg');
src:
url('./salixfont.ttf?wtrl3') format('truetype'),
url('./salixfont.woff?wtrl3') format('woff'),
url('./salixfont.svg?wtrl3#salixfont') format('svg');
font-weight: normal;
font-style: normal;
}
@ -22,36 +23,15 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-columndelete:before {
content: "\e90f";
}
.icon-columnadd:before {
content: "\e944";
}
.icon-linesplit:before {
content: "\e945";
}
.icon-linedelete:before {
content: "\e946";
}
.icon-item:before {
content: "\e941";
}
.icon-basket:before {
content: "\e942";
}
.icon-worker:before {
content: "\e943";
}
.icon-reserve:before {
content: "\e92f";
}
.icon-services:before {
content: "\e93f";
.icon-pets:before {
content: "\e94e";
}
.icon-100:before {
content: "\e940";
}
.icon-accessory:before {
content: "\e90a";
}
.icon-actions:before {
content: "\e900";
}
@ -61,12 +41,18 @@
.icon-albaran:before {
content: "\e902";
}
.icon-apps:before {
content: "\e948";
}
.icon-artificial:before {
content: "\e903";
}
.icon-barcode:before {
content: "\e904";
}
.icon-basket:before {
content: "\e942";
}
.icon-bin:before {
content: "\e905";
}
@ -82,18 +68,21 @@
.icon-clone:before {
content: "\e909";
}
.icon-accessory:before {
content: "\e90a";
.icon-columnadd:before {
content: "\e944";
}
.icon-columndelete:before {
content: "\e90f";
}
.icon-components:before {
content: "\e90b";
}
.icon-handmade:before {
content: "\e90c";
}
.icon-consignatarios:before {
content: "\e90d";
}
.icon-control:before {
content: "\e93f";
}
.icon-credit:before {
content: "\e90e";
}
@ -103,8 +92,8 @@
.icon-details:before {
content: "\e911";
}
.icon-fiscal:before {
content: "\e912";
.icon-disabled:before {
content: "\e91b";
}
.icon-doc:before {
content: "\e913";
@ -112,36 +101,63 @@
.icon-entry:before {
content: "\e914";
}
.icon-exit:before {
content: "\e947";
}
.icon-eye:before {
content: "\e915";
}
.icon-fiscal:before {
content: "\e912";
}
.icon-flower:before {
content: "\e916";
}
.icon-frozen:before {
content: "\e917";
}
.icon-greenery:before {
content: "\e93c";
}
.icon-greuge:before {
content: "\e918";
}
.icon-grid:before {
content: "\e919";
}
.icon-handmade:before {
content: "\e90c";
}
.icon-history:before {
content: "\e91a";
}
.icon-disabled:before {
content: "\e91b";
.icon-info:before {
content: "\e949";
}
.icon-invoices1:before {
content: "\e94a";
}
.icon-invoices:before {
content: "\e91c";
}
.icon-item:before {
content: "\e941";
}
.icon-languaje:before {
content: "\e91d";
}
.icon-linedelete:before {
content: "\e946";
}
.icon-lines:before {
content: "\e91e";
}
.icon-linesplit:before {
content: "\e945";
}
.icon-linesprepaired:before {
content: "\e94b";
}
.icon-logout:before {
content: "\e91f";
}
@ -181,18 +197,24 @@
.icon-plant:before {
content: "\e92b";
}
.icon-stowaway:before {
content: "\e92c";
}
.icon-recovery:before {
content: "\e92d";
}
.icon-regentry:before {
content: "\e92e";
}
.icon-reserve:before {
content: "\e92f";
}
.icon-revision:before {
content: "\e94c";
}
.icon-risk:before {
content: "\e930";
}
.icon-services:before {
content: "\e94d";
}
.icon-settings:before {
content: "\e931";
}
@ -208,6 +230,9 @@
.icon-splur:before {
content: "\e935";
}
.icon-stowaway:before {
content: "\e92c";
}
.icon-supplier:before {
content: "\e936";
}
@ -226,12 +251,12 @@
.icon-transaction:before {
content: "\e93b";
}
.icon-greenery:before {
content: "\e93c";
}
.icon-volume:before {
content: "\e93d";
}
.icon-web:before {
content: "\e93e";
}
.icon-worker:before {
content: "\e943";
}

View File

@ -9,7 +9,7 @@
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="actions" d="M354.133 558.933v183.467c0 68.267 55.467 123.733 123.733 123.733s119.467-59.733 119.467-123.733v-183.467c59.733 38.4 98.133 106.667 98.133 183.467 0 119.467-98.133 217.6-221.867 217.6s-217.6-98.133-217.6-217.6c0-76.8 38.4-145.067 98.133-183.467zM832 332.8l-221.867 110.933c-8.533 4.267-17.067 4.267-25.6 4.267h-38.4v294.4c0 38.4-34.133 72.533-72.533 72.533s-72.533-34.133-72.533-72.533v-524.8l-166.4 34.133c-4.267 0-8.533 0-12.8 0-17.067 0-29.867-4.267-38.4-17.067l-38.4-38.4 238.933-238.933c12.8-12.8 29.867-21.333 51.2-21.333h332.8c38.4 0 64 25.6 68.267 64l38.4 256c0 4.267 0 8.533 0 8.533 4.267 29.867-17.067 55.467-42.667 68.267z" />
<glyph unicode="&#xe901;" glyph-name="addperson" d="M201.6 755.2c0 115.2 89.6 204.8 201.6 204.8s201.6-89.6 201.6-204.8-89.6-204.8-201.6-204.8c-112 0-201.6 92.8-201.6 204.8zM387.2 153.6v208h214.4v108.8c-70.4 22.4-147.2 32-198.4 32-134.4 0-403.2-70.4-403.2-204.8v-153.6h387.2v9.6zM1024 297.6v-144h-214.4v-214.4h-144v214.4h-214.4v144h214.4v214.4h144v-214.4h214.4z" />
<glyph unicode="&#xe902;" glyph-name="albaran" d="M878.933 857.6h-217.6c-25.6 59.733-81.067 102.4-149.333 102.4s-123.733-42.667-145.067-102.4h-221.867c-55.467 0-102.4-46.933-102.4-102.4v-716.8c0-55.467 46.933-102.4 102.4-102.4h729.6c55.467 0 102.4 46.933 102.4 102.4v716.8c4.267 55.467-42.667 102.4-98.133 102.4zM512 857.6c29.867 0 51.2-21.333 51.2-51.2s-21.333-51.2-51.2-51.2c-29.867 0-51.2 21.333-51.2 51.2s21.333 51.2 51.2 51.2zM614.4 140.8h-362.667v102.4h366.933v-102.4zM772.267 345.6h-520.533v102.4h520.533v-102.4zM772.267 550.4h-520.533v102.4h520.533v-102.4z" />
<glyph unicode="&#xe902;" glyph-name="albaran" d="M819.2 960h-622.933c-55.467 0-102.4-46.933-102.4-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h622.933c55.467 0 102.4 46.933 102.4 102.4v819.2c0 55.467-46.933 102.4-102.4 102.4zM358.4 174.933h-102.4v102.4h503.467v-102.4h-401.067zM256 379.733v102.4h503.467v-102.4h-503.467zM759.467 584.533h-503.467v102.4h503.467v-102.4z" />
<glyph unicode="&#xe903;" glyph-name="artificial" d="M310.4-35.2c0 41.6 0 80 0 128-32-16-54.4-32-76.8-44.8-19.2-12.8-35.2-12.8-48 12.8-51.2 96-105.6 185.6-156.8 281.6-9.6 12.8-12.8 28.8-22.4 44.8 32 22.4 64 41.6 102.4 64-38.4 22.4-70.4 44.8-105.6 67.2 22.4 38.4 44.8 76.8 64 115.2 41.6 70.4 83.2 140.8 121.6 211.2 9.6 16 19.2 19.2 35.2 9.6 25.6-16 51.2-28.8 86.4-48 0 44.8 0 83.2 0 124.8 137.6 0 272 0 406.4 0 0-41.6 0-83.2 0-128 38.4 22.4 73.6 41.6 108.8 60.8 19.2-32 38.4-64 57.6-96 41.6-76.8 86.4-153.6 131.2-230.4 9.6-19.2 6.4-28.8-9.6-38.4-25.6-16-51.2-32-83.2-51.2 35.2-22.4 67.2-44.8 105.6-67.2-67.2-118.4-131.2-233.6-198.4-348.8-35.2 19.2-70.4 38.4-108.8 60.8 0-44.8 0-83.2 0-124.8-140.8-3.2-275.2-3.2-409.6-3.2zM796.8 745.6c-57.6-32-108.8-64-166.4-96 0 67.2 0 128 0 192-76.8 0-153.6 0-233.6 0 0-64 0-124.8 0-192-51.2 32-96 57.6-140.8 83.2-9.6 3.2-28.8 3.2-32-3.2-38.4-60.8-70.4-121.6-108.8-185.6 57.6-32 108.8-64 163.2-96-54.4-32-108.8-64-163.2-96 28.8-54.4 57.6-105.6 86.4-153.6 28.8-51.2 32-51.2 80-22.4 35.2 19.2 73.6 41.6 115.2 67.2 0-67.2 0-131.2 0-192 80 0 156.8 0 236.8 0 0 64 0 121.6 0 185.6 54.4-32 105.6-60.8 160-89.6 35.2 64 73.6 124.8 105.6 188.8 3.2 6.4-6.4 22.4-12.8 25.6-35.2 22.4-70.4 41.6-105.6 64-28.8 16-28.8 25.6 0 41.6 35.2 22.4 73.6 41.6 108.8 67.2 6.4 3.2 12.8 19.2 9.6 25.6-32 60.8-67.2 121.6-102.4 185.6zM387.2 323.2c0 86.4 0 166.4 0 252.8 83.2 0 163.2 0 246.4 0 0-83.2 0-166.4 0-252.8-83.2 0-163.2 0-246.4 0zM553.6 409.6c0 28.8 0 51.2 0 76.8-25.6 0-51.2 0-76.8 0 0-25.6 0-51.2 0-76.8 25.6 0 51.2 0 76.8 0z" />
<glyph unicode="&#xe904;" glyph-name="barcode" d="M0 857.6h102.4v-819.2h-102.4v819.2zM307.2 857.6h153.6v-819.2h-153.6v819.2zM768 857.6h51.2v-819.2h-51.2v819.2zM204.8 857.6h51.2v-819.2h-51.2v819.2zM921.6 857.6h102.4v-819.2h-102.4v819.2zM563.2 857.6h102.4v-819.2h-102.4v819.2z" />
<glyph unicode="&#xe905;" glyph-name="bin" d="M238.933 4.267c0 0 17.067-68.267 93.867-68.267h354.133c76.8 0 93.867 68.267 93.867 68.267l68.267 682.667h-678.4l68.267-682.667zM648.533 584.533c0 17.067 17.067 34.133 34.133 34.133s34.133-17.067 34.133-34.133l-34.133-512c0-17.067-17.067-34.133-34.133-34.133s-34.133 17.067-34.133 34.133l34.133 512zM477.867 584.533c0 17.067 17.067 34.133 34.133 34.133s34.133-17.067 34.133-34.133v-512c0-17.067-17.067-34.133-34.133-34.133s-34.133 17.067-34.133 34.133c0 0 0 512 0 512zM341.333 618.667c17.067 0 34.133-17.067 34.133-34.133l34.133-512c0-17.067-17.067-34.133-34.133-34.133s-34.133 17.067-34.133 34.133l-34.133 512c0 17.067 17.067 34.133 34.133 34.133zM832 823.467h-149.333v68.267c0 51.2-17.067 68.267-68.267 68.267h-204.8c-46.933 0-68.267-21.333-68.267-68.267v-68.267h-149.333c-29.867 0-55.467-21.333-55.467-51.2s25.6-51.2 55.467-51.2h640c29.867 0 55.467 21.333 55.467 51.2s-25.6 51.2-55.467 51.2zM614.4 823.467h-204.8v68.267h204.8v-68.267z" />
@ -70,7 +70,7 @@
<glyph unicode="&#xe93c;" glyph-name="greenery" d="M860.8 99.2c0 38.4 3.2 73.6 0 105.6-3.2 41.6-25.6 70.4-64 80-60.8 12.8-121.6 28.8-182.4 41.6-140.8 28.8-278.4 67.2-396.8 150.4-80 60.8-153.6 128-214.4 208 0 3.2 0 3.2-3.2 9.6 28.8 12.8 54.4 22.4 83.2 35.2 134.4 60.8 275.2 92.8 422.4 89.6 153.6-3.2 288-54.4 400-163.2 70.4-67.2 102.4-153.6 115.2-249.6 16-108.8-12.8-204.8-57.6-300.8-16-32-16-32-51.2-22.4-16 3.2-28.8 9.6-41.6 12.8-6.4 3.2-9.6 3.2-9.6 3.2zM150.4 659.2c12.8-12.8 19.2-25.6 25.6-32 89.6-76.8 185.6-140.8 297.6-169.6 99.2-25.6 198.4-44.8 294.4-67.2 54.4-12.8 108.8-28.8 147.2-73.6 3.2-3.2 6.4-3.2 12.8-3.2 0 3.2 3.2 6.4 3.2 9.6 3.2 112-25.6 211.2-108.8 288-92.8 86.4-204.8 118.4-329.6 121.6-99.2-3.2-195.2-28.8-291.2-54.4-16-6.4-32-12.8-51.2-19.2z" />
<glyph unicode="&#xe93d;" glyph-name="volume" d="M1024 622.933c0-42.667-17.067-72.533-46.933-98.133s-72.533-38.4-123.733-38.4c-17.067 0-34.133 4.267-46.933 4.267v-554.667h-174.933v605.867c0 29.867-4.267 46.933-12.8 64-8.533 12.8-25.6 21.333-51.2 21.333-34.133 0-59.733-17.067-76.8-46.933v-644.267h-174.933v605.867c0 29.867-4.267 51.2-12.8 64-12.8 12.8-29.867 17.067-55.467 17.067-34.133 0-59.733-12.8-76.8-42.667v-644.267h-170.667v810.667h162.133l4.267-64c38.4 51.2 93.867 76.8 157.867 76.8 68.267 0 115.2-29.867 140.8-85.333 38.4 55.467 93.867 85.333 162.133 85.333 93.867 0 145.067-46.933 166.4-136.533v0c0-12.8 4.267-25.6 17.067-38.4 12.8-8.533 25.6-17.067 42.667-17.067s34.133 4.267 46.933 17.067 17.067 25.6 17.067 38.4c0 21.333-4.267 38.4-17.067 51.2-12.8 8.533-25.6 12.8-46.933 12.8h-51.2v81.067h51.2c38.4 0 59.733 21.333 59.733 59.733 0 17.067-4.267 25.6-12.8 38.4-12.8 8.533-25.6 12.8-46.933 12.8-12.8 0-25.6-4.267-38.4-12.8-8.533-8.533-17.067-17.067-17.067-29.867h-106.667c0 25.6 8.533 46.933 21.333 64s34.133 34.133 55.467 42.667 55.467 17.067 85.333 17.067c51.2 0 93.867-12.8 119.467-34.133 29.867-25.6 42.667-55.467 42.667-98.133 0-21.333-4.267-38.4-17.067-55.467s-29.867-29.867-51.2-42.667c25.6-8.533 42.667-21.333 59.733-38.4 8.533-21.333 17.067-42.667 17.067-68.267z" />
<glyph unicode="&#xe93e;" glyph-name="web" d="M827.733 533.333c-29.867 145.067-157.867 256-315.733 256-123.733 0-230.4-68.267-285.867-170.667-128-17.067-226.133-123.733-226.133-256 0-140.8 115.2-256 256-256h554.667c119.467 0 213.333 93.867 213.333 213.333 0 110.933-85.333 204.8-196.267 213.333z" />
<glyph unicode="&#xe93f;" glyph-name="services" d="M951.467 217.6c0 8.533 0 21.333 0 29.867s0 21.333-4.267 29.867l64 51.2c4.267 4.267 8.533 12.8 4.267 21.333l-64 106.667c-4.267 8.533-12.8 8.533-17.067 8.533l-76.8-29.867c-17.067 12.8-34.133 21.333-51.2 29.867l-12.8 81.067c0 8.533-8.533 12.8-17.067 12.8h-123.733c-8.533 0-12.8-4.267-17.067-12.8l-12.8-81.067c-17.067-8.533-38.4-17.067-51.2-29.867l-76.8 29.867c-8.533 4.267-17.067 0-17.067-8.533l-64-106.667c-4.267-8.533-4.267-17.067 4.267-21.333l64-51.2c0-8.533-4.267-21.333-4.267-29.867s0-21.333 4.267-29.867l-55.467-51.2c-4.267-4.267-8.533-12.8-4.267-21.333l64-106.667c4.267-8.533 12.8-8.533 17.067-8.533l76.8 29.867c17.067-12.8 34.133-21.333 51.2-29.867l12.8-81.067c0-8.533 8.533-12.8 17.067-12.8h123.733c8.533 0 12.8 4.267 17.067 12.8l12.8 81.067c17.067 8.533 38.4 17.067 51.2 29.867l76.8-29.867c8.533-4.267 17.067 0 17.067 8.533l64 106.667c4.267 8.533 4.267 17.067-4.267 21.333 0 0-68.267 51.2-68.267 51.2zM721.067 132.267c-64 0-115.2 51.2-115.2 115.2s51.2 115.2 115.2 115.2c64 0 115.2-51.2 115.2-115.2s-51.2-115.2-115.2-115.2zM580.267-64l-8.533 51.2c0 0 0 0 0 0l-46.933-17.067c-38.4-12.8-81.067 0-98.133 34.133l-59.733 106.667c-12.8 21.333-12.8 42.667-8.533 64h-102.4v102.4h128c-29.867 21.333-38.4 68.267-21.333 102.4v0h-106.667v102.4h170.667l4.267 4.267c17.067 34.133 59.733 46.933 98.133 34.133l46.933-17.067c0 0 0 0 0 0l8.533 51.2c0 12.8 4.267 21.333 12.8 29.867h-341.333v102.4h520.533v-64h4.267c38.4 0 72.533-29.867 76.8-68.267l8.533-51.2c0 0 0 0 0 0l46.933 17.067c4.267 0 4.267 0 8.533 4.267v332.8c0 55.467-46.933 102.4-102.4 102.4h-622.933c-55.467 0-102.4-46.933-102.4-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h384c0 0 0 0 0 0z" />
<glyph unicode="&#xe93f;" glyph-name="control" d="M418.133 315.733l-128-123.733 256-256 469.333 469.333-128 128-341.333-341.333zM546.133 311.467l34.133 34.133h-68.267zM230.4 128l-59.733 64 153.6 153.6h-68.267v102.4h426.667l204.8 204.8 85.333-85.333v187.733c0 55.467-46.933 102.4-102.4 102.4h-213.333c-21.333 59.733-76.8 102.4-145.067 102.4s-123.733-42.667-145.067-102.4h-213.333c-55.467 0-102.4-46.933-102.4-102.4v-716.8c0-55.467 46.933-102.4 102.4-102.4h273.067l-196.267 192zM512 857.6c29.867 0 51.2-21.333 51.2-51.2s-21.333-51.2-51.2-51.2-51.2 21.333-51.2 51.2c0 29.867 21.333 51.2 51.2 51.2zM256 652.8h512v-102.4h-512v102.4zM665.6-64h204.8c55.467 0 102.4 46.933 102.4 102.4v204.8l-307.2-307.2z" />
<glyph unicode="&#xe940;" glyph-name="100" d="M640 38.4l-17.067-17.067h-213.333v153.6h-153.6v102.4h200.533l102.4 102.4h-302.933v102.4h405.333l102.4 102.4h-507.733v102.4h520.533v-89.6l72.533 72.533c17.067 17.067 42.667 29.867 68.267 29.867 4.267 0 8.533 0 8.533 0v157.867c0 55.467-46.933 102.4-102.4 102.4h-627.2c-55.467 0-102.4-46.933-102.4-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h627.2c55.467 0 102.4 46.933 102.4 102.4v285.867l-285.867-285.867zM917.333 635.733c8.533 0 17.067-4.267 21.333-8.533l76.8-76.8c12.8-12.8 12.8-34.133 0-46.933l-64-64-119.467 119.467 64 64c4.267 8.533 12.8 12.8 21.333 12.8zM797.867 529.067l119.467-123.733-320-320h-123.733v119.467l324.267 324.267z" />
<glyph unicode="&#xe941;" glyph-name="item" d="M593.067 132.267v29.867l8.533 12.8c42.667-38.4 102.4-59.733 166.4-59.733 140.8 0 251.733 115.2 251.733 251.733 0 140.8-115.2 251.733-251.733 251.733-140.8 0-251.733-115.2-251.733-251.733 0-64 21.333-119.467 59.733-166.4l-12.8-8.533h-29.867l-192-196.267 59.733-59.733 192 196.267zM772.267 541.867c98.133 0 174.933-76.8 174.933-174.933s-76.8-174.933-174.933-174.933c-98.133 0-174.933 76.8-174.933 174.933-4.267 93.867 76.8 174.933 174.933 174.933zM460.8 110.933v0 4.267zM0 960h102.4v-849.067h-102.4v849.067zM1024 588.8v371.2h-102.4v-290.133c38.4-21.333 72.533-46.933 102.4-81.067zM456.533 230.4c-17.067 42.667-25.6 85.333-25.6 132.267 0 51.2 12.8 93.867 29.867 136.533v460.8h-153.6v-849.067h29.867l119.467 119.467zM204.8 960h51.2v-849.067h-51.2v849.067zM772.267 704c17.067 0 34.133 0 46.933-4.267v260.267h-51.2l4.267-256c-4.267 0-4.267 0 0 0zM665.6 686.933v273.067h-102.4c0 0 0-170.667 0-328.533 29.867 25.6 64 42.667 102.4 55.467z" />
<glyph unicode="&#xe942;" glyph-name="basket" d="M230.4 28.8l-19.2 326.4c0 19.2 12.8 35.2 32 38.4 19.2 0 35.2-12.8 38.4-32l16-323.2c0-19.2-12.8-35.2-32-38.4 0 0-3.2 0-3.2 0-16-3.2-32 12.8-32 28.8zM387.2 0c19.2 0 35.2 16 35.2 35.2v329.6c0 19.2-16 35.2-35.2 35.2s-35.2-16-35.2-35.2v-329.6c0-22.4 16-35.2 35.2-35.2zM512 3.2c19.2 0 35.2 16 35.2 35.2v326.4c0 19.2-16 35.2-35.2 35.2s-35.2-16-35.2-35.2v-326.4c0-19.2 16-35.2 35.2-35.2zM764.8 3.2c0 0 0 0 0 0 19.2 0 35.2 16 35.2 32 6.4 150.4 9.6 316.8 9.6 320 0 19.2-16 35.2-35.2 35.2s-35.2-16-35.2-35.2c0-6.4-6.4-230.4-9.6-316.8 0-16 16-35.2 35.2-35.2zM636.8 3.2c19.2 0 35.2 16 35.2 35.2v326.4c0 19.2-16 35.2-35.2 35.2s-35.2-16-35.2-35.2v-326.4c0-19.2 16-35.2 35.2-35.2zM1024 537.6v-80c0-19.2-16-35.2-35.2-35.2h-28.8l-64-470.4c-3.2-16-16-28.8-35.2-28.8h-697.6c-16 0-32 12.8-35.2 28.8l-64 473.6h-28.8c-19.2 0-35.2 16-35.2 35.2v80c0 19.2 16 35.2 35.2 35.2h172.8l140.8 291.2c-3.2 9.6-6.4 22.4-6.4 35.2 6.4 38.4 41.6 67.2 80 60.8s67.2-41.6 60.8-80c-6.4-38.4-41.6-67.2-80-60.8 0 0 0 0 0 0l-112-249.6h438.4l-112 249.6c0 0 0 0 0 0-38.4-6.4-73.6 22.4-80 60.8s22.4 73.6 60.8 80c38.4 6.4 73.6-22.4 80-60.8 3.2-12.8 0-25.6-6.4-35.2l140.8-291.2h172.8c22.4-3.2 38.4-19.2 38.4-38.4zM886.4 425.6h-748.8l54.4-435.2h640l54.4 435.2z" />
@ -78,4 +78,12 @@
<glyph unicode="&#xe944;" glyph-name="columnadd" d="M0 960h256v-256h-256v256zM0 192h256v-256h-256v256zM0 576h256v-256h-256v256zM913.067 512v-132.267h-204.8v-204.8h-136.533v204.8h-204.8v132.267h204.8v204.8h136.533v-204.8z" />
<glyph unicode="&#xe945;" glyph-name="linesplit" d="M686.933 174.933h-119.467l-268.8 273.067 268.8 273.067h119.467v-153.6l337.067 196.267-337.067 196.267v-153.6h-153.6l-290.133-294.4h-243.2v-128h243.2l290.133-294.4h153.6v-153.6l337.067 196.267-337.067 196.267z" />
<glyph unicode="&#xe946;" glyph-name="linedelete" d="M354.133 192l-98.133 98.133 157.867 153.6-157.867 157.867 98.133 102.4 157.867-157.867 157.867 153.6 98.133-98.133-157.867-157.867 157.867-153.6-98.133-98.133-157.867 157.867-157.867-157.867zM780.8 507.733l-64-64 59.733-55.467h247.467v119.467h-243.2zM307.2 443.733l-64 64h-243.2v-119.467h251.733l55.467 55.467z" />
<glyph unicode="&#xe947;" glyph-name="exit" d="M405.333 243.2l81.067-81.067 281.6 285.867-285.867 285.867-76.8-81.067 145.067-149.333h-550.4v-115.2h550.4l-145.067-145.067zM908.8 960h-793.6c-64 0-115.2-51.2-115.2-115.2v-226.133h115.2v226.133h797.867v-797.867h-797.867v230.4h-115.2v-226.133c0-64 51.2-115.2 115.2-115.2h797.867c64 0 115.2 51.2 115.2 115.2v793.6c-4.267 64-55.467 115.2-119.467 115.2z" />
<glyph unicode="&#xe948;" glyph-name="apps" d="M0 704h256v256h-256v-256zM384-64h256v256h-256v-256zM0-64h256v256h-256v-256zM0 320h256v256h-256v-256zM384 320h256v256h-256v-256zM768 960v-256h256v256h-256zM384 704h256v256h-256v-256zM768 320h256v256h-256v-256zM768-64h256v256h-256v-256z" />
<glyph unicode="&#xe949;" glyph-name="info" d="M512 960c-281.6 0-512-230.4-512-512s230.4-512 512-512 512 230.4 512 512-230.4 512-512 512zM563.2 192h-102.4v307.2h102.4v-307.2zM563.2 601.6h-102.4v102.4h102.4v-102.4z" />
<glyph unicode="&#xe94a;" glyph-name="invoices1" d="M345.6 174.933h-89.6v102.4h81.067c4.267 34.133 8.533 68.267 21.333 102.4h-102.4v102.4h162.133c34.133 42.667 72.533 76.8 119.467 102.4h-281.6v102.4h520.533v-55.467c4.267 0 12.8 0 17.067 0 42.667 0 85.333-4.267 128-17.067v243.2c0 55.467-46.933 102.4-102.4 102.4h-622.933c-55.467 0-102.4-46.933-102.4-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h302.933c-81.067 55.467-136.533 140.8-153.6 238.933zM942.933 119.467l85.333-81.067c-25.6-34.133-59.733-59.733-102.4-76.8s-85.333-25.6-136.533-25.6c-46.933 0-93.867 8.533-132.267 25.6s-76.8 42.667-106.667 72.533c-29.867 29.867-51.2 68.267-64 110.933h-93.867v68.267h81.067c0 4.267 0 12.8 0 21.333s0 17.067 0 21.333h-81.067v68.267h93.867c12.8 42.667 34.133 76.8 64 110.933 29.867 29.867 64 55.467 106.667 72.533s85.333 25.6 132.267 25.6c51.2 0 93.867-8.533 136.533-25.6s76.8-42.667 102.4-76.8l-85.333-81.067c-38.4 46.933-89.6 68.267-145.067 68.267-38.4 0-68.267-8.533-98.133-25.6s-51.2-38.4-68.267-68.267h209.067v-68.267h-230.4c0-4.267 0-12.8 0-21.333s0-17.067 0-21.333h230.4v-68.267h-209.067c17.067-29.867 38.4-51.2 68.267-68.267s59.733-25.6 98.133-25.6c55.467 0 102.4 21.333 145.067 68.267z" />
<glyph unicode="&#xe94b;" glyph-name="linesprepaired" d="M870.4 857.6h-213.333c-21.333 59.733-76.8 102.4-145.067 102.4s-123.733-42.667-145.067-102.4h-213.333c-55.467 0-102.4-46.933-102.4-102.4v-716.8c0-55.467 46.933-102.4 102.4-102.4h716.8c55.467 0 102.4 46.933 102.4 102.4v716.8c0 55.467-46.933 102.4-102.4 102.4zM512 857.6c29.867 0 51.2-21.333 51.2-51.2s-21.333-51.2-51.2-51.2-51.2 21.333-51.2 51.2 21.333 51.2 51.2 51.2zM614.4 140.8h-358.4v102.4h358.4v-102.4zM768 345.6h-512v102.4h512v-102.4zM768 550.4h-512v102.4h512v-102.4z" />
<glyph unicode="&#xe94c;" glyph-name="revision" d="M358.4 140.8h-102.4v102.4h81.067c0 0 0 4.267 0 4.267 0 34.133 8.533 68.267 21.333 98.133h-102.4v102.4h170.667c51.2 51.2 123.733 85.333 200.533 102.4h-371.2v102.4h512v-93.867c76.8-8.533 149.333-34.133 204.8-72.533v268.8c0 55.467-46.933 102.4-102.4 102.4h-213.333c-21.333 59.733-76.8 102.4-145.067 102.4s-123.733-42.667-145.067-102.4h-213.333c-55.467 0-102.4-46.933-102.4-102.4v-716.8c0-55.467 46.933-102.4 102.4-102.4h546.133c-157.867 8.533-290.133 89.6-341.333 204.8zM512 857.6c29.867 0 51.2-21.333 51.2-51.2s-21.333-51.2-51.2-51.2-51.2 21.333-51.2 51.2c0 29.867 21.333 51.2 51.2 51.2zM721.067 452.267c-136.533 0-251.733-85.333-302.933-204.8 46.933-119.467 162.133-204.8 302.933-204.8s251.733 85.333 302.933 204.8c-46.933 119.467-162.133 204.8-302.933 204.8zM721.067 110.933c-76.8 0-136.533 59.733-136.533 136.533s64 136.533 136.533 136.533 136.533-64 136.533-136.533-59.733-136.533-136.533-136.533zM721.067 328.533c-46.933 0-81.067-38.4-81.067-81.067s38.4-81.067 81.067-81.067c46.933 0 81.067 38.4 81.067 81.067s-34.133 81.067-81.067 81.067z" />
<glyph unicode="&#xe94d;" glyph-name="services" d="M951.467 217.6c0 8.533 0 21.333 0 29.867s0 21.333-4.267 29.867l64 51.2c4.267 4.267 8.533 12.8 4.267 21.333l-64 106.667c-4.267 8.533-12.8 8.533-17.067 8.533l-76.8-29.867c-17.067 12.8-34.133 21.333-51.2 29.867l-12.8 81.067c0 8.533-8.533 12.8-17.067 12.8h-123.733c-8.533 0-12.8-4.267-17.067-12.8l-12.8-81.067c-17.067-8.533-38.4-17.067-51.2-29.867l-76.8 29.867c-8.533 4.267-17.067 0-17.067-8.533l-64-106.667c-4.267-8.533-4.267-17.067 4.267-21.333l64-51.2c0-8.533-4.267-21.333-4.267-29.867s0-21.333 4.267-29.867l-55.467-51.2c-4.267-4.267-8.533-12.8-4.267-21.333l64-106.667c4.267-8.533 12.8-8.533 17.067-8.533l76.8 29.867c17.067-12.8 34.133-21.333 51.2-29.867l12.8-81.067c0-8.533 8.533-12.8 17.067-12.8h123.733c8.533 0 12.8 4.267 17.067 12.8l12.8 81.067c17.067 8.533 38.4 17.067 51.2 29.867l76.8-29.867c8.533-4.267 17.067 0 17.067 8.533l64 106.667c4.267 8.533 4.267 17.067-4.267 21.333 0 0-68.267 51.2-68.267 51.2zM721.067 132.267c-64 0-115.2 51.2-115.2 115.2s51.2 115.2 115.2 115.2 115.2-51.2 115.2-115.2c0-64-51.2-115.2-115.2-115.2zM345.6 174.933h-89.6v102.4h81.067c4.267 34.133 8.533 68.267 21.333 102.4h-102.4v102.4h162.133c34.133 42.667 72.533 76.8 119.467 102.4h-281.6v102.4h520.533v-59.733c51.2-8.533 102.4-25.6 145.067-51.2v281.6c0 55.467-46.933 102.4-102.4 102.4h-622.933c-55.467 0-102.4-46.933-102.4-102.4v-819.2c0-55.467 46.933-102.4 102.4-102.4h302.933c-81.067 55.467-136.533 140.8-153.6 238.933z" />
<glyph unicode="&#xe94e;" glyph-name="pets" d="M1024 571.733c-4.267 46.933-25.6 81.067-55.467 110.933-34.133 29.867-72.533 42.667-110.933 38.4 0 0-4.267 0-4.267 0 0 8.533 0 17.067-4.267 29.867-8.533 51.2-29.867 98.133-68.267 128-25.6 21.333-51.2 34.133-72.533 38.4-29.867 4.267-59.733 0-76.8-4.267-42.667-8.533-81.067-34.133-110.933-72.533-21.333 25.6-42.667 46.933-68.267 64-64 38.4-140.8 29.867-196.267-21.333-25.6-21.333-42.667-46.933-51.2-81.067-12.8-29.867-17.067-59.733-17.067-93.867-8.533 0-17.067 0-25.6 0-42.667 0-81.067-17.067-110.933-46.933-29.867-34.133-42.667-76.8-46.933-98.133-4.267-12.8-4.267-25.6-4.267-42.667 4.267-55.467 25.6-110.933 59.733-157.867 29.867-38.4 68.267-64 110.933-76.8-4.267-12.8-8.533-21.333-8.533-34.133 0-4.267-4.267-8.533-4.267-17.067-12.8-42.667-25.6-98.133 4.267-162.133 29.867-59.733 89.6-102.4 157.867-106.667 4.267 0 12.8 0 17.067 0 46.933 0 85.333 17.067 119.467 29.867 4.267 0 8.533 4.267 12.8 4.267 17.067 4.267 34.133 12.8 51.2 12.8 8.533 0 17.067-4.267 34.133-12.8s42.667-21.333 68.267-25.6c29.867-4.267 64-4.267 93.867 0 38.4 8.533 68.267 21.333 89.6 38.4 59.733 46.933 68.267 128 51.2 187.733-8.533 25.6-21.333 55.467-34.133 85.333 29.867 4.267 55.467 12.8 76.8 29.867 81.067 51.2 110.933 128 119.467 187.733 4.267 12.8 4.267 51.2 4.267 68.267zM541.867 674.133c4.267 42.667 21.333 81.067 42.667 115.2 34.133 42.667 93.867 68.267 136.533 25.6 0 0 0 0 0 0 21.333-21.333 34.133-51.2 34.133-81.067 4.267-38.4 0-72.533-17.067-106.667-17.067-38.4-38.4-68.267-76.8-89.6-46.933-25.6-102.4-8.533-119.467 42.667-4.267 29.867-4.267 68.267 0 93.867zM277.333 776.533c8.533 17.067 17.067 34.133 34.133 46.933 29.867 29.867 64 34.133 102.4 8.533 51.2-29.867 81.067-85.333 85.333-145.067 4.267-51.2-12.8-115.2-64-145.067-17.067-4.267-34.133-8.533-51.2-4.267-21.333 4.267-38.4 17.067-51.2 29.867-55.467 46.933-76.8 140.8-55.467 209.067zM123.733 413.867c-34.133 46.933-55.467 110.933-34.133 170.667 12.8 25.6 34.133 42.667 64 46.933 25.6 4.267 51.2-8.533 72.533-25.6 8.533-4.267 12.8-12.8 17.067-17.067 17.067-21.333 29.867-46.933 34.133-72.533 8.533-29.867 12.8-59.733 8.533-85.333-4.267-34.133-29.867-64-64-68.267-38.4-4.267-76.8 21.333-98.133 51.2zM755.2 76.8c-29.867-25.6-81.067-29.867-115.2-21.333-42.667 8.533-72.533 38.4-115.2 42.667-29.867 0-55.467-8.533-85.333-17.067-38.4-12.8-76.8-34.133-115.2-29.867-25.6 0-55.467 12.8-72.533 34.133-42.667 42.667-29.867 110.933-8.533 162.133 17.067 55.467 55.467 102.4 98.133 140.8 17.067 17.067 38.4 34.133 64 42.667 25.6 12.8 55.467 17.067 85.333 17.067 34.133 0 68.267 0 98.133-12.8s55.467-29.867 72.533-55.467c21.333-25.6 42.667-51.2 59.733-81.067 17.067-25.6 34.133-55.467 46.933-85.333 17.067-34.133 21.333-76.8 4.267-110.933 0-12.8-8.533-21.333-17.067-25.6zM942.933 516.267c-8.533-55.467-34.133-106.667-81.067-136.533-17.067-12.8-38.4-17.067-64-17.067-42.667 0-72.533 34.133-81.067 72.533-17.067 76.8 59.733 200.533 140.8 204.8 21.333 0 38.4-4.267 51.2-21.333 21.333-17.067 29.867-42.667 34.133-68.267 0 4.267 4.267-8.533 0-34.133z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Binary file not shown.

View File

@ -8,12 +8,15 @@ import 'angular-translate-loader-partial';
import '@uirouter/angularjs';
import 'mg-crud';
import 'oclazyload';
import 'angular-material';
import 'angular-material/modules/scss/angular-material.scss';
export const ngDeps = [
'pascalprecht.translate',
'ui.router',
'mgCrud',
'oc.lazyLoad'
'oc.lazyLoad',
'ngMaterial'
];
import 'material-design-lite';

View File

@ -1,5 +1,5 @@
{
"name": "salix-client",
"name": "salix-front",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
@ -31,6 +31,21 @@
"resolved": "https://registry.npmjs.org/angular/-/angular-1.7.5.tgz",
"integrity": "sha512-760183yxtGzni740IBTieNuWLtPNAoMqvmC0Z62UoU0I3nqk+VJuO3JbQAXOyvo3Oy/ZsdNQwrSTh/B0OQZjNw=="
},
"angular-animate": {
"version": "1.7.7",
"resolved": "https://registry.npmjs.org/angular-animate/-/angular-animate-1.7.7.tgz",
"integrity": "sha512-KLbU9gtgCyNSaMZKnNe9Yi6UTlDMN2EWyokQ06TG5fbDWOePm+kv2xqeUg1S2h+ZLjK0NnoVDIvwDhVQ+AWAag=="
},
"angular-aria": {
"version": "1.7.7",
"resolved": "https://registry.npmjs.org/angular-aria/-/angular-aria-1.7.7.tgz",
"integrity": "sha512-Jju0VudfKVp+6FUtfzpDBuOJE8+8cGPSM10nRicXvJRX/Nx/YOu38f2aL3HQwThrRK+3E5jfo7yRwVNYoSmSxg=="
},
"angular-material": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/angular-material/-/angular-material-1.1.12.tgz",
"integrity": "sha512-hvYgVSAxmXy+ozm+FcdGrTrBKm/TLubCgJ8xZR3LNYYmLfsIfzh4Eyk87inmTCXS02KYL0EX2dUeiVmanHlIaQ=="
},
"angular-translate": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/angular-translate/-/angular-translate-2.18.1.tgz",

View File

@ -12,6 +12,9 @@
"@babel/polyfill": "^7.2.5",
"@uirouter/angularjs": "^1.0.20",
"angular": "^1.7.5",
"angular-animate": "^1.7.7",
"angular-aria": "^1.7.7",
"angular-material": "^1.1.12",
"angular-translate": "^2.18.1",
"angular-translate-loader-partial": "^2.18.1",
"flatpickr": "^4.5.2",

View File

@ -24,7 +24,7 @@ vn-home {
overflow:hidden;
border-radius: 6px;
background-color: $color-main;
color: white;
color: $color-font-dark;
display: flex;
flex-direction: column;
height: 8em;
@ -54,7 +54,7 @@ vn-home {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
color: white;
color: inherit;
margin: 0;
/* & > .bind-letter {

View File

@ -1,4 +1,5 @@
@import "effects";
@import "variables";
vn-main-menu {
display: flex;
@ -31,7 +32,7 @@ vn-main-menu {
vn-menu.vn-popover > div > div.content > ul {
list-style-type: none;
margin: 0;
color: white;
color: $color-font-dark;
& > li {
@extend %clickable-light;

View File

@ -2,7 +2,7 @@
vn-topbar {
display: flex;
color: white;
color: $color-font-dark;
box-sizing: border-box;
background-color: $color-header;
align-items: center;

View File

@ -92,7 +92,7 @@ class Controller {
this.company = value;
if (value &&
(!window.localStorage.localCompanyFk || window.localStorage.localCompanyFk === 'null'))
window.localStorage.setItem('localCompanyFk', value);
window.localStorage.setItem('defaultCompanyFk', value);
this.setUserConfig('companyFk', value);
}
@ -118,7 +118,7 @@ class Controller {
if (res.data && res.data.warehouseFk) {
this.warehouse = res.data.warehouseFk;
if (res.data.warehouseFk && !window.localStorage.localWarehouseFk)
window.localStorage.setItem('localWarehouseFk', res.data.warehouseFk);
window.localStorage.setItem('defaultWarehouseFk', res.data.warehouseFk);
}
if (res.data && res.data.companyFk) {

View File

@ -8,10 +8,9 @@
& > .header {
display: flex;
background: $color-main;
color: white;
justify-content: space-between;
align-items: stretch;
color: white;
color: $color-font-dark;
& > * {
min-width: 1.8em;

View File

@ -20,7 +20,7 @@ input[type=reset]::-moz-focus-inner {
}
a , .link{
color: $color-main;
color: $color-font-link;
text-decoration: none;
}
.link {
@ -148,11 +148,9 @@ vn-tool-bar {
max-width: 36em;
margin: 0 auto;
}
a.vn-list-item {
@extend %clickable;
}
.vn-list-item {
padding: $pad-medium;
border-bottom: $border-thin solid $color-spacer-light;
@ -180,7 +178,13 @@ a.vn-list-item {
}
}
}
}
}
}
vn-empty-rows.vn-list-item {
text-align: center;
padding: 1.5em;
box-sizing: border-box;
color: $color-font-secondary;
}
/** START - FORM ELEMENTS DISABLED **/

View File

@ -9,7 +9,7 @@
padding: $pad-small;
border: none;
background: $color-main;
color: white;
color: $color-font-dark;
margin: 0;
text-align: center;
line-height: 1.3em;

View File

@ -28,8 +28,10 @@ $border-thick: .15em;
$color-header: #3d3d3d;
$color-bg: #e5e5e5;
$color-bg-dark: #3d3d3d;
$color-font:#222222;
$color-font: #222222;
$color-font-secondary: #9b9b9b;
$color-font-dark: white;
$color-font-bg: rgba(0, 0, 0, .7);
$color-active: #3d3d3d;
$color-active-font: white;
$color-bg-panel: white;
@ -47,6 +49,7 @@ $color-hover-cd: rgba(0, 0, 0, .1);
$color-hover-dc: .7;
$color-disabled: .6;
$color-font-link: darken($color-main, 10%);
$color-main-medium: lighten($color-main, 20%);
$color-main-light: lighten($color-main, 35%);
$color-success-medium: lighten($color-success, 20%);
@ -63,6 +66,8 @@ $color-bg: #222;
$color-bg-dark: #222;
$color-font: white;
$color-font-secondary: #777;
$color-font-dark: white;
$color-font-bg: rgba(0, 0, 0, .8);
$color-active: #666;
$color-active-font: white;
$color-bg-panel: #3c3b3b;
@ -80,6 +85,7 @@ $color-hover-cd: rgba(255, 255, 255, .1);
$color-hover-dc: .7;
$color-disabled: .6;
$color-font-link: lighten($color-main, 10%);
$color-main-medium: darken($color-main, 20%);
$color-main-light: darken($color-main, 35%);
$color-success-medium: darken($color-success, 20%);

View File

@ -123,7 +123,7 @@ async function backTestDocker() {
if (argv['random'])
await execP(`docker rm -fv ${containerId}`);
}
backTestDocker.description = `Runs backend tests using in site container`;
backTestDocker.description = `Runs backend tests restoring fixtures first`;
function backTest(done) {
const nodemon = require('gulp-nodemon');

View File

@ -22,11 +22,11 @@
ng-repeat="client in clients track by client.id"
client="::client">
</vn-item-client>
<vn-empty-rows class="vn-list-item" style="text-align: center"
<vn-empty-rows class="vn-list-item"
ng-if="model.data.length === 0" translate>
No results
</vn-empty-rows>
<vn-empty-rows class="vn-list-item" style="text-align: center"
<vn-empty-rows class="vn-list-item"
ng-if="model.data === null" translate>
Enter a new search
</vn-empty-rows>

View File

@ -37,7 +37,7 @@ module.exports = Self => {
t.name type, u.id userId,
intr.description AS intrastat, i.stems,
ori.code AS origin, t.name AS type,
ic.name AS category
ic.name AS category, i.density, tc.description AS taxClass
FROM item i
JOIN itemType t ON t.id = i.typeFk
LEFT JOIN itemCategory ic ON ic.id = t.categoryFk
@ -45,7 +45,8 @@ module.exports = Self => {
JOIN account.user u ON u.id = w.userFk
LEFT JOIN intrastat intr ON intr.id = i.intrastatFk
LEFT JOIN producer pr ON pr.id = i.producerFk
LEFT JOIN origin ori ON ori.id = i.originFk`
LEFT JOIN origin ori ON ori.id = i.originFk
LEFT JOIN taxClass tc ON tc.id = i.taxClassFk`
);
if (tags) {

View File

@ -28,7 +28,7 @@ class Controller {
get warehouseFk() {
if (!this._warehouseFk)
this._warehouseFk = parseInt(window.localStorage.localWarehouseFk);
this._warehouseFk = parseInt(window.localStorage.defaultWarehouseFk);
return this._warehouseFk;
}

View File

@ -31,6 +31,8 @@
<vn-th th-id="intrastat">Intrastat</vn-th>
<vn-th th-id="origin">Origin</vn-th>
<vn-th th-id="salesperson">Sales person</vn-th>
<vn-th th-id="density">Density</vn-th>
<vn-th th-id="taxClass">Tax class</vn-th>
<vn-th th-id="active">Active</vn-th>
<vn-th></vn-th>
</vn-tr>
@ -71,6 +73,8 @@
{{::item.userNickname}}
</span>
</vn-td>
<vn-td>{{::item.density}}</vn-td>
<vn-td>{{::item.taxClass}}</vn-td>
<vn-td>
<vn-check
disabled="true"

View File

@ -5,7 +5,7 @@ vn-item-product {
.id {
background-color: $color-main;
color: white;
color: $color-font-dark;
margin-bottom: 0em;
}
.image {

View File

@ -1,21 +1,23 @@
@import "variables";
vn-item-last-entries {
.round {
background-color: $color-spacer;
border-radius: 25px;
float: right;
width: 25px;
color: white;
color: $color-font-dark;
text-align: center;
font-weight: bold;
}
& vn-horizontal {
vn-horizontal {
justify-content: center;
}
& vn-date-picker {
flex: none!important;
& .mdl-textfield{
width: 400px!important;
vn-date-picker {
flex: none !important;
.mdl-textfield{
width: 400px !important;
}
}
@media screen and (max-width: 1440px) {

View File

@ -1,9 +1,9 @@
Item: Artículo
View item: Ver artículo
Category: Categoría
Category: Reino
Description: Descripción
Size: Medida
Type: Tipo
Type: Familia
Name: Nombre
Full name: Nombre completo
Relevancy: Relevancia

View File

@ -25,17 +25,20 @@
<vn-autocomplete
vn-one
vn-focus
url="/item/api/ItemTypes"
url="/item/api/ItemCategories"
label="Category"
show-field="name"
value-field="id"
field="filter.categoryFk">
</vn-autocomplete>
<vn-autocomplete
vn-one
url="{{$ctrl.itemTypes}}"
label="Type"
show-field="name"
value-field="id"
field="filter.typeFk">
</vn-autocomplete>
<vn-textfield
vn-one
label="Description"
model="filter.description">
</vn-textfield>
</vn-horizontal>
<vn-horizontal ng-repeat="itemTag in filter.tags">
<vn-autocomplete
@ -71,6 +74,13 @@
tabindex="-1">
</vn-icon-button>
</vn-horizontal>
<vn-horizontal>
<vn-textfield
vn-one
label="Description"
model="filter.description">
</vn-textfield>
</vn-horizontal>
<vn-horizontal>
<vn-icon-button
vn-bind="+"

View File

@ -11,6 +11,14 @@ class Controller extends SearchPanel {
this.$.filter = value;
}
get itemTypes() {
if (this.$.filter) {
if (!this.$.filter.categoryFk)
return '/item/api/ItemTypes';
return `/item/api/ItemCategories/${this.$.filter.categoryFk}/itemTypes`;
}
}
get filter() {
return this.$.filter;
}

View File

@ -9,7 +9,7 @@ vn-item-summary {
.item-state {
padding: .4em;
background-color: $color-main;
color: white;
color: $color-font-dark;
p {
font-size: .8em;

View File

@ -3,16 +3,16 @@ const app = require('vn-loopback/server/server');
describe('order addToOrder()', () => {
let rowToDelete;
afterAll(async() => {
await app.models.OrderRow.removes({rows: [rowToDelete], actualOrderId: 16});
await app.models.OrderRow.removes({rows: [rowToDelete], actualOrderId: 20});
});
it('should add a row to a given order', async() => {
let unmodifiedRows = await app.models.OrderRow.find({where: {orderFk: 16}});
let unmodifiedRows = await app.models.OrderRow.find({where: {orderFk: 20}});
expect(unmodifiedRows.length).toBe(4);
expect(unmodifiedRows.length).toBe(1);
let params = {
orderFk: 16,
orderFk: 20,
items: [{
itemFk: 1,
quantity: 1,
@ -22,10 +22,10 @@ describe('order addToOrder()', () => {
await app.models.OrderRow.addToOrder(params);
let modifiedRows = await app.models.OrderRow.find({where: {orderFk: 16}});
let modifiedRows = await app.models.OrderRow.find({where: {orderFk: 20}});
rowToDelete = modifiedRows[modifiedRows.length - 1].id;
expect(modifiedRows.length).toBe(5);
expect(modifiedRows.length).toBe(2);
});
});

View File

@ -136,7 +136,8 @@ class Controller {
if (event.defaultPrevented) return;
event.preventDefault();
this.$panel = this.$compile(`<vn-order-catalog-search-panel/>`)(this.$scope.$new());
this.$panelScope = this.$scope.$new();
this.$panel = this.$compile(`<vn-order-catalog-search-panel/>`)(this.$panelScope);
const panel = this.$panel.isolateScope().$ctrl;
panel.filter = this.filter;
panel.onSubmit = filter => this.onPanelSubmit(filter);
@ -153,7 +154,7 @@ class Controller {
}
onPopoverClose() {
this.$panel.scope().$destroy();
this.$panelScope.$destroy();
this.$panel.remove();
this.$panel = null;
}

View File

@ -60,6 +60,7 @@
</vn-autocomplete>
<vn-check vn-one style="padding-top: 1em"
label="Order confirmed"
triple-state="true"
field="filter.isConfirmed">
</vn-check>
</vn-horizontal>

View File

@ -60,8 +60,10 @@ module.exports = Self => {
await model.Sale.update({id: params.editLines[i].id}, {discount: params.editLines[i].discount});
}
query = `
if (usesMana) {
query = `
call vn.manaSpellersRequery(?)`;
await Self.rawSql(query, [ticket[0].client().salesPersonFk]);
await Self.rawSql(query, [ticket[0].client().salesPersonFk]);
}
};
};

View File

@ -1,7 +1,7 @@
const app = require('vn-loopback/server/server');
describe('ticket getSales()', () => {
it('should return the sales of a ticket', async () => {
it('should return the sales of a ticket', async() => {
let sales = await app.models.Ticket.getSales(16);
expect(sales.length).toEqual(4);

View File

@ -1,10 +1,12 @@
@import "variables";
vn-dialog.modal-form {
vn-horizontal.header{
vn-horizontal.header {
background-color: $color-main;
h5{
color: white;
color: $color-font-dark;
h5 {
color: inherit;
margin: 0 auto;
}
}
@ -14,23 +16,22 @@ vn-dialog.modal-form {
table {
width: 100%
}
&>div{
padding: 0!important;
& > div {
padding: 0 !important;
}
vn-textfield {
width: 100%;
}
.buttons{
margin-top: 0!important;
.buttons {
margin-top: 0 !important;
}
p{
p {
display: none;
}
button.close > vn-icon{
color: white!important;
button.close > vn-icon {
color: white !important;
}
vn-ticket-sale-edit-discount > div {
padding-bottom: 0!important;
padding-bottom: 0 !important;
}
}

View File

@ -88,7 +88,7 @@
<vn-td>{{::ticket.agencyMode}}</vn-td>
<vn-td>{{::ticket.warehouse}}</vn-td>
<vn-td number>{{::ticket.total | currency: 'EUR': 2}}</vn-td>
<vn-td shrink>
<vn-td actions>
<vn-icon-button
ng-click="$ctrl.goToLines($event, ticket.id)"
vn-tooltip="Go to lines"

View File

@ -1,44 +1,11 @@
@import "variables";
vn-ticket-index{
vn-icon-menu{
padding-top: 30px;
padding-left: 10px;
color: $color-main;
li {
color: initial;
}
}
vn-ticket-index vn-icon-menu {
padding-top: 30px;
padding-left: 10px;
color: $color-main;
.alert1 {
color: white;
background-color: $color-main-light;
li {
color: initial;
}
vn-tr:hover .alert1 {
background-color: $color-main-medium;
}
.alertOk {
color: white;
background-color: $color-success-light;
}
vn-tr:hover .alertOk {
background-color: $color-success-medium;
}
.alertFree {
color: white;
background-color: $color-notice-light;
}
vn-tr:hover .alertFree {
background-color: $color-notice-medium;
}
.alert0 {
color: white;
background-color: $color-alert-light;
}
vn-tr:hover .alert0 {
background-color: $color-alert-medium;
}
}
}

View File

@ -44,16 +44,15 @@ class Controller {
}
if (modified) {
this.$http.post(`/ticket/api/Sales/updateDiscount`, {editLines}).then(() => {
this.hide();
this.onHide();
this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
this.clear();
modified = false;
}).catch(e => {
this.vnApp.showError(e.data.error.message);
});
} else {
} else
this.vnApp.showError(this.$translate.instant('There is no changes to save'));
}
}
clear() {
@ -70,6 +69,6 @@ ngModule.component('vnTicketSaleEditDiscount', {
edit: '<?',
mana: '<?',
bulk: '<?',
hide: '&'
onHide: '&'
}
});

View File

@ -190,7 +190,7 @@
mana="$ctrl.mana"
bulk="false"
edit="$ctrl.edit"
hide="$ctrl.hideEditPopover()">
on-hide="$ctrl.hideEditPopover()">
</vn-ticket-sale-edit-discount>
</vn-popover>
@ -204,7 +204,7 @@
mana="$ctrl.mana"
bulk="true"
edit="$ctrl.edit"
hide="$ctrl.hideEditDialog()">
on-hide="$ctrl.hideEditDialog()">
</vn-ticket-sale-edit-discount>
</tpl-body>
</vn-dialog>

View File

@ -1,38 +1,35 @@
@import "variables";
vn-ticket-sale {
.header {
justify-content: space-between !important;
align-items: center;
}
vn-popover.edit {
div.popover{
div.popover {
width: 200px;
}
vn-horizontal.header{
vn-horizontal.header {
background-color: $color-main;
h5{
color: white;
color: $color-font-dark;
h5 {
color: inherit;
margin: 0 auto;
}
}
p.simulatorTitle{
p.simulatorTitle {
margin-bottom: 0px;
font-size: 12px;
color: $color-main;
}
vn-label-value{
vn-label-value {
padding-bottom: 20px;
}
div.simulator{
text-align: center;
}
}
vn-dialog.edit {
@extend vn-popover.edit;
@ -45,8 +42,7 @@ vn-ticket-sale {
.buttons{
margin-top: 0!important;
}
p{
p {
display: none;
}
button.close > vn-icon{

View File

@ -0,0 +1,18 @@
USE `vn`;
CREATE
OR REPLACE ALGORITHM = UNDEFINED
DEFINER = `root`@`%`
SQL SECURITY DEFINER
VIEW `vn`.`workerDepartment` AS
SELECT
`p`.`id_trabajador` AS `workerFk`,
`d`.`id` AS `departmentFk`
FROM
(((`postgresql`.`person` `p`
JOIN `postgresql`.`profile` `pr` ON ((`pr`.`person_id` = `p`.`person_id`)))
LEFT JOIN (`postgresql`.`business` `b`
LEFT JOIN `postgresql`.`business_labour` `bl` ON ((`b`.`business_id` = `bl`.`business_id`))) ON ((`pr`.`profile_id` = `b`.`client_id`)))
JOIN `vn`.`department` `d` ON ((`d`.`id` = `bl`.`department_id`)))
WHERE
(ISNULL(`b`.`date_end`)
OR (`b`.`date_end` > CURDATE()));

View File

@ -0,0 +1,108 @@
USE `hedera`;
DROP procedure IF EXISTS `orderAddItem`;
DELIMITER $$
USE `hedera`$$
CREATE DEFINER=`root`@`%` PROCEDURE `orderAddItem`(IN `vOrder` INT, IN `vWarehouse` INT, IN `vItem` INT, IN `vAmount` INT)
BEGIN
DECLARE vRow INT;
DECLARE vAdd INT;
DECLARE vAvailable INT;
DECLARE vDone BOOL;
DECLARE vGrouping INT;
DECLARE vRate INT;
DECLARE vShipment DATE;
DECLARE vPrice DECIMAL(10,2);
DECLARE vDate DATE;
DECLARE vAddress INT;
DECLARE vAgencyMode INT;
DECLARE cur CURSOR FOR
SELECT grouping, price, rate
FROM tmp.bionic_price
WHERE warehouse_id = vWarehouse
AND item_id = vItem
ORDER BY grouping DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET vDone = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
SELECT date_send, address_id, agency_id
INTO vDate, vAddress, vAgencyMode
FROM `order`
WHERE id = vOrder;
CALL vn2008.bionic_from_item(vDate, vAddress, vAgencyMode, vItem);
START TRANSACTION;
SELECT shipped INTO vShipment
FROM tmp.travel_tree
WHERE warehouseFk = vWarehouse;
SELECT available INTO vAvailable
FROM tmp.bionic_lot
WHERE warehouse_id = vWarehouse
AND item_id = vItem;
IF vAmount > IFNULL(vAvailable, 0)
THEN
CALL util.throw ('ORDER_ROW_UNAVAILABLE');
END IF;
OPEN cur;
l: LOOP
SET vDone = FALSE;
FETCH cur INTO vGrouping, vPrice, vRate;
IF vDone THEN
LEAVE l;
END IF;
SET vAdd = vAmount - MOD(vAmount, vGrouping);
SET vAmount = vAmount - vAdd;
IF vAdd = 0 THEN
ITERATE l;
END IF;
INSERT INTO order_row SET
order_id = vOrder,
item_id = vItem,
warehouse_id = vWarehouse,
shipment = vShipment,
rate = vRate,
amount = vAdd,
price = vPrice;
SET vRow = LAST_INSERT_ID();
INSERT INTO order_component (order_row_id, component_id, price)
SELECT vRow, c.component_id, c.cost
FROM tmp.bionic_component c
JOIN bi.tarifa_componentes t
ON t.Id_Componente = c.component_id
AND (t.tarifa_class IS NULL OR t.tarifa_class = vRate)
WHERE c.warehouse_id = vWarehouse
AND c.item_id = vItem;
END LOOP;
CLOSE cur;
IF vAmount > 0
THEN
CALL util.throw ('AMOUNT_NOT_MATCH_GROUPING');
END IF;
COMMIT;
CALL vn2008.bionic_free ();
END$$
DELIMITER ;

View File

@ -0,0 +1 @@
INSERT INTO salix.ACL(id,model, property, accessType, permission, principalType, principalId)VALUES(147,'UserConfigView', '*', '*', 'ALLOW', 'ROLE', 'employee');

View File

@ -879,84 +879,90 @@ INSERT INTO `hedera`.`order`(`id`, `date_send`, `customer_id`, `delivery_method_
(17, CURDATE(), 106, 2, 4, 126, 442, NULL, 'SALIX', 0, CURDATE() , CURDATE() , CURDATE() ),
(18, CURDATE(), 107, 3, 4, 127, 442, NULL, 'SALIX', 0, CURDATE() , CURDATE() , CURDATE() ),
(19, CURDATE(), 108, 1, 5, 128, 442, NULL, 'SALIX', 0, CURDATE() , CURDATE() , CURDATE() ),
(20, CURDATE(), 109, 2, 5, 119, 442, NULL, 'SALIX', 0, CURDATE() , CURDATE() , CURDATE() ),
(20, CURDATE(), 109, 2, 1, 119, 442, NULL, 'SALIX', 0, CURDATE() , CURDATE() , CURDATE() ),
(21, CURDATE(), 110, 3, 5, 129, 442, NULL, 'SALIX', 0, CURDATE() , CURDATE() , CURDATE() );
INSERT INTO `hedera`.`orderRow`(`id`, `orderFk`, `itemFk`, `warehouseFk`, `shipment`, `amount`, `price`, `rate`, `created`, `saleFk`)
VALUES
( 1, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 5, 9.10, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 1),
( 2, 1, 2, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 10, 1.07, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 2),
( 3, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 2, 9.10, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 3),
( 4, 1, 4, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 20, 3.06, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 4),
( 5, 2, 1, 1, DATE_ADD(CURDATE(), INTERVAL -10 DAY), 10, 9.10, 0, DATE_ADD(CURDATE(), INTERVAL -10 DAY), 5),
( 6, 3, 1, 2, DATE_ADD(CURDATE(), INTERVAL -5 DAY), 15, 6.50, 0, DATE_ADD(CURDATE(), INTERVAL -5 DAY), 6),
( 7, 11, 2, 1, CURDATE(), 15, 1.30, 0, CURDATE(), 7),
( 8, 11, 4, 1, CURDATE(), 10, 3.26, 0, CURDATE(), 8),
( 9, 16, 1, 1, CURDATE(), 5, 9.10, 0, CURDATE(), 9),
( 10, 16, 2, 1, CURDATE(), 10, 1.07, 0, CURDATE(), 10),
( 11, 16, 1, 1, CURDATE(), 2, 9.10, 0, CURDATE(), 11),
( 12, 16, 4, 1, CURDATE(), 20, 3.06, 0, CURDATE(), 12);
(1, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 5, 9.10, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 1),
(2, 1, 2, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 10, 1.07, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 2),
(3, 1, 1, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 2, 9.10, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 3),
(4, 1, 4, 1, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 20, 3.06, 0, DATE_ADD(CURDATE(), INTERVAL -15 DAY), 4),
(5, 2, 1, 1, DATE_ADD(CURDATE(), INTERVAL -10 DAY), 10, 9.10, 0, DATE_ADD(CURDATE(), INTERVAL -10 DAY), 5),
(6, 3, 1, 2, DATE_ADD(CURDATE(), INTERVAL -5 DAY), 15, 6.50, 0, DATE_ADD(CURDATE(), INTERVAL -5 DAY), 6),
(7, 11, 2, 1, CURDATE(), 15, 1.30, 0, CURDATE(), 7),
(8, 11, 4, 1, CURDATE(), 10, 3.26, 0, CURDATE(), 8),
(9, 16, 1, 1, CURDATE(), 5, 9.10, 0, CURDATE(), 9),
(10, 16, 2, 1, CURDATE(), 10, 1.07, 0, CURDATE(), 10),
(11, 16, 1, 1, CURDATE(), 2, 9.10, 0, CURDATE(), 11),
(12, 16, 4, 1, CURDATE(), 20, 3.06, 0, CURDATE(), 12),
(13, 20, 1, 1, CURDATE(), 2, 9.10, 0, CURDATE(), NULL);
INSERT INTO `hedera`.`orderRowComponent`(`rowFk`, `componentFk`, `price`)
VALUES
( 1, 15, 0.58),
( 1, 23, 6.5),
( 1, 28, 20.72),
( 1, 29, -18.72),
( 1, 39, 0.02),
( 2, 15, 0.058),
( 2, 21, 0.002),
( 2, 28, 5.6),
( 2, 29, -4.6),
( 2, 39, 0.01),
( 3, 15, 0.58),
( 3, 23, 6.5),
( 3, 28, 20.72),
( 3, 29, -18.72),
( 3, 39, 0.02),
( 4, 15, 0.051),
( 4, 21, -0.001),
( 4, 28, 20.72),
( 4, 29, -19.72),
( 4, 37, 2),
( 4, 39, 0.01),
( 5, 15, 0.58),
( 5, 23, 6.5),
( 5, 28, 20.72),
( 5, 29, -18.72),
( 5, 39, 0.02),
( 6, 23, 6.5),
( 7, 15, 0.29),
( 7, 28, 5.6),
( 7, 29, -4.6),
( 7, 39, 0.01),
( 8, 15, 0.254),
( 8, 21, -0.004),
( 8, 28, 20.72),
( 8, 29, -19.72),
( 8, 37, 2),
( 8, 39, 0.01),
( 9, 15, 0.58),
( 9, 23, 6.5),
( 9, 28, 20.72),
( 9, 29, -18.72),
( 9, 39, 0.02),
( 10, 15, 0.058),
( 10, 21, 0.002),
( 10, 28, 5.6),
( 10, 29, -4.6),
( 10, 39, 0.01),
( 11, 15, 0.58),
( 11, 23, 6.5),
( 11, 28, 20.72),
( 11, 29, -18.72),
( 11, 39, 0.02),
( 12, 15, 0.051),
( 12, 22, -0.001),
( 12, 28, 20.72),
( 12, 29, -19.72),
( 12, 37, 2),
( 12, 39, 0.01);
(1, 15, 0.58),
(1, 23, 6.5),
(1, 28, 20.72),
(1, 29, -18.72),
(1, 39, 0.02),
(2, 15, 0.058),
(2, 21, 0.002),
(2, 28, 5.6),
(2, 29, -4.6),
(2, 39, 0.01),
(3, 15, 0.58),
(3, 23, 6.5),
(3, 28, 20.72),
(3, 29, -18.72),
(3, 39, 0.02),
(4, 15, 0.051),
(4, 21, -0.001),
(4, 28, 20.72),
(4, 29, -19.72),
(4, 37, 2),
(4, 39, 0.01),
(5, 15, 0.58),
(5, 23, 6.5),
(5, 28, 20.72),
(5, 29, -18.72),
(5, 39, 0.02),
(6, 23, 6.5),
(7, 15, 0.29),
(7, 28, 5.6),
(7, 29, -4.6),
(7, 39, 0.01),
(8, 15, 0.254),
(8, 21, -0.004),
(8, 28, 20.72),
(8, 29, -19.72),
(8, 37, 2),
(8, 39, 0.01),
(9, 15, 0.58),
(9, 23, 6.5),
(9, 28, 20.72),
(9, 29, -18.72),
(9, 39, 0.02),
(10, 15, 0.058),
(10, 21, 0.002),
(10, 28, 5.6),
(10, 29, -4.6),
(10, 39, 0.01),
(11, 15, 0.58),
(11, 23, 6.5),
(11, 28, 20.72),
(11, 29, -18.72),
(11, 39, 0.02),
(12, 15, 0.051),
(12, 22, -0.001),
(12, 28, 20.72),
(12, 29, -19.72),
(12, 37, 2),
(12, 39, 0.01),
(13, 15, 0.58),
(13, 23, 6.5),
(13, 28, 20.72),
(13, 29, -18.72),
(13, 39, 0.02);
INSERT INTO `vn`.`clientContact`(`id`, `clientFk`, `name`, `phone`)
VALUES
@ -1042,12 +1048,7 @@ INSERT INTO `vn`.`orderTicket`(`orderFk`, `ticketFk`)
(12, 12),
(13, 13),
(14, 14),
(15, 15),
(17, 17),
(18, 18),
(19, 19),
(20, 20),
(21, 21);
(15, 15);
INSERT INTO `vn`.`userConfig` (`userFk`, `warehouseFk`, `companyFk`)
VALUES