First commit waiting for Budget Alert
This commit is contained in:
18
modules/axelor-open-suite/axelor-marketing/build.gradle
Normal file
18
modules/axelor-open-suite/axelor-marketing/build.gradle
Normal file
@ -0,0 +1,18 @@
|
||||
apply plugin: "com.axelor.app-module"
|
||||
|
||||
apply from: "../version.gradle"
|
||||
|
||||
apply {
|
||||
version = openSuiteVersion
|
||||
}
|
||||
|
||||
axelor {
|
||||
title "Axelor Marketing"
|
||||
description "Axelor Marketing Module"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(":modules:axelor-crm")
|
||||
compile project(":modules:axelor-studio")
|
||||
compile "com.mandrillapp.wrapper.lutung:lutung:0.0.7"
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.exception;
|
||||
|
||||
public interface IExceptionMessage {
|
||||
|
||||
static final String EMPTY_TARGET = /*$$(*/ "Please select target" /*)*/;
|
||||
|
||||
static final String EMAIL_ERROR1 = /*$$(*/
|
||||
"Error in sending an email to the following targets" /*)*/;
|
||||
|
||||
static final String EMAIL_ERROR2 = /*$$(*/
|
||||
"Error in sending emails. Please check the log file generated." /*)*/;
|
||||
|
||||
static final String EMAIL_SUCCESS = /*$$(*/ "Emails sent successfully" /*)*/;
|
||||
|
||||
static final String REMINDER_EMAIL1 = /*$$(*/
|
||||
"Please add atleast one invited Partner or Lead." /*)*/;
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.module;
|
||||
|
||||
import com.axelor.app.AxelorModule;
|
||||
import com.axelor.apps.marketing.service.CampaignService;
|
||||
import com.axelor.apps.marketing.service.CampaignServiceImpl;
|
||||
import com.axelor.apps.marketing.service.TargetListService;
|
||||
import com.axelor.apps.marketing.service.TargetListServiceImpl;
|
||||
|
||||
public class MarketingModule extends AxelorModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(CampaignService.class).to(CampaignServiceImpl.class);
|
||||
bind(TargetListService.class).to(TargetListServiceImpl.class);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.service;
|
||||
|
||||
import com.axelor.apps.base.db.Partner;
|
||||
import com.axelor.apps.crm.db.Lead;
|
||||
import com.axelor.apps.marketing.db.Campaign;
|
||||
import com.axelor.meta.db.MetaFile;
|
||||
import com.google.inject.persist.Transactional;
|
||||
|
||||
public interface CampaignService {
|
||||
|
||||
public MetaFile sendEmail(Campaign campaign);
|
||||
|
||||
public MetaFile sendReminderEmail(Campaign campaign);
|
||||
|
||||
public void generateEvents(Campaign campaign);
|
||||
|
||||
public void generateTargets(Campaign campaign);
|
||||
|
||||
@Transactional
|
||||
public void inviteAllTargets(Campaign campaign);
|
||||
|
||||
@Transactional
|
||||
public void inviteSelectedTargets(Campaign campaign, Campaign campaignContext);
|
||||
|
||||
@Transactional
|
||||
public void addParticipatingTargets(Campaign campaign, Campaign campaignContext);
|
||||
|
||||
@Transactional
|
||||
public void addNotParticipatingTargets(Campaign campaign, Campaign campaignContext);
|
||||
|
||||
@Transactional
|
||||
public void markLeadPresent(Campaign campaign, Lead lead);
|
||||
|
||||
@Transactional
|
||||
public void markPartnerPresent(Campaign campaign, Partner partner);
|
||||
}
|
||||
@ -0,0 +1,360 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.service;
|
||||
|
||||
import com.axelor.apps.base.db.Partner;
|
||||
import com.axelor.apps.crm.db.Event;
|
||||
import com.axelor.apps.crm.db.Lead;
|
||||
import com.axelor.apps.crm.db.repo.EventRepository;
|
||||
import com.axelor.apps.marketing.db.Campaign;
|
||||
import com.axelor.apps.marketing.db.repo.CampaignRepository;
|
||||
import com.axelor.apps.marketing.exception.IExceptionMessage;
|
||||
import com.axelor.apps.message.db.Message;
|
||||
import com.axelor.apps.message.db.Template;
|
||||
import com.axelor.db.Model;
|
||||
import com.axelor.exception.AxelorException;
|
||||
import com.axelor.i18n.I18n;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.meta.MetaFiles;
|
||||
import com.axelor.meta.db.MetaFile;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.persist.Transactional;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Set;
|
||||
import javax.mail.MessagingException;
|
||||
|
||||
public class CampaignServiceImpl implements CampaignService {
|
||||
|
||||
protected TemplateMessageServiceMarketingImpl templateMessageServiceMarketingImpl;
|
||||
|
||||
protected EventRepository eventRepo;
|
||||
|
||||
@Inject
|
||||
public CampaignServiceImpl(
|
||||
TemplateMessageServiceMarketingImpl templateMessageServiceMarketingImpl,
|
||||
EventRepository eventRepo) {
|
||||
this.templateMessageServiceMarketingImpl = templateMessageServiceMarketingImpl;
|
||||
this.eventRepo = eventRepo;
|
||||
}
|
||||
|
||||
public MetaFile sendEmail(Campaign campaign) {
|
||||
|
||||
String errorPartners = "";
|
||||
String errorLeads = "";
|
||||
|
||||
templateMessageServiceMarketingImpl.setEmailAccount(campaign.getEmailAccount());
|
||||
|
||||
if (campaign.getPartnerTemplate() != null) {
|
||||
errorPartners =
|
||||
sendToPartners(campaign.getPartnerSet(), campaign.getPartnerTemplate(), campaign);
|
||||
}
|
||||
|
||||
if (campaign.getLeadTemplate() != null) {
|
||||
errorLeads = sendToLeads(campaign.getLeadSet(), campaign.getLeadTemplate(), campaign);
|
||||
}
|
||||
|
||||
if (errorPartners.isEmpty() && errorLeads.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return generateLog(errorPartners, errorLeads, campaign.getEmailLog(), campaign.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public MetaFile sendReminderEmail(Campaign campaign) {
|
||||
|
||||
String errorPartners = "";
|
||||
String errorLeads = "";
|
||||
|
||||
templateMessageServiceMarketingImpl.setEmailAccount(campaign.getEmailAccount());
|
||||
|
||||
if (campaign.getPartnerReminderTemplate() != null) {
|
||||
errorPartners =
|
||||
sendToPartners(
|
||||
campaign.getInvitedPartnerSet(), campaign.getPartnerReminderTemplate(), campaign);
|
||||
}
|
||||
|
||||
if (campaign.getLeadReminderTemplate() != null) {
|
||||
errorLeads =
|
||||
sendToLeads(campaign.getInvitedLeadSet(), campaign.getLeadReminderTemplate(), campaign);
|
||||
}
|
||||
if (errorPartners.isEmpty() && errorLeads.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return generateLog(errorPartners, errorLeads, campaign.getEmailLog(), campaign.getId());
|
||||
}
|
||||
|
||||
protected String sendToPartners(Set<Partner> partnerSet, Template template, Campaign campaign) {
|
||||
|
||||
StringBuilder errors = new StringBuilder();
|
||||
|
||||
for (Partner partner : partnerSet) {
|
||||
|
||||
try {
|
||||
// templateMessageServiceMarketingImpl.generateAndSendMessage(partner, template);
|
||||
generateAndSendMessage(campaign, partner, template);
|
||||
} catch (ClassNotFoundException
|
||||
| InstantiationException
|
||||
| IllegalAccessException
|
||||
| MessagingException
|
||||
| IOException
|
||||
| AxelorException e) {
|
||||
errors.append(partner.getName() + "\n");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return errors.toString();
|
||||
}
|
||||
|
||||
protected String sendToLeads(Set<Lead> leadSet, Template template, Campaign campaign) {
|
||||
|
||||
StringBuilder errors = new StringBuilder();
|
||||
|
||||
for (Lead lead : leadSet) {
|
||||
|
||||
try {
|
||||
// templateMessageServiceMarketingImpl.generateAndSendMessage(lead, template);
|
||||
generateAndSendMessage(campaign, lead, template);
|
||||
} catch (ClassNotFoundException
|
||||
| InstantiationException
|
||||
| IllegalAccessException
|
||||
| MessagingException
|
||||
| IOException
|
||||
| AxelorException e) {
|
||||
errors.append(lead.getName() + "\n");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return errors.toString();
|
||||
}
|
||||
|
||||
@Transactional(rollbackOn = {Exception.class})
|
||||
protected void generateAndSendMessage(Campaign campaign, Model model, Template template)
|
||||
throws ClassNotFoundException, InstantiationException, IllegalAccessException,
|
||||
MessagingException, IOException, AxelorException {
|
||||
Message message = templateMessageServiceMarketingImpl.generateAndSendMessage(model, template);
|
||||
message.setRelatedTo1Select(Campaign.class.getCanonicalName());
|
||||
message.setRelatedTo1SelectId(campaign.getId());
|
||||
}
|
||||
|
||||
protected MetaFile generateLog(
|
||||
String errorPartners, String errorLeads, MetaFile metaFile, Long campaignId) {
|
||||
|
||||
if (metaFile == null) {
|
||||
metaFile = new MetaFile();
|
||||
metaFile.setFileName("EmailLog" + campaignId + ".text");
|
||||
}
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append(I18n.get(IExceptionMessage.EMAIL_ERROR1));
|
||||
builder.append("\n");
|
||||
if (!errorPartners.isEmpty()) {
|
||||
builder.append(I18n.get("Partners") + ":\n");
|
||||
builder.append(errorPartners);
|
||||
}
|
||||
if (!errorLeads.isEmpty()) {
|
||||
builder.append(I18n.get("Leads") + ":\n");
|
||||
builder.append(errorLeads);
|
||||
}
|
||||
|
||||
ByteArrayInputStream stream = new ByteArrayInputStream(builder.toString().getBytes());
|
||||
|
||||
try {
|
||||
return Beans.get(MetaFiles.class).upload(stream, metaFile.getFileName());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void generateEvents(Campaign campaign) {
|
||||
|
||||
LocalDateTime eventStartDateTime = campaign.getEventStartDateTime();
|
||||
Long duration = campaign.getDuration();
|
||||
LocalDateTime eventEndDateTime = eventStartDateTime.plusSeconds(duration);
|
||||
|
||||
for (Partner partner : campaign.getPartnerSet()) {
|
||||
Event event = new Event();
|
||||
|
||||
if (partner.getIsContact()) {
|
||||
event.setContactPartner(partner);
|
||||
} else {
|
||||
event.setPartner(partner);
|
||||
}
|
||||
|
||||
event.setUser(
|
||||
campaign.getGenerateEventPerPartnerOrLead()
|
||||
? partner.getUser()
|
||||
: campaign.getEventUser());
|
||||
event.setSubject(campaign.getSubject());
|
||||
event.setTypeSelect(campaign.getEventTypeSelect());
|
||||
event.setStartDateTime(eventStartDateTime);
|
||||
event.setEndDateTime(eventEndDateTime);
|
||||
event.setDuration(duration);
|
||||
event.setTeam(
|
||||
campaign.getGenerateEventPerPartnerOrLead() ? partner.getTeam() : campaign.getTeam());
|
||||
event.setCampaign(campaign);
|
||||
event.setStatusSelect(1);
|
||||
eventRepo.save(event);
|
||||
}
|
||||
|
||||
for (Lead lead : campaign.getLeadSet()) {
|
||||
Event event = new Event();
|
||||
event.setLead(lead);
|
||||
event.setUser(
|
||||
campaign.getGenerateEventPerPartnerOrLead() ? lead.getUser() : campaign.getEventUser());
|
||||
event.setSubject(campaign.getSubject());
|
||||
event.setTypeSelect(campaign.getEventTypeSelect());
|
||||
event.setStartDateTime(eventStartDateTime);
|
||||
event.setEndDateTime(eventEndDateTime);
|
||||
event.setDuration(duration);
|
||||
event.setTeam(
|
||||
campaign.getGenerateEventPerPartnerOrLead() ? lead.getTeam() : campaign.getTeam());
|
||||
event.setCampaign(campaign);
|
||||
event.setStatusSelect(1);
|
||||
eventRepo.save(event);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void generateTargets(Campaign campaign) {
|
||||
|
||||
TargetListService targetListService = Beans.get(TargetListService.class);
|
||||
|
||||
Set<Partner> partnerSet = targetListService.getAllPartners(campaign.getTargetModelSet());
|
||||
Set<Lead> leadSet = targetListService.getAllLeads(campaign.getTargetModelSet());
|
||||
|
||||
campaign.setPartnerSet(partnerSet);
|
||||
campaign.setLeadSet(leadSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void inviteSelectedTargets(Campaign campaign, Campaign campaignContext) {
|
||||
|
||||
Set<Partner> partners = campaign.getPartners();
|
||||
Set<Partner> notParticipatingPartnerSet = campaign.getNotParticipatingPartnerSet();
|
||||
|
||||
for (Partner partner : campaignContext.getPartnerSet()) {
|
||||
if (partner.isSelected()
|
||||
&& !partners.contains(partner)
|
||||
&& !notParticipatingPartnerSet.contains(partner)) {
|
||||
campaign.addInvitedPartnerSetItem(partner);
|
||||
}
|
||||
}
|
||||
|
||||
Set<Lead> leads = campaign.getLeads();
|
||||
Set<Lead> notParticipatingLeadSet = campaign.getNotParticipatingLeadSet();
|
||||
|
||||
for (Lead lead : campaignContext.getLeadSet()) {
|
||||
if (lead.isSelected() && !leads.contains(lead) && !notParticipatingLeadSet.contains(lead)) {
|
||||
campaign.addInvitedLeadSetItem(lead);
|
||||
}
|
||||
}
|
||||
|
||||
Beans.get(CampaignRepository.class).save(campaign);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void inviteAllTargets(Campaign campaign) {
|
||||
|
||||
Set<Partner> partners = campaign.getPartners();
|
||||
Set<Partner> notParticipatingPartnerSet = campaign.getNotParticipatingPartnerSet();
|
||||
|
||||
for (Partner partner : campaign.getPartnerSet()) {
|
||||
if (!partners.contains(partner) && !notParticipatingPartnerSet.contains(partner)) {
|
||||
campaign.addInvitedPartnerSetItem(partner);
|
||||
}
|
||||
}
|
||||
|
||||
Set<Lead> leads = campaign.getLeads();
|
||||
Set<Lead> notParticipatingLeadSet = campaign.getNotParticipatingLeadSet();
|
||||
|
||||
for (Lead lead : campaign.getLeadSet()) {
|
||||
if (!leads.contains(lead) && !notParticipatingLeadSet.contains(lead)) {
|
||||
campaign.addInvitedLeadSetItem(lead);
|
||||
}
|
||||
}
|
||||
Beans.get(CampaignRepository.class).save(campaign);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void addParticipatingTargets(Campaign campaign, Campaign campaignContext) {
|
||||
|
||||
for (Partner partner : campaignContext.getInvitedPartnerSet()) {
|
||||
if (partner.isSelected()) {
|
||||
campaign.addPartner(partner);
|
||||
campaign.removeInvitedPartnerSetItem(partner);
|
||||
}
|
||||
}
|
||||
|
||||
for (Lead lead : campaignContext.getInvitedLeadSet()) {
|
||||
if (lead.isSelected()) {
|
||||
campaign.addLead(lead);
|
||||
campaign.removeInvitedLeadSetItem(lead);
|
||||
}
|
||||
}
|
||||
|
||||
Beans.get(CampaignRepository.class).save(campaign);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void addNotParticipatingTargets(Campaign campaign, Campaign campaignContext) {
|
||||
|
||||
for (Partner partner : campaignContext.getInvitedPartnerSet()) {
|
||||
if (partner.isSelected()) {
|
||||
campaign.addNotParticipatingPartnerSetItem(partner);
|
||||
campaign.removeInvitedPartnerSetItem(partner);
|
||||
}
|
||||
}
|
||||
|
||||
for (Lead lead : campaignContext.getInvitedLeadSet()) {
|
||||
if (lead.isSelected()) {
|
||||
campaign.addNotParticipatingLeadSetItem(lead);
|
||||
campaign.removeInvitedLeadSetItem(lead);
|
||||
}
|
||||
}
|
||||
|
||||
Beans.get(CampaignRepository.class).save(campaign);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void markLeadPresent(Campaign campaign, Lead lead) {
|
||||
|
||||
campaign.addPresentLeadSetItem(lead);
|
||||
Beans.get(CampaignRepository.class).save(campaign);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void markPartnerPresent(Campaign campaign, Partner partner) {
|
||||
|
||||
campaign.addPresentPartnerSetItem(partner);
|
||||
Beans.get(CampaignRepository.class).save(campaign);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.service;
|
||||
|
||||
import com.axelor.apps.base.db.Partner;
|
||||
import com.axelor.apps.crm.db.Lead;
|
||||
import com.axelor.apps.marketing.db.TargetList;
|
||||
import java.util.Set;
|
||||
|
||||
public interface TargetListService {
|
||||
|
||||
public String getPartnerQuery(TargetList targetList);
|
||||
|
||||
public String getLeadQuery(TargetList targetList);
|
||||
|
||||
public Set<Partner> getAllPartners(Set<TargetList> targetListSet);
|
||||
|
||||
public Set<Lead> getAllLeads(Set<TargetList> targetListSet);
|
||||
}
|
||||
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.service;
|
||||
|
||||
import com.axelor.apps.base.db.Partner;
|
||||
import com.axelor.apps.base.db.repo.PartnerRepository;
|
||||
import com.axelor.apps.crm.db.Lead;
|
||||
import com.axelor.apps.crm.db.repo.LeadRepository;
|
||||
import com.axelor.apps.marketing.db.TargetList;
|
||||
import com.axelor.studio.service.filter.FilterJpqlService;
|
||||
import com.google.inject.Inject;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* This service class use to get filtered Partners and Leads.
|
||||
*
|
||||
* @author axelor
|
||||
*/
|
||||
public class TargetListServiceImpl implements TargetListService {
|
||||
|
||||
@Inject private FilterJpqlService filterJpqlService;
|
||||
|
||||
@Inject private PartnerRepository partnerRepo;
|
||||
|
||||
@Inject private LeadRepository leadRepo;
|
||||
|
||||
@Override
|
||||
public String getPartnerQuery(TargetList targetList) {
|
||||
String partnerFilters = null;
|
||||
|
||||
if (targetList.getPartnerQueryTypeSelect() == 0) {
|
||||
partnerFilters = filterJpqlService.getJpqlFilters(targetList.getPartnerFilterList());
|
||||
}
|
||||
if (targetList.getPartnerQueryTypeSelect() == 1) {
|
||||
partnerFilters = targetList.getPartnerQuery();
|
||||
}
|
||||
return partnerFilters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLeadQuery(TargetList targetList) {
|
||||
String leadFilters = null;
|
||||
|
||||
if (targetList.getLeadQueryTypeSelect() == 0) {
|
||||
leadFilters = filterJpqlService.getJpqlFilters(targetList.getLeadFilterList());
|
||||
}
|
||||
if (targetList.getLeadQueryTypeSelect() == 1) {
|
||||
leadFilters = targetList.getLeadQuery();
|
||||
}
|
||||
return leadFilters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Partner> getAllPartners(Set<TargetList> targetListSet) {
|
||||
Set<Partner> partnerSet = new HashSet<>();
|
||||
|
||||
for (TargetList target : targetListSet) {
|
||||
String filter = getPartnerQuery(target);
|
||||
if (filter != null) {
|
||||
partnerSet.addAll(partnerRepo.all().filter(filter).fetch());
|
||||
}
|
||||
for (Partner partner : target.getPartnerSet()) {
|
||||
partnerSet.add(partner);
|
||||
}
|
||||
}
|
||||
return partnerSet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Lead> getAllLeads(Set<TargetList> targetListSet) {
|
||||
Set<Lead> leadSet = new HashSet<>();
|
||||
|
||||
for (TargetList target : targetListSet) {
|
||||
String filter = getLeadQuery(target);
|
||||
if (filter != null) {
|
||||
leadSet.addAll(leadRepo.all().filter(filter).fetch());
|
||||
}
|
||||
for (Lead lead : target.getLeadSet()) {
|
||||
leadSet.add(lead);
|
||||
}
|
||||
}
|
||||
return leadSet;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.service;
|
||||
|
||||
import com.axelor.apps.base.service.message.TemplateMessageServiceBaseImpl;
|
||||
import com.axelor.apps.message.db.EmailAccount;
|
||||
import com.axelor.apps.message.db.Template;
|
||||
import com.axelor.apps.message.db.repo.MessageRepository;
|
||||
import com.axelor.apps.message.db.repo.TemplateRepository;
|
||||
import com.axelor.apps.message.service.MessageService;
|
||||
import com.axelor.apps.message.service.TemplateContextService;
|
||||
import com.google.inject.Inject;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TemplateMessageServiceMarketingImpl extends TemplateMessageServiceBaseImpl {
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||
|
||||
protected EmailAccount emailAccount;
|
||||
|
||||
@Inject
|
||||
public TemplateMessageServiceMarketingImpl(
|
||||
MessageService messageService, TemplateContextService templateContextService) {
|
||||
super(messageService, templateContextService);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer getMediaTypeSelect(Template template) {
|
||||
|
||||
if (template.getMediaTypeSelect() == TemplateRepository.MEDIA_TYPE_EMAILING) {
|
||||
return MessageRepository.MEDIA_TYPE_EMAIL;
|
||||
}
|
||||
|
||||
return super.getMediaTypeSelect(template);
|
||||
}
|
||||
|
||||
protected EmailAccount getMailAccount() {
|
||||
|
||||
if (emailAccount != null) {
|
||||
log.debug("Email account ::: {}", emailAccount);
|
||||
return emailAccount;
|
||||
}
|
||||
|
||||
return super.getMailAccount();
|
||||
}
|
||||
|
||||
public void setEmailAccount(EmailAccount emailAccount) {
|
||||
|
||||
this.emailAccount = emailAccount;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.translation;
|
||||
|
||||
public interface ITranslation {
|
||||
|
||||
public static final String MARKETING_MANAGEMENT_APP_NAME = /*$$(*/
|
||||
"value:Marketing Management"; /*)*/
|
||||
}
|
||||
@ -0,0 +1,201 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.web;
|
||||
|
||||
import com.axelor.apps.base.db.Partner;
|
||||
import com.axelor.apps.base.db.repo.PartnerRepository;
|
||||
import com.axelor.apps.crm.db.Lead;
|
||||
import com.axelor.apps.crm.db.repo.LeadRepository;
|
||||
import com.axelor.apps.marketing.db.Campaign;
|
||||
import com.axelor.apps.marketing.db.repo.CampaignRepository;
|
||||
import com.axelor.apps.marketing.exception.IExceptionMessage;
|
||||
import com.axelor.apps.marketing.service.CampaignService;
|
||||
import com.axelor.exception.service.TraceBackService;
|
||||
import com.axelor.i18n.I18n;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.meta.db.MetaFile;
|
||||
import com.axelor.rpc.ActionRequest;
|
||||
import com.axelor.rpc.ActionResponse;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
@Singleton
|
||||
public class CampaignController {
|
||||
|
||||
public void sendEmail(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaign = request.getContext().asType(Campaign.class);
|
||||
|
||||
try {
|
||||
campaign = Beans.get(CampaignRepository.class).find(campaign.getId());
|
||||
|
||||
if (campaign.getLeadSet().isEmpty() && campaign.getPartnerSet().isEmpty()) {
|
||||
response.setFlash(I18n.get(IExceptionMessage.EMPTY_TARGET));
|
||||
return;
|
||||
}
|
||||
MetaFile logFile = Beans.get(CampaignService.class).sendEmail(campaign);
|
||||
|
||||
if (logFile == null) {
|
||||
response.setFlash(I18n.get(IExceptionMessage.EMAIL_SUCCESS));
|
||||
} else {
|
||||
response.setFlash(I18n.get(IExceptionMessage.EMAIL_ERROR2));
|
||||
}
|
||||
|
||||
response.setValue("emailLog", logFile);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendReminderEmail(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaign = request.getContext().asType(Campaign.class);
|
||||
|
||||
try {
|
||||
campaign = Beans.get(CampaignRepository.class).find(campaign.getId());
|
||||
|
||||
if (campaign.getInvitedPartnerSet().isEmpty() && campaign.getInvitedPartnerSet().isEmpty()) {
|
||||
response.setFlash(I18n.get(IExceptionMessage.REMINDER_EMAIL1));
|
||||
return;
|
||||
}
|
||||
|
||||
MetaFile logFile = Beans.get(CampaignService.class).sendReminderEmail(campaign);
|
||||
|
||||
if (logFile == null) {
|
||||
response.setFlash(I18n.get(IExceptionMessage.EMAIL_SUCCESS));
|
||||
} else {
|
||||
response.setFlash(I18n.get(IExceptionMessage.EMAIL_ERROR2));
|
||||
}
|
||||
|
||||
response.setValue("emailLog", logFile);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void generateEvents(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaign = request.getContext().asType(Campaign.class);
|
||||
|
||||
try {
|
||||
campaign = Beans.get(CampaignRepository.class).find(campaign.getId());
|
||||
Beans.get(CampaignService.class).generateEvents(campaign);
|
||||
response.setAttr("plannedEventsPanel", "refresh", true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void generateTargets(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaign = request.getContext().asType(Campaign.class);
|
||||
|
||||
try {
|
||||
campaign = Beans.get(CampaignRepository.class).find(campaign.getId());
|
||||
Beans.get(CampaignService.class).generateTargets(campaign);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
|
||||
response.setReload(true);
|
||||
}
|
||||
|
||||
public void inviteSelectedTargets(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaignContext = request.getContext().asType(Campaign.class);
|
||||
|
||||
try {
|
||||
Beans.get(CampaignService.class)
|
||||
.inviteSelectedTargets(
|
||||
Beans.get(CampaignRepository.class).find(campaignContext.getId()), campaignContext);
|
||||
response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void inviteAllTargets(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaign = request.getContext().asType(Campaign.class);
|
||||
|
||||
try {
|
||||
Beans.get(CampaignService.class)
|
||||
.inviteAllTargets(Beans.get(CampaignRepository.class).find(campaign.getId()));
|
||||
response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void addParticipatingTargets(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaignContext = request.getContext().asType(Campaign.class);
|
||||
|
||||
try {
|
||||
Beans.get(CampaignService.class)
|
||||
.addParticipatingTargets(
|
||||
Beans.get(CampaignRepository.class).find(campaignContext.getId()), campaignContext);
|
||||
response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void addNotParticipatingTargets(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaignContext = request.getContext().asType(Campaign.class);
|
||||
|
||||
try {
|
||||
Beans.get(CampaignService.class)
|
||||
.addNotParticipatingTargets(
|
||||
Beans.get(CampaignRepository.class).find(campaignContext.getId()), campaignContext);
|
||||
response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void markPartnerPresent(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaign = request.getContext().getParent().asType(Campaign.class);
|
||||
Partner partner = request.getContext().asType(Partner.class);
|
||||
partner = Beans.get(PartnerRepository.class).find(partner.getId());
|
||||
|
||||
try {
|
||||
Beans.get(CampaignService.class)
|
||||
.markPartnerPresent(Beans.get(CampaignRepository.class).find(campaign.getId()), partner);
|
||||
response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void markLeadPresent(ActionRequest request, ActionResponse response) {
|
||||
|
||||
Campaign campaign = request.getContext().getParent().asType(Campaign.class);
|
||||
Lead lead = request.getContext().asType(Lead.class);
|
||||
lead = Beans.get(LeadRepository.class).find(lead.getId());
|
||||
|
||||
try {
|
||||
Beans.get(CampaignService.class)
|
||||
.markLeadPresent(Beans.get(CampaignRepository.class).find(campaign.getId()), lead);
|
||||
response.setReload(true);
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Axelor Business Solutions
|
||||
*
|
||||
* Copyright (C) 2019 Axelor (<http://axelor.com>).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.axelor.apps.marketing.web;
|
||||
|
||||
import com.axelor.apps.base.db.Partner;
|
||||
import com.axelor.apps.crm.db.Lead;
|
||||
import com.axelor.apps.marketing.db.TargetList;
|
||||
import com.axelor.apps.marketing.service.TargetListService;
|
||||
import com.axelor.exception.service.TraceBackService;
|
||||
import com.axelor.i18n.I18n;
|
||||
import com.axelor.inject.Beans;
|
||||
import com.axelor.meta.schema.actions.ActionView;
|
||||
import com.axelor.rpc.ActionRequest;
|
||||
import com.axelor.rpc.ActionResponse;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
/**
|
||||
* This controller class use to get filtered Partners and Leads.
|
||||
*
|
||||
* @author axelor
|
||||
*/
|
||||
@Singleton
|
||||
public class TargetListController {
|
||||
|
||||
public void openFilteredLeads(ActionRequest request, ActionResponse response) {
|
||||
|
||||
TargetList targetList = request.getContext().asType(TargetList.class);
|
||||
String leadFilters = null;
|
||||
|
||||
try {
|
||||
leadFilters = Beans.get(TargetListService.class).getLeadQuery(targetList);
|
||||
|
||||
if (leadFilters != null) {
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Leads"))
|
||||
.model(Lead.class.getName())
|
||||
.add("grid", "lead-grid")
|
||||
.add("form", "lead-form")
|
||||
.domain(leadFilters)
|
||||
.map());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void openFilteredPartners(ActionRequest request, ActionResponse response) {
|
||||
|
||||
TargetList targetList = request.getContext().asType(TargetList.class);
|
||||
String partnerFilters = null;
|
||||
|
||||
try {
|
||||
partnerFilters = Beans.get(TargetListService.class).getPartnerQuery(targetList);
|
||||
|
||||
if (partnerFilters != null) {
|
||||
response.setView(
|
||||
ActionView.define(I18n.get("Partners"))
|
||||
.model(Partner.class.getName())
|
||||
.add("grid", "partner-grid")
|
||||
.add("form", "partner-form")
|
||||
.domain(partnerFilters)
|
||||
.map());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
TraceBackService.trace(response, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<csv-inputs xmlns="http://axelor.com/xml/ns/data-import"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/data-import http://axelor.com/xml/ns/data-import/data-import_5.2.xsd">
|
||||
|
||||
<input file="auth_permission.csv" separator=";" type="com.axelor.auth.db.Permission" search="self.name = :name" call="com.axelor.csv.script.ImportPermission:importPermissionToRole">
|
||||
<bind to="canRead" eval="can_read == 'x' ? 'true' : 'false'"/>
|
||||
<bind to="canWrite" eval="can_write == 'x' ? 'true' : 'false'"/>
|
||||
<bind to="canCreate" eval="can_create == 'x' ? 'true' : 'false'"/>
|
||||
<bind to="canRemove" eval="can_remove == 'x' ? 'true' : 'false'"/>
|
||||
<bind to="canExport" eval="can_export == 'x' ? 'true' : 'false'"/>
|
||||
</input>
|
||||
|
||||
<input file="base_appMarketing.csv" separator=";" type="com.axelor.apps.base.db.AppMarketing" call="com.axelor.csv.script.ImportApp:importApp">
|
||||
<bind column="dependsOn" to="dependsOnSet" search="self.code in :dependsOn" eval="dependsOn.split(',') as List"/>
|
||||
</input>
|
||||
|
||||
<input file="meta_helpEN.csv" separator=";" type="com.axelor.meta.db.MetaHelp">
|
||||
<bind to="language" eval="'en'" />
|
||||
<bind to="type" eval="'tooltip'" />
|
||||
<bind to="model" eval="com.axelor.inject.Beans.get(com.axelor.meta.db.repo.MetaModelRepository.class).findByName(object)?.getFullName()" column="object" />
|
||||
</input>
|
||||
|
||||
<input file="meta_helpFR.csv" separator=";" type="com.axelor.meta.db.MetaHelp">
|
||||
<bind to="language" eval="'fr'" />
|
||||
<bind to="type" eval="'tooltip'" />
|
||||
<bind to="model" eval="com.axelor.inject.Beans.get(com.axelor.meta.db.repo.MetaModelRepository.class).findByName(object)?.getFullName()" column="object" />
|
||||
</input>
|
||||
|
||||
<input file="meta_metaMenu.csv" separator=";" type="com.axelor.meta.db.MetaMenu" search="self.name = :name" update="true" />
|
||||
|
||||
|
||||
</csv-inputs>
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
"name";"object";"can_read";"can_write";"can_create";"can_remove";"can_export";"condition";"conditionParams";"roleName"
|
||||
"perm.marketing.all";"com.axelor.apps.marketing.db.*";"x";"x";"x";"x";"x";;;"Admin"
|
||||
|
@ -0,0 +1,2 @@
|
||||
"name";"code";"installOrder";"description";"imagePath";"modules";"dependsOn";"sequence"
|
||||
"Marketing Management";"marketing";23;"Marketing Management Configuration";"app-marketing.png";"axelor-marketing";"crm";26
|
||||
|
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,2 @@
|
||||
"module";"object";"view";"field";"help"
|
||||
"axelor-marketing";"Campaign";"campaign-form";"emailLog";"Lets you import the email sending log with the statistics of the emailing."
|
||||
|
@ -0,0 +1,2 @@
|
||||
"module";"object";"view";"field";"help"
|
||||
"axelor-marketing";"Campaign";"campaign-form";"emailLog";"Permet d'importer le journal d'envoi d'email avec les statistiques de l'emailing."
|
||||
|
@ -0,0 +1,7 @@
|
||||
"name";"roles.name"
|
||||
"marketing-root";"Admin"
|
||||
"campaign-all";"Admin"
|
||||
"target-list-all";"Admin"
|
||||
"marketing-conf";"Admin"
|
||||
"marketing-conf-campaign-type";"Admin"
|
||||
"marketing-conf-template";"Admin"
|
||||
|
@ -0,0 +1,13 @@
|
||||
"importId";"name";"stageSelect";"campaignType.importId"
|
||||
"1";"Salon Open Source 2018";"0";"1"
|
||||
"2";"Salon ERP 2018";"1";"1"
|
||||
"3";"Lancement V5";"2";"4"
|
||||
"4";"Webinar Avril 2018";"3";"3"
|
||||
"5";"Salon ERP 2017";"4";"1"
|
||||
"6";"Webinar Aout 2018";"0";"3"
|
||||
"7";"Webinar Juin 2018";"1";"3"
|
||||
"8";"Webinar Mai 2018";"2";"3"
|
||||
"9";"Livre Blanc Choisir son ERP";"3";"2"
|
||||
"10";"Webinar Mars 2018";"4";"3"
|
||||
"11";"Livre Blanc Méthodologies projet";"0";"2"
|
||||
"12";"Webinar Juillet 2018";"1";"3"
|
||||
|
@ -0,0 +1,5 @@
|
||||
"importId";"name"
|
||||
"1";"Salons"
|
||||
"2";"Livres Blancs"
|
||||
"3";"Webinar"
|
||||
"4";"Sortie de version"
|
||||
|
@ -0,0 +1,3 @@
|
||||
"importId";"name"
|
||||
"1";"Salons"
|
||||
"2";"Site Internet"
|
||||
|
@ -0,0 +1,7 @@
|
||||
"name";"mediaTypeSelect";"metaModel.name"
|
||||
"Invitation Salon";"4";"Partner"
|
||||
"Invitation Webinar";"4";"Partner"
|
||||
"Envoi lien de téléchargement";"4";"Partner"
|
||||
"Invitation Salon";"4";"Lead"
|
||||
"Invitation Webinar";"4";"Lead"
|
||||
"Envoi lien de téléchargement";"4";"Lead"
|
||||
|
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<csv-inputs xmlns="http://axelor.com/xml/ns/data-import"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/data-import http://axelor.com/xml/ns/data-import/data-import_5.2.xsd">
|
||||
|
||||
<input file="marketing_targetList.csv" separator=";" type="com.axelor.apps.marketing.db.TargetList" search="self.importId = :importId"/>
|
||||
|
||||
<input file="message_template.csv" separator=";" type="com.axelor.apps.message.db.Template"/>
|
||||
|
||||
<input file="marketing_campaignType.csv" separator=";" type="com.axelor.apps.marketing.db.CampaignType" search="self.importId = :importId"/>
|
||||
|
||||
<input file="marketing_campaign.csv" separator=";" type="com.axelor.apps.marketing.db.Campaign" search="self.importId = :importId"/>
|
||||
|
||||
</csv-inputs>
|
||||
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<domain-models xmlns="http://axelor.com/xml/ns/domain-models" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
|
||||
|
||||
<module name="base" package="com.axelor.apps.base.db"/>
|
||||
|
||||
<entity name="AppMarketing" lang="java" cacheable="true" extends="App" />
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
|
||||
|
||||
<module name="marketing" package="com.axelor.apps.marketing.db"/>
|
||||
|
||||
<entity name="Campaign" lang="java" sequential="true">
|
||||
|
||||
<string name="name" title="Name" required="true"/>
|
||||
<integer name="stageSelect" title="Stage" selection="campaign.stage.select"/>
|
||||
<many-to-many name="targetModelSet" ref="com.axelor.apps.marketing.db.TargetList" title="Target Model" />
|
||||
<many-to-one name="partnerTemplate" ref="com.axelor.apps.message.db.Template" title="Contact/Partners template" />
|
||||
<many-to-one name="leadTemplate" ref="com.axelor.apps.message.db.Template" title="Leads template" />
|
||||
<many-to-one name="emailLog" ref="com.axelor.meta.db.MetaFile" title="Email sending log" />
|
||||
<many-to-one name="campaignType" ref="CampaignType" title="Campaign Type" />
|
||||
<boolean name="emailing" title="Emailing" />
|
||||
<boolean name="manageAnEventPerTarget" title="Manage an event per target" />
|
||||
<boolean name="manageAttendees" title="Manage attendees" />
|
||||
<boolean name="generateEventPerPartnerOrLead" title="Generate event to the team and salesman in charge of the partner/leads" />
|
||||
<many-to-many name="leads" ref="com.axelor.apps.crm.db.Lead" title="Leads" />
|
||||
<many-to-many name="partners" ref="com.axelor.apps.base.db.Partner" title="Partners" />
|
||||
<many-to-one name="eventUser" ref="com.axelor.auth.db.User" title="Assigned to"/>
|
||||
<many-to-one name="team" ref="com.axelor.team.db.Team" title="Team"/>
|
||||
<many-to-one name="emailAccount" ref="com.axelor.apps.message.db.EmailAccount" title="Email Account"/>
|
||||
<string name="subject" title="Subject"/>
|
||||
<integer name="eventTypeSelect" title="Event type" selection="icalendar.event.type.select"/>
|
||||
<datetime name="eventStartDateTime" title="Start date time"/>
|
||||
<long name="duration" title="Duration"/>
|
||||
<many-to-many name="partnerSet" ref="com.axelor.apps.base.db.Partner" title="Partner/Contacts Target List" />
|
||||
<many-to-many name="leadSet" ref="com.axelor.apps.crm.db.Lead" title="Leads Target List" />
|
||||
<integer name="sequence"/>
|
||||
<string name="report" />
|
||||
<datetime name="eventStartDateT" title="Event start"/>
|
||||
<datetime name="eventEndDateT" title="Event end"/>
|
||||
<many-to-many name="invitedPartnerSet" title="Partners" ref="com.axelor.apps.base.db.Partner"/>
|
||||
<many-to-many name="invitedLeadSet" title="Leads" ref="com.axelor.apps.crm.db.Lead"/>
|
||||
<many-to-many name="notParticipatingPartnerSet" title="Partners" ref="com.axelor.apps.base.db.Partner"/>
|
||||
<many-to-many name="notParticipatingLeadSet" title="Leads" ref="com.axelor.apps.crm.db.Lead"/>
|
||||
<many-to-many name="presentPartnerSet" title="Partners" ref="com.axelor.apps.base.db.Partner"/>
|
||||
<many-to-many name="presentLeadSet" title="Leads" ref="com.axelor.apps.crm.db.Lead"/>
|
||||
<one-to-many name="campaignReminderList" title="Reminders" ref="com.axelor.apps.marketing.db.CampaignReminder" mappedBy="campaign"/>
|
||||
<many-to-one name="partnerReminderTemplate" ref="com.axelor.apps.message.db.Template" title="Contact/Partner reminder template"/>
|
||||
<many-to-one name="leadReminderTemplate" ref="com.axelor.apps.message.db.Template" title="Lead reminder template"/>
|
||||
<boolean name="isAllowEditingOfTargets" title="Allow the editing of the targets" default="true"/>
|
||||
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
|
||||
|
||||
<module name="marketing" package="com.axelor.apps.marketing.db"/>
|
||||
|
||||
<entity name="CampaignAttendee" lang="java" sequential="true">
|
||||
|
||||
<string name="relatedToSelect" title="Related to" selection="campaign.attendee.related.to.select"/>
|
||||
<long name="relatedToSelectId"/>
|
||||
<many-to-one name="campaign" ref="Campaign" />
|
||||
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
|
||||
|
||||
<module name="marketing" package="com.axelor.apps.marketing.db"/>
|
||||
|
||||
<entity name="CampaignReminder" lang="java">
|
||||
|
||||
<many-to-one name="campaign" title="Campaign" ref="com.axelor.apps.marketing.db.Campaign"/>
|
||||
<integer name="typeSelect" title="Type" selection="marketing.campaign.reminder.type.select" default="1"/>
|
||||
<integer name="duration" title="Duration"/>
|
||||
<integer name="durationTypeSelect" title="Duration type" selection="marketing.campaign.reminder.duration.type.select" default = "3"/>
|
||||
<integer name="assignToSelect" title="Assign to" selection="marketing.campaign.reminder.assign.to.select"/>
|
||||
<boolean name="isReminded" title="Reminded" default="false"/>
|
||||
<many-to-many name="batchSet" ref="com.axelor.apps.base.db.Batch" title="Batchs"/>
|
||||
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
|
||||
|
||||
<module name="marketing" package="com.axelor.apps.marketing.db"/>
|
||||
|
||||
<entity name="CampaignType" lang="java" sequential="true">
|
||||
|
||||
<string name="name" title="Name" required="true"/>
|
||||
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
|
||||
|
||||
<module name="crm" package="com.axelor.apps.crm.db"/>
|
||||
|
||||
<entity name="Event" lang="java">
|
||||
<many-to-one name="campaign" ref="com.axelor.apps.marketing.db.Campaign"/>
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
|
||||
|
||||
<module name="marketing" package="com.axelor.apps.marketing.db"/>
|
||||
|
||||
<entity name="TargetList" lang="java" sequential="true">
|
||||
|
||||
<string name="name" title="Name" required="true"/>
|
||||
<one-to-many name="partnerFilterList" ref="com.axelor.studio.db.Filter" title="Partner filters" />
|
||||
<integer name="partnerTypeSelect" title="Select type" selection="target.partner.type.select" />
|
||||
<many-to-many name="partnerSet" ref="com.axelor.apps.base.db.Partner" title="Additional Partner/Contacts" />
|
||||
<string name="partnerQuery" title="Partner Query" large="true"/>
|
||||
<integer name="partnerQueryTypeSelect" title="Select Query type" selection="marketing.target.list.query.type.select" default="0" />
|
||||
|
||||
<one-to-many name="leadFilterList" ref="com.axelor.studio.db.Filter" title="Lead filters" />
|
||||
<many-to-many name="leadSet" ref="com.axelor.apps.crm.db.Lead" title="Additional leads" />
|
||||
<string name="leadQuery" title="Lead Query" large="true"/>
|
||||
<integer name="leadQueryTypeSelect" title="Select Query type" selection="marketing.target.list.query.type.select" default="0" />
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
|
||||
|
||||
<module name="message" package="com.axelor.apps.message.db"/>
|
||||
|
||||
<entity name="Template" lang="java">
|
||||
|
||||
<extra-code><![CDATA[
|
||||
|
||||
// MEDIA TYPE SELECT
|
||||
public static final int MEDIA_TYPE_EMAILING = 4;
|
||||
|
||||
]]></extra-code>
|
||||
|
||||
</entity>
|
||||
|
||||
</domain-models>
|
||||
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts",,,
|
||||
"Additional leads",,,
|
||||
"Allow the editing of the targets",,,
|
||||
"An event will be generated by target, are you sure you want to continue ?",,,
|
||||
"Assign to",,,
|
||||
"Assigned to",,,
|
||||
"Attendee",,,
|
||||
"Attendees",,,
|
||||
"Batchs",,,
|
||||
"Both",,,
|
||||
"Campaign",,,
|
||||
"Campaign Type",,,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type",,,
|
||||
"Campaign types",,,
|
||||
"Campaigns",,,
|
||||
"Cancel",,,
|
||||
"Clear Selection",,,
|
||||
"Configuration",,,
|
||||
"Contact",,,
|
||||
"Contact/Partner reminder template",,,
|
||||
"Contact/Partners template",,,
|
||||
"Days",,,
|
||||
"Draft",,,
|
||||
"Duration",,,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account",,,
|
||||
"Email sending log",,,
|
||||
"Emailing",,,
|
||||
"Emailing report",,,
|
||||
"Emails sent successfully",,,
|
||||
"End",,,
|
||||
"Ended",,,
|
||||
"Enrolled",,,
|
||||
"Error in sending an email to the following targets",,,
|
||||
"Error in sending emails. Please check the log file generated.",,,
|
||||
"Event Type",,,
|
||||
"Event end",,,
|
||||
"Event start",,,
|
||||
"Event type",,,
|
||||
"Events",,,
|
||||
"Fiscal position",,,
|
||||
"Generate Events",,,
|
||||
"Generate Targets",,,
|
||||
"Generate event to the team and salesman in charge of the partner/leads",,,
|
||||
"Generated emails",,,
|
||||
"Guided",,,
|
||||
"Hours",,,
|
||||
"Informations",,,
|
||||
"Invite all targets",,,
|
||||
"Invite selected targets",,,
|
||||
"Invited",,,
|
||||
"Launch emailing",,,
|
||||
"Lead",,,
|
||||
"Lead Query",,,
|
||||
"Lead filters",,,
|
||||
"Lead reminder template",,,
|
||||
"Leads",,,
|
||||
"Leads Target List",,,
|
||||
"Leads template",,,
|
||||
"Manage an event per target",,,
|
||||
"Manage attendees",,,
|
||||
"Manual",,,
|
||||
"Marketing",,,
|
||||
"Marketing Campaigns",,,
|
||||
"Minutes",,,
|
||||
"Name",,,
|
||||
"Not participating",,,
|
||||
"Open filtered leads",,,
|
||||
"Open filtered partners",,,
|
||||
"Open planned events",,,
|
||||
"Participate",,,
|
||||
"Partner",,,
|
||||
"Partner Query",,,
|
||||
"Partner filters",,,
|
||||
"Partner/Contacts Target List",,,
|
||||
"Partners",,,
|
||||
"Past events",,,
|
||||
"Plan",,,
|
||||
"Planned",,,
|
||||
"Planned events",,,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template",,,
|
||||
"Please select target",,,
|
||||
"Presence",,,
|
||||
"Present at the event",,,
|
||||
"Related to",,,
|
||||
"Related to select",,,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report",,,
|
||||
"Results",,,
|
||||
"Select Query type",,,
|
||||
"Select target field",,,
|
||||
"Select type",,,
|
||||
"Send a reminder",,,
|
||||
"Sequence",,,
|
||||
"Stage",,,
|
||||
"Start",,,
|
||||
"Start date time",,,
|
||||
"Started",,,
|
||||
"Subject",,,
|
||||
"Suspend",,,
|
||||
"Suspended",,,
|
||||
"Target List",,,
|
||||
"Target Model",,,
|
||||
"Target list",,,
|
||||
"Target lists",,,
|
||||
"Targets",,,
|
||||
"Targets to contact",,,
|
||||
"Team",,,
|
||||
"Template",,,
|
||||
"Tools",,,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management",,,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts","Zusätzliche Partner/Kontakte",,
|
||||
"Additional leads","Zusätzliche Leitungen",,
|
||||
"Allow the editing of the targets",,,
|
||||
"An event will be generated by target, are you sure you want to continue ?","Ein Event wird vom Ziel generiert, sind Sie sicher, dass Sie fortfahren wollen?",,
|
||||
"Assign to",,,
|
||||
"Assigned to","Zugeordnet zu",,
|
||||
"Attendee","Teilnehmer",,
|
||||
"Attendees","Teilnehmer",,
|
||||
"Batchs",,,
|
||||
"Both","Beide",,
|
||||
"Campaign","Kampagne",,
|
||||
"Campaign Type","Kampagnenart",,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type","Kampagnenart",,
|
||||
"Campaign types","Kampagnenarten",,
|
||||
"Campaigns","Kampagnen",,
|
||||
"Cancel","Abbrechen",,
|
||||
"Clear Selection",,,
|
||||
"Configuration","Konfiguration",,
|
||||
"Contact","Kontakt",,
|
||||
"Contact/Partner reminder template",,,
|
||||
"Contact/Partners template","Kontakt/Partner Vorlage",,
|
||||
"Days",,,
|
||||
"Draft","Entwurf",,
|
||||
"Duration","Dauer",,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account","E-Mail-Konto",,
|
||||
"Email sending log","E-Mail-Sendeprotokoll",,
|
||||
"Emailing","Emailing",,
|
||||
"Emailing report","E-Mail-Bericht",,
|
||||
"Emails sent successfully","E-Mails erfolgreich versendet",,
|
||||
"End","Ende",,
|
||||
"Ended","Beendet",,
|
||||
"Enrolled",,,
|
||||
"Error in sending an email to the following targets","Fehler beim Senden einer E-Mail an folgende Ziele",,
|
||||
"Error in sending emails. Please check the log file generated.","Fehler beim Senden von E-Mails. Bitte überprüfen Sie die erzeugte Protokolldatei.",,
|
||||
"Event Type","Ereignistyp",,
|
||||
"Event end",,,
|
||||
"Event start",,,
|
||||
"Event type","Ereignistyp",,
|
||||
"Events","Events",,
|
||||
"Fiscal position",,,
|
||||
"Generate Events","Ereignisse generieren",,
|
||||
"Generate Targets","Ziele generieren",,
|
||||
"Generate event to the team and salesman in charge of the partner/leads","Generierung von Events für das Team und den Verkäufer, der für die Partner/Leads verantwortlich ist.",,
|
||||
"Generated emails",,,
|
||||
"Guided","Geführt",,
|
||||
"Hours",,,
|
||||
"Informations","Informationen",,
|
||||
"Invite all targets",,,
|
||||
"Invite selected targets",,,
|
||||
"Invited",,,
|
||||
"Launch emailing","Starten Sie das E-Mailing",,
|
||||
"Lead","Leitung",,
|
||||
"Lead Query","Lead-Abfrage",,
|
||||
"Lead filters","Leitungsfilter",,
|
||||
"Lead reminder template",,,
|
||||
"Leads","Leads",,
|
||||
"Leads Target List","Führt die Zielliste an",,
|
||||
"Leads template","Leads-Vorlage",,
|
||||
"Manage an event per target","Verwalten eines Events pro Ziel",,
|
||||
"Manage attendees","Teilnehmer verwalten",,
|
||||
"Manual","Handbuch",,
|
||||
"Marketing","Marketing",,
|
||||
"Marketing Campaigns","Marketingkampagnen",,
|
||||
"Minutes",,,
|
||||
"Name","Name",,
|
||||
"Not participating",,,
|
||||
"Open filtered leads","Offene gefilterte Leitungen",,
|
||||
"Open filtered partners","Offene gefilterte Partner",,
|
||||
"Open planned events","Offene geplante Veranstaltungen",,
|
||||
"Participate",,,
|
||||
"Partner","Partner",,
|
||||
"Partner Query","Partnerabfrage",,
|
||||
"Partner filters","Partnerfilter",,
|
||||
"Partner/Contacts Target List","Partner/Kontakte Zielliste",,
|
||||
"Partners","Partner",,
|
||||
"Past events","Vergangene Ereignisse",,
|
||||
"Plan","Planen",,
|
||||
"Planned","Geplant",,
|
||||
"Planned events","Geplante Ereignisse",,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template","Bitte wählen Sie mindestens eine Vorlage aus",,
|
||||
"Please select target","Bitte wählen Sie ein Ziel",,
|
||||
"Presence",,,
|
||||
"Present at the event",,,
|
||||
"Related to","In Bezug auf",,
|
||||
"Related to select","Bezogen auf die Auswahl",,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report","Bericht",,
|
||||
"Results","Ergebnisse",,
|
||||
"Select Query type","Wählen Sie den Abfragetyp",,
|
||||
"Select target field",,,
|
||||
"Select type","Wählen Sie den Typ",,
|
||||
"Send a reminder",,,
|
||||
"Sequence","Sequenz",,
|
||||
"Stage","Stufe",,
|
||||
"Start","Start",,
|
||||
"Start date time","Startdatum Uhrzeit",,
|
||||
"Started","Gestartet",,
|
||||
"Subject","Betreff",,
|
||||
"Suspend","Suspendieren",,
|
||||
"Suspended","Suspendiert",,
|
||||
"Target List","Zielliste",,
|
||||
"Target Model","Zielmodell",,
|
||||
"Target list","Zielliste",,
|
||||
"Target lists","Ziellisten",,
|
||||
"Targets","Ziele",,
|
||||
"Targets to contact","Ziele der Kontaktaufnahme",,
|
||||
"Team","Team",,
|
||||
"Template","Vorlage",,
|
||||
"Tools","Werkzeuge",,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management","Wert: Marketing Management",,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts",,,
|
||||
"Additional leads",,,
|
||||
"Allow the editing of the targets",,,
|
||||
"An event will be generated by target, are you sure you want to continue ?",,,
|
||||
"Assign to",,,
|
||||
"Assigned to",,,
|
||||
"Attendee",,,
|
||||
"Attendees",,,
|
||||
"Batchs",,,
|
||||
"Both",,,
|
||||
"Campaign",,,
|
||||
"Campaign Type",,,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type",,,
|
||||
"Campaign types",,,
|
||||
"Campaigns",,,
|
||||
"Cancel",,,
|
||||
"Clear Selection",,,
|
||||
"Configuration",,,
|
||||
"Contact",,,
|
||||
"Contact/Partner reminder template",,,
|
||||
"Contact/Partners template",,,
|
||||
"Days",,,
|
||||
"Draft",,,
|
||||
"Duration",,,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account",,,
|
||||
"Email sending log",,,
|
||||
"Emailing",,,
|
||||
"Emailing report",,,
|
||||
"Emails sent successfully",,,
|
||||
"End",,,
|
||||
"Ended",,,
|
||||
"Enrolled",,,
|
||||
"Error in sending an email to the following targets",,,
|
||||
"Error in sending emails. Please check the log file generated.",,,
|
||||
"Event Type",,,
|
||||
"Event end",,,
|
||||
"Event start",,,
|
||||
"Event type",,,
|
||||
"Events",,,
|
||||
"Fiscal position",,,
|
||||
"Generate Events",,,
|
||||
"Generate Targets",,,
|
||||
"Generate event to the team and salesman in charge of the partner/leads",,,
|
||||
"Generated emails",,,
|
||||
"Guided",,,
|
||||
"Hours",,,
|
||||
"Informations",,,
|
||||
"Invite all targets",,,
|
||||
"Invite selected targets",,,
|
||||
"Invited",,,
|
||||
"Launch emailing",,,
|
||||
"Lead",,,
|
||||
"Lead Query",,,
|
||||
"Lead filters",,,
|
||||
"Lead reminder template",,,
|
||||
"Leads",,,
|
||||
"Leads Target List",,,
|
||||
"Leads template",,,
|
||||
"Manage an event per target",,,
|
||||
"Manage attendees",,,
|
||||
"Manual",,,
|
||||
"Marketing",,,
|
||||
"Marketing Campaigns",,,
|
||||
"Minutes",,,
|
||||
"Name",,,
|
||||
"Not participating",,,
|
||||
"Open filtered leads",,,
|
||||
"Open filtered partners",,,
|
||||
"Open planned events",,,
|
||||
"Participate",,,
|
||||
"Partner",,,
|
||||
"Partner Query",,,
|
||||
"Partner filters",,,
|
||||
"Partner/Contacts Target List",,,
|
||||
"Partners",,,
|
||||
"Past events",,,
|
||||
"Plan",,,
|
||||
"Planned",,,
|
||||
"Planned events",,,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template",,,
|
||||
"Please select target",,,
|
||||
"Presence",,,
|
||||
"Present at the event",,,
|
||||
"Related to",,,
|
||||
"Related to select",,,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report",,,
|
||||
"Results",,,
|
||||
"Select Query type",,,
|
||||
"Select target field",,,
|
||||
"Select type",,,
|
||||
"Send a reminder",,,
|
||||
"Sequence",,,
|
||||
"Stage",,,
|
||||
"Start",,,
|
||||
"Start date time",,,
|
||||
"Started",,,
|
||||
"Subject",,,
|
||||
"Suspend",,,
|
||||
"Suspended",,,
|
||||
"Target List",,,
|
||||
"Target Model",,,
|
||||
"Target list",,,
|
||||
"Target lists",,,
|
||||
"Targets",,,
|
||||
"Targets to contact",,,
|
||||
"Team",,,
|
||||
"Template",,,
|
||||
"Tools",,,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management",,,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts","Interlocutores/contactos adicionales",,
|
||||
"Additional leads","Cables adicionales",,
|
||||
"Allow the editing of the targets",,,
|
||||
"An event will be generated by target, are you sure you want to continue ?","Un evento será generado por el objetivo, ¿estás seguro de que quieres continuar?",,
|
||||
"Assign to",,,
|
||||
"Assigned to","Asignado a",,
|
||||
"Attendee","Asistente",,
|
||||
"Attendees","Asistentes",,
|
||||
"Batchs",,,
|
||||
"Both","Ambos",,
|
||||
"Campaign","Campaña",,
|
||||
"Campaign Type","Tipo de campaña",,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type","Tipo de campaña",,
|
||||
"Campaign types","Tipos de campañas",,
|
||||
"Campaigns","Campañas",,
|
||||
"Cancel","Cancelar",,
|
||||
"Clear Selection",,,
|
||||
"Configuration","Configuración",,
|
||||
"Contact","Contacto",,
|
||||
"Contact/Partner reminder template",,,
|
||||
"Contact/Partners template","Plantilla de contacto/socios",,
|
||||
"Days",,,
|
||||
"Draft","Proyecto de",,
|
||||
"Duration","Duración",,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account","Cuenta de correo",,
|
||||
"Email sending log","Registro de envío de correo electrónico",,
|
||||
"Emailing","Envío de correo electrónico",,
|
||||
"Emailing report","Envío del informe por correo electrónico",,
|
||||
"Emails sent successfully","Emails enviados con éxito",,
|
||||
"End","Fin",,
|
||||
"Ended","Terminado",,
|
||||
"Enrolled",,,
|
||||
"Error in sending an email to the following targets","Error al enviar un correo electrónico a los siguientes destinatarios",,
|
||||
"Error in sending emails. Please check the log file generated.","Error en el envío de correos electrónicos. Por favor, compruebe el archivo de registro generado.",,
|
||||
"Event Type","Tipo de Evento",,
|
||||
"Event end",,,
|
||||
"Event start",,,
|
||||
"Event type","Tipo de evento",,
|
||||
"Events","Eventos",,
|
||||
"Fiscal position",,,
|
||||
"Generate Events","Generar eventos",,
|
||||
"Generate Targets","Generar objetivos",,
|
||||
"Generate event to the team and salesman in charge of the partner/leads","Generar un evento para el equipo y el vendedor a cargo del socio/director.",,
|
||||
"Generated emails",,,
|
||||
"Guided","Guiado",,
|
||||
"Hours",,,
|
||||
"Informations","Informaciones",,
|
||||
"Invite all targets",,,
|
||||
"Invite selected targets",,,
|
||||
"Invited",,,
|
||||
"Launch emailing","Iniciar el envío de correo electrónico",,
|
||||
"Lead","Plomo",,
|
||||
"Lead Query","Consulta de clientes potenciales",,
|
||||
"Lead filters","Filtros de plomo",,
|
||||
"Lead reminder template",,,
|
||||
"Leads","Plomos",,
|
||||
"Leads Target List","Lista de clientes potenciales",,
|
||||
"Leads template","Plantilla de prospectos",,
|
||||
"Manage an event per target","Gestionar un evento por objetivo",,
|
||||
"Manage attendees","Gestionar asistentes",,
|
||||
"Manual","Manual",,
|
||||
"Marketing","Comercialización",,
|
||||
"Marketing Campaigns","Campañas de marketing",,
|
||||
"Minutes",,,
|
||||
"Name","Nombre",,
|
||||
"Not participating",,,
|
||||
"Open filtered leads","Cables filtrados abiertos",,
|
||||
"Open filtered partners","Socios filtrados abiertos",,
|
||||
"Open planned events","Eventos abiertos",,
|
||||
"Participate",,,
|
||||
"Partner","Socio",,
|
||||
"Partner Query","Consulta de interlocutor",,
|
||||
"Partner filters","Filtros asociados",,
|
||||
"Partner/Contacts Target List","Lista de destinatarios de interlocutores/contactos",,
|
||||
"Partners","Socios",,
|
||||
"Past events","Eventos pasados",,
|
||||
"Plan","Planificar",,
|
||||
"Planned","Planeado",,
|
||||
"Planned events","Eventos planificados",,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template","Por favor, seleccione al menos una plantilla",,
|
||||
"Please select target","Por favor, seleccione el objetivo",,
|
||||
"Presence",,,
|
||||
"Present at the event",,,
|
||||
"Related to","Relacionado con",,
|
||||
"Related to select","Relacionado a select",,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report","Informe",,
|
||||
"Results","Resultados",,
|
||||
"Select Query type","Seleccione el tipo de consulta",,
|
||||
"Select target field",,,
|
||||
"Select type","Seleccione tipo",,
|
||||
"Send a reminder",,,
|
||||
"Sequence","Secuencia",,
|
||||
"Stage","Etapa",,
|
||||
"Start","Inicio",,
|
||||
"Start date time","Fecha de inicio hora",,
|
||||
"Started","Iniciado",,
|
||||
"Subject","Tema",,
|
||||
"Suspend","Suspender",,
|
||||
"Suspended","Suspendido",,
|
||||
"Target List","Lista de objetivos",,
|
||||
"Target Model","Modelo objetivo",,
|
||||
"Target list","Lista de objetivos",,
|
||||
"Target lists","Listas de objetivos",,
|
||||
"Targets","Objetivos",,
|
||||
"Targets to contact","Objetivos a contactar",,
|
||||
"Team","Equipo",,
|
||||
"Template","Plantilla",,
|
||||
"Tools","Herramientas",,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management","value:Gestión de marketing",,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts","Tiers/Contacts supplémentaires",,
|
||||
"Additional leads","Pistes supplémentaires",,
|
||||
"Allow the editing of the targets","Autoriser la modification des cibles",,
|
||||
"An event will be generated by target, are you sure you want to continue ?","Un évènement va être généré par cible, êtes-vous sûr de vouloir poursuivre ?",,
|
||||
"Assign to",,,
|
||||
"Assigned to","Assigné à",,
|
||||
"Attendee","Participant",,
|
||||
"Attendees","Participants",,
|
||||
"Batchs",,,
|
||||
"Both","Les deux",,
|
||||
"Campaign","Campagne",,
|
||||
"Campaign Type","Type de campagne",,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type","Type de campagne",,
|
||||
"Campaign types","Types de campagnes",,
|
||||
"Campaigns","Campagnes",,
|
||||
"Cancel","Annuler",,
|
||||
"Clear Selection","Effacer la sélection",,
|
||||
"Configuration",,,
|
||||
"Contact","Contact",,
|
||||
"Contact/Partner reminder template","Modèle de relance client",,
|
||||
"Contact/Partners template","Modèle Contact/Tiers",,
|
||||
"Days",,,
|
||||
"Draft","Brouillon",,
|
||||
"Duration","Durée",,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account","Compte email",,
|
||||
"Email sending log","Journal d'envoi d'email",,
|
||||
"Emailing",,,
|
||||
"Emailing report","Rapport d'e-mailing",,
|
||||
"Emails sent successfully","Emails envoyés avec succès",,
|
||||
"End","Terminer",,
|
||||
"Ended","Terminé",,
|
||||
"Enrolled","Inscrits",,
|
||||
"Error in sending an email to the following targets","Erreur lors de l'envoi d'un email aux cibles suivantes",,
|
||||
"Error in sending emails. Please check the log file generated.","Erreur lors de l'envoi d'emails. Vérifiez s'il vous plaît le journal généré.",,
|
||||
"Event Type","Type d'évènement",,
|
||||
"Event end","Date de fin",,
|
||||
"Event start","Début de début",,
|
||||
"Event type","Type d'évènement",,
|
||||
"Events","Évènements",,
|
||||
"Fiscal position",,,
|
||||
"Generate Events","Générer événements",,
|
||||
"Generate Targets","Générer cibles",,
|
||||
"Generate event to the team and salesman in charge of the partner/leads","Générer l'événement pour l'équipe et le commercial en charge du tiers ou de la piste",,
|
||||
"Generated emails",,,
|
||||
"Guided","Guidé",,
|
||||
"Hours",,,
|
||||
"Informations",,,
|
||||
"Invite all targets","Inviter toutes les cibles",,
|
||||
"Invite selected targets","Inviter les cibles sélectionnées",,
|
||||
"Invited","Invités",,
|
||||
"Launch emailing","Lancer l'emailing",,
|
||||
"Lead","Piste",,
|
||||
"Lead Query",,,
|
||||
"Lead filters","Filtres sur les pistes",,
|
||||
"Lead reminder template","Modèle de relance piste",,
|
||||
"Leads","Pistes",,
|
||||
"Leads Target List","Liste cible des pistes",,
|
||||
"Leads template","Modèle Pistes",,
|
||||
"Manage an event per target","Gérer un évènement par cible",,
|
||||
"Manage attendees","Gérer les participants",,
|
||||
"Manual",,,
|
||||
"Marketing","Marketing",,
|
||||
"Marketing Campaigns","Campagnes marketing",,
|
||||
"Minutes",,,
|
||||
"Name","Nom",,
|
||||
"Not participating","Ne participe pas",,
|
||||
"Open filtered leads","Ouvrir pistes filtrées",,
|
||||
"Open filtered partners","Ouvrir tiers filtrés",,
|
||||
"Open planned events","Ouvrir les événements planifiés",,
|
||||
"Participate","Participe",,
|
||||
"Partner","Tiers",,
|
||||
"Partner Query",,,
|
||||
"Partner filters","Filtres sur les tiers",,
|
||||
"Partner/Contacts Target List","Liste cible des Tiers/Contacts",,
|
||||
"Partners","Tiers",,
|
||||
"Past events","Evénements passés",,
|
||||
"Plan","Planifier",,
|
||||
"Planned","Planifié",,
|
||||
"Planned events","Evénements programmés",,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template",,,
|
||||
"Please select target","Sélectionnez une cible",,
|
||||
"Presence","Présence",,
|
||||
"Present at the event","Présent à l'événement",,
|
||||
"Related to",,,
|
||||
"Related to select",,,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report","Rapport",,
|
||||
"Results","Résultats",,
|
||||
"Select Query type","Type de requête",,
|
||||
"Select target field",,,
|
||||
"Select type","Sélectionnez un type",,
|
||||
"Send a reminder","Envoyer une relance",,
|
||||
"Sequence",,,
|
||||
"Stage","Etape",,
|
||||
"Start","Démarrer",,
|
||||
"Start date time","Date de début",,
|
||||
"Started","Démarré",,
|
||||
"Subject",,,
|
||||
"Suspend","Suspendre",,
|
||||
"Suspended","Suspendu",,
|
||||
"Target List","Liste des cibles",,
|
||||
"Target Model","Modèle cible",,
|
||||
"Target list","Liste des cibles",,
|
||||
"Target lists","Listes des cibles",,
|
||||
"Targets","Cibles",,
|
||||
"Targets to contact","Cibles à contacter",,
|
||||
"Team",,,
|
||||
"Template",,,
|
||||
"Tools","Outils",,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management","Marketing",,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts","Ulteriori partner/contatti",,
|
||||
"Additional leads","Cavi supplementari",,
|
||||
"Allow the editing of the targets",,,
|
||||
"An event will be generated by target, are you sure you want to continue ?","Un evento sarà generato dal bersaglio, sei sicuro di voler continuare?",,
|
||||
"Assign to",,,
|
||||
"Assigned to","Assegnato a",,
|
||||
"Attendee","Partecipante",,
|
||||
"Attendees","Partecipanti",,
|
||||
"Batchs",,,
|
||||
"Both","Entrambi",,
|
||||
"Campaign","Campagna",,
|
||||
"Campaign Type","Tipo di campagna",,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type","Tipo di campagna",,
|
||||
"Campaign types","Tipi di campagna",,
|
||||
"Campaigns","Campagne",,
|
||||
"Cancel","Annulla",,
|
||||
"Clear Selection",,,
|
||||
"Configuration","Configurazione",,
|
||||
"Contact","Contatto",,
|
||||
"Contact/Partner reminder template",,,
|
||||
"Contact/Partners template","Modello di contatto/partner",,
|
||||
"Days",,,
|
||||
"Draft","Bozza",,
|
||||
"Duration","Durata",,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account","Account e-mail",,
|
||||
"Email sending log","Log di invio e-mail",,
|
||||
"Emailing","Invio di e-mail",,
|
||||
"Emailing report","Rapporto via e-mail",,
|
||||
"Emails sent successfully","Email inviate con successo",,
|
||||
"End","Fine",,
|
||||
"Ended","Terminato",,
|
||||
"Enrolled",,,
|
||||
"Error in sending an email to the following targets","Errore nell'invio di un'e-mail ai seguenti obiettivi",,
|
||||
"Error in sending emails. Please check the log file generated.","Errore nell'invio di e-mail. Controllare il file di log generato.",,
|
||||
"Event Type","Tipo di evento",,
|
||||
"Event end",,,
|
||||
"Event start",,,
|
||||
"Event type","Tipo di evento",,
|
||||
"Events","Eventi",,
|
||||
"Fiscal position",,,
|
||||
"Generate Events","Generare eventi",,
|
||||
"Generate Targets","Generare gli obiettivi",,
|
||||
"Generate event to the team and salesman in charge of the partner/leads","Generare l'evento al team e al venditore responsabile del partner/leader",,
|
||||
"Generated emails",,,
|
||||
"Guided","Guidati",,
|
||||
"Hours",,,
|
||||
"Informations","Informazioni",,
|
||||
"Invite all targets",,,
|
||||
"Invite selected targets",,,
|
||||
"Invited",,,
|
||||
"Launch emailing","Avviare l'invio di e-mail",,
|
||||
"Lead","Piombo",,
|
||||
"Lead Query","Domanda sul piombo",,
|
||||
"Lead filters","Filtri al piombo",,
|
||||
"Lead reminder template",,,
|
||||
"Leads","Piombi",,
|
||||
"Leads Target List","Elenco degli obiettivi dei conduttori",,
|
||||
"Leads template","Modello dei conduttori",,
|
||||
"Manage an event per target","Gestire un evento per target",,
|
||||
"Manage attendees","Gestire i partecipanti",,
|
||||
"Manual","Manuale",,
|
||||
"Marketing","Marketing",,
|
||||
"Marketing Campaigns","Campagne di marketing",,
|
||||
"Minutes",,,
|
||||
"Name","Nome",,
|
||||
"Not participating",,,
|
||||
"Open filtered leads","Cavi aperti e filtrati",,
|
||||
"Open filtered partners","Partner aperti e filtrati",,
|
||||
"Open planned events","Eventi aperti in programma",,
|
||||
"Participate",,,
|
||||
"Partner","Partner",,
|
||||
"Partner Query","Domande dei partner",,
|
||||
"Partner filters","Filtri partner",,
|
||||
"Partner/Contacts Target List","Elenco degli obiettivi dei partner/contatti",,
|
||||
"Partners","Partner",,
|
||||
"Past events","Eventi passati",,
|
||||
"Plan","Piano",,
|
||||
"Planned","Pianificato",,
|
||||
"Planned events","Eventi pianificati",,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template","Selezionare almeno un modello",,
|
||||
"Please select target","Selezionare il target",,
|
||||
"Presence",,,
|
||||
"Present at the event",,,
|
||||
"Related to","Relativo a",,
|
||||
"Related to select","Relativo alla selezione",,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report","Segnala",,
|
||||
"Results","Risultati",,
|
||||
"Select Query type","Selezionare il tipo di domanda",,
|
||||
"Select target field",,,
|
||||
"Select type","Selezionare il tipo",,
|
||||
"Send a reminder",,,
|
||||
"Sequence","Sequenza",,
|
||||
"Stage","Fase",,
|
||||
"Start","Inizio",,
|
||||
"Start date time","Data d'inizio",,
|
||||
"Started","Iniziato",,
|
||||
"Subject","Oggetto",,
|
||||
"Suspend","Sospensione",,
|
||||
"Suspended","Sospeso",,
|
||||
"Target List","Elenco degli obiettivi",,
|
||||
"Target Model","Modello target",,
|
||||
"Target list","Elenco degli obiettivi",,
|
||||
"Target lists","Liste di destinazione",,
|
||||
"Targets","Obiettivi",,
|
||||
"Targets to contact","Obiettivi da contattare",,
|
||||
"Team","Squadra",,
|
||||
"Template","Modello",,
|
||||
"Tools","Strumenti",,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management","valore:Marketing Management",,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts","Extra partner/contactpersonen",,
|
||||
"Additional leads","Extra afleidingen",,
|
||||
"Allow the editing of the targets",,,
|
||||
"An event will be generated by target, are you sure you want to continue ?","Een evenement wordt gegenereerd door het doelwit, weet u zeker dat u wilt doorgaan?",,
|
||||
"Assign to",,,
|
||||
"Assigned to","Toegewezen aan",,
|
||||
"Attendee","Deelnemer",,
|
||||
"Attendees","Deelnemers",,
|
||||
"Batchs",,,
|
||||
"Both","Beide",,
|
||||
"Campaign","Campagne",,
|
||||
"Campaign Type","Type campagne",,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type","Type campagne",,
|
||||
"Campaign types","Soorten campagnes",,
|
||||
"Campaigns","Campagnes",,
|
||||
"Cancel","Annuleren",,
|
||||
"Clear Selection",,,
|
||||
"Configuration","Configuratie",,
|
||||
"Contact","Contact",,
|
||||
"Contact/Partner reminder template",,,
|
||||
"Contact/Partners template","Contact/Partners sjabloon",,
|
||||
"Days",,,
|
||||
"Draft","Ontwerp",,
|
||||
"Duration","Duur",,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account","E-mailaccount",,
|
||||
"Email sending log","Logboek voor het verzenden van e-mail",,
|
||||
"Emailing","E-mailen",,
|
||||
"Emailing report","Rapport per e-mail",,
|
||||
"Emails sent successfully","E-mails succesvol verzonden",,
|
||||
"End","Einde",,
|
||||
"Ended","Einde",,
|
||||
"Enrolled",,,
|
||||
"Error in sending an email to the following targets","Fout in het verzenden van een e-mail naar de volgende doelen",,
|
||||
"Error in sending emails. Please check the log file generated.","Fout in het verzenden van e-mails. Controleer het gegenereerde logbestand.",,
|
||||
"Event Type","Type evenement",,
|
||||
"Event end",,,
|
||||
"Event start",,,
|
||||
"Event type","Soort evenement",,
|
||||
"Events","Evenementen",,
|
||||
"Fiscal position",,,
|
||||
"Generate Events","Evenementen genereren",,
|
||||
"Generate Targets","Genereer doelen",,
|
||||
"Generate event to the team and salesman in charge of the partner/leads","Genereer een evenement voor het team en de verkoper die verantwoordelijk is voor de partner/leiders",,
|
||||
"Generated emails",,,
|
||||
"Guided","Begeleid",,
|
||||
"Hours",,,
|
||||
"Informations","Informatie",,
|
||||
"Invite all targets",,,
|
||||
"Invite selected targets",,,
|
||||
"Invited",,,
|
||||
"Launch emailing","Lancering e-mailen",,
|
||||
"Lead","Lood",,
|
||||
"Lead Query","Lood zoeken",,
|
||||
"Lead filters","Loodfilters",,
|
||||
"Lead reminder template",,,
|
||||
"Leads","Leads",,
|
||||
"Leads Target List","Leads Doellijst",,
|
||||
"Leads template","Leads sjabloon",,
|
||||
"Manage an event per target","Beheer een evenement per doelwit",,
|
||||
"Manage attendees","Beheer deelnemers",,
|
||||
"Manual","Handleiding",,
|
||||
"Marketing","Marketing",,
|
||||
"Marketing Campaigns","Marketing campagnes",,
|
||||
"Minutes",,,
|
||||
"Name","Naam",,
|
||||
"Not participating",,,
|
||||
"Open filtered leads","Open gefilterde afleidingen",,
|
||||
"Open filtered partners","Open gefilterde partners",,
|
||||
"Open planned events","Open geplande evenementen",,
|
||||
"Participate",,,
|
||||
"Partner","Partner",,
|
||||
"Partner Query","Partner zoeken",,
|
||||
"Partner filters","Partner filters",,
|
||||
"Partner/Contacts Target List","Partner/Contactpersonen Doellijst",,
|
||||
"Partners","Partners",,
|
||||
"Past events","Gebeurtenissen uit het verleden",,
|
||||
"Plan","Plan",,
|
||||
"Planned","Gepland",,
|
||||
"Planned events","Geplande evenementen",,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template","Selecteer ten minste één sjabloon",,
|
||||
"Please select target","Selecteer doel",,
|
||||
"Presence",,,
|
||||
"Present at the event",,,
|
||||
"Related to","Met betrekking tot",,
|
||||
"Related to select","Gerelateerd aan de selectie",,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report","Verslag",,
|
||||
"Results","Resultaten",,
|
||||
"Select Query type","Selecteer Type zoekopdracht",,
|
||||
"Select target field",,,
|
||||
"Select type","Selecteer type",,
|
||||
"Send a reminder",,,
|
||||
"Sequence","Volgorde",,
|
||||
"Stage","Stadium",,
|
||||
"Start","Begin",,
|
||||
"Start date time","Startdatum tijd",,
|
||||
"Started","Gestart",,
|
||||
"Subject","Onderwerp",,
|
||||
"Suspend","Opschorten",,
|
||||
"Suspended","Opgeschort",,
|
||||
"Target List","Doel lijst",,
|
||||
"Target Model","Doelmodel",,
|
||||
"Target list","Doel lijst",,
|
||||
"Target lists","Doel lijsten",,
|
||||
"Targets","Doelstellingen",,
|
||||
"Targets to contact","Doelstellingen om contact op te nemen",,
|
||||
"Team","Team",,
|
||||
"Template","Sjabloon",,
|
||||
"Tools","Gereedschap",,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management","waarde: Marketing Management",,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts","Dodatkowy partner/kontakty",,
|
||||
"Additional leads","Dodatkowe wskazówki",,
|
||||
"Allow the editing of the targets","Autoriser la modification des cibles",,
|
||||
"An event will be generated by target, are you sure you want to continue ?","Zdarzenie zostanie wygenerowane przez cel, czy na pewno chcesz kontynuować ?",,
|
||||
"Assign to",,,
|
||||
"Assigned to","Przypisany do",,
|
||||
"Attendee","Uczestnik",,
|
||||
"Attendees","Uczestnicy",,
|
||||
"Batchs",,,
|
||||
"Both","obydwu.",,
|
||||
"Campaign","Kampania",,
|
||||
"Campaign Type","Typ kampanii",,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type","Typ kampanii",,
|
||||
"Campaign types","Rodzaje kampanii",,
|
||||
"Campaigns","Kampanie",,
|
||||
"Cancel","Anulowanie",,
|
||||
"Clear Selection","Effacer la sélection",,
|
||||
"Configuration","Konfiguracja",,
|
||||
"Contact","Kontakt",,
|
||||
"Contact/Partner reminder template","Modèle de relance client",,
|
||||
"Contact/Partners template","Szablon Kontakt/Partnerzy",,
|
||||
"Days",,,
|
||||
"Draft","Wstępny projekt",,
|
||||
"Duration","Czas trwania pomocy",,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account","Konto e-mail",,
|
||||
"Email sending log","Dziennik wysyłania poczty elektronicznej",,
|
||||
"Emailing","Wysyłanie pocztą elektroniczną",,
|
||||
"Emailing report","Raport pocztą elektroniczną",,
|
||||
"Emails sent successfully","Pomyślnie wysłane e-maile",,
|
||||
"End","Koniec",,
|
||||
"Ended","Zakończone",,
|
||||
"Enrolled","Inscrits",,
|
||||
"Error in sending an email to the following targets","Błąd w wysyłaniu wiadomości e-mail do następujących celów",,
|
||||
"Error in sending emails. Please check the log file generated.","Błąd w wysyłaniu wiadomości e-mail. Proszę sprawdzić wygenerowany plik dziennika.",,
|
||||
"Event Type","Typ zdarzenia",,
|
||||
"Event end","Date de fin",,
|
||||
"Event start","Début de début",,
|
||||
"Event type","Typ zdarzenia",,
|
||||
"Events","Wydarzenia",,
|
||||
"Fiscal position",,,
|
||||
"Generate Events","Generowanie zdarzeń",,
|
||||
"Generate Targets","Generowanie celów",,
|
||||
"Generate event to the team and salesman in charge of the partner/leads","Wygeneruj wydarzenie dla zespołu i handlowca odpowiedzialnego za partnerów/liderów",,
|
||||
"Generated emails",,,
|
||||
"Guided","Z wskazówkami",,
|
||||
"Hours",,,
|
||||
"Informations","Informacje",,
|
||||
"Invite all targets","Inviter toutes les cibles",,
|
||||
"Invite selected targets","Inviter les cibles sélectionnées",,
|
||||
"Invited","Invités",,
|
||||
"Launch emailing","Rozpoczęcie wysyłania wiadomości e-mail",,
|
||||
"Lead","Ołów",,
|
||||
"Lead Query","zapytanie ofertowe",,
|
||||
"Lead filters","Filtry ołowiane",,
|
||||
"Lead reminder template","Modèle de relance piste",,
|
||||
"Leads","Ołowiane",,
|
||||
"Leads Target List","Lista celów dla liderów",,
|
||||
"Leads template","Szablon ołowiu",,
|
||||
"Manage an event per target","Zarządzanie zdarzeniem dla każdego celu",,
|
||||
"Manage attendees","Zarządzaj uczestnikami",,
|
||||
"Manual","Instrukcja obsługi",,
|
||||
"Marketing","Wprowadzanie do obrotu",,
|
||||
"Marketing Campaigns","Kampanie marketingowe",,
|
||||
"Minutes",,,
|
||||
"Name","Nazwa",,
|
||||
"Not participating","Ne participe pas",,
|
||||
"Open filtered leads","Otwarte przefiltrowane przewody",,
|
||||
"Open filtered partners","Otwarci, przefiltrowani partnerzy",,
|
||||
"Open planned events","Planowane wydarzenia otwarte",,
|
||||
"Participate","Participe",,
|
||||
"Partner","Partner",,
|
||||
"Partner Query","Zapytanie od partnera",,
|
||||
"Partner filters","Filtry partnerskie",,
|
||||
"Partner/Contacts Target List","Lista docelowa partnerów/kontaktów",,
|
||||
"Partners","Partnerzy",,
|
||||
"Past events","Wydarzenia z przeszłości",,
|
||||
"Plan","Plan",,
|
||||
"Planned","Planowane",,
|
||||
"Planned events","Planowane wydarzenia",,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template","Proszę wybrać co najmniej jeden szablon",,
|
||||
"Please select target","Proszę wybrać cel.",,
|
||||
"Presence","Présence",,
|
||||
"Present at the event","Présent à l'événement",,
|
||||
"Related to","Związane z",,
|
||||
"Related to select","W odniesieniu do wyboru",,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report","Sprawozdanie",,
|
||||
"Results","Wyniki",,
|
||||
"Select Query type","Wybierz typ zapytania",,
|
||||
"Select target field",,,
|
||||
"Select type","Wybór typu",,
|
||||
"Send a reminder","Envoyer une relance",,
|
||||
"Sequence","Kolejność",,
|
||||
"Stage","Etap",,
|
||||
"Start","Start",,
|
||||
"Start date time","Godzina rozpoczęcia",,
|
||||
"Started","Rozpoczął się",,
|
||||
"Subject","Przedmiot",,
|
||||
"Suspend","Zawieszenie",,
|
||||
"Suspended","zawieszony",,
|
||||
"Target List","Lista docelowa",,
|
||||
"Target Model","Model docelowy",,
|
||||
"Target list","Lista docelowa",,
|
||||
"Target lists","Listy docelowe",,
|
||||
"Targets","Cele",,
|
||||
"Targets to contact","Cele do osiągnięcia",,
|
||||
"Team","Zespół",,
|
||||
"Template","Szablon",,
|
||||
"Tools","Narzędzia",,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management","wartość: zarządzanie marketingiem",,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts","Parceiro adicional/Contatos",,
|
||||
"Additional leads","leads adicionais",,
|
||||
"Allow the editing of the targets",,,
|
||||
"An event will be generated by target, are you sure you want to continue ?","Um evento será gerado pelo alvo, tens a certeza que queres continuar?",,
|
||||
"Assign to",,,
|
||||
"Assigned to","Atribuído a",,
|
||||
"Attendee","Participante",,
|
||||
"Attendees","Participantes",,
|
||||
"Batchs",,,
|
||||
"Both","Ambos",,
|
||||
"Campaign","Campanha",,
|
||||
"Campaign Type","Tipo de Campanha",,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type","Tipo de campanha",,
|
||||
"Campaign types","Tipos de campanhas",,
|
||||
"Campaigns","Campanhas",,
|
||||
"Cancel","Cancelar",,
|
||||
"Clear Selection",,,
|
||||
"Configuration","Configuração",,
|
||||
"Contact","Contato",,
|
||||
"Contact/Partner reminder template",,,
|
||||
"Contact/Partners template","Contato/Parceiros modelo",,
|
||||
"Days",,,
|
||||
"Draft","Rascunho",,
|
||||
"Duration","Duração",,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account","Conta de e-mail",,
|
||||
"Email sending log","Log de envio de e-mail",,
|
||||
"Emailing","Envio de e-mail",,
|
||||
"Emailing report","Relatório de e-mail",,
|
||||
"Emails sent successfully","E-mails enviados com sucesso",,
|
||||
"End","Fim",,
|
||||
"Ended","Terminado",,
|
||||
"Enrolled",,,
|
||||
"Error in sending an email to the following targets","Erro ao enviar um e-mail para os seguintes alvos",,
|
||||
"Error in sending emails. Please check the log file generated.","Erro no envio de emails. Por favor, verifique o ficheiro de registo gerado.",,
|
||||
"Event Type","Tipo de evento",,
|
||||
"Event end",,,
|
||||
"Event start",,,
|
||||
"Event type","Tipo de evento",,
|
||||
"Events","Eventos",,
|
||||
"Fiscal position",,,
|
||||
"Generate Events","Gerar eventos",,
|
||||
"Generate Targets","Gerar alvos",,
|
||||
"Generate event to the team and salesman in charge of the partner/leads","Gerar evento à equipa e ao vendedor responsável do parceiro/chefes de fila",,
|
||||
"Generated emails",,,
|
||||
"Guided","Guiado",,
|
||||
"Hours",,,
|
||||
"Informations","Informações",,
|
||||
"Invite all targets",,,
|
||||
"Invite selected targets",,,
|
||||
"Invited",,,
|
||||
"Launch emailing","Lançar e-mailing",,
|
||||
"Lead","Chumbo",,
|
||||
"Lead Query","Consulta de leads",,
|
||||
"Lead filters","Filtros de chumbo",,
|
||||
"Lead reminder template",,,
|
||||
"Leads","Leads",,
|
||||
"Leads Target List","Lidera a lista de alvos",,
|
||||
"Leads template","Modelos de Leads",,
|
||||
"Manage an event per target","Gerenciar um evento por alvo",,
|
||||
"Manage attendees","Administrar participantes",,
|
||||
"Manual","Manual de instruções",,
|
||||
"Marketing","Marketing",,
|
||||
"Marketing Campaigns","Campanhas de Marketing",,
|
||||
"Minutes",,,
|
||||
"Name","Nome e Sobrenome",,
|
||||
"Not participating",,,
|
||||
"Open filtered leads","Cabos filtrados abertos",,
|
||||
"Open filtered partners","Abrir parceiros filtrados",,
|
||||
"Open planned events","Eventos planejados abertos",,
|
||||
"Participate",,,
|
||||
"Partner","Parceiro",,
|
||||
"Partner Query","Consulta ao parceiro",,
|
||||
"Partner filters","Filtros de parceiros",,
|
||||
"Partner/Contacts Target List","Parceiro/Contatos Lista de destinatários",,
|
||||
"Partners","Parceiros",,
|
||||
"Past events","Eventos passados",,
|
||||
"Plan","Plano",,
|
||||
"Planned","Planejado",,
|
||||
"Planned events","Eventos planejados",,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template","Por favor, selecione pelo menos um modelo",,
|
||||
"Please select target","Por favor, selecione o alvo",,
|
||||
"Presence",,,
|
||||
"Present at the event",,,
|
||||
"Related to","Relacionado a",,
|
||||
"Related to select","Relacionado a selecionar",,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report","Relatório",,
|
||||
"Results","Resultados",,
|
||||
"Select Query type","Selecionar Tipo de consulta",,
|
||||
"Select target field",,,
|
||||
"Select type","Selecione o tipo",,
|
||||
"Send a reminder",,,
|
||||
"Sequence","Seqüência",,
|
||||
"Stage","Palco",,
|
||||
"Start","Início",,
|
||||
"Start date time","Hora da data de início",,
|
||||
"Started","Iniciado",,
|
||||
"Subject","Assunto",,
|
||||
"Suspend","Suspender",,
|
||||
"Suspended","Suspenso",,
|
||||
"Target List","Lista de alvos",,
|
||||
"Target Model","Modelo Alvo",,
|
||||
"Target list","Lista de alvos",,
|
||||
"Target lists","Listas de alvos",,
|
||||
"Targets","Alvos",,
|
||||
"Targets to contact","Alvos para contato",,
|
||||
"Team","Equipe",,
|
||||
"Template","Modelo",,
|
||||
"Tools","Ferramentas",,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management","value:Gestão de Marketing",,
|
||||
|
@ -0,0 +1,118 @@
|
||||
"key","message","comment","context"
|
||||
"Additional Partner/Contacts","Дополнительный партнер/контакты",,
|
||||
"Additional leads","Дополнительные зацепки",,
|
||||
"Allow the editing of the targets",,,
|
||||
"An event will be generated by target, are you sure you want to continue ?","Событие будет сгенерировано целью, вы уверены, что хотите продолжить?",,
|
||||
"Assign to",,,
|
||||
"Assigned to","Назначенный",,
|
||||
"Attendee","Посетитель",,
|
||||
"Attendees","Посетители",,
|
||||
"Batchs",,,
|
||||
"Both","Оба",,
|
||||
"Campaign","Кампания",,
|
||||
"Campaign Type","Тип кампании",,
|
||||
"Campaign reminders",,,
|
||||
"Campaign type","Тип кампании",,
|
||||
"Campaign types","Типы кампаний",,
|
||||
"Campaigns","Кампании",,
|
||||
"Cancel","Отмена",,
|
||||
"Clear Selection",,,
|
||||
"Configuration","Конфигурация",,
|
||||
"Contact","Контакт",,
|
||||
"Contact/Partner reminder template",,,
|
||||
"Contact/Partners template","Шаблон для контактов/партнеров",,
|
||||
"Days",,,
|
||||
"Draft","Проект",,
|
||||
"Duration","Продолжительность",,
|
||||
"Duration type",,,
|
||||
"Email",,,
|
||||
"Email Account","Учетная запись электронной почты",,
|
||||
"Email sending log","Журнал отправки электронной почты",,
|
||||
"Emailing","Электронная почта",,
|
||||
"Emailing report","Отчет по электронной почте",,
|
||||
"Emails sent successfully","Электронная почта успешно отправлена",,
|
||||
"End","Конец",,
|
||||
"Ended","Конец",,
|
||||
"Enrolled",,,
|
||||
"Error in sending an email to the following targets","Ошибка при отправке сообщения электронной почты следующим адресатам",,
|
||||
"Error in sending emails. Please check the log file generated.","Ошибка при отправке сообщений электронной почты. Пожалуйста, проверьте сгенерированный файл журнала.",,
|
||||
"Event Type","Тип события",,
|
||||
"Event end",,,
|
||||
"Event start",,,
|
||||
"Event type","Тип события",,
|
||||
"Events","События",,
|
||||
"Fiscal position",,,
|
||||
"Generate Events","Генерировать события",,
|
||||
"Generate Targets","Генерировать цели",,
|
||||
"Generate event to the team and salesman in charge of the partner/leads","Генерировать событие для команды и продавца, ответственного за партнера/руководителей.",,
|
||||
"Generated emails",,,
|
||||
"Guided","Направляемый",,
|
||||
"Hours",,,
|
||||
"Informations","Информация",,
|
||||
"Invite all targets",,,
|
||||
"Invite selected targets",,,
|
||||
"Invited",,,
|
||||
"Launch emailing","Запустить электронную почту",,
|
||||
"Lead","Свинец",,
|
||||
"Lead Query","Ведущий запрос",,
|
||||
"Lead filters","Свинцовые фильтры",,
|
||||
"Lead reminder template",,,
|
||||
"Leads","Зацепки",,
|
||||
"Leads Target List","Список целевых показателей Ссылки на потенциальных клиентов",,
|
||||
"Leads template","Шаблон ссылок",,
|
||||
"Manage an event per target","Управление событиями по каждой цели",,
|
||||
"Manage attendees","Управлять посетителями",,
|
||||
"Manual","Руководство",,
|
||||
"Marketing","Маркетинг",,
|
||||
"Marketing Campaigns","Маркетинговые кампании",,
|
||||
"Minutes",,,
|
||||
"Name","Имя",,
|
||||
"Not participating",,,
|
||||
"Open filtered leads","Открытые отфильтрованные провода",,
|
||||
"Open filtered partners","Открытые фильтрованные партнеры",,
|
||||
"Open planned events","Открытые запланированные мероприятия",,
|
||||
"Participate",,,
|
||||
"Partner","Партнер",,
|
||||
"Partner Query","Запрос партнера",,
|
||||
"Partner filters","Партнерские фильтры",,
|
||||
"Partner/Contacts Target List","Список целевых партнеров/контактов",,
|
||||
"Partners","Партнеры",,
|
||||
"Past events","Прошедшие события",,
|
||||
"Plan","План",,
|
||||
"Planned","Запланированный",,
|
||||
"Planned events","Запланированные мероприятия",,
|
||||
"Please add atleast one invited Partner or Lead.",,,
|
||||
"Please select at least one template","Пожалуйста, выберите по крайней мере один шаблон",,
|
||||
"Please select target","Пожалуйста, выберите цель",,
|
||||
"Presence",,,
|
||||
"Present at the event",,,
|
||||
"Related to","Связанный с",,
|
||||
"Related to select","Связанные с выбором",,
|
||||
"Reminded",,,
|
||||
"Reminders",,,
|
||||
"Report","Доклад",,
|
||||
"Results","Результаты",,
|
||||
"Select Query type","Выберите Тип запроса",,
|
||||
"Select target field",,,
|
||||
"Select type","Выберите тип",,
|
||||
"Send a reminder",,,
|
||||
"Sequence","Последовательность",,
|
||||
"Stage","Сцена",,
|
||||
"Start","Начать",,
|
||||
"Start date time","Время даты начала",,
|
||||
"Started","Начал",,
|
||||
"Subject","Предмет",,
|
||||
"Suspend","Приостановить",,
|
||||
"Suspended","Приостановлено",,
|
||||
"Target List","Целевой список",,
|
||||
"Target Model","Целевая модель",,
|
||||
"Target list","Список целей",,
|
||||
"Target lists","Списки целей",,
|
||||
"Targets","Цели",,
|
||||
"Targets to contact","Цели для контакта",,
|
||||
"Team","Команда",,
|
||||
"Template","Шаблон",,
|
||||
"Tools","Инструменты",,
|
||||
"Type",,,
|
||||
"Weeks",,,
|
||||
"value:Marketing Management","Стоимость:Управление маркетингом",,
|
||||
|
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<csv-inputs xmlns="http://axelor.com/xml/ns/data-import"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/data-import http://axelor.com/xml/ns/data-import/data-import_5.2.xsd">
|
||||
|
||||
<input file="marketing_role.csv" separator=";" type="com.axelor.auth.db.Role" search="self.name = :name"/>
|
||||
|
||||
<input file="marketing_permission.csv" separator=";" type="com.axelor.auth.db.Permission" search="self.name = :name" call="com.axelor.csv.script.ImportPermission:importPermissionToRole">
|
||||
<bind to="canRead" eval="can_read == 'x' ? 'true' : 'false'"/>
|
||||
<bind to="canWrite" eval="can_write == 'x' ? 'true' : 'false'"/>
|
||||
<bind to="canCreate" eval="can_create == 'x' ? 'true' : 'false'"/>
|
||||
<bind to="canRemove" eval="can_remove == 'x' ? 'true' : 'false'"/>
|
||||
<bind to="canExport" eval="can_export == 'x' ? 'true' : 'false'"/>
|
||||
</input>
|
||||
|
||||
<input file="marketing_metaMenu.csv" separator=";" type="com.axelor.meta.db.MetaMenu" search="self.name = :name" update="true">
|
||||
<bind column="roles" to="roles" search="self.name in :roles" eval="roles.split('\\|') as List"/>
|
||||
</input>
|
||||
|
||||
</csv-inputs>
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
"name";"roles"
|
||||
"marketing-root";"Marketing Manager|Marketing User|Marketing Read"
|
||||
"campaign-all";"Marketing Manager|Marketing User|Marketing Read"
|
||||
"target-list-all";"Marketing Manager|Marketing User|Marketing Read"
|
||||
"marketing-conf";"Marketing Manager"
|
||||
"marketing-conf-campaign-type";"Marketing Manager"
|
||||
"marketing-conf-template";"Marketing Manager"
|
||||
|
@ -0,0 +1,13 @@
|
||||
"name";"object";"can_read";"can_write";"can_create";"can_remove";"can_export";"condition";"conditionParams";"roleName"
|
||||
"perm.marketing.Campaign.r";"com.axelor.apps.marketing.db.Campaign";"x";;;;;;;"Marketing Read"
|
||||
"perm.marketing.TargetList.r";"com.axelor.apps.marketing.db.TargetList";"x";;;;;;;"Marketing Read"
|
||||
"perm.marketing.CampaignAttendee.r";"com.axelor.apps.marketing.db.CampaignAttendee";"x";;;;;;;"Marketing Read"
|
||||
"perm.marketing.CampaignType.r";"com.axelor.apps.marketing.db.CampaignType";"x";;;;;;;"Marketing Read"
|
||||
"perm.marketing.Campaign.rwc";"com.axelor.apps.marketing.db.Campaign";"x";"x";"x";;;;;"Marketing User"
|
||||
"perm.marketing.TargetList.rwc";"com.axelor.apps.marketing.db.TargetList";"x";"x";"x";;;;;"Marketing User"
|
||||
"perm.marketing.CampaignAttendee.rwc";"com.axelor.apps.marketing.db.CampaignAttendee";"x";"x";"x";;;;;"Marketing User"
|
||||
"perm.marketing.CampaignType.rwc";"com.axelor.apps.marketing.db.CampaignType";"x";"x";"x";;;;;"Marketing User"
|
||||
"perm.marketing.Campaign.rwcde";"com.axelor.apps.marketing.db.Campaign";"x";"x";"x";"x";"x";;;"Marketing Manager"
|
||||
"perm.marketing.TargetList.rwcde";"com.axelor.apps.marketing.db.TargetList";"x";"x";"x";"x";"x";;;"Marketing Manager"
|
||||
"perm.marketing.CampaignAttendee.rwcde";"com.axelor.apps.marketing.db.CampaignAttendee";"x";"x";"x";"x";"x";;;"Marketing Manager"
|
||||
"perm.marketing.CampaignType.rwcde";"com.axelor.apps.marketing.db.CampaignType";"x";"x";"x";"x";"x";;;"Marketing Manager"
|
||||
|
@ -0,0 +1,4 @@
|
||||
"name";"description"
|
||||
"Marketing Read";
|
||||
"Marketing User";
|
||||
"Marketing Manager";
|
||||
|
@ -0,0 +1,250 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<grid name="campaign-grid" title="Campaigns" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<field name="name"/>
|
||||
<field name="campaignType"/>
|
||||
<field name="stageSelect"/>
|
||||
</grid>
|
||||
|
||||
<form name="campaign-form" title="Campaign" model="com.axelor.apps.marketing.db.Campaign" width="large"
|
||||
onNew="action-campaign-attrs-on-new-on-load" onLoad="action-campaign-attrs-on-new-on-load">
|
||||
<menubar>
|
||||
<menu name="campaignToolsMenu" title="Tools" icon="fa-wrench" showTitle="true">
|
||||
<item name="launchEmailingItem" title="Launch emailing" action="save,action-campaign-validate-send-email,action-campaign-method-send-email" showIf="emailing"/>
|
||||
</menu>
|
||||
</menubar>
|
||||
<panel name="mainPanel" >
|
||||
<field name="stageSelect" widget="NavSelect" colSpan="12" showTitle="false" readonly="true"/>
|
||||
<field name="name" showTitle="false" colSpan="12">
|
||||
<viewer depends="name"><![CDATA[
|
||||
<h3>
|
||||
<span style="margin: 5px 0 !important; display: inline-table; line-height: initial;">{{record.name}}</span>
|
||||
</h3>
|
||||
]]></viewer>
|
||||
<editor>
|
||||
<field name="name" showTitle="true" />
|
||||
</editor>
|
||||
</field>
|
||||
<spacer name="nameSpacer"/>
|
||||
<panel name="informationPanel" title="Informations" colSpan="12">
|
||||
<field name="campaignType" canEdit="false" colSpan="4"/>
|
||||
<field name="eventStartDateT" colSpan="4"/>
|
||||
<field name="eventEndDateT" colSpan="4"/>
|
||||
<spacer name="campaignTypeSpacer"/>
|
||||
<field name="emailing" colSpan="4" widget="boolean-switch" />
|
||||
<field name="manageAnEventPerTarget" colSpan="4" widget="boolean-switch"/>
|
||||
<field name="manageAttendees" colSpan="4" widget="boolean-switch"/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel-tabs name="mainPanelTab">
|
||||
<panel title="Target List" name="targetListPanel">
|
||||
<field name="isAllowEditingOfTargets" colSpan="3" widget="boolean-switch" onChange="action-campaign-attrs-is-allow-editing-of-targets-on-change"/>
|
||||
<panel-related name="targetModelSetPanel" field="targetModelSet" colSpan="12"/>
|
||||
<button name="generateTargetsBtn" title="Generate Targets" onClick="save,action-campaign-generate-targets,save" colSpan="3"/>
|
||||
<button name="inviteSelectedTargetBtn" title="Invite selected targets" showIf="manageAttendees && isAllowEditingOfTargets" onClick="save,action-campaign-method-invite-selected-targets" colSpan="4"/>
|
||||
<button name="inviteAllTargetsBtn" title="Invite all targets" showIf="manageAttendees && isAllowEditingOfTargets" colSpan="4" onClick="save,action-campaign-method-invite-all-targets"/>
|
||||
<panel-related name="partnerSetPanel" field="partnerSet" colSpan="12" showIf="isAllowEditingOfTargets" grid-view="partner-campaign-grid" form-view="partner-form" canEdit="false"/>
|
||||
<panel-related name="leadSetPanel" field="leadSet" colSpan="12" showIf="isAllowEditingOfTargets" grid-view="lead-campaign-grid" form-view="lead-form" canEdit="false"/>
|
||||
</panel>
|
||||
<panel name="emailingPanel" title="Emailing" showIf="emailing" colSpan="12">
|
||||
<field name="partnerTemplate" domain="self.metaModel.name = 'Partner' AND self.mediaTypeSelect IN (4)" showIf="emailing"/>
|
||||
<field name="leadTemplate" domain="self.metaModel.name = 'Lead' AND self.mediaTypeSelect IN (4)" showIf="emailing"/>
|
||||
<field name="partnerReminderTemplate" domain="self.metaModel.name = 'Partner' AND self.mediaTypeSelect IN (4)"/>
|
||||
<field name="leadReminderTemplate" domain="self.metaModel.name = 'Lead' AND self.mediaTypeSelect IN (4)"/>
|
||||
<field name="emailAccount" showIf="emailing"/>
|
||||
<panel-dashlet name="generatedEmailsPanel" action="dashlet.generated.emails" height="350" colSpan="12"/>
|
||||
</panel>
|
||||
<panel name="eventsPanel" title="Events" showIf="manageAnEventPerTarget" colSpan="12">
|
||||
<field name="generateEventPerPartnerOrLead" widget="inline-checkbox" colSpan="12"/>
|
||||
<field name="team" onChange="action-campaign-attrs-team-value-fill" hideIf="generateEventPerPartnerOrLead" />
|
||||
<field name="eventUser" hideIf="generateEventPerPartnerOrLead" onChange="action-campaign-record-set-team" onSelect="action-campaign-attrs-eventuser-domain" />
|
||||
<field name="subject" requiredIf="manageAnEventPerTarget"/>
|
||||
<field name="eventTypeSelect" domain="self.value IN ('0','1','2','3')" placeholder="Event Type" required="true" />
|
||||
<field name="eventStartDateTime" requiredIf="manageAnEventPerTarget"/>
|
||||
<field name="duration" widget="duration" x-big="true" />
|
||||
<button name="generateEventsBtn" title="Generate Events" colSpan="3" onClick="action-campaign-alert-event-user,save,action-campaign-method-generate-events" readonlyIf="duration == 0"/>
|
||||
</panel>
|
||||
<panel name="targetsToContactPanel" title="Targets to contact" showIf="manageAnEventPerTarget">
|
||||
<button name="openPlannedEventsBtn" title="Open planned events" colSpan="3" onClick="dashlet.target.to.contact.planned"/>
|
||||
<panel-dashlet name="plannedEventsPanel" action="dashlet.target.to.contact.planned" height="350" colSpan="12"/>
|
||||
<panel-dashlet name="realiazedEventsPanel" action="dashlet.target.to.contact.realized.cancel" height="350" colSpan="12"/>
|
||||
</panel>
|
||||
<panel name="resultsPanel" title="Results">
|
||||
<field name="report" widget="html" colSpan="12" />
|
||||
<panel name="invitedPanel" title="Invited" showIf="manageAttendees" colSpan="12">
|
||||
<panel-related name="invitedLeadSetPanel" field="invitedLeadSet" colSpan="12" grid-view="lead-campaign-grid" form-view="lead-form" canNew="false" canEdit="false" canSelect="false"/>
|
||||
<panel-related name="invitedPartnerSetPanel" field="invitedPartnerSet" colSpan="12" grid-view="partner-campaign-grid" form-view="partner-form" canNew="false" canEdit="false" canSelect="false"/>
|
||||
<button name="participateBtn" title="Participate" colSpan="3" onClick="save,action-campaign-method-participate-targets"/>
|
||||
<button name="notParticipatingBtn" title="Not participating" colSpan="3" onClick="save,action-campaign-method-not-participate-targets"/>
|
||||
<button name="sendReminderEmailBtn" title="Send a reminder" colSpan="4" onClick="save,action-campaign-validate-send-reminder-email,action-campaign-method-send-reminder-email,save" showIf="emailing"/>
|
||||
</panel>
|
||||
<panel name="enrolledPanel" title="Enrolled" showIf="manageAttendees" colSpan="12">
|
||||
<panel-related name="leadsPanel" field="leads" colSpan="12" grid-view="lead-campaign-grid" form-view="lead-form" canNew="false" canEdit="false" canSelect="false"/>
|
||||
<panel-related name="partnersPanel" field="partners" colSpan="12" grid-view="partner-campaign-grid" form-view="partner-form" canNew="false" canEdit="false" canSelect="false"/>
|
||||
</panel>
|
||||
<panel name="notParticipatingPanel" title="Not participating" showIf="manageAttendees" colSpan="12">
|
||||
<panel-related name="notParticipatingLeadSetPanel" field="notParticipatingLeadSet" colSpan="12" grid-view="lead-campaign-grid" form-view="lead-form" canNew="false" canEdit="false" canSelect="false"/>
|
||||
<panel-related name="notParticipatingPartnerSetPanel" field="notParticipatingPartnerSet" colSpan="12" grid-view="partner-campaign-grid" form-view="partner-form" canNew="false" canEdit="false" canSelect="false"/>
|
||||
</panel>
|
||||
<panel name="emailingReportPanel" title="Emailing report" colSpan="12">
|
||||
<field name="emailLog" widget="binary-link" showIf="emailing"/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel-related name="campaignReminderListPanel" field="campaignReminderList" colSpan="12" showTitle="false" form-view="campaign-reminder-form" grid-view="campaign-reminder-grid"/>
|
||||
<panel name="presencePanel" title="Presence" showIf="manageAttendees && stageSelect >= 2">
|
||||
<panel-related name="presentLeadSetPanel" field="presentLeadSet" colSpan="12" grid-view="lead-campaign-grid" form-view="lead-form"/>
|
||||
<panel-related name="presentPartnerSetPanel" field="presentPartnerSet" colSpan="12" grid-view="partner-campaign-grid" form-view="partner-form"/>
|
||||
</panel>
|
||||
</panel-tabs>
|
||||
<panel name="actionsPanel" sidebar="true">
|
||||
<button name="planBtn" showIf="stageSelect == 0" title="Plan" onClick="save,action-campaign-record-plan,save,action-campaign-attrs-on-new-on-load"/>
|
||||
<button name="startBtn" showIf="stageSelect == 1 || stageSelect == 3" title="Start" onClick="save,action-campaign-record-start,save,action-campaign-attrs-on-new-on-load"/>
|
||||
<button name="suspendBtn" showIf="stageSelect == 2" title="Suspend" onClick="save,action-campaign-record-suspend,save,action-campaign-attrs-on-new-on-load"/>
|
||||
<button name="endedBtn" showIf="stageSelect == 2" title="End" onClick="save,action-campaign-record-ended,save,action-campaign-attrs-on-new-on-load"/>
|
||||
<button name="cancelBtn" showIf="stageSelect != 0" title="Cancel" onClick="save,action-campaign-record-cancel,save,action-campaign-attrs-on-new-on-load" css="btn-danger" icon="fa-times" />
|
||||
</panel>
|
||||
</form>
|
||||
|
||||
<kanban name="campaign-kanban" title="Campaign" model="com.axelor.apps.marketing.db.Campaign" columnBy="stageSelect" sequenceBy="sequence" draggable="true" limit="10">
|
||||
<field name="name"/>
|
||||
<field name="campaignType" />
|
||||
<hilite color="danger" if="stageSelect <= 1"/>
|
||||
<hilite color="warning" if="stageSelect <= 2"/>
|
||||
<hilite color="info" if="stageSelect <= 3"/>
|
||||
<hilite color="success" if="stageSelect <= 4"/>
|
||||
<template><![CDATA[
|
||||
<h4>{{name}}</h4>
|
||||
<div class="card-body">{{campaignType.name}}</div>
|
||||
]]></template>
|
||||
</kanban>
|
||||
|
||||
<action-attrs name="action-campaign-attrs-on-new-on-load">
|
||||
<attribute name="hidden" expr="eval: stageSelect < 2"
|
||||
for="invitedLeadSet.leadPresentAtEventBtn,leads.leadPresentAtEventBtn,notParticipatingLeadSet.leadPresentAtEventBtn,
|
||||
invitedPartnerSet.partnerPresentAtEventBtn,partners.partnerPresentAtEventBtn,notParticipatingPartnerSet.partnerPresentAtEventBtn"/>
|
||||
</action-attrs>
|
||||
|
||||
<action-attrs name="action-campaign-attrs-eventuser-domain">
|
||||
<attribute name="domain" if="team != null" expr = "eval: " self.activeTeam.id IN (${team.id}) "" for="eventUser"/>
|
||||
<attribute name="domain" if="team == null" expr = "eval: null" for="eventUser"/>
|
||||
</action-attrs>
|
||||
|
||||
<action-attrs name="action-campaign-attrs-team-value-fill">
|
||||
<attribute name="value" if="eval: team != null && eventUser != null && team != eventUser.activeTeam" expr="eval: null" for="eventUser"/>
|
||||
</action-attrs>
|
||||
|
||||
<action-attrs name="action-campaign-attrs-is-allow-editing-of-targets-on-change">
|
||||
<attribute name="value" for="manageAttendees" expr="eval: false" if="!isAllowEditingOfTargets"/>
|
||||
</action-attrs>
|
||||
|
||||
<action-record name="action-campaign-record-set-team" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<field name="team" expr="eval:eventUser.activeTeam" if="eventUser != null"/>
|
||||
</action-record>
|
||||
|
||||
<action-record name="action-campaign-record-plan" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<field name="stageSelect" expr="1" />
|
||||
</action-record>
|
||||
|
||||
<action-record name="action-campaign-record-start" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<field name="stageSelect" expr="2" />
|
||||
</action-record>
|
||||
|
||||
<action-record name="action-campaign-record-suspend" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<field name="stageSelect" expr="3" />
|
||||
</action-record>
|
||||
|
||||
<action-record name="action-campaign-record-ended" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<field name="stageSelect" expr="4" />
|
||||
</action-record>
|
||||
|
||||
<action-record name="action-campaign-record-cancel" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<field name="stageSelect" expr="0" />
|
||||
</action-record>
|
||||
|
||||
<action-method name="action-campaign-method-send-email">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="sendEmail"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-campaign-method-send-reminder-email">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="sendReminderEmail"/>
|
||||
</action-method>
|
||||
|
||||
<action-view name="action-lead-view-marketing-campaigns" title="Marketing Campaigns" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<view type="grid" name="campaign-grid"/>
|
||||
<view type="form" name="campaign-form"/>
|
||||
<domain>self.leadSet.id IN (:id)</domain>
|
||||
</action-view>
|
||||
|
||||
<action-view name="action-partner-view-marketing-campaigns" title="Marketing Campaigns" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<view type="grid" name="campaign-grid"/>
|
||||
<view type="form" name="campaign-form"/>
|
||||
<domain>self.partnerSet.id IN (:id)</domain>
|
||||
</action-view>
|
||||
|
||||
<action-validate name="action-campaign-alert-event-user">
|
||||
<alert message="An event will be generated by target, are you sure you want to continue ?"/>
|
||||
</action-validate>
|
||||
|
||||
<action-method name="action-campaign-method-generate-events" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="generateEvents"/>
|
||||
</action-method>
|
||||
|
||||
<action-view name="dashlet.target.to.contact.planned" title="Planned events"
|
||||
model="com.axelor.apps.crm.db.Event">
|
||||
<view type="grid" name="event-grid" />
|
||||
<view type="form" name="event-form" />
|
||||
<domain>self.campaign.id = :_id AND self.statusSelect IN (1)</domain>
|
||||
</action-view>
|
||||
|
||||
<action-view name="dashlet.target.to.contact.realized.cancel" title="Past events" model="com.axelor.apps.crm.db.Event">
|
||||
<view type="grid" name="event-grid" />
|
||||
<view type="form" name="event-form" />
|
||||
<domain>self.campaign.id = :_id AND self.statusSelect IN (2,3)</domain>
|
||||
</action-view>
|
||||
|
||||
<action-view name="dashlet.generated.emails" title="Generated emails" model="com.axelor.apps.message.db.Message">
|
||||
<view type="grid" name="message-grid"/>
|
||||
<view type="form" name="message-form"/>
|
||||
<domain>self.relatedTo1Select = 'com.axelor.apps.marketing.db.Campaign' AND self.relatedTo1SelectId = :id</domain>
|
||||
</action-view>
|
||||
|
||||
<action-method name="action-campaign-generate-targets" model="com.axelor.apps.marketing.db.Campaign">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="generateTargets"/>
|
||||
</action-method>
|
||||
|
||||
<action-validate name="action-campaign-validate-send-email">
|
||||
<error message="Please select at least one template" if="partnerTemplate == null && leadTemplate == null"/>
|
||||
</action-validate>
|
||||
|
||||
<action-validate name="action-campaign-validate-send-reminder-email">
|
||||
<error message="Please select at least one template" if="partnerReminderTemplate == null && leadReminderTemplate == null"/>
|
||||
</action-validate>
|
||||
|
||||
<action-method name="action-campaign-method-invite-selected-targets">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="inviteSelectedTargets"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-campaign-method-invite-all-targets">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="inviteAllTargets"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-campaign-method-participate-targets">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="addParticipatingTargets"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-campaign-method-not-participate-targets">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="addNotParticipatingTargets"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-campaign-method-mark-partner-present">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="markPartnerPresent"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-campaign-method-mark-lead-present">
|
||||
<call class="com.axelor.apps.marketing.web.CampaignController" method="markLeadPresent"/>
|
||||
</action-method>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<grid name="campaign-attendee-grid" title="Attendees" model="com.axelor.apps.marketing.db.CampaignAttendee">
|
||||
<field name="relatedToSelect" widget="RefSelect" x-related="relatedToSelectId"/>
|
||||
</grid>
|
||||
|
||||
<form name="campaign-attendee-form" title="Attendee" model="com.axelor.apps.marketing.db.CampaignAttendee" width="large">
|
||||
<panel name="mainPanel" >
|
||||
<field name="relatedToSelect" widget="RefSelect" x-related="relatedToSelectId"/>
|
||||
</panel>
|
||||
</form>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<grid name="campaign-reminder-grid" title="Campaign reminders" model="com.axelor.apps.marketing.db.CampaignReminder">
|
||||
<field name="typeSelect"/>
|
||||
<field name="assignToSelect"/>
|
||||
<field name="duration"/>
|
||||
<field name="durationTypeSelect"/>
|
||||
</grid>
|
||||
|
||||
<form name="campaign-reminder-form" title="Campaign reminders" model="com.axelor.apps.marketing.db.CampaignReminder"
|
||||
onNew="action-campaign-reminder-record-default">
|
||||
<panel name="mainPanel">
|
||||
<field name="typeSelect" readonly="true"/>
|
||||
<field name="assignToSelect"/>
|
||||
<field name="duration"/>
|
||||
<field name="durationTypeSelect"/>
|
||||
</panel>
|
||||
</form>
|
||||
|
||||
<action-record name="action-campaign-reminder-record-default" model="com.axelor.apps.marketing.db.CampaignReminder">
|
||||
<field name="duration" expr="1"/>
|
||||
<field name="assignToSelect" expr="1"/>
|
||||
</action-record>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<grid name="campaign-type-grid" title="Campaign type" model="com.axelor.apps.marketing.db.CampaignType">
|
||||
<field name="name" />
|
||||
</grid>
|
||||
|
||||
<form name="campaign-type-form" title="Campaign type" model="com.axelor.apps.marketing.db.CampaignType" width="large">
|
||||
<panel name="mainPanel" >
|
||||
<field name="name" />
|
||||
</panel>
|
||||
</form>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<grid name="lead-campaign-grid" title="Leads" model="com.axelor.apps.crm.db.Lead">
|
||||
<field name="name"/>
|
||||
<field name="firstName"/>
|
||||
<field name="enterpriseName"/>
|
||||
<field name="fixedPhone"/>
|
||||
<field name="emailAddress.address"/>
|
||||
<field name="contactDate"/>
|
||||
<field name="user" form-view="user-form" grid-view="user-grid"/>
|
||||
<field name="statusSelect"/>
|
||||
<button name="leadPresentAtEventBtn" title="Present at the event" icon="fa-check" onClick="action-campaign-method-mark-lead-present" hidden="true"/>
|
||||
</grid>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<menuitem name="marketing-root" order="-107" title="Marketing" icon="fa fa-bullseye" if="__config__.app.isApp('marketing')"
|
||||
icon-background="violet"/>
|
||||
|
||||
<menuitem name="targets-all" parent="marketing-root" title="Targets" action="targets.all" order="-1000"/>
|
||||
|
||||
<action-view name="targets.all" model="com.axelor.apps.marketing.db.TargetList"
|
||||
title="Targets">
|
||||
<view name="target-list-grid" type="grid" />
|
||||
<view name="target-list-form" type="form" />
|
||||
</action-view>
|
||||
|
||||
<menuitem name="campaign-all" parent="marketing-root" title="Campaigns" action="campaign.all"/>
|
||||
|
||||
<action-view name="campaign.all" model="com.axelor.apps.marketing.db.Campaign"
|
||||
title="Campaigns">
|
||||
<view name="campaign-kanban" type="kanban"/>
|
||||
<view name="campaign-grid" type="grid" />
|
||||
<view name="campaign-form" type="form" />
|
||||
</action-view>
|
||||
|
||||
<menuitem name="marketing-conf" title="Configuration" parent="marketing-root" icon="fa-cog"/>
|
||||
|
||||
<menuitem name="marketing-conf-campaign-type" parent="marketing-conf" title="Campaign types" action="marketing.conf.campaign.type"/>
|
||||
|
||||
<action-view name="marketing.conf.campaign.type" model="com.axelor.apps.marketing.db.CampaignType"
|
||||
title="Campaign types">
|
||||
<view name="campaign-type-grid" type="grid" />
|
||||
<view name="campaign-type-form" type="form" />
|
||||
</action-view>
|
||||
|
||||
<menuitem name="marketing-conf-template" parent="marketing-conf" title="Template" action="marketing.conf.template"/>
|
||||
|
||||
<action-view name="marketing.conf.template" model="com.axelor.apps.message.db.Template" title="Template">
|
||||
<view name="template-grid" type="grid" />
|
||||
<view name="template-form" type="form" />
|
||||
<domain>self.mediaTypeSelect IN (4)</domain>
|
||||
<context name="_mediaType" expr="eval:4"/>
|
||||
</action-view>
|
||||
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<grid name="partner-campaign-grid" title="Partners" model="com.axelor.apps.base.db.Partner">
|
||||
<field name="partnerSeq"/>
|
||||
<field name="simpleFullName"/>
|
||||
<field name="fixedPhone"/>
|
||||
<field name="emailAddress.address" title="Email"/>
|
||||
<field name="partnerCategory" grid-view="partner-category-grid" form-view="partner-category-form"/>
|
||||
<field name="fiscalPosition.code" title="Fiscal position"/>
|
||||
<field name="registrationCode" />
|
||||
<field name="mainAddress"/>
|
||||
<field name="companyStr" />
|
||||
<button name="partnerPresentAtEventBtn" title="Present at the event" icon="fa-check" onClick="action-campaign-method-mark-partner-present" hidden="true"/>
|
||||
</grid>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
|
||||
<selection name="campaign.stage.select">
|
||||
<option value="0">Draft</option>
|
||||
<option value="1">Planned</option>
|
||||
<option value="2">Started</option>
|
||||
<option value="3">Suspended</option>
|
||||
<option value="4">Ended</option>
|
||||
</selection>
|
||||
|
||||
<selection name="target.partner.type.select">
|
||||
<option value="0">Partner</option>
|
||||
<option value="1">Contact</option>
|
||||
<option value="2">Both</option>
|
||||
</selection>
|
||||
|
||||
<selection name="campaign.attendee.related.to.select">
|
||||
<option value="com.axelor.apps.crm.db.Lead">Lead</option>
|
||||
<option value="com.axelor.apps.base.db.Partner">Partner</option>
|
||||
</selection>
|
||||
|
||||
<selection id="marketing.template.media.type.select" name="template.media.type.select">
|
||||
<option value="4">Emailing</option>
|
||||
</selection>
|
||||
|
||||
<selection name="marketing.target.list.query.type.select">
|
||||
<option value="0">Guided</option>
|
||||
<option value="1">Manual</option>
|
||||
</selection>
|
||||
|
||||
<selection name="message.related.to.select" id="marketing.message.related.to.select">
|
||||
<option value="com.axelor.apps.marketing.db.Campaign">Campaign</option>
|
||||
</selection>
|
||||
|
||||
<selection name="marketing.campaign.reminder.type.select">
|
||||
<option value="1">Email</option>
|
||||
</selection>
|
||||
|
||||
<selection name="marketing.campaign.reminder.duration.type.select">
|
||||
<option value="1">Minutes</option>
|
||||
<option value="2">Hours</option>
|
||||
<option value="3">Days</option>
|
||||
<option value="4">Weeks</option>
|
||||
</selection>
|
||||
|
||||
<selection name="marketing.campaign.reminder.assign.to.select">
|
||||
<option value="1">Invited</option>
|
||||
<option value="2">Enrolled</option>
|
||||
</selection>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,118 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<grid name="target-list-grid" title="Target lists" model="com.axelor.apps.marketing.db.TargetList">
|
||||
<field name="name"/>
|
||||
</grid>
|
||||
|
||||
<form name="target-list-form" title="Target list" model="com.axelor.apps.marketing.db.TargetList" width="large">
|
||||
<panel name="mainPanel" >
|
||||
<field name="name" showTitle="false" colSpan="12">
|
||||
<viewer depends="name"><![CDATA[
|
||||
<h3>
|
||||
<span style="margin: 5px 0 !important; display: inline-table; line-height: initial;">{{record.name}}</span>
|
||||
</h3>
|
||||
]]></viewer>
|
||||
<editor>
|
||||
<field name="name" showTitle="true" />
|
||||
</editor>
|
||||
</field>
|
||||
</panel>
|
||||
<panel-tabs name="mainPanelTab">
|
||||
<panel name="partnersPanel" title="Partners" >
|
||||
<field name="partnerQueryTypeSelect"/>
|
||||
<field name="partnerTypeSelect" />
|
||||
<field name="partnerQuery" colSpan="12" showIf="partnerQueryTypeSelect == 1"/>
|
||||
<field name="partnerFilterList" colSpan="12" layout="table" showIf="partnerQueryTypeSelect == 0">
|
||||
<editor x-show-titles="false">
|
||||
<panel name="metaFieldPanel">
|
||||
<field name="metaField" onSelect="action-target-list-partner-filters-field-domain" colSpan="4" widget="SuggestBox" required="true" onChange="action-filter-method-update-target-field" target-name="label"/>
|
||||
<field name="targetTitle" colSpan="8" readonly="true"/>
|
||||
<field name="targetMetaField" requiredIf="targetType == 'ManyToOne' || targetType == 'ManyToMany'"
|
||||
readonlyIf="(targetMetaField != null && targetMetaField.relationship == null) || (metaTargetFieldDomain == null && $contains(targetField,'.'))"
|
||||
title="Select target field" target="com.axelor.meta.db.MetaField" type="many-to-one" showIf="metaField.relationship != null"
|
||||
onSelect="action-target-list-attrs-partner-filters-target-meta-field-domain" onChange="action-filter-method-update-target-meta-field"/>
|
||||
<button name="clearSelection" colSpan="4" title="Clear Selection" icon="fa-arrow-left" showIf="metaField.relationship != null" onClick="action-filter-method-clear-selection"/>
|
||||
<field name="targetField" hidden="true" requiredIf="metaField.relationship != null" onChange="action-filter-method-update-target-type"/>
|
||||
<field name="metaTargetFieldDomain" type="String" hidden="true"/>
|
||||
</panel>
|
||||
<panel name="opreatorAndValuePanel">
|
||||
<panel name="partnerFilterListOperatorPanel" stacked="true">
|
||||
<field name="operator" required="true" selection-in="['=','!=','isNull','notNull','like','notLike']" hidden="true" showIf="targetType == 'String'"/>
|
||||
<field name="operator" required="true" selection-in="['=','!=','>=','<=','>','<','isNull','notNull']" hidden="true" showIf="targetType == 'Integer' || targetType == 'Long' || targetType == 'BigDecimal' || targetType == 'LocalDateTime' || targetType == 'LocalDate'"/>
|
||||
<field name="operator" required="true" selection-in="['isTrue','isFalse']" hidden="true" showIf="targetType == 'Boolean'"/>
|
||||
</panel>
|
||||
<field name="value" hideIf="operator == 'isNull' || operator == 'notNull' || targetType == 'Boolean'"/>
|
||||
<field name="targetType" hidden="true" />
|
||||
<field name="metaField.relationship" hidden="true" />
|
||||
</panel>
|
||||
</editor>
|
||||
</field>
|
||||
<button name="openFilteredPartnersBtn" title="Open filtered partners" colSpan="3" onClick="save,action-target-list-method-open-filtered-partners"/>
|
||||
<spacer name="btnSpacer"/>
|
||||
<panel-related name="partnerSetPanel" field="partnerSet" colSpan="12" onSelect="action-target-list-lead-partner-set-domain"/>
|
||||
</panel>
|
||||
<panel name="leadsPanel" title="Leads" >
|
||||
<field name="leadQueryTypeSelect"/>
|
||||
<field name="leadQuery" colSpan="12" showIf="leadQueryTypeSelect == 1"/>
|
||||
<field name="leadFilterList" colSpan="12" layout="table" showIf="leadQueryTypeSelect == 0">
|
||||
<editor x-show-titles="false">
|
||||
<panel name="metaFieldPanel">
|
||||
<field name="metaField" onSelect="action-target-list-partner-filters-field-domain" colSpan="4" widget="SuggestBox" required="true" onChange="action-filter-method-update-target-field" target-name="label"/>
|
||||
<field name="targetTitle" colSpan="8" readonly="true"/>
|
||||
<field name="targetMetaField" requiredIf="targetType == 'ManyToOne' || targetType == 'ManyToMany'"
|
||||
readonlyIf="(targetMetaField != null && targetMetaField.relationship == null) || (metaTargetFieldDomain == null && $contains(targetField,'.'))"
|
||||
title="Select target field" target="com.axelor.meta.db.MetaField" type="many-to-one" showIf="metaField.relationship != null"
|
||||
onSelect="action-target-list-attrs-partner-filters-target-meta-field-domain" onChange="action-filter-method-update-target-meta-field"/>
|
||||
<button name="clearSelection" colSpan="4" title="Clear Selection" icon="fa-arrow-left" showIf="metaField.relationship != null" onClick="action-filter-method-clear-selection"/>
|
||||
<field name="targetField" hidden="true" requiredIf="metaField.relationship != null" onChange="action-filter-method-update-target-type"/>
|
||||
<field name="metaTargetFieldDomain" type="String" hidden="true"/>
|
||||
</panel>
|
||||
<panel name="opreatorAndValuePanel">
|
||||
<panel name="leadFilterListOperatorPanel" stacked="true">
|
||||
<field name="operator" required="true" selection-in="['=','!=','isNull','notNull','like','notLike']" hidden="true" showIf="targetType == 'String'"/>
|
||||
<field name="operator" required="true" selection-in="['=','!=','>=','<=','>','<','isNull','notNull']" hidden="true" showIf="targetType == 'Integer' || targetType == 'Long' || targetType == 'BigDecimal' || targetType == 'LocalDateTime' || targetType == 'LocalDate'"/>
|
||||
<field name="operator" required="true" selection-in="['isTrue','isFalse']" hidden="true" showIf="targetType == 'Boolean'"/>
|
||||
</panel>
|
||||
<field name="value" hideIf="operator == 'isNull' || operator == 'notNull' || targetType == 'Boolean'"/>
|
||||
<field name="targetType" hidden="true" />
|
||||
<field name="metaField.relationship" hidden="true" />
|
||||
</panel>
|
||||
</editor>
|
||||
</field>
|
||||
<button name="openFilteredLeadsBtn" title="Open filtered leads" colSpan="3" onClick="save,action-target-list-method-open-filtered-leads"/>
|
||||
<panel-related name="leadSetPanel" field="leadSet" colSpan="12"/>
|
||||
</panel>
|
||||
</panel-tabs>
|
||||
</form>
|
||||
|
||||
<action-attrs name="action-target-list-partner-filters-field-domain">
|
||||
<attribute for="metaField" name="domain" expr="eval:"self.metaModel.name = 'Partner' AND (self.relationship IS NULL OR self.relationship != 'OneToMany') AND self.typeName != 'byte[]'""/>
|
||||
</action-attrs>
|
||||
|
||||
<action-attrs name="action-target-list-lead-filters-field-domain">
|
||||
<attribute for="metaField" name="domain" expr="eval:"self.metaModel.name = 'Lead' AND (self.relationship IS NULL OR self.relationship != 'OneToMany') AND self.typeName != 'byte[]'""/>
|
||||
</action-attrs>
|
||||
|
||||
<action-attrs name="action-target-list-attrs-partner-filters-target-meta-field-domain">
|
||||
<attribute for="targetMetaField" name="domain" expr="eval:"self.metaModel.name = '${metaField.typeName}' AND (self.relationship IS NULL OR self.relationship != 'OneToMany') AND self.typeName != 'byte[]'"" if="metaTargetFieldDomain == null"/>
|
||||
<attribute for="targetMetaField" name="domain" expr="eval:"self.metaModel.name = '${metaTargetFieldDomain}' AND (self.relationship IS NULL OR self.relationship != 'OneToMany') AND self.typeName != 'byte[]'"" if="metaTargetFieldDomain != null"/>
|
||||
</action-attrs>
|
||||
|
||||
<action-attrs name="action-target-list-lead-partner-set-domain">
|
||||
<attribute for="partnerSet" name="domain" expr="eval:"self.isContact = false "" if="partnerTypeSelect == 0"/>
|
||||
<attribute for="partnerSet" name="domain" expr="eval:"self.isContact = true "" if="partnerTypeSelect == 1"/>
|
||||
<attribute for="partnerSet" name="domain" expr="eval:null" if="partnerTypeSelect == 2"/>
|
||||
</action-attrs>
|
||||
|
||||
<action-method name="action-target-list-method-open-filtered-leads">
|
||||
<call class="com.axelor.apps.marketing.web.TargetListController" method="openFilteredLeads"/>
|
||||
</action-method>
|
||||
|
||||
<action-method name="action-target-list-method-open-filtered-partners">
|
||||
<call class="com.axelor.apps.marketing.web.TargetListController" method="openFilteredPartners"/>
|
||||
</action-method>
|
||||
|
||||
</object-views>
|
||||
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<object-views xmlns="http://axelor.com/xml/ns/object-views"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://axelor.com/xml/ns/object-views http://axelor.com/xml/ns/object-views/object-views_5.2.xsd">
|
||||
|
||||
<action-attrs name="action-template-attrs-meta-model-domain">
|
||||
<attribute name="domain" for="metaModel" expr="eval: " self.name = 'Partner' OR self.name = 'Lead' "" if="_mediaType == 4"/>
|
||||
</action-attrs>
|
||||
|
||||
<action-attrs name="action-template-attrs-onnew-onload">
|
||||
<attribute name="hidden" for="isJson" expr="eval: _mediaType != null"/>
|
||||
</action-attrs>
|
||||
|
||||
</object-views>
|
||||
Reference in New Issue
Block a user