Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
31729ce
[ADD] sale_planner_calendar: New module to manage commercial visits
CarlosRoca13 Oct 25, 2022
d1f5fb2
[FIX] sale_planner_calendar: Access to actions
sergio-teruel Oct 28, 2022
4ce280e
[IMP] sale_planner_calendar: Add customers to calendar planner view
CarlosRoca13 Oct 28, 2022
07744af
[FIX] sale_planner_calendar: Use same domain in Sales Follower Orders…
carlosdauden Dec 13, 2022
142aeae
[IMP] sale_planner_calendar: link target partners and add domain to u…
CarlosRoca13 May 10, 2023
f7f69f8
[FIX] sale planner calendar Singleton when multi summaries distinct …
sergio-teruel May 12, 2023
3e0367b
[FIX] sale_planner_calendar: Filter button closes wizard if is opened…
carlosdauden May 12, 2023
ee1a884
[FIX] sale_planner_calendar: Event_type_id no exists in planner calen…
sergio-teruel May 15, 2023
6420595
[IMP] sale_planner_calendar: add event type to views TT43459
May 19, 2023
d578270
[IMP] sale_planner_calendar: Allow select action for sale orders
carlosdauden Jun 6, 2023
a92a0b7
[IMP] sale_planner_calendar: Add button to create sale.order from eve…
CarlosRoca13 Jun 7, 2023
261041e
[IMP] sale_planner_calendar: Add settings menu. Make issue types tran…
sergio-teruel Jul 11, 2023
aa959cf
[FIX] sale_planner_calendar: undefined instead of false on calendar_s…
CarlosRoca13 Jul 11, 2023
aff2a80
Translated using Weblate (Spanish)
Ivorra78 Jul 24, 2023
9bb9795
[FIX] sale_planner_calendar: Recurrent events not removed when changi…
CarlosRoca13 Aug 29, 2023
8ea5ad4
Added translation using Weblate (Catalan (ca_ES))
carlosdauden Aug 30, 2023
1ed1b2f
Translated using Weblate (Spanish)
Ivorra78 Sep 20, 2023
a68fc85
[IMP] sale_planner_calendar: Use same method as kanban button to open…
CarlosRoca13 Sep 28, 2023
b744295
[FIX] sale_planner_calendar: Remove search method overwrite and set k…
CarlosRoca13 Oct 4, 2023
c609921
[IMP] sale_planner_calendar: test performance improvement
josep-tecnativa Oct 24, 2023
4fc5544
[FIX] sale_planner_calendar: Add security group to root menu
sergio-teruel Nov 9, 2023
468b106
[FIX] sale_planner_calendar: Do not send invitation attendees emails …
sergio-teruel Feb 27, 2023
41f8837
[IMP] sale_planner_calendar: Allow delete recurrence as it can be don…
CarlosRoca13 Dec 14, 2023
df48f2e
[FIX] sale_planner_calendar: Avoid infinite loop recursion when recur…
CarlosRoca13 Feb 26, 2024
21ef2c4
[IMP] sale_planner_calendar: Do not notify to attendees
sergio-teruel Mar 13, 2024
d08b906
[IMP] sale_planner_calendar: Do not create attendees
sergio-teruel Mar 15, 2024
e3bb33a
[IMP] sale_planner_calendar: Allow create so from event planned to co…
sergio-teruel Mar 18, 2024
48b03b1
[FIX] sale_planner_calendar: Do not take into account the user time z…
sergio-teruel May 16, 2024
d269e79
[IMP] sale_planner_calendar: Design improves and new buttons in calen…
pilarvargas-tecnativa Apr 10, 2024
565e585
Translated using Weblate (Spanish)
pilarvargas-tecnativa May 24, 2024
c741f01
[IMP] sale_planner_calendar: pre-commit stuff
pilarvargas-tecnativa May 29, 2024
7bab7ab
[MIG] sale_planner_calendar: Migration to 16.0
angelmoya Jun 7, 2023
7c095ac
[MIG] sale_planner_calendar: continue migration to 16.0
pilarvargas-tecnativa Jun 18, 2024
b7c743e
[FIX] sale_planner_calendar: 'calendar.event' object has no attribute…
carolinafernandez-tecnativa Jul 5, 2024
205aac6
Added translation using Weblate (Italian)
mymage Jul 22, 2024
378707e
[FIX] sale_planner_calendar: Remove partner name from default locatio…
pilarvargas-tecnativa Sep 30, 2024
9dabb86
[IMP] sale_planner_calendar: Refactor to use calendar.event model ins…
sergio-teruel Oct 22, 2024
263b723
[IMP] sale_planner_calendar: Merge files calendar.py and sale_planner…
carlosdauden Oct 23, 2024
c8861da
[IMP] sale_planner_calendar: Add sale_planner_state tracking and impr…
carlosdauden Oct 23, 2024
49e30f6
[IMP] sale_planner_calendar: Use calendar_event_type and remove sale_…
carlosdauden Oct 23, 2024
c1b1d19
[IMP] sale_planner_calendar: Show multiple event type icons in kanban…
carlosdauden Oct 29, 2024
9d637e5
[TRN] sale_planner_calendar: Update translations
carlosdauden Oct 24, 2024
f8952c6
[IMP] sale_planner_calendar: New option to only update partner user_i…
carlosdauden Oct 28, 2024
cb67d90
[FIX] sale_planner_acalendar: Invalid field when user search events b…
sergio-teruel Oct 30, 2024
652d41b
Translated using Weblate (Italian)
mymage Nov 14, 2024
719dd03
[IMP] sale_planner_calendar: Add activities to manage notifications
CarlosRoca13 Nov 6, 2024
e849f7e
[IMP] sale_planner_calendar: Improve code, filters and translations
carlosdauden Nov 7, 2024
5ca48c5
[IMP] sale_planner_calendar: Allow set new tags in reassign. Add part…
carlosdauden Nov 17, 2024
05267e1
[IMP] sale_planner_calendar: Add rating to calendar events
pilarvargas-tecnativa Nov 11, 2024
2a863b1
[IMP] sale_planner_calendar: Use unicode symbols to simplify code and…
carlosdauden Nov 15, 2024
bd454c9
Translated using Weblate (Italian)
mymage Nov 20, 2024
c04a372
[IMP] sale_planner_calendar: pre-commit auto fixes
victoralmau Jul 15, 2025
1932e09
[MIG] sale_planner_calendar: Migration to 18.0
victoralmau Jul 15, 2025
5ab021c
[DON'T MERGE] test-requirements.txt
victoralmau Jul 15, 2025
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
143 changes: 143 additions & 0 deletions sale_planner_calendar/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
=====================
Sale planner calendar
=====================

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

.. |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%2Fsale--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/sale-workflow/tree/18.0/sale_planner_calendar
:alt: OCA/sale-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-workflow-18-0/sale-workflow-18-0-sale_planner_calendar
: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/sale-workflow&target_branch=18.0
:alt: Try me on Runboat

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

This module allows to manage commercial visits to partners by using
recurrence events.

**Table of contents**

.. contents::
:local:

Configuration
=============

You can find the following configurations in the settings:

1. **Subscriptions Backward Days**: Backward days to search documents to
update subscriptions.
2. **Sale Planner Forward Months**: Forward months to create calendar
events.
3. **Send invitation to attendees**: Send invitations to attendees when
a planner event is created.
4. **Sale planner order cut hour**: Time of the next day until which
orders of the current day are assigned.
5. **Calendar event max duration**: Show a warning message when duration
is more than this time. Set 00:00 to disable warning.

Other setting are available with system parameters

1. **Sale order partner** when a so is created from a event planned. You
can create or update the system parameter
**sale_planner_calendar.create_so_to_commercial_partner** with True
value to create the sale order to commercial partner instead of
partner

Usage
=====

You can create now the recurrent events directly from the partners by
clicking next smart button:

|image|

By default the end of the recurrence is set by the settings field **Sale
Planner Forward Months**.

You can manage this new recurrent events from *Calendar planner* menu
entry.

|image1|

On the first window, you will find a summary of the events that the user
has to do today.

By going to *Calendar planner > Calendar events* you will have two
options:

1. View the calendar events related to your user (*My Calendar*).
2. View your base events related to the recurrences (*Recurrent calendar
events*).

Finally on *Calendar planner > Wizards* you will have again two options:

1. You can change the hour of the start of all the events related to a
recurrency by using *Sale planner calendar wizard*.
2. You can change the salesperson assigned to events related to a period
of time by using the wizard *Reassignment of salesperson*.

.. |image| image:: https://raw.githubusercontent.com/OCA/sale-workflow/18.0/sale_planner_calendar/static/img/smart_button.png
.. |image1| image:: https://raw.githubusercontent.com/OCA/sale-workflow/18.0/sale_planner_calendar/static/img/menu_entry.png

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

Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-workflow/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/sale-workflow/issues/new?body=module:%20sale_planner_calendar%0Aversion:%2018.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

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

- `Tecnativa <https://www.tecnativa.com>`__:

- Sergio Teruel
- Carlos Dauden
- Carlos Roca
- Pilar Vargas
- Víctor Martínez

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/sale-workflow <https://github.com/OCA/sale-workflow/tree/18.0/sale_planner_calendar>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
3 changes: 3 additions & 0 deletions sale_planner_calendar/__init__.py
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 models
from . import wizard
41 changes: 41 additions & 0 deletions sale_planner_calendar/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Copyright 2020 Tecnativa - Sergio Teruel
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Sale planner calendar",
"summary": "Sale planner calendar",
"version": "18.0.1.0.0",
"development_status": "Beta",
"category": "Sale",
"website": "https://github.com/OCA/sale-workflow",
"author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": ["calendar", "sale", "sale_payment_sheet"],
"data": [
"security/ir.model.access.csv",
"security/sale_planner_calendar_security.xml",
"data/sale_planner_calendar_action_server.xml",
"data/sale_planner_calendar_cron.xml",
"data/sale_planner_calendar_data.xml",
"views/calendar_event_type_view.xml",
"views/calendar_view.xml",
"views/res_config_settings_views.xml",
"views/res_partner_view.xml",
"views/sale_planner_calendar_event_view.xml",
"views/sale_planner_calendar_issue_type_view.xml",
"views/sale_planner_calendar_summary_view.xml",
"wizard/sale_planner_calendar_reassign.xml",
"wizard/sale_planner_calendar_wizard.xml",
# Menu position fixed
"views/sale_planner_calendar_menu.xml",
],
"assets": {
"web.assets_backend": [
"sale_planner_calendar/static/src/xml/categ_icons_widget_template.xml",
"sale_planner_calendar/static/src/xml/sale_planner_calendar_event_sales.xml",
"sale_planner_calendar/static/src/scss/sale_planner_calendar.scss",
"sale_planner_calendar/static/src/js/*.js",
],
},
}
31 changes: 31 additions & 0 deletions sale_planner_calendar/data/sale_planner_calendar_action_server.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!--
If wizard record is NewId the changes in calendar_event_ids are not saved.
To fix this, we create the wizard first and open later.
-->
<record id="sale_planner_calendar_wizard_action" model="ir.actions.server">
<field name="name">Sale planner calendar wizard</field>
<field
name="model_id"
ref="sale_planner_calendar.model_sale_planner_calendar_wizard"
/>
<field name="state">code</field>
<field name="code">
wiz = model.create({})
action = wiz.get_formview_action()
action['context']['form_view_initial_mode'] = 'edit'
action['context']['control_panel_hidden'] = True
</field>
</record>

<record id="action_set_planner_calendar_event" model="ir.actions.server">
<field name="name">Set planner calendar event</field>
<field name="model_id" ref="sale.model_sale_order" />
<field name="binding_model_id" ref="sale.model_sale_order" />
<field name="state">code</field>
<field name="code">
records.action_set_planner_calendar_event()
</field>
</record>
</odoo>
29 changes: 29 additions & 0 deletions sale_planner_calendar/data/sale_planner_calendar_cron.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record
forcecreate="True"
id="sale_planner_calendar_cron_unsubscribe"
model="ir.cron"
>
<field name="name">Sale planner calendar: Unsubscribe documents</field>
<field name="model_id" ref="model_sale_planner_calendar_reassign_wiz" />
<field name="state">code</field>
<field name="code">model.cron_unsubscribe()</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="active" eval="True" />
</record>
<record forcecreate="True" id="cron_update_dynamic_final_date" model="ir.cron">
<field
name="name"
>Sale planner calendar: Update dynamic event final date</field>
<field name="model_id" ref="model_calendar_event" />
<field name="state">code</field>
<field name="code">model.cron_update_dynamic_final_date()</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">months</field>
<field name="active" eval="True" />
</record>
</odoo>
46 changes: 46 additions & 0 deletions sale_planner_calendar/data/sale_planner_calendar_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="event_type_commercial_visit" model="calendar.event.type">
<field name="name">Commercial visit</field>
<field name="duration">0.25</field>
<field name="icon">fa-car</field>
</record>
<record id="event_type_remote_selling" model="calendar.event.type">
<field name="name">Remote selling</field>
<field name="duration">0.25</field>
<field name="icon">fa-phone</field>
</record>
<record id="event_type_delivery" model="calendar.event.type">
<field name="name">Delivery</field>
<field name="duration">0.25</field>
<field name="icon">fa-truck</field>
</record>
<record id="event_type_message" model="calendar.event.type">
<field name="name">Message</field>
<field name="duration">0.25</field>
<field name="icon">fa-envelope</field>
</record>

<!-- Event planner issue types -->
<record
id="event_planner_issue_type_missing"
model="sale.planner.calendar.issue.type"
>
<field name="name">Missing</field>
</record>
<record
id="event_planner_issue_type_close"
model="sale.planner.calendar.issue.type"
>
<field name="name">Closed</field>
</record>

<record id="config_parameter_partner_name_field" model="ir.config_parameter">
<field name="key">sale_planner_calendar.partner_name_field</field>
<field name="value">name</field>
</record>
<record id="config_parameter_max_duration" model="ir.config_parameter">
<field name="key">sale_planner_calendar.max_duration</field>
<field name="value">4.0</field>
</record>
</odoo>
Loading
Loading