diff --git a/client/client/src/address-edit/address-edit.html b/client/client/src/address-edit/address-edit.html index 3a509591c..11ed0cccc 100644 --- a/client/client/src/address-edit/address-edit.html +++ b/client/client/src/address-edit/address-edit.html @@ -46,6 +46,47 @@ + + + Notes + + + + {{$parent.$parent.item.description}} + + + + + + + + + + + + diff --git a/client/client/src/address-edit/address-edit.js b/client/client/src/address-edit/address-edit.js index caad023e2..14db7035d 100644 --- a/client/client/src/address-edit/address-edit.js +++ b/client/client/src/address-edit/address-edit.js @@ -1,13 +1,76 @@ import ngModule from '../module'; export default class Controller { - constructor($state) { + constructor($state, $http) { this.address = { id: parseInt($state.params.addressId) }; + this.$http = $http; + this.notes = []; + } + + _setIconAdd() { + if (this.notes.length) { + this.notes.forEach(element => { + element.showAddIcon = false; + }); + this.notes[this.notes.length - 1].showAddIcon = true; + } + } + _setRemoveAdd() { + if (this.notes.length) { + this.notes.forEach(element => { + element.showRemoveIcon = true; + }); + } else { + this.notes = [this._createEmptyNote()]; + } + } + _createEmptyNote() { + return {id: this._createFakeId(), observationTypeFk: null, description: null, showRemoveIcon: true, showAddIcon: true}; + } + _createFakeId() { + let now = Date.now(); + let random = Math.ceil((Math.random() * 100000) + 1); + return `fakeId${now}${random}`; + } + addNote() { + this.notes.push(this._createEmptyNote()); + this._setIconAdd(); + this._setRemoveAdd(); + } + removeNote(id) { + let found = false; + for (let i = 0; i < this.notes.length; i++) { + if (this.notes[i].id === id) { + this.notes.splice(i, 1); + found = true; + break; + } + } + + if (found) { + this._setIconAdd(); + this._setRemoveAdd(); + } + } + $onInit() { + let filter = { + where: { + addressFk: this.address.id + }, + include: [ + {relation: 'observationType'} + ] + }; + this.$http.get(`/client/api/AddressObservations?filter=${JSON.stringify(filter)}`).then(res => { + this.notes = (res.data && res.data.length) ? res.data : [this._createEmptyNote()]; + this._setIconAdd(); + this._setRemoveAdd(); + }); } } -Controller.$inject = ['$state']; +Controller.$inject = ['$state', '$http']; ngModule.component('vnAddressEdit', { template: require('./address-edit.html'), diff --git a/client/client/src/addresses/addresses.html b/client/client/src/addresses/addresses.html index a8b63f2b3..f98012185 100644 --- a/client/client/src/addresses/addresses.html +++ b/client/client/src/addresses/addresses.html @@ -5,21 +5,27 @@ Addresses - + + ng-class="{'bg-dark-item': address.isDefaultAddress,'bg-opacity-item': !address.isEnabled && !address.isDefaultAddress}"> - star - star_border + star + star_border - -
{{::i.nickname}}
-
{{::i.street}}
-
{{::i.city}}, {{::i.province}}
-
{{::i.phone}}, {{::i.mobile}}
+ +
{{::address.nickname}}
+
{{::address.street}}
+
{{::address.city}}, {{::address.province}}
+
{{::address.phone}}, {{::address.mobile}}
- + + + {{::observation.observationType.description}}: + {{::observation.description}} + + +
diff --git a/client/item/src/card/item-card.js b/client/item/src/card/item-card.js index 063910369..35e8323b4 100644 --- a/client/item/src/card/item-card.js +++ b/client/item/src/card/item-card.js @@ -14,7 +14,9 @@ class ItemCard { {relation: "origin"}, {relation: "ink"}, {relation: "producer"}, - {relation: "intrastat"} + {relation: "intrastat"}, + {relation: "expence"}, + {relation: "taxClass"} ] }; this.$http.get(`/item/api/Items/${this.$state.params.id}?filter=${JSON.stringify(filter)}`).then( diff --git a/client/item/src/data/item-data.html b/client/item/src/data/item-data.html index 35fbf0b1a..16deded6c 100644 --- a/client/item/src/data/item-data.html +++ b/client/item/src/data/item-data.html @@ -23,6 +23,7 @@ show-field="name" value-field="id" field="$ctrl.item.typeFk" + initial-data="$ctrl.item.itemType" >
@@ -35,6 +36,7 @@ field="$ctrl.item.intrastatFk" order="description ASC" filter-search="{where: {description: {regexp: 'search'}} }" + initial-data="$ctrl.item.intrastat" > {{$parent.$parent.item.description}} @@ -49,13 +51,28 @@ show-field="name" value-field="id" field="$ctrl.item.originFk" + initial-data="$ctrl.item.origin" >
+ + {{$parent.$parent.item.description}} + + diff --git a/client/salix/src/styles/font-style.scss b/client/salix/src/styles/font-style.scss index db0198cde..bb26140ee 100644 --- a/client/salix/src/styles/font-style.scss +++ b/client/salix/src/styles/font-style.scss @@ -9,4 +9,16 @@ body { } html [uppercase], .uppercase { text-transform: uppercase; -} \ No newline at end of file +} + +html [green], .green{color: $color-green} +html [orange], .orange{color: $color-orange} +html [white], .white{color: $color-white} +html [dark], .dark{color: $color-dark} +html [dark-grey], .dark-grey{color: $color-dark-grey} +html [light-grey], .light-grey{color: $color-light-grey} +html [medium-grey], .medium-grey{color: $color-medium-grey} +html [medium-green], .medium-green{color: $color-medium-green} +html [medium-orange], .medium-orange{color: $color-medium-orange} +html [light-green], .light-green{color: $color-light-green} +html [light-orange], .light-orange{color: $color-light-orange} \ No newline at end of file diff --git a/karma.conf.js b/karma.conf.js index 75aa96093..216d51392 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -8,7 +8,7 @@ webpackConfig.plugins = []; // Generated on Tue Aug 22 2017 13:37:43 GMT+0200 (CEST) module.exports = function(config) { - let myConfig = { + let baseConfig = { // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', @@ -82,8 +82,17 @@ module.exports = function(config) { let browserConfig; - // TODO: Detect the browser - if (true) { + if (process.env.FIREFOX_BIN) { + browserConfig = { + browsers: ['FirefoxHeadless'], + customLaunchers: { + FirefoxHeadless: { + base: 'Firefox', + flags: ['--headless'] + } + } + }; + } else { browserConfig = { browsers: ['ChromeNoSandboxHeadless'], customLaunchers: { @@ -100,19 +109,8 @@ module.exports = function(config) { } } }; - } else { - browserConfig = { - browsers: ['FirefoxHeadless'], - customLaunchers: { - FirefoxHeadless: { - base: 'Firefox', - flags: [ - '--headless' - ] - } - } - }; } - config.set(Object.assign(myConfig, browserConfig)); + Object.assign(baseConfig, browserConfig); + config.set(baseConfig); }; diff --git a/services/auth/server/boot/specs/routes.spec.js b/services/auth/server/boot/specs/routes.spec.js index 7dd5a49d4..2ea72a1e9 100644 --- a/services/auth/server/boot/specs/routes.spec.js +++ b/services/auth/server/boot/specs/routes.spec.js @@ -1,7 +1,22 @@ import app from '../../../server/server'; import routes from '../routes'; +import restoreFixtures from '../../../../../services/db/testing_fixtures'; describe('Auth routes', () => { + let fixturesToApply = {tables: ['`salix`.`user`'], inserts: [ + `INSERT INTO salix.user(id,username,password,email) + VALUES + (10, 'JessicaJones', 'ac754a330530832ba1bf7687f577da91', 'JessicaJones@verdnatura.es');` + ]}; + + beforeEach(done => { + restoreFixtures(fixturesToApply, done); + }); + + afterAll(done => { + restoreFixtures(fixturesToApply, done); + }); + let User = app.models.User; let loginFunction; let logoutFunction; @@ -29,6 +44,20 @@ describe('Auth routes', () => { loginFunction(req, res); }); + describe('when the user doesnt exist but the client does and the password is correct', () => { + it('should create the user login and return the token', done => { + spyOn(User, 'upsertWithWhere').and.callThrough(); + req.body.user = 'PetterParker'; + req.body.password = 'nightmare'; + res.json = response => { + expect(User.upsertWithWhere).toHaveBeenCalledWith(jasmine.any(Object), jasmine.any(Object), jasmine.any(Function)); + expect(response.token).toBeDefined(); + done(); + }; + loginFunction(req, res); + }); + }); + it('should define the url to continue upon login', done => { req.body.user = 'JessicaJones'; req.body.password = 'nightmare'; diff --git a/services/client/common/methods/client/addresses.js b/services/client/common/methods/client/addresses.js index a4c09ac7e..5000d04d0 100644 --- a/services/client/common/methods/client/addresses.js +++ b/services/client/common/methods/client/addresses.js @@ -38,7 +38,8 @@ module.exports = function(Client) { }, skip: (params.page - 1) * params.size, limit: params.size, - order: ['isDefaultAddress DESC', 'isEnabled DESC'] + order: ['isDefaultAddress DESC', 'isEnabled DESC'], + include: {observations: 'observationType'} }; let total = null; diff --git a/services/client/common/models/address-observation.json b/services/client/common/models/address-observation.json new file mode 100644 index 000000000..53b6155ec --- /dev/null +++ b/services/client/common/models/address-observation.json @@ -0,0 +1,34 @@ +{ + "name": "AddressObservation", + "base": "VnModel", + "options": { + "mysql": { + "table": "addressObservation", + "database": "vn" + } + }, + "properties": { + "id": { + "type": "Number", + "id": true, + "description": "Identifier" + }, + "description": { + "type": "string", + "required": true + } + }, + "relations": { + "address": { + "type": "belongsTo", + "model": "Address", + "foreignKey": "addressFk" + }, + "observationType": { + "type": "belongsTo", + "model": "ObservationType", + "foreignKey": "observationTypeFk" + } + } + } + \ No newline at end of file diff --git a/services/client/common/models/observation-type.json b/services/client/common/models/observation-type.json new file mode 100644 index 000000000..b1a45e883 --- /dev/null +++ b/services/client/common/models/observation-type.json @@ -0,0 +1,22 @@ +{ + "name": "ObservationType", + "base": "VnModel", + "options": { + "mysql": { + "table": "observationType", + "database": "vn" + } + }, + "properties": { + "id": { + "type": "Number", + "id": true, + "description": "Identifier" + }, + "description": { + "type": "string", + "required": true + } + } + } + \ No newline at end of file diff --git a/services/client/server/model-config.json b/services/client/server/model-config.json index fa5453206..562e7e40f 100644 --- a/services/client/server/model-config.json +++ b/services/client/server/model-config.json @@ -1,4 +1,7 @@ { + "AddressObservation": { + "dataSource": "vn" + }, "AgencyMode": { "dataSource": "vn" }, @@ -22,5 +25,8 @@ }, "MandateType": { "dataSource": "vn" + }, + "ObservationType": { + "dataSource": "vn" } } diff --git a/services/item/common/models/item.json b/services/item/common/models/item.json index 9cf14eb77..effa46f7b 100644 --- a/services/item/common/models/item.json +++ b/services/item/common/models/item.json @@ -74,6 +74,11 @@ "type": "belongsTo", "model": "Expence", "foreignKey": "expenceFk" + }, + "taxClass": { + "type": "belongsTo", + "model": "TaxClass", + "foreignKey": "taxClassFk" } } } \ No newline at end of file diff --git a/services/loopback/common/models/address.json b/services/loopback/common/models/address.json index 0e7b2a9d6..14fa15593 100644 --- a/services/loopback/common/models/address.json +++ b/services/loopback/common/models/address.json @@ -66,6 +66,11 @@ "type": "belongsTo", "model": "AgencyMode", "foreignKey": "agencyFk" + }, + "observations": { + "type": "hasMany", + "model": "AddressObservation", + "foreignKey": "addressFk" } } }