def normalize(self, *args, **kwargs): """ Overrides base class method. Normalize aggregated list :return: """ if len(self.data) <= 1: return self.data self.data.reverse() range_size = (self.end_date - self.data[0].date).days normalized_register_records = [] current_register_record = None for i in range(0, range_size): current_date = self.data[0].date + relativedelta(days = i) register_record = filter(lambda x: x.date == current_date, self.data) if len(register_record) == 1: current_register_record = register_record[0] normalized_register_records.append( IAggregatable.aggregated_model( current_date, current_register_record.value ) ) return normalized_register_records[::-1]
def aggregate_by_days(self, payment_object, *args, **kwargs): """ Implementation :return: """ start_date = kwargs.get('start_date', None) or date.today() - relativedelta(months = 1) end_date = kwargs.get('end_date', None) or date.today() + relativedelta(days = 1) with connection.cursor() as c: c.execute( 'SELECT * FROM get_aggregated_poregisers(%s, %s, %s)', [payment_object.guid, start_date.isoformat(), end_date.isoformat()] ) register_records = [IAggregatable.aggregated_model(*row) for row in c.fetchall()] aggregated_model_list = self.AggregatedPORegisterModelList(register_records, start_date = start_date, end_date = end_date) return aggregated_model_list