Compare commits

...

57 Commits
2.0.0 ... 2.2.0

Author SHA1 Message Date
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
97c951484d fix add dashlet 2014-07-25 15:18:37 +03:00
Yuri Kuznetsov
2215f15aaf lang 2014-07-25 12:58:26 +03:00
Yuri Kuznetsov
65f38a4906 Merge branch 'release/2.1' into stable 2014-07-25 12:27:30 +03:00
Yuri Kuznetsov
6429823cc3 version 2014-07-25 11:28:50 +03:00
Yuri Kuznetsov
2a71bb2ea1 duplicate 2014-07-25 11:24:20 +03:00
Yuri Kuznetsov
1674c2221e disableExport 2014-07-24 18:48:03 +03:00
Yuri Kuznetsov
e3b448f520 style preset 2014-07-24 17:48:49 +03:00
Yuri Kuznetsov
a04c973817 css 2014-07-24 16:21:17 +03:00
Yuri Kuznetsov
01c9939215 fix css 2014-07-24 16:08:32 +03:00
Yuri Kuznetsov
2d57824cb0 fix css 2014-07-24 15:33:23 +03:00
Yuri Kuznetsov
878385f14b fix import UI 2014-07-24 15:27:27 +03:00
Yuri Kuznetsov
8b82058d06 fix import 2014-07-24 15:20:17 +03:00
Yuri Kuznetsov
68e05f0935 datetime edit more nice 2014-07-24 15:00:49 +03:00
Yuri Kuznetsov
cb7492c042 email to case: dont copy email body 2014-07-24 14:41:05 +03:00
Yuri Kuznetsov
beb811755f improve bool filters ui 2014-07-24 11:21:21 +03:00
Yuri Kuznetsov
7c7fc4ee0f impreove preset search 2014-07-24 11:01:47 +03:00
Yuri Kuznetsov
aeef25f7ec fix preset ok 2014-07-23 17:19:35 +03:00
Yuri Kuznetsov
6856ff97b1 fix previous commit 2014-07-23 17:11:09 +03:00
Yuri Kuznetsov
10f6f7600c create notifications via cron 2014-07-23 17:04:03 +03:00
Yuri Kuznetsov
a0b678a3d9 remove some files from grunt uglify 2014-07-23 16:17:30 +03:00
Yuri Kuznetsov
f78e558a33 fix search 2014-07-23 15:56:06 +03:00
Yuri Kuznetsov
e205ef3370 improve fields tpls 2014-07-23 15:38:38 +03:00
Yuri Kuznetsov
8b6e4d469e onlyMy for meetings and calls 2014-07-23 12:49:10 +03:00
Yuri Kuznetsov
a63ec2710b fix filter 2014-07-23 12:20:16 +03:00
Yuri Kuznetsov
6895fac58c date filters 2014-07-23 11:57:48 +03:00
Yuri Kuznetsov
ea3c8f2d35 fix preset 2014-07-23 09:56:42 +03:00
Yuri Kuznetsov
0f2c050537 lang 2014-07-22 18:22:38 +03:00
Yuri Kuznetsov
2cd8866c73 Merge branch 'stable' 2014-07-22 18:07:44 +03:00
Yuri Kuznetsov
86a5e19b55 version 2014-07-22 17:46:38 +03:00
Yuri Kuznetsov
61f435812d fix timezones 2014-07-22 17:42:55 +03:00
Yuri Kuznetsov
217d0f6540 preset filters 4 2014-07-22 17:37:21 +03:00
Yuri Kuznetsov
f0e7a8f029 preset filters 2 2014-07-22 16:25:56 +03:00
Yuri Kuznetsov
d2954483d9 preset filters 2014-07-21 16:45:18 +03:00
Yuri Kuznetsov
999b88cba1 Merge branch 'stable' 2014-07-18 17:04:59 +03:00
Yuri Kuznetsov
717df30063 Merge branch 'release/2.0' into stable 2014-07-18 17:04:35 +03:00
157 changed files with 2765 additions and 5726 deletions

View File

@@ -52,8 +52,7 @@ module.exports = function (grunt) {
'frontend/client/lib/base64.js',
'frontend/client/lib/jquery-ui.min.js',
'frontend/client/lib/moment.min.js',
'frontend/client/lib/moment-timezone.min.js',
'frontend/client/lib/moment-timezone-data.js',
'frontend/client/lib/moment-timezone-with-data.min.js',
'frontend/client/lib/jquery.timepicker.min.js',
'frontend/client/lib/jquery.autocomplete.js',
'frontend/client/lib/bootstrap.min.js',
@@ -88,9 +87,6 @@ module.exports = function (grunt) {
'frontend/client/src/models/user.js',
'frontend/client/src/models/preferences.js',
'frontend/client/src/controllers/base.js',
'frontend/client/src/controllers/record.js',
'frontend/client/src/controllers/role.js',
'frontend/client/src/controllers/admin.js',
'frontend/client/src/view.js',
'frontend/client/src/views/base.js',
'frontend/client/src/views/login.js',

View File

@@ -182,8 +182,10 @@ class Record extends Base
}
public function actionExport($params, $data, $request)
{
// TODO move to service
{
if ($this->getConfig()->get('disableExport') && !$this->getUser()->isAdmin()) {
throw new Forbidden();
}
if (!$this->getAcl()->check($this->name, 'read')) {
throw new Forbidden();

View File

@@ -56,7 +56,12 @@ class EntityManager extends \Espo\ORM\EntityManager
public function getUser()
{
return $this->user;
}
}
public function getEspoMetadata()
{
return $this->espoMetadata;
}
public function setEspoMetadata($espoMetadata)
{

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;
}
}
}
@@ -255,6 +272,15 @@ class Base
case 'isFalse':
$part[$item['field'] . '='] = false;
break;
case 'today':
$part[$item['field'] . '='] = date('Y-m-d');
break;
case 'past':
$part[$item['field'] . '<'] = date('Y-m-d');
break;
case 'future':
$part[$item['field'] . '>'] = date('Y-m-d');
break;
case 'between':
if (is_array($item['value'])) {
$part['AND'] = array(

View File

@@ -68,7 +68,8 @@ return array (
'fr_FR',
'tr_TR',
'ro_RO',
'pt_BR'
'pt_BR',
'vi_VN'
),
'language' => 'en_US',
'logger' =>

View File

@@ -53,11 +53,25 @@ class Notifications extends \Espo\Core\Hooks\Base
WHERE entity_id = " . $pdo->quote($parentId) . " AND entity_type = " . $pdo->quote($parentType);
$sth = $pdo->prepare($sql);
$sth->execute();
$userIdList = array();
while ($row = $sth->fetch(\PDO::FETCH_ASSOC)) {
if ($this->getUser()->id != $row['userId']) {
$this->getNotificationService()->notifyAboutNote($row['userId'], $entity->id);
$userIdList[] = $row['userId'];
}
}
if (!empty($userIdList)) {
$job = $this->getEntityManager()->getEntity('Job');
$job->set(array(
'serviceName' => 'Notification',
'method' => 'notifyAboutNoteFromJob',
'data' => json_encode(array(
'userIdList' => $userIdList,
'noteId' => $entity->id
)),
'executeTime' => date('Y-m-d H:i:s'),
));
$this->getEntityManager()->saveEntity($job);
}
}
}
}

View File

@@ -30,5 +30,10 @@
"Set Held": "Set Held",
"Set Not Held": "Set Not Held",
"Send Invitations": "Send Invitations"
},
"presetFilters": {
"planned": "Planned",
"held": "Held",
"todays": "Today's"
}
}

View File

@@ -34,5 +34,9 @@
},
"labels": {
"Create Case": "Create Case"
},
"presetFilters": {
"open": "Open",
"closed": "Closed"
}
}

View File

@@ -42,5 +42,8 @@
"Campaign": "Campaign",
"Other": "Other"
}
},
"presetFilters": {
"active": "Active"
}
}

View File

@@ -24,6 +24,13 @@
"Create Meeting": "Create Meeting",
"Set Held": "Set Held",
"Set Not Held": "Set Not Held",
"Send Invitations": "Send Invitations"
"Send Invitations": "Send Invitations",
"Saved as Held": "Saved as Held",
"Saved as Not Held": "Saved as Not Held"
},
"presetFilters": {
"planned": "Planned",
"held": "Held",
"todays": "Today's"
}
}

View File

@@ -30,5 +30,9 @@
},
"labels": {
"Create Opportunity": "Create Opportunity"
},
"presetFilters": {
"open": "Open",
"won": "Won"
}
}

View File

@@ -27,5 +27,11 @@
},
"labels": {
"Create Task": "Create Task"
},
"presetFilters": {
"active": "Active",
"completed": "Completed",
"todays": "Today's",
"overdue": "Overdue"
}
}

View File

@@ -14,7 +14,7 @@
},
"links": {
"contacts": "Contacte",
"opportunities": "Opportunitati",
"opportunities": "Oportunitati",
"cases": "Cazuri"
},
"options": {

View File

@@ -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"
}
}

View File

@@ -34,5 +34,9 @@
},
"labels": {
"Create Case": "Creare Caz"
},
"presetFilters": {
"open": "Deschide",
"closed": "Inchis"
}
}

View File

@@ -14,7 +14,7 @@
"description": "Descriere"
},
"links": {
"opportunities": "Opportunitati",
"opportunities": "Oportunitati",
"cases": "Cazuri"
},
"labels": {

View File

@@ -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",

View File

@@ -42,5 +42,8 @@
"Campaign": "Campanie",
"Other": "Altele"
}
},
"presetFilters": {
"active": "Activ"
}
}

View File

@@ -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"
}
}

View File

@@ -30,5 +30,9 @@
},
"labels": {
"Create Opportunity": "Creare Oportunitate"
},
"presetFilters": {
"open": "Deschide",
"won": "Won"
}
}

View File

@@ -27,5 +27,11 @@
},
"labels": {
"Create Task": "Creaza Activitate"
},
"presetFilters": {
"active": "Activ",
"completed": "Completat",
"todays": "Today's",
"overdue": "Overdue"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -1 +1 @@
["status","priority","dateStart","dateEnd"]
["status","priority","dateStart","dateEnd"]

View File

@@ -29,5 +29,6 @@
],
"layout":"listForAccount"
}
}
},
"boolFilters": ["onlyMy"]
}

View File

@@ -1,38 +1,81 @@
{
"controller": "Controllers.Record",
"views":{
"detail":"Crm:Call.Detail"
},
"sidePanels":{
"detail":[
{
"name":"attendees",
"label":"Attendees",
"view":"Record.Panels.Side",
"options":{
"fields":[
"users",
"contacts",
"leads"
],
"mode":"detail"
}
}
],
"edit":[
{
"name":"attendees",
"label":"Attendees",
"view":"Record.Panels.Side",
"options":{
"fields":[
"users",
"contacts",
"leads"
],
"mode":"edit"
}
}
]
}
"controller": "Controllers.Record",
"views":{
"detail":"Crm:Call.Detail"
},
"menu": {
"detail": {
"dropdown": [
{
"label": "Duplicate",
"action": "duplicate",
"acl": "edit"
}
]
}
},
"sidePanels":{
"detail":[
{
"name":"attendees",
"label":"Attendees",
"view":"Record.Panels.Side",
"options":{
"fields":[
"users",
"contacts",
"leads"
],
"mode":"detail"
}
}
],
"edit":[
{
"name":"attendees",
"label":"Attendees",
"view":"Record.Panels.Side",
"options":{
"fields":[
"users",
"contacts",
"leads"
],
"mode":"edit"
}
}
]
},
"presetFilters": [
{
"name":"planned",
"style": "primary",
"data": {
"status": {
"type": "in",
"value": ["Planned"]
}
}
},
{
"name":"held",
"style": "success",
"data": {
"status": {
"type": "in",
"value": ["Held"]
}
}
},
{
"name":"todays",
"data": {
"dateStart": {
"type": "today",
"dateTime": true
}
}
}
],
"boolFilters": ["onlyMy"]
}

View File

@@ -22,5 +22,28 @@
"view":"Crm:Record.Panels.Tasks"
}
]
}
},
"presetFilters": [
{
"name":"open",
"style": "primary",
"data": {
"status": {
"type": "in",
"value": ["New", "Assigned", "Pending"]
}
}
},
{
"name":"closed",
"style": "success",
"data": {
"status": {
"type": "in",
"value": ["Closed"]
}
}
}
],
"boolFilters": ["onlyMy"]
}

View File

@@ -21,5 +21,6 @@
"view":"Crm:Record.Panels.Tasks"
}
]
}
},
"boolFilters": ["onlyMy"]
}

View File

@@ -24,5 +24,18 @@
"view":"Crm:Record.Panels.Tasks"
}
]
}
},
"presetFilters": [
{
"name":"active",
"style": "primary",
"data": {
"status": {
"type": "in",
"value": ["New", "Assigned", "In Process"]
}
}
}
],
"boolFilters": ["onlyMy"]
}

View File

@@ -1,38 +1,81 @@
{
"controller": "Controllers.Record",
"views":{
"detail":"Crm:Meeting.Detail"
},
"sidePanels":{
"detail":[
{
"name":"attendees",
"label":"Attendees",
"view":"Record.Panels.Side",
"options":{
"fields":[
"users",
"contacts",
"leads"
],
"mode":"detail"
}
}
],
"edit":[
{
"name":"attendees",
"label":"Attendees",
"view":"Record.Panels.Side",
"options":{
"fields":[
"users",
"contacts",
"leads"
],
"mode":"edit"
}
}
]
}
"controller": "Controllers.Record",
"views":{
"detail":"Crm:Meeting.Detail"
},
"menu": {
"detail": {
"dropdown": [
{
"label": "Duplicate",
"action": "duplicate",
"acl": "edit"
}
]
}
},
"sidePanels":{
"detail":[
{
"name":"attendees",
"label":"Attendees",
"view":"Record.Panels.Side",
"options":{
"fields":[
"users",
"contacts",
"leads"
],
"mode":"detail"
}
}
],
"edit":[
{
"name":"attendees",
"label":"Attendees",
"view":"Record.Panels.Side",
"options":{
"fields":[
"users",
"contacts",
"leads"
],
"mode":"edit"
}
}
]
},
"presetFilters": [
{
"name":"planned",
"style": "primary",
"data": {
"status": {
"type": "in",
"value": ["Planned"]
}
}
},
{
"name":"held",
"style": "success",
"data": {
"status": {
"type": "in",
"value": ["Held"]
}
}
},
{
"name":"todays",
"data": {
"dateStart": {
"type": "today",
"dateTime": true
}
}
}
],
"boolFilters": ["onlyMy"]
}

View File

@@ -21,5 +21,28 @@
"view":"Crm:Record.Panels.Tasks"
}
]
}
},
"presetFilters": [
{
"name":"open",
"style": "primary",
"data": {
"stage": {
"type": "in",
"value": ["Prospecting", "Qualification", "Needs Analysis", "Value Proposition", "Id. Decision Makers", "Perception Analysis","Proposal/Price Quote","Negotiation/Review"]
}
}
},
{
"name":"won",
"style": "success",
"data": {
"stage": {
"type": "in",
"value": ["Closed Won"]
}
}
}
],
"boolFilters": ["onlyMy"]
}

View File

@@ -13,5 +13,6 @@
}
]
}
}
},
"boolFilters": ["onlyMy"]
}

View File

@@ -1,3 +1,49 @@
{
"controller": "Controllers.Record"
"controller": "Controllers.Record",
"presetFilters": [
{
"name":"active",
"style": "primary",
"data": {
"status": {
"type": "in",
"value": ["Not Started", "Started"]
}
}
},
{
"name":"completed",
"style": "success",
"data": {
"status": {
"type": "in",
"value": ["Completed"]
}
}
},
{
"name":"todays",
"data": {
"dateEnd": {
"type": "today",
"dateTime": true
}
}
},
{
"name":"overdue",
"style": "danger",
"data": {
"dateEnd": {
"type": "past",
"dateTime": true
},
"status": {
"type": "in",
"value": ["Not Started", "Started"]
}
}
}
],
"boolFilters": ["onlyMy"]
}

View File

@@ -155,7 +155,6 @@
},
"collection": {
"sortBy": "name",
"asc": true,
"boolFilters": ["onlyMy"]
"asc": true
}
}

View File

@@ -148,7 +148,6 @@
},
"collection": {
"sortBy": "dateStart",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}

View File

@@ -114,6 +114,6 @@
"collection": {
"sortBy": "number",
"asc": false,
"boolFilters": ["onlyMy", "open"]
"boolFilters": ["onlyMy"]
}
}

View File

@@ -183,7 +183,6 @@
},
"collection": {
"sortBy": "name",
"asc": true,
"boolFilters": ["onlyMy"]
"asc": true
}
}

View File

@@ -189,7 +189,6 @@
},
"collection": {
"sortBy": "createdAt",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}

View File

@@ -143,7 +143,6 @@
},
"collection": {
"sortBy": "dateStart",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}

View File

@@ -125,7 +125,6 @@
},
"collection": {
"sortBy": "createdAt",
"asc": false,
"boolFilters": ["onlyMy", "open"]
"asc": false
}
}

View File

@@ -108,7 +108,6 @@
},
"collection": {
"sortBy": "createdAt",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}

View File

@@ -87,7 +87,6 @@
},
"collection": {
"sortBy": "createdAt",
"asc": false,
"boolFilters": ["onlyMy", "active"]
"asc": false
}
}

View File

@@ -22,15 +22,16 @@
namespace Espo\Modules\Crm\SelectManagers;
class Opportunity extends \Espo\Core\SelectManagers\Base
class Call extends \Espo\Core\SelectManagers\Base
{
protected function getBoolFilterWhereOpen()
{
protected function getBoolFilterWhereOnlyMy()
{
return array(
'type' => 'notIn',
'field' => 'stage',
'value' => array('Closed Won', 'Closed Lost'),
'type' => 'linkedWith',
'field' => 'users',
'value' => array($this->user->id)
);
}
}

View File

@@ -22,16 +22,16 @@
namespace Espo\Modules\Crm\SelectManagers;
class CaseObj extends \Espo\Core\SelectManagers\Base
class Meeting extends \Espo\Core\SelectManagers\Base
{
protected function getBoolFilterWhereOpen()
{
protected function getBoolFilterWhereOnlyMy()
{
return array(
'type' => 'notIn',
'field' => 'status',
'value' => array('Closed', 'Rejected', 'Duplicate'),
'type' => 'linkedWith',
'field' => 'users',
'value' => array($this->user->id)
);
}
}

View File

@@ -24,22 +24,23 @@ 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'),
'value' => array('Completed', 'Canceled')
);
}
protected function getBoolFilterWhereInactive()
{
{
return array(
'type' => 'in',
'field' => 'status',
'value' => array('Completed', 'Canceled'),
'value' => array('Completed', 'Canceled')
);
}
}

View File

@@ -313,7 +313,6 @@ class InboundEmail extends \Espo\Services\Record
$case = $this->getEntityManager()->getEntity('Case');
$case->populateDefaults();
$case->set('name', $email->get('name'));
$case->set('description', $email->get('bodyPlain'));
$userId = $this->getUser()->id;
if (!empty($params['userId'])) {

View File

@@ -271,7 +271,11 @@ class PhoneNumber extends \Espo\Core\ORM\Repositories\RDB
$isNewPhoneNumber = false;
if (!$phoneNumberNew) {
$phoneNumberNew = $this->get();
$phoneNumberNew->set('name', $phone);
$phoneNumberNew->set('name', $phone);
$defaultType = $this->getEntityManager()->getEspoMetadata()->get('entityDefs.' . $entity->getEntityName() . '.fields.phoneNumber.defaultType');
$phoneNumberNew->set('type', $defaultType);
$this->save($phoneNumberNew);
$isNewPhoneNumber = true;
}

View File

@@ -28,5 +28,9 @@
"labels": {
"Create Email": "Archive Email",
"Compose": "Compose"
},
"presetFilters": {
"sent": "Sent",
"archived": "Archived"
}
}

View File

@@ -109,7 +109,12 @@
"You": "You",
"you": "you",
"change": "change",
"Primary": "Primary"
"Primary": "Primary",
"Save Filters": "Save Filters",
"Administration": "Administration",
"Run Import": "Run Import",
"Duplicate": "Duplicate",
"Notifications": "Notifications"
},
"messages": {
"notModified": "You have not modified the record",
@@ -271,7 +276,10 @@
"notOn": "Not On",
"after": "After",
"before": "Before",
"between": "Between"
"between": "Between",
"today": "Today",
"past": "Past",
"future": "Future"
},
"intSearchRanges": {
"equals": "Equals",
@@ -289,6 +297,13 @@
"2": "2 minutes",
"5": "5 minutes",
"10": "10 minutes"
},
"phoneNumber": {
"Mobile": "Mobile",
"Office": "Office",
"Fax": "Fax",
"Home": "Home",
"Other": "Other"
}
},
"sets": {

View File

@@ -46,7 +46,8 @@
"ldapSecurity": "Security",
"ldapUserLoginFilter": "User Login Filter",
"ldapAccountDomainNameShort": "Account Domain Name Short",
"ldapOptReferrals": "Opt Referrals"
"ldapOptReferrals": "Opt Referrals",
"disableExport": "Disable Export (only admin is allowed)"
},
"options": {
"weekStart": {

View File

@@ -28,5 +28,9 @@
"labels": {
"Create Email": "Arhiveaza Email",
"Compose": "Compune"
},
"presetFilters": {
"sent": "Trimis",
"archived": "Arhivat"
}
}

View File

@@ -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": {

View File

@@ -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": {

View File

@@ -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"
}
}
}

View File

@@ -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"
}
}

View File

@@ -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ữ"
}
}

View File

@@ -0,0 +1,7 @@
{
"labels": {
"Primary": "Chính",
"Opted Out": "Chọn ra",
"Invalid": "Không hợp lệ"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}
}
}

View File

@@ -0,0 +1,6 @@
{
"fields": {
"post": "Gửi",
"attachments": "Đính kèm"
}
}

View File

@@ -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"
}
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}
}

View File

@@ -0,0 +1,6 @@
{
"fields": {
"status": "Trạng thái",
"executionTime": "Thời gian hoạt động"
}
}

View File

@@ -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"
}
}

View File

@@ -0,0 +1,12 @@
{
"fields": {
"name": "Tên",
"roles": "Vai trò"
},
"links": {
"users": "Người dùng"
},
"labels": {
"Create Team": "Tạo nhóm"
}
}

View File

@@ -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"
}
}

View File

@@ -1,6 +1,7 @@
[
"emailAddress",
"dateSent",
"status",
"parent",
"body"
]

View File

@@ -2,7 +2,8 @@
{
"label": "System",
"rows": [
[{"name": "useCache"},{"name": "companyLogo"}]
[{"name": "useCache"},{"name": "companyLogo"}],
[{"name": "disableExport"}]
]
},
{

View File

@@ -1,19 +1,40 @@
{
"controller": "Controllers.Record",
"model": "Models.Email",
"views":{
"list":"Email.List"
},
"menu": {
"list": {
"buttons": [
{
"label": "Compose",
"action": "composeEmail",
"style": "danger",
"acl": "edit"
}
]
}
}
"controller": "Controllers.Record",
"model": "Models.Email",
"views":{
"list":"Email.List"
},
"menu": {
"list": {
"buttons": [
{
"label": "Compose",
"action": "composeEmail",
"style": "danger",
"acl": "edit"
}
]
}
},
"presetFilters": [
{
"name":"archived",
"data": {
"status": {
"type": "in",
"value": ["Archived"]
}
}
},
{
"name":"sent",
"data": {
"status": {
"type": "in",
"value": ["Sent"]
}
}
}
],
"boolFilters": ["onlyMy"]
}

View File

@@ -1,7 +1,8 @@
{
"controller": "Controllers.Record",
"controller": "Controllers.Record",
"recordViews":{
"edit": "EmailTemplate.Record.Edit",
"detail": "EmailTemplate.Record.Detail"
}
},
"boolFilters": ["onlyMy"]
}

View File

@@ -173,7 +173,6 @@
},
"collection": {
"sortBy": "dateSent",
"asc": false,
"boolFilters": ["onlyMy"]
"asc": false
}
}

View File

@@ -41,6 +41,9 @@
"dashletOptions": {
"type": "text"
},
"presetFilters": {
"type": "text"
},
"smtpEmailAddress": {
"type": "varchar",
"readOnly": true,

View File

@@ -183,6 +183,10 @@
"ldapCreateEspoUser": {
"type": "bool",
"default": true
}
},
"disableExport": {
"type": "bool",
"default": false
}
}
}

View File

@@ -27,8 +27,5 @@
},
"mergable":false,
"notCreatable": false,
"search":{
"basic":false,
"advanced":true
}
"filter": true
}

View File

@@ -15,10 +15,7 @@
"hidden": true
}
],
"search":{
"basic":false,
"advanced":false
},
"filter": false,
"notCreatable": false,
"fieldDefs":{
"type":"jsonArray"

View File

@@ -2,10 +2,7 @@
"params":[
],
"notCreatable": true,
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"type":"int",
"autoincrement":true,

View File

@@ -5,10 +5,7 @@
"type":"bool"
}
],
"search":{
"basic":false,
"advanced":false
},
"filter": false,
"notCreatable": true,
"fieldDefs":{
"notStorable":true

View File

@@ -5,8 +5,5 @@
"type":"bool"
}
],
"search":{
"basic":false,
"advanced":true
}
"filter": true
}

View File

@@ -24,10 +24,7 @@
"disabled": true
}
},
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"type":"float"
}

View File

@@ -18,10 +18,7 @@
"type":"varchar"
}
],
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"notNull":false
}

View File

@@ -18,10 +18,7 @@
"type":"varchar"
}
],
"search":{
"basic":false,
"advanced":false
},
"filter": true,
"fieldDefs":{
"notNull":false
}

View File

@@ -10,10 +10,7 @@
"data"
],
"notCreatable": true,
"search":{
"basic":true,
"advanced":true
},
"filter": true,
"fieldDefs":{
"notStorable":true
}

View File

@@ -14,10 +14,7 @@
"type":"varchar"
}
],
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"type":"varchar"
}

View File

@@ -9,10 +9,7 @@
"type":"float"
}
],
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"notCreatable": true,
"fieldDefs":{
"type":"float"

View File

@@ -9,10 +9,7 @@
"type":"int"
}
],
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"notCreatable": true,
"fieldDefs":{
"type":"int"

View File

@@ -15,10 +15,7 @@
"fieldDefs":{
"skip":true
},
"search":{
"basic":false,
"advanced":false
},
"filter": false,
"linkDefs": {
"type": "belongsTo",
"entity": "Attachment"

View File

@@ -18,10 +18,7 @@
"type":"float"
}
],
"search":{
"basic":false,
"advanced":true
},
"filter": true,
"fieldDefs":{
"notNull":false
}

View File

@@ -9,10 +9,7 @@
"type":"varchar"
}
],
"search":{
"basic":false,
"advanced":false
},
"filter": false,
"notCreatable": true,
"fieldDefs":{
"skip":true

View File

@@ -21,10 +21,7 @@
"fieldDefs":{
"skip":true
},
"search":{
"basic":false,
"advanced":false
},
"filter": false,
"linkDefs": {
"type": "belongsTo",
"entity": "Attachment"

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