app/models/c80_estate/pstat.rb in c80_estate-0.1.0.9 vs app/models/c80_estate/pstat.rb in c80_estate-0.1.0.10

- old
+ new

@@ -21,10 +21,15 @@ def self.busy_coef(prop_id: nil, atype_id: nil, start_date: nil, end_date: nil) # start_date: строка вида 2015-12-12 # Rails.logger.debug "<Pstat.busy_coef> prop_id = #{prop_id}, atype_id = #{atype_id}" result = {} + # если нет событий - не считаем busy_coef + if self.all.count == 0 + return result + end + # обозначим диапазон фильтрации first_created_at = Time.at(self.first.created_at) time_now = Time.now # если ничего не подано - просто выберем все занятые площади и поделим на все известные площади @@ -58,11 +63,10 @@ tt = _calc_free_busy_areas(pstats) free_areas_atnow = tt[:sum_free_areas] #*1.0/all_props.count #pstats.last.free_areas busy_areas_atnow = tt[:sum_busy_areas] #*1.0/all_props.count #pstats.last.busy_areas - graph_data = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) # защищаемся от деления на ноль if free_areas_atnow + busy_areas_atnow == 0 bcoef = 0.0 else @@ -73,52 +77,53 @@ # free_areas_count = Area.free_areas.count # busy_areas_count = Area.busy_areas.count result[:busy_coef] = sprintf "%.2f%", bcoef result[:comment] = "<abbr title='Период рассчёта занятости'>C #{ddd} по #{ tcut[:used_end_date_str] }</abbr>" - result[:abbr] = 'Показана занятость для ВСЕХ площадей ВСЕХ объектов недвижимости за указанный период' + result[:abbr] = 'Показана занятость для ВСЕХ площадей ВСЕХ объектов недвижимости в конце указанного периода' result[:props] = [ {tag: 'all_areas_count', val: "Площадей всего: #{free_areas_atnow + busy_areas_atnow}"}, {tag: 'free_areas_count', val: "Площадей свободно: #{free_areas_atnow}"}, {tag: 'busy_areas_count', val: "Площадей занято: #{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 result[:raw_props][:busy_areas_atnow] = busy_areas_atnow - result[:graph_dynamic] = graph_data + result[:graph_dynamic] = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) + 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] }" # Занятость в метрах 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) # защищаемся от деления на ноль if busy_areas_atnow_sq + free_areas_atnow_sq == 0 bcoef_sq = 0.0 else bcoef_sq = busy_areas_atnow_sq*1.0/(busy_areas_atnow_sq + free_areas_atnow_sq)*100.0 end result[:busy_coef_sq] = sprintf "%.2f%", bcoef_sq result[:comment_sq] = "<abbr title='Период рассчёта занятости в МЕТРАХ КВ'>C #{tcut[:used_start_date_str]} по #{tcut[:used_end_date_str]}</abbr>" - result[:abbr_sq] = 'Занятость объекта в МЕТРАХ за указанный период: число b/N, где b - кол-во свободных МЕТРОВ, N - всего МЕТРОВ КВ' + result[:abbr_sq] = 'Занятость объекта в МЕТРАХ в конце указанного периода: число b/N, где b - кол-во свободных МЕТРОВ, N - всего МЕТРОВ КВ' result[:props_sq] = [ {tag: 'all_areas_count_sq', val: "Кв.м. всего: #{busy_areas_atnow_sq + free_areas_atnow_sq}"}, {tag: 'free_areas_count_sq', val: "Свободных: #{free_areas_atnow_sq}"}, {tag: 'busy_areas_count_sq', val: "Занятых: #{busy_areas_atnow_sq}"} ] 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] = graph_data_sq + result[:graph_dynamic_sq] = _parse_for_js_dynamic_graph3_canvasjs(pstats.where(:atype_id => nil).ordered_by_created_at) + result[:graph_radial_sq] = _parse_for_js_radial_graph_sq(free_areas_atnow_sq, busy_areas_atnow_sq) # common result[:title] = 'Статистика - Все объекты недвижимости' # Rails.logger.debug "result ============= #{result}" @@ -216,11 +221,13 @@ bcoef = busy_areas_atnow*1.0 / (free_areas_atnow + busy_areas_atnow) * 100.0 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[:abbr] = 'Занятость объекта в конце указанного периода: число b/N, где b - кол-во свободных, N - всего площадей' + result[:graph_radial] = _parse_for_js_radial_graph(free_areas_atnow,busy_areas_atnow) + result[:graph_dynamic] = graph_data 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 @@ -244,11 +251,14 @@ bcoef_sq = busy_areas_atnow_sq*1.0/(busy_areas_atnow_sq + free_areas_atnow_sq)*100.0 end result[:busy_coef_sq] = sprintf "%.2f%", bcoef_sq result[:comment_sq] = "<abbr title='Период рассчёта занятости в МЕТРАХ КВ'>C #{used_start_date_str} по #{used_end_date_str}</abbr>" - result[:abbr_sq] = 'Занятость объекта в МЕТРАХ за указанный период: число b/N, где b - кол-во свободных МЕТРОВ, N - всего МЕТРОВ КВ' + result[:abbr_sq] = 'Занятость объекта в МЕТРАХ в конце указанного периода: число b/N, где b - кол-во свободных МЕТРОВ, N - всего МЕТРОВ КВ' + result[:graph_dynamic_sq] = graph_data_sq + result[:graph_radial_sq] = _parse_for_js_radial_graph_sq(free_areas_atnow_sq,busy_areas_atnow_sq) + result[:props_sq] = [ {tag: 'all_areas_count_sq', val: "Кв.м. всего: #{busy_areas_atnow_sq + free_areas_atnow_sq}"}, {tag: 'free_areas_count_sq', val: "Свободных: #{free_areas_atnow_sq}"}, {tag: 'busy_areas_count_sq', val: "Занятых: #{busy_areas_atnow_sq}"} ] @@ -260,13 +270,12 @@ # common result[:title] = "Статистика - Объект - #{property.title}" # result[:graph] = _parse_for_js_radial_graph(free_areas_atnow,busy_areas_atnow) - result[:graph_dynamic] = graph_data - result[:graph_dynamic_sq] = graph_data_sq + # if atype_id.present? # result[:title] += " (#{Atype.find(atype_id).title})" # end dc_str = property.areas.first.created_at.in_time_zone('Moscow').strftime('%Y/%m/%d') @@ -350,11 +359,10 @@ tt = _calc_free_busy_areas(pstats) free_areas_atnow = tt[:sum_free_areas] #*1.0/all_props.count #pstats.last.free_areas busy_areas_atnow = tt[:sum_busy_areas] #*1.0/all_props.count #pstats.last.busy_areas - graph_data = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) # 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}") @@ -365,11 +373,13 @@ bcoef = busy_areas_atnow*1.0 / (free_areas_atnow + busy_areas_atnow) * 100.0 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[:abbr] = 'Занятость объекта в конце указанного периода: число b/N, где b - кол-во свободных, N - всего площадей' + result[:graph_dynamic] = _parse_for_js_dynamic_graph_canvasjs(pstats.ordered_by_created_at) + 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 result[:raw_props][:busy_areas_atnow] = busy_areas_atnow @@ -387,11 +397,14 @@ bcoef_sq = busy_areas_atnow_sq*1.0/(busy_areas_atnow_sq + free_areas_atnow_sq)*100.0 end result[:busy_coef_sq] = sprintf "%.2f%", bcoef_sq result[:comment_sq] = "<abbr title='Период рассчёта занятости в МЕТРАХ КВ'>C #{used_start_date_str} по #{used_end_date_str}</abbr>" - result[:abbr_sq] = 'Занятость объекта в МЕТРАХ за указанный период: число b/N, где b - кол-во свободных МЕТРОВ, N - всего МЕТРОВ КВ' + result[:abbr_sq] = 'Занятость объекта в МЕТРАХ в конце указанного периода: число b/N, где b - кол-во свободных МЕТРОВ, N - всего МЕТРОВ КВ' + result[:graph_dynamic_sq] = graph_data_sq + result[:graph_radial_sq] = _parse_for_js_radial_graph_sq(free_areas_atnow_sq,busy_areas_atnow_sq) + result[:props_sq] = [ {tag: 'all_areas_count_sq', val: "Кв.м. всего: #{busy_areas_atnow_sq + free_areas_atnow_sq}"}, {tag: 'free_areas_count_sq', val: "Свободных: #{free_areas_atnow_sq}"}, {tag: 'busy_areas_count_sq', val: "Занятых: #{busy_areas_atnow_sq}"} ] @@ -402,13 +415,10 @@ result[:raw_props_sq][:busy_areas_atnow_sq] = busy_areas_atnow_sq # common result[:title] = "Статистика - Объекты - Фильтр по типу площади '#{ Atype.find(atype_id).title }'" - # result[:graph] = _parse_for_js_radial_graph(free_areas_atnow,busy_areas_atnow) - result[:graph_dynamic] = graph_data - result[:graph_dynamic_sq] = graph_data_sq # if atype_id.present? # result[:title] += " (#{Atype.find(atype_id).title})" # end @@ -502,32 +512,38 @@ end end def self._parse_for_js_radial_graph(free_areas_atnow, busy_areas_atnow) - # res = [ - # ['Year', 'Sales', 'Expenses'], - # ['2013', 1000, 400], - # ['2014', 1170, 460], - # ['2015', 660, 1120], - # ['2016/12/12', 1030, 540] - # - # ] - # [ - # ['', ''], - # ['Свободно', 11], - # ['Занято', 2] - # ] + # data: + # [ + # { y: 6, legendText:"", label: "Площадей свободно" }, + # { y: 4, legendText:"", label: "Площадей занято" } + # ] - res = [['', '']] - res << ['Свободно', free_areas_atnow] - res << ['Занято', busy_areas_atnow] - Rails.logger.debug "<_parse_for_js_radial_graph> res: #{res}" + res = [] + res << {label: 'Площадей свободно', y: free_areas_atnow, legendText: ''} + res << {label: 'Площадей занято', y: busy_areas_atnow, legendText: ''} + # Rails.logger.debug "<_parse_for_js_radial_graph> res: #{res}" res end + def self._parse_for_js_radial_graph_sq(free_areas_atnow_sq, busy_areas_atnow_sq) + # data: + # [ + # { y: 6, legendText:"", label: "Метров свободно" }, + # { y: 4, legendText:"", label: "Метров занято" } + # ] + + res = [] + res << {label: 'Метров свободно', y: free_areas_atnow_sq, legendText: ''} + res << {label: 'Метров занято', y: busy_areas_atnow_sq, legendText: ''} + res + + end + def self._parse_for_js_dynamic_graph_chartjs(pstats) # res = { # labels: ['2016/12/22',...] # points: [12,13,...] @@ -663,11 +679,13 @@ sum_free_areas = 0 sum_busy_areas = 0 all_props = Property.all all_props.each do |prop| ppstats = pstats.where(:property_id => prop.id).ordered_by_created_at.last - sum_free_areas += ppstats.free_areas - sum_busy_areas += ppstats.busy_areas + if ppstats.present? + sum_free_areas += ppstats.free_areas + sum_busy_areas += ppstats.busy_areas + end end { sum_free_areas:sum_free_areas, sum_busy_areas:sum_busy_areas } \ No newline at end of file