Календарь: начало недели с понедельника

Добрый день всем читателям нашего блога! Сегодня я решил чиркануть короткую, но довольно полезную заметку, касающуюся календаря в SugarCRM. Я думаю, вы уже заметили, что рабочая неделя в календаре в этой CRM системе начинается с воскресенья. Все дело в том, что разработчики SugarCRM – американцы, а в Америке и Канаде неделя формально начинается как раз с воскресенья. Так что сегодня мы займемся изменением начала недели в календаре на привычный для нас понедельник.

А этих календаря два:
1) jscalendar, который используется в качестве всплывающего календаря в формах редактирования любого модуля
Календарь Sugarcrm

2) календарь одноименного модуля calendar
Модуль мероприятия SugarCRM

Необходимые изменения можно разбить на соответствующие два пункта:

1) Если у вас версия ранее 6.2 то продолжайте читать данный пункт. Если же у вас версия 6.2 и выше, то вам сюда.

В формах редактирования в качестве календаря используется javascript jscalendar. Папка с данным календарем находится в корне вашей CRM. Параметры локализации содержатся в папке lang данного модуля. Для начала недели с понедельника необходимо в файл jscalendar/lang /calendar-ru.js (если вы пользуетесь и английской версией, то и файл calendar-en.js) добавить следующую строчку:

Calendar._FD = 1;

FD — сокращение от First Day.
Результат:
Jscalendar SugarCRM

2)Несколько сложнее обстоит дело с модулем календаря. К сожалению, разработчики не предоставили удобного параметра для настройки календаря.

Если у вас версия SugarCRM 6.2 или 6.3, то более корректные номера строк можно получить в соответствующей теме на форуме. Если у вас 6.0 то правильные номера строк приведены в данной статье.

Нам необходимо будет подправить два файла следующим образом.
Открываем файл modules/Calendar/Calendar.php и строку 186 изменяем на следующую:

$first_day_of_month = $this->date_time->get_day_by_index_this_month(-1);

Строку 202 в этом же файле изменяем на:

for($i=1;$i<$days_in_week+1;$i++)

Открываем файл modules/Calendar/DateTimeUtil.php.

Строку 536 изменяем на:

if ( $day_index < 0 || $day_index > 7 )

Результат:
Начало недели с понедельника

Данное решение для SugarCRM 6.0. Но будет работать и на версии 5.5, но, возможно, номера строк будут отличаться на пару позиций.

Готово! Теперь можно в очередной раз бежать к начальству за премией :-)

Обновление от 6 сентября 2010.
Несколько полезных дополнений по данной теме:
1) Чтобы в режиме просмотра за неделю в шапке показывалась корректная дата, а не смещенная на один день, необходимо в файле modules/Calendar/templates/templates_calendar.php,
заменить строки (у меня 829-830 строка):

$first_day = $date_time->get_day_by_index_this_week(0);
$last_day = $date_time->get_day_by_index_this_week(6);

на

$first_day = $date_time->get_day_by_index_this_week(1);
$last_day = $date_time->get_day_by_index_this_week(7);

2) Чтобы в режиме просмотра за месяц и год были правильно подсвечены выходные, необходимо в modules/Calendar/templates/templates_calendar.php заменить строку 703 с данным содержанием

<td <?php if($j==0 || $j==6) { ?>class="weekEnd"<?php } ?>><?php  template_cal_day_slice($args); ?></td>

на

<td <?php if($j==5 || $j==6) { ?>class="weekEnd"<?php } ?>><?php  template_cal_day_slice($args); ?></td>

P.S. номера строк могут немного отличаться, ориентируйтесь по коду, а не по номерам.

UPDATE. 06 сентября 2011.
SugarCRM 6.2
В SugarCRM 6.2 разработчики отказались от js библиотеки jscalendar и используют средства встроенной YUI библиотеки. Поэтому открываем файл jssource/src_files/include/javascript/calendar.js и после строк:

calendar.cfg.setProperty('DATE_FIELD_DELIMITER', date_field_delimiter);
calendar.cfg.setProperty('MDY_DAY_POSITION', dayPos+1);
calendar.cfg.setProperty('MDY_MONTH_POSITION', monthPos+1);
calendar.cfg.setProperty('MDY_YEAR_POSITION', yearPos+1);

добавляем строку

calendar.cfg.setProperty('START_WEEKDAY',  1);

После этого для обновления javascript, ОБЯЗАТЕЛЬНО в админке выбираем восстановление — Минимизация файлов Javascript.

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

Есть 14 коммент. к “Календарь: начало недели с понедельника”

  1. Проделал все требуемые и описанные изменения.

    В 6ке сделать календарь не получилось. Sugar падает, когда я обращаюсь к ее календарику.

    PS: но javascript-календарь теперь работает, как надо

    • Шуга Админ:

      Добрый день, Игорь.

      Я проверил еще раз код, все отлично работает с SugarCRM 6 версии. Вышлите, пожалуйста, ваш измененный файл Calendar.php и DateTimeUtil.php мне на почту admin (собачка) sugartalk.ru, я проверю его.

  2. Спасибо На 6.0.1 всё работает. А как поправить заголовок недели? В нем все по старому.

    • Шуга Админ:

      В файле modules/Calendar/templates/templates_calendar.php,

      заменить строки (у меня 829-830 строка):

      $first_day = $date_time->get_day_by_index_this_week(0);
      $last_day = $date_time->get_day_by_index_this_week(6);
      

      на

      $first_day = $date_time->get_day_by_index_this_week(1);
      $last_day = $date_time->get_day_by_index_this_week(7);
      

      • Все работает. Спасибо.

        Вот бы еще в режиме просмотра месяца и года заливку поля «понедельник» перенести на поле «суббота»... *краснеющий смайлик*

        • Шуга Админ:

          Чтобы в режиме просмотра за месяц и год были правильно подсвечены выходные, необходимо в modules/Calendar/templates/templates_calendar.php

          заменить строку 703 с данным содержанием

          <td <?php if($j==0 || $j==6) { ?>class="weekEnd"<?php } ?>><?php  template_cal_day_slice($args); ?></td>
          

          на :

          <td <?php if($j==5 || $j==6) { ?>class="weekEnd"<?php } ?>><?php  template_cal_day_slice($args); ?></td>
          

        • Спасибо.

          Всё работает.

  3. Anton:

    На версии SugarCRM 5.5 тоже все работает.

    Спасибо.

  4. Sergey:

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

    Спасибо!

  5. Виталий:

    Все отлично работает. Спасибо!

  6. signless:

    У меня SugarCRM CE 6.2.0. У нее в корне нет ни папки jscalendar, ни какой-либо другой папки с похожим названием. Файлов calendar-en.js, calendar-ru.js в системе тоже нет нигде.Подскажите, пожалуйста, где же мне искать этот календарь в версии 6.2.

  7. Шуга Админ:

    Ваши вопросы задавайте в соответствующей теме на форуме(ссылка в конце статьи).

    В комментариях вопросы больше не принимаются.

    Обновил статью, ответ на ваш вопрос здесь

  8. signless:

    Спасибо. Теперь на 6.2 все работает.

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

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