summaryrefslogtreecommitdiff
path: root/lib/vendor-pool/service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendor-pool/service.ts')
-rw-r--r--lib/vendor-pool/service.ts187
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));
}