152 lines
6.4 KiB
Python
152 lines
6.4 KiB
Python
|
# -*- 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()
|