app/models/c80_estate/pstat.rb in c80_estate-0.1.0.14 vs app/models/c80_estate/pstat.rb in c80_estate-0.1.0.15

- old
+ new

@@ -87,11 +87,16 @@ ] result[:raw_props] = {} result[:raw_props][:all_areas_count] = free_areas_atnow + busy_areas_atnow result[:raw_props][:free_areas_count] = free_areas_atnow result[:raw_props][:busy_areas_atnow] = busy_areas_atnow - result[:graph_dynamic] = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) + # result[:graph_dynamic] = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) + result[:graph_dynamic] = _parse_for_js_dynamic_graph_highstock( + pstats.ordered_by_created_at, + tcut[:used_start_date], + tcut[:used_end_date] + ) result[:graph_radial] = _parse_for_js_radial_graph(free_areas_atnow, busy_areas_atnow) # Rails.logger.debug "<Pstat.busy_coef> busy_areas_count = #{ busy_areas_count }" # Rails.logger.debug "<Pstat.busy_coef> all_areas_count = #{ all_areas_count }" # Rails.logger.debug "<Pstat.busy_coef> result[:busy_coef] = #{ result[:busy_coef] }" @@ -118,11 +123,15 @@ ] result[:raw_props_sq] = {} result[:raw_props_sq][:all_areas_count_sq] = free_areas_atnow_sq + busy_areas_atnow_sq result[:raw_props_sq][:free_areas_count_sq] = free_areas_atnow_sq result[:raw_props_sq][:busy_areas_atnow_sq] = busy_areas_atnow_sq - result[:graph_dynamic_sq] = _parse_for_js_dynamic_graph3_canvasjs(pstats.where(:atype_id => nil).ordered_by_created_at) + result[:graph_dynamic_sq] = _parse_for_js_dynamic_graph_highstock_sq( + pstats.where(:atype_id => nil).ordered_by_created_at, + tcut[:used_start_date], + tcut[:used_end_date] + ) result[:graph_radial_sq] = _parse_for_js_radial_graph_sq(free_areas_atnow_sq, busy_areas_atnow_sq) # common result[:title] = 'Статистика - Все объекты недвижимости' @@ -205,15 +214,25 @@ # если сортируем по типу, то берём последнюю запись, # иначе - берём последнюю запись с общими данными if atype_id.nil? free_areas_atnow = pstats.where(:atype_id => nil).last.free_areas busy_areas_atnow = pstats.where(:atype_id => nil).last.busy_areas - graph_data = _parse_for_js_dynamic_graph_canvasjs(pstats.where(:atype_id => nil).ordered_by_created_at) + # graph_data = _parse_for_js_dynamic_graph_canvasjs(pstats.where(:atype_id => nil).ordered_by_created_at) + graph_data = _parse_for_js_dynamic_graph_highstock( + pstats.where(:atype_id => nil).ordered_by_created_at, + used_start_date, + used_end_date + ) else free_areas_atnow = pstats.last.free_areas busy_areas_atnow = pstats.last.busy_areas - graph_data = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) + # graph_data = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) + graph_data = _parse_for_js_dynamic_graph_highstock( + pstats.ordered_by_created_at, + used_start_date, + used_end_date + ) end # Rails.logger.debug("\t\t atype_id = #{atype_id}") # Rails.logger.debug("\t\t free_areas_atnow = #{free_areas_atnow}") # Rails.logger.debug("\t\t busy_areas_atnow = #{busy_areas_atnow}") @@ -239,15 +258,21 @@ # Занятость в метрах ------ if atype_id.nil? free_areas_atnow_sq = pstats.where(:atype_id => nil).last.free_areas_sq busy_areas_atnow_sq = pstats.where(:atype_id => nil).last.busy_areas_sq - graph_data_sq = _parse_for_js_dynamic_graph3_canvasjs(pstats.where(:atype_id => nil).ordered_by_created_at) + graph_data_sq = _parse_for_js_dynamic_graph_highstock_sq(pstats.where(:atype_id => nil).ordered_by_created_at, + used_start_date, + used_end_date + ) else free_areas_atnow_sq = pstats.last.free_areas_sq busy_areas_atnow_sq = pstats.last.busy_areas_sq - graph_data_sq = _parse_for_js_dynamic_graph3_canvasjs(pstats.ordered_by_created_at) + graph_data_sq = _parse_for_js_dynamic_graph_highstock_sq(pstats.ordered_by_created_at, + used_start_date, + used_end_date + ) end # защищаемся от деления на ноль if busy_areas_atnow_sq + free_areas_atnow_sq == 0 bcoef_sq = 0.0 @@ -379,11 +404,16 @@ end result[:busy_coef] = sprintf "%.2f%", bcoef result[:comment] = "<abbr title='Период рассчёта занятости'>C #{used_start_date_str} по #{used_end_date_str}</abbr>" result[:abbr] = 'Занятость объекта в конце указанного периода: число b/N, где b - кол-во свободных, N - всего площадей' - result[:graph_dynamic] = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) + # result[:graph_dynamic] = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) + result[:graph_dynamic] = _parse_for_js_dynamic_graph_highstock( + pstats.ordered_by_created_at, + used_start_date, + used_end_date + ) result[:graph_radial] = _parse_for_js_radial_graph(free_areas_atnow, busy_areas_atnow) result[:raw_props] = {} result[:raw_props][:all_areas_count] = free_areas_atnow + busy_areas_atnow result[:raw_props][:free_areas_count] = free_areas_atnow @@ -391,11 +421,14 @@ # Занятость в метрах free_areas_atnow_sq = pstats.last.free_areas_sq busy_areas_atnow_sq = pstats.last.busy_areas_sq - graph_data_sq = _parse_for_js_dynamic_graph3_canvasjs(pstats.ordered_by_created_at) + graph_data_sq = _parse_for_js_dynamic_graph_highstock_sq(pstats.ordered_by_created_at, + used_start_date, + used_end_date + ) # защищаемся от деления на ноль if busy_areas_atnow_sq + free_areas_atnow_sq == 0 bcoef_sq = 0.0 else @@ -471,15 +504,15 @@ # здесь считаем коэф-ты только для `записей с общими данными` if self.atype.nil? self.free_areas = self.property.areas.free_areas.count self.busy_areas = self.property.areas.busy_areas.count - self.coef_busy = self.busy_areas*1.0 / (self.free_areas + self.busy_areas) * 100.0 + self.coef_busy = (self.free_areas + self.busy_areas == 0) ? 0 : self.busy_areas*1.0 / (self.free_areas + self.busy_areas) * 100.0 self.free_areas_sq = self.property.areas.free_areas_sq self.busy_areas_sq = self.property.areas.busy_areas_sq - self.coef_busy_sq = self.busy_areas_sq*1.0 / (self.free_areas_sq + self.busy_areas_sq) * 100.0 + self.coef_busy_sq = (self.free_areas_sq + self.busy_areas_sq == 0) ? 0 : self.busy_areas_sq*1.0 / (self.free_areas_sq + self.busy_areas_sq) * 100.0 # здесь считаем коэф-ты для 'atype related записей' else self.free_areas = self.property.areas.where(:atype_id => self.atype.id).free_areas.count self.busy_areas = self.property.areas.where(:atype_id => self.atype.id).busy_areas.count @@ -584,10 +617,11 @@ end res end +=begin def self._parse_for_js_dynamic_graph_canvasjs(pstats) # res: [ # { # year # month @@ -610,11 +644,62 @@ end Rails.logger.debug "<Pstat.parse_for_js_graph> res = #{res}" res end +=end + def self._parse_for_js_dynamic_graph_highstock(pstats, start_date, end_date) + res = [] + res << [start_date.to_i*1000,pstats.first.coef_busy] + + pstats.each do |pstat| + + res << [ + pstat.created_at.to_i*1000, + pstat.coef_busy + ] + + # Rails.logger.debug "#{res.last[0]}" + + end + + res << [end_date.to_i*1000,pstats.last.coef_busy] + # Rails.logger.debug "#{end_date.to_i*1000}" + + # Rails.logger.debug "<Pstat.parse_for_js_graph> pstat.last.created_at = #{pstats.last.created_at}, #{end_date}" + # res.sort! { |a,b| a[0] <=> b[0] } + res + + end + + def self._parse_for_js_dynamic_graph_highstock_sq(pstats, start_date, end_date) + res = [] + res << [start_date.to_i*1000,pstats.first.coef_busy_sq] + + pstats.each do |pstat| + + res << [ + pstat.created_at.to_i*1000, + pstat.coef_busy_sq + ] + + # Rails.logger.debug "#{res.last[0]}" + + end + + res << [end_date.to_i*1000,pstats.last.coef_busy_sq] + # Rails.logger.debug "#{end_date.to_i*1000}" + + # Rails.logger.debug "<Pstat.parse_for_js_graph> pstat.last.created_at = #{pstats.last.created_at}, #{end_date}" + # res.sort! { |a,b| a[0] <=> b[0] } + res + + end + +=begin + def self._parse_for_js_dynamic_graph3_canvasjs(pstats) # res: [ # { # year # month @@ -634,9 +719,10 @@ val: pstat.coef_busy_sq } end res end +=end def self._calc_time_cut(first_created_at, time_now, start_date, end_date) # если подана нижняя граница диапазона и она позже, чем время создания самой первой площади объекта, # выравниваем период рассчета коэф-та по этой нижней границе диапазона \ No newline at end of file