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)
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)
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
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)
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
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)
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)
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)
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
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
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
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
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
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)
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)
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'])
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)
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])
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
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
def _check_recomputation(self, values): fields = [] if self.check_user_values(values): fields.extend(['users']) if fields: self.trigger_computation(fields)