Compare commits

...

70 Commits
3.7.0 ... 3.7.4

Author SHA1 Message Date
yuri
0a0f8da2f4 fix auth for 5.5 2015-10-22 10:41:07 +03:00
yuri
bb5d5a0ccf text filter default search by email address 2015-10-21 17:14:57 +03:00
yuri
1bd5eac103 ver 2015-10-21 10:09:21 +03:00
yuri
61957e628b fix optOut 2015-10-21 10:07:15 +03:00
yuri
c5296bf906 typo 2015-10-20 17:52:26 +03:00
yuri
a16919f10b fix typo 2015-10-20 17:38:04 +03:00
yuri
7050757e4e fix campaign type 2015-10-20 17:22:52 +03:00
yuri
d27e9c91e7 import: dont import if no fields 2015-10-20 15:47:42 +03:00
yuri
5e1c7bce33 leads actual filter 2015-10-20 15:38:25 +03:00
yuri
a23ac54da0 email template: translate enum 2015-10-20 15:32:01 +03:00
yuri
260c050f36 fix email address 2 2015-10-20 13:01:14 +03:00
yuri
fc5c07927f fix email address case 2015-10-20 12:57:42 +03:00
yuri
d321f0d701 email invitees duplicates 2015-10-20 12:32:50 +03:00
yuri
95cbc138f7 meeting/call/task and converted leads 2015-10-20 12:27:05 +03:00
yuri
395063ea35 order global search 2015-10-20 11:42:16 +03:00
yuri
835f95eb52 email template list layout 2015-10-20 11:29:05 +03:00
yuri
c0f6c91a0e fix email draft 2015-10-20 11:26:09 +03:00
yuri
b410d0e66f todays task 2015-10-19 17:43:32 +03:00
yuri
d04f72cfd8 vers 2015-10-19 16:14:44 +03:00
yuri
a9203b8e22 fix global search 2015-10-19 16:13:52 +03:00
yuri
e89c7c9328 email filter improvement 2015-10-19 15:36:22 +03:00
yuri
7808865080 import csv label 2015-10-19 15:27:09 +03:00
yuri
404e2de3b6 fix email isRead 2015-10-16 17:19:51 +03:00
yuri
f02dabc540 industry list 2015-10-16 13:50:42 +03:00
yuri
c29da46a97 fix client side access denied 2015-10-16 13:07:37 +03:00
yuri
b7702d2418 order fields in entity manager 2015-10-16 12:40:15 +03:00
yuri
2bc56db4c6 fix edit view link to detail 2015-10-16 12:33:59 +03:00
yuri
dd0ef5455e fix 2015-10-16 10:40:45 +03:00
yuri
901bee6d3f fix campaign 2015-10-15 11:52:25 +03:00
yuri
72a0415207 fix orderBy by alias 2015-10-14 13:03:08 +03:00
yuri
de69652137 fix id in model.set 2015-10-14 11:35:21 +03:00
yuri
1cd2d6b35e target lists field not importable 2015-10-12 10:43:50 +03:00
yuri
9888ec8a6f fix global searct 2015-10-12 10:30:16 +03:00
yuri
ea5321577a fix target list import 2015-10-08 17:55:48 +03:00
yuri
23c772e029 fix config 2015-10-07 16:53:22 +03:00
yuri
e67387d9ea additionalSelectColumns 2015-10-07 15:00:03 +03:00
yuri
2156094407 cleanup 2015-10-07 12:21:59 +03:00
yuri
03d5bf1ef2 tree impr 2015-10-07 12:18:01 +03:00
yuri
42f57409c8 list tree imp 2015-10-07 12:08:11 +03:00
yuri
69d7ce408d fix preferences layout 2015-10-07 11:24:52 +03:00
yuri
15b3c0440c lead converted panel change 2015-10-07 10:56:56 +03:00
yuri
e1f0715c4d email import: relate to converted entity if lead is converted 2015-10-07 10:35:07 +03:00
yuri
15aec72e97 fix double quick view 2015-10-07 10:33:47 +03:00
yuri
66eade5db7 v 2015-10-07 10:20:37 +03:00
yuri
3d89e25349 label 2015-10-05 14:36:52 +03:00
yuri
7c890aa83a fix empty tablist 2015-10-02 17:23:02 +03:00
yuri
62a29c86ab fix record controller 2015-10-02 15:27:34 +03:00
yuri
bd57b6bb8e detailLayout param 2 2015-10-02 15:10:13 +03:00
yuri
9ab1d16ea0 detailLayout param 2015-10-02 15:09:39 +03:00
yuri
435aa28ca2 iconHtml for menu items 2015-10-01 13:11:05 +03:00
yuri
4bd375f154 fix notice 2015-09-30 17:22:15 +03:00
yuri
d6521f9176 de_DE 2015-09-30 15:07:20 +03:00
yuri
f8e0e4955a fix meeting onlymy 2015-09-30 15:06:34 +03:00
yuri
7957359c15 fix prev 2015-09-30 11:41:53 +03:00
yuri
bdc3731b9a fix select manager 2015-09-30 11:39:11 +03:00
yuri
6b8af1220b opp lost filter 2015-09-30 10:24:39 +03:00
yuri
58fffeaa84 fix typo 2015-09-29 17:56:35 +03:00
yuri
5806785286 fix email notification dups 2015-09-29 11:56:15 +03:00
yuri
2f2d9b5f6f fix roles 2015-09-29 10:27:02 +03:00
yuri
5af20c1ee0 merge targetLists 2015-09-28 16:41:28 +03:00
yuri
7620be3b40 ve 2015-09-28 14:26:20 +03:00
yuri
86f591b409 trim emails when search 2015-09-28 11:18:12 +03:00
yuri
533dfe24d0 default dashlet options 2015-09-28 11:08:13 +03:00
yuri
10c51dc46e target lists panels 2015-09-28 10:55:58 +03:00
yuri
a9d24a1e09 fix mass update 2015-09-28 10:45:30 +03:00
yuri
0cfe093701 fix german language 2015-09-28 10:29:50 +03:00
yuri
11ec99fe6a duplicate email template 2015-09-28 10:26:59 +03:00
yuri
b07e5a6da2 campaign list layout 2015-09-28 10:24:10 +03:00
yuri
151738f896 fix tracking img 2015-09-28 10:23:20 +03:00
yuri
075a370e7a fix log opened 2015-09-25 16:46:55 +03:00
139 changed files with 925 additions and 533 deletions

View File

@@ -29,7 +29,7 @@ class GlobalSearch extends \Espo\Core\Controllers\Base
{
public function actionSearch($params, $data, $request)
{
$query = $params['query'];
$query = $request->get('q');
$offset = intval($request->get('offset'));
$maxSize = intval($request->get('maxSize'));

View File

@@ -170,6 +170,7 @@ class Record extends Base
$asc = $request->get('asc') === 'true';
$sortBy = $request->get('sortBy');
$q = $request->get('q');
$textFilter = $request->get('textFilter');
if (empty($maxSize)) {
$maxSize = self::MAX_SIZE_LIMIT;

View File

@@ -36,7 +36,7 @@ class FiltersMatcher
{
foreach ($filterList as $filter) {
if ($filter->get('from')) {
if (strtolower($filter->get('from')) === strtolower($email->get('from'))) {
if ($this->matchString(strtolower($filter->get('from')), strtolower($email->get('from')))) {
return true;
}
}
@@ -44,7 +44,7 @@ class FiltersMatcher
if ($email->get('to')) {
$toArr = explode(';', $email->get('to'));
foreach ($toArr as $to) {
if (strtolower($to) === strtolower($filter->get('to'))) {
if ($this->matchString(strtolower($filter->get('to')), strtolower($to))) {
return true;
}
}

View File

@@ -194,6 +194,28 @@ class Importer
$n = sscanf($reference, '%s %s %d %d espo', $parentType, $parentId, $emailSent, $number);
if ($n == 4 && $emailSent < time()) {
if (!empty($parentType) && !empty($parentId)) {
if ($parentType == 'Lead') {
$parent = $this->getEntityManager()->getEntity('Lead', $parentId);
if ($parent && $parent->get('status') == 'Converted') {
if ($parent->get('createdAccountId')) {
$account = $this->getEntityManager()->getEntity('Account', $parent->get('createdAccountId'));
if ($account) {
$parentType = 'Account';
$parentId = $account->id;
}
} else {
if ($this->getConfig()->get('b2cMode')) {
if ($parent->get('createdContactId')) {
$contact = $this->getEntityManager()->getEntity('Contact', $parent->get('createdContactId'));
if ($contact) {
$parentType = 'Contact';
$parentId = $contact->id;
}
}
}
}
}
}
$email->set('parentType', $parentType);
$email->set('parentId', $parentId);
$parentFound = true;

View File

@@ -242,15 +242,15 @@ class Base
if ($defs['type'] == 'manyMany') {
if (!empty($defs['relationName']) && !empty($defs['midKeys'])) {
if (!empty($defs['midKeys'])) {
$result['distinct'] = true;
$result['joins'][] = $link;
$key = $defs['midKeys'][1];
$relationName = lcfirst($defs['relationName']);
$middleName = $link . 'Middle';
$result['customJoin'] .= "
JOIN " . $query->toDb($pathName) . " AS `{$pathName}` ON {$pathName}.descendor_id = ".$query->sanitize($relationName) . "." . $query->toDb($key) . "
JOIN " . $query->toDb($pathName) . " AS `{$pathName}` ON {$pathName}.descendor_id = ".$query->sanitize($middleName) . "." . $query->toDb($key) . "
";
$part[$pathName . '.ascendorId'] = $val;
}
@@ -795,7 +795,7 @@ class Base
foreach ($fieldList as $field) {
if (
strlen($item['value']) >= self::MIN_LENGTH_FOR_CONTENT_SEARCH
strlen($textFilter) >= self::MIN_LENGTH_FOR_CONTENT_SEARCH
&&
!empty($fieldDefs[$field]['type']) && $fieldDefs[$field]['type'] == 'text'
) {

View File

@@ -55,7 +55,10 @@ class Auth extends \Slim\Middleware
}
$espoCgiAuth = $req->headers('HTTP_ESPO_CGI_AUTH');
if ( !isset($authUsername) && !isset($authPassword) && !empty($espoCgiAuth) ) {
if (empty($espoCgiAuth)) {
$espoCgiAuth = $req->headers('REDIRECT_HTTP_ESPO_CGI_AUTH');
}
if (!isset($authUsername) && !isset($authPassword) && !empty($espoCgiAuth)) {
list($authUsername, $authPassword) = explode(':' , base64_decode(substr($espoCgiAuth, 6)));
}

View File

@@ -150,7 +150,17 @@ class Config
$removeData = empty($this->removeData) ? null : $this->removeData;
$result = $this->getFileManager()->mergePhpContents($this->configPath, $values, $removeData);
$data = include($this->configPath);
foreach ($values as $key => $value) {
$data[$key] = $value;
}
foreach ($removeData as $key) {
unset($data[$key]);
}
$result = $this->getFileManager()->putPhpContents($this->configPath, $data);
if ($result) {
$this->changedData = array();
@@ -220,7 +230,7 @@ class Config
$restrictItems = $this->getRestrictItems($isAdmin);
$values = array();
foreach($data as $key => $item) {
foreach ($data as $key => $item) {
if (!in_array($key, $restrictItems)) {
$values[$key]= $item;
}

View File

@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
************************************************************************/
************************************************************************/
namespace Espo\Entities;
@@ -33,7 +33,6 @@ class EmailAddress extends \Espo\Core\ORM\Entity
throw new Error("Not valid email address '{$value}'");
}
$this->valuesContainer['name'] = $value;
$this->set('lower', strtolower($value));
}
$this->set('lower', strtolower($value));
}
}

View File

@@ -75,11 +75,8 @@ class Unsubscribe extends \Espo\Core\EntryPoints\Base
$link = $m[$target->getEntityType()];
}
if ($link) {
if ($campaign) {
$targetListList = $campaign->get('targetLists');
} else {
$targetListList = $massEmail->get('targetLists');
}
$targetListList = $massEmail->get('targetLists');
foreach ($targetListList as $targetList) {
$this->getEntityManager()->getRepository('TargetList')->updateRelation($targetList, $link, $target->id, array(
'optedOut' => true

View File

@@ -45,7 +45,7 @@ class Contact extends \Espo\Core\ORM\Repositories\RDB
$result = parent::afterSave($entity, $options);
$this->handleAfterSaveAccounts($entity, $options);
if ($entity->has('targetListId') && $entity->isNew()) {
if ($entity->has('targetListId')) {
$this->relate($entity, 'targetLists', $entity->get('targetListId'));
}

View File

@@ -35,10 +35,17 @@ class Meeting extends \Espo\Core\ORM\Repositories\RDB
if (!empty($parentId) || !empty($parentType)) {
$parent = $this->getEntityManager()->getEntity($parentType, $parentId);
if (!empty($parent)) {
$accountId = null;
if ($parent->getEntityType() == 'Account') {
$accountId = $parent->id;
} else if ($parent->has('accountId')) {
} else if ($parent->get('accountId')) {
$accountId = $parent->get('accountId');
} else if ($parent->getEntityType() == 'Lead') {
if ($parent->get('status') == 'Converted') {
if ($parent->get('createdAccountId')) {
$accountId = $parent->get('createdAccountId');
}
}
}
if (!empty($accountId)) {
$entity->set('accountId', $accountId);

View File

@@ -98,10 +98,17 @@ class Task extends \Espo\Core\ORM\Repositories\RDB
if (!empty($parentId) || !empty($parentType)) {
$parent = $this->getEntityManager()->getEntity($parentType, $parentId);
if (!empty($parent)) {
$accountId = null;
if ($parent->getEntityType() == 'Account') {
$accountId = $parent->id;
} else if ($parent->has('accountId')) {
} else if ($parent->get('accountId')) {
$accountId = $parent->get('accountId');
} else if ($parent->getEntityType() == 'Lead') {
if ($parent->get('status') == 'Converted') {
if ($parent->get('createdAccountId')) {
$accountId = $parent->get('createdAccountId');
}
}
}
if (!empty($accountId)) {
$entity->set('accountId', $accountId);

View File

@@ -16,7 +16,7 @@
"links": {
"contacts": "Kontakte",
"opportunities": "Verkaufschancen",
"cases": "F<EFBFBD>lle",
"cases": "Fälle",
"documents": "Dokumente",
"meetingsPrimary": "Meetings (erweitert)",
"callsPrimary": "Anrufe (erweitert)",
@@ -31,7 +31,7 @@
"Customer": "Kunde",
"Investor": "Investor",
"Partner": "Partner",
"Reseller": "Wiederverk<EFBFBD>ufer"
"Reseller": "Wiederverkäufer"
},
"industry": {
"Agriculture": "Landwirtschaft",
@@ -47,7 +47,7 @@
"Energy": "Energieerzeuger",
"Entertainment & Leisure": "Freizeit- und Unterhaltungsindustrie",
"Finance": "Finanzsektor",
"Food & Beverage": "Speisen und Getr<EFBFBD>nke",
"Food & Beverage": "Speisen und Getränke",
"Grocery": "Einzelhandel",
"Healthcare": "Gesundheitswesen",
"Insurance": "Versicherung",

View File

@@ -1,6 +1,6 @@
{
"layouts": {
"detailConvert": "Interessent umwandeln",
"listForAccount": "Liste (f<EFBFBD>r Firma)"
"listForAccount": "Liste (für Firma)"
}
}

View File

@@ -19,8 +19,8 @@
"options": {
"status": {
"Planned": "Geplant",
"Held": "Durchgef<EFBFBD>hrt",
"Not Held": "Nicht durchgef<EFBFBD>hrt"
"Held": "Durchgeführt",
"Not Held": "Nicht durchgeführt"
},
"direction": {
"Outbound": "Ausgehend",
@@ -45,7 +45,7 @@
},
"presetFilters": {
"planned": "Geplant",
"held": "Durchgef<EFBFBD>hrt",
"held": "Durchgeführt",
"todays": "Heutige"
}
}

View File

@@ -8,7 +8,7 @@
"endDate": "Enddatum",
"targetLists": "Kontaktlisten",
"sentCount": "Gesendet",
"openedCount": "Ge<EFBFBD>ffnet",
"openedCount": "Geöffnet",
"clickedCount": "Geklickt",
"optedOutCount": "Keine E-Mails",
"bouncedCount": "Nicht zustellbar",

View File

@@ -12,7 +12,7 @@
"options": {
"action": {
"Sent": "Gesendet",
"Opened": "Ge<EFBFBD>ffnet",
"Opened": "Geöffnet",
"Opted Out": "Keine E-Mails",
"Bounced": "Nicht zustellbar",
"Clicked": "Geklickt",
@@ -24,7 +24,7 @@
},
"presetFilters": {
"sent": "Gesendet",
"opened": "Ge<EFBFBD>ffnet",
"opened": "Geöffnet",
"optedOut": "Keine E-Mails",
"bounced": "Nicht zustellbar",
"clicked": "Geklickt",

View File

@@ -1,7 +1,7 @@
{
"fields": {
"url": "URL",
"urlToUse": "Code zu Einf<EFBFBD>gen anstelle einer URL",
"urlToUse": "Code zu Einfügen anstelle einer URL",
"campaign": "Kampagne"
},
"links": {

View File

@@ -6,7 +6,7 @@
"account": "Firma",
"contact": "Kontakt",
"contacts": "Kontakte",
"priority": "Priorit<EFBFBD>t",
"priority": "Priorität",
"type": "Typ",
"description": "Beschreibung",
"inboundEmail": "Eingehende E-Mails"
@@ -14,7 +14,7 @@
"links": {
"inboundEmail": "Eingehende E-Mails",
"account": "Firma",
"contact": "Kontakt (Prim<EFBFBD>r)",
"contact": "Kontakt (Primär)",
"Contacts": "Kontakte",
"meetings": "Meetings",
"calls": "Anrufe",
@@ -44,7 +44,7 @@
},
"labels": {
"Create Case": "Fall erstellen",
"Close": "Schlie<EFBFBD>en",
"Close": "Schließen",
"Reject": "Ablehnen",
"Closed": "Abgeschlossen",
"Rejected": "Abgelehnt"

View File

@@ -18,13 +18,13 @@
},
"links": {
"opportunities": "Verkaufschancen",
"cases": "F<EFBFBD>lle",
"cases": "Fälle",
"targetLists": "Kontaktlisten",
"campaignLogRecords": "Kampagnen Log",
"campaign": "Kampagne",
"account": "Firma (Prim<EFBFBD>r)",
"account": "Firma (Primär)",
"accounts": "Firmen",
"casesPrimary": "F<EFBFBD>lle (Prim<EFBFBD>r)"
"casesPrimary": "Fälle (Primär)"
},
"labels": {
"Create Contact": "Kontakt erstellen"

View File

@@ -9,7 +9,7 @@
"file": "Datei",
"type": "Typ",
"source": "Quelle",
"publishDate": "Ver<EFBFBD>ffentlichungsdatum",
"publishDate": "Veröffentlichungsdatum",
"expirationDate": "Ablaufdatum",
"description": "Beschreibung",
"accounts": "Firmen",

View File

@@ -28,32 +28,32 @@
"Calendar": "Kalender",
"Call": "Anrufe",
"Task": "Aufgaben",
"Case": "F<EFBFBD>lle",
"Case": "Fälle",
"Document": "Dokumente",
"DocumentFolder": "Dokumente Ordner",
"Campaign": "Kampagnen",
"TargetList": "Kontaktlisten",
"MassEmail": "Massen E-Mails",
"EmailQueueItem": "E-Mail Warteschlangeneintr<EFBFBD>ge",
"EmailQueueItem": "E-Mail Warteschlangeneinträge",
"CampaignTrackingUrl": "Tracking URLs"
},
"dashlets": {
"Leads": "Meine Interessenten",
"Opportunities": "Meine Verkaufschancen",
"Tasks": "Meine Aufgaben",
"Cases": "Meine F<EFBFBD>lle",
"Cases": "Meine Fälle",
"Calendar": "Kalender",
"Calls": "Meine Anrufe",
"Meetings": "Meine Meetings",
"OpportunitiesByStage": "Verkaufschancen nach Verkaufsphase",
"OpportunitiesByLeadSource": "Verkaufschancen nach Quelle",
"SalesByMonth": "Ums<EFBFBD>tze nach Monat",
"SalesByMonth": "Umsätze nach Monat",
"SalesPipeline": "Verkaufspipeline",
"Activities": "Meine Aktivit<EFBFBD>ten"
"Activities": "Meine Aktivitäten"
},
"labels": {
"Create InboundEmail": "Eingehende E-Mail erstellen",
"Activities": "Aktivit<EFBFBD>ten",
"Activities": "Aktivitäten",
"History": "Verlauf",
"Attendees": "Teilnehmer",
"Schedule Meeting": "Meeting planen",
@@ -70,14 +70,14 @@
"billingAddressCountry": "Land",
"billingAddressPostalCode": "PLZ",
"billingAddressState": "Bundesland/Kanton",
"billingAddressStreet": "Stra<EFBFBD>e",
"billingAddressStreet": "Straße",
"addressCity": "Ort",
"addressStreet": "Stra<EFBFBD>e",
"addressStreet": "Straße",
"addressCountry": "Land",
"addressState": "Bundesland/Kanton",
"addressPostalCode": "PLZ",
"shippingAddressCity": "Ort (Lieferadresse)",
"shippingAddressStreet": "Stra<EFBFBD>e (Lieferadresse)",
"shippingAddressStreet": "Straße (Lieferadresse)",
"shippingAddressCountry": "Land (Lieferadresse)",
"shippingAddressState": "Bundesland/Kanton (Lieferadresse)",
"shippingAddressPostalCode": "PLZ (Lieferadresse)"
@@ -91,7 +91,7 @@
"tasks": "Aufgaben",
"emails": "E-Mails",
"accounts": "Firmen",
"cases": "F<EFBFBD>lle",
"cases": "Fälle",
"documents": "Dokumente",
"account": "Firma",
"opportunity": "Verkaufschance",

View File

@@ -39,7 +39,7 @@
"Assigned": "Zugewiesen",
"In Process": "In Arbeit",
"Converted": "Umgewandelt",
"Recycled": "Wiederer<EFBFBD>ffnet",
"Recycled": "Wiedereröffnet",
"Dead": "'Gestorben'"
},
"source": {
@@ -56,6 +56,7 @@
},
"presetFilters": {
"active": "Aktiv",
"actual": "Tatsächlich",
"converted": "Umgewandelt"
}
}

View File

@@ -15,7 +15,7 @@
},
"links": {
"targetLists": "Kontaktlisten",
"queueItems": "Warteschlangeneintr<EFBFBD>ge",
"queueItems": "Warteschlangeneinträge",
"campaign": "Kampagne",
"emailTemplate": "E-Mail Vorlage",
"inboundEmail": "E-Mail Konto"
@@ -35,7 +35,7 @@
"Send Test": "Test senden"
},
"messages": {
"selectAtLeastOneTarget": "Zumindest ein Ziel ausw<EFBFBD>hlen",
"selectAtLeastOneTarget": "Zumindest ein Ziel auswählen",
"testSent": "Test E-Mail(s) die gesendet werden sollen"
}
}

View File

@@ -18,8 +18,8 @@
"options": {
"status": {
"Planned": "Geplant",
"Held": "Durchgef<EFBFBD>hrt",
"Not Held": "Nicht durchgef<EFBFBD>hrt"
"Held": "Durchgeführt",
"Not Held": "Nicht durchgeführt"
},
"acceptanceStatus": {
"None": "Kein(e)",
@@ -42,7 +42,7 @@
},
"presetFilters": {
"planned": "Geplant",
"held": "Durchgef<EFBFBD>hrt",
"held": "Durchgeführt",
"todays": "Heutige"
}
}

View File

@@ -28,7 +28,7 @@
"Id. Decision Makers": "Entscheider ident.",
"Perception Analysis": "Analyse Sichtweise",
"Proposal/Price Quote": "Preisangebot",
"Negotiation/Review": "Verhandlung/<EFBFBD>berarbeitung",
"Negotiation/Review": "Verhandlung/Überarbeitung",
"Closed Won": "Gewonnen",
"Closed Lost": "Verloren"
}
@@ -38,6 +38,7 @@
},
"presetFilters": {
"open": "Offen",
"won": "Gewonnen"
"won": "Gewonnen",
"lost": "Lost"
}
}

View File

@@ -2,7 +2,7 @@
"fields": {
"name": "Name",
"description": "Beschreibung",
"entryCount": "Eingabez<EFBFBD>hler",
"entryCount": "Eingabezähler",
"campaigns": "Kampagnen",
"endDate": "Enddatum",
"targetLists": "Kontaktlisten"
@@ -26,6 +26,6 @@
"labels": {
"Create TargetList": "Kontaktliste erstellen",
"Opted Out": "Keine E-Mails",
"Cancel Opt-Out": "Opt-Out zur<EFBFBD>cksetzen"
"Cancel Opt-Out": "Opt-Out zurücksetzen"
}
}

View File

@@ -4,18 +4,18 @@
"parent": "Bezieht sich auf",
"status": "Status",
"dateStart": "Startdatum",
"dateEnd": "F<EFBFBD>llig am",
"dateStartDate": "Startdatum (ganzt<EFBFBD>gig)",
"dateEndDate": "Enddatum (ganzt<EFBFBD>gig)",
"priority": "Priorit<EFBFBD>t",
"dateEnd": "Fällig am",
"dateStartDate": "Startdatum (ganztägig)",
"dateEndDate": "Enddatum (ganztägig)",
"priority": "Priorität",
"description": "Beschreibung",
"isOverdue": "Ist <EFBFBD>berf<EFBFBD>llig",
"isOverdue": "Ist überfällig",
"account": "Firma",
"dateCompleted": "Datum erledigt",
"attachments": "Anh<EFBFBD>nge"
"attachments": "Anhänge"
},
"links": {
"attachments": "Anh<EFBFBD>nge"
"attachments": "Anhänge"
},
"options": {
"status": {
@@ -23,7 +23,7 @@
"Started": "In Bearbeitung",
"Completed": "Abgeschlossen",
"Canceled": "Storniert",
"Deferred": "Zur<EFBFBD>ckgestellt"
"Deferred": "Zurückgestellt"
},
"priority" : {
"Low": "Niedrig",
@@ -37,9 +37,9 @@
"Complete": "Fertig"
},
"presetFilters": {
"actual": "Tats<EFBFBD>chlich",
"actual": "Tatsächlich",
"completed": "Abgeschlossen",
"todays": "Heutige",
"overdue": "<EFBFBD>berf<EFBFBD>llig"
"overdue": "Überfällig"
}
}

View File

@@ -40,6 +40,7 @@
"Automotive": "Automotive",
"Banking": "Banking",
"Biotechnology": "Biotechnology",
"Building Materials & Equipment": "Building Materials & Equipment",
"Chemical": "Chemical",
"Computer": "Computer",
"Education": "Education",

View File

@@ -56,6 +56,7 @@
},
"presetFilters": {
"active": "Active",
"actual": "Actual",
"converted": "Converted"
}
}

View File

@@ -38,6 +38,7 @@
},
"presetFilters": {
"open": "Open",
"won": "Won"
"won": "Won",
"lost": "Lost"
}
}

View File

@@ -50,6 +50,7 @@
}
},
"presetFilters": {
"active": "Actif"
"active": "Actif",
"actual": "En cours"
}
}

View File

@@ -45,6 +45,7 @@
}
},
"presetFilters": {
"actual": "Werkelijke",
"active": "Actief"
}
}

View File

@@ -48,6 +48,7 @@
}
},
"presetFilters": {
"actual": "Atual",
"active": "Ativo"
}
}

View File

@@ -45,6 +45,7 @@
}
},
"presetFilters": {
"active": "Активный"
"actual": "Актуальные",
"active": "Активные"
}
}

View File

@@ -30,8 +30,8 @@
"Complete": "Завершить"
},
"presetFilters": {
"actual": "Actual",
"completed": "Завершена",
"actual": "Актуальные",
"completed": "Завершенные",
"todays": "На сегодня",
"overdue": "Просроченные"
}

View File

@@ -2,5 +2,5 @@
{"name":"name","width":40,"link":true},
{"name":"type","width":20},
{"name":"status"},
{"name":"endDate"}
{"name":"createdAt"}
]

View File

@@ -1 +1 @@
["opportunities","cases"]
["opportunities", "cases", "targetLists"]

View File

@@ -24,7 +24,8 @@
{
"name":"statistics",
"label":"Statistics",
"view":"Crm:Campaign.Record.Panels.Statistics"
"view":"Crm:Campaign.Record.Panels.Statistics",
"hidden": true
}
]
},

View File

@@ -24,12 +24,16 @@
},
"relationshipPanels": {
"campaignLogRecords": {
"rowActionsView": "Record.RowActions.Empty",
"rowActionsView": "views/record/row-actions/empty",
"select": false,
"create": false
},
"opportunities":{
"layout":"listForAccount"
},
"targetLists": {
"create": false,
"rowActionsView": "views/record/row-actions/relationship-unlink-only"
}
},
"boolFilterList": ["onlyMy"],

View File

@@ -29,12 +29,9 @@
{
"name":"convertedTo",
"label":"Converted To",
"view": "Record.Panels.Side",
"view": "crm:views/lead/record/panels/converted-to",
"notRefreshable": true,
"hidden": true,
"options": {
"fieldList": ["createdAccount", "createdContact", "createdOpportunity"]
}
"hidden": true
},
{
"name":"activities",
@@ -51,6 +48,33 @@
"label":"Tasks",
"view":"Crm:Record.Panels.Tasks"
}
],
"edit": [
{
"name":"convertedTo",
"label":"Converted To",
"view": "crm:views/lead/record/panels/converted-to",
"notRefreshable": true,
"hidden": true
}
],
"detailSmall": [
{
"name":"convertedTo",
"label":"Converted To",
"view": "crm:views/lead/record/panels/converted-to",
"notRefreshable": true,
"hidden": true
}
],
"editSmall": [
{
"name":"convertedTo",
"label":"Converted To",
"view": "crm:views/lead/record/panels/converted-to",
"notRefreshable": true,
"hidden": true
}
]
},
"relationshipPanels": {
@@ -58,11 +82,15 @@
"rowActionsView": "Record.RowActions.Empty",
"select": false,
"create": false
},
"targetLists": {
"create": false,
"rowActionsView": "views/record/row-actions/relationship-unlink-only"
}
},
"filterList": [
{
"name":"active"
"name":"actual"
},
{
"name":"converted",

View File

@@ -30,6 +30,7 @@
"Automotive",
"Banking",
"Biotechnology",
"Building Materials & Equipment",
"Chemical",
"Computer",
"Education",
@@ -47,7 +48,7 @@
"Real Estate",
"Service",
"Sports",
"Sofware",
"Software",
"Technology",
"Telecommunications",
"Television",

View File

@@ -11,7 +11,8 @@
},
"type": {
"type": "enum",
"options": ["Email", "Newsletter", "Web", "Television", "Radio", "Mail"]
"options": ["Email", "Newsletter", "Web", "Television", "Radio", "Mail"],
"default": "Email"
},
"startDate": {
"type": "date"

View File

@@ -131,6 +131,7 @@
"layoutDetailDisabled": true,
"layoutListDisabled": true,
"layoutMassUpdateDisabled": true,
"importDisabled": true,
"noLoad": true
},
"targetList": {
@@ -237,7 +238,8 @@
},
"collection": {
"sortBy": "name",
"asc": true
"asc": true,
"textFilterFields": ["name", "emailAddress"]
},
"indexes": {
"firstName": {

View File

@@ -255,7 +255,7 @@
"collection": {
"sortBy": "createdAt",
"asc": false,
"textFilterFields": ["name", "accountName"]
"textFilterFields": ["name", "accountName", "emailAddress"]
},
"indexes": {
"firstName": {

View File

@@ -27,7 +27,7 @@ class Account extends \Espo\Core\SelectManagers\Base
protected function filterPartners(&$result)
{
$result['whereClause'][] = array(
'type' => 'Partnter'
'type' => 'Partner'
);
}

View File

@@ -31,7 +31,10 @@ class Call extends \Espo\Core\SelectManagers\Base
}
$result['whereClause'][] = array(
'users.id' => $this->getUser()->id,
'usersMiddle.status!=' => 'Declined'
'OR' => array(
'usersMiddle.status!=' => 'Declined',
'usersMiddle.status=' => null
)
);
}

View File

@@ -31,6 +31,13 @@ class Lead extends \Espo\Core\SelectManagers\Base
);
}
protected function filterActual(&$result)
{
$result['whereClause'][] = array(
'status!=' => ['Converted', 'Recycled', 'Dead']
);
}
protected function filterConverted(&$result)
{
$result['whereClause'][] = array(

View File

@@ -31,7 +31,10 @@ class Meeting extends \Espo\Core\SelectManagers\Base
}
$result['whereClause'][] = array(
'users.id' => $this->getUser()->id,
'usersMiddle.status!=' => 'Declined'
'OR' => array(
'usersMiddle.status!=' => 'Declined',
'usersMiddle.status=' => null
)
);
}

View File

@@ -27,7 +27,7 @@ class Opportunity extends \Espo\Core\SelectManagers\Base
protected function filterOpen(&$result)
{
$result['whereClause'][] = array(
'stage!=' => array('Closed Won', 'Closed Lost')
'stage!=' => ['Closed Won', 'Closed Lost']
);
}
@@ -38,5 +38,12 @@ class Opportunity extends \Espo\Core\SelectManagers\Base
);
}
protected function filterLost(&$result)
{
$result['whereClause'][] = array(
'stage=' => 'Closed Lost'
);
}
}

View File

@@ -71,6 +71,15 @@ class Task extends \Espo\Core\SelectManagers\Base
];
}
protected function filterTodays(&$result)
{
$result['whereClause'][] = $this->convertDateTimeWhere(array(
'type' => 'today',
'field' => 'dateEnd',
'timeZone' => $this->getUserTimeZone()
));
}
protected function convertDateTimeWhere($item)
{
$result = parent::convertDateTimeWhere($item);

View File

@@ -34,7 +34,7 @@ class Account extends \Espo\Services\Record
)
);
protected $mergeLinkList = array(
protected $mergeLinkList = [
'opportunities',
'cases',
'documents',
@@ -45,8 +45,9 @@ class Account extends \Espo\Services\Record
'emails',
'meetingsPrimary',
'callsPrimary',
'emailsPrimary'
);
'emailsPrimary',
'targetLists'
];
protected function getDuplicateWhereClause(Entity $entity)
{

View File

@@ -179,7 +179,7 @@ class Campaign extends \Espo\Services\Record
$actionDate = date('Y-m-d H:i:s');
}
if (!$queueItemId && !$this->getEntityManager()->getRepository('CampaignLogRecord')->where(array(
if ($queueItemId && $this->getEntityManager()->getRepository('CampaignLogRecord')->where(array(
'queueItemId' => $queueItemId,
'action' => 'Opened',
))->findOne()) {

View File

@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
************************************************************************/
************************************************************************/
namespace Espo\Modules\Crm\Services;
@@ -26,6 +26,10 @@ use \Espo\ORM\Entity;
class Contact extends \Espo\Services\Record
{
protected $mergeLinkList = [
'targetLists'
];
protected function getDuplicateWhereClause(Entity $entity)
{
$data = array(

View File

@@ -29,12 +29,13 @@ use \Espo\ORM\Entity;
class Lead extends \Espo\Services\Record
{
protected $mergeLinkList = array(
protected $mergeLinkList = [
'tasks',
'meetings',
'calls',
'emails'
);
'emails',
'targetLists'
];
protected function getDuplicateWhereClause(Entity $entity)
{

View File

@@ -243,10 +243,10 @@ class MassEmail extends \Espo\Services\Record
$this->setFailed($massEmail);
return;
}
$attachmetList = $emailTemplate->get('attachmets');
$attachmentList = $emailTemplate->get('attachments');
foreach ($queueItemList as $queueItem) {
$this->sendQueueItem($queueItem, $massEmail, $emailTemplate, $attachmetList, $campaign, $isTest);
$this->sendQueueItem($queueItem, $massEmail, $emailTemplate, $attachmentList, $campaign, $isTest);
}
if (!$isTest) {
@@ -273,8 +273,7 @@ class MassEmail extends \Espo\Services\Record
$body = $emailData['body'];
$trackOpenedUrl = $this->getConfig()->get('siteUrl') . '?entryPoint=campaignTrackOpened&id=' . $queueItem->id;
$trackOpenedHtml = '<img width="1" height="1" src="'.$trackOpenedUrl.'">';
$optOutUrl = $this->getConfig()->get('siteUrl') . '?entryPoint=unsubscribe&id=' . $queueItem->id;
$optOutLink = '<a href="'.$optOutUrl.'">'.$this->getLanguage()->translate('Unsubscribe', 'labels', 'Campaign').'</a>';
@@ -290,11 +289,19 @@ class MassEmail extends \Espo\Services\Record
if (stripos($body, '?entryPoint=unsubscribe&id') === false) {
if ($emailData['isHtml']) {
$body .= "<br><br>" . $optOutLink;
} else {
$body .= "\n\n" . $optOutUrl;
}
}
$trackOpenedUrl = $this->getConfig()->get('siteUrl') . '?entryPoint=campaignTrackOpened&id=' . $queueItem->id;
$trackOpenedHtml = '<img width="1" height="1" border="0" src="'.$trackOpenedUrl.'">';
if ($massEmail->get('campaignId')) {
if ($emailData['isHtml']) {
if ($massEmail->get('campaignId')) {
$body .= $trackOpenedHtml;
}
} else {
$body .= "\n\n" . $optOutUrl;
}
}
@@ -321,7 +328,7 @@ class MassEmail extends \Espo\Services\Record
return $email;
}
protected function sendQueueItem(Entity $queueItem, Entity $massEmail, Entity $emailTemplate, $attachmetList = [], $campaign = null, $isTest = false)
protected function sendQueueItem(Entity $queueItem, Entity $massEmail, Entity $emailTemplate, $attachmentList = [], $campaign = null, $isTest = false)
{
$target = $this->getEntityManager()->getEntity($queueItem->get('targetType'), $queueItem->get('targetId'));
if (!$target || !$target->id || !$target->get('emailAddress')) {
@@ -372,7 +379,7 @@ class MassEmail extends \Espo\Services\Record
$header->setId($queueItem->id);
$message->getHeaders()->addHeader($header);
$this->getMailSender()->useGlobal()->send($email, $params, $message, $attachmetList);
$this->getMailSender()->useGlobal()->send($email, $params, $message, $attachmentList);
$emailObject = $emailTemplate;
if ($massEmail->get('storeSentEmails')) {
@@ -392,7 +399,6 @@ class MassEmail extends \Espo\Services\Record
} catch (\Exception $e) {
if ($queueItem->get('attemptCount') >= self::MAX_ATTEMPT_COUNT) {
$this->setQueueItemFailed($queueItem);
$queueItem->set('status', 'Failed');
}
$this->getEntityManager()->saveEntity($queueItem);

View File

@@ -81,19 +81,30 @@ class Meeting extends \Espo\Services\Record
{
$invitationManager = $this->getInvitationManager();
$emailHash = array();
$users = $entity->get('users');
foreach ($users as $user) {
$invitationManager->sendInvitation($entity, $user, 'users');
if ($user->get('emailAddress') && !array_key_exists($user->get('emailAddress'), $emailHash)) {
$invitationManager->sendInvitation($entity, $user, 'users');
$emailHash[$user->get('emailAddress')] = true;
}
}
$contacts = $entity->get('contacts');
foreach ($contacts as $contact) {
$invitationManager->sendInvitation($entity, $contact, 'contacts');
if ($contact->get('emailAddress') && !array_key_exists($contact->get('emailAddress'), $emailHash)) {
$invitationManager->sendInvitation($entity, $contact, 'contacts');
$emailHash[$user->get('emailAddress')] = true;
}
}
$leads = $entity->get('leads');
foreach ($leads as $lead) {
$invitationManager->sendInvitation($entity, $lead, 'leads');
if ($lead->get('emailAddress') && !array_key_exists($lead->get('emailAddress'), $emailHash)) {
$invitationManager->sendInvitation($entity, $lead, 'leads');
$emailHash[$user->get('emailAddress')] = true;
}
}
return true;

View File

@@ -47,7 +47,7 @@ class Email extends \Espo\Core\Notificators\Base
return;
}
if ($entity->get('status') === 'Sent') {
if ($entity->get('isJustSent')) {
$previousUserIdList = [];
} else {
$previousUserIdList = $entity->getFetched('usersIds');

View File

@@ -113,6 +113,12 @@ abstract class Base
}
}
if (!empty($params['additionalSelectColumns']) && is_array($params['additionalSelectColumns'])) {
foreach ($params['additionalSelectColumns'] as $column => $field) {
$selectPart .= ", " . $column . " AS `{$field}`";
}
}
} else {
$aggDist = false;
if ($params['distinct'] && $params['aggregation'] == 'COUNT') {
@@ -427,7 +433,7 @@ abstract class Base
{
if (strpos($orderBy, '.') !== false) {
list($alias, $field) = explode('.', $orderBy);
$fieldPath = $this->toDb($alias) . '.' . $this->toDb($this->sanitize($field));
$fieldPath = $this->sanitize($alias) . '.' . $this->toDb($this->sanitize($field));
} else {
$fieldPath = $this->getFieldPath($entity, $orderBy);
}

View File

@@ -65,7 +65,7 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
$pdo = $this->getEntityManager()->getPDO();
$sql = "
SELECT email_address.name, email_address.invalid, email_address.opt_out AS optOut, entity_email_address.primary
SELECT email_address.name, email_address.lower, email_address.invalid, email_address.opt_out AS optOut, entity_email_address.primary
FROM entity_email_address
JOIN email_address ON email_address.id = entity_email_address.email_address_id AND email_address.deleted = 0
WHERE
@@ -80,6 +80,7 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
foreach ($rows as $row) {
$obj = new \StdClass();
$obj->emailAddress = $row['name'];
$obj->lower = $row['lower'];
$obj->primary = ($row['primary'] == '1') ? true : false;
$obj->optOut = ($row['optOut'] == '1') ? true : false;
$obj->invalid = ($row['invalid'] == '1') ? true : false;
@@ -180,22 +181,25 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
foreach ($emailAddressData as $row) {
$key = $row->emailAddress;
if (!empty($key)) {
$key = strtolower($key);
$hash[$key] = array(
'primary' => $row->primary ? true : false,
'optOut' => $row->optOut ? true : false,
'invalid' => $row->invalid ? true : false,
'emailAddress' => $row->emailAddress
);
}
}
$hashPrev = array();
foreach ($previousEmailAddressData as $row) {
$key = $row->emailAddress;
$key = $row->lower;
if (!empty($key)) {
$hashPrev[$key] = array(
'primary' => $row->primary ? true : false,
'optOut' => $row->optOut ? true : false,
'invalid' => $row->invalid ? true : false,
'emailAddress' => $row->emailAddress
);
}
}
@@ -216,7 +220,10 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
if (array_key_exists($key, $hashPrev)) {
$new = false;
$changed = $hash[$key]['optOut'] != $hashPrev[$key]['optOut'] || $hash[$key]['invalid'] != $hashPrev[$key]['invalid'];
$changed =
$hash[$key]['optOut'] != $hashPrev[$key]['optOut'] ||
$hash[$key]['invalid'] != $hashPrev[$key]['invalid'] ||
$hash[$key]['emailAddress'] !== $hashPrev[$key]['emailAddress'];
if ($hash[$key]['primary']) {
if ($hash[$key]['primary'] == $hashPrev[$key]['primary']) {
$primary = false;
@@ -259,6 +266,7 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
$emailAddress->set(array(
'optOut' => $hash[$address]['optOut'],
'invalid' => $hash[$address]['invalid'],
'name' => $hash[$address]['emailAddress']
));
$this->save($emailAddress);
}
@@ -270,16 +278,21 @@ class EmailAddress extends \Espo\Core\ORM\Repositories\RDB
$emailAddress = $this->get();
$emailAddress->set(array(
'name' => $address,
'name' => $hash[$address]['emailAddress'],
'optOut' => $hash[$address]['optOut'],
'invalid' => $hash[$address]['invalid'],
));
$this->save($emailAddress);
} else {
if ($emailAddress->get('optOut') != $hash[$address]['optOut'] || $emailAddress->get('invalid') != $hash[$address]['invalid']) {
if (
$emailAddress->get('optOut') != $hash[$address]['optOut'] ||
$emailAddress->get('invalid') != $hash[$address]['invalid'] ||
$emailAddress->get('emailAddress') != $hash[$address]['emailAddress']
) {
$emailAddress->set(array(
'optOut' => $hash[$address]['optOut'],
'invalid' => $hash[$address]['invalid'],
'name' => $hash[$address]['emailAddress']
));
$this->save($emailAddress);
}

View File

@@ -90,6 +90,7 @@ class Preferences extends \Espo\Core\ORM\Repository
$fields = $this->getMetadata()->get('entityDefs.Preferences.fields');
$defaults = array();
$defaults['dashboardLayout'] = $this->getMetadata()->get('app.defaultDashboardLayouts.Standard');
$defaults['dashletOptions'] = $this->getMetadata()->get('app.defaultDashboardOptions.Standard');
foreach ($fields as $field => $d) {
if (array_key_exists('default', $d)) {
$defaults[$field] = $d['default'];

View File

@@ -7,11 +7,11 @@
"Email": "E-Mail",
"Data": "Daten",
"Customization": "Anpassung",
"Available Fields": "Verf<EFBFBD>gbare Felder",
"Available Fields": "Verfügbare Felder",
"Layout": "Aktuelles Layout",
"Entity Manager": "Entit<EFBFBD>ts-/Modulmanager",
"Add Panel": "Panel hinzuf<EFBFBD>gen",
"Add Field": "Feld hinzuf<EFBFBD>gen",
"Entity Manager": "Entitäts-/Modulmanager",
"Add Panel": "Panel hinzufügen",
"Add Field": "Feld hinzufügen",
"Settings": "Einstellungen",
"Scheduled Jobs": "Geplante Jobs",
"Upgrade": "Aktualisierung",
@@ -25,10 +25,10 @@
"Email Templates": "E-Mail Vorlagen",
"Import": "Import",
"Layout Manager": "Layouts anpassen",
"User Interface": "Benutzeroberfl<EFBFBD>che",
"User Interface": "Benutzeroberfläche",
"Auth Tokens": "Auth Tokens",
"Authentication": "Authentifizierung",
"Currency": "W<EFBFBD>hrung",
"Currency": "Währung",
"Integrations": "Integrationen",
"Extensions": "Erweiterungen",
"Upload": "Hochladen",
@@ -36,19 +36,19 @@
"Upgrading...": "Aktualisiere....",
"Upgraded successfully": "Erfolgreich aktualisiert",
"Installed successfully": "Erfolgreich installiert",
"Ready for upgrade": "Bereit f<EFBFBD>r Aktualisierung",
"Run Upgrade": "Aktualisierung duchf<EFBFBD>hren",
"Ready for upgrade": "Bereit für Aktualisierung",
"Run Upgrade": "Aktualisierung duchführen",
"Install": "Installieren",
"Ready for installation": "Bereit f<EFBFBD>r Installation",
"Ready for installation": "Bereit für Installation",
"Uninstalling...": "Deinstalliere...",
"Uninstalled": "Deinstalliert",
"Create Entity": "Entit<EFBFBD>t/Modul erstellen",
"Edit Entity": "Entit<EFBFBD>t/Modul bearbeiten",
"Create Entity": "Entität/Modul erstellen",
"Edit Entity": "Entität/Modul bearbeiten",
"Create Link": "Relation erstellen",
"Edit Link": "Relation bearbeiten",
"Notifications": "Benachrichtigungen",
"Jobs": "Jobs",
"Reset to Default": "Zur<EFBFBD>cksetzen auf Standard",
"Reset to Default": "Zurücksetzen auf Standard",
"Email Filters": "E-Mail Filter"
},
"layouts": {
@@ -57,7 +57,7 @@
"listSmall": "Liste (Klein)",
"detailSmall": "Detail (Klein)",
"filters": "Suchfilter",
"massUpdate": "Massen<EFBFBD>nderung",
"massUpdate": "Massenänderung",
"relationships": "Beziehungen"
},
"fieldTypes": {
@@ -67,21 +67,21 @@
"duration": "Dauer",
"password": "Passwort",
"parsonName": "Person Name",
"autoincrement": "Automatisch hochz<EFBFBD>hlen",
"autoincrement": "Automatisch hochzählen",
"bool": "Bool",
"currency": "W<EFBFBD>hrung",
"currency": "Währung",
"date": "Datum",
"datetime": "Datum/Zeit",
"datetimeOptional": "Datum/Datum-Zeit",
"email": "E-Mail",
"enum": "Einfachauswahl",
"enumInt": "Einfachauswahl Ganzzahlwerte",
"enumFloat": "Einfachauswahl Flie<EFBFBD>kommawerte",
"float": "Flie<EFBFBD>komma",
"enumFloat": "Einfachauswahl Fließkommawerte",
"float": "Fließkomma",
"int": "Ganzzahl",
"link": "Link",
"linkMultiple": "Mehrfachlinks",
"linkParent": "<EFBFBD>bergeordneter Link",
"linkParent": "Übergeordneter Link",
"multienim": "Mehrfachauswahl",
"phone": "Telefon",
"text": "Textbox",
@@ -90,10 +90,11 @@
"file": "Datei",
"image": "Bild",
"multiEnum": "Mehrfachauswahl",
"attachmentMultiple": "Mehrfach Anh<EFBFBD>nge",
"attachmentMultiple": "Mehrfach Anhänge",
"rangeInt": "Bereich Ganzzahl",
"rangeFloat": "Bereich Flie<EFBFBD>kommawerte",
"rangeCurrency": "bereich W<EFBFBD>hrung"
"rangeFloat": "Bereich Fließkommawerte",
"rangeCurrency": "bereich Währung",
"wysiwyg": "Wysiwyg"
},
"fields": {
"type": "Typ",
@@ -101,7 +102,7 @@
"label": "Bezeichnung",
"required": "Erforderlich",
"default": "Standard",
"maxLength": "Maximall<EFBFBD>nge",
"maxLength": "Maximallänge",
"options": "Optionen",
"after": "Nach (Feld)",
"before": "Vor (Feld)",
@@ -109,15 +110,16 @@
"field": "Feld",
"min": "Min",
"max": "Max",
"translation": "<EFBFBD>bersetzung",
"previewSize": "Vorschau Gr<EFBFBD><EFBFBD>e",
"translation": "Übersetzung",
"previewSize": "Vorschau Größe",
"noEmptyString": "Keine leere Zeichenkette",
"defaultType": "Standardtyp",
"seeMoreDisabled": "Abschneiden des Texts verhindern",
"entityList": "Entit<EFBFBD>tsliste",
"entityList": "Entitätsliste",
"isSorted": "Sortiert (alphabetisch)",
"audited": "Auditiert",
"trim": "Abschneiden"
"trim": "Abschneiden",
"height": "Height (px)"
},
"messages": {
"upgradeVersion": "Ihr EspoCRM wird nun auf Version <strong>{version}</strong> aktualisiert. Dies kann einige Zeit dauern.",
@@ -125,38 +127,38 @@
"upgradeBackup": "Wie empfehlen VOR einer Aktualisierung die Espo Dateien sowie die Datenbank zu sichern.",
"thousandSeparatorEqualsDecimalMark": "Das Tausendertrennzeichen kann nicht gleich dem Dezimaltrennzeichen sein",
"userHasNoEmailAddress": "Der Benutzer hat keine E-Mail Adresse.",
"selectEntityType": "Modul/Entit<EFBFBD>t links ausw<EFBFBD>hlen",
"selectUpgradePackage": "Aktualisierungspaket ausw<EFBFBD>hlen",
"selectEntityType": "Modul/Entität links auswählen",
"selectUpgradePackage": "Aktualisierungspaket auswählen",
"downloadUpgradePackage": "Aktualisierungspaket(e) <a href=\"{url}\">hier </a>herunterladen.",
"selectLayout": "Layout zum Editieren links ausw<EFBFBD>hlen",
"selectExtensionPackage": "Erweiterungspaket ausw<EFBFBD>hlen",
"selectLayout": "Layout zum Editieren links auswählen",
"selectExtensionPackage": "Erweiterungspaket auswählen",
"extensionInstalled": "Erweiterung {name} {version} wurde installiert.",
"installExtension": "Erweiterung {name} {version} ist bereit f<EFBFBD>r die Installation",
"installExtension": "Erweiterung {name} {version} ist bereit für die Installation",
"uninstallConfirmation": "Wollen Sie die Erweiterung wirklich deinstallieren?"
},
"descriptions": {
"settings": "Systemeinstellungen der Applikation.",
"scheduledJob": "Aufgaben die durch einen Cronjob ausgef<EFBFBD>hrt werden.",
"scheduledJob": "Aufgaben die durch einen Cronjob ausgeführt werden.",
"upgrade": "EspoCRM aktualisieren.",
"clearCache": "Alle Cache Dateien leeren.",
"rebuild": "Wiederherstellung des Backends und Leeren des Cache.",
"users": "Benutzerverwaltung.",
"teams": "Teamverwaltung.",
"roles": "Rollenverwaltung.",
"outboundEmails": "SMTP Einstellungen f<EFBFBD>r ausgehende E-Mails.",
"groupEmailAccounts": "IMAP Gruppenkonten. E-Mail Import und E-Mails f<EFBFBD>r F<EFBFBD>lle.",
"emailTemplates": "Vorlagen f<EFBFBD>r ausgehende E-Mails.",
"outboundEmails": "SMTP Einstellungen für ausgehende E-Mails.",
"groupEmailAccounts": "IMAP Gruppenkonten. E-Mail Import und E-Mails für Fälle.",
"emailTemplates": "Vorlagen für ausgehende E-Mails.",
"import": "Datenimport aus CSV Datei.",
"layoutManager": "Layouts anpassen (Liste, Detailansicht, Bearbeitungsansicht, Suche, Massenaktualisierung).",
"entityManager": "Module/Entit<EFBFBD>ten selbst erstellen, existente bearbeiten, Felder und Relationen verwalten.",
"userInterface": "Benutzeroberfl<EFBFBD>che anpassen.",
"entityManager": "Module/Entitäten selbst erstellen, existente bearbeiten, Felder und Relationen verwalten.",
"userInterface": "Benutzeroberfläche anpassen.",
"authTokens": "Aktive Auth Sessions. IP Adresse und letztes Zugriffsdatum,",
"authentication": "Authentifizierungs Einstellungen.",
"currency": "W<EFBFBD>hrungseinstellungen und Kurse",
"currency": "Währungseinstellungen und Kurse",
"extensions": "Erweiterungen installieren oder deinstallieren",
"integrations": "Integration mit Drittanbietern ",
"notifications": "In-App und E-Mail Benachrichtigungseinstellungen.",
"inboundEmails": "Einstellungen f<EFBFBD>r eingehende E-Mails",
"inboundEmails": "Einstellungen für eingehende E-Mails",
"emailFilters": "E-Mails auf die die angegebenen Filter zutreffen werden nicht importiert"
},
"options": {

View File

@@ -4,8 +4,8 @@
"dateFrom": "Von Datum",
"dateTo": "Bis Datum",
"autorefreshInterval": "Aktualisierungsintervall",
"displayRecords": "S<EFBFBD>tze anzeigen",
"isDoubleHeight": "Zweifache H<EFBFBD>he",
"displayRecords": "Sätze anzeigen",
"isDoubleHeight": "Zweifache Höhe",
"mode": "Modus"
},
"options": {

View File

@@ -13,8 +13,8 @@
"isHtml": "Ist HTML",
"body": "Inhalt",
"subject": "Betreff",
"attachments": "Anh<EFBFBD>nge",
"selectTemplate": "Vorlage w<EFBFBD>hlen",
"attachments": "Anhänge",
"selectTemplate": "Vorlage wählen",
"fromEmailAddress": "Von Adresse",
"toEmailAddresses": "An Adresse",
"emailAddress": "E-Mail Adresse",
@@ -46,7 +46,7 @@
"Forward": "Weiterleiten",
"Original message": "Originalnachricht",
"Forwarded message": "Weitergeleitete Nachricht:",
"Email Accounts": "Pers<EFBFBD>nliche E-Mail Konten",
"Email Accounts": "Persönliche E-Mail Konten",
"Inbound Emails": "Gruppen E-Mail Konten",
"Email Templates": "E-Mail Vorlagen",
"Send Test Email": "Test E-Mail senden",
@@ -70,7 +70,7 @@
"sent": "Gesendet",
"archived": "Archiviert",
"inbox": "Posteingang",
"drafts": "Entw<EFBFBD>rfe"
"drafts": "Entwürfe"
},
"massActions": {
"markAsRead": "Als gelesen markieren",

View File

@@ -6,7 +6,7 @@
"username": "Benutzername",
"password": "Passwort",
"port": "Port",
"monitoredFolders": "<EFBFBD>berwachte Ordner",
"monitoredFolders": "Überwachte Ordner",
"ssl": "SSL",
"fetchSince": "Holen seit",
"emailAddress": "E-Mail Adresse",
@@ -27,14 +27,14 @@
"Create EmailAccount": "E-Mail Konto erstellen",
"IMAP": "IMAP",
"Main": "Wichtig",
"Test Connection": "Verbindung <EFBFBD>berpr<EFBFBD>fen"
"Test Connection": "Verbindung überprüfen"
},
"messages": {
"couldNotConnectToImap": "Kann keine Verbindung zum IMAP Server herstellen",
"connectionIsOk": "Verbindung ist in Ordnung"
},
"tooltips": {
"monitoredFolders": "Sie k<EFBFBD>nnen einen 'Gesendet' Ordner hinzuf<EFBFBD>gen um E-Mails zu synchronisieren, die von einem externen Programm gesendet wurden.",
"monitoredFolders": "Sie können einen 'Gesendet' Ordner hinzufügen um E-Mails zu synchronisieren, die von einem externen Programm gesendet wurden.",
"storeSentEmails": "Gesendete E-Mail werden auf einem IMAP Server gespeichert. Die E-Mail Adresse muss jene sein von der die E-Mail gesendet wurde."
}
}

View File

@@ -1,7 +1,7 @@
{
"labels": {
"Primary": "Prim<EFBFBD>r",
"Primary": "Primär",
"Opted Out": "Keine E-Mails",
"Invalid": "Ung<EFBFBD>ltig"
"Invalid": "Ungültig"
}
}

View File

@@ -9,11 +9,11 @@
"Create EmailFilter": "E.Mail Filter erstellen"
},
"tooltips": {
"name": "Ein Name f<EFBFBD>r den Filter",
"subject": "Verwendung des Platzhalters *:\n\ntext* - beginnt mit text,\n*text* - enth<EFBFBD>lt text,\n*text - endet mit text.",
"bodyContains": "Der Text der E-Mail enth<EFBFBD>lt eines der angegebenen Worte oder Phrasen.",
"from": "Die E-Mails werden von der angegebenen Adresse gesendet. Bitte leer lassen wenn nicht ben<EFBFBD>tigt.",
"to": "Die E-Mails werden an die angegebene Adresse gesendet. Bitte leer lassen wenn nicht ben<EFBFBD>tigt.",
"parent": "Leer lassen um den Filter global anzuwenden (f<EFBFBD>r alle eingehenden E-Mails)."
"name": "Ein Name für den Filter",
"subject": "Verwendung des Platzhalters *:\n\ntext* - beginnt mit text,\n*text* - enthält text,\n*text - endet mit text.",
"bodyContains": "Der Text der E-Mail enthält eines der angegebenen Worte oder Phrasen.",
"from": "Die E-Mails werden von der angegebenen Adresse gesendet. Bitte leer lassen wenn nicht benötigt.",
"to": "Die E-Mails werden an die angegebene Adresse gesendet. Bitte leer lassen wenn nicht benötigt.",
"parent": "Leer lassen um den Filter global anzuwenden (für alle eingehenden E-Mails)."
}
}

View File

@@ -5,7 +5,7 @@
"isHtml": "Ist HTML",
"body": "Inhalt",
"subject": "Betreff",
"attachments": "Anh<EFBFBD>nge",
"attachments": "Anhänge",
"insertField": "Project-Id-Version: Espo de_DE\nPOT-Creation-Date: \nPO-Revision-Date: \nLast-Translator: Robert Laussegger <info@iscongroup.net>\nLanguage-Team: iscon group <info@iscongroup.net>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\nLanguage: de_DE\nX-Generator: Poedit 1.6.5\n"
},
"links": {
@@ -15,6 +15,6 @@
"Info": "Info"
},
"messages": {
"infoText": "Verf<EFBFBD>gbare Variablen:\n\n{optOutUrl} &#8211; URL f<EFBFBD>r den Abmeldelink};\n\n{optOutLink} &#8211; ein Abmeldelink."
"infoText": "Verfügbare Variablen:\n\n{optOutUrl} &#8211; URL für den Abmeldelink};\n\n{optOutLink} &#8211; ein Abmeldelink."
}
}

View File

@@ -8,10 +8,10 @@
"type": "Typ",
"labelSingular": "Bezeichnung Einzahl",
"labelPlural": "Bezeichnung Mehrzahl",
"stream": "Vorg<EFBFBD>nge",
"stream": "Vorgänge",
"label": "Bezeichnung",
"linkType": "Relationstyp",
"entityForeign": "Fremdentit<EFBFBD>t/-modul",
"entityForeign": "Fremdentität/-modul",
"linkForeign": "Remdrelation/-modul",
"link": "Link",
"labelForeign": "Fremdbezeichnung",
@@ -38,7 +38,7 @@
}
},
"messages": {
"entityCreated": "Entit<EFBFBD>t wurde erstellt",
"entityCreated": "Entität wurde erstellt",
"linkAlreadyExists": "Konflikt Name Relation"
}
}

View File

@@ -5,15 +5,15 @@
"Team": "Team",
"Role": "Rolle",
"EmailTemplate": "E-Mail Vorlage",
"EmailAccount": "Pers<EFBFBD>nliches E-Mail Konto",
"EmailAccountScope": "Pers<EFBFBD>nliches E-Mail Konto",
"EmailAccount": "Persönliches E-Mail Konto",
"EmailAccountScope": "Persönliches E-Mail Konto",
"OutboundEmail": "Ausgehende E-Mail",
"ScheduledJob": "Geplante Aufgabe",
"ExternalAccount": "Externes Konto",
"Extension": "Erweiterung",
"Dashboard": "<EFBFBD>bersicht",
"Dashboard": "Übersicht",
"InboundEmail": "Gruppen E-Mail Konto",
"Stream": "Vorg<EFBFBD>nge",
"Stream": "Vorgänge",
"Import": "Import",
"Template": "Vorlage",
"Job": "Job",
@@ -25,15 +25,15 @@
"Team": "Teams",
"Role": "Rollen",
"EmailTemplate": "E-Mail Vorlagen",
"EmailAccount": "Pers<EFBFBD>nliche E-Mail Konten",
"EmailAccountScope": "Pers<EFBFBD>nliche E-Mail Konten",
"EmailAccount": "Persönliche E-Mail Konten",
"EmailAccountScope": "Persönliche E-Mail Konten",
"OutboundEmail": "Ausgehende E-Mails",
"ScheduledJob": "Geplante Jobs",
"ExternalAccount": "Externe Konten",
"Extension": "Erweiterungen",
"Dashboard": "<EFBFBD>bersicht",
"Dashboard": "Übersicht",
"InboundEmail": "Gruppen E-Mail Konten",
"Stream": "Vorg<EFBFBD>nge",
"Stream": "Vorgänge",
"Import": "Importergebnis",
"Template": "Vorlagen",
"Job": "Jobs",
@@ -41,61 +41,61 @@
},
"labels": {
"Misc": "Verschiedenes",
"Merge": "Zusammenf<EFBFBD>hren",
"Merge": "Zusammenführen",
"None": "Kein(e)",
"by": "von",
"Saved": "Gespeichert.",
"Error": "Fehler",
"Select": "Ausw<EFBFBD>hlen",
"Not valid": "Ung<EFBFBD>ltig",
"Select": "Auswählen",
"Not valid": "Ungültig",
"Please wait...": "Bitte warten...",
"Please wait": "Bitte warten",
"Loading...": "Lade...",
"Uploading...": "Lade hoch...",
"Sending...": "Wird gesendet...",
"Merging...": "Zusammenf<EFBFBD>hren",
"Merged": "Zusammengef<EFBFBD>hrt",
"Removed": "Gel<EFBFBD>scht",
"Merging...": "Zusammenführen",
"Merged": "Zusammengeführt",
"Removed": "Gelöscht",
"Posted": "Geposted",
"Linked": "Verlinkt",
"Unlinked": "Verkn<EFBFBD>pfung gel<EFBFBD>scht",
"Unlinked": "Verknüpfung gelöscht",
"Done": "Fertig",
"Access denied": "Zugriff verweigert",
"Access": "Zugang",
"Are you sure?": "Sind Sie sicher?",
"Record has been removed": "Datensatz wurde gel<EFBFBD>scht",
"Record has been removed": "Datensatz wurde gelöscht",
"Wrong username/password": "Falscher Benutzername/Passwort",
"Post cannot be empty": "Notiz darf nicht leer sein",
"Removing...": "L<EFBFBD>sche...",
"Unlinking...": "L<EFBFBD>sche Verkn<EFBFBD>pfung...",
"Removing...": "Lösche...",
"Unlinking...": "Lösche Verknüpfung...",
"Posting...": "Poste...",
"Username can not be empty!": "Der Benutzername darf nicht leer sein!",
"Cache is not enabled": "Cache ist nicht aktiviert",
"Cache has been cleared": "Der Cache wurde geleert",
"Rebuild has been done": "Wiederherstellen wurde durchgef<EFBFBD>hrt",
"Rebuild has been done": "Wiederherstellen wurde durchgeführt",
"Saving...": "Speichere...",
"Modified": "Ver<EFBFBD>ndert",
"Modified": "Verändert",
"Created": "Erstellt",
"Create": "Erstellen",
"create": "erstellen",
"Overview": "<EFBFBD>berblick",
"Overview": "Überblick",
"Details": "Details",
"Add Field": "Feld hinzuf<EFBFBD>gen",
"Add Dashlet": "Dashlet hinzuf<EFBFBD>gen",
"Add Field": "Feld hinzufügen",
"Add Dashlet": "Dashlet hinzufügen",
"Filter": "Filter",
"Edit Dashboard": "<EFBFBD>bersicht bearbeiten",
"Add": "Hinzuf<EFBFBD>gen",
"Add Item": "Eintrag hinzuf<EFBFBD>gen",
"Reset": "Zur<EFBFBD>cksetzen",
"Menu": "Men<EFBFBD>",
"Edit Dashboard": "Übersicht bearbeiten",
"Add": "Hinzufügen",
"Add Item": "Eintrag hinzufügen",
"Reset": "Zurücksetzen",
"Menu": "Menü",
"More": "Mehr",
"Search": "Suchen",
"Only My": "Nur Meine",
"Open": "Offen",
"Admin": "Admin",
"About": "<EFBFBD>ber",
"About": "Über",
"Refresh": "Aktualisieren",
"Remove": "L<EFBFBD>schen",
"Remove": "Löschen",
"Options": "Optionen",
"Username": "Benutzername",
"Password": "Passwort",
@@ -103,7 +103,7 @@
"Log Out": "Abmelden",
"Preferences": "Benutzereinstellungen",
"State": "Bundesland/Kanton",
"Street": "Stra<EFBFBD>e",
"Street": "Straße",
"Country": "Land",
"City": "Ort",
"PostalCode": "PLZ",
@@ -112,7 +112,7 @@
"Followers": "Beobachter",
"Clear Local Cache": "Lokalen Cache leeren",
"Actions": "Aktionen",
"Delete": "L<EFBFBD>schen",
"Delete": "Löschen",
"Update": "Aktualisieren",
"Save": "Speichern",
"Edit": "Bearbeiten",
@@ -120,32 +120,32 @@
"Cancel": "Abbrechen",
"Apply": "Anwenden",
"Unlink": "Link entfernen",
"Mass Update": "Massen<EFBFBD>nderung",
"Mass Update": "Massenänderung",
"Export": "Exportieren",
"No Data": "Keine Daten",
"No Access": "Kein Zugriff",
"All": "Alle",
"Active": "Aktiv",
"Inactive": "Inaktiv",
"Write your comment here": "Notiz hier einf<EFBFBD>gen",
"Write your comment here": "Notiz hier einfügen",
"Post": "Senden",
"Stream": "Vorg<EFBFBD>nge",
"Stream": "Vorgänge",
"Show more": "Mehr anzeigen",
"Dashlet Options": "Dashlet Optionen",
"Full Form": "Komplettes Formular",
"Insert": "Einf<EFBFBD>gen",
"Insert": "Einfügen",
"Person": "Person",
"First Name": "Vorname",
"Last Name": "Nachname",
"Original": "Original",
"You": "Sie",
"you": "Sie",
"change": "<EFBFBD>ndern",
"Change": "<EFBFBD>ndern",
"Primary": "Prim<EFBFBD>r",
"change": "ändern",
"Change": "Ändern",
"Primary": "Primär",
"Save Filter": "Filter speichern",
"Administration": "Administration",
"Run Import": "Import durchf<EFBFBD>hren",
"Run Import": "Import durchführen",
"Duplicate": "Duplizieren",
"Notifications": "Benachrichtigungen",
"Mark all read": "Alle als gelesen markieren",
@@ -153,12 +153,12 @@
"Today": "Heute",
"Tomorrow": "Morgen",
"Yesterday": "Gestern",
"Submit": "Ausf<EFBFBD>hren",
"Close": "Schlie<EFBFBD>en",
"Submit": "Ausführen",
"Close": "Schließen",
"Yes": "Ja",
"No": "Nein",
"View": "Ansehen",
"Select All Result": "Alle ausw<EFBFBD>hlen",
"Select All Result": "Alle auswählen",
"Value": "Wert",
"Current version": "Aktuelle Version",
"List View": "Listenansicht",
@@ -174,37 +174,37 @@
"messages": {
"pleaseWait": "Bitte warten...",
"confirmLeaveOutMessage": "Sind Sie sicher dass Sie das Formular verlassen wollen?",
"notModified": "Sie haben den Datensatz nicht ge<EFBFBD>ndert",
"duplicate": "Der Datensatz den Sie erstellen wollen, k<EFBFBD>nnte eine Dublette sein",
"fieldIsRequired": "{field} wird ben<EFBFBD>tigt",
"fieldShouldBeEmail": "{field} muss eine g<EFBFBD>ltige E-Mail sein",
"fieldShouldBeFloat": "{field} muss eine g<EFBFBD>ltige Flie<EFBFBD>komma Zahl sein",
"fieldShouldBeInt": "{field} muss eine g<EFBFBD>ltige Ganzzahl sein",
"fieldShouldBeDate": "{field} muss ein g<EFBFBD>ltiges Datum sein",
"fieldShouldBeDatetime": "{field} muss ein g<EFBFBD>ltiges Datum/Zeit Feld sein",
"notModified": "Sie haben den Datensatz nicht geändert",
"duplicate": "Der Datensatz den Sie erstellen wollen, könnte eine Dublette sein",
"fieldIsRequired": "{field} wird benötigt",
"fieldShouldBeEmail": "{field} muss eine gültige E-Mail sein",
"fieldShouldBeFloat": "{field} muss eine gültige Fließkomma Zahl sein",
"fieldShouldBeInt": "{field} muss eine gültige Ganzzahl sein",
"fieldShouldBeDate": "{field} muss ein gültiges Datum sein",
"fieldShouldBeDatetime": "{field} muss ein gültiges Datum/Zeit Feld sein",
"fieldShouldAfter": "{field} muss nach {otherField} sein",
"fieldShouldBefore": "{field} muss vor {otherField} sein",
"fieldShouldBeBetween": "{field} muss zwischen {min} und {max} sein",
"fieldShouldBeLess": "{field} muss kleiner als {value} sein",
"fieldShouldBeGreater": "{field} muss gr<EFBFBD><EFBFBD>er als {value} sein",
"fieldBadPasswordConfirm": "{field} falsch best<EFBFBD>tigt",
"resetPreferencesDone": "Die Einstellungen wurden auf Standardwerte zur<EFBFBD>ckgesetzt",
"fieldShouldBeGreater": "{field} muss größer als {value} sein",
"fieldBadPasswordConfirm": "{field} falsch bestätigt",
"resetPreferencesDone": "Die Einstellungen wurden auf Standardwerte zurückgesetzt",
"assignmentEmailNotificationSubject": "EspoCRM {entityType}: {Entity.name}",
"assignmentEmailNotificationBody": "{assignerUserName} hat Ihnen {entityType} '{Entity.name}' zugewiesen.\n\n{recordUrl}",
"confirmation": "Sind Sie sicher?",
"unlinkAllConfirmation": "Sind Sie sicher, dass Sie die Beziehungen zu allen verbundenen Datens<EFBFBD>tzen entfernen m<EFBFBD>chten?",
"resetPreferencesConfirmation": "Sind Sie sicher, dass Sie die Einstellungen auf Standardwerte zur<EFBFBD>cksetzen wollen?",
"removeRecordConfirmation": "Sind Sie sicher, dass Sie den Eintrag l<EFBFBD>schen wollen?",
"unlinkRecordConfirmation": "Sind Sie sicher, dass Sie die Beziehung zu dem verbundenen Datensatz entfernen m<EFBFBD>chten?",
"removeSelectedRecordsConfirmation": "Sind Sie sicher, dass Sie die ausgew<EFBFBD>hlten S<EFBFBD>tze l<EFBFBD>schen m<EFBFBD>chten?",
"massUpdateResult": "{count} Eintr<EFBFBD>ge wurden aktualisiert",
"unlinkAllConfirmation": "Sind Sie sicher, dass Sie die Beziehungen zu allen verbundenen Datensätzen entfernen möchten?",
"resetPreferencesConfirmation": "Sind Sie sicher, dass Sie die Einstellungen auf Standardwerte zurücksetzen wollen?",
"removeRecordConfirmation": "Sind Sie sicher, dass Sie den Eintrag löschen wollen?",
"unlinkRecordConfirmation": "Sind Sie sicher, dass Sie die Beziehung zu dem verbundenen Datensatz entfernen möchten?",
"removeSelectedRecordsConfirmation": "Sind Sie sicher, dass Sie die ausgewählten Sätze löschen möchten?",
"massUpdateResult": "{count} Einträge wurden aktualisiert",
"massUpdateResultSingle": "{count} Eintrag wurde aktualisiert",
"noRecordsUpdated": "Es wurden keine Eintr<EFBFBD>ge aktualisiert",
"massRemoveResult": "{count} Eintr<EFBFBD>ge wurden gel<EFBFBD>scht",
"massRemoveResultSingle": "{count} Eintrag wurde gel<EFBFBD>scht",
"noRecordsRemoved": "Es wurden keine Eintr<EFBFBD>ge gel<EFBFBD>scht",
"noRecordsUpdated": "Es wurden keine Einträge aktualisiert",
"massRemoveResult": "{count} Einträge wurden gelöscht",
"massRemoveResultSingle": "{count} Eintrag wurde gelöscht",
"noRecordsRemoved": "Es wurden keine Einträge gelöscht",
"clickToRefresh": "Klicken um zu aktualisieren",
"streamPostInfo": "Schreiben Sie <strong>@username</strong> um Benutzer in der Notiz hervorzuheben.\n\nVerf<EFBFBD>gbare Syntax:\n`<code>Code</code>`\n**<strong>fetter Text</strong>**\n*<em>Hervorgehobener Text</em>*\n~<del>Durchgestrichen</del>~\n> blockquote\n(url)[link]"
"streamPostInfo": "Schreiben Sie <strong>@username</strong> um Benutzer in der Notiz hervorzuheben.\n\nVerfügbare Syntax:\n`<code>Code</code>`\n**<strong>fetter Text</strong>**\n*<em>Hervorgehobener Text</em>*\n~<del>Durchgestrichen</del>~\n> blockquote\n(url)[link]"
},
"boolFilters": {
"onlyMy": "Nur Meine",
@@ -215,9 +215,9 @@
"all": "Alle"
},
"massActions": {
"remove": "L<EFBFBD>schen",
"merge": "Zusammenf<EFBFBD>hren",
"massUpdate": "Massen<EFBFBD>nderung",
"remove": "Löschen",
"merge": "Zusammenführen",
"massUpdate": "Massenänderung",
"export": "Exportieren"
},
"fields": {
@@ -230,16 +230,16 @@
"assignedUserName": "Zugewiesener Benutzername",
"teams": "Teams",
"createdAt": "Erstellt am",
"modifiedAt": "Ge<EFBFBD>ndert am",
"modifiedAt": "Geändert am",
"createdBy": "Erstellt von",
"modifiedBy": "Ge<EFBFBD>ndert von",
"modifiedBy": "Geändert von",
"description": "Beschreibung",
"address": "Adresse",
"phoneNumber": "Telefon",
"phoneNumberMobile": "Telefon (Mobil)",
"phoneNumberHome": "Telefon (Privat)",
"phoneNumberFax": "Telefon (Fax)",
"phoneNumberOffice": "Telefon (B<EFBFBD>ro)",
"phoneNumberOffice": "Telefon (Büro)",
"phoneNumberOther": "Telefon (Andere)",
"order": "Position",
"parent": "Bezieht sich auf",
@@ -248,7 +248,7 @@
"links": {
"assignedUser": "Zugewiesener Benutzer",
"createdBy": "Erstellt von",
"modifiedBy": "Ge<EFBFBD>ndert von",
"modifiedBy": "Geändert von",
"team": "Team",
"roles": "Rollen",
"teams": "Teams",
@@ -257,7 +257,7 @@
"children": "Kinder"
},
"dashlets": {
"Stream": "Vorg<EFBFBD>nge"
"Stream": "Vorgänge"
},
"notificationMessages": {
"assign": "{entityType} {entity} wurde Ihnen zugewiesen",
@@ -269,7 +269,7 @@
"createAssigned": "{user} hat {entityType} {entity} erstellt und an {assignee} zugewiesen",
"assign": "{user} hat {entityType} {entity} an {assignee} zugewiesen",
"post": "{user} hat zu {entityType} {entity} notiert",
"attach": "{user} hat zu {entityType} {entity} hinzugef<EFBFBD>gt",
"attach": "{user} hat zu {entityType} {entity} hinzugefügt",
"status": "{user} hat {field} von {entityType} {entity} aktualisiert",
"update": "{user} hat {entityType} {entity} aktualisiert",
"createRelated": "{user} hat {relatedEntityType} {relatedEntity} verbunden mit {entityType} {entity} erstellt",
@@ -280,7 +280,7 @@
"createAssignedThis": "{user} hat {entityType} erstellt und an {assignee} zugewiesen",
"assignThis": "{user} hat {entityType} an {assignee} zugewiesen",
"postThis": "{user} hat notiert",
"attachThis": "{user} hat hinzugef<EFBFBD>gt",
"attachThis": "{user} hat hinzugefügt",
"statusThis": "{user} hat {field} aktualisiert",
"updateThis": "{user} hat diese(s/n) {entityType} aktualisiert",
"createRelatedThis": "{user} hat {relatedEntityType} {relatedEntity} verbunden mit dieser/m {entityType} erstellt",
@@ -302,8 +302,8 @@
"emailSentThis": "{by} hat eine E-Mail gesendet"
},
"lists": {
"monthNames": ["Januar", "Februar", "M<EFBFBD>rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
"monthNamesShort": ["Jan", "Feb", "M<EFBFBD>r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
"monthNames": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
"monthNamesShort": ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
"dayNames": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
"dayNamesShort": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
"dayNamesMin": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]
@@ -325,7 +325,7 @@
"ca_ES": "Katalanisch",
"cs_CZ": "Tschechisch",
"cy_GB": "Walisisch",
"da_DK": "D<EFBFBD>nisch",
"da_DK": "Dänisch",
"de_DE": "Deutsch",
"el_GR": "Griechisch",
"en_GB": "Englisch (UK)",
@@ -335,19 +335,19 @@
"eu_ES": "Baskisch",
"fa_IR": "Persisch",
"fi_FI": "Finnisch",
"fo_FO": "F<EFBFBD>r<EFBFBD>isch",
"fr_CA": "Franz<EFBFBD>sisch (CN)",
"fr_FR": "Franz<EFBFBD>sisch (FR)",
"fo_FO": "Färöisch",
"fr_CA": "Französisch (CN)",
"fr_FR": "Französisch (FR)",
"ga_IE": "Irisch",
"gl_ES": "Galizisch",
"gn_PY": "Guarani",
"he_IL": "Hebr<EFBFBD>isch",
"he_IL": "Hebräisch",
"hi_IN": "Hindi",
"hr_HR": "Kroatisch",
"hu_HU": "Ungarisch",
"hy_AM": "Armenisch",
"id_ID": "Indonesisch",
"is_IS": "Isl<EFBFBD>ndisch",
"is_IS": "Isländisch",
"it_IT": "Italienisch",
"ja_JP": "Japanisch",
"ka_GE": "Georgisch",
@@ -359,16 +359,16 @@
"mk_MK": "Mazedonisch",
"ml_IN": "Malayalam",
"ms_MY": "Malaiisch",
"nb_NO":"Norwegian Bokmål",
"nb_NO": "Norwegisch Bokmál",
"nn_NO": "Norwegisch Nynorsk",
"ne_NP": "Nepali",
"nl_NL": "Niederl<EFBFBD>ndisch",
"nl_NL": "Niederländisch",
"pa_IN": "Punjabi",
"pl_PL": "Polnisch",
"ps_AF": "Pashto",
"pt_BR": "Portugiesisch (BR)",
"pt_PT": "Portugiesisch (PT)",
"ro_RO": "Rum<EFBFBD>nisch",
"ro_RO": "Rumänisch",
"ru_RU": "Russisch",
"sk_SK": "Slowakisch",
"sl_SI": "Slowenisch",
@@ -378,9 +378,9 @@
"sw_KE": "Suaheli",
"ta_IN": "Tamil",
"te_IN": "Telugu",
"th_TH": "Thail<EFBFBD>ndisch",
"th_TH": "Thailändisch",
"tl_PH": "Tagalog",
"tr_TR": "T<EFBFBD>kisch",
"tr_TR": "Tükisch",
"uk_UA": "Ukrainisch",
"ur_PK": "Urdu",
"vi_VN": "Vietnamesisch",
@@ -405,7 +405,7 @@
"lastYear": "Letztes Jahr",
"lastSevenDays": "Letzten 7 Tage",
"lastXDays": "Letzten X Tage",
"nextXDays": "N<EFBFBD>chsten X Tage"
"nextXDays": "Nächsten X Tage"
},
"searchRanges": {
"is": "Ist",
@@ -415,14 +415,14 @@
"varcharSearchRanges": {
"equals": "Gleich",
"startsWith": "Beginnt mit",
"contains": "Enth<EFBFBD>lt"
"contains": "Enthält"
},
"intSearchRanges": {
"equals": "Gleich",
"notEquals": "Nicht gleich",
"greaterThan": "Gr<EFBFBD><EFBFBD>er als",
"greaterThan": "Größer als",
"lessThan": "Weniger als",
"greaterThanOrEquals": "Gr<EFBFBD><EFBFBD>er oder gleich als",
"greaterThanOrEquals": "Größer oder gleich als",
"lessThanOrEquals": "Weniger oder gleich als",
"between": "Zwischen"
},
@@ -436,7 +436,7 @@
},
"phoneNumber": {
"Mobile": "Telefon Mobil",
"Office": "Telefon B<EFBFBD>ro",
"Office": "Telefon Büro",
"Fax": "Fax",
"Home": "Telefon Privat",
"Other": "Andere"
@@ -444,44 +444,44 @@
},
"sets": {
"summernote": {
"NOTICE": "Sie finden die <EFBFBD>bersetzung hier: https://github.com/HackerWins/summernote/tree/master/lang",
"NOTICE": "Sie finden die Übersetzung hier: https://github.com/HackerWins/summernote/tree/master/lang",
"font":{
"bold": "Fett",
"italic": "Kursiv",
"underline": "Unterstrichen",
"strike": "Durchgestrichen",
"clear": "Font Stil entfernen",
"height": "Zeilenh<EFBFBD>he",
"height": "Zeilenhöhe",
"name": "Schriftfamilie",
"size": "Schriftgr<EFBFBD><EFBFBD>e"
"size": "Schriftgröße"
},
"image":{
"image": "Bild",
"insert": "Bild einf<EFBFBD>gen",
"resizeFull": "Originalgr<EFBFBD><EFBFBD>e",
"resizeHalf": "Gr<EFBFBD><EFBFBD>e 1/2",
"resizeQuarter": "Gr<EFBFBD><EFBFBD>e 1/4",
"floatLeft": "Linksb<EFBFBD>ndig",
"floatRight": "Rechtsb<EFBFBD>ndig",
"insert": "Bild einfügen",
"resizeFull": "Originalgröße",
"resizeHalf": "Größe 1/2",
"resizeQuarter": "Größe 1/4",
"floatLeft": "Linksbündig",
"floatRight": "Rechtsbündig",
"floatNone": "Kein Textfluss",
"dragImageHere": "Ziehen Sie ein Bild mit der Maus hierher",
"selectFromFiles": "W<EFBFBD>hlen Sie eine Datei aus",
"selectFromFiles": "Wählen Sie eine Datei aus",
"url": "Grafik URL",
"remove": "Grafik entfernen"
},
"link":{
"link": "Link",
"insert": "Link einf<EFBFBD>gen",
"insert": "Link einfügen",
"unlink": "Link entfernen",
"edit": "Bearbeiten",
"textToDisplay": "Anzeigetext",
"url": "Ziel des Links?",
"openInNewWindow": "In einem neuen Fenster <EFBFBD>ffnen"
"openInNewWindow": "In einem neuen Fenster öffnen"
},
"video":{
"video": "Video",
"videoLink": "Video Link",
"insert": "Video einf<EFBFBD>gen",
"insert": "Video einfügen",
"url": "Video URL?",
"providers": "(YouTube, Vimeo, Vine, Instagram oder DailyMotion)"
},
@@ -489,19 +489,19 @@
"table": "Tabelle"
},
"hr":{
"insert": "Eine horizontale Linie einf<EFBFBD>gen"
"insert": "Eine horizontale Linie einfügen"
},
"style":{
"style": "Stil",
"normal": "Normal",
"blockquote": "Zitat",
"pre": "Quellcode",
"h1": "<EFBFBD>berschrift 1",
"h2": "<EFBFBD>berschrift 2",
"h3": "<EFBFBD>berschrift 3",
"h4": "<EFBFBD>berschrift 4",
"h5": "<EFBFBD>berschrift 5",
"h6": "<EFBFBD>berschrift 6"
"h1": "Überschrift 1",
"h2": "Überschrift 2",
"h3": "Überschrift 3",
"h4": "Überschrift 4",
"h5": "Überschrift 5",
"h6": "Überschrift 6"
},
"lists":{
"unordered": "Unsortierte Liste",
@@ -514,8 +514,8 @@
},
"paragraph":{
"paragraph": "Absatz",
"outdent": "Ausr<EFBFBD>ckung",
"indent": "Einr<EFBFBD>ckung",
"outdent": "Ausrückung",
"indent": "Einrückung",
"left": "Links ausrichten",
"center": "Zentriert ausrichten",
"right": "Rechts ausrichten",
@@ -528,19 +528,19 @@
"foreground": "Schriftfarbe",
"transparent": "Transparenz",
"setTransparent": "Transparenz setzen",
"reset": "Zur<EFBFBD>cksetzen",
"resetToDefault": "Zur<EFBFBD>cksetzen auf Standard"
"reset": "Zurücksetzen",
"resetToDefault": "Zurücksetzen auf Standard"
},
"shortcut":{
"shortcuts": "Tastaturk<EFBFBD>rzel",
"close": "Schlie<EFBFBD>en",
"shortcuts": "Tastaturkürzel",
"close": "Schließen",
"textFormatting": "Textformatierung",
"action": "Aktion",
"paragraphFormatting": "Absatzformatierung",
"documentStyle": "Dokumentenstil"
},
"history":{
"undo": "R<EFBFBD>ckg<EFBFBD>ngig",
"undo": "Rückgängig",
"redo": "Wiederholen"
}
}

View File

@@ -1,16 +1,16 @@
{
"labels": {
"Revert Import": "Import r<EFBFBD>ckg<EFBFBD>ngig machen",
"Return to Import": "Zur<EFBFBD>ck zum Import",
"Run Import": "Import durchf<EFBFBD>hren",
"Back": "Zur<EFBFBD>ck",
"Revert Import": "Import rückgängig machen",
"Return to Import": "Zurück zum Import",
"Run Import": "Import durchführen",
"Back": "Zurück",
"Field Mapping": "Feldzuordnung",
"Default Values": "Standardwerte",
"Add Field": "Feld hinzuf<EFBFBD>gen",
"Add Field": "Feld hinzufügen",
"Created": "Erstellt",
"Updated": "Aktualisiert",
"Result": "Resultat",
"Show records": "Datens<EFBFBD>tze zeigen",
"Show records": "Datensätze zeigen",
"Remove Duplicates": "Duplikate entfernen",
"importedCount": "Importiert (Anzahl)",
"duplicateCount": "Duplicate (Anzahl)",
@@ -18,7 +18,8 @@
"Create Only": "Nur erstellen",
"Create and Update": "Erstellen und aktualisieren",
"Update Only": "Nur aktualisieren",
"Update by": "Aktualisieren durch"
"Update by": "Aktualisieren durch",
"File (CSV)": "Datei (CSV)"
},
"messages": {
"utf8": "Sollte UTF-8 kodiert sein",
@@ -26,9 +27,9 @@
},
"fields": {
"file": "Datei",
"entityType": "Entit<EFBFBD>tstyp",
"imported": "Importierte Datens<EFBFBD>tze",
"duplicates": "Doppelte Datens<EFBFBD>tze",
"updated": "Aktualisierte Datens<EFBFBD>tze"
"entityType": "Entitätstyp",
"imported": "Importierte Datensätze",
"duplicates": "Doppelte Datensätze",
"updated": "Aktualisierte Datensätze"
}
}

View File

@@ -4,12 +4,12 @@
"emailAddress": "E-Mail Adresse",
"team": "Team",
"status": "Status",
"assignToUser": "Mit Benutzer verkn<EFBFBD>pfen",
"assignToUser": "Mit Benutzer verknüpfen",
"host": "Host",
"username": "Benutzername",
"password": "Passwort",
"port": "Port",
"monitoredFolders": "<EFBFBD>berwachte Ordner",
"monitoredFolders": "Überwachte Ordner",
"trashFolder": "Papierkorb Ordner",
"ssl": "SSL",
"createCase": "Fall erstellen",
@@ -22,13 +22,13 @@
"targetUserPosition": "Position Zielbenutzer"
},
"tooltips": {
"reply": "E-Mail Absender informieren, dass die E-Mail empfangen wurde.\n\nEs wird pro Zeitabschnitt nur eine E-Mail an einen bestimmten Empf<EFBFBD>nger gesendet um Schleifen zu vermeiden.",
"reply": "E-Mail Absender informieren, dass die E-Mail empfangen wurde.\n\nEs wird pro Zeitabschnitt nur eine E-Mail an einen bestimmten Empfänger gesendet um Schleifen zu vermeiden.",
"createCase": "Fall aus eingehender E-Mail automatisch erstellen.",
"replyToAddress": "Geben Sie die E-Mail Adresse dieser Mailbox an um Antworten hier zu empfangen.",
"caseDistribution": "Wie F<EFBFBD>lle zugewiesen werden. Entweder direkt dem Benutzer oder im Team.",
"assignToUser": "Benutzer E-Mails/F<EFBFBD>lle werden zugewiesen an",
"team": "Team E-Mails/F<EFBFBD>lle werden verkn<EFBFBD>pft mit",
"targetUserPosition": "Bestimmen Sie die Position der Benutzer die F<EFBFBD>lle zugewiesen bekommen."
"caseDistribution": "Wie Fälle zugewiesen werden. Entweder direkt dem Benutzer oder im Team.",
"assignToUser": "Benutzer E-Mails/Fälle werden zugewiesen an",
"team": "Team E-Mails/Fälle werden verknüpft mit",
"targetUserPosition": "Bestimmen Sie die Position der Benutzer die Fälle zugewiesen bekommen."
},
"links": {
"filters": "Filter"

View File

@@ -6,10 +6,10 @@
"redirectUri": "Redirect URI"
},
"messages": {
"selectIntegration": "W<EFBFBD>hlen Sie eine Integration aus dem Men<EFBFBD>.",
"noIntegrations": "Keine Integration verf<EFBFBD>gbar."
"selectIntegration": "Wählen Sie eine Integration aus dem Menü.",
"noIntegrations": "Keine Integration verfügbar."
},
"help": {
"Google": "<p><b>Holen Sie die OAuth 2.0 Credentials <EFBFBD>ber die Google Developers Console.</b></p><p>Visit <a href=\"https://console.developers.google.com/project\">Google Developers Console</a> um OAuth 2.0 Credentials wie eine Client ID und Client Geheimnis zu erhalten die sowohl Google als auch EspoCRM bekannt sind.</p>"
"Google": "<p><b>Holen Sie die OAuth 2.0 Credentials über die Google Developers Console.</b></p><p>Visit <a href=\"https://console.developers.google.com/project\">Google Developers Console</a> um OAuth 2.0 Credentials wie eine Client ID und Client Geheimnis zu erhalten die sowohl Google als auch EspoCRM bekannt sind.</p>"
}
}

View File

@@ -1,7 +1,7 @@
{
"fields": {
"status": "Status",
"executeTime": "Ausf<EFBFBD>hren um",
"executeTime": "Ausführen um",
"attempts": "Verbleibende Versuche",
"failedAttempts": "Fehlgeschlagene Versuche",
"serviceName": "Service",
@@ -13,7 +13,7 @@
"status": {
"Pending": "Schwebend",
"Success": "Erfolg",
"Running": "L<EFBFBD>uft",
"Running": "Läuft",
"Failed": "Fehlgeschlagen"
}
}

View File

@@ -1,7 +1,7 @@
{
"fields": {
"post": "Senden",
"attachments": "Anh<EFBFBD>nge"
"attachments": "Anhänge"
},
"filters": {
"all": "Alle",

View File

@@ -6,8 +6,8 @@
"weekStart": "Erster Tag der Woche",
"thousandSeparator": "Tausender Trennzeichen",
"decimalMark": "Dezimaltrennzeichen",
"defaultCurrency": "Standardw<EFBFBD>hrung",
"currencyList": "W<EFBFBD>hrungsliste",
"defaultCurrency": "Standardwährung",
"currencyList": "Währungsliste",
"language": "Sprache",
"smtpServer": "Server",
"smtpPort": "Port",
@@ -37,12 +37,12 @@
},
"labels": {
"Notifications": "Benachrichtigungen",
"User Interface": "Benutzeroberfl<EFBFBD>che",
"User Interface": "Benutzeroberfläche",
"SMTP": "SMTP",
"Misc": "Verschiedenes",
"Locale": "Lokale Einstellungen"
},
"tooltips": {
"autoFollowEntityTypeList": "Der Benutzer beobachtet alle neuen Eintr<EFBFBD>ge der gew<EFBFBD>hlten Entit<EFBFBD>t, sieht Neuigkeiten in den Vorg<EFBFBD>ngen und erh<EFBFBD>lt Benachrichtigungen."
"autoFollowEntityTypeList": "Der Benutzer beobachtet alle neuen Einträge der gewählten Entität, sieht Neuigkeiten in den Vorgängen und erhält Benachrichtigungen."
}
}

View File

@@ -10,8 +10,8 @@
"teams": "Teams"
},
"tooltips": {
"assignmentPermission": "Erm<EFBFBD>glicht das Recht der Zuweisung von Datens<EFBFBD>tzen an andere Benutzer zu beschr<EFBFBD>nken\n\nAlle - Keine Einschr<EFBFBD>nkung\n\nTeam - Kann an Benutzer des eigenen Teams zuweisen\n\nNein - Kann nur sich selbst zuweisen",
"userPermission": "Erlaubt Benutzern die Aktivit<EFBFBD>ten anderer Benutzer zu sehen.\n\nAlle - Kann alle sehen\n\nTeam - Kann nur Aktivit<EFBFBD>ten der Benutzer im eigenen Team sehen\n\nNein - Kann keine anderen Aktivit<EFBFBD>ten sehen"
"assignmentPermission": "Ermöglicht das Recht der Zuweisung von Datensätzen an andere Benutzer zu beschränken\n\nAlle - Keine Einschränkung\n\nTeam - Kann an Benutzer des eigenen Teams zuweisen\n\nNein - Kann nur sich selbst zuweisen",
"userPermission": "Erlaubt Benutzern die Aktivitäten anderer Benutzer zu sehen.\n\nAlle - Kann alle sehen\n\nTeam - Kann nur Aktivitäten der Benutzer im eigenen Team sehen\n\nNein - Kann keine anderen Aktivitäten sehen"
},
"labels": {
"Access": "Zugang",
@@ -34,9 +34,9 @@
"actions": {
"read": "Lesen",
"edit": "Bearbeiten",
"delete": "L<EFBFBD>schen"
"delete": "Löschen"
},
"messages": {
"changesAfterClearCache": "Alle <EFBFBD>nderungen werden erst nach Leeren des Caches wirksam."
"changesAfterClearCache": "Alle Änderungen werden erst nach Leeren des Caches wirksam."
}
}

View File

@@ -13,16 +13,16 @@
},
"options": {
"job": {
"Cleanup": "Aufr<EFBFBD>umen",
"CheckInboundEmails": "Gruppen E-Mail Konten <EFBFBD>berpr<EFBFBD>fen",
"CheckEmailAccounts": "Pers<EFBFBD>nliche E-Mail Konten pr<EFBFBD>fen",
"Cleanup": "Aufräumen",
"CheckInboundEmails": "Gruppen E-Mail Konten überprüfen",
"CheckEmailAccounts": "Persönliche E-Mail Konten prüfen",
"SendEmailReminders": "E-Mail Erinnerungen senden"
},
"cronSetup": {
"linux": "Hinweis: F<EFBFBD>gen Sie diese Zeile zu Ihrer Crontab Datei hinzu, um geplante Aufgaben durchf<EFBFBD>hren zu k<EFBFBD>nnen:",
"mac": "Hinweis: F<EFBFBD>gen Sie diese Zeile zu Ihrer Crontab Datei hinzu, um geplante Aufgaben durchf<EFBFBD>hren zu k<EFBFBD>nnen:",
"windows": "Hinweis: Erstellen Sie eine Stapeldatei mit den folgenden Kommandos um geplante Aufgaben mit dem Windows Aufgabenplaner durchzuf<EFBFBD>hren:",
"default": "Hinweis: f<EFBFBD>gen Sie dieses Kommando zum CronJob hinzu (Geplante Aufgaben):"
"linux": "Hinweis: Fügen Sie diese Zeile zu Ihrer Crontab Datei hinzu, um geplante Aufgaben durchführen zu können:",
"mac": "Hinweis: Fügen Sie diese Zeile zu Ihrer Crontab Datei hinzu, um geplante Aufgaben durchführen zu können:",
"windows": "Hinweis: Erstellen Sie eine Stapeldatei mit den folgenden Kommandos um geplante Aufgaben mit dem Windows Aufgabenplaner durchzuführen:",
"default": "Hinweis: fügen Sie dieses Kommando zum CronJob hinzu (Geplante Aufgaben):"
},
"status": {
"Active": "Aktiv",
@@ -30,6 +30,6 @@
}
},
"tooltips": {
"scheduling": "Definiert wann und wie oft ein Job l<EFBFBD>uft\n\n*/5 * * * * - alle 5 Minuten\n\n0 */2 * * * - alle 2 Stunden\n\n30 1 * * * - um 01:30 einmal am Tag\n\n0 0 1 * * - am ersten Tag des Monats"
"scheduling": "Definiert wann und wie oft ein Job läuft\n\n*/5 * * * * - alle 5 Minuten\n\n0 */2 * * * - alle 2 Stunden\n\n30 1 * * * - um 01:30 einmal am Tag\n\n0 0 1 * * - am ersten Tag des Monats"
}
}

View File

@@ -1,6 +1,6 @@
{
"fields": {
"status": "Status",
"executionTime": "Ausf<EFBFBD>hrungszeit"
"executionTime": "Ausführungszeit"
}
}

View File

@@ -7,10 +7,10 @@
"weekStart": "Erster Tag der Woche",
"thousandSeparator": "Tausender Trennzeichen",
"decimalMark": "Dezimaltrennzeichen",
"defaultCurrency": "Standardw<EFBFBD>hrung",
"baseCurrency": "Basisw<EFBFBD>hrung",
"defaultCurrency": "Standardwährung",
"baseCurrency": "Basiswährung",
"currencyRates": "Wechselkurse",
"currencyList": "W<EFBFBD>hrungsliste",
"currencyList": "Währungsliste",
"language": "Sprache",
"companyLogo": "Firmenlogo",
"smtpServer": "Server",
@@ -23,12 +23,12 @@
"outboundEmailFromName": "Von Name",
"outboundEmailFromAddress": "Von Adresse",
"outboundEmailIsShared": "Kann von allen Benutzern verwendet werden",
"recordsPerPage": "Datens<EFBFBD>tze pro Seite",
"recordsPerPageSmall": "Datens<EFBFBD>tze pro Seite (Klein)",
"recordsPerPage": "Datensätze pro Seite",
"recordsPerPageSmall": "Datensätze pro Seite (Klein)",
"tabList": "Reiter Liste",
"quickCreateList": "Liste Schnellerstellung",
"exportDelimiter": "Export Trennzeichen",
"globalSearchEntityList": "Modul-/Entit<EFBFBD>tsliste globale Suche",
"globalSearchEntityList": "Modul-/Entitätsliste globale Suche",
"authenticationMethod": "Authentifizierungs Methode",
"ldapHost": "Host",
"ldapPort": "Port",
@@ -46,17 +46,20 @@
"ldapAccountDomainNameShort": "Domain Name Konto kurz",
"ldapOptReferrals": "Opt Referrals",
"exportDisabled": "Export deaktivieren (nur Admin ist berechtigt)",
"assignmentNotificationsEntityList": "Entit<EFBFBD>ten <EFBFBD>ber die bei Zuweisung benachrichtigt werden soll",
"assignmentNotificationsEntityList": "Entitäten über die bei Zuweisung benachrichtigt werden soll",
"assignmentEmailNotifications": "E-Mail Nachrichten bei Zuweisungen senden",
"assignmentEmailNotificationsEntityList": "Entit<EFBFBD>ten <EFBFBD>ber die mit E-Mail bei Zuweisung benachrichtigt werden soll",
"assignmentEmailNotificationsEntityList": "Entitäten über die mit E-Mail bei Zuweisung benachrichtigt werden soll",
"b2cMode": "B2C Modus",
"avatarsDisabled": "Avatare deaktivieren",
"followCreatedEntities": "Erstellten Eintr<EFBFBD>gen beobachten",
"followCreatedEntities": "Erstellten Einträgen beobachten",
"displayListViewRecordCount": "Gesamtanzahl anzeigen (in Listenansicht)",
"theme": "Design",
"userThemesDisabled": "Benutzerdesigns deaktivieren",
"emailMessageMaxSize": "Max. E-Mail Gr<EFBFBD><EFBFBD>e (Mb)",
"massEmailMaxPerHourCount": "Max. Anzahl E-Mails pro Stunde"
"emailMessageMaxSize": "Max. E-Mail Größe (Mb)",
"massEmailMaxPerHourCount": "Max. Anzahl E-Mails pro Stunde",
"personalEmailMaxPortionSize": "Max email portion size for a personal account fetching",
"inboundEmailMaxPortionSize": "Max email portion size for a group account fetching",
"maxEmailAccountCount": "Max count of personal email accounts per user"
},
"options": {
"weekStart": {
@@ -65,10 +68,10 @@
}
},
"tooltips": {
"recordsPerPageSmall": "Anzahl S<EFBFBD>tze in Beziehungssubpanels",
"outboundEmailIsShared": "Benutzern gestatten, E-Mails <EFBFBD>ber dieses SMTP Konto zu senden",
"followCreatedEntities": "Benutzer folgen automatisch jenen S<EFBFBD>tzen die sie erstellt haben",
"emailMessageMaxSize": "Alle eingehenden E-Mails die eine angegebene Gr<EFBFBD><EFBFBD>e <EFBFBD>bersteigen, werden <EFBFBD>bersprungen "
"recordsPerPageSmall": "Anzahl Sätze in Beziehungssubpanels",
"outboundEmailIsShared": "Benutzern gestatten, E-Mails über dieses SMTP Konto zu senden",
"followCreatedEntities": "Benutzer folgen automatisch jenen Sätzen die sie erstellt haben",
"emailMessageMaxSize": "Alle eingehenden E-Mails die eine angegebene Größe übersteigen, werden übersprungen "
},
"labels": {
"System": "System",
@@ -77,8 +80,8 @@
"Configuration": "Konfiguration",
"In-app Notifications": "In-App Benachrichtigungen",
"Email Notifications": "E-Mail Benachrichtigungen",
"Currency Settings": "W<EFBFBD>hrunsgseinstellungen",
"Currency Rates": "W<EFBFBD>hrungskurse",
"Currency Settings": "Währunsgseinstellungen",
"Currency Rates": "Währungskurse",
"Mass Email": "Massen E-Mails"
}
}

View File

@@ -8,8 +8,8 @@
"users": "Benutzer"
},
"tooltips": {
"roles": "Zugriffsrollen Benutzer dieses Teams erhalten Zugriffsberechtigung von ausgew<EFBFBD>hlten Rollen",
"positionList": "Verf<EFBFBD>gbare Positionen in diesem Team Z.B. Verk<EFBFBD>ufer, Manager etc."
"roles": "Zugriffsrollen Benutzer dieses Teams erhalten Zugriffsberechtigung von ausgewählten Rollen",
"positionList": "Verfügbare Positionen in diesem Team Z.B. Verkäufer, Manager etc."
},
"labels": {
"Create Team": "Team erstellen"

View File

@@ -2,15 +2,15 @@
"fields": {
"name": "Name",
"body": "Inhalt",
"entityType": "Entit<EFBFBD>tstyp",
"entityType": "Entitätstyp",
"header": "Kopf",
"footer": "Fu<EFBFBD>",
"footer": "Fuß",
"leftMargin": "Linker Rand",
"topMargin": "Oberer Rand",
"rightMargin": "Rechter Rand",
"bottomMargin": "Unterer Rand",
"printFooter": "Fu<EFBFBD> drucken",
"footerPosition": "Position Fu<EFBFBD>"
"printFooter": "Fuß drucken",
"footerPosition": "Position Fuß"
},
"links": {
},

View File

@@ -11,9 +11,9 @@
"teamRole": "Position",
"password": "Passwort",
"currentPassword": "Aktuelles Passwort",
"passwordConfirm": "Passwort best<EFBFBD>tigen",
"passwordConfirm": "Passwort bestätigen",
"newPassword": "Neues Passwort",
"newPasswordConfirm": "Neues Passwort best<EFBFBD>tigen",
"newPasswordConfirm": "Neues Passwort bestätigen",
"avatar": "Avatar",
"isActive": "Ist aktiv"
},
@@ -26,36 +26,36 @@
"Generate": "Erzeugen",
"Access": "Zugang",
"Preferences": "Benutzereinstellungen",
"Change Password": "Passwort <EFBFBD>ndern",
"Change Password": "Passwort ändern",
"Teams and Access Control": "Teams und Zugriffsberechtigung",
"Forgot Password?": "Passwort vergessen?",
"Password Change Request": "Anforderung zur Passwort<EFBFBD>nderung",
"Password Change Request": "Anforderung zur Passwortänderung",
"Email Address": "E-Mail Adresse",
"External Accounts": "Externe Konten",
"Email Accounts": "E-Mail Konten"
},
"tooltips": {
"defaultTeam": "Alle Datens<EFBFBD>tze dieses Benutzers werden standardm<EFBFBD><EFBFBD>ig seinem Team zugeordnet.",
"defaultTeam": "Alle Datensätze dieses Benutzers werden standardmäßig seinem Team zugeordnet.",
"userName": "Buchstaben a-z, Zahlen 0-9 und Unterstriche sind erlaubt.",
"isAdmin": "Der Admin Benutzer hat vollen Zugriff auf alle Funktionen.",
"isActive": "Wenn nicht markiert kann der Benutzer nicht einloggen",
"teams": "Das Team zu dem dieser Benutzer geh<EFBFBD>rt. Die Zugriffsberechtigung wird von der Team Rolle vererbt.",
"roles": "Zus<EFBFBD>tzliche Zugriffsrollen. Wenn ein Benutzer zu keinem Team geh<EFBFBD>rt oder wenn Sie die Zugriffsberechtigung nur f<EFBFBD>r diesen Benutzer erweitern wollen."
"teams": "Das Team zu dem dieser Benutzer gehört. Die Zugriffsberechtigung wird von der Team Rolle vererbt.",
"roles": "Zusätzliche Zugriffsrollen. Wenn ein Benutzer zu keinem Team gehört oder wenn Sie die Zugriffsberechtigung nur für diesen Benutzer erweitern wollen."
},
"messages": {
"passwordWillBeSent": "Das Passwort wird an die E-Mail Adresse des Benutzers gesendet",
"accountInfoEmailSubject": "EspoCRM Benutzerzugriffsinfo",
"accountInfoEmailBody": "Ihre EspoCRM Zugriffsinformation:\n\nBenutzername: {userName}\nPasswort: {password}\n\n{siteUrl}",
"passwordChangeLinkEmailSubject": "Anforderung zur Passwort<EFBFBD>nderung",
"passwordChangeLinkEmailBody": "Sie k<EFBFBD>nnen Ihr Passwort <EFBFBD>ber diesen Link {link} <EFBFBD>ndern Diese eindeutige URL ist nur f<EFBFBD>r kurze Zeit g<EFBFBD>ltig.",
"passwordChanged": "Das Passwort wurde ge<EFBFBD>ndert",
"passwordChangeLinkEmailSubject": "Anforderung zur Passwortänderung",
"passwordChangeLinkEmailBody": "Sie können Ihr Passwort über diesen Link {link} ändern Diese eindeutige URL ist nur für kurze Zeit gültig.",
"passwordChanged": "Das Passwort wurde geändert",
"userCantBeEmpty": "Der Benutzername darf nicht leer sein!",
"wrongUsernamePasword": "Falscher Benutzername/Passwort",
"emailAddressCantBeEmpty": "E-Mail Adresse darf nicht leer sein",
"userNameEmailAddressNotFound": "Benutzername oder E-Mail Adresse nicht gefunden",
"forbidden": "Verboten, bitte sp<EFBFBD>ter nochmals versuchen",
"forbidden": "Verboten, bitte später nochmals versuchen",
"uniqueLinkHasBeenSent": "Ein einmaliger Link wurde an die angegebene E-Mail Adresse gesendet.",
"passwordChangedByRequest": "Das Passwort wurde ge<EFBFBD>ndert"
"passwordChangedByRequest": "Das Passwort wurde geändert"
},
"boolFilters": {
"onlyMyTeam": "Nur mein Team"

View File

@@ -12,8 +12,8 @@
"name": "Just a name of the filter.",
"subject": "Use wildcard *:\n\ntext* - starts with text,\n*text* - contains text,\n*text - ends with text.",
"bodyContains": "Body of email contains any of specified words or phrases.",
"from": "Emails being sent from the specified address. Leave empty if not needed.",
"to": "Emails being sent to the specified address. Leave empty if not needed.",
"from": "Emails being sent from the specified address. Leave empty if not needed. You can use wildcard *.",
"to": "Emails being sent to the specified address. Leave empty if not needed. You can use wildcard *.",
"parent": "Leave it empty to apply this filter globally (to all incoming emails)."
}
}

View File

@@ -39,6 +39,7 @@
},
"messages": {
"entityCreated": "Entity has been created",
"linkAlreadyExists": "Link name conflict."
"linkAlreadyExists": "Link name conflict.",
"linkConflict": "Link with the same name already exists."
}
}

View File

@@ -18,7 +18,8 @@
"Create Only": "Create Only",
"Create and Update": "Create & Update",
"Update Only": "Update Only",
"Update by": "Update by"
"Update by": "Update by",
"File (CSV)": "File (CSV)"
},
"messages": {
"utf8": "Should be UTF-8 encoded",

View File

@@ -1,3 +1,4 @@
[
{"name": "name", "width": 90, "link": true}
{"name": "name", "link": true},
{"name": "assignedUser", "width": 20}
]

View File

@@ -0,0 +1,4 @@
[
{"name": "name", "link": true},
{"name": "assignedUser", "width": 30}
]

View File

@@ -43,10 +43,6 @@
{
"name": "defaultReminders"
}
],
[
{"name":"theme"},
false
]
]
},

View File

@@ -6,21 +6,17 @@
[
{
"name": "Stream",
"id": "d0004"
},
{
"name": "Calls",
"id": "d0001"
"id": "defaultStream"
}
],
[
{
"name": "Tasks",
"id": "d0003"
"id": "defaultTasks"
},
{
"name": "Meetings",
"id": "d0002"
"name": "Activities",
"id": "defailtActivities"
}
]
]

View File

@@ -0,0 +1,8 @@
{
"Standard": {
"defaultStream": {
"isDoubleHeight": true,
"displayRecords": 10
}
}
}

View File

@@ -177,6 +177,12 @@
"default": false,
"readOnly": true
},
"isJustSent": {
"type": "bool",
"default": false,
"disabled": true,
"notStorable": true
},
"teams": {
"type": "linkMultiple"
},

View File

@@ -9,12 +9,14 @@
"from": {
"type": "varchar",
"maxLength": 255,
"tooltip": true
"tooltip": true,
"trim": true
},
"to": {
"type": "varchar",
"maxLength": 255,
"tooltip": true
"tooltip": true,
"trim": true
},
"subject": {
"type": "varchar",

View File

@@ -87,12 +87,11 @@
},
{
"route":"/GlobalSearch/:query",
"route":"/GlobalSearch",
"method":"get",
"params":{
"controller":"GlobalSearch",
"action":"search",
"query": ":query"
"action":"search"
}
},

View File

@@ -131,6 +131,8 @@ class Email extends Record
$this->getStreamService()->noteEmailSent($parent, $entity);
}
$entity->set('isJustSent', true);
$this->getEntityManager()->saveEntity($entity);
}

View File

@@ -36,6 +36,7 @@ class EmailTemplate extends Record
{
$this->dependencies[] = 'fileManager';
$this->dependencies[] = 'dateTime';
$this->dependencies[] = 'language';
}
protected function getFileManager()
@@ -48,6 +49,11 @@ class EmailTemplate extends Record
return $this->injections['dateTime'];
}
protected function getLanguage()
{
return $this->getInjection('language');
}
public function parseTemplate(Entity $emailTemplate, array $params = array(), $copyAttachments = false)
{
$entityHash = array();
@@ -154,17 +160,22 @@ class EmailTemplate extends Record
protected function parseText($type, Entity $entity, $text)
{
$fieldList = array_keys($entity->getFields());
$fieldList[] = $id;
foreach ($fieldList as $field) {
$value = $entity->get($field);
if (is_object($value)) {
continue;
}
if ($entity->fields[$field]['type'] == 'date') {
$value = $this->getDateTime()->convertSystemDateToGlobal($value);
} else if ($entity->fields[$field]['type'] == 'datetime') {
$value = $this->getDateTime()->convertSystemDateTimeToGlobal($value);
$fieldType = $this->getMetadata()->get('entityDefs.' . $entity->getEntityType() .'.fields.' . $field . '.type');
if ($fieldType === 'enum') {
$value = $this->getLanguage()->translateOption($value, $field, $entity->getEntityType());
} else {
if ($entity->fields[$field]['type'] == 'date') {
$value = $this->getDateTime()->convertSystemDateToGlobal($value);
} else if ($entity->fields[$field]['type'] == 'datetime') {
$value = $this->getDateTime()->convertSystemDateTimeToGlobal($value);
}
}
$text = str_replace('{' . $type . '.' . $field . '}', $value, $text);
}

View File

@@ -95,7 +95,15 @@ class GlobalSearch extends \Espo\Core\Services\Base
$row = $sth->fetch(\PDO::FETCH_ASSOC);
$totalCount = $row['COUNT'];
$unionSql .= " ORDER BY name";
if (count($entityTypeList)) {
$entityListQuoted = [];
foreach ($entityTypeList as $entityType) {
$entityListQuoted[] = $pdo->quote($entityType);
}
$unionSql .= " ORDER BY FIELD(entityType, ".implode(', ', $entityListQuoted)."), name";
} else {
$unionSql .= " ORDER BY name";
}
$unionSql .= " LIMIT :offset, :maxSize";
$sth = $pdo->prepare($unionSql);

View File

@@ -257,7 +257,7 @@ class Import extends \Espo\Services\Record
return true;
}
public function import($scope, array $fields, $attachmentId, array $params = array())
public function import($scope, array $importFieldList, $attachmentId, array $params = array())
{
$delimiter = ',';
if (!empty($params['fieldDelimiter'])) {
@@ -297,7 +297,7 @@ class Import extends \Espo\Services\Record
if (count($arr) == 1 && empty($arr[0])) {
continue;
}
$r = $this->importRow($scope, $fields, $arr, $params);
$r = $this->importRow($scope, $importFieldList, $arr, $params);
if (empty($r)) {
continue;
}
@@ -334,7 +334,7 @@ class Import extends \Espo\Services\Record
);
}
public function importRow($scope, array $fields, array $row, array $params = array())
public function importRow($scope, array $importFieldList, array $row, array $params = array())
{
$id = null;
$action = 'create';
@@ -342,15 +342,19 @@ class Import extends \Espo\Services\Record
$action = $params['action'];
}
if (empty($importFieldList)) {
return;
}
if (in_array($action, ['createAndUpdate', 'update'])) {
if (!empty($params['updateBy']) && is_array($params['updateBy'])) {
$updateByFieldList = [];
$whereClause = array();
foreach ($params['updateBy'] as $i) {
if (array_key_exists($i, $fields)) {
$updateByFieldList[] = $fields[$i];
$whereClause[$fields[$i]] = $row[$i];
if (array_key_exists($i, $importFieldList)) {
$updateByFieldList[] = $importFieldList[$i];
$whereClause[$importFieldList[$i]] = $row[$i];
}
}
}
@@ -399,7 +403,7 @@ class Import extends \Espo\Services\Record
}
}
foreach ($fields as $i => $field) {
foreach ($importFieldList as $i => $field) {
if (!empty($field)) {
$value = $row[$i];
if ($field == 'id') {
@@ -457,7 +461,7 @@ class Import extends \Espo\Services\Record
$isPrimary = false;
if (empty($phoneNumberData)) {
$phoneNumberData = [];
if (!in_array('phoneNumber', $fields)) {
if (!in_array('phoneNumber', $importFieldList)) {
$isPrimary = true;
}
}
@@ -475,7 +479,7 @@ class Import extends \Espo\Services\Record
}
}
foreach ($fields as $i => $field) {
foreach ($importFieldList as $i => $field) {
if (array_key_exists($field, $fieldsDefs) && $fieldsDefs[$field]['type'] == Entity::FOREIGN) {
if ($entity->has($field)) {
$relation = $fieldsDefs[$field]['relation'];

View File

@@ -787,7 +787,7 @@ class Record extends \Espo\Core\Services\Base
$count = 0;
if (array_key_exists('ids', $params)) {
if (array_key_exists('ids', $params) && is_array($params['ids'])) {
$ids = $params['ids'];
foreach ($ids as $id) {
$entity = $this->getEntity($id);

Some files were not shown because too many files have changed in this diff Show More