Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,123 @@
==================
CRM Project Create
==================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:b0555faf7acf3fa621d26d7a95df6e1cce0fced7788b70a02effce0c363e2d25
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcrm-lightgray.png?logo=github
:target: https://github.com/OCA/crm/tree/16.0/crm_project_create
: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-crm_project_create
: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 extends the functionality of crm and project and allow you
to create a project from opportunity or lead.
It also allows archiving or reactivating the project and its analytical
account from the lead.
.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_
**Table of contents**
.. contents::
:local:
Use Cases / Context
===================
This module was developed because sometimes you want to create the
project from the crm without creating a sales order, for example when
you want to plan a project.
It will be useful for you if you want to create a project before
creating a quotation and confirming it or if you want to estimate, plan
or know if you have the capacity before making the sale.
Usage
=====
To use this module, you need to:
1. Go to CRM > Sales > My Pipeline
2. Create a new opportunity or join an existing one.
3. Click on **Create project** in header.
4. A wizard is shown to fill project name and/or project description.
5. Click on **Create project**.
6. You can see project created in page **Extra Information**, inside
group **Misc**.
7. Is you have *Project: Administrator* permissions, you can edit the
project after creating it.
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:%20crm_project_create%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
-------
* Moduon
Contributors
------------
- Emilio Pascual (`Moduon <https://www.moduon.team/>`__)
- Eduardo López (`Moduon <https://www.moduon.team/>`__)
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.
.. |maintainer-EmilioPascual| image:: https://github.com/EmilioPascual.png?size=40px
:target: https://github.com/EmilioPascual
:alt: EmilioPascual
.. |maintainer-rafaelbn| image:: https://github.com/rafaelbn.png?size=40px
:target: https://github.com/rafaelbn
:alt: rafaelbn
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-EmilioPascual| |maintainer-rafaelbn|
This module is part of the `OCA/crm <https://github.com/OCA/crm/tree/16.0/crm_project_create>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,2 @@
from . import models
from . import wizards

View file

@ -0,0 +1,22 @@
# Copyright 2024 Moduon Team S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
{
"name": "CRM Project Create",
"summary": "Allow create projects from lead/opportunity",
"version": "16.0.1.1.0",
"development_status": "Alpha",
"category": "Sales/CRM",
"website": "https://github.com/OCA/crm",
"author": "Moduon, Odoo Community Association (OCA)",
"maintainers": ["EmilioPascual", "rafaelbn"],
"license": "LGPL-3",
"application": False,
"installable": True,
"depends": ["crm", "sale_project", "mail_message_destiny_link_template"],
"data": [
"security/ir.model.access.csv",
"wizards/crm_create_project.xml",
"views/crm_lead.xml",
],
}

View file

@ -0,0 +1,96 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * crm_project_create
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \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_create
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
msgid "Cancel"
msgstr "Otkaži"
#. module: crm_project_create
#: model:ir.actions.act_window,name:crm_project_create.crm_create_project_action
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_lead_view_form_crm_project_project
msgid "Create Project"
msgstr "Kreiraj projekt"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__id
msgid "ID"
msgstr "ID"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__lead_id
msgid "Lead"
msgstr "Potencijal"
#. module: crm_project_create
#: model:ir.model,name:crm_project_create.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Potencijal/Prilika"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_lead__project_id
msgid "Project"
msgstr "Projekat"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__project_description
msgid "Project Description"
msgstr "Opis projekta"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__project_name
msgid "Project Name"
msgstr "Ime projekta"
#. module: crm_project_create
#: model:ir.model,name:crm_project_create.model_crm_create_project
msgid "Wizart to create Project from Lead/Opportunity"
msgstr "Čarobnjak za kreiranje projekta iz potencijalnog klijenta/prilike"
#. module: crm_project_create
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
msgid "You won't be able to edit this project after creating it"
msgstr "Nećete moći uređivati ovaj projekt nakon kreiranja"

View file

@ -0,0 +1,96 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * crm_project_create
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \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_create
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
msgid "Cancel"
msgstr ""
#. module: crm_project_create
#: model:ir.actions.act_window,name:crm_project_create.crm_create_project_action
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_lead_view_form_crm_project_project
msgid "Create Project"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__create_uid
msgid "Created by"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__create_date
msgid "Created on"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__display_name
msgid "Display Name"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__id
msgid "ID"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project____last_update
msgid "Last Modified on"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__write_uid
msgid "Last Updated by"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__write_date
msgid "Last Updated on"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__lead_id
msgid "Lead"
msgstr ""
#. module: crm_project_create
#: model:ir.model,name:crm_project_create.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_lead__project_id
msgid "Project"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__project_description
msgid "Project Description"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__project_name
msgid "Project Name"
msgstr ""
#. module: crm_project_create
#: model:ir.model,name:crm_project_create.model_crm_create_project
msgid "Wizart to create Project from Lead/Opportunity"
msgstr ""
#. module: crm_project_create
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
msgid "You won't be able to edit this project after creating it"
msgstr ""

View file

@ -0,0 +1,116 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * crm_create_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-17 12:20+0000\n"
"PO-Revision-Date: 2024-07-17 14:20+0200\n"
"Last-Translator: Emilio Pascual <emilio@moduom.team>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.4\n"
#. module: crm_project_create
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
msgid "Cancel"
msgstr "Cancelar"
#. module: crm_project_create
#: model:ir.actions.act_window,name:crm_project_create.crm_create_project_action
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_lead_view_form_crm_project_project
msgid "Create Project"
msgstr "Crear proyecto"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__create_date
msgid "Created on"
msgstr "Creado el"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__display_name
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__id
msgid "ID"
msgstr ""
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project____last_update
msgid "Last Modified on"
msgstr "Última modificación el"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__lead_id
msgid "Lead"
msgstr "Iniciativa/Oportundad"
#. module: crm_project_create
#: model:ir.model,name:crm_project_create.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Iniciativa/Oportundad"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_lead__project_id
msgid "Project"
msgstr "Proyecto"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__project_description
msgid "Project Description"
msgstr "Descripción del proyecto"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__project_name
msgid "Project Name"
msgstr "Nombre del proyecto"
#. module: crm_project_create
#: model:ir.model,name:crm_project_create.model_crm_create_project
msgid "Wizart to create Project from Lead/Opportunity"
msgstr "Asistente para crear un proyecto desde la iniciativa/oportunidad"
#. module: crm_project_create
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
msgid "You won't be able to edit this project after creating it"
msgstr ""
#, python-format
#~ msgid ""
#~ "Project <a href=# data-oe-model=project.project data-oe-"
#~ "id=%(project)d>%(name)s</a> created."
#~ msgstr ""
#~ "Proyecto <a href=# data-oe-model=project.project data-oe-"
#~ "id=%(project)d>%(name)s</a> creado."
#, python-format
#~ msgid ""
#~ "Project created from lead/opportunity <a href=# data-oe-model=crm.lead "
#~ "data-oe-id=%(lead)d>%(name)s</a>."
#~ msgstr ""
#~ "Proyecto creado desde la iniciativa/oportunidad <a href=# data-oe-"
#~ "model=crm.lead data-oe-id=%(lead)d>%(name)s</a>."

View file

@ -0,0 +1,99 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * crm_project_create
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-07-31 15:58+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: crm_project_create
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
msgid "Cancel"
msgstr "Annulla"
#. module: crm_project_create
#: model:ir.actions.act_window,name:crm_project_create.crm_create_project_action
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_lead_view_form_crm_project_project
msgid "Create Project"
msgstr "Crea progetto"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__create_date
msgid "Created on"
msgstr "Creato il"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__id
msgid "ID"
msgstr "ID"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__lead_id
msgid "Lead"
msgstr "Contatto"
#. module: crm_project_create
#: model:ir.model,name:crm_project_create.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Contatto/Opportunità"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_lead__project_id
msgid "Project"
msgstr "Progetto"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__project_description
msgid "Project Description"
msgstr "Descrizione progetto"
#. module: crm_project_create
#: model:ir.model.fields,field_description:crm_project_create.field_crm_create_project__project_name
msgid "Project Name"
msgstr "Nome progetto"
#. module: crm_project_create
#: model:ir.model,name:crm_project_create.model_crm_create_project
msgid "Wizart to create Project from Lead/Opportunity"
msgstr "Procedura guidata per creare il progetto dal contatto/opportunità"
#. module: crm_project_create
#: model_terms:ir.ui.view,arch_db:crm_project_create.crm_create_project_view_form
msgid "You won't be able to edit this project after creating it"
msgstr "Non si potrà modificare questo progetto deopo la creazione"

View file

@ -0,0 +1 @@
from . import crm_lead

View file

@ -0,0 +1,18 @@
# Copyright 2024 Moduon Team S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
from odoo import fields, models
class CrmLead(models.Model):
_inherit = "crm.lead"
project_id = fields.Many2one("project.project", string="Project")
def toggle_active(self):
"""Archive or reactivate the project and their analytic account on lead toggle."""
res = super().toggle_active()
for lead in self.filtered(lambda l: l.project_id):
lead.sudo().project_id.active = lead.active
lead.sudo().project_id.analytic_account_id.active = lead.active
return res

View file

@ -0,0 +1,3 @@
This module was developed because sometimes you want to create the project from the crm without creating a sales order, for example when you want to plan a project.
It will be useful for you if you want to create a project before creating a quotation and confirming it or if you want to estimate, plan or know if you have the capacity before making the sale.

View file

@ -0,0 +1,2 @@
- Emilio Pascual ([Moduon](https://www.moduon.team/))
- Eduardo López ([Moduon](https://www.moduon.team/))

View file

@ -0,0 +1,3 @@
This module extends the functionality of crm and project and allow you to create a project from opportunity or lead.
It also allows archiving or reactivating the project and its analytical account from the lead.

View file

@ -0,0 +1,11 @@
To use this module, you need to:
1. Go to CRM > Sales > My Pipeline
1. Create a new opportunity or join an existing one.
1. Click on **Create project** in header.
1. A wizard is shown to fill project name and/or project description.
1. Click on **Create project**.
1. You can see project created in page **Extra Information**, inside group **Misc**.
1. Is you have *Project: Administrator* permissions, you can edit the project after creating it.

View file

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_crm_create_project,crm.create.project,model_crm_create_project,sales_team.group_sale_salesman,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_crm_create_project crm.create.project model_crm_create_project sales_team.group_sale_salesman 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,461 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>CRM Project Create</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="crm-project-create">
<h1 class="title">CRM Project Create</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:b0555faf7acf3fa621d26d7a95df6e1cce0fced7788b70a02effce0c363e2d25
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/crm/tree/16.0/crm_project_create"><img alt="OCA/crm" src="https://img.shields.io/badge/github-OCA%2Fcrm-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/crm-16-0/crm-16-0-crm_project_create"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/crm&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module extends the functionality of crm and project and allow you
to create a project from opportunity or lead.</p>
<p>It also allows archiving or reactivating the project and its analytical
account from the lead.</p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<p class="last">This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
<a class="reference external" href="https://odoo-community.org/page/development-status">More details on development status</a></p>
</div>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#use-cases-context" id="toc-entry-1">Use Cases / Context</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="use-cases-context">
<h1><a class="toc-backref" href="#toc-entry-1">Use Cases / Context</a></h1>
<p>This module was developed because sometimes you want to create the
project from the crm without creating a sales order, for example when
you want to plan a project.</p>
<p>It will be useful for you if you want to create a project before
creating a quotation and confirming it or if you want to estimate, plan
or know if you have the capacity before making the sale.</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<p>To use this module, you need to:</p>
<ol class="arabic simple">
<li>Go to CRM &gt; Sales &gt; My Pipeline</li>
<li>Create a new opportunity or join an existing one.</li>
<li>Click on <strong>Create project</strong> in header.</li>
<li>A wizard is shown to fill project name and/or project description.</li>
<li>Click on <strong>Create project</strong>.</li>
<li>You can see project created in page <strong>Extra Information</strong>, inside
group <strong>Misc</strong>.</li>
<li>Is you have <em>Project: Administrator</em> permissions, you can edit the
project after creating it.</li>
</ol>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/crm/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/crm/issues/new?body=module:%20crm_project_create%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
<ul class="simple">
<li>Moduon</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<ul class="simple">
<li>Emilio Pascual (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</li>
<li>Eduardo López (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/EmilioPascual"><img alt="EmilioPascual" src="https://github.com/EmilioPascual.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/rafaelbn"><img alt="rafaelbn" src="https://github.com/rafaelbn.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/crm/tree/16.0/crm_project_create">OCA/crm</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1 @@
from . import test_crm_create_project

View file

@ -0,0 +1,92 @@
# Copyright 2024 Moduon Team S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
from markupsafe import Markup
from odoo.tests.common import Form, TransactionCase, users
from odoo.addons.mail.tests.common import mail_new_test_user
class TestCrmCreateProject(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env["res.company"].create(
{
"name": "Company Test",
}
)
cls.user_salesman = mail_new_test_user(
cls.env,
login="user_salesman",
name="User Salesman",
email="user_salesman@test.example.com",
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.default_plan = cls.env["account.analytic.plan"].create(
{"name": "Default", "company_id": False}
)
@users("user_salesman")
def test_crm_project_create(self):
"""Test the creation of a project from a lead."""
wizard_form = Form(
self.env["crm.create.project"].with_context(
active_model="crm.lead",
active_id=self.lead.id,
default_lead_id=self.lead.id,
default_project_name=self.lead.name,
)
)
self.assertEqual(wizard_form.project_name, self.lead.name)
wizard_form.project_name = "Test Project"
wizard_form.project_description = "Test Description"
wizard = wizard_form.save()
wizard.create_project()
self.assertTrue(self.lead.project_id)
self.assertEqual(self.lead.project_id.name, "Test Project")
self.assertEqual(
self.lead.project_id.description,
Markup("<p>Test Description</p>"),
)
# When a lead is archived, so it's project and their analytic account.
analytic_account = self.env["account.analytic.account"].create(
{
"name": "Test analytic account",
"plan_id": self.default_plan.id,
"company_id": False,
}
)
self.lead.project_id.analytic_account_id = analytic_account
self.lead.action_archive()
self.assertFalse(self.lead.project_id.active)
self.assertFalse(self.lead.project_id.analytic_account_id.active)
# Reactivate the lead
self.lead.toggle_active()
self.assertTrue(self.lead.project_id.active)
self.assertTrue(self.lead.project_id.analytic_account_id.active)
# Mark lead as lost
lost_wizard = self.env["crm.lead.lost"].create(
{
"lost_reason_id": self.env.ref("crm.lost_reason_1").id,
}
)
lost_wizard.with_context(active_ids=self.lead.ids).action_lost_reason_apply()
self.assertFalse(self.lead.project_id.active)
self.assertFalse(self.lead.project_id.analytic_account_id.active)

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2024 Moduon Team S.L.
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) -->
<odoo>
<record id="crm_lead_view_form_crm_project_project" model="ir.ui.view">
<field name="name">CRM Lead Form Create Project</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 Project"
name="%(crm_project_create.crm_create_project_action)d"
type="action"
class="oe_highlight"
context="{'default_project_name': name, 'default_lead_id': id}"
attrs="{'invisible': ['|', ('active','=',False), ('project_id', '!=', False)]}"
/>
</xpath>
<xpath expr="//group[@name='Misc']" position="inside">
<field name="project_id" />
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1 @@
from . import crm_create_project

View file

@ -0,0 +1,43 @@
# Copyright 2024 Moduon Team S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
from odoo import fields, models
class CrmCreateProject(models.TransientModel):
_name = "crm.create.project"
_description = "Wizart to create Project from Lead/Opportunity"
project_name = fields.Char()
project_description = fields.Html()
lead_id = fields.Many2one("crm.lead")
def create_project(self):
project = (
self.env["project.project"]
.sudo()
.create(self._prepare_create_project_values())
)
self.lead_id.project_id = project
project.message_post_with_view(
"mail.message_origin_link",
values={"self": self.lead_id.project_id, "origin": self.lead_id},
subtype_id=self.env.ref("mail.mt_note").id,
author_id=self.env.user.partner_id.id,
)
self.lead_id.message_post_with_view(
"mail_message_destiny_link_template.message_destiny_link",
values={"self": self.lead_id, "destiny": self.lead_id.project_id},
subtype_id=self.env.ref("mail.mt_note").id,
author_id=self.env.user.partner_id.id,
)
def _prepare_create_project_values(self):
return {
"name": self.project_name,
"partner_id": self.lead_id.partner_id.id,
"description": self.project_description,
"active": True,
"company_id": self.lead_id.company_id.id,
"allow_billable": True,
}

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2024 Moduon Team S.L.
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0) -->
<data>
<record id="crm_create_project_view_form" model="ir.ui.view">
<field name="name">CRM Create Project Form</field>
<field name="model">crm.create.project</field>
<field name="arch" type="xml">
<form>
<p
groups="!project.group_project_manager"
>You won't be able to edit this project after creating it</p>
<group>
<field name="project_name" />
<field name="project_description" type="html" />
</group>
<footer>
<button
name="create_project"
type="object"
string="Create Project"
class="oe_highlight"
/>
<button special="cancel" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="crm_create_project_action" model="ir.actions.act_window">
<field name="name">Create Project</field>
<field name="res_model">crm.create.project</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
</data>