feat(numbering): projects get their own dedicated number sequence (decoupled from orders)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
BOHA
2026-06-09 19:24:51 +02:00
parent 9e9aacdf0b
commit ed9ea52a44
5 changed files with 148 additions and 22 deletions

View File

@@ -5,6 +5,7 @@ import {
previewSharedNumber,
releaseSharedNumber,
isOrderNumberTaken,
generateProjectNumber,
} from "./numbering.service";
import { NasFileManager } from "./nas-file-manager";
@@ -241,7 +242,10 @@ export async function createOrderFromQuotation(
const result = await prisma.$transaction(async (tx) => {
const orderNumber = await generateSharedNumber(tx);
const projectNumber = orderNumber;
// The order keeps the shared (order) sequence; the auto-created project
// gets its OWN number from the dedicated project sequence. Both are
// assigned inside this transaction so they're allocated atomically.
const projectNumber = await generateProjectNumber(tx);
const order = await tx.orders.create({
data: {
@@ -299,7 +303,7 @@ export async function createOrderFromQuotation(
data: {
project_number: projectNumber,
name:
quotation.project_code || quotation.quotation_number || orderNumber,
quotation.project_code || quotation.quotation_number || projectNumber,
customer_id: quotation.customer_id,
quotation_id: quotationId,
order_id: order.id,
@@ -429,13 +433,16 @@ export async function createOrder(
let projectId: number | undefined;
let createdProject: { project_number: string; name: string } | null =
null;
// Only auto-create a project for genuine offer-less orders; share the
// order's number (same shared pool) exactly like the from-quotation flow.
// Only auto-create a project for genuine offer-less orders. The project
// gets its OWN number from the dedicated project sequence (not the
// order's shared number), exactly like the from-quotation flow.
if (body.create_project !== false && body.quotation_id == null) {
const projectNumber = await generateProjectNumber(tx);
const project = await tx.projects.create({
data: {
project_number: orderNumber,
name: body.scope_title || body.customer_order_number || orderNumber,
project_number: projectNumber,
name:
body.scope_title || body.customer_order_number || projectNumber,
customer_id: order.customer_id,
order_id: order.id,
status: "aktivni",