diff --git a/src/core/guards/domain/roles.guard.ts b/src/core/guards/domain/roles.guard.ts index ab353fb..f52fa79 100644 --- a/src/core/guards/domain/roles.guard.ts +++ b/src/core/guards/domain/roles.guard.ts @@ -25,7 +25,7 @@ export class RolesGuard extends JWTGuard { if (isNotAllow) { throw new ForbiddenException({ statusCode: 10003, - message: `Forbidden Access, you don't have access to this module!`, + message: `Akses Terlarang, anda tidak punya akses ke module ini!`, error: 'ACCESS_FORBIDDEN', }); } diff --git a/src/core/guards/domain/services/privilege.service.ts b/src/core/guards/domain/services/privilege.service.ts index 6cb2917..4d891d7 100644 --- a/src/core/guards/domain/services/privilege.service.ts +++ b/src/core/guards/domain/services/privilege.service.ts @@ -52,7 +52,7 @@ export class PrivilegeService { if (!moduleKey) { throw new ForbiddenException({ statusCode: 10005, - message: `Forbidden Access, access Module is Require!`, + message: `Akses Terlarang, anda tidak punya akses ke module ini!`, error: 'MODULE_KEY_NOT_FOUND', }); } diff --git a/src/core/helpers/query/check-duplicate.helpers.ts b/src/core/helpers/query/check-duplicate.helpers.ts index 2faf617..cdc1207 100644 --- a/src/core/helpers/query/check-duplicate.helpers.ts +++ b/src/core/helpers/query/check-duplicate.helpers.ts @@ -43,9 +43,9 @@ export class CheckDuplicateHelper { if (data_exists > 0) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Entity with ${columnCheck.column} : ${ + message: `Gagal! Data dengan ${columnCheck.column} : ${ this.entity[columnCheck.column] - } already exist`, + } telah ada`, error: 'Unprocessable Entity', }); } diff --git a/src/core/modules/domain/usecase/managers/base-batch-delete.manager.ts b/src/core/modules/domain/usecase/managers/base-batch-delete.manager.ts index 292c45d..acf3dc3 100644 --- a/src/core/modules/domain/usecase/managers/base-batch-delete.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-batch-delete.manager.ts @@ -38,7 +38,7 @@ export abstract class BaseBatchDeleteManager extends BaseManager { if (!entity) { throw new NotFoundException({ statusCode: HttpStatus.NOT_FOUND, - message: `Failed! Entity with id ${id} not found`, + message: `Gagal! data dengan id ${id} tidak ditemukan`, error: 'Entity Not Found', }); } diff --git a/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts b/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts index 1d3909a..37b5a5e 100644 --- a/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts @@ -44,7 +44,7 @@ export abstract class BaseBatchUpdateStatusManager extends BaseManager { if (!entity) { throw new NotFoundException({ statusCode: HttpStatus.NOT_FOUND, - message: `Failed! Entity with id ${id} not found`, + message: `Gagal! data dengan id ${id} tidak ditemukan`, error: 'Entity Not Found', }); } diff --git a/src/core/modules/domain/usecase/managers/base-change-position.manager.ts b/src/core/modules/domain/usecase/managers/base-change-position.manager.ts index 5849753..2b911bc 100644 --- a/src/core/modules/domain/usecase/managers/base-change-position.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-change-position.manager.ts @@ -29,7 +29,7 @@ export abstract class BaseChangePosition extends BaseManager { if (!this.data?.end || this.data.start == this.data?.end) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: 'Please drag to another position', + message: 'Gagal! tolong pindahkan ke posisi lain', error: 'Unprocessable Entity', }); } @@ -43,7 +43,7 @@ export abstract class BaseChangePosition extends BaseManager { if (!this.startData) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Entity with id : ${this.data.start} not found`, + message: `Gagal! data dengan id : ${this.data.start} tidak ditemukan`, error: 'Unprocessable Entity', }); } @@ -57,7 +57,7 @@ export abstract class BaseChangePosition extends BaseManager { if (!this.endData) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Entity with id : ${this.data.end} not found`, + message: `Gagal! data dengan id : ${this.data.end} tidak ditemukan`, error: 'Unprocessable Entity', }); } diff --git a/src/core/modules/domain/usecase/managers/base-delete.manager.ts b/src/core/modules/domain/usecase/managers/base-delete.manager.ts index 3f6e484..62719d7 100644 --- a/src/core/modules/domain/usecase/managers/base-delete.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-delete.manager.ts @@ -23,7 +23,7 @@ export abstract class BaseDeleteManager extends BaseManager { if (!this.data) throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Data with id ${this.dataId} not found`, + message: `Gagal! Data denga id ${this.dataId} tidak ditemukan`, error: 'Unprocessable Entity', }); diff --git a/src/core/modules/domain/usecase/managers/base-update.manager.ts b/src/core/modules/domain/usecase/managers/base-update.manager.ts index b681cc2..c3d27a1 100644 --- a/src/core/modules/domain/usecase/managers/base-update.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-update.manager.ts @@ -27,7 +27,7 @@ export abstract class BaseUpdateManager extends BaseManager { if (!this.oldData) { throw new NotFoundException({ statusCode: HttpStatus.NOT_FOUND, - message: `Failed! Entity with id ${this.dataId} not found`, + message: `Gagal! Data denga id ${this.dataId} tidak ditemukan`, error: 'Entity Not Found', }); } diff --git a/src/core/strings/constants/privilege.constants.ts b/src/core/strings/constants/privilege.constants.ts index 36ff066..ef2b7fb 100644 --- a/src/core/strings/constants/privilege.constants.ts +++ b/src/core/strings/constants/privilege.constants.ts @@ -179,6 +179,6 @@ export const PrivilegePOSConstant = [ menu: 'POS_DISCOUNT_CODE', menu_label: 'Print Receipt', actions: [PrivilegeAction.CREATE], - index: 18, + index: 19, }, ]; diff --git a/src/modules/configuration/auth/domain/managers/login.manager.ts b/src/modules/configuration/auth/domain/managers/login.manager.ts index ea58a86..d6ab1b3 100644 --- a/src/modules/configuration/auth/domain/managers/login.manager.ts +++ b/src/modules/configuration/auth/domain/managers/login.manager.ts @@ -133,7 +133,7 @@ export class LoginManager extends BaseCustomManager { throwError() { throw new UnauthorizedException({ statusCode: HttpStatus.UNAUTHORIZED, - message: `Failed! You have entered an invalid username or password`, + message: `Gagal! username atau password tidak sesuai`, error: 'Unauthorized', }); } diff --git a/src/modules/configuration/couch/domain/managers/user.handler.ts b/src/modules/configuration/couch/domain/managers/user.handler.ts index 47389d1..08ea3f3 100644 --- a/src/modules/configuration/couch/domain/managers/user.handler.ts +++ b/src/modules/configuration/couch/domain/managers/user.handler.ts @@ -45,14 +45,16 @@ export class UserUpdatedHandler ], }) .then((item) => { - const user_privilege_configurations = item[ - 'user_privilege' - ]?.user_privilege_configurations?.filter( - (config) => config.module == 'POS', - ); - Object.assign(item['user_privilege'], { - user_privilege_configurations: user_privilege_configurations, - }); + if (item.role != 'superadmin') { + const user_privilege_configurations = item[ + 'user_privilege' + ]?.user_privilege_configurations?.filter( + (config) => config.module == 'POS', + ); + Object.assign(item['user_privilege'], { + user_privilege_configurations: user_privilege_configurations, + }); + } return item; }); @@ -103,7 +105,7 @@ export class UserPrivilegeUpdateHandler const users = await this.userService .getManyByOptions({ where: { - user_privilege_id: data.user_privilege_id, + user_privilege_id: data.user_privilege_id ?? data.id, status: STATUS.ACTIVE, }, relations: [ @@ -113,7 +115,6 @@ export class UserPrivilegeUpdateHandler }) .then((items) => { return items?.map((item) => { - console.log(item, 'dsa'); const user_privilege_configurations = item[ 'user_privilege' ]?.user_privilege_configurations?.filter( diff --git a/src/modules/configuration/mail/domain/helpers/send-email.helper.ts b/src/modules/configuration/mail/domain/helpers/send-email.helper.ts index 87dd1ee..c242887 100644 --- a/src/modules/configuration/mail/domain/helpers/send-email.helper.ts +++ b/src/modules/configuration/mail/domain/helpers/send-email.helper.ts @@ -16,35 +16,39 @@ export async function sendEmail(receivers, subject) { let templateName = 'payment-confirmation-bank'; for (const receiver of receivers) { - if (receiver.payment_type == TransactionPaymentType.MIDTRANS) - templateName = 'payment-confirmation-midtrans'; + try { + if (receiver.payment_type == TransactionPaymentType.MIDTRANS) + templateName = 'payment-confirmation-midtrans'; - let templatePath = path.resolve( - __dirname, - `../email-template/${templateName}.html`, - ); - templatePath = templatePath.replace(/dist/g, 'src'); - const templateSource = fs.readFileSync(templatePath, 'utf8'); + let templatePath = path.resolve( + __dirname, + `../email-template/${ templateName }.html`, + ); + templatePath = templatePath.replace(/dist/g, 'src'); + const templateSource = fs.readFileSync(templatePath, 'utf8'); - const template = handlebars.compile(templateSource); - const htmlToSend = template(receiver); + const template = handlebars.compile(templateSource); + const htmlToSend = template(receiver); - const emailContext = { - from: 'no-reply@eigen.co.id', - to: receiver.email, - subject: subject, - html: htmlToSend, - attachDataUrls: true, - }; + const emailContext = { + from: 'no-reply@eigen.co.id', + to: receiver.email, + subject: subject, + html: htmlToSend, + attachDataUrls: true, + }; - await new Promise((f) => setTimeout(f, 2000)); + await new Promise((f) => setTimeout(f, 2000)); - smtpTransport.sendMail(emailContext, function (err, data) { - if (err) { - console.log(`Error occurs on send to ${receiver.email}`); - } else { - console.log(`Email sent to ${receiver.email}`); - } - }); + smtpTransport.sendMail(emailContext, function (err, data) { + if (err) { + console.log(err, `Error occurs on send to ${ receiver.email }`); + } else { + console.log(`Email sent to ${ receiver.email }`); + } + }); + } catch (error) { + console.log(error, `Error occurs on send to ${ receiver.email }`) + } } } diff --git a/src/modules/item-related/item-category/domain/usecases/managers/batch-delete-item-category.manager.ts b/src/modules/item-related/item-category/domain/usecases/managers/batch-delete-item-category.manager.ts index 5e0d7fc..ef68712 100644 --- a/src/modules/item-related/item-category/domain/usecases/managers/batch-delete-item-category.manager.ts +++ b/src/modules/item-related/item-category/domain/usecases/managers/batch-delete-item-category.manager.ts @@ -24,7 +24,13 @@ export class BatchDeleteItemCategoryManager extends BaseBatchDeleteManager { { relation: 'tenant', singleQuery: ['status', '!=', STATUS.ACTIVE], - message: `Failed! Tenant of item must be active first`, + message: `Gagal! Belum ada item yang aktif`, }, ]; } diff --git a/src/modules/item-related/item/domain/usecases/managers/batch-active-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/batch-active-item.manager.ts index 33e08e0..3b20b1a 100644 --- a/src/modules/item-related/item/domain/usecases/managers/batch-active-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/batch-active-item.manager.ts @@ -33,7 +33,7 @@ export class BatchActiveItemManager extends BaseBatchUpdateStatusManager 0) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! there is another season period in same range date`, + message: `Gagal! terdapat data periode dengan rentang tanggal yang sama`, error: 'Unprocessable Entity', }); } diff --git a/src/modules/season-related/season-period/domain/usecases/managers/index-season-period.manager.ts b/src/modules/season-related/season-period/domain/usecases/managers/index-season-period.manager.ts index 62dec43..3144f64 100644 --- a/src/modules/season-related/season-period/domain/usecases/managers/index-season-period.manager.ts +++ b/src/modules/season-related/season-period/domain/usecases/managers/index-season-period.manager.ts @@ -74,6 +74,12 @@ export class IndexSeasonPeriodManager extends BaseIndexManager { + return Array.isArray(body.value) ? body.value : [body.value]; + }) + season_type_ids: string[]; } diff --git a/src/modules/transaction/reconciliation/domain/usecases/managers/batch-cancel-reconciliation.manager.ts b/src/modules/transaction/reconciliation/domain/usecases/managers/batch-cancel-reconciliation.manager.ts index abd89f6..d96942e 100644 --- a/src/modules/transaction/reconciliation/domain/usecases/managers/batch-cancel-reconciliation.manager.ts +++ b/src/modules/transaction/reconciliation/domain/usecases/managers/batch-cancel-reconciliation.manager.ts @@ -26,7 +26,7 @@ export class BatchCancelReconciliationManager extends BaseBatchUpdateStatusManag if ([STATUS.SETTLED, STATUS.WAITING].includes(transaction.status)) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! cant cancel transaction not settled`, + message: `Gagal! tidak bisa batalkan, karena status transaksi tidak settled`, error: 'Unprocessable Entity', }); } @@ -43,7 +43,7 @@ export class BatchCancelReconciliationManager extends BaseBatchUpdateStatusManag if (data.is_recap_transaction) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! cant cancel recap data`, + message: `Gagagl! tidak dapat batalkan data rekap`, error: 'Unprocessable Entity', }); } diff --git a/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts b/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts index b3464b9..e187161 100644 --- a/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts +++ b/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts @@ -30,13 +30,13 @@ export class CancelReconciliationManager extends BaseUpdateStatusManager { private recapTransactions = {}; - private startOfDay = moment().startOf('day').unix(); - private endOfDay = moment().endOf('day').unix(); + private startOfDay = moment().startOf('day').valueOf(); + private endOfDay = moment().endOf('day').valueOf(); get entityTarget(): any { return TransactionModel; } getResult() { - return; + return 'Berhasil recap data transaksi'; } get eventTopics(): EventTopics[] { @@ -36,22 +36,26 @@ export class RecapReconciliationManager extends BaseCustomManager + parseFloat(recap.payment_total), + ); if (exist) { Object.assign(exist, { - payment_total: _.sumBy(this.recapTransactions[recap], (recap) => - parseFloat(recap.payment_total), - ), - payment_total_net_profit: _.sumBy( - this.recapTransactions[recap], - (recap) => parseFloat(recap.payment_total), - ), + payment_total: Number(exist.payment_total) + total, + payment_total_net_profit: + Number(exist.payment_total_net_profit) + total, editor_id: this.user.id, editor_name: this.user.name, updated_at: new Date().getTime(), @@ -98,17 +99,13 @@ export class RecapReconciliationManager extends BaseCustomManager - parseFloat(recap.payment_total), - ), - payment_total_net_profit: _.sumBy( - this.recapTransactions[recap], - (recap) => parseFloat(recap.payment_total), - ), + payment_total: total, + payment_total_net_profit: total, reconciliation_status: STATUS.PENDING, status: STATUS.SETTLED, type: TransactionType.COUNTER, - booking_date: first_transaction.booking_date, + booking_date: new Date(), + payment_date: new Date(), creator_counter_no: first_transaction.creator_counter_no, payment_type: first_transaction.payment_type, payment_type_method_id: first_transaction.payment_type_method_id, diff --git a/src/modules/transaction/refund/domain/usecases/managers/batch-confirm-refund.manager.ts b/src/modules/transaction/refund/domain/usecases/managers/batch-confirm-refund.manager.ts index 3657a0f..99f1cf5 100644 --- a/src/modules/transaction/refund/domain/usecases/managers/batch-confirm-refund.manager.ts +++ b/src/modules/transaction/refund/domain/usecases/managers/batch-confirm-refund.manager.ts @@ -25,13 +25,13 @@ export class BatchConfirmRefundManager extends BaseBatchUpdateStatusManager if (![STATUS.DRAFT, STATUS.PENDING].includes(this.oldData.status)) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! only data with status ${STATUS.DRAFT} and ${STATUS.PENDING} can be confirmed`, + message: `Gagal! hanya data dengan status ${STATUS.DRAFT} dan ${STATUS.PENDING} dapat di${this.dataStatus}`, error: 'Unprocessable Entity', }); } @@ -46,7 +46,7 @@ export class ConfirmRefundManager extends BaseUpdateStatusManager ) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! only transaction with status ${STATUS.SETTLED} can be refund`, + message: `Gagal! hanya pemesanan dengan status ${STATUS.SETTLED} dapat di${this.dataStatus}`, error: 'Unprocessable Entity', }); } diff --git a/src/modules/transaction/refund/domain/usecases/managers/create-refund.manager.ts b/src/modules/transaction/refund/domain/usecases/managers/create-refund.manager.ts index 8e65106..c78ecd7 100644 --- a/src/modules/transaction/refund/domain/usecases/managers/create-refund.manager.ts +++ b/src/modules/transaction/refund/domain/usecases/managers/create-refund.manager.ts @@ -38,7 +38,7 @@ export class CreateRefundManager extends BaseCreateManager { if (exist) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! refund transaction with invoice ${this.data.transaction.invoice_code} already exist`, + message: `Gagal! pengembalian pemesanan dengan nomor invoice ${this.data.transaction.invoice_code} telah dibuat`, error: 'Unprocessable Entity', }); } @@ -53,7 +53,7 @@ export class CreateRefundManager extends BaseCreateManager { if (!transaction) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! only transaction with status ${STATUS.SETTLED} can be refund`, + message: `Gagal! hanya pemesanan dengan status ${STATUS.SETTLED} dapat dikembalikan`, error: 'Unprocessable Entity', }); } diff --git a/src/modules/transaction/refund/domain/usecases/managers/update-refund.manager.ts b/src/modules/transaction/refund/domain/usecases/managers/update-refund.manager.ts index 86e8602..799808d 100644 --- a/src/modules/transaction/refund/domain/usecases/managers/update-refund.manager.ts +++ b/src/modules/transaction/refund/domain/usecases/managers/update-refund.manager.ts @@ -27,7 +27,7 @@ export class UpdateRefundManager extends BaseUpdateManager { if (!transaction) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! only transaction with status ${STATUS.SETTLED} can be refund`, + message: `Gagal! hanya pemesanan dengan status ${STATUS.SETTLED} yang dapat dikembalikan`, error: 'Unprocessable Entity', }); } diff --git a/src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper.ts b/src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper.ts index b699e1c..e27a9b7 100644 --- a/src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper.ts +++ b/src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper.ts @@ -117,7 +117,7 @@ function returnError(throwError, e, taxes) { if (throwError) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! Formula error`, + message: `Gagal! Formula error`, error: 'Unprocessable Entity', }); } else { diff --git a/src/modules/transaction/tax/domain/usecases/managers/helpers/validation.helper.ts b/src/modules/transaction/tax/domain/usecases/managers/helpers/validation.helper.ts index 788cafb..ab3f411 100644 --- a/src/modules/transaction/tax/domain/usecases/managers/helpers/validation.helper.ts +++ b/src/modules/transaction/tax/domain/usecases/managers/helpers/validation.helper.ts @@ -9,7 +9,7 @@ export async function validateUsedInFormula(formulaDataService, name) { if (allWords.find((item) => item.toLowerCase() == name)) throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! tax ${name} already used in ${formula.type} formula`, + message: `Gagal! pajak dengan nama ${name} telah dogunakan pada formula ${formula.type}`, error: 'Unprocessable Entity', }); }); diff --git a/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-data-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-data-transaction.manager.ts index 0371b7e..0d9ea28 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-data-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-data-transaction.manager.ts @@ -40,7 +40,7 @@ export class BatchConfirmDataTransactionManager extends BaseBatchUpdateStatusMan ) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Gagal! hanya pemesanan dengan status ${STATUS.PENDING}, ${STATUS.REJECTED}, ${STATUS.EXPIRED} dapat dikonfirmasi`, + message: `Gagal! hanya pemesanan dengan status ${STATUS.PENDING}, ${STATUS.REJECTED}, ${STATUS.EXPIRED} dapat di${this.dataStatus}`, error: 'Unprocessable Entity', }); } diff --git a/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-transaction.manager.ts index dff1766..464cb5c 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-transaction.manager.ts @@ -24,7 +24,7 @@ export class BatchConfirmTransactionManager extends BaseBatchUpdateStatusManager if (data.status != STATUS.DRAFT) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! only data booking with status ${STATUS.ACTIVE} can be confirm`, + message: `Gagal! hanya data booking dengan status ${STATUS.DRAFT} yang dapat di${this.dataStatus}`, error: 'Unprocessable Entity', }); } @@ -42,7 +42,7 @@ export class BatchConfirmTransactionManager extends BaseBatchUpdateStatusManager } catch (error) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! this transaction already created, please check your email to continue payment`, + message: `Gagal! transaksi telah terbuat, silahkan periksa email untuk melanjutkan pembayaran`, error: 'Unprocessable Entity', }); } diff --git a/src/modules/transaction/transaction/domain/usecases/managers/cancel-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/cancel-transaction.manager.ts index 2e939e3..4e5de9d 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/cancel-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/cancel-transaction.manager.ts @@ -23,7 +23,7 @@ export class CancelTransactionManager extends BaseUpdateStatusManager statuses: [STATUS.ACTIVE], }); }, - message: 'Failed! There is active item', + message: 'Gagal! terdapat item yang aktif', }, ]; } diff --git a/src/modules/user-related/tenant/domain/usecases/managers/batch-inactive-tenant.manager.ts b/src/modules/user-related/tenant/domain/usecases/managers/batch-inactive-tenant.manager.ts index a12cbc8..befa0f0 100644 --- a/src/modules/user-related/tenant/domain/usecases/managers/batch-inactive-tenant.manager.ts +++ b/src/modules/user-related/tenant/domain/usecases/managers/batch-inactive-tenant.manager.ts @@ -22,7 +22,7 @@ export class BatchInactiveTenantManager extends BaseBatchUpdateStatusManager { statuses: [STATUS.ACTIVE], }); }, - message: 'Failed! There is active item', + message: 'Gagal! terdapat item yang aktif', }, ]; } diff --git a/src/modules/user-related/tenant/domain/usecases/managers/inactive-tenant.manager.ts b/src/modules/user-related/tenant/domain/usecases/managers/inactive-tenant.manager.ts index 1f656da..3df362e 100644 --- a/src/modules/user-related/tenant/domain/usecases/managers/inactive-tenant.manager.ts +++ b/src/modules/user-related/tenant/domain/usecases/managers/inactive-tenant.manager.ts @@ -21,7 +21,7 @@ export class InactiveTenantManager extends BaseUpdateStatusManager { statuses: [STATUS.ACTIVE], }); }, - message: 'Failed! There is active item', + message: 'Gagal! terdapat item yang aktif', }, ]; } 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 index f3f8f62..509b891 100644 --- 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 @@ -1,66 +1,108 @@ -import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { EventBus, 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 { UserPrivilegeDataService } from 'src/modules/user-related/user-privilege/data/service/user-privilege-data.service'; +import { PrivilegeAction } from 'src/core/strings/constants/privilege.constants'; import { UserPrivilegeConfigurationModel } from 'src/modules/user-related/user-privilege/data/models/user-privilege-configuration.model'; +import { UserPrivilegeUpdatedEvent } from '../../../entities/event/user-privilege-updated.event'; +import { OPERATION } from 'src/core/strings/constants/base.constants'; +import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; @EventsHandler(UserPrivilegeConfigUpdatedEvent) export class UserPrivilegeConfigUpdateHandler implements IEventHandler { - constructor(private dataService: UserPrivilegeConfigurationService) {} + constructor( + private dataService: UserPrivilegeDataService, + private eventBus: EventBus, + ) {} async handle(event: UserPrivilegeConfigUpdatedEvent) { const data = event.data.data; - console.log(data.user_privilege_id); - const configurations = await this.dataService.getManyByOptions({ + const configuration = await this.dataService.getOneByOptions({ where: { - user_privilege_id: data.user_privilege_id, + id: data.user_privilege_id, }, + relations: ['user_privilege_configurations'], }); + let configurationData = configuration?.[ + 'user_privilege_configurations' + ]?.sort((a, b) => a.index - b.index); const configs = UserPrivilegeConfigurationHelper.createConfigurations(); - const createdConfig = configs + configs .filter( (base) => - !configurations.some((data) => { + !configurationData.some((data) => { return base.menu_label == data.menu_label; }), ) .map((item) => { + Object.assign(item, { + user_privilege_id: data.user_privilege_id, + }); + + configurationData.push(item); + }); + + configurationData = configurationData + ?.filter((item) => + configs.some((data) => { + return item.menu_label == data.menu_label; + }), + ) + ?.map((item) => { + const exist = configs.find( + (config) => config.menu_label == item.menu_label, + ); return { ...item, - user_privilege_id: data.user_privilege_id, + view: exist.actions.includes(PrivilegeAction.VIEW) + ? item.view ?? false + : null, + cancel: exist.actions.includes(PrivilegeAction.CANCEL) + ? item.cancel ?? false + : null, + confirm: exist.actions.includes(PrivilegeAction.CONFIRM) + ? item.confirm ?? false + : null, + create: exist.actions.includes(PrivilegeAction.CREATE) + ? item.create ?? false + : null, + delete: exist.actions.includes(PrivilegeAction.DELETE) + ? item.delete ?? false + : null, + edit: exist.actions.includes(PrivilegeAction.EDIT) + ? item.edit ?? false + : null, }; }); - const deletedConfig = configurations - .filter( - (base) => - !configs.some((data) => { - return base.menu_label == data.menu_label; - }), - ) - ?.map((item) => item.id); + Object.assign(configuration, { + user_privilege_configurations: configurationData, + }); const queryRunner = this.dataService .getRepository() .manager.connection.createQueryRunner(); - if (createdConfig.length) { - await this.dataService.createBatch( - queryRunner, - UserPrivilegeConfigurationModel, - createdConfig, - ); - } + await this.dataService.update( + queryRunner, + UserPrivilegeConfigurationModel, + { id: data.user_privilege_id }, + configuration, + ); - if (deletedConfig.length) { - await this.dataService.deleteByIds( - queryRunner, - UserPrivilegeConfigurationModel, - deletedConfig, - ); - } + this.eventBus.publishAll([ + new UserPrivilegeUpdatedEvent({ + id: configuration.id, + old: null, + data: configuration, + user: event.data.user, + description: '', + module: TABLE_NAME.USER_PRIVILEGE_CONFIGURATION, + op: OPERATION.UPDATE, + }), + ]); } } diff --git a/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/managers/index-user-privilege-configuration.manager.ts b/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/managers/index-user-privilege-configuration.manager.ts index c5a1f0f..46c29af 100644 --- a/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/managers/index-user-privilege-configuration.manager.ts +++ b/src/modules/user-related/user-privilege/domain/usecases/user-privilege-configuration/managers/index-user-privilege-configuration.manager.ts @@ -7,6 +7,8 @@ import { RelationParam, } from 'src/core/modules/domain/entities/base-filter.entity'; import { ORDER_TYPE } from 'src/core/strings/constants/base.constants'; +import { UserPrivilegeConfigurationHelper } from '../helpers/generate-user-privilege-configuration.helper'; +import { PrivilegeAction } from 'src/core/strings/constants/privilege.constants'; @Injectable() export class IndexUserPrivilegeConfigurationManager extends BaseIndexManager { @@ -24,6 +26,62 @@ export class IndexUserPrivilegeConfigurationManager extends BaseIndexManager { + const configs = UserPrivilegeConfigurationHelper.createConfigurations() + .filter((item) => this.filterParam.modules.includes(item.module)) + ?.map((item) => { + return { + ...item, + }; + }); + + configs + .filter( + (base) => + !this.result.data.some((data) => { + return base.menu_label == data.menu_label; + }), + ) + .map((item) => { + Object.assign(item, { + user_privilege_id: this.filterParam.user_privilege_ids?.[0], + }); + + this.result.data.push(item); + }); + + this.result.data = this.result.data + ?.filter((item) => + configs.some((data) => { + return item.menu_label == data.menu_label; + }), + ) + ?.map((item) => { + const exist = configs.find( + (config) => config.menu_label == item.menu_label, + ); + return { + ...item, + view: exist.actions.includes(PrivilegeAction.VIEW) + ? item.view ?? false + : null, + cancel: exist.actions.includes(PrivilegeAction.CANCEL) + ? item.cancel ?? false + : null, + confirm: exist.actions.includes(PrivilegeAction.CONFIRM) + ? item.confirm ?? false + : null, + create: exist.actions.includes(PrivilegeAction.CREATE) + ? item.create ?? false + : null, + delete: exist.actions.includes(PrivilegeAction.DELETE) + ? item.delete ?? false + : null, + edit: exist.actions.includes(PrivilegeAction.EDIT) + ? item.edit ?? false + : null, + }; + }); + return; } diff --git a/src/modules/web-information/gate/domain/usecases/managers/helpers/validate-item-gate.helper.ts b/src/modules/web-information/gate/domain/usecases/managers/helpers/validate-item-gate.helper.ts index 725d624..95f1bbd 100644 --- a/src/modules/web-information/gate/domain/usecases/managers/helpers/validate-item-gate.helper.ts +++ b/src/modules/web-information/gate/domain/usecases/managers/helpers/validate-item-gate.helper.ts @@ -14,7 +14,7 @@ export async function validateItemGate(dataService, data, id?) { if (existCode) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! Gate with code ${data.code} already exist`, + message: `Gagal! Gate dengan kode ${data.code} telah ada`, error: 'Unprocessable Entity', }); } @@ -31,7 +31,7 @@ export async function validateItemGate(dataService, data, id?) { if (existType) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! Gate type ${data.type} with item ${data.item.name} already exist`, + message: `Gagal! Gate tipe ${data.type} dengan item ${data.item.name} telah ada`, error: 'Unprocessable Entity', }); }