import { useState } from "react"; import { Link, Form } from "@remix-run/react"; import { Button } from "~/components/ui/Button"; import { Text } from "~/components/ui/Text"; import { DataTable } from "~/components/ui/DataTable"; import type { MaintenanceVisitWithRelations } from "~/types/database"; import { PAYMENT_STATUS_NAMES } from "~/lib/constants"; import { useSettings } from "~/contexts/SettingsContext"; interface MaintenanceVisitListProps { visits: MaintenanceVisitWithRelations[]; onEdit?: (visit: MaintenanceVisitWithRelations) => void; onView?: (visit: MaintenanceVisitWithRelations) => void; } export function MaintenanceVisitList({ visits, onEdit, onView }: MaintenanceVisitListProps) { const { formatDate, formatCurrency, formatNumber, formatDateTime } = useSettings(); const [deleteVisitId, setDeleteVisitId] = useState(null); const handleDelete = (visitId: number) => { setDeleteVisitId(visitId); }; const confirmDelete = () => { if (deleteVisitId) { // Submit delete form const form = document.createElement('form'); form.method = 'post'; form.style.display = 'none'; const intentInput = document.createElement('input'); intentInput.type = 'hidden'; intentInput.name = 'intent'; intentInput.value = 'delete'; const idInput = document.createElement('input'); idInput.type = 'hidden'; idInput.name = 'id'; idInput.value = deleteVisitId.toString(); form.appendChild(intentInput); form.appendChild(idInput); document.body.appendChild(form); form.submit(); } }; const getPaymentStatusColor = (status: string) => { switch (status) { case 'paid': return 'text-green-600 bg-green-50'; case 'pending': return 'text-yellow-600 bg-yellow-50'; case 'partial': return 'text-blue-600 bg-blue-50'; case 'cancelled': return 'text-red-600 bg-red-50'; default: return 'text-gray-600 bg-gray-50'; } }; const columns = [ { key: 'visitDate', header: 'تاريخ الزيارة', render: (visit: MaintenanceVisitWithRelations) => (
{formatDate(visit.visitDate)} {formatDateTime(visit.visitDate).split(' ')[1]}
), }, { key: 'vehicle', header: 'المركبة', render: (visit: MaintenanceVisitWithRelations) => (
{visit.vehicle.plateNumber} {visit.vehicle.manufacturer} {visit.vehicle.model} ({visit.vehicle.year})
), }, { key: 'customer', header: 'العميل', render: (visit: MaintenanceVisitWithRelations) => (
{visit.customer.name} {visit.customer.phone && ( {visit.customer.phone} )}
), }, { key: 'maintenanceJobs', header: 'أعمال الصيانة', render: (visit: MaintenanceVisitWithRelations) => { try { const jobs = JSON.parse(visit.maintenanceJobs); return (
{jobs.length > 1 ? `${jobs.length} أعمال صيانة` : jobs[0]?.job || 'غير محدد'} {visit.description}
); } catch { return (
غير محدد {visit.description}
); } }, }, { key: 'cost', header: 'التكلفة', render: (visit: MaintenanceVisitWithRelations) => ( {formatCurrency(visit.cost)} ), }, { key: 'paymentStatus', header: 'حالة الدفع', render: (visit: MaintenanceVisitWithRelations) => ( {PAYMENT_STATUS_NAMES[visit.paymentStatus as keyof typeof PAYMENT_STATUS_NAMES]} ), }, { key: 'kilometers', header: 'الكيلومترات', render: (visit: MaintenanceVisitWithRelations) => ( {formatNumber(visit.kilometers)} كم ), }, { key: 'actions', header: 'الإجراءات', render: (visit: MaintenanceVisitWithRelations) => (
{onView ? ( ) : ( )} {onEdit && ( )}
), }, ]; return (
{visits.length === 0 ? (
🔧

لا توجد زيارات صيانة

لم يتم العثور على أي زيارات صيانة. قم بإضافة زيارة جديدة للبدء.

) : ( )}
{/* Delete Confirmation Modal */} {deleteVisitId !== null && (

تأكيد الحذف

هل أنت متأكد من حذف زيارة الصيانة هذه؟ سيتم حذف جميع البيانات المرتبطة بها نهائياً.

)}
); }