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
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()
|