+
+
+ setGrossWeight(event.target.value)}
+ />
+
([]);
const [honeyType, setHoneyType] = useState("");
+ const [honeySuperCount, setHoneySuperCount] = useState("");
+ const [grossWeight, setGrossWeight] = useState("");
const [netWeight, setNetWeight] = useState("");
const [notes, setNotes] = useState("");
const [error, setError] = useState(null);
@@ -99,6 +101,8 @@ export default function NewHarvestPage() {
date: new Date(date).toISOString(),
colonyIds,
honeyType: honeyType || undefined,
+ honeySuperCount: honeySuperCount ? Number(honeySuperCount) : undefined,
+ grossWeight: grossWeight ? Number(grossWeight) : undefined,
netWeight: netWeight ? Number(netWeight) : undefined,
notes: notes || undefined,
});
@@ -192,6 +196,28 @@ export default function NewHarvestPage() {
onChange={(event) => setHoneyType(event.target.value)}
/>
+
+
+ setHoneySuperCount(event.target.value)}
+ />
+
+
+
+ setGrossWeight(event.target.value)}
+ />
+
updateExtraction(extraction.id, {
date: new Date(date).toISOString(),
+ amount: amount ? Number(amount) : undefined,
room: room || undefined,
waterContent: waterContent ? Number(waterContent) : undefined,
temperature: temperature ? Number(temperature) : undefined,
@@ -70,6 +72,15 @@ function ExtractionEditForm({
onChange={(event) => setDate(event.target.value)}
/>
+
+
+ setAmount(event.target.value)}
+ />
+
(
"ausreichend",
);
+ const [honeySuperStatus, setHoneySuperStatus] = useState("");
const [healthIssues, setHealthIssues] = useState("");
const [varroaIssues, setVarroaIssues] = useState("");
const [measures, setMeasures] = useState("");
@@ -90,11 +100,21 @@ export default function NewInspectionPage() {
mutation.mutate({
colonyId,
date: new Date(date).toISOString(),
+ weather: weather || undefined,
+ temperature: temperature ? Number(temperature) : undefined,
colonyStrength: colonyStrength ? Number(colonyStrength) : undefined,
+ broodAmount: broodAmount || undefined,
+ broodPattern: broodPattern ? Number(broodPattern) : undefined,
+ openBroodPresent,
+ cappedBroodPresent,
queenSeen,
eggsPresent,
queenCellsPresent,
+ swarmMood: swarmMood ? Number(swarmMood) : undefined,
+ gentleness: gentleness ? Number(gentleness) : undefined,
+ combBehavior: combBehavior ? Number(combBehavior) : undefined,
feedStatus,
+ honeySuperStatus: honeySuperStatus || undefined,
healthIssues: healthIssues || undefined,
varroaIssues: varroaIssues || undefined,
measures: measures || undefined,
@@ -139,6 +159,26 @@ export default function NewInspectionPage() {
onChange={(event) => setDate(event.target.value)}
/>
+
+
+ setWeather(event.target.value)}
+ />
+
+
+
+ setTemperature(event.target.value)}
+ />
+
setColonyStrength(event.target.value)}
/>
+
+
+ setBroodAmount(event.target.value)}
+ />
+
+
+
+ setBroodPattern(event.target.value)}
+ />
+
+
+
+
+
+ setSwarmMood(event.target.value)}
+ />
+
+
+
+ setGentleness(event.target.value)}
+ />
+
+
+
+ setCombBehavior(event.target.value)}
+ />
+
+
+
+ setHoneySuperStatus(event.target.value)}
+ />
+
(queen.status);
@@ -58,8 +64,14 @@ export function QueenEditCard({ queen }: { queen: Queen }) {
hatchYear: hatchYear ? Number(hatchYear) : undefined,
breed: breed || undefined,
origin: origin || undefined,
+ breeder: breeder || undefined,
markingColor: markingColor || undefined,
markingNumber: markingNumber || undefined,
+ matingType: matingType || undefined,
+ matingStatus: matingStatus || undefined,
+ inseminationData: inseminationData || undefined,
+ motherLine: motherLine || undefined,
+ fatherLine: fatherLine || undefined,
motherQueenId: motherQueenId || undefined,
notes: notes || undefined,
status,
@@ -117,6 +129,14 @@ export function QueenEditCard({ queen }: { queen: Queen }) {
onChange={(event) => setOrigin(event.target.value)}
/>
+
+
+ setBreeder(event.target.value)}
+ />
+
setMarkingNumber(event.target.value)}
/>
+
+
+ setMatingType(event.target.value)}
+ />
+
+
+
+ setMatingStatus(event.target.value)}
+ />
+
+
+
+ setInseminationData(event.target.value)}
+ />
+
+
+
+ setMotherLine(event.target.value)}
+ />
+
+
+
+ setFatherLine(event.target.value)}
+ />
+
+ {users ? (
+
+
+
+
+ ) : null}
(task.priority);
const [dueDate, setDueDate] = useState(task.dueDate?.slice(0, 10) ?? "");
+ const [assignedUserId, setAssignedUserId] = useState(task.assignedUserId ?? "");
+
+ // Assigning a task requires users:read, which not every role has - if the
+ // request fails, the assignee field below is simply omitted rather than
+ // breaking the rest of the edit dialog.
+ const { data: users } = useQuery({
+ queryKey: ["users"],
+ queryFn: () => fetchUsers(),
+ retry: false,
+ });
const mutation = useMutation({
mutationFn: () =>
@@ -40,6 +51,7 @@ export function TaskEditDialog({ task }: { task: Task }) {
description: description || undefined,
priority,
dueDate: dueDate ? new Date(dueDate).toISOString() : undefined,
+ assignedUserId: assignedUserId || undefined,
}),
onSuccess: () => {
void queryClient.invalidateQueries({ queryKey: ["tasks"] });
@@ -94,6 +106,31 @@ export function TaskEditDialog({ task }: { task: Task }) {
+ {users ? (
+
+
+
+
+ ) : null}
(null);
@@ -79,10 +83,14 @@ export default function NewTreatmentPage() {
mutation.mutate({
colonyId,
date: new Date(date).toISOString(),
+ startDate: startDate ? new Date(startDate).toISOString() : undefined,
+ endDate: endDate ? new Date(endDate).toISOString() : undefined,
product,
+ activeIngredient: activeIngredient || undefined,
amount: amount || undefined,
method: method || undefined,
reason: reason || undefined,
+ batchNumber: batchNumber || undefined,
notes: notes || undefined,
withdrawalPeriodDays: withdrawalPeriodDays ? Number(withdrawalPeriodDays) : undefined,
});
@@ -125,6 +133,26 @@ export default function NewTreatmentPage() {
onChange={(event) => setDate(event.target.value)}
/>
+
+
+ setStartDate(event.target.value)}
+ />
+
+
+
+ setEndDate(event.target.value)}
+ />
+
setProduct(event.target.value)}
/>
+
+
+ setActiveIngredient(event.target.value)}
+ />
+
setReason(event.target.value)}
/>
+
+
+ setBatchNumber(event.target.value)}
+ />
+
= {
RESERVE_COLONY: "Reservevolk",
};
+// The non-terminal statuses a beekeeper can freely switch between while
+// caring for a colony. DISSOLVED/SOLD/DECEASED/MERGED are lifecycle-ending
+// transitions handled by their own dedicated confirm actions (colony-actions.tsx),
+// which also set deactivatedAt - exposing them in a free dropdown here would
+// let status and deactivatedAt drift out of sync.
+export const COLONY_EDITABLE_STATUSES: ColonyStatus[] = [
+ "ACTIVE",
+ "WEAK",
+ "QUEENLESS",
+ "CONSPICUOUS",
+];
+
export const COLONY_STATUS_LABELS: Record = {
ACTIVE: "Aktiv",
WEAK: "Schwach",
diff --git a/ApiCore-Frontend/src/lib/inspections/types.ts b/ApiCore-Frontend/src/lib/inspections/types.ts
index 9aefc94..d668143 100644
--- a/ApiCore-Frontend/src/lib/inspections/types.ts
+++ b/ApiCore-Frontend/src/lib/inspections/types.ts
@@ -31,10 +31,18 @@ export interface CreateInspectionInput {
weather?: string;
temperature?: number;
colonyStrength?: number;
+ broodAmount?: string;
+ broodPattern?: number;
+ openBroodPresent?: boolean;
+ cappedBroodPresent?: boolean;
queenSeen?: boolean;
eggsPresent?: boolean;
queenCellsPresent?: boolean;
+ swarmMood?: number;
+ gentleness?: number;
+ combBehavior?: number;
feedStatus?: string;
+ honeySuperStatus?: string;
healthIssues?: string;
varroaIssues?: string;
measures?: string;
@@ -46,10 +54,18 @@ export interface UpdateInspectionInput {
weather?: string;
temperature?: number;
colonyStrength?: number;
+ broodAmount?: string;
+ broodPattern?: number;
+ openBroodPresent?: boolean;
+ cappedBroodPresent?: boolean;
queenSeen?: boolean;
eggsPresent?: boolean;
queenCellsPresent?: boolean;
+ swarmMood?: number;
+ gentleness?: number;
+ combBehavior?: number;
feedStatus?: string;
+ honeySuperStatus?: string;
healthIssues?: string;
varroaIssues?: string;
measures?: string;
diff --git a/ApiCore-Frontend/src/lib/queens/types.ts b/ApiCore-Frontend/src/lib/queens/types.ts
index af6c12a..3a62523 100644
--- a/ApiCore-Frontend/src/lib/queens/types.ts
+++ b/ApiCore-Frontend/src/lib/queens/types.ts
@@ -35,8 +35,14 @@ export interface CreateQueenInput {
hatchYear?: number;
breed?: string;
origin?: string;
+ breeder?: string;
markingColor?: string;
markingNumber?: string;
+ matingType?: string;
+ matingStatus?: string;
+ inseminationData?: string;
+ motherLine?: string;
+ fatherLine?: string;
motherQueenId?: string;
notes?: string;
}
@@ -45,8 +51,14 @@ export interface UpdateQueenInput {
hatchYear?: number;
breed?: string;
origin?: string;
+ breeder?: string;
markingColor?: string;
markingNumber?: string;
+ matingType?: string;
+ matingStatus?: string;
+ inseminationData?: string;
+ motherLine?: string;
+ fatherLine?: string;
motherQueenId?: string;
notes?: string;
status?: QueenStatus;
diff --git a/ApiCore-Frontend/src/lib/tasks/types.ts b/ApiCore-Frontend/src/lib/tasks/types.ts
index 6d0f120..1e8e817 100644
--- a/ApiCore-Frontend/src/lib/tasks/types.ts
+++ b/ApiCore-Frontend/src/lib/tasks/types.ts
@@ -34,6 +34,7 @@ export interface CreateTaskInput {
description?: string;
priority?: TaskPriority;
dueDate?: string;
+ assignedUserId?: string;
}
export interface UpdateTaskInput {
@@ -41,5 +42,6 @@ export interface UpdateTaskInput {
description?: string;
priority?: TaskPriority;
dueDate?: string;
+ assignedUserId?: string;
status?: TaskStatus;
}