Initial commit: Mail packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:51 +02:00
commit 4e53507711
1948 changed files with 751201 additions and 0 deletions

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo><data>
<record id="ir_actions_server_view_form" model="ir.ui.view">
<field name="name">ir.actions.server.view.form.inherit.sms</field>
<field name="model">ir.actions.server</field>
<field name="inherit_id" ref="base.view_server_action_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='link_field_id']" position="after">
<field name="sms_template_id"
context="{'default_model': model_name}"
attrs="{'invisible': [('state', '!=', 'sms')],
'required': [('state', '=', 'sms')]}"/>
<field name="sms_method"
string="Send as"
attrs="{'invisible': [('state', '!=', 'sms')],
'required': [('state', '=', 'sms')]}"/>
</xpath>
</field>
</record>
</data></odoo>

View file

@ -0,0 +1,27 @@
<?xml version="1.0"?>
<odoo><data>
<record id="mail_notification_view_tree" model="ir.ui.view">
<field name="name">mail.notification.view.tree</field>
<field name="model">mail.notification</field>
<field name="inherit_id" ref="mail.mail_notification_view_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='res_partner_id']" position="after">
<field name="sms_number"/>
</xpath>
</field>
</record>
<record id="mail_notification_view_form" model="ir.ui.view">
<field name="name">mail.notification.view.form</field>
<field name="model">mail.notification</field>
<field name="inherit_id" ref="mail.mail_notification_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='res_partner_id']" position="after">
<field name="sms_number"/>
</xpath>
<xpath expr="//field[@name='mail_mail_id']" position="after">
<field name="sms_id"/>
</xpath>
</field>
</record>
</data></odoo>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.sms</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base_setup.res_config_settings_view_form"/>
<field name="arch" type="xml">
<div id="sms_settings" position="inside">
<widget name="iap_buy_more_credits" service_name="sms" hide_service="1"/>
</div>
</field>
</record>
</odoo>

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Add action entry in the Action Menu for Partners -->
<record id="res_partner_view_form" model="ir.ui.view">
<field name="name">res.partner.view.form.inherit.sms</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="priority">10</field>
<field name="arch" type="xml">
<xpath expr="//field[@name='mobile']" position="after">
<field name="phone_sanitized" groups="base.group_no_one" invisible="1"/>
</xpath>
<xpath expr="//field[@name='phone']" position="replace">
<field name="phone_blacklisted" invisible="1"/>
<field name="mobile_blacklisted" invisible="1"/>
<label for="phone" class="oe_inline"/>
<div class="o_row o_row_readonly">
<button name="phone_action_blacklist_remove" class="fa fa-ban text-danger"
title="This phone number is blacklisted for SMS Marketing. Click to unblacklist."
type="object" context="{'default_phone': phone}" groups="base.group_user"
attrs="{'invisible': [('phone_blacklisted', '=', False)]}"/>
<field name="phone" widget="phone"/>
</div>
</xpath>
<xpath expr="//field[@name='mobile']" position="replace">
<field name="phone_blacklisted" invisible="1"/>
<field name="mobile_blacklisted" invisible="1"/>
<label for="mobile" class="oe_inline"/>
<div class="o_row o_row_readonly">
<button name="phone_action_blacklist_remove" class="fa fa-ban text-danger"
title="This phone number is blacklisted for SMS Marketing. Click to unblacklist."
type="object" context="{'default_phone': mobile}" groups="base.group_user"
attrs="{'invisible': [('mobile_blacklisted', '=', False)]}"/>
<field name="mobile" widget="phone"/>
</div>
</xpath>
</field>
</record>
<!-- Add action entry in the Action Menu for Partners -->
<record id="res_partner_act_window_sms_composer_multi" model="ir.actions.act_window">
<field name="name">Send SMS Text Message</field>
<field name="res_model">sms.composer</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{
'default_composition_mode': 'mass',
'default_mass_keep_log': True,
'default_res_ids': active_ids
}</field>
<field name="binding_model_id" ref="base.model_res_partner"/>
<field name="binding_view_types">list</field>
</record>
<record id="res_partner_act_window_sms_composer_single" model="ir.actions.act_window">
<field name="name">Send SMS Text Message</field>
<field name="res_model">sms.composer</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{
'default_composition_mode': 'comment',
'default_res_id': active_id,
}</field>
<field name="binding_model_id" ref="base.model_res_partner"/>
<field name="binding_view_types">form</field>
</record>
<record id="res_partner_view_search" model="ir.ui.view">
<field name="name">res.partner.view.search.inherit.sms</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_res_partner_filter"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='phone']" position="replace">
<field name="phone_mobile_search"/>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo><data>
<record id="sms_tsms_view_form" model="ir.ui.view">
<field name="name">sms.sms.view.form</field>
<field name="model">sms.sms</field>
<field name="arch" type="xml">
<form string="SMS">
<header>
<button name="send" string="Send Now" type="object" states='outgoing' class="oe_highlight"/>
<button name="action_set_outgoing" string="Retry" type="object" states='error,canceled'/>
<button name="action_set_canceled" string="Cancel" type="object" states='error,outgoing'/>
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<group>
<field name="partner_id" string="Contact"/>
<field name="mail_message_id" readonly="1" attrs="{'invisible': [('mail_message_id', '=', False)]}"/>
</group>
<group>
<field name="number" required="1"/>
<field name="failure_type" readonly="1" attrs="{'invisible': [('failure_type', '=', False)]}"/>
</group>
</group>
<group>
<field name="body" widget="sms_widget" string="Message" required="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="sms_sms_view_tree" model="ir.ui.view">
<field name="name">sms.sms.view.tree</field>
<field name="model">sms.sms</field>
<field name="arch" type="xml">
<tree string="SMS Templates">
<field name="number"/>
<field name="partner_id"/>
<field name="failure_type"/>
<field name="state" widget="badge" decoration-info="state == 'outgoing'" decoration-muted="state == 'canceled'" decoration-success="state == 'sent'" decoration-danger="state == 'error'"/>
<button name="send" string="Send Now" type="object" icon="fa-paper-plane" states="outgoing"/>
<button name="action_set_outgoing" string="Retry" type="object" icon="fa-repeat" states="error,canceled"/>
<button name="action_set_canceled" string="Cancel" type="object" icon="fa-times-circle" states="error,outgoing"/>
</tree>
</field>
</record>
<record id="sms_sms_view_search" model="ir.ui.view">
<field name="name">sms.sms.view.search</field>
<field name="model">sms.sms</field>
<field name="arch" type="xml">
<search string="Search SMS Templates">
<field name="number"/>
<field name="partner_id"/>
</search>
</field>
</record>
<record id="sms_sms_action" model="ir.actions.act_window">
<field name="name">SMS</field>
<field name="res_model">sms.sms</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="sms_sms_menu"
parent="phone_validation.phone_menu_main"
action="sms_sms_action"
sequence="1"/>
<record id="ir_actions_server_sms_sms_resend" model="ir.actions.server">
<field name="name">Resend</field>
<field name="model_id" ref="sms.model_sms_sms"/>
<field name="binding_model_id" ref="sms.model_sms_sms"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">action = records.resend_failed()</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo><data>
<record id="sms_template_view_form" model="ir.ui.view">
<field name="name">sms.template.view.form</field>
<field name="model">sms.template</field>
<field name="arch" type="xml">
<form string="SMS Templates">
<header>
<field name="template_fs" invisible="1"/>
<button string="Reset Template"
name="%(sms_template_reset_action)d" type="action"
groups="base.group_system"
attrs="{'invisible': [('template_fs', '=', False)]}"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<field name="sidebar_action_id" invisible="1"/>
<button name="action_create_sidebar_action" type="object"
groups="base.group_no_one"
class="oe_stat_button"
attrs="{'invisible':[('sidebar_action_id','!=',False)]}" icon="fa-plus"
help="Add a contextual action on the related model to open a sms composer with this template">
<div class="o_field_widget o_stat_info">
<span class="o_stat_text">Add</span>
<span class="o_stat_text">Context Action</span>
</div>
</button>
<button name="action_unlink_sidebar_action" type="object"
groups="base.group_no_one"
class="oe_stat_button" icon="fa-minus"
attrs="{'invisible':[('sidebar_action_id','=',False)]}"
help="Remove the contextual action of the related model" widget="statinfo">
<div class="o_field_widget o_stat_info">
<span class="o_stat_text">Remove</span>
<span class="o_stat_text">Context Action</span>
</div>
</button>
<button class="oe_stat_button" name="%(sms_template_preview_action)d" icon="fa-search-plus" string="Preview" type="action" target="new"/>
</div>
<div class="oe_title">
<label for="name" string="SMS Template"/>
<h1><field name="name" placeholder="e.g. Calendar Reminder" required="1"/></h1>
<group>
<field name="model_id" placeholder="e.g. Contact" required="1" options="{'no_create': True}"/>
<field name="model" invisible="1"/>
<field name="lang" groups="base.group_no_one" placeholder="e.g. en_US or {{ object.partner_id.lang }}"/>
</group>
</div>
<notebook>
<page string="Content" name="content">
<group>
<field name="body" widget="sms_widget" nolabel="1" colspan="2"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="sms_template_view_tree" model="ir.ui.view">
<field name="name">sms.template.view.tree</field>
<field name="model">sms.template</field>
<field name="arch" type="xml">
<tree string="SMS Templates">
<field name="name"/>
<field name="model_id"/>
</tree>
</field>
</record>
<record id="sms_template_view_search" model="ir.ui.view">
<field name="name">sms.template.view.search</field>
<field name="model">sms.template</field>
<field name="arch" type="xml">
<search string="Search SMS Templates">
<field name="name"/>
<field name="model_id"/>
</search>
</field>
</record>
<record id="sms_template_action" model="ir.actions.act_window">
<field name="name">Templates</field>
<field name="res_model">sms.template</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="sms_template_menu"
name="SMS Templates"
parent="phone_validation.phone_menu_main"
sequence="2"
action="sms_template_action"/>
</data></odoo>