diff --git a/src/modules/configuration/couch/data/services/couch.service.ts b/src/modules/configuration/couch/data/services/couch.service.ts index 3aa6132..c92a38b 100644 --- a/src/modules/configuration/couch/data/services/couch.service.ts +++ b/src/modules/configuration/couch/data/services/couch.service.ts @@ -97,6 +97,36 @@ export class CouchService { } } + public async totalTodayTransactions(database = 'transaction') { + try { + const nano = this.nanoInstance; + const db = nano.use(database); + + // Get today's start timestamp (midnight) + const today = new Date(); + today.setHours(0, 0, 0, 0); + const todayTimestamp = today.getTime(); + + // Query for documents created today + const selector = { + created_at: { + $gte: todayTimestamp, + }, + }; + + const result = await db.find({ + selector: selector, + fields: ['_id'], + }); + + return result.docs.length; + } catch (error) { + console.log(error); + apm.captureError(error); + return 0; + } + } + getUnixTimestampLast7Days() { const date = new Date(); date.setDate(date.getDate() - 4); diff --git a/src/modules/transaction/sales-price-formula/data/services/sales-price-formula-data.service.ts b/src/modules/transaction/sales-price-formula/data/services/sales-price-formula-data.service.ts index fa15a81..9919cb7 100644 --- a/src/modules/transaction/sales-price-formula/data/services/sales-price-formula-data.service.ts +++ b/src/modules/transaction/sales-price-formula/data/services/sales-price-formula-data.service.ts @@ -1,4 +1,8 @@ -import { Injectable, UnprocessableEntityException } from '@nestjs/common'; +import { + Injectable, + Logger, + UnprocessableEntityException, +} from '@nestjs/common'; import { BaseDataService } from 'src/core/modules/data/service/base-data.service'; import { SalesPriceFormulaEntity, @@ -10,10 +14,12 @@ import { TransactionSettingModel, } from '../models/sales-price-formula.model'; import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants'; -import { Repository } from 'typeorm'; +import { MoreThan, Repository } from 'typeorm'; import { FormulaType } from '../../constants'; import { TaxModel } from 'src/modules/transaction/tax/data/models/tax.model'; import { ItemModel } from 'src/modules/item-related/item/data/models/item.model'; +import { TransactionModel } from 'src/modules/transaction/transaction/data/models/transaction.model'; +import { CouchService } from 'src/modules/configuration/couch/data/services/couch.service'; @Injectable() export class SalesPriceFormulaDataService extends BaseDataService { @@ -24,6 +30,11 @@ export class SalesPriceFormulaDataService extends BaseDataService, @InjectRepository(ItemModel, CONNECTION_NAME.DEFAULT) private item: Repository, + @InjectRepository(TransactionSettingModel, CONNECTION_NAME.DEFAULT) + private transactionSetting: Repository, + @InjectRepository(TransactionModel, CONNECTION_NAME.DEFAULT) + private transaction: Repository, + private couchService: CouchService, ) { super(repo); } @@ -37,11 +48,36 @@ export class SalesPriceFormulaDataService extends BaseDataService percentage; + Logger.log(`Factor ${transactionPercentage} from ${percentage}`); + + return transactionPercentage > percentage; + } + + async dataSaveFactor() { + const today = new Date(); + today.setHours(0, 0, 0, 0); + + const todayTimestamp = today.getTime(); + + const totalTransactions = await this.transaction.count({ + where: { + created_at: MoreThan(todayTimestamp), + }, + }); + + const couchTransaction = await this.couchService.totalTodayTransactions(); + + if (couchTransaction == 0) return 0; + + const factor = (totalTransactions / couchTransaction) * 100; + + return factor; } async itemTax(id: string) { diff --git a/src/modules/transaction/sales-price-formula/sales-price-formula.module.ts b/src/modules/transaction/sales-price-formula/sales-price-formula.module.ts index 5750c47..8066a77 100644 --- a/src/modules/transaction/sales-price-formula/sales-price-formula.module.ts +++ b/src/modules/transaction/sales-price-formula/sales-price-formula.module.ts @@ -22,13 +22,21 @@ import { TaxDataService } from '../tax/data/services/tax-data.service'; import { TaxModel } from '../tax/data/models/tax.model'; import { ItemModel } from 'src/modules/item-related/item/data/models/item.model'; import { UpdateTransactionSettingManager } from './domain/usecases/managers/update-transaction-setting.manager'; +import { TransactionModel } from '../transaction/data/models/transaction.model'; +import { CouchService } from 'src/modules/configuration/couch/data/services/couch.service'; @Global() @Module({ imports: [ ConfigModule.forRoot(), TypeOrmModule.forFeature( - [SalesPriceFormulaModel, TransactionSettingModel, TaxModel, ItemModel], + [ + SalesPriceFormulaModel, + TransactionSettingModel, + TransactionModel, + TaxModel, + ItemModel, + ], CONNECTION_NAME.DEFAULT, ), CqrsModule, @@ -49,6 +57,7 @@ import { UpdateTransactionSettingManager } from './domain/usecases/managers/upda SalesPriceFormulaDataOrchestrator, SalesPriceFormulaReadOrchestrator, + CouchService, ], exports: [SalesPriceFormulaDataService, SalesPriceFormulaReadService], }) diff --git a/src/modules/transaction/transaction/transaction.module.ts b/src/modules/transaction/transaction/transaction.module.ts index e08f2db..54f96c3 100644 --- a/src/modules/transaction/transaction/transaction.module.ts +++ b/src/modules/transaction/transaction/transaction.module.ts @@ -32,7 +32,10 @@ import { BatchConfirmDataTransactionManager } from './domain/usecases/managers/b import { PosTransactionHandler } from './domain/usecases/handlers/pos-transaction.handler'; import { TaxDataService } from '../tax/data/services/tax-data.service'; import { SalesPriceFormulaDataService } from '../sales-price-formula/data/services/sales-price-formula-data.service'; -import { SalesPriceFormulaModel } from '../sales-price-formula/data/models/sales-price-formula.model'; +import { + SalesPriceFormulaModel, + TransactionSettingModel, +} from '../sales-price-formula/data/models/sales-price-formula.model'; import { TaxModel } from '../tax/data/models/tax.model'; import { SettledTransactionHandler } from './domain/usecases/handlers/settled-transaction.handler'; import { RefundUpdatedHandler } from './domain/usecases/handlers/refund-update.handler'; @@ -43,6 +46,7 @@ import { PaymentMethodModel } from '../payment-method/data/models/payment-method import { TransactionDemographyModel } from './data/models/transaction-demography.model'; import { PriceCalculator } from './domain/usecases/calculator/price.calculator'; import { ItemModel } from 'src/modules/item-related/item/data/models/item.model'; +import { CouchService } from 'src/modules/configuration/couch/data/services/couch.service'; @Module({ exports: [TransactionReadService], @@ -57,6 +61,7 @@ import { ItemModel } from 'src/modules/item-related/item/data/models/item.model' TransactionTaxModel, TransactionItemTaxModel, TransactionBreakdownTaxModel, + TransactionSettingModel, TaxModel, SalesPriceFormulaModel, PaymentMethodModel, @@ -96,6 +101,8 @@ import { ItemModel } from 'src/modules/item-related/item/data/models/item.model' TransactionDataOrchestrator, TransactionReadOrchestrator, + + CouchService, ], }) export class TransactionModule {}