Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions sale_crm_recurring_activities/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

=============================
Sale CRM recurring activities
=============================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:19ba3dbbaf601ea67ce4090c3d4ca863b9caa301d8219d0b8759e03f46e5f1ec
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |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/license-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%2Fcrm-lightgray.png?logo=github
:target: https://github.com/OCA/crm/tree/16.0/sale_crm_recurring_activities
:alt: OCA/crm
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/crm-16-0/crm-16-0-sale_crm_recurring_activities
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/crm&target_branch=16.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module adds a table that allows you to program Recurring Activities
linked to Opportunities. It is possible to change the activity type, the
assigned user, the summary, the note and the scheduled Days. These
Activities will be activated when a Quotation linked to the opportunity
is confirmed.

**Table of contents**

.. contents::
:local:

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/crm/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/crm/issues/new?body=module:%20sale_crm_recurring_activities%0Aversion:%2016.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
-------

* PyTech SRL

Contributors
------------

- `PyTech SRL <https://pytech.it>`__:

- Alessandro Pecchini <alessandro.pecchini@pytech.it>

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/crm <https://github.com/OCA/crm/tree/16.0/sale_crm_recurring_activities>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions sale_crm_recurring_activities/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
21 changes: 21 additions & 0 deletions sale_crm_recurring_activities/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "Sale CRM recurring activities",
"summary": """
Add recurring activities to opportunity after quotation has been confirmed
""",
"author": "PyTech SRL, Odoo Community Association (OCA)",
"license": "AGPL-3",
"website": "https://github.com/OCA/crm",
"category": "Hidden",
"version": "16.0.1.0.0",
"depends": [
"html_text",
"sale_crm",
],
"data": [
"security/ir.model.access.csv",
"security/ir_rules.xml",
"views/crm_recurring_activity_views.xml",
],
"installable": True,
}
3 changes: 3 additions & 0 deletions sale_crm_recurring_activities/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import crm_recurring_activity
from . import res_company
from . import sale_order
72 changes: 72 additions & 0 deletions sale_crm_recurring_activities/models/crm_recurring_activity.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError


class CrmRecurringActivity(models.Model):
_name = "crm.recurring.activity"
_description = "CRM Recurring activity"

company_id = fields.Many2one(
comodel_name="res.company",
default=lambda self: self.env.company.id,
required=True,
)
activity_type_id = fields.Many2one(
"mail.activity.type",
ondelete="restrict",
domain="[('res_model', 'in', [False, 'crm.lead'])]",
)
user_id = fields.Many2one(
"res.users",
string="Assigned to",
required=True,
)
summary = fields.Char(
compute="_compute_on_activity_type_id",
store=True,
readonly=False,
)
note = fields.Html(
sanitize_style=True,
compute="_compute_on_activity_type_id",
store=True,
readonly=False,
)
scheduled_days = fields.Integer()

@api.constrains("user_id", "company_id")
def _check_user_id(self):
for rec in self:
user = rec.user_id
company = rec.company_id
if not user or not company:
continue
if not user.active or user.share:
raise ValidationError(
_(
"You can only assign recurring activities "
"to active internal users."
)
)
if company not in user.company_ids:
raise ValidationError(
_(
"Assigned user %(user)s "
"does not have access to company: %(company)s.",
user=user.display_name,
company=company.display_name,
)
)
if not self.env.user.has_group("sales_team.group_sale_salesman"):
raise ValidationError(
_("The user does not have permission to use the CRM app")
)

@api.depends("activity_type_id")
def _compute_on_activity_type_id(self):
for activity in self:
if activity.activity_type_id:
if activity.activity_type_id.summary:
activity.summary = self.activity_type_id.summary
if activity.activity_type_id.default_note:
activity.note = self.activity_type_id.default_note
11 changes: 11 additions & 0 deletions sale_crm_recurring_activities/models/res_company.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from odoo import fields, models


class ResCompany(models.Model):
_inherit = "res.company"

crm_recurring_activity_ids = fields.One2many(
"crm.recurring.activity",
"company_id",
string="Recurring Activities",
)
24 changes: 24 additions & 0 deletions sale_crm_recurring_activities/models/sale_order.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from datetime import timedelta

from odoo import fields, models


class SaleOrder(models.Model):
_inherit = "sale.order"

def action_confirm(self):
for order in self:
crm_opportunity = order.opportunity_id
if not crm_opportunity:
continue
activities = order.sudo().company_id.crm_recurring_activity_ids
for item in activities:
crm_opportunity.activity_schedule(
date_deadline=fields.Date.today()
+ timedelta(days=item.scheduled_days),
summary=item.summary,
note=item.note,
activity_type_id=item.activity_type_id.id,
user_id=item.user_id.id,
)
return super().action_confirm()
2 changes: 2 additions & 0 deletions sale_crm_recurring_activities/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- [PyTech SRL](https://pytech.it):
- Alessandro Pecchini \<<alessandro.pecchini@pytech.it>\>
4 changes: 4 additions & 0 deletions sale_crm_recurring_activities/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
This module adds a table that allows you to program Recurring Activities linked to
Opportunities. It is possible to change the activity type, the assigned user, the
summary, the note and the scheduled Days. These Activities will be activated when a
Quotation linked to the opportunity is confirmed.
2 changes: 2 additions & 0 deletions sale_crm_recurring_activities/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_crm_recurring_activity_admin,access.crm.recurring.activity,model_crm_recurring_activity,sales_team.group_sale_manager,1,1,1,1
8 changes: 8 additions & 0 deletions sale_crm_recurring_activities/security/ir_rules.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="rule_crm_recurring_activity_multi_company" model="ir.rule">
<field name="name">Recurring activities: company restriction</field>
<field name="model_id" ref="model_crm_recurring_activity" />
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
</odoo>
Loading
Loading