feat: daily activity summary email

- activity-email-actions: sendDailySummaryAction — filters today's
  activities by dueDate, sends personalized email via Appwrite Messaging
  - 'me': current user's activities only
  - 'team' (owner/admin): each member gets their own activities separately
- send-summary-dialog: dialog with me/team radio (owner/admin only sees
  team option), inline error + toast on success
- activities-client: 'Günlük Özet' button in header, role prop added
- activities page: passes ctx.role to client
This commit is contained in:
egecankomur
2026-05-12 17:26:50 +03:00
parent fe86bfe6b2
commit 5ac6a1f8b0
4 changed files with 289 additions and 0 deletions
@@ -19,9 +19,11 @@ import {
} from "@/lib/appwrite/activity-actions";
import { ActivityFormSheet } from "./activity-form-sheet";
import { ActivityCalendar } from "./activity-calendar";
import { SendSummaryDialog } from "./send-summary-dialog";
import { DeleteConfirmDialog } from "@/components/ui/delete-confirm-dialog";
import type { Activity, Customer, Property } from "@/lib/appwrite/schema";
import { ACTIVITY_TYPE_LABELS } from "@/lib/appwrite/schema";
import type { TenantRole } from "@/lib/appwrite/tenant-guard";
type ViewMode = "list" | "calendar";
@@ -29,12 +31,14 @@ interface ActivitiesClientProps {
initialActivities: Activity[];
customers: Customer[];
properties: Property[];
role: TenantRole;
}
export function ActivitiesClient({
initialActivities,
customers,
properties,
role,
}: ActivitiesClientProps) {
const router = useRouter();
const [activities, setActivities] = useState(initialActivities);
@@ -123,6 +127,7 @@ export function ActivitiesClient({
Takvim
</button>
</div>
<SendSummaryDialog role={role} />
<Button onClick={openCreate} size="sm" data-tour="activities-add">
<Plus className="mr-1.5 size-4" />
Yeni Aktivite