[IMP] contract: black, isort, prettier

This commit is contained in:
Francisco Ivan Anton Prieto
2021-04-01 14:02:43 +02:00
parent 9b6f790dc1
commit 5e22708411
17 changed files with 191 additions and 75 deletions

View File

@@ -15,7 +15,7 @@
"category": "Contract Management", "category": "Contract Management",
"license": "AGPL-3", "license": "AGPL-3",
"author": "Tecnativa, ACSONE SA/NV, Odoo Community Association (OCA)", "author": "Tecnativa, ACSONE SA/NV, Odoo Community Association (OCA)",
"website": "https://github.com/oca/contract", "website": "https://github.com/OCA/contract",
"depends": ["base", "account", "product", "portal"], "depends": ["base", "account", "product", "portal"],
"external_dependencies": {"python": ["dateutil"]}, "external_dependencies": {"python": ["dateutil"]},
"data": [ "data": [

View File

@@ -34,7 +34,9 @@ class ContractAbstractContractLine(models.AbstractModel):
inverse="_inverse_price_unit", inverse="_inverse_price_unit",
) )
price_subtotal = fields.Float( price_subtotal = fields.Float(
compute="_compute_price_subtotal", digits="Account", string="Sub Total", compute="_compute_price_subtotal",
digits="Account",
string="Sub Total",
) )
discount = fields.Float( discount = fields.Float(
string="Discount (%)", string="Discount (%)",
@@ -69,13 +71,18 @@ class ContractAbstractContractLine(models.AbstractModel):
copy=True, copy=True,
) )
date_start = fields.Date( date_start = fields.Date(
compute="_compute_date_start", store=True, readonly=False, copy=True, compute="_compute_date_start",
store=True,
readonly=False,
copy=True,
) )
last_date_invoiced = fields.Date(string="Last Date Invoiced") last_date_invoiced = fields.Date(string="Last Date Invoiced")
is_canceled = fields.Boolean(string="Canceled", default=False) is_canceled = fields.Boolean(string="Canceled", default=False)
is_auto_renew = fields.Boolean(string="Auto Renew", default=False) is_auto_renew = fields.Boolean(string="Auto Renew", default=False)
auto_renew_interval = fields.Integer( auto_renew_interval = fields.Integer(
default=1, string="Renew Every", help="Renew every (Days/Week/Month/Year)", default=1,
string="Renew Every",
help="Renew every (Days/Week/Month/Year)",
) )
auto_renew_rule_type = fields.Selection( auto_renew_rule_type = fields.Selection(
[ [
@@ -184,7 +191,10 @@ class ContractAbstractContractLine(models.AbstractModel):
).property_product_pricelist ).property_product_pricelist
) )
product = line.product_id.with_context( product = line.product_id.with_context(
quantity=line.env.context.get("contract_line_qty", line.quantity,), quantity=line.env.context.get(
"contract_line_qty",
line.quantity,
),
pricelist=pricelist.id, pricelist=pricelist.id,
partner=line.contract_id.partner_id.id, partner=line.contract_id.partner_id.id,
date=line.env.context.get( date=line.env.context.get(

View File

@@ -25,10 +25,16 @@ class ContractContract(models.Model):
"portal.mixin", "portal.mixin",
] ]
active = fields.Boolean(default=True,) active = fields.Boolean(
code = fields.Char(string="Reference",) default=True,
)
code = fields.Char(
string="Reference",
)
group_id = fields.Many2one( group_id = fields.Many2one(
string="Group", comodel_name="account.analytic.account", ondelete="restrict", string="Group",
comodel_name="account.analytic.account",
ondelete="restrict",
) )
currency_id = fields.Many2one( currency_id = fields.Many2one(
compute="_compute_currency_id", compute="_compute_currency_id",
@@ -36,7 +42,10 @@ class ContractContract(models.Model):
comodel_name="res.currency", comodel_name="res.currency",
string="Currency", string="Currency",
) )
manual_currency_id = fields.Many2one(comodel_name="res.currency", readonly=True,) manual_currency_id = fields.Many2one(
comodel_name="res.currency",
readonly=True,
)
contract_template_id = fields.Many2one( contract_template_id = fields.Many2one(
string="Contract Template", comodel_name="contract.template" string="Contract Template", comodel_name="contract.template"
) )
@@ -77,7 +86,9 @@ class ContractContract(models.Model):
ondelete="restrict", ondelete="restrict",
) )
invoice_partner_id = fields.Many2one( invoice_partner_id = fields.Many2one(
string="Invoicing contact", comodel_name="res.partner", ondelete="restrict", string="Invoicing contact",
comodel_name="res.partner",
ondelete="restrict",
) )
partner_id = fields.Many2one( partner_id = fields.Many2one(
comodel_name="res.partner", inverse="_inverse_partner_id", required=True comodel_name="res.partner", inverse="_inverse_partner_id", required=True
@@ -103,10 +114,16 @@ class ContractContract(models.Model):
tracking=True, tracking=True,
) )
terminate_comment = fields.Text( terminate_comment = fields.Text(
string="Termination Comment", readonly=True, copy=False, tracking=True, string="Termination Comment",
readonly=True,
copy=False,
tracking=True,
) )
terminate_date = fields.Date( terminate_date = fields.Date(
string="Termination Date", readonly=True, copy=False, tracking=True, string="Termination Date",
readonly=True,
copy=False,
tracking=True,
) )
modification_ids = fields.One2many( modification_ids = fields.One2many(
comodel_name="contract.modification", comodel_name="contract.modification",
@@ -198,7 +215,15 @@ class ContractContract(models.Model):
invoices = ( invoices = (
self.env["account.move.line"] self.env["account.move.line"]
.search([("contract_line_id", "in", self.contract_line_ids.ids,)]) .search(
[
(
"contract_line_id",
"in",
self.contract_line_ids.ids,
)
]
)
.mapped("move_id") .mapped("move_id")
) )
# we are forced to always search for this for not losing possible <=v11 # we are forced to always search for this for not losing possible <=v11
@@ -221,7 +246,11 @@ class ContractContract(models.Model):
return currency or self.journal_id.currency_id or self.company_id.currency_id return currency or self.journal_id.currency_id or self.company_id.currency_id
@api.depends( @api.depends(
"manual_currency_id", "pricelist_id", "partner_id", "journal_id", "company_id", "manual_currency_id",
"pricelist_id",
"partner_id",
"journal_id",
"company_id",
) )
def _compute_currency_id(self): def _compute_currency_id(self):
for rec in self: for rec in self:
@@ -268,7 +297,8 @@ class ContractContract(models.Model):
contract.date_end = max(date_end) contract.date_end = max(date_end)
@api.depends( @api.depends(
"contract_line_ids.recurring_next_date", "contract_line_ids.is_canceled", "contract_line_ids.recurring_next_date",
"contract_line_ids.is_canceled",
) )
def _compute_recurring_next_date(self): def _compute_recurring_next_date(self):
for contract in self: for contract in self:

View File

@@ -22,7 +22,9 @@ class ContractLine(models.Model):
] ]
_order = "sequence,id" _order = "sequence,id"
sequence = fields.Integer(string="Sequence",) sequence = fields.Integer(
string="Sequence",
)
contract_id = fields.Many2one( contract_id = fields.Many2one(
comodel_name="contract.contract", comodel_name="contract.contract",
string="Contract", string="Contract",
@@ -32,10 +34,12 @@ class ContractLine(models.Model):
ondelete="cascade", ondelete="cascade",
) )
analytic_account_id = fields.Many2one( analytic_account_id = fields.Many2one(
string="Analytic account", comodel_name="account.analytic.account", string="Analytic account",
comodel_name="account.analytic.account",
) )
analytic_tag_ids = fields.Many2many( analytic_tag_ids = fields.Many2many(
comodel_name="account.analytic.tag", string="Analytic Tags", comodel_name="account.analytic.tag",
string="Analytic Tags",
) )
date_start = fields.Date(required=True) date_start = fields.Date(required=True)
date_end = fields.Date(compute="_compute_date_end", store=True, readonly=False) date_end = fields.Date(compute="_compute_date_end", store=True, readonly=False)
@@ -132,13 +136,16 @@ class ContractLine(models.Model):
self._set_recurrence_field("date_end") self._set_recurrence_field("date_end")
@api.depends( @api.depends(
"date_end", "termination_notice_rule_type", "termination_notice_interval", "date_end",
"termination_notice_rule_type",
"termination_notice_interval",
) )
def _compute_termination_notice_date(self): def _compute_termination_notice_date(self):
for rec in self: for rec in self:
if rec.date_end: if rec.date_end:
rec.termination_notice_date = rec.date_end - self.get_relative_delta( rec.termination_notice_date = rec.date_end - self.get_relative_delta(
rec.termination_notice_rule_type, rec.termination_notice_interval, rec.termination_notice_rule_type,
rec.termination_notice_interval,
) )
else: else:
rec.termination_notice_date = False rec.termination_notice_date = False
@@ -340,10 +347,10 @@ class ContractLine(models.Model):
@api.constrains("is_auto_renew", "successor_contract_line_id", "date_end") @api.constrains("is_auto_renew", "successor_contract_line_id", "date_end")
def _check_allowed(self): def _check_allowed(self):
""" """
logical impossible combination: logical impossible combination:
* a line with is_auto_renew True should have date_end and * a line with is_auto_renew True should have date_end and
couldn't have successor_contract_line_id couldn't have successor_contract_line_id
* a line without date_end can't have successor_contract_line_id * a line without date_end can't have successor_contract_line_id
""" """
for rec in self: for rec in self:
@@ -412,7 +419,10 @@ class ContractLine(models.Model):
) )
@api.onchange( @api.onchange(
"date_start", "is_auto_renew", "auto_renew_rule_type", "auto_renew_interval", "date_start",
"is_auto_renew",
"auto_renew_rule_type",
"auto_renew_interval",
) )
def _onchange_is_auto_renew(self): def _onchange_is_auto_renew(self):
"""Date end should be auto-computed if a contract line is set to """Date end should be auto-computed if a contract line is set to
@@ -420,7 +430,9 @@ class ContractLine(models.Model):
for rec in self.filtered("is_auto_renew"): for rec in self.filtered("is_auto_renew"):
if rec.date_start: if rec.date_start:
rec.date_end = self._get_first_date_end( rec.date_end = self._get_first_date_end(
rec.date_start, rec.auto_renew_rule_type, rec.auto_renew_interval, rec.date_start,
rec.auto_renew_rule_type,
rec.auto_renew_interval,
) )
@api.constrains("is_canceled", "is_auto_renew") @api.constrains("is_canceled", "is_auto_renew")
@@ -828,7 +840,10 @@ class ContractLine(models.Model):
post_message=False, post_message=False,
) )
contract_line |= rec.plan_successor( contract_line |= rec.plan_successor(
new_date_start, new_date_end, is_auto_renew, post_message=False, new_date_start,
new_date_end,
is_auto_renew,
post_message=False,
) )
else: else:
new_date_start = date_end + relativedelta(days=1) new_date_start = date_end + relativedelta(days=1)
@@ -847,7 +862,10 @@ class ContractLine(models.Model):
post_message=False, post_message=False,
) )
contract_line |= rec.plan_successor( contract_line |= rec.plan_successor(
new_date_start, new_date_end, is_auto_renew, post_message=False, new_date_start,
new_date_end,
is_auto_renew,
post_message=False,
) )
msg = _( msg = _(
"""Contract line for <strong>{product}</strong> """Contract line for <strong>{product}</strong>
@@ -856,7 +874,9 @@ class ContractLine(models.Model):
<br/> <br/>
- <strong>Suspension End</strong>: {new_date_end} - <strong>Suspension End</strong>: {new_date_end}
""".format( """.format(
product=rec.name, new_date_start=date_start, new_date_end=date_end, product=rec.name,
new_date_start=date_start,
new_date_end=date_end,
) )
) )
rec.contract_id.message_post(body=msg) rec.contract_id.message_post(body=msg)
@@ -1017,7 +1037,9 @@ class ContractLine(models.Model):
<br/> <br/>
- <strong>End</strong>: {new_date_end} - <strong>End</strong>: {new_date_end}
""".format( """.format(
product=rec.name, new_date_start=date_start, new_date_end=date_end, product=rec.name,
new_date_start=date_start,
new_date_end=date_end,
) )
) )
rec.contract_id.message_post(body=msg) rec.contract_id.message_post(body=msg)

View File

@@ -28,7 +28,8 @@ Criteria = namedtuple(
], ],
) )
Allowed = namedtuple( Allowed = namedtuple(
"Allowed", ["plan_successor", "stop_plan_successor", "stop", "cancel", "uncancel"], "Allowed",
["plan_successor", "stop_plan_successor", "stop", "cancel", "uncancel"],
) )

View File

@@ -19,7 +19,10 @@ class ContractModification(models.Model):
ondelete="cascade", ondelete="cascade",
index=True, index=True,
) )
sent = fields.Boolean(string="Sent", default=False,) sent = fields.Boolean(
string="Sent",
default=False,
)
@api.model_create_multi @api.model_create_multi
def create(self, vals_list): def create(self, vals_list):

View File

@@ -43,7 +43,9 @@ class ContractRecurrencyBasicMixin(models.AbstractModel):
), ),
) )
recurring_interval = fields.Integer( recurring_interval = fields.Integer(
default=1, string="Invoice Every", help="Invoice every (Days/Week/Month/Year)", default=1,
string="Invoice Every",
help="Invoice every (Days/Week/Month/Year)",
) )
date_start = fields.Date(string="Date Start") date_start = fields.Date(string="Date Start")
recurring_next_date = fields.Date(string="Date of Next Invoice") recurring_next_date = fields.Date(string="Date of Next Invoice")
@@ -80,10 +82,12 @@ class ContractRecurrencyMixin(models.AbstractModel):
) )
date_end = fields.Date(string="Date End", index=True) date_end = fields.Date(string="Date End", index=True)
next_period_date_start = fields.Date( next_period_date_start = fields.Date(
string="Next Period Start", compute="_compute_next_period_date_start", string="Next Period Start",
compute="_compute_next_period_date_start",
) )
next_period_date_end = fields.Date( next_period_date_end = fields.Date(
string="Next Period End", compute="_compute_next_period_date_end", string="Next Period End",
compute="_compute_next_period_date_end",
) )
last_date_invoiced = fields.Date( last_date_invoiced = fields.Date(
string="Last Date Invoiced", readonly=True, copy=False string="Last Date Invoiced", readonly=True, copy=False

View File

@@ -11,5 +11,7 @@ class ContractTag(models.Model):
name = fields.Char(required=True) name = fields.Char(required=True)
company_id = fields.Many2one( company_id = fields.Many2one(
"res.company", string="Company", default=lambda self: self.env.company.id, "res.company",
string="Company",
default=lambda self: self.env.company.id,
) )

View File

@@ -10,13 +10,17 @@ class ResPartner(models.Model):
_inherit = "res.partner" _inherit = "res.partner"
sale_contract_count = fields.Integer( sale_contract_count = fields.Integer(
string="Sale Contracts", compute="_compute_contract_count", string="Sale Contracts",
compute="_compute_contract_count",
) )
purchase_contract_count = fields.Integer( purchase_contract_count = fields.Integer(
string="Purchase Contracts", compute="_compute_contract_count", string="Purchase Contracts",
compute="_compute_contract_count",
) )
contract_ids = fields.One2many( contract_ids = fields.One2many(
comodel_name="contract.contract", inverse_name="partner_id", string="Contracts", comodel_name="contract.contract",
inverse_name="partner_id",
string="Contracts",
) )
def _get_partner_contract_domain(self): def _get_partner_contract_domain(self):
@@ -49,8 +53,8 @@ class ResPartner(models.Model):
) )
def act_show_contract(self): def act_show_contract(self):
""" This opens contract view """This opens contract view
@return: the contract view @return: the contract view
""" """
self.ensure_one() self.ensure_one()
contract_type = self._context.get("contract_type") contract_type = self._context.get("contract_type")

View File

@@ -1,4 +1,4 @@
odoo.define("contract.tour", function(require) { odoo.define("contract.tour", function (require) {
"use strict"; "use strict";
var tour = require("web_tour.tour"); var tour = require("web_tour.tour");

View File

@@ -8,7 +8,7 @@ and this condition is met, then an extra space appears in the rows
corresponding to the sections and lines. corresponding to the sections and lines.
This js was written to deal with that problem, but a solution based on This js was written to deal with that problem, but a solution based on
this can be applied directly to Odoo*/ this can be applied directly to Odoo*/
odoo.define("contract.section_and_note_backend", function(require) { odoo.define("contract.section_and_note_backend", function (require) {
"use strict"; "use strict";
require("account.section_and_note_backend"); require("account.section_and_note_backend");
@@ -16,11 +16,11 @@ odoo.define("contract.section_and_note_backend", function(require) {
var section_and_note_one2many = fieldRegistry.get("section_and_note_one2many"); var section_and_note_one2many = fieldRegistry.get("section_and_note_one2many");
section_and_note_one2many.include({ section_and_note_one2many.include({
_getRenderer: function() { _getRenderer: function () {
var result = this._super.apply(this, arguments); var result = this._super.apply(this, arguments);
if (this.view.arch.tag === "tree") { if (this.view.arch.tag === "tree") {
result.include({ result.include({
_renderBodyCell: function(record) { _renderBodyCell: function (record) {
var $cell = this._super.apply(this, arguments); var $cell = this._super.apply(this, arguments);
var isSection = record.data.display_type === "line_section"; var isSection = record.data.display_type === "line_section";

View File

@@ -539,7 +539,8 @@ class TestContract(TestContractBase):
self.contract.contract_template_id = self.template self.contract.contract_template_id = self.template
self.assertFalse( self.assertFalse(
self.contract.contract_line_ids, "Recurring lines were not removed.", self.contract.contract_line_ids,
"Recurring lines were not removed.",
) )
self.contract.contract_template_id = self.template self.contract.contract_template_id = self.template
self.contract._onchange_contract_template_id() self.contract._onchange_contract_template_id()
@@ -1627,7 +1628,8 @@ class TestContract(TestContractBase):
self.assertFalse(new_line.is_canceled) self.assertFalse(new_line.is_canceled)
self.assertEqual(self.acct_line.successor_contract_line_id, new_line) self.assertEqual(self.acct_line.successor_contract_line_id, new_line)
self.assertEqual( self.assertEqual(
new_line.recurring_next_date, suspension_end + relativedelta(days=1), new_line.recurring_next_date,
suspension_end + relativedelta(days=1),
) )
def test_cancel_uncancel_with_predecessor_has_successor(self): def test_cancel_uncancel_with_predecessor_has_successor(self):
@@ -1737,7 +1739,8 @@ class TestContract(TestContractBase):
[("contract_line_id", "in", contracts.mapped("contract_line_ids").ids)] [("contract_line_id", "in", contracts.mapped("contract_line_ids").ids)]
) )
self.assertEqual( self.assertEqual(
len(contracts.mapped("contract_line_ids")), len(invoice_lines), len(contracts.mapped("contract_line_ids")),
len(invoice_lines),
) )
def test_contract_manually_create_invoice(self): def test_contract_manually_create_invoice(self):
@@ -1764,7 +1767,8 @@ class TestContract(TestContractBase):
[("contract_line_id", "in", contracts.mapped("contract_line_ids").ids)] [("contract_line_id", "in", contracts.mapped("contract_line_ids").ids)]
) )
self.assertEqual( self.assertEqual(
len(contracts.mapped("contract_line_ids")), len(invoice_lines), len(contracts.mapped("contract_line_ids")),
len(invoice_lines),
) )
invoices = self.env["account.move"].search(action["domain"]) invoices = self.env["account.move"].search(action["domain"])
self.assertFalse(invoice_lines.mapped("move_id") - invoices) self.assertFalse(invoice_lines.mapped("move_id") - invoices)
@@ -1776,19 +1780,22 @@ class TestContract(TestContractBase):
self.acct_line.recurring_rule_type = "monthlylastday" self.acct_line.recurring_rule_type = "monthlylastday"
self.acct_line.date_end = "2018-03-15" self.acct_line.date_end = "2018-03-15"
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-01-05")) self.assertEqual(first, to_date("2018-01-05"))
self.assertEqual(last, to_date("2018-01-31")) self.assertEqual(last, to_date("2018-01-31"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-02-01")) self.assertEqual(first, to_date("2018-02-01"))
self.assertEqual(last, to_date("2018-02-28")) self.assertEqual(last, to_date("2018-02-28"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-03-01")) self.assertEqual(first, to_date("2018-03-01"))
self.assertEqual(last, to_date("2018-03-15")) self.assertEqual(last, to_date("2018-03-15"))
@@ -1800,7 +1807,8 @@ class TestContract(TestContractBase):
self.acct_line.recurring_rule_type = "monthlylastday" self.acct_line.recurring_rule_type = "monthlylastday"
self.acct_line.date_end = "2018-03-15" self.acct_line.date_end = "2018-03-15"
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-01-05")) self.assertEqual(first, to_date("2018-01-05"))
self.assertEqual(last, to_date("2018-01-31")) self.assertEqual(last, to_date("2018-01-31"))
@@ -1808,7 +1816,8 @@ class TestContract(TestContractBase):
self.assertEqual(self.acct_line.recurring_next_date, to_date("2018-01-05")) self.assertEqual(self.acct_line.recurring_next_date, to_date("2018-01-05"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-02-01")) self.assertEqual(first, to_date("2018-02-01"))
self.assertEqual(last, to_date("2018-02-28")) self.assertEqual(last, to_date("2018-02-28"))
@@ -1817,7 +1826,8 @@ class TestContract(TestContractBase):
self.assertEqual(self.acct_line.last_date_invoiced, to_date("2018-01-31")) self.assertEqual(self.acct_line.last_date_invoiced, to_date("2018-01-31"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-03-01")) self.assertEqual(first, to_date("2018-03-01"))
self.assertEqual(last, to_date("2018-03-15")) self.assertEqual(last, to_date("2018-03-15"))
@@ -1826,7 +1836,8 @@ class TestContract(TestContractBase):
self.assertEqual(self.acct_line.last_date_invoiced, to_date("2018-02-28")) self.assertEqual(self.acct_line.last_date_invoiced, to_date("2018-02-28"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertFalse(first) self.assertFalse(first)
self.assertFalse(last) self.assertFalse(last)
@@ -1841,13 +1852,15 @@ class TestContract(TestContractBase):
self.acct_line.date_end = "2018-08-15" self.acct_line.date_end = "2018-08-15"
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-02-05")) self.assertEqual(first, to_date("2018-02-05"))
self.assertEqual(last, to_date("2018-03-04")) self.assertEqual(last, to_date("2018-03-04"))
self.acct_line.recurring_next_date = "2018-06-05" self.acct_line.recurring_next_date = "2018-06-05"
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-02-05")) self.assertEqual(first, to_date("2018-02-05"))
self.assertEqual(last, to_date("2018-07-04")) self.assertEqual(last, to_date("2018-07-04"))
@@ -1859,13 +1872,15 @@ class TestContract(TestContractBase):
self.acct_line.date_end = "2018-08-15" self.acct_line.date_end = "2018-08-15"
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-02-05")) self.assertEqual(first, to_date("2018-02-05"))
self.assertEqual(last, to_date("2018-03-04")) self.assertEqual(last, to_date("2018-03-04"))
self.acct_line.recurring_next_date = "2018-06-05" self.acct_line.recurring_next_date = "2018-06-05"
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-02-05")) self.assertEqual(first, to_date("2018-02-05"))
self.assertEqual(last, to_date("2018-06-04")) self.assertEqual(last, to_date("2018-06-04"))
@@ -1876,19 +1891,22 @@ class TestContract(TestContractBase):
self.acct_line.recurring_rule_type = "monthly" self.acct_line.recurring_rule_type = "monthly"
self.acct_line.date_end = "2018-03-15" self.acct_line.date_end = "2018-03-15"
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-01-05")) self.assertEqual(first, to_date("2018-01-05"))
self.assertEqual(last, to_date("2018-02-04")) self.assertEqual(last, to_date("2018-02-04"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-02-05")) self.assertEqual(first, to_date("2018-02-05"))
self.assertEqual(last, to_date("2018-03-04")) self.assertEqual(last, to_date("2018-03-04"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-03-05")) self.assertEqual(first, to_date("2018-03-05"))
self.assertEqual(last, to_date("2018-03-15")) self.assertEqual(last, to_date("2018-03-15"))
@@ -1899,19 +1917,22 @@ class TestContract(TestContractBase):
self.acct_line.recurring_rule_type = "monthly" self.acct_line.recurring_rule_type = "monthly"
self.acct_line.date_end = "2018-03-15" self.acct_line.date_end = "2018-03-15"
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-01-05")) self.assertEqual(first, to_date("2018-01-05"))
self.assertEqual(last, to_date("2018-02-04")) self.assertEqual(last, to_date("2018-02-04"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-02-05")) self.assertEqual(first, to_date("2018-02-05"))
self.assertEqual(last, to_date("2018-03-04")) self.assertEqual(last, to_date("2018-03-04"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-03-05")) self.assertEqual(first, to_date("2018-03-05"))
self.assertEqual(last, to_date("2018-03-15")) self.assertEqual(last, to_date("2018-03-15"))
@@ -1922,19 +1943,22 @@ class TestContract(TestContractBase):
self.acct_line.recurring_rule_type = "yearly" self.acct_line.recurring_rule_type = "yearly"
self.acct_line.date_end = "2020-03-15" self.acct_line.date_end = "2020-03-15"
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-01-05")) self.assertEqual(first, to_date("2018-01-05"))
self.assertEqual(last, to_date("2019-01-04")) self.assertEqual(last, to_date("2019-01-04"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2019-01-05")) self.assertEqual(first, to_date("2019-01-05"))
self.assertEqual(last, to_date("2020-01-04")) self.assertEqual(last, to_date("2020-01-04"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2020-01-05")) self.assertEqual(first, to_date("2020-01-05"))
self.assertEqual(last, to_date("2020-03-15")) self.assertEqual(last, to_date("2020-03-15"))
@@ -1945,19 +1969,22 @@ class TestContract(TestContractBase):
self.acct_line.recurring_rule_type = "yearly" self.acct_line.recurring_rule_type = "yearly"
self.acct_line.date_end = "2020-03-15" self.acct_line.date_end = "2020-03-15"
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2018-01-05")) self.assertEqual(first, to_date("2018-01-05"))
self.assertEqual(last, to_date("2019-01-04")) self.assertEqual(last, to_date("2019-01-04"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2019-01-05")) self.assertEqual(first, to_date("2019-01-05"))
self.assertEqual(last, to_date("2020-01-04")) self.assertEqual(last, to_date("2020-01-04"))
self.contract.recurring_create_invoice() self.contract.recurring_create_invoice()
first, last, recurring_next_date = self.acct_line._get_period_to_invoice( first, last, recurring_next_date = self.acct_line._get_period_to_invoice(
self.acct_line.last_date_invoiced, self.acct_line.recurring_next_date, self.acct_line.last_date_invoiced,
self.acct_line.recurring_next_date,
) )
self.assertEqual(first, to_date("2020-01-05")) self.assertEqual(first, to_date("2020-01-05"))
self.assertEqual(last, to_date("2020-03-15")) self.assertEqual(last, to_date("2020-03-15"))
@@ -2302,7 +2329,9 @@ class TestContract(TestContractBase):
group_can_terminate_contract.users |= self.env.user group_can_terminate_contract.users |= self.env.user
with self.assertRaises(ValidationError): with self.assertRaises(ValidationError):
self.contract._terminate_contract( self.contract._terminate_contract(
self.terminate_reason, "terminate_comment", to_date("2018-02-13"), self.terminate_reason,
"terminate_comment",
to_date("2018-02-13"),
) )
def test_recurrency_propagation(self): def test_recurrency_propagation(self):

View File

@@ -24,7 +24,8 @@ class TestContractPortal(odoo.tests.HttpCase):
self.authenticate("portal", "portal") self.authenticate("portal", "portal")
http.root.session_store.save(self.session) http.root.session_store.save(self.session)
url_contract = "/my/contracts/{}?access_token={}".format( url_contract = "/my/contracts/{}?access_token={}".format(
contract.id, contract.access_token, contract.id,
contract.access_token,
) )
self.assertEqual(self.url_open(url=url_contract).status_code, 200) self.assertEqual(self.url_open(url=url_contract).status_code, 200)
contract.message_unsubscribe(partner_ids=user_portal.partner_id.ids) contract.message_unsubscribe(partner_ids=user_portal.partner_id.ids)

View File

@@ -14,7 +14,8 @@ class ContractManuallyCreateInvoice(models.TransientModel):
compute="_compute_contract_to_invoice_ids" compute="_compute_contract_to_invoice_ids"
) )
contract_to_invoice_ids = fields.Many2many( contract_to_invoice_ids = fields.Many2many(
comodel_name="contract.contract", compute="_compute_contract_to_invoice_ids", comodel_name="contract.contract",
compute="_compute_contract_to_invoice_ids",
) )
contract_type = fields.Selection( contract_type = fields.Selection(
selection=[("sale", "Customer"), ("purchase", "Supplier")], selection=[("sale", "Customer"), ("purchase", "Supplier")],

2
requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
# generated from manifests external_dependencies
python-dateutil

View File

@@ -0,0 +1 @@
../../../../contract

6
setup/contract/setup.py Normal file
View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)