Улучшаем напоминания. Изменяем варианты даты начала и времени напоминания

Добрый день всем читателям. Сегодня мы затронем вопрос напоминаний в SugarCRM о звонке/встрече/задаче (в дальнейшем я буду называть это мероприятием), а конкретно займемся изменением значений минут даты начала (по умолчанию возможны только варианты 0, 15, 30, 45), а это для некоторых довольно неудобно и хотелось бы увеличить количество вариантов начала мероприятия. Точно так же вопрос обстоит с напоминанием. По умолчанию можно поставить напоминание только за 1, 5, 10, 15, 30, 60 минут.

Напоминания в SugarCRM

Предлагаю сделать все с промежутками в 5 минут. Если вы захотите сделать другие промежутки времени, то вы без труда измените код, который я вам предлагаю.
Начнем сперва с более простой задачи в плане реализации. Изменим варианты времени напоминания мероприятия. Здесь все сделано грамотно, и разработчики дают четкие инструкции, как изменять варианты select значения в SugarCRM. Все значения select хранятся в $app_list_strings. Нам нужно изменить опцию reminder_time_options. Для любого редактирования опций необходимо добавить файл по пути custom/Extension/application/Ext/Language/language.Имя_файла.php . Где для русского языка language имеет значение ru_ru, для английского en_us. Имя файла — любое. Обычно если это значения для одного модуля, то принято давать и название из имени модуля.

Итак, создаем файл custom/Extension/application/Ext/Language/ru_ru.Meetings.php, где перечисляем нужные варианты (ключ массива — это значение в секундах, а значения элементов массивов — это строковая интерпретация количества времени, которая будет показана пользователю):

<?php
$app_list_strings['reminder_time_options'] =
  array(
	60 => 'за 1 минуту',
	300 => 'за 5 минут',
	600 => 'за 10 минут',
	900 => 'за 15 минут',
	1200 => 'за 20 минут',
	1500 => 'за 25 минут',
	1800 => 'за 30 минут',
	2100 => 'за 35 минут',
	2400 => 'за 40 минут',
	2700 => 'за 45 минут',
	3000 => 'за 50 минут',
	3300 => 'за 55 минут',
	3600 => 'за 1 час',
  );
?>

Если необходимо, проделайте то же самое для английского языка, создав файл custom/Extension/application/Ext/Language/en_us.Meetings.php.

Теперь запускаем в администрировании быстрое восстановление и наблюдаем за результатом:

Дата напоминания в SugarCRM

Также здесь необходимо помнить один нюанс: если вам необходимо время напоминания больше одного часа, то чтобы напоминание сработало, необходимо в этом же файле изменить параметр reminder_max_time на нужное. Например, мы добавили в нашу CRM вариант напоминания за два часа. Наш файл будет со следующим содержимым:

<?php
$app_list_strings['reminder_time_options'] =
  array(
	60 => 'за 1 минуту',
	300 => 'за 5 минут',
	600 => 'за 10 минут',
	900 => 'за 15 минут',
	1200 => 'за 20 минут',
	1500 => 'за 25 минут',
	1800 => 'за 30 минут',
	2100 => 'за 35 минут',
	2400 => 'за 40 минут',
	2700 => 'за 45 минут',
	3000 => 'за 50 минут',
	3300 => 'за 55 минут',
	3600 => 'за 1 час',
	7200 => 'за 2 часа',
  );
$app_list_strings['reminder_max_time']=7200;
?>

Теперь приступим к изменению вариантов времени начала мероприятия. Так просто изменить данные варианты в CRM не получится. Дело в том, что это специальное поле SugarCRM типа Datetimecombo. И за его отображение отвечает отдельный шаблон smarty. Но изменять шаблон этого поля нам не потребуется. А достаточно будет изменить javascript файл, относящийся к полю данного типа. Отрываем файл jssource/src_files/include/SugarFields/Fields/Datetimecombo/Datetimecombo.js. Здесь будут происходить все наши изменения.
Во первых изменяем (у меня это строки 70-80):

//A safety scan to make sure hrs and minutes are formatted correctly
if (this.mins > 0 && this.mins < 15) {
  this.mins = 15;
} else if (this.mins > 15 && this.mins < 30) {
  this.mins = 30;
} else if (this.mins > 30 && this.mins < 45) {
  this.mins = 45;
} else if (this.mins > 45) {
  this.hrs += 1;
  this.mins = 0;
} //if-else

на

if (this.mins > 0 && this.mins < 55) {
  for (var i=0; i<=50; i=i+5){
    if (this.mins > i && this.mins < i+5 ) {
      this.mins = i + 5;
    }
  }
} else if (this.mins > 55) {
  this.hrs += 1;
  this.mins = 0;
} //if-else

И само изменение вариантов селекта date_start_minutes.
Изменим данный код

text += '\n<option value="00" ' + (this.mins == 0 ? "SELECTED" : "") + '>00</option>';
text += '\n<option value="15" ' + (this.mins == 15 ? "SELECTED" : "") + '>15</option>';
text += '\n<option value="30" ' + (this.mins == 30 ? "SELECTED" : "") + '>30</option>';
text += '\n<option value="45" ' + (this.mins == 45 ? "SELECTED" : "") + '>45</option>';

На более грамотный короткий аналог.

for (i=0; i<=55; i=i+5){
  val = i < 10 ? "0" + i : i;
  text += '\n<option value="' + val + '" ' + (this.mins == i ? "SELECTED" : "") + '>' + val + '</option>';
}

Третий параметр в цикле — это шаг в минутах. Если вам надо, допустим, сделать возможность выбора каждой минуты, просто замените 5 на 1, каждой десятой — замените 5 на 10 и т.д.

Теперь необходимо обязательно сделать замену оригинального javascript файла нашим. Для этого переходим в SugarCRM — администрирование — восстановление — минимизация файлов Javascript.
Если вдруг вы изменяли сжатые javascript файлы, то можете просто скопировать данный файл с заменой в include/SugarFields/Fields/Datetimecombo.

Проверяем наш результат.

Дата начала мероприятия

Если же вам неохота вносить изменения и разбираться, что к чему, то для самых ленивых по данной ссылке вы можете скачать измененную версию данного файла (для SugarCRM 6), которую достаточно скопировать в include/SugarFields/Fields/Datetimecombo/ Datetimecombo.js.

До новых встреч и удачи в освоении CRM :-)

Высказать своё мнение о статье Вы можете в комментариях, если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.

Есть 10 коммент. к “Улучшаем напоминания. Изменяем варианты даты начала и времени напоминания”

  1. Спасибо за статью, интересная и полезная касательно изменений параметров начала встречи.

    Для конфигураии параметров функции напоминаний в SugarCRM это не актуально, т.к. они изменяются намного проще, через студию, dropdown editor. Необходимо просто изменить, удалить или добавить новые значения в соответствующий список.

    Конкретно, для параметров функции напоминаний необходимо отредактировать dropdown list с названием «reminder_time_options».

    С уважением,

    Александр.

    • Шуга Админ:

      Добрый день, Александр.

      Спасибо за комментарий, я прекрасно знаю, что такое SugarCRM студия, но:

      1) Для меня проще делать некоторые вещи «руками», т.к. я всегда контролирую, какие файлы меняю, и всегда могу заливать изменения в рабочую версию, а не дублировать действия в студии на сервере, или же искать, какие файлы SugarCRM студия изменила.

      2) Я думаю, разработчикам полезно будет знать, что реально происходит внутри, а не просто кликать в студии на кнопки.

      3) Через студию никак нельзя изменить варианты времени начала мероприятия.

      • Полностью согласен:)

        Просто, я думаю, что будет неплохо дополнить статью информацией о том, что можно делать через студию. Ведь не все читатели данного ресурса разработчики и умеют или хотят лезть в код, особенно если есть возможность достичь необходимого в самой студии.

        С уважением,

        Александр.

  2. Chif:

    Добрый день!

    Касательно изменения даты напоминания:

    Создал файл и написал код:

     'за 1 минуту',  
    	300 => 'за 5 минут',  
    	600 => 'за 10 минут',  
    	900 => 'за 15 минут',  
    	1200 => 'за 20 минут',  
    	1500 => 'за 25 минут',  
    	1800 => 'за 30 минут',  
    	2100 => 'за 35 минут',  
    	2400 => 'за 40 минут',  
    	2700 => 'за 45 минут',  
    	3000 => 'за 50 минут',  
    	3300 => 'за 55 минут',  
    	3600 => 'за 1 час',  
    	7200 => 'за 2 часа',
    	10800 => 'за 3 часа',
    	14400 => 'за 4 часа',
    	18000 => 'за 5 часов',
    	21600 => 'за 6 часов',
    	28800 => 'за 8 часов',
    	86400 => 'за 1 день',
    	172800 => 'за 2 дня',
    	);  
    $app_list_strings['reminder_max_time']=172800; 
    ?>;
    

    Затем выполнилд быстрое восстановление, но варианты так и не появились...

    Версия 5,5,2

    • Шуга Админ:

      Могу предположить возможные три варианта:

      1) Вы неправильно назвали соответствующую опцию: необходимо $app_list_strings['reminder_time_options'];

      2) Вы поместили данный языковой не в нужную папку, и файл автоматически не подключается;

      3) Попробуйте почистить языковой кеш SugarCRM в ручном режиме. В папке cache/modules/Meetings удалите папку language.

      • Chif:

        1. Код копировал, + провели. все верно

         'за 1 минуту',  
        	300 => 'за 5 минут',  
        	600 => 'за 10 минут',  
        	900 => 'за 15 минут',  
        	1200 => 'за 20 минут',  
        	1500 => 'за 25 минут',  
        	1800 => 'за 30 минут',  
        	2100 => 'за 35 минут',  
        	2400 => 'за 40 минут',  
        	2700 => 'за 45 минут',  
        	3000 => 'за 50 минут',  
        	3300 => 'за 55 минут',  
        	3600 => 'за 1 час',  
        	7200 => 'за 2 часа',
        	10800 => 'за 3 часа',
        	14400 => 'за 4 часа',
        	18000 => 'за 5 часов',
        	21600 => 'за 6 часов',
        	28800 => 'за 8 часов',
        	86400 => 'за 1 день',
        	172800 => 'за 2 дня',
        	);  
        $app_list_strings['reminder_max_time']=172800; 
        ?>; 
        

        2. Размещен верно: custom/Extension/application/Ext/Language. Имя файла ru_ru.Meetings.php

        3. Удалил. Без результатно.

        Проверил все по 3 раза не пойму в чем проблема...

        • Шуга Админ:

          Если у вас не получается отредактировать combobox в ручном режиме, воспользуйтесь визуальным режимом.

          В SugarCRM перейдите в пункт Администрирование -> редактор комбобокса -> reminder_time_options и отредактируйте записи так как вам необходимо.

        • Chif:

          так уже и сделал, но все время которое больше часа просто напросто не уведомляет пользователя...

  3. snegg:

    Здравствуйте в очередной раз. Хочу выразить вам благодарность за ваши статьи. Они оказались очень и очень занимательными и полезными. Я довольно за короткий срок разобрался с чередой немаловажных вопросов.

    И вот на ряду еще один: как правильно работать с javascript? В смысле, как правильно его использовать (где описывать свои пользовательские функции, где подключать и т.д.) для создания своих зависимых полей, например, связанных , checkbox с text и т.д.

    Большое спасибо!

    З.Ы. Если пишу не там где положено, приношу свои извинения.

Написать комментарий

Вы должны войти чтобы комментировать.