Complete CarPass product flows
This commit is contained in:
@@ -28,6 +28,8 @@ class Car(Base):
|
||||
make: Mapped[str | None] = mapped_column(String(80))
|
||||
model: Mapped[str | None] = mapped_column(String(80))
|
||||
trim: Mapped[str | None] = mapped_column(String(120))
|
||||
generation: Mapped[str | None] = mapped_column(String(120))
|
||||
body_type: Mapped[str | None] = mapped_column(String(80))
|
||||
year: Mapped[int | None]
|
||||
plate_number: Mapped[str | None] = mapped_column(String(32))
|
||||
vin: Mapped[str | None] = mapped_column(String(32))
|
||||
@@ -36,6 +38,9 @@ class Car(Base):
|
||||
license_plate_country: Mapped[str | None] = mapped_column(String(2), index=True)
|
||||
vin_normalized: Mapped[str | None] = mapped_column(String(17), unique=True, index=True)
|
||||
fuel_type: Mapped[str | None] = mapped_column(String(32))
|
||||
engine_volume_l: Mapped[Decimal | None] = mapped_column(Numeric(5, 2))
|
||||
transmission: Mapped[str | None] = mapped_column(String(40))
|
||||
drive_type: Mapped[str | None] = mapped_column(String(40))
|
||||
target_consumption_l_per_100km: Mapped[Decimal | None] = mapped_column(Numeric(6, 2))
|
||||
fuel_tank_volume_l: Mapped[Decimal | None] = mapped_column(Numeric(6, 2))
|
||||
engine_oil_type: Mapped[str | None] = mapped_column(String(80))
|
||||
@@ -46,11 +51,28 @@ class Car(Base):
|
||||
brake_fluid_type: Mapped[str | None] = mapped_column(String(80))
|
||||
tire_pressure_front_bar: Mapped[Decimal | None] = mapped_column(Numeric(4, 2))
|
||||
tire_pressure_rear_bar: Mapped[Decimal | None] = mapped_column(Numeric(4, 2))
|
||||
tire_size: Mapped[str | None] = mapped_column(String(80))
|
||||
oil_change_interval_km: Mapped[int | None] = mapped_column(Integer)
|
||||
oil_change_interval_months: Mapped[int | None] = mapped_column(Integer)
|
||||
purchase_date: Mapped[date | None] = mapped_column(Date)
|
||||
purchase_price: Mapped[Decimal | None] = mapped_column(Numeric(12, 2))
|
||||
purchase_currency: Mapped[str | None] = mapped_column(String(3))
|
||||
purchase_type: Mapped[str] = mapped_column(String(24), default="unknown", server_default="unknown")
|
||||
currency: Mapped[str] = mapped_column(String(3), default="RUB", server_default="RUB")
|
||||
include_depreciation: Mapped[bool] = mapped_column(Boolean, default=False, server_default="false")
|
||||
expected_ownership_months: Mapped[int | None] = mapped_column(Integer)
|
||||
expected_residual_value: Mapped[Decimal | None] = mapped_column(Numeric(12, 2))
|
||||
loan_principal: Mapped[Decimal | None] = mapped_column(Numeric(12, 2))
|
||||
loan_down_payment: Mapped[Decimal | None] = mapped_column(Numeric(12, 2))
|
||||
loan_term_months: Mapped[int | None] = mapped_column(Integer)
|
||||
loan_annual_interest_rate: Mapped[Decimal | None] = mapped_column(Numeric(6, 3))
|
||||
loan_first_payment_date: Mapped[date | None] = mapped_column(Date)
|
||||
loan_payment_day: Mapped[int | None] = mapped_column(Integer)
|
||||
loan_payment_type: Mapped[str] = mapped_column(String(24), default="annuity", server_default="annuity")
|
||||
loan_currency: Mapped[str | None] = mapped_column(String(3))
|
||||
loan_comment: Mapped[str | None] = mapped_column(Text)
|
||||
current_odometer: Mapped[int | None]
|
||||
notes: Mapped[str | None] = mapped_column(Text)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at: Mapped[datetime] = mapped_column(
|
||||
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
|
||||
@@ -61,6 +83,7 @@ class Car(Base):
|
||||
service_entries = relationship("ServiceEntry", back_populates="car", cascade="all, delete-orphan")
|
||||
expense_entries = relationship("ExpenseEntry", back_populates="car", cascade="all, delete-orphan")
|
||||
service_links = relationship("CarServiceLink", back_populates="car", cascade="all, delete-orphan")
|
||||
odometer_history = relationship("OdometerHistory", back_populates="car", cascade="all, delete-orphan")
|
||||
|
||||
|
||||
class CarMake(Base):
|
||||
@@ -163,6 +186,23 @@ class CarServiceLink(Base):
|
||||
service_center = relationship("ServiceCenter", back_populates="car_links")
|
||||
|
||||
|
||||
class OdometerHistory(Base):
|
||||
__tablename__ = "odometer_history"
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
car_id: Mapped[int] = mapped_column(ForeignKey("cars.id", ondelete="CASCADE"), index=True)
|
||||
previous_odometer: Mapped[int | None] = mapped_column(Integer)
|
||||
new_odometer: Mapped[int] = mapped_column(Integer)
|
||||
source_record_type: Mapped[str] = mapped_column(String(40), index=True)
|
||||
source_record_id: Mapped[int | None] = mapped_column(Integer, index=True)
|
||||
changed_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), index=True)
|
||||
changed_by: Mapped[int | None] = mapped_column(ForeignKey("users.id", ondelete="SET NULL"), index=True)
|
||||
confirmation_required: Mapped[bool] = mapped_column(Boolean, default=False, server_default="false")
|
||||
user_confirmed: Mapped[bool] = mapped_column(Boolean, default=True, server_default="true")
|
||||
|
||||
car = relationship("Car", back_populates="odometer_history")
|
||||
|
||||
|
||||
class ServiceInboxMessage(Base):
|
||||
__tablename__ = "service_inbox_messages"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user