Permalink
Browse files

[IMP] point_of_sale: accounting lock dates and POS sessions

Forbid locking the fiscal year or period in case there is an open POS session into it. Without that, it will be impossible to close these sessions, as the lock date will not allow posting accounting entries for them.

Also forbid to create a session before lock date, as it would be impossible to close.
  • Loading branch information...
oco-odoo committed Oct 29, 2018
1 parent 80f3eb2 commit 8c2022eb7d74fe555e9d9b45f4d10a84b34fcc01
@@ -12,4 +12,6 @@
from . import pos_session
from . import product
from . import res_partner
from . import res_users
from . import res_company
from . import res_config_settings
@@ -160,6 +160,14 @@ def _check_pos_config(self):
]) > 1:
raise ValidationError(_("Another session is already opened for this point of sale."))

@api.constrains('start_at')
def _check_start_date(self):
for record in self:
company = record.config_id.journal_id.company_id
start_date = record.start_at.date()
if start_date <= company.period_lock_date or start_date <= company.fiscalyear_lock_date:
raise ValidationError(_("You cannot create a session before the accounting lock date."))

@api.model
def create(self, values):
config_id = values.get('config_id') or self.env.context.get('default_config_id')
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-

from odoo import api, models, fields, _
from odoo.exceptions import ValidationError

class ResCompany(models.Model):
_inherit = 'res.company'

@api.constrains('period_lock_date')
def validate_period_lock_date(self):
""" This constrains makes it impossible to change the period lock date if
some open POS session exists into it. Without that, these POS sessions
would trigger an error message saying that the period has been locked when
trying to close them.
"""
pos_session_model = self.env['pos.session']
for record in self:
sessions_in_period = pos_session_model.search([('state', '!=', 'closed'), '|', ('start_at', '<=', record.period_lock_date), ('start_at', '<=', record.fiscalyear_lock_date)])
if sessions_in_period:
sessions_str = ', '.join(sessions_in_period.mapped('name'))
raise ValidationError(_("Please close all the point of sale sessions in this period before closing it. Open sessions are: %s ") % (sessions_str))

0 comments on commit 8c2022e

Please sign in to comment.