mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
- migration r3_gestion (7 tables) : Partner, Part (SANS colonne de quantité), StockMovement (signé, tracé, PU figé), PurchaseOrder/Line, LaborTime (taux figé), Document (R3.2) ; User.hourlyRate administrable - API (66 opérations) : tiers ; pièces (stock = Σ mouvements, alerte sous seuil) ; entrée/ajustement (motif requis, stock jamais négatif, en transaction) ; BC Brouillon→Envoyé→Reçu (la réception crée les RECEIPT et met à jour lastUnitPrice) ; consommation sur OT (stock suffisant, PRIX FIGÉ) ; main-d'œuvre (TAUX FIGÉ, refus si taux non défini) ; WorkOrderDetail.costs ; coûts verrouillés après clôture (409) - seed : tiers/pièces/BC/taux de la maquette — OT-0341 = 505 MAD (testé) - durcissement : références OT/DEM/BC/P par SÉQUENCES Postgres (nextval) — fin des courses « max+1 » (500 sporadiques sous charge parallèle) ; 3 runs Jest complets consécutifs verts - 55 tests (92 % stmts / 74,9 % branches) dont la recette officielle : consommer sous seuil → BC → réception → réappro, prix/taux figés prouvés Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Get,
|
|
HttpCode,
|
|
Param,
|
|
ParseUUIDPipe,
|
|
Post,
|
|
} from '@nestjs/common';
|
|
import {
|
|
PurchaseOrderCreateSchema,
|
|
PurchaseOrderTransitionSchema,
|
|
type PurchaseOrderCreate,
|
|
type PurchaseOrderTransition,
|
|
} from '@siop/shared';
|
|
import {
|
|
AuthenticatedUser,
|
|
CurrentUser,
|
|
} from '../auth/current-user.decorator';
|
|
import { ZodValidationPipe } from '../common/zod-validation.pipe';
|
|
import { RequirePermission } from '../permissions/require-permission.decorator';
|
|
import { PurchaseOrdersService } from './purchase-orders.service';
|
|
|
|
@Controller('purchase-orders')
|
|
export class PurchaseOrdersController {
|
|
constructor(private readonly purchaseOrders: PurchaseOrdersService) {}
|
|
|
|
@Get()
|
|
@RequirePermission('PURCHASE_ORDERS', 'view')
|
|
list() {
|
|
return this.purchaseOrders.list();
|
|
}
|
|
|
|
@Get(':id')
|
|
@RequirePermission('PURCHASE_ORDERS', 'view')
|
|
get(@Param('id', ParseUUIDPipe) id: string) {
|
|
return this.purchaseOrders.get(id);
|
|
}
|
|
|
|
@Post()
|
|
@RequirePermission('PURCHASE_ORDERS', 'create')
|
|
create(
|
|
@Body(new ZodValidationPipe(PurchaseOrderCreateSchema)) body: PurchaseOrderCreate,
|
|
@CurrentUser() user: AuthenticatedUser,
|
|
) {
|
|
return this.purchaseOrders.create(body, user);
|
|
}
|
|
|
|
@Post(':id/transition')
|
|
@HttpCode(200) // le contrat : 200, l'état change
|
|
@RequirePermission('PURCHASE_ORDERS', 'edit')
|
|
transition(
|
|
@Param('id', ParseUUIDPipe) id: string,
|
|
@Body(new ZodValidationPipe(PurchaseOrderTransitionSchema)) body: PurchaseOrderTransition,
|
|
@CurrentUser() user: AuthenticatedUser,
|
|
) {
|
|
return this.purchaseOrders.transition(id, body, user);
|
|
}
|
|
}
|