Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 54 additions & 1 deletion messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,7 @@
"rules_new_active": "Active",
"rules_new_inactive": "Inactive",
"rules_new_assigned_devices": "Assigned Devices",
"rules_new_unknown_location": "Unknown Location",
"rules_new_triggered_devices": "Triggered Devices",
"rules_new_actions": "Actions",
"rules_new_action_type": "Action Type",
Expand Down Expand Up @@ -1202,5 +1203,57 @@
"cwui_wind_beaufort_names": "Calm,Light air,Light breeze,Gentle breeze,Moderate,Fresh,Strong,Near gale,Gale,Strong gale,Storm,Violent storm,Hurricane",
"cwui_wind_sr_wind": "Wind {word} {direction} {cardinal}",
"cwui_wind_sr_speed": "Speed {speed}",
"cwui_wind_sr_beaufort": "Beaufort {force}, {label}"
"cwui_wind_sr_beaufort": "Beaufort {force}, {label}",
"reports_new_page_title": "Report Templates - CropWatch",
"reports_new_create_page_title": "Create Report Template - CropWatch",
"reports_new_edit_page_title": "Edit Report Template - CropWatch",
"reports_new_configured_templates": "Report Templates",
"reports_new_create_template": "Create Report Template",
"reports_new_edit_template": "Edit Report Template",
"reports_new_delete_template": "Delete Report Template",
"reports_new_template_id": "Template ID",
"reports_new_status": "Status",
"reports_new_active": "Active",
"reports_new_inactive": "Inactive",
"reports_new_assigned_devices": "Assigned Devices",
"reports_new_recipients": "Recipients",
"reports_new_cadence": "Cadence",
"reports_new_cadence_daily": "Daily",
"reports_new_cadence_weekly": "Weekly",
"reports_new_cadence_monthly": "Monthly",
"reports_new_no_assignments": "No assigned devices",
"reports_new_summary_more": "{summary}, +{count} more",
"reports_new_step_template": "1. Template",
"reports_new_step_template_subtitle": "Name the template, set how often data is pulled, and control whether it is active.",
"reports_new_step_assignments": "2. Device Assignments",
"reports_new_step_assignments_subtitle": "Choose the devices that should use this report template.",
"reports_new_description_placeholder": "Optional notes for the team",
"reports_new_data_pull_interval": "Data pull interval",
"reports_new_active_template": "Active template",
"reports_new_active_template_description": "Active templates generate reports on schedule.",
"reports_new_cadence_subtitle": "Choose when reports are generated and delivered.",
"reports_new_cadence_month_label": "End of month",
"reports_new_cadence_month_description": "Generate a report at the end of each month.",
"reports_new_cadence_utc_offset": "UTC offset (hours)",
"reports_new_cadence_active_label": "Active cadence",
"reports_new_cadence_active_description": "Disable to pause report generation without removing the schedule.",
"reports_new_created_success": "Report template \"{name}\" created successfully.",
"reports_new_updated_success": "Report template \"{name}\" updated successfully.",
"reports_new_deleted_success": "Report template \"{name}\" deleted successfully.",
"reports_new_delete_confirmation": "Are you sure you want to delete the report template \"{name}\"? This cannot be undone.",
"reports_new_load_failed": "Unable to load report templates.",
"reports_new_save_failed": "Unable to save this report template.",
"reports_new_delete_failed": "Unable to delete this report template.",
"reports_new_invalid_template_id": "Invalid report template ID.",
"reports_new_report_template_not_found": "Report template not found.",
"reports_new_view_history": "View History",
"reports_new_history_subtitle": "Generated reports for \"{name}\", grouped by device.",
"reports_new_history_loading": "Loading history…",
"reports_new_history_empty": "No reports have been generated yet.",
"reports_new_history_load_failed": "Unable to load report history.",
"reports_new_download_failed": "Unable to download this report.",
"reports_new_download_missing_url": "Download link is unavailable.",
"reports_new_validation_devices_required": "Select at least one device for this report template.",
"reports_new_validation_cadence_required": "Choose at least one cadence (daily, weekly, or monthly) for the active schedule.",
"reports_new_validation_recipient_email_required": "Recipient {index}: an email address is required."
}
55 changes: 54 additions & 1 deletion messages/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,7 @@
"rules_new_active": "有効",
"rules_new_inactive": "無効",
"rules_new_assigned_devices": "割り当てデバイス",
"rules_new_unknown_location": "不明なロケーション",
"rules_new_triggered_devices": "発火中デバイス",
"rules_new_actions": "アクション",
"rules_new_action_type": "アクションタイプ",
Expand Down Expand Up @@ -1202,5 +1203,57 @@
"cwui_wind_beaufort_names": "静穏,至軽風,軽風,軟風,和風,疾風,雄風,強風,疾強風,大強風,全強風,暴風,颶風",
"cwui_wind_sr_wind": "風 {word} {direction} {cardinal}",
"cwui_wind_sr_speed": "風速 {speed}",
"cwui_wind_sr_beaufort": "ビューフォート {force}、{label}"
"cwui_wind_sr_beaufort": "ビューフォート {force}、{label}",
"reports_new_page_title": "レポートテンプレート - CropWatch",
"reports_new_create_page_title": "レポートテンプレートの作成 - CropWatch",
"reports_new_edit_page_title": "レポートテンプレートの編集 - CropWatch",
"reports_new_configured_templates": "レポートテンプレート",
"reports_new_create_template": "レポートテンプレートを作成",
"reports_new_edit_template": "レポートテンプレートを編集",
"reports_new_delete_template": "レポートテンプレートを削除",
"reports_new_template_id": "テンプレートID",
"reports_new_status": "ステータス",
"reports_new_active": "有効",
"reports_new_inactive": "無効",
"reports_new_assigned_devices": "割り当てデバイス",
"reports_new_recipients": "受信者",
"reports_new_cadence": "頻度",
"reports_new_cadence_daily": "毎日",
"reports_new_cadence_weekly": "毎週",
"reports_new_cadence_monthly": "毎月",
"reports_new_no_assignments": "割り当てデバイスなし",
"reports_new_summary_more": "{summary}、他 {count} 件",
"reports_new_step_template": "1. テンプレート",
"reports_new_step_template_subtitle": "テンプレートに名前を付け、データ取得間隔を設定し、有効かどうかを管理します。",
"reports_new_step_assignments": "2. デバイスの割り当て",
"reports_new_step_assignments_subtitle": "このレポートテンプレートを使用するデバイスを選択します。",
"reports_new_description_placeholder": "チーム向けの任意のメモ",
"reports_new_data_pull_interval": "データ取得間隔",
"reports_new_active_template": "有効なテンプレート",
"reports_new_active_template_description": "有効なテンプレートはスケジュールに従ってレポートを生成します。",
"reports_new_cadence_subtitle": "レポートを生成して配信するタイミングを選択します。",
"reports_new_cadence_month_label": "月末",
"reports_new_cadence_month_description": "毎月末にレポートを生成します。",
"reports_new_cadence_utc_offset": "UTCオフセット(時間)",
"reports_new_cadence_active_label": "有効な頻度",
"reports_new_cadence_active_description": "スケジュールを削除せずにレポート生成を一時停止するには無効にします。",
"reports_new_created_success": "レポートテンプレート「{name}」を作成しました。",
"reports_new_updated_success": "レポートテンプレート「{name}」を更新しました。",
"reports_new_deleted_success": "レポートテンプレート「{name}」を削除しました。",
"reports_new_delete_confirmation": "レポートテンプレート「{name}」を削除してもよろしいですか?この操作は元に戻せません。",
"reports_new_load_failed": "レポートテンプレートを読み込めませんでした。",
"reports_new_save_failed": "このレポートテンプレートを保存できませんでした。",
"reports_new_delete_failed": "このレポートテンプレートを削除できませんでした。",
"reports_new_invalid_template_id": "無効なレポートテンプレートIDです。",
"reports_new_report_template_not_found": "レポートテンプレートが見つかりません。",
"reports_new_view_history": "履歴を表示",
"reports_new_history_subtitle": "「{name}」の生成済みレポートをデバイスごとにまとめています。",
"reports_new_history_loading": "履歴を読み込み中…",
"reports_new_history_empty": "まだレポートは生成されていません。",
"reports_new_history_load_failed": "レポート履歴を読み込めませんでした。",
"reports_new_download_failed": "このレポートをダウンロードできませんでした。",
"reports_new_download_missing_url": "ダウンロードリンクを利用できません。",
"reports_new_validation_devices_required": "このレポートテンプレートに少なくとも1台のデバイスを選択してください。",
"reports_new_validation_cadence_required": "有効なスケジュールに少なくとも1つの頻度(毎日・毎週・毎月)を選択してください。",
"reports_new_validation_recipient_email_required": "受信者 {index}: メールアドレスが必要です。"
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
},
"packageManager": "pnpm@10.18.2+sha512.9fb969fa749b3ade6035e0f109f0b8a60b5d08a1a87fdf72e337da90dcc93336e2280ca4e44f2358a649b83c17959e9993e777c2080879f3801e6f0d999ad3dd",
"dependencies": {
"@cropwatchdevelopment/cwui": "0.1.101",
"@cropwatchdevelopment/cwui": "0.1.103",
"@supabase/supabase-js": "^2.98.0"
}
}
10 changes: 5 additions & 5 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

155 changes: 155 additions & 0 deletions src/lib/api/api.dtos.ts
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ export interface RuleTemplateAssignmentDto {
isActive: boolean;
createdAt: string | null;
deviceName: string | null;
locationName: string | null;
permissionLevel: number | null;
state: RuleTemplateStateDto | null;
}
Expand Down Expand Up @@ -501,6 +502,160 @@ export interface CreateReportRequest {

export type UpdateReportRequest = Partial<CreateReportRequest>;

// --- Report templates (reports-new) ---------------------------------------

export interface ReportTemplateAssignmentDto {
id: number;
devEui: string;
templateId: number;
isActive: boolean;
createdAt: string | null;
deviceName: string | null;
locationName: string | null;
permissionLevel: number | null;
}

export interface ReportTemplateScheduleDto {
id: number;
templateId: number;
endOfDay: boolean;
endOfWeek: boolean;
endOfMonth: boolean;
utcOffset: number;
isActive: boolean;
createdAt: string | null;
}

export interface ReportTemplateRecipientDto {
id: number;
templateId: number;
communicationMethod: number;
email: string | null;
name: string | null;
createdAt: string | null;
}

export interface ReportTemplateAlertPointDto {
id: number;
templateId: number;
name: string;
dataPointKey: string;
operator: string | null;
min: number | null;
max: number | null;
value: number | null;
hexColor: string | null;
createdAt: string | null;
}

export interface ReportTemplateDataProcessingScheduleDto {
id: string;
templateId: number;
dayOfWeek: number;
startTime: string;
endTime: string;
crossesMidnight: boolean;
ruleType: string;
validFrom: string | null;
validTo: string | null;
timezone: string;
isEnabled: boolean;
createdAt: string | null;
updatedAt: string | null;
}

export interface ReportTemplateDto {
id: number;
name: string;
description: string | null;
deviceTypeId: number | null;
dataPullInterval: number;
isActive: boolean;
createdAt: string | null;
assignments: ReportTemplateAssignmentDto[];
schedule: ReportTemplateScheduleDto[];
recipients: ReportTemplateRecipientDto[];
alertPoints: ReportTemplateAlertPointDto[];
dataProcessingSchedules: ReportTemplateDataProcessingScheduleDto[];
}

export interface CommunicationMethodDto {
communicationMethodId: number;
name: string | null;
isActive: boolean;
}

export interface ReportTemplateHistoryItemDto {
devEui: string;
deviceName: string | null;
name: string;
id: string | null;
createdAt: string | null;
updatedAt: string | null;
lastAccessedAt: string | null;
metadata: Record<string, unknown> | null;
}

export interface ReportTemplateScheduleInput {
endOfDay?: boolean;
endOfWeek?: boolean;
endOfMonth?: boolean;
utcOffset?: number;
isActive?: boolean;
}

export interface ReportTemplateRecipientInput {
communicationMethod: number;
email?: string | null;
name?: string | null;
}

export interface ReportTemplateAlertPointInput {
name: string;
dataPointKey: string;
operator?: string | null;
min?: number | null;
max?: number | null;
value?: number | null;
hexColor?: string | null;
}

export interface ReportTemplateDataProcessingScheduleInput {
dayOfWeek: number;
startTime: string;
endTime: string;
crossesMidnight?: boolean;
ruleType?: string;
validFrom?: string | null;
validTo?: string | null;
timezone?: string;
isEnabled?: boolean;
}

export interface ReportTemplateSaveRequest {
name: string;
description?: string | null;
dataPullInterval?: number;
deviceTypeId?: number | null;
isActive?: boolean;
devEuis: string[];
schedule?: ReportTemplateScheduleInput[];
recipients?: ReportTemplateRecipientInput[];
alertPoints?: ReportTemplateAlertPointInput[];
dataProcessingSchedules?: ReportTemplateDataProcessingScheduleInput[];
}

export interface ReportTemplateListQuery {
search?: string;
}

export interface ReportFormContextDto {
devices: DeviceDto[];
locations: LocationDto[];
communicationMethods: CommunicationMethodDto[];
template: ReportTemplateDto | null;
}

export type TriggeredRulesCountResponse =
| number
| {
Expand Down
Loading
Loading