Spaces:
Sleeping
Sleeping
| // Mock data store - Replace with actual database later | |
| import { Party, BillBook, Lot, Invoice, LedgerEntry } from '@/types'; | |
| // Bill Books | |
| export const billBooks: BillBook[] = [ | |
| { | |
| id: 'bb1', | |
| name: 'Bill Book 1', | |
| serialFrom: 1, | |
| serialTo: 100, | |
| currentSerial: 15, | |
| isActive: true, | |
| }, | |
| { | |
| id: 'bb2', | |
| name: 'Bill Book 2', | |
| serialFrom: 101, | |
| serialTo: 200, | |
| currentSerial: 101, | |
| isActive: false, | |
| }, | |
| ]; | |
| // Parties | |
| export const parties: Party[] = [ | |
| { | |
| id: 'p1', | |
| name: 'नाळकंट, फवदापूर', | |
| contact: '9876543210', | |
| balance: 49639, | |
| createdAt: '2024-01-01', | |
| }, | |
| { | |
| id: 'p2', | |
| name: 'ABC Traders', | |
| contact: '9876543211', | |
| balance: 125000, | |
| createdAt: '2024-01-01', | |
| }, | |
| { | |
| id: 'p3', | |
| name: 'XYZ Enterprises', | |
| contact: '9876543212', | |
| balance: -45000, | |
| createdAt: '2024-01-02', | |
| }, | |
| { | |
| id: 'p4', | |
| name: 'दिलीप भोर', | |
| contact: '9876543213', | |
| balance: 0, | |
| createdAt: '2024-01-03', | |
| }, | |
| ]; | |
| // Lots with purchase information | |
| export const lots: Lot[] = [ | |
| { | |
| id: 'lot1', | |
| lotNumber: 'LOT-001', | |
| particular: 'Teja', | |
| purchaseDate: '2024-11-01', | |
| partyId: 'p1', | |
| partyName: 'नाळकंट, फवदापूर', | |
| gaadiDetails: 'MH12AB1234', | |
| quality: 'A Grade', | |
| totalBags: 100, | |
| soldBags: 30, | |
| availableBags: 70, | |
| grossWeightPerBag: 40, | |
| netWeightPerBag: 39, | |
| purchaseRate: 200, | |
| totalWeight: 3900, | |
| totalAmount: 780000, | |
| paidAmount: 500000, | |
| remainingAmount: 280000, | |
| paymentStatus: 'partial', | |
| }, | |
| { | |
| id: 'lot2', | |
| lotNumber: 'LOT-002', | |
| particular: 'Garuda', | |
| purchaseDate: '2024-11-02', | |
| partyId: 'p2', | |
| partyName: 'ABC Traders', | |
| quality: 'B Grade', | |
| totalBags: 50, | |
| soldBags: 20, | |
| availableBags: 30, | |
| grossWeightPerBag: 40, | |
| netWeightPerBag: 39, | |
| purchaseRate: 180, | |
| totalWeight: 1950, | |
| totalAmount: 351000, | |
| paidAmount: 351000, | |
| remainingAmount: 0, | |
| paymentStatus: 'paid', | |
| }, | |
| { | |
| id: 'lot3', | |
| lotNumber: 'LOT-003', | |
| particular: '341', | |
| purchaseDate: '2024-11-03', | |
| partyId: 'p3', | |
| partyName: 'XYZ Enterprises', | |
| gaadiDetails: 'MH14CD5678', | |
| quality: 'Premium', | |
| totalBags: 75, | |
| soldBags: 0, | |
| availableBags: 75, | |
| grossWeightPerBag: 40, | |
| netWeightPerBag: 39, | |
| purchaseRate: 220, | |
| totalWeight: 2925, | |
| totalAmount: 643500, | |
| paidAmount: 0, | |
| remainingAmount: 643500, | |
| paymentStatus: 'pending', | |
| }, | |
| ]; | |
| // Ledger entries for a party | |
| export const getLedgerEntriesForParty = (partyId: string): LedgerEntry[] => { | |
| // Sample ledger entries based on Image 1 | |
| if (partyId === 'p1') { | |
| return [ | |
| { | |
| id: 'l1', | |
| date: '2025-01-11', | |
| particulars: 'BN 97 म्हाळो नांवे', | |
| referenceNumber: 'BN 97', | |
| debit: 14389, | |
| credit: 0, | |
| balance: 49639, | |
| type: 'jawak', | |
| }, | |
| { | |
| id: 'l2', | |
| date: '2025-01-14', | |
| particulars: 'BN 45 म्हाळो नांवे', | |
| referenceNumber: 'BN 45', | |
| debit: 5205, | |
| credit: 0, | |
| balance: 54844, | |
| type: 'jawak', | |
| }, | |
| { | |
| id: 'l3', | |
| date: '2025-01-15', | |
| particulars: 'रोख -जमा', | |
| referenceNumber: '', | |
| debit: 0, | |
| credit: 35250, | |
| balance: 19594, | |
| type: 'payment', | |
| }, | |
| { | |
| id: 'l4', | |
| date: '2025-01-21', | |
| particulars: 'BN 44 म्हाळो नांवे', | |
| referenceNumber: 'BN 44', | |
| debit: 1113, | |
| credit: 0, | |
| balance: 20707, | |
| type: 'jawak', | |
| }, | |
| { | |
| id: 'l5', | |
| date: '2025-01-24', | |
| particulars: 'BN 88 म्हाळो नांवे', | |
| referenceNumber: 'BN 88', | |
| debit: 16612, | |
| credit: 0, | |
| balance: 37319, | |
| type: 'jawak', | |
| }, | |
| ]; | |
| } | |
| return []; | |
| }; | |
| // Get available lots by variety | |
| export const getAvailableLotsByVariety = (variety: string): Lot[] => { | |
| return lots.filter( | |
| (lot) => lot.particular === variety && lot.availableBags > 0 | |
| ); | |
| }; | |
| // Get next bill number from active bill book | |
| export const getNextBillNumber = (): { billBookId: string; serialNumber: string } => { | |
| const activeBillBook = billBooks.find((bb) => bb.isActive); | |
| if (!activeBillBook) { | |
| throw new Error('No active bill book found'); | |
| } | |
| if (activeBillBook.currentSerial > activeBillBook.serialTo) { | |
| throw new Error(`Bill book ${activeBillBook.name} is full. Please activate a new bill book.`); | |
| } | |
| return { | |
| billBookId: activeBillBook.id, | |
| serialNumber: activeBillBook.currentSerial.toString(), | |
| }; | |
| }; | |
| // Check if bill number already exists | |
| export const billNumberExists = (billNumber: string): boolean => { | |
| // In real app, check against database | |
| return false; | |
| }; | |
| // Update lot after sale | |
| export const updateLotAfterSale = (lotId: string, bagsSold: number): void => { | |
| const lot = lots.find((l) => l.id === lotId); | |
| if (lot) { | |
| lot.soldBags += bagsSold; | |
| lot.availableBags -= bagsSold; | |
| } | |
| }; | |