diff --git a/back/methods/chat/sendCheckingPresence.js b/back/methods/chat/sendCheckingPresence.js index c1bc565eb2..fcde20130c 100644 --- a/back/methods/chat/sendCheckingPresence.js +++ b/back/methods/chat/sendCheckingPresence.js @@ -27,7 +27,7 @@ module.exports = Self => { Self.sendCheckingPresence = async(ctx, recipientId, message, options) => { if (!recipientId) return false; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/back/methods/dms/updateFile.js b/back/methods/dms/updateFile.js index 161f4728c9..cfc4c322fc 100644 --- a/back/methods/dms/updateFile.js +++ b/back/methods/dms/updateFile.js @@ -60,7 +60,7 @@ module.exports = Self => { const args = ctx.args; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/back/methods/dms/uploadFile.js b/back/methods/dms/uploadFile.js index 6bda1e6db2..fb4b2e5b81 100644 --- a/back/methods/dms/uploadFile.js +++ b/back/methods/dms/uploadFile.js @@ -54,7 +54,7 @@ module.exports = Self => { const args = ctx.args; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/back/methods/starred-module/getStarredModules.js b/back/methods/starred-module/getStarredModules.js index 7b0f0e945d..5d399f16e1 100644 --- a/back/methods/starred-module/getStarredModules.js +++ b/back/methods/starred-module/getStarredModules.js @@ -16,7 +16,7 @@ module.exports = function(Self) { const models = Self.app.models; const userId = ctx.req.accessToken.userId; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/back/methods/starred-module/setPosition.js b/back/methods/starred-module/setPosition.js index c72de10834..d993f18e92 100644 --- a/back/methods/starred-module/setPosition.js +++ b/back/methods/starred-module/setPosition.js @@ -31,7 +31,7 @@ module.exports = function(Self) { const userId = ctx.req.accessToken.userId; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/back/methods/starred-module/toggleStarredModule.js b/back/methods/starred-module/toggleStarredModule.js index 16e14740ba..9cc496f44a 100644 --- a/back/methods/starred-module/toggleStarredModule.js +++ b/back/methods/starred-module/toggleStarredModule.js @@ -23,7 +23,7 @@ module.exports = function(Self) { const userId = ctx.req.accessToken.userId; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/db/changes/10370-pickles/00-item_getBalance.sql b/db/changes/10390-constitution/00-item_getBalance.sql similarity index 97% rename from db/changes/10370-pickles/00-item_getBalance.sql rename to db/changes/10390-constitution/00-item_getBalance.sql index 91e5c36815..90e3ee2bb2 100644 --- a/db/changes/10370-pickles/00-item_getBalance.sql +++ b/db/changes/10390-constitution/00-item_getBalance.sql @@ -1,9 +1,9 @@ -DROP PROCEDURE IF EXISTS vn.item_getBalance; +DROP PROCEDURE IF EXISTS `vn`.`item_getBalance`; DELIMITER $$ $$ CREATE - definer = root@`%` procedure vn.item_getBalance(IN vItemId int, IN vWarehouse int) + definer = root@`%` procedure `vn`.`item_getBalance`(IN vItemId int, IN vWarehouse int) BEGIN DECLARE vDateInventory DATETIME; DECLARE vCurdate DATE DEFAULT CURDATE(); diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index b467eedc04..3808e29b47 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -739,7 +739,7 @@ INSERT INTO `vn`.`itemType`(`id`, `code`, `name`, `categoryFk`, `warehouseFk`, ` (3, 'WPN', 'Paniculata', 2, 1, 31, 35, 0), (4, 'PRT', 'Delivery ports', 3, 1, NULL, 35, 1), (5, 'CON', 'Container', 3, 1, NULL, 35, 1), - (6, 'ALS', 'Alstroemeria', 1, 1, 31, 35, 0); + (6, 'ALS', 'Alstroemeria', 1, 1, 31, 16, 0); INSERT INTO `vn`.`ink`(`id`, `name`, `picture`, `showOrder`, `hex`) VALUES @@ -796,25 +796,25 @@ INSERT INTO `vn`.`itemFamily`(`code`, `description`) ('SER', 'Services'), ('VT', 'Sales'); -INSERT INTO `vn`.`item`(`id`, `typeFk`, `size`, `inkFk`, `stems`, `originFk`, `description`, `producerFk`, `intrastatFk`, `expenceFk`, `comment`, `relevancy`, `image`, `subName`, `minPrice`, `stars`, `family`) +INSERT INTO `vn`.`item`(`id`, `typeFk`, `size`, `inkFk`, `stems`, `originFk`, `description`, `producerFk`, `intrastatFk`, `expenceFk`, `comment`, `relevancy`, `image`, `subName`, `minPrice`, `stars`, `family`, `isFloramondo`) VALUES - (1, 2, 70, 'YEL', 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '1', NULL, 0, 1, 'VT'), - (2, 2, 70, 'BLU', 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '2', NULL, 0, 2, 'VT'), - (3, 1, 60, 'YEL', 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '3', NULL, 0, 5, 'VT'), - (4, 1, 60, 'YEL', 1, 1, 'Increases block', 1, 05080000, 4751000000, NULL, 0, '4', NULL, 0, 3, 'VT'), - (5, 3, 30, 'RED', 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '5', NULL, 0, 3, 'VT'), - (6, 5, 30, 'RED', 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '6', NULL, 0, 4, 'VT'), - (7, 5, 90, 'BLU', 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '7', NULL, 0, 4, 'VT'), - (8, 2, 70, 'YEL', 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '8', NULL, 0, 5, 'VT'), - (9, 2, 70, 'BLU', 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '9', NULL, 0, 4, 'VT'), - (10, 1, 60, 'YEL', 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '10', NULL, 0, 4, 'VT'), - (11, 1, 60, 'YEL', 1, 1, NULL, 1, 05080000, 4751000000, NULL, 0, '11', NULL, 0, 4, 'VT'), - (12, 3, 30, 'RED', 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '12', NULL, 0, 3, 'VT'), - (13, 5, 30, 'RED', 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '13', NULL, 0, 2, 'VT'), - (14, 5, 90, 'BLU', 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 4, 'VT'), - (15, 4, NULL, NULL, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 0, 'EMB'), - (16, 4, NULL, NULL, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 0, 'EMB'), - (71, 4, NULL, NULL, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 0, 'VT'); + (1, 2, 70, 'YEL', 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '1', NULL, 0, 1, 'VT', 0), + (2, 2, 70, 'BLU', 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '2', NULL, 0, 2, 'VT', 0), + (3, 1, 60, 'YEL', 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '3', NULL, 0, 5, 'VT', 0), + (4, 1, 60, 'YEL', 1, 1, 'Increases block', 1, 05080000, 4751000000, NULL, 0, '4', NULL, 0, 3, 'VT', 0), + (5, 3, 30, 'RED', 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '5', NULL, 0, 3, 'VT', 0), + (6, 5, 30, 'RED', 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '6', NULL, 0, 4, 'VT', 0), + (7, 5, 90, 'BLU', 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '7', NULL, 0, 4, 'VT', 0), + (8, 2, 70, 'YEL', 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '8', NULL, 0, 5, 'VT', 0), + (9, 2, 70, 'BLU', 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '9', NULL, 0, 4, 'VT', 0), + (10, 1, 60, 'YEL', 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '10', NULL, 0, 4, 'VT', 0), + (11, 1, 60, 'YEL', 1, 1, NULL, 1, 05080000, 4751000000, NULL, 0, '11', NULL, 0, 4, 'VT', 0), + (12, 3, 30, 'RED', 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '12', NULL, 0, 3, 'VT', 0), + (13, 5, 30, 'RED', 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '13', NULL, 0, 2, 'VT', 1), + (14, 5, 90, 'BLU', 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 4, 'VT', 1), + (15, 4, NULL, NULL, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 0, 'EMB', 0), + (16, 6, NULL, NULL, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 0, 'EMB', 0), + (71, 6, NULL, NULL, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 0, 'VT', 0); -- Update the taxClass after insert of the items UPDATE `vn`.`itemTaxCountry` SET `taxClassFk` = 2 diff --git a/e2e/paths/02-client/01_create_client.spec.js b/e2e/paths/02-client/01_create_client.spec.js index bde4203b47..ff2aac6b9f 100644 --- a/e2e/paths/02-client/01_create_client.spec.js +++ b/e2e/paths/02-client/01_create_client.spec.js @@ -29,11 +29,11 @@ describe('Client create path', () => { it('should receive an error when clicking the create button having name and Business name fields empty', async() => { + await page.autocompleteSearch(selectors.createClientView.salesPerson, 'salesPerson'); + await page.autocompleteSearch(selectors.createClientView.businessType, 'florist'); await page.write(selectors.createClientView.taxNumber, '74451390E'); await page.write(selectors.createClientView.userName, 'CaptainMarvel'); await page.write(selectors.createClientView.email, 'CarolDanvers@verdnatura.es'); - await page.autocompleteSearch(selectors.createClientView.salesPerson, 'salesPerson'); - await page.autocompleteSearch(selectors.createClientView.businessType, 'florist'); await page.waitToClick(selectors.createClientView.createButton); const message = await page.waitForSnackbar(); @@ -83,7 +83,6 @@ describe('Client create path', () => { expect(message.text).toContain('Some fields are invalid'); }); - /* Tarea #3370 it(`should attempt to create a new user with all it's data but wrong business type`, async() => { await page.clearInput(selectors.createClientView.email); await page.write(selectors.createClientView.email, 'CarolDanvers@verdnatura.es'); @@ -91,13 +90,10 @@ describe('Client create path', () => { await page.waitToClick(selectors.createClientView.createButton); const message = await page.waitForSnackbar(); - expect(message.text).toContain('Some fields are invalid'); - });*/ + expect(message.text).toContain('The type of business must be filled in basic data'); + }); it(`should attempt to create a new user with all it's data but wrong postal code`, async() => { - await page.clearInput(selectors.createClientView.email); - await page.write(selectors.createClientView.email, 'CarolDanvers@verdnatura.es'); - await page.autocompleteSearch(selectors.createClientView.businessType, 'florist'); await page.clearInput(selectors.createClientView.postcode); await page.write(selectors.createClientView.postcode, '479999'); diff --git a/front/core/components/calendar/style.scss b/front/core/components/calendar/style.scss index aecc3eecbc..6a7995ea5f 100644 --- a/front/core/components/calendar/style.scss +++ b/front/core/components/calendar/style.scss @@ -86,12 +86,12 @@ align-items: center; &.today { - color: $color-font-bg; + color: $color-font; & > .day-number { border: 2px solid $color-font-link; &:hover { - background-color: lighten($color-font-link, 20%); + background-color: $color-marginal; opacity: .8 } } diff --git a/front/core/components/chip/style.scss b/front/core/components/chip/style.scss index d1632890c6..cc0554509d 100644 --- a/front/core/components/chip/style.scss +++ b/front/core/components/chip/style.scss @@ -50,7 +50,7 @@ vn-chip { &.alert, &.alert.clickable:hover, &.alert.clickable:focus { - background-color: $color-alert-medium; + background-color: lighten($color-alert, 5%); } &.message, &.message.clickable:hover, diff --git a/front/core/components/field/style.scss b/front/core/components/field/style.scss index 5f77e904ee..399122b1d0 100644 --- a/front/core/components/field/style.scss +++ b/front/core/components/field/style.scss @@ -222,11 +222,11 @@ } } &.focused { - background-color: $color-bg-panel; + background-color: $color-font-dark; & > .container { & > .infix > .control > * { - color: $color-font; + color: $color-marginal; &::placeholder { color: $color-font-bg; @@ -235,7 +235,7 @@ & > .prepend, & > .append, & > .icons { - color: $color-font-bg-marginal; + color: $color-marginal; } } } diff --git a/front/core/components/smart-table/table.scss b/front/core/components/smart-table/table.scss index e0464465ae..b38ca7d824 100644 --- a/front/core/components/smart-table/table.scss +++ b/front/core/components/smart-table/table.scss @@ -6,14 +6,14 @@ smart-table table { border-collapse: collapse; & > thead { - border-bottom: 2px solid $color-spacer; + border-bottom: $border; & > * > th { font-weight: normal; } } & > tfoot { - border-top: 2px solid $color-spacer; + border-top: $border; } thead, tbody, tfoot { & > * { @@ -27,7 +27,7 @@ smart-table table { & > th, & > td { text-align: left; - padding: 9px 5px; + padding: 5px; white-space: nowrap; text-overflow: ellipsis; @@ -67,7 +67,7 @@ smart-table table { } } tbody > * { - border-bottom: 1px solid $color-spacer-light; + border-bottom: $border-thin; &:last-child { border-bottom: none; @@ -76,23 +76,26 @@ smart-table table { .chip { padding: 4px; border-radius: 4px; - color: $color-font-bg; &.notice { - background-color: $color-notice-medium + background-color: $color-notice-medium; + color: $color-font-bg; } &.success { background-color: $color-success-medium; + color: $color-font-bg; } &.warning { background-color: $color-main-medium; + color: $color-font-bg; } &.alert { - background-color: $color-alert-medium; + background-color: lighten($color-alert, 5%); + color: $color-font-bg; } &.message { + background-color: $color-bg-dark; color: $color-font-dark; - background-color: $color-bg-dark } } } diff --git a/front/core/components/table/style.scss b/front/core/components/table/style.scss index 2864ea8a1c..28d5a4f363 100644 --- a/front/core/components/table/style.scss +++ b/front/core/components/table/style.scss @@ -14,7 +14,7 @@ vn-table { & > vn-thead, & > thead { display: table-header-group; - border-bottom: 2px solid $color-spacer; + border-bottom: $border; & > * > th { font-weight: normal; @@ -32,7 +32,7 @@ vn-table { & > vn-tfoot, & > .vn-tfoot, & > tfoot { - border-top: 2px solid $color-spacer; + border-top: $border; display: table-footer-group } & > * > vn-tr, @@ -119,7 +119,7 @@ vn-table { vn-tbody > *, .vn-tbody > *, tbody > * { - border-bottom: 1px solid $color-spacer-light; + border-bottom: $border-thin; &:last-child { border-bottom: none; @@ -132,23 +132,26 @@ vn-table { .chip { padding: 4px; border-radius: 4px; - color: $color-font-bg; &.notice { - background-color: $color-notice-medium + background-color: $color-notice-medium; + color: $color-font-bg; } &.success { background-color: $color-success-medium; + color: $color-font-bg; } &.warning { background-color: $color-main-medium; + color: $color-font-bg; } &.alert { - background-color: $color-alert-medium; + background-color: lighten($color-alert, 5%); + color: $color-font-bg; } &.message { + background-color: $color-bg-dark; color: $color-font-dark; - background-color: $color-bg-dark } } vn-icon-menu { @@ -194,8 +197,8 @@ vn-table.scrollable > .vn-table, vn-thead vn-th, thead vn-th, thead th { - border-bottom: 2px solid $color-spacer; - background-color: #FFF; + border-bottom: $border; + background-color: $color-bg-panel; position: sticky; z-index: 9; top: 0 diff --git a/front/core/directives/no-image-dark.png b/front/core/directives/no-image-dark.png new file mode 100644 index 0000000000..2a20d7eb49 Binary files /dev/null and b/front/core/directives/no-image-dark.png differ diff --git a/front/core/directives/on-error-src.js b/front/core/directives/on-error-src.js index 094064aad1..5cad429743 100644 --- a/front/core/directives/on-error-src.js +++ b/front/core/directives/on-error-src.js @@ -1,5 +1,5 @@ import ngModule from '../module'; -import noImage from './no-image.png'; +import noImage from './no-image-dark.png'; /** * Sets a default image when there is an error loading diff --git a/front/core/styles/icons/salixfont.css b/front/core/styles/icons/salixfont.css index d6466a0ebd..48dd91a826 100644 --- a/front/core/styles/icons/salixfont.css +++ b/front/core/styles/icons/salixfont.css @@ -23,30 +23,30 @@ -moz-osx-font-smoothing: grayscale; } -.icon-basketadd:before { - content: "\e901"; +.icon-preserved:before { + content: "\e963"; } -.icon-addperson:before { - content: "\e955"; +.icon-treatments:before { + content: "\e964"; } -.icon-supplierfalse:before { +.icon-funeral:before { + content: "\e965"; +} +.icon-handmadeArtificial:before { + content: "\e966"; +} +.icon-fixedPrice:before { content: "\e962"; } -.icon-invoice-in-create:before { - content: "\e948"; +.icon-accounts:before { + content: "\e95f"; } -.icon-invoiceOut:before { +.icon-clientConsumption:before { content: "\e960"; } -.icon-invoiceIn:before { +.icon-lastBuy:before { content: "\e961"; } -.icon-supplier:before { - content: "\e936"; -} -.icon-latestBuy:before { - content: "\e95f"; -} .icon-zone:before { content: "\e95d"; } @@ -86,6 +86,9 @@ .icon-deliveryprices:before { content: "\e956"; } +.icon-basketadd:before { + content: "\e955"; +} .icon-catalog:before { content: "\e952"; } @@ -128,9 +131,15 @@ .icon-actions:before { content: "\e900"; } +.icon-addperson:before { + content: "\e901"; +} .icon-albaran:before { content: "\e902"; } +.icon-apps:before { + content: "\e948"; +} .icon-artificial:before { content: "\e903"; } @@ -239,6 +248,9 @@ .icon-mandatory:before { content: "\e921"; } +.icon-niche:before { + content: "\e922"; +} .icon-no036:before { content: "\e923"; } @@ -302,6 +314,9 @@ .icon-stowaway:before { content: "\e92c"; } +.icon-supplier:before { + content: "\e936"; +} .icon-tags:before { content: "\e937"; } diff --git a/front/core/styles/icons/salixfont.svg b/front/core/styles/icons/salixfont.svg index 7ff0f037d9..42129b284d 100644 --- a/front/core/styles/icons/salixfont.svg +++ b/front/core/styles/icons/salixfont.svg @@ -10,16 +10,16 @@ - + - + - + @@ -29,7 +29,7 @@ - + @@ -41,6 +41,7 @@ + @@ -49,7 +50,7 @@ - + @@ -66,7 +67,7 @@ - + @@ -104,6 +105,11 @@ + + + + + diff --git a/front/core/styles/icons/salixfont.ttf b/front/core/styles/icons/salixfont.ttf index 106994f836..f0e5ad0474 100644 Binary files a/front/core/styles/icons/salixfont.ttf and b/front/core/styles/icons/salixfont.ttf differ diff --git a/front/core/styles/icons/salixfont.woff b/front/core/styles/icons/salixfont.woff index d2491a5380..1cf4179ac1 100644 Binary files a/front/core/styles/icons/salixfont.woff and b/front/core/styles/icons/salixfont.woff differ diff --git a/front/core/styles/variables.scss b/front/core/styles/variables.scss index 8883c54802..c79a8590fb 100644 --- a/front/core/styles/variables.scss +++ b/front/core/styles/variables.scss @@ -1,6 +1,6 @@ @import "./util"; -$font-size: 12pt; +$font-size: 11pt; $menu-width: 256px; $topbar-height: 56px; $mobile-width: 800px; @@ -24,7 +24,7 @@ $spacing-xl: 70px; // Light theme -$color-primary: #f7931e; +/* $color-primary: #f7931e; $color-secondary: $color-primary; $color-font: #222; @@ -72,52 +72,65 @@ $color-success-light: lighten($color-success, 35%); $color-notice-medium: lighten($color-notice, 20%); $color-notice-light: lighten($color-notice, 35%); $color-alert-medium: lighten($color-alert, 20%); -$color-alert-light: lighten($color-alert, 35%); +$color-alert-light: lighten($color-alert, 35%); */ /**/ // Dark theme -/* -$color-header: #3d3d3d; -$color-bg: #222; -$color-bg-dark: #222; +$color-primary: #ec8916; +$color-secondary: $color-primary; + $color-font: #eee; $color-font-light: #aaa; $color-font-secondary: #777; $color-font-dark: white; +$color-font-link: #66bfff; $color-font-bg: rgba(0, 0, 0, .8); -$color-font-link: #005a9a; +$color-font-bg-marginal: rgba(255, 255, 255, .4); +$color-font-bg-dark: rgba(255, 255, 255, .7); +$color-font-bg-dark-marginal: rgba(255, 255, 255, .4); + +$color-header: #3d3d3d; +$color-menu-header: #3d3d3d; +$color-bg: #222; +$color-bg-dark: #222; $color-active: #666; $color-active-font: white; $color-bg-panel: #3c3b3b; -$color-main: #f7931e; -$color-marginal: #ccc; +$color-main: $color-primary; +$color-marginal: #222; $color-success: #a3d131; $color-notice: #32b1ce; -$color-alert: #f42121; +$color-alert: #fa3939; +$color-button: $color-secondary; $color-spacer: rgba(255, 255, 255, .3); $color-spacer-light: rgba(255, 255, 255, .12); $color-input-underline: rgba(255, 255, 255, .12); $color-input-underline-hover: rgba(255, 255, 255, .6); $color-shadow: rgba(0, 0, 0, .2); +$color-border: rgba(0, 0, 0, .3); $color-hightlight: rgba(255, 255, 255, .15); $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%); -$color-success-light: darken($color-success, 35%); -$color-notice-medium: darken($color-notice, 20%); -$color-notice-light: darken($color-notice, 35%); -$color-alert-medium: darken($color-alert, 20%); -$color-alert-light: darken($color-alert, 35%); +$color-primary-medium: lighten($color-primary, 20%); +$color-primary-light: lighten($color-primary, 35%); +$color-font-link-medium: lighten($color-font-link, 20%); +$color-font-link-light: lighten($color-font-link, 35%); +$color-main-medium: lighten($color-main, 20%); +$color-main-light: lighten($color-main, 35%); +$color-success-medium: lighten($color-success, 20%); +$color-success-light: lighten($color-success, 35%); +$color-notice-medium: lighten($color-notice, 20%); +$color-notice-light: lighten($color-notice, 35%); +$color-alert-medium: lighten($color-alert, 20%); +$color-alert-light: lighten($color-alert, 35%); /**/ // Border -$border-thin: 1px solid $color-spacer; +$border-thin: 1px solid $color-border; $border-thin-light: 1px solid $color-spacer-light; +$border: 2px solid $color-border; $shadow: 0 2px 2px 0 rgba(0, 0, 0, .3); diff --git a/front/salix/components/summary/style.scss b/front/salix/components/summary/style.scss index 99854fa9d6..6f93a61bfe 100644 --- a/front/salix/components/summary/style.scss +++ b/front/salix/components/summary/style.scss @@ -65,11 +65,10 @@ ui-view > .vn-summary { text-transform: uppercase; font-size: 1.25rem; line-height: 1; - padding: 7px; - padding-bottom: 4px; /* Bottom line-height fix */ + padding: 7px 0; + padding-bottom: 5px; /* Bottom line-height fix */ font-weight: lighter; - background-color: $color-main-light; - border-bottom: 1px solid $color-main; + border-bottom: 2px solid $color-main; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -78,7 +77,7 @@ ui-view > .vn-summary { display: block; } a { - color: $color-font; + color: $color-font-link; } } h4 span:after { @@ -87,7 +86,7 @@ ui-view > .vn-summary { position: absolute; right: 5px; text-transform: none; - color: $color-spacer + color: $color-font-link; } & > * { margin: $spacing-sm; diff --git a/front/salix/styles/misc.scss b/front/salix/styles/misc.scss index 55de5eb0c2..02bfd9f175 100644 --- a/front/salix/styles/misc.scss +++ b/front/salix/styles/misc.scss @@ -60,7 +60,7 @@ vn-bg-title { font-size: 1.25rem; } .totalBox { - border: 1px solid #CCC; + border: $border-thin; text-align: right; justify-content: center; align-items: center; diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 271c3fd4f2..15c65fd89a 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -118,5 +118,6 @@ "reference duplicated": "reference duplicated", "The PDF document does not exists": "The PDF document does not exists. Try regenerating it from 'Regenerate invoice PDF' option", "This item is not available": "This item is not available", - "Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}" + "Deny buy request": "Purchase request for ticket id [{{ticketId}}]({{{url}}}) has been rejected. Reason: {{observation}}", + "The type of business must be filled in basic data": "The type of business must be filled in basic data" } \ No newline at end of file diff --git a/loopback/locale/es.json b/loopback/locale/es.json index 8d5c69cb46..bb4f357dfe 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -133,7 +133,7 @@ "reserved": "reservado", "Changed sale reserved state": "He cambiado el estado reservado de las siguientes lineas al ticket [{{ticketId}}]({{{ticketUrl}}}): {{{changes}}}", "Bought units from buy request": "Se ha comprado {{quantity}} unidades de [{{itemId}} {{concept}}]({{{urlItem}}}) para el ticket id [{{ticketId}}]({{{url}}})", - "Deny buy request":"Se ha rechazado la petición de compra para el ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}", + "Deny buy request": "Se ha rechazado la petición de compra para el ticket id [{{ticketId}}]({{{url}}}). Motivo: {{observation}}", "MESSAGE_INSURANCE_CHANGE": "He cambiado el crédito asegurado del cliente [{{clientName}} ({{clientId}})]({{{url}}}) a *{{credit}} €*", "Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})", "Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})", @@ -211,6 +211,7 @@ "Can't verify data unless the client has a business type": "No se puede verificar datos de un cliente que no tiene tipo de negocio", "You don't have enough privileges to set this credit amount": "No tienes suficientes privilegios para establecer esta cantidad de crédito", "You can't change the credit set to zero from a manager": "No puedes cambiar el cŕedito establecido a cero por un gerente", - "Amounts do not match": "Amounts do not match", - "The PDF document does not exists": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'" + "Amounts do not match": "Las cantidades no coinciden", + "The PDF document does not exists": "El documento PDF no existe. Prueba a regenerarlo desde la opción 'Regenerar PDF factura'", + "The type of business must be filled in basic data": "El tipo de negocio debe estar rellenado en datos básicos" } \ No newline at end of file diff --git a/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js b/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js index 0e358678ea..de812417a0 100644 --- a/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js +++ b/modules/claim/back/methods/claim-beginning/importToNewRefundTicket.js @@ -63,7 +63,7 @@ module.exports = Self => { }; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/claim/back/methods/claim-dms/removeFile.js b/modules/claim/back/methods/claim-dms/removeFile.js index 310d2b941e..edc714235f 100644 --- a/modules/claim/back/methods/claim-dms/removeFile.js +++ b/modules/claim/back/methods/claim-dms/removeFile.js @@ -20,7 +20,7 @@ module.exports = Self => { Self.removeFile = async(ctx, id, options) => { let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/claim/back/methods/claim-end/importTicketSales.js b/modules/claim/back/methods/claim-end/importTicketSales.js index 106313f142..6dd64be363 100644 --- a/modules/claim/back/methods/claim-end/importTicketSales.js +++ b/modules/claim/back/methods/claim-end/importTicketSales.js @@ -22,7 +22,7 @@ module.exports = Self => { let userId = ctx.req.accessToken.userId; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/claim/back/methods/claim/regularizeClaim.js b/modules/claim/back/methods/claim/regularizeClaim.js index 2106ab2108..d1fe7c13ef 100644 --- a/modules/claim/back/methods/claim/regularizeClaim.js +++ b/modules/claim/back/methods/claim/regularizeClaim.js @@ -24,7 +24,7 @@ module.exports = Self => { const resolvedState = 3; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/claim/back/methods/claim/updateClaim.js b/modules/claim/back/methods/claim/updateClaim.js index 68df9481c6..a646db3556 100644 --- a/modules/claim/back/methods/claim/updateClaim.js +++ b/modules/claim/back/methods/claim/updateClaim.js @@ -44,7 +44,7 @@ module.exports = Self => { const userId = ctx.req.accessToken.userId; const args = ctx.args; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/claim/back/methods/claim/updateClaimAction.js b/modules/claim/back/methods/claim/updateClaimAction.js index 12749fb6ba..23d1d417da 100644 --- a/modules/claim/back/methods/claim/updateClaimAction.js +++ b/modules/claim/back/methods/claim/updateClaimAction.js @@ -30,7 +30,7 @@ module.exports = Self => { Self.updateClaimAction = async(ctx, id, options) => { let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/claim/back/methods/claim/uploadFile.js b/modules/claim/back/methods/claim/uploadFile.js index daab9341af..81ad402198 100644 --- a/modules/claim/back/methods/claim/uploadFile.js +++ b/modules/claim/back/methods/claim/uploadFile.js @@ -54,7 +54,7 @@ module.exports = Self => { Self.uploadFile = async(ctx, id, options) => { let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/client/back/methods/client/canBeInvoiced.js b/modules/client/back/methods/client/canBeInvoiced.js index d8a126ed20..567d491f1f 100644 --- a/modules/client/back/methods/client/canBeInvoiced.js +++ b/modules/client/back/methods/client/canBeInvoiced.js @@ -25,7 +25,7 @@ module.exports = function(Self) { Self.canBeInvoiced = async(id, options) => { const models = Self.app.models; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js index 4cac16358f..f3591750da 100644 --- a/modules/client/back/models/client.js +++ b/modules/client/back/models/client.js @@ -55,6 +55,15 @@ module.exports = Self => { with: /^[\w|.|-]+@[\w|-]+(\.[\w|-]+)*(,[\w|.|-]+@[\w|-]+(\.[\w|-]+)*)*$/ }); + Self.validate('businessTypeFk', hasBusinessType, { + message: `The type of business must be filled in basic data` + }); + + function hasBusinessType(err) { + if (!this.businessTypeFk) + err(); + } + Self.validatesLengthOf('postcode', { allowNull: true, allowBlank: true, diff --git a/modules/client/front/create/locale/es.yml b/modules/client/front/create/locale/es.yml index 6922ba917b..31b7cd4037 100644 --- a/modules/client/front/create/locale/es.yml +++ b/modules/client/front/create/locale/es.yml @@ -7,4 +7,5 @@ Create and edit: Crear y editar You can save multiple emails: >- Puede guardar varios correos electrónicos encadenándolos mediante comas sin espacios, ejemplo: user@dominio.com, user2@dominio.com siendo el primer - correo electrónico el principal \ No newline at end of file + correo electrónico el principal +The type of business must be filled in basic data: El tipo de negocio debe estar rellenado en datos básicos diff --git a/modules/entry/back/methods/entry/addBuy.js b/modules/entry/back/methods/entry/addBuy.js index f21c1650ce..f612c16518 100644 --- a/modules/entry/back/methods/entry/addBuy.js +++ b/modules/entry/back/methods/entry/addBuy.js @@ -68,7 +68,7 @@ module.exports = Self => { Self.addBuy = async(ctx, options) => { const conn = Self.dataSource.connector; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/entry/back/methods/entry/deleteBuys.js b/modules/entry/back/methods/entry/deleteBuys.js index ce5ff6a7d9..ac6d30ce67 100644 --- a/modules/entry/back/methods/entry/deleteBuys.js +++ b/modules/entry/back/methods/entry/deleteBuys.js @@ -21,7 +21,7 @@ module.exports = Self => { Self.deleteBuys = async(ctx, options) => { const models = Self.app.models; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/entry/back/methods/entry/editLatestBuys.js b/modules/entry/back/methods/entry/editLatestBuys.js index 53b92d966e..fb0397d2b4 100644 --- a/modules/entry/back/methods/entry/editLatestBuys.js +++ b/modules/entry/back/methods/entry/editLatestBuys.js @@ -32,7 +32,7 @@ module.exports = Self => { Self.editLatestBuys = async(field, newValue, lines, options) => { let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/entry/back/methods/entry/filter.js b/modules/entry/back/methods/entry/filter.js index 24c518de87..13690d3acf 100644 --- a/modules/entry/back/methods/entry/filter.js +++ b/modules/entry/back/methods/entry/filter.js @@ -108,7 +108,7 @@ module.exports = Self => { }); Self.filter = async(ctx, filter, options) => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/entry/back/methods/entry/getBuys.js b/modules/entry/back/methods/entry/getBuys.js index 8adcc950d8..6da9ec53e6 100644 --- a/modules/entry/back/methods/entry/getBuys.js +++ b/modules/entry/back/methods/entry/getBuys.js @@ -29,7 +29,7 @@ module.exports = Self => { Self.getBuys = async(id, filter, options) => { const models = Self.app.models; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/entry/back/methods/entry/getEntry.js b/modules/entry/back/methods/entry/getEntry.js index 74ccc88c51..66238d0dc4 100644 --- a/modules/entry/back/methods/entry/getEntry.js +++ b/modules/entry/back/methods/entry/getEntry.js @@ -21,7 +21,7 @@ module.exports = Self => { Self.getEntry = async(id, options) => { const models = Self.app.models; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/entry/back/methods/entry/importBuysPreview.js b/modules/entry/back/methods/entry/importBuysPreview.js index 790d33364c..5b88b587ca 100644 --- a/modules/entry/back/methods/entry/importBuysPreview.js +++ b/modules/entry/back/methods/entry/importBuysPreview.js @@ -26,7 +26,7 @@ module.exports = Self => { Self.importBuysPreview = async(id, buys, options) => { const models = Self.app.models; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/entry/back/methods/entry/latestBuysFilter.js b/modules/entry/back/methods/entry/latestBuysFilter.js index cbf9e3b6a4..7711bc0f10 100644 --- a/modules/entry/back/methods/entry/latestBuysFilter.js +++ b/modules/entry/back/methods/entry/latestBuysFilter.js @@ -76,7 +76,7 @@ module.exports = Self => { }); Self.latestBuysFilter = async(ctx, filter, options) => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/entry/front/buy/index/style.scss b/modules/entry/front/buy/index/style.scss index 55df72f1c3..04c8d130a0 100644 --- a/modules/entry/front/buy/index/style.scss +++ b/modules/entry/front/buy/index/style.scss @@ -15,16 +15,16 @@ vn-entry-buy-index vn-card { tbody tr:nth-child(1), tbody tr:nth-child(2) { - border-left: 1px solid $color-marginal; - border-right: 1px solid $color-marginal; + border-left: 1px solid $color-spacer; + border-right: 1px solid $color-spacer; } tbody tr:nth-child(2) { - border-bottom: 1px solid $color-marginal; + border-bottom: 1px solid $color-spacer; } tbody{ - border-bottom: 1px solid $color-marginal; + border-bottom: 1px solid $color-spacer; } tbody:last-child { diff --git a/modules/entry/front/main/index.html b/modules/entry/front/main/index.html index 6c08cd0c42..f6a4c61fcf 100644 --- a/modules/entry/front/main/index.html +++ b/modules/entry/front/main/index.html @@ -2,7 +2,8 @@ vn-id="model" url="Entries/filter" limit="20" - auto-load="true"> + auto-load="true" + order="landed DESC, id DESC"> { { arg: 'isBooked', type: 'boolean', - description: 'Whether the the invoice is booked or not', + description: 'Whether the invoice is booked or not', }, ], returns: { @@ -95,7 +95,7 @@ module.exports = Self => { const conn = Self.dataSource.connector; const args = ctx.args; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/invoiceIn/back/methods/invoice-in/summary.js b/modules/invoiceIn/back/methods/invoice-in/summary.js index 80dc2331b2..33bf670d36 100644 --- a/modules/invoiceIn/back/methods/invoice-in/summary.js +++ b/modules/invoiceIn/back/methods/invoice-in/summary.js @@ -21,7 +21,7 @@ module.exports = Self => { Self.summary = async(id, options) => { const models = Self.app.models; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/invoiceOut/back/methods/invoiceOut/book.js b/modules/invoiceOut/back/methods/invoiceOut/book.js index 0371d4f746..7aa0eac1f0 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/book.js +++ b/modules/invoiceOut/back/methods/invoiceOut/book.js @@ -23,7 +23,7 @@ module.exports = Self => { Self.book = async(ref, options) => { const models = Self.app.models; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/invoiceOut/back/methods/invoiceOut/createPdf.js b/modules/invoiceOut/back/methods/invoiceOut/createPdf.js index ac79f0d5d0..3f577c9b09 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/createPdf.js +++ b/modules/invoiceOut/back/methods/invoiceOut/createPdf.js @@ -35,7 +35,7 @@ module.exports = Self => { throw new UserError(`Action not allowed on the test environment`); let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/invoiceOut/back/methods/invoiceOut/filter.js b/modules/invoiceOut/back/methods/invoiceOut/filter.js index 3496c92963..99a80c169f 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/filter.js +++ b/modules/invoiceOut/back/methods/invoiceOut/filter.js @@ -35,7 +35,7 @@ module.exports = Self => { { arg: 'hasPdf', type: 'boolean', - description: 'Whether the the invoiceOut has PDF or not', + description: 'Whether the invoiceOut has PDF or not', http: {source: 'query'} }, { @@ -87,7 +87,7 @@ module.exports = Self => { Self.filter = async(ctx, filter, options) => { const conn = Self.dataSource.connector; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/invoiceOut/back/methods/invoiceOut/getTickets.js b/modules/invoiceOut/back/methods/invoiceOut/getTickets.js index dc3296aba9..dc94f0f0f5 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/getTickets.js +++ b/modules/invoiceOut/back/methods/invoiceOut/getTickets.js @@ -29,7 +29,7 @@ module.exports = Self => { Self.getTickets = async(id, filter, options) => { const models = Self.app.models; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/invoiceOut/back/methods/invoiceOut/summary.js b/modules/invoiceOut/back/methods/invoiceOut/summary.js index a95016ff28..db01a41895 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/summary.js +++ b/modules/invoiceOut/back/methods/invoiceOut/summary.js @@ -21,7 +21,7 @@ module.exports = Self => { Self.summary = async(id, options) => { let summary = {}; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/item/back/methods/item/activeBuyers.js b/modules/item/back/methods/item/activeBuyers.js new file mode 100644 index 0000000000..e16ff877b0 --- /dev/null +++ b/modules/item/back/methods/item/activeBuyers.js @@ -0,0 +1,44 @@ +const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; +const mergeFilters = require('vn-loopback/util/filter').mergeFilters; + +module.exports = Self => { + Self.remoteMethod('activeBuyers', { + description: 'Returns a list of buyers for the given item type', + accepts: [{ + arg: 'filter', + type: 'object', + description: `Filter defining where, order, offset, and limit - must be a JSON-encoded string` + }], + returns: { + type: ['object'], + root: true + }, + http: { + path: `/activeBuyers`, + verb: 'GET' + } + }); + + Self.activeBuyers = async(filter, options) => { + const conn = Self.dataSource.connector; + const where = {isActive: true}; + const myOptions = {}; + + if (typeof options == 'object') + Object.assign(myOptions, options); + + filter = mergeFilters(filter, {where}); + + let stmt = new ParameterizedSQL( + `SELECT DISTINCT w.id workerFk, w.firstName, w.lastName, u.name, u.nickname + FROM worker w + JOIN itemType it ON it.workerFk = w.id + JOIN account.user u ON u.id = w.id + JOIN item i ON i.typeFk = it.id`, + null, myOptions); + + stmt.merge(conn.makeSuffix(filter)); + + return conn.executeStmt(stmt); + }; +}; diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js index 8cfefac9f0..29099c7ec2 100644 --- a/modules/item/back/methods/item/filter.js +++ b/modules/item/back/methods/item/filter.js @@ -41,10 +41,10 @@ module.exports = Self => { { arg: 'isActive', type: 'boolean', - description: 'Whether the the item is or not active', + description: 'Whether the item is or not active', }, { - arg: 'salesPersonFk', + arg: 'buyerFk', type: 'integer', description: 'The buyer of the item', }, @@ -62,6 +62,11 @@ module.exports = Self => { arg: 'landed', type: 'date', description: 'The item last buy landed date', + }, + { + arg: 'isFloramondo', + type: 'boolean', + description: 'Whether the the item is or not floramondo', } ], returns: { @@ -104,13 +109,13 @@ module.exports = Self => { ? {or: [{'i.id': value}, codeWhere]} : {or: [{'i.name': {like: `%${value}%`}}, codeWhere]}; case 'id': - return {'i.id': value}; case 'isActive': - return {'i.isActive': value}; + case 'typeFk': + case 'isFloramondo': + param = `i.${param}`; + return {[param]: value}; case 'multiplier': return {'i.stemMultiplier': value}; - case 'typeFk': - return {'i.typeFk': value}; case 'categoryFk': return {'ic.id': value}; case 'buyerFk': @@ -146,6 +151,7 @@ module.exports = Self => { i.density, i.stemMultiplier, i.typeFk, + i.isFloramondo, it.name AS typeName, it.workerFk AS buyerFk, u.name AS userName, diff --git a/modules/item/back/methods/item/specs/activeBuyers.spec.js b/modules/item/back/methods/item/specs/activeBuyers.spec.js new file mode 100644 index 0000000000..5bf36756fc --- /dev/null +++ b/modules/item/back/methods/item/specs/activeBuyers.spec.js @@ -0,0 +1,24 @@ +const models = require('vn-loopback/server/server').models; + +describe('Worker activeBuyers', () => { + it('should return the buyers in itemType as result', async() => { + const tx = await models.Item.beginTransaction({}); + + try { + const options = {transaction: tx}; + const filter = {}; + const result = await models.Item.activeBuyers(filter, options); + const firstWorker = result[0]; + const secondWorker = result[1]; + + expect(result.length).toEqual(2); + expect(firstWorker.nickname).toEqual('logisticBossNick'); + expect(secondWorker.nickname).toEqual('buyerNick'); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); +}); diff --git a/modules/item/back/methods/item/specs/filter.spec.js b/modules/item/back/methods/item/specs/filter.spec.js index 572aa0167c..7b1fac9ac0 100644 --- a/modules/item/back/methods/item/specs/filter.spec.js +++ b/modules/item/back/methods/item/specs/filter.spec.js @@ -60,4 +60,23 @@ describe('item filter()', () => { throw e; } }); + + it('should return 2 result filtering by isFloramondo checkbox', async() => { + const tx = await models.Item.beginTransaction({}); + const options = {transaction: tx}; + + try { + const filter = {}; + const ctx = {args: {filter: filter, isFloramondo: true}}; + const result = await models.Item.filter(ctx, filter, options); + + expect(result.length).toEqual(2); + expect(result[0].id).toEqual(13); + + await tx.rollback(); + } catch (e) { + await tx.rollback(); + throw e; + } + }); }); diff --git a/modules/item/back/models/item.js b/modules/item/back/models/item.js index 6cf5ba6258..457cce4f2f 100644 --- a/modules/item/back/models/item.js +++ b/modules/item/back/models/item.js @@ -14,6 +14,7 @@ module.exports = Self => { require('../methods/item/getWasteByWorker')(Self); require('../methods/item/getWasteByItem')(Self); require('../methods/item/createIntrastat')(Self); + require('../methods/item/activeBuyers')(Self); Self.validatesPresenceOf('originFk', {message: 'Cannot be blank'}); diff --git a/modules/item/back/models/item.json b/modules/item/back/models/item.json index d39b39178b..fd4b6b0794 100644 --- a/modules/item/back/models/item.json +++ b/modules/item/back/models/item.json @@ -140,6 +140,9 @@ }, "isFragile": { "type": "boolean" + }, + "isFloramondo": { + "type": "boolean" } }, "relations": { diff --git a/modules/item/front/main/index.html b/modules/item/front/main/index.html index a57d4fb2df..44d1257587 100644 --- a/modules/item/front/main/index.html +++ b/modules/item/front/main/index.html @@ -1,16 +1,19 @@ + data="items" + auto-load="true"> diff --git a/modules/item/front/main/index.js b/modules/item/front/main/index.js index f343699824..1d99c91a10 100644 --- a/modules/item/front/main/index.js +++ b/modules/item/front/main/index.js @@ -1,7 +1,15 @@ import ngModule from '../module'; import ModuleMain from 'salix/components/module-main'; +export default class Items extends ModuleMain { + constructor($element, $) { + super($element, $); -export default class Items extends ModuleMain {} + this.filterParams = { + isActive: true, + isFloramondo: false + }; + } +} ngModule.vnComponent('vnItems', { controller: Items, diff --git a/modules/item/front/routes.json b/modules/item/front/routes.json index 8f3e037469..6d39083b43 100644 --- a/modules/item/front/routes.json +++ b/modules/item/front/routes.json @@ -9,7 +9,7 @@ {"state": "item.index", "icon": "icon-item"}, {"state": "item.request", "icon": "pan_tool"}, {"state": "item.waste.index", "icon": "icon-claims"}, - {"state": "item.fixedPrice", "icon": "contact_support"} + {"state": "item.fixedPrice", "icon": "icon-fixedPrice"} ], "card": [ {"state": "item.card.basicData", "icon": "settings"}, diff --git a/modules/item/front/search-panel/index.html b/modules/item/front/search-panel/index.html index 94e4b6d070..57f05bb546 100644 --- a/modules/item/front/search-panel/index.html +++ b/modules/item/front/search-panel/index.html @@ -40,13 +40,11 @@ @@ -155,6 +153,14 @@ tabindex="-1"> + + + + diff --git a/modules/monitor/front/index/orders/style.scss b/modules/monitor/front/index/orders/style.scss index 102712eaf9..64d6497c90 100644 --- a/modules/monitor/front/index/orders/style.scss +++ b/modules/monitor/front/index/orders/style.scss @@ -11,7 +11,7 @@ vn-monitor-sales-orders { color: gray; & > vn-td { - border-bottom: 2px solid $color-marginal; + border-bottom: $border; font-size: 13px; } } diff --git a/modules/monitor/front/index/style.scss b/modules/monitor/front/index/style.scss index 9eda945b56..2b193ac885 100644 --- a/modules/monitor/front/index/style.scss +++ b/modules/monitor/front/index/style.scss @@ -6,7 +6,7 @@ vn-monitor-index { padding: 12px 0 5px 0; color: gray; font-size: 1.2rem; - border-bottom: 2px solid $color-font-secondary; + border-bottom: $border; margin-bottom: 10px; & > vn-none > vn-icon { diff --git a/modules/route/back/methods/route/getSuggestedTickets.js b/modules/route/back/methods/route/getSuggestedTickets.js index fe268f8ccc..49d7c1977e 100644 --- a/modules/route/back/methods/route/getSuggestedTickets.js +++ b/modules/route/back/methods/route/getSuggestedTickets.js @@ -20,7 +20,7 @@ module.exports = Self => { }); Self.getSuggestedTickets = async(id, options) => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/route/back/methods/route/getTickets.js b/modules/route/back/methods/route/getTickets.js index 5705d89050..9a2f5289a4 100644 --- a/modules/route/back/methods/route/getTickets.js +++ b/modules/route/back/methods/route/getTickets.js @@ -26,7 +26,8 @@ module.exports = Self => { Self.getTickets = async(filter, options) => { const conn = Self.dataSource.connector; - let myOptions = {}; + const myOptions = {}; + if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/route/back/methods/route/insertTicket.js b/modules/route/back/methods/route/insertTicket.js index d716bd8ba1..f78e1cb831 100644 --- a/modules/route/back/methods/route/insertTicket.js +++ b/modules/route/back/methods/route/insertTicket.js @@ -30,7 +30,7 @@ module.exports = Self => { const models = Self.app.models; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/route/back/methods/route/updateVolume.js b/modules/route/back/methods/route/updateVolume.js index ce6e16b5c2..f3b8da1301 100644 --- a/modules/route/back/methods/route/updateVolume.js +++ b/modules/route/back/methods/route/updateVolume.js @@ -24,7 +24,7 @@ module.exports = Self => { const models = Self.app.models; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/supplier/front/contact/style.scss b/modules/supplier/front/contact/style.scss index 84e98050df..becc66dcf5 100644 --- a/modules/supplier/front/contact/style.scss +++ b/modules/supplier/front/contact/style.scss @@ -6,5 +6,5 @@ margin-bottom: 10px; padding-right: 10px; padding-left: 10px; - border: 1px solid $color-marginal; + border: 1px solid $color-spacer; } diff --git a/modules/supplier/front/descriptor/index.html b/modules/supplier/front/descriptor/index.html index 9781c95b87..dcc065eff8 100644 --- a/modules/supplier/front/descriptor/index.html +++ b/modules/supplier/front/descriptor/index.html @@ -28,11 +28,6 @@ icon="icon-disabled" ng-if="$ctrl.supplier.isActive == false"> - - { return this.ticket.option = response.data[0].id; diff --git a/modules/worker/back/methods/calendar/absences.js b/modules/worker/back/methods/calendar/absences.js index 96293c931b..32d311cdb6 100644 --- a/modules/worker/back/methods/calendar/absences.js +++ b/modules/worker/back/methods/calendar/absences.js @@ -40,7 +40,7 @@ module.exports = Self => { ended.setMonth(12); ended.setDate(0); - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/back/methods/worker-time-control/addTimeEntry.js b/modules/worker/back/methods/worker-time-control/addTimeEntry.js index 2079a62a39..80786b7236 100644 --- a/modules/worker/back/methods/worker-time-control/addTimeEntry.js +++ b/modules/worker/back/methods/worker-time-control/addTimeEntry.js @@ -34,8 +34,8 @@ module.exports = Self => { const models = Self.app.models; const args = ctx.args; const currentUserId = ctx.req.accessToken.userId; + const myOptions = {}; - let myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/back/methods/worker-time-control/deleteTimeEntry.js b/modules/worker/back/methods/worker-time-control/deleteTimeEntry.js index 23e4c5fffd..c80dcab81b 100644 --- a/modules/worker/back/methods/worker-time-control/deleteTimeEntry.js +++ b/modules/worker/back/methods/worker-time-control/deleteTimeEntry.js @@ -25,7 +25,7 @@ module.exports = Self => { const currentUserId = ctx.req.accessToken.userId; const models = Self.app.models; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/back/methods/worker-time-control/updateTimeEntry.js b/modules/worker/back/methods/worker-time-control/updateTimeEntry.js index abeda7f8e4..a99a617704 100644 --- a/modules/worker/back/methods/worker-time-control/updateTimeEntry.js +++ b/modules/worker/back/methods/worker-time-control/updateTimeEntry.js @@ -31,7 +31,7 @@ module.exports = Self => { const models = Self.app.models; const args = ctx.args; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/back/methods/worker/createAbsence.js b/modules/worker/back/methods/worker/createAbsence.js index 549ba7fd15..b276cf1f7c 100644 --- a/modules/worker/back/methods/worker/createAbsence.js +++ b/modules/worker/back/methods/worker/createAbsence.js @@ -41,7 +41,7 @@ module.exports = Self => { const userId = ctx.req.accessToken.userId; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/back/methods/worker/deleteAbsence.js b/modules/worker/back/methods/worker/deleteAbsence.js index 18427424df..72e9243d9f 100644 --- a/modules/worker/back/methods/worker/deleteAbsence.js +++ b/modules/worker/back/methods/worker/deleteAbsence.js @@ -28,7 +28,7 @@ module.exports = Self => { const userId = ctx.req.accessToken.userId; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/back/methods/worker/holidays.js b/modules/worker/back/methods/worker/holidays.js index f3ce0c6615..e11d130020 100644 --- a/modules/worker/back/methods/worker/holidays.js +++ b/modules/worker/back/methods/worker/holidays.js @@ -34,7 +34,7 @@ module.exports = Self => { const models = Self.app.models; const args = ctx.args; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/back/methods/worker/isSubordinate.js b/modules/worker/back/methods/worker/isSubordinate.js index 13cc365c63..f051cf7685 100644 --- a/modules/worker/back/methods/worker/isSubordinate.js +++ b/modules/worker/back/methods/worker/isSubordinate.js @@ -27,7 +27,7 @@ module.exports = Self => { const models = Self.app.models; const myUserId = ctx.req.accessToken.userId; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/back/methods/worker/mySubordinates.js b/modules/worker/back/methods/worker/mySubordinates.js index 07a22291da..b6711e3827 100644 --- a/modules/worker/back/methods/worker/mySubordinates.js +++ b/modules/worker/back/methods/worker/mySubordinates.js @@ -25,7 +25,7 @@ module.exports = Self => { const userId = ctx.req.accessToken.userId; const stmts = []; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/worker/front/calendar/style.scss b/modules/worker/front/calendar/style.scss index 70e998a4fa..d92c54806f 100644 --- a/modules/worker/front/calendar/style.scss +++ b/modules/worker/front/calendar/style.scss @@ -11,7 +11,7 @@ vn-worker-calendar { padding: $spacing-md; & > vn-calendar { - border: 1px solid #ddd; + border: $border-thin; margin: $spacing-md; padding: $spacing-xs; max-width: 288px; @@ -38,13 +38,12 @@ vn-worker-calendar { } vn-side-menu div > .input { - border-color: rgba(0, 0, 0, 0.3); - border-bottom: 1px solid rgba(0, 0, 0, 0.3); + border-bottom: $border-thin; } .festive, vn-avatar.today { - background-color: $color-font-dark; + color: $color-font; width: 24px; min-width: 24px; height: 24px diff --git a/modules/zone/back/methods/agency-mode/byWarehouse.js b/modules/zone/back/methods/agency-mode/byWarehouse.js index 30716d145b..945e79320e 100644 --- a/modules/zone/back/methods/agency-mode/byWarehouse.js +++ b/modules/zone/back/methods/agency-mode/byWarehouse.js @@ -22,7 +22,7 @@ module.exports = Self => { Self.byWarehouse = async(filter, options) => { const conn = Self.dataSource.connector; const where = {isActive: true}; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/zone/back/methods/agency/getAgenciesWithWarehouse.js b/modules/zone/back/methods/agency/getAgenciesWithWarehouse.js index 296b9ee8d4..846ad6a3db 100644 --- a/modules/zone/back/methods/agency/getAgenciesWithWarehouse.js +++ b/modules/zone/back/methods/agency/getAgenciesWithWarehouse.js @@ -29,7 +29,7 @@ module.exports = Self => { }); Self.getAgenciesWithWarehouse = async(addressFk, landed, warehouseFk, options) => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/zone/back/methods/agency/landsThatDay.js b/modules/zone/back/methods/agency/landsThatDay.js index 5a9efefe8f..b7f13dddae 100644 --- a/modules/zone/back/methods/agency/landsThatDay.js +++ b/modules/zone/back/methods/agency/landsThatDay.js @@ -23,7 +23,7 @@ module.exports = Self => { }); Self.landsThatDay = async(addressFk, landed, options) => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/zone/back/methods/zone/clone.js b/modules/zone/back/methods/zone/clone.js index 64dc5aa553..391b3762a6 100644 --- a/modules/zone/back/methods/zone/clone.js +++ b/modules/zone/back/methods/zone/clone.js @@ -22,7 +22,7 @@ module.exports = Self => { Self.clone = async(id, options) => { const models = Self.app.models; let tx; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/zone/back/methods/zone/getEvents.js b/modules/zone/back/methods/zone/getEvents.js index c76a38ea50..a8ee8bb7be 100644 --- a/modules/zone/back/methods/zone/getEvents.js +++ b/modules/zone/back/methods/zone/getEvents.js @@ -26,7 +26,7 @@ module.exports = Self => { }); Self.getEvents = async(geoFk, agencyModeFk, options) => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/zone/back/methods/zone/getLeaves.js b/modules/zone/back/methods/zone/getLeaves.js index cda5d7ff9a..db17beb1bb 100644 --- a/modules/zone/back/methods/zone/getLeaves.js +++ b/modules/zone/back/methods/zone/getLeaves.js @@ -32,7 +32,7 @@ module.exports = Self => { }); Self.getLeaves = async(id, parentId = null, search, options) => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/zone/back/methods/zone/getUpcomingDeliveries.js b/modules/zone/back/methods/zone/getUpcomingDeliveries.js index 6aceb694b4..2a1c39ed6d 100644 --- a/modules/zone/back/methods/zone/getUpcomingDeliveries.js +++ b/modules/zone/back/methods/zone/getUpcomingDeliveries.js @@ -14,7 +14,7 @@ module.exports = Self => { }); Self.getUpcomingDeliveries = async options => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/zone/back/methods/zone/includingExpired.js b/modules/zone/back/methods/zone/includingExpired.js index 75aa41e1c8..e93b864712 100644 --- a/modules/zone/back/methods/zone/includingExpired.js +++ b/modules/zone/back/methods/zone/includingExpired.js @@ -2,7 +2,7 @@ const ParameterizedSQL = require('loopback-connector').ParameterizedSQL; module.exports = Self => { Self.remoteMethodCtx('includingExpired', { - description: 'Returns a list of agencies from a warehouse', + description: 'Returns a list of zones for the given warehouse and user', accepts: [{ arg: 'filter', type: 'Object', @@ -19,7 +19,7 @@ module.exports = Self => { }); Self.includingExpired = async(ctx, filter, options) => { - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/modules/zone/back/methods/zone/toggleIsIncluded.js b/modules/zone/back/methods/zone/toggleIsIncluded.js index 32144ab971..bf8c86f464 100644 --- a/modules/zone/back/methods/zone/toggleIsIncluded.js +++ b/modules/zone/back/methods/zone/toggleIsIncluded.js @@ -29,7 +29,7 @@ module.exports = Self => { Self.toggleIsIncluded = async(id, geoId, isIncluded, options) => { const models = Self.app.models; - let myOptions = {}; + const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); diff --git a/print/core/smtp.js b/print/core/smtp.js index 0017739da6..36a76dbafc 100644 --- a/print/core/smtp.js +++ b/print/core/smtp.js @@ -28,7 +28,7 @@ module.exports = { for (let attachment of options.attachments) { const fileName = attachment.filename; const filePath = attachment.path; - // if (fileName.includes('.png')) return; + if (fileName.includes('.png')) return; if (fileName || filePath) attachments.push(filePath ? filePath : fileName);