def name_get(self): result = [] current_tz = self.env.user.tz or self._get_default_timezone() for planner in self: name = '/' if planner.patient_id and planner.professional_id and planner.date and planner.start and planner.end: #local_start = local_datetime(planner.start, current_tz) #local_end = local_datetime(planner.end, current_tz) name = ( planner.patient_id.name, planner.professional_id.display_name, planner.procedure_id.name, #planner.date.strftime('%d/%m/%Y'), format_date(self.env, planner.date, date_format='dd/MM/Y'), #local_start.strftime('%H:%M:%S'), #local_end.strftime('%H:%M:%S')) format_datetime(self.env, planner.start, tz=current_tz, dt_format='HH:mm:ss'), format_datetime(self.env, planner.end, tz=current_tz, dt_format='HH:mm:ss')) name = _( 'Appointment from %s with %s for %s on the %s from %s to %s' ) % name result.append((planner.id, name)) return result
def test_00_accepted_types(self): self.env.user.tz = 'Europe/Brussels' datetime_str = '2017-01-31 12:00:00' date_datetime = datetime.datetime.strptime(datetime_str, "%Y-%m-%d %H:%M:%S") date_date = date_datetime.date() date_str = '2017-01-31' time_part = datetime.time(16, 30, 22) self.assertEqual(misc.format_date(self.env, date_datetime), '01/31/2017') self.assertEqual(misc.format_date(self.env, date_date), '01/31/2017') self.assertEqual(misc.format_date(self.env, date_str), '01/31/2017') self.assertEqual(misc.format_date(self.env, ''), '') self.assertEqual(misc.format_date(self.env, False), '') self.assertEqual(misc.format_date(self.env, None), '') self.assertEqual(misc.format_datetime(self.env, date_datetime), 'Jan 31, 2017, 1:00:00 PM') self.assertEqual(misc.format_datetime(self.env, datetime_str), 'Jan 31, 2017, 1:00:00 PM') self.assertEqual(misc.format_datetime(self.env, ''), '') self.assertEqual(misc.format_datetime(self.env, False), '') self.assertEqual(misc.format_datetime(self.env, None), '') self.assertEqual(misc.format_time(self.env, time_part), '4:30:22 PM') self.assertEqual(misc.format_time(self.env, ''), '') self.assertEqual(misc.format_time(self.env, False), '') self.assertEqual(misc.format_time(self.env, None), '')
def _scheduled_date_no_delivery_window_match_msg(self): scheduled_date = self.scheduled_date formatted_scheduled_date = format_datetime(self.env, scheduled_date) partner = self.partner_id if partner.delivery_time_preference == "workdays": message = _("The scheduled date is {} ({}), but the partner is " "set to prefer deliveries on working days.").format( formatted_scheduled_date, scheduled_date.weekday()) else: delivery_windows_strings = [] for w in partner.get_delivery_windows().get(partner.id): delivery_windows_strings.append(" * {} ({})".format( w.display_name, partner.tz)) message = _( "The scheduled date is %s (%s), but the partner is " "set to prefer deliveries on following time windows:\n%s" % ( format_datetime(self.env, self.scheduled_date), self.env.context.get("tz"), "\n".join(delivery_windows_strings), )) return { "title": _("Scheduled date does not match partner's Delivery window preference." ), "message": message, }
def name_get(self): result = [] current_tz = self.env.user.tz or self._get_default_timezone() current_offset = datetime.datetime.now( pytz.timezone(current_tz)).utcoffset() for avail in self: name = '/' if avail.professional_id and avail.day: start = datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time()) end = start + datetime.timedelta( hours=avail.end) - current_offset start = start + datetime.timedelta( hours=avail.start) - current_offset name = (avail.professional_id.display_name, dict(self._fields['day'].selection)[avail.day], format_datetime(self.env, start, tz=current_tz, dt_format='HH:mm'), format_datetime(self.env, end, tz=current_tz, dt_format='HH:mm')) name = ('%s: %s %s - %s') % name result.append((avail.id, name)) return result
def open_at_date(self): tree_view_id = self.env.ref('stock.view_stock_product_tree').id form_view_id = self.env.ref( 'stock.product_form_view_procurement_button').id domain = [('type', '=', 'product')] product_id = self.env.context.get('product_id', False) product_tmpl_id = self.env.context.get('product_tmpl_id', False) if product_id: domain = expression.AND([domain, [('id', '=', product_id)]]) elif product_tmpl_id: domain = expression.AND( [domain, [('product_tmpl_id', '=', product_tmpl_id)]]) # We pass `to_date` in the context so that `qty_available` will be computed across # moves until date. action = { 'type': 'ir.actions.act_window', 'views': [(tree_view_id, 'tree'), (form_view_id, 'form')], 'view_mode': 'tree,form', 'name': _('Products'), 'res_model': 'product.product', 'domain': domain, 'context': dict(self.env.context, to_date=self.inventory_datetime), 'display_name': format_datetime(self.env, self.inventory_datetime) } return action
def _onchange_scheduled_date(self): self.ensure_one() if (not self.partner_id or self.partner_id.delivery_time_preference != "time_windows" or self.picking_type_id.code != "outgoing"): return p = self.partner_id if not p.is_in_delivery_window(self._planned_delivery_date()): delivery_windows_strings = [] for w in p.get_delivery_windows().get(p.id): delivery_windows_strings.append(" * {} ({})".format( w.display_name, self.partner_id.tz)) message = _( "The scheduled date is %s (%s), but the partner is " "set to prefer deliveries on following time windows:\n%s" % ( format_datetime(self.env, self.scheduled_date), self.env.context.get("tz"), "\n".join(delivery_windows_strings), )) return { "warning": { "title": _("Scheduled date does not match partner's Delivery window" " preference."), "message": message, } }
def format_value(value, env): if isinstance(value, tuple): return value[1] if isinstance(value, datetime): return format_datetime(env, value, dt_format='short') if isinstance(value, date): return format_date(env, value) return value
def _format_datetime(self, value, tz=False, dt_format="medium", lang_code=False): return misc.format_datetime(self._env, value, tz=tz, dt_format=dt_format, lang_code=lang_code)
def name_get(self): result = [] current_tz = self.env.user.tz or self._get_default_timezone() for spot in self: name = '/' if spot.professional_id and spot.date and spot.start and spot.end: name = (spot.professional_id.display_name, format_date(self.env, spot.date, date_format='dd/MM/Y'), format_datetime(self.env, spot.start, tz=current_tz, dt_format='HH:mm:ss'), format_datetime(self.env, spot.end, tz=current_tz, dt_format='HH:mm:ss')) name = ('%s: %s %s - %s') % name result.append((spot.id, name)) return result
def open_at_date(self): active_model = self.env.context.get('active_model') if active_model == 'stock.valuation.layer': action = self.env["ir.actions.actions"]._for_xml_id( "stock_account.stock_valuation_layer_action") action['domain'] = [('create_date', '<=', self.inventory_datetime), ('product_id.type', '=', 'product')] action['display_name'] = format_datetime(self.env, self.inventory_datetime) return action return super(StockQuantityHistory, self).open_at_date()
def test_01_code_and_format(self): date_str = '2017-01-31' lang = self.env['res.lang'] # Activate French and Simplified Chinese (test with non-ASCII characters) lang._activate_lang('fr_FR') lang._activate_lang('zh_CN') # -- test `date` # Change a single parameter self.assertEqual(misc.format_date(lang.with_context(lang='fr_FR').env, date_str), '31/01/2017') self.assertEqual(misc.format_date(lang.env, date_str, lang_code='fr_FR'), '31/01/2017') self.assertEqual(misc.format_date(lang.env, date_str, date_format='MMM d, y'), 'Jan 31, 2017') # Change 2 parameters self.assertEqual(misc.format_date(lang.with_context(lang='zh_CN').env, date_str, lang_code='fr_FR'), '31/01/2017') self.assertEqual(misc.format_date(lang.with_context(lang='zh_CN').env, date_str, date_format='MMM d, y'), u'1\u6708 31, 2017') self.assertEqual(misc.format_date(lang.env, date_str, lang_code='fr_FR', date_format='MMM d, y'), 'janv. 31, 2017') # Change 3 parameters self.assertEqual(misc.format_date(lang.with_context(lang='zh_CN').env, date_str, lang_code='en_US', date_format='MMM d, y'), 'Jan 31, 2017') # -- test `datetime` datetime_str = '2017-01-31 10:33:00' # Change languages and timezones self.assertEqual(misc.format_datetime(lang.with_context(lang='fr_FR').env, datetime_str, tz='Europe/Brussels'), '31 janv. 2017 à 11:33:00') self.assertEqual(misc.format_datetime(lang.with_context(lang='zh_CN').env, datetime_str, tz='America/New_York'), '2017\u5E741\u670831\u65E5 \u4E0A\u53485:33:00') # '2017年1月31日 上午5:33:00' # Change language, timezone and format self.assertEqual(misc.format_datetime(lang.with_context(lang='fr_FR').env, datetime_str, tz='America/New_York', dt_format='short'), '31/01/2017 05:33') self.assertEqual(misc.format_datetime(lang.with_context(lang='en_US').env, datetime_str, tz='Europe/Brussels', dt_format='MMM d, y'), 'Jan 31, 2017') # Check given `lang_code` overwites context lang self.assertEqual(misc.format_datetime(lang.env, datetime_str, tz='Europe/Brussels', dt_format='long', lang_code='fr_FR'), '31 janvier 2017 à 11:33:00 +0100') self.assertEqual(misc.format_datetime(lang.with_context(lang='zh_CN').env, datetime_str, tz='Europe/Brussels', dt_format='long', lang_code='en_US'), 'January 31, 2017 at 11:33:00 AM +0100') # -- test `time` time_part = datetime.time(16, 30, 22) time_part_tz = datetime.time(16, 30, 22, tzinfo=pytz.timezone('US/Eastern')) # 4:30 PM timezoned self.assertEqual(misc.format_time(lang.with_context(lang='fr_FR').env, time_part), '16:30:22') self.assertEqual(misc.format_time(lang.with_context(lang='zh_CN').env, time_part), '\u4e0b\u53484:30:22') # Check format in different languages self.assertEqual(misc.format_time(lang.with_context(lang='fr_FR').env, time_part, time_format='short'), '16:30') self.assertEqual(misc.format_time(lang.with_context(lang='zh_CN').env, time_part, time_format='short'), '\u4e0b\u53484:30') # Check timezoned time part self.assertIn(misc.format_time(lang.with_context(lang='fr_FR').env, time_part_tz, time_format='long'), ['16:30:22 -0504', '16:30:22 HNE']) self.assertEqual(misc.format_time(lang.with_context(lang='zh_CN').env, time_part_tz, time_format='full'), '\u5317\u7f8e\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\u0020\u4e0b\u53484:30:22') #Check timezone conversion in format_time self.assertEqual(misc.format_time(lang.with_context(lang='fr_FR').env, datetime_str, 'Europe/Brussels', time_format='long'), '11:33:00 +0100') self.assertEqual(misc.format_time(lang.with_context(lang='fr_FR').env, datetime_str, 'US/Eastern', time_format='long'), '05:33:00 HNE') # Check given `lang_code` overwites context lang self.assertEqual(misc.format_time(lang.with_context(lang='fr_FR').env, time_part, time_format='short', lang_code='zh_CN'), '\u4e0b\u53484:30') self.assertEqual(misc.format_time(lang.with_context(lang='zh_CN').env, time_part, time_format='medium', lang_code='fr_FR'), '16:30:22')
def test_00_accepted_types(self): datetime_str = '2017-01-31 12:00:00' date_datetime = datetime.datetime.strptime(datetime_str, "%Y-%m-%d %H:%M:%S") date_date = date_datetime.date() date_str = '2017-01-31' self.assertEqual(misc.format_date(self.env, date_datetime), '01/31/2017') self.assertEqual(misc.format_date(self.env, date_date), '01/31/2017') self.assertEqual(misc.format_date(self.env, date_str), '01/31/2017') self.assertEqual(misc.format_date(self.env, ''), '') self.assertEqual(misc.format_date(self.env, False), '') self.assertEqual(misc.format_date(self.env, None), '') self.assertEqual(misc.format_datetime(self.env, date_datetime), 'Jan 31, 2017, 1:00:00 PM') self.assertEqual(misc.format_datetime(self.env, datetime_str), 'Jan 31, 2017, 1:00:00 PM') self.assertEqual(misc.format_datetime(self.env, ''), '') self.assertEqual(misc.format_datetime(self.env, False), '') self.assertEqual(misc.format_datetime(self.env, None), '')
def _commitment_date_no_delivery_window_match_msg(self): ps = self.partner_shipping_id windows = ps.get_delivery_windows().get(ps.id) return { "title": _("Commitment date does not match shipping " "partner's Delivery time schedule preference."), "message": _("The delivery date is %s, but the shipping " "partner is set to prefer deliveries on following " "time windows:\n%s") % ( format_datetime(self.env, self.commitment_date), "\n".join([" * %s" % w.display_name for w in windows]), ), }
def _get_report_values(self, docids, data=None): partner_obj = self.env["res.partner"] student_ids = self.env.context.get("active_ids", []) students = partner_obj.browse(student_ids or docids) template = self.env.company.school_leaving_template if not template: raise MissingError("School Leaving Report Template is empty.") contents = {} for student in students: vals = { "date_today": fields.Date.context_today(self), } student_vals = student.read()[0] for key, value in student_vals.items(): vals["student_" + key] = value parent = student.family_ids.member_ids.filtered( lambda m: m.person_type == "parent") if parent: parent_vals = parent[0].read()[0] for key, value in parent_vals.items(): vals["parent_" + key] = value if student.grade_level_id: grade_level_vals = student.grade_level_id.read()[0] for key, value in grade_level_vals.items(): vals["grade_level_" + key] = value for key, value in vals.items(): new_value = str(value) if isinstance(value, date): new_value = format_date(self.env, value) elif isinstance(value, datetime): new_value = format_datetime(self.env, value) vals[key] = new_value try: contents[student.id] = template % vals except: raise ValidationError( "An error has occurred while formatting the school leaving report template." ) return { "doc_ids": student_ids, "doc_model": "res.partner", "docs": students, "contents": contents, }
def _scheduled_date_no_delivery_window_match_msg(self): delivery_windows_strings = [] for w in self.partner_id.get_delivery_windows().get(self.partner_id.id): delivery_windows_strings.append( " * {} ({})".format(w.display_name, self.partner_id.tz) ) message = _( "The scheduled date is %s (%s), but the partner is " "set to prefer deliveries on following time windows:\n%s" % ( format_datetime(self.env, self.scheduled_date), self.env.context.get("tz"), "\n".join(delivery_windows_strings), ) ) return { "title": _( "Scheduled date does not match partner's Delivery window preference." ), "message": message, }
def _commitment_date_no_delivery_window_match_msg(self): ps = self.partner_shipping_id commitment_date = self.commitment_date if ps.delivery_time_preference == "workdays": message = _("The delivery date is {} ({}), but the partner is " "set to prefer deliveries on working days.").format( commitment_date, commitment_date.strftime("%A")) else: windows = ps.get_delivery_windows().get(ps.id) message = _("The delivery date is %s, but the shipping " "partner is set to prefer deliveries on following " "time windows:\n%s") % ( format_datetime(self.env, self.commitment_date), "\n".join( [" * %s" % w.display_name for w in windows]), ) return { "title": _("Commitment date does not match shipping " "partner's Delivery time schedule preference."), "message": message, }
[(x['agreement_id'][0], x['agreement_id_count']) for x in rg_res]) for agreement in self: agreement.sale_count = mapped_data.get(agreement.id, 0) from odoo.tools.misc import formatLang # CAUTION: it is not the same method as in the report ! It is only for numbers, not dates. Proto: formatLang(env, value, digits=None, grouping=True, monetary=False, dp=False, currency_obj=False) price_unit_formatted = formatLang( self.with_context(lang=lang).env, self.price_unit, currency_obj=self.company_id.currency_id) qty_formatted = formatLang( self.with_context(lang=lang).env, self.qty_done, dp='Product Unit of Measure') Proto: format_date(env, value, lang_code=False, date_format=False) '%s' % format_date(self.env, self.date) # format_datetime is v13+ only format_datetime(env, value, tz=False, dt_format='medium', lang_code=False) '%s' % format_datetime(self.env, self.datetime_field) format_amount(env, amount, currency, lang_code=False) '%s' % format_amount(self.env, 12.42, invoice.currency_id) self.env['ir.config_parameter'].sudo().get_param('webkit_path', default='default_path') # WARNING: It the value of the param is True or False, get_param() will return # 'True' or 'False' as strings ! account_recordset = self.env['ir.property'].get('property_account_payable_id', 'res.partner') # v14+ test intrastat country : if country in self.env.ref('base.europe').country_ids
def test_01_code_and_format(self): date_str = '2017-01-31' lang = self.env['res.lang'] # Activate French and Simplified Chinese (test with non-ASCII characters) lang.search([('active', '=', False), ('code', 'in', ['fr_FR', 'zh_CN'])]).write({'active': True}) # -- test `date` # Change a single parameter self.assertEqual( misc.format_date(lang.with_context(lang='fr_FR').env, date_str), '31/01/2017') self.assertEqual( misc.format_date(lang.env, date_str, lang_code='fr_FR'), '31/01/2017') self.assertEqual( misc.format_date(lang.env, date_str, date_format='MMM d, y'), 'Jan 31, 2017') # Change 2 parameters self.assertEqual( misc.format_date(lang.with_context(lang='zh_CN').env, date_str, lang_code='fr_FR'), '31/01/2017') self.assertEqual( misc.format_date(lang.with_context(lang='zh_CN').env, date_str, date_format='MMM d, y'), u'1\u6708 31, 2017') self.assertEqual( misc.format_date(lang.env, date_str, lang_code='fr_FR', date_format='MMM d, y'), 'janv. 31, 2017') # Change 3 parameters self.assertEqual( misc.format_date(lang.with_context(lang='zh_CN').env, date_str, lang_code='en_US', date_format='MMM d, y'), 'Jan 31, 2017') # -- test `datetime` datetime_str = '2017-01-31 10:33:00' # Change languages and timezones self.assertEqual( misc.format_datetime(lang.with_context(lang='fr_FR').env, datetime_str, tz='Europe/Brussels'), '31 janv. 2017 à 11:33:00') self.assertEqual( misc.format_datetime(lang.with_context(lang='zh_CN').env, datetime_str, tz='America/New_York'), '2017\u5E741\u670831\u65E5 \u4E0A\u53485:33:00' ) # '2017年1月31日 上午5:33:00' # Change language, timezone and format self.assertEqual( misc.format_datetime(lang.with_context(lang='fr_FR').env, datetime_str, tz='America/New_York', dt_format='short'), '31/01/2017 05:33') self.assertEqual( misc.format_datetime(lang.with_context(lang='en_US').env, datetime_str, tz='Europe/Brussels', dt_format='MMM d, y'), 'Jan 31, 2017') # Check given `lang_code` overwites context lang self.assertEqual( misc.format_datetime(lang.env, datetime_str, tz='Europe/Brussels', dt_format='long', lang_code='fr_FR'), '31 janvier 2017 à 11:33:00 +0100') self.assertEqual( misc.format_datetime(lang.with_context(lang='zh_CN').env, datetime_str, tz='Europe/Brussels', dt_format='long', lang_code='en_US'), 'January 31, 2017 at 11:33:00 AM +0100')