From 197b3478ae9051ffc628a897bdf81da81aa7c537 Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Tue, 30 Jul 2024 18:22:23 +0700 Subject: [PATCH] fix(SPG_693) di hak akses pos pada bagian penjualan seharusnya ada checkbox pada kolom cancel dan ada hak akses reprint receipt --- .../modules/data/service/base-data.service.ts | 8 +++ .../domain/entities/base-core.entity.ts | 2 +- .../strings/constants/privilege.constants.ts | 7 ++ .../user-privilege-configuration.entity.ts | 18 ++--- ...ate-user-privilege-configuration.helper.ts | 66 +++++++++++++++++++ .../user-privilege/user-privilege.module.ts | 3 + 6 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/handlers/update-user-privilege-configuration.helper.ts diff --git a/src/core/modules/data/service/base-data.service.ts b/src/core/modules/data/service/base-data.service.ts index ac01ff1..f4eb4c3 100644 --- a/src/core/modules/data/service/base-data.service.ts +++ b/src/core/modules/data/service/base-data.service.ts @@ -62,6 +62,14 @@ export abstract class BaseDataService { await this.repository.delete(id); } + async deleteByIds( + queryRunner: QueryRunner, + entityTarget: EntityTarget, + ids: string[], + ): Promise { + await this.repository.delete(ids); + } + async deleteByOptions( queryRunner: QueryRunner, entityTarget: EntityTarget, diff --git a/src/core/modules/domain/entities/base-core.entity.ts b/src/core/modules/domain/entities/base-core.entity.ts index caf7b15..a2b2ce5 100644 --- a/src/core/modules/domain/entities/base-core.entity.ts +++ b/src/core/modules/domain/entities/base-core.entity.ts @@ -1,3 +1,3 @@ export interface BaseCoreEntity { - id: string; + id?: string; } diff --git a/src/core/strings/constants/privilege.constants.ts b/src/core/strings/constants/privilege.constants.ts index 842d240..36ff066 100644 --- a/src/core/strings/constants/privilege.constants.ts +++ b/src/core/strings/constants/privilege.constants.ts @@ -147,6 +147,7 @@ export const PrivilegePOSConstant = [ PrivilegeAction.CREATE, PrivilegeAction.DELETE, PrivilegeAction.EDIT, + PrivilegeAction.CANCEL, ], index: 14, }, @@ -174,4 +175,10 @@ export const PrivilegePOSConstant = [ actions: [PrivilegeAction.CREATE], index: 18, }, + { + menu: 'POS_DISCOUNT_CODE', + menu_label: 'Print Receipt', + actions: [PrivilegeAction.CREATE], + index: 18, + }, ]; diff --git a/src/modules/user-related/user-privilege/domain/entities/user-privilege-configuration.entity.ts b/src/modules/user-related/user-privilege/domain/entities/user-privilege-configuration.entity.ts index e0b6158..cb350de 100644 --- a/src/modules/user-related/user-privilege/domain/entities/user-privilege-configuration.entity.ts +++ b/src/modules/user-related/user-privilege/domain/entities/user-privilege-configuration.entity.ts @@ -5,13 +5,13 @@ export interface UserPrivilegeConfigurationEntity extends BaseCoreEntity { module_label: string; menu: string; menu_label: string; - sub_menu: string; - sub_menu_label: string; - view: boolean; - create: boolean; - edit: boolean; - delete: boolean; - cancel: boolean; - confirm: boolean; - index: number; + sub_menu?: string; + sub_menu_label?: string; + view?: boolean; + create?: boolean; + edit?: boolean; + delete?: boolean; + cancel?: boolean; + confirm?: boolean; + index?: number; } diff --git a/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/handlers/update-user-privilege-configuration.helper.ts b/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/handlers/update-user-privilege-configuration.helper.ts new file mode 100644 index 0000000..f3f8f62 --- /dev/null +++ b/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/handlers/update-user-privilege-configuration.helper.ts @@ -0,0 +1,66 @@ +import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { UserPrivilegeConfigUpdatedEvent } from '../../../entities/event/user-privilege-configuration-updated.event'; +import { UserPrivilegeConfigurationService } from 'src/modules/user-related/user-privilege/data/service/user-privilege-configuration.service'; +import { UserPrivilegeConfigurationHelper } from '../helpers/generate-user-privilege-configuration.helper'; +import { UserPrivilegeConfigurationModel } from 'src/modules/user-related/user-privilege/data/models/user-privilege-configuration.model'; + +@EventsHandler(UserPrivilegeConfigUpdatedEvent) +export class UserPrivilegeConfigUpdateHandler + implements IEventHandler +{ + constructor(private dataService: UserPrivilegeConfigurationService) {} + + async handle(event: UserPrivilegeConfigUpdatedEvent) { + const data = event.data.data; + console.log(data.user_privilege_id); + const configurations = await this.dataService.getManyByOptions({ + where: { + user_privilege_id: data.user_privilege_id, + }, + }); + const configs = UserPrivilegeConfigurationHelper.createConfigurations(); + + const createdConfig = configs + .filter( + (base) => + !configurations.some((data) => { + return base.menu_label == data.menu_label; + }), + ) + .map((item) => { + return { + ...item, + user_privilege_id: data.user_privilege_id, + }; + }); + + const deletedConfig = configurations + .filter( + (base) => + !configs.some((data) => { + return base.menu_label == data.menu_label; + }), + ) + ?.map((item) => item.id); + + const queryRunner = this.dataService + .getRepository() + .manager.connection.createQueryRunner(); + + if (createdConfig.length) { + await this.dataService.createBatch( + queryRunner, + UserPrivilegeConfigurationModel, + createdConfig, + ); + } + + if (deletedConfig.length) { + await this.dataService.deleteByIds( + queryRunner, + UserPrivilegeConfigurationModel, + deletedConfig, + ); + } + } +} diff --git a/src/modules/user-related/user-privilege/user-privilege.module.ts b/src/modules/user-related/user-privilege/user-privilege.module.ts index d8a52c5..00282cc 100644 --- a/src/modules/user-related/user-privilege/user-privilege.module.ts +++ b/src/modules/user-related/user-privilege/user-privilege.module.ts @@ -28,6 +28,7 @@ import { UserPrivilegeConfigurationDataOrchestrator } from './domain/usecases/us import { IndexUserPrivilegeConfigurationManager } from './domain/usecases/user-privilege-configuration/managers/index-user-privilege-configuration.manager'; import { UserPrivilegeModels } from './constants'; import { MenuUserPrivilegeConfigurationManager } from './domain/usecases/user-privilege-configuration/managers/menu-user-privilege-configuration.manager'; +import { UserPrivilegeConfigUpdateHandler } from './domain/usecases/user-privilege-configuration/handlers/update-user-privilege-configuration.helper'; @Module({ imports: [ @@ -41,6 +42,8 @@ import { MenuUserPrivilegeConfigurationManager } from './domain/usecases/user-pr UserPrivilegeConfigurationController, ], providers: [ + UserPrivilegeConfigUpdateHandler, + IndexUserPrivilegeManager, DetailUserPrivilegeManager, CreateUserPrivilegeManager,