You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

64 lines
2.3 KiB

from odoo import fields
from odoo.exceptions import ValidationError
from odoo.tests.common import TransactionCase
class TestPos(TransactionCase):
def setUp(self):
super().setUp()
self.pos_config = self.env.ref('point_of_sale.pos_config_main').copy({
'name': 'Block PoS Session with Stock Error',
'allow_session_closing_with_stock_errors': False,
})
self.product_tracking = self.env.ref(
'point_of_sale.desk_organizer'
).copy({
'name': 'Product with Tracking',
'tracking': 'serial',
})
def test_session_closing_with_errors(self):
pos_session = self.env['pos.session'].create({
'config_id': self.pos_config.id,
})
# We create an order that will generate errors
# (the product requires a serial number)
pos_order = self.env['pos.order'].create({
'session_id': pos_session.id,
'lines': [(0, 0, {
'name': 'OL/0001',
'product_id': self.product_tracking.id,
'tax_ids': False,
'qty': 1.0,
'price_unit': 1000,
'price_subtotal': 1000,
'price_subtotal_incl': 1000,
})],
'amount_total': 1000.0,
'amount_tax': 0.0,
'amount_paid': 1000.0,
'amount_return': 0.0,
})
# Register order payment
pos_order.add_payment({
'amount': 1000,
'payment_date': fields.Datetime.now(),
'statement_id': pos_session.statement_ids[0].id,
'payment_name': 'PAY',
'journal': pos_session.statement_ids[0].journal_id.id,
})
# Set ending balance in statement
pos_session.statement_ids[0].write({
'balance_end_real': pos_session.statement_ids[0].balance_end
})
pos_order.action_pos_order_paid()
# Blocked because we have errors
with self.assertRaises(ValidationError):
pos_session.action_pos_session_close()
# Enable closing with errors
self.pos_config.write({
'allow_session_closing_with_stock_errors': True,
})
# Should be possible to close now
pos_session.action_pos_session_close()