import { ClipboardList, Calendar, Hash, Users, Car, Gauge, Clock, UserCheck, Briefcase, Receipt, DollarSign, } from "lucide-react" import { Card, CardContent, CardHeader, CardTitle, } from "@/shared/components/ui/card" import { Badge } from "@/shared/components/ui/badge" import { Separator } from "@/shared/components/ui/separator" import { JobCardActions } from "./job-card-actions" import { JobCardRemarksList } from "./job-card-remarks-list" import { JobCardRecommendationsList } from "./job-card-recommendations-list" import { getVehicleLabel } from "../vehicles/utils/getVehicleLabel" import { getFullName } from "@/shared/utils/getFullName" import { CrudShowResponse, JobCardsClient, PAYMENT_RECEIVED_ROUTES, PaymentReceivedClient } from "@garage/api" import { ResourcePage } from "@/shared/data-view/resource-page" import PaymentReceivedPage from "@/app/(authenticated)/sales/payment-received/page" import JobCardPaymentsReceived from "./job-card-payments-received" import { formatDate } from "@/shared/utils/formatters" import type { JobCardShowData } from "@garage/api" type JobCard = JobCardShowData function InfoItem({ icon: Icon, label, value, }: { icon: React.ComponentType<{ className?: string }> label: string value?: string | null }) { return (
{label} {value || }
) } const statusColorMap: Record = { draft: "secondary", check_in: "default", in_progress: "default", completed: "default", invoiced: "outline", cancelled: "destructive", } export function JobCardGeneralInfo({ jobCard }: { jobCard: JobCard }) { const formatStatus = (status?: string) => { if (!status) return null return status .split("_") .map((w) => w.charAt(0).toUpperCase() + w.slice(1)) .join(" ") } return (
Job Card Details
{jobCard.title && ( {jobCard.title} )} {jobCard.status && ( {formatStatus(jobCard.status)} )}
{/* Related Information */} Related Information
{/* */}
{/* Tax & Discount Settings */} Tax & Discount Settings {/* Counts */} Related Counts
) }