def vodb_booking_overview(self, compute_local_sum=False, compute_live=False): # the aim at first is to start draw grid / sheet using div tags instead of a table. overview_live_o = getBookingOverview(holly_couch, None, None, reduce=False) used_dates, used_times = self.compute_used_dates_and_times(overview_live_o) used_dates_keys = used_dates.keys() used_dates_keys.sort() header_dates = used_dates_keys # try and extend dates min_date = header_dates[0] max_date = header_dates[len(header_dates)-1] header_dates = dateRange(min_date, max_date, format='%Y-%m-%d') header_times = vodb_live_times #...computing the vgroups we are looking for vgroup_ids = self.getVisitingGroupIdsOfViewSet(overview_live_o) #...create booking for all summary groups summary_vgroups = self.makeSummaryVGroups(vodb_live_times_options, vodb_status_map) #...iterating through reduced result set should give the data we need live_summaries_rows = getBookingOverview(holly_couch, None, None, reduce=True) self.computeLiveSummaries(live_summaries_rows, summary_vgroups) #...now that we have populated the dict-dict, we need to compute the date-range self.computeDateRangeOfSummaryVGroup(summary_vgroups, vodb_live_times_options, vodb_status_map) vgroups = list() for tmp_id in vgroup_ids.keys(): tmp_vgroup = holly_couch[tmp_id] tmp_vgroup.all_values_zero = dict(indoor=True, outdoor=True, daytrip=True) formated_dates = dateRange(tmp_vgroup['from_date'], tmp_vgroup['to_date'], format='%Y-%m-%d') tmp_vgroup['date_range'] = formated_dates live_computed_by_date = dict() for tmp_live_row in tmp_vgroup['vodb_live_computed']: for k in vodb_live_times_options: tmp_comp_key = self.getCompKey(k, tmp_live_row) tmp_value = tmp_live_row[k] live_computed_by_date[tmp_comp_key] = tmp_value if tmp_value != '0' and tmp_value != 0: tmp_vgroup.all_values_zero[k] = False tmp_vgroup['live_computed_by_date'] = live_computed_by_date vgroups.append(tmp_vgroup) vgroups.sort(self.fn_cmp_vgroups_on_date) return dict(header_dates=header_dates, header_times=header_times, vgroups=vgroups, bokn_status_map=bokn_status_map, vodb_status_map=vodb_status_map, summary_vgroups=summary_vgroups)
def vodb_eat_overview(self, compute_local_sum=False, compute_live=False): if compute_live: overview_live_o = getBookingOverview(holly_couch, None, None, reduce=False) else: overview_live_o = list() overview_eat_o = getBookingEatOverview(holly_couch, None, None, reduce=False) overview_value_map = dict() vodb_statuses = [-100, -10, 0, 5, 10, 20, 50] used_vgroup_ids = dict() for tmp_status in vodb_statuses: used_vgroup_ids[tmp_status] = dict() for row in list(overview_live_o) + list(overview_eat_o): tmp_status = row.key[2] tmp_id = row.id if not used_vgroup_ids[tmp_status].has_key(tmp_id): used_vgroup_ids[tmp_status][tmp_id] = holly_couch[tmp_id] overview_value_map['%s:%s:%s:%s' % (row.id, row.key[0], row.key[1], row.key[3])] = row.value if compute_local_sum: try: overview_value_map['%s:%s:%s:%s' % (row.id, row.key[0], row.key[1], 'SUM')] = overview_value_map.get('%s:%s:%s:%s' % (row.id, row.key[0], row.key[1], 'SUM'),0)+int(row.value) except ValueError: pass except TypeError: pass used_dates, used_times = self.compute_used_dates_and_times(list(overview_live_o) + list(overview_eat_o)) status_level_overview_o = getBookingOverview(holly_couch, None, None, reduce=True) status_level_eat_overview = getBookingEatOverview(holly_couch, None, None, reduce=True) #...copy paste! for row in list(status_level_overview_o) + list(status_level_eat_overview): tmp_status = row.key[2] tmp_id = 'sum.%d' % tmp_status log.debug('tmp_id='+str(tmp_id)) if not used_vgroup_ids[tmp_status].has_key(tmp_id): tmp_o = DataContainer() tmp_o.id=tmp_id tmp_o.name='summa for %d' % tmp_status tmp_o.boknr='' tmp_o.to_date='' tmp_o.vodbstatus = tmp_status tmp_o.from_date = '3000-00-00' used_vgroup_ids[tmp_status][tmp_id] = tmp_o overview_value_map['%s:%s:%s:%s' % (tmp_id, row.key[0], row.key[1], row.key[3])] = row.value if compute_local_sum: try: overview_value_map['%s:%s:%s:%s' % (tmp_id, row.key[0], row.key[1], 'SUM')] = overview_value_map.get('%s:%s:%s:%s' % (tmp_id, row.key[0], row.key[1], 'SUM'),0)+int(row.value) except ValueError: pass #...build a list of dates, starting with headers 'status' and 'vgroup' if compute_live: times = vodb_live_times + vodb_eat_times else: times = vodb_eat_times header_block = [(t,1) for t in times] header_block_len = len(header_block) dates = used_dates.keys() dates.sort() header_dates = [(h, header_block_len) for h in dates] #...check if any date is missing #...add header to dates vgroup_header = [('status',1), ('group',1),('date',1),('opt',1)] header_dates = vgroup_header + header_dates header_times = used_times.keys() #...cheat. header_times = [('',1)] * len(vgroup_header) + header_block * len(used_dates.keys()) date_colspan = len(header_block) if compute_local_sum: row_choices = vodb_live_times_options + ['SUM'] else: row_choices = vodb_live_times_options row_span = len(row_choices) #.......................................................... #...Each vgroup can be represented as # [(status,4), (name,4), (refnr,4), (opt1,1) ] + fm/inne + em/inne + kvall/inne + fru/inne + lu/inne + midd/inne + kvall/inne * dates vgroups = [] for tmp_status in vodb_statuses: tmp_used_vgroups = used_vgroup_ids[tmp_status].values() tmp_used_vgroups.sort(self.fnCmpSortOnFromDate) for tmp_vgroup in tmp_used_vgroups: rowspan = len(row_choices) for tmp_opt in row_choices: date_opts = [] for d in dates: for t in times: if tmp_opt not in ['fm','em','evening']: if t == 'daytrip': t = 'own' date_opts.append('%s:%s:%s:%s' % (tmp_vgroup.id, d, t, tmp_opt)) vgroups.append( (tmp_vgroup, tmp_opt, date_opts, rowspan ) ) if rowspan > 1: rowspan=0 return dict(header_dates=header_dates, header_times=header_times, row_choices=row_choices, vgroup_opts=vgroups, values=overview_value_map)