Files
archived-teslamate/lib/teslamate/log/charging_process.ex
Adrian Kumpf 6fd7cbbc28 Allow negative charge costs
Closes #743
2020-05-25 19:22:41 +02:00

61 lines
1.9 KiB
Elixir

defmodule TeslaMate.Log.ChargingProcess do
use Ecto.Schema
import Ecto.Changeset
alias TeslaMate.Locations.{Address, GeoFence}
alias TeslaMate.Log.{Charge, Car, Position}
schema "charging_processes" do
field :start_date, :utc_datetime_usec
field :end_date, :utc_datetime_usec
field :charge_energy_added, :decimal, read_after_writes: true
field :charge_energy_used, :decimal, read_after_writes: true
field :start_ideal_range_km, :decimal, read_after_writes: true
field :end_ideal_range_km, :decimal, read_after_writes: true
field :start_rated_range_km, :decimal, read_after_writes: true
field :end_rated_range_km, :decimal, read_after_writes: true
field :start_battery_level, :integer
field :end_battery_level, :integer
field :duration_min, :integer
field :outside_temp_avg, :decimal, read_after_writes: true
field :cost, :decimal, read_after_writes: true
belongs_to(:car, Car)
belongs_to(:position, Position)
belongs_to(:address, Address)
belongs_to(:geofence, GeoFence)
has_many :charges, Charge
end
@doc false
def changeset(charging_state, attrs) do
charging_state
|> cast(attrs, [
:geofence_id,
:address_id,
:start_date,
:end_date,
:charge_energy_added,
:charge_energy_used,
:start_ideal_range_km,
:end_ideal_range_km,
:start_rated_range_km,
:end_rated_range_km,
:start_battery_level,
:end_battery_level,
:duration_min,
:outside_temp_avg,
:cost
])
|> validate_required([:car_id, :start_date])
|> validate_number(:charge_energy_added, greater_than_or_equal_to: 0)
|> validate_number(:charge_energy_used, greater_than_or_equal_to: 0)
|> foreign_key_constraint(:car_id)
|> foreign_key_constraint(:position_id)
|> foreign_key_constraint(:address_id)
|> foreign_key_constraint(:geofence_id)
|> cast_assoc(:position, with: &Position.changeset/2)
end
end