import { Controller, Get, Post, Param, Body, UseGuards, Request } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiBearerAuth } from '@nestjs/swagger'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { RequireCapability } from '../../common/decorators/capability.decorator'; import { MonthlyActualsService } from './monthly-actuals.service'; @ApiTags('monthly-actuals') @Controller('monthly-actuals') @ApiBearerAuth() @UseGuards(JwtAuthGuard) export class MonthlyActualsController { constructor(private monthlyActualsService: MonthlyActualsService) {} @Get(':year/:month') @ApiOperation({ summary: 'Get monthly actuals grid for a specific month' }) @RequireCapability('financials.actuals.view') async getGrid(@Param('year') year: string, @Param('month') month: string) { return this.monthlyActualsService.getActualsGrid(parseInt(year), parseInt(month)); } @Post(':year/:month') @ApiOperation({ summary: 'Save monthly actuals (creates reconciled journal entry)' }) @RequireCapability('financials.actuals.edit') async save( @Param('year') year: string, @Param('month') month: string, @Body() body: { lines: { accountId: string; amount: number }[] }, @Request() req: any, ) { return this.monthlyActualsService.saveActuals( parseInt(year), parseInt(month), body.lines, req.user.sub, ); } }