[MERGE] Forward port of saas-15 to 11.0 up to 1d9f64c91e

closes odoo/odoo#34868

Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
This commit is contained in:
Martin Trigaux
2019-07-15 11:56:22 +00:00
6 changed files with 31 additions and 6 deletions
+2
View File
@@ -1360,6 +1360,8 @@ class AccountInvoice(models.Model):
values['type'] = TYPE2REFUND[invoice['type']] values['type'] = TYPE2REFUND[invoice['type']]
values['date_invoice'] = date_invoice or fields.Date.context_today(invoice) values['date_invoice'] = date_invoice or fields.Date.context_today(invoice)
if values.get('date_due', False) and values['date_invoice'] > values['date_due']:
values['date_due'] = values['date_invoice']
values['state'] = 'draft' values['state'] = 'draft'
values['number'] = False values['number'] = False
values['origin'] = invoice.number values['origin'] = invoice.number
+15 -4
View File
@@ -4,9 +4,11 @@
import base64 import base64
from xml.etree import ElementTree as ET from xml.etree import ElementTree as ET
from collections import namedtuple from collections import namedtuple
from functools import partial
from odoo import api, exceptions, fields, models, _ from odoo import api, exceptions, fields, models, _
from odoo.tools.pycompat import text_type from odoo.tools.pycompat import text_type
from odoo.tools import float_round, float_is_zero
INTRASTAT_XMLNS = 'http://www.onegate.eu/2010-01-01' INTRASTAT_XMLNS = 'http://www.onegate.eu/2010-01-01'
@@ -103,7 +105,16 @@ class XmlDeclaration(models.TransientModel):
'res_id': self.id, 'res_id': self.id,
} }
def _get_rounding_digits(self):
"""A hook to not break behavior
Allows to programmatically set with what precision
the price, weight and values will be rounded"""
return 0
def _build_intrastat_line(self, numlgn, item, linekey, amounts, dispatchmode, extendedmode): def _build_intrastat_line(self, numlgn, item, linekey, amounts, dispatchmode, extendedmode):
round_digits = self._get_rounding_digits()
_round = partial(float_round, precision_digits=round_digits)
self._set_Dim(item, 'EXSEQCODE', text_type(numlgn)) self._set_Dim(item, 'EXSEQCODE', text_type(numlgn))
self._set_Dim(item, 'EXTRF', text_type(linekey.EXTRF)) self._set_Dim(item, 'EXTRF', text_type(linekey.EXTRF))
self._set_Dim(item, 'EXCNT', text_type(linekey.EXCNT)) self._set_Dim(item, 'EXCNT', text_type(linekey.EXCNT))
@@ -113,9 +124,9 @@ class XmlDeclaration(models.TransientModel):
if extendedmode: if extendedmode:
self._set_Dim(item, 'EXTPC', text_type(linekey.EXTPC)) self._set_Dim(item, 'EXTPC', text_type(linekey.EXTPC))
self._set_Dim(item, 'EXDELTRM', text_type(linekey.EXDELTRM)) self._set_Dim(item, 'EXDELTRM', text_type(linekey.EXDELTRM))
self._set_Dim(item, 'EXTXVAL', text_type(round(amounts[0], 0)).replace(".", ",")) self._set_Dim(item, 'EXTXVAL', text_type(_round(amounts[0], 0)).replace(".", ","))
self._set_Dim(item, 'EXWEIGHT', text_type(round(amounts[1], 0)).replace(".", ",")) self._set_Dim(item, 'EXWEIGHT', text_type(_round(amounts[1], 0)).replace(".", ","))
self._set_Dim(item, 'EXUNITS', text_type(round(amounts[2], 0)).replace(".", ",")) self._set_Dim(item, 'EXUNITS', text_type(_round(amounts[2], 0)).replace(".", ","))
def _get_intrastat_linekey(self, declcode, inv_line, dispatchmode, extendedmode): def _get_intrastat_linekey(self, declcode, inv_line, dispatchmode, extendedmode):
IntrastatRegion = self.env['l10n_be_intrastat.region'] IntrastatRegion = self.env['l10n_be_intrastat.region']
@@ -297,7 +308,7 @@ class XmlDeclaration(models.TransientModel):
numlgn = 0 numlgn = 0
for linekey in entries: for linekey in entries:
amounts = entries[linekey] amounts = entries[linekey]
if round(amounts[0], 0) == 0: if float_is_zero(amounts[0], precision_digits=self._get_rounding_digits()):
continue continue
numlgn += 1 numlgn += 1
item = ET.SubElement(datas, 'Item') item = ET.SubElement(datas, 'Item')
@@ -12,6 +12,15 @@ class XmlDeclaration(models.TransientModel):
""" """
_inherit = "l10n_be_intrastat_xml.xml_decl" _inherit = "l10n_be_intrastat_xml.xml_decl"
def _get_rounding_digits(self):
"""
@override
https://www.nbb.be/doc/dq/f_pdf_ex/nieuwsbriefintrastat_n28_2018_fr.pdf
Chapter 3
"""
return 2
def _build_intrastat_line(self, numlgn, item, linekey, amounts, dispatchmode, extendedmode): def _build_intrastat_line(self, numlgn, item, linekey, amounts, dispatchmode, extendedmode):
super(XmlDeclaration, self)._build_intrastat_line(numlgn, item, linekey, amounts, dispatchmode, extendedmode) super(XmlDeclaration, self)._build_intrastat_line(numlgn, item, linekey, amounts, dispatchmode, extendedmode)
if dispatchmode: if dispatchmode:
+1 -1
View File
@@ -141,7 +141,7 @@ class WebsitePayment(http.Controller):
tx_id = int(kw.get('tx_id', 0)) or request.session.pop('website_payment_tx_id', 0) tx_id = int(kw.get('tx_id', 0)) or request.session.pop('website_payment_tx_id', 0)
if tx_id: if tx_id:
tx = request.env['payment.transaction'].browse(tx_id) tx = request.env['payment.transaction'].browse(tx_id)
if tx.state == 'done': if tx.state in ['done', 'authorized']:
status = 'success' status = 'success'
message = tx.acquirer_id.done_msg message = tx.acquirer_id.done_msg
elif tx.state == 'pending': elif tx.state == 'pending':
+3
View File
@@ -577,6 +577,9 @@ class WebsiteSale(http.Controller):
new_values['team_id'] = request.website.salesteam_id and request.website.salesteam_id.id new_values['team_id'] = request.website.salesteam_id and request.website.salesteam_id.id
new_values['user_id'] = request.website.salesperson_id and request.website.salesperson_id.id new_values['user_id'] = request.website.salesperson_id and request.website.salesperson_id.id
if mode[0] == 'new':
new_values['company_id'] = request.website.company_id.id
lang = request.lang if request.lang in request.website.mapped('language_ids.code') else None lang = request.lang if request.lang in request.website.mapped('language_ids.code') else None
if lang: if lang:
new_values['lang'] = lang new_values['lang'] = lang
+1 -1
View File
@@ -280,7 +280,7 @@ class Website(models.Model):
if code_pricelist: if code_pricelist:
pricelist_id = code_pricelist.id pricelist_id = code_pricelist.id
update_pricelist = True update_pricelist = True
elif code is not None and sale_order.pricelist_id.code: elif code is not None and sale_order.pricelist_id.code and code != sale_order.pricelist_id.code:
# code is not None when user removes code and click on "Apply" # code is not None when user removes code and click on "Apply"
pricelist_id = partner.property_product_pricelist.id pricelist_id = partner.property_product_pricelist.id
update_pricelist = True update_pricelist = True