Пример #1
0
 def _check_recomputation(self, values, operation=None):
     fields = []
     if any(field in values for field in
            ['parent_group', 'departments', 'jobs', 'additional_users']):
         fields.extend(['users'])
     if fields:
         self.trigger_computation(fields, operation=operation)
Пример #2
0
 def _check_recomputation(self, vals, olds, *largs, **kwargs):
     super(Groups, self)._check_recomputation(vals, olds, *largs, **kwargs)
     fields = []
     if self.check_user_values(vals):
         fields.extend(['users'])
     if fields:
         self.trigger_computation(fields)
Пример #3
0
    def _generate_order_by(self, order_spec, query):
        '''
        replace sort field, if sort by key.
        replace on sort by prefix, number
        '''
        new_order_spec = order_spec
        if order_spec:
            fields = []
            for order_part in order_spec.split(','):
                order_split = order_part.strip().split(' ')
                order_field = order_split[0].strip()
                order_direction = order_split[1].strip().upper() if len(order_split) == 2 else ''
                fields.append((order_field, order_direction))

            key_field = [x for x in fields if x[0] == 'key']
            if key_field:
                direction = key_field[0][1]
                fields.remove(key_field[0])
                fields.extend([('prefix', direction), ('number', direction)])

            fields = map(lambda x: ' '.join(x), fields)
            new_order_spec = ','.join(fields)

        order_by = super(Task, self)._generate_order_by(new_order_spec, query)
        return order_by
Пример #4
0
 def _check_recomputation(self, vals, olds, *largs, **kwargs):
     super(BaseModelAccessGroups,
           self)._check_recomputation(vals, olds, *largs, **kwargs)
     fields = []
     if self.check_group_values(vals):
         fields.extend(['complete_groups'])
     if fields:
         self.trigger_computation(fields)
Пример #5
0
 def _get_fields_for_order_line(self):
     fields = super(PosOrder, self)._get_fields_for_order_line()
     fields.extend({
         'is_program_reward',
         'coupon_id',
         'program_id',
     })
     return fields
Пример #6
0
 def _check_recomputation(self, values, operation=None):
     super(AccessFile, self)._check_recomputation(values, operation)
     fields = []
     if any(field in values
            for field in ['groups', 'directory', 'inherit_groups']):
         fields.extend(['complete_groups'])
     if fields:
         self.trigger_computation(fields, operation=operation)
Пример #7
0
 def _check_recomputation(self, values, operation=None):
     super(Directory, self.sudo())._check_recomputation(values, operation)
     fields = []
     if ('parent_directory' in values or 'repository_id' in values):
         fields.extend(['has_child', 'hierarchy'])
     if 'relativity_weight' in values:
         fields.extend(['absolute_weight', 'earned_value'])
     if fields:
         self.trigger_computation(fields, operation=operation)
Пример #8
0
 def _check_recomputation(self, values, operation=None):
     self._check_content()
     super(File,self)._check_recomputation(values,operation)
     fields = []
     if 'relativity_weight' in values:
         fields.extend(['absolute_weight', 'earned_value', 'hierarchy'])
     if 'input_progress' in values:
         fields.extend(['earned_value'])
     if fields:
         self.trigger_computation(fields)
Пример #9
0
    def get_seo_data(self, res_id, res_model):
        if not request.env.user.has_group('website.group_website_publisher'):
            raise werkzeug.exceptions.Forbidden()

        fields = ['website_meta_title', 'website_meta_description', 'website_meta_keywords', 'website_meta_og_img']
        if res_model == 'website.page':
            fields.extend(['website_indexed', 'website_id'])
        res = request.env[res_model].browse(res_id).read(fields)[0]
        res['has_social_default_image'] = request.website.has_social_default_image
        return res
Пример #10
0
 def find_field_belong_model(nodes):
     fields = []
     for node in nodes:
         attr = {}
         if node.tag == 'field':
             attr.update(node.attrib)
             if node.find('tree'):
                 attr.update(node.find('tree').attrib)
             fields.append(attr)
             continue
         if node.getchildren():
             field = find_field_belong_model(node)
             fields.extend(field)
             continue
     return fields
Пример #11
0
    def get_seo_data(self, res_id, res_model):
        if not request.env.user.has_group('website.group_website_publisher'):
            raise werkzeug.exceptions.Forbidden()

        fields = ['website_meta_title', 'website_meta_description', 'website_meta_keywords', 'website_meta_og_img']
        if res_model == 'website.page':
            fields.extend(['website_indexed', 'website_id'])

        record = request.env[res_model].browse(res_id)
        res = record._read_format(fields)[0]
        res['has_social_default_image'] = request.website.has_social_default_image

        if res_model not in ('website.page', 'ir.ui.view') and 'seo_name' in record:  # allow custom slugify
            res['seo_name_default'] = slugify(record.display_name)  # default slug, if seo_name become empty
            res['seo_name'] = record.seo_name and slugify(record.seo_name) or ''
        return res
Пример #12
0
 def _get_fields_for_order_line(self):
     fields = super(PosOrder, self)._get_fields_for_order_line()
     fields.extend([
         'id',
         'discount',
         'product_id',
         'price_unit',
         'order_id',
         'qty',
         'note',
         'mp_skip',
         'mp_dirty',
         'full_product_name',
         'customer_note',
     ])
     return fields
Пример #13
0
 def _get_fields_for_draft_order(self):
     fields = super(PosOrder, self)._get_fields_for_draft_order()
     fields.extend([
         'id',
         'pricelist_id',
         'partner_id',
         'sequence_number',
         'session_id',
         'pos_reference',
         'create_uid',
         'create_date',
         'customer_count',
         'fiscal_position_id',
         'table_id',
         'to_invoice',
         'multiprint_resume',
     ])
     return fields
Пример #14
0
 def _check_recomputation(self, values, operation=None):
     fields = []
     if 'name' in values:
         fields.extend(['path'])
     if self.is_root_directory and 'settings' in values:
         fields.extend(['settings'])
     if not self.is_root_directory and 'parent_directory' in values:
         fields.extend(['settings', 'path'])
     if fields:
         self.trigger_computation(fields, operation=operation)
Пример #15
0
 def _check_recomputation(self, vals, olds, *largs, **kwargs):
     super(File, self)._check_recomputation(vals, olds, *largs, **kwargs)
     fields = []
     if 'name' in vals:
         fields.extend(['extension', 'mimetype', 'path'])
     if 'directory' in vals:
         fields.extend(['settings', 'path'])
     if 'content' in vals:
         fields.extend(['index_content'])
     if fields:
         self.trigger_computation(fields)
     self._check_reference_values(vals)
Пример #16
0
 def _check_recomputation(self, values, operation=None):
     fields = []
     if 'name' in values:
         fields.extend(['extension', 'mimetype', 'path'])
     if 'directory' in values:
         fields.extend(['settings', 'path'])
     if 'content' in values:
         fields.extend(['index_content'])
     if fields:
         self.trigger_computation(fields)
     self._check_reference_values(values)
     if 'size' in values:
         self.trigger_computation_up(['size'])
Пример #17
0
    def method_direct_trigger(self):
        # reload(sys)
        # sys.setdefaultencoding('utf-8')
        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:
                #
                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))

                workbook = xlwt.Workbook()
                worksheet = workbook.add_sheet(self.report.name)

                header_plain = xlwt.easyxf(
                    "pattern: pattern solid, fore_colour light_green;")
                footer_plain = xlwt.easyxf(
                    "pattern: pattern solid, fore_colour gray25;")
                worksheet.write(0, 0, u'STT', header_plain)
                for i, group in enumerate(groupby):
                    worksheet.write(0, i + 1,
                                    u'%s' % fields_model[group]['string'],
                                    header_plain)

                for i, header_row in enumerate(active_measures):
                    worksheet.write(
                        0, i + len(groupby) + 1,
                        u'%s' % (fields_model[header_row]['string']),
                        header_plain)

                # row_counter = 1
                # worksheet.write(row_counter,0,'Tổng')
                # for i in
                # for i,header_row in enumerate(active_measures):
                #     worksheet.write(1, i+1, 'Tổng')

                row = self.write_table(worksheet, datas, 1, 1, active_measures,
                                       groupby, None)
                # workbook.save("trial.xls")

                #Write footer total
                if datas and len(datas) > 0 and len(datas[0]) > 0:
                    worksheet.write(row, 1, u'Tổng', footer_plain)
                    for i, group in enumerate(groupby):
                        if i > 0:
                            worksheet.write(row, i + 1, '', footer_plain)

                    for j, header_row in enumerate(active_measures):
                        if type(datas[0][0][header_row]) is int:
                            worksheet.write(row, j + len(groupby) + 1,
                                            '%d' % datas[0][0][header_row],
                                            footer_plain)
                        else:
                            worksheet.write(row, j + len(groupby) + 1, '',
                                            footer_plain)

                        # if type(datas[0][0][header_row]) is list:
                        #
                        # else:
                        #     worksheet.write(row, j + len(groupby)+1,u'%s'%(datas[0][0][header_row]))

                byteIo = BytesIO()
                workbook.save(byteIo)

                record = self.env['ir.attachment'].create({
                    'name':
                    self.name,
                    'type':
                    'binary',
                    'datas':
                    base64.b64encode(byteIo.getvalue()),
                    'datas_fname':
                    '%s.xls' % self.name,
                    'res_model':
                    'account.invoice',
                    'mimetype':
                    'application/vnd.ms-excel'
                })

                self.send_mail(record)
Пример #18
0
    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])
Пример #19
0
    def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
        res = super(OFCRMFunnelConversion2, self).read_group(
            domain, fields.extend(['sales_total']), groupby, offset=offset, limit=limit,
            orderby=orderby, lazy=lazy)
        for line in res:
            if 'quotation_rate' in fields:
                if line['opportunity_nb'] > 0:
                    line['quotation_rate'] = \
                        ('%.2f' % (round(100.0 * line['quotation_nb'] / line['opportunity_nb'], 2))).replace('.', ',')
                else:
                    line['quotation_rate'] = "N/E"
            if 'order_rate1' in fields:
                if line['quotation_nb'] > 0:
                    line['order_rate1'] = ('%.2f' % (round(100.0 * line['order_nb'] / line['quotation_nb'], 2))).\
                        replace('.', ',')
                else:
                    line['order_rate1'] = "N/E"
            if 'order_rate2' in fields:
                if line['opportunity_nb'] > 0:
                    line['order_rate2'] = ('%.2f' % (round(100.0 * line['order_nb'] / line['opportunity_nb'], 2))).\
                        replace('.', ',')
                else:
                    line['order_rate2'] = "N/E"
            if 'opportunity_cart' in fields:
                if line['opportunity_nb'] > 0:
                    line['opportunity_cart'] = ('%.2f' % (round(line['sales_total'] / line['opportunity_nb'], 2))).\
                        replace('.', ',')
                else:
                    line['opportunity_cart'] = "N/E"
            if 'quotation_cart' in fields:
                if line['quotation_nb'] > 0:
                    line['quotation_cart'] = ('%.2f' % (round(line['sales_total'] / line['quotation_nb'], 2))).\
                        replace('.', ',')
                else:
                    line['quotation_cart'] = "N/E"
            if 'order_cart' in fields:
                if line['order_nb'] > 0:
                    line['order_cart'] = ('%.2f' % (round(line['sales_total'] / line['order_nb'], 2))).\
                        replace('.', ',')
                else:
                    line['order_cart'] = "N/E"
            if 'order_margin_percent' in fields:
                if line['sales_total'] > 0:
                    line['order_margin_percent'] = \
                        ('%.2f' %
                         (round(100 * (1 - (line['sales_total'] - line['order_margin']) / line['sales_total']),
                                2))).replace('.', ',')
                else:
                    line['order_margin_percent'] = "N/E"
            if 'order_amount_rate' in fields:
                if line['quotation_amount'] > 0:
                    line['order_amount_rate'] = \
                        ('%.2f' % (round(100.0 * line['sales_total'] / line['quotation_amount'], 2))).replace('.', ',')
                else:
                    line['order_amount_rate'] = "N/E"
            if 'sales_objective_comparison' in fields:
                if line['ordered_turnover_objective'] > 0:
                    line['sales_objective_comparison'] = \
                        ('%.2f' % (round(100.0 * line['sales_total'] / line['ordered_turnover_objective'], 2))).\
                        replace('.', ',')
                else:
                    line['sales_objective_comparison'] = "N/E"
            if 'sales_total_comparison' in fields:
                if line['previous_sales_total'] > 0:
                    line['sales_total_comparison'] = \
                        ('%.2f' % (round(100.0 * line['sales_total'] / line['previous_sales_total'], 2))).\
                        replace('.', ',')
                else:
                    line['sales_total_comparison'] = "N/E"

        return res
Пример #20
0
    def build_body_content(self):
        body = self.body_content
        body += '<div><table border="0" cellspacing="0" cellpadding="0" width="940"><tbody>'

        #Build data
        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:
                #
                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))

                body+='<tr><td width="40" style="border-width:1pt;border-style:solid;border-color:windowtext windowtext black;background:rgb(155,187,89)"><div style="text-align:center;"><b style="font-weight:bold;">' \
                      '<span style="font-size:9pt">STT</span></b></div></td>'
                for i, group in enumerate(groupby):
                    body += u'<td style="border-width:1pt;border-style:solid;border-color:windowtext windowtext black;background:rgb(155,187,89)"><div style="text-align:center;"><b style="font-weight:bold;"><span style="font-size:9pt">%s</span></b></div></td>' % fields_model[
                        group]['string']

                for i, header_row in enumerate(active_measures):
                    body += u'<td style="border-width:1pt;border-style:solid;border-color:windowtext windowtext black;background:rgb(155,187,89)"><div style="text-align:center;"><b style="font-weight:bold;"><span style="font-size:9pt">%s</span></b></div></td>' % (
                        fields_model[header_row]['string'])

                body += "</tr>"

                #body table
                body, row = self.write_table_html(body, datas, 1, 1,
                                                  active_measures, groupby,
                                                  None)

        body += '</tbody></table></div>'
        return body
Пример #21
0
 def _check_recomputation(self, values):
     fields = []
     if self.check_user_values(values):
         fields.extend(['users'])
     if fields:
         self.trigger_computation(fields)