diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index 2d12c12a4de..e3d89f11fe6 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -885,6 +885,8 @@ class AccountMoveLine(models.Model): vals['date'] = self._context.get('date_p') or time.strftime('%Y-%m-%d') if 'name' not in vals: vals['name'] = self._context.get('comment') or _('Write-Off') + if 'analytic_account_id' not in vals: + vals['analytic_account_id'] = self.env.context.get('analytic_id', False) #compute the writeoff amount if not given if 'credit' not in vals and 'debit' not in vals: amount = sum([r.amount_residual for r in self]) diff --git a/addons/hr_attendance/models/res_config.py b/addons/hr_attendance/models/res_config.py index 464b643ca02..d2f06ce6cb5 100644 --- a/addons/hr_attendance/models/res_config.py +++ b/addons/hr_attendance/models/res_config.py @@ -7,6 +7,6 @@ from odoo import fields, models class BaseConfigSettings(models.TransientModel): _inherit = 'base.config.settings' - group_attendance_use_pin = fields.Selection([(0, 'Employees do not need to enter their PIN to check in manually in the "Company Screen".'), - (1, 'Employees must enter their PIN to check in manually in the "Company Screen".')], + group_attendance_use_pin = fields.Selection([(0, 'Employees do not need to enter their PIN to check in manually in the "Kiosk Mode".'), + (1, 'Employees must enter their PIN to check in manually in the "Kiosk Mode".')], string='Employee PIN', help='Enable or disable employee PIN identification at check in', implied_group="hr_attendance.group_hr_attendance_use_pin") diff --git a/addons/l10n_ar/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_ar/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_ar/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_ar/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_at/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_at/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_at/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_at/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_at/migrations/2.0/pre-set_tags_and_taxes_updatable.py b/addons/l10n_at/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py similarity index 100% rename from addons/l10n_at/migrations/2.0/pre-set_tags_and_taxes_updatable.py rename to addons/l10n_at/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py diff --git a/addons/l10n_bo/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_bo/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_bo/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_bo/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_br/migrations/1.0/post-migrate_tags_on_taxes.py b/addons/l10n_br/migrations/9.0.1.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_br/migrations/1.0/post-migrate_tags_on_taxes.py rename to addons/l10n_br/migrations/9.0.1.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_ch/migrations/9.0/post-migrate_tags_on_taxes.py b/addons/l10n_ch/migrations/9.0.9.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_ch/migrations/9.0/post-migrate_tags_on_taxes.py rename to addons/l10n_ch/migrations/9.0.9.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_ch/migrations/9.0/pre-set_tags_and_taxes_updatable.py b/addons/l10n_ch/migrations/9.0.9.0/pre-set_tags_and_taxes_updatable.py similarity index 100% rename from addons/l10n_ch/migrations/9.0/pre-set_tags_and_taxes_updatable.py rename to addons/l10n_ch/migrations/9.0.9.0/pre-set_tags_and_taxes_updatable.py diff --git a/addons/l10n_cl/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_cl/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_cl/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_cl/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_cl/migrations/2.0/pre-set_tags_and_taxes_updatable.py b/addons/l10n_cl/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py similarity index 100% rename from addons/l10n_cl/migrations/2.0/pre-set_tags_and_taxes_updatable.py rename to addons/l10n_cl/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py diff --git a/addons/l10n_de_skr03/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_de_skr03/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_de_skr03/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_de_skr03/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_de_skr03/migrations/2.0/pre-set_tags_and_taxes_updatable.py b/addons/l10n_de_skr03/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py similarity index 100% rename from addons/l10n_de_skr03/migrations/2.0/pre-set_tags_and_taxes_updatable.py rename to addons/l10n_de_skr03/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py diff --git a/addons/l10n_de_skr04/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_de_skr04/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_de_skr04/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_de_skr04/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_de_skr04/migrations/2.0/pre-set_tags_and_taxes_updatable.py b/addons/l10n_de_skr04/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py similarity index 100% rename from addons/l10n_de_skr04/migrations/2.0/pre-set_tags_and_taxes_updatable.py rename to addons/l10n_de_skr04/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py diff --git a/addons/l10n_et/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_et/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_et/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_et/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_gr/migrations/1.0/post-migrate_tags_on_taxes.py b/addons/l10n_gr/migrations/9.0.1.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_gr/migrations/1.0/post-migrate_tags_on_taxes.py rename to addons/l10n_gr/migrations/9.0.1.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_hr/migrations/13.0/post-migrate_tags_on_taxes.py b/addons/l10n_hr/migrations/9.0.13.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_hr/migrations/13.0/post-migrate_tags_on_taxes.py rename to addons/l10n_hr/migrations/9.0.13.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_hr/migrations/13.0/pre-set_tags_and_taxes_updatable.py b/addons/l10n_hr/migrations/9.0.13.0/pre-set_tags_and_taxes_updatable.py similarity index 100% rename from addons/l10n_hr/migrations/13.0/pre-set_tags_and_taxes_updatable.py rename to addons/l10n_hr/migrations/9.0.13.0/pre-set_tags_and_taxes_updatable.py diff --git a/addons/l10n_hu/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_hu/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_hu/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_hu/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_in/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_in/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_in/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_in/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_in/migrations/2.0/pre-set_tags_and_taxes_updatable.py b/addons/l10n_in/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py similarity index 100% rename from addons/l10n_in/migrations/2.0/pre-set_tags_and_taxes_updatable.py rename to addons/l10n_in/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py diff --git a/addons/l10n_jp/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_jp/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_jp/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_jp/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_nl/migrations/2.0/post-migrate_tags_on_taxes.py b/addons/l10n_nl/migrations/9.0.2.0/post-migrate_tags_on_taxes.py similarity index 100% rename from addons/l10n_nl/migrations/2.0/post-migrate_tags_on_taxes.py rename to addons/l10n_nl/migrations/9.0.2.0/post-migrate_tags_on_taxes.py diff --git a/addons/l10n_nl/migrations/2.0/pre-set_tags_and_taxes_updatable.py b/addons/l10n_nl/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py similarity index 100% rename from addons/l10n_nl/migrations/2.0/pre-set_tags_and_taxes_updatable.py rename to addons/l10n_nl/migrations/9.0.2.0/pre-set_tags_and_taxes_updatable.py diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 71c196cd693..eef93547916 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -1030,7 +1030,7 @@ class MailThread(models.AbstractModel): tools.decode_message_header(message, 'Cc'), tools.decode_message_header(message, 'Resent-To'), tools.decode_message_header(message, 'Resent-Cc')]) - rcpt_tos_localparts = [e.split('@')[0] for e in tools.email_split(rcpt_tos)] + rcpt_tos_localparts = [e.split('@')[0].lower() for e in tools.email_split(rcpt_tos)] # 0. Verify whether this is a bounced email and use it to collect bounce data and update notifications for customers if bounce_alias and bounce_alias in email_to_localpart: diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index d0f5a2f00f4..e21b492af63 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -230,7 +230,10 @@ class MrpProduction(models.Model): self.bom_id = False else: bom = self.env['mrp.bom']._bom_find(product=self.product_id, picking_type=self.picking_type_id, company_id=self.company_id.id) - self.bom_id = bom.id + if bom.type == 'normal': + self.bom_id = bom.id + else: + self.bom_id = False self.product_uom_id = self.product_id.uom_id.id return {'domain': {'product_uom_id': [('category_id', '=', self.product_id.uom_id.category_id.id)]}} diff --git a/addons/mrp/models/stock_move.py b/addons/mrp/models/stock_move.py index 5c539195444..853bd6d56a4 100644 --- a/addons/mrp/models/stock_move.py +++ b/addons/mrp/models/stock_move.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, exceptions, fields, models, _ +from odoo.exceptions import UserError from odoo.tools import float_compare from odoo.addons import decimal_precision as dp @@ -241,6 +242,8 @@ class StockMove(models.Model): else: for movelot in move.move_lot_ids: if float_compare(movelot.quantity_done, 0, precision_rounding=rounding) > 0: + if not movelot.lot_id: + raise UserError(_('You need to supply a lot/serial number.')) qty = move.product_uom._compute_quantity(movelot.quantity_done, move.product_id.uom_id) quants = quant_obj.quants_get_preferred_domain(qty, move, lot_id=movelot.lot_id.id, domain=main_domain, preferred_domain_list=preferred_domain_list) self.env['stock.quant'].quants_move(quants, move, move.location_dest_id, lot_id = movelot.lot_id.id) diff --git a/addons/mrp/report/mrp_bom_cost_report.py b/addons/mrp/report/mrp_bom_cost_report.py index 93ae3ad64e1..cbbdf935497 100644 --- a/addons/mrp/report/mrp_bom_cost_report.py +++ b/addons/mrp/report/mrp_bom_cost_report.py @@ -26,7 +26,7 @@ class MrpBomCost(models.AbstractModel): 'attributes': attributes} total = 0.0 for bom_line, line_data in result2: - price_uom = self.env['product.uom']._compute_qty(bom_line.product_id.uom_id.id, bom_line.product_id.standard_price, bom_line.product_uom_id.id) + price_uom = bom_line.product_uom_id._compute_quantity(bom_line.product_id.standard_price, bom_line.product_uom_id) line = { 'product_id': bom_line.product_id, 'product_uom_qty': line_data['qty'], #line_data needed for phantom bom explosion diff --git a/addons/mrp/views/mrp_production_views.xml b/addons/mrp/views/mrp_production_views.xml index 003e703818a..993b8b8fb32 100644 --- a/addons/mrp/views/mrp_production_views.xml +++ b/addons/mrp/views/mrp_production_views.xml @@ -93,7 +93,7 @@ string="Update" states="confirmed,planned,progress" class="oe_link" attrs="{'invisible': [('state','=','done')]}"/> - @@ -1268,7 +1272,7 @@ -