Assessment groups can now define billing frequency (monthly, quarterly, annual) with configurable due months and due day. Invoice generation respects each group's schedule - only generating invoices when the selected month is a billing month for that group. Adds a generation preview showing which groups will be billed, period tracking on invoices, and billing period context in the payments UI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
import { Controller, Get, Post, Body, Param, UseGuards, Request } from '@nestjs/common';
|
|
import { ApiTags, ApiBearerAuth } from '@nestjs/swagger';
|
|
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
|
|
import { InvoicesService } from './invoices.service';
|
|
|
|
@ApiTags('invoices')
|
|
@Controller('invoices')
|
|
@ApiBearerAuth()
|
|
@UseGuards(JwtAuthGuard)
|
|
export class InvoicesController {
|
|
constructor(private invoicesService: InvoicesService) {}
|
|
|
|
@Get()
|
|
findAll() { return this.invoicesService.findAll(); }
|
|
|
|
@Get(':id')
|
|
findOne(@Param('id') id: string) { return this.invoicesService.findOne(id); }
|
|
|
|
@Post('generate-preview')
|
|
generatePreview(@Body() dto: { month: number; year: number }) {
|
|
return this.invoicesService.generatePreview(dto);
|
|
}
|
|
|
|
@Post('generate-bulk')
|
|
generateBulk(@Body() dto: { month: number; year: number }, @Request() req: any) {
|
|
return this.invoicesService.generateBulk(dto, req.user.sub);
|
|
}
|
|
|
|
@Post('apply-late-fees')
|
|
applyLateFees(@Body() dto: { grace_period_days: number; late_fee_amount: number }, @Request() req: any) {
|
|
return this.invoicesService.applyLateFees(dto, req.user.sub);
|
|
}
|
|
}
|