diff --git a/front/core/components/datalist/index.js b/front/core/components/datalist/index.js
index d5feb18932..0964a14805 100644
--- a/front/core/components/datalist/index.js
+++ b/front/core/components/datalist/index.js
@@ -157,8 +157,6 @@ export default class Datalist extends Textfield {
this.destroyList();
} else
this.buildList();
-
- this.emit('select', {selection});
});
}
diff --git a/modules/order/back/methods/order/catalogFilter.js b/modules/order/back/methods/order/catalogFilter.js
index 3814aa12d1..114cd27864 100644
--- a/modules/order/back/methods/order/catalogFilter.js
+++ b/modules/order/back/methods/order/catalogFilter.js
@@ -162,6 +162,7 @@ module.exports = Self => {
`SELECT
it.tagFk,
it.itemFk,
+ it.value,
t.name
FROM tmp.ticketCalculateItem tci
JOIN vn.itemTag it ON it.itemFk = tci.itemFk
diff --git a/modules/order/front/catalog/index.html b/modules/order/front/catalog/index.html
index 5cc72e3c8f..37767e81bb 100644
--- a/modules/order/front/catalog/index.html
+++ b/modules/order/front/catalog/index.html
@@ -85,12 +85,15 @@
-
+ show-field="value"
+ value-field="value"
+ label="Search tag">
@@ -101,7 +104,7 @@
style="cursor: pointer;">
-
+
{
- // Add new tag filters
- item.tags.forEach(itemTag => {
- const alreadyAdded = newFilterList.findIndex(filter => {
- return filter.field == itemTag.tagFk;
- });
-
- if (alreadyAdded == -1) {
- newFilterList.push({
- name: itemTag.name,
- field: itemTag.tagFk,
- isTag: true
- });
- }
- });
- });
-
- // Add default filters - Replaces tags with same name
- this.defaultOrderFields.forEach(orderField => {
- const index = newFilterList.findIndex(newfield => {
- return newfield.name == orderField.name;
- });
-
- if (index > -1)
- newFilterList[index] = orderField;
- else
- newFilterList.push(orderField);
- });
-
- this.orderFields = newFilterList;
+ this.buildTagsFilter(value);
+ this.buildOrderFilter(value);
}
get categoryId() {
@@ -273,6 +244,45 @@ class Controller {
this.$state.go(this.$state.current.name, params);
}
+
+ // Builds the tags filter
+ buildTagsFilter(items) {
+ const tagValues = [];
+ items.forEach(item => {
+ item.tags.forEach(itemTag => {
+ const alreadyAdded = tagValues.findIndex(tag => {
+ return tag.value == itemTag.value;
+ });
+
+ if (alreadyAdded == -1)
+ tagValues.push(itemTag);
+ });
+ });
+ this.tagValues = tagValues;
+ }
+
+ // Builds the order filter
+ buildOrderFilter(items) {
+ const tags = [];
+ items.forEach(item => {
+ item.tags.forEach(itemTag => {
+ const alreadyAdded = tags.findIndex(tag => {
+ return tag.field == itemTag.tagFk;
+ });
+
+ if (alreadyAdded == -1) {
+ tags.push({
+ name: itemTag.name,
+ field: itemTag.tagFk,
+ isTag: true
+ });
+ }
+ });
+ });
+ let newFilterList = [].concat(this.defaultOrderFields);
+ newFilterList = newFilterList.concat(tags);
+ this.orderFields = newFilterList;
+ }
}
Controller.$inject = ['$http', '$scope', '$state', '$compile', '$transitions'];
diff --git a/modules/order/front/catalog/index.spec.js b/modules/order/front/catalog/index.spec.js
index dd9e132577..01da618009 100644
--- a/modules/order/front/catalog/index.spec.js
+++ b/modules/order/front/catalog/index.spec.js
@@ -37,16 +37,19 @@ describe('Order', () => {
describe('items() setter', () => {
it(`should return an object with order params`, () => {
- let expectedResult = [{field: 'showOrder, price', name: 'Color'}];
- let unexpectedResult = [{tagFk: 5, name: 'Color'}];
- controller.items = [{id: 1, name: 'My Item', tags: [
+ spyOn(controller, 'buildTagsFilter');
+ spyOn(controller, 'buildOrderFilter').and.callThrough();
+ const expectedResult = [{field: 'showOrder, price', name: 'Color and price'}];
+ const items = [{id: 1, name: 'My Item', tags: [
{tagFk: 4, name: 'Length'},
{tagFk: 5, name: 'Color'}
]}];
+ controller.items = items;
- expect(controller.orderFields.length).toEqual(5);
+ expect(controller.orderFields.length).toEqual(6);
expect(controller.orderFields).toEqual(jasmine.arrayContaining(expectedResult));
- expect(controller.orderFields).not.toEqual(jasmine.arrayContaining(unexpectedResult));
+ expect(controller.buildTagsFilter).toHaveBeenCalledWith(items);
+ expect(controller.buildOrderFilter).toHaveBeenCalledWith(items);
});
});
@@ -222,6 +225,48 @@ describe('Order', () => {
expect(controller.$.model.addFilter).toHaveBeenCalledWith(null, expectedOrder);
});
});
+
+ describe('buildTagsFilter()', () => {
+ it(`should create an array of non repeated tag values and then set the tagValues property`, () => {
+ const items = [
+ {
+ id: 1, name: 'My Item 1', tags: [
+ {tagFk: 4, name: 'Length', value: 1},
+ {tagFk: 5, name: 'Color', value: 'red'}
+ ]
+ },
+ {
+ id: 2, name: 'My Item 2', tags: [
+ {tagFk: 4, name: 'Length', value: 1},
+ {tagFk: 5, name: 'Color', value: 'blue'}
+ ]
+ }];
+ controller.buildTagsFilter(items);
+
+ expect(controller.tagValues.length).toEqual(3);
+ });
+ });
+
+ describe('buildOrderFilter()', () => {
+ it(`should create an array of non repeated tags plus default filters and then set the orderFields property`, () => {
+ const items = [
+ {
+ id: 1, name: 'My Item 1', tags: [
+ {tagFk: 4, name: 'Length'},
+ {tagFk: 5, name: 'Color'}
+ ]
+ },
+ {
+ id: 2, name: 'My Item 2', tags: [
+ {tagFk: 5, name: 'Color'},
+ {tagFk: 6, name: 'Relevancy'}
+ ]
+ }];
+ controller.buildOrderFilter(items);
+
+ expect(controller.orderFields.length).toEqual(7);
+ });
+ });
});
});
diff --git a/modules/order/front/locale/es.yml b/modules/order/front/locale/es.yml
index 0ada37bfd0..565d4f2518 100644
--- a/modules/order/front/locale/es.yml
+++ b/modules/order/front/locale/es.yml
@@ -16,6 +16,7 @@ Item id: Id de artÃculo
Order by: Ordenar por
Order: Orden
Price: Precio
+Color and price: Color y precio
Ascendant: Ascendente
Descendant: Descendente
Created from: Creado desde