Implement transaction service
This commit is contained in:
44
src/services/transactionService.ts
Normal file
44
src/services/transactionService.ts
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import { IndJob } from '@/lib/types';
|
||||||
|
import type { IndTransactionRecord, IndTransactionRecordNoId } from '../lib/pbtypes';
|
||||||
|
import pb from '../lib/pocketbase';
|
||||||
|
import { getJob, updateJob } from './jobService';
|
||||||
|
|
||||||
|
export async function createTransaction(
|
||||||
|
job: IndJob,
|
||||||
|
transaction: IndTransactionRecordNoId,
|
||||||
|
type: 'expenditure' | 'income'
|
||||||
|
): Promise<void> {
|
||||||
|
console.log('Adding transaction:', transaction);
|
||||||
|
// Create the transaction
|
||||||
|
transaction.job = job.id;
|
||||||
|
const createdTransaction = await pb.collection<IndTransactionRecord>('ind_transaction').create(transaction);
|
||||||
|
|
||||||
|
// Update the job to include the new transaction
|
||||||
|
const field = type === 'expenditure' ? 'expenditures' : 'income';
|
||||||
|
const currentIds = job[field] || [];
|
||||||
|
|
||||||
|
await updateJob(job.id, {
|
||||||
|
[field]: [...currentIds, createdTransaction.id]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function updateTransaction(
|
||||||
|
transactionId: string,
|
||||||
|
updates: Partial<IndTransactionRecord>
|
||||||
|
): Promise<void> {
|
||||||
|
await pb.collection<IndTransactionRecord>('ind_transaction').update(transactionId, updates);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function deleteTransaction(job: IndJob, transactionId: string): Promise<void> {
|
||||||
|
// Delete the transaction
|
||||||
|
await pb.collection<IndTransactionRecord>('ind_transaction').delete(transactionId);
|
||||||
|
|
||||||
|
// Remove from both expenditures and income arrays
|
||||||
|
const expenditures = job.expenditures.filter(ex => ex.id !== transactionId);
|
||||||
|
const income = job.income.filter(pero => pero.id !== transactionId);
|
||||||
|
|
||||||
|
await updateJob(job.id, {
|
||||||
|
expenditures: expenditures.map(ex => ex.id),
|
||||||
|
income: income.map(pero => pero.id)
|
||||||
|
});
|
||||||
|
}
|
Reference in New Issue
Block a user