- 概要
- 確認した環境
- 使用するプラグイン
- EasyGanttプラグインのコード修正
- plugins/easy_gantt/app/views/easy_gantt/_js_prepare.html.erb
- plugins/easy_gantt/assets/javascripts/easy_gantt/dhtml_rewrite.js
- plugins/easy_gantt/app/views/settings/_easy_gantt.html.erb
- plugins/easy_gantt/app/views/easy_gantt/projects.api.rsb
- plugins/easy_gantt/app/views/easy_gantt/issues.api.rsb
- plugins/easy_gantt/app/helpers/easy_gantt_helper.rb
- plugins/easy_gantt/assets/javascripts/easy_gantt/loader.js
- View Customize プラグインでグローバル変数に祝日を設定する
概要
EasyGantt 2.0 からは、それまで隠し機能として存在していた祝日表示が削除されてしまいました。
これにより、View Customize プラグインだけでは祝日に対応できなくなったため、コード修正して無理やり対応させてみました。(動作確認だけして、実際には使用していません。)
確認した環境
- Redmine v5.1.2
- Redmica v2.4.1 (https://www.redmica.jp/)
使用するプラグイン
- Easy Gantt PRO 2.0 (Free版): https://www.easyredmine.com/jp/redmine-gantt-plugin
- View Customize plugin for Redmine: https://github.com/onozaty/redmine-view-customize
EasyGanttプラグインのコード修正
以下のコードブロック内でハイライトした行を追加する
plugins/easy_gantt/app/views/easy_gantt/_js_prepare.html.erb
<%= content_for :header_tags do %>
<script type="text/javascript">
window.ysy = window.ysy || {};
ysy.settings = ysy.settings || {};
$.extend(true, ysy.settings, <%= {
platform: EasyGantt.platform,
easyRedmine: EasyGantt.easy_extensions?,
isGantt: (params[:controller] == 'easy_gantt'),
language: I18n.locale.to_s,
project: ({ id: @project.id, name: @project.name } if @project),
dateFormat: (Setting.date_format.presence || I18n.t('date.formats.default')),
nonWorkingWeekDays: EasyGantt.non_working_week_days,
holidays: [],
milestonePush: ((EasyGantt.easy_extensions? && !EasySetting.value('milestone_effective_date_from_issue_due_date')) ? true : false),
workDayDelays: EasySetting.value(:easy_gantt_relation_delay_in_workdays),
fixedRelations: false && EasySetting.value(:easy_gantt_fixed_delay),
defaultZoom: EasySetting.value(:easy_gantt_default_zoom),
paths: {
rootPath: home_path
},
labels: {
buttons: {
button_delete: l(:button_delete),
button_submit: l(:button_submit),
button_yes: l(:general_text_Yes),
....
plugins/easy_gantt/assets/javascripts/easy_gantt/dhtml_rewrite.js
/* dhtml_rewrite.js */
/* global ysy */
/**
* @external Moment
*/
// noinspection JSCommentMatchesSignature
/**
* @function moment
* @param {*} [arg1]
* @return {Moment}
*/
window.ysy = window.ysy || {};
ysy.view = ysy.view || {};
ysy.view.applyGanttRewritePatch = function () {
ysy.view.initNonworkingDays = function () {
var work_helper = gantt._working_time_helper;
work_helper.defHours = ysy.settings.hoursPerDay;
var i;
// Now we specify working days
var nonWorking = ysy.settings.nonWorkingWeekDays;
for (i in nonWorking) {
work_helper.set_time({day: nonWorking[i] % 7, hours: false});
}
var holidays = ysy.settings.holidays;
if (holidays) {
for (i = 0; i < holidays.length; i++) {
work_helper.set_time({date: moment(holidays[i]), hours: false});
}
}
work_helper._cache = {};
};
....
plugins/easy_gantt/app/views/settings/_easy_gantt.html.erb
<%
default_zoom_options = [
[l('easy_gantt.button.day_zoom'), 'day'],
[l('easy_gantt.button.week_zoom'), 'week'],
[l('easy_gantt.button.month_zoom'), 'month'],
[l('easy_gantt.button.quarter_zoom'), 'quarter'],
[l('easy_gantt.button.year_zoom'), 'year']
]
%>
<%= title l(:title_easy_gantt_settings) %>
<div class="box tabular">
<p>
<%= label_tag 'settings_show_holidays', l(:field_easy_gantt_show_holidays) %>
<%= check_box_tag 'settings[show_holidays]', '1', @settings['show_holidays'] == '1' %>
<em class="info small">
<%= l(:text_easy_gantt_show_holidays) %>
</em>
</p>
<p>
<%= label_tag 'settings_relation_delay_in_workdays', l(:field_easy_gantt_relation_delay_in_workdays) %>
<%= check_box_tag 'settings[relation_delay_in_workdays]', '1', @settings['relation_delay_in_workdays'] == '1' %>
<em class="info small">
<%= l(:text_easy_gantt_relation_delay_in_workdays) %>
</em>
</p>
....
plugins/easy_gantt/app/views/easy_gantt/projects.api.rsb
api.easy_gantt_data do
api.start_date @start_date
api.end_date @end_date
api_render_columns(api, @query)
api_render_projects(api, @projects, with_columns: true)
if EasySetting.value(:easy_gantt_show_holidays)
api_render_holidays(api, @start_date - 1.month, @end_date + 1.month)
end
end
plugins/easy_gantt/app/views/easy_gantt/issues.api.rsb
api.easy_gantt_data do
api.start_date @start_date
api.end_date @end_date
api_render_columns(api, @query)
api_render_projects(api, @projects)
api_render_issues(api, @issues, with_columns: true)
api_render_relations(api, @relations)
api_render_versions(api, @versions)
if EasySetting.value(:easy_gantt_show_holidays) && params[:subproject_loading].blank?
api_render_holidays(api, @start_date - 1.month, @end_date + 1.month)
end
end
plugins/easy_gantt/app/helpers/easy_gantt_helper.rb
def api_render_columns(api, query)
api.array :columns do
query.columns.each do |c|
api.column do
api.name c.name
api.title c.caption
end
end
end
end
def api_render_holidays(api, startdt, enddt)
wc = User.current.try(:current_working_time_calendar)
return if wc.nil?
api.array :holidays do
startdt.upto(enddt) do |date|
api.date date if wc.holiday?(date)
end
end
end
def api_render_issues(api, issues, with_columns: false)
api.array :issues do
issues.each do |issue|
api.issue do
api.id issue.id
api.name issue.subject
api.start_date issue.start_date
api.due_date issue.due_date
api.estimated_hours issue.estimated_hours
api.done_ratio issue.done_ratio
api.closed issue.closed?
api.fixed_version_id issue.fixed_version_id
plugins/easy_gantt/assets/javascripts/easy_gantt/loader.js
_handleMainGantt: function (data) {
if (!data.easy_gantt_data) return;
var json = data.easy_gantt_data;
ysy.log.debug("_handleGantt()", "load");
// -- LIMITS --
//ysy.data.limits.set({ // TODO
// start_date: moment(json.start_date, "YYYY-MM-DD"),
// end_date: moment(json.end_date, "YYYY-MM-DD")
//});
// -- COLUMNS --
ysy.data.columns = json.columns;
// ARRAY INITIALIZATION
// -- RELATIONS --
ysy.data.relations.clear();
// -- ISSUES --
ysy.data.issues.clear();
// -- MILESTONES --
ysy.data.milestones.clear();
// -- PROJECTS --
ysy.data.projects.clear();
// ARRAY FILLING
// -- PROJECTS --
this._loadProjects(json.projects);
// -- ISSUES --
this._loadIssues(json.issues, "root");
// -- MILESTONES --
this._loadMilestones(json.versions); // after issue loading because of shared milestones
// -- RELATIONS --
this._loadRelations(json.relations);
// -- HOLIDAYS --
this._loadHolidays(json.holidays);
ysy.log.debug("data loaded", "load");
ysy.log.message("JSON loaded");
this._fireChanges();
ysy.history.clear();
this.loaded = true;
},
....
View Customize プラグインでグローバル変数に祝日を設定する
View Customize プラグイン: https://github.com/onozaty/redmine-view-customize
パスのパターン | /projects/.*/easy_gantt|/easy_gantt |
挿入位置 | 全ページのヘッダ |
種別 | JavaScript |
$(document).ready(function(){
// 祝日対応
window.ysy.settings.holidays.push(
'2024-01-08', // 成人の日
'2024-02-11', // 建国記念の日
'2024-02-12', // 休日
'2024-02-23', // 天皇誕生日
'2024-03-20', // 春分の日
'2024-04-29', // 昭和の日
'2024-05-03', // 憲法記念日
'2024-05-04', // みどりの日
'2024-05-05', // こどもの日
'2024-05-06', // 休日
'2024-07-15', // 海の日
'2024-08-11', // 山の日
'2024-08-12', // 休日
'2024-09-16', // 敬老の日
'2024-09-22', // 秋分の日
'2024-09-23', // 休日
'2024-10-14', // スポーツの日
'2024-11-03', // 文化の日
'2024-11-04', // 休日
'2024-11-23', // 勤労感謝の日
);
});
以上です!
コメント