diff options
Diffstat (limited to 'lib/vendor-pool/service.ts')
| -rw-r--r-- | lib/vendor-pool/service.ts | 187 |
1 files changed, 186 insertions, 1 deletions
diff --git a/lib/vendor-pool/service.ts b/lib/vendor-pool/service.ts index 1933c199..3d83e3aa 100644 --- a/lib/vendor-pool/service.ts +++ b/lib/vendor-pool/service.ts @@ -27,8 +27,10 @@ const _getVendorPools = async (input: GetVendorPoolSchema) => { whereConditions.push( or( ilike(vendorPool.constructionSector, searchTerm), + ilike(vendorPool.designCategoryCode, searchTerm), ilike(vendorPool.designCategory, searchTerm), ilike(vendorPool.vendorName, searchTerm), + ilike(vendorPool.materialGroupCode, searchTerm), ilike(vendorPool.materialGroupName, searchTerm), ilike(vendorPool.packageName, searchTerm), ilike(vendorPool.avlVendorName, searchTerm), @@ -37,7 +39,190 @@ const _getVendorPools = async (input: GetVendorPoolSchema) => { ); } - // 필터 조건 추가 + // Advanced filters 처리 (DataTableFilterList에서 생성된 필터들) + if (input.filters && input.filters.length > 0) { + const filterConditions: any[] = []; + + for (const filter of input.filters) { + let condition: any = null; + + switch (filter.id) { + case 'constructionSector': + if (filter.operator === 'eq') { + condition = eq(vendorPool.constructionSector, filter.value as string); + } else if (filter.operator === 'iLike') { + condition = ilike(vendorPool.constructionSector, `%${filter.value}%`); + } + break; + case 'htDivision': + if (filter.operator === 'eq') { + condition = eq(vendorPool.htDivision, filter.value as string); + } else if (filter.operator === 'iLike') { + condition = ilike(vendorPool.htDivision, `%${filter.value}%`); + } + break; + case 'designCategoryCode': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.designCategoryCode, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.designCategoryCode, filter.value as string); + } + break; + case 'designCategory': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.designCategory, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.designCategory, filter.value as string); + } + break; + case 'packageCode': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.packageCode, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.packageCode, filter.value as string); + } + break; + case 'packageName': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.packageName, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.packageName, filter.value as string); + } + break; + case 'materialGroupCode': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.materialGroupCode, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.materialGroupCode, filter.value as string); + } + break; + case 'materialGroupName': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.materialGroupName, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.materialGroupName, filter.value as string); + } + break; + case 'vendorCode': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.vendorCode, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.vendorCode, filter.value as string); + } + break; + case 'vendorName': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.vendorName, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.vendorName, filter.value as string); + } + break; + case 'taxId': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.taxId, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.taxId, filter.value as string); + } + break; + case 'faStatus': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.faStatus, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.faStatus, filter.value as string); + } + break; + case 'tier': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.tier, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.tier, filter.value as string); + } + break; + case 'headquarterLocation': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.headquarterLocation, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.headquarterLocation, filter.value as string); + } + break; + case 'manufacturingLocation': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.manufacturingLocation, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.manufacturingLocation, filter.value as string); + } + break; + case 'avlVendorName': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.avlVendorName, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.avlVendorName, filter.value as string); + } + break; + case 'registrant': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.registrant, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.registrant, filter.value as string); + } + break; + case 'lastModifier': + if (filter.operator === 'iLike') { + condition = ilike(vendorPool.lastModifier, `%${filter.value}%`); + } else if (filter.operator === 'eq') { + condition = eq(vendorPool.lastModifier, filter.value as string); + } + break; + case 'hasAvl': + if (filter.operator === 'eq') { + condition = eq(vendorPool.hasAvl, filter.value === 'true'); + } + break; + case 'isAgent': + if (filter.operator === 'eq') { + condition = eq(vendorPool.isAgent, filter.value === 'true'); + } + break; + case 'isBlacklist': + if (filter.operator === 'eq') { + condition = eq(vendorPool.isBlacklist, filter.value === 'true'); + } + break; + case 'isBcc': + if (filter.operator === 'eq') { + condition = eq(vendorPool.isBcc, filter.value === 'true'); + } + break; + case 'registrationDate': + case 'lastModifiedDate': + // 날짜 필터 처리 (단순화된 버전) + if (filter.operator === 'eq' && filter.value) { + const dateValue = new Date(filter.value as string); + if (filter.id === 'registrationDate') { + condition = eq(vendorPool.registrationDate, dateValue); + } else { + condition = eq(vendorPool.lastModifiedDate, dateValue); + } + } + break; + } + + if (condition) { + filterConditions.push(condition); + } + } + + // 필터 조건들을 AND 또는 OR로 결합 + if (filterConditions.length > 0) { + if (input.joinOperator === 'or') { + whereConditions.push(or(...filterConditions)); + } else { + whereConditions.push(and(...filterConditions)); + } + } + } + + // 기존 필터 조건 추가 (하위 호환성 유지) if (input.constructionSector) { whereConditions.push(eq(vendorPool.constructionSector, input.constructionSector)); } |
