Начальное наполнение
This commit is contained in:
parent
4f25fe6e63
commit
52e3317c52
6
__init__.py
Normal file
6
__init__.py
Normal file
@ -0,0 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import controllers
|
||||
from . import models
|
||||
from . import wizard
|
43
__manifest__.py
Normal file
43
__manifest__.py
Normal file
@ -0,0 +1,43 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
{
|
||||
'name': 'SMS Marketing',
|
||||
'summary': 'Design, send and track SMS',
|
||||
'version': '1.1',
|
||||
'category': 'Marketing/Email Marketing',
|
||||
'sequence': 245,
|
||||
'depends': [
|
||||
'portal',
|
||||
'mass_mailing',
|
||||
'sms',
|
||||
],
|
||||
'data': [
|
||||
'data/utm.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'report/mailing_trace_report_views.xml',
|
||||
'views/mailing_list_views.xml',
|
||||
'views/mailing_contact_views.xml',
|
||||
'views/mailing_trace_views.xml',
|
||||
'views/mailing_mailing_views.xml',
|
||||
'views/mass_mailing_sms_templates_portal.xml',
|
||||
'views/utm_campaign_views.xml',
|
||||
'views/mailing_sms_menus.xml',
|
||||
'wizard/sms_composer_views.xml',
|
||||
'wizard/mailing_sms_test_views.xml',
|
||||
],
|
||||
'demo': [
|
||||
'demo/utm.xml',
|
||||
'demo/mailing_list_contact.xml',
|
||||
'demo/mailing_subscription.xml',
|
||||
'demo/mailing_mailing.xml',
|
||||
'demo/mailing_trace.xml',
|
||||
],
|
||||
'assets': {
|
||||
'web.assets_tests': [
|
||||
'mass_mailing_sms/static/tests/tours/**/*',
|
||||
],
|
||||
},
|
||||
'application': True,
|
||||
'license': 'LGPL-3',
|
||||
}
|
4
controllers/__init__.py
Normal file
4
controllers/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import main
|
108
controllers/main.py
Normal file
108
controllers/main.py
Normal file
@ -0,0 +1,108 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from werkzeug.exceptions import NotFound
|
||||
|
||||
from odoo import http, _
|
||||
from odoo.addons.phone_validation.tools import phone_validation
|
||||
from odoo.http import request
|
||||
|
||||
|
||||
class MailingSMSController(http.Controller):
|
||||
|
||||
def _check_trace(self, mailing_id, trace_code):
|
||||
try:
|
||||
mailing = request.env['mailing.mailing'].sudo().search([('id', '=', mailing_id)])
|
||||
except:
|
||||
mailing = False
|
||||
if not mailing:
|
||||
return {'error': 'mailing_error'}
|
||||
trace = request.env['mailing.trace'].sudo().search([
|
||||
('trace_type', '=', 'sms'),
|
||||
('sms_code', '=', trace_code),
|
||||
('mass_mailing_id', '=', mailing.id)
|
||||
])
|
||||
if not trace:
|
||||
return {'error': 'trace_error'}
|
||||
return {'trace': trace}
|
||||
|
||||
@http.route(['/sms/<int:mailing_id>/<string:trace_code>'], type='http', website=True, auth='public')
|
||||
def blacklist_page(self, mailing_id, trace_code, **post):
|
||||
check_res = self._check_trace(mailing_id, trace_code)
|
||||
if not check_res.get('trace'):
|
||||
return request.redirect('/web')
|
||||
return request.render('mass_mailing_sms.blacklist_main', {
|
||||
'mailing_id': mailing_id,
|
||||
'trace_code': trace_code,
|
||||
})
|
||||
|
||||
@http.route(['/sms/<int:mailing_id>/unsubscribe/<string:trace_code>'], type='http', website=True, auth='public')
|
||||
def blacklist_number(self, mailing_id, trace_code, **post):
|
||||
check_res = self._check_trace(mailing_id, trace_code)
|
||||
if not check_res.get('trace'):
|
||||
return request.redirect('/web')
|
||||
# parse and validate number
|
||||
sms_number = post.get('sms_number', '').strip(' ')
|
||||
sanitized = phone_validation.phone_format(
|
||||
sms_number,
|
||||
request.geoip.country_code,
|
||||
force_format='E164',
|
||||
raise_exception=False,
|
||||
)
|
||||
tocheck_number = sanitized or sms_number
|
||||
|
||||
trace = check_res['trace'].filtered(lambda r: r.sms_number == tocheck_number)[:1] if tocheck_number else False
|
||||
# compute opt-out / blacklist information
|
||||
lists_optout = request.env['mailing.list'].sudo()
|
||||
lists_optin = request.env['mailing.list'].sudo()
|
||||
unsubscribe_error = False
|
||||
if tocheck_number and trace:
|
||||
mailing_list_ids = trace.mass_mailing_id.contact_list_ids
|
||||
if mailing_list_ids:
|
||||
subscriptions = request.env['mailing.subscription'].sudo().search([
|
||||
('list_id', 'in', mailing_list_ids.ids),
|
||||
('contact_id.phone_sanitized', '=', tocheck_number),
|
||||
])
|
||||
subscriptions.write({'opt_out': True})
|
||||
lists_optout = subscriptions.mapped('list_id')
|
||||
else:
|
||||
blacklist_rec = request.env['phone.blacklist'].sudo().add(tocheck_number)
|
||||
blacklist_rec._message_log(
|
||||
body=_('Blacklist through SMS Marketing unsubscribe (mailing ID: %s - model: %s)',
|
||||
trace.mass_mailing_id.id, trace.mass_mailing_id.mailing_model_id.display_name))
|
||||
lists_optin = request.env['mailing.subscription'].sudo().search([
|
||||
('contact_id.phone_sanitized', '=', tocheck_number),
|
||||
('list_id', 'not in', mailing_list_ids.ids),
|
||||
('opt_out', '=', False),
|
||||
]).mapped('list_id')
|
||||
elif tocheck_number:
|
||||
unsubscribe_error = _('Number %s not found', tocheck_number)
|
||||
else:
|
||||
unsubscribe_error = _('Invalid number %s', post.get('sms_number', ''))
|
||||
|
||||
return request.render('mass_mailing_sms.blacklist_number', {
|
||||
'mailing_id': mailing_id,
|
||||
'trace_code': trace_code,
|
||||
'sms_number': sms_number,
|
||||
'lists_optin': lists_optin,
|
||||
'lists_optout': lists_optout,
|
||||
'unsubscribe_error': unsubscribe_error,
|
||||
})
|
||||
|
||||
@http.route('/r/<string:code>/s/<int:sms_id_int>', type='http', auth="public")
|
||||
def sms_short_link_redirect(self, code, sms_id_int, **post):
|
||||
if sms_id_int:
|
||||
trace_id = request.env['mailing.trace'].sudo().search([('sms_id_int', '=', int(sms_id_int))]).id
|
||||
else:
|
||||
trace_id = False
|
||||
|
||||
request.env['link.tracker.click'].sudo().add_click(
|
||||
code,
|
||||
ip=request.httprequest.remote_addr,
|
||||
country_code=request.geoip.country_code,
|
||||
mailing_trace_id=trace_id
|
||||
)
|
||||
redirect_url = request.env['link.tracker'].get_url_from_code(code)
|
||||
if not redirect_url:
|
||||
raise NotFound()
|
||||
return request.redirect(redirect_url, code=301, local=False)
|
8
data/utm.xml
Normal file
8
data/utm.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data noupdate="1">
|
||||
|
||||
<record model="utm.medium" id="utm_medium_sms">
|
||||
<field name="name">SMS</field>
|
||||
</record>
|
||||
|
||||
</data></odoo>
|
35
demo/mailing_list_contact.xml
Normal file
35
demo/mailing_list_contact.xml
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data noupdate="0">
|
||||
<record id="mailing_list_sms_0" model="mailing.list">
|
||||
<field name="name">Interested in Tree Promotions</field>
|
||||
<field name="is_public">True</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_contact_0_0" model="mailing.contact">
|
||||
<field name="name">Hubert Farnsworth</field>
|
||||
<field name="mobile">+32456001100</field>
|
||||
<field name="email">hubert.farnsworth@example.com</field>
|
||||
<field name="list_ids" eval="[(5, 0, 0)]"/>
|
||||
</record>
|
||||
<record id="mailing_contact_0_1" model="mailing.contact">
|
||||
<field name="name">Philip Fry</field>
|
||||
<field name="mobile">+32456001111</field>
|
||||
<field name="email">philip.fry@example.com</field>
|
||||
<field name="list_ids" eval="[(5, 0, 0)]"/>
|
||||
</record>
|
||||
<record id="mailing_contact_0_2" model="mailing.contact">
|
||||
<field name="name">Turanga Leela</field>
|
||||
<field name="mobile">+32456001122</field>
|
||||
<field name="list_ids" eval="[(5, 0, 0)]"/>
|
||||
</record>
|
||||
<record id="mailing_contact_0_3" model="mailing.contact">
|
||||
<field name="name">John Zoidberg</field>
|
||||
<field name="mobile">+32456001133</field>
|
||||
<field name="list_ids" eval="[(5, 0, 0)]"/>
|
||||
</record>
|
||||
<record id="mailing_contact_0_4" model="mailing.contact">
|
||||
<field name="name">Zapp Brannigan</field>
|
||||
<field name="mobile">dummy</field>
|
||||
<field name="list_ids" eval="[(5, 0, 0)]"/>
|
||||
</record>
|
||||
</data></odoo>
|
31
demo/mailing_mailing.xml
Normal file
31
demo/mailing_mailing.xml
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data noupdate="0">
|
||||
<record id="mailing_sms_0" model="mailing.mailing">
|
||||
<field name="name">XMas Promo</field>
|
||||
<field name="subject">XMas Promo</field>
|
||||
<field name="mailing_type">sms</field>
|
||||
<field name="state">done</field>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="sent_date" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="campaign_id" ref="utm_campaign_0"/>
|
||||
<field name="mailing_model_id" ref="base.model_res_partner"/>
|
||||
<field name="mailing_domain" eval="[('parent_id', '=', ref('base.res_partner_4'))]"/>
|
||||
<field name="body_plaintext">This week-end, incredible promotion for XMas! See http://sms.example.com!</field>
|
||||
</record>
|
||||
<!-- Generate link tracker information from it -->
|
||||
<function model="mailing.mailing" name="convert_links" eval="[ref('mass_mailing_sms.mailing_sms_0')]"/>
|
||||
|
||||
<record id="mailing_sms_1" model="mailing.mailing">
|
||||
<field name="subject">Extra Promo</field>
|
||||
<field name="mailing_type">sms</field>
|
||||
<field name="state">done</field>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="sent_date" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="campaign_id" ref="utm_campaign_0"/>
|
||||
<field name="source_id" ref="mailing_sms_0_utm_source"/>
|
||||
<field name="mailing_model_id" ref="mass_mailing.model_mailing_list"/>
|
||||
<field name="contact_list_ids" eval="[(5, 0), (4, ref('mass_mailing_sms.mailing_list_sms_0'))]"/>
|
||||
<field name="body_plaintext">Extra promotion for you!</field>
|
||||
</record>
|
||||
|
||||
</data></odoo>
|
23
demo/mailing_subscription.xml
Normal file
23
demo/mailing_subscription.xml
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data noupdate="0">
|
||||
<record id="mailing_list_sms_0_sub_contact_0_0" model="mailing.subscription">
|
||||
<field name="contact_id" ref="mass_mailing_sms.mailing_contact_0_0"/>
|
||||
<field name="list_id" ref="mass_mailing_sms.mailing_list_sms_0"/>
|
||||
</record>
|
||||
<record id="mailing_list_sms_0_sub_contact_0_1" model="mailing.subscription">
|
||||
<field name="contact_id" ref="mass_mailing_sms.mailing_contact_0_1"/>
|
||||
<field name="list_id" ref="mass_mailing_sms.mailing_list_sms_0"/>
|
||||
</record>
|
||||
<record id="mailing_list_sms_0_sub_contact_0_2" model="mailing.subscription">
|
||||
<field name="contact_id" ref="mass_mailing_sms.mailing_contact_0_2"/>
|
||||
<field name="list_id" ref="mass_mailing_sms.mailing_list_sms_0"/>
|
||||
</record>
|
||||
<record id="mailing_list_sms_0_sub_contact_0_3" model="mailing.subscription">
|
||||
<field name="contact_id" ref="mass_mailing_sms.mailing_contact_0_3"/>
|
||||
<field name="list_id" ref="mass_mailing_sms.mailing_list_sms_0"/>
|
||||
</record>
|
||||
<record id="mailing_list_sms_0_sub_contact_0_4" model="mailing.subscription">
|
||||
<field name="contact_id" ref="mass_mailing_sms.mailing_contact_0_4"/>
|
||||
<field name="list_id" ref="mass_mailing_sms.mailing_list_sms_0"/>
|
||||
</record>
|
||||
</data></odoo>
|
158
demo/mailing_trace.xml
Normal file
158
demo/mailing_trace.xml
Normal file
@ -0,0 +1,158 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data noupdate="0">
|
||||
<!-- Simulate traces -->
|
||||
<record id="mailing_sms_0_trace_0" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_0"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">+32465000000</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="res_id" ref="base.res_partner_address_7"/>
|
||||
<field name="trace_status">sent</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="write_date" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_0_trace_1" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_0"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">+32465000001</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="res_id" ref="base.res_partner_address_13"/>
|
||||
<field name="trace_status">sent</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="write_date" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_0_trace_2" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_0"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">+32465000002</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="res_id" ref="base.res_partner_address_14"/>
|
||||
<field name="trace_status">sent</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="write_date" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_0_trace_3" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_0"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">+32465000003</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="res_id" ref="base.res_partner_address_24"/>
|
||||
<field name="trace_status">pending</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="write_date" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_0_trace_4" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_0"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">+32465000004</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="res_id" ref="base.res_partner_address_33"/>
|
||||
<field name="trace_status">error</field>
|
||||
<field name="failure_type">sms_not_allowed</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="write_date" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_0_trace_5" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_0"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">123123</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="res_id" ref="base.res_partner_address_33"/>
|
||||
<field name="trace_status">error</field>
|
||||
<field name="failure_type">sms_not_delivered</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="write_date" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_0_trace_6" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_0"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number"></field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="res_id" ref="base.res_partner_address_34"/>
|
||||
<field name="trace_status">bounce</field>
|
||||
<field name="failure_type">sms_invalid_destination</field>
|
||||
<field name="sent_datetime" eval="False"/>
|
||||
</record>
|
||||
|
||||
<!-- Generate some clicks -->
|
||||
<function model="link.tracker.click" name="add_click">
|
||||
<value model="link.tracker.code"
|
||||
search="[('link_id.url', '=', 'http://sms.example.com')]"
|
||||
use="code"/>
|
||||
<value name="ip">100.01.02.03</value>
|
||||
<value name="country_code">BE</value>
|
||||
<value name="mailing_trace_id" eval="ref('mailing_sms_0_trace_0')"/>
|
||||
</function>
|
||||
<function model="link.tracker.click" name="add_click">
|
||||
<value model="link.tracker.code"
|
||||
search="[('link_id.url', '=', 'http://sms.example.com')]"
|
||||
use="code"/>
|
||||
<value name="ip">100.01.02.04</value>
|
||||
<value name="country_code">BE</value>
|
||||
<value name="mailing_trace_id" eval="ref('mailing_sms_0_trace_0')"/>
|
||||
</function>
|
||||
<function model="link.tracker.click" name="add_click">
|
||||
<value model="link.tracker.code"
|
||||
search="[('link_id.url', '=', 'http://sms.example.com')]"
|
||||
use="code"/>
|
||||
<value name="ip">100.01.02.05</value>
|
||||
<value name="country_code">BE</value>
|
||||
<value name="mailing_trace_id" eval="ref('mailing_sms_0_trace_1')"/>
|
||||
</function>
|
||||
<function model="link.tracker.click" name="add_click">
|
||||
<value model="link.tracker.code"
|
||||
search="[('link_id.url', '=', 'http://sms.example')]"
|
||||
use="code"/>
|
||||
<value name="ip">100.01.02.06</value>
|
||||
<value name="country_code">BE</value>
|
||||
<value name="mailing_trace_id" eval="ref('mailing_sms_0_trace_2')"/>
|
||||
</function>
|
||||
|
||||
<!-- Simulate traces -->
|
||||
<record id="mailing_sms_1_trace_0" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_1"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">+32456001100</field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="res_id" ref="mass_mailing_sms.mailing_contact_0_0"/>
|
||||
<field name="trace_status">sent</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_1_trace_1" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_1"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">+32456001111</field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="res_id" ref="mass_mailing_sms.mailing_contact_0_1"/>
|
||||
<field name="trace_status">pending</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_1_trace_2" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_1"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">+32456001122</field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="res_id" ref="mass_mailing_sms.mailing_contact_0_2"/>
|
||||
<field name="trace_status">pending</field>
|
||||
<field name="sent_datetime" eval="(DateTime.today() - relativedelta(days=5)).strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
</record>
|
||||
<record id="mailing_sms_1_trace_3" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_1"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number"></field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="res_id" ref="mass_mailing_sms.mailing_contact_0_3"/>
|
||||
<field name="trace_status">error</field>
|
||||
<field name="failure_type">sms_number_missing</field>
|
||||
</record>
|
||||
<record id="mailing_sms_1_trace_4" model="mailing.trace">
|
||||
<field name="mass_mailing_id" ref="mailing_sms_1"/>
|
||||
<field name="trace_type">sms</field>
|
||||
<field name="sms_number">dummy</field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="res_id" ref="mass_mailing_sms.mailing_contact_0_4"/>
|
||||
<field name="trace_status">error</field>
|
||||
<field name="failure_type">sms_number_format</field>
|
||||
</record>
|
||||
|
||||
</data></odoo>
|
16
demo/utm.xml
Normal file
16
demo/utm.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data noupdate="0">
|
||||
<record id="mailing_tag_0" model="utm.tag">
|
||||
<field name="name">Bioutifoul SMS</field>
|
||||
<field name="color" eval="2"/>
|
||||
</record>
|
||||
<record id="utm_campaign_0" model="utm.campaign">
|
||||
<field name="name">XMas Promo</field>
|
||||
<field name="stage_id" ref="utm.campaign_stage_1"/>
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="tag_ids" eval="[(4, ref('mailing_tag_0')), (4, ref('utm.utm_tag_1'))]"/>
|
||||
</record>
|
||||
<record id="mailing_sms_0_utm_source" model="utm.source">
|
||||
<field name="name">Mailing Extra Promo</field>
|
||||
</record>
|
||||
</data></odoo>
|
1108
i18n/ar.po
Normal file
1108
i18n/ar.po
Normal file
File diff suppressed because it is too large
Load Diff
1061
i18n/bg.po
Normal file
1061
i18n/bg.po
Normal file
File diff suppressed because it is too large
Load Diff
1108
i18n/ca.po
Normal file
1108
i18n/ca.po
Normal file
File diff suppressed because it is too large
Load Diff
1081
i18n/cs.po
Normal file
1081
i18n/cs.po
Normal file
File diff suppressed because it is too large
Load Diff
1074
i18n/da.po
Normal file
1074
i18n/da.po
Normal file
File diff suppressed because it is too large
Load Diff
1112
i18n/de.po
Normal file
1112
i18n/de.po
Normal file
File diff suppressed because it is too large
Load Diff
1112
i18n/es.po
Normal file
1112
i18n/es.po
Normal file
File diff suppressed because it is too large
Load Diff
1118
i18n/es_419.po
Normal file
1118
i18n/es_419.po
Normal file
File diff suppressed because it is too large
Load Diff
1103
i18n/et.po
Normal file
1103
i18n/et.po
Normal file
File diff suppressed because it is too large
Load Diff
1075
i18n/fa.po
Normal file
1075
i18n/fa.po
Normal file
File diff suppressed because it is too large
Load Diff
1105
i18n/fi.po
Normal file
1105
i18n/fi.po
Normal file
File diff suppressed because it is too large
Load Diff
1113
i18n/fr.po
Normal file
1113
i18n/fr.po
Normal file
File diff suppressed because it is too large
Load Diff
1092
i18n/he.po
Normal file
1092
i18n/he.po
Normal file
File diff suppressed because it is too large
Load Diff
960
i18n/hr.po
Normal file
960
i18n/hr.po
Normal file
@ -0,0 +1,960 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * mass_mailing_sms
|
||||
#
|
||||
# Translators:
|
||||
# Vladimir Vrgoč, 2022
|
||||
# Tina Milas, 2022
|
||||
# Vladimir Olujić <olujic.vladimir@storm.hr>, 2022
|
||||
# Milan Tribuson <one.mile.code@gmail.com>, 2022
|
||||
# Bole <bole@dajmi5.com>, 2022
|
||||
# Karolina Tonković <karolina.tonkovic@storm.hr>, 2022
|
||||
# Hrvoje Sić <hrvoje.sic@gmail.com>, 2022
|
||||
# Martin Trigaux, 2022
|
||||
# Matej Mijoč, 2022
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0beta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-16 13:48+0000\n"
|
||||
"PO-Revision-Date: 2022-09-22 05:53+0000\n"
|
||||
"Last-Translator: Matej Mijoč, 2022\n"
|
||||
"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n"
|
||||
"Language: hr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid ""
|
||||
"+32 495 85 85 77\n"
|
||||
"+33 545 55 55 55"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "24H Stats of %(mailing_type)s \"%(mailing_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid ""
|
||||
"<br/>\n"
|
||||
" <span class=\"text-muted\">\n"
|
||||
" <i class=\"fa fa-phone\"/> Contacts\n"
|
||||
" </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"canceled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been canceled and will not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"failed_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message could not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"next_departure_text\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">This SMS marketing is scheduled for </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"scheduled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message are in queue and will be sent soon.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"sent_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<span widget=\"statinfo\">Open Recipient</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid "<span>Valid SMS Recipients</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears you don't have enough IAP credits. Click here to buy credits.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears your SMS account is not registered. Click here to set up your account.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This SMS could not be sent.</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This number appears to be invalid.</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "A/B Test"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_mailings_sms_count
|
||||
msgid "A/B Test Mailings SMS #"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "A/B Test: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Potrebna dodatna radnja"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Broj priloga"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Bounced"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Clicked"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "BOUNCED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.tag,name:mass_mailing_sms.mailing_tag_0
|
||||
msgid "Bioutifoul SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Blacklist through SMS Marketing unsubscribe (mailing ID: %s - model: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_blacklist
|
||||
msgid "Blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Blacklisted Phone Is Mobile"
|
||||
msgstr "Brojevi na crnoj listi su mobilni"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.phone_blacklist_menu
|
||||
msgid "Blacklisted Phone Numbers"
|
||||
msgstr "Brojevi na crnoj listi"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Blacklisted Phone is Phone"
|
||||
msgstr "Brojevi na crnoj listi su telefonski"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Bounced (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "CLICKED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__utm_campaign_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Campaign"
|
||||
msgstr "Kampanja"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.menu_email_campaigns
|
||||
msgid "Campaigns"
|
||||
msgstr "Kampanje"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Cancel"
|
||||
msgstr "Odustani"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Carriage-return-separated list of phone numbers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Clicked (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_code
|
||||
msgid "Code"
|
||||
msgstr "Šifra"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "Come back once some SMS Mailings are sent to check out aggregated results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_configuration
|
||||
msgid "Configuration"
|
||||
msgstr "Postava"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "Create a Mailing List"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Create a SMS Marketing Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Create a mailing contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Kreirao"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Kreirano"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Naziv"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_duplicate
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliciraj"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#, python-format
|
||||
msgid "Email Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Exclude Blacklisted Phone"
|
||||
msgstr "Isključi brojeve na crnoj listi"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__failure_type
|
||||
msgid "Failure type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Field used to store sanitized phone number. Helps speeding up searches and comparisons."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Pratitelji"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Pratitelji (Partneri)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"For an Email, Subject your Recipients will see in their inbox.\n"
|
||||
" For an SMS Text Message, internal Title of the Message."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
msgid ""
|
||||
"For an email, the subject your recipients will see in their inbox.\n"
|
||||
"For an SMS, the internal title of the message."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__has_message
|
||||
msgid "Has Message"
|
||||
msgstr "Ima poruku"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__clicks_ratio
|
||||
msgid "Highest Click Rate"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Ako je označeno, nove poruke zahtijevaju Vašu pažnju."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Ako je označeno neke poruke mogu imati grešku u dostavi."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "If the sanitized phone number is on the blacklist, the contact won't receive mass mailing sms anymore, from any list"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Immediately send the SMS Mailing instead of queuing up. Use at your own risk."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_allow_unsubscribe
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mass_sms_allow_unsubscribe
|
||||
msgid "Include opt-out link"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a mobile number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a phone number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_credit
|
||||
msgid "Insufficient Credit"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_insufficient_credit
|
||||
msgid "Insufficient IAP credits"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Insufficient credits"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Je pratitelj"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Promijenio"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Vrijeme promjene"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.link_tracker_menu
|
||||
msgid "Link Tracker"
|
||||
msgstr "Praćenje linkova"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__mailing_id
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mailing_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Mailing"
|
||||
msgstr "Slanje mailova"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_contact
|
||||
msgid "Mailing Contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_list
|
||||
msgid "Mailing List"
|
||||
msgstr "Lista za slanje mailova"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_contact_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_contact_menu_sms
|
||||
msgid "Mailing List Contacts"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_list_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_list_menu_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_contacts
|
||||
msgid "Mailing Lists"
|
||||
msgstr "Liste za slanje mailova"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_trace
|
||||
msgid "Mailing Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__mailing_type
|
||||
msgid "Mailing Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Mailing contacts allow you to separate your marketing audience from your contact directory."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__manual
|
||||
msgid "Manual"
|
||||
msgstr "Ručno"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Marketing"
|
||||
msgstr "Marketing"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_mailing
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_id
|
||||
msgid "Mass Mailing"
|
||||
msgstr "Grupna e-pošta"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_ids
|
||||
msgid "Mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Greška pri isporuci poruke"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Poruke"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_missing
|
||||
msgid "Missing Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile
|
||||
msgid "Mobile"
|
||||
msgstr "Mobitel"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_search_sms
|
||||
msgid "My SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "No data yet!"
|
||||
msgstr "Nema još podataka!"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "No need to import mailing lists, you can send SMS Text Messages to contacts saved in other Odoo apps."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_number
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Number"
|
||||
msgstr "Broj"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Number %s not found"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Broj akcija"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_count
|
||||
msgid "Number of Mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Broj grešaka"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Broj poruka koje zahtijevaju aktivnost"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Broj poruka sa greškama pri isporuci"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Number(s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "Open Recipient"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_optout
|
||||
msgid "Opted Out"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Options"
|
||||
msgstr "Opcije"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_sms
|
||||
msgid "Outgoing SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "Phone Blacklisted"
|
||||
msgstr "Telefon je stavljen na crnu listu"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_mobile_search
|
||||
msgid "Phone/Mobile"
|
||||
msgstr "Teb/Mob"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Please enter your phone number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "RECEIVED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__rating_ids
|
||||
msgid "Ratings"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Recipients"
|
||||
msgstr "Primatelji"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Report for %(expected)i %(mailing_type)s Sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_reporting
|
||||
msgid "Reporting"
|
||||
msgstr "Izvještavanje"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_mailing__mailing_type__sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__trace_type__sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_kanban
|
||||
msgid "SMS"
|
||||
msgstr "SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__body_plaintext
|
||||
msgid "SMS Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_list__contact_count_sms
|
||||
msgid "SMS Contacts"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "SMS Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "SMS Delivery error"
|
||||
msgstr "Greška u slanju SMSa"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id_int
|
||||
msgid "SMS ID (tech)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_mailing_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_mass_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_root
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#, python-format
|
||||
msgid "SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "SMS Marketing Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "SMS Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_template_id
|
||||
msgid "SMS Template"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "SMS Text Message"
|
||||
msgstr "SMS poruka"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS Trace"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "SMS Traces"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__ab_testing_sms_winner_selection
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_sms_winner_selection
|
||||
msgid "SMS Winner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/sms_composer.py:0
|
||||
#, python-format
|
||||
msgid "STOP SMS: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Sanitized Number"
|
||||
msgstr "Sanirani broj"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send"
|
||||
msgstr "Pošalji"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Send Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Send Now"
|
||||
msgstr "Pošalji odmah"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Send SMS"
|
||||
msgstr "Pošalji SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_composer
|
||||
msgid "Send SMS Wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a Sample SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a sample SMS for testing purpose to the numbers below (carriage-return-separated list)."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_server
|
||||
msgid "Server Error"
|
||||
msgstr "Greška poslužitelja"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_trace_ids
|
||||
msgid "Statistics"
|
||||
msgstr "Statistike"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_sms_test
|
||||
msgid "Test SMS Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_sms_test_action
|
||||
msgid "Test SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS could not be sent to %s:<br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS successfully sent to %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/utm.py:0
|
||||
#, python-format
|
||||
msgid "The UTM medium '%s' cannot be deleted as it is used in some main functional flows, such as the SMS Marketing."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "The following numbers are not correctly encoded: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "There was an error when trying to unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_form
|
||||
msgid "This phone number is blacklisted for SMS Marketing. Click to unblacklist."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients now. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Title"
|
||||
msgstr "Naslov"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Total Sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__trace_type
|
||||
msgid "Type"
|
||||
msgstr "Vrsta"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_campaign
|
||||
msgid "UTM Campaign"
|
||||
msgstr "UTM kampanja"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_medium
|
||||
msgid "UTM Medium"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_acc
|
||||
msgid "Unregistered Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_unregistered_account
|
||||
msgid "Unregistered IAP account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Unregistered account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Unsubscribe me"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Unsupported %s for mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_res_users
|
||||
msgid "User"
|
||||
msgstr "Korisnik"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Valid SMS Recipients"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Poruke webstranica"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Povijest komunikacije Web stranice"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Winner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Write an appealing SMS Text Message, define recipients and track its results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_format
|
||||
msgid "Wrong Number Format"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.campaign,title:mass_mailing_sms.utm_campaign_0
|
||||
msgid "XMas Promo"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "e.g. Black Friday SMS coupon"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully removed from"
|
||||
msgstr ""
|
1060
i18n/hu.po
Normal file
1060
i18n/hu.po
Normal file
File diff suppressed because it is too large
Load Diff
1111
i18n/id.po
Normal file
1111
i18n/id.po
Normal file
File diff suppressed because it is too large
Load Diff
1108
i18n/it.po
Normal file
1108
i18n/it.po
Normal file
File diff suppressed because it is too large
Load Diff
1085
i18n/ja.po
Normal file
1085
i18n/ja.po
Normal file
File diff suppressed because it is too large
Load Diff
1089
i18n/ko.po
Normal file
1089
i18n/ko.po
Normal file
File diff suppressed because it is too large
Load Diff
952
i18n/lb.po
Normal file
952
i18n/lb.po
Normal file
@ -0,0 +1,952 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * mass_mailing_sms
|
||||
#
|
||||
# Translators:
|
||||
# Xavier ALT <xal@odoo.com>, 2019
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server saas~12.5\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-16 13:48+0000\n"
|
||||
"PO-Revision-Date: 2019-08-26 09:11+0000\n"
|
||||
"Last-Translator: Xavier ALT <xal@odoo.com>, 2019\n"
|
||||
"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n"
|
||||
"Language: lb\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"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid ""
|
||||
"+32 495 85 85 77\n"
|
||||
"+33 545 55 55 55"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "24H Stats of %(mailing_type)s \"%(mailing_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid ""
|
||||
"<br/>\n"
|
||||
" <span class=\"text-muted\">\n"
|
||||
" <i class=\"fa fa-phone\"/> Contacts\n"
|
||||
" </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"canceled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been canceled and will not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"failed_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message could not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"next_departure_text\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">This SMS marketing is scheduled for </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"scheduled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message are in queue and will be sent soon.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"sent_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<span widget=\"statinfo\">Open Recipient</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid "<span>Valid SMS Recipients</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears you don't have enough IAP credits. Click here to buy credits.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears your SMS account is not registered. Click here to set up your account.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This SMS could not be sent.</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This number appears to be invalid.</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "A/B Test"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_mailings_sms_count
|
||||
msgid "A/B Test Mailings SMS #"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "A/B Test: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Bounced"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Clicked"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "BOUNCED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.tag,name:mass_mailing_sms.mailing_tag_0
|
||||
msgid "Bioutifoul SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Blacklist through SMS Marketing unsubscribe (mailing ID: %s - model: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_blacklist
|
||||
msgid "Blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Blacklisted Phone Is Mobile"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.phone_blacklist_menu
|
||||
msgid "Blacklisted Phone Numbers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Blacklisted Phone is Phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Bounced (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "CLICKED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__utm_campaign_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Campaign"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.menu_email_campaigns
|
||||
msgid "Campaigns"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Carriage-return-separated list of phone numbers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Clicked (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_code
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "Come back once some SMS Mailings are sent to check out aggregated results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_configuration
|
||||
msgid "Configuration"
|
||||
msgstr "Konfiguratioun"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "Create a Mailing List"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Create a SMS Marketing Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Create a mailing contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_duplicate
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#, python-format
|
||||
msgid "Email Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Exclude Blacklisted Phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__failure_type
|
||||
msgid "Failure type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Field used to store sanitized phone number. Helps speeding up searches and comparisons."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"For an Email, Subject your Recipients will see in their inbox.\n"
|
||||
" For an SMS Text Message, internal Title of the Message."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
msgid ""
|
||||
"For an email, the subject your recipients will see in their inbox.\n"
|
||||
"For an SMS, the internal title of the message."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__has_message
|
||||
msgid "Has Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__clicks_ratio
|
||||
msgid "Highest Click Rate"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "If the sanitized phone number is on the blacklist, the contact won't receive mass mailing sms anymore, from any list"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Immediately send the SMS Mailing instead of queuing up. Use at your own risk."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_allow_unsubscribe
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mass_sms_allow_unsubscribe
|
||||
msgid "Include opt-out link"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a mobile number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a phone number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_credit
|
||||
msgid "Insufficient Credit"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_insufficient_credit
|
||||
msgid "Insufficient IAP credits"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Insufficient credits"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.link_tracker_menu
|
||||
msgid "Link Tracker"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__mailing_id
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mailing_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_contact
|
||||
msgid "Mailing Contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_list
|
||||
msgid "Mailing List"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_contact_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_contact_menu_sms
|
||||
msgid "Mailing List Contacts"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_list_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_list_menu_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_contacts
|
||||
msgid "Mailing Lists"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_trace
|
||||
msgid "Mailing Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__mailing_type
|
||||
msgid "Mailing Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Mailing contacts allow you to separate your marketing audience from your contact directory."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__manual
|
||||
msgid "Manual"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_mailing
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_id
|
||||
msgid "Mass Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_ids
|
||||
msgid "Mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_ids
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_missing
|
||||
msgid "Missing Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_search_sms
|
||||
msgid "My SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "No data yet!"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "No need to import mailing lists, you can send SMS Text Messages to contacts saved in other Odoo apps."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_number
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Number %s not found"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_count
|
||||
msgid "Number of Mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Number(s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "Open Recipient"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_optout
|
||||
msgid "Opted Out"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_sms
|
||||
msgid "Outgoing SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "Phone Blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_mobile_search
|
||||
msgid "Phone/Mobile"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Please enter your phone number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "RECEIVED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__rating_ids
|
||||
msgid "Ratings"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Recipients"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Report for %(expected)i %(mailing_type)s Sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_reporting
|
||||
msgid "Reporting"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_mailing__mailing_type__sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__trace_type__sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_kanban
|
||||
msgid "SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__body_plaintext
|
||||
msgid "SMS Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_list__contact_count_sms
|
||||
msgid "SMS Contacts"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "SMS Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "SMS Delivery error"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id_int
|
||||
msgid "SMS ID (tech)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_mailing_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_mass_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_root
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#, python-format
|
||||
msgid "SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "SMS Marketing Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "SMS Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_template_id
|
||||
msgid "SMS Template"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "SMS Text Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS Trace"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "SMS Traces"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__ab_testing_sms_winner_selection
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_sms_winner_selection
|
||||
msgid "SMS Winner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/sms_composer.py:0
|
||||
#, python-format
|
||||
msgid "STOP SMS: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Sanitized Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Send Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Send Now"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Send SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_composer
|
||||
msgid "Send SMS Wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a Sample SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a sample SMS for testing purpose to the numbers below (carriage-return-separated list)."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_server
|
||||
msgid "Server Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_trace_ids
|
||||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_sms_test
|
||||
msgid "Test SMS Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_sms_test_action
|
||||
msgid "Test SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS could not be sent to %s:<br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS successfully sent to %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/utm.py:0
|
||||
#, python-format
|
||||
msgid "The UTM medium '%s' cannot be deleted as it is used in some main functional flows, such as the SMS Marketing."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "The following numbers are not correctly encoded: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "There was an error when trying to unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_form
|
||||
msgid "This phone number is blacklisted for SMS Marketing. Click to unblacklist."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients now. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Total Sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__trace_type
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_campaign
|
||||
msgid "UTM Campaign"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_medium
|
||||
msgid "UTM Medium"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_acc
|
||||
msgid "Unregistered Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_unregistered_account
|
||||
msgid "Unregistered IAP account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Unregistered account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Unsubscribe me"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Unsupported %s for mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_res_users
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Valid SMS Recipients"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Winner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Write an appealing SMS Text Message, define recipients and track its results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_format
|
||||
msgid "Wrong Number Format"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.campaign,title:mass_mailing_sms.utm_campaign_0
|
||||
msgid "XMas Promo"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "e.g. Black Friday SMS coupon"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully removed from"
|
||||
msgstr ""
|
1066
i18n/lt.po
Normal file
1066
i18n/lt.po
Normal file
File diff suppressed because it is too large
Load Diff
1059
i18n/lv.po
Normal file
1059
i18n/lv.po
Normal file
File diff suppressed because it is too large
Load Diff
1049
i18n/mass_mailing_sms.pot
Normal file
1049
i18n/mass_mailing_sms.pot
Normal file
File diff suppressed because it is too large
Load Diff
961
i18n/mn.po
Normal file
961
i18n/mn.po
Normal file
@ -0,0 +1,961 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * mass_mailing_sms
|
||||
#
|
||||
# Translators:
|
||||
# hish, 2022
|
||||
# Bayarkhuu Bataa, 2022
|
||||
# Батмөнх Ганбат <batmunkh2522@gmail.com>, 2022
|
||||
# Munkhbilguun Altankhuyag <munkhbilguunaltankhuyag@gmail.com>, 2022
|
||||
# Batmunkh Ganbat <batmunkh.g@bumanit.mn>, 2022
|
||||
# tserendavaa tsogtoo <tseegii011929@gmail.com>, 2022
|
||||
# Uuganbayar Batbaatar <uuganaaub33@gmail.com>, 2022
|
||||
# Minj P <pminj322@gmail.com>, 2022
|
||||
# Martin Trigaux, 2022
|
||||
# Baskhuu Lodoikhuu <baskhuujacara@gmail.com>, 2022
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0beta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-16 13:48+0000\n"
|
||||
"PO-Revision-Date: 2022-09-22 05:53+0000\n"
|
||||
"Last-Translator: Baskhuu Lodoikhuu <baskhuujacara@gmail.com>, 2022\n"
|
||||
"Language-Team: Mongolian (https://app.transifex.com/odoo/teams/41243/mn/)\n"
|
||||
"Language: mn\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"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid ""
|
||||
"+32 495 85 85 77\n"
|
||||
"+33 545 55 55 55"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "24H Stats of %(mailing_type)s \"%(mailing_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid ""
|
||||
"<br/>\n"
|
||||
" <span class=\"text-muted\">\n"
|
||||
" <i class=\"fa fa-phone\"/> Contacts\n"
|
||||
" </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"canceled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been canceled and will not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"failed_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message could not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"next_departure_text\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">This SMS marketing is scheduled for </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"scheduled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message are in queue and will be sent soon.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"sent_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<span widget=\"statinfo\">Open Recipient</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid "<span>Valid SMS Recipients</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears you don't have enough IAP credits. Click here to buy credits.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears your SMS account is not registered. Click here to set up your account.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This SMS could not be sent.</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This number appears to be invalid.</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "A/B Test"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_mailings_sms_count
|
||||
msgid "A/B Test Mailings SMS #"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "A/B Test: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Үйлдэл шаардсан"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Хавсралтын тоо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Bounced"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Clicked"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "BOUNCED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.tag,name:mass_mailing_sms.mailing_tag_0
|
||||
msgid "Bioutifoul SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Blacklist through SMS Marketing unsubscribe (mailing ID: %s - model: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_blacklist
|
||||
msgid "Blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Blacklisted Phone Is Mobile"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.phone_blacklist_menu
|
||||
msgid "Blacklisted Phone Numbers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Blacklisted Phone is Phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Bounced (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "CLICKED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__utm_campaign_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Campaign"
|
||||
msgstr "Аян"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.menu_email_campaigns
|
||||
msgid "Campaigns"
|
||||
msgstr "Аянууд"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Cancel"
|
||||
msgstr "Цуцлах"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Carriage-return-separated list of phone numbers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Clicked (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_code
|
||||
msgid "Code"
|
||||
msgstr "Дансны код"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "Come back once some SMS Mailings are sent to check out aggregated results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_configuration
|
||||
msgid "Configuration"
|
||||
msgstr "Тохиргоо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "Create a Mailing List"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Create a SMS Marketing Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Create a mailing contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Үүсгэсэн этгээд"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Үүсгэсэн огноо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Date"
|
||||
msgstr "Огноо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Дэлгэрэнгүй нэр"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_duplicate
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Duplicate"
|
||||
msgstr "Хуулбарлан үүсгэх"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#, python-format
|
||||
msgid "Email Marketing"
|
||||
msgstr "Имэйл маркетинг"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Exclude Blacklisted Phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__failure_type
|
||||
msgid "Failure type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Field used to store sanitized phone number. Helps speeding up searches and comparisons."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Дагагчид"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Дагагчид (Харилцагчид)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"For an Email, Subject your Recipients will see in their inbox.\n"
|
||||
" For an SMS Text Message, internal Title of the Message."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
msgid ""
|
||||
"For an email, the subject your recipients will see in their inbox.\n"
|
||||
"For an SMS, the internal title of the message."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__has_message
|
||||
msgid "Has Message"
|
||||
msgstr "Мессежтэй"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__clicks_ratio
|
||||
msgid "Highest Click Rate"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Хэрэв сонгогдсон бол, шинэ зурвасууд таны анхаарлыг шаардана."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Үүнийг сонговол алдаа үүсэх үед зурвасууд ирнэ."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "If the sanitized phone number is on the blacklist, the contact won't receive mass mailing sms anymore, from any list"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Immediately send the SMS Mailing instead of queuing up. Use at your own risk."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_allow_unsubscribe
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mass_sms_allow_unsubscribe
|
||||
msgid "Include opt-out link"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a mobile number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a phone number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_credit
|
||||
msgid "Insufficient Credit"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_insufficient_credit
|
||||
msgid "Insufficient IAP credits"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Insufficient credits"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Дагагч эсэх"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Сүүлд зассан этгээд"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Сүүлд зассан огноо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.link_tracker_menu
|
||||
msgid "Link Tracker"
|
||||
msgstr "Холбоос хөтлөгч"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__mailing_id
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mailing_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Mailing"
|
||||
msgstr "Мэйлүүд"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_contact
|
||||
msgid "Mailing Contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_list
|
||||
msgid "Mailing List"
|
||||
msgstr "Мэйлийн жагсаалт"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_contact_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_contact_menu_sms
|
||||
msgid "Mailing List Contacts"
|
||||
msgstr "Мэйлийн жагсаалтын харилцагчид"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_list_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_list_menu_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_contacts
|
||||
msgid "Mailing Lists"
|
||||
msgstr "Мэйлийн жагсаалт"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_trace
|
||||
msgid "Mailing Statistics"
|
||||
msgstr "Мэйлийн статистик"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__mailing_type
|
||||
msgid "Mailing Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Mailing contacts allow you to separate your marketing audience from your contact directory."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__manual
|
||||
msgid "Manual"
|
||||
msgstr "Гараар"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Marketing"
|
||||
msgstr "Маркетинг"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_mailing
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_id
|
||||
msgid "Mass Mailing"
|
||||
msgstr "Масс имэйл илгээх"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_ids
|
||||
msgid "Mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Зурвас илгээх алдаа"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Зурвасууд"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_missing
|
||||
msgid "Missing Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile
|
||||
msgid "Mobile"
|
||||
msgstr "Гар утас"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_search_sms
|
||||
msgid "My SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "No data yet!"
|
||||
msgstr "Одоогоор мэдээлэл алга!"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "No need to import mailing lists, you can send SMS Text Messages to contacts saved in other Odoo apps."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_number
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Number"
|
||||
msgstr "Дугаар"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Number %s not found"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Үйлдлийн тоо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_count
|
||||
msgid "Number of Mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Алдааны тоо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Үйлдэл шаардсан зурвасын тоо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Алдааны мэдэгдэл бүхий зурвасын тоо"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Number(s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "Open Recipient"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_optout
|
||||
msgid "Opted Out"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Options"
|
||||
msgstr "Сонголтууд"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_sms
|
||||
msgid "Outgoing SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "Phone Blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_mobile_search
|
||||
msgid "Phone/Mobile"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Please enter your phone number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "RECEIVED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__rating_ids
|
||||
msgid "Ratings"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Recipients"
|
||||
msgstr "Хүлээн авагчид"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Report for %(expected)i %(mailing_type)s Sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_reporting
|
||||
msgid "Reporting"
|
||||
msgstr "Тайлан"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_mailing__mailing_type__sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__trace_type__sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_kanban
|
||||
msgid "SMS"
|
||||
msgstr "Мессеж"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__body_plaintext
|
||||
msgid "SMS Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_list__contact_count_sms
|
||||
msgid "SMS Contacts"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "SMS Content"
|
||||
msgstr "Мессеж Агууллага"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "SMS Delivery error"
|
||||
msgstr "SMS илгээлтийн алдаа"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id_int
|
||||
msgid "SMS ID (tech)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_mailing_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_mass_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_root
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#, python-format
|
||||
msgid "SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "SMS Marketing Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "SMS Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_template_id
|
||||
msgid "SMS Template"
|
||||
msgstr "Загвар МСЖ"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "SMS Text Message"
|
||||
msgstr "SMS Текст мессеж"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS Trace"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "SMS Traces"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__ab_testing_sms_winner_selection
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_sms_winner_selection
|
||||
msgid "SMS Winner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/sms_composer.py:0
|
||||
#, python-format
|
||||
msgid "STOP SMS: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Sanitized Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send"
|
||||
msgstr "Илгээх"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Send Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Send Now"
|
||||
msgstr "Одоо илгээх"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Send SMS"
|
||||
msgstr "SMS илгээх"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_composer
|
||||
msgid "Send SMS Wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a Sample SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a sample SMS for testing purpose to the numbers below (carriage-return-separated list)."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_server
|
||||
msgid "Server Error"
|
||||
msgstr "Серверийн алдаа"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_trace_ids
|
||||
msgid "Statistics"
|
||||
msgstr "Статистик"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Status"
|
||||
msgstr "Төлөв"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_sms_test
|
||||
msgid "Test SMS Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_sms_test_action
|
||||
msgid "Test SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS could not be sent to %s:<br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS successfully sent to %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/utm.py:0
|
||||
#, python-format
|
||||
msgid "The UTM medium '%s' cannot be deleted as it is used in some main functional flows, such as the SMS Marketing."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "The following numbers are not correctly encoded: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "There was an error when trying to unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_form
|
||||
msgid "This phone number is blacklisted for SMS Marketing. Click to unblacklist."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients now. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Title"
|
||||
msgstr "Гарчиг"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Total Sent"
|
||||
msgstr "Нийт илгээсэн"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__trace_type
|
||||
msgid "Type"
|
||||
msgstr "Төрөл"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_campaign
|
||||
msgid "UTM Campaign"
|
||||
msgstr "UTM Аян"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_medium
|
||||
msgid "UTM Medium"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_acc
|
||||
msgid "Unregistered Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_unregistered_account
|
||||
msgid "Unregistered IAP account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Unregistered account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Unsubscribe me"
|
||||
msgstr "Бүртгэлээс хасагдах"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Unsupported %s for mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_res_users
|
||||
msgid "User"
|
||||
msgstr "Хэрэглэгч"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Valid SMS Recipients"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Вебсайтын зурвас"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Вебсайтын харилцааны түүх"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Winner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Write an appealing SMS Text Message, define recipients and track its results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_format
|
||||
msgid "Wrong Number Format"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.campaign,title:mass_mailing_sms.utm_campaign_0
|
||||
msgid "XMas Promo"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "e.g. Black Friday SMS coupon"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully removed from"
|
||||
msgstr ""
|
956
i18n/nb.po
Normal file
956
i18n/nb.po
Normal file
@ -0,0 +1,956 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * mass_mailing_sms
|
||||
#
|
||||
# Translators:
|
||||
# Mads Søndergaard, 2022
|
||||
# Jorunn D. Newth, 2022
|
||||
# Martin Trigaux, 2022
|
||||
# Marius Stedjan <marius@stedjan.com>, 2022
|
||||
# Lars Aam <lars.aam@vikenfiber.no>, 2022
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0beta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-16 13:48+0000\n"
|
||||
"PO-Revision-Date: 2022-09-22 05:53+0000\n"
|
||||
"Last-Translator: Lars Aam <lars.aam@vikenfiber.no>, 2022\n"
|
||||
"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n"
|
||||
"Language: nb\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"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid ""
|
||||
"+32 495 85 85 77\n"
|
||||
"+33 545 55 55 55"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "24H Stats of %(mailing_type)s \"%(mailing_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid ""
|
||||
"<br/>\n"
|
||||
" <span class=\"text-muted\">\n"
|
||||
" <i class=\"fa fa-phone\"/> Contacts\n"
|
||||
" </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"canceled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been canceled and will not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"failed_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message could not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"next_departure_text\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">This SMS marketing is scheduled for </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"scheduled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message are in queue and will be sent soon.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"sent_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<span widget=\"statinfo\">Open Recipient</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid "<span>Valid SMS Recipients</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears you don't have enough IAP credits. Click here to buy credits.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears your SMS account is not registered. Click here to set up your account.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This SMS could not be sent.</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This number appears to be invalid.</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "A/B Test"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_mailings_sms_count
|
||||
msgid "A/B Test Mailings SMS #"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "A/B Test: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Handling påkrevd"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Antall vedlegg"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Bounced"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Clicked"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "BOUNCED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.tag,name:mass_mailing_sms.mailing_tag_0
|
||||
msgid "Bioutifoul SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Blacklist through SMS Marketing unsubscribe (mailing ID: %s - model: %s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_blacklist
|
||||
msgid "Blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Blacklisted Phone Is Mobile"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.phone_blacklist_menu
|
||||
msgid "Blacklisted Phone Numbers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Blacklisted Phone is Phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Bounced (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "CLICKED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__utm_campaign_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Campaign"
|
||||
msgstr "Kampanje"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.menu_email_campaigns
|
||||
msgid "Campaigns"
|
||||
msgstr "Kampanjer"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Cancel"
|
||||
msgstr "Kanseller"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Carriage-return-separated list of phone numbers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Clicked (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_code
|
||||
msgid "Code"
|
||||
msgstr "Kode"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "Come back once some SMS Mailings are sent to check out aggregated results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_configuration
|
||||
msgid "Configuration"
|
||||
msgstr "Konfigurasjon"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "Create a Mailing List"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Create a SMS Marketing Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Create a mailing contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Opprettet av"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Opprettet"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Visningsnavn"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_duplicate
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliser"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#, python-format
|
||||
msgid "Email Marketing"
|
||||
msgstr "E-postmarkedsføring"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Exclude Blacklisted Phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__failure_type
|
||||
msgid "Failure type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Field used to store sanitized phone number. Helps speeding up searches and comparisons."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Følgere"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Følgere (partnere)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"For an Email, Subject your Recipients will see in their inbox.\n"
|
||||
" For an SMS Text Message, internal Title of the Message."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
msgid ""
|
||||
"For an email, the subject your recipients will see in their inbox.\n"
|
||||
"For an SMS, the internal title of the message."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__has_message
|
||||
msgid "Has Message"
|
||||
msgstr "Har melding"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__clicks_ratio
|
||||
msgid "Highest Click Rate"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Hvis haket av, vil nye meldinger kreve din oppmerksomhet."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Hvis haket av, har enkelte meldinger leveringsfeil."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "If the sanitized phone number is on the blacklist, the contact won't receive mass mailing sms anymore, from any list"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Immediately send the SMS Mailing instead of queuing up. Use at your own risk."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_allow_unsubscribe
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mass_sms_allow_unsubscribe
|
||||
msgid "Include opt-out link"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a mobile number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a phone number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_credit
|
||||
msgid "Insufficient Credit"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_insufficient_credit
|
||||
msgid "Insufficient IAP credits"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Insufficient credits"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Er følger"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Sist oppdatert av"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Sist oppdatert"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.link_tracker_menu
|
||||
msgid "Link Tracker"
|
||||
msgstr "Link-sporer"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__mailing_id
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mailing_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_contact
|
||||
msgid "Mailing Contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_list
|
||||
msgid "Mailing List"
|
||||
msgstr "E-postliste"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_contact_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_contact_menu_sms
|
||||
msgid "Mailing List Contacts"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_list_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_list_menu_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_contacts
|
||||
msgid "Mailing Lists"
|
||||
msgstr "E-postlister"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_trace
|
||||
msgid "Mailing Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__mailing_type
|
||||
msgid "Mailing Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Mailing contacts allow you to separate your marketing audience from your contact directory."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__manual
|
||||
msgid "Manual"
|
||||
msgstr "Manuell"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Marketing"
|
||||
msgstr "Markedsføring"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_mailing
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_id
|
||||
msgid "Mass Mailing"
|
||||
msgstr "Masseutsendelser"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_ids
|
||||
msgid "Mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Melding ved leveringsfeil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Meldinger"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_missing
|
||||
msgid "Missing Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile
|
||||
msgid "Mobile"
|
||||
msgstr "Mobil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_search_sms
|
||||
msgid "My SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "No data yet!"
|
||||
msgstr "Ingen data ennå"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "No need to import mailing lists, you can send SMS Text Messages to contacts saved in other Odoo apps."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_number
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Number"
|
||||
msgstr "Nummer"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Number %s not found"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Antall handlinger"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_count
|
||||
msgid "Number of Mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Antall feil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Antall meldinger som krever handling"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Antall meldinger med leveringsfeil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Number(s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "Open Recipient"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_optout
|
||||
msgid "Opted Out"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Options"
|
||||
msgstr "Alternativer"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_sms
|
||||
msgid "Outgoing SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "Phone Blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_mobile_search
|
||||
msgid "Phone/Mobile"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Please enter your phone number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "RECEIVED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__rating_ids
|
||||
msgid "Ratings"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Recipients"
|
||||
msgstr "Mottakere"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Report for %(expected)i %(mailing_type)s Sent"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_reporting
|
||||
msgid "Reporting"
|
||||
msgstr "Rapportering"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_mailing__mailing_type__sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__trace_type__sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_kanban
|
||||
msgid "SMS"
|
||||
msgstr "SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__body_plaintext
|
||||
msgid "SMS Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_list__contact_count_sms
|
||||
msgid "SMS Contacts"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "SMS Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "SMS Delivery error"
|
||||
msgstr "SMS Leveringsfeil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id_int
|
||||
msgid "SMS ID (tech)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_mailing_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_mass_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_root
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#, python-format
|
||||
msgid "SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "SMS Marketing Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "SMS Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_template_id
|
||||
msgid "SMS Template"
|
||||
msgstr "SMS-mal"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "SMS Text Message"
|
||||
msgstr "SMS-melding"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS Trace"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "SMS Traces"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__ab_testing_sms_winner_selection
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_sms_winner_selection
|
||||
msgid "SMS Winner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/sms_composer.py:0
|
||||
#, python-format
|
||||
msgid "STOP SMS: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Sanitized Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send"
|
||||
msgstr "Send"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Send Directly"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Send Now"
|
||||
msgstr "Send nå"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Send SMS"
|
||||
msgstr "Send SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_composer
|
||||
msgid "Send SMS Wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a Sample SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a sample SMS for testing purpose to the numbers below (carriage-return-separated list)."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_server
|
||||
msgid "Server Error"
|
||||
msgstr "Serverfeil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_trace_ids
|
||||
msgid "Statistics"
|
||||
msgstr "Statistikk"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_sms_test
|
||||
msgid "Test SMS Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_sms_test_action
|
||||
msgid "Test SMS Marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS could not be sent to %s:<br>%s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS marketing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS successfully sent to %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/utm.py:0
|
||||
#, python-format
|
||||
msgid "The UTM medium '%s' cannot be deleted as it is used in some main functional flows, such as the SMS Marketing."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "The following numbers are not correctly encoded: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "There was an error when trying to unsubscribe"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_form
|
||||
msgid "This phone number is blacklisted for SMS Marketing. Click to unblacklist."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients now. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Title"
|
||||
msgstr "Tittel"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Total Sent"
|
||||
msgstr "Sendt totalt"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__trace_type
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_campaign
|
||||
msgid "UTM Campaign"
|
||||
msgstr "UTM-kampanje"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_medium
|
||||
msgid "UTM Medium"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_acc
|
||||
msgid "Unregistered Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_unregistered_account
|
||||
msgid "Unregistered IAP account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Unregistered account"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Unsubscribe me"
|
||||
msgstr "Meld meg av"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Unsupported %s for mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_res_users
|
||||
msgid "User"
|
||||
msgstr "Bruker"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Valid SMS Recipients"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Meldinger fra nettsted"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr " Kommunikasjonshistorikk for nettsted"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Winner Selection"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Write an appealing SMS Text Message, define recipients and track its results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_format
|
||||
msgid "Wrong Number Format"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.campaign,title:mass_mailing_sms.utm_campaign_0
|
||||
msgid "XMas Promo"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "e.g. Black Friday SMS coupon"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully blacklisted"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully removed from"
|
||||
msgstr ""
|
1107
i18n/nl.po
Normal file
1107
i18n/nl.po
Normal file
File diff suppressed because it is too large
Load Diff
1092
i18n/pl.po
Normal file
1092
i18n/pl.po
Normal file
File diff suppressed because it is too large
Load Diff
1054
i18n/pt.po
Normal file
1054
i18n/pt.po
Normal file
File diff suppressed because it is too large
Load Diff
1114
i18n/pt_BR.po
Normal file
1114
i18n/pt_BR.po
Normal file
File diff suppressed because it is too large
Load Diff
969
i18n/ro.po
Normal file
969
i18n/ro.po
Normal file
@ -0,0 +1,969 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * mass_mailing_sms
|
||||
#
|
||||
# Translators:
|
||||
# Martin Trigaux, 2022
|
||||
# Foldi Robert <foldirobert@nexterp.ro>, 2022
|
||||
# Hongu Cosmin <cosmin513@gmail.com>, 2022
|
||||
# Cozmin Candea <office@terrabit.ro>, 2023
|
||||
# Dorin Hongu <dhongu@gmail.com>, 2023
|
||||
# Claudia Baisan, 2023
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0beta\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-16 13:48+0000\n"
|
||||
"PO-Revision-Date: 2022-09-22 05:53+0000\n"
|
||||
"Last-Translator: Claudia Baisan, 2023\n"
|
||||
"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n"
|
||||
"Language: ro\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid ""
|
||||
"+32 495 85 85 77\n"
|
||||
"+33 545 55 55 55"
|
||||
msgstr ""
|
||||
"+32 495 85 85 77\n"
|
||||
"+33 545 55 55 55"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "24H Stats of %(mailing_type)s \"%(mailing_name)s\""
|
||||
msgstr "24H Statistici de %(mailing_type)s \"%(mailing_name)s\""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid ""
|
||||
"<br/>\n"
|
||||
" <span class=\"text-muted\">\n"
|
||||
" <i class=\"fa fa-phone\"/> Contacts\n"
|
||||
" </span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"canceled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been canceled and will not be sent.</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"failed_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message could not be sent.</span>"
|
||||
msgstr "<span name=\"failed_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">Mesajul SMS nu a putut fi trimis.</span>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"next_departure_text\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">This SMS marketing is scheduled for </span>"
|
||||
msgstr "<span name=\"next_departure_text\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">Acest marketing prin SMS este programat pentru </span>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"scheduled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message are in queue and will be sent soon.</span>"
|
||||
msgstr "<span name=\"scheduled_text_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">Mesajele SMS sunt în așteptare și vor fi trimise în curând.</span>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "<span name=\"sent_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">SMS Text Message have been sent.</span>"
|
||||
msgstr "<span name=\"sent_sms\" attrs=\"{'invisible': [('mailing_type', '!=', 'sms')]}\">Mesajele SMS au fost trimise.</span>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<span widget=\"statinfo\">Open Recipient</span>"
|
||||
msgstr "<span widget=\"statinfo\">Deschide destinatarul</span>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_list_view_kanban
|
||||
msgid "<span>Valid SMS Recipients</span>"
|
||||
msgstr "<span>Destinatari SMS Valizi</span>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears you don't have enough IAP credits. Click here to buy credits.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
"<strong>\n"
|
||||
" Se pare că nu aveți credite suficiente IAP. Click aici pentru cumărare credite.\n"
|
||||
" </strong>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"<strong>\n"
|
||||
" It appears your SMS account is not registered. Click here to set up your account.\n"
|
||||
" </strong>"
|
||||
msgstr ""
|
||||
"<strong>\n"
|
||||
" Se pare că contul dvs. SMS nu este înregistrat. Faceți clic aici pentru a vă configura contul.\n"
|
||||
" </strong>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This SMS could not be sent.</strong>"
|
||||
msgstr "<strong>Acest SMS nu a putut fi trimis.</strong>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "<strong>This number appears to be invalid.</strong>"
|
||||
msgstr "<strong>Acest număr pare să fie nevalid.</strong>"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "A/B Test"
|
||||
msgstr "Test A/B"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_mailings_sms_count
|
||||
msgid "A/B Test Mailings SMS #"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "A/B Test: %s"
|
||||
msgstr "Test A/B: %s"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Intervenție necesară"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Număr atașamente"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Bounced"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Average of Clicked"
|
||||
msgstr "Media de clicuri"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "BOUNCED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.tag,name:mass_mailing_sms.mailing_tag_0
|
||||
msgid "Bioutifoul SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Blacklist through SMS Marketing unsubscribe (mailing ID: %s - model: %s)"
|
||||
msgstr "Listă neagră prin dezabonare prin SMS Marketing (ID mailing%s - model: %s)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_blacklist
|
||||
msgid "Blacklisted"
|
||||
msgstr "În lista neagră"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Blacklisted Phone Is Mobile"
|
||||
msgstr "Telefonul din lista neagră este mobil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.phone_blacklist_menu
|
||||
msgid "Blacklisted Phone Numbers"
|
||||
msgstr "Numere de telefon listate la negru"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Blacklisted Phone is Phone"
|
||||
msgstr "Telefonul pe lista neagră este telefon"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Bounced (%)"
|
||||
msgstr "Sărit (%)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "CLICKED (%i)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__utm_campaign_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Campaign"
|
||||
msgstr "Campanie"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.menu_email_campaigns
|
||||
msgid "Campaigns"
|
||||
msgstr "Campanii"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Cancel"
|
||||
msgstr "Anulează"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Carriage-return-separated list of phone numbers"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Clicked (%)"
|
||||
msgstr "Clicked (%)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_code
|
||||
msgid "Code"
|
||||
msgstr "Cod"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "Come back once some SMS Mailings are sent to check out aggregated results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_configuration
|
||||
msgid "Configuration"
|
||||
msgstr "Configurare"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "Create a Mailing List"
|
||||
msgstr "Creați o listă de corespondență"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Create a SMS Marketing Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Create a mailing contact"
|
||||
msgstr "Creați un contact de corespondență"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Creat de"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Creat în"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Date"
|
||||
msgstr "Dată"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nume afișat"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_duplicate
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicare"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#, python-format
|
||||
msgid "Email Marketing"
|
||||
msgstr "Marketing E-mail"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Exclude Blacklisted Phone"
|
||||
msgstr "Excludeți telefonul pe lista neagră"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__failure_type
|
||||
msgid "Failure type"
|
||||
msgstr "Tip Eșec"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Field used to store sanitized phone number. Helps speeding up searches and comparisons."
|
||||
msgstr "Câmp folosit pentru a stoca numărul de telefon . Ajută la accelerarea căutărilor și a comparațiilor."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Persoane interesate"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Urmăritori (Parteneri)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid ""
|
||||
"For an Email, Subject your Recipients will see in their inbox.\n"
|
||||
" For an SMS Text Message, internal Title of the Message."
|
||||
msgstr ""
|
||||
"Pentru un e-mail, Subiecți Destinatarii dvs. vor vedea în căsuța de e-mail.\n"
|
||||
" Pentru un mesaj text SMS, titlul intern al mesajului."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
msgid ""
|
||||
"For an email, the subject your recipients will see in their inbox.\n"
|
||||
"For an SMS, the internal title of the message."
|
||||
msgstr ""
|
||||
"Pentru un e-mail, subiectul pe care îl vor vedea destinatarii dvs. în căsuța de e-mail.\n"
|
||||
"Pentru un SMS, titlul intern al mesajului."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__has_message
|
||||
msgid "Has Message"
|
||||
msgstr "Are mesaj"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__clicks_ratio
|
||||
msgid "Highest Click Rate"
|
||||
msgstr "Cea mai mare rata de clicuri"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Dacă este selectat, mesajele noi necesită atenția dumneavoastră."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Dacă este bifată, unele mesaje au o eroare de livrare."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "If the sanitized phone number is on the blacklist, the contact won't receive mass mailing sms anymore, from any list"
|
||||
msgstr "Dacă numărul de telefon dezinfectat se află pe lista neagră, persoana de contact nu va mai primi mesaje prin e-mail în masă, din nicio listă"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Immediately send the SMS Mailing instead of queuing up. Use at your own risk."
|
||||
msgstr "Trimiteți imediat mesajul SMS în loc să faceți coada. Folosiți pe propria răspundere."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_allow_unsubscribe
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mass_sms_allow_unsubscribe
|
||||
msgid "Include opt-out link"
|
||||
msgstr "Includeți un link de renunțare"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__mobile_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a mobile number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr "Indică dacă un număr de telefon dezinfectat este un număr de mobil. Ajută la diferențierea numărului care este pe lista neagră când există atât un câmp de mobil și telefon într-un model."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__phone_blacklisted
|
||||
msgid "Indicates if a blacklisted sanitized phone number is a phone number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model."
|
||||
msgstr "Indică dacă un număr de telefon dezinfectat este un număr de telefon. Ajută la diferențierea numărului care este pe lista neagră când există atât un câmp de mobil și telefon într-un model."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_credit
|
||||
msgid "Insufficient Credit"
|
||||
msgstr "Credit insuficient"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_insufficient_credit
|
||||
msgid "Insufficient IAP credits"
|
||||
msgstr "Credite IAP insuficiente"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Insufficient credits"
|
||||
msgstr "Credite insuficiente"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Este urmăritor"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Ultima actualizare făcută de"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Ultima actualizare pe"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.link_tracker_menu
|
||||
msgid "Link Tracker"
|
||||
msgstr "Urmărire Link"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__mailing_id
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_composer__mailing_id
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Mailing"
|
||||
msgstr "Expediere"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_contact
|
||||
msgid "Mailing Contact"
|
||||
msgstr "Contact Mailing"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_list
|
||||
msgid "Mailing List"
|
||||
msgstr "Listă de discuții"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_contact_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_contact_menu_sms
|
||||
msgid "Mailing List Contacts"
|
||||
msgstr "Persoane de contact cu lista de corespondență"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_list_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mailing_list_menu_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_contacts
|
||||
msgid "Mailing Lists"
|
||||
msgstr "Liste de e-mail"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_trace
|
||||
msgid "Mailing Statistics"
|
||||
msgstr "Statistici de Mailing"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__mailing_type
|
||||
msgid "Mailing Type"
|
||||
msgstr "Tip Mailing"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_contact_action_sms
|
||||
msgid "Mailing contacts allow you to separate your marketing audience from your contact directory."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__utm_campaign__ab_testing_sms_winner_selection__manual
|
||||
msgid "Manual"
|
||||
msgstr "Manual"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Marketing"
|
||||
msgstr "Marketing"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_mailing
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_id
|
||||
msgid "Mass Mailing"
|
||||
msgstr "Emailuri în masă"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_ids
|
||||
msgid "Mass SMS"
|
||||
msgstr "SMS în masă"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Eroare livrare mesaj"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Mesaje"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_missing
|
||||
msgid "Missing Number"
|
||||
msgstr "Număr lipsă"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__mobile
|
||||
msgid "Mobile"
|
||||
msgstr "Mobil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_search_sms
|
||||
msgid "My SMS Marketing"
|
||||
msgstr "Mesajul meu de Marketing"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "No data yet!"
|
||||
msgstr "Nu există date încă!"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_list_action_sms
|
||||
msgid "No need to import mailing lists, you can send SMS Text Messages to contacts saved in other Odoo apps."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_number
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Number"
|
||||
msgstr "Număr"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/controllers/main.py:0
|
||||
#, python-format
|
||||
msgid "Number %s not found"
|
||||
msgstr "Numărul %s nu a fost găsit"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Număr de acțiuni"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__mailing_sms_count
|
||||
msgid "Number of Mass SMS"
|
||||
msgstr "Nr. de SMS in masă"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Numărul de erori"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_needaction_counter
|
||||
msgid "Number of messages which requires an action"
|
||||
msgstr "Număr de mesaje ce necesită intervenție"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__message_has_error_counter
|
||||
msgid "Number of messages with delivery error"
|
||||
msgstr "Numărul de mesaje cu eroare de livrare"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_sms_test__numbers
|
||||
msgid "Number(s)"
|
||||
msgstr "Număr(e)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "Open Recipient"
|
||||
msgstr "Deschide destinatar"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_optout
|
||||
msgid "Opted Out"
|
||||
msgstr "Optat pentru a nu primi"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Options"
|
||||
msgstr "Opțiuni"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_sms
|
||||
msgid "Outgoing SMS"
|
||||
msgstr " Ieșiri SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized_blacklisted
|
||||
msgid "Phone Blacklisted"
|
||||
msgstr "Telefon pe lista neagră"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_mobile_search
|
||||
msgid "Phone/Mobile"
|
||||
msgstr "Telefon/Mobil"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Please enter your phone number"
|
||||
msgstr "Vă rugăm să introduceți numărul dvs. de telefon"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "RECEIVED (%i)"
|
||||
msgstr "PRIMIT (%i)"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__rating_ids
|
||||
msgid "Ratings"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Recipients"
|
||||
msgstr "Destinatari"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Report for %(expected)i %(mailing_type)s Sent"
|
||||
msgstr "Raport pentru %(expected)i %(mailing_type)s Trimis"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_reporting
|
||||
msgid "Reporting"
|
||||
msgstr "Raportare"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_mailing__mailing_type__sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__trace_type__sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_kanban
|
||||
msgid "SMS"
|
||||
msgstr "SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__body_plaintext
|
||||
msgid "SMS Body"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_list__contact_count_sms
|
||||
msgid "SMS Contacts"
|
||||
msgstr "Contacte SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "SMS Content"
|
||||
msgstr "Conținut SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__message_has_sms_error
|
||||
msgid "SMS Delivery error"
|
||||
msgstr "Eroare livrare SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__sms_sms_id_int
|
||||
msgid "SMS ID (tech)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/res_users.py:0
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_mailing_action_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_mass_sms
|
||||
#: model:ir.ui.menu,name:mass_mailing_sms.mass_mailing_sms_menu_root
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#, python-format
|
||||
msgid "SMS Marketing"
|
||||
msgstr "SMS Marketing"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_trace_report_action_sms
|
||||
msgid "SMS Marketing Analysis"
|
||||
msgstr "SMS Analiză Marketing"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "SMS Subscription"
|
||||
msgstr "Abonament SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_template_id
|
||||
msgid "SMS Template"
|
||||
msgstr "Șablon SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "SMS Text Message"
|
||||
msgstr "Mesaj text SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "SMS Trace"
|
||||
msgstr "Urmărire SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_tree_sms
|
||||
msgid "SMS Traces"
|
||||
msgstr "Urmăriri SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__ab_testing_sms_winner_selection
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_utm_campaign__ab_testing_sms_winner_selection
|
||||
msgid "SMS Winner Selection"
|
||||
msgstr "Selectarea câștigătorului SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/sms_composer.py:0
|
||||
#, python-format
|
||||
msgid "STOP SMS: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__phone_sanitized
|
||||
msgid "Sanitized Number"
|
||||
msgstr "Număr sancționat"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send"
|
||||
msgstr "Trimite"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_force_send
|
||||
msgid "Send Directly"
|
||||
msgstr "Trimite direct"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Send Now"
|
||||
msgstr "Trimite acum"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Send SMS"
|
||||
msgstr "Trimite SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_sms_composer
|
||||
msgid "Send SMS Wizard"
|
||||
msgstr "Trimite SMS Wizard"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a Sample SMS"
|
||||
msgstr "Trimite un SMS de probă"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_sms_test_view_form
|
||||
msgid "Send a sample SMS for testing purpose to the numbers below (carriage-return-separated list)."
|
||||
msgstr "Trimiteți un eșantion de SMS în scopul testării la numerele de mai jos (listă separată transport-returnare)."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_server
|
||||
msgid "Server Error"
|
||||
msgstr "Eroare server"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_sms_sms__mailing_trace_ids
|
||||
msgid "Statistics"
|
||||
msgstr "Statistica"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_trace_view_form_sms
|
||||
msgid "Status"
|
||||
msgstr "Stare"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_mailing_sms_test
|
||||
msgid "Test SMS Mailing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.actions.act_window,name:mass_mailing_sms.mailing_sms_test_action
|
||||
msgid "Test SMS Marketing"
|
||||
msgstr "Testarea marketingului prin SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS could not be sent to %s:<br>%s"
|
||||
msgstr "Testul SMS nu a putut fi trimis la %s:<br>%s"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS marketing"
|
||||
msgstr "Testează marketingul prin SMS"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "Test SMS successfully sent to %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/utm.py:0
|
||||
#, python-format
|
||||
msgid "The UTM medium '%s' cannot be deleted as it is used in some main functional flows, such as the SMS Marketing."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/wizard/mailing_sms_test.py:0
|
||||
#, python-format
|
||||
msgid "The following numbers are not correctly encoded: %s"
|
||||
msgstr "Următoarele numere nu sunt codate corect: %s"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "There was an error when trying to unsubscribe"
|
||||
msgstr "A apărut o eroare la încercarea de dezabonare"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_form
|
||||
msgid "This phone number is blacklisted for SMS Marketing. Click to unblacklist."
|
||||
msgstr "Acest număr de telefon este inclus pe lista neagră pentru SMS Marketing. Faceți clic pentru a debloca lista."
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients now. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "This will send SMS to all recipients. Do you still want to proceed?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_subject
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Title"
|
||||
msgstr "Titlu"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_tree_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.utm_campaign_view_form
|
||||
msgid "Total Sent"
|
||||
msgstr "Trimise total"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_trace__trace_type
|
||||
msgid "Type"
|
||||
msgstr "Tip"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_campaign
|
||||
msgid "UTM Campaign"
|
||||
msgstr "Campanie UTM"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_utm_medium
|
||||
msgid "UTM Medium"
|
||||
msgstr "Mediu UTM"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_acc
|
||||
msgid "Unregistered Account"
|
||||
msgstr "Cont neînregistrat"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_mailing__sms_has_unregistered_account
|
||||
msgid "Unregistered IAP account"
|
||||
msgstr "Cont IAP neînregistrat"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_kanban_sms
|
||||
msgid "Unregistered account"
|
||||
msgstr "Cont neînregistrat"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_main
|
||||
msgid "Unsubscribe me"
|
||||
msgstr "Dezabonați-mă"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#. odoo-python
|
||||
#: code:addons/mass_mailing_sms/models/mailing_mailing.py:0
|
||||
#, python-format
|
||||
msgid "Unsupported %s for mass SMS"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model,name:mass_mailing_sms.model_res_users
|
||||
msgid "User"
|
||||
msgstr "Operator"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_contact_view_search
|
||||
msgid "Valid SMS Recipients"
|
||||
msgstr "Destinatari SMS valizi"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,field_description:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Mesaje Website"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields,help:mass_mailing_sms.field_mailing_contact__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Istoric comunicare website"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "Winner Selection"
|
||||
msgstr "Selectarea câștigătorului"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.actions.act_window,help:mass_mailing_sms.mailing_mailing_action_sms
|
||||
msgid "Write an appealing SMS Text Message, define recipients and track its results."
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:ir.model.fields.selection,name:mass_mailing_sms.selection__mailing_trace__failure_type__sms_number_format
|
||||
msgid "Wrong Number Format"
|
||||
msgstr "Format greșit de număr"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model:utm.campaign,title:mass_mailing_sms.utm_campaign_0
|
||||
msgid "XMas Promo"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.mailing_mailing_view_form_sms
|
||||
msgid "e.g. Black Friday SMS coupon"
|
||||
msgstr ""
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully blacklisted"
|
||||
msgstr "a fost înscris cu succes pe lista neagră"
|
||||
|
||||
#. module: mass_mailing_sms
|
||||
#: model_terms:ir.ui.view,arch_db:mass_mailing_sms.blacklist_number
|
||||
msgid "has been successfully removed from"
|
||||
msgstr "a fost eliminat cu succes din"
|
1116
i18n/ru.po
Normal file
1116
i18n/ru.po
Normal file
File diff suppressed because it is too large
Load Diff
1066
i18n/sk.po
Normal file
1066
i18n/sk.po
Normal file
File diff suppressed because it is too large
Load Diff
1073
i18n/sl.po
Normal file
1073
i18n/sl.po
Normal file
File diff suppressed because it is too large
Load Diff
1092
i18n/sr.po
Normal file
1092
i18n/sr.po
Normal file
File diff suppressed because it is too large
Load Diff
1079
i18n/sv.po
Normal file
1079
i18n/sv.po
Normal file
File diff suppressed because it is too large
Load Diff
1101
i18n/th.po
Normal file
1101
i18n/th.po
Normal file
File diff suppressed because it is too large
Load Diff
1108
i18n/tr.po
Normal file
1108
i18n/tr.po
Normal file
File diff suppressed because it is too large
Load Diff
1096
i18n/uk.po
Normal file
1096
i18n/uk.po
Normal file
File diff suppressed because it is too large
Load Diff
1075
i18n/vi.po
Normal file
1075
i18n/vi.po
Normal file
File diff suppressed because it is too large
Load Diff
1083
i18n/zh_CN.po
Normal file
1083
i18n/zh_CN.po
Normal file
File diff suppressed because it is too large
Load Diff
1079
i18n/zh_TW.po
Normal file
1079
i18n/zh_TW.po
Normal file
File diff suppressed because it is too large
Load Diff
11
models/__init__.py
Normal file
11
models/__init__.py
Normal file
@ -0,0 +1,11 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import mailing_contact
|
||||
from . import mailing_list
|
||||
from . import mailing_mailing
|
||||
from . import mailing_trace
|
||||
from . import res_users
|
||||
from . import sms_sms
|
||||
from . import sms_tracker
|
||||
from . import utm
|
11
models/mailing_contact.py
Normal file
11
models/mailing_contact.py
Normal file
@ -0,0 +1,11 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class MailingContact(models.Model):
|
||||
_name = 'mailing.contact'
|
||||
_inherit = ['mailing.contact', 'mail.thread.phone']
|
||||
|
||||
mobile = fields.Char(string='Mobile')
|
81
models/mailing_list.py
Normal file
81
models/mailing_list.py
Normal file
@ -0,0 +1,81 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class MailingList(models.Model):
|
||||
_inherit = 'mailing.list'
|
||||
|
||||
contact_count_sms = fields.Integer(compute="_compute_mailing_list_statistics", string="SMS Contacts")
|
||||
|
||||
def action_view_mailings(self):
|
||||
if self.env.context.get('mailing_sms'):
|
||||
action = self.env["ir.actions.actions"]._for_xml_id('mass_mailing_sms.mailing_mailing_action_sms')
|
||||
action['domain'] = [('id', 'in', self.mailing_ids.ids)]
|
||||
action['context'] = {
|
||||
'default_mailing_type': 'sms',
|
||||
'default_contact_list_ids': self.ids,
|
||||
'mailing_sms': True
|
||||
}
|
||||
return action
|
||||
else:
|
||||
return super(MailingList, self).action_view_mailings()
|
||||
|
||||
def action_view_contacts_sms(self):
|
||||
action = self.action_view_contacts()
|
||||
action['context'] = dict(action.get('context', {}), search_default_filter_valid_sms_recipient=1)
|
||||
return action
|
||||
|
||||
def action_send_mailing_sms(self):
|
||||
view = self.env.ref('mass_mailing_sms.mailing_mailing_view_form_sms')
|
||||
action = self.env["ir.actions.actions"]._for_xml_id('mass_mailing_sms.mailing_mailing_action_sms')
|
||||
action.update({
|
||||
'context': {
|
||||
'default_contact_list_ids': self.ids,
|
||||
'default_model_id': self.env['ir.model']._get_id('mailing.list'),
|
||||
'default_mailing_type': 'sms',
|
||||
},
|
||||
'target': 'current',
|
||||
'view_type': 'form',
|
||||
'views': [(view.id, 'form')],
|
||||
})
|
||||
|
||||
return action
|
||||
|
||||
def _get_contact_statistics_fields(self):
|
||||
""" See super method docstring for more info.
|
||||
Adds:
|
||||
- contact_count_sms: all valid sms
|
||||
- contact_count_blacklisted: override the dict entry to add SMS blacklist condition """
|
||||
|
||||
values = super(MailingList, self)._get_contact_statistics_fields()
|
||||
values.update({
|
||||
'contact_count_sms': '''
|
||||
SUM(CASE WHEN
|
||||
(c.phone_sanitized IS NOT NULL
|
||||
AND COALESCE(r.opt_out,FALSE) = FALSE
|
||||
AND bl_sms.id IS NULL)
|
||||
THEN 1 ELSE 0 END) AS contact_count_sms''',
|
||||
'contact_count_blacklisted': '''
|
||||
SUM(CASE WHEN (bl.id IS NOT NULL OR bl_sms.id IS NOT NULL)
|
||||
THEN 1 ELSE 0 END) AS contact_count_blacklisted'''
|
||||
})
|
||||
return values
|
||||
|
||||
def _get_contact_statistics_joins(self):
|
||||
return super(MailingList, self)._get_contact_statistics_joins() + '''
|
||||
LEFT JOIN phone_blacklist bl_sms ON c.phone_sanitized = bl_sms.number and bl_sms.active
|
||||
'''
|
||||
|
||||
def _mailing_get_opt_out_list_sms(self, mailing):
|
||||
""" Check subscription on all involved mailing lists. If user is opt_out
|
||||
on one list but not on another, one opted in and the other one opted out,
|
||||
send mailing anyway.
|
||||
|
||||
:return list: opt-outed record IDs
|
||||
"""
|
||||
subscriptions = self.subscription_ids if self else mailing.contact_list_ids.subscription_ids
|
||||
opt_out_contacts = subscriptions.filtered(lambda sub: sub.opt_out).mapped('contact_id')
|
||||
opt_in_contacts = subscriptions.filtered(lambda sub: not sub.opt_out).mapped('contact_id')
|
||||
return list(set(c.id for c in opt_out_contacts if c not in opt_in_contacts))
|
360
models/mailing_mailing.py
Normal file
360
models/mailing_mailing.py
Normal file
@ -0,0 +1,360 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import logging
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.osv import expression
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Mailing(models.Model):
|
||||
_inherit = 'mailing.mailing'
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
res = super(Mailing, self).default_get(fields)
|
||||
if fields is not None and 'keep_archives' in fields and res.get('mailing_type') == 'sms':
|
||||
res['keep_archives'] = True
|
||||
return res
|
||||
|
||||
# mailing options
|
||||
mailing_type = fields.Selection(selection_add=[
|
||||
('sms', 'SMS')
|
||||
], ondelete={'sms': 'set default'})
|
||||
|
||||
# 'sms_subject' added to override 'subject' field (string attribute should be labelled "Title" when mailing_type == 'sms').
|
||||
# 'sms_subject' should have the same helper as 'subject' field when 'mass_mailing_sms' installed.
|
||||
# otherwise 'sms_subject' will get the old helper from 'mass_mailing' module.
|
||||
# overriding 'subject' field helper in this model is not working, since the helper will keep the new value
|
||||
# even when 'mass_mailing_sms' removed (see 'mailing_mailing_view_form_sms' for more details).
|
||||
sms_subject = fields.Char(
|
||||
'Title', related='subject',
|
||||
readonly=False, translate=False,
|
||||
help='For an email, the subject your recipients will see in their inbox.\n'
|
||||
'For an SMS, the internal title of the message.')
|
||||
# sms options
|
||||
body_plaintext = fields.Text(
|
||||
'SMS Body', compute='_compute_body_plaintext',
|
||||
store=True, readonly=False)
|
||||
sms_template_id = fields.Many2one('sms.template', string='SMS Template', ondelete='set null')
|
||||
sms_has_insufficient_credit = fields.Boolean(
|
||||
'Insufficient IAP credits', compute='_compute_sms_has_iap_failure') # used to propose buying IAP credits
|
||||
sms_has_unregistered_account = fields.Boolean(
|
||||
'Unregistered IAP account', compute='_compute_sms_has_iap_failure') # used to propose to Register the SMS IAP account
|
||||
sms_force_send = fields.Boolean(
|
||||
'Send Directly', help='Immediately send the SMS Mailing instead of queuing up. Use at your own risk.')
|
||||
# opt_out_link
|
||||
sms_allow_unsubscribe = fields.Boolean('Include opt-out link', default=False)
|
||||
# A/B Testing
|
||||
ab_testing_sms_winner_selection = fields.Selection(
|
||||
related="campaign_id.ab_testing_sms_winner_selection",
|
||||
default="clicks_ratio", readonly=False, copy=True)
|
||||
ab_testing_mailings_sms_count = fields.Integer(related="campaign_id.ab_testing_mailings_sms_count")
|
||||
|
||||
@api.depends('mailing_type')
|
||||
def _compute_medium_id(self):
|
||||
super(Mailing, self)._compute_medium_id()
|
||||
for mailing in self:
|
||||
if mailing.mailing_type == 'sms' and (not mailing.medium_id or mailing.medium_id == self.env.ref('utm.utm_medium_email')):
|
||||
mailing.medium_id = self.env.ref('mass_mailing_sms.utm_medium_sms').id
|
||||
elif mailing.mailing_type == 'mail' and (not mailing.medium_id or mailing.medium_id == self.env.ref('mass_mailing_sms.utm_medium_sms')):
|
||||
mailing.medium_id = self.env.ref('utm.utm_medium_email').id
|
||||
|
||||
@api.depends('sms_template_id', 'mailing_type')
|
||||
def _compute_body_plaintext(self):
|
||||
for mailing in self:
|
||||
if mailing.mailing_type == 'sms' and mailing.sms_template_id:
|
||||
mailing.body_plaintext = mailing.sms_template_id.body
|
||||
|
||||
@api.depends('mailing_trace_ids.failure_type')
|
||||
def _compute_sms_has_iap_failure(self):
|
||||
self.sms_has_insufficient_credit = self.sms_has_unregistered_account = False
|
||||
traces = self.env['mailing.trace'].sudo()._read_group([
|
||||
('mass_mailing_id', 'in', self.ids),
|
||||
('trace_type', '=', 'sms'),
|
||||
('failure_type', 'in', ['sms_acc', 'sms_credit'])
|
||||
], ['mass_mailing_id', 'failure_type'])
|
||||
|
||||
for mass_mailing, failure_type in traces:
|
||||
if failure_type == 'sms_credit':
|
||||
mass_mailing.sms_has_insufficient_credit = True
|
||||
elif failure_type == 'sms_acc':
|
||||
mass_mailing.sms_has_unregistered_account = True
|
||||
|
||||
# --------------------------------------------------
|
||||
# ORM OVERRIDES
|
||||
# --------------------------------------------------
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
for vals in vals_list:
|
||||
# Get subject from "sms_subject" field when SMS installed (used to
|
||||
# build the name of record in the super 'create' method)
|
||||
if vals.get('mailing_type') == 'sms' and vals.get('sms_subject'):
|
||||
vals['subject'] = vals['sms_subject']
|
||||
return super().create(vals_list)
|
||||
|
||||
# --------------------------------------------------
|
||||
# BUSINESS / VIEWS ACTIONS
|
||||
# --------------------------------------------------
|
||||
|
||||
def action_retry_failed(self):
|
||||
mass_sms = self.filtered(lambda m: m.mailing_type == 'sms')
|
||||
if mass_sms:
|
||||
mass_sms.action_retry_failed_sms()
|
||||
return super(Mailing, self - mass_sms).action_retry_failed()
|
||||
|
||||
def action_retry_failed_sms(self):
|
||||
failed_sms = self.env['sms.sms'].sudo().search([
|
||||
('mailing_id', 'in', self.ids),
|
||||
('state', '=', 'error')
|
||||
])
|
||||
failed_sms.mapped('mailing_trace_ids').unlink()
|
||||
failed_sms.unlink()
|
||||
self.action_put_in_queue()
|
||||
|
||||
def action_test(self):
|
||||
if self.mailing_type == 'sms':
|
||||
ctx = dict(self.env.context, default_mailing_id=self.id, dialog_size='medium')
|
||||
return {
|
||||
'name': _('Test Mailing'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'form',
|
||||
'res_model': 'mailing.sms.test',
|
||||
'target': 'new',
|
||||
'context': ctx,
|
||||
}
|
||||
return super(Mailing, self).action_test()
|
||||
|
||||
def _action_view_traces_filtered(self, view_filter):
|
||||
action = super(Mailing, self)._action_view_traces_filtered(view_filter)
|
||||
if self.mailing_type == 'sms':
|
||||
action['views'] = [(self.env.ref('mass_mailing_sms.mailing_trace_view_tree_sms').id, 'tree'),
|
||||
(self.env.ref('mass_mailing_sms.mailing_trace_view_form_sms').id, 'form')]
|
||||
return action
|
||||
|
||||
def action_buy_sms_credits(self):
|
||||
url = self.env['iap.account'].get_credits_url(service_name='sms')
|
||||
return {
|
||||
'type': 'ir.actions.act_url',
|
||||
'url': url,
|
||||
}
|
||||
|
||||
# --------------------------------------------------
|
||||
# SMS SEND
|
||||
# --------------------------------------------------
|
||||
|
||||
def _get_opt_out_list_sms(self):
|
||||
""" Give list of opt-outed records, depending on specific model-based
|
||||
computation if available.
|
||||
|
||||
:return list: opt-outed record IDs
|
||||
"""
|
||||
self.ensure_one()
|
||||
opt_out = []
|
||||
target = self.env[self.mailing_model_real]
|
||||
if hasattr(self.env[self.mailing_model_name], '_mailing_get_opt_out_list_sms'):
|
||||
opt_out = self.env[self.mailing_model_name]._mailing_get_opt_out_list_sms(self)
|
||||
_logger.info("Mass SMS %s targets %s: optout: %s contacts", self, target._name, len(opt_out))
|
||||
else:
|
||||
_logger.info("Mass SMS %s targets %s: no opt out list available", self, target._name)
|
||||
return opt_out
|
||||
|
||||
def _get_seen_list_sms(self):
|
||||
"""Returns a set of emails already targeted by current mailing/campaign (no duplicates)"""
|
||||
self.ensure_one()
|
||||
target = self.env[self.mailing_model_real]
|
||||
|
||||
partner_fields = []
|
||||
if isinstance(target, self.pool['mail.thread.phone']):
|
||||
phone_fields = ['phone_sanitized']
|
||||
else:
|
||||
phone_fields = [
|
||||
fname for fname in target._phone_get_number_fields()
|
||||
if fname in target._fields and target._fields[fname].store
|
||||
]
|
||||
partner_fields = target._mail_get_partner_fields()
|
||||
partner_field = next(
|
||||
(fname for fname in partner_fields if target._fields[fname].store and target._fields[fname].type == 'many2one'),
|
||||
False
|
||||
)
|
||||
if not phone_fields and not partner_field:
|
||||
raise UserError(_("Unsupported %s for mass SMS", self.mailing_model_id.name))
|
||||
|
||||
query = """
|
||||
SELECT %(select_query)s
|
||||
FROM mailing_trace trace
|
||||
JOIN %(target_table)s target ON (trace.res_id = target.id)
|
||||
%(join_add_query)s
|
||||
WHERE (%(where_query)s)
|
||||
AND trace.mass_mailing_id = %%(mailing_id)s
|
||||
AND trace.model = %%(target_model)s
|
||||
"""
|
||||
if phone_fields:
|
||||
# phone fields are checked on target mailed model
|
||||
select_query = 'target.id, ' + ', '.join('target.%s' % fname for fname in phone_fields)
|
||||
where_query = ' OR '.join('target.%s IS NOT NULL' % fname for fname in phone_fields)
|
||||
join_add_query = ''
|
||||
else:
|
||||
# phone fields are checked on res.partner model
|
||||
partner_phone_fields = ['mobile', 'phone']
|
||||
select_query = 'target.id, ' + ', '.join('partner.%s' % fname for fname in partner_phone_fields)
|
||||
where_query = ' OR '.join('partner.%s IS NOT NULL' % fname for fname in partner_phone_fields)
|
||||
join_add_query = 'JOIN res_partner partner ON (target.%s = partner.id)' % partner_field
|
||||
|
||||
query = query % {
|
||||
'select_query': select_query,
|
||||
'where_query': where_query,
|
||||
'target_table': target._table,
|
||||
'join_add_query': join_add_query,
|
||||
}
|
||||
params = {'mailing_id': self.id, 'target_model': self.mailing_model_real}
|
||||
self._cr.execute(query, params)
|
||||
query_res = self._cr.fetchall()
|
||||
seen_list = set(number for item in query_res for number in item[1:] if number)
|
||||
seen_ids = set(item[0] for item in query_res)
|
||||
_logger.info("Mass SMS %s targets %s: already reached %s SMS", self, target._name, len(seen_list))
|
||||
return list(seen_ids), list(seen_list)
|
||||
|
||||
def _send_sms_get_composer_values(self, res_ids):
|
||||
return {
|
||||
# content
|
||||
'body': self.body_plaintext,
|
||||
'template_id': self.sms_template_id.id,
|
||||
'res_model': self.mailing_model_real,
|
||||
'res_ids': repr(res_ids),
|
||||
# options
|
||||
'composition_mode': 'mass',
|
||||
'mailing_id': self.id,
|
||||
'mass_keep_log': self.keep_archives,
|
||||
'mass_force_send': self.sms_force_send,
|
||||
'mass_sms_allow_unsubscribe': self.sms_allow_unsubscribe,
|
||||
}
|
||||
|
||||
def action_send_mail(self, res_ids=None):
|
||||
mass_sms = self.filtered(lambda m: m.mailing_type == 'sms')
|
||||
if mass_sms:
|
||||
mass_sms.action_send_sms(res_ids=res_ids)
|
||||
return super(Mailing, self - mass_sms).action_send_mail(res_ids=res_ids)
|
||||
|
||||
def action_send_sms(self, res_ids=None):
|
||||
for mailing in self:
|
||||
if not res_ids:
|
||||
res_ids = mailing._get_remaining_recipients()
|
||||
if res_ids:
|
||||
composer = self.env['sms.composer'].with_context(active_id=False).create(mailing._send_sms_get_composer_values(res_ids))
|
||||
composer._action_send_sms()
|
||||
return True
|
||||
|
||||
# ------------------------------------------------------
|
||||
# STATISTICS
|
||||
# ------------------------------------------------------
|
||||
|
||||
def _prepare_statistics_email_values(self):
|
||||
"""Return some statistics that will be displayed in the mailing statistics email.
|
||||
|
||||
Each item in the returned list will be displayed as a table, with a title and
|
||||
1, 2 or 3 columns.
|
||||
"""
|
||||
values = super(Mailing, self)._prepare_statistics_email_values()
|
||||
if self.mailing_type == 'sms':
|
||||
mailing_type = self._get_pretty_mailing_type()
|
||||
values['title'] = _('24H Stats of %(mailing_type)s "%(mailing_name)s"',
|
||||
mailing_type=mailing_type,
|
||||
mailing_name=self.subject
|
||||
)
|
||||
values['kpi_data'][0] = {
|
||||
'kpi_fullname': _('Report for %(expected)i %(mailing_type)s Sent',
|
||||
expected=self.expected,
|
||||
mailing_type=mailing_type
|
||||
),
|
||||
'kpi_col1': {
|
||||
'value': f'{self.received_ratio}%',
|
||||
'col_subtitle': _('RECEIVED (%i)', self.delivered),
|
||||
},
|
||||
'kpi_col2': {
|
||||
'value': f'{self.clicks_ratio}%',
|
||||
'col_subtitle': _('CLICKED (%i)', self.clicked),
|
||||
},
|
||||
'kpi_col3': {
|
||||
'value': f'{self.bounced_ratio}%',
|
||||
'col_subtitle': _('BOUNCED (%i)', self.bounced),
|
||||
},
|
||||
'kpi_action': None,
|
||||
'kpi_name': self.mailing_type,
|
||||
}
|
||||
return values
|
||||
|
||||
def _get_pretty_mailing_type(self):
|
||||
if self.mailing_type == 'sms':
|
||||
return _('SMS Text Message')
|
||||
return super(Mailing, self)._get_pretty_mailing_type()
|
||||
|
||||
# --------------------------------------------------
|
||||
# TOOLS
|
||||
# --------------------------------------------------
|
||||
|
||||
def _get_default_mailing_domain(self):
|
||||
mailing_domain = super(Mailing, self)._get_default_mailing_domain()
|
||||
if self.mailing_type == 'sms' and 'phone_sanitized_blacklisted' in self.env[self.mailing_model_name]._fields:
|
||||
mailing_domain = expression.AND([mailing_domain, [('phone_sanitized_blacklisted', '=', False)]])
|
||||
|
||||
return mailing_domain
|
||||
|
||||
def convert_links(self):
|
||||
sms_mailings = self.filtered(lambda m: m.mailing_type == 'sms')
|
||||
res = {}
|
||||
for mailing in sms_mailings:
|
||||
tracker_values = mailing._get_link_tracker_values()
|
||||
body = mailing._shorten_links_text(mailing.body_plaintext, tracker_values)
|
||||
res[mailing.id] = body
|
||||
res.update(super(Mailing, self - sms_mailings).convert_links())
|
||||
return res
|
||||
|
||||
# ------------------------------------------------------
|
||||
# A/B Test Override
|
||||
# ------------------------------------------------------
|
||||
|
||||
def _get_ab_testing_description_modifying_fields(self):
|
||||
fields_list = super()._get_ab_testing_description_modifying_fields()
|
||||
return fields_list + ['ab_testing_sms_winner_selection']
|
||||
|
||||
def _get_ab_testing_description_values(self):
|
||||
values = super()._get_ab_testing_description_values()
|
||||
if self.mailing_type == 'sms':
|
||||
values.update({
|
||||
'ab_testing_count': self.ab_testing_mailings_sms_count,
|
||||
'ab_testing_winner_selection': self.ab_testing_sms_winner_selection,
|
||||
})
|
||||
return values
|
||||
|
||||
def _get_ab_testing_winner_selection(self):
|
||||
result = super()._get_ab_testing_winner_selection()
|
||||
if self.mailing_type == 'sms':
|
||||
ab_testing_winner_selection_description = dict(
|
||||
self._fields.get('ab_testing_sms_winner_selection').related_field.selection
|
||||
).get(self.ab_testing_sms_winner_selection)
|
||||
result.update({
|
||||
'value': self.campaign_id.ab_testing_sms_winner_selection,
|
||||
'description': ab_testing_winner_selection_description
|
||||
})
|
||||
return result
|
||||
|
||||
def _get_ab_testing_siblings_mailings(self):
|
||||
mailings = super()._get_ab_testing_siblings_mailings()
|
||||
if self.mailing_type == 'sms':
|
||||
mailings = self.campaign_id.mailing_sms_ids.filtered('ab_testing_enabled')
|
||||
return mailings
|
||||
|
||||
def _get_default_ab_testing_campaign_values(self, values=None):
|
||||
campaign_values = super()._get_default_ab_testing_campaign_values(values)
|
||||
values = values or dict()
|
||||
if self.mailing_type == 'sms':
|
||||
sms_subject = values.get('sms_subject') or self.sms_subject
|
||||
if sms_subject:
|
||||
campaign_values['name'] = _("A/B Test: %s", sms_subject)
|
||||
campaign_values['ab_testing_sms_winner_selection'] = self.ab_testing_sms_winner_selection
|
||||
return campaign_values
|
72
models/mailing_trace.py
Normal file
72
models/mailing_trace.py
Normal file
@ -0,0 +1,72 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import random
|
||||
import string
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class MailingTrace(models.Model):
|
||||
""" Improve statistics model to add SMS support. Main attributes of
|
||||
statistics model are used, only some specific data is required. """
|
||||
_inherit = 'mailing.trace'
|
||||
CODE_SIZE = 3
|
||||
|
||||
trace_type = fields.Selection(selection_add=[
|
||||
('sms', 'SMS')
|
||||
], ondelete={'sms': 'set default'})
|
||||
sms_id = fields.Many2one('sms.sms', string='SMS', store=False, compute='_compute_sms_id')
|
||||
sms_id_int = fields.Integer(
|
||||
string='SMS ID',
|
||||
index='btree_not_null'
|
||||
# Integer because the related sms.sms can be deleted separately from its statistics.
|
||||
# However, the ID is needed for several action and controllers.
|
||||
)
|
||||
sms_tracker_ids = fields.One2many('sms.tracker', 'mailing_trace_id', string='SMS Trackers')
|
||||
sms_number = fields.Char('Number')
|
||||
sms_code = fields.Char('Code')
|
||||
failure_type = fields.Selection(selection_add=[
|
||||
('sms_number_missing', 'Missing Number'),
|
||||
('sms_number_format', 'Wrong Number Format'),
|
||||
('sms_credit', 'Insufficient Credit'),
|
||||
('sms_country_not_supported', 'Country Not Supported'),
|
||||
('sms_registration_needed', 'Country-specific Registration Required'),
|
||||
('sms_server', 'Server Error'),
|
||||
('sms_acc', 'Unregistered Account'),
|
||||
# mass mode specific codes
|
||||
('sms_blacklist', 'Blacklisted'),
|
||||
('sms_duplicate', 'Duplicate'),
|
||||
('sms_optout', 'Opted Out'),
|
||||
# delivery report errors
|
||||
('sms_expired', 'Expired'),
|
||||
('sms_invalid_destination', 'Invalid Destination'),
|
||||
('sms_not_allowed', 'Not Allowed'),
|
||||
('sms_not_delivered', 'Not Delivered'),
|
||||
('sms_rejected', 'Rejected'),
|
||||
])
|
||||
|
||||
@api.depends('sms_id_int', 'trace_type')
|
||||
def _compute_sms_id(self):
|
||||
self.sms_id = False
|
||||
sms_traces = self.filtered(lambda t: t.trace_type == 'sms' and bool(t.sms_id_int))
|
||||
if not sms_traces:
|
||||
return
|
||||
existing_sms_ids = self.env['sms.sms'].sudo().search([
|
||||
('id', 'in', sms_traces.mapped('sms_id_int')), ('to_delete', '!=', True)
|
||||
]).ids
|
||||
for sms_trace in sms_traces.filtered(lambda n: n.sms_id_int in set(existing_sms_ids)):
|
||||
sms_trace.sms_id = sms_trace.sms_id_int
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, values_list):
|
||||
for values in values_list:
|
||||
if values.get('trace_type') == 'sms' and not values.get('sms_code'):
|
||||
values['sms_code'] = self._get_random_code()
|
||||
return super(MailingTrace, self).create(values_list)
|
||||
|
||||
def _get_random_code(self):
|
||||
""" Generate a random code for trace. Uniqueness is not really necessary
|
||||
as it serves as obfuscation when unsubscribing. A valid trio
|
||||
code / mailing_id / number will be requested. """
|
||||
return ''.join(random.choice(string.ascii_letters + string.digits) for dummy in range(self.CODE_SIZE))
|
74
models/res_users.py
Normal file
74
models/res_users.py
Normal file
@ -0,0 +1,74 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import json
|
||||
|
||||
from odoo import api, fields, models, modules, _
|
||||
|
||||
|
||||
class Users(models.Model):
|
||||
_name = 'res.users'
|
||||
_inherit = ['res.users']
|
||||
|
||||
@api.model
|
||||
def systray_get_activities(self):
|
||||
""" Split mass_mailing and mass_mailing_sms activities in systray by
|
||||
removing the single mailing.mailing activity represented and
|
||||
doing a new query to split them by mailing_type.
|
||||
"""
|
||||
activities = super(Users, self).systray_get_activities()
|
||||
view_type = self.env['mailing.mailing']._systray_view
|
||||
for activity in activities:
|
||||
if activity.get('model') == 'mailing.mailing':
|
||||
activities.remove(activity)
|
||||
query = """SELECT m.mailing_type, count(*), act.res_model as model, act.res_id,
|
||||
CASE
|
||||
WHEN %(today)s::date - act.date_deadline::date = 0 Then 'today'
|
||||
WHEN %(today)s::date - act.date_deadline::date > 0 Then 'overdue'
|
||||
WHEN %(today)s::date - act.date_deadline::date < 0 Then 'planned'
|
||||
END AS states
|
||||
FROM mail_activity AS act
|
||||
JOIN mailing_mailing AS m ON act.res_id = m.id
|
||||
WHERE act.res_model = 'mailing.mailing' AND act.user_id = %(user_id)s
|
||||
GROUP BY m.mailing_type, states, act.res_model, act.res_id;
|
||||
"""
|
||||
self.env.cr.execute(query, {
|
||||
'today': fields.Date.context_today(self),
|
||||
'user_id': self.env.uid,
|
||||
})
|
||||
activity_data = self.env.cr.dictfetchall()
|
||||
|
||||
user_activities = {}
|
||||
for act in activity_data:
|
||||
if not user_activities.get(act['mailing_type']):
|
||||
if act['mailing_type'] == 'sms':
|
||||
module = 'mass_mailing_sms'
|
||||
name = _('SMS Marketing')
|
||||
else:
|
||||
module = 'mass_mailing'
|
||||
name = _('Email Marketing')
|
||||
icon = module and modules.module.get_module_icon(module)
|
||||
res_ids = set()
|
||||
user_activities[act['mailing_type']] = {
|
||||
'id': self.env['ir.model']._get('mailing.mailing').id,
|
||||
'name': name,
|
||||
'model': 'mailing.mailing',
|
||||
'type': 'activity',
|
||||
'icon': icon,
|
||||
'total_count': 0, 'today_count': 0, 'overdue_count': 0, 'planned_count': 0,
|
||||
'res_ids': res_ids,
|
||||
"view_type": view_type,
|
||||
}
|
||||
user_activities[act['mailing_type']]['res_ids'].add(act['res_id'])
|
||||
user_activities[act['mailing_type']]['%s_count' % act['states']] += act['count']
|
||||
if act['states'] in ('today', 'overdue'):
|
||||
user_activities[act['mailing_type']]['total_count'] += act['count']
|
||||
|
||||
for mailing_type in user_activities.keys():
|
||||
user_activities[mailing_type].update({
|
||||
'domain': json.dumps([['activity_ids.res_id', 'in', list(user_activities[mailing_type]['res_ids'])]])
|
||||
})
|
||||
activities.extend(list(user_activities.values()))
|
||||
break
|
||||
|
||||
return activities
|
32
models/sms_sms.py
Normal file
32
models/sms_sms.py
Normal file
@ -0,0 +1,32 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import re
|
||||
|
||||
from odoo import fields, models, tools
|
||||
|
||||
|
||||
class SmsSms(models.Model):
|
||||
_inherit = ['sms.sms']
|
||||
|
||||
mailing_id = fields.Many2one('mailing.mailing', string='Mass Mailing')
|
||||
# Linking to another field than the comodel id allows to use the ORM to create
|
||||
# "linked" records (see _prepare_sms_values) without adding a foreign key.
|
||||
# See commit message for why this is useful.
|
||||
mailing_trace_ids = fields.One2many('mailing.trace', 'sms_id_int', string='Statistics')
|
||||
|
||||
def _update_body_short_links(self):
|
||||
""" Override to tweak shortened URLs by adding statistics ids, allowing to
|
||||
find customer back once clicked. """
|
||||
res = dict.fromkeys(self.ids, False)
|
||||
for sms in self:
|
||||
if not sms.mailing_id or not sms.body:
|
||||
res[sms.id] = sms.body
|
||||
continue
|
||||
|
||||
body = sms.body
|
||||
for url in set(re.findall(tools.TEXT_URL_REGEX, body)):
|
||||
if url.startswith(sms.get_base_url() + '/r/'):
|
||||
body = re.sub(re.escape(url) + r'(?![\w@:%.+&~#=/-])', url + f'/s/{sms.id}', body)
|
||||
res[sms.id] = body
|
||||
return res
|
76
models/sms_tracker.py
Normal file
76
models/sms_tracker.py
Normal file
@ -0,0 +1,76 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class SmsTracker(models.Model):
|
||||
_inherit = "sms.tracker"
|
||||
|
||||
SMS_STATE_TO_TRACE_STATUS = {
|
||||
'error': 'error',
|
||||
'process': 'process',
|
||||
'outgoing': 'outgoing',
|
||||
'canceled': 'cancel',
|
||||
'pending': 'pending',
|
||||
'sent': 'sent',
|
||||
}
|
||||
|
||||
mailing_trace_id = fields.Many2one('mailing.trace', ondelete='cascade')
|
||||
|
||||
def _action_update_from_provider_error(self, provider_error):
|
||||
error_status, failure_type, failure_reason = super()._action_update_from_provider_error(provider_error)
|
||||
self._update_sms_traces(error_status or 'error', failure_type=failure_type, failure_reason=failure_reason)
|
||||
return error_status, failure_type, failure_reason
|
||||
|
||||
def _action_update_from_sms_state(self, sms_state, failure_type=False, failure_reason=False):
|
||||
super()._action_update_from_sms_state(sms_state, failure_type=failure_type, failure_reason=failure_reason)
|
||||
trace_status = self.SMS_STATE_TO_TRACE_STATUS[sms_state]
|
||||
traces = self._update_sms_traces(trace_status, failure_type=failure_type, failure_reason=failure_reason)
|
||||
self._update_sms_mailings(trace_status, traces)
|
||||
|
||||
def _update_sms_traces(self, trace_status, failure_type=False, failure_reason=False):
|
||||
if not self.mailing_trace_id: # avoid a search below
|
||||
return self.env['mailing.trace']
|
||||
# See _update_sms_notifications
|
||||
statuses_to_ignore = {
|
||||
'cancel': ['cancel', 'process', 'pending', 'sent'],
|
||||
'outgoing': ['outgoing', 'process', 'pending', 'sent'],
|
||||
'process': ['process', 'pending', 'sent'],
|
||||
'pending': ['pending', 'sent'],
|
||||
'bounce': ['bounce'],
|
||||
'sent': ['sent'],
|
||||
'error': ['error'],
|
||||
}[trace_status]
|
||||
traces = self.mailing_trace_id.filtered(lambda t: t.trace_status not in statuses_to_ignore)
|
||||
if traces:
|
||||
traces_values = {
|
||||
'trace_status': trace_status,
|
||||
'failure_type': failure_type,
|
||||
'failure_reason': failure_reason,
|
||||
**{'sent_datetime': fields.Datetime.now() if trace_status == 'pending' else {}},
|
||||
}
|
||||
traces.write(traces_values)
|
||||
return traces
|
||||
|
||||
def _update_sms_mailings(self, trace_status, traces):
|
||||
traces.flush_recordset(['trace_status'])
|
||||
|
||||
if trace_status == 'process':
|
||||
traces.mass_mailing_id.write({'state': 'sending'})
|
||||
return
|
||||
|
||||
mailings_to_mark_done = self.env['mailing.mailing'].search([
|
||||
('id', 'in', traces.mass_mailing_id.ids),
|
||||
'!', ('mailing_trace_ids.trace_status', '=', 'process'), # = not any trace with 'process' status
|
||||
('state', '!=', 'done'),
|
||||
])
|
||||
|
||||
if mailings_to_mark_done:
|
||||
if self.env.user.is_public: # From webhook event
|
||||
mailings_to_mark_done._track_set_author(self.env.ref('base.partner_root'))
|
||||
for mailing in mailings_to_mark_done:
|
||||
mailing.write({
|
||||
'state': 'done',
|
||||
'sent_date': fields.Datetime.now(),
|
||||
'kpi_mail_required': not mailing.sent_date
|
||||
})
|
91
models/utm.py
Normal file
91
models/utm.py
Normal file
@ -0,0 +1,91 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from collections import defaultdict
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class UtmCampaign(models.Model):
|
||||
_inherit = 'utm.campaign'
|
||||
|
||||
mailing_sms_ids = fields.One2many(
|
||||
'mailing.mailing', 'campaign_id',
|
||||
domain=[('mailing_type', '=', 'sms')],
|
||||
string='Mass SMS',
|
||||
groups="mass_mailing.group_mass_mailing_user")
|
||||
mailing_sms_count = fields.Integer('Number of Mass SMS',
|
||||
compute="_compute_mailing_sms_count",
|
||||
groups="mass_mailing.group_mass_mailing_user")
|
||||
|
||||
# A/B Testing
|
||||
ab_testing_mailings_sms_count = fields.Integer("A/B Test Mailings SMS #", compute="_compute_mailing_sms_count")
|
||||
ab_testing_sms_winner_selection = fields.Selection([
|
||||
('manual', 'Manual'),
|
||||
('clicks_ratio', 'Highest Click Rate')], string="SMS Winner Selection", default="clicks_ratio")
|
||||
|
||||
|
||||
@api.depends('mailing_sms_ids')
|
||||
def _compute_mailing_sms_count(self):
|
||||
mailing_sms_data = self.env['mailing.mailing']._read_group(
|
||||
[('campaign_id', 'in', self.ids), ('mailing_type', '=', 'sms')],
|
||||
['campaign_id', 'ab_testing_enabled'],
|
||||
['__count'],
|
||||
)
|
||||
ab_testing_mapped_sms_data = defaultdict(list)
|
||||
mapped_sms_data = defaultdict(list)
|
||||
for campaign, ab_testing_enabled, count in mailing_sms_data:
|
||||
if ab_testing_enabled:
|
||||
ab_testing_mapped_sms_data[campaign.id].append(count)
|
||||
mapped_sms_data[campaign.id].append(count)
|
||||
|
||||
for campaign in self:
|
||||
campaign.mailing_sms_count = sum(mapped_sms_data[campaign.id])
|
||||
campaign.ab_testing_mailings_sms_count = sum(ab_testing_mapped_sms_data[campaign.id])
|
||||
|
||||
def action_create_mass_sms(self):
|
||||
action = self.env["ir.actions.actions"]._for_xml_id("mass_mailing.action_create_mass_mailings_from_campaign")
|
||||
action['context'] = {
|
||||
'default_campaign_id': self.id,
|
||||
'default_mailing_type': 'sms',
|
||||
'search_default_assigned_to_me': 1,
|
||||
'search_default_campaign_id': self.id,
|
||||
'default_user_id': self.env.user.id,
|
||||
}
|
||||
return action
|
||||
|
||||
def action_redirect_to_mailing_sms(self):
|
||||
action = self.env["ir.actions.actions"]._for_xml_id("mass_mailing_sms.mailing_mailing_action_sms")
|
||||
action['context'] = {
|
||||
'default_campaign_id': self.id,
|
||||
'default_mailing_type': 'sms',
|
||||
'search_default_assigned_to_me': 1,
|
||||
'search_default_campaign_id': self.id,
|
||||
'default_user_id': self.env.user.id,
|
||||
}
|
||||
action['domain'] = [('mailing_type', '=', 'sms')]
|
||||
return action
|
||||
|
||||
@api.model
|
||||
def _cron_process_mass_mailing_ab_testing(self):
|
||||
ab_testing_campaign = super()._cron_process_mass_mailing_ab_testing()
|
||||
for campaign in ab_testing_campaign:
|
||||
ab_testing_mailings = campaign.mailing_sms_ids.filtered(lambda m: m.ab_testing_enabled)
|
||||
if not ab_testing_mailings.filtered(lambda m: m.state == 'done'):
|
||||
continue
|
||||
ab_testing_mailings.action_send_winner_mailing()
|
||||
return ab_testing_campaign
|
||||
|
||||
|
||||
class UtmMedium(models.Model):
|
||||
_inherit = 'utm.medium'
|
||||
|
||||
@api.ondelete(at_uninstall=False)
|
||||
def _unlink_except_utm_medium_sms(self):
|
||||
utm_medium_sms = self.env.ref('mass_mailing_sms.utm_medium_sms', raise_if_not_found=False)
|
||||
if utm_medium_sms and utm_medium_sms in self:
|
||||
raise UserError(_(
|
||||
"The UTM medium '%s' cannot be deleted as it is used in some main "
|
||||
"functional flows, such as the SMS Marketing.",
|
||||
utm_medium_sms.name
|
||||
))
|
84
report/mailing_trace_report_views.xml
Normal file
84
report/mailing_trace_report_views.xml
Normal file
@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mailing_trace_report_sms_view_tree" model="ir.ui.view">
|
||||
<field name="name">mailing.sms.trace.report.view.tree</field>
|
||||
<field name="model">mailing.trace.report</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_trace_report_view_tree"/>
|
||||
<field name="priority" eval="50"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='opened']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='replied']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_report_sms_view_pivot" model="ir.ui.view">
|
||||
<field name="name">mailing.sms.trace.report.view.pivot</field>
|
||||
<field name="model">mailing.trace.report</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_trace_report_view_pivot"/>
|
||||
<field name="priority" eval="50"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='opened']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='replied']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_report_sms_view_graph" model="ir.ui.view">
|
||||
<field name="name">mailing.sms.trace.report.view.graph</field>
|
||||
<field name="model">mailing.trace.report</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_trace_report_view_graph"/>
|
||||
<field name="priority" eval="50"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='replied']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Actions and Menuitems -->
|
||||
<record id="mailing_trace_report_action_sms" model="ir.actions.act_window">
|
||||
<field name="name">SMS Marketing Analysis</field>
|
||||
<field name="res_model">mailing.trace.report</field>
|
||||
<field name="view_mode">graph,pivot,tree</field>
|
||||
<field name="domain">[('mailing_type', '=', 'sms')]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
No data yet!
|
||||
</p><p>
|
||||
Come back once some SMS Mailings are sent to check out aggregated results.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_report_action_sms_view_graph" model="ir.actions.act_window.view">
|
||||
<field name="sequence">0</field>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="act_window_id" ref="mailing_trace_report_action_sms"/>
|
||||
<field name="view_id" ref="mailing_trace_report_sms_view_graph"/>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_report_action_sms_view_pivot" model="ir.actions.act_window.view">
|
||||
<field name="sequence">1</field>
|
||||
<field name="view_mode">pivot</field>
|
||||
<field name="act_window_id" ref="mailing_trace_report_action_sms"/>
|
||||
<field name="view_id" ref="mailing_trace_report_sms_view_pivot"/>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_report_action_sms_view_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence">2</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="act_window_id" ref="mailing_trace_report_action_sms"/>
|
||||
<field name="view_id" ref="mailing_trace_report_sms_view_tree"/>
|
||||
</record>
|
||||
</odoo>
|
3
security/ir.model.access.csv
Normal file
3
security/ir.model.access.csv
Normal file
@ -0,0 +1,3 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_mailing_sms_test,access.mailing.sms.test,model_mailing_sms_test,mass_mailing.group_mass_mailing_user,1,1,1,0
|
||||
access_phone_blacklist_remove_mass_mailing_user,acesss.phone.blacklist.remove.mass_mailing_user,phone_validation.model_phone_blacklist_remove,mass_mailing.group_mass_mailing_user,1,1,1,1
|
|
BIN
static/description/icon.png
Normal file
BIN
static/description/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
1
static/description/icon.svg
Normal file
1
static/description/icon.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="50" height="50" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg"><path d="M13 8a4 4 0 0 1 4-4h16a4 4 0 0 1 4 4v34a4 4 0 0 1-4 4H17a4 4 0 0 1-4-4V8Z" fill="#FC868B"/><path d="M37 19v18a9 9 0 1 1 0-18Z" fill="#1A6F66"/><path d="M13 31V13a9 9 0 1 1 0 18Z" fill="#2D6388"/><path d="M13 13H4v9a9 9 0 0 0 9 9V13Z" fill="#2EBCFA"/><path d="M37 37h9v-9a9 9 0 0 0-9-9v18Z" fill="#1AD3BB"/></svg>
|
After Width: | Height: | Size: 405 B |
39
static/tests/tours/mailing_activities_split.js
Normal file
39
static/tests/tours/mailing_activities_split.js
Normal file
@ -0,0 +1,39 @@
|
||||
/** @odoo-module */
|
||||
|
||||
import { registry } from "@web/core/registry";
|
||||
|
||||
registry.category("web_tour.tours").add('mailing_activities_split', {
|
||||
test: true,
|
||||
url: '/web',
|
||||
steps: () => [
|
||||
{
|
||||
content: 'Open Activity Systray',
|
||||
trigger: '.o-mail-ActivityMenu-counter',
|
||||
}, {
|
||||
content: 'Open Email Activities',
|
||||
trigger: '.o-mail-ActivityGroup:contains("Email Marketing")',
|
||||
}, {
|
||||
content: 'Open Email Marketing record in the kanban view',
|
||||
trigger: '.o_list_renderer .o_data_cell:contains("New Email!")',
|
||||
run: () => {
|
||||
if ($('.o_list_renderer .o_data_cell:contains("New SMS!")').length !== 0) {
|
||||
console.error('SMS Marketing record should not appear in this view');
|
||||
}
|
||||
},
|
||||
}, {
|
||||
content: 'Open Activity Systray',
|
||||
trigger: '.o-mail-ActivityMenu-counter',
|
||||
}, {
|
||||
content: 'Open SMS Activities',
|
||||
trigger: '.o-mail-ActivityGroup:contains("SMS Marketing")',
|
||||
}, {
|
||||
content: 'Open SMS Marketing record in the kanban view',
|
||||
trigger: '.o_list_renderer .o_data_cell:contains("New SMS!")',
|
||||
run: () => {
|
||||
if ($('.o_list_renderer .o_data_cell:contains("New Email!")').length !== 0) {
|
||||
console.error('Email Marketing record should not appear in this view');
|
||||
}
|
||||
},
|
||||
}
|
||||
],
|
||||
});
|
9
tests/__init__.py
Normal file
9
tests/__init__.py
Normal file
@ -0,0 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import common
|
||||
from . import test_mailing_internals
|
||||
from . import test_mailing_retry
|
||||
from . import test_mailing_sms_ab_testing
|
||||
from . import test_mailing_ui
|
||||
from . import test_mailing_list
|
174
tests/common.py
Normal file
174
tests/common.py
Normal file
@ -0,0 +1,174 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import random
|
||||
import re
|
||||
import werkzeug
|
||||
|
||||
from odoo import tools
|
||||
from odoo.addons.link_tracker.tests.common import MockLinkTracker
|
||||
from odoo.addons.mass_mailing.tests.common import MassMailCommon
|
||||
from odoo.addons.sms.tests.common import SMSCase, SMSCommon
|
||||
|
||||
|
||||
class MassSMSCase(SMSCase, MockLinkTracker):
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# ASSERTS
|
||||
# ------------------------------------------------------------
|
||||
|
||||
def assertSMSStatistics(self, recipients_info, mailing, records, check_sms=True):
|
||||
""" Deprecated, remove in 14.4 """
|
||||
return self.assertSMSTraces(recipients_info, mailing, records, check_sms=check_sms)
|
||||
|
||||
def assertSMSTraces(self, recipients_info, mailing, records,
|
||||
check_sms=True, sent_unlink=False,
|
||||
sms_links_info=None):
|
||||
""" Check content of traces. Traces are fetched based on a given mailing
|
||||
and records. Their content is compared to recipients_info structure that
|
||||
holds expected information. Links content may be checked, notably to
|
||||
assert shortening or unsubscribe links. Sms.sms records may optionally
|
||||
be checked.
|
||||
|
||||
:param recipients_info: list[{
|
||||
# TRACE
|
||||
'partner': res.partner record (may be empty),
|
||||
'number': number used for notification (may be empty, computed based on partner),
|
||||
'trace_status': outgoing / process / pending / sent / cancel / bounce / error / opened
|
||||
(sent by default),
|
||||
'record: linked record,
|
||||
# SMS.SMS
|
||||
'content': optional: if set, check content of sent SMS;
|
||||
'failure_type': error code linked to sms failure (see ``error_code``
|
||||
field on ``sms.sms`` model);
|
||||
},
|
||||
{ ... }];
|
||||
:param mailing: a mailing.mailing record from which traces have been
|
||||
generated;
|
||||
:param records: records given to mailing that generated traces. It is
|
||||
used notably to find traces using their IDs;
|
||||
:param check_sms: if set, check sms.sms records that should be linked to traces;
|
||||
:param sent_unlink: it True, sent sms.sms are deleted and we check gateway
|
||||
output result instead of actual sms.sms records;
|
||||
:param sms_links_info: if given, should follow order of ``recipients_info``
|
||||
and give details about links. See ``assertLinkShortenedHtml`` helper for
|
||||
more details about content to give;
|
||||
]
|
||||
"""
|
||||
# map trace state to sms state
|
||||
state_mapping = {
|
||||
'sent': 'sent',
|
||||
'outgoing': 'outgoing',
|
||||
'error': 'error',
|
||||
'cancel': 'canceled',
|
||||
'bounce': 'error',
|
||||
'process': 'process',
|
||||
'pending': 'pending',
|
||||
}
|
||||
traces = self.env['mailing.trace'].search([
|
||||
('mass_mailing_id', 'in', mailing.ids),
|
||||
('res_id', 'in', records.ids)
|
||||
])
|
||||
|
||||
self.assertTrue(all(s.model == records._name for s in traces))
|
||||
# self.assertTrue(all(s.utm_campaign_id == mailing.campaign_id for s in traces))
|
||||
self.assertEqual(set(s.res_id for s in traces), set(records.ids))
|
||||
|
||||
# check each trace
|
||||
if not sms_links_info:
|
||||
sms_links_info = [None] * len(recipients_info)
|
||||
for recipient_info, link_info, record in zip(recipients_info, sms_links_info, records):
|
||||
partner = recipient_info.get('partner', self.env['res.partner'])
|
||||
number = recipient_info.get('number')
|
||||
status = recipient_info.get('trace_status', 'outgoing')
|
||||
content = recipient_info.get('content', None)
|
||||
if number is None and partner:
|
||||
number = partner._sms_get_recipients_info()[partner.id]['sanitized']
|
||||
|
||||
trace = traces.filtered(
|
||||
lambda t: t.sms_number == number and t.trace_status == status and (t.res_id == record.id if record else True)
|
||||
)
|
||||
self.assertTrue(len(trace) == 1,
|
||||
'SMS: found %s notification for number %s, (status: %s) (1 expected)' % (len(trace), number, status))
|
||||
self.assertTrue(bool(trace.sms_id_int))
|
||||
|
||||
if check_sms:
|
||||
if status in {'process', 'pending', 'sent'}:
|
||||
if sent_unlink:
|
||||
self.assertSMSIapSent([number], content=content)
|
||||
else:
|
||||
self.assertSMS(partner, number, status, content=content)
|
||||
elif status in state_mapping:
|
||||
sms_state = state_mapping[status]
|
||||
failure_type = recipient_info['failure_type'] if status in ('error', 'cancel', 'bounce') else None
|
||||
self.assertSMS(partner, number, sms_state, failure_type=failure_type, content=content)
|
||||
else:
|
||||
raise NotImplementedError()
|
||||
|
||||
if link_info:
|
||||
# shortened links are directly included in sms.sms record as well as
|
||||
# in sent sms (not like mails who are post-processed)
|
||||
sms_sent = self._find_sms_sent(partner, number)
|
||||
sms_sms = self._find_sms_sms(partner, number, state_mapping[status])
|
||||
for (url, is_shortened, add_link_params) in link_info:
|
||||
if url == 'unsubscribe':
|
||||
url = '%s/sms/%d/%s' % (mailing.get_base_url(), mailing.id, trace.sms_code)
|
||||
link_params = {'utm_medium': 'SMS', 'utm_source': mailing.name}
|
||||
if add_link_params:
|
||||
link_params.update(**add_link_params)
|
||||
self.assertLinkShortenedText(
|
||||
sms_sms.body,
|
||||
(url, is_shortened),
|
||||
link_params=link_params,
|
||||
)
|
||||
self.assertLinkShortenedText(
|
||||
sms_sent['body'],
|
||||
(url, is_shortened),
|
||||
link_params=link_params,
|
||||
)
|
||||
return traces
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# GATEWAY TOOLS
|
||||
# ------------------------------------------------------------
|
||||
|
||||
def gateway_sms_click(self, mailing, record):
|
||||
""" Simulate a click on a sent SMS. Usage: giving a partner and/or
|
||||
a number, find an SMS sent to him, find shortened links in its body
|
||||
and call add_click to simulate a click. """
|
||||
trace = mailing.mailing_trace_ids.filtered(lambda t: t.model == record._name and t.res_id == record.id)
|
||||
sms_sent = self._find_sms_sent(self.env['res.partner'], trace.sms_number)
|
||||
self.assertTrue(bool(sms_sent))
|
||||
return self.gateway_sms_sent_click(sms_sent)
|
||||
|
||||
def gateway_sms_delivered(self, mailing, record):
|
||||
""" Simulate a delivery report received for a sent SMS."""
|
||||
trace = mailing.mailing_trace_ids.filtered(lambda t: t.model == record._name and t.res_id == record.id)
|
||||
sms_sent = self._find_sms_sent(self.env['res.partner'], trace.sms_number)
|
||||
self.assertTrue(bool(sms_sent))
|
||||
trace.trace_status = 'sent'
|
||||
|
||||
def gateway_sms_sent_click(self, sms_sent):
|
||||
""" When clicking on a link in a SMS we actually don't have any
|
||||
easy information in body, only body. We currently click on all found
|
||||
shortened links. """
|
||||
for url in re.findall(tools.TEXT_URL_REGEX, sms_sent['body']):
|
||||
if '/r/' in url: # shortened link, like 'http://localhost:8069/r/LBG/s/53'
|
||||
parsed_url = werkzeug.urls.url_parse(url)
|
||||
path_items = parsed_url.path.split('/')
|
||||
code, sms_id_int = path_items[2], int(path_items[4])
|
||||
trace_id = self.env['mailing.trace'].sudo().search([('sms_id_int', '=', sms_id_int)]).id
|
||||
|
||||
self.env['link.tracker.click'].sudo().add_click(
|
||||
code,
|
||||
ip='100.200.300.%3f' % random.random(),
|
||||
country_code='BE',
|
||||
mailing_trace_id=trace_id
|
||||
)
|
||||
|
||||
|
||||
class MassSMSCommon(SMSCommon, MassSMSCase, MassMailCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(MassSMSCommon, cls).setUpClass()
|
61
tests/test_mailing_internals.py
Normal file
61
tests/test_mailing_internals.py
Normal file
@ -0,0 +1,61 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from ast import literal_eval
|
||||
|
||||
from odoo.addons.mass_mailing_sms.tests.common import MassSMSCommon
|
||||
from odoo.tests.common import users
|
||||
|
||||
|
||||
class TestMassMailValues(MassSMSCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestMassMailValues, cls).setUpClass()
|
||||
|
||||
cls._create_mailing_list()
|
||||
cls.sms_template_partner = cls.env['sms.template'].create({
|
||||
'name': 'Test Template',
|
||||
'model_id': cls.env['ir.model']._get('res.partner').id,
|
||||
'body': 'Dear {{ object.display_name }} this is an SMS.'
|
||||
})
|
||||
|
||||
@users('user_marketing')
|
||||
def test_mailing_computed_fields(self):
|
||||
# Create on res.partner, with default values for computed fields
|
||||
mailing = self.env['mailing.mailing'].create({
|
||||
'name': 'TestMailing',
|
||||
'subject': 'Test',
|
||||
'mailing_type': 'sms',
|
||||
'body_plaintext': 'Coucou hibou',
|
||||
'mailing_model_id': self.env['ir.model']._get('res.partner').id,
|
||||
})
|
||||
self.assertEqual(mailing.user_id, self.user_marketing)
|
||||
self.assertEqual(mailing.body_plaintext, 'Coucou hibou')
|
||||
self.assertEqual(mailing.medium_id, self.env.ref('mass_mailing_sms.utm_medium_sms'))
|
||||
self.assertEqual(mailing.mailing_model_name, 'res.partner')
|
||||
self.assertEqual(mailing.mailing_model_real, 'res.partner')
|
||||
# default for partner: remove blacklisted
|
||||
self.assertEqual(literal_eval(mailing.mailing_domain), [('phone_sanitized_blacklisted', '=', False)])
|
||||
# update template -> update body
|
||||
mailing.write({'sms_template_id': self.sms_template_partner.id})
|
||||
self.assertEqual(mailing.body_plaintext, self.sms_template_partner.body)
|
||||
# update domain
|
||||
mailing.write({
|
||||
'mailing_domain': [('email', 'ilike', 'test.example.com')]
|
||||
})
|
||||
self.assertEqual(literal_eval(mailing.mailing_domain), [('email', 'ilike', 'test.example.com')])
|
||||
|
||||
# reset mailing model -> reset domain; set reply_to -> keep it
|
||||
mailing.write({
|
||||
'mailing_model_id': self.env['ir.model']._get('mailing.list').id,
|
||||
'reply_to': self.email_reply_to,
|
||||
})
|
||||
self.assertEqual(mailing.mailing_model_name, 'mailing.list')
|
||||
self.assertEqual(mailing.mailing_model_real, 'mailing.contact')
|
||||
# default for mailing list: depends upon contact_list_ids
|
||||
self.assertEqual(literal_eval(mailing.mailing_domain), [('list_ids', 'in', [])])
|
||||
mailing.write({
|
||||
'contact_list_ids': [(4, self.mailing_list_1.id), (4, self.mailing_list_2.id)]
|
||||
})
|
||||
self.assertEqual(literal_eval(mailing.mailing_domain), [('list_ids', 'in', (self.mailing_list_1 | self.mailing_list_2).ids)])
|
27
tests/test_mailing_list.py
Normal file
27
tests/test_mailing_list.py
Normal file
@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo.addons.mass_mailing_sms.tests.common import MassSMSCommon
|
||||
from odoo.tests.common import Form, users
|
||||
|
||||
|
||||
class TestMailingListSms(MassSMSCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestMailingListSms, cls).setUpClass()
|
||||
cls._create_mailing_list()
|
||||
|
||||
@users('user_marketing')
|
||||
def test_mailing_list_action_send_sms(self):
|
||||
sms_ctx = self.mailing_list_1.action_send_mailing_sms().get('context', {})
|
||||
form = Form(self.env['mailing.mailing'].with_context(sms_ctx))
|
||||
form.sms_subject = 'Test SMS'
|
||||
form.body_plaintext = 'Test sms body'
|
||||
sms = form.save()
|
||||
# Check that mailing model and mailing list are set properly
|
||||
self.assertEqual(
|
||||
sms.mailing_model_id, self.env['ir.model']._get('mailing.list'),
|
||||
'Should have correct mailing model set')
|
||||
self.assertEqual(sms.contact_list_ids, self.mailing_list_1, 'Should have correct mailing list set')
|
||||
self.assertEqual(sms.mailing_type, 'sms', 'Should have correct mailing_type')
|
41
tests/test_mailing_retry.py
Normal file
41
tests/test_mailing_retry.py
Normal file
@ -0,0 +1,41 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo.addons.mass_mailing_sms.tests.common import MassSMSCommon
|
||||
from odoo.addons.base.tests.test_ir_cron import CronMixinCase
|
||||
from odoo.tests.common import users
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
class TestMailingRetrySMS(MassSMSCommon, CronMixinCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestMailingRetrySMS, cls).setUpClass()
|
||||
cls._create_mailing_list()
|
||||
|
||||
@users('user_marketing')
|
||||
def test_sms_retry_immediate_trigger(self):
|
||||
mailing = self.env['mailing.mailing'].create({
|
||||
'name': 'TestMailing',
|
||||
'subject': 'Test',
|
||||
'mailing_type': 'sms',
|
||||
'body_plaintext': 'Coucou hibou',
|
||||
'mailing_model_id': self.env['ir.model']._get('res.partner').id,
|
||||
'contact_list_ids': [(4, self.mailing_list_1.id)],
|
||||
})
|
||||
mailing.action_send_sms()
|
||||
|
||||
# force the SMS sending to fail to test our retry mechanism
|
||||
def patched_sms_sms_send(sms_records, unlink_failed=False, unlink_sent=True, raise_exception=False):
|
||||
sms_records.write({'state': 'error', 'failure_type':'sms_credit'})
|
||||
|
||||
with patch('odoo.addons.sms.models.sms_sms.SmsSms._send', patched_sms_sms_send):
|
||||
self.env.ref('sms.ir_cron_sms_scheduler_action').sudo().method_direct_trigger()
|
||||
|
||||
with self.capture_triggers('mass_mailing.ir_cron_mass_mailing_queue') as captured_triggers:
|
||||
mailing.action_retry_failed()
|
||||
|
||||
self.assertEqual(len(captured_triggers.records), 1, "Should have created an additional trigger immediately")
|
||||
captured_trigger = captured_triggers.records[0]
|
||||
self.assertEqual(captured_trigger.cron_id, self.env.ref('mass_mailing.ir_cron_mass_mailing_queue'))
|
35
tests/test_mailing_sms_ab_testing.py
Normal file
35
tests/test_mailing_sms_ab_testing.py
Normal file
@ -0,0 +1,35 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from odoo.addons.mass_mailing_sms.tests.common import MassSMSCommon
|
||||
from odoo.addons.mass_mailing.tests.test_mailing_ab_testing import TestMailingABTesting
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestMailingSMSABTesting(MassSMSCommon, TestMailingABTesting):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.ab_testing_mailing_sms_1 = self.env['mailing.mailing'].create({
|
||||
'subject': 'A/B Testing SMS V1',
|
||||
'contact_list_ids': self.mailing_list.ids,
|
||||
'ab_testing_enabled': True,
|
||||
'ab_testing_pc': 10,
|
||||
'ab_testing_schedule_datetime': datetime.now(),
|
||||
'mailing_type': 'sms'
|
||||
})
|
||||
self.ab_testing_mailing_sms_2 = self.ab_testing_mailing_sms_1.copy({
|
||||
'subject': 'A/B Testing SMS V2',
|
||||
'ab_testing_pc': 20,
|
||||
})
|
||||
|
||||
def test_mailing_sms_ab_testing_compare(self):
|
||||
# compare version feature should returns all mailings of the same
|
||||
# campaign having a/b testing enabled and of mailing_type 'sms'.
|
||||
compare_version = self.ab_testing_mailing_sms_1.action_compare_versions()
|
||||
self.assertEqual(
|
||||
self.env['mailing.mailing'].search(compare_version.get('domain')),
|
||||
self.ab_testing_mailing_sms_1 + self.ab_testing_mailing_sms_2
|
||||
)
|
39
tests/test_mailing_ui.py
Normal file
39
tests/test_mailing_ui.py
Normal file
@ -0,0 +1,39 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo.tests import HttpCase, tagged, users
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install', 'mail_activity')
|
||||
class TestMailingUi(HttpCase):
|
||||
|
||||
@users('admin')
|
||||
def test_tour_mailing_activities_split(self):
|
||||
""" Activities linked to mailing.mailing records can appear either in the
|
||||
'Email Marketing', either in the 'SMS Marketing' category, depending on
|
||||
the value of the field mailing_type of the record it is linked to. This
|
||||
test ensures that:
|
||||
- activities linked to records with mailing_type set to mail are listed
|
||||
in the 'Email Marketing' category
|
||||
- activities linked to records with mailing_type set to sms are listed
|
||||
in the 'SMS Marketing' category
|
||||
"""
|
||||
sms_rec, email_rec = self.env['mailing.mailing'].create([
|
||||
{
|
||||
'body_plaintext': 'Some sms spam',
|
||||
'mailing_type': 'sms',
|
||||
'name': 'SMS record with an activity',
|
||||
'subject': 'New SMS!',
|
||||
}, {
|
||||
'body_html': '<p>Some email spam</p>',
|
||||
'mailing_type': 'mail',
|
||||
'name': 'Email record with an activity',
|
||||
'subject': 'New Email!',
|
||||
}
|
||||
])
|
||||
|
||||
sms_rec.activity_schedule(act_type_xmlid='mail.mail_activity_data_todo')
|
||||
email_rec.activity_schedule(act_type_xmlid='mail.mail_activity_data_todo')
|
||||
|
||||
# Ensure that both activities appear in the systray and that clicking on
|
||||
# one activity opens a view where the other activity isn't listed
|
||||
self.start_tour("/web", 'mailing_activities_split', login="admin")
|
94
views/mailing_contact_views.xml
Normal file
94
views/mailing_contact_views.xml
Normal file
@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mailing_contact_view_search" model="ir.ui.view">
|
||||
<field name="name">mailing.contact.view.search.inherit.sms</field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_contact_view_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='name']" position="after">
|
||||
<field name="mobile"/>
|
||||
<field name="phone_sanitized" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//filter[@name='filter_blacklisted']" position="attributes">
|
||||
<attribute name="domain">['|', ('is_blacklisted','=',True), ('phone_sanitized_blacklisted','=',True)]</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//filter[@name='filter_valid_email_recipient']" position="after">
|
||||
<separator/>
|
||||
<filter string="Valid SMS Recipients"
|
||||
name="filter_valid_sms_recipient"
|
||||
domain="[('opt_out', '=', False), ('phone_sanitized_blacklisted', '=', False), ('phone_sanitized', '!=', False)]"
|
||||
invisible="not context.get('default_list_ids')"/>
|
||||
</xpath>
|
||||
<xpath expr="//filter[@name='filter_not_email_bl']" position="after">
|
||||
<separator/>
|
||||
<filter string="Exclude Blacklisted Phone"
|
||||
name="filter_not_phone_bl"
|
||||
domain="[('phone_sanitized_blacklisted', '=', False)]"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_contact_view_tree" model="ir.ui.view">
|
||||
<field name="name">mailing.contact.view.tree.inherit.sms</field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_contact_view_tree"/>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='country_id']" position="after">
|
||||
<field name="mobile" class="o_force_ltr" readonly="1"/>
|
||||
<field name="phone_sanitized" column_invisible="True"/>
|
||||
<field name="phone_sanitized_blacklisted"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_contact_view_form" model="ir.ui.view">
|
||||
<field name="name">mailing.contact.view.form.inherit.sms</field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_contact_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='email_details']" position="after">
|
||||
<label for="mobile" class="oe_inline"/>
|
||||
<div class="o_row o_row_readonly" name="phone_details">
|
||||
<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"
|
||||
invisible="not mobile_blacklisted"/>
|
||||
<field name="mobile" widget="phone" options="{'enable_sms': True}"/>
|
||||
<field name="phone_sanitized" invisible="1"/>
|
||||
<field name="mobile_blacklisted" invisible="1"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_contact_view_kanban" model="ir.ui.view">
|
||||
<field name="name">mailing.contact.view.kanban.inherit.sms</field>
|
||||
<field name="model">mailing.contact</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_contact_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='email']" position="after">
|
||||
<field name="mobile" widget="phone"/>
|
||||
<field name="phone_sanitized" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//t[@t-esc='record.email.value']" position="after">
|
||||
<t t-esc="record.mobile.value"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_contact_action_sms" model="ir.actions.act_window">
|
||||
<field name="name">Mailing List Contacts</field>
|
||||
<field name="res_model">mailing.contact</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'mailing_sms': True, 'search_default_filter_not_phone_bl': 1, }</field>
|
||||
<field name="view_id" ref="mailing_contact_view_tree"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a mailing contact
|
||||
</p><p>
|
||||
Mailing contacts allow you to separate your marketing audience from your contact directory.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
57
views/mailing_list_views.xml
Normal file
57
views/mailing_list_views.xml
Normal file
@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mailing_list_view_kanban" model="ir.ui.view">
|
||||
<field name="name">mailing.list.view.kanban.inherit.mass.mailing.sms</field>
|
||||
<field name="model">mailing.list</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_list_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='contact_count_email']" position="after">
|
||||
<field name="contact_count_sms"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('o_mass_mailing_kanban_contact_links')]" position="inside">
|
||||
<a name="action_view_contacts_sms" type="object">
|
||||
<span >Valid SMS Recipients</span>
|
||||
<span t-esc="record.contact_count_sms.value" class="ms-3"/>
|
||||
</a>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('o_mailing_list_kanban_stats')]//a" position="after">
|
||||
<a class="me-sm-0 me-3 text-large" tabindex="-1"
|
||||
name="action_view_contacts_sms" type="object">
|
||||
<span class="fw-normal">
|
||||
<field name="contact_count_sms"/>
|
||||
</span>
|
||||
<br/>
|
||||
<span class="text-muted">
|
||||
<i class="fa fa-phone"/> Contacts
|
||||
</span>
|
||||
</a>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_list_view_form" model="ir.ui.view">
|
||||
<field name="name">mailing.list.view.form.inherit.sms</field>
|
||||
<field name="model">mailing.list</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_list_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//button[@name='action_send_mailing']" position="after">
|
||||
<button name="action_send_mailing_sms" string="Send SMS"
|
||||
type="object" class="btn btn-primary"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_list_action_sms" model="ir.actions.act_window">
|
||||
<field name="name">Mailing Lists</field>
|
||||
<field name="res_model">mailing.list</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="context">{'mailing_sms': True}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a Mailing List
|
||||
</p><p>
|
||||
No need to import mailing lists, you can send SMS Text Messages to contacts saved in other Odoo apps.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
301
views/mailing_mailing_views.xml
Normal file
301
views/mailing_mailing_views.xml
Normal file
@ -0,0 +1,301 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo><data>
|
||||
|
||||
<record model="ir.ui.view" id="mailing_mailing_view_search_sms">
|
||||
<field name="name">mailing.mailing.search</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_search"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='assigned_to_me']" position="attributes">
|
||||
<attribute name="string">My SMS Marketing</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_mailing_view_form_sms" model="ir.ui.view">
|
||||
<field name="name">mailing.mailing.view.form.inherit.sms</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<!-- Buttons / Actions -->
|
||||
<xpath expr="//button[@name='action_launch']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail' or state in ('in_queue', 'sending', 'processing', 'done')</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='action_schedule']" position="before">
|
||||
<field name="sms_force_send" invisible="1"/>
|
||||
<field name="schedule_type" invisible="1" readonly="state not in ['draft', 'in_queue']"/>
|
||||
<button name="action_put_in_queue" type="object"
|
||||
string="Send" class="oe_highlight" data-hotkey="v"
|
||||
invisible="mailing_type == 'mail' or state in ('in_queue', 'sending', 'processing', 'done') or sms_force_send"
|
||||
confirm="This will send SMS to all recipients. Do you still want to proceed?"/>
|
||||
<button name="action_send_mail" type="object"
|
||||
string="Send Now" class="oe_highlight" data-hotkey="g"
|
||||
invisible="mailing_type == 'mail' or state in ('in_queue', 'processing', 'done') or schedule_type == 'scheduled' or not sms_force_send"
|
||||
confirm="This will send SMS to all recipients now. Do you still want to proceed?"/>
|
||||
</xpath>
|
||||
<!-- Headers / Warnings -->
|
||||
<xpath expr="//header" position="after">
|
||||
<field name="sms_has_insufficient_credit" invisible="1"/>
|
||||
<div class="alert alert-warning text-center o-hidden-ios" invisible="not sms_has_insufficient_credit" role="alert">
|
||||
<button class="btn-link py-0"
|
||||
name="action_buy_sms_credits"
|
||||
type="object">
|
||||
<strong>
|
||||
It appears you don't have enough IAP credits. Click here to buy credits.
|
||||
</strong>
|
||||
</button>
|
||||
</div>
|
||||
<field name="sms_has_unregistered_account" invisible="1"/>
|
||||
<div class="alert alert-warning text-center o-hidden-ios" invisible="not sms_has_unregistered_account" role="alert">
|
||||
<button class="btn-link py-0"
|
||||
name="action_buy_sms_credits"
|
||||
type="object">
|
||||
<strong>
|
||||
It appears your SMS account is not registered. Click here to set up your account.
|
||||
</strong>
|
||||
</button>
|
||||
</div>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='canceled_text']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='canceled_text']" position="after">
|
||||
<span name="canceled_text_sms" invisible="mailing_type != 'sms'">SMS Text Message have been canceled and will not be sent.</span>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='scheduled_text']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='scheduled_text']" position="after">
|
||||
<span name="scheduled_text_sms" invisible="mailing_type != 'sms'">SMS Text Messages are in queue and will be sent soon.</span>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='process_text']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='process_text']" position="after">
|
||||
<span name="process_text_sms" invisible="mailing_type != 'sms'">SMS Text Messages are being processed.</span>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='sent']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='sent']" position="after">
|
||||
<span name="sent_sms" invisible="mailing_type != 'sms'">SMS Text Messages have been sent.</span>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='failed_text']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='failed_text']" position="after">
|
||||
<span name="failed_text_sms" invisible="mailing_type != 'sms'">SMS Text Messages could not be delivered.</span>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='next_departure_text']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//span[@name='next_departure_text']" position='after'>
|
||||
<span name="next_departure_text" invisible="mailing_type != 'sms'">This SMS marketing is scheduled for </span>
|
||||
</xpath>
|
||||
<!-- Stat Buttons -->
|
||||
<xpath expr="//button[@name='action_view_opened']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail' or state in ('draft', 'test')</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='action_view_replied']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail' or state in ('draft', 'test')</attribute>
|
||||
</xpath>
|
||||
<!-- Form -->
|
||||
<xpath expr="//label[@for='subject']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//label[@for='subject']" position="after">
|
||||
<label for="sms_subject" invisible="mailing_type != 'sms'"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='subject']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
<attribute name="readonly">state in ('sending', 'done')</attribute>
|
||||
<attribute name="required">mailing_type == 'mail'</attribute>
|
||||
<!-- overrided in xml view to prevent remaining helper changes (on mass_mailing module) when mass_mailing_sms uninstalled-->
|
||||
<attribute name="help">For an Email, Subject your Recipients will see in their inbox.
|
||||
For an SMS Text Message, internal Title of the Message.</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='subject']" position="after">
|
||||
<field class="text-break" name="sms_subject" string="Title" placeholder="e.g. Black Friday SMS coupon" invisible="mailing_type != 'sms'" readonly="state in ('sending', 'done')" required="mailing_type == 'sms'"/>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='action_set_favorite']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail' or favorite</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='action_remove_favorite']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail' or not favorite</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='preview']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
<attribute name="readonly">state in ('sending', 'done')</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='mail_body']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='mail_body']" position="after">
|
||||
<page string="SMS Content" name="sms_body" invisible="mailing_type != 'sms'">
|
||||
<field name="body_plaintext" widget="sms_widget"
|
||||
readonly="state in ('sending', 'done')"
|
||||
required="mailing_type == 'sms'"
|
||||
options="{'dynamic_placeholder': true}" enable_emojis="true"/>
|
||||
</page>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='settings']/group/group[@name='email_content']" position="after">
|
||||
<group string="Options" invisible="mailing_type != 'sms'">
|
||||
<field name="sms_allow_unsubscribe" invisible="mailing_type != 'sms'" readonly="state in ('sending', 'done')"/>
|
||||
</group>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='contact_list_ids']" position="attributes">
|
||||
<attribute name="context">
|
||||
{'mailing_sms' : context.get('mailing_sms'),
|
||||
'form_view_ref': 'mass_mailing.mailing_list_view_form_simplified'}
|
||||
</attribute>
|
||||
</xpath>
|
||||
<!-- Option page tweaks -->
|
||||
<xpath expr="//field[@name='email_from']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
<attribute name="readonly">state in ('sending', 'done')</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//label[@for='reply_to']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='reply_to_details']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//label[@for='attachment_ids']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='attachment_ids_details']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='mail_server_id']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail' or not mail_server_available</attribute>
|
||||
<attribute name="readonly">state in ('sending', 'done')</attribute>
|
||||
</xpath>
|
||||
<!-- A/B Testing -->
|
||||
<xpath expr="//field[@name='ab_testing_mailings_count']" position="after">
|
||||
<field name="ab_testing_mailings_sms_count" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='ab_testing_winner_selection']" position="after">
|
||||
<label for="ab_testing_sms_winner_selection" string="Winner Selection"
|
||||
invisible="not ab_testing_enabled or mailing_type != 'sms'"/>
|
||||
<field name="ab_testing_sms_winner_selection" nolabel="1"
|
||||
invisible="not ab_testing_enabled or mailing_type != 'sms'"
|
||||
readonly="state != 'draft'"
|
||||
required="ab_testing_enabled and mailing_type == 'sms'"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='ab_testing_schedule_datetime']" position="replace">
|
||||
<field name="ab_testing_schedule_datetime"
|
||||
invisible="not ab_testing_enabled or ab_testing_winner_selection == 'manual' or ab_testing_sms_winner_selection == 'manual'"
|
||||
readonly="not ab_testing_enabled or state != 'draft'"
|
||||
required="ab_testing_enabled and ab_testing_winner_selection != 'manual' and ab_testing_sms_winner_selection != 'manual'"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='mailing_form_ab_buttons']" position="attributes">
|
||||
<attribute name="invisible">not ab_testing_enabled or ab_testing_mailings_count < 2 and ab_testing_mailings_sms_count < 2</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='action_send_winner_mailing']" position="attributes">
|
||||
<attribute name="invisible">not is_ab_test_sent or ab_testing_completed or ab_testing_winner_selection == 'manual' or ab_testing_sms_winner_selection == 'manual'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='action_duplicate'][hasclass('btn-primary')]" position="attributes">
|
||||
<attribute name="invisible">not ab_testing_enabled or ab_testing_mailings_count >= 2 or ab_testing_mailings_sms_count >= 2</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_mailing_view_form_mixed" model="ir.ui.view">
|
||||
<!-- View allowign to display the mailing type and therefore choosing
|
||||
the way of mailing: not prioritized one, used in some specific cases
|
||||
like "contacting people" without predefining mail or sms -->
|
||||
<field name="name">mailing.mailing.view.form.mixed</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="priority">30</field>
|
||||
<field name="inherit_id" ref="mass_mailing_sms.mailing_mailing_view_form_sms"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='mailing_type']" position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_mailing_view_kanban_sms" model="ir.ui.view">
|
||||
<field name="name">mailing.mailing.view.kanban.inherit.sms</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="inherit_id" ref="mass_mailing.view_mail_mass_mailing_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='active']" position="after">
|
||||
<field name="sms_has_insufficient_credit"/>
|
||||
<field name="sms_has_unregistered_account"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='stat_opened']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='stat_replied']" position="attributes">
|
||||
<attribute name="invisible">mailing_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='div_responsible_avatar']" position="after">
|
||||
<div class="alert alert-warning mb-0 mt-3 o-hidden-ios" role="alert" invisible="not sms_has_insufficient_credit">
|
||||
<a name="action_buy_sms_credits" type="object">Insufficient credits</a>
|
||||
</div>
|
||||
<div class="alert alert-warning mb-0 mt-3" role="alert" invisible="not sms_has_unregistered_account">
|
||||
<a name="action_buy_sms_credits" type="object">Unregistered account</a>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_mailing_view_tree_sms" model="ir.ui.view">
|
||||
<field name="name">mailing.mailing.view.tree.sms</field>
|
||||
<field name="model">mailing.mailing</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="SMS Marketing" sample="1" decoration-info="state == 'draft'">
|
||||
<field name="calendar_date" string="Date"/>
|
||||
<field name="subject" string="Title"/>
|
||||
<field name="mailing_type" column_invisible="True"/>
|
||||
<field name="mailing_model_id" string="Recipients" optional="hide"/>
|
||||
<field name="user_id" widget="many2one_avatar_user"/>
|
||||
<field name="campaign_id" string="Campaign" groups="mass_mailing.group_mass_mailing_campaign" optional="hide"/>
|
||||
<field name="ab_testing_enabled" string="A/B Test" groups="mass_mailing.group_mass_mailing_campaign"/>
|
||||
<field name="sent" sum="Total Sent"/>
|
||||
<field name="clicked" string="Clicked (%)" widget="progressbar" avg="Average of Clicked"/>
|
||||
<field name="bounced" string="Bounced (%)" widget="progressbar" optional="hide" avg="Average of Bounced"/>
|
||||
<field name="state" decoration-info="state in ('draft', 'in_queue')" decoration-success="state in ('sending', 'done')" widget="badge"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_mailing_action_sms" model="ir.actions.act_window">
|
||||
<field name="name">SMS Marketing</field>
|
||||
<field name="res_model">mailing.mailing</field>
|
||||
<field name="view_mode">tree,kanban,form,calendar,graph</field>
|
||||
<field name="search_view_id" ref="mailing_mailing_view_search_sms"/>
|
||||
<field name="domain">[('mailing_type', '=', 'sms')]</field>
|
||||
<field name="context">{
|
||||
'search_default_assigned_to_me': 1,
|
||||
'default_user_id': uid,
|
||||
'default_mailing_type': 'sms',
|
||||
'mailing_sms': True
|
||||
}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a SMS Marketing Mailing
|
||||
</p><p>
|
||||
Write an appealing SMS Text Message, define recipients and track its results.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
<record id="mailing_mailing_action_sms_view_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence">1</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="mailing_mailing_view_tree_sms"/>
|
||||
<field name="act_window_id" ref="mailing_mailing_action_sms"/>
|
||||
</record>
|
||||
<record id="mailing_mailing_action_sms_view_kanban" model="ir.actions.act_window.view">
|
||||
<field name="sequence">2</field>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="view_id" ref="mailing_mailing_view_kanban_sms"/>
|
||||
<field name="act_window_id" ref="mailing_mailing_action_sms"/>
|
||||
</record>
|
||||
|
||||
</data></odoo>
|
75
views/mailing_sms_menus.xml
Normal file
75
views/mailing_sms_menus.xml
Normal file
@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- SMS Marketing -->
|
||||
<menuitem id="mass_mailing_sms_menu_root"
|
||||
name="SMS Marketing"
|
||||
sequence="120"
|
||||
web_icon="mass_mailing_sms,static/description/icon.png"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
|
||||
<!-- SMS Marketing / SMS Marketing -->
|
||||
<menuitem id="mass_mailing_sms_menu_mass_sms"
|
||||
name="SMS Marketing"
|
||||
action="mailing_mailing_action_sms"
|
||||
parent="mass_mailing_sms_menu_root"
|
||||
sequence="1"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
|
||||
<!-- SMS Marketing / Contacts Lists -->
|
||||
<menuitem id="mass_mailing_sms_menu_contacts"
|
||||
name="Mailing Lists"
|
||||
parent="mass_mailing_sms_menu_root"
|
||||
sequence="2"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
<!-- SMS Marketing / Contacts Lists / Contacts Lists -->
|
||||
<menuitem id="mailing_list_menu_sms"
|
||||
name="Mailing Lists"
|
||||
action="mailing_list_action_sms"
|
||||
parent="mass_mailing_sms_menu_contacts"
|
||||
sequence="1"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
<!-- SMS Marketing / Contacts Lists / Contacts -->
|
||||
<menuitem id="mailing_contact_menu_sms"
|
||||
name="Mailing List Contacts"
|
||||
action="mailing_contact_action_sms"
|
||||
parent="mass_mailing_sms_menu_contacts"
|
||||
sequence="2"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
|
||||
<!-- SMS Markrting / Campaigns -->
|
||||
<menuitem id="menu_email_campaigns"
|
||||
name="Campaigns"
|
||||
parent="mass_mailing_sms_menu_root"
|
||||
sequence="5"
|
||||
action="mass_mailing.action_view_utm_campaigns"
|
||||
groups="mass_mailing.group_mass_mailing_campaign"/>
|
||||
|
||||
<!-- SMS Marketing / Reporting -->
|
||||
<menuitem id="mass_mailing_sms_menu_reporting"
|
||||
name="Reporting"
|
||||
action="mailing_trace_report_action_sms"
|
||||
parent="mass_mailing_sms_menu_root"
|
||||
sequence="80"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
|
||||
<!-- SMS Marketing / Configuration -->
|
||||
<menuitem id="mass_mailing_sms_menu_configuration"
|
||||
name="Configuration"
|
||||
parent="mass_mailing_sms_menu_root"
|
||||
sequence="100"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
<!-- SMS Marketing / Configuration / Blacklist -->
|
||||
<menuitem id="phone_blacklist_menu"
|
||||
name="Blacklisted Phone Numbers"
|
||||
parent="mass_mailing_sms_menu_configuration"
|
||||
sequence="1"
|
||||
action="phone_validation.phone_blacklist_action"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
<!-- SMS Marketing / Configuration / Link Tracker -->
|
||||
<menuitem id="link_tracker_menu"
|
||||
name="Link Tracker"
|
||||
parent="mass_mailing_sms_menu_configuration"
|
||||
sequence="2"
|
||||
action="link_tracker.link_tracker_action"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
</odoo>
|
135
views/mailing_trace_views.xml
Normal file
135
views/mailing_trace_views.xml
Normal file
@ -0,0 +1,135 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="mailing_trace_view_search" model="ir.ui.view">
|
||||
<field name="name">mailing.trace.view.search.inherit.sms</field>
|
||||
<field name="model">mailing.trace</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_trace_view_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='email']" position="after">
|
||||
<field name="sms_id_int"/>
|
||||
<field name="sms_id"/>
|
||||
<field name="sms_number"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_view_tree" model="ir.ui.view">
|
||||
<field name="name">mailing.trace.view.tree.inherit.sms</field>
|
||||
<field name="model">mailing.trace</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_trace_view_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='email']" position="before">
|
||||
<field name="trace_type"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='email']" position="after">
|
||||
<field name="sms_number"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_view_tree_sms" model="ir.ui.view">
|
||||
<field name="name">mailing.trace.view.tree.sms</field>
|
||||
<field name="model">mailing.trace</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="SMS Traces" create="0">
|
||||
<field name="mass_mailing_id"/>
|
||||
<field name="sms_number"/>
|
||||
<field name="sent_datetime"/>
|
||||
<field name="links_click_datetime"/>
|
||||
<field name="trace_status" widget="badge"/>
|
||||
<field name="failure_type" optional="show"/>
|
||||
<field name="open_datetime" optional="hide"/>
|
||||
<field name="reply_datetime" optional="hide"/>
|
||||
<button name="action_view_contact" type="object"
|
||||
string="Open Recipient" icon="fa-user"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_view_form" model="ir.ui.view">
|
||||
<field name="name">mailing.trace.view.form.inherit.sms</field>
|
||||
<field name="model">mailing.trace</field>
|
||||
<field name="inherit_id" ref="mass_mailing.mailing_trace_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='trace_status']" position="attributes">
|
||||
<attribute name="statusbar_visible">outgoing,pending,sent,error</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='email']" position="attributes">
|
||||
<attribute name="invisible">trace_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='mail_mail_id_int']" position="attributes">
|
||||
<attribute name="invisible">trace_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='message_id']" position="attributes">
|
||||
<attribute name="invisible">trace_type != 'mail'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='email']" position="after">
|
||||
<field name="sms_number" invisible="trace_type != 'sms'"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='message_id']" position="after">
|
||||
<field name="sms_id_int" string="SMS ID"
|
||||
invisible="trace_type != 'sms'"
|
||||
groups="base.group_no_one"/>
|
||||
<field name="sms_code" invisible="trace_type != 'sms'"
|
||||
groups="base.group_no_one"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_trace_view_form_sms" model="ir.ui.view">
|
||||
<field name="name">mailing.trace.view.form.sms</field>
|
||||
<field name="model">mailing.trace</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="SMS Trace" create="0" edit="0">
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button name="action_view_contact"
|
||||
type="object" icon="fa-user" class="oe_stat_button">
|
||||
<span widget="statinfo">Open Recipient</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="alert alert-info text-center"
|
||||
invisible="trace_status != 'error' or
|
||||
failure_type in ('sms_not_delivered', 'sms_not_allowed', 'sms_invalid_destination', 'sms_rejected', 'sms_rejected')"
|
||||
role="alert">
|
||||
<strong>This SMS could not be sent.</strong>
|
||||
</div>
|
||||
<div class="alert alert-info text-center"
|
||||
invisible="trace_status != 'error' or
|
||||
failure_type not in ('sms_not_delivered', 'sms_not_allowed', 'sms_invalid_destination', 'sms_rejected', 'sms_rejected')"
|
||||
role="alert">
|
||||
<strong>This SMS could not be delivered.</strong>
|
||||
</div>
|
||||
<div class="alert alert-info text-center" invisible="trace_status != 'bounce'" role="alert">
|
||||
<strong>This number appears to be invalid.</strong>
|
||||
</div>
|
||||
<group>
|
||||
<group string="Status">
|
||||
<field name="trace_status"/>
|
||||
<field name="failure_type" invisible="not failure_type"/>
|
||||
<field name="sent_datetime" invisible="not sent_datetime"/>
|
||||
<field name="links_click_datetime" invisible="not links_click_datetime"/>
|
||||
<field name="open_datetime" invisible="not open_datetime"/>
|
||||
<field name="reply_datetime" invisible="not reply_datetime"/>
|
||||
</group>
|
||||
<group string="Mailing">
|
||||
<field name="trace_type" invisible="1"/>
|
||||
<field name="sms_number"/>
|
||||
<field name="mass_mailing_id"/>
|
||||
<field name="sms_id_int" string="SMS ID" groups="base.group_no_one"/>
|
||||
<field name="sms_code" groups="base.group_no_one"/>
|
||||
</group>
|
||||
<group string="Marketing">
|
||||
<field name="campaign_id" groups="mass_mailing.group_mass_mailing_campaign"/>
|
||||
<field name="medium_id"/>
|
||||
<field name="source_id"/>
|
||||
<field name="sms_id" groups="base.group_no_one" invisible="not sms_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
60
views/mass_mailing_sms_templates_portal.xml
Normal file
60
views/mass_mailing_sms_templates_portal.xml
Normal file
@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<template id="blacklist_main" name="Unsubscribed">
|
||||
<t t-call="portal.frontend_layout">
|
||||
<div class="container mb64">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 offset-lg-3">
|
||||
<h3>SMS Subscription</h3>
|
||||
|
||||
<form t-att-action="'/sms/%s/unsubscribe/%s' % (mailing_id, trace_code)" method="post">
|
||||
<p>Please enter your phone number</p>
|
||||
<div class="mb-3 row">
|
||||
<label for="sms_number" class="col-sm-2 col-form-label">Number</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="sms_number" id="sms_number" t-att-required="true"/>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
|
||||
<input type="hidden" name="trace_code" t-att-value="trace_code"/>
|
||||
<input type="hidden" name="mailing_id" t-att-value="mailing_id"/>
|
||||
<div class="mb-3 row">
|
||||
<div class="col-sm-10 offset-sm-2">
|
||||
<button type="submit" class="btn btn-primary">Unsubscribe me</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="blacklist_number" name="Unsubscribed">
|
||||
<t t-call="portal.frontend_layout">
|
||||
<div class="container mb64">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 offset-lg-3">
|
||||
<h3>SMS Subscription</h3>
|
||||
|
||||
<div t-if="unsubscribe_error" class="alert alert-danger text-center" role="alert">
|
||||
<p>There was an error when trying to unsubscribe <strong t-esc="sms_number"/></p>
|
||||
<p t-esc="unsubscribe_error"/>
|
||||
</div>
|
||||
<div t-else="" class="alert alert-success text-center" role="status">
|
||||
<t t-if="lists_optout">
|
||||
<p><strong t-esc="sms_number"/> has been successfully removed from</p>
|
||||
<t t-foreach="lists_optout" t-as="list_id">
|
||||
<strong t-esc="list_id.name"/><br />
|
||||
</t>
|
||||
</t>
|
||||
<p t-else="">
|
||||
<strong t-esc="sms_number"/> has been successfully blacklisted
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
75
views/utm_campaign_views.xml
Normal file
75
views/utm_campaign_views.xml
Normal file
@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record model="ir.ui.view" id="utm_campaign_view_form">
|
||||
<field name="name">utm.campaign.view.form</field>
|
||||
<field name="model">utm.campaign</field>
|
||||
<field name="inherit_id" ref="utm.utm_campaign_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//header" position="inside">
|
||||
<button name="action_create_mass_sms" type="object" class="oe_highlight" string="Send SMS"
|
||||
invisible="not is_mailing_campaign_activated"
|
||||
groups="mass_mailing.group_mass_mailing_user"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
|
||||
<button name="action_redirect_to_mailing_sms"
|
||||
type="object"
|
||||
class="oe_stat_button order-11"
|
||||
invisible="mailing_sms_count == 0 or not is_mailing_campaign_activated"
|
||||
icon="fa-mobile" groups="mass_mailing.group_mass_mailing_user">
|
||||
<field name="mailing_sms_count" widget="statinfo" string="SMS"/>
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//sheet" position="inside">
|
||||
<field name="ab_testing_mailings_sms_count" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//notebook" position="inside">
|
||||
<page string="SMS" name="sms"
|
||||
invisible="mailing_sms_count == 0 or not is_mailing_campaign_activated"
|
||||
groups="mass_mailing.group_mass_mailing_user">
|
||||
<group>
|
||||
<field name="mailing_sms_ids" nolabel="1">
|
||||
<tree>
|
||||
<field name="calendar_date" string="Date"/>
|
||||
<field name="subject" string="Title"/>
|
||||
<field name="mailing_type" column_invisible="True"/>
|
||||
<field name="mailing_model_id" string="Recipients" optional="hide"/>
|
||||
<field name="user_id" widget="many2one_avatar_user"/>
|
||||
<field name="campaign_id" string="Campaign" groups="mass_mailing.group_mass_mailing_campaign" optional="hide"/>
|
||||
<field name="ab_testing_enabled" string="A/B Test"
|
||||
groups="mass_mailing.group_mass_mailing_campaign"
|
||||
column_invisible="parent.ab_testing_mailings_sms_count == 0"/>
|
||||
<field name="sent" sum="Total Sent"/>
|
||||
<field name="clicked" string="Clicked (%)" avg="Average of Clicked"/>
|
||||
<field name="bounced" string="Bounced (%)" optional="hide" avg="Average of Bounced"/>
|
||||
<field name="state" decoration-info="state in ('draft', 'in_queue')" decoration-success="state in ('sending', 'done')" widget="badge"/>
|
||||
<button name="action_duplicate" type="object" string="Duplicate"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='ab_test_group']" position="attributes">
|
||||
<attribute name="invisible">ab_testing_mailings_sms_count == 0 and ab_testing_mailings_count == 0</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="utm_campaign_view_kanban">
|
||||
<field name="name">utm.campaign.view.kanban</field>
|
||||
<field name="model">utm.campaign</field>
|
||||
<field name="inherit_id" ref="utm.utm_campaign_view_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='user_id']" position="after">
|
||||
<field name="mailing_sms_count" groups="mass_mailing.group_mass_mailing_user"/>
|
||||
</xpath>
|
||||
<xpath expr="//ul[@id='o_utm_actions']">
|
||||
<a name="action_redirect_to_mailing_sms" type="object"
|
||||
t-attf-class="oe_mailings #{record.mailing_sms_count.raw_value === 0 ? 'text-muted' : ''}"
|
||||
t-if="record.is_mailing_campaign_activated.raw_value"
|
||||
groups="mass_mailing.group_mass_mailing_user">
|
||||
<t t-out="record.mailing_sms_count.raw_value"/> SMS
|
||||
</a>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
5
wizard/__init__.py
Normal file
5
wizard/__init__.py
Normal file
@ -0,0 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import mailing_sms_test
|
||||
from . import sms_composer
|
68
wizard/mailing_sms_test.py
Normal file
68
wizard/mailing_sms_test.py
Normal file
@ -0,0 +1,68 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from markupsafe import Markup
|
||||
from werkzeug.urls import url_join
|
||||
|
||||
from odoo import fields, models, _
|
||||
from odoo.addons.sms.tools.sms_api import SmsApi
|
||||
|
||||
|
||||
class MassSMSTest(models.TransientModel):
|
||||
_name = 'mailing.sms.test'
|
||||
_description = 'Test SMS Mailing'
|
||||
|
||||
def _default_numbers(self):
|
||||
return self.env.user.partner_id.phone_sanitized or ""
|
||||
|
||||
numbers = fields.Text(string='Number(s)', required=True,
|
||||
default=_default_numbers, help='Carriage-return-separated list of phone numbers')
|
||||
mailing_id = fields.Many2one('mailing.mailing', string='Mailing', required=True, ondelete='cascade')
|
||||
|
||||
def action_send_sms(self):
|
||||
self.ensure_one()
|
||||
|
||||
numbers = [number.strip() for number in self.numbers.splitlines()]
|
||||
sanitized_numbers = [self.env.user._phone_format(number=number) for number in numbers]
|
||||
invalid_numbers = [number for sanitized, number in zip(sanitized_numbers, numbers) if not sanitized]
|
||||
|
||||
record = self.env[self.mailing_id.mailing_model_real].search([], limit=1)
|
||||
body = self.mailing_id.body_plaintext
|
||||
if record:
|
||||
# Returns a proper error if there is a syntax error with qweb
|
||||
body = self.env['mail.render.mixin']._render_template(body, self.mailing_id.mailing_model_real, record.ids)[record.id]
|
||||
|
||||
new_sms_messages_sudo = self.env['sms.sms'].sudo().create([{'body': body, 'number': number} for number in sanitized_numbers])
|
||||
sms_api = SmsApi(self.env)
|
||||
sent_sms_list = sms_api._send_sms_batch([{
|
||||
'content': body,
|
||||
'numbers': [{'number': sms_id.number, 'uuid': sms_id.uuid} for sms_id in new_sms_messages_sudo],
|
||||
}], delivery_reports_url=url_join(self[0].get_base_url(), '/sms/status'))
|
||||
|
||||
error_messages = {}
|
||||
if any(sent_sms.get('state') != 'success' for sent_sms in sent_sms_list):
|
||||
error_messages = sms_api._get_sms_api_error_messages()
|
||||
|
||||
notification_messages = []
|
||||
if invalid_numbers:
|
||||
notification_messages.append(_('The following numbers are not correctly encoded: %s',
|
||||
', '.join(invalid_numbers)))
|
||||
|
||||
for sent_sms in sent_sms_list:
|
||||
if sent_sms.get('state') == 'success':
|
||||
notification_messages.append(
|
||||
_('Test SMS successfully sent to %s', sent_sms.get('res_id')))
|
||||
elif sent_sms.get('state'):
|
||||
notification_messages.append(
|
||||
_('Test SMS could not be sent to %s: %s',
|
||||
sent_sms.get('res_id'),
|
||||
error_messages.get(sent_sms['state'], _("An error occurred.")))
|
||||
)
|
||||
|
||||
if notification_messages:
|
||||
message_body = Markup(
|
||||
f"<ul>{''.join('<li>%s</li>' for _ in notification_messages)}</ul>"
|
||||
) % tuple(notification_messages)
|
||||
self.mailing_id._message_log(body=message_body)
|
||||
|
||||
return True
|
29
wizard/mailing_sms_test_views.xml
Normal file
29
wizard/mailing_sms_test_views.xml
Normal file
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0"?>
|
||||
<odoo>
|
||||
<record id="mailing_sms_test_view_form" model="ir.ui.view">
|
||||
<field name="name">mailing.sms.test.view.form</field>
|
||||
<field name="model">mailing.sms.test</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Send a Sample SMS">
|
||||
<p class="text-muted">
|
||||
Send a sample SMS for testing purpose to the numbers below.
|
||||
</p>
|
||||
<group>
|
||||
<field name="numbers" placeholder="+32 495 85 85 77 +33 545 55 55 55"/>
|
||||
<field name="mailing_id" invisible="1"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button string="Send Test" name="action_send_sms" type="object" class="btn-primary" data-hotkey="q"/>
|
||||
<button string="Discard" class="btn btn-secondary" special="cancel" data-hotkey="x"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="mailing_sms_test_action" model="ir.actions.act_window">
|
||||
<field name="name">Test Mailing</field>
|
||||
<field name="res_model">mailing.sms.test</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
93
wizard/sms_composer.py
Normal file
93
wizard/sms_composer.py
Normal file
@ -0,0 +1,93 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import werkzeug.urls
|
||||
|
||||
from odoo import _, Command, fields, models
|
||||
|
||||
|
||||
class SMSComposer(models.TransientModel):
|
||||
_inherit = 'sms.composer'
|
||||
|
||||
# mass mode with mass sms
|
||||
mass_sms_allow_unsubscribe = fields.Boolean('Include opt-out link', default=True)
|
||||
mailing_id = fields.Many2one('mailing.mailing', string='Mailing')
|
||||
utm_campaign_id = fields.Many2one('utm.campaign', string='Campaign', ondelete='set null')
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Mass mode specific
|
||||
# ------------------------------------------------------------
|
||||
|
||||
def _get_unsubscribe_url(self, res_id, trace_code, number):
|
||||
return werkzeug.urls.url_join(
|
||||
self.get_base_url(),
|
||||
'/sms/%s/%s' % (self.mailing_id.id, trace_code)
|
||||
)
|
||||
|
||||
def _prepare_mass_sms_trace_values(self, record, sms_values):
|
||||
trace_code = self.env['mailing.trace']._get_random_code()
|
||||
trace_values = {
|
||||
'mass_mailing_id': self.mailing_id.id,
|
||||
'model': self.res_model,
|
||||
'res_id': record.id,
|
||||
'sms_code': trace_code,
|
||||
'sms_number': sms_values['number'],
|
||||
'sms_tracker_ids': [Command.create({'sms_uuid': sms_values['uuid']})],
|
||||
'trace_type': 'sms',
|
||||
}
|
||||
if sms_values['state'] == 'error':
|
||||
trace_values['failure_type'] = sms_values['failure_type']
|
||||
trace_values['trace_status'] = 'error'
|
||||
elif sms_values['state'] == 'canceled':
|
||||
trace_values['failure_type'] = sms_values['failure_type']
|
||||
trace_values['trace_status'] = 'cancel'
|
||||
else:
|
||||
if self.mass_sms_allow_unsubscribe:
|
||||
sms_values['body'] = '%s\n%s' % (sms_values['body'] or '', _('STOP SMS: %s', self._get_unsubscribe_url(record.id, trace_code, sms_values['number'])))
|
||||
return trace_values
|
||||
|
||||
def _get_optout_record_ids(self, records, recipients_info):
|
||||
""" Fetch opt-out records based on mailing. """
|
||||
res = super(SMSComposer, self)._get_optout_record_ids(records, recipients_info)
|
||||
if self.mailing_id:
|
||||
optout_res_ids = self.mailing_id._get_opt_out_list_sms()
|
||||
res += optout_res_ids
|
||||
return res
|
||||
|
||||
def _get_done_record_ids(self, records, recipients_info):
|
||||
""" A/B testing could lead to records having been already mailed. """
|
||||
res = super(SMSComposer, self)._get_done_record_ids(records, recipients_info)
|
||||
if self.mailing_id:
|
||||
seen_ids, seen_list = self.mailing_id._get_seen_list_sms()
|
||||
res += seen_ids
|
||||
return res
|
||||
|
||||
def _prepare_body_values(self, records):
|
||||
all_bodies = super(SMSComposer, self)._prepare_body_values(records)
|
||||
if self.mailing_id:
|
||||
tracker_values = self.mailing_id._get_link_tracker_values()
|
||||
for sms_id, body in all_bodies.items():
|
||||
body = self.env['mail.render.mixin'].sudo()._shorten_links_text(body, tracker_values)
|
||||
all_bodies[sms_id] = body
|
||||
return all_bodies
|
||||
|
||||
def _prepare_mass_sms_values(self, records):
|
||||
result = super(SMSComposer, self)._prepare_mass_sms_values(records)
|
||||
if self.composition_mode == 'mass' and self.mailing_id:
|
||||
for record in records:
|
||||
sms_values = result[record.id]
|
||||
|
||||
trace_values = self._prepare_mass_sms_trace_values(record, sms_values)
|
||||
sms_values.update({
|
||||
'mailing_id': self.mailing_id.id,
|
||||
'mailing_trace_ids': [(0, 0, trace_values)],
|
||||
})
|
||||
return result
|
||||
|
||||
def _prepare_mass_sms(self, records, sms_record_values):
|
||||
sms_all = super(SMSComposer, self)._prepare_mass_sms(records, sms_record_values)
|
||||
if self.mailing_id:
|
||||
updated_bodies = sms_all._update_body_short_links()
|
||||
for sms in sms_all:
|
||||
sms.body = updated_bodies[sms.id]
|
||||
return sms_all
|
16
wizard/sms_composer_views.xml
Normal file
16
wizard/sms_composer_views.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="sms_composer_view_form" model="ir.ui.view">
|
||||
<field name="name">sms.composer.views.inherit.sms</field>
|
||||
<field name="model">sms.composer</field>
|
||||
<field name="inherit_id" ref="sms.sms_composer_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='res_model']" position="after">
|
||||
<field name="utm_campaign_id" groups="mass_mailing.group_mass_mailing_campaign"
|
||||
invisible="1"/>
|
||||
<field name="mailing_id" invisible="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
Loading…
x
Reference in New Issue
Block a user