sale_stock/tests/test_sale_stock_accrued_entries.py

152 lines
6.4 KiB
Python
Raw Permalink Normal View History

# -*- coding: utf-8 -*-
from odoo import fields, Command
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
from odoo.tests import tagged, Form
from odoo.exceptions import UserError
@tagged('post_install', '-at_install')
class TestAccruedStockSaleOrders(AccountTestInvoicingCommon):
@classmethod
def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)
uom_unit = cls.env.ref('uom.product_uom_unit')
cls.product_order = cls.env['product.product'].create({
'name': "Product",
'list_price': 30.0,
'type': 'consu',
'uom_id': uom_unit.id,
'uom_po_id': uom_unit.id,
'invoice_policy': 'delivery',
})
cls.sale_order = cls.env['sale.order'].with_context(tracking_disable=True).create({
'partner_id': cls.partner_a.id,
'order_line': [
Command.create({
'name': cls.product_order.name,
'product_id': cls.product_order.id,
'product_uom_qty': 10.0,
'product_uom': cls.product_order.uom_id.id,
'price_unit': cls.product_order.list_price,
'tax_id': False,
})
]
})
cls.sale_order.action_confirm()
cls.account_expense = cls.company_data['default_account_expense']
cls.account_revenue = cls.company_data['default_account_revenue']
def test_sale_stock_accruals(self):
# deliver 2 on 2020-01-02
pick = self.sale_order.picking_ids
pick.move_ids.write({'quantity': 2, 'picked': True})
pick.button_validate()
wiz_act = pick.button_validate()
wiz = Form(self.env[wiz_act['res_model']].with_context(wiz_act['context'])).save()
wiz.process()
pick.move_ids.write({'date': fields.Date.to_date('2020-01-02')})
# deliver 3 on 2020-01-06
pick = pick.copy()
pick.move_ids.write({'quantity': 3, 'picked': True})
wiz_act = pick.button_validate()
pick.move_ids.write({'date': fields.Date.to_date('2020-01-06')})
wizard = self.env['account.accrued.orders.wizard'].with_context({
'active_model': 'sale.order',
'active_ids': self.sale_order.ids,
}).create({
'account_id': self.account_expense.id,
'date': '2020-01-01',
})
# nothing to invoice on 2020-01-01
with self.assertRaises(UserError):
wizard.create_entries()
# 2 to invoice on 2020-01-04
wizard.date = fields.Date.to_date('2020-01-04')
self.assertRecordValues(self.env['account.move'].search(wizard.create_entries()['domain']).line_ids, [
# reverse move lines
{'account_id': self.account_revenue.id, 'debit': 60, 'credit': 0},
{'account_id': wizard.account_id.id, 'debit': 0, 'credit': 60},
# move lines
{'account_id': self.account_revenue.id, 'debit': 0, 'credit': 60},
{'account_id': wizard.account_id.id, 'debit': 60, 'credit': 0},
])
# 5 to invoice on 2020-01-07
wizard.date = fields.Date.to_date('2020-01-07')
self.assertRecordValues(self.env['account.move'].search(wizard.create_entries()['domain']).line_ids, [
# reverse move lines
{'account_id': self.account_revenue.id, 'debit': 150, 'credit': 0},
{'account_id': wizard.account_id.id, 'debit': 0, 'credit': 150},
# move lines
{'account_id': self.account_revenue.id, 'debit': 0, 'credit': 150},
{'account_id': wizard.account_id.id, 'debit': 150, 'credit': 0},
])
def test_sale_stock_invoiced_accrued_entries(self):
# deliver 2 on 2020-01-02
pick = self.sale_order.picking_ids
pick.move_ids.write({'quantity': 2, 'picked': True})
pick.button_validate()
wiz_act = pick.button_validate()
wiz = Form(self.env[wiz_act['res_model']].with_context(wiz_act['context'])).save()
wiz.process()
pick.move_ids.write({'date': fields.Date.to_date('2020-01-02')})
# invoice on 2020-01-04
inv = self.sale_order._create_invoices()
inv.invoice_date = fields.Date.to_date('2020-01-04')
inv.action_post()
# deliver 3 on 2020-01-06
pick = pick.copy()
pick.move_ids.write({'quantity': 3, 'picked': True})
wiz_act = pick.button_validate()
pick.move_ids.write({'date': fields.Date.to_date('2020-01-06')})
# invoice on 2020-01-08
inv = self.sale_order._create_invoices()
inv.invoice_date = fields.Date.to_date('2020-01-08')
inv.action_post()
wizard = self.env['account.accrued.orders.wizard'].with_context({
'active_model': 'sale.order',
'active_ids': self.sale_order.ids,
}).create({
'account_id': self.company_data['default_account_expense'].id,
'date': '2020-01-02',
})
# 2 to invoice on 2020-01-07
self.assertRecordValues(self.env['account.move'].search(wizard.create_entries()['domain']).line_ids, [
# reverse move lines
{'account_id': self.account_revenue.id, 'debit': 60, 'credit': 0},
{'account_id': wizard.account_id.id, 'debit': 0, 'credit': 60},
# move lines
{'account_id': self.account_revenue.id, 'debit': 0, 'credit': 60},
{'account_id': wizard.account_id.id, 'debit': 60, 'credit': 0},
])
# nothing to invoice on 2020-01-05
wizard.date = fields.Date.to_date('2020-01-05')
with self.assertRaises(UserError):
wizard.create_entries()
# 3 to invoice on 2020-01-07
wizard.date = fields.Date.to_date('2020-01-07')
self.assertRecordValues(self.env['account.move'].search(wizard.create_entries()['domain']).line_ids, [
# reverse move lines
{'account_id': self.account_revenue.id, 'debit': 90, 'credit': 0},
{'account_id': wizard.account_id.id, 'debit': 0, 'credit': 90},
# move lines
{'account_id': self.account_revenue.id, 'debit': 0, 'credit': 90},
{'account_id': wizard.account_id.id, 'debit': 90, 'credit': 0},
])
# nothing to invoice on 2020-01-09
wizard.date = fields.Date.to_date('2020-01-09')
with self.assertRaises(UserError):
wizard.create_entries()