[MOV] marketing_campaign: Move to enterprise
According to fp, this outdated and incomplete module will be moved to enterprise to become a fully developed and integrated application.
This commit is contained in:
committed by
Yannick Tivisse
parent
72c1f07d53
commit
1c3c3ab9fc
-10
@@ -367,16 +367,6 @@ file_filter = addons/maintenance/i18n/<lang>.po
|
||||
source_file = addons/maintenance/i18n/maintenance.pot
|
||||
source_lang = en
|
||||
|
||||
[odoo-master.marketing_campaign]
|
||||
file_filter = addons/marketing_campaign/i18n/<lang>.po
|
||||
source_file = addons/marketing_campaign/i18n/marketing_campaign.pot
|
||||
source_lang = en
|
||||
|
||||
[odoo-master.marketing_campaign_crm_demo]
|
||||
file_filter = addons/marketing_campaign_crm_demo/i18n/<lang>.po
|
||||
source_file = addons/marketing_campaign_crm_demo/i18n/marketing_campaign_crm_demo.pot
|
||||
source_lang = en
|
||||
|
||||
[odoo-master.mass_mailing]
|
||||
file_filter = addons/mass_mailing/i18n/<lang>.po
|
||||
source_file = addons/mass_mailing/i18n/mass_mailing.pot
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
||||
from . import report
|
||||
@@ -1,42 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
{
|
||||
'name': 'Marketing Campaigns',
|
||||
'version': '1.1',
|
||||
'depends': ['document', 'mail', 'decimal_precision'],
|
||||
'category': 'Marketing',
|
||||
'description': """
|
||||
This module provides leads automation through marketing campaigns (campaigns can in fact be defined on any resource, not just CRM Leads).
|
||||
=========================================================================================================================================
|
||||
|
||||
The campaigns are dynamic and multi-channels. The process is as follows:
|
||||
------------------------------------------------------------------------
|
||||
* Design marketing campaigns like workflows, including email templates to
|
||||
send, reports to print and send by email, custom actions
|
||||
* Define input segments that will select the items that should enter the
|
||||
campaign (e.g leads from certain countries.)
|
||||
* Run your campaign in simulation mode to test it real-time or accelerated,
|
||||
and fine-tune it
|
||||
* You may also start the real campaign in manual mode, where each action
|
||||
requires manual validation
|
||||
* Finally launch your campaign live, and watch the statistics as the
|
||||
campaign does everything fully automatically.
|
||||
|
||||
While the campaign runs you can of course continue to fine-tune the parameters,
|
||||
input segments, workflow.
|
||||
|
||||
**Note:** If you need demo data, you can install the marketing_campaign_crm_demo
|
||||
module, but this will also install the CRM application as it depends on
|
||||
CRM Leads.
|
||||
""",
|
||||
'website': 'https://www.odoo.com/page/lead-automation',
|
||||
'data': [
|
||||
'security/marketing_campaign_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'views/marketing_campaign_views.xml',
|
||||
'data/marketing_campaign_data.xml',
|
||||
'report/campaign_analysis_view.xml',
|
||||
],
|
||||
'demo': ['data/marketing_campaign_demo.xml'],
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
|
||||
<!-- Cron -->
|
||||
<record model="ir.cron" id="ir_cron_marketing_campaign_every_hour">
|
||||
<field name="name">Marketing Campaign: Campaign workitems processing</field>
|
||||
<field name="model_id" ref="model_marketing_campaign_workitem"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.process_all()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">hours</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.cron" id="ir_cron_marketing_campaign_every_day">
|
||||
<field name="name">Marketing Campaign: Segment Sync</field>
|
||||
<field name="model_id" ref="model_marketing_campaign_segment"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.process_segment()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field><!-- it s every day -->
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -1,103 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- Email tempalte -->
|
||||
<record id="email_template_1" model="mail.template">
|
||||
<field name="name">welcome new partner</field>
|
||||
<field name="email_from">info@openerp.com</field>
|
||||
<field name="subject">Welcome to the Odoo Partner Channel!</field>
|
||||
<field name="email_to">${(object.email or '')|safe}</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>You will receive your welcome pack via email shortly.</p>
|
||||
<p>Thank you,</p>
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="email_template_2" model="mail.template">
|
||||
<field name="name">congrats silver partner</field>
|
||||
<field name="email_from">info@openerp.com</field>
|
||||
<field name="subject">Congratulations! You are now a Silver Partner!</field>
|
||||
<field name="email_to">${(object.email or '')|safe}</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>We are delighted to welcome you among our Silver Partners as of today!</p>
|
||||
<p>Thank you,</p>
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_3" model="mail.template">
|
||||
<field name="name">congrats gold partner</field>
|
||||
<field name="email_from">info@openerp.com</field>
|
||||
<field name="subject">Congratulations! You are now one of our Gold Partners!</field>
|
||||
<field name="email_to">${(object.email or '')|safe}</field>
|
||||
<field name="model_id" ref="base.model_res_partner"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>We are delighted to let you know that you have entered the select circle of our Gold Partners!</p>
|
||||
<p>Thank you,</p>
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
<!-- Campaign -->
|
||||
<record id="marketing_campaign_openerppartnerchannel" model="marketing.campaign">
|
||||
<field name="name">Odoo Partner Channel</field>
|
||||
<field name="object_id" ref="base.model_res_partner"/>
|
||||
<field name="mode">active</field>
|
||||
</record>
|
||||
|
||||
<!-- Activity -->
|
||||
|
||||
<record id="marketing_campaign_activity_0" model="marketing.campaign.activity">
|
||||
<field name="name">New Partner</field>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerppartnerchannel"/>
|
||||
<field name="email_template_id" ref="email_template_1"/>
|
||||
<field name="condition">object.credit_limit < 10000</field>
|
||||
<field name="keep_if_condition_not_met">True</field>
|
||||
<field eval="1" name="start"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_activity_1" model="marketing.campaign.activity">
|
||||
<field name="name">Silver Partner</field>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerppartnerchannel"/>
|
||||
<field name="condition">object.credit_limit >= 10000 and object.credit_limit < 50000</field>
|
||||
<field name="keep_if_condition_not_met">True</field>
|
||||
<field name="email_template_id" ref="email_template_2"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_activity_2" model="marketing.campaign.activity">
|
||||
<field name="name">Gold Partner</field>
|
||||
<field name="condition">object.credit_limit >= 100000</field>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerppartnerchannel"/>
|
||||
<field name="keep_if_condition_not_met">True</field>
|
||||
<field name="email_template_id" ref="email_template_3"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Transition -->
|
||||
<record id="marketing_campaign_transition_0" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_0"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_1"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_transition_1" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_1"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_2"/>
|
||||
</record>
|
||||
|
||||
<!-- Segment -->
|
||||
<record id="filter0" model="ir.filters">
|
||||
<field name="name">Partners</field>
|
||||
<field name="domain">[('name','like','Agrolait')]</field>
|
||||
<field name="model_id">res.partner</field>
|
||||
</record>
|
||||
<record id="marketing_campaign_segment0" model="marketing.campaign.segment">
|
||||
<field eval="time.strftime('%Y-%m-%d %H:%M:%S')" name="date_run"/>
|
||||
<field name="name">Odoo Partner</field>
|
||||
<field name="sync_mode">create_date</field>
|
||||
<field name="ir_filter_id" ref="filter0"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerppartnerchannel"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import ir_actions
|
||||
from . import mail_template
|
||||
from . import marketing_campaign
|
||||
@@ -1,16 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import api, models
|
||||
|
||||
|
||||
class IrActionsReport(models.Model):
|
||||
_inherit = 'ir.actions.report'
|
||||
|
||||
@api.model
|
||||
def search(self, args, offset=0, limit=None, order=None, count=False):
|
||||
model_id = self.env.context.get('object_id')
|
||||
if model_id:
|
||||
model = self.env['ir.model'].browse(model_id).model
|
||||
args.append(('model', '=', model))
|
||||
return super(IrActionsReport, self).search(args, offset=offset, limit=limit, order=order, count=count)
|
||||
@@ -1,12 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class MailTemplate(models.Model):
|
||||
_inherit = "mail.template"
|
||||
|
||||
model_id = fields.Many2one('ir.model', default=lambda self: self.env.context.get('object_id', False))
|
||||
|
||||
# TODO: add constraint to prevent disabling / disapproving an email account used in a running campaign
|
||||
@@ -1,619 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from traceback import format_exception
|
||||
from sys import exc_info
|
||||
|
||||
import re
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
from odoo.tools.safe_eval import safe_eval
|
||||
|
||||
from odoo.addons import decimal_precision as dp
|
||||
|
||||
_intervalTypes = {
|
||||
'hours': lambda interval: relativedelta(hours=interval),
|
||||
'days': lambda interval: relativedelta(days=interval),
|
||||
'months': lambda interval: relativedelta(months=interval),
|
||||
'years': lambda interval: relativedelta(years=interval),
|
||||
}
|
||||
|
||||
|
||||
class MarketingCampaign(models.Model):
|
||||
_name = "marketing.campaign"
|
||||
_description = "Marketing Campaign"
|
||||
|
||||
name = fields.Char('Name', required=True)
|
||||
object_id = fields.Many2one('ir.model', 'Resource', required=True,
|
||||
help="Choose the resource on which you want this campaign to be run")
|
||||
partner_field_id = fields.Many2one('ir.model.fields', 'Partner Field',
|
||||
domain="[('model_id', '=', object_id), ('ttype', '=', 'many2one'), ('relation', '=', 'res.partner')]",
|
||||
help="The generated workitems will be linked to the partner related to the record. "
|
||||
"If the record is the partner itself leave this field empty. "
|
||||
"This is useful for reporting purposes, via the Campaign Analysis or Campaign Follow-up views.")
|
||||
unique_field_id = fields.Many2one('ir.model.fields', 'Unique Field',
|
||||
domain="[('model_id', '=', object_id), ('ttype', 'in', ['char','int','many2one','text','selection'])]",
|
||||
help='If set, this field will help segments that work in "no duplicates" mode to avoid '
|
||||
'selecting similar records twice. Similar records are records that have the same value for '
|
||||
'this unique field. For example by choosing the "email_from" field for CRM Leads you would prevent '
|
||||
'sending the same campaign to the same email address again. If not set, the "no duplicates" segments '
|
||||
"will only avoid selecting the same record again if it entered the campaign previously. "
|
||||
"Only easily comparable fields like textfields, integers, selections or single relationships may be used.")
|
||||
mode = fields.Selection([
|
||||
('test', 'Test Directly'),
|
||||
('test_realtime', 'Test in Realtime'),
|
||||
('manual', 'With Manual Confirmation'),
|
||||
('active', 'Normal')
|
||||
], 'Mode', required=True, default="test",
|
||||
help="Test - It creates and process all the activities directly (without waiting "
|
||||
"for the delay on transitions) but does not send emails or produce reports. \n"
|
||||
"Test in Realtime - It creates and processes all the activities directly but does "
|
||||
"not send emails or produce reports.\n"
|
||||
"With Manual Confirmation - the campaigns runs normally, but the user has to \n "
|
||||
"validate all workitem manually.\n"
|
||||
"Normal - the campaign runs normally and automatically sends all emails and "
|
||||
"reports (be very careful with this mode, you're live!)")
|
||||
state = fields.Selection([
|
||||
('draft', 'New'),
|
||||
('running', 'Running'),
|
||||
('cancelled', 'Cancelled'),
|
||||
('done', 'Done')
|
||||
], 'Status', copy=False, default="draft")
|
||||
activity_ids = fields.One2many('marketing.campaign.activity', 'campaign_id', 'Activities')
|
||||
fixed_cost = fields.Float('Fixed Cost',
|
||||
help="Fixed cost for running this campaign. You may also specify variable cost and revenue on each "
|
||||
"campaign activity. Cost and Revenue statistics are included in Campaign Reporting.",
|
||||
digits=dp.get_precision('Product Price'))
|
||||
segment_ids = fields.One2many('marketing.campaign.segment', 'campaign_id', 'Segments', readonly=False)
|
||||
segments_count = fields.Integer(compute='_compute_segments_count', string='Segments')
|
||||
|
||||
@api.multi
|
||||
def _compute_segments_count(self):
|
||||
for campaign in self:
|
||||
campaign.segments_count = len(campaign.segment_ids)
|
||||
|
||||
@api.multi
|
||||
def state_draft_set(self):
|
||||
return self.write({'state': 'draft'})
|
||||
|
||||
@api.multi
|
||||
def state_running_set(self):
|
||||
# TODO check that all subcampaigns are running
|
||||
self.ensure_one()
|
||||
|
||||
if not self.activity_ids:
|
||||
raise UserError(_("The campaign cannot be started. There are no activities in it."))
|
||||
|
||||
has_start = False
|
||||
has_signal_without_from = False
|
||||
|
||||
for activity in self.activity_ids:
|
||||
if activity.start:
|
||||
has_start = True
|
||||
if activity.signal and len(activity.from_ids) == 0:
|
||||
has_signal_without_from = True
|
||||
|
||||
if not has_start and not has_signal_without_from:
|
||||
raise UserError(_("The campaign cannot be started. It does not have any starting activity. Modify campaign's activities to mark one as the starting point."))
|
||||
|
||||
return self.write({'state': 'running'})
|
||||
|
||||
@api.multi
|
||||
def state_done_set(self):
|
||||
# TODO check that this campaign is not a subcampaign in running mode.
|
||||
if self.mapped('segment_ids').filtered(lambda segment: segment.state == 'running'):
|
||||
raise UserError(_("The campaign cannot be marked as done before all segments are closed."))
|
||||
return self.write({'state': 'done'})
|
||||
|
||||
@api.multi
|
||||
def state_cancel_set(self):
|
||||
# TODO check that this campaign is not a subcampaign in running mode.
|
||||
return self.write({'state': 'cancelled'})
|
||||
|
||||
def _get_partner_for(self, record):
|
||||
partner_field = self.partner_field_id.name
|
||||
if partner_field:
|
||||
return record[partner_field]
|
||||
elif self.object_id.model == 'res.partner':
|
||||
return record
|
||||
return None
|
||||
|
||||
# prevent duplication until the server properly duplicates several levels of nested o2m
|
||||
@api.multi
|
||||
def copy(self, default=None):
|
||||
self.ensure_one()
|
||||
raise UserError(_('Duplicating campaigns is not supported.'))
|
||||
|
||||
def _find_duplicate_workitems(self, record):
|
||||
"""Finds possible duplicates workitems for a record in this campaign, based on a uniqueness
|
||||
field.
|
||||
|
||||
:param Model record: to find duplicates workitems for.
|
||||
"""
|
||||
self.ensure_one()
|
||||
duplicate_workitem_domain = [('res_id', '=', record.id), ('campaign_id', '=', self.id)]
|
||||
unique_field = self.unique_field_id
|
||||
if unique_field:
|
||||
unique_value = getattr(record, unique_field.name, None)
|
||||
if unique_value:
|
||||
if unique_field.ttype == 'many2one':
|
||||
unique_value = unique_value.id
|
||||
similar_res_ids = self.env[self.object_id.model].search([(unique_field.name, '=', unique_value)])
|
||||
if similar_res_ids:
|
||||
duplicate_workitem_domain = [
|
||||
('res_id', 'in', similar_res_ids.ids),
|
||||
('campaign_id', '=', self.id)
|
||||
]
|
||||
return self.env['marketing.campaign.workitem'].search(duplicate_workitem_domain)
|
||||
|
||||
|
||||
class MarketingCampaignSegment(models.Model):
|
||||
_name = "marketing.campaign.segment"
|
||||
_description = "Campaign Segment"
|
||||
_order = "name"
|
||||
|
||||
name = fields.Char('Name', required=True)
|
||||
campaign_id = fields.Many2one('marketing.campaign', 'Campaign', required=True, index=True, ondelete="cascade")
|
||||
object_id = fields.Many2one('ir.model', related='campaign_id.object_id', string='Resource')
|
||||
ir_filter_id = fields.Many2one('ir.filters', 'Filter', ondelete="restrict",
|
||||
domain=lambda self: [('model_id', '=', self.object_id._name)],
|
||||
help="Filter to select the matching resource records that belong to this segment. "
|
||||
"New filters can be created and saved using the advanced search on the list view of the Resource. "
|
||||
"If no filter is set, all records are selected without filtering. "
|
||||
"The synchronization mode may also add a criterion to the filter.")
|
||||
sync_last_date = fields.Datetime('Last Synchronization',
|
||||
help="Date on which this segment was synchronized last time (automatically or manually)")
|
||||
sync_mode = fields.Selection([
|
||||
('create_date', 'Only records created after last sync'),
|
||||
('write_date', 'Only records modified after last sync (no duplicates)'),
|
||||
('all', 'All records (no duplicates)')],
|
||||
'Synchronization mode', default='create_date',
|
||||
help="Determines an additional criterion to add to the filter when selecting new records to inject in the campaign. "
|
||||
'"No duplicates" prevents selecting records which have already entered the campaign previously.'
|
||||
'If the campaign has a "unique field" set, "no duplicates" will also prevent selecting records which have '
|
||||
'the same value for the unique field as other records that already entered the campaign.')
|
||||
state = fields.Selection([
|
||||
('draft', 'New'),
|
||||
('cancelled', 'Cancelled'),
|
||||
('running', 'Running'),
|
||||
('done', 'Done')],
|
||||
'Status', copy=False, default='draft')
|
||||
date_run = fields.Datetime('Launch Date', help="Initial start date of this segment.")
|
||||
date_done = fields.Datetime('End Date', help="Date this segment was last closed or cancelled.")
|
||||
date_next_sync = fields.Datetime(compute='_compute_date_next_sync', string='Next Synchronization',
|
||||
help="Next time the synchronization job is scheduled to run automatically")
|
||||
|
||||
def _compute_date_next_sync(self):
|
||||
# next auto sync date is same for all segments
|
||||
sync_job = self.sudo().env.ref('marketing_campaign.ir_cron_marketing_campaign_every_day')
|
||||
self.date_next_sync = sync_job and sync_job.nextcall or False
|
||||
|
||||
@api.constrains('ir_filter_id', 'campaign_id')
|
||||
def _check_model(self):
|
||||
if self.filtered(lambda segment: segment.ir_filter_id and
|
||||
segment.campaign_id.object_id.model != segment.ir_filter_id.model_id):
|
||||
raise ValidationError(_('Model of filter must be same as resource model of Campaign'))
|
||||
|
||||
@api.onchange('campaign_id')
|
||||
def onchange_campaign_id(self):
|
||||
res = {'domain': {'ir_filter_id': []}}
|
||||
model = self.campaign_id.object_id.model
|
||||
if model:
|
||||
res['domain']['ir_filter_id'] = [('model_id', '=', model)]
|
||||
else:
|
||||
self.ir_filter_id = False
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def state_draft_set(self):
|
||||
return self.write({'state': 'draft'})
|
||||
|
||||
@api.multi
|
||||
def state_running_set(self):
|
||||
self.ensure_one()
|
||||
vals = {'state': 'running'}
|
||||
if not self.date_run:
|
||||
vals['date_run'] = fields.Datetime.now()
|
||||
return self.write(vals)
|
||||
|
||||
@api.multi
|
||||
def state_done_set(self):
|
||||
self.env["marketing.campaign.workitem"].search([
|
||||
('state', '=', 'todo'),
|
||||
('segment_id', 'in', self.ids)
|
||||
]).write({'state': 'cancelled'})
|
||||
return self.write({'state': 'done', 'date_done': fields.Datetime.now()})
|
||||
|
||||
@api.multi
|
||||
def state_cancel_set(self):
|
||||
self.env["marketing.campaign.workitem"].search([
|
||||
('state', '=', 'todo'),
|
||||
('segment_id', 'in', self.ids)
|
||||
]).write({'state': 'cancelled'})
|
||||
return self.write({'state': 'cancelled', 'date_done': fields.Datetime.now()})
|
||||
|
||||
@api.multi
|
||||
def process_segment(self):
|
||||
Workitems = self.env['marketing.campaign.workitem']
|
||||
Activities = self.env['marketing.campaign.activity']
|
||||
if not self:
|
||||
self = self.search([('state', '=', 'running')])
|
||||
|
||||
action_date = fields.Datetime.now()
|
||||
campaigns = self.env['marketing.campaign']
|
||||
for segment in self:
|
||||
if segment.campaign_id.state != 'running':
|
||||
continue
|
||||
|
||||
campaigns |= segment.campaign_id
|
||||
activity_ids = Activities.search([('start', '=', True), ('campaign_id', '=', segment.campaign_id.id)]).ids
|
||||
|
||||
criteria = []
|
||||
if segment.sync_last_date and segment.sync_mode != 'all':
|
||||
criteria += [(segment.sync_mode, '>', segment.sync_last_date)]
|
||||
if segment.ir_filter_id:
|
||||
criteria += safe_eval(segment.ir_filter_id.domain)
|
||||
|
||||
# XXX TODO: rewrite this loop more efficiently without doing 1 search per record!
|
||||
for record in self.env[segment.object_id.model].search(criteria):
|
||||
# avoid duplicate workitem for the same resource
|
||||
if segment.sync_mode in ('write_date', 'all'):
|
||||
if segment.campaign_id._find_duplicate_workitems(record):
|
||||
continue
|
||||
|
||||
wi_vals = {
|
||||
'segment_id': segment.id,
|
||||
'date': action_date,
|
||||
'state': 'todo',
|
||||
'res_id': record.id
|
||||
}
|
||||
|
||||
partner = segment.campaign_id._get_partner_for(record)
|
||||
if partner:
|
||||
wi_vals['partner_id'] = partner.id
|
||||
|
||||
for activity_id in activity_ids:
|
||||
wi_vals['activity_id'] = activity_id
|
||||
Workitems.create(wi_vals)
|
||||
|
||||
segment.write({'sync_last_date': action_date})
|
||||
Workitems.process_all(campaigns.ids)
|
||||
return True
|
||||
|
||||
|
||||
class MarketingCampaignActivity(models.Model):
|
||||
_name = "marketing.campaign.activity"
|
||||
_order = "name"
|
||||
_description = "Campaign Activity"
|
||||
|
||||
name = fields.Char('Name', required=True)
|
||||
campaign_id = fields.Many2one('marketing.campaign', 'Campaign', required=True, ondelete='cascade', index=True)
|
||||
object_id = fields.Many2one('ir.model', related='campaign_id.object_id', string='Object', readonly=True)
|
||||
start = fields.Boolean('Start', help="This activity is launched when the campaign starts.", index=True)
|
||||
condition = fields.Text('Condition', required=True, default="True",
|
||||
help="Python expression to decide whether the activity can be executed, otherwise it will be deleted or cancelled."
|
||||
"The expression may use the following [browsable] variables:\n"
|
||||
" - activity: the campaign activity\n"
|
||||
" - workitem: the campaign workitem\n"
|
||||
" - resource: the resource object this campaign item represents\n"
|
||||
" - transitions: list of campaign transitions outgoing from this activity\n"
|
||||
"...- re: Python regular expression module")
|
||||
action_type = fields.Selection([
|
||||
('email', 'Email'),
|
||||
('report', 'Report'),
|
||||
('action', 'Custom Action'),
|
||||
], 'Type', required=True, oldname="type", default="email",
|
||||
help="The type of action to execute when an item enters this activity, such as:\n"
|
||||
"- Email: send an email using a predefined email template \n"
|
||||
"- Report: print an existing Report defined on the resource item and save it into a specific directory \n"
|
||||
"- Custom Action: execute a predefined action, e.g. to modify the fields of the resource record")
|
||||
email_template_id = fields.Many2one('mail.template', "Email Template", help='The email to send when this activity is activated')
|
||||
report_id = fields.Many2one('ir.actions.report', "Report", help='The report to generate when this activity is activated')
|
||||
server_action_id = fields.Many2one('ir.actions.server', string='Action',
|
||||
help="The action to perform when this activity is activated")
|
||||
to_ids = fields.One2many('marketing.campaign.transition', 'activity_from_id', 'Next Activities')
|
||||
from_ids = fields.One2many('marketing.campaign.transition', 'activity_to_id', 'Previous Activities')
|
||||
variable_cost = fields.Float('Variable Cost', digits=dp.get_precision('Product Price'),
|
||||
help="Set a variable cost if you consider that every campaign item that has reached this point has entailed a "
|
||||
"certain cost. You can get cost statistics in the Reporting section")
|
||||
revenue = fields.Float('Revenue', digits=0,
|
||||
help="Set an expected revenue if you consider that every campaign item that has reached this point has generated "
|
||||
"a certain revenue. You can get revenue statistics in the Reporting section")
|
||||
signal = fields.Char('Signal',
|
||||
help="An activity with a signal can be called programmatically. Be careful, the workitem is always created when "
|
||||
"a signal is sent")
|
||||
keep_if_condition_not_met = fields.Boolean("Don't Delete Workitems",
|
||||
help="By activating this option, workitems that aren't executed because the condition is not met are marked as "
|
||||
"cancelled instead of being deleted.")
|
||||
|
||||
@api.model
|
||||
def search(self, args, offset=0, limit=None, order=None, count=False):
|
||||
if 'segment_id' in self.env.context:
|
||||
return self.env['marketing.campaign.segment'].browse(self.env.context['segment_id']).campaign_id.activity_ids
|
||||
return super(MarketingCampaignActivity, self).search(args, offset, limit, order, count)
|
||||
|
||||
@api.multi
|
||||
def _process_wi_email(self, workitem):
|
||||
self.ensure_one()
|
||||
return self.email_template_id.send_mail(workitem.res_id)
|
||||
|
||||
@api.multi
|
||||
def _process_wi_report(self, workitem):
|
||||
self.ensure_one()
|
||||
return self.report_id.render(workitem.res_id)
|
||||
|
||||
@api.multi
|
||||
def _process_wi_action(self, workitem):
|
||||
self.ensure_one()
|
||||
return self.server_action_id.run()
|
||||
|
||||
@api.multi
|
||||
def process(self, workitem):
|
||||
self.ensure_one()
|
||||
method = '_process_wi_%s' % (self.action_type,)
|
||||
action = getattr(self, method, None)
|
||||
if not action:
|
||||
raise NotImplementedError('Method %r is not implemented on %r object.' % (method, self._name))
|
||||
return action(workitem)
|
||||
|
||||
|
||||
class MarketingCampaignTransition(models.Model):
|
||||
_name = "marketing.campaign.transition"
|
||||
_description = "Campaign Transition"
|
||||
|
||||
_interval_units = [
|
||||
('hours', 'Hour(s)'),
|
||||
('days', 'Day(s)'),
|
||||
('months', 'Month(s)'),
|
||||
('years', 'Year(s)'),
|
||||
]
|
||||
|
||||
name = fields.Char(compute='_compute_name', string='Name')
|
||||
activity_from_id = fields.Many2one('marketing.campaign.activity', 'Previous Activity', index=1, required=True, ondelete="cascade")
|
||||
activity_to_id = fields.Many2one('marketing.campaign.activity', 'Next Activity', required=True, ondelete="cascade")
|
||||
interval_nbr = fields.Integer('Interval Value', required=True, default=1)
|
||||
interval_type = fields.Selection(_interval_units, 'Interval Unit', required=True, default='days')
|
||||
trigger = fields.Selection([
|
||||
('auto', 'Automatic'),
|
||||
('time', 'Time'),
|
||||
('cosmetic', 'Cosmetic'), # fake plastic transition
|
||||
], 'Trigger', required=True, default='time',
|
||||
help="How is the destination workitem triggered")
|
||||
|
||||
_sql_constraints = [
|
||||
('interval_positive', 'CHECK(interval_nbr >= 0)', 'The interval must be positive or zero')
|
||||
]
|
||||
|
||||
def _compute_name(self):
|
||||
# name formatters that depend on trigger
|
||||
formatters = {
|
||||
'auto': _('Automatic transition'),
|
||||
'time': _('After %(interval_nbr)d %(interval_type)s'),
|
||||
'cosmetic': _('Cosmetic'),
|
||||
}
|
||||
# get the translations of the values of selection field 'interval_type'
|
||||
model_fields = self.fields_get(['interval_type'])
|
||||
interval_type_selection = dict(model_fields['interval_type']['selection'])
|
||||
|
||||
for transition in self:
|
||||
values = {
|
||||
'interval_nbr': transition.interval_nbr,
|
||||
'interval_type': interval_type_selection.get(transition.interval_type, ''),
|
||||
}
|
||||
transition.name = formatters[transition.trigger] % values
|
||||
|
||||
@api.constrains('activity_from_id', 'activity_to_id')
|
||||
def _check_campaign(self):
|
||||
if self.filtered(lambda transition: transition.activity_from_id.campaign_id != transition.activity_to_id.campaign_id):
|
||||
return ValidationError(_('The To/From Activity of transition must be of the same Campaign'))
|
||||
|
||||
def _delta(self):
|
||||
self.ensure_one()
|
||||
if self.trigger != 'time':
|
||||
raise ValueError('Delta is only relevant for timed transition.')
|
||||
return relativedelta(**{str(self.interval_type): self.interval_nbr})
|
||||
|
||||
|
||||
class MarketingCampaignWorkitem(models.Model):
|
||||
_name = "marketing.campaign.workitem"
|
||||
_description = "Campaign Workitem"
|
||||
|
||||
segment_id = fields.Many2one('marketing.campaign.segment', 'Segment', readonly=True)
|
||||
activity_id = fields.Many2one('marketing.campaign.activity', 'Activity', required=True, readonly=True)
|
||||
campaign_id = fields.Many2one('marketing.campaign', related='activity_id.campaign_id', string='Campaign', readonly=True, store=True)
|
||||
object_id = fields.Many2one('ir.model', related='activity_id.campaign_id.object_id', string='Resource', index=1, readonly=True, store=True)
|
||||
res_id = fields.Integer('Resource ID', index=1, readonly=True)
|
||||
res_name = fields.Char(compute='_compute_res_name', string='Resource Name', search='_search_res_name')
|
||||
date = fields.Datetime('Execution Date', readonly=True, default=False,
|
||||
help='If date is not set, this workitem has to be run manually')
|
||||
partner_id = fields.Many2one('res.partner', 'Partner', index=1, readonly=True)
|
||||
state = fields.Selection([
|
||||
('todo', 'To Do'),
|
||||
('cancelled', 'Cancelled'),
|
||||
('exception', 'Exception'),
|
||||
('done', 'Done'),
|
||||
], 'Status', readonly=True, copy=False, default='todo')
|
||||
error_msg = fields.Text('Error Message', readonly=True)
|
||||
|
||||
def _compute_res_name(self):
|
||||
for workitem in self:
|
||||
proxy = self.env[workitem.object_id.model]
|
||||
record = proxy.browse(workitem.res_id)
|
||||
if not workitem.res_id or not record.exists():
|
||||
workitem.res_name = '/'
|
||||
continue
|
||||
workitem.res_name = record.name_get()[0][1]
|
||||
|
||||
def _search_res_name(self, operator, operand):
|
||||
"""Returns a domain with ids of workitem whose `operator` matches with the given `operand`"""
|
||||
if not operand:
|
||||
return []
|
||||
|
||||
condition_name = [None, operator, operand]
|
||||
|
||||
self.env.cr.execute("""
|
||||
SELECT w.id, w.res_id, m.model
|
||||
FROM marketing_campaign_workitem w \
|
||||
LEFT JOIN marketing_campaign_activity a ON (a.id=w.activity_id)\
|
||||
LEFT JOIN marketing_campaign c ON (c.id=a.campaign_id)\
|
||||
LEFT JOIN ir_model m ON (m.id=c.object_id)
|
||||
""")
|
||||
res = self.env.cr.fetchall()
|
||||
workitem_map = {}
|
||||
matching_workitems = []
|
||||
for id, res_id, model in res:
|
||||
workitem_map.setdefault(model, {}).setdefault(res_id, set()).add(id)
|
||||
for model, id_map in workitem_map.items():
|
||||
Model = self.env[model]
|
||||
condition_name[0] = Model._rec_name
|
||||
condition = [('id', 'in', list(id_map)), condition_name]
|
||||
for record in Model.search(condition):
|
||||
matching_workitems.extend(id_map[record.id])
|
||||
return [('id', 'in', list(set(matching_workitems)))]
|
||||
|
||||
@api.multi
|
||||
def button_draft(self):
|
||||
return self.filtered(lambda workitem: workitem.state in ('exception', 'cancelled')).write({'state': 'todo'})
|
||||
|
||||
@api.multi
|
||||
def button_cancel(self):
|
||||
return self.filtered(lambda workitem: workitem.state in ('todo', 'exception')).write({'state': 'cancelled'})
|
||||
|
||||
@api.multi
|
||||
def _process_one(self):
|
||||
self.ensure_one()
|
||||
if self.state != 'todo':
|
||||
return False
|
||||
|
||||
activity = self.activity_id
|
||||
resource = self.env[self.object_id.model].browse(self.res_id)
|
||||
|
||||
eval_context = {
|
||||
'activity': activity,
|
||||
'workitem': self,
|
||||
'object': resource,
|
||||
'resource': resource,
|
||||
'transitions': activity.to_ids,
|
||||
're': re,
|
||||
}
|
||||
try:
|
||||
condition = activity.condition
|
||||
campaign_mode = self.campaign_id.mode
|
||||
if condition:
|
||||
if not safe_eval(condition, eval_context):
|
||||
if activity.keep_if_condition_not_met:
|
||||
self.write({'state': 'cancelled'})
|
||||
else:
|
||||
self.unlink()
|
||||
return
|
||||
result = True
|
||||
if campaign_mode in ('manual', 'active'):
|
||||
result = activity.process(self)
|
||||
|
||||
values = {'state': 'done'}
|
||||
if not self.date:
|
||||
values['date'] = fields.Datetime.now()
|
||||
self.write(values)
|
||||
|
||||
if result:
|
||||
# process _chain
|
||||
self.refresh() # reload
|
||||
execution_date = fields.Datetime.from_string(self.date)
|
||||
|
||||
for transition in activity.to_ids:
|
||||
if transition.trigger == 'cosmetic':
|
||||
continue
|
||||
launch_date = False
|
||||
if transition.trigger == 'auto':
|
||||
launch_date = execution_date
|
||||
elif transition.trigger == 'time':
|
||||
launch_date = execution_date + transition._delta()
|
||||
|
||||
if launch_date:
|
||||
launch_date = fields.Datetime.to_string(launch_date)
|
||||
values = {
|
||||
'date': launch_date,
|
||||
'segment_id': self.segment_id.id,
|
||||
'activity_id': transition.activity_to_id.id,
|
||||
'partner_id': self.partner_id.id,
|
||||
'res_id': self.res_id,
|
||||
'state': 'todo',
|
||||
}
|
||||
workitem = self.create(values)
|
||||
|
||||
# Now, depending on the trigger and the campaign mode
|
||||
# we know whether we must run the newly created workitem.
|
||||
#
|
||||
# rows = transition trigger \ colums = campaign mode
|
||||
#
|
||||
# test test_realtime manual normal (active)
|
||||
# time Y N N N
|
||||
# cosmetic N N N N
|
||||
# auto Y Y N Y
|
||||
#
|
||||
|
||||
run = (transition.trigger == 'auto' and campaign_mode != 'manual') or (transition.trigger == 'time' and campaign_mode == 'test')
|
||||
if run:
|
||||
workitem._process_one()
|
||||
|
||||
except Exception:
|
||||
tb = "".join(format_exception(*exc_info()))
|
||||
self.write({'state': 'exception', 'error_msg': tb})
|
||||
|
||||
@api.multi
|
||||
def process(self):
|
||||
for workitem in self:
|
||||
workitem._process_one()
|
||||
return True
|
||||
|
||||
@api.model
|
||||
def process_all(self, camp_ids=None):
|
||||
if camp_ids is None:
|
||||
campaigns = self.env['marketing.campaign'].search([('state', '=', 'running')])
|
||||
else:
|
||||
campaigns = self.env['marketing.campaign'].browse(camp_ids)
|
||||
for campaign in campaigns.filtered(lambda campaign: campaign.mode != 'manual'):
|
||||
while True:
|
||||
domain = [('campaign_id', '=', campaign.id), ('state', '=', 'todo'), ('date', '!=', False)]
|
||||
if campaign.mode in ('test_realtime', 'active'):
|
||||
domain += [('date', '<=', fields.Datetime.now())]
|
||||
workitems = self.search(domain)
|
||||
if not workitems:
|
||||
break
|
||||
workitems.process()
|
||||
return True
|
||||
|
||||
@api.multi
|
||||
def preview(self):
|
||||
self.ensure_one()
|
||||
res = {}
|
||||
if self.activity_id.action_type == 'email':
|
||||
view_ref = self.env.ref('mail.email_template_preview_form')
|
||||
res = {
|
||||
'name': _('Email Preview'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'email_template.preview',
|
||||
'view_id': False,
|
||||
'context': self.env.context,
|
||||
'views': [(view_ref and view_ref.id or False, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
'context': "{'template_id': %d,'default_res_id': %d}" % (self.activity_id.email_template_id.id, self.res_id)
|
||||
}
|
||||
|
||||
elif self.activity_id.action_type == 'report':
|
||||
datas = {
|
||||
'ids': [self.res_id],
|
||||
'model': self.object_id.model
|
||||
}
|
||||
res = {
|
||||
'type': 'ir.actions.report',
|
||||
'report_name': self.activity_id.report_id.report_name,
|
||||
'datas': datas,
|
||||
}
|
||||
else:
|
||||
raise UserError(_('The current step for this item has no email or report to preview.'))
|
||||
return res
|
||||
@@ -1,4 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import campaign_analysis
|
||||
@@ -1,80 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
from odoo import tools
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class CampaignAnalysis(models.Model):
|
||||
_name = "campaign.analysis"
|
||||
_description = "Campaign Analysis"
|
||||
_auto = False
|
||||
_rec_name = 'date'
|
||||
|
||||
res_id = fields.Integer('Resource', readonly=True)
|
||||
year = fields.Char('Execution Year', readonly=True)
|
||||
month = fields.Selection([
|
||||
('01', 'January'),
|
||||
('02', 'February'),
|
||||
('03', 'March'),
|
||||
('04', 'April'),
|
||||
('05', 'May'),
|
||||
('06', 'June'),
|
||||
('07', 'July'),
|
||||
('08', 'August'),
|
||||
('09', 'September'),
|
||||
('10', 'October'),
|
||||
('11', 'November'),
|
||||
('12', 'December')
|
||||
], 'Execution Month', readonly=True)
|
||||
day = fields.Char('Execution Day', readonly=True)
|
||||
date = fields.Date('Execution Date', readonly=True, index=True)
|
||||
campaign_id = fields.Many2one('marketing.campaign', 'Campaign', readonly=True)
|
||||
activity_id = fields.Many2one('marketing.campaign.activity', 'Activity', readonly=True)
|
||||
segment_id = fields.Many2one('marketing.campaign.segment', 'Segment', readonly=True)
|
||||
partner_id = fields.Many2one('res.partner', 'Partner', readonly=True)
|
||||
country_id = fields.Many2one('res.country', related='partner_id.country_id', string='Country')
|
||||
total_cost = fields.Float(compute='_compute_total_cost', string='Cost')
|
||||
revenue = fields.Float('Revenue', readonly=True, digits=0)
|
||||
count = fields.Integer('# of Actions', readonly=True)
|
||||
state = fields.Selection([
|
||||
('todo', 'To Do'),
|
||||
('exception', 'Exception'),
|
||||
('done', 'Done'),
|
||||
('cancelled', 'Cancelled')
|
||||
], 'Status', readonly=True)
|
||||
|
||||
@api.multi
|
||||
def _compute_total_cost(self):
|
||||
for analysis in self:
|
||||
wi_count = self.env['marketing.campaign.workitem'].search_count([('segment_id.campaign_id', '=', analysis.campaign_id.id)])
|
||||
analysis.total_cost = analysis.activity_id.variable_cost + ((analysis.campaign_id.fixed_cost or 1.00) / wi_count)
|
||||
|
||||
@api.model_cr
|
||||
def init(self):
|
||||
tools.drop_view_if_exists(self.env.cr, 'campaign_analysis')
|
||||
self.env.cr.execute("""
|
||||
CREATE OR REPLACE VIEW campaign_analysis AS (
|
||||
SELECT
|
||||
min(wi.id) AS id,
|
||||
min(wi.res_id) AS res_id,
|
||||
to_char(wi.date::date, 'YYYY') AS year,
|
||||
to_char(wi.date::date, 'MM') AS month,
|
||||
to_char(wi.date::date, 'YYYY-MM-DD') AS day,
|
||||
wi.date::date AS date,
|
||||
s.campaign_id AS campaign_id,
|
||||
wi.activity_id AS activity_id,
|
||||
wi.segment_id AS segment_id,
|
||||
wi.partner_id AS partner_id ,
|
||||
wi.state AS state,
|
||||
sum(act.revenue) AS revenue,
|
||||
count(*) AS count
|
||||
FROM
|
||||
marketing_campaign_workitem wi
|
||||
LEFT JOIN res_partner p ON (p.id=wi.partner_id)
|
||||
LEFT JOIN marketing_campaign_segment s ON (s.id=wi.segment_id)
|
||||
LEFT JOIN marketing_campaign_activity act ON (act.id= wi.activity_id)
|
||||
GROUP BY
|
||||
s.campaign_id,wi.activity_id,wi.segment_id,wi.partner_id,wi.state,
|
||||
wi.date::date
|
||||
)
|
||||
""")
|
||||
@@ -1,84 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_report_campaign_analysis_pivot" model="ir.ui.view">
|
||||
<field name="name">campaign.analysis.pivot</field>
|
||||
<field name="model">campaign.analysis</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Marketing Reports" disable_linking="True">
|
||||
<field name="segment_id" type="row"/>
|
||||
<field name="month" type="col"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_report_campaign_analysis_graph" model="ir.ui.view">
|
||||
<field name="name">campaign.analysis.graph</field>
|
||||
<field name="model">campaign.analysis</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Marketing Reports">
|
||||
<field name="segment_id"/>
|
||||
<field name="month"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_campaign_analysis_tree" model="ir.ui.view">
|
||||
<field name="name">campaign.analysis.tree</field>
|
||||
<field name="model">campaign.analysis</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Marketing Reports" create="false">
|
||||
<field name="year" invisible="1"/>
|
||||
<field name="month" invisible="1"/>
|
||||
<field name="day" invisible="1"/>
|
||||
<field name="date" invisible="1"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="campaign_id" invisible="1"/>
|
||||
<field name="activity_id" invisible="1"/>
|
||||
<field name="segment_id" invisible="1"/>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="country_id" invisible="1"/>
|
||||
<field name="res_id" invisible="1"/>
|
||||
<field name="count"/>
|
||||
<field name="total_cost" string="Cost" widget="monetary"/><!-- sum="Cost"/-->
|
||||
<field name="revenue" widget="monetary"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_campaign_analysis_search" model="ir.ui.view">
|
||||
<field name="name">campaign.analysis.search</field>
|
||||
<field name="model">campaign.analysis</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Campaign Analysis">
|
||||
<field name="date"/>
|
||||
<filter string="To Do" domain="[('state','=','todo')]"/>
|
||||
<filter string="Done" domain="[('state','=','done')]"/>
|
||||
<filter string="Exceptions" domain="[('state','=','exception')]"/>
|
||||
<field name="campaign_id"/>
|
||||
<field name="activity_id"/>
|
||||
<field name="segment_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="country_id"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Campaign" name="Campaign" context="{'group_by':'campaign_id'}" />
|
||||
<filter string="Segment" name="Segment" context="{'group_by':'segment_id'}"/>
|
||||
<filter string="Activity" name="activity" context="{'group_by':'activity_id'}"/>
|
||||
<filter string="Status" context="{'group_by':'state'}"/>
|
||||
<separator/>
|
||||
<filter string="Execution Month" context="{'group_by':'month'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_campaign_analysis_all" model="ir.actions.act_window">
|
||||
<field name="name">Campaign Analysis</field>
|
||||
<field name="res_model">campaign.analysis</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,pivot,tree</field>
|
||||
<field name="context">{'group_by': [], 'group_by_no_leaf':1}</field>
|
||||
<field name="search_view_id" ref="view_campaign_analysis_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Campaign" action="action_campaign_analysis_all" id="menu_action_campaign_analysis_all" parent="report_marketing_campaign" sequence="20"/>
|
||||
</odoo>
|
||||
@@ -1,21 +0,0 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_marketing_campaign_admin,marketing.campaign,model_marketing_campaign,marketing_campaign.group_lead_automation_user,1,1,0,0
|
||||
access_marketing_campaign_segment_campaignadmin,marketing.campaign.segment,model_marketing_campaign_segment,marketing_campaign.group_lead_automation_user,1,1,0,0
|
||||
access_marketing_campaign_activity_campaignadmin,marketing.campaign.activity,model_marketing_campaign_activity,marketing_campaign.group_lead_automation_user,1,1,0,0
|
||||
access_marketing_campaign_workitem_campaignadmin,marketing.campaign.workitem,model_marketing_campaign_workitem,marketing_campaign.group_lead_automation_user,1,1,0,0
|
||||
access_marketing_campaign_transition_campaignadmin,marketing.campaign.transition,model_marketing_campaign_transition,marketing_campaign.group_lead_automation_user,1,1,0,0
|
||||
access_marketing_campaign_analysis_campaignadmin,campaign.analysis,model_campaign_analysis,marketing_campaign.group_lead_automation_user,1,1,0,0
|
||||
access_marketing_campaign_workitem_all,marketing.campaign.workitem,model_marketing_campaign_workitem,base.group_user,1,0,0,0
|
||||
access_email_template_user,mail.template,model_mail_template,marketing_campaign.group_lead_automation_user,1,1,0,0
|
||||
access_email_template_account_user,ir.mail_server,base.model_ir_mail_server,marketing_campaign.group_lead_automation_user,1,1,0,0
|
||||
access_marketing_campaign_system,marketing.campaign system,model_marketing_campaign,base.group_system,1,0,0,0
|
||||
access_marketing_campaign_segment_system,marketing.campaign.segment system,model_marketing_campaign_segment,base.group_system,1,0,0,0
|
||||
access_marketing_campaign_workitem_system,marketing.campaign.workitem system,model_marketing_campaign_workitem,base.group_system,1,0,0,0
|
||||
access_marketing_campaign_manager,marketing.campaign,model_marketing_campaign,marketing_campaign.group_lead_automation_manager,1,1,1,1
|
||||
access_marketing_campaign_segment_campaign_manager,marketing.campaign.segment,model_marketing_campaign_segment,marketing_campaign.group_lead_automation_manager,1,1,1,1
|
||||
access_marketing_campaign_activity_campaign_manager,marketing.campaign.activity,model_marketing_campaign_activity,marketing_campaign.group_lead_automation_manager,1,1,1,1
|
||||
access_marketing_campaign_workitem_campaign_manager,marketing.campaign.workitem,model_marketing_campaign_workitem,marketing_campaign.group_lead_automation_manager,1,1,1,1
|
||||
access_marketing_campaign_transition_campaign_manager,marketing.campaign.transition,model_marketing_campaign_transition,marketing_campaign.group_lead_automation_manager,1,1,1,1
|
||||
access_marketing_campaign_analysis_campaign_manager,campaign.analysis,model_campaign_analysis,marketing_campaign.group_lead_automation_manager,1,1,1,1
|
||||
access_email_template_manager,mail.template,model_mail_template,marketing_campaign.group_lead_automation_manager,1,1,1,1
|
||||
access_email_template_account_manager,ir.mail_server,base.model_ir_mail_server,marketing_campaign.group_lead_automation_manager,1,1,1,1
|
||||
|
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="marketing_campaign.group_lead_automation_user" model="res.groups">
|
||||
<field name="name">User</field>
|
||||
<field name="category_id" ref="base.module_category_lead_automation"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign.group_lead_automation_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="base.module_category_lead_automation"/>
|
||||
<field name="implied_ids" eval="[(4, ref('marketing_campaign.group_lead_automation_user'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<data noupdate="1">
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('marketing_campaign.group_lead_automation_manager'))]"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 39 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 124 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 KiB |
@@ -1,101 +0,0 @@
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<h2 class="oe_slogan" style="color:#875A7B;">Better manage leads with marketing automation</h2>
|
||||
<h3 class="oe_slogan">Nurture all of your prospects with a personal and targeted message</h3>
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="campaign.png" height="300">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container oe_dark">
|
||||
<div class="oe_row oe_spaced">
|
||||
<h2 class="oe_slogan" style="color:#875A7B;">Generate new opportunities effortlessly</h2>
|
||||
<h3 class="oe_slogan oe_mb32">Streamline your marketing & take care of your leads 24/7</h3>
|
||||
<div class="oe_span4">
|
||||
<div class="text-center">
|
||||
<span class="fa fa-file-text-o fa-2x"/>
|
||||
<p class="oe_mt16">
|
||||
Formulate elaborate and advanced marketing campaigns that are centered around your prospects.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_span4">
|
||||
<div class="text-center">
|
||||
<span class="fa fa-history fa-2x"/>
|
||||
<p class="oe_mt16">
|
||||
Easily create different messages and segment them so that you're sending the right message to the right person at the right time.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_span4">
|
||||
<div class="text-center">
|
||||
<span class="fa fa-bar-chart fa-2x"/>
|
||||
<p class="oe_mt16">
|
||||
Visualize your workflow thanks to detailed diagrams and stay in control of your marketing strategy.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 col-md-offset-2 oe_mt32">
|
||||
<span class="fa fa-2x fa-long-arrow-down center-block"/>
|
||||
<img class="oe_picture" src="marketing_campaign_sc_01.png">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<h2 class="oe_slogan" style="color:#875A7B;">Deliver a message that resonates with your prospects</h2>
|
||||
<h3 class="oe_slogan">Create advanced and personal emails that don't look automated</h3>
|
||||
<div class="oe_span6 text-justify">
|
||||
<h4 class="oe_mt32 oe_mb16">
|
||||
<b>Use triggers to give your prospects what they need</b>
|
||||
</h4>
|
||||
<p>
|
||||
Customize your campaigns and define automated actions (e.g. ask a salesperson to call, send an email or set up a reminder) based on triggers (no activity for 20 days, the answer to a promotional email, report of issue, etc.)
|
||||
</p>
|
||||
<h4 class="oe_mt32 oe_mb16">
|
||||
<b>Adjust your message to your prospect's profile</b>
|
||||
</h4>
|
||||
<p>
|
||||
Adapt to the buyer's decision journey by sending targeted and personalized emails. Dynamically change email content based on a prospect's score, industry, page visited, job title, or even their position within the sales cycle.
|
||||
</p>
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<img class="oe_picture oe_screenshot" src="activities.png">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container oe_dark">
|
||||
<div class="oe_row oe_spaced">
|
||||
<h2 class="oe_slogan" style="color:#875A7B;">Shorten your sales cycle</h2>
|
||||
<h3 class="oe_slogan">Manage your prospects better by combining lead scoring and lead automation</h3>
|
||||
<div class="oe_span6">
|
||||
<img class="oe_picture oe_screenshot" src="lead_form.png">
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<p class="oe_mt32 text-justify">
|
||||
Set up lead nurturing campaigns to stay in touch with prospects who are not ready to talk to your sales representatives. Use lead scoring to send meaningful and relevant messages to prospects that are not considered hot enough. As soon as you decide they are “ready for sales”, they will be automatically handed over to the appropriate sales representative, ensuring a high quality pipeline.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<h2 class="oe_slogan" style="color:#875A7B;">Follow the ROI of all your marketing activities</h2>
|
||||
<h3 class="oe_slogan">Make smarter decisions thanks to our powerful analytics reports</h3>
|
||||
<div class="oe_span6">
|
||||
<p class="oe_mt32 text-justify">
|
||||
Stop relying on guesswork and know exactly which marketing drives produce the best results. Connect your closed deals to their original campaign or message in order to find out what has been the most successful and avoid wasting resources. Get a full overview of all your marketing activities, easily interpret your statistics and analyze the results thanks to a comprehensive dashboard and custom reports.
|
||||
</p>
|
||||
</div>
|
||||
<div class="oe_span6">
|
||||
<img class="oe_picture oe_screenshot" src="analysis.png">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="oe_container oe_separator">
|
||||
</section>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 12 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 122 KiB |
@@ -1,4 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_marketing_campaign_flow
|
||||
@@ -1,115 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo.tests import common
|
||||
|
||||
|
||||
class TestMarketingCampaignFlow(common.TransactionCase):
|
||||
|
||||
def test_00_marketing_campaign_flow(self):
|
||||
|
||||
Workitem = self.env['marketing.campaign.workitem']
|
||||
|
||||
# In order to test process of compaign, I start compaign.
|
||||
partner_channel = self.env.ref('marketing_campaign.marketing_campaign_openerppartnerchannel')
|
||||
partner_channel.state_running_set()
|
||||
|
||||
# I check the campaign on Running mode after started.
|
||||
self.assertEqual(partner_channel.state, 'running', 'The campaign should be on Running mode after having started.')
|
||||
|
||||
# I start this segment after assinged campaign.
|
||||
segment0 = self.env.ref('marketing_campaign.marketing_campaign_segment0')
|
||||
segment0.state_running_set()
|
||||
|
||||
# I check the segment on Running mode after started.
|
||||
self.assertEqual(segment0.state, 'running', 'The segment should be on Running mode after having started.')
|
||||
|
||||
# I synchronized segment manually to see all step of activity and process covered on this campaign.
|
||||
self.assertTrue(segment0.date_next_sync, 'Next Synchronization date is not calculated.')
|
||||
segment0.process_segment()
|
||||
|
||||
# I cancel Marketing Workitems.
|
||||
workitems = Workitem.search([
|
||||
('segment_id', '=', segment0.id),
|
||||
('campaign_id', '=', partner_channel.id)
|
||||
])
|
||||
workitems.button_cancel()
|
||||
self.assertTrue(workitems[0].state in ('cancelled', 'done'), 'Marketing Workitem shoud be in cancel state.')
|
||||
|
||||
# I set Marketing Workitems in draft state.
|
||||
workitems.button_draft()
|
||||
self.assertTrue(workitems[0].state in ('todo', 'done'), 'Marketing Workitem shoud be in draft state.')
|
||||
|
||||
# I process follow-up of first activity.
|
||||
activity0_id = self.ref('marketing_campaign.marketing_campaign_activity_0')
|
||||
workitems = Workitem.search([
|
||||
('segment_id', '=', segment0.id),
|
||||
('campaign_id', '=', partner_channel.id),
|
||||
('activity_id', '=', activity0_id)
|
||||
])
|
||||
self.assertTrue(workitems, 'Follow-up item is not created for first activity.')
|
||||
self.assertTrue(workitems[0].res_name, 'Resource Name is not defined.')
|
||||
workitems.process()
|
||||
self.assertEqual(workitems[0].state, 'done', "Follow-up item should be closed after process.")
|
||||
|
||||
# I check follow-up detail of second activity after process of first activity.
|
||||
activity1_id = self.ref('marketing_campaign.marketing_campaign_activity_1')
|
||||
workitems = Workitem.search([
|
||||
('segment_id', '=', segment0.id),
|
||||
('campaign_id', '=', partner_channel.id),
|
||||
('activity_id', '=', activity1_id)
|
||||
])
|
||||
self.assertTrue(workitems, 'Follow-up item is not created for second activity.')
|
||||
|
||||
# Now I increase credit limit of customer
|
||||
self.env.ref("base.res_partner_2").write({'credit_limit': 41000})
|
||||
|
||||
# I process follow-up of second activity after set draft.
|
||||
workitems.button_draft()
|
||||
workitems.process()
|
||||
self.assertEqual(workitems[0].state, 'done', "Follow-up item should be closed after process.")
|
||||
|
||||
# I check follow-up detail of third activity after process of second activity.
|
||||
activity2_id = self.ref('marketing_campaign.marketing_campaign_activity_2')
|
||||
workitems = Workitem.search([
|
||||
('segment_id', '=', segment0.id),
|
||||
('campaign_id', '=', partner_channel.id),
|
||||
('activity_id', '=', activity2_id)
|
||||
])
|
||||
self.assertTrue(workitems, 'Follow-up item is not created for third activity.')
|
||||
|
||||
# Now I increase credit limit of customer
|
||||
self.env.ref("base.res_partner_2").write({'credit_limit': 151000})
|
||||
|
||||
# I process follow-up of third activity after set draft.
|
||||
workitems.button_draft()
|
||||
workitems.process()
|
||||
self.assertEqual(workitems[0].state, 'done', "Follow-up item should be closed after process.")
|
||||
|
||||
# I print workitem report
|
||||
workitems.preview()
|
||||
|
||||
# I cancel segmentation because of some activity.
|
||||
segment0.state_cancel_set()
|
||||
|
||||
# I check the segmentation is canceled.
|
||||
self.assertEqual(segment0.state, 'cancelled', 'Segment should be in cancelled state.')
|
||||
|
||||
# I reopen the segmentation.
|
||||
segment0.state_draft_set()
|
||||
segment0.state_running_set()
|
||||
|
||||
# I check the segment on Running mode after started.
|
||||
self.assertEqual(segment0.state, 'running', 'Segment should be in running state.')
|
||||
|
||||
# I close segmentation After completion of all activity.
|
||||
segment0.state_done_set()
|
||||
|
||||
# I check the segmentation is done.
|
||||
self.assertEqual(segment0.state, 'done', 'Segment should be in done state.')
|
||||
|
||||
# I close this campaing.
|
||||
partner_channel.state_done_set()
|
||||
|
||||
# I check the campaing is done.
|
||||
self.assertEqual(partner_channel.state, 'done', 'Campaign should be in done state.')
|
||||
@@ -1,518 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- Marketing Campaign -->
|
||||
|
||||
<record id="act_marketing_campaing_segment_opened" model="ir.actions.act_window">
|
||||
<field name="res_model">marketing.campaign.segment</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="name">Segments</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}</field>
|
||||
</record>
|
||||
|
||||
<!-- Campaign Follow-ups -->
|
||||
|
||||
<record id="act_marketing_campaing_followup" model="ir.actions.act_window">
|
||||
<field name="res_model">marketing.campaign.workitem</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="name">Workitems</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}</field>
|
||||
</record>
|
||||
|
||||
<!-- Campaign Statistics -->
|
||||
|
||||
<record id="act_marketing_campaing_stat" model="ir.actions.act_window" >
|
||||
<field name="res_model">campaign.analysis</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="name">Campaign Follow-up</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'search_default_campaign_id': [active_id], 'default_campaign_id': active_id}</field>
|
||||
</record>
|
||||
|
||||
<!-- Campaign Followups -->
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_form">
|
||||
<field name="name">marketing.campaign.form</field>
|
||||
<field name="model">marketing.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Marketing Campaign">
|
||||
<header>
|
||||
<button name="state_running_set" type="object" string="Run" states="draft" class="oe_highlight"/>
|
||||
<button name="state_done_set" type="object" string="Done" states="running" class="oe_highlight"/>
|
||||
<button name="state_draft_set" type="object" string="Set to Draft" states="done,cancelled"/>
|
||||
<button name="state_cancel_set" type="object" string="Cancel Campaign" states="running"/>
|
||||
<field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,running,done"/>
|
||||
</header>
|
||||
<sheet string="Campaign">
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button type="action"
|
||||
name="%(act_marketing_campaing_stat)d"
|
||||
class="oe_stat_button"
|
||||
icon="fa-calculator"
|
||||
help="Marketing Campaign Statistics">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_text">Campaign</span>
|
||||
<span class="o_stat_text">Statistics</span>
|
||||
</div>
|
||||
</button>
|
||||
<button type="action"
|
||||
name="%(act_marketing_campaing_segment_opened)d"
|
||||
class="oe_stat_button"
|
||||
icon="fa-table">
|
||||
<field name="segments_count" widget="statinfo" string="Segments"/>
|
||||
</button>
|
||||
<button type="action"
|
||||
name="%(act_marketing_campaing_followup)d"
|
||||
class="oe_stat_button"
|
||||
icon="fa-thumbs-up"
|
||||
string="Follow-Up"/>
|
||||
</div>
|
||||
<div class="oe_title">
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1><field name="name" placeholder="Marketing Campaign"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="mode"/>
|
||||
<field name="fixed_cost"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="object_id"/>
|
||||
<field name="partner_field_id"/>
|
||||
<field name="unique_field_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Activities"/>
|
||||
<field name="activity_ids" context="{'default_object_id': object_id, 'default_campaign_id': active_id}"/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_tree">
|
||||
<field name="name">marketing.campaign.tree</field>
|
||||
<field name="model">marketing.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree decoration-info="state == 'draft'" decoration-muted="state in ('done','cancelled')" string="Campaigns">
|
||||
<field name="name"/>
|
||||
<field name="object_id"/>
|
||||
<field name="mode"/>
|
||||
<field name="fixed_cost"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_marketing_campaign_diagram" model="ir.ui.view">
|
||||
<field name="name">marketing.campaign.diagram</field>
|
||||
<field name="model">marketing.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<diagram string="Campaign Editor">
|
||||
<node object="marketing.campaign.activity" shape="rectangle:action_type=='subcampaign'" bgcolor="gray:start==True">
|
||||
<field name="name"/>
|
||||
<field name="action_type"/>
|
||||
<field name="start" invisible="1"/>
|
||||
<field name="condition" widget="char"/>
|
||||
</node>
|
||||
<arrow object="marketing.campaign.transition" source="activity_from_id" destination="activity_to_id" label="['name']">
|
||||
<field name="activity_from_id"/>
|
||||
<field name="activity_to_id"/>
|
||||
<field name="interval_nbr"/>
|
||||
<field name="interval_type"/>
|
||||
</arrow>
|
||||
</diagram>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_marketing_campaign_search" model="ir.ui.view">
|
||||
<field name="name">marketing.campaign.search</field>
|
||||
<field name="model">marketing.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Campaigns">
|
||||
<field name="name" string="Campaign"/>
|
||||
<filter string="Draft" name="draft" domain="[('state','=','draft')]"/>
|
||||
<filter string="Running" domain="[('state','=','running')]"/>
|
||||
<separator/>
|
||||
<filter string="Test Mode" name="test" domain="[('mode','=','test')]"/>
|
||||
<filter string="Manual Mode" domain="[('mode','=','manual')]"/>
|
||||
<field name="object_id" string="Resource"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Resource" name="Object" context="{'group_by':'object_id'}"/>
|
||||
<filter string="Mode" name="Mode" context="{'group_by':'mode'}"/>
|
||||
<filter string="Status" name="Status" context="{'group_by':'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_view_kanban" model="ir.ui.view">
|
||||
<field name="name">marketing.campaign.kanban</field>
|
||||
<field name="model">marketing.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="object_id"/>
|
||||
<field name="state"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_card oe_kanban_global_click">
|
||||
<div class="mb4">
|
||||
<strong><field name="name"/></strong>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-6 text-muted">
|
||||
<field name="object_id"/>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<span class="pull-right text-right">
|
||||
<field name="state" widget="kanban_label_selection" options="{'classes': {'draft': 'info', 'running': 'default',
|
||||
'done': 'success', 'cancelled': 'danger'}}"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_marketing_campaign_form">
|
||||
<field name="name">Campaigns</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">marketing.campaign</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,kanban,form,diagram</field>
|
||||
<field name="view_id" ref="view_marketing_campaign_tree"/>
|
||||
<field name="context">{'group_by': []}</field>
|
||||
<field name="search_view_id" ref="view_marketing_campaign_search"/>
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a marketing campaign.
|
||||
</p><p>
|
||||
Odoo's marketing campaign allows you to automate communication
|
||||
to your prospects. You can define a segment (set of conditions) on
|
||||
your leads and partners to fulfill the campaign.
|
||||
</p><p>
|
||||
A campaign can have many activities like sending an email, printing
|
||||
a letter, assigning to a team, etc. These activities are triggered
|
||||
from specific situations; contact form, 10 days after first
|
||||
contact, if a lead is not closed yet, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem name="Lead Automation" id="menu_marketing_campaign_root" groups="marketing_campaign.group_lead_automation_user,marketing_campaign.group_lead_automation_manager" web_icon="marketing_campaign,static/description/icon.png"
|
||||
sequence="10"/>
|
||||
<menuitem id="menu_marketing_campaign_campaigns" sequence="1" name="Campaigns" parent="menu_marketing_campaign_root" web_icon="marketing_campaign,static/description/icon.png"/>
|
||||
<menuitem id="menu_marketing_campaign_form" parent="menu_marketing_campaign_campaigns" action="action_marketing_campaign_form" sequence="1"/>
|
||||
<menuitem name="Reporting" id="report_marketing_campaign" parent="menu_marketing_campaign_root"
|
||||
sequence="99"/>
|
||||
|
||||
<!-- Marketing Segments -->
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_segment_form">
|
||||
<field name="name">marketing.campaign.segment.form</field>
|
||||
<field name="model">marketing.campaign.segment</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Marketing Campaign Segment">
|
||||
<header>
|
||||
<button name="state_running_set" type="object" string="Run" states="draft" class="oe_highlight"/>
|
||||
<button name="state_done_set" type="object" string="Close" states="running" class="oe_highlight"/>
|
||||
<button name="state_draft_set" type="object" string="Set to Draft" states="done,cancelled"/>
|
||||
<button name="state_cancel_set" type="object" string="Cancel Segment" states="running"/>
|
||||
<field name="state" readonly="1" widget="statusbar" statusbar_visible="draft,running,done"/>
|
||||
</header>
|
||||
<sheet string="Segments" >
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="campaign_id"/>
|
||||
<field name="object_id" invisible="1"/>
|
||||
<field name="sync_mode" required="True"/>
|
||||
<label for="sync_last_date"/>
|
||||
<div>
|
||||
<field name="sync_last_date" class="oe_inline"/>
|
||||
<button string="Synchronize Manually" states="running" name="process_segment" type="object"/>
|
||||
</div>
|
||||
<field name="date_next_sync"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="ir_filter_id"/>
|
||||
<field name="date_run" readonly="1"/>
|
||||
<field name="date_done" readonly="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_segment_tree">
|
||||
<field name="name">marketing.campaign.segment.tree</field>
|
||||
<field name="model">marketing.campaign.segment</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree decoration-info="state == 'draft'" decoration-muted="state in ('done','cancelled')" string="Segments">
|
||||
<field name="name"/>
|
||||
<field name="campaign_id"/>
|
||||
<field name="date_run"/>
|
||||
<field name="sync_last_date"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_segment_view_kanban" model="ir.ui.view">
|
||||
<field name="name">marketing.campaign.segment.kanban</field>
|
||||
<field name="model">marketing.campaign.segment</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="object_id"/>
|
||||
<field name="state"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_card oe_kanban_global_click">
|
||||
<div class="mb4">
|
||||
<strong><field name="name"/></strong>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-6 text-muted">
|
||||
<field name="object_id"/>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<span class="pull-right text-right">
|
||||
<field name="state" widget="kanban_label_selection" options="{'classes': {'draft': 'info', 'running': 'default',
|
||||
'done': 'success', 'cancelled': 'danger'}}"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_marketing_campaign_segment_search" model="ir.ui.view">
|
||||
<field name="name">marketing.campaign.segment.search</field>
|
||||
<field name="model">marketing.campaign.segment</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Segments">
|
||||
<field name="name" string="Segment"/>
|
||||
<field name="date_run"/>
|
||||
<filter string="Running" name="running" domain="[('state','=','running')]"/>
|
||||
<filter string="Draft" domain="[('state','=','draft')]"/>
|
||||
<separator/>
|
||||
<filter string="Newly Created" help="Sync mode: only records created after last sync" domain="[('sync_mode','=','create_date')]"/>
|
||||
<filter string="Newly Modified" help="Sync mode: only records updated after last sync" domain="[('sync_mode','=','write_date')]"/>
|
||||
<filter string="All" help="Sync mode: all records" domain="[('sync_mode','=','all')]"/>
|
||||
<field name="campaign_id"/>
|
||||
<field name="object_id"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Campaign" name="Campaign" context="{'group_by':'campaign_id'}"/>
|
||||
<filter string="Status" name="Status" context="{'group_by':'state'}"/>
|
||||
<filter string="Launch Month" name="Launch Date" context="{'group_by':'date_run'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_marketing_campaign_segment_form">
|
||||
<field name="name">Segments</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">marketing.campaign.segment</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_id" ref="view_marketing_campaign_segment_tree"/>
|
||||
<field name="search_view_id" ref="view_marketing_campaign_segment_search"/>
|
||||
<field name="context">{'group_by': []}</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_marketing_campaign_segment_form" parent="menu_marketing_campaign_campaigns" action="action_marketing_campaign_segment_form" sequence="2"/>
|
||||
|
||||
<!--
|
||||
Marketing Activities
|
||||
These views are not intended to be used outside the campaign context.
|
||||
-->
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_activity_form">
|
||||
<field name="name">marketing.campaign.activity.form</field>
|
||||
<field name="model">marketing.campaign.activity</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Activities">
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="signal" groups="base.group_no_one"/>
|
||||
<field name="start"/>
|
||||
<field name="object_id" invisible="1"/>
|
||||
<field name="campaign_id" invisible="1" required="0"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="variable_cost"/>
|
||||
<field name="revenue" widget="monetary"/>
|
||||
</group>
|
||||
</group>
|
||||
<group >
|
||||
<group>
|
||||
<field name="condition" widget="char"/>
|
||||
<field name="keep_if_condition_not_met"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="action_type"/>
|
||||
<field name="email_template_id" attrs="{'required':[('action_type','=','email')], 'invisible':[('action_type','!=','email')]}"
|
||||
context="{'default_model_id':object_id}"/>
|
||||
<field name="server_action_id" attrs="{'required':[('action_type','=','action')],'invisible':[('action_type','!=','action')]}" domain="[('model_id','=',object_id)]"/>
|
||||
<field name="report_id" attrs="{'required':[('action_type','=','report')],'invisible':[('action_type','!=','report')]}" context="{'object_id':object_id}"/>
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Previous Activities"/>
|
||||
<field name="from_ids" mode="tree" context="{'default_activity_to_id': active_id}">
|
||||
<tree string="Incoming Transitions" editable="bottom">
|
||||
<field name="activity_from_id" domain="[('campaign_id', '=', parent.campaign_id)]" options="{'no_create': True}" />
|
||||
<field name='trigger'/>
|
||||
<field name="interval_nbr"/>
|
||||
<field name="interval_type"/>
|
||||
</tree>
|
||||
<form string="Incoming Transitions">
|
||||
<group col="4">
|
||||
<field name="activity_from_id" domain="[('campaign_id', '=', parent.campaign_id)]" options="{'no_create': True}" />
|
||||
<field name='trigger'/>
|
||||
<field name="interval_nbr"/>
|
||||
<field name="interval_type"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
<separator string="Next Activities"/>
|
||||
<field name="to_ids" mode="tree" context="{'default_activity_from_id': active_id}">
|
||||
<tree string="Outgoing Transitions" editable="bottom">
|
||||
<field name="activity_to_id" domain="[('campaign_id', '=', parent.campaign_id)]" options="{'no_create': True}" />
|
||||
<field name='trigger'/>
|
||||
<field name="interval_nbr"/>
|
||||
<field name="interval_type"/>
|
||||
</tree>
|
||||
<form string="Outgoing Transitions">
|
||||
<group col="4">
|
||||
<field name="activity_to_id" domain="[('campaign_id', '=', parent.campaign_id)]" options="{'no_create': True}" />
|
||||
<field name='trigger'/>
|
||||
<field name="interval_nbr"/>
|
||||
<field name="interval_type"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_activity_tree">
|
||||
<field name="name">marketing.campaign.activity.tree</field>
|
||||
<field name="model">marketing.campaign.activity</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Activities">
|
||||
<field name="name"/>
|
||||
<field name="condition"/>
|
||||
<field name="action_type"/>
|
||||
<field name="start"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Marketing Workitems -->
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_workitem_tree">
|
||||
<field name="name">marketing.campaign.workitem.tree</field>
|
||||
<field name="model">marketing.campaign.workitem</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree decoration-danger="state == 'exception'" decoration-muted="state == 'cancelled'" string="Marketing Campaign Activities">
|
||||
<field name="campaign_id"/>
|
||||
<field name="segment_id"/>
|
||||
<field name="activity_id"/>
|
||||
<field name="object_id" invisible="1"/>
|
||||
<field name="res_id" invisible="1"/>
|
||||
<field name="res_name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="date"/>
|
||||
<field name="state"/>
|
||||
<button string="Cancel" states="todo" name="button_cancel" type="object" icon="fa-times-circle text-danger"/>
|
||||
<button string="Preview" states="todo" name="preview" icon="fa-search-plus text-primary" type="object"/>
|
||||
<button string="Process" states="todo" name="process" type="object" icon="fa-arrow-right text-success"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_workitem_form">
|
||||
<field name="name">marketing.campaign.workitem.form</field>
|
||||
<field name="model">marketing.campaign.workitem</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Marketing Campaign Activities">
|
||||
<header>
|
||||
<button string="Process" states="todo" name="process" type="object"/>
|
||||
<button string="Reset" states="exception,cancelled" name="button_draft" type="object"/>
|
||||
<button string="Cancel Workitem" states="todo,exception" name="button_cancel" type="object"/>
|
||||
<field name="state" readonly="True" widget="statusbar" statusbar_visible="todo,done"/>
|
||||
<button string="Preview" states="todo" name="preview" icon="fa-search-plus fa-lg text-primary" type="object"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="campaign_id"/>
|
||||
<field name="segment_id"/>
|
||||
<field name="activity_id" context="{'segment_id':segment_id}"/>
|
||||
<field name="date"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="object_id" readonly="True"/>
|
||||
<field name="res_name"/>
|
||||
<field name="res_id"/>
|
||||
<field name="partner_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<group attrs="{'invisible':[('state','!=','exception')]}" string="Error Message">
|
||||
<field name="error_msg" nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_marketing_campaign_workitem_search" model="ir.ui.view">
|
||||
<field name="name">marketing.campaign.workitem.search</field>
|
||||
<field name="model">marketing.campaign.workitem</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Marketing Campaign Activities">
|
||||
<field name="res_name" string="Marketing Campaign Activity"/>
|
||||
<field name="date"/>
|
||||
<filter string="To Do" name="todo" domain="[('state','=','todo')]"/>
|
||||
<filter string="Exception" domain="[('state','=','exception')]"/>
|
||||
<field name="campaign_id"/>
|
||||
<field name="segment_id"/>
|
||||
<field name="object_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="res_id"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Campaign" name="campaign" context="{'group_by':'campaign_id'}"/>
|
||||
<filter string="Segment" name="segment" context="{'group_by':'segment_id'}"/>
|
||||
<filter string="Activity" name="activity" context="{'group_by':'activity_id'}"/>
|
||||
<filter string="Resource" name="resource" context="{'group_by':'object_id'}"/>
|
||||
<filter string="Resource ID" name="res_id" context="{'group_by':'res_id'}"/>
|
||||
<filter string="Status" name="Status" context="{'group_by':'state'}"/>
|
||||
<filter string="Execution Month" name="Date" context="{'group_by':'date'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_marketing_campaign_workitem">
|
||||
<field name="name">Follow-up</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">marketing.campaign.workitem</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_marketing_campaign_workitem_tree"/>
|
||||
<field name="search_view_id" ref="view_marketing_campaign_workitem_search"/>
|
||||
<field name="context">{'group_by': []}</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_action_marketing_campaign_workitem" parent="report_marketing_campaign" action="action_marketing_campaign_workitem" sequence="3"/>
|
||||
|
||||
</odoo>
|
||||
@@ -1,2 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
@@ -1,17 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
{
|
||||
'name': 'Marketing Campaign - Demo',
|
||||
'version': '1.0',
|
||||
'depends': ['marketing_campaign', 'crm'],
|
||||
'category': 'Marketing',
|
||||
'description': """
|
||||
Demo data for the module marketing_campaign.
|
||||
============================================
|
||||
|
||||
Creates demo data like leads, campaigns and segments for the module marketing_campaign.
|
||||
""",
|
||||
'website': 'https://www.odoo.com/page/lead-automation',
|
||||
'demo': ['data/marketing_campaign_crm_demo.xml'],
|
||||
'installable': True,
|
||||
}
|
||||
@@ -1,257 +0,0 @@
|
||||
<odoo>
|
||||
<record id="action_dummy" model="ir.actions.server">
|
||||
<field name="name">Dummy Python Code</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">True</field>
|
||||
<field name="sequence" eval="5"/>
|
||||
</record>
|
||||
|
||||
<!-- Email template -->
|
||||
<record id="email_template_1" model="mail.template">
|
||||
<field name="name">Lead Automation: For Odoo OnDemand Free Trial 2015</field>
|
||||
<field name="subject">Thanks for showing interest in Odoo</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>Thanks for the genuine interest you have shown in Odoo.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
<record id="email_template_2" model="mail.template">
|
||||
<field name="name">Lead Automation: For Odoo Discovery Day on May 2015</field>
|
||||
<field name="subject">Propose to subscribe to the Odoo Discovery Day on May 2015</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>We have very good offer that might suit you. We suggest you subscribe to the
|
||||
Odoo Discovery Day on May 2015.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_3" model="mail.template">
|
||||
<field name="subject">Lead Automation: Thanks for subscribing to the Odoo Discovery Day</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>Thanks for showing interest and for subscribing to the Odoo Discovery Day.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
<field name="name">For Odoo Discovery Day</field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_4" model="mail.template">
|
||||
<field name="name">Lead Automation: For Odoo book</field>
|
||||
<field name="subject">Thanks for buying the Odoo book</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>Thanks for showing interest and buying the Odoo book.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_5" model="mail.template">
|
||||
<field name="name">Lead Automation: technical training to gold partners</field>
|
||||
<field name="subject">Propose a free technical training to Gold partners</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>We have very good offer that might suit you. For our gold partners we are
|
||||
arranging free technical training on June 2016.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_6" model="mail.template">
|
||||
<field name="name">Lead Automation: training to silver partners</field>
|
||||
<field name="subject">Propose paid training to Silver partners</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>We have very good offer that might suit you. For our silver partners we are
|
||||
arranging a paid technical training on June 2016.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_7" model="mail.template">
|
||||
<field name="name">Lead Automation: gold partnership to silver partners</field>
|
||||
<field name="subject">Propose gold partnership to silver partners</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>We have very good offer that might suit you. For our silver partners, we are
|
||||
offering Gold partnership.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_8" model="mail.template">
|
||||
<field name="name">Lead Automation: subscribing to technical training</field>
|
||||
<field name="subject">Thanks for subscribing to technical training</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>Thanks for showing interest and for subscribing to technical training.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_9" model="mail.template">
|
||||
<field name="name">Lead Automation: Propose 1 month OnDemand trial</field>
|
||||
<field name="subject">1 month free trial for an OnDemand offer</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>It seems Odoo could do a lot for you. Would you be interested in a free trial of our OnDemand offer?</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
|
||||
<record id="email_template_10" model="mail.template">
|
||||
<field name="name">Lead Automation: Propose Odoo Book</field>
|
||||
<field name="subject">Odoo Book</field>
|
||||
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||
<field name="body_html"><![CDATA[
|
||||
<p>Hello,</p>
|
||||
<p>Would you be interested in buying our book? It contains a lot of useful
|
||||
functionnal information to perfect your Odoo training.</p>
|
||||
<p>If any further information is required, do not hesitate to reply to this message.</p>
|
||||
<p>Regards,</p>]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Campaign -->
|
||||
<record id="marketing_campaign_openerpondemandfreetrial0" model="marketing.campaign">
|
||||
<field name="name">Odoo OnDemand Free Trial 2015</field>
|
||||
<field name="object_id" ref="crm.model_crm_lead"/>
|
||||
<field name="mode">active</field>
|
||||
<field name="partner_field_id" ref="crm.field_crm_lead_partner_id"/>
|
||||
</record>
|
||||
|
||||
<!-- Activity -->
|
||||
<record id="marketing_campaign_activity_0" model="marketing.campaign.activity">
|
||||
<field name="name">Propose a 1 month free trial for an OnDemand offer</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_9"/>
|
||||
<field name="start" eval="1"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_activity_1" model="marketing.campaign.activity">
|
||||
<field name="name">Thanks for showing interest</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_1"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_activity_2" model="marketing.campaign.activity">
|
||||
<field name="name">Propose to subscribe to the Odoo Discovery Day on May 2015</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_2"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_activity_3" model="marketing.campaign.activity">
|
||||
<field name="name">Thanks for subscribing to the Odoo Discovery Day</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_3"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_activity_4" model="marketing.campaign.activity">
|
||||
<field name="name">Propose to buy the Odoo Book</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_10"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_activity_5" model="marketing.campaign.activity">
|
||||
<field name="name">Thanks for buying the Odoo book</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_4"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_activity_6" model="marketing.campaign.activity">
|
||||
<field name="name">Propose a free technical training to Gold partners</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_5"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_activity_7" model="marketing.campaign.activity">
|
||||
<field name="name">Propose paid training to Silver partners</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_6"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_activity_8" model="marketing.campaign.activity">
|
||||
<field name="name">Propose gold partnership to silver partners</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_7"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_activity_9" model="marketing.campaign.activity">
|
||||
<field name="name">Thanks for subscribing to technical training</field>
|
||||
<field name="server_action_id" ref="action_dummy"/>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="email_template_id" ref="email_template_8"/>
|
||||
</record>
|
||||
|
||||
<!-- Tranisition -->
|
||||
<record id="marketing_campaign_transition_0" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_0"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_1"/>
|
||||
</record>
|
||||
|
||||
<record id="marketing_campaign_transition_1" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_0"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_2"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_2" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_2"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_3"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_3" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_2"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_4"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_4" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_4"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_5"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_5" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_4"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_6"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_6" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_4"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_7"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_7" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_6"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_9"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_8" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_7"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_8"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_9" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_7"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_9"/>
|
||||
</record>
|
||||
<record id="marketing_campaign_transition_10" model="marketing.campaign.transition">
|
||||
<field name="activity_from_id" ref="marketing_campaign_activity_9"/>
|
||||
<field name="activity_to_id" ref="marketing_campaign_activity_1"/>
|
||||
</record>
|
||||
|
||||
<!-- Segment -->
|
||||
<record id="marketing_campaign_segment_bosslistusassociationslist0" model="marketing.campaign.segment">
|
||||
<field name="date_run" eval="time.strftime('%Y-%m-%d %H:%M:%S')"/>
|
||||
<field name="name">BossList US Associations List-0/90</field>
|
||||
<field name="sync_mode">create_date</field>
|
||||
<field name="campaign_id" ref="marketing_campaign_openerpondemandfreetrial0"/>
|
||||
<field name="state">draft</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
@@ -1,252 +0,0 @@
|
||||
# #-#-#-#-# ar.po (Odoo 9.0) #-#-#-#-#
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * marketing_campaign_crm_demo
|
||||
#
|
||||
# Translators:
|
||||
# Sadig Adam <sadig41@gmail.com>, 2015
|
||||
# #-#-#-#-# ar.po (Odoo 9.0) #-#-#-#-#
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * marketing_campaign_crm_demo
|
||||
#
|
||||
# Translators:
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo 9.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-18 14:07+0000\n"
|
||||
"PO-Revision-Date: 2015-08-25 10:19+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/odoo/odoo-9/language/ar/)\n"
|
||||
"Language: ar\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"#-#-#-#-# ar.po (Odoo 9.0) #-#-#-#-#\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
"#-#-#-#-# ar.po (Odoo 9.0) #-#-#-#-#\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_9
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>It seems Odoo could do a lot for you. Would you be interested in a free "
|
||||
"trial of our OnDemand offer?</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>مرحبا، </p>\n"
|
||||
"<p> شكرا لاظهارك الاهتمام ولاشتراكك في التدريب التقني</p>\n"
|
||||
"رجاء قم بمراجعتنا اذا احتجت للمزيد من المعلومات. ونقدر لك تعاونك معنا\n"
|
||||
"<p> ولاتتردد في الرد علي هذه الرسالة اذا احتجت للمزيد من المعلومات.</p>\n"
|
||||
"<p> مع تحيات فريق اودو</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_4
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and buying the Odoo book.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>مرحبا، </p>\n"
|
||||
"<p> شكرا لاظهارك الاهتمام ولاشتراكك في التدريب التقني</p>\n"
|
||||
"رجاء قم بمراجعتنا اذا احتجت للمزيد من المعلومات. ونقدر لك تعاونك معنا\n"
|
||||
"<p> ولاتتردد في الرد علي هذه الرسالة اذا احتجت للمزيد من المعلومات.</p>\n"
|
||||
"<p> مع تحيات فريق اودو</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_8
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and for subscribing to technical training.</"
|
||||
"p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>مرحبا، </p>\n"
|
||||
"<p> شكرا لاظهارك الاهتمام ولاشتراكك في التدريب التقني</p>\n"
|
||||
"رجاء قم بمراجعتنا اذا احتجت للمزيد من المعلومات. ونقدر لك تعاونك معنا\n"
|
||||
"<p> ولاتتردد في الرد علي هذه الرسالة اذا احتجت للمزيد من المعلومات.</p>\n"
|
||||
"<p> مع تحيات فريق اودو</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_3
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and for subscribing to the Odoo Discovery Day."
|
||||
"</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>مرحبا، </p>\n"
|
||||
"<p> شكرا لاظهارك الاهتمام ولاشتراكك في التدريب التقني</p>\n"
|
||||
"رجاء قم بمراجعتنا اذا احتجت للمزيد من المعلومات. ونقدر لك تعاونك معنا\n"
|
||||
"<p> ولاتتردد في الرد علي هذه الرسالة اذا احتجت للمزيد من المعلومات.</p>\n"
|
||||
"<p> مع تحيات فريق اودو</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_1
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for the genuine interest you have shown in Odoo.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>مرحبا، </p>\n"
|
||||
"<p> شكرا لاظهارك الاهتمام ولاشتراكك في التدريب التقني</p>\n"
|
||||
"رجاء قم بمراجعتنا اذا احتجت للمزيد من المعلومات. ونقدر لك تعاونك معنا\n"
|
||||
"<p> ولاتتردد في الرد علي هذه الرسالة اذا احتجت للمزيد من المعلومات.</p>\n"
|
||||
"<p> مع تحيات فريق اودو</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_5
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our gold partners we "
|
||||
"are\n"
|
||||
"arranging free technical training on June 2016.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_6
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our silver partners we "
|
||||
"are \n"
|
||||
"arranging a paid technical training on June 2016.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_7
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our silver partners, we "
|
||||
"are\n"
|
||||
"offering Gold partnership.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>مرحبا، </p>\n"
|
||||
"<p> شكرا لاظهارك الاهتمام ولاشتراكك في التدريب التقني</p>\n"
|
||||
"رجاء قم بمراجعتنا اذا احتجت للمزيد من المعلومات. ونقدر لك تعاونك معنا\n"
|
||||
"<p> ولاتتردد في الرد علي هذه الرسالة اذا احتجت للمزيد من المعلومات.</p>\n"
|
||||
"<p> مع تحيات فريق اودو</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_2
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. We suggest you subscribe to "
|
||||
"the\n"
|
||||
"Odoo Discovery Day on May 2015.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_10
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Would you be interested in buying our book? It contains a lot of useful\n"
|
||||
"functionnal information to perfect your Odoo training.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>مرحبا، </p>\n"
|
||||
"<p> شكرا لاظهارك الاهتمام ولاشتراكك في التدريب التقني</p>\n"
|
||||
"رجاء قم بمراجعتنا اذا احتجت للمزيد من المعلومات. ونقدر لك تعاونك معنا\n"
|
||||
"<p> ولاتتردد في الرد علي هذه الرسالة اذا احتجت للمزيد من المعلومات.</p>\n"
|
||||
"<p> مع تحيات فريق اودو</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_9
|
||||
msgid "1 month free trial for an OnDemand offer"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
|
||||
msgid "Dummy Python Code"
|
||||
msgstr "كود بايثون وهمي"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_3
|
||||
#, fuzzy
|
||||
msgid "Lead Automation: Thanks for subscribing to the Odoo Discovery Day"
|
||||
msgstr "شكرا لاشتراكك في يوم اكتشاف أودو"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_10
|
||||
msgid "Odoo Book"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_5
|
||||
msgid "Propose a free technical training to Gold partners"
|
||||
msgstr "اقتراح تدريب فني مجاني للشركاء الذهبين"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_7
|
||||
msgid "Propose gold partnership to silver partners"
|
||||
msgstr "اقتراح شراكة ذهبية للشركاء الفضيين"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_6
|
||||
msgid "Propose paid training to Silver partners"
|
||||
msgstr "اقتراح التدريب المدفوع للشركاء الفضيين"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_2
|
||||
msgid "Propose to subscribe to the Odoo Discovery Day on May 2015"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_4
|
||||
msgid "Thanks for buying the Odoo book"
|
||||
msgstr "شكرا لشراء كتاب أودو"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_1
|
||||
msgid "Thanks for showing interest in Odoo"
|
||||
msgstr "شكر على اظهار الاهتمام في أودو"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_8
|
||||
msgid "Thanks for subscribing to technical training"
|
||||
msgstr "شكر للاشتراك في التدريب التقني"
|
||||
@@ -1,195 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * marketing_campaign_crm_demo
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo 9.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-18 14:07+0000\n"
|
||||
"PO-Revision-Date: 2015-08-25 10:19+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: Catalan (http://www.transifex.com/odoo/odoo-9/language/ca/)\n"
|
||||
"Language: ca\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: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_9
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>It seems Odoo could do a lot for you. Would you be interested in a free "
|
||||
"trial of our OnDemand offer?</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_4
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and buying the Odoo book.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_8
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and for subscribing to technical training.</"
|
||||
"p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_3
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and for subscribing to the Odoo Discovery Day."
|
||||
"</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_1
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for the genuine interest you have shown in Odoo.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_5
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our gold partners we "
|
||||
"are\n"
|
||||
"arranging free technical training on June 2016.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_6
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our silver partners we "
|
||||
"are \n"
|
||||
"arranging a paid technical training on June 2016.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_7
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our silver partners, we "
|
||||
"are\n"
|
||||
"offering Gold partnership.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_2
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. We suggest you subscribe to "
|
||||
"the\n"
|
||||
"Odoo Discovery Day on May 2015.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_10
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Would you be interested in buying our book? It contains a lot of useful\n"
|
||||
"functionnal information to perfect your Odoo training.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_9
|
||||
msgid "1 month free trial for an OnDemand offer"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
|
||||
msgid "Dummy Python Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_3
|
||||
msgid "Lead Automation: Thanks for subscribing to the Odoo Discovery Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_10
|
||||
msgid "Odoo Book"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_5
|
||||
msgid "Propose a free technical training to Gold partners"
|
||||
msgstr "Proposa una formació tècnica gratuïta als socis d'Or"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_7
|
||||
msgid "Propose gold partnership to silver partners"
|
||||
msgstr "Proposa associació or a associats plata"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_6
|
||||
msgid "Propose paid training to Silver partners"
|
||||
msgstr "Proposa formació de pagament als socis de Plata"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_2
|
||||
msgid "Propose to subscribe to the Odoo Discovery Day on May 2015"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_4
|
||||
msgid "Thanks for buying the Odoo book"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_1
|
||||
msgid "Thanks for showing interest in Odoo"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_8
|
||||
msgid "Thanks for subscribing to technical training"
|
||||
msgstr "Gràcies per subscriure-vos a la formació tècnica"
|
||||
@@ -1,296 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * marketing_campaign_crm_demo
|
||||
#
|
||||
# Translators:
|
||||
# Rudolf Schnapka <rs@techno-flex.de>, 2016
|
||||
# Thorsten Vocks <thorsten.vocks@openbig.org>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo 9.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-18 14:07+0000\n"
|
||||
"PO-Revision-Date: 2016-06-09 17:31+0000\n"
|
||||
"Last-Translator: Thorsten Vocks <thorsten.vocks@openbig.org>\n"
|
||||
"Language-Team: German (http://www.transifex.com/odoo/odoo-9/language/de/)\n"
|
||||
"Language: de\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: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_9
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>It seems Odoo could do a lot for you. Would you be interested in a free "
|
||||
"trial of our OnDemand offer?</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>es scheint, dass Odoo eine Menge für Sie leisten könnte. Sind "
|
||||
"Sie an einer kostenfreien Demo unseres OnDemand Angebots interessiert?</p>\n"
|
||||
" <p>Bei Bedarf, können Sie sich gerne an uns wenden.</p>\n"
|
||||
" <p>Viele Grüsse, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_4
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and buying the Odoo book.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>vielen Dank für Ihr Interesse an der Odoo Discovery "
|
||||
"Veranstaltung .</p>\n"
|
||||
" <p>Bei Rückfragen, können Sie gerne diese Nachricht beantworten."
|
||||
"</p>\n"
|
||||
" <p>Viele Grüße, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_8
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and for subscribing to technical training.</"
|
||||
"p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>vielen Dank für Ihr Interesse an der Odoo Discovery "
|
||||
"Veranstaltung .</p>\n"
|
||||
" <p>Bei Rückfragen, können Sie gerne diese Nachricht beantworten."
|
||||
"</p>\n"
|
||||
" <p>Viele Grüße, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_3
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and for subscribing to the Odoo Discovery Day."
|
||||
"</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>vielen Dank für Ihr Interesse an der Odoo Discovery "
|
||||
"Veranstaltung .</p>\n"
|
||||
" <p>Bei Rückfragen, können Sie gerne diese Nachricht beantworten."
|
||||
"</p>\n"
|
||||
" <p>Viele Grüße, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_1
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for the genuine interest you have shown in Odoo.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>vielen Dank für Ihr Interesse an Odoo.</p>\n"
|
||||
" <p>Sie können gerne eine Antwort senden, wenn Sie weitere Infos "
|
||||
"benötigen.</p>\n"
|
||||
" <p>Viele Grüße, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_5
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our gold partners we "
|
||||
"are\n"
|
||||
"arranging free technical training on June 2016.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>es scheint, dass Odoo eine Menge für Sie leisten könnte. Sind "
|
||||
"Sie an einer kostenfreien Demo unseres OnDemand Angebots interessiert?</p>\n"
|
||||
" <p>Bei Bedarf, können Sie sich gerne an uns wenden.</p>\n"
|
||||
" <p>Viele Grüsse, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_6
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our silver partners we "
|
||||
"are \n"
|
||||
"arranging a paid technical training on June 2016.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>es scheint, dass Odoo eine Menge für Sie leisten könnte. Sind "
|
||||
"Sie an einer kostenfreien Demo unseres OnDemand Angebots interessiert?</p>\n"
|
||||
" <p>Bei Bedarf, können Sie sich gerne an uns wenden.</p>\n"
|
||||
" <p>Viele Grüsse, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_7
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our silver partners, we "
|
||||
"are\n"
|
||||
"offering Gold partnership.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>es scheint, dass Odoo eine Menge für Sie leisten könnte. Sind "
|
||||
"Sie an einer kostenfreien Demo unseres OnDemand Angebots interessiert?</p>\n"
|
||||
" <p>Bei Bedarf, können Sie sich gerne an uns wenden.</p>\n"
|
||||
" <p>Viele Grüsse, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_2
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. We suggest you subscribe to "
|
||||
"the\n"
|
||||
"Odoo Discovery Day on May 2015.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>vielen Dank für Ihr Interesse an der Odoo Discovery "
|
||||
"Veranstaltung .</p>\n"
|
||||
" <p>Bei Rückfragen, können Sie gerne diese Nachricht beantworten."
|
||||
"</p>\n"
|
||||
" <p>Viele Grüße, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_10
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Would you be interested in buying our book? It contains a lot of useful\n"
|
||||
"functionnal information to perfect your Odoo training.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
"<p>Hallo,</p>\n"
|
||||
" <p>vielen Dank für Ihr Interesse an Odoo.</p>\n"
|
||||
" <p>Sie können gerne eine Antwort senden, wenn Sie weitere Infos "
|
||||
"benötigen.</p>\n"
|
||||
" <p>Viele Grüße, Ihr Odoo Team</p>"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_9
|
||||
msgid "1 month free trial for an OnDemand offer"
|
||||
msgstr "1 Monat kostenlose Probe auf ein On-Demand-Angebot"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
|
||||
msgid "Dummy Python Code"
|
||||
msgstr "Dummy Python Code"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_3
|
||||
#, fuzzy
|
||||
msgid "Lead Automation: Thanks for subscribing to the Odoo Discovery Day"
|
||||
msgstr "Danke für die Anmeldung zur Odoo Discovery Veranstaltung"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_10
|
||||
msgid "Odoo Book"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_5
|
||||
msgid "Propose a free technical training to Gold partners"
|
||||
msgstr "Vorschlag für ein technisches Training zur Erlangung des Gold Status"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_7
|
||||
msgid "Propose gold partnership to silver partners"
|
||||
msgstr "Vorschlag der Gold Partnerschaft für Silber Partner"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_6
|
||||
msgid "Propose paid training to Silver partners"
|
||||
msgstr ""
|
||||
"Vorschlag für Trainingsprogramm zur Erlangung des Status Silber Partner"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_2
|
||||
msgid "Propose to subscribe to the Odoo Discovery Day on May 2015"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_4
|
||||
msgid "Thanks for buying the Odoo book"
|
||||
msgstr "Danke für den Kauf des Odoo Buchs"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_1
|
||||
msgid "Thanks for showing interest in Odoo"
|
||||
msgstr "Danke für Ihr Interesse an Odoo"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_8
|
||||
msgid "Thanks for subscribing to technical training"
|
||||
msgstr "Danke für Ihre Anmeldung zum technischen Training"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<p>Hello,</p>\n"
|
||||
#~ " <p>Thanks for showing interest and buying the Odoo book.</p>\n"
|
||||
#~ " If any further information required kindly revert back.\n"
|
||||
#~ " <p>Regards,Odoo Team</p>"
|
||||
#~ msgstr ""
|
||||
#~ "<p>Hallo,</p>\n"
|
||||
#~ " <p>vielen Dank für Ihr Interesse und den Kauf des Odoo Buch.</"
|
||||
#~ "p>\n"
|
||||
#~ " Sobald Sie weitere Informationen benötigen, kontaktieren Sie "
|
||||
#~ "uns gerne.\n"
|
||||
#~ " <p>Viele Grüsse, Ihr Odoo Team</p>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<p>Hello,</p>\n"
|
||||
#~ " <p>Thanks for showing interest and for subscribing to "
|
||||
#~ "technical training.</p>\n"
|
||||
#~ " If any further information required kindly revert back.I "
|
||||
#~ "really appreciate your co-operation on this.</p>\n"
|
||||
#~ " <p>If any further information is required, do not hesitate to "
|
||||
#~ "reply to this message.</p>\n"
|
||||
#~ " <p>Regards,Odoo Team</p>"
|
||||
#~ msgstr ""
|
||||
#~ "<p>Hallo,</p>\n"
|
||||
#~ " <p>vielen Dank für Ihr Interesse an einem technischen "
|
||||
#~ "Training.</p>\n"
|
||||
#~ " Falls Sie weitere Information benötigen, können Sie jederzeit "
|
||||
#~ "auf uns zurückkommen .\n"
|
||||
#~ " Wir freuen uns auf Ihre Kooperation.</p>\n"
|
||||
#~ " <p>Sie können auch gerne, durch die Beantwortung dieser E-"
|
||||
#~ "Mail, mit uns kooperieren.</p>\n"
|
||||
#~ " <p>Viele Grüße vom Odoo Team</p>"
|
||||
@@ -1,195 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * marketing_campaign_crm_demo
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo 9.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-18 14:07+0000\n"
|
||||
"PO-Revision-Date: 2015-11-21 23:52+0000\n"
|
||||
"Last-Translator: Goutoudis Kostas <goutoudis@gmail.com>\n"
|
||||
"Language-Team: Greek (http://www.transifex.com/odoo/odoo-9/language/el/)\n"
|
||||
"Language: el\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: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_9
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>It seems Odoo could do a lot for you. Would you be interested in a free "
|
||||
"trial of our OnDemand offer?</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_4
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and buying the Odoo book.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_8
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and for subscribing to technical training.</"
|
||||
"p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_3
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for showing interest and for subscribing to the Odoo Discovery Day."
|
||||
"</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_1
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Thanks for the genuine interest you have shown in Odoo.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_5
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our gold partners we "
|
||||
"are\n"
|
||||
"arranging free technical training on June 2016.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_6
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our silver partners we "
|
||||
"are \n"
|
||||
"arranging a paid technical training on June 2016.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_7
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. For our silver partners, we "
|
||||
"are\n"
|
||||
"offering Gold partnership.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_2
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>We have very good offer that might suit you. We suggest you subscribe to "
|
||||
"the\n"
|
||||
"Odoo Discovery Day on May 2015.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,body_html:marketing_campaign_crm_demo.email_template_10
|
||||
msgid ""
|
||||
"\n"
|
||||
"<p>Hello,</p>\n"
|
||||
"<p>Would you be interested in buying our book? It contains a lot of useful\n"
|
||||
"functionnal information to perfect your Odoo training.</p>\n"
|
||||
"<p>If any further information is required, do not hesitate to reply to this "
|
||||
"message.</p>\n"
|
||||
"<p>Regards,</p>"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_9
|
||||
msgid "1 month free trial for an OnDemand offer"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:ir.actions.server,name:marketing_campaign_crm_demo.action_dummy
|
||||
msgid "Dummy Python Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_3
|
||||
msgid "Lead Automation: Thanks for subscribing to the Odoo Discovery Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_10
|
||||
msgid "Odoo Book"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_5
|
||||
msgid "Propose a free technical training to Gold partners"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_7
|
||||
msgid "Propose gold partnership to silver partners"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_6
|
||||
msgid "Propose paid training to Silver partners"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_2
|
||||
msgid "Propose to subscribe to the Odoo Discovery Day on May 2015"
|
||||
msgstr ""
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_4
|
||||
msgid "Thanks for buying the Odoo book"
|
||||
msgstr "Σας ευχαριστούμε για την αγορά του βιβλίου Odoo"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_1
|
||||
msgid "Thanks for showing interest in Odoo"
|
||||
msgstr "Ευχαριστούμε για το ενδιαφέρον σας στο Odoo"
|
||||
|
||||
#. module: marketing_campaign_crm_demo
|
||||
#: model:mail.template,subject:marketing_campaign_crm_demo.email_template_8
|
||||
msgid "Thanks for subscribing to technical training"
|
||||
msgstr "Ευχαριστούμε που εγγραφήκατε στην τεχνική εκπαίδευση"
|
||||
@@ -1,15 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.saas~14\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-02-15 09:50+0000\n"
|
||||
"PO-Revision-Date: 2017-02-15 09:50+0000\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/odoo/teams/41243/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Language: es\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user