示例#1
0
 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
示例#2
0
文件: test_misc.py 项目: yAoOw/odoo
    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), '')
示例#3
0
 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,
     }
示例#4
0
 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
示例#5
0
 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
示例#6
0
 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)
示例#9
0
 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()
示例#11
0
    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')
示例#12
0
    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), '')
示例#13
0
 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]),
           ),
     }
示例#14
0
    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,
     }
示例#16
0
 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,
     }
示例#17
0
        [(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
示例#18
0
    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')