mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 18:48:11 +00:00
- FuelPurchase entity: record fuel purchases with cost tracking - FuelConsumption entity: monthly aggregation of fuel metrics - FuelService: record purchases, calculate stats, efficiency - FuelController: REST API for fuel operations - FuelModule: integrated into app - Migration: create fuel_purchases and fuel_consumption tables Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { BaseEntity } from '@edr/api-common';
|
|
import { Entity, Column, ManyToOne, JoinColumn } from 'typeorm';
|
|
import { Vehicle } from '../../vehicles/entities/vehicle.entity';
|
|
|
|
export enum PaymentMethod {
|
|
CASH = 'CASH',
|
|
CARD = 'CARD',
|
|
FUEL_CARD = 'FUEL_CARD',
|
|
TRANSFER = 'TRANSFER',
|
|
CHEQUE = 'CHEQUE',
|
|
}
|
|
|
|
@Entity({ name: 'fuel_purchases', schema: 'freight' })
|
|
export class FuelPurchase extends BaseEntity {
|
|
@Column({ name: 'vehicle_id', type: 'uuid' })
|
|
vehicleId!: string;
|
|
|
|
@ManyToOne(() => Vehicle, { eager: false })
|
|
@JoinColumn({ name: 'vehicle_id' })
|
|
vehicle!: Vehicle;
|
|
|
|
@Column({ name: 'purchase_date', type: 'timestamptz' })
|
|
purchaseDate!: Date;
|
|
|
|
@Column({ name: 'liters', type: 'numeric', precision: 10, scale: 2 })
|
|
liters!: number;
|
|
|
|
@Column({ name: 'cost_per_liter', type: 'numeric', precision: 10, scale: 2 })
|
|
costPerLiter!: number;
|
|
|
|
@Column({ name: 'total_cost', type: 'numeric', precision: 14, scale: 2 })
|
|
totalCost!: number;
|
|
|
|
@Column({ name: 'fuel_station', nullable: true })
|
|
fuelStation?: string;
|
|
|
|
@Column({ name: 'payment_method', type: 'varchar', default: PaymentMethod.CASH })
|
|
paymentMethod!: PaymentMethod;
|
|
|
|
@Column({ name: 'odometer_reading', type: 'numeric', nullable: true })
|
|
odometerReading?: number;
|
|
|
|
@Column({ name: 'driver_id', type: 'uuid', nullable: true })
|
|
driverId?: string;
|
|
|
|
@Column({ name: 'receipt_number', nullable: true })
|
|
receiptNumber?: string;
|
|
|
|
@Column({ type: 'text', nullable: true })
|
|
notes?: string;
|
|
}
|