2
0

[IMP] account_move_fiscal_month: black, isort, prettier

This commit is contained in:
remihb 2020-11-17 02:38:56 +01:00 committed by BT-anieto
parent b79d5d84b2
commit 14ecf98649
6 changed files with 211 additions and 187 deletions

View File

@ -2,17 +2,12 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{ {
'name': 'Account Move Fiscal Month', "name": "Account Move Fiscal Month",
'summary': """Display the fiscal month on journal entries/item""", "summary": """Display the fiscal month on journal entries/item""",
'version': '12.0.1.1.1', "version": "12.0.1.1.1",
'license': 'AGPL-3', "license": "AGPL-3",
'author': 'ACSONE SA/NV,Odoo Community Association (OCA)', "author": "ACSONE SA/NV,Odoo Community Association (OCA)",
'website': 'https://github.com/OCA/account-financial-tools', "website": "https://github.com/OCA/account-financial-tools",
'depends': [ "depends": ["account_fiscal_month",],
'account_fiscal_month', "data": ["views/account_move.xml", "views/account_move_line.xml",],
],
'data': [
'views/account_move.xml',
'views/account_move_line.xml',
],
} }

View File

@ -7,39 +7,45 @@ from odoo.osv import expression
class AccountMove(models.Model): class AccountMove(models.Model):
_inherit = 'account.move' _inherit = "account.move"
date_range_fm_id = fields.Many2one( date_range_fm_id = fields.Many2one(
comodel_name='date.range', string="Fiscal month", comodel_name="date.range",
compute='_compute_date_range_fm', search='_search_date_range_fm', string="Fiscal month",
compute="_compute_date_range_fm",
search="_search_date_range_fm",
) )
@api.multi @api.multi
@api.depends('date', 'company_id') @api.depends("date", "company_id")
def _compute_date_range_fm(self): def _compute_date_range_fm(self):
for rec in self: for rec in self:
date = rec.date date = rec.date
company = rec.company_id company = rec.company_id
rec.date_range_fm_id =\ rec.date_range_fm_id = company and company.find_daterange_fm(date) or False
company and company.find_daterange_fm(date) or False
@api.model @api.model
def _search_date_range_fm(self, operator, value): def _search_date_range_fm(self, operator, value):
if operator in ('=', '!=', 'in', 'not in'): if operator in ("=", "!=", "in", "not in"):
date_range_domain = [('id', operator, value)] date_range_domain = [("id", operator, value)]
else: else:
date_range_domain = [('name', operator, value)] date_range_domain = [("name", operator, value)]
date_ranges = self.env['date.range'].search(date_range_domain) date_ranges = self.env["date.range"].search(date_range_domain)
domain = [] domain = []
for date_range in date_ranges: for date_range in date_ranges:
domain = expression.OR([domain, [ domain = expression.OR(
'&', [
'&', domain,
('date', '>=', date_range.date_start), [
('date', '<=', date_range.date_end), "&",
'|', "&",
('company_id', '=', False), ("date", ">=", date_range.date_start),
('company_id', '=', date_range.company_id.id), ("date", "<=", date_range.date_end),
]]) "|",
("company_id", "=", False),
("company_id", "=", date_range.company_id.id),
],
]
)
return domain return domain

View File

@ -6,8 +6,6 @@ from odoo import fields, models
class AccountMoveLine(models.Model): class AccountMoveLine(models.Model):
_inherit = 'account.move.line' _inherit = "account.move.line"
date_range_fm_id = fields.Many2one( date_range_fm_id = fields.Many2one(related="move_id.date_range_fm_id",)
related='move_id.date_range_fm_id',
)

View File

@ -6,150 +6,191 @@ from odoo.tests.common import TransactionCase
class TestAccountMoveFiscalMonth(TransactionCase): class TestAccountMoveFiscalMonth(TransactionCase):
def setUp(self): def setUp(self):
super(TestAccountMoveFiscalMonth, self).setUp() super(TestAccountMoveFiscalMonth, self).setUp()
self.AccountObj = self.env['account.account'] self.AccountObj = self.env["account.account"]
self.AccountJournalObj = self.env['account.journal'] self.AccountJournalObj = self.env["account.journal"]
self.AccountMoveObj = self.env['account.move'] self.AccountMoveObj = self.env["account.move"]
self.DateRangeObj = self.env['date.range'] self.DateRangeObj = self.env["date.range"]
self.bank_journal = self.AccountJournalObj.search([ self.bank_journal = self.AccountJournalObj.search(
('type', '=', 'bank') [("type", "=", "bank")], limit=1
], limit=1) )
self.account_type_recv = self.env.ref( self.account_type_recv = self.env.ref("account.data_account_type_receivable")
'account.data_account_type_receivable') self.account_type_rev = self.env.ref("account.data_account_type_revenue")
self.account_type_rev = self.env.ref(
'account.data_account_type_revenue')
self.account_recv = self.AccountObj.create({ self.account_recv = self.AccountObj.create(
'code': 'RECV_DR', {
'name': "Receivable (test)", "code": "RECV_DR",
'reconcile': True, "name": "Receivable (test)",
'user_type_id': self.account_type_recv.id, "reconcile": True,
}) "user_type_id": self.account_type_recv.id,
self.account_sale = self.AccountObj.create({ }
'code': 'SALE_DR', )
'name': "Receivable (sale)", self.account_sale = self.AccountObj.create(
'reconcile': True, {
'user_type_id': self.account_type_rev.id, "code": "SALE_DR",
}) "name": "Receivable (sale)",
"reconcile": True,
"user_type_id": self.account_type_rev.id,
}
)
self.date_range_type_month = self.env.ref( self.date_range_type_month = self.env.ref(
'account_fiscal_month.date_range_fiscal_month') "account_fiscal_month.date_range_fiscal_month"
)
self.date_range_january_2017 = self.DateRangeObj.create({ self.date_range_january_2017 = self.DateRangeObj.create(
'name': "January 2017", {
'date_start': '2017-01-01', "name": "January 2017",
'date_end': '2017-01-31', "date_start": "2017-01-01",
'type_id': self.date_range_type_month.id, "date_end": "2017-01-31",
}) "type_id": self.date_range_type_month.id,
}
)
self.date_range_february_2017 = self.DateRangeObj.create({ self.date_range_february_2017 = self.DateRangeObj.create(
'name': "February 2017", {
'date_start': '2017-02-01', "name": "February 2017",
'date_end': '2017-02-28', "date_start": "2017-02-01",
'type_id': self.date_range_type_month.id, "date_end": "2017-02-28",
}) "type_id": self.date_range_type_month.id,
}
)
self.date_range_january_2018 = self.DateRangeObj.create({ self.date_range_january_2018 = self.DateRangeObj.create(
'name': "January 2018", {
'date_start': '2018-01-01', "name": "January 2018",
'date_end': '2018-01-31', "date_start": "2018-01-01",
'type_id': self.date_range_type_month.id, "date_end": "2018-01-31",
}) "type_id": self.date_range_type_month.id,
}
)
def create_account_move(self, date_str): def create_account_move(self, date_str):
return self.AccountMoveObj.create({ return self.AccountMoveObj.create(
'journal_id': self.bank_journal.id, {
'date': date_str, "journal_id": self.bank_journal.id,
'line_ids': [ "date": date_str,
(0, 0, { "line_ids": [
'name': "Debit", (
'debit': 1000, 0,
'account_id': self.account_recv.id, 0,
}), {
(0, 0, { "name": "Debit",
'name': "Credit", "debit": 1000,
'credit': 1000, "account_id": self.account_recv.id,
'account_id': self.account_sale.id, },
}), ),
] (
}) 0,
0,
{
"name": "Credit",
"credit": 1000,
"account_id": self.account_sale.id,
},
),
],
}
)
def test_01_account_move_date_range_fm_id_compute(self): def test_01_account_move_date_range_fm_id_compute(self):
january_1st = Date.from_string('2017-01-01') january_1st = Date.from_string("2017-01-01")
move = self.create_account_move(january_1st) move = self.create_account_move(january_1st)
self.assertEquals( self.assertEquals(
move.date_range_fm_id, self.date_range_january_2017, move.date_range_fm_id,
msg="Move period should be January 2017") self.date_range_january_2017,
self.assertTrue(all([ msg="Move period should be January 2017",
)
self.assertTrue(
all(
[
line.date_range_fm_id == self.date_range_january_2017 line.date_range_fm_id == self.date_range_january_2017
for line in move.line_ids for line in move.line_ids
]), msg="All lines period should be January 2017") ]
),
msg="All lines period should be January 2017",
)
march_1st = Date.from_string('2017-03-01') march_1st = Date.from_string("2017-03-01")
move = self.create_account_move(march_1st) move = self.create_account_move(march_1st)
self.assertFalse( self.assertFalse(
bool(move.date_range_fm_id), bool(move.date_range_fm_id), msg="Move shouldn't have any date range"
msg="Move shouldn't have any date range") )
def test_02_account_move_date_range_fm_id_search(self): def test_02_account_move_date_range_fm_id_search(self):
january_2017_1st = Date.from_string('2017-01-01') january_2017_1st = Date.from_string("2017-01-01")
february_2017_1st = Date.from_string('2017-02-01') february_2017_1st = Date.from_string("2017-02-01")
march_2017_1st = Date.from_string('2017-03-01') march_2017_1st = Date.from_string("2017-03-01")
january_2018_1st = Date.from_string('2018-01-01') january_2018_1st = Date.from_string("2018-01-01")
move_jan_2017 = self.create_account_move(january_2017_1st) move_jan_2017 = self.create_account_move(january_2017_1st)
move_feb_2017 = self.create_account_move(february_2017_1st) move_feb_2017 = self.create_account_move(february_2017_1st)
move_march_2017 = self.create_account_move(march_2017_1st) move_march_2017 = self.create_account_move(march_2017_1st)
move_jan_2018 = self.create_account_move(january_2018_1st) move_jan_2018 = self.create_account_move(january_2018_1st)
moves = self.AccountMoveObj.search([ moves = self.AccountMoveObj.search([("date_range_fm_id", "ilike", "January"),])
('date_range_fm_id', 'ilike', 'January'),
])
self.assertTrue(all([ self.assertTrue(
all(
[
move_jan_2017 in moves, move_jan_2017 in moves,
move_feb_2017 not in moves, move_feb_2017 not in moves,
move_march_2017 not in moves, move_march_2017 not in moves,
move_jan_2018 in moves, move_jan_2018 in moves,
]), msg="There should be only moves in January") ]
),
msg="There should be only moves in January",
)
moves = self.AccountMoveObj.search([ moves = self.AccountMoveObj.search([("date_range_fm_id", "ilike", "2017"),])
('date_range_fm_id', 'ilike', '2017'),
])
self.assertTrue(all([ self.assertTrue(
all(
[
move_jan_2017 in moves, move_jan_2017 in moves,
move_feb_2017 in moves, move_feb_2017 in moves,
move_march_2017 not in moves, move_march_2017 not in moves,
move_jan_2018 not in moves, move_jan_2018 not in moves,
])) ]
)
)
moves = self.AccountMoveObj.search([ moves = self.AccountMoveObj.search(
('date_range_fm_id', '=', self.date_range_january_2017.id), [("date_range_fm_id", "=", self.date_range_january_2017.id),]
]) )
self.assertTrue(all([ self.assertTrue(
all(
[
move_jan_2017 in moves, move_jan_2017 in moves,
move_feb_2017 not in moves, move_feb_2017 not in moves,
move_march_2017 not in moves, move_march_2017 not in moves,
move_jan_2018 not in moves, move_jan_2018 not in moves,
])) ]
)
)
moves = self.AccountMoveObj.search([ moves = self.AccountMoveObj.search(
('date_range_fm_id', 'in', ( [
self.date_range_january_2017.id, (
self.date_range_february_2017.id "date_range_fm_id",
)), "in",
]) (self.date_range_january_2017.id, self.date_range_february_2017.id),
),
]
)
self.assertTrue(all([ self.assertTrue(
all(
[
move_jan_2017 in moves, move_jan_2017 in moves,
move_feb_2017 in moves, move_feb_2017 in moves,
move_march_2017 not in moves, move_march_2017 not in moves,
move_jan_2018 not in moves, move_jan_2018 not in moves,
])) ]
)
)

View File

@ -1,46 +1,35 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017 ACSONE SA/NV <!-- Copyright 2017 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo> <odoo>
<record model="ir.ui.view" id="account_move_form_view"> <record model="ir.ui.view" id="account_move_form_view">
<field name="name">account.move.form (in account_move_fiscal_month)</field> <field name="name">account.move.form (in account_move_fiscal_month)</field>
<field name="model">account.move</field> <field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/> <field name="inherit_id" ref="account.view_move_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="date" position="after"> <field name="date" position="after">
<field name="date_range_fm_id" options="{'no_open': True}"/> <field name="date_range_fm_id" options="{'no_open': True}" />
</field> </field>
</field> </field>
</record> </record>
<record model="ir.ui.view" id="account_move_search_view"> <record model="ir.ui.view" id="account_move_search_view">
<field name="name">account.move.search (in account_move_fiscal_month)</field> <field name="name">account.move.search (in account_move_fiscal_month)</field>
<field name="model">account.move</field> <field name="model">account.move</field>
<field name="inherit_id" ref="account.view_account_move_filter"/> <field name="inherit_id" ref="account.view_account_move_filter" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="date" position="after"> <field name="date" position="after">
<field name="date_range_fm_id"/> <field name="date_range_fm_id" />
</field> </field>
</field> </field>
</record> </record>
<record model="ir.ui.view" id="account_move_tree_view"> <record model="ir.ui.view" id="account_move_tree_view">
<field name="name">account.move.tree (in account_move_fiscal_month)</field> <field name="name">account.move.tree (in account_move_fiscal_month)</field>
<field name="model">account.move</field> <field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_tree"/> <field name="inherit_id" ref="account.view_move_tree" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="date" position="after"> <field name="date" position="after">
<field name="date_range_fm_id"/> <field name="date_range_fm_id" />
</field> </field>
</field> </field>
</record> </record>
</odoo> </odoo>

View File

@ -1,46 +1,41 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2017 ACSONE SA/NV <!-- Copyright 2017 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo> <odoo>
<record model="ir.ui.view" id="account_move_line_form_view"> <record model="ir.ui.view" id="account_move_line_form_view">
<field name="name">account.move.line.form (in account_move_line_fiscal_month)</field> <field
name="name"
>account.move.line.form (in account_move_line_fiscal_month)</field>
<field name="model">account.move.line</field> <field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form"/> <field name="inherit_id" ref="account.view_move_line_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="date" position="after"> <field name="date" position="after">
<field name="date_range_fm_id" options="{'no_open': True}"/> <field name="date_range_fm_id" options="{'no_open': True}" />
</field> </field>
</field> </field>
</record> </record>
<record model="ir.ui.view" id="account_move_line_search_view"> <record model="ir.ui.view" id="account_move_line_search_view">
<field name="name">account.move.line.search (in account_move_line_fiscal_month)</field> <field
name="name"
>account.move.line.search (in account_move_line_fiscal_month)</field>
<field name="model">account.move.line</field> <field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_account_move_line_filter"/> <field name="inherit_id" ref="account.view_account_move_line_filter" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="date" position="after"> <field name="date" position="after">
<field name="date_range_fm_id"/> <field name="date_range_fm_id" />
</field> </field>
</field> </field>
</record> </record>
<record model="ir.ui.view" id="account_move_line_tree_view"> <record model="ir.ui.view" id="account_move_line_tree_view">
<field name="name">account.move.line.tree (in account_move_line_fiscal_month)</field> <field
name="name"
>account.move.line.tree (in account_move_line_fiscal_month)</field>
<field name="model">account.move.line</field> <field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_tree"/> <field name="inherit_id" ref="account.view_move_line_tree" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="date" position="after"> <field name="date" position="after">
<field name="date_range_fm_id"/> <field name="date_range_fm_id" />
</field> </field>
</field> </field>
</record> </record>
</odoo> </odoo>