Compare commits

...

52 Commits

Author SHA1 Message Date
Yuri Kuznetsov ef3ed38b97 Merge branch 'master' into stable 2014-08-08 16:58:08 +03:00
Yuri Kuznetsov a38b86b2c6 dashlet sorting 2014-08-08 14:13:24 +03:00
Yuri Kuznetsov a87044623c diff fix 2014-08-08 11:45:13 +03:00
Yuri Kuznetsov 44a96ddece isFieldChanged 2014-08-07 18:30:52 +03:00
Yuri Kuznetsov b0e911870b git fix lang 2014-08-07 16:19:55 +03:00
Yuri Kuznetsov 96bb421b0a Delete label 2014-08-07 15:24:32 +03:00
Yuri Kuznetsov c281d7b2d9 fix lang 2014-08-07 12:08:51 +03:00
Yuri Kuznetsov dc5766088f confirm messages 2014-08-07 12:03:54 +03:00
Yuri Kuznetsov fe69f97b1e fix acl issue and mappen IN issue 2014-08-07 11:28:52 +03:00
Yuri Kuznetsov b7bc1e3622 services changes 2014-08-06 16:07:04 +03:00
Yuri Kuznetsov b3c4123669 email notifications 2014-08-06 15:57:30 +03:00
Yuri Kuznetsov 0795f6f6f2 clear cache messag in role 2014-08-06 10:50:26 +03:00
Yuri Kuznetsov c3cd909063 version 2014-08-05 17:34:39 +03:00
Yuri Kuznetsov 0e37c26b9f fix issue with this 2014-08-05 17:12:15 +03:00
Yuri Kuznetsov 80937f8d09 convert lead fix 2014-08-05 15:57:37 +03:00
Yuri Kuznetsov 380cdeba35 use cache false 2014-08-05 15:27:47 +03:00
Yuri Kuznetsov 1eabce0d2e change record detail #build 2014-08-05 15:27:34 +03:00
Yuri Kuznetsov 3cd5f801a5 use cache false 2014-08-05 14:42:01 +03:00
Yuri Kuznetsov c1cfd75bd6 fix notice 2014-08-05 14:38:47 +03:00
Yuri Kuznetsov dd5fabdfa4 contacts select in meetings 2014-08-05 11:44:10 +03:00
Yuri Kuznetsov 3e9c7056b0 improve mark all read 2014-08-05 10:54:19 +03:00
Yuri Kuznetsov 26188879b6 fix client acl 2014-08-05 10:49:29 +03:00
Yuri Kuznetsov 488717c6a1 dashlet changes 2014-08-04 17:05:24 +03:00
Yuri Kuznetsov b8476d7335 fix import 2014-08-04 15:23:41 +03:00
Yuri Kuznetsov 1cfad615c0 not team restricion for admin 2014-08-04 13:35:35 +03:00
Yuri Kuznetsov e3a3547a54 prevent error if field name is empty in layout 2014-08-04 12:36:51 +03:00
Yuri Kuznetsov e6948aba2e mark all read 2014-08-04 12:19:09 +03:00
Yuri Kuznetsov d4943e4d1c Merge branch 'stable' 2014-08-01 11:06:01 +03:00
Yuri Kuznetsov af5e7d99b2 Merge branch 'release/2.2' into stable 2014-08-01 11:05:46 +03:00
Yuri Kuznetsov 667a46f141 text field search 2014-07-31 17:36:48 +03:00
Yuri Kuznetsov 67f65492de version 2014-07-31 12:21:58 +03:00
Yuri Kuznetsov b6a98e7121 change show more count 2014-07-30 17:33:59 +03:00
Yuri Kuznetsov 9669ff91bb footer fix 2014-07-30 12:20:16 +03:00
Yuri Kuznetsov acb6e245a2 show total 2014-07-30 11:43:14 +03:00
Yuri Kuznetsov b5e015e9c9 vi_VN to config 2014-07-30 10:49:36 +03:00
Yuri Kuznetsov 70d2e311e5 vi_VN lang 2014-07-30 10:46:36 +03:00
Yuri Kuznetsov 6c7e5c0d02 update ro lang 2014-07-30 10:45:12 +03:00
Yuri Kuznetsov d4558d73b3 lang 2014-07-30 10:35:59 +03:00
Yuri Kuznetsov e2257f6cfd footer 2014-07-29 18:06:08 +03:00
Yuri Kuznetsov 149fa41e2b textFilter 2014-07-29 17:19:00 +03:00
Yuri Kuznetsov 71e4c2fca0 Merge branch 'hotfix/2.1.1' 2014-07-29 16:37:15 +03:00
Yuri Kuznetsov 5a4613617c fix diff 2014-07-29 16:07:25 +03:00
Yuri Kuznetsov cbf9dd458e diff change 2014-07-29 13:06:15 +03:00
Yuri Kuznetsov 08553bdf9d diff changes 2014-07-28 15:37:46 +03:00
Yuri Kuznetsov d0b61b42e0 fix diff 2014-07-28 12:54:33 +03:00
Yuri Kuznetsov 3e3348c4a7 version 2014-07-28 12:51:17 +03:00
Yuri Kuznetsov c32b0f365b diff.js 2014-07-28 12:50:25 +03:00
Yuri Kuznetsov 8fd0554714 fix null filter issue 2014-07-28 11:17:21 +03:00
Yuri Kuznetsov 982f0e1f62 change filter defs 2014-07-28 10:54:01 +03:00
Yuri Kuznetsov c87f5dfab3 bool filter change 2014-07-28 10:34:39 +03:00
Yuri Kuznetsov b335462aa4 Merge branch 'release/2.1' into stable 2014-07-25 15:21:50 +03:00
Yuri Kuznetsov 65f38a4906 Merge branch 'release/2.1' into stable 2014-07-25 12:27:30 +03:00
200 changed files with 2609 additions and 418 deletions
+5
View File
@@ -25,6 +25,7 @@ namespace Espo\Controllers;
use Espo\Core\Utils as Utils;
use \Espo\Core\Exceptions\NotFound;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\Exceptions\Forbidden;
class Layout extends \Espo\Core\Controllers\Base
{
@@ -39,6 +40,10 @@ class Layout extends \Espo\Core\Controllers\Base
public function actionUpdate($params, $data)
{
if (!$this->getUser()->isAdmin()) {
throw new Forbidden();
}
$result = $this->getContainer()->get('layout')->set($data, $params['scope'], $params['name']);
if ($result === false) {
@@ -54,7 +54,13 @@ class Notification extends \Espo\Core\Controllers\Base
public function actionNotReadCount()
{
$userId = $this->getUser()->id;
return $this->getService('Notification')->getNotReadCount($userId);
return $this->getService('Notification')->getNotReadCount($userId);
}
public function actionMarkAllRead($params, $data, $request)
{
$userId = $this->getUser()->id;
return $this->getService('Notification')->markAllRead($userId);
}
}
+25 -3
View File
@@ -82,6 +82,11 @@ class Base
}
}
}
protected function getTextFilterFields()
{
return $this->metadata->get("entityDefs.{$this->entityName}.collection.textFilterFields", array('name'));
}
protected function where($params, &$result)
{
@@ -96,6 +101,18 @@ class Base
$params['where'][] = $p;
}
}
} else if ($item['type'] == 'textFilter' && !empty($item['value'])) {
if (!empty($item['value'])) {
if (empty($result['whereClause'])) {
$result['whereClause'] = array();
}
$fieldList = $this->getTextFilterFields();
$d = array();
foreach ($fieldList as $field) {
$d[$field . '*'] = $item['value'] . '%';
}
$where['OR'] = $d;
}
}
}
@@ -159,18 +176,23 @@ class Base
}
$result['whereClause']['assignedUserId'] = $this->user->id;
}
if ($this->acl->checkReadOnlyTeam($this->entityName)) {
if (!$this->user->isAdmin() && $this->acl->checkReadOnlyTeam($this->entityName)) {
if (!array_key_exists('whereClause', $result)) {
$result['whereClause'] = array();
}
$result['distinct'] = true;
if (!array_key_exists('joins', $result)) {
$result['joins'] = array();
}
if (!in_array('teams', $result['joins'])) {
$result['joins'][] = 'teams';
$result['leftJoins'][] = 'teams';
}
$result['whereClause']['Team.id'] = $this->user->get('teamsIds');
$result['whereClause']['OR'] = array(
'Team.id' => $this->user->get('teamsIds'),
'assignedUserId' => $this->user->id
);
//$result['whereClause']['Team.id'] = $this->user->get('teamsIds');
}
}
+20 -1
View File
@@ -26,7 +26,11 @@ use \Espo\Core\Interfaces\Injectable;
abstract class Base implements Injectable
{
protected $dependencies = array();
protected $dependencies = array(
'config',
'entityManager',
'user',
);
protected $injections = array();
@@ -53,5 +57,20 @@ abstract class Base implements Injectable
{
return $this->dependencies;
}
protected function getEntityManager()
{
return $this->getInjection('entityManager');
}
protected function getConfig()
{
return $this->getInjection('config');
}
protected function getUser()
{
return $this->getInjection('user');
}
}
+5 -1
View File
@@ -68,7 +68,8 @@ return array (
'fr_FR',
'tr_TR',
'ro_RO',
'pt_BR'
'pt_BR',
'vi_VN'
),
'language' => 'en_US',
'logger' =>
@@ -89,6 +90,9 @@ return array (
"tabList" => array("Account", "Contact", "Lead", "Opportunity", "Calendar", "Meeting", "Call", "Task", "Case", "Email"),
"quickCreateList" => array("Account", "Contact", "Lead", "Opportunity", "Meeting", "Call", "Task", "Case"),
'calendarDefaultEntity' => 'Meeting',
'disableExport' => false,
'assignmentEmailNotifications' => false,
'assignmentEmailNotificationsEntityList' => array('Lead', 'Opportunity', 'Task', 'Case'),
'isInstalled' => false,
);
@@ -0,0 +1,58 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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\Hooks\Common;
use Espo\ORM\Entity;
class AssignmentEmailNotification extends \Espo\Core\Hooks\Base
{
public function afterSave(Entity $entity)
{
if (
$this->getConfig()->get('assignmentEmailNotifications')
&&
in_array($entity->getEntityName(), $this->getConfig()->get('assignmentEmailNotificationsEntityList', array()))
) {
$userId = $entity->get('assignedUserId');
if (!empty($userId) && $userId != $this->getUser()->id && $entity->isFieldChanged('assignedUserId')) {
$job = $this->getEntityManager()->getEntity('Job');
$job->set(array(
'serviceName' => 'EmailNotification',
'method' => 'notifyAboutAssignmentJob',
'data' => json_encode(array(
'userId' => $userId,
'assignerUserId' => $this->getUser()->id,
'entityId' => $entity->id,
'entityType' => $entity->getEntityName()
)),
'executeTime' => date('Y-m-d H:i:s'),
));
$this->getEntityManager()->saveEntity($job);
}
}
}
}
@@ -31,6 +31,8 @@
"Tasks": "My Tasks",
"Cases": "My Cases",
"Calendar": "Calendar",
"Calls": "My Calls",
"Meetings": "My Meetings",
"OpportunitiesByStage": "Opportunities by Stage",
"OpportunitiesByLeadSource": "Opportunities by Lead Source",
"SalesByMonth": "Sales by Month",
@@ -14,7 +14,7 @@
},
"links": {
"contacts": "Contacte",
"opportunities": "Opportunitati",
"opportunities": "Oportunitati",
"cases": "Cazuri"
},
"options": {
@@ -30,5 +30,10 @@
"Set Held": "Setare detinere",
"Set Not Held": "Setare nedetinere",
"Send Invitations": "Trimite invitatii"
},
"presetFilters": {
"planned": "Planificat",
"held": "Detinut",
"todays": "Today's"
}
}
@@ -34,5 +34,9 @@
},
"labels": {
"Create Case": "Creare Caz"
},
"presetFilters": {
"open": "Deschide",
"closed": "Inchis"
}
}
@@ -14,7 +14,7 @@
"description": "Descriere"
},
"links": {
"opportunities": "Opportunitati",
"opportunities": "Oportunitati",
"cases": "Cazuri"
},
"labels": {
@@ -17,7 +17,7 @@
"Contact": "Contacte",
"Lead": "Lead-uri",
"Target": "Tinte",
"Opportunity": "Opportunitati",
"Opportunity": "Oportunitati",
"Meeting": "Intalniri",
"Calendar": "Calendar",
"Call": "Apeluri",
@@ -69,7 +69,7 @@
},
"links": {
"contacts": "Contacte",
"opportunities": "Opportunitati",
"opportunities": "Oportunitati",
"leads": "Lead-uri",
"meetings": "Intalniri",
"calls": "Apeluri",
@@ -42,5 +42,8 @@
"Campaign": "Campanie",
"Other": "Altele"
}
},
"presetFilters": {
"active": "Activ"
}
}
@@ -24,6 +24,13 @@
"Create Meeting": "Creare Intalnire",
"Set Held": "Setare detinere",
"Set Not Held": "Setare nedetinere",
"Send Invitations": "Trimite invitatii"
"Send Invitations": "Trimite invitatii",
"Saved as Held": "Saved as Held",
"Saved as Not Held": "Saved as Not Held"
},
"presetFilters": {
"planned": "Planificat",
"held": "Detinut",
"todays": "Today's"
}
}
@@ -30,5 +30,9 @@
},
"labels": {
"Create Opportunity": "Creare Oportunitate"
},
"presetFilters": {
"open": "Deschide",
"won": "Won"
}
}
@@ -27,5 +27,11 @@
},
"labels": {
"Create Task": "Creaza Activitate"
},
"presetFilters": {
"active": "Activ",
"completed": "Completat",
"todays": "Today's",
"overdue": "Overdue"
}
}
@@ -0,0 +1,40 @@
{
"fields": {
"name": "Tên",
"emailAddress": "Email",
"website": "Website",
"phoneNumber": "Điện thoại",
"billingAddress": "Địa chủ thanh toán",
"shippingAddress": "Địa chỉ vận chuyển",
"description": "Mô tả",
"sicCode": "Mã Sic",
"industry": "Industry",
"type": "Loại",
"contactRole": "Vai trò"
},
"links": {
"contacts": "Sổ liên lạc",
"opportunities": "Cơ hội",
"cases": "Trường hợp"
},
"options": {
"type": {
"Customer": "Khách hàng",
"Investor": "Nhà đầu tư",
"Partner": "Đối tác",
"Reseller": "Đại lý"
},
"industry": {
"Apparel": "May mặc",
"Banking": "Ngân hàng",
"Computer Software": "Phần mềm",
"Education": "Giáo dục",
"Electronics": "Điện máy",
"Finance": "Tín dụng",
"Insurance": "Bảo hiểm"
}
},
"labels": {
"Create Account": "Tạo tài khoản"
}
}
@@ -0,0 +1,13 @@
{
"modes": {
"month": "Tháng",
"week": "Tuần",
"day": "Ngày",
"agendaWeek": "Tuần",
"agendaDay": "Ngày"
},
"labels": {
"Today": "Today",
"Create": "Tạo"
}
}
@@ -0,0 +1,39 @@
{
"fields": {
"name": "Tên",
"parent": "Chủ",
"status": "Trạng thái",
"dateStart": "Ngày bắt đầu",
"dateEnd": "Ngày kết thúc",
"direction": "Hướng",
"duration": "Thời gian",
"description": "Mô tả",
"users": "Người dùng",
"contacts": "Sổ liên lạc",
"leads": "Trưởng nhóm"
},
"links": {
},
"options": {
"status": {
"Planned": "Đã lên kế hoạch",
"Held": "Đã được tổ chức",
"Not Held": "Chưa được tổ chức"
},
"direction": {
"Outbound": "Ra ngoài",
"Inbound": "Vào trong"
}
},
"labels": {
"Create Call": "Tạo cuộc gọi",
"Set Held": "Tổ chức",
"Set Not Held": "Không tổ chức",
"Send Invitations": "Gửi giấy mời"
},
"presetFilters": {
"planned": "Đã lên kế hoạch",
"held": "Đã được tổ chức",
"todays": "Hôm nay"
}
}
@@ -0,0 +1,42 @@
{
"fields": {
"name": "Tên",
"number": "Số",
"status": "Trạng thái",
"account": "Tài khoản",
"contact": "Liên hệ",
"priority": "Ưu tiên",
"type": "Loại",
"description": "Mô tả"
},
"links": {
},
"options": {
"status": {
"New": "Mới",
"Assigned": "Chỉ định",
"Pending": "Đang chờ",
"Closed": "Đã đóng",
"Rejected": "Đã từ chối",
"Duplicate": "Trùng"
},
"priority" : {
"Low": "Thấp",
"Normal": "Bình thường",
"High": "Cao",
"Urgent": "Gấp"
},
"type": {
"Question": "Câu hỏi",
"Incident": "Sự cố",
"Problem": "Có vấn đề"
}
},
"labels": {
"Create Case": "Tạo trường hợp"
},
"presetFilters": {
"open": "Mở",
"closed": "Đã đóng"
}
}
@@ -0,0 +1,31 @@
{
"fields": {
"name": "Tên",
"emailAddress": "Email",
"title": "Tiêu đề",
"account": "Tài khoản",
"accounts": "Tài khoản",
"phoneNumber": "Điện thoại",
"accountType": "Loại tài khoản",
"doNotCall": "Không gọi",
"address": "Địa chỉ",
"opportunityRole": "Vai trò cơ hội",
"accountRole": "Vai trò",
"description": "Mô tả"
},
"links": {
"opportunities": "Cơ hội",
"cases": "Trường hợp"
},
"labels": {
"Create Contact": "Tạo liên hệ"
},
"options": {
"opportunityRole": {
"": "--Trống--",
"Decision Maker": "Tạo quyết định",
"Evaluator": "Đánh giá",
"Influencer": "Phụ thuộc"
}
}
}
@@ -0,0 +1,79 @@
{
"scopeNames": {
"Account": "Tài khoản",
"Contact": "Liên hệ",
"Lead": "Chỉ dẫn",
"Target": "Mục tiêu",
"Opportunity": "Cơ hội",
"Meeting": "Buổi gặp",
"Calendar": "Lịch",
"Call": "Gọi",
"Task": "Nhiệm vụ",
"Case": "Trường hợp",
"InboundEmail": "Email tới"
},
"scopeNamesPlural": {
"Account": "Tài khoản",
"Contact": "Sổ liên lạc",
"Lead": "Trưởng nhóm",
"Target": "Mục tiêu",
"Opportunity": "Cơ hội",
"Meeting": "Hẹn gặp",
"Calendar": "Lịch",
"Call": "Cuộc gọi",
"Task": "Nhiệm vụ",
"Case": "Trường hợp",
"InboundEmail": "Email đã nhận"
},
"dashlets": {
"Leads": "Chỉ dẫn của tôi",
"Opportunities": "Cơ hội của tôi",
"Tasks": "Nhiệm vụ của tôi",
"Cases": "Công việc của tôi",
"Calendar": "Lịch",
"OpportunitiesByStage": "Chia mức cơ hội",
"OpportunitiesByLeadSource": "Phân chia cơ hội theo người chỉ dẫn",
"SalesByMonth": "Doanh thu hàng tháng",
"SalesPipeline": "Doanh thu đường ống"
},
"labels": {
"Create InboundEmail": "Tạo email đến",
"Activities": "Hành động",
"History": "Lịch sử",
"Attendees": "Người dự",
"Schedule Meeting": "Lên lịch hẹn",
"Schedule Call": "Lên lịch gọi",
"Compose Email": "Tạo email",
"Log Meeting": "Log cuộc hẹn",
"Log Call": "Log cuộc gọi",
"Archive Email": "Email lưu trữ",
"Create Task": "Tạo nhiệm vụ",
"Tasks": "Nhiệm vụ"
},
"fields": {
"billingAddressCity": "Quận - huyện",
"billingAddressCountry": "Quốc gia",
"billingAddressPostalCode": "Mã bưu điện",
"billingAddressState": "Thành phố",
"billingAddressStreet": "Đường",
"addressCity": "Quận - huyện",
"addressStreet": "Đường",
"addressCountry": "Quốc gia",
"addressState": "Thành phố",
"addressPostalCode": "Mã bưu điện",
"shippingAddressCity": "City (Shipping)",
"shippingAddressStreet": "Street (Shipping)",
"shippingAddressCountry": "Country (Shipping)",
"shippingAddressState": "State (Shipping)",
"shippingAddressPostalCode": "Postal Code (Shipping)"
},
"links": {
"contacts": "Sổ liên lạc",
"opportunities": "Cơ hội",
"leads": "Trưởng nhóm",
"meetings": "Hẹn gặp",
"calls": "Cuộc gọi",
"tasks": "Nhiệm vụ",
"emails": "Địa chỉ email"
}
}
@@ -0,0 +1,43 @@
{
"fields": {
"name": "Tên",
"team": "Nhóm",
"status": "Trạng thái",
"assignToUser": "Chỉ định",
"host": "Máy chủ",
"username": "Tên đăng nhập",
"password": "Mật khẩu",
"port": "Cổng",
"monitoredFolders": "Thư mục được theo dõi",
"trashFolder": "Thùng rác",
"ssl": "SSL",
"createCase": "Tạo trường hợp",
"reply": "Trả lời",
"caseDistribution": "Trường hợp phân phối",
"replyEmailTemplate": "Mẫu email trả lời",
"replyFromAddress": "Địa chỉ email trả lời",
"replyFromName": "Tên người gửi"
},
"links": {
},
"options": {
"status": {
"Active": "Đang hoạt động",
"Inactive": "Chưa hoạt động"
},
"caseDistribution": {
"Direct-Assignment": "Direct-Assignment",
"Round-Robin": "Round-Robin",
"Least-Busy": "Least-Busy"
}
},
"labels": {
"Create InboundEmail": "Tạo email đến",
"IMAP": "IMAP",
"Actions": "Hoạt động",
"Main": "Chính"
},
"messages": {
"couldNotConnectToImap": "Không thể kết nối với máy chủ IMAP"
}
}
@@ -0,0 +1,49 @@
{
"labels": {
"Converted To": "Đã chuyển đổi sang",
"Create Lead": "Tạo chỉ dẫn",
"Convert": "Chuyển đổi"
},
"fields": {
"name": "Tên",
"emailAddress": "Email",
"title": "Tiêu đề",
"website": "Website",
"phoneNumber": "Điện thoại",
"accountName": "Tên tài khoản",
"doNotCall": "Không gọi",
"address": "Địa chỉ",
"status": "Trạng thái",
"source": "Nguồn",
"opportunityAmount": "Trị giá",
"description": "Mô tả",
"createdAccount": "Tài khoản",
"createdContact": "Liên hệ",
"createdOpportunity": "Cơ hội"
},
"links": {
},
"options": {
"status": {
"New": "Mới",
"Assigned": "Chỉ định",
"In Process": "Đang tiến hành",
"Converted": "Đã chuyển đổi",
"Recycled": "Thùng rác",
"Dead": "Chết"
},
"source": {
"Call": "Gọi",
"Email": "Email",
"Existing Customer": "Khách hàng hiện có",
"Partner": "Đối tác",
"Public Relations": "Khách hàng công khai",
"Web Site": "Web Site",
"Campaign": "Chiến dịch",
"Other": "Khác"
}
},
"presetFilters": {
"active": "Đang hoạt động"
}
}
@@ -0,0 +1,36 @@
{
"fields": {
"name": "Tên",
"parent": "Chủ",
"status": "Trạng thái",
"dateStart": "Ngày bắt đầu",
"dateEnd": "Ngày kết thúc",
"duration": "Thời gian",
"description": "Mô tả",
"users": "Người dùng",
"contacts": "Sổ liên lạc",
"leads": "Trưởng nhóm"
},
"links": {
},
"options": {
"status": {
"Planned": "Đã lên kế hoạch",
"Held": "Đã được tổ chức",
"Not Held": "Chưa được tổ chức"
}
},
"labels": {
"Create Meeting": "Tạo buổi hẹn",
"Set Held": "Tổ chức",
"Set Not Held": "Không tổ chức",
"Send Invitations": "Gửi giấy mời",
"Saved as Held": "Lưu là đã tổ chức",
"Saved as Not Held": "Lưu là chưa tổ chức"
},
"presetFilters": {
"planned": "Đã lên kế hoạch",
"held": "Đã được tổ chức",
"todays": "Hôm nay"
}
}
@@ -0,0 +1,38 @@
{
"fields": {
"name": "Tên",
"account": "Tài khoản",
"stage": "Mức",
"amount": "Tổng",
"probability": "Xác suất, %",
"leadSource": "Nguồn dẫn",
"doNotCall": "Không gọi",
"closeDate": "Ngày kết thúc",
"contacts": "Sổ liên lạc",
"description": "Mô tả"
},
"links": {
"contacts": "Sổ liên lạc"
},
"options": {
"stage": {
"Prospecting": "Khảo sát",
"Qualification": "Trình độ chuyên môn",
"Needs Analysis": "Phân tích nhu cầu",
"Value Proposition": "Đề xuất giá trị",
"Id. Decision Makers": "Id. Người tạo quyết định",
"Perception Analysis": "Phân tích khả năng",
"Proposal/Price Quote": "Giá đặt ra",
"Negotiation/Review": "Đàm phán / đánh giá",
"Closed Won": "Thắng thầu",
"Closed Lost": "Thua thầu"
}
},
"labels": {
"Create Opportunity": "Tạo cơ hội"
},
"presetFilters": {
"open": "Mở",
"won": "Thắng"
}
}
@@ -0,0 +1,19 @@
{
"fields": {
"name": "Tên",
"emailAddress": "Email",
"title": "Tiêu đề",
"website": "Website",
"accountName": "Tên tài khoản",
"phoneNumber": "Điện thoại",
"doNotCall": "Không gọi",
"address": "Địa chỉ",
"description": "Mô tả"
},
"links": {
},
"labels": {
"Create Target": "Tạo mục tiêu",
"Convert to Lead": "Chuyển đổi thành chỉ dẫn"
}
}
@@ -0,0 +1,37 @@
{
"fields": {
"name": "Tên",
"parent": "Chủ",
"status": "Trạng thái",
"dateStart": "Ngày bắt đầu",
"dateEnd": "Hạn",
"priority": "Ưu tiên",
"description": "Mô tả",
"isOverdue": "Đã quá hạn"
},
"links": {
},
"options": {
"status": {
"Not Started": "Chưa bắt đầu",
"Started": "Đã bắt đầu",
"Completed": "Hoàn thành",
"Canceled": "Hủy"
},
"priority" : {
"Low": "Thấp",
"Normal": "Bình thường",
"High": "Cao",
"Urgent": "Gấp"
}
},
"labels": {
"Create Task": "Tạo nhiệm vụ"
},
"presetFilters": {
"active": "Đang hoạt động",
"completed": "Hoàn thành",
"todays": "Hôm nay",
"overdue": "Quá hạn"
}
}
@@ -29,5 +29,6 @@
],
"layout":"listForAccount"
}
}
},
"boolFilters": ["onlyMy"]
}
@@ -76,5 +76,6 @@
}
}
}
]
],
"boolFilters": ["onlyMy"]
}
@@ -44,5 +44,6 @@
}
}
}
]
],
"boolFilters": ["onlyMy"]
}
@@ -21,5 +21,6 @@
"view":"Crm:Record.Panels.Tasks"
}
]
}
},
"boolFilters": ["onlyMy"]
}
@@ -36,5 +36,6 @@
}
}
}
]
],
"boolFilters": ["onlyMy"]
}
@@ -76,5 +76,6 @@
}
}
}
]
],
"boolFilters": ["onlyMy"]
}
@@ -43,5 +43,6 @@
}
}
}
]
],
"boolFilters": ["onlyMy"]
}
@@ -13,5 +13,6 @@
}
]
}
}
},
"boolFilters": ["onlyMy"]
}
@@ -44,5 +44,6 @@
}
}
}
]
],
"boolFilters": ["onlyMy"]
}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.Calendar"}
@@ -0,0 +1 @@
{"view":"Crm:Dashlets.Calls"}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.Cases"}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.Leads"}
@@ -0,0 +1 @@
{"view":"Crm:Dashlets.Meetings"}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.Opportunities"}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.OpportunitiesByLeadSource"}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.OpportunitiesByStage"}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.SalesByMonth"}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.SalesPipeline"}
@@ -1 +1 @@
{"module":"Crm"}
{"view":"Crm:Dashlets.Tasks"}
@@ -155,7 +155,6 @@
},
"collection": {
"sortBy": "name",
"asc": true,
"boolFilters": ["onlyMy"]
"asc": true
}
}
@@ -52,7 +52,8 @@
},
"contacts": {
"type": "linkMultiple",
"disabled": true
"disabled": true,
"view": "Crm:Meeting.Fields.Contacts"
},
"leads": {
"type": "linkMultiple",
@@ -148,7 +149,6 @@
},
"collection": {
"sortBy": "dateStart",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}
@@ -183,7 +183,6 @@
},
"collection": {
"sortBy": "name",
"asc": true,
"boolFilters": ["onlyMy"]
"asc": true
}
}
@@ -189,7 +189,6 @@
},
"collection": {
"sortBy": "createdAt",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}
@@ -47,7 +47,8 @@
},
"contacts": {
"type": "linkMultiple",
"disabled": true
"disabled": true,
"view": "Crm:Meeting.Fields.Contacts"
},
"leads": {
"type": "linkMultiple",
@@ -143,7 +144,6 @@
},
"collection": {
"sortBy": "dateStart",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}
@@ -125,7 +125,6 @@
},
"collection": {
"sortBy": "createdAt",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}
@@ -108,7 +108,6 @@
},
"collection": {
"sortBy": "createdAt",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}
@@ -87,7 +87,6 @@
},
"collection": {
"sortBy": "createdAt",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}
@@ -0,0 +1,46 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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\SelectManagers;
class Task extends \Espo\Core\SelectManagers\Base
{
protected function getBoolFilterWhereActive()
{
return array(
'type' => 'notIn',
'field' => 'status',
'value' => array('Completed', 'Canceled')
);
}
protected function getBoolFilterWhereInactive()
{
return array(
'type' => 'in',
'field' => 'status',
'value' => array('Completed', 'Canceled')
);
}
}
@@ -25,6 +25,8 @@ namespace Espo\Modules\Crm\Services;
use \Espo\Core\Exceptions\Error;
use \Espo\Core\Exceptions\Forbidden;
use \Espo\ORM\Entity;
class Lead extends \Espo\Services\Record
{
protected function getDuplicateWhereClause(Entity $entity)
+2
View File
@@ -1098,7 +1098,9 @@ abstract class Mapper implements IMapper
if ($operator == '<>') {
$oppose = 'NOT';
}
if (!empty($valArr)) {
$whereParts[] = $leftPart . " {$oppose} IN " . "(" . implode(',', $valArr) . ")";
}
}
}
} else {
@@ -113,7 +113,7 @@
"fieldManager": "Create new fields or customize existing ones.",
"userInterface": "Configure UI.",
"authTokens": "Active auth sessions. IP address and last access date.",
"authentication": "Authentication setttings."
"authentication": "Authentication settings."
},
"options": {
"previewSize": {
@@ -114,7 +114,8 @@
"Administration": "Administration",
"Run Import": "Run Import",
"Duplicate": "Duplicate",
"Notifications": "Notifications"
"Notifications": "Notifications",
"Mark all read": "Mark all read"
},
"messages": {
"notModified": "You have not modified the record",
@@ -130,7 +131,13 @@
"fieldShouldBeBetween": "{field} should be between {min} and {max}",
"fieldShouldBeLess": "{field} should be less then {value}",
"fieldShouldBeGreater": "{field} should be greater then {value}",
"fieldBadPasswordConfirm": "{field} confirmed improperly"
"fieldBadPasswordConfirm": "{field} confirmed improperly",
"assignmentEmailNotificationSubject": "EspoCRM {entityType}: {Entity.name}",
"assignmentEmailNotificationBody": "{assignerUserName} has assigned {entityType} '{Entity.name}' to you\n\n{recordUrl}",
"confirmation": "Are you sure?",
"removeRecordConfirmation": "Are you sure you want to remove the record?",
"unlinkRecordConfirmation": "Are you sure you want to unlink relationship?",
"removeSelectedRecordsConfirmation": "Are you sure you want to remove selected records?"
},
"boolFilters": {
"onlyMy": "Only My",
@@ -297,6 +304,13 @@
"2": "2 minutes",
"5": "5 minutes",
"10": "10 minutes"
},
"phoneNumber": {
"Mobile": "Mobile",
"Office": "Office",
"Fax": "Fax",
"Home": "Home",
"Other": "Other"
}
},
"sets": {
@@ -19,7 +19,9 @@
"smtpPassword": "Password",
"smtpEmailAddress": "Email Address",
"exportDelimiter": "Export Delimiter"
"exportDelimiter": "Export Delimiter",
"receiveAssignmentEmailNotifications": "Receive Email Notifications upon Assignment"
},
"links": {
},
@@ -28,5 +30,8 @@
"0": "Sunday",
"1": "Monday"
}
},
"labels": {
"Notifications": "Notifications"
}
}
@@ -28,5 +28,8 @@
"read": "Read",
"edit": "Edit",
"delete": "Delete"
},
"messages": {
"changesAfterClearCache": "All changes in an access control will be applied after cache will be cleared."
}
}
@@ -47,7 +47,9 @@
"ldapUserLoginFilter": "User Login Filter",
"ldapAccountDomainNameShort": "Account Domain Name Short",
"ldapOptReferrals": "Opt Referrals",
"disableExport": "Disable Export (only admin is allowed)"
"disableExport": "Disable Export (only admin is allowed)",
"assignmentEmailNotifications": "Send Email Notifications upon Assignment",
"assignmentEmailNotificationsEntityList": "Entities to Notify About"
},
"options": {
"weekStart": {
@@ -59,6 +61,7 @@
"System": "System",
"Locale": "Locale",
"SMTP": "SMTP",
"Configuration": "Configuration"
"Configuration": "Configuration",
"Notifications": "Notifications"
}
}
@@ -28,5 +28,9 @@
"labels": {
"Create Email": "Arhiveaza Email",
"Compose": "Compune"
},
"presetFilters": {
"sent": "Trimis",
"archived": "Arhivat"
}
}
@@ -109,7 +109,12 @@
"You": "Tu",
"you": "tu",
"change": "schimba",
"Primary": "Primar"
"Primary": "Primar",
"Save Filters": "Save Filters",
"Administration": "Administration",
"Run Import": "Run Import",
"Duplicate": "Duplicat",
"Notifications": "Notifications"
},
"messages": {
"notModified": "Nu ai modificat inregistrarea",
@@ -271,7 +276,10 @@
"notOn": "Oprit",
"after": "Dupa",
"before": "Inainte",
"between": "Intre"
"between": "Intre",
"today": "Astazi",
"past": "Past",
"future": "Future"
},
"intSearchRanges": {
"equals": "Egal",
@@ -289,6 +297,13 @@
"2": "2 minute",
"5": "5 minute",
"10": "10 minute"
},
"phoneNumber": {
"Mobile": "Mobile",
"Office": "Office",
"Fax": "Fax",
"Home": "Home",
"Other": "Altele"
}
},
"sets": {
@@ -46,7 +46,8 @@
"ldapSecurity": "Securitate",
"ldapUserLoginFilter": "User Login Filter",
"ldapAccountDomainNameShort": "Account Domain Name Short",
"ldapOptReferrals": "Opt Referrals"
"ldapOptReferrals": "Opt Referrals",
"disableExport": "Disable Export (only admin is allowed)"
},
"options": {
"weekStart": {
@@ -0,0 +1,126 @@
{
"labels": {
"Enabled": "Bật",
"Disabled": "Tắt",
"System": "Hệ thống",
"Users": "Người dùng",
"Email": "Email",
"Data": "Dữ liệu",
"Customization": "Tùy chỉnh",
"Available Fields": "Trường hiện có",
"Layout": "Giao diện",
"Enabled": "Bật",
"Disabled": "Tắt",
"Add Panel": "Thêm bảng điều khiển",
"Add Field": "Thêm trường",
"Settings": "Cái đặt",
"Scheduled Jobs": "Công việc đã lên lịch",
"Upgrade": "Nâng cấp",
"Clear Cache": "Xóa Cache",
"Rebuild": "Dựng lại",
"Users": "Người dùng",
"Teams": "Nhóm",
"Roles": "Vai trò",
"Outbound Emails": "Email đã gửi",
"Inbound Emails": "Email đã nhận",
"Email Templates": "Mẫu email",
"Import": "Nhập",
"Layout Manager": "Quản lý giao diện",
"Field Manager": "Quản lý trường",
"User Interface": "Giao diện người dùng",
"Auth Tokens": "Auth Tokens",
"Authentication": "Xác thực"
},
"layouts": {
"list": "Đanh sách",
"detail": "Chi tiết",
"listSmall": "List (Small)",
"detailSmall": "Detail (Small)",
"filters": "Bộ lọc tìm kiếm",
"massUpdate": "Cập nhật",
"relationships": "Quan hệ"
},
"fieldTypes": {
"address": "Địa chỉ",
"array": "Mảng",
"foreign": "Nước ngoài",
"duration": "Thời gian",
"password": "Mật khẩu",
"parsonName": "Tên",
"autoincrement": "Tự động tăng",
"bool": "Bool",
"currency": "Tiền tệ",
"date": "Thời gian",
"datetime": "Thời gian",
"email": "Email",
"enum": "Enum",
"enumInt": "Enum Integer",
"enumFloat": "Enum Float",
"float": "Float",
"int": "Int",
"link": "Đường dẫn",
"linkMultiple": "Đa đường dẫn",
"linkParent": "Đường dẫn gốc",
"multienim": "Multienum",
"phone": "Điện thoại",
"text": "Text",
"url": "Đường dẫn",
"varchar": "Varchar",
"file": "File",
"image": "Ảnh"
},
"fields": {
"type": "Loại",
"name": "Tên",
"label": "Thẻ",
"required": "Yêu cầu",
"default": "Mặc định",
"maxLength": "Chiều dài tối đa",
"options": "Options (raw values, not translated)",
"after": "After (field)",
"before": "Before (field)",
"link": "Đường dẫn",
"field": "Trường",
"min": "Tối thiểu",
"max": "Tối đa",
"translation": "Dịch",
"previewSize": "Kích thước cũ"
},
"messages": {
"upgradeVersion": "Your EspoCRM will be upgraded to version <strong>{version}</strong>. This can take some time.",
"upgradeDone": "Your EspoCRM has been upgraded to version <strong>{version}</strong>. Refresh your browser window.",
"upgradeBackup": "We recommend you to make backup of your EspoCRM files and data before upgrade.",
"thousandSeparatorEqualsDecimalMark": "Dấu phân cách không thể giống nhau",
"userHasNoEmailAddress": "Người dùng chưa có địa chỉ email",
"selectEntityType": "Chọn loại ở menu bên trái",
"selectUpgradePackage": "Chọn gói nâng cấp",
"selectLayout": "Chọn giao diện cần sửa bên trái"
},
"descriptions": {
"settings": "System settings of application.",
"scheduledJob": "Công việc tự động tiến hành",
"upgrade": "Nâng cấp hệ thống EspoCRM",
"clearCache": "Xóa dữ liệu cache.",
"rebuild": "Xóa dữ liệu và tải lại hệ thống",
"users": "Quản lý người dùng.",
"teams": "Quản lý nhóm.",
"roles": "Quản lý vai trò.",
"outboundEmails": "Tùy chỉnh SMTP để gửi email.",
"inboundEmails": "Nhóm tài khoản email IMAP. Nhập email và Email-to-Case.",
"emailTemplates": "Mẫu email gửi đi",
"import": "Nhập dữ liệu từ tệp CSV",
"layoutManager": "Customize layouts (list, detail, edit, search, mass update).",
"fieldManager": "Tạo trường mới hoặc sửa trường đã tồn tại",
"userInterface": "Chỉnh sửa giao diện.",
"authTokens": "Kích hoạt quản lý phiên làm việc. Địa chỉ IP và ngày truy cập.",
"authentication": "Cài đặt xác thực truy cập"
},
"options": {
"previewSize": {
"x-small": "Cực nhỏ",
"small": "Nhỏ",
"medium": "Trung bình",
"large": "Lớn"
}
}
}
@@ -0,0 +1,9 @@
{
"fields": {
"user": "Người dùng",
"ipAddress": "Địa chỉ IP",
"lastAccess": "Thời gian truy cập cuối",
"createdAt": "Thời gian đăng nhập"
}
}
@@ -0,0 +1,36 @@
{
"fields": {
"name": "Chủ đề",
"parent": "Chủ",
"status": "Trạng thái",
"dateSent": "Ngày gửi",
"from": "Từ",
"to": "Tới",
"cc": "CC",
"bcc": "BCC",
"isHtml": "Chỉ Html",
"body": "Nội dung",
"subject": "Chủ đề",
"attachments": "Đính kèm",
"selectTemplate": "Chọn mẫu",
"fromEmailAddress": "Địa chỉ gửi",
"toEmailAddresses": "Địa chỉ nhận",
"emailAddress": "Địa chỉ email"
},
"links": {
},
"options": {
"Draft": "Nháp",
"Sending": "Đang gửi",
"Sent": "Đã gửi",
"Archived": "Lưu trữ"
},
"labels": {
"Create Email": "Email lưu trữ",
"Compose": "Soạn"
},
"presetFilters": {
"sent": "Đã gửi",
"archived": "Lưu trữ"
}
}
@@ -0,0 +1,7 @@
{
"labels": {
"Primary": "Chính",
"Opted Out": "Chọn ra",
"Invalid": "Không hợp lệ"
}
}
@@ -0,0 +1,16 @@
{
"fields": {
"name": "Tên",
"status": "Trạng thái",
"isHtml": "Chỉ Html",
"body": "Nội dung",
"subject": "Chủ đề",
"attachments": "Đính kèm",
"insertField": ""
},
"links": {
},
"labels": {
"Create EmailTemplate": "Tạo mẫu email"
}
}
@@ -0,0 +1,412 @@
{
"scopeNames": {
"Email": "Email",
"User": "Người dùng",
"Team": "Nhóm",
"Role": "Vai trò",
"EmailTemplate": "Mẫu email",
"OutboundEmail": "Email đã gửi",
"ScheduledJob": "Công việc đã lên lịch"
},
"scopeNamesPlural": {
"Email": "Địa chỉ email",
"User": "Người dùng",
"Team": "Nhóm",
"Role": "Vai trò",
"EmailTemplate": "Mẫu email",
"OutboundEmail": "Email đã gửi",
"ScheduledJob": "Công việc đã lên lịch"
},
"labels": {
"Misc": "Khác",
"Merge": "Gộp",
"None": "Trống",
"by": "bởi",
"Saved": "Đã lưu",
"Error": "Lỗi",
"Select": "Chọn",
"Not valid": "Không phù hợp",
"Please wait...": "Vui lòng đợi...",
"Please wait": "Vui lòng đợi",
"Loading...": "Đang tải...",
"Uploading...": "Đang tải lên...",
"Sending...": "Đang gửi...",
"Removed": "Đã xóa",
"Posted": "Đã đăng",
"Linked": "Đã liên kết",
"Unlinked": "Đã bỏ liên kết",
"Access denied": "Từ chối truy cập",
"Access": "Truy cập",
"Are you sure?": "Are you sure?",
"Record has been removed": "bản ghi đã được xóa",
"Wrong username/password": "Sai tên truy cập và mật khẩu",
"Post cannot be empty": "Nội dung không được để trống",
"Removing...": "Đang xóa...",
"Unlinking...": "Đang bỏ liên kết...",
"Posting...": "Đang gửi...",
"Username can not be empty!": "Tên đăng nhập không được để trống!",
"Cache is not enabled": "Cache không được bật",
"Cache has been cleared": "Cache đã được xóa",
"Rebuild has been done": "Tải lại thành công",
"Saving...": "Đang lưu...",
"Modified": "Đã sửa",
"Created": "Đã tạo",
"Create": "Tạo",
"create": "tạo",
"Overview": "Sơ lược",
"Details": "Chi tiết",
"Add Filter": "Thêm bộ lọc",
"Add Dashlet": "Thêm module",
"Add": "Thêm",
"Reset": "Reset",
"Menu": "Menu",
"More": "Thêm nữa",
"Search": "Tìm kiếm",
"Only My": "Chỉ",
"Open": "Mở",
"Admin": "Admin",
"About": "Thông tin",
"Refresh": "Tải lại",
"Remove": "Xóa",
"Options": "Tùy chọn",
"Username": "Tên đăng nhập",
"Password": "Mật khẩu",
"Login": "Đăng nhập",
"Log Out": "Đăng xuất",
"Preferences": "Tùy chỉnh",
"State": "Thành phố",
"Street": "Đường",
"Country": "Quốc gia",
"City": "Quận - huyện",
"PostalCode": "Mã bưu điện",
"Followed": "Đã theo dõi",
"Follow": "Theo dõi",
"Clear Local Cache": "Clear Local Cache",
"Actions": "Hoạt động",
"Delete": "Xóa",
"Update": "Cập nhật",
"Save": "Lưu",
"Edit": "Sửa",
"Cancel": "Bỏ qua",
"Unlink": "Xóa liên kết",
"Mass Update": "Cập nhật",
"Export": "Xuất",
"No Data": "Không có dữ liệu",
"All": "Tất cả",
"Active": "Đang hoạt động",
"Inactive": "Chưa hoạt động",
"Write your comment here": "Viết lời nhắn tại đây",
"Post": "Gửi",
"Stream": "Luồng",
"Show more": "Xem thêm",
"Dashlet Options": "Tùy chọn module",
"Full Form": "Đầy đủ",
"Insert": "Chèn",
"Person": "Cá nhân",
"First Name": "Tên",
"Last Name": "Họ",
"Original": "Gốc",
"You": "Bạn",
"you": "bạn",
"change": "thay đổi",
"Primary": "Chính",
"Save Filters": "Lưu bộ lọc",
"Administration": "Administration",
"Run Import": "Bắt đầu nhập",
"Duplicate": "Trùng",
"Notifications": "Thông báo"
},
"messages": {
"notModified": "Bạn chưa sửa bản ghi",
"duplicate": "Bản ghi được tạo bị trùng",
"fieldIsRequired": "{field} là bắt buộc",
"fieldShouldBeEmail": "Kiểm tra lại {field}",
"fieldShouldBeFloat": "Kiểm tra lại {field}",
"fieldShouldBeInt": "Kiểm tra lại {field}",
"fieldShouldBeDate": "Kiểm tra lại {field}",
"fieldShouldBeDatetime": "Kiểm tra lại {field}",
"fieldShouldAfter": "{field} cần đặt sau {otherField}",
"fieldShouldBefore": "{field} cần đặt trước {otherField}",
"fieldShouldBeBetween": "{field} cần đặt giữa {min} và {max}",
"fieldShouldBeLess": "{field} cần nhỏ hơn {value}",
"fieldShouldBeGreater": "{field} cần lớn hơn {value}",
"fieldBadPasswordConfirm": "{field} không hợp lệ"
},
"boolFilters": {
"onlyMy": "Chỉ",
"open": "Mở",
"active": "Đang hoạt động"
},
"fields": {
"name": "Tên",
"firstName": "Tên",
"lastName": "Họ",
"salutationName": "Chào đón",
"assignedUser": "Phân công",
"emailAddress": "Email",
"assignedUserName": "Thành viên được phân công",
"teams": "Nhóm",
"createdAt": "Tạo lúc",
"modifiedAt": "Sửa lúc",
"createdBy": "Tạo bởi",
"modifiedBy": "Sửa bởi",
"title": "Tiêu đề",
"dateFrom": "Từ ngày",
"dateTo": "Tới ngày",
"autorefreshInterval": "Tự động tải lại sau",
"displayRecords": "Xem bản ghi"
},
"links": {
"teams": "Nhóm",
"users": "Người dùng"
},
"dashlets": {
"Stream": "Luồng"
},
"streamMessages": {
"create": "{user} tạo {entityType} {entity}",
"createAssigned": "{user} tạo {entityType} {entity} phân công cho {assignee}",
"assign": "{user} phân công {entityType} {entity} cho {assignee}",
"post": "{user} đăng {entityType} {entity}",
"attach": "{user} đính kèm ở {entityType} {entity}",
"status": "{user} cập nhật {field} ở {entityType} {entity}",
"update": "{user} cập nhật {entityType} {entity}",
"createRelated": "{user} created {relatedEntityType} {relatedEntity} linked to {entityType} {entity}",
"emailReceived": "{entity} đã được nhận bởi {entityType} {entity}",
"createThis": "{user} tạo {entityType}",
"createAssignedThis": "{user} tạo {entityType} phân công cho {assignee}",
"assignThis": "{user} phân công {entityType} cho {assignee}",
"postThis": "{user} đã đăng",
"attachThis": "{user} đã đính kèm",
"statusThis": "{user} đã cập nhật {field}",
"updateThis": "{user} cập nhật {entityType}",
"createRelatedThis": "{user} created {relatedEntityType} {relatedEntity} linked to this {entityType}",
"emailReceivedThis": "{entity} đã được nhận"
},
"lists": {
"monthNames": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
"monthNamesShort": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
"dayNames": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"dayNamesShort": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
"dayNamesMin": ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
},
"options": {
"salutationName": {
"Mr.": "Ông.",
"Mrs.": "Bà.",
"Dr.": "Ông.",
"Drs.": "Bà."
},
"language": {
"af_ZA": "Afrikaans",
"az_AZ": "Azerbaijani",
"be_BY": "Belarusian",
"bg_BG": "Bulgarian",
"bn_IN": "Bengali",
"bs_BA": "Bosnian",
"ca_ES": "Catalan",
"cs_CZ": "Czech",
"cy_GB": "Welsh",
"da_DK": "Danish",
"de_DE": "German",
"el_GR": "Greek",
"en_GB":"English (UK)",
"en_US":"English (US)",
"es_ES":"Spanish (Spain)",
"et_EE": "Estonian",
"eu_ES": "Basque",
"fa_IR": "Persian",
"fi_FI": "Finnish",
"fo_FO": "Faroese",
"fr_CA":"French (Canada)",
"fr_FR":"French (France)",
"ga_IE": "Irish",
"gl_ES": "Galician",
"gn_PY": "Guarani",
"he_IL": "Hebrew",
"hi_IN": "Hindi",
"hr_HR": "Croatian",
"hu_HU": "Hungarian",
"hy_AM": "Armenian",
"id_ID": "Indonesian",
"is_IS": "Icelandic",
"it_IT": "Italian",
"ja_JP": "Japanese",
"ka_GE": "Georgian",
"km_KH": "Khmer",
"ko_KR": "Korean",
"ku_TR": "Kurdish",
"lt_LT": "Lithuanian",
"lv_LV": "Latvian",
"mk_MK": "Macedonian",
"ml_IN": "Malayalam",
"ms_MY": "Malay",
"nb_NO": "Norwegian Bokmål",
"nn_NO": "Norwegian Nynorsk",
"ne_NP": "Nepali",
"nl_NL": "Dutch",
"pa_IN": "Punjabi",
"pl_PL": "Polish",
"ps_AF": "Pashto",
"pt_BR":"Portuguese (Brazil)",
"pt_PT":"Portuguese (Portugal)",
"ro_RO": "Romanian",
"ru_RU": "Russian",
"sk_SK": "Slovak",
"sl_SI": "Slovene",
"sq_AL": "Albanian",
"sr_RS": "Serbian",
"sv_SE": "Swedish",
"sw_KE": "Swahili",
"ta_IN": "Tamil",
"te_IN": "Telugu",
"th_TH": "Thai",
"tl_PH": "Tagalog",
"tr_TR": "Turkish",
"uk_UA": "Ukrainian",
"ur_PK": "Urdu",
"vi_VN": "Vietnamese",
"zh_CN":"Simplified Chinese (China)",
"zh_HK":"Traditional Chinese (Hong Kong)",
"zh_TW":"Traditional Chinese (Taiwan)"
},
"dateSearchRanges": {
"on": "On",
"notOn": "Not On",
"after": "After",
"before": "Before",
"between": "Between",
"today": "Today",
"past": "Past",
"future": "Future"
},
"intSearchRanges": {
"equals": "Equals",
"notEquals": "Not Equals",
"greaterThan": "Greater Than",
"lessThan": "Less Than",
"greaterThanOrEquals": "Greater Than or Equals",
"lessThanOrEquals": "Less Than or Equals",
"between": "Between"
},
"autorefreshInterval": {
"0": "Trống",
"0.5": "30 seconds",
"1": "1 minute",
"2": "2 minutes",
"5": "5 minutes",
"10": "10 minutes"
},
"phoneNumber": {
"Mobile": "Mobile",
"Office": "Office",
"Fax": "Fax",
"Home": "Home",
"Other": "Khác"
}
},
"sets": {
"summernote": {
"NOTICE": "You can find translation here: https://github.com/HackerWins/summernote/tree/master/lang",
"font":{
"bold": "Đậm",
"italic": "Nghiêng",
"underline": "Gạch chân",
"strike": "Gạch giữa",
"clear": "Xóa định dạng",
"height": "Kích thước dòng",
"name": "Font chữ",
"size": "Kích thước"
},
"image":{
"image": "Ảnh",
"insert": "Chèn ảnh",
"resizeFull": "Ảnh đầy đủ",
"resizeHalf": "Giảm nửa kích thước",
"resizeQuarter": "Giảm 1/4 kích thước",
"floatLeft": "Căn trái",
"floatRight": "Căn phải",
"floatNone": "Không căn lề",
"dragImageHere": "Thả ảnh vào đây",
"selectFromFiles": "Chọn từ thư mục",
"url": "Đường dẫn ảnh",
"remove": "Xóa ảnh"
},
"link":{
"link": "Đường dẫn",
"insert": "Chèn đường dẫn",
"unlink": "Xóa liên kết",
"edit": "Sửa",
"textToDisplay": "Chữ hiển thị",
"url":"To what URL should this link go?",
"openInNewWindow": "Mở trong cửa sổ mới"
},
"video":{
"video": "Video",
"videoLink": "Đường dẫn video",
"insert": "Chèn Video",
"url":"Video URL?",
"providers":"(YouTube, Vimeo, Vine, Instagram, or DailyMotion)"
},
"table":{
"table": "Bảng"
},
"hr":{
"insert": "Thêm dòng ngang"
},
"style":{
"style": "Kiểu",
"normal": "Bình thường",
"blockquote": "Trích dẫn",
"pre": "Code",
"h1": "Tiêu đề 1",
"h2": "Tiêu đề 2",
"h3": "Tiêu đềTiêu đề 3",
"h4": "Tiêu đề 4",
"h5": "Tiêu đề 5",
"h6": "Tiêu đề 6"
},
"lists":{
"unordered": "Liệt kê",
"ordered": "Danh sách"
},
"options":{
"help": "Trợ giúp",
"fullscreen": "Đầy màn hình",
"codeview": "Hiển thị dạng code"
},
"paragraph":{
"paragraph": "Đoạn văn bản",
"outdent": "Bỏ lùi đầu dòng",
"indent": "Lùi đầu dòng",
"left": "Căn lề trái",
"center": "Căn lề giữa",
"right": "Căn lề phải",
"justify": "Căn lề 2 bên"
},
"color":{
"recent": "Màu đã dùng",
"more": "Thêm màu",
"background": "Màu nền",
"foreground": "Màu chữ",
"transparent": "Trong suốt",
"setTransparent": "Chỉnh độ trong suốt",
"reset": "Reset",
"resetToDefault": "Đặt lại mặc định"
},
"shortcut":{
"shortcuts": "Phím tắt",
"close": "Đóng",
"textFormatting": "Định dạng chữ",
"action": "Hành động",
"paragraphFormatting": "Định dạng đoạn văn bản",
"documentStyle": "Kiểu văn bản"
},
"history":{
"undo": "Quay lui",
"redo": "Tiến lên"
}
}
}
}
@@ -0,0 +1,6 @@
{
"fields": {
"post": "Gửi",
"attachments": "Đính kèm"
}
}
@@ -0,0 +1,32 @@
{
"fields": {
"dateFormat": "Định dạng ngày",
"timeFormat": "Định dạng thời gian",
"timeZone": "Múi giờ",
"weekStart": "Ngày đầu tiên của tuần",
"thousandSeparator": "Dấu phân cách hàng nghìn",
"decimalMark": "Dấu phân cách thập phân",
"defaultCurrency": "Tiền tệ mặc định",
"currencyList": "Danh sách tiền tệ",
"language": "Ngôn ngữ",
"smtpServer": "Máy chủ",
"smtpPort": "Cổng",
"smtpAuth": "Truy cập",
"smtpSecurity": "Bảo mật",
"smtpUsername": "Tên đăng nhập",
"emailAddress": "Email",
"smtpPassword": "Mật khẩu",
"smtpEmailAddress": "Địa chỉ email",
"exportDelimiter": "Xuất dấu phân cách"
},
"links": {
},
"options": {
"weekStart": {
"0": "Chủ nhật",
"1": "Thứ 2"
}
}
}
@@ -0,0 +1,32 @@
{
"fields": {
"name": "Tên",
"roles": "Vai trò"
},
"links": {
"users": "Người dùng",
"teams": "Nhóm"
},
"labels": {
"Access": "Truy cập",
"Create Role": "Tạo vai trò"
},
"options": {
"accessList": {
"not-set": "chưa đặt",
"enabled": "kích hoạt",
"disabled": "tắt"
},
"levelList": {
"all": "tất cả",
"team": "nhóm",
"own": "sở hữu",
"no": "không"
}
},
"actions": {
"read": "Đọc",
"edit": "Sửa",
"delete": "Xóa"
}
}
@@ -0,0 +1,30 @@
{
"fields": {
"name": "Tên",
"status": "Trạng thái",
"job": "Công việc",
"scheduling": "Scheduling (crontab notation)"
},
"links": {
"log": "Nhật ký"
},
"labels": {
"Create ScheduledJob": "Lên lịch công việc"
},
"options": {
"job": {
"CheckInboundEmails": "Kiểm tra hộp thư đến",
"Cleanup": "Dọn dẹp"
},
"cronSetup": {
"linux": "Note: Add this line to the crontab file to run Espo Scheduled Jobs:",
"mac": "Note: Add this line to the crontab file to run Espo Scheduled Jobs:",
"windows": "Note: Create a batch file with the following commands to run Espo Scheduled Jobs using Windows Scheduled Tasks:",
"default": "Note: Add this command to Cron Job (Scheduled Task):"
},
"status": {
"Active": "Đang hoạt động",
"Inactive": "Chưa hoạt động"
}
}
}
@@ -0,0 +1,6 @@
{
"fields": {
"status": "Trạng thái",
"executionTime": "Thời gian hoạt động"
}
}
@@ -0,0 +1,64 @@
{
"fields": {
"useCache": "Dùng Cache",
"dateFormat": "Định dạng ngày",
"timeFormat": "Định dạng thời gian",
"timeZone": "Múi giờ",
"weekStart": "Ngày đầu tiên của tuần",
"thousandSeparator": "Dấu phân cách hàng nghìn",
"decimalMark": "Dấu phân cách thập phân",
"defaultCurrency": "Tiền tệ mặc định",
"currencyList": "Danh sách tiền tệ",
"language": "Ngôn ngữ",
"companyLogo": "Logo công ty",
"smtpServer": "Máy chủ",
"smtpPort": "Cổng",
"smtpAuth": "Truy cập",
"smtpSecurity": "Bảo mật",
"smtpUsername": "Tên đăng nhập",
"emailAddress": "Email",
"smtpPassword": "Mật khẩu",
"outboundEmailFromName": "tên người gửi",
"outboundEmailFromAddress": "Địa chỉ gửi",
"outboundEmailIsShared": "Được chia sẻ",
"recordsPerPage": "Số bản ghi trên mỗi trang",
"recordsPerPageSmall": "Records Per Page (Small)",
"tabList": "Danh sách Tab",
"quickCreateList": "Tạo nhanh danh sách",
"exportDelimiter": "Xuất dấu phân cách",
"authenticationMethod": "Phương thức xác thực",
"ldapHost": "Máy chủ",
"ldapPort": "Cổng",
"ldapAuth": "Truy cập",
"ldapUsername": "Tên đăng nhập",
"ldapPassword": "Mật khẩu",
"ldapBindRequiresDn": "Yêu cầu Dn",
"ldapBaseDn": "Dn gốc",
"ldapAccountCanonicalForm": "Account Canonical Form",
"ldapAccountDomainName": "Tên miền tài khoản",
"ldapTryUsernameSplit": "Thử lại",
"ldapCreateEspoUser": "Tạo người dùng",
"ldapSecurity": "Bảo mật",
"ldapUserLoginFilter": "Bộ lọc đăng nhập",
"ldapAccountDomainNameShort": "Tên miền tài khoản",
"ldapOptReferrals": "Được giới thiệu",
"disableExport": "Disable Export (only admin is allowed)"
},
"options": {
"weekStart": {
"0": "Chủ nhật",
"1": "Thứ 2"
}
},
"labels": {
"System": "Hệ thống",
"Locale": "Bản địa hóa",
"SMTP": "SMTP",
"Configuration": "Tùy chỉnh"
}
}
@@ -0,0 +1,12 @@
{
"fields": {
"name": "Tên",
"roles": "Vai trò"
},
"links": {
"users": "Người dùng"
},
"labels": {
"Create Team": "Tạo nhóm"
}
}
@@ -0,0 +1,32 @@
{
"fields": {
"name": "Tên",
"userName": "Tên người dùng",
"title": "Tiêu đề",
"isAdmin": "Tài khoản Admin",
"defaultTeam": "Nhóm mặc định",
"emailAddress": "Email",
"phoneNumber": "Điện thoại",
"roles": "Vai trò",
"password": "Mật khẩu",
"passwordConfirm": "Xác thực mật khẩu",
"newPassword": "Mật khẩu mới"
},
"links": {
"teams": "Nhóm",
"roles": "Vai trò"
},
"labels": {
"Create User": "Tạo người dùng",
"Generate": "Tạo",
"Access": "Truy cập",
"Preferences": "Tùy chỉnh",
"Change Password": "Đổi mật khẩu"
},
"messages": {
"passwordWillBeSent": "Mật khẩu sẽ được gửi tới email tài khoản",
"accountInfoEmailSubject": "Thông tin tài khoản",
"accountInfoEmailBody": "Your account information:\n\nUsername: {userName}\nPassword: {password}\n\n{siteUrl}",
"passwordChanged": "Mật khẩu đã được đổi"
}
}
@@ -28,5 +28,11 @@
"rows": [
[{"name": "exportDelimiter"}]
]
},
{
"label": "Notifications",
"rows": [
[{"name": "receiveAssignmentEmailNotifications"}]
]
}
]
@@ -14,5 +14,11 @@
[{"name": "outboundEmailFromName"}, {"name": "outboundEmailFromAddress"}],
[{"name": "outboundEmailIsShared"}]
]
},
{
"label": "Notifications",
"rows": [
[{"name": "assignmentEmailNotifications"}, {"name": "assignmentEmailNotificationsEntityList"}]
]
}
]
@@ -35,5 +35,6 @@
}
}
}
]
],
"boolFilters": ["onlyMy"]
}
@@ -1,7 +1,8 @@
{
"controller": "Controllers.Record",
"controller": "Controllers.Record",
"recordViews":{
"edit": "EmailTemplate.Record.Edit",
"detail": "EmailTemplate.Record.Detail"
}
},
"boolFilters": ["onlyMy"]
}
@@ -11,5 +11,8 @@
"teams":{
"create":false
}
}
},
"views": {
"list": "Role.List"
}
}
@@ -173,7 +173,6 @@
},
"collection": {
"sortBy": "dateSent",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}
@@ -83,6 +83,10 @@
"default": ",",
"required": true,
"maxLength": 1
},
"receiveAssignmentEmailNotifications": {
"type": "bool",
"default": true
}
}
}
@@ -187,6 +187,14 @@
"disableExport": {
"type": "bool",
"default": false
},
"assignmentEmailNotifications": {
"type": "bool",
"default": false
},
"assignmentEmailNotificationsEntityList": {
"type": "array",
"translation": "Global.scopeNamesPlural"
}
}
}
@@ -27,8 +27,5 @@
},
"mergable":false,
"notCreatable": false,
"search":{
"basic":false,
"advanced":true
}
"filter": true
}
@@ -15,10 +15,7 @@
"hidden": true
}
],
"search":{
"basic":false,
"advanced":false
},
"filter": false,
"notCreatable": false,
"fieldDefs":{
"type":"jsonArray"
@@ -2,10 +2,7 @@
"params":[
],
"notCreatable": true,
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"type":"int",
"autoincrement":true,
@@ -5,10 +5,7 @@
"type":"bool"
}
],
"search":{
"basic":false,
"advanced":false
},
"filter": false,
"notCreatable": true,
"fieldDefs":{
"notStorable":true
@@ -5,8 +5,5 @@
"type":"bool"
}
],
"search":{
"basic":false,
"advanced":true
}
"filter": true
}
@@ -24,10 +24,7 @@
"disabled": true
}
},
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"type":"float"
}
@@ -18,10 +18,7 @@
"type":"varchar"
}
],
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"notNull":false
}
@@ -18,10 +18,7 @@
"type":"varchar"
}
],
"search":{
"basic":false,
"advanced":false
},
"filter": true,
"fieldDefs":{
"notNull":false
}
@@ -10,10 +10,7 @@
"data"
],
"notCreatable": true,
"search":{
"basic":true,
"advanced":true
},
"filter": true,
"fieldDefs":{
"notStorable":true
}
@@ -14,10 +14,7 @@
"type":"varchar"
}
],
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"type":"varchar"
}
@@ -9,10 +9,7 @@
"type":"float"
}
],
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"notCreatable": true,
"fieldDefs":{
"type":"float"

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