Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import { Injectable, Logger, NotFoundException } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model, Types } from 'mongoose'; import { ProjectBudget } from '../schemas/project-budget.schema'; @Injectable() export class ProjectBudgetService { private readonly logger = new Logger(ProjectBudgetService.name); constructor( @InjectModel(ProjectBudget.name) private readonly budgetModel: Model<ProjectBudget>, ) {} async setupBudget( tenantId: string, projectId: string, estimatedCost: number, estimatedRevenue: number, ): Promise<any> { const budget = new this.budgetModel({ tenantId, projectId, estimatedCost, estimatedRevenue, }); return budget.save(); } async addExpense( tenantId: string, projectId: string, amount: number, ): Promise<any> { return this.budgetModel .findOneAndUpdate( { tenantId, projectId }, { $inc: { expensesTotal: amount, actualCost: amount } }, { new: true, upsert: true }, ) .exec(); } async getSnapshot(tenantId: string, projectId: string): Promise<any> { const budget = await this.budgetModel .findOne({ tenantId, projectId }) .exec(); if (!budget) throw new NotFoundException('Budget not found'); return { estimatedCost: budget.estimatedCost, actualCost: budget.actualCost, estimatedRevenue: budget.estimatedRevenue, actualRevenue: budget.actualRevenue, profitMargin: budget.actualRevenue - budget.actualCost, }; } } |