[MIG] account_spread_cost_revenue to V12
This commit is contained in:
parent
f0e84cebd9
commit
773b8f48e7
@ -4,7 +4,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Cost-Revenue Spread",
|
"name": "Cost-Revenue Spread",
|
||||||
"summary": "Spread costs and revenues over a custom period",
|
"summary": "Spread costs and revenues over a custom period",
|
||||||
"version": "11.0.1.0.0",
|
"version": "12.0.1.0.0",
|
||||||
"development_status": "Beta",
|
"development_status": "Beta",
|
||||||
"author": "Onestein,Odoo Community Association (OCA)",
|
"author": "Onestein,Odoo Community Association (OCA)",
|
||||||
"maintainers": ["astirpe"],
|
"maintainers": ["astirpe"],
|
||||||
|
@ -259,11 +259,11 @@ class AccountSpread(models.Model):
|
|||||||
if posted_line_ids:
|
if posted_line_ids:
|
||||||
# if we already have some previous validated entries,
|
# if we already have some previous validated entries,
|
||||||
# starting date is last entry + method period
|
# starting date is last entry + method period
|
||||||
last_date = fields.Date.from_string(posted_line_ids[-1].date)
|
last_date = posted_line_ids[-1].date
|
||||||
months = self._compute_spread_period_duration()
|
months = self._compute_spread_period_duration()
|
||||||
spread_date = last_date + relativedelta(months=months)
|
spread_date = last_date + relativedelta(months=months)
|
||||||
else:
|
else:
|
||||||
spread_date = fields.Date.from_string(self.spread_date)
|
spread_date = self.spread_date
|
||||||
return spread_date
|
return spread_date
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
@ -338,7 +338,7 @@ class AccountSpread(models.Model):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_last_day_of_month(spread_date):
|
def _get_last_day_of_month(spread_date):
|
||||||
return fields.Date.to_string(spread_date + relativedelta(day=31))
|
return spread_date + relativedelta(day=31)
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def _compute_board_amount(self, sequence, amount, number_of_periods):
|
def _compute_board_amount(self, sequence, amount, number_of_periods):
|
||||||
@ -348,7 +348,7 @@ class AccountSpread(models.Model):
|
|||||||
if sequence != number_of_periods:
|
if sequence != number_of_periods:
|
||||||
amount = amount_to_spread / self.period_number
|
amount = amount_to_spread / self.period_number
|
||||||
if sequence == 1:
|
if sequence == 1:
|
||||||
date = fields.Datetime.from_string(self.spread_date)
|
date = self.spread_date
|
||||||
month_days = calendar.monthrange(date.year, date.month)[1]
|
month_days = calendar.monthrange(date.year, date.month)[1]
|
||||||
days = month_days - date.day + 1
|
days = month_days - date.day + 1
|
||||||
period = self.period_number
|
period = self.period_number
|
||||||
|
@ -75,8 +75,8 @@ class AccountInvoiceSpreadLine(models.Model):
|
|||||||
company_currency = spread.company_id.currency_id
|
company_currency = spread.company_id.currency_id
|
||||||
current_currency = spread.currency_id
|
current_currency = spread.currency_id
|
||||||
not_same_curr = company_currency != current_currency
|
not_same_curr = company_currency != current_currency
|
||||||
amount = current_currency.with_context(date=spread_date).compute(
|
amount = current_currency._convert(
|
||||||
self.amount, company_currency)
|
self.amount, company_currency, spread.company_id, spread_date)
|
||||||
|
|
||||||
line_ids = [(0, 0, {
|
line_ids = [(0, 0, {
|
||||||
'name': spread.name.split('\n')[0][:64],
|
'name': spread.name.split('\n')[0][:64],
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
12.0.1.0.0
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
* [MIG] Port account_spread_cost_revenue to V12.
|
||||||
|
|
||||||
|
|
||||||
11.0.1.0.0
|
11.0.1.0.0
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
* Verify last day of month
|
|
||||||
* Add help in fields definition
|
|
@ -13,17 +13,17 @@ Complete the definition of the spreading criteria, by setting the the fields:
|
|||||||
* *Start date*
|
* *Start date*
|
||||||
* *Journal*
|
* *Journal*
|
||||||
|
|
||||||
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/11.0/account_spread_cost_revenue/static/description/spread.png
|
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_spread_cost_revenue/static/description/spread.png
|
||||||
:alt: Create a new spread board
|
:alt: Create a new spread board
|
||||||
|
|
||||||
Click on the button on the top-left to calculate the spread lines.
|
Click on the button on the top-left to calculate the spread lines.
|
||||||
|
|
||||||
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/11.0/account_spread_cost_revenue/static/description/create_spread.png
|
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_spread_cost_revenue/static/description/create_spread.png
|
||||||
:alt: The spreading board is defined
|
:alt: The spreading board is defined
|
||||||
|
|
||||||
A cron job will automatically create the accounting moves for all the lines having date previous that the current day (today).
|
A cron job will automatically create the accounting moves for all the lines having date previous that the current day (today).
|
||||||
|
|
||||||
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/11.0/account_spread_cost_revenue/static/description/update_spread.png
|
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_spread_cost_revenue/static/description/update_spread.png
|
||||||
:alt: The spreading board is updated by the cron job
|
:alt: The spreading board is updated by the cron job
|
||||||
|
|
||||||
By default, the status of the created accounting moves is posted.
|
By default, the status of the created accounting moves is posted.
|
||||||
@ -37,7 +37,7 @@ Link Invoice to Spread Costs/Revenues Board
|
|||||||
|
|
||||||
Create an invoice or vendor bill in draft. On its lines, the spreading right-arrow icon are displayed in dark-grey color.
|
Create an invoice or vendor bill in draft. On its lines, the spreading right-arrow icon are displayed in dark-grey color.
|
||||||
|
|
||||||
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/11.0/account_spread_cost_revenue/static/description/invoice_line_1.png
|
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_spread_cost_revenue/static/description/invoice_line_1.png
|
||||||
:alt: On the invoice line the spreading icon is displayed
|
:alt: On the invoice line the spreading icon is displayed
|
||||||
|
|
||||||
Click on the spreading right-arrow icon. A wizard prompts to enter a *Spread Action Type*:
|
Click on the spreading right-arrow icon. A wizard prompts to enter a *Spread Action Type*:
|
||||||
@ -52,7 +52,7 @@ the selected Spread Board will be automatically displayed.
|
|||||||
Go back to the draft invoice/bill. The spreading functionality is now enabled on the invoice line:
|
Go back to the draft invoice/bill. The spreading functionality is now enabled on the invoice line:
|
||||||
the spreading right-arrow icon is now displayed in green color.
|
the spreading right-arrow icon is now displayed in green color.
|
||||||
|
|
||||||
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/11.0/account_spread_cost_revenue/static/description/invoice_line_2.png
|
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_spread_cost_revenue/static/description/invoice_line_2.png
|
||||||
:alt: On the invoice line the spreading icon is displayed in green color
|
:alt: On the invoice line the spreading icon is displayed in green color
|
||||||
|
|
||||||
Validate the invoice/bill. Click on the spreading (green) right-arrow icon to open the spread board, then click
|
Validate the invoice/bill. Click on the spreading (green) right-arrow icon to open the spread board, then click
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
.o_web_client .o_spread_line {
|
.o_web_client .o_spread_line {
|
||||||
&.o_is_linked {
|
&.o_is_linked {
|
||||||
color: @brand-success;
|
color: theme-color('success');
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<template id="assets_backend" name="account spread" inherit_id="web.assets_backend">
|
<template id="assets_backend" name="account spread" inherit_id="web.assets_backend">
|
||||||
<xpath expr="." position="inside">
|
<xpath expr="." position="inside">
|
||||||
<link rel="stylesheet" href="/account_spread_cost_revenue/static/src/less/account_spread.less"/>
|
<link rel="stylesheet" href="/account_spread_cost_revenue/static/src/scss/account_spread.scss"/>
|
||||||
<script type="text/javascript" src="/account_spread_cost_revenue/static/src/js/account_spread.js"></script>
|
<script type="text/javascript" src="/account_spread_cost_revenue/static/src/js/account_spread.js"></script>
|
||||||
</xpath>
|
</xpath>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
# Copyright 2018 Onestein (<https://www.onestein.eu>)
|
# Copyright 2018 Onestein (<https://www.onestein.eu>)
|
||||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
|
||||||
from odoo.tools import convert_file
|
from odoo.tools import convert_file
|
||||||
from odoo.modules.module import get_module_resource
|
from odoo.modules.module import get_module_resource
|
||||||
from odoo.exceptions import UserError, ValidationError
|
from odoo.exceptions import UserError, ValidationError
|
||||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
from odoo.tests import common
|
||||||
|
|
||||||
|
|
||||||
class TestAccountInvoiceSpread(AccountingTestCase):
|
class TestAccountInvoiceSpread(common.TransactionCase):
|
||||||
|
|
||||||
def _load(self, module, *args):
|
def _load(self, module, *args):
|
||||||
convert_file(
|
convert_file(
|
||||||
@ -41,9 +43,7 @@ class TestAccountInvoiceSpread(AccountingTestCase):
|
|||||||
'name': 'Partner Name',
|
'name': 'Partner Name',
|
||||||
'supplier': True,
|
'supplier': True,
|
||||||
})
|
})
|
||||||
self.invoice = self.env['account.invoice'].with_context(
|
self.invoice = self.env['account.invoice'].create({
|
||||||
default_type='in_invoice'
|
|
||||||
).create({
|
|
||||||
'partner_id': partner.id,
|
'partner_id': partner.id,
|
||||||
'account_id': self.invoice_account.id,
|
'account_id': self.invoice_account.id,
|
||||||
'type': 'in_invoice',
|
'type': 'in_invoice',
|
||||||
@ -60,23 +60,23 @@ class TestAccountInvoiceSpread(AccountingTestCase):
|
|||||||
self.analytic_account = self.env['account.analytic.account'].create({
|
self.analytic_account = self.env['account.analytic.account'].create({
|
||||||
'name': 'test account',
|
'name': 'test account',
|
||||||
})
|
})
|
||||||
self.spread = self.env['account.spread'].create({
|
self.spread = self.env['account.spread'].with_context(
|
||||||
|
mail_create_nosubscribe=True
|
||||||
|
).create([{
|
||||||
'name': 'test',
|
'name': 'test',
|
||||||
'debit_account_id': self.spread_account.id,
|
'debit_account_id': self.spread_account.id,
|
||||||
'credit_account_id': self.invoice_line_account.id,
|
'credit_account_id': self.invoice_line_account.id,
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-02-01',
|
'spread_date': datetime.date(2017, 2, 1),
|
||||||
'estimated_amount': 1000.0,
|
'estimated_amount': 1000.0,
|
||||||
'journal_id': self.invoice.journal_id.id,
|
'journal_id': self.invoice.journal_id.id,
|
||||||
'invoice_type': 'in_invoice',
|
'invoice_type': 'in_invoice',
|
||||||
'account_analytic_id': self.analytic_account.id,
|
'account_analytic_id': self.analytic_account.id,
|
||||||
'analytic_tag_ids': analytic_tags,
|
'analytic_tag_ids': analytic_tags,
|
||||||
})
|
}])
|
||||||
|
|
||||||
self.invoice_2 = self.env['account.invoice'].with_context(
|
self.invoice_2 = self.env['account.invoice'].create({
|
||||||
default_type='out_invoice'
|
|
||||||
).create({
|
|
||||||
'partner_id': partner.id,
|
'partner_id': partner.id,
|
||||||
'account_id': self.invoice_account.id,
|
'account_id': self.invoice_account.id,
|
||||||
'type': 'out_invoice',
|
'type': 'out_invoice',
|
||||||
@ -88,17 +88,17 @@ class TestAccountInvoiceSpread(AccountingTestCase):
|
|||||||
'name': 'product that cost 1000',
|
'name': 'product that cost 1000',
|
||||||
'account_id': self.invoice_line_account.id,
|
'account_id': self.invoice_line_account.id,
|
||||||
})
|
})
|
||||||
self.spread2 = self.env['account.spread'].create({
|
self.spread2 = self.env['account.spread'].create([{
|
||||||
'name': 'test2',
|
'name': 'test2',
|
||||||
'debit_account_id': self.spread_account.id,
|
'debit_account_id': self.spread_account.id,
|
||||||
'credit_account_id': self.invoice_line_account.id,
|
'credit_account_id': self.invoice_line_account.id,
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-02-01',
|
'spread_date': datetime.date(2017, 2, 1),
|
||||||
'estimated_amount': 1000.0,
|
'estimated_amount': 1000.0,
|
||||||
'journal_id': self.invoice_2.journal_id.id,
|
'journal_id': self.invoice_2.journal_id.id,
|
||||||
'invoice_type': 'out_invoice',
|
'invoice_type': 'out_invoice',
|
||||||
})
|
}])
|
||||||
|
|
||||||
def test_01_wizard_defaults(self):
|
def test_01_wizard_defaults(self):
|
||||||
my_company = self.env.user.company_id
|
my_company = self.env.user.company_id
|
||||||
@ -475,7 +475,7 @@ class TestAccountInvoiceSpread(AccountingTestCase):
|
|||||||
'estimated_amount': 1000.0,
|
'estimated_amount': 1000.0,
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-07',
|
'spread_date': datetime.date(2017, 1, 7),
|
||||||
'invoice_line_id': self.invoice_line.id,
|
'invoice_line_id': self.invoice_line.id,
|
||||||
'move_line_auto_post': False,
|
'move_line_auto_post': False,
|
||||||
})
|
})
|
||||||
@ -535,7 +535,7 @@ class TestAccountInvoiceSpread(AccountingTestCase):
|
|||||||
'estimated_amount': 1000.0,
|
'estimated_amount': 1000.0,
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-07',
|
'spread_date': datetime.date(2017, 1, 7),
|
||||||
'invoice_line_id': self.invoice_line.id,
|
'invoice_line_id': self.invoice_line.id,
|
||||||
'move_line_auto_post': False,
|
'move_line_auto_post': False,
|
||||||
})
|
})
|
||||||
@ -596,7 +596,7 @@ class TestAccountInvoiceSpread(AccountingTestCase):
|
|||||||
'estimated_amount': 1000.0,
|
'estimated_amount': 1000.0,
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-07',
|
'spread_date': datetime.date(2017, 1, 7),
|
||||||
'invoice_line_id': self.invoice_line_2.id,
|
'invoice_line_id': self.invoice_line_2.id,
|
||||||
'move_line_auto_post': False,
|
'move_line_auto_post': False,
|
||||||
})
|
})
|
||||||
@ -658,7 +658,7 @@ class TestAccountInvoiceSpread(AccountingTestCase):
|
|||||||
'estimated_amount': 1000.0,
|
'estimated_amount': 1000.0,
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-07',
|
'spread_date': datetime.date(2017, 1, 7),
|
||||||
})
|
})
|
||||||
|
|
||||||
self.spread2.compute_spread_board()
|
self.spread2.compute_spread_board()
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
# Copyright 2018 Onestein (<https://www.onestein.eu>)
|
# Copyright 2018 Onestein (<https://www.onestein.eu>)
|
||||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
import time
|
import datetime
|
||||||
|
|
||||||
from psycopg2 import IntegrityError
|
from psycopg2 import IntegrityError
|
||||||
|
|
||||||
from odoo.tools import convert_file, mute_logger
|
from odoo.tools import convert_file, mute_logger
|
||||||
from odoo.modules.module import get_module_resource
|
from odoo.modules.module import get_module_resource
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError
|
||||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
from odoo.tests import common
|
||||||
|
|
||||||
|
|
||||||
class TestAccountSpreadCostRevenue(AccountingTestCase):
|
class TestAccountSpreadCostRevenue(common.TransactionCase):
|
||||||
|
|
||||||
def _load(self, module, *args):
|
def _load(self, module, *args):
|
||||||
convert_file(
|
convert_file(
|
||||||
@ -65,7 +65,7 @@ class TestAccountSpreadCostRevenue(AccountingTestCase):
|
|||||||
self.assertEqual(spread.unposted_amount, 0.)
|
self.assertEqual(spread.unposted_amount, 0.)
|
||||||
self.assertEqual(spread.total_amount, 0.)
|
self.assertEqual(spread.total_amount, 0.)
|
||||||
self.assertEqual(spread.estimated_amount, 0.)
|
self.assertEqual(spread.estimated_amount, 0.)
|
||||||
self.assertEqual(spread.spread_date, time.strftime('%Y-01-01'))
|
self.assertEqual(spread.spread_date, datetime.date(2018, 1, 1))
|
||||||
self.assertTrue(spread.journal_id)
|
self.assertTrue(spread.journal_id)
|
||||||
self.assertEqual(spread.journal_id.type, 'general')
|
self.assertEqual(spread.journal_id.type, 'general')
|
||||||
|
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
# Copyright 2017-2018 Onestein (<https://www.onestein.eu>)
|
# Copyright 2017-2018 Onestein (<https://www.onestein.eu>)
|
||||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
|
import datetime
|
||||||
|
|
||||||
|
from odoo.tests import common
|
||||||
from odoo.exceptions import UserError
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
|
|
||||||
class TestComputeSpreadBoard(AccountingTestCase):
|
class TestComputeSpreadBoard(common.TransactionCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
@ -71,18 +73,18 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.assertEqual(83.33, spread_lines[10].amount)
|
self.assertEqual(83.33, spread_lines[10].amount)
|
||||||
self.assertEqual(83.37, spread_lines[11].amount)
|
self.assertEqual(83.37, spread_lines[11].amount)
|
||||||
|
|
||||||
self.assertEqual('2017-02-28', spread_lines[0].date)
|
self.assertEqual(datetime.date(2017, 2, 28), spread_lines[0].date)
|
||||||
self.assertEqual('2017-03-31', spread_lines[1].date)
|
self.assertEqual(datetime.date(2017, 3, 31), spread_lines[1].date)
|
||||||
self.assertEqual('2017-04-30', spread_lines[2].date)
|
self.assertEqual(datetime.date(2017, 4, 30), spread_lines[2].date)
|
||||||
self.assertEqual('2017-05-31', spread_lines[3].date)
|
self.assertEqual(datetime.date(2017, 5, 31), spread_lines[3].date)
|
||||||
self.assertEqual('2017-06-30', spread_lines[4].date)
|
self.assertEqual(datetime.date(2017, 6, 30), spread_lines[4].date)
|
||||||
self.assertEqual('2017-07-31', spread_lines[5].date)
|
self.assertEqual(datetime.date(2017, 7, 31), spread_lines[5].date)
|
||||||
self.assertEqual('2017-08-31', spread_lines[6].date)
|
self.assertEqual(datetime.date(2017, 8, 31), spread_lines[6].date)
|
||||||
self.assertEqual('2017-09-30', spread_lines[7].date)
|
self.assertEqual(datetime.date(2017, 9, 30), spread_lines[7].date)
|
||||||
self.assertEqual('2017-10-31', spread_lines[8].date)
|
self.assertEqual(datetime.date(2017, 10, 31), spread_lines[8].date)
|
||||||
self.assertEqual('2017-11-30', spread_lines[9].date)
|
self.assertEqual(datetime.date(2017, 11, 30), spread_lines[9].date)
|
||||||
self.assertEqual('2017-12-31', spread_lines[10].date)
|
self.assertEqual(datetime.date(2017, 12, 31), spread_lines[10].date)
|
||||||
self.assertEqual('2018-01-31', spread_lines[11].date)
|
self.assertEqual(datetime.date(2018, 1, 31), spread_lines[11].date)
|
||||||
|
|
||||||
for line in spread_lines:
|
for line in spread_lines:
|
||||||
self.assertFalse(line.move_id)
|
self.assertFalse(line.move_id)
|
||||||
@ -105,7 +107,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.spread.write({
|
self.spread.write({
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-07'
|
'spread_date': datetime.date(2017, 1, 7)
|
||||||
})
|
})
|
||||||
self.spread_account.reconcile = True
|
self.spread_account.reconcile = True
|
||||||
self.assertTrue(self.spread_account.reconcile)
|
self.assertTrue(self.spread_account.reconcile)
|
||||||
@ -128,19 +130,19 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.assertEqual(83.33, spread_lines[11].amount)
|
self.assertEqual(83.33, spread_lines[11].amount)
|
||||||
self.assertEqual(16.17, spread_lines[12].amount)
|
self.assertEqual(16.17, spread_lines[12].amount)
|
||||||
|
|
||||||
self.assertEqual('2017-01-31', spread_lines[0].date)
|
self.assertEqual(datetime.date(2017, 1, 31), spread_lines[0].date)
|
||||||
self.assertEqual('2017-02-28', spread_lines[1].date)
|
self.assertEqual(datetime.date(2017, 2, 28), spread_lines[1].date)
|
||||||
self.assertEqual('2017-03-31', spread_lines[2].date)
|
self.assertEqual(datetime.date(2017, 3, 31), spread_lines[2].date)
|
||||||
self.assertEqual('2017-04-30', spread_lines[3].date)
|
self.assertEqual(datetime.date(2017, 4, 30), spread_lines[3].date)
|
||||||
self.assertEqual('2017-05-31', spread_lines[4].date)
|
self.assertEqual(datetime.date(2017, 5, 31), spread_lines[4].date)
|
||||||
self.assertEqual('2017-06-30', spread_lines[5].date)
|
self.assertEqual(datetime.date(2017, 6, 30), spread_lines[5].date)
|
||||||
self.assertEqual('2017-07-31', spread_lines[6].date)
|
self.assertEqual(datetime.date(2017, 7, 31), spread_lines[6].date)
|
||||||
self.assertEqual('2017-08-31', spread_lines[7].date)
|
self.assertEqual(datetime.date(2017, 8, 31), spread_lines[7].date)
|
||||||
self.assertEqual('2017-09-30', spread_lines[8].date)
|
self.assertEqual(datetime.date(2017, 9, 30), spread_lines[8].date)
|
||||||
self.assertEqual('2017-10-31', spread_lines[9].date)
|
self.assertEqual(datetime.date(2017, 10, 31), spread_lines[9].date)
|
||||||
self.assertEqual('2017-11-30', spread_lines[10].date)
|
self.assertEqual(datetime.date(2017, 11, 30), spread_lines[10].date)
|
||||||
self.assertEqual('2017-12-31', spread_lines[11].date)
|
self.assertEqual(datetime.date(2017, 12, 31), spread_lines[11].date)
|
||||||
self.assertEqual('2018-01-31', spread_lines[12].date)
|
self.assertEqual(datetime.date(2018, 1, 31), spread_lines[12].date)
|
||||||
|
|
||||||
for line in spread_lines:
|
for line in spread_lines:
|
||||||
self.assertFalse(line.move_id)
|
self.assertFalse(line.move_id)
|
||||||
@ -157,7 +159,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.spread.write({
|
self.spread.write({
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-31',
|
'spread_date': datetime.date(2017, 1, 31),
|
||||||
'move_line_auto_post': False
|
'move_line_auto_post': False
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -178,19 +180,19 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.assertEqual(83.33, spread_lines[11].amount)
|
self.assertEqual(83.33, spread_lines[11].amount)
|
||||||
self.assertEqual(80.68, spread_lines[12].amount)
|
self.assertEqual(80.68, spread_lines[12].amount)
|
||||||
|
|
||||||
self.assertEqual('2017-01-31', spread_lines[0].date)
|
self.assertEqual(datetime.date(2017, 1, 31), spread_lines[0].date)
|
||||||
self.assertEqual('2017-02-28', spread_lines[1].date)
|
self.assertEqual(datetime.date(2017, 2, 28), spread_lines[1].date)
|
||||||
self.assertEqual('2017-03-31', spread_lines[2].date)
|
self.assertEqual(datetime.date(2017, 3, 31), spread_lines[2].date)
|
||||||
self.assertEqual('2017-04-30', spread_lines[3].date)
|
self.assertEqual(datetime.date(2017, 4, 30), spread_lines[3].date)
|
||||||
self.assertEqual('2017-05-31', spread_lines[4].date)
|
self.assertEqual(datetime.date(2017, 5, 31), spread_lines[4].date)
|
||||||
self.assertEqual('2017-06-30', spread_lines[5].date)
|
self.assertEqual(datetime.date(2017, 6, 30), spread_lines[5].date)
|
||||||
self.assertEqual('2017-07-31', spread_lines[6].date)
|
self.assertEqual(datetime.date(2017, 7, 31), spread_lines[6].date)
|
||||||
self.assertEqual('2017-08-31', spread_lines[7].date)
|
self.assertEqual(datetime.date(2017, 8, 31), spread_lines[7].date)
|
||||||
self.assertEqual('2017-09-30', spread_lines[8].date)
|
self.assertEqual(datetime.date(2017, 9, 30), spread_lines[8].date)
|
||||||
self.assertEqual('2017-10-31', spread_lines[9].date)
|
self.assertEqual(datetime.date(2017, 10, 31), spread_lines[9].date)
|
||||||
self.assertEqual('2017-11-30', spread_lines[10].date)
|
self.assertEqual(datetime.date(2017, 11, 30), spread_lines[10].date)
|
||||||
self.assertEqual('2017-12-31', spread_lines[11].date)
|
self.assertEqual(datetime.date(2017, 12, 31), spread_lines[11].date)
|
||||||
self.assertEqual('2018-01-31', spread_lines[12].date)
|
self.assertEqual(datetime.date(2018, 1, 31), spread_lines[12].date)
|
||||||
|
|
||||||
for line in spread_lines:
|
for line in spread_lines:
|
||||||
self.assertFalse(line.move_id)
|
self.assertFalse(line.move_id)
|
||||||
@ -225,19 +227,19 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.assertEqual(83.33, spread_lines[11].amount)
|
self.assertEqual(83.33, spread_lines[11].amount)
|
||||||
self.assertEqual(80.68, spread_lines[12].amount)
|
self.assertEqual(80.68, spread_lines[12].amount)
|
||||||
|
|
||||||
self.assertEqual('2017-01-31', spread_lines[0].date)
|
self.assertEqual(datetime.date(2017, 1, 31), spread_lines[0].date)
|
||||||
self.assertEqual('2017-02-28', spread_lines[1].date)
|
self.assertEqual(datetime.date(2017, 2, 28), spread_lines[1].date)
|
||||||
self.assertEqual('2017-03-31', spread_lines[2].date)
|
self.assertEqual(datetime.date(2017, 3, 31), spread_lines[2].date)
|
||||||
self.assertEqual('2017-04-30', spread_lines[3].date)
|
self.assertEqual(datetime.date(2017, 4, 30), spread_lines[3].date)
|
||||||
self.assertEqual('2017-05-31', spread_lines[4].date)
|
self.assertEqual(datetime.date(2017, 5, 31), spread_lines[4].date)
|
||||||
self.assertEqual('2017-06-30', spread_lines[5].date)
|
self.assertEqual(datetime.date(2017, 6, 30), spread_lines[5].date)
|
||||||
self.assertEqual('2017-07-31', spread_lines[6].date)
|
self.assertEqual(datetime.date(2017, 7, 31), spread_lines[6].date)
|
||||||
self.assertEqual('2017-08-31', spread_lines[7].date)
|
self.assertEqual(datetime.date(2017, 8, 31), spread_lines[7].date)
|
||||||
self.assertEqual('2017-09-30', spread_lines[8].date)
|
self.assertEqual(datetime.date(2017, 9, 30), spread_lines[8].date)
|
||||||
self.assertEqual('2017-10-31', spread_lines[9].date)
|
self.assertEqual(datetime.date(2017, 10, 31), spread_lines[9].date)
|
||||||
self.assertEqual('2017-11-30', spread_lines[10].date)
|
self.assertEqual(datetime.date(2017, 11, 30), spread_lines[10].date)
|
||||||
self.assertEqual('2017-12-31', spread_lines[11].date)
|
self.assertEqual(datetime.date(2017, 12, 31), spread_lines[11].date)
|
||||||
self.assertEqual('2018-01-31', spread_lines[12].date)
|
self.assertEqual(datetime.date(2018, 1, 31), spread_lines[12].date)
|
||||||
|
|
||||||
def test_04_supplier_invoice(self):
|
def test_04_supplier_invoice(self):
|
||||||
self.spread.write({
|
self.spread.write({
|
||||||
@ -245,7 +247,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
'debit_account_id': self.spread_account.id,
|
'debit_account_id': self.spread_account.id,
|
||||||
'period_number': 3,
|
'period_number': 3,
|
||||||
'period_type': 'year',
|
'period_type': 'year',
|
||||||
'spread_date': '2018-10-24'
|
'spread_date': datetime.date(2018, 10, 24)
|
||||||
})
|
})
|
||||||
|
|
||||||
# change the state of invoice to open by clicking Validate button
|
# change the state of invoice to open by clicking Validate button
|
||||||
@ -274,7 +276,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.spread.write({
|
self.spread.write({
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-02-01'
|
'spread_date': datetime.date(2017, 2, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
self.spread.compute_spread_board()
|
self.spread.compute_spread_board()
|
||||||
@ -345,7 +347,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.spread.write({
|
self.spread.write({
|
||||||
'period_number': 3,
|
'period_number': 3,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-01',
|
'spread_date': datetime.date(2017, 1, 1),
|
||||||
'estimated_amount': 345.96,
|
'estimated_amount': 345.96,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -355,9 +357,9 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.assertEqual(115.32, spread_lines[0].amount)
|
self.assertEqual(115.32, spread_lines[0].amount)
|
||||||
self.assertEqual(115.32, spread_lines[1].amount)
|
self.assertEqual(115.32, spread_lines[1].amount)
|
||||||
self.assertEqual(115.32, spread_lines[2].amount)
|
self.assertEqual(115.32, spread_lines[2].amount)
|
||||||
self.assertEqual('2017-01-31', spread_lines[0].date)
|
self.assertEqual(datetime.date(2017, 1, 31), spread_lines[0].date)
|
||||||
self.assertEqual('2017-02-28', spread_lines[1].date)
|
self.assertEqual(datetime.date(2017, 2, 28), spread_lines[1].date)
|
||||||
self.assertEqual('2017-03-31', spread_lines[2].date)
|
self.assertEqual(datetime.date(2017, 3, 31), spread_lines[2].date)
|
||||||
|
|
||||||
for line in spread_lines:
|
for line in spread_lines:
|
||||||
self.assertFalse(line.move_id)
|
self.assertFalse(line.move_id)
|
||||||
@ -370,7 +372,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.spread.write({
|
self.spread.write({
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-02-01'
|
'spread_date': datetime.date(2017, 2, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
self.spread.compute_spread_board()
|
self.spread.compute_spread_board()
|
||||||
@ -386,7 +388,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.spread.write({
|
self.spread.write({
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-02-01'
|
'spread_date': datetime.date(2017, 2, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
self.spread.compute_spread_board()
|
self.spread.compute_spread_board()
|
||||||
@ -490,7 +492,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
'estimated_amount': -1000.0,
|
'estimated_amount': -1000.0,
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-07'
|
'spread_date': datetime.date(2017, 1, 7)
|
||||||
})
|
})
|
||||||
with self.assertRaises(UserError):
|
with self.assertRaises(UserError):
|
||||||
self.spread.compute_spread_board()
|
self.spread.compute_spread_board()
|
||||||
@ -536,7 +538,7 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.spread.write({
|
self.spread.write({
|
||||||
'period_number': 12,
|
'period_number': 12,
|
||||||
'period_type': 'month',
|
'period_type': 'month',
|
||||||
'spread_date': '2017-01-07'
|
'spread_date': datetime.date(2017, 1, 7)
|
||||||
})
|
})
|
||||||
self.spread_account.reconcile = True
|
self.spread_account.reconcile = True
|
||||||
self.assertTrue(self.spread_account.reconcile)
|
self.assertTrue(self.spread_account.reconcile)
|
||||||
@ -579,19 +581,19 @@ class TestComputeSpreadBoard(AccountingTestCase):
|
|||||||
self.assertEqual(83.33, spread_lines[11].amount)
|
self.assertEqual(83.33, spread_lines[11].amount)
|
||||||
self.assertEqual(16.17, spread_lines[12].amount)
|
self.assertEqual(16.17, spread_lines[12].amount)
|
||||||
|
|
||||||
self.assertEqual('2017-01-31', spread_lines[0].date)
|
self.assertEqual(datetime.date(2017, 1, 31), spread_lines[0].date)
|
||||||
self.assertEqual('2017-02-28', spread_lines[1].date)
|
self.assertEqual(datetime.date(2017, 2, 28), spread_lines[1].date)
|
||||||
self.assertEqual('2017-03-31', spread_lines[2].date)
|
self.assertEqual(datetime.date(2017, 3, 31), spread_lines[2].date)
|
||||||
self.assertEqual('2017-04-30', spread_lines[3].date)
|
self.assertEqual(datetime.date(2017, 4, 30), spread_lines[3].date)
|
||||||
self.assertEqual('2017-05-31', spread_lines[4].date)
|
self.assertEqual(datetime.date(2017, 5, 31), spread_lines[4].date)
|
||||||
self.assertEqual('2017-06-30', spread_lines[5].date)
|
self.assertEqual(datetime.date(2017, 6, 30), spread_lines[5].date)
|
||||||
self.assertEqual('2017-07-31', spread_lines[6].date)
|
self.assertEqual(datetime.date(2017, 7, 31), spread_lines[6].date)
|
||||||
self.assertEqual('2017-08-31', spread_lines[7].date)
|
self.assertEqual(datetime.date(2017, 8, 31), spread_lines[7].date)
|
||||||
self.assertEqual('2017-09-30', spread_lines[8].date)
|
self.assertEqual(datetime.date(2017, 9, 30), spread_lines[8].date)
|
||||||
self.assertEqual('2017-10-31', spread_lines[9].date)
|
self.assertEqual(datetime.date(2017, 10, 31), spread_lines[9].date)
|
||||||
self.assertEqual('2017-11-30', spread_lines[10].date)
|
self.assertEqual(datetime.date(2017, 11, 30), spread_lines[10].date)
|
||||||
self.assertEqual('2017-12-31', spread_lines[11].date)
|
self.assertEqual(datetime.date(2017, 12, 31), spread_lines[11].date)
|
||||||
self.assertEqual('2018-01-31', spread_lines[12].date)
|
self.assertEqual(datetime.date(2018, 1, 31), spread_lines[12].date)
|
||||||
|
|
||||||
self.assertAlmostEqual(self.spread.unspread_amount, 682.81)
|
self.assertAlmostEqual(self.spread.unspread_amount, 682.81)
|
||||||
self.assertAlmostEqual(self.spread.unposted_amount, 682.81)
|
self.assertAlmostEqual(self.spread.unposted_amount, 682.81)
|
||||||
|
@ -95,11 +95,11 @@
|
|||||||
<field name="amount" attrs="{'readonly':[('move_id','!=',False)]}" sum="Total"/>
|
<field name="amount" attrs="{'readonly':[('move_id','!=',False)]}" sum="Total"/>
|
||||||
<field name="date" readonly="1"/>
|
<field name="date" readonly="1"/>
|
||||||
<field name="move_id" readonly="1"/>
|
<field name="move_id" readonly="1"/>
|
||||||
<button name="create_move" icon="fa fa-play" string="Create Move" type="object" groups="account.group_account_manager"
|
<button name="create_move" icon="fa-play" string="Create Move" type="object" groups="account.group_account_manager"
|
||||||
attrs="{'invisible':['|',('move_id','!=',False)]}"/>
|
attrs="{'invisible':['|',('move_id','!=',False)]}"/>
|
||||||
<button name="open_move" icon="fa fa-plus-square-o" string="View Move" type="object"
|
<button name="open_move" icon="fa-plus-square-o" string="View Move" type="object"
|
||||||
attrs="{'invisible':[('move_id','=',False)]}"/>
|
attrs="{'invisible':[('move_id','=',False)]}"/>
|
||||||
<button name="unlink_move" icon="fa fa-times" string="Delete Move" type="object" confirm="This will delete the move. Are you sure ?" groups="account.group_account_manager"
|
<button name="unlink_move" icon="fa-times" string="Delete Move" type="object" confirm="This will delete the move. Are you sure ?" groups="account.group_account_manager"
|
||||||
attrs="{'invisible':[('move_id','=',False)]}"/>
|
attrs="{'invisible':[('move_id','=',False)]}"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
Loading…
Reference in New Issue
Block a user