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,19 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2021 Sygel - Valentin Vinagre
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="crm_lead_crm_salesperson_planner" model="ir.ui.view">
<field name="name">crm.lead.view.crm.salesperson.planner</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_lead_view_form" />
<field name="arch" type="xml">
<notebook position="inside">
<page string="Salesperson Visits">
<group>
<field name="crm_salesperson_planner_visit_ids" nolabel="1" />
</group>
</page>
</notebook>
</field>
</record>
</odoo>

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2021 Sygel - Valentin Vinagre
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<menuitem
id="menu_salesperson_planner"
name="Salesperson Planner"
groups="sales_team.group_sale_salesman"
parent="crm.crm_menu_root"
sequence="4"
/>
<menuitem
name="My Visits"
id="menu_crm_salesperson_planner_my_visits"
parent="menu_salesperson_planner"
action="my_crm_salesperson_planner_visit_action"
sequence="1"
/>
<menuitem
name="All Visits"
id="menu_crm_salesperson_planner_visits"
parent="menu_salesperson_planner"
action="all_crm_salesperson_planner_visit_action"
sequence="2"
groups="sales_team.group_sale_salesman_all_leads"
/>
<menuitem
name="Visit Templates"
id="menu_crm_salesperson_planner_visit_template"
parent="menu_salesperson_planner"
action="crm_salesperson_planner_visit_template_action"
sequence="3"
/>
<!-- CONFIGURATION -->
<menuitem
id="menu_crm_config_salesperson_planner"
name="Salesperson Planner"
parent="crm.crm_menu_config"
sequence="30"
groups="sales_team.group_sale_manager"
/>
<menuitem
name="Close Reasons"
id="menu_crm_config_salesperson_planner_close_reason"
parent="menu_crm_config_salesperson_planner"
action="crm_salesperson_planner_visit_close_reason_action"
sequence="2"
/>
</odoo>

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2021 Sygel - Valentin Vinagre
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record
model="ir.ui.view"
id="crm_salesperson_planner_visit_close_reason_tree_view"
>
<field name="name">CRM - Salesperson Planner Visit Close Reason Tree</field>
<field name="model">crm.salesperson.planner.visit.close.reason</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="close_type" />
<field name="require_image" />
<field name="reschedule" />
</tree>
</field>
</record>
<record
model="ir.ui.view"
id="crm_salesperson_planner_visit_close_reason_form_view"
>
<field name="name">CRM - Salesperson Planner Visit Close Reason Form</field>
<field name="model">crm.salesperson.planner.visit.close.reason</field>
<field name="arch" type="xml">
<form string="Close Reason">
<sheet string="Close Reason">
<div class="oe_title">
<h1>
<field name="name" />
</h1>
</div>
<group>
<group>
<field name="close_type" />
<field name="require_image" />
<field name="reschedule" />
</group>
<group>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record
model="ir.actions.act_window"
id="crm_salesperson_planner_visit_close_reason_action"
>
<field name="name">Close Reasons</field>
<field name="res_model">crm.salesperson.planner.visit.close.reason</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Record reason for close commercial visits.
</p>
</field>
</record>
</odoo>

View file

@ -0,0 +1,172 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2021 Sygel - Valentin Vinagre
Copyright 2021 Sygel - Manuel Regidor
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="crm_salesperson_planner_visit_template_tree_view">
<field name="name">CRM - Salesperson Planner Visit Template Tree</field>
<field name="model">crm.salesperson.planner.visit.template</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="partner_id" />
<field name="start_date" />
<field name="sequence" />
<field name="user_id" />
<field name="company_id" groups="base.group_multi_company" />
<field name="state" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="crm_salesperson_planner_visit_template_form_view">
<field name="name">CRM - Salesperson Planner Visit Template Form</field>
<field name="model">crm.salesperson.planner.visit.template</field>
<field name="arch" type="xml">
<form string="Visit Template">
<header>
<button
name="action_validate"
string="Validate"
type="object"
attrs="{'invisible': [('state', '!=', 'draft')]}"
/>
<button
name="%(crm_salesperson_planner_visit_template_create_action)d"
string="Manually Create Visits"
type="action"
attrs="{'invisible': [('state', '!=', 'in-progress')]}"
/>
<button
name="action_cancel"
string="Cancel"
type="object"
attrs="{'invisible': [('state', '!=', 'in-progress')]}"
/>
<button
name="action_draft"
string="Send to Draft"
type="object"
attrs="{'invisible': [('state', '!=', 'cancel')]}"
/>
<field
name="state"
widget="statusbar"
statusbar_visible="draft,in-progress,done,cancel"
/>
</header>
<sheet string="Visit Template">
<div class="oe_button_box" name="button_box">
<button
class="oe_stat_button"
type="object"
name="action_view_salesperson_planner_visit"
icon="fa-building"
>
<field
string="Sales Visits"
name="visit_ids_count"
widget="statinfo"
/>
</button>
</div>
<div class="oe_title">
<h1>
<field name="name" readonly="1" />
</h1>
</div>
<group>
<group>
<field name="partner_id" invisible="1" />
<field name="partner_ids" widget="many2many_tags" />
<field name="start_date" required="1" />
<field name="start" invisible="1" />
<field name="stop" invisible="1" />
<field name="stop_date" invisible="1" />
<field name="start" invisible="1" />
<field name="sequence" />
<field name="user_id" />
<field
name="company_id"
groups="base.group_multi_company"
/>
<field name="last_visit_date" />
<field name="auto_validate" />
<field name="event_tz" invisible="1" />
<field name="allday" force_save="1" />
<field name="rrule" invisible="1" />
</group>
<!-- Display fields similar to calendar.event (Display data similar to calendar.event (for UX is better)). -->
<group>
<label for="interval" />
<div class="o_col">
<div class="o_row">
<field
name="interval"
class="oe_inline"
required="1"
/>
<field name="rrule_type" required="1" />
</div>
<widget
name="week_days"
attrs="{'invisible': [('rrule_type', '!=', 'weekly')]}"
/>
</div>
<label string="Until" for="end_type" />
<div class="o_row">
<field name="end_type" required="1" />
<field
name="count"
required="1"
attrs="{'invisible': [('end_type', '!=', 'count')]}"
/>
<field
name="until"
attrs="{'invisible': [('end_type', '!=', 'end_date')], 'required': [('end_type', '=', 'end_date')]}"
/>
</div>
</group>
<group attrs="{'invisible': [('rrule_type', '!=', 'monthly')]}">
<label string="Day of Month" for="month_by" />
<div class="o_row">
<field name="month_by" />
<field
name="day"
attrs="{'required': [('month_by', '=', 'date'), ('rrule_type', '=', 'monthly')], 'invisible': [('month_by', '!=', 'date')]}"
/>
<field
name="byday"
string="The"
attrs="{'required': [('month_by', '=', 'day'), ('rrule_type', '=', 'monthly')], 'invisible': [('month_by', '!=', 'day')]}"
/>
<field
name="weekday"
nolabel="1"
attrs="{'required': [('month_by', '=', 'day'), ('rrule_type', '=', 'monthly')], 'invisible': [('month_by', '!=', 'day')]}"
/>
</div>
</group>
</group>
<notebook>
<page string="Description">
<field name="description" />
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record
model="ir.actions.act_window"
id="crm_salesperson_planner_visit_template_action"
>
<field name="name">Visit Templates</field>
<field name="res_model">crm.salesperson.planner.visit.template</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Create and plan commercial visit templates
</p>
</field>
</record>
</odoo>

View file

@ -0,0 +1,300 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2021 Sygel - Valentin Vinagre
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="crm_salesperson_planner_visit_tree_view">
<field name="name">CRM - Salesperson Planner Visit Tree</field>
<field name="model">crm.salesperson.planner.visit</field>
<field name="arch" type="xml">
<tree
decoration-success="state == 'done'"
decoration-info="state == 'confirm'"
decoration-warning="state == 'incident'"
decoration-muted="state == 'cancel'"
>
<field name="name" />
<field name="sequence" />
<field name="date" />
<field name="partner_id" />
<field name="user_id" />
<field name="company_id" groups="base.group_multi_company" />
<field name="state" />
<button
name="action_draft"
type="object"
attrs="{'invisible': [('state', 'not in', ['cancel','incident', 'done'])]}"
icon="fa-undo"
/>
<button
name="action_confirm"
type="object"
icon="fa-calendar text-success"
attrs="{'invisible': [('state', '!=', 'draft')]}"
/>
<button
name="action_done"
type="object"
icon="fa-check"
attrs="{'invisible': [('state', '!=', 'confirm')]}"
/>
<button
name="%(crm_salesperson_planner_visit_close_wiz_action)d"
type="action"
icon="fa-ban text-danger"
attrs="{'invisible': [('state', 'in', ['cancel','incident', 'done'])]}"
context="{'att_close_type':'cancel'}"
title="Close Reasons"
/>
<button
name="%(crm_salesperson_planner_visit_close_wiz_action)d"
type="action"
icon="fa-exclamation-triangle"
attrs="{'invisible': [('state', '!=', 'confirm')]}"
context="{'att_close_type':'incident'}"
title="Close Reasons"
/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="crm_salesperson_planner_visit_form_view">
<field name="name">CRM - Salesperson Planner Visit Form</field>
<field name="model">crm.salesperson.planner.visit</field>
<field name="arch" type="xml">
<form string="Visit">
<header>
<button
name="action_draft"
id="action_draft"
string="Draft"
type="object"
attrs="{'invisible': [('state', 'not in', ['cancel','incident', 'done'])]}"
/>
<button
name="action_confirm"
id="action_confirm"
string="Confirm"
class="btn-primary"
type="object"
attrs="{'invisible': [('state', '!=', 'draft')]}"
/>
<button
name="action_done"
id="action_done"
string="Done"
class="btn-primary"
type="object"
attrs="{'invisible': [('state', '!=', 'confirm')]}"
/>
<button
name="%(crm_salesperson_planner_visit_close_wiz_action)d"
id="action_cancel"
string="Cancel"
type="action"
attrs="{'invisible': [('state', 'in', ['cancel','incident', 'done'])]}"
context="{'att_close_type':'cancel'}"
/>
<button
name="%(crm_salesperson_planner_visit_close_wiz_action)d"
id="action_incident"
string="Incident"
type="action"
attrs="{'invisible': [('state', '!=', 'confirm')]}"
context="{'att_close_type':'incident'}"
/>
<field
name="state"
widget="statusbar"
statusbar_visible="draft,confirm,done,cancel"
/>
</header>
<sheet string="Visit">
<div class="oe_button_box" name="button_box">
</div>
<div class="oe_title">
<h1>
<field name="name" readonly="1" />
</h1>
</div>
<group>
<group>
<field
name="partner_id"
widget="res_partner_many2one"
context="{'res_partner_search_mode': 'customer', 'show_address': True, 'show_vat': True}"
options="{&quot;always_reload&quot;: True}"
/>
<field
name="partner_phone"
widget="phone"
attrs="{'invisible': [('partner_id', '=', False)]}"
/>
<field
name="partner_mobile"
widget="phone"
attrs="{'invisible': [('partner_id', '=', False)]}"
/>
</group>
<group>
<field name="date" />
<field name="calendar_event_id" readonly="1" />
<field name="sequence" />
<field name="user_id" />
<field
name="company_id"
groups="base.group_multi_company"
/>
</group>
</group>
<notebook>
<page
string="Close Info"
attrs="{'invisible': [('state', 'not in', ['cancel', 'incident'])]}"
>
<group>
<field
name="close_reason_id"
readonly="1"
options="{'no_edit': True, 'no_open': True}"
/>
<field name="close_reason_notes" readonly="1" />
<field
name="close_reason_image"
widget="image"
readonly="1"
attrs="{'invisible': [('close_reason_image', '=', False)]}"
/>
</group>
</page>
<page string="Internal Notes">
<field
name="description"
placeholder="Add a description..."
/>
</page>
<page string="Opportunities">
<group>
<field
name="opportunity_ids"
nolabel="1"
options="{'no_create': True}"
/>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field
name="message_follower_ids"
widget="mail_followers"
groups="base.group_user"
/>
<field name="activity_ids" widget="mail_activity" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<record id="crm_salesperson_planner_visit_filter" model="ir.ui.view">
<field name="name">CRM - Salesperson Planner Visit Search</field>
<field name="model">crm.salesperson.planner.visit</field>
<field name="arch" type="xml">
<search string="Search Visits">
<field name="name" />
<field
name="partner_id"
filter_domain="[('partner_id','child_of',self)]"
/>
<field name="user_id" />
<field name="date" />
<field name="opportunity_ids" />
<separator />
<filter
string="My Visits"
name="assigned_to_me"
domain="[('user_id', '=', uid)]"
help="Visits that are assigned to me"
/>
<separator orientation="vertical" />
<filter
string="Late Visits"
name="visits_overdue"
domain="[('date', '&lt;', context_today().strftime('%Y-%m-%d'))]"
/>
<filter
string="Today Visits"
name="visits_today"
domain="[('date', '=', context_today().strftime('%Y-%m-%d'))]"
/>
<filter
string="Future Visits"
name="visits_upcoming_all"
domain="[('date', '&gt;', context_today().strftime('%Y-%m-%d'))]"
/>
<group expand="0" name="visits" string="Group By">
<filter
string="Salesperson"
name="salesperson"
context="{'group_by': 'user_id'}"
/>
<filter
string="Partner"
name="partner"
context="{'group_by': 'partner_id'}"
/>
<filter
string="State"
name="state"
context="{'group_by': 'state'}"
/>
<filter
string="Company"
name="company"
context="{'group_by':'company_id'}"
groups="base.group_multi_company"
/>
<separator orientation="vertical" />
<filter
string="Visit by Date"
context="{'group_by':'date'}"
name="date"
/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="my_crm_salesperson_planner_visit_action">
<field name="name">Visits</field>
<field name="res_model">crm.salesperson.planner.visit</field>
<field name="view_mode">tree,form,pivot</field>
<field name="context">{
'search_default_visits_today':1,
}</field>
<field name="domain">[('user_id', '=', uid)]</field>
<field
name="search_view_id"
ref="crm_salesperson_planner.crm_salesperson_planner_visit_filter"
/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Record and track my sales commercial visits.
</p>
</field>
</record>
<record model="ir.actions.act_window" id="all_crm_salesperson_planner_visit_action">
<field name="name">Visits</field>
<field name="res_model">crm.salesperson.planner.visit</field>
<field name="view_mode">tree,form,pivot</field>
<field name="context">{
'search_default_salesperson':1,
}</field>
<field
name="search_view_id"
ref="crm_salesperson_planner.crm_salesperson_planner_visit_filter"
/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Record and track all sales commercial visits.
</p>
</field>
</record>
</odoo>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2021 Sygel - Valentin Vinagre
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="partner_view_crm_salesperson_planner" model="ir.ui.view">
<field name="name">partner.view.crm.salesperson.planner</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button
class="oe_stat_button"
type="object"
name="action_view_salesperson_planner_visit"
icon="fa-building"
groups="sales_team.group_sale_salesman"
context="{'default_partner_id': active_id}"
>
<field
string="Sales Visits"
name="salesperson_planner_visit_count"
widget="statinfo"
/>
</button>
</xpath>
</field>
</record>
</odoo>