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 '',
|
default=lambda self: self.env.user if self.env.user.editor_name else '',
|
||||||
domain=[('editor_name', '!=', '')],track_visibility='onchange')
|
domain=[('editor_name', '!=', '')],track_visibility='onchange')
|
||||||
|
|
||||||
|
sent_by_mail = fields.Boolean(string='Per EMail versandt',track_visibility='onchange')
|
||||||
|
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
@api.onchange('partner_shipping_id')
|
@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")})
|
action['context'] = str({"default_info": info, "invoice_ids": self.env.context.get("active_ids")})
|
||||||
return action
|
return action
|
||||||
return self.env.ref('dp_reports_account.account_invoices_with_intrastat_short').report_action(self)
|
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:
|
if template.report_template:
|
||||||
for res_id in template_res_ids:
|
for res_id in template_res_ids:
|
||||||
attachments = []
|
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_name = self.render_template(template.report_name, template.model, res_id)
|
||||||
report = template.report_template
|
report = template.report_template
|
||||||
report_service = report.report_name
|
report_service = report.report_name
|
||||||
|
|
@ -137,7 +140,6 @@ class MailTemplate(models.Model):
|
||||||
for i in range(0, a):
|
for i in range(0, a):
|
||||||
output.addPage(input.getPage(i))
|
output.addPage(input.getPage(i))
|
||||||
|
|
||||||
|
|
||||||
passphrase = str(values.get('partner_ids'))+"!"
|
passphrase = str(values.get('partner_ids'))+"!"
|
||||||
|
|
||||||
Model = self.env[self.model]
|
Model = self.env[self.model]
|
||||||
|
|
@ -177,5 +179,29 @@ class MailTemplate(models.Model):
|
||||||
attachments.append((report_name, result))
|
attachments.append((report_name, result))
|
||||||
results[res_id]['attachments'] = attachments
|
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]]
|
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
|
from dateutil.relativedelta import relativedelta
|
||||||
import dateutil.parser
|
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):
|
class SaleOrder(models.Model):
|
||||||
_name = 'sale.order'
|
_name = 'sale.order'
|
||||||
_inherit = ['sale.order', 'dp_custom.helper']
|
_inherit = ['sale.order', 'dp_custom.helper']
|
||||||
|
|
@ -1056,3 +974,86 @@ class SaleOrderLine(models.Model):
|
||||||
new_list_price, pricelist_id.currency_id)
|
new_list_price, pricelist_id.currency_id)
|
||||||
discount = (new_list_price - price) / new_list_price * 100
|
discount = (new_list_price - price) / new_list_price * 100
|
||||||
return discount
|
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"/>
|
<field name="fax" widget="phone" string="Fax"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
||||||
|
<xpath expr="//field[@name='message_bounce']" position="after">
|
||||||
|
<field name="property_product_pricelist"/>
|
||||||
|
</xpath>
|
||||||
|
|
||||||
<xpath expr="//field[@name='property_product_pricelist']" position="attributes">
|
<xpath expr="//field[@name='property_product_pricelist']" position="attributes">
|
||||||
<attribute name="attrs">{'readonly':[('portal_managed_pricelist', '=', True)]}</attribute>
|
<attribute name="attrs">{'readonly':[('portal_managed_pricelist', '=', True)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue