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.
367 lines
15 KiB
367 lines
15 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2015 ACSONE SA/NV (<http://acsone.eu>)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo.tests.common import SavepointCase
|
|
|
|
|
|
class TestPosPaymentEntriesGlobalization(SavepointCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestPosPaymentEntriesGlobalization, cls).setUpClass()
|
|
|
|
cls.move_line_obj = cls.env['account.move.line']
|
|
cls.pos_order_obj = cls.env['pos.order']
|
|
cls.main_config = cls.env.ref('point_of_sale.pos_config_main')
|
|
cls.account_type = cls.env['account.account.type']
|
|
cls.account_account = cls.env['account.account']
|
|
cls.payment_method = cls.env['account.journal']
|
|
cls.product_01 = cls.env.ref(
|
|
'point_of_sale.product_product_consumable')
|
|
cls.pos_config = cls.env.ref('point_of_sale.pos_config_main')
|
|
cls.customer_01 = cls.env.ref('base.res_partner_2')
|
|
cls.pos_session_obj = cls.env['pos.session']
|
|
|
|
# MODELS
|
|
cls.account_type = cls.account_type.create({
|
|
'name': 'Bank and Cash',
|
|
'type': 'liquidity',
|
|
'include_initial_balance': True
|
|
})
|
|
cls.income_account = cls.account_account.create({
|
|
'code': 'X11006',
|
|
'name': 'Other Income',
|
|
'user_type_id': cls.account_type.id,
|
|
})
|
|
cls.income_account_02 = cls.income_account.copy()
|
|
cls.account_account = cls.account_account.create({
|
|
'code': 'Test X1014',
|
|
'name': 'Bank Current Account - (test)',
|
|
'user_type_id': cls.account_type.id,
|
|
'reconcile': True
|
|
})
|
|
|
|
cls.payment_method_02 = cls.payment_method.create({
|
|
'name': 'Bank - Test',
|
|
'code': 'TBNK',
|
|
'type': 'bank',
|
|
'default_debit_account_id': cls.account_account.id,
|
|
'default_credit_account_id': cls.account_account.id
|
|
})
|
|
|
|
# next line
|
|
cls.payment_method_03 = cls.payment_method.create({
|
|
'name': 'Checks Journal - (test)',
|
|
'code': 'TBNK',
|
|
'type': 'bank',
|
|
'default_debit_account_id': cls.account_account.id,
|
|
'default_credit_account_id': cls.account_account.id
|
|
})
|
|
|
|
cls.misc_journal = cls.payment_method.create({
|
|
'name': 'Miscellaneous Journal - (test)',
|
|
'code': 'TMIS',
|
|
'type': 'general'
|
|
})
|
|
cls.misc_journal_02 = cls.misc_journal.copy()
|
|
|
|
def create_order(self, amount, session):
|
|
# I create a new order
|
|
order_vals = {
|
|
'session_id': session.id,
|
|
'partner_id': self.customer_01.id,
|
|
'lines': [(0, 0, {'product_id': self.product_01.id,
|
|
'price_unit': amount})]
|
|
}
|
|
return self.pos_order_obj.create(order_vals)
|
|
|
|
def test_globalization_0(self):
|
|
# add payment method
|
|
self.main_config.write(
|
|
{'journal_ids': [(6, 0, [self.payment_method_02.id])]})
|
|
# Create and open a new session
|
|
self.session = self.pos_session_obj.create(
|
|
{'config_id': self.main_config.id})
|
|
self.session.action_pos_session_open()
|
|
|
|
# config pos payment globalization
|
|
self.payment_method_02.pos_payment_globalization = True
|
|
self.payment_method_02.pos_payment_globalization_account = \
|
|
self.income_account
|
|
self.payment_method_02.pos_payment_globalization_journal = \
|
|
self.misc_journal
|
|
|
|
# I create a new orders
|
|
order_01 = self.create_order(100, self.session)
|
|
order_02 = self.create_order(100, self.session)
|
|
|
|
# I pay the created order
|
|
payment_data1 = {'amount': 100,
|
|
'journal': self.payment_method_02.id,
|
|
'partner_id': order_01.partner_id.id}
|
|
payment_data2 = {'amount': 100,
|
|
'journal': self.payment_method_02.id,
|
|
'partner_id': order_02.partner_id.id}
|
|
|
|
# add payment to orders and pay
|
|
order_01.add_payment(payment_data1)
|
|
if order_01.test_paid():
|
|
order_01.action_pos_order_paid()
|
|
|
|
order_02.add_payment(payment_data2)
|
|
if order_02.test_paid():
|
|
order_02.action_pos_order_paid()
|
|
|
|
# close session
|
|
self.session.action_pos_session_closing_control()
|
|
|
|
move_line = self.move_line_obj.search(
|
|
[('account_id', '=', self.income_account.id),
|
|
('journal_id', '=', self.misc_journal.id)])
|
|
|
|
# I check that there is only one move line
|
|
self.assertEqual(len(move_line.ids), 1)
|
|
self.assertAlmostEqual(move_line.debit, 200, 2)
|
|
domain = [('move_id', '=', move_line.move_id.id),
|
|
('id', '!=', move_line.id)]
|
|
reverse_lines = self.move_line_obj.search(domain)
|
|
# I ensure that the move contains reverse lines
|
|
self.assertEqual(len(reverse_lines), 2)
|
|
# I ensure reverse lines are reconciled
|
|
not_reconcile_reverse_lines = reverse_lines.filtered(
|
|
lambda r: not r.reconciled)
|
|
self.assertEqual(len(not_reconcile_reverse_lines), 0)
|
|
|
|
def test_globalization_1(self):
|
|
# add payment method
|
|
self.main_config.write(
|
|
{'journal_ids': [(6, 0, [self.payment_method_02.id,
|
|
self.payment_method_03.id])]
|
|
})
|
|
# Create and open a new session
|
|
self.session = self.pos_session_obj.create(
|
|
{'config_id': self.main_config.id})
|
|
self.session.action_pos_session_open()
|
|
|
|
self.payment_method_02.pos_payment_globalization = True
|
|
self.payment_method_02.pos_payment_globalization_account = \
|
|
self.income_account
|
|
self.payment_method_02.pos_payment_globalization_journal = \
|
|
self.misc_journal
|
|
self.payment_method_03.pos_payment_globalization = True
|
|
self.payment_method_03.pos_payment_globalization_account = \
|
|
self.income_account_02
|
|
self.payment_method_03.pos_payment_globalization_journal = \
|
|
self.misc_journal
|
|
|
|
# I create a new order
|
|
order_01 = self.create_order(100, self.session)
|
|
order_02 = self.create_order(100, self.session)
|
|
|
|
# I pay the created order
|
|
payment_data1 = {'amount': 100,
|
|
'journal': self.payment_method_02.id,
|
|
'partner_id': order_01.partner_id.id}
|
|
payment_data2 = {'amount': 100,
|
|
'journal': self.payment_method_03.id,
|
|
'partner_id': order_02.partner_id.id}
|
|
|
|
# add payment to orders and pay
|
|
order_01.add_payment(payment_data1)
|
|
if order_01.test_paid():
|
|
order_01.action_pos_order_paid()
|
|
|
|
order_02.add_payment(payment_data2)
|
|
if order_02.test_paid():
|
|
order_02.action_pos_order_paid()
|
|
|
|
# close session
|
|
self.session.action_pos_session_closing_control()
|
|
|
|
# I check the first globalization account
|
|
move_line = self.move_line_obj.search(
|
|
[('account_id', '=', self.income_account.id),
|
|
('journal_id', '=', self.misc_journal.id)])
|
|
|
|
# I check that there is only one move line
|
|
self.assertEqual(len(move_line.ids), 1)
|
|
self.assertAlmostEqual(move_line.debit, 100, 2)
|
|
domain = [('move_id', '=', move_line.move_id.id),
|
|
('id', '!=', move_line.id)]
|
|
reverse_lines = self.move_line_obj.search(domain)
|
|
# I ensure that the move contains reverse lines
|
|
self.assertEqual(len(reverse_lines), 1)
|
|
# I ensure reverse lines are reconciled
|
|
not_reconcile_reverse_lines = reverse_lines.filtered(
|
|
lambda r: not r.reconciled)
|
|
self.assertEqual(len(not_reconcile_reverse_lines), 0)
|
|
# I check the second globalization account
|
|
move_line = self.move_line_obj.search(
|
|
[('account_id', '=', self.income_account_02.id),
|
|
('journal_id', '=', self.misc_journal.id)])
|
|
# I check that there is only one move line
|
|
self.assertEqual(len(move_line.ids), 1)
|
|
self.assertAlmostEqual(move_line.debit, 100, 2)
|
|
domain = [('move_id', '=', move_line.move_id.id),
|
|
('id', '!=', move_line.id)]
|
|
reverse_lines = self.move_line_obj.search(domain)
|
|
# I ensure that the move contains reverse lines
|
|
self.assertEqual(len(reverse_lines), 1)
|
|
# I ensure reverse lines are reconciled
|
|
not_reconcile_reverse_lines = reverse_lines.filtered(
|
|
lambda r: not r.reconciled)
|
|
self.assertEqual(len(not_reconcile_reverse_lines), 0)
|
|
|
|
def test_globalization_2(self):
|
|
# add payment method
|
|
self.main_config.write({'journal_ids': [(6, 0, [
|
|
self.payment_method_02.id, self.payment_method_03.id])]})
|
|
# Create and open a new session
|
|
self.session = self.pos_session_obj.create(
|
|
{'config_id': self.main_config.id})
|
|
self.session.action_pos_session_open()
|
|
|
|
self.payment_method_02.pos_payment_globalization = True
|
|
self.payment_method_02.pos_payment_globalization_account = \
|
|
self.income_account
|
|
self.payment_method_02.pos_payment_globalization_journal = \
|
|
self.misc_journal
|
|
self.payment_method_03.pos_payment_globalization = True
|
|
self.payment_method_03.pos_payment_globalization_account = \
|
|
self.income_account_02
|
|
self.payment_method_03.pos_payment_globalization_journal = \
|
|
self.misc_journal
|
|
|
|
# create orders
|
|
order_01 = self.create_order(100, self.session)
|
|
order_02 = self.create_order(100, self.session)
|
|
|
|
# I pay the created order
|
|
payment_data1 = {'amount': 100,
|
|
'journal': self.payment_method_02.id,
|
|
'partner_id': order_01.partner_id.id}
|
|
payment_data2 = {'amount': 100,
|
|
'journal': self.payment_method_03.id,
|
|
'partner_id': order_02.partner_id.id}
|
|
|
|
order_01.add_payment(payment_data1)
|
|
if order_01.test_paid():
|
|
order_01.action_pos_order_paid()
|
|
|
|
order_02.add_payment(payment_data2)
|
|
if order_02.test_paid():
|
|
order_02.action_pos_order_paid()
|
|
|
|
# close session
|
|
self.session.action_pos_session_closing_control()
|
|
|
|
# I check the first globalization account
|
|
move_line = self.move_line_obj.search(
|
|
[('account_id', '=', self.income_account.id),
|
|
('journal_id', '=', self.misc_journal.id)])
|
|
# I check that there is only one move line
|
|
self.assertEqual(len(move_line.ids), 1)
|
|
self.assertAlmostEqual(move_line.debit, 100, 2)
|
|
domain = [('move_id', '=', move_line.move_id.id),
|
|
('id', '!=', move_line.id)]
|
|
reverse_lines = self.move_line_obj.search(domain)
|
|
# I ensure that the move contains reverse lines
|
|
self.assertEqual(len(reverse_lines), 1)
|
|
# I ensure reverse lines are reconciled
|
|
not_reconcile_reverse_lines = reverse_lines.filtered(
|
|
lambda r: not r.reconciled)
|
|
self.assertEqual(len(not_reconcile_reverse_lines), 0)
|
|
# I check the second globalization account
|
|
move_line = self.move_line_obj.search(
|
|
[('account_id', '=', self.income_account_02.id),
|
|
('journal_id', '=', self.misc_journal.id)])
|
|
# I check that there is only one move line
|
|
self.assertEqual(len(move_line.ids), 1)
|
|
self.assertAlmostEqual(move_line.debit, 100, 2)
|
|
domain = [('move_id', '=', move_line.move_id.id),
|
|
('id', '!=', move_line.id)]
|
|
reverse_lines = self.move_line_obj.search(domain)
|
|
# I ensure that the move contains reverse lines
|
|
self.assertEqual(len(reverse_lines), 1)
|
|
# I ensure reverse lines are reconciled
|
|
not_reconcile_reverse_lines = reverse_lines.filtered(
|
|
lambda r: not r.reconciled)
|
|
self.assertEqual(len(not_reconcile_reverse_lines), 0)
|
|
|
|
def test_globalization_3(self):
|
|
# add payment method
|
|
self.main_config.write(
|
|
{'journal_ids': [(6, 0, [self.payment_method_02.id,
|
|
self.payment_method_03.id])]})
|
|
# Create and open a new session
|
|
self.session = self.pos_session_obj.create(
|
|
{'config_id': self.main_config.id})
|
|
self.session.action_pos_session_open()
|
|
|
|
self.payment_method_02.pos_payment_globalization = True
|
|
self.payment_method_02.pos_payment_globalization_account =\
|
|
self.income_account
|
|
self.payment_method_02.pos_payment_globalization_journal =\
|
|
self.misc_journal
|
|
self.payment_method_03.pos_payment_globalization = True
|
|
self.payment_method_03.pos_payment_globalization_account =\
|
|
self.income_account
|
|
self.payment_method_03.pos_payment_globalization_journal =\
|
|
self.misc_journal_02
|
|
|
|
# I create orders
|
|
order_01 = self.create_order(100, self.session)
|
|
order_02 = self.create_order(100, self.session)
|
|
|
|
# I pay the created orders
|
|
payment_data1 = {'amount': 100,
|
|
'journal': self.payment_method_02.id,
|
|
'partner_id': order_02.partner_id.id}
|
|
payment_data2 = {'amount': 100,
|
|
'journal': self.payment_method_03.id,
|
|
'partner_id': order_02.partner_id.id}
|
|
|
|
order_01.add_payment(payment_data1)
|
|
if order_01.test_paid():
|
|
order_01.action_pos_order_paid()
|
|
|
|
order_02.add_payment(payment_data2)
|
|
if order_02.test_paid():
|
|
order_02.action_pos_order_paid()
|
|
|
|
# close session
|
|
self.session.action_pos_session_closing_control()
|
|
|
|
# I check the first globalization journal
|
|
move_line = self.move_line_obj.search(
|
|
[('account_id', '=', self.income_account.id),
|
|
('journal_id', '=', self.misc_journal.id)])
|
|
# I check that there is only one move line
|
|
self.assertEqual(len(move_line.ids), 1)
|
|
self.assertAlmostEqual(move_line.debit, 100, 2)
|
|
domain = [('move_id', '=', move_line.move_id.id),
|
|
('id', '!=', move_line.id)]
|
|
reverse_lines = self.move_line_obj.search(domain)
|
|
# I ensure that the move contains reverse lines
|
|
self.assertEqual(len(reverse_lines), 1)
|
|
# I ensure reverse lines are reconciled
|
|
not_reconcile_reverse_lines = reverse_lines.filtered(
|
|
lambda r: not r.reconciled)
|
|
self.assertEqual(len(not_reconcile_reverse_lines), 0)
|
|
# I check the second globalization journal
|
|
move_line = self.move_line_obj.search(
|
|
[('account_id', '=', self.income_account.id),
|
|
('journal_id', '=', self.misc_journal_02.id)])
|
|
# I check that there is only one move line
|
|
self.assertEqual(len(move_line.ids), 1)
|
|
self.assertAlmostEqual(move_line.debit, 100, 2)
|
|
domain = [('move_id', '=', move_line.move_id.id),
|
|
('id', '!=', move_line.id)]
|
|
reverse_lines = self.move_line_obj.search(domain)
|
|
# I ensure that the move contains reverse lines
|
|
self.assertEqual(len(reverse_lines), 1)
|
|
# I ensure reverse lines are reconciled
|
|
not_reconcile_reverse_lines = reverse_lines.filtered(
|
|
lambda r: not r.reconciled)
|
|
self.assertEqual(len(not_reconcile_reverse_lines), 0)
|