diff --git a/app/models/reading.rb b/app/models/reading.rb index cdf66e4..6b1ec9d 100644 --- a/app/models/reading.rb +++ b/app/models/reading.rb @@ -30,5 +30,37 @@ class Reading < ActiveRecord::Base def total_kwh_produced_low=(kwh) write_attribute(:total_kwh_produced_low,kwh.round(1)) end - + + # calculate difference with another reading + # return a hash with differences (self - reading) + def diff(reading) + { :total_kwh_consumed_high => self.total_kwh_consumed_high - reading.total_kwh_consumed_high, + :total_kwh_consumed_low => self.total_kwh_consumed_low - reading.total_kwh_consumed_low, + :total_kwh_produced_high => self.total_kwh_produced_high - reading.total_kwh_produced_high, + :total_kwh_produced_low => self.total_kwh_produced_low - reading.total_kwh_produced_low, + :current_kw_consumed => self.current_kw_consumed - reading.current_kw_consumed, + :current_kw_produced => self.current_kw_produced - reading.current_kw_produced, + :total_m3_gas_consumed => self.total_m3_gas_consumed - reading.total_m3_gas_consumed } + end + + # + # Class methods + # + class << self + # return readings from beginning of 'from' until end of 'to' + def days(from, to) + Reading.where("created_at > :begin AND created_at < :end", { :begin => from.to_date.beginning_of_day, :end => to.to_date.end_of_day}) + end + + def day(date) + Reading.where("created_at > :begin AND created_at < :end", { :begin => date.to_date.beginning_of_day, :end => date.to_date.end_of_day}) + end + + def diff_on(date) + readings_on = day(date) + first = readings_on.first + last = readings_on.last + first.diff(last) + end + end end