diff --git a/src/components/JobCard.tsx b/src/components/JobCard.tsx index 6ac4bba..69129bd 100644 --- a/src/components/JobCard.tsx +++ b/src/components/JobCard.tsx @@ -1,33 +1,39 @@ + import React from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { HoverCard, HoverCardContent, HoverCardTrigger } from '@/components/ui/hover-card'; import { Calendar, Factory, TrendingUp, TrendingDown, Clock, Package, Wrench } from 'lucide-react'; -import { Job } from '@/services/jobService'; +import { IndJobResponse, IndTransactionResponse, IndBillitemResponse } from '@/lib/pbtypes'; import { formatISK } from '@/utils/priceUtils'; interface JobCardProps { - job: Job; - onEdit: (job: Job) => void; + job: IndJobResponse & { + expenditures: IndTransactionResponse[]; + income: IndTransactionResponse[]; + billOfMaterials: IndBillitemResponse[]; + consumedMaterials: { name: string; required: number }[]; + }; + onEdit: (job: any) => void; onDelete: (jobId: string) => void; } const JobCard: React.FC = ({ job, onEdit, onDelete }) => { - const totalExpenditure = job.expenditures.reduce((sum, tx) => sum + Math.abs(tx.totalAmount), 0); - const totalIncome = job.income.reduce((sum, tx) => sum + tx.totalAmount, 0); + const totalExpenditure = job.expenditures.reduce((sum, tx) => sum + tx.totalPrice, 0); + const totalIncome = job.income.reduce((sum, tx) => sum + tx.totalPrice, 0); const profit = totalIncome - totalExpenditure; const margin = totalIncome > 0 ? ((profit / totalIncome) * 100) : 0; const itemsSold = job.income.reduce((sum, tx) => sum + tx.quantity, 0); - const saleStartTime = job.dates.saleStart?.getTime(); + const saleStartTime = job.saleStart ? new Date(job.saleStart).getTime() : null; const daysSinceStart = saleStartTime ? Math.max(1, Math.ceil((Date.now() - saleStartTime) / (1000 * 60 * 60 * 24))) : 0; const itemsPerDay = daysSinceStart > 0 ? itemsSold / daysSinceStart : 0; const getStatusColor = (status: string) => { switch (status) { case 'Planned': return 'bg-gray-600'; - case 'Transporting Materials': return 'bg-yellow-600'; + case 'Acquisition': return 'bg-yellow-600'; case 'Running': return 'bg-blue-600'; case 'Done': return 'bg-green-600'; case 'Selling': return 'bg-purple-600'; @@ -36,9 +42,9 @@ const JobCard: React.FC = ({ job, onEdit, onDelete }) => { } }; - const formatDateTime = (date: Date | null) => { - if (!date) return 'Not set'; - return date.toLocaleString('en-CA', { + const formatDateTime = (dateString: string | null | undefined) => { + if (!dateString) return 'Not set'; + return new Date(dateString).toLocaleString('en-CA', { year: 'numeric', month: '2-digit', day: '2-digit', @@ -53,7 +59,7 @@ const JobCard: React.FC = ({ job, onEdit, onDelete }) => {
- {job.outputItem.name} + {job.outputItem} {job.status} @@ -102,7 +108,7 @@ const JobCard: React.FC = ({ job, onEdit, onDelete }) => { )}
-

Quantity: {job.outputItem.quantity.toLocaleString()}

+

Quantity: {job.outputQuantity.toLocaleString()}