예제 #1
0
 def _compute_date_begin_tz(self):
     if self.date_begin:
         self.date_begin_located = format_tz(
             self.with_context(use_babel=True).env,
             self.date_begin,
             tz=self.date_tz)
     else:
         self.date_begin_located = False
예제 #2
0
 def _compute_date_end_tz(self):
     if self.date_end:
         self.date_end_located = format_tz(self.with_context({
             'use_babel':
             True
         }).env,
                                           self.date_end,
                                           tz=self.date_tz)
     else:
         self.date_end_located = False
예제 #3
0
 def get_date_range_str(self):
     self.ensure_one()
     today = fields.Datetime.from_string(fields.Datetime.now())
     event_date = fields.Datetime.from_string(self.event_begin_date)
     diff = (event_date.date() - today.date())
     if diff.days <= 0:
         return _('today')
     elif diff.days == 1:
         return _('tomorrow')
     elif (diff.days < 7):
         return _('in %d days') % (diff.days, )
     elif (diff.days < 14):
         return _('next week')
     elif event_date.month == (today + relativedelta(months=+1)).month:
         return _('next month')
     else:
         return _('on ') + format_tz(self.with_context({'use_babel': True}).env, self.event_begin_date, tz=self.event_id.date_tz or 'UTC')
예제 #4
0
 def get_date_range_str(self):
     self.ensure_one()
     today = fields.Datetime.from_string(fields.Datetime.now())
     event_date = fields.Datetime.from_string(self.event_begin_date)
     diff = (event_date.date() - today.date())
     if diff.days == 0:
         return _('Today')
     elif diff.days == 1:
         return _('Tomorrow')
     elif event_date.isocalendar()[1] == today.isocalendar()[1]:
         return _('This week')
     elif today.month == event_date.month:
         return _('This month')
     elif event_date.month == (today + relativedelta(months=+1)):
         return _('Next month')
     else:
         return format_tz(self.env, self.event_begin_date, tz='UTC', format='%Y%m%dT%H%M%SZ')
예제 #5
0
파일: event.py 프로젝트: ADS101/odoo
 def get_date_range_str(self):
     self.ensure_one()
     today = fields.Datetime.from_string(fields.Datetime.now())
     event_date = fields.Datetime.from_string(self.event_begin_date)
     diff = (event_date.date() - today.date())
     if diff.days == 0:
         return _('Today')
     elif diff.days == 1:
         return _('Tomorrow')
     elif event_date.isocalendar()[1] == today.isocalendar()[1]:
         return _('This week')
     elif today.month == event_date.month:
         return _('This month')
     elif event_date.month == (today + relativedelta(months=+1)):
         return _('Next month')
     else:
         return format_tz(self.env, self.event_begin_date, tz='UTC', format='%Y%m%dT%H%M%SZ')
예제 #6
0
파일: event.py 프로젝트: RoganW/odoo
 def get_date_range_str(self):
     self.ensure_one()
     today = fields.Datetime.from_string(fields.Datetime.now())
     event_date = fields.Datetime.from_string(self.event_begin_date)
     diff = (event_date.date() - today.date())
     if diff.days <= 0:
         return _('today')
     elif diff.days == 1:
         return _('tomorrow')
     elif (diff.days < 7):
         return _('in %d days') % (diff.days, )
     elif (diff.days < 14):
         return _('next week')
     elif event_date.month == (today + relativedelta(months=+1)).month:
         return _('next month')
     else:
         return _('on ') + format_tz(self.with_context({'use_babel': True}).env, self.event_begin_date, tz=self.event_id.date_tz or 'UTC')
예제 #7
0
파일: event.py 프로젝트: anybox/odoo
    def get_date_range_str(self):
        self.ensure_one()
        today = fields.Datetime.from_string(fields.Datetime.now())
        event_date = fields.Datetime.from_string(self.event_begin_date)

        if today.month == event_date.month:
            if event_date.day == today.day:
                return _('Today')
            elif event_date.day - today.day == 1:
                return _('Tomorrow')
            elif event_date.isocalendar()[1] == today.isocalendar()[1]:
                return _('This week')
            else:
                return _('This month')
        elif event_date.month - today.month == 1:
            return _('Next month')
        else:
            return format_tz(self.event_begin_date, tz='UTC', format='%Y%m%dT%H%M%SZ')
예제 #8
0
    def get_date_range_str(self):
        self.ensure_one()
        today = fields.Datetime.from_string(fields.Datetime.now())
        event_date = fields.Datetime.from_string(self.event_begin_date)

        if today.month == event_date.month:
            if event_date.day == today.day:
                return _('Today')
            elif event_date.day - today.day == 1:
                return _('Tomorrow')
            elif event_date.isocalendar()[1] == today.isocalendar()[1]:
                return _('This week')
            else:
                return _('This month')
        elif event_date.month - today.month == 1:
            return _('Next month')
        else:
            return format_tz(self.event_begin_date, tz='UTC', format='%Y%m%dT%H%M%SZ')
예제 #9
0
    def prepare_and_send(self, model, partner_ids, template_id, res_id, composition_mode='mass_mail'):
        """
        Prepare the message then send it.

        @param model: string, model name
        @param partner_ids: int list, ids of message receivers
        @param template_id: int, id of the email template
        @param res_id: int, id of the record from where the email is sent
        """
        template = self.env['mail.template'].browse(template_id)
        # usefull to get template language
        ctx = {'mail_auto_delete': template.auto_delete,
               'mail_notify_user_signature': False,
               'tpl_partners_only': False}
        format_tz = lambda dt, tz=False, format=False: mail_template.format_tz(self._model, self._cr, self._uid,
                                                                               dt, tz, format, self._context)
        arg = {
            'object': self.env[model].browse(res_id),
            'user': self.env.user,
            'ctx': ctx,
            'format_tz': format_tz,
        }
        lang = mail_template.mako_template_env.from_string(tools.ustr(template.lang)).render(arg)

        message = self.with_context(active_ids=None).create({
            'model': model,
            'composition_mode': composition_mode,
            'partner_ids': [(6, 0, filter(None, partner_ids or []))],
            'template_id': template_id,
            'notify': True,
            'res_id': res_id,
        })
        message_lang = message.with_context(lang=lang) if lang and lang != 'False' else message
        value = message_lang.onchange_template_id(template_id, composition_mode, model, res_id)['value']
        if value.get('attachment_ids') and (composition_mode == 'comment' or not template.report_template):
            value['attachment_ids'] = [(4, attachment_id) for attachment_id in value['attachment_ids']]
        message.write(value)
        message.send_mail()
예제 #10
0
파일: event.py 프로젝트: RoganW/odoo
 def _compute_date_end_tz(self):
     if self.date_end:
         self.date_end_located = format_tz(self.with_context({'use_babel': True}).env, self.date_end, tz=self.date_tz)
     else:
         self.date_end_located = False
예제 #11
0
 def format_tz(dt, tz=False, format=False):
     return mail_template.format_tz(self._model, self._cr, self._uid,
                                    dt, tz, format, self._context)
예제 #12
0
파일: event.py 프로젝트: 10537/odoo
 def _compute_date_begin_tz(self):
     if self.date_begin:
         self.date_begin_located = format_tz(self.with_context(use_babel=True).env, self.date_begin, tz=self.date_tz)
     else:
         self.date_begin_located = False
예제 #13
0
    def render_template(self,
                        template_txt,
                        model,
                        res_ids,
                        post_process=False):
        """ Render the given template text, replace mako expressions
        ``${expr}`` with the result of evaluating these expressions
        with an evaluation context containing:

         - ``user``: browse_record of the current user
         - ``object``: record of the document record this mail is related to
         - ``context``: the context passed to the mail composition wizard

        :param str template_txt: the template text to render
        :param str model: model name of the document record
            this mail is related to.
        :param int res_ids: list of ids of document records
            those mails are related to.
        """
        multi_mode = True
        if isinstance(res_ids, (int, long)):
            multi_mode = False
            res_ids = [res_ids]

        results = dict.fromkeys(res_ids, u"")

        # try to load the template
        try:
            mako_env = mako_safe_template_env if self.env.context.get('safe') \
                else mako_template_env
            template = mako_env.from_string(tools.ustr(template_txt))
        except Exception:
            _logger.info("Failed to load template %r",
                         template_txt,
                         exc_info=True)
            return multi_mode and results or results[res_ids[0]]

        # prepare template variables
        # filter to avoid browsing [None]
        records = self.env[model].browse(list(filter(None, res_ids)))
        res_to_rec = dict.fromkeys(res_ids, None)
        for record in records:
            res_to_rec[record.id] = record
        variables = {
            'format_date':
            lambda date, format=False, context=self._context: format_date(
                self.env, date, format),
            'format_tz':
            lambda dt, tz=False, format=False, context=self._context:
            format_tz(self.env, dt, tz, format),
            'format_amount':
            lambda amount, currency, context=self._context: format_amount(
                self.env, amount, currency),
            'format_numeric':
            lambda value, column, options=None: self.format_numeric(
                value, column, options),  # Added by Smile
            'user':
            self.env.user,
            'ctx':
            self._context,  # context kw would clash with mako internals
        }
        for res_id, record in res_to_rec.items():
            variables['object'] = record
            try:
                render_result = template.render(variables)
            except Exception:
                _logger.info("Failed to render template %r using values %r" %
                             (template, variables),
                             exc_info=True)
                raise UserError(
                    _("Failed to render template %r using values %r") %
                    (template, variables))
            if render_result == u"False":
                render_result = u""
            results[res_id] = render_result

        if post_process:
            for res_id, result in results.items():
                results[res_id] = self.render_post_process(result)

        return multi_mode and results or results[res_ids[0]]
예제 #14
0
    def get_page_by_category(self, category, content=1):
        res = {'"code"': 0, '"msg"': '""'}
        DocumentPage = self.env['document.page']
        if not category:
            res['"msg"'] = '"Category could not be empty"'
            return res

        if type(category) is int:
            category_id = DocumentPage.browse(category)
        else:
            category_id = DocumentPage.search([('name', '=', category),
                                               ('partner_id', '=', False)])
        if not category_id:
            res['"msg"'] = '"Category not exists"'
            return res
        page_ids = DocumentPage.search([('parent_id', '=', category_id.id),
                                        ('partner_id', '=', False)],
                                       order='create_date desc')
        data = []
        try:
            for page in page_ids:
                item = {}
                item.update({
                    '"id"':
                    page.id or '""',
                    '"name"':
                    '\"' + (page.name or '') + '\"',
                    '"create_date"':
                    '\"' +
                    (page.create_date and format_tz(self.env,
                                                    page.create_date,
                                                    tz=self.env.user.tz,
                                                    format='%Y-%m-%d %H:%M:%S')
                     or '') + '\"',
                    '"write_date"':
                    '\"' +
                    (page.write_date and format_tz(self.env,
                                                   page.write_date,
                                                   tz=self.env.user.tz,
                                                   format='%Y-%m-%d %H:%M:%S')
                     or '') + '\"',
                    '"write_uid"':
                    '\"' + (page.write_uid and page.write_uid.name or '') +
                    '\"',
                    '"summary"':
                    '\"' + (page.summary or '') + '\"',
                })
                if content == 1:
                    item.update({
                        '"content"':
                        '\"' + (page.content and str(
                            page.content.replace("\'", "\\\'").replace(
                                "\"", "\\\"").encode('utf-8')) or '') + '\"'
                    })
                data.append(item)
        except Exception as e:
            _logger.error("Error: %s" % (e.message or repr(e)))
            return {
                '"code"': 0,
                '"msg"': '"Can not get content: %s"' % (e.message or repr(e))
            }
        return {'"code"': 1, '"msg"': '"Successfully"', '"data"': data}
예제 #15
0
    def _get_dict_values(self, o, objects):
        if not o:
            return {}
        lang_obj = self.env['res.lang']

        order = objects['order']
        invoice = objects['invoice']
        partner = objects['partner']
        address = objects['address']
        address_pose = objects['address_pose']
        cal_event = objects['cal_event']

        lang_code = self._context.get('lang', partner.lang)
        lang = lang_obj.search([('code', '=', lang_code or 'fr_FR')])

        values = (
            ('amount_total', o, ''),
            ('origin', o, ''),
            ('date_order', order or o, ''),
            ('confirmation_date', order or o, ''),
            ('date_invoice', invoice or o, ''),
            ('residual', invoice or o, ''),
            ('number', invoice, ''),
            ('user_id', o, ''),
            ('objet', o, ''),
        )

        res = {
            key: getattr(obj, key, default) or default
            for key, obj, default in values
        }

        res['date_confirm_order'] = res['confirmation_date']
        del res['confirmation_date']
        res['user_name'] = res['user_id'] and res['user_id'].name
        del res['user_id']

        if cal_event:
            date_event = fields.Datetime.from_string(cal_event.start)
            date_event = fields.Datetime.context_timestamp(self, date_event)

        date_format = lang.date_format.encode('utf-8')
        res.update({
            'c_title':
            address.title.name or 'Madame, Monsieur',
            'c_name':
            address.name or (address.parent_id and address.parent_id.name)
            or '',
            'c_note':
            partner.comment,
            'c_street':
            address.street or '',
            'c_street2':
            address.street2 or '',
            'c_zip':
            address.zip or '',
            'c_city':
            address.city or '',
            'c_phone':
            address.phone or '',
            'c_mobile':
            address.mobile or '',
            'c_fax':
            address.fax or '',
            'c_email':
            address.email or '',
            'c_adr_intervention_name':
            address_pose.name or address_pose.parent_id.name or '',
            'c_adr_intervention_street':
            address_pose.street or '',
            'c_adr_intervention_street2':
            address_pose.street2 or '',
            'c_adr_intervention_city':
            address_pose.city or '',
            'c_adr_intervention_zip':
            address_pose.zip or '',
            'c_rdv_date':
            cal_event and date_event.strftime(date_format) or '',
            'c_rdv_heure':
            cal_event and date_event.strftime('%H:%M') or '',
            'date':
            time.strftime(date_format),
            'order_name':
            order and order.name or '',
        })

        for date_field in ('date_order', 'date_confirm_order', 'date_invoice'):
            if not res[date_field]:
                continue

            date = fields.Datetime.from_string(res[date_field])
            date = date.strftime(date_format)
            res[date_field] = date

        # Pour rétrocompatibilité
        res.update({
            'c_adr_pose_name': res['c_adr_intervention_name'],
            'c_adr_pose_street': res['c_adr_intervention_street'],
            'c_adr_pose_street2': res['c_adr_intervention_street2'],
            'c_adr_pose_city': res['c_adr_intervention_city'],
            'c_adr_pose_zip': res['c_adr_intervention_zip'],
        })

        res.update(objects)
        res.update({
            'o':
            o,
            'format_date':
            lambda date, format=False, context=self._context: format_date(
                self.env, date, format),
            'format_tz':
            lambda dt, tz=False, format=False, context=self._context:
            format_tz(self.env, dt, tz, format),
            'format_amount':
            lambda amount, currency, context=self._context: format_amount(
                self.env, amount, currency),
            'user':
            self.env.user,
            'ctx':
            self._context,  # context kw would clash with mako internals
        })
        return res
예제 #16
0
    def _render_template(self, template_txt, model, res_ids, post_process=False):
        """Override to add website to context"""
        multi_mode = True
        if isinstance(res_ids, pycompat.integer_types):
            multi_mode = False
            res_ids = [res_ids]

        results = dict.fromkeys(res_ids, u"")

        # try to load the template
        try:
            mako_env = mako_safe_template_env if self.env.context.get('safe') else mako_template_env
            template = mako_env.from_string(tools.ustr(template_txt))
        except Exception:
            _logger.info("Failed to load template %r", template_txt, exc_info=True)
            return multi_mode and results or results[res_ids[0]]

        # prepare template variables
        records = self.env[model].browse(it for it in res_ids if it)  # filter to avoid browsing [None]
        res_to_rec = dict.fromkeys(res_ids, None)
        for record in records:
            res_to_rec[record.id] = record

        variables = {
            'format_date': lambda date, format=False, context=self._context: format_date(self.env, date, format),
            'format_tz': lambda dt, tz=False, format=False, context=self._context: format_tz(self.env, dt, tz, format),
            'format_amount': lambda amount, currency, context=self._context: format_amount(self.env, amount, currency),
            'user': self.env.user,
            'ctx': self._context,  # context kw would clash with mako internals
        }

        # [NEW] Check website and company context
        company = self.env['res.company']  # empty value

        company_id = self.env.context.get('force_company')
        if company_id:
            company = self.env['res.company'].sudo().browse(company_id)

        if self.env.context.get('website_id'):
            website = self.env['website'].browse(self.env.context.get('website_id'))
        else:
            website = self.env.user.backend_website_id

        for res_id, record in res_to_rec.items():
            record_company = company
            if not record_company:
                if hasattr(record, 'company_id') and record.company_id:
                    record_company = record.company_id

            record_website = website
            if hasattr(record, 'website_id') and record.website_id:
                record_website = record.website_id

            if record_company and record_website \
               and record_website.company_id != company:
                # company and website are incompatible, so keep only company
                record_website = self.env['website']  # empty value

            record_context = dict(force_company=record_company.id, website_id=record_website.id)
            variables['object'] = record.with_context(**record_context)
            variables['website'] = record_website

            try:
                render_result = template.render(variables)
            except Exception:
                _logger.info("Failed to render template %r using values %r" % (template, variables), exc_info=True)
                raise UserError(_("Failed to render template %r using values %r") % (template, variables))
            if render_result == u"False":
                render_result = u""

            if post_process:
                render_result = self.with_context(**record_context).render_post_process(render_result)

            results[res_id] = render_result

        return multi_mode and results or results[res_ids[0]]
예제 #17
0
파일: cron.py 프로젝트: kidovn/hoanghung
    def method_direct_trigger_demo(self):
        # _logger.info("TESTTT------ %d"%date.today().weekday())
        if date.today().weekday() == 6:
            return
        reload(sys)
        sys.setdefaultencoding("utf-8")

        template = self.env['mail.template'].search([('name', '=',
                                                      'REPORT TEMPLATE')])[0]

        variables = {
            'format_date':
            lambda date, format=False, context=self._context: mail_template.
            format_date(self.env, date, format),
            'format_tz':
            lambda dt, tz=False, format=False, context=self._context:
            mail_template.format_tz(self.env, dt, tz, format),
            'format_amount':
            lambda amount, currency, context=self._context: mail_template.
            format_amount(self.env, amount, currency),
            'user':
            self.env.user,
            'ctx':
            self._context,  # context kw would clash with mako internals
        }

        headers = []
        measures = []
        if not self._context:
            self._context = {'lang': u'vi_VN'}
        if self.report:
            # _logger.info("DO NOTHING %s"%self.report.context.replace("u\\'",'"').replace("'",'"').replace('u"','"'))
            context = json.loads(
                self.report.context.replace("u\\'",
                                            '"').replace("'", '"').replace(
                                                'u"', '"'))

            active_measures = None
            if 'measures' in context:
                active_measures = context['measures']
            elif 'pivot_measures' in context:
                active_measures = context['pivot_measures']
            if active_measures != None:
                fields_model = self.env[self.report.model_id].fields_get()
                groupby = None
                if 'group_by' in context:
                    groupby = context['group_by']
                elif 'pivot_row_groupby' in context:
                    groupby = context['pivot_row_groupby']
                col_groupby = None
                if 'col_group_by' in context:
                    col_groupby = context['col_group_by']
                elif 'pivot_column_groupby' in context:
                    col_groupby = context['pivot_column_groupby']

                fields = list(active_measures)
                if groupby is not None:
                    fields.extend(
                        x.split(':')[0] for x in groupby if x not in fields)
                if col_groupby is not None:
                    fields.extend(
                        x.split(':')[0] for x in col_groupby
                        if x not in fields)
                datas = []
                tmp_groupbys = []
                tmp_domain = self.report.domain
                if 'time.str' in tmp_domain:
                    times = re.findall(r'time.strftime\("[%,\-,\w]*"\)',
                                       tmp_domain)
                    for time in times:
                        tmp = time.replace('time.strftime(','').replace('%Y','%d'%datetime.now().year)\
                                        .replace('%m','%d'%datetime.now().month).replace(")",'')
                        tmp_domain = tmp_domain.replace(time, tmp)

                domains = ast.literal_eval(tmp_domain)
                # for domain in domains:
                #     if type(domain) is str:
                #

                if self.report.model_id == 'intern.invoice':
                    fields.append('color_notice')

                datas.append(self.env[self.report.model_id].read_group(
                    domains, fields, tmp_groupbys, lazy=False))
                for group in groupby:
                    tmp_groupbys.append(group)
                    datas.append(self.env[self.report.model_id].read_group(
                        domains, fields, tmp_groupbys, lazy=False))

                for i, group in enumerate(groupby):
                    if ':' in group:
                        group = group.split(':')[0]
                    if group == 'custom_id' and self.report.model_id == 'intern.invoice':
                        continue
                    headers.append(fields_model[group])
                    measures.append(group)

                for i, header_row in enumerate(active_measures):
                    headers.append(fields_model[header_row])
                    measures.append(header_row)

        body = []

        if self.report.model_id == 'intern.invoice' and 'date_exam_short' in active_measures:
            # index = 0
            # for i, x in enumerate(headers):
            #     if x
            def tryconvert(date_str):
                try:
                    return datetime.strptime(date_str, '%d-%m-%Y')
                except ValueError:
                    return datetime(1, 1, 1)

            datas[1] = sorted(datas[1],
                              key=lambda r:
                              (tryconvert(r['date_exam_short'][0])))

        color = None
        if self.report.model_id == 'intern.invoice':
            color = []

        body, row, color = self.write_body(self.report.model_id, body, datas,
                                           0, 1, active_measures, groupby,
                                           color, None)

        # for i,data in enumerate(datas[1]):
        #     for j, tmp in enumerate(data):
        #         if type(data[tmp]) is list:
        #             datas[1][i][tmp] = datas[1][i][tmp][0]
        #         elif type(data[tmp]) is tuple:
        #             datas[1][i][tmp] = datas[1][i][tmp][1]

        for i, data in enumerate(datas[0]):
            for j, tmp in enumerate(data):
                if type(data[tmp]) is list:
                    datas[0][i][tmp] = ''
                elif type(data[tmp]) is unicode:
                    datas[0][i][tmp] = ''
                elif type(data[tmp]) is tuple:
                    datas[0][i][tmp] = datas[0][i][tmp][1]

        variables['headers'] = headers
        variables['measures'] = measures
        variables['objects'] = body
        # variables['objects'] = ['1','2','3']
        variables['email_template'] = template
        variables['footer'] = datas[0][0]
        if color is not None:
            variables['color'] = color
        else:
            variables['color'] = False

        # return self.env['report'].render('hh_automation_report.report_intern_pass_view', values=docargs)

        # try:
        render_result = template.body_view_id.render(variables)
        # except Exception:
        #     _logger.info("Failed to render template %r using values %r" % (template, variables), exc_info=True)
        #     raise UserError(_("Failed to render template %r using values %r") % (template, variables))

        if render_result == u"False":
            render_result = u""

        render_result = "%s<div>%s</div>" % (self.body_content, render_result)
        if self.env.user and self.env.user.signature:
            render_result += "<div><br></div>--<br>%s" % self.env.user.signature

        mail_pool = self.env['mail.mail']

        values = {}
        emails = self.emails.split(',')
        for i, email in enumerate(emails):
            if '<' in email and '>' in email:
                emails[i] = email[email.index('<') + 1:email.index('>')]
        values.update({'subject': self.build_subject()})
        values.update({'email_to': ','.join(emails)})

        if self.emails_cc:
            emails_cc = self.emails_cc.split(',')
            for i, email in enumerate(emails_cc):
                if '<' in email and '>' in email:
                    emails_cc[i] = email[email.index('<') + 1:email.index('>')]

            values.update({'email_cc': ','.join(emails_cc)})

        values.update({'body_html': render_result})
        msg_id = mail_pool.create(values)
        if msg_id:
            mail_pool.send([msg_id])