Example #1
0
 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)
Example #2
0
    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)