AttributeError: у объекта 'datetime.date' нет атрибута 'hour' при создании опции - сгруппировать по часам - PullRequest
0 голосов
/ 18 марта 2020

Я использую odoo8 и хочу создать группу опций по часам, я знаю, что мне не следует связываться с основным кодом odoo, а просто добавить в строки (я надеюсь, что так), я проверяю «pivot by hour» модуль V10 и там добавлены те же две строки.

в addons \ point_of_sale \ report \ pos_order_report_view. xml Я добавил:

<filter string="Order Hour" context="{'group_by':'date:hour'}" help="Hour of order date"/> 

и в server \ openerp \ modules.py В методе _read_group_process_groupby () я добавил две строки:

def _read_group_process_groupby(self, gb, query, context):

   split = gb.split(':')
   field_type = self._fields[split[0]].type
   gb_function = split[1] if len(split) == 2 else None
   temporal = field_type in ('date', 'datetime')
   tz_convert = field_type == 'datetime' and context.get('tz') in pytz.all_timezones
   qualified_field = self._inherits_join_calc(self._table, split[0], query)
   if temporal:
       display_formats = {
           'hour': 'HH:mm dd MMM yyyy',                        ###### added by me
           'day': 'dd MMM yyyy',
           'week': "'W'w YYYY", 
           'month': 'MMMM yyyy',
           'quarter': 'QQQ yyyy',
           'year': 'yyyy',
       }
   time_intervals = {
       'hour': dateutil.relativedelta.relativedelta(hours=1),  ###### added by me
       'day': dateutil.relativedelta.relativedelta(days=1),
       'week': datetime.timedelta(days=7),
       'month': dateutil.relativedelta.relativedelta(months=1),
       'quarter': dateutil.relativedelta.relativedelta(months=3),
       'year': dateutil.relativedelta.relativedelta(years=1)
   }
   if tz_convert:
           qualified_field = "timezone('%s', timezone('UTC',%s))" % (context.get('tz', 'UTC'), 
qualified_field)
   qualified_field = "date_trunc('%s', %s)" % (gb_function or 'month', qualified_field)
   if field_type == 'boolean':
       qualified_field = "coalesce(%s,false)" % qualified_field
   return {
       'field': split[0],
       'groupby': gb,
       'type': field_type,
       'display_format': display_formats[gb_function or 'month'] if temporal else None,
       'interval': time_intervals[gb_function or 'month'] if temporal else None,
       'tz_convert': tz_convert,
       'qualified_field': qualified_field
   }

весь обратный след выглядит следующим образом:

enter image description here

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

В models.py (с путем: server / openerp) в методе _read_group_format_result

 .format_date(

необходимо изменить на

 .format_datetime(
0 голосов
/ 18 марта 2020

Убедитесь, что типы, которые вы передаете в значение, совпадают с типами, для которых вы индексировали.

Вы передаете значение, которое является 'datetime.date' и этим Return дата объект с тем же годом, месяцем и днем. Нажмите здесь

Вы можете изменить его на datetime.time ()

Спасибо

...