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.
162 lines
6.2 KiB
162 lines
6.2 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2017 ACSONE SA/NV
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import fields
|
|
|
|
from odoo.tests.common import SavepointCase
|
|
|
|
|
|
class TestSequenceNumberSync(SavepointCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
"""
|
|
Simulation of sales coming from the interface
|
|
"""
|
|
super(TestSequenceNumberSync, cls).setUpClass()
|
|
|
|
# ENVIRONEMENTS
|
|
cls.pos_obj = cls.env['pos.order']
|
|
cls.partner_obj = cls.env['res.partner']
|
|
|
|
# INSTANCES
|
|
cls.partner = cls.partner_obj.create({'name': 'test_partner_A'})
|
|
cls.product = cls.env.ref(
|
|
'product.product_order_01')
|
|
cls.pos_config = cls.env.ref('point_of_sale.pos_config_main')
|
|
|
|
# USING VARIABLE
|
|
cls.sequence_ref_number = 10
|
|
cls.sequence_number = 2
|
|
|
|
# USER PARTNER
|
|
cls.user_partner = cls.env.user.partner_id
|
|
|
|
def get_data(self, session, sequence_number):
|
|
return '000' + str(session.id) + '-001-000' + str(sequence_number)
|
|
|
|
def ui_order_data(self, sequence_ref_number, sequence_number,
|
|
current_session):
|
|
values = {
|
|
'data': {
|
|
'creation_date': fields.Datetime.now(),
|
|
'fiscal_position_id': False,
|
|
'pricelist_id': current_session.config_id.pricelist_id.id,
|
|
'amount_return': 0,
|
|
'sequence_ref_number': sequence_ref_number,
|
|
'lines': [[0, 0, {'product_id': self.product.id,
|
|
'qty': 1}]],
|
|
'name': 'Order ' + self.get_data(
|
|
current_session, sequence_number),
|
|
'partner_id': False,
|
|
'pos_session_id': current_session.id,
|
|
'sequence_number': sequence_number,
|
|
'statement_ids': [[0, 0, {
|
|
'account_id':
|
|
self.user_partner.property_account_receivable_id.id,
|
|
'amount': 0.9,
|
|
'journal_id': self.pos_config.journal_ids[0].id,
|
|
'name': fields.Datetime.now(),
|
|
'statement_id':current_session.statement_ids[0].id}]],
|
|
'user_id': self.env.uid
|
|
},
|
|
'to_invoice': False
|
|
}
|
|
|
|
# because travis install (pos_loyalty)
|
|
# may be an edge effect
|
|
if 'loyalty_points' in self.pos_obj._fields:
|
|
values['data']['loyalty_points'] = 0
|
|
|
|
return values
|
|
|
|
def test_check_sequence_number_sync_00(self):
|
|
"""
|
|
case 1 :
|
|
1 - create order from ui
|
|
2 - close session
|
|
3 - create new order from ui,
|
|
4 - close session
|
|
5 - validate closing & post entries
|
|
sequence result : 000session_id-001-000sequence_number
|
|
and 000new_session_id+1-001-000sequence_number
|
|
order name result : Main/00sequence_ref_number
|
|
"""
|
|
|
|
# click on create a new session button
|
|
self.pos_config.open_session_cb()
|
|
|
|
# session
|
|
current_session = self.pos_config.current_session_id
|
|
|
|
# data
|
|
ui_order = self.ui_order_data(self.sequence_ref_number,
|
|
self.sequence_number, current_session)
|
|
|
|
# I create an order on an open session
|
|
pos_order_id = self.pos_obj.create_from_ui([ui_order])
|
|
pos_order = self.env['pos.order'].browse(pos_order_id)
|
|
self.assertEqual(pos_order.name,
|
|
'Main/00' + str(self.sequence_ref_number))
|
|
self.assertEqual(pos_order.pos_reference,
|
|
'Order 000' + str(current_session.id)+'-001-0002')
|
|
|
|
# close the session
|
|
self.pos_config.current_session_id.action_pos_session_closing_control()
|
|
|
|
# create an open new session
|
|
self.pos_config.open_session_cb()
|
|
new_current_session = self.pos_config.current_session_id
|
|
ui_order['data']['pos_session_id'] = new_current_session.id
|
|
ui_order['data']['name'] = self.get_data(
|
|
new_current_session, self.sequence_number)
|
|
|
|
# create an order on an open session
|
|
pos_order_id = self.pos_obj.create_from_ui([ui_order])
|
|
pos_order = self.env['pos.order'].browse(pos_order_id)
|
|
self.assertEqual(pos_order.name,
|
|
'Main/00' + str(self.sequence_ref_number))
|
|
self.assertEqual(pos_order.pos_reference,
|
|
'000' + str(new_current_session.id)+'-001-0002')
|
|
|
|
def test_check_sequence_number_sync_01(self):
|
|
"""
|
|
case 2 :
|
|
1 - create order from ui,
|
|
2 - create new order from ui
|
|
3 - validate closing & post entries
|
|
sequence result : 000session_id-001-000sequence_number
|
|
and 000session_id-001-000new_sequence_number
|
|
order name result : Main/00sequence_ref_number
|
|
"""
|
|
|
|
# create a new session button
|
|
self.pos_config.open_session_cb()
|
|
|
|
# session
|
|
current_session = self.pos_config.current_session_id
|
|
|
|
# data
|
|
ui_order = self.ui_order_data(self.sequence_ref_number,
|
|
self.sequence_number, current_session)
|
|
|
|
# create an order on an open session
|
|
pos_order_id = self.pos_obj.create_from_ui([ui_order])
|
|
pos_order = self.env['pos.order'].browse(pos_order_id)
|
|
self.assertEqual(pos_order.name,
|
|
'Main/00' + str(self.sequence_ref_number))
|
|
self.assertEqual(pos_order.pos_reference,
|
|
'Order 000' + str(current_session.id) + '-001-0002')
|
|
|
|
self.sequence_number = self.sequence_number+1
|
|
ui_order = self.ui_order_data(self.sequence_ref_number,
|
|
self.sequence_number, current_session)
|
|
pos_order_id = self.pos_obj.create_from_ui([ui_order])
|
|
pos_order = self.env['pos.order'].browse(pos_order_id)
|
|
self.assertEqual(pos_order.name,
|
|
'Main/00' + str(self.sequence_ref_number))
|
|
self.assertEqual(pos_order.pos_reference,
|
|
'Order 000' + str(current_session.id) + '-001-0003')
|
|
# close the session
|
|
self.pos_config.current_session_id.action_pos_session_closing_control()
|