From 83fa902b4c8a14801f0efd3e8a532837d5b5196f Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Fri, 4 Jul 2025 16:19:26 +0200 Subject: [PATCH] Make the rest of the application use "new" services --- src/components/JobCard.tsx | 35 +++++----- src/components/JobForm.tsx | 75 +++++++++++---------- src/components/MaterialsImportExport.tsx | 67 +++++++++---------- src/components/TransactionForm.tsx | 33 +++++----- src/components/TransactionTable.tsx | 19 +++--- src/lib/pbtypes.ts | 7 +- src/pages/Index.tsx | 83 +++++++++--------------- src/services/transactionService.ts | 19 ++++-- 8 files changed, 159 insertions(+), 179 deletions(-) diff --git a/src/components/JobCard.tsx b/src/components/JobCard.tsx index 69129bd..2fc45b4 100644 --- a/src/components/JobCard.tsx +++ b/src/components/JobCard.tsx @@ -5,16 +5,11 @@ 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 { IndJobResponse, IndTransactionResponse, IndBillitemResponse } from '@/lib/pbtypes'; import { formatISK } from '@/utils/priceUtils'; +import { IndJob } from '@/lib/types'; interface JobCardProps { - job: IndJobResponse & { - expenditures: IndTransactionResponse[]; - income: IndTransactionResponse[]; - billOfMaterials: IndBillitemResponse[]; - consumedMaterials: { name: string; required: number }[]; - }; + job: IndJob; onEdit: (job: any) => void; onDelete: (jobId: string) => void; } @@ -24,7 +19,7 @@ const JobCard: React.FC = ({ job, onEdit, onDelete }) => { 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.saleStart ? new Date(job.saleStart).getTime() : null; const daysSinceStart = saleStartTime ? Math.max(1, Math.ceil((Date.now() - saleStartTime) / (1000 * 60 * 60 * 24))) : 0; @@ -44,9 +39,9 @@ const JobCard: React.FC = ({ job, onEdit, onDelete }) => { const formatDateTime = (dateString: string | null | undefined) => { if (!dateString) return 'Not set'; - return new Date(dateString).toLocaleString('en-CA', { - year: 'numeric', - month: '2-digit', + return new Date(dateString).toLocaleString('en-CA', { + year: 'numeric', + month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' @@ -99,7 +94,7 @@ const JobCard: React.FC = ({ job, onEdit, onDelete }) => { {job.consumedMaterials.map((item, index) => (
{item.name} - {item.required.toLocaleString()} + {item.quantity.toLocaleString()}
))} @@ -111,17 +106,17 @@ const JobCard: React.FC = ({ job, onEdit, onDelete }) => {

Quantity: {job.outputQuantity.toLocaleString()}

- -
- + {job.saleStart && (
@@ -157,7 +152,7 @@ const JobCard: React.FC = ({ job, onEdit, onDelete }) => { )}
)} - +
diff --git a/src/components/JobForm.tsx b/src/components/JobForm.tsx index fa0071d..79fc2cb 100644 --- a/src/components/JobForm.tsx +++ b/src/components/JobForm.tsx @@ -6,23 +6,21 @@ import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { IndJobRecord, IndFacilityResponse, IndBillitemRecord, IndJobStatusOptions } from '@/lib/pbtypes'; -import { facilityService } from '@/services/facilityService'; +import { IndBillitemRecordNoId, IndJobStatusOptions, IndJobRecordNoId, IndFacilityRecord } from '@/lib/pbtypes'; import MaterialsImportExport from './MaterialsImportExport'; +import { IndJob } from '@/lib/types'; +// import { getFacilities } from '@/services/facilityService'; interface JobFormProps { - job?: IndJobRecord & { - billOfMaterials?: IndBillitemRecord[]; - consumedMaterials?: { name: string; required: number }[]; - }; - onSubmit: (job: Omit) => void; + job?: IndJob; + onSubmit: (job: IndJobRecordNoId) => void; onCancel: () => void; } const JobForm: React.FC = ({ job, onSubmit, onCancel }) => { - const [facilities, setFacilities] = useState([]); - const [billOfMaterials, setBillOfMaterials] = useState(job?.billOfMaterials || []); - const [consumedMaterials, setConsumedMaterials] = useState<{ name: string; required: number }[]>(job?.consumedMaterials || []); + // const [facilities, setFacilities] = useState([]); + const [billOfMaterials, setBillOfMaterials] = useState(job?.billOfMaterials || []); + const [consumedMaterials, setConsumedMaterials] = useState(job?.consumedMaterials || []); const [formData, setFormData] = useState({ outputItem: job?.outputItem || '', outputQuantity: job?.outputQuantity || 0, @@ -37,22 +35,22 @@ const JobForm: React.FC = ({ job, onSubmit, onCancel }) => { income: job?.income || [] }); - useEffect(() => { - const loadFacilities = async () => { - try { - const fetchedFacilities = await facilityService.getFacilities(); - setFacilities(fetchedFacilities); - } catch (error) { - console.error('Error loading facilities:', error); - } - }; - - loadFacilities(); - }, []); + // useEffect(() => { + // const loadFacilities = async () => { + // try { + // const fetchedFacilities = await getFacilities(); + // setFacilities(fetchedFacilities); + // } catch (error) { + // console.error('Error loading facilities:', error); + // } + // }; + + // loadFacilities(); + // }, []); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); - + onSubmit({ outputItem: formData.outputItem, outputQuantity: formData.outputQuantity, @@ -61,10 +59,10 @@ const JobForm: React.FC = ({ job, onSubmit, onCancel }) => { saleStart: formData.saleStart ? formData.saleStart : undefined, saleEnd: formData.saleEnd ? formData.saleEnd : undefined, status: formData.status, - billOfMaterials: formData.billOfMaterials, - consumedMaterials: formData.consumedMaterials, - expenditures: formData.expenditures, - income: formData.income + billOfMaterials: formData.billOfMaterials.map(item => item.id), + consumedMaterials: formData.consumedMaterials.map(item => item.id), + expenditures: formData.expenditures.map(item => item.id), + income: formData.income.map(item => item.id) }); }; @@ -83,7 +81,7 @@ const JobForm: React.FC = ({ job, onSubmit, onCancel }) => { Basic Info Materials - +
@@ -118,8 +116,8 @@ const JobForm: React.FC = ({ job, onSubmit, onCancel }) => {
-