UBL Integration
							parent
							
								
									48242b5dbb
								
							
						
					
					
						commit
						0a200c2288
					
				|  | @ -87,6 +87,8 @@ class AccountInvoice(models.Model): | |||
|                                 default=lambda self: self.env.user if self.env.user.editor_name else '', | ||||
|                                 domain=[('editor_name', '!=', '')],track_visibility='onchange') | ||||
| 
 | ||||
|     sent_by_mail = fields.Boolean(string='Per EMail versandt',track_visibility='onchange') | ||||
| 
 | ||||
| 
 | ||||
|     @api.multi | ||||
|     @api.onchange('partner_shipping_id') | ||||
|  | @ -207,3 +209,21 @@ class AccountInvoice(models.Model): | |||
|             action['context'] = str({"default_info": info, "invoice_ids": self.env.context.get("active_ids")}) | ||||
|             return action | ||||
|         return self.env.ref('dp_reports_account.account_invoices_with_intrastat_short').report_action(self) | ||||
| 
 | ||||
| class MailComposeMessage(models.TransientModel): | ||||
|     _inherit = 'mail.compose.message' | ||||
| 
 | ||||
|     @api.multi | ||||
|     def send_mail(self, auto_commit=False): | ||||
|         context = self._context | ||||
|         dm=context.get('default_model') | ||||
|         dri=context.get('default_res_id') | ||||
|         mis=context.get('mark_invoice_as_sent') | ||||
|         if  dm == 'account.invoice' and \ | ||||
|                 dri and mis: | ||||
|             invoice = self.env['account.invoice'].browse(context['default_res_id']) | ||||
|             if not invoice.sent: | ||||
|                 invoice.sent = True | ||||
|                 invoice.sent_by_mail = True | ||||
|             self = self.with_context(mail_post_autofollow=True) | ||||
|         return super(MailComposeMessage, self).send_mail(auto_commit=auto_commit) | ||||
|  |  | |||
|  | @ -120,6 +120,9 @@ class MailTemplate(models.Model): | |||
|             if template.report_template: | ||||
|                 for res_id in template_res_ids: | ||||
|                     attachments = [] | ||||
| 
 | ||||
|                     res_partner = self.env['res.partner'].browse(values.get('partner_ids')) | ||||
| 
 | ||||
|                     report_name = self.render_template(template.report_name, template.model, res_id) | ||||
|                     report = template.report_template | ||||
|                     report_service = report.report_name | ||||
|  | @ -137,7 +140,6 @@ class MailTemplate(models.Model): | |||
|                         for i in range(0, a): | ||||
|                             output.addPage(input.getPage(i)) | ||||
| 
 | ||||
| 
 | ||||
|                         passphrase = str(values.get('partner_ids'))+"!" | ||||
| 
 | ||||
|                         Model = self.env[self.model] | ||||
|  | @ -177,5 +179,29 @@ class MailTemplate(models.Model): | |||
|                     attachments.append((report_name, result)) | ||||
|                     results[res_id]['attachments'] = attachments | ||||
| 
 | ||||
|                     if not self.env.context.get('attach_ubl_xml_file'): | ||||
|                         return results | ||||
|                     for res_id, template in self.get_email_template(res_ids).items(): | ||||
|                         invoice = self.env['account.invoice'].browse(res_id) | ||||
|                         version = invoice.get_ubl_version() | ||||
|                         ubl_filename = invoice.get_ubl_filename(version=version) | ||||
|                         ubl_attachments = self.env['ir.attachment'].search([ | ||||
|                             ('res_model', '=', 'account.invoice'), | ||||
|                             ('res_id', '=', res_id), | ||||
|                             ('datas_fname', '=', ubl_filename) | ||||
|                         ], order='create_date desc', limit=1) | ||||
|                         if not ubl_attachments: | ||||
|                             ubl_attachments = invoice._generate_email_ubl_attachment() | ||||
|                         if len(ubl_attachments) == 1 and template.report_name: | ||||
|                             report_name = self.render_template( | ||||
|                                 template.report_name, template.model, res_id) | ||||
|                             ext = '.xml' | ||||
|                             if not report_name.endswith(ext): | ||||
|                                 report_name += ext | ||||
|                             attachments = [(report_name, ubl_attachments.datas)] | ||||
|                         else: | ||||
|                             attachments = [(a.name, a.datas) for a in ubl_attachments] | ||||
|                         results[res_id]['attachments'] += attachments | ||||
| 
 | ||||
|         return multi_mode and results or results[res_ids[0]] | ||||
| 
 | ||||
|  |  | |||
|  | @ -31,88 +31,6 @@ from odoo.tools import drop_view_if_exists | |||
| from dateutil.relativedelta import relativedelta | ||||
| import dateutil.parser | ||||
| 
 | ||||
| class SaleCart(models.Model): | ||||
|     _name = 'sale.cart' | ||||
|     _auto = False | ||||
| 
 | ||||
|     ASSEMBLY_STATES = [('import',           'Imported'), | ||||
|                        ('import_failed',    'Error Import'), | ||||
|                        ('created',          'Not Released'), | ||||
|                        ('approved',         'Released for Production'), | ||||
|                        ('wait',             'Released'), | ||||
|                        ('failed',           'Error Release'), | ||||
|                        ('started',          'Production Started'), | ||||
|                        ('done',             'Production Finished'), | ||||
|                        ('packed',           'Packed'), | ||||
|                        ('delivered',        'Delivered'), | ||||
|                        ('completed',        'Completed')] | ||||
| 
 | ||||
|     order_states = [ | ||||
|         ('draft', 'Quotation'), | ||||
|         ('sent', 'Quotation Sent'), | ||||
|         ('sale', 'Sales Order'), | ||||
|         ('done', 'Done'), | ||||
|         ('cancel', 'Cancelled')] | ||||
| 
 | ||||
|     order_id = fields.Many2one('sale.order', string = 'Quotation / Order') | ||||
|     origin = fields.Char(string='Shopping Cart') | ||||
|     client_order_ref = fields.Char(string='Customer Reference') | ||||
|     name = fields.Char(string='Quotation') | ||||
|     date_order = fields.Date(string='Quotation Date:') | ||||
|     create_date = fields.Datetime(string='Create Date:') | ||||
|     partner_id = fields.Many2one('res.partner', string = 'Customer') | ||||
|     company_id = fields.Many2one('res.company', string = 'Company') | ||||
|     user_id = fields.Many2one('res.users', string = 'User') | ||||
|     assembly_state = fields.Selection(ASSEMBLY_STATES, string="State PG") | ||||
|     state = fields.Selection(order_states, string="State") | ||||
|     in_company = fields.Boolean(default=False,compute='_in_company',store=False) | ||||
|     number_of_parts = fields.Integer(string='Anzahl Teile') | ||||
|     number_of_parts_open = fields.Integer(string='Teile offen') | ||||
|     number_of_fittings = fields.Integer(string='Anzahl Beschläge') | ||||
|     number_of_fittings_open = fields.Integer(string='Beschläge offen') | ||||
| 
 | ||||
|     @api.multi | ||||
|     def _in_company(self): | ||||
|         sCompany = self.env.user.company_id | ||||
|         for record in self: | ||||
|             if record.company_id == sCompany: | ||||
|                 record.in_company = True | ||||
| 
 | ||||
|     @api.model_cr | ||||
|     def init(self): | ||||
| #        print("connected") | ||||
|         drop_view_if_exists(self._cr, 'sale_cart') | ||||
|         self._cr.execute("""CREATE OR REPLACE VIEW sale_cart AS  | ||||
|                                 SELECT so.id AS id, | ||||
|                                 so.id AS order_id, | ||||
|                                 so.name AS name,  | ||||
|                                 so.origin AS origin, | ||||
|                                 so.client_order_ref AS client_order_ref, | ||||
|                                 so.date_order AS date_order, | ||||
|                                 so.create_date AS create_date, | ||||
|                                 so.assembly_state AS assembly_state, | ||||
|                                 so.state AS state, | ||||
|                                 so.number_of_parts AS number_of_parts, | ||||
|                                 so.number_of_parts_open AS number_of_parts_open, | ||||
|                                 so.number_of_fittings AS number_of_fittings, | ||||
|                                 so.number_of_fittings_open AS number_of_fittings_open, | ||||
|                                 so.partner_id AS partner_id, | ||||
|                                 so.company_id AS company_id, | ||||
|                                 c_u.user_id AS user_id | ||||
|                                 FROM sale_order so  | ||||
|                                 INNER JOIN res_company_users_rel c_u ON so.company_id = c_u.cid  | ||||
|                                 WHERE so.state != 'cancel' AND so.origin != '' order by date_order desc | ||||
|                                 """) | ||||
| 
 | ||||
|     @api.multi | ||||
|     def switch_company(self): | ||||
|         values = {'company_id': self.company_id.id} | ||||
|         self.env.user.write(values) | ||||
|         return { | ||||
|             'type': 'ir.actions.client', | ||||
|             'tag': 'reload_context', | ||||
|         } | ||||
| 
 | ||||
| class SaleOrder(models.Model): | ||||
|     _name = 'sale.order' | ||||
|     _inherit = ['sale.order', 'dp_custom.helper'] | ||||
|  | @ -1056,3 +974,86 @@ class SaleOrderLine(models.Model): | |||
|                     new_list_price, pricelist_id.currency_id) | ||||
|             discount = (new_list_price - price) / new_list_price * 100 | ||||
|         return discount | ||||
| 
 | ||||
| class SaleCart(models.Model): | ||||
|     _name = 'sale.cart' | ||||
|     _auto = False | ||||
| 
 | ||||
|     ASSEMBLY_STATES = [('import',           'Imported'), | ||||
|                        ('import_failed',    'Error Import'), | ||||
|                        ('created',          'Not Released'), | ||||
|                        ('approved',         'Released for Production'), | ||||
|                        ('wait',             'Released'), | ||||
|                        ('failed',           'Error Release'), | ||||
|                        ('started',          'Production Started'), | ||||
|                        ('done',             'Production Finished'), | ||||
|                        ('packed',           'Packed'), | ||||
|                        ('delivered',        'Delivered'), | ||||
|                        ('completed',        'Completed')] | ||||
| 
 | ||||
|     order_states = [ | ||||
|         ('draft', 'Quotation'), | ||||
|         ('sent', 'Quotation Sent'), | ||||
|         ('sale', 'Sales Order'), | ||||
|         ('done', 'Done'), | ||||
|         ('cancel', 'Cancelled')] | ||||
| 
 | ||||
|     order_id = fields.Many2one('sale.order', string = 'Quotation / Order') | ||||
|     origin = fields.Char(string='Shopping Cart') | ||||
|     client_order_ref = fields.Char(string='Customer Reference') | ||||
|     name = fields.Char(string='Quotation') | ||||
|     date_order = fields.Date(string='Quotation Date:') | ||||
|     create_date = fields.Datetime(string='Create Date:') | ||||
|     partner_id = fields.Many2one('res.partner', string = 'Customer') | ||||
|     company_id = fields.Many2one('res.company', string = 'Company') | ||||
|     user_id = fields.Many2one('res.users', string = 'User') | ||||
|     assembly_state = fields.Selection(ASSEMBLY_STATES, string="State PG") | ||||
|     state = fields.Selection(order_states, string="State") | ||||
|     in_company = fields.Boolean(default=False,compute='_in_company',store=False) | ||||
|     number_of_parts = fields.Integer(string='Anzahl Teile') | ||||
|     number_of_parts_open = fields.Integer(string='Teile offen') | ||||
|     number_of_fittings = fields.Integer(string='Anzahl Beschläge') | ||||
|     number_of_fittings_open = fields.Integer(string='Beschläge offen') | ||||
| 
 | ||||
|     @api.multi | ||||
|     def _in_company(self): | ||||
|         sCompany = self.env.user.company_id | ||||
|         for record in self: | ||||
|             if record.company_id == sCompany: | ||||
|                 record.in_company = True | ||||
| 
 | ||||
|     @api.model_cr | ||||
|     def init(self): | ||||
| #        print("connected") | ||||
|         drop_view_if_exists(self._cr, 'sale_cart') | ||||
|         self._cr.execute("""CREATE OR REPLACE VIEW sale_cart AS  | ||||
|                                 SELECT so.id AS id, | ||||
|                                 so.id AS order_id, | ||||
|                                 so.name AS name,  | ||||
|                                 so.origin AS origin, | ||||
|                                 so.client_order_ref AS client_order_ref, | ||||
|                                 so.date_order AS date_order, | ||||
|                                 so.create_date AS create_date, | ||||
|                                 so.assembly_state AS assembly_state, | ||||
|                                 so.state AS state, | ||||
|                                 so.number_of_parts AS number_of_parts, | ||||
|                                 so.number_of_parts_open AS number_of_parts_open, | ||||
|                                 so.number_of_fittings AS number_of_fittings, | ||||
|                                 so.number_of_fittings_open AS number_of_fittings_open, | ||||
|                                 so.partner_id AS partner_id, | ||||
|                                 so.company_id AS company_id, | ||||
|                                 c_u.user_id AS user_id | ||||
|                                 FROM sale_order so  | ||||
|                                 INNER JOIN res_company_users_rel c_u ON so.company_id = c_u.cid  | ||||
|                                 WHERE so.state != 'cancel' AND so.origin != '' order by date_order desc | ||||
|                                 """) | ||||
| 
 | ||||
|     @api.multi | ||||
|     def switch_company(self): | ||||
|         values = {'company_id': self.company_id.id} | ||||
|         self.env.user.write(values) | ||||
|         return { | ||||
|             'type': 'ir.actions.client', | ||||
|             'tag': 'reload_context', | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,6 +41,10 @@ | |||
|                 <field name="fax" widget="phone" string="Fax"/> | ||||
|             </xpath> | ||||
| 
 | ||||
|             <xpath expr="//field[@name='message_bounce']" position="after"> | ||||
|                 <field name="property_product_pricelist"/> | ||||
|             </xpath> | ||||
| 
 | ||||
|             <xpath expr="//field[@name='property_product_pricelist']" position="attributes"> | ||||
|                 <attribute name="attrs">{'readonly':[('portal_managed_pricelist', '=', True)]}</attribute> | ||||
|             </xpath> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue