Начальное наполнение

This commit is contained in:
parent 4f25fe6e63
commit 52e3317c52
84 changed files with 46783 additions and 0 deletions

6
__init__.py Normal file
View 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
View 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
View 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
View 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
View 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>

View 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
View 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>

View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

1061
i18n/bg.po Normal file

File diff suppressed because it is too large Load Diff

1108
i18n/ca.po Normal file

File diff suppressed because it is too large Load Diff

1081
i18n/cs.po Normal file

File diff suppressed because it is too large Load Diff

1074
i18n/da.po Normal file

File diff suppressed because it is too large Load Diff

1112
i18n/de.po Normal file

File diff suppressed because it is too large Load Diff

1112
i18n/es.po Normal file

File diff suppressed because it is too large Load Diff

1118
i18n/es_419.po Normal file

File diff suppressed because it is too large Load Diff

1103
i18n/et.po Normal file

File diff suppressed because it is too large Load Diff

1075
i18n/fa.po Normal file

File diff suppressed because it is too large Load Diff

1105
i18n/fi.po Normal file

File diff suppressed because it is too large Load Diff

1113
i18n/fr.po Normal file

File diff suppressed because it is too large Load Diff

1092
i18n/he.po Normal file

File diff suppressed because it is too large Load Diff

960
i18n/hr.po Normal file
View 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

File diff suppressed because it is too large Load Diff

1111
i18n/id.po Normal file

File diff suppressed because it is too large Load Diff

1108
i18n/it.po Normal file

File diff suppressed because it is too large Load Diff

1085
i18n/ja.po Normal file

File diff suppressed because it is too large Load Diff

1089
i18n/ko.po Normal file

File diff suppressed because it is too large Load Diff

952
i18n/lb.po Normal file
View 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

File diff suppressed because it is too large Load Diff

1059
i18n/lv.po Normal file

File diff suppressed because it is too large Load Diff

1049
i18n/mass_mailing_sms.pot Normal file

File diff suppressed because it is too large Load Diff

961
i18n/mn.po Normal file
View 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
View 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

File diff suppressed because it is too large Load Diff

1092
i18n/pl.po Normal file

File diff suppressed because it is too large Load Diff

1054
i18n/pt.po Normal file

File diff suppressed because it is too large Load Diff

1114
i18n/pt_BR.po Normal file

File diff suppressed because it is too large Load Diff

969
i18n/ro.po Normal file
View 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

File diff suppressed because it is too large Load Diff

1066
i18n/sk.po Normal file

File diff suppressed because it is too large Load Diff

1073
i18n/sl.po Normal file

File diff suppressed because it is too large Load Diff

1092
i18n/sr.po Normal file

File diff suppressed because it is too large Load Diff

1079
i18n/sv.po Normal file

File diff suppressed because it is too large Load Diff

1101
i18n/th.po Normal file

File diff suppressed because it is too large Load Diff

1108
i18n/tr.po Normal file

File diff suppressed because it is too large Load Diff

1096
i18n/uk.po Normal file

File diff suppressed because it is too large Load Diff

1075
i18n/vi.po Normal file

File diff suppressed because it is too large Load Diff

1083
i18n/zh_CN.po Normal file

File diff suppressed because it is too large Load Diff

1079
i18n/zh_TW.po Normal file

File diff suppressed because it is too large Load Diff

11
models/__init__.py Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
))

View 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>

View 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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_mailing_sms_test access.mailing.sms.test model_mailing_sms_test mass_mailing.group_mass_mailing_user 1 1 1 0
3 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View 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

View 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
View 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
View 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()

View 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)])

View 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')

View 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'))

View 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
View 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")

View 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>

View 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>

View 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 &lt; 2 and ab_testing_mailings_sms_count &lt; 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 &gt;= 2 or ab_testing_mailings_sms_count &gt;= 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>

View 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>

View 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>

View 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>

View 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
View 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

View 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

View 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&#10;+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
View 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

View 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>