From 21fcdccaff8407924b766580922d0e7f2ba26b64 Mon Sep 17 00:00:00 2001 From: Wanderley Santos Teixeira Date: Thu, 3 Mar 2022 12:18:21 -0300 Subject: [PATCH] fix(page-dynamic-table): ajusta o GET request com atributo `range` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Foi incluído o `$filter` para filtros complexos no GET Request quando o atributo `range` está com `true` Fixes #1211 --- .../po-page-dynamic-search.component.spec.ts | 79 ++++++++++++++++++- .../po-page-dynamic-search.component.ts | 23 +++++- 2 files changed, 100 insertions(+), 2 deletions(-) diff --git a/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts b/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts index 06957295c..639525423 100644 --- a/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts +++ b/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts @@ -155,11 +155,12 @@ describe('PoPageDynamicSearchComponent:', () => { expect(component.poAdvancedFilter.open).toHaveBeenCalled(); }); - it(`onAdvancedSearch: should call 'setDisclaimers', 'setFilters' and 'advancedSearch.emit'`, () => { + it(`onAdvancedSearch: should call 'setDisclaimers', 'setFilters', 'addComplexFilter' and 'advancedSearch.emit'`, () => { const filter = { property: 'value1' }; const optionsService = undefined; spyOn(component, 'setDisclaimers'); + spyOn(component, 'addComplexFilter').and.returnValue(filter); spyOn(component.advancedSearch, 'emit'); spyOn(component, 'setFilters'); @@ -167,6 +168,7 @@ describe('PoPageDynamicSearchComponent:', () => { expect(component['setDisclaimers']).toHaveBeenCalledWith(filter, optionsService); expect(component['setFilters']).toHaveBeenCalledBefore(component.advancedSearch.emit); + expect(component['addComplexFilter']).toHaveBeenCalledWith(filter); expect(component.advancedSearch.emit).toHaveBeenCalledWith(filter); }); @@ -339,6 +341,81 @@ describe('PoPageDynamicSearchComponent:', () => { expect(component['setDisclaimers'](filters)).toEqual(result); }); + it(`addComplexFilter: should return {}`, () => { + component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate' }]; + + const filters = {}; + + const result = {}; + + expect(component['addComplexFilter'](filters)).toEqual(result); + }); + + it(`addComplexFilter: should return filter without attribute 'range'`, () => { + component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate' }]; + + const filters = { name: 'Name1', genre: 'male', birthdate: '2020-01-15' }; + + const result = { name: 'Name1', genre: 'male', birthdate: '2020-01-15' }; + + expect(component['addComplexFilter'](filters)).toEqual(result); + }); + + it(`addComplexFilter: should return filter with attribute 'range'`, () => { + component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate', range: true }]; + + const filters = { name: 'Name1', genre: 'male', birthdate: { start: '2020-01-01', end: '2020-01-31' } }; + + const result = { name: 'Name1', genre: 'male', $filter: 'birthdate ge 2020-01-01 and birthdate le 2020-01-31' }; + + expect(component['addComplexFilter'](filters)).toEqual(result); + }); + + it(`addComplexFilter: should return filter with attribute 'range' and final date 'undefined'`, () => { + component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate', range: true }]; + + const filters = { name: 'Name1', genre: 'male', birthdate: { start: '2020-01-01', end: undefined } }; + + const result = { name: 'Name1', genre: 'male', birthdate: { start: '2020-01-01', end: undefined } }; + + expect(component['addComplexFilter'](filters)).toEqual(result); + }); + + it(`addComplexFilter: should return filter with attribute 'range' and initial date 'undefined'`, () => { + component.filters = [{ property: 'name' }, { property: 'genre' }, { property: 'birthdate', range: true }]; + + const filters = { name: 'Name1', genre: 'male', birthdate: { start: undefined, end: '2020-01-31' } }; + + const result = { name: 'Name1', genre: 'male', birthdate: { start: undefined, end: '2020-01-31' } }; + + expect(component['addComplexFilter'](filters)).toEqual(result); + }); + + it(`addComplexFilter: should return filter with two attribute 'range'`, () => { + component.filters = [ + { property: 'name' }, + { property: 'genre' }, + { property: 'birthdate', range: true }, + { property: 'deathdate', range: true } + ]; + + const filters = { + name: 'Name1', + genre: 'male', + birthdate: { start: '2020-01-01', end: '2020-01-31' }, + deathdate: { start: '2021-01-01', end: '2021-01-31' } + }; + + const result = { + name: 'Name1', + genre: 'male', + $filter: + 'birthdate ge 2020-01-01 and birthdate le 2020-01-31 and deathdate ge 2021-01-01 and deathdate le 2021-01-31' + }; + + expect(component['addComplexFilter'](filters)).toEqual(result); + }); + it('getFilterValueToDisclaimer: should return formated date if field type is PoDynamicFieldType.Date', () => { const field = { type: PoDynamicFieldType.Date, property: '1', label: 'date' }; const value = '2020-08-12'; diff --git a/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts b/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts index f9c71f879..f84d2db89 100644 --- a/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts +++ b/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts @@ -137,12 +137,15 @@ export class PoPageDynamicSearchComponent extends PoPageDynamicSearchBaseCompone } onAdvancedSearch(filteredItems) { - const { filter, optionsService } = filteredItems; + const { optionsService } = filteredItems; + let { filter } = filteredItems; this._disclaimerGroup.disclaimers = this.setDisclaimers(filter, optionsService); this.setFilters(filter); + filter = this.addComplexFilter(filter); + this.advancedSearch.emit(filter); } @@ -321,4 +324,22 @@ export class PoPageDynamicSearchComponent extends PoPageDynamicSearchBaseCompone return this.poPageCustomizationService.getCustomOptions(onLoad, originalOption, pageOptionSchema); } + + private addComplexFilter(filter: object): object { + let complexFilter; + + Object.keys(filter).forEach(property => { + if (filter[property].start && filter[property].end) { + complexFilter = !complexFilter ? '' : (complexFilter += ' and '); + complexFilter += `${property} ge ${filter[property].start} and ${property} le ${filter[property].end}`; + delete filter[property]; + } + }); + + if (complexFilter) { + filter = Object.assign(filter, { $filter: complexFilter }); + } + + return filter; + } }