Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[15.0][ADD] crm_project_task: Module added to create task from lead/opportunities #507

Merged
merged 1 commit into from
Jul 21, 2023
Merged
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
35 changes: 35 additions & 0 deletions crm_project_task/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
**This file is going to be generated by oca-gen-addon-readme.**

*Manual changes will be overwritten.*

Please provide content in the ``readme`` directory:

* **DESCRIPTION.rst** (required)
* INSTALL.rst (optional)
* CONFIGURE.rst (optional)
* **USAGE.rst** (optional, highly recommended)
* DEVELOP.rst (optional)
* ROADMAP.rst (optional)
* HISTORY.rst (optional, recommended)
* **CONTRIBUTORS.rst** (optional, highly recommended)
* CREDITS.rst (optional)

Content of this README will also be drawn from the addon manifest,
from keys such as name, authors, maintainers, development_status,
and license.

A good, one sentence summary in the manifest is also highly recommended.


Automatic changelog generation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

`HISTORY.rst` can be auto generated using `towncrier <https://pypi.org/project/towncrier>`_.

Just put towncrier compatible changelog fragments into `readme/newsfragments`
and the changelog file will be automatically generated and updated when a new fragment is added.

Please refer to `towncrier` documentation to know more.

NOTE: the changelog will be automatically generated when using `/ocabot merge $option`.
If you need to run it manually, refer to `OCA/maintainer-tools README <https://github.com/OCA/maintainer-tools>`_.
2 changes: 2 additions & 0 deletions crm_project_task/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import wizards
26 changes: 26 additions & 0 deletions crm_project_task/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright 2023 Moduon Team S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)

{
"name": "CRM Project Task",
"summary": "Create tasks from lead or opportunity",
"version": "15.0.1.0.0",
"development_status": "Alpha",
"category": "Sales/CRM",
"website": "https://github.com/OCA/crm",
"author": "Moduon, Odoo Community Association (OCA)",
"maintainers": ["EmilioPascual"],
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": [
"crm",
"project",
],
"data": [
"security/ir.model.access.csv",
"views/res_config_settings.xml",
"wizards/crm_create_task.xml",
"views/crm_lead.xml",
],
}
166 changes: 166 additions & 0 deletions crm_project_task/i18n/crm_project_task.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * crm_project_task
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-18 15:31+0000\n"
"PO-Revision-Date: 2023-07-18 15:31+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: crm_project_task
#: model_terms:ir.ui.view,arch_db:crm_project_task.res_config_settings_view_form
msgid ""
"By default this project will be selected to create task from lead / "
"opportunity"
msgstr ""

#. module: crm_project_task
#: model_terms:ir.ui.view,arch_db:crm_project_task.wizard_crm_create_task_view_form
msgid "Cancel"
msgstr ""

#. module: crm_project_task
#: model:ir.model,name:crm_project_task.model_res_company
msgid "Companies"
msgstr ""

#. module: crm_project_task
#: model:ir.model,name:crm_project_task.model_res_config_settings
msgid "Config Settings"
msgstr ""

#. module: crm_project_task
#: model:ir.actions.act_window,name:crm_project_task.wizard_crm_create_task_action
#: model_terms:ir.ui.view,arch_db:crm_project_task.inherit_crm_lead_view_form_crm_project_task
#: model_terms:ir.ui.view,arch_db:crm_project_task.wizard_crm_create_task_view_form
msgid "Create Task"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__create_uid
msgid "Created by"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__create_date
msgid "Created on"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_res_company__crm_default_project_id
#: model:ir.model.fields,field_description:crm_project_task.field_res_config_settings__crm_default_project_id
msgid "Crm Default Project"
msgstr ""

#. module: crm_project_task
#: model_terms:ir.ui.view,arch_db:crm_project_task.res_config_settings_view_form
msgid "Default project"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__description
msgid "Description"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__display_name
msgid "Display Name"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__id
msgid "ID"
msgstr ""

#. module: crm_project_task
#. openerp-web
#: code:addons/crm_project_task/static/src/js/web_module_name.tour.js:0
#, python-format
msgid "Instructions for end user."
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task____last_update
msgid "Last Modified on"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__write_uid
msgid "Last Updated by"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__write_date
msgid "Last Updated on"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__lead_id
msgid "Lead"
msgstr ""

#. module: crm_project_task
#: model:ir.model.fields,field_description:crm_project_task.field_crm_create_task__task_name
msgid "Name Task"
msgstr ""

#. module: crm_project_task
#: code:addons/crm_project_task/wizards/crm_create_task.py:0
#, python-format
msgid ""
"Project not configured in settings, please contact with your administrator."
msgstr ""

#. module: crm_project_task
#: model_terms:ir.ui.view,arch_db:crm_project_task.res_config_settings_view_form
msgid "Projects"
msgstr ""

#. module: crm_project_task
#: code:addons/crm_project_task/wizards/crm_create_task.py:0
#, python-format
msgid ""
"Task <a href=# data-oe-model=project.task data-oe-id=%d>%s</a> created."
msgstr ""

#. module: crm_project_task
#: code:addons/crm_project_task/wizards/crm_create_task.py:0
#, python-format
msgid ""
"Task created from lead/opportunity <a href=# data-oe-model=crm.lead data-oe-"
"id=%d>%s</a>."
msgstr ""

#. module: crm_project_task
#. openerp-web
#: code:addons/crm_project_task/static/src/js/web_module_name.tour.js:0
#, python-format
msgid "Text for continue button."
msgstr ""

#. module: crm_project_task
#. openerp-web
#: code:addons/crm_project_task/static/src/js/web_module_name.tour.js:0
#, python-format
msgid "The title of this step, appears in logs"
msgstr ""

#. module: crm_project_task
#. openerp-web
#: code:addons/crm_project_task/static/src/js/web_module_name.tour.js:0
#, python-format
msgid "Try to demonstrate how to create a tour"
msgstr ""

#. module: crm_project_task
#: model:ir.model,name:crm_project_task.model_crm_create_task
msgid "Wizard to create task"
msgstr ""
2 changes: 2 additions & 0 deletions crm_project_task/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import res_config_settings
from . import res_company
10 changes: 10 additions & 0 deletions crm_project_task/models/res_company.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Copyright 2023 Moduon Team S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)

from odoo import fields, models


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

crm_default_project_id = fields.Many2one("project.project")
EmilioPascual marked this conversation as resolved.
Show resolved Hide resolved
13 changes: 13 additions & 0 deletions crm_project_task/models/res_config_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright 2023 Moduon Team S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)


from odoo import fields, models


class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"

crm_default_project_id = fields.Many2one(
related="company_id.crm_default_project_id", readonly=False
)
6 changes: 6 additions & 0 deletions crm_project_task/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
To configure this module, you need to:

yajo marked this conversation as resolved.
Show resolved Hide resolved
* Go to Project
* Create a project with right configuration in order that all salesman have access (usually all employees)
* Go to CRM > Configuration > Project
* Set crm default project
2 changes: 2 additions & 0 deletions crm_project_task/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* Emilio Pascual (`Moduon <https://www.moduon.team/>`__)
yajo marked this conversation as resolved.
Show resolved Hide resolved
* Rafael Blasco (`Moduon <https://www.moduon.team/>`__)
1 change: 1 addition & 0 deletions crm_project_task/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module allow create task from leads/opportunities
7 changes: 7 additions & 0 deletions crm_project_task/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#. Go to *CRM > Sales > My pipeline*.
#. Open one of the existing leads or create one.
#. Click on the button "Create Task".
#. A popup will appear asking you name and description for create task.
#. Click on "Create Task" button.
#. A task will be created with project in settings.
#. A message chatter will be created in task with link for lead/opportunity. Also, a message chatter will be creat in lead/opportunity with link for task.
2 changes: 2 additions & 0 deletions crm_project_task/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_create_task,crm.create.task.user,model_crm_create_task,sales_team.group_sale_salesman,1,1,1,1
Binary file added crm_project_task/static/description/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions crm_project_task/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import test_crm_project_task
80 changes: 80 additions & 0 deletions crm_project_task/tests/test_crm_project_task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Copyright 2023 Moduon Team S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)

from odoo.exceptions import UserError
from odoo.tests import tagged
from odoo.tests.common import TransactionCase

from odoo.addons.mail.tests.common import mail_new_test_user


@tagged("post_install", "-at_install")
class TestCrmProjectTask(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env.user.company_id
cls.user_salesman = mail_new_test_user(
cls.env,
login="user_test",
name="User Test",
email="[email protected]",
company_id=cls.company.id,
groups="sales_team.group_sale_salesman",
)
cls.partner = cls.env["res.partner"].create(
{
"name": "Partner Test",
}
)
cls.lead = cls.env["crm.lead"].create(
{
"name": "Test Lead",
"type": "lead",
"partner_id": cls.partner.id,
"user_id": cls.user_salesman.id,
}
)
cls.project = cls.env["project.project"].create(
{
"name": "Test Project",
"description": "Test Description",
}
)

def test_create_task(self):
self.company.crm_default_project_id = self.project
task_name = "Task Test"
task_description = "Line1</br>Line2"
prev_tasks = self.project.task_ids
self.env["crm.create.task"].with_user(self.user_salesman).create(
{
"lead_id": self.lead.id,
"task_name": task_name,
"description": task_description,
}
).create_task()
tasks = self.project.task_ids
self.assertEqual(len(prev_tasks) + 1, len(tasks))
task = tasks - prev_tasks
self.assertEqual(task.name, task_name)
self.assertEqual(task.project_id, self.company.crm_default_project_id)
self.assertEqual(task.partner_id, self.partner)

def test_create_task_no_project(self):
self.company.crm_default_project_id = False
task_name = "Task Test"
task_description = "Line1</br>Line2"
wizard = (
self.env["crm.create.task"]
.with_user(self.user_salesman)
.create(
{
"lead_id": self.lead.id,
"task_name": task_name,
"description": task_description,
}
)
)
with self.assertRaises(UserError):
wizard.create_task()
23 changes: 23 additions & 0 deletions crm_project_task/views/crm_lead.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2023 Moduon Team S.L.
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0) -->
<odoo>
<record id="inherit_crm_lead_view_form_crm_project_task" model="ir.ui.view">
<field name="name">crm.lead.view.form.inherit.crm.project.task</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_lead_view_form" />
<field name="arch" type="xml">
<xpath expr="header" position="inside">
<button
string="Create Task"
name="%(wizard_crm_create_task_action)d"
type="action"
class="oe_highlight"
EmilioPascual marked this conversation as resolved.
Show resolved Hide resolved
context="{'default_lead_id': active_id, 'default_task_name': name}"
attrs="{'invisible': [('active','=',False)]}"
/>
</xpath>
</field>
</record>

</odoo>
Loading