mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 10:29:35 +01:00
feat(production): articleId für Rezepte, TUI-Verbesserungen mit UoM-Carousel, ArticlePicker und Zutaten-Reorder
Backend: - articleId als Pflichtfeld im Recipe-Aggregate (Domain, Application, Infrastructure) - Liquibase-Migration 015 mit defaultValue für bestehende Daten - Alle Tests angepasst (Unit, Integration) Frontend: - UoM-Carousel-Selektor in RecipeCreateScreen, AddBatchScreen, AddIngredientScreen - ArticlePicker-Komponente mit Typeahead-Suche für Artikelauswahl - Auto-Position bei Zutatenzugabe (kein manuelles Feld mehr) - Automatische subRecipeId-Erkennung bei Artikelauswahl - Zutaten-Reorder per Drag im RecipeDetailScreen (Remove + Re-Add) - Artikelnamen statt UUIDs in der Rezept-Detailansicht - Navigation-Context: replace()-Methode ergänzt
This commit is contained in:
parent
b46495e1aa
commit
6c1e6c24bc
48 changed files with 999 additions and 237 deletions
|
|
@ -113,8 +113,8 @@ export type {
|
|||
StorageLocationFilter,
|
||||
} from './resources/storage-locations.js';
|
||||
export { STORAGE_TYPE_LABELS } from './resources/storage-locations.js';
|
||||
export type { RecipesResource, RecipeType, RecipeStatus } from './resources/recipes.js';
|
||||
export { RECIPE_TYPE_LABELS } from './resources/recipes.js';
|
||||
export type { RecipesResource, RecipeType, RecipeStatus, UoM } from './resources/recipes.js';
|
||||
export { RECIPE_TYPE_LABELS, UOM_VALUES, UOM_LABELS } from './resources/recipes.js';
|
||||
export type { StocksResource, BatchType } from './resources/stocks.js';
|
||||
export { BATCH_TYPE_LABELS } from './resources/stocks.js';
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,17 @@ export const RECIPE_TYPE_LABELS: Record<RecipeType, string> = {
|
|||
FINISHED_PRODUCT: 'Fertigprodukt',
|
||||
};
|
||||
|
||||
export type UoM = 'KILOGRAM' | 'GRAM' | 'LITER' | 'MILLILITER' | 'PIECE' | 'METER';
|
||||
export const UOM_VALUES: UoM[] = ['KILOGRAM', 'GRAM', 'LITER', 'MILLILITER', 'PIECE', 'METER'];
|
||||
export const UOM_LABELS: Record<UoM, string> = {
|
||||
KILOGRAM: 'Kilogramm (kg)',
|
||||
GRAM: 'Gramm (g)',
|
||||
LITER: 'Liter (L)',
|
||||
MILLILITER: 'Milliliter (mL)',
|
||||
PIECE: 'Stück (pc)',
|
||||
METER: 'Meter (m)',
|
||||
};
|
||||
|
||||
export type {
|
||||
RecipeDTO,
|
||||
RecipeSummaryDTO,
|
||||
|
|
|
|||
|
|
@ -420,6 +420,22 @@ export interface paths {
|
|||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/production/batches": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
post: operations["planBatch"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/inventory/storage-locations": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
|
|
@ -468,6 +484,54 @@ export interface paths {
|
|||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/inventory/stocks/{stockId}/batches/{batchId}/unblock": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
post: operations["unblockBatch"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/inventory/stocks/{stockId}/batches/{batchId}/remove": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
post: operations["removeBatch"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/inventory/stocks/{stockId}/batches/{batchId}/block": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
post: operations["blockBatch"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/api/customers": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
|
|
@ -1171,6 +1235,7 @@ export interface components {
|
|||
shelfLifeDays?: number;
|
||||
outputQuantity: string;
|
||||
outputUom: string;
|
||||
articleId: string;
|
||||
};
|
||||
IngredientResponse: {
|
||||
id: string;
|
||||
|
|
@ -1205,6 +1270,7 @@ export interface components {
|
|||
shelfLifeDays?: number | null;
|
||||
outputQuantity: string;
|
||||
outputUom: string;
|
||||
articleId: string;
|
||||
status: string;
|
||||
ingredients: components["schemas"]["IngredientResponse"][];
|
||||
productionSteps: components["schemas"]["ProductionStepResponse"][];
|
||||
|
|
@ -1231,6 +1297,31 @@ export interface components {
|
|||
subRecipeId?: string;
|
||||
substitutable?: boolean;
|
||||
};
|
||||
PlanBatchRequest: {
|
||||
recipeId: string;
|
||||
plannedQuantity: string;
|
||||
plannedQuantityUnit: string;
|
||||
/** Format: date */
|
||||
productionDate: string;
|
||||
/** Format: date */
|
||||
bestBeforeDate: string;
|
||||
};
|
||||
BatchResponse: {
|
||||
id?: string;
|
||||
batchNumber?: string;
|
||||
recipeId?: string;
|
||||
status?: string;
|
||||
plannedQuantity?: string;
|
||||
plannedQuantityUnit?: string;
|
||||
/** Format: date */
|
||||
productionDate?: string;
|
||||
/** Format: date */
|
||||
bestBeforeDate?: string;
|
||||
/** Format: date-time */
|
||||
createdAt?: string;
|
||||
/** Format: date-time */
|
||||
updatedAt?: string;
|
||||
};
|
||||
CreateStorageLocationRequest: {
|
||||
name: string;
|
||||
storageType: string;
|
||||
|
|
@ -1276,6 +1367,13 @@ export interface components {
|
|||
/** Format: date-time */
|
||||
receivedAt?: string;
|
||||
};
|
||||
RemoveStockBatchRequest: {
|
||||
quantityAmount: string;
|
||||
quantityUnit: string;
|
||||
};
|
||||
BlockStockBatchRequest: {
|
||||
reason: string;
|
||||
};
|
||||
CreateCustomerRequest: {
|
||||
name: string;
|
||||
/** @enum {string} */
|
||||
|
|
@ -1383,6 +1481,7 @@ export interface components {
|
|||
shelfLifeDays?: number | null;
|
||||
outputQuantity: string;
|
||||
outputUom: string;
|
||||
articleId: string;
|
||||
status: string;
|
||||
/** Format: int32 */
|
||||
ingredientCount: number;
|
||||
|
|
@ -2388,6 +2487,30 @@ export interface operations {
|
|||
};
|
||||
};
|
||||
};
|
||||
planBatch: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody: {
|
||||
content: {
|
||||
"application/json": components["schemas"]["PlanBatchRequest"];
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description OK */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"*/*": components["schemas"]["BatchResponse"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
listStorageLocations: {
|
||||
parameters: {
|
||||
query?: {
|
||||
|
|
@ -2485,6 +2608,77 @@ export interface operations {
|
|||
};
|
||||
};
|
||||
};
|
||||
unblockBatch: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path: {
|
||||
stockId: string;
|
||||
batchId: string;
|
||||
};
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description OK */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content?: never;
|
||||
};
|
||||
};
|
||||
};
|
||||
removeBatch: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path: {
|
||||
stockId: string;
|
||||
batchId: string;
|
||||
};
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody: {
|
||||
content: {
|
||||
"application/json": components["schemas"]["RemoveStockBatchRequest"];
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description OK */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content?: never;
|
||||
};
|
||||
};
|
||||
};
|
||||
blockBatch: {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path: {
|
||||
stockId: string;
|
||||
batchId: string;
|
||||
};
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody: {
|
||||
content: {
|
||||
"application/json": components["schemas"]["BlockStockBatchRequest"];
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description OK */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content?: never;
|
||||
};
|
||||
};
|
||||
};
|
||||
listCustomers: {
|
||||
parameters: {
|
||||
query?: {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue