101 lines
5.5 KiB
Python
101 lines
5.5 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import flectra
|
||
|
import time
|
||
|
from flectra import fields
|
||
|
|
||
|
from flectra.tests import common
|
||
|
|
||
|
|
||
|
class TestAngloSaxonCommon(common.TransactionCase):
|
||
|
|
||
|
def setUp(self):
|
||
|
super(TestAngloSaxonCommon, self).setUp()
|
||
|
self.PosMakePayment = self.env['pos.make.payment']
|
||
|
self.PosOrder = self.env['pos.order']
|
||
|
self.Statement = self.env['account.bank.statement']
|
||
|
self.company = self.env.ref('base.main_company')
|
||
|
self.product = self.env.ref('product.product_product_3')
|
||
|
self.partner = self.env.ref('base.res_partner_1')
|
||
|
self.category = self.env.ref('product.product_category_1')
|
||
|
self.category = self.category.copy({'name': 'New category','property_valuation': 'real_time'})
|
||
|
account_type_rcv = self.env['account.account.type'].create({'name': 'RCV type', 'type': 'receivable'})
|
||
|
account_type_oth = self.env['account.account.type'].create({'name': 'RCV type', 'type': 'other'})
|
||
|
self.account = self.env['account.account'].create({'name': 'Receivable', 'code': 'RCV00' , 'user_type_id': account_type_rcv.id, 'reconcile': True})
|
||
|
account_expense = self.env['account.account'].create({'name': 'Expense', 'code': 'EXP00' , 'user_type_id': account_type_oth.id, 'reconcile': True})
|
||
|
account_output = self.env['account.account'].create({'name': 'Output', 'code': 'OUT00' , 'user_type_id': account_type_oth.id, 'reconcile': True})
|
||
|
self.partner.property_account_receivable_id = self.account
|
||
|
self.category.property_account_income_categ_id = self.account
|
||
|
self.category.property_account_expense_categ_id = account_expense
|
||
|
self.category.property_stock_account_input_categ_id = self.account
|
||
|
self.category.property_stock_account_output_categ_id = account_output
|
||
|
self.category.property_stock_valuation_account_id = self.account
|
||
|
self.category.property_stock_journal = self.env['account.journal'].create({'name': 'Stock journal', 'type': 'sale', 'code': 'STK00'})
|
||
|
self.pos_config = self.env.ref('point_of_sale.pos_config_main')
|
||
|
self.pos_config = self.pos_config.copy({'name': 'New POS config'})
|
||
|
self.product = self.product.copy({'name': 'New product','standard_price': 100})
|
||
|
self.company.anglo_saxon_accounting = True
|
||
|
self.product.categ_id = self.category
|
||
|
sale_journal = self.env['account.journal'].create({'name': 'POS journal', 'type': 'sale', 'code': 'POS00'})
|
||
|
self.pos_config.journal_id = sale_journal
|
||
|
self.cash_journal = self.env['account.journal'].create({'name': 'CASH journal', 'type': 'cash', 'code': 'CSH00'})
|
||
|
|
||
|
|
||
|
class TestAngloSaxonFlow(TestAngloSaxonCommon):
|
||
|
|
||
|
def test_create_account_move_line(self):
|
||
|
# This test will check that the correct journal entries are created when a product in real time valuation
|
||
|
# is sold in a company using anglo-saxon
|
||
|
self.pos_config.open_session_cb()
|
||
|
self.pos_config.current_session_id.write({'journal_ids': [(6, 0, [self.cash_journal.id])]})
|
||
|
self.cash_journal.loss_account_id = self.account
|
||
|
self.pos_statement = self.Statement.create({
|
||
|
'balance_start': 0.0,
|
||
|
'balance_end_real': 0.0,
|
||
|
'date': time.strftime('%Y-%m-%d'),
|
||
|
'journal_id': self.cash_journal.id,
|
||
|
'company_id': self.company.id,
|
||
|
'name': 'pos session test',
|
||
|
})
|
||
|
self.pos_config.current_session_id.write({'statement_ids': [(6, 0, [self.pos_statement.id])]})
|
||
|
|
||
|
# I create a PoS order with 1 unit of New product at 450 EUR
|
||
|
self.pos_order_pos0 = self.PosOrder.create({
|
||
|
'company_id': self.company.id,
|
||
|
'partner_id': self.partner.id,
|
||
|
'pricelist_id': self.company.partner_id.property_product_pricelist.id,
|
||
|
'session_id': self.pos_config.current_session_id.id,
|
||
|
'lines': [(0, 0, {
|
||
|
'name': "OL/0001",
|
||
|
'product_id': self.product.id,
|
||
|
'price_unit': 450,
|
||
|
'discount': 0.0,
|
||
|
'qty': 1.0
|
||
|
})]
|
||
|
})
|
||
|
|
||
|
# I make a payment to fully pay the order
|
||
|
context_make_payment = {"active_ids": [self.pos_order_pos0.id], "active_id": self.pos_order_pos0.id}
|
||
|
self.pos_make_payment_0 = self.PosMakePayment.with_context(context_make_payment).create({
|
||
|
'amount': 450.0,
|
||
|
'journal_id': self.cash_journal.id,
|
||
|
})
|
||
|
|
||
|
# I click on the validate button to register the payment.
|
||
|
context_payment = {'active_id': self.pos_order_pos0.id}
|
||
|
self.pos_make_payment_0.with_context(context_payment).check()
|
||
|
|
||
|
# I check that the order is marked as paid
|
||
|
self.assertEqual(self.pos_order_pos0.state, 'paid', 'Order should be in paid state.')
|
||
|
|
||
|
# I close the current session to generate the journal entries
|
||
|
self.pos_config.current_session_id.action_pos_session_close()
|
||
|
|
||
|
# I test that the generated journal entries are correct.
|
||
|
account_output = self.category.property_stock_account_output_categ_id
|
||
|
expense_account = self.category.property_account_expense_categ_id
|
||
|
aml = self.pos_order_pos0.account_move.line_ids
|
||
|
aml_output = aml.filtered(lambda l: l.account_id.id == account_output.id)
|
||
|
aml_expense = aml.filtered(lambda l: l.account_id.id == expense_account.id)
|
||
|
self.assertEqual(aml_output.credit, self.product.standard_price, "Cost of Good Sold entry missing or mismatching")
|
||
|
self.assertEqual(aml_expense.debit, self.product.standard_price, "Cost of Good Sold entry missing or mismatching")
|