ken_nogi/pleasanter/develop2/リハ訪問カレンダー/リハ訪問カレンダー.js
Kenichiro NOGI 88a402ce0f up
2026-07-10 18:13:30 +09:00

1071 lines
41 KiB
JavaScript

loadcdn('script', 'https://cdn.jsdelivr.net/npm/rrule@2.6.4/dist/es5/rrule.min.js');
loadcdn('script', 'https://cdn.jsdelivr.net/npm/fullcalendar-scheduler@6.1.8/index.global.min.js');
loadcdn('script', 'https://cdn.jsdelivr.net/npm/@fullcalendar/rrule@6.1.8/index.global.min.js');
//本番用
let kokyakuTableId = '482703';
let resourceTableId = '482697';
let reigaiTableId = '482700';
let shukaiTableId = '482696';
let kobetsuTableId = '482701';
let holidayTableId = '482695';
let apiKey = '6504c8a807677a3a576e10327f3c19876c55736ee45d4a845796b9e7f5e087bfd4bd0d8184863da8cf1733ca635111432ab334aea59102b06a96ee6d2c05190d';
let patternData = JSON.parse($('#patternData').val()) || [];
let categoryData = JSON.parse($('#categoryData').val()) || [];
let resourceCount;
const sleep = (second) => new Promise(resolve => setTimeout(resolve, second * 1000));
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
window.addEventListener('load', function () {
$('#NewMenuContainer').hide();
let app = document.getElementById('Application');
//////////////////////////////////////////////////
let nowdate = document.createElement('div');
nowdate.id = 'nowdate';
//////////////////////////////////////////////////
let saveDate = new Date();
saveDate = new Date(saveDate.getFullYear(), saveDate.getMonth(), 1, 0, 0, 0);
////console.log(Cookies.get('nanairoCalSelectMonth'));
if (!(Cookies.get('nanairoCalSelectMonth'))) {
Cookies.set('nanairoCalSelectMonth', saveDate, {
expires: 90,
path: ''
});
nowdate.setAttribute('nowdate', new Date);
} else {
saveDate = new Date(Cookies.get('nanairoCalSelectMonth'));
nowdate.setAttribute('nowdate', new Date(Cookies.get('nanairoCalSelectMonth')));
}
//////////////////////////////////////////////////
let selectMonth = document.createElement('select');
selectMonth.id = 'selectMonth';
selectMonth.name = 'selectMonth';
for (i = -2; i <= 6; i++) {
let date0 = new Date();
date0 = new Date(date0.getFullYear(), date0.getMonth(), 1, 0, 0, 0);
date0.setMonth(date0.getMonth() + i);
let option = document.createElement('option');
option.value = date0;
option.textContent = date0.getFullYear() + '年' + (date0.getMonth() + 1) + '月';
if (date0.getTime() == saveDate.getTime()) {
option.setAttribute('selected', 'selected');
}
selectMonth.appendChild(option);
}
////console.log(selectMonth);
//////////////////////////////////////////////////////////////////////////////////
let buttonArea = document.createElement('div');
buttonArea.id = 'buttonArea';
let button0 = document.createElement('button');
button0.type = 'button';
button0.id = 'button0';
button0.innerHTML = ' ▶顧客リスト ';
button0.setAttribute('onclick', 'location.href="/pleasanter/items/' + kokyakuTableId + '/index/"');
buttonArea.append(button0);
buttonArea.append(selectMonth);
app.innerHTML = '';
app.appendChild(nowdate);
app.appendChild(buttonArea);
///////////////////
$('#selectMonth').selectmenu({
width: '150px',
change: function (event, data) {
////console.log(data);
let selectValue = new Date(data.item.value);
Cookies.set('nanairoCalSelectMonth', selectValue, {
expires: 90,
path: ''
});
nowdate.setAttribute('nowdate', selectValue);
initialize();
$('.ui-selectmenu-text').css({
'font-weight': 'bold',
'font-size': '1.5em',
});
}
});
$('#selectMonth-button').css({
'margin': '0 5px 5px 0',
});
$('.ui-selectmenu-text').css({
'font-weight': 'bold',
'font-size': '1.5em',
});
///////////////////
$('#button0').css({
'margin': '0 5px 5px 0',
'font-size': '1.5em'
});
$('#button0').button();
///////////////////
initialize();
});
function initialize() {
c7s = new care7_Scheduler;
c7s.createResource();
c7s.createEvents();
//////////////
createCalendarContainer();
c7s.createCalendar('cal1', 0);
c7s.createCalendar('cal2', 1);
c7s.createCalendar('cal3', 2);
c7s.createCalendar('cal4', 3);
c7s.createCalendar('cal5', 4);
let rscCount = c7s.resources.length;
for (i = 0; i <= 4; i++) {
$("#cal1 th[role='columnheader']").eq(i).css("border-right-width", "3px");
$("#cal2 th[role='columnheader']").eq(i).css("border-right-width", "3px");
$("#cal3 th[role='columnheader']").eq(i).css("border-right-width", "3px");
$("#cal4 th[role='columnheader']").eq(i).css("border-right-width", "3px");
$("#cal5 th[role='columnheader']").eq(i).css("border-right-width", "3px");
$("#cal1 th[role='columnheader']").eq((5 + rscCount - 1) + (i * rscCount)).css("border-right-width", "3px");
$("#cal2 th[role='columnheader']").eq((5 + rscCount - 1) + (i * rscCount)).css("border-right-width", "3px");
$("#cal3 th[role='columnheader']").eq((5 + rscCount - 1) + (i * rscCount)).css("border-right-width", "3px");
$("#cal4 th[role='columnheader']").eq((5 + rscCount - 1) + (i * rscCount)).css("border-right-width", "3px");
$("#cal5 th[role='columnheader']").eq((5 + rscCount - 1) + (i * rscCount)).css("border-right-width", "3px");
$("#cal1 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1).css("border-right-width", "3px");
$("#cal1 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1 + (rscCount * 5)).css("border-right-width", "3px");
$("#cal2 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1).css("border-right-width", "3px");
$("#cal2 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1 + (rscCount * 5)).css("border-right-width", "3px");
$("#cal3 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1).css("border-right-width", "3px");
$("#cal3 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1 + (rscCount * 5)).css("border-right-width", "3px");
$("#cal4 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1).css("border-right-width", "3px");
$("#cal4 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1 + (rscCount * 5)).css("border-right-width", "3px");
$("#cal5 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1).css("border-right-width", "3px");
$("#cal5 td[role='gridcell']").eq(rscCount + (i * rscCount) - 1 + (rscCount * 5)).css("border-right-width", "3px");
}
getHolidays(2024);
$("td[data-time='12:00:00'],td[data-time='12:15:00'],td[data-time='12:30:00'],td[data-time='12:45:00']").css({
"background-color": "lightsteelblue",
"opacity": "0.5"
});
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getHolidays() {
//日付処理
//基準日を中心に前後1ヶ月
let nowdate = new Date(document.getElementById('nowdate').getAttribute('nowdate'));
let startdate = nowdate;
startdate.setMonth(startdate.getMonth() - 1);
startdate.setDate(1);
startdate.setHours(0);
startdate.setMinutes(0);
startdate.setSeconds(0);
let enddate = new Date(startdate);
enddate.setMonth(enddate.getMonth() + 3);
enddate.setMinutes(enddate.getMinutes() - 1);
let startStr = startdate.getFullYear() + '/'
+ (startdate.getMonth() + 1).toString().padStart(2, '0') + '/'
+ startdate.getDate().toString().padStart(2, '0') + ' 00:00:00';
let endStr = enddate.getFullYear() + '/'
+ (enddate.getMonth() + 1).toString().padStart(2, '0') + '/'
+ enddate.getDate().toString().padStart(2, '0') + ' 00:00:00';
//console.log(startStr);
//console.log(endStr);
$p.apiGet({
"id": holidayTableId,
"async": false,
"data": {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"View": {
"ColumnFilterHash": {
"DateA": '["' + startStr + ',' + endStr + '"]'
},
}
},
"done": function (data) {
////console.log(data.Response.Data);
$.each(data.Response.Data, function (index, value) {
let classA = value.ClassHash.ClassA;
let dateA = new Date(value.DateHash.DateA);
////console.log(dateA + " " + classA);
let dateStr = dateA.getFullYear() + '-'
+ (dateA.getMonth() + 1).toString().padStart(2, '0') + '-'
+ dateA.getDate().toString().padStart(2, '0');
$('th[data-date="' + dateStr + '"]').css({ 'background-color': 'hotpink' });
$('td[data-date="' + dateStr + '"]').css({ 'background-color': 'hotpink' });
let dateStr2 = dateA.getFullYear() + '年'
+ (dateA.getMonth() + 1) + '月'
+ dateA.getDate() + '日';
$('a[aria-label="' + dateStr2 + '"]').after(classA);
});
}
});
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function care7_Scheduler() {
calObj = {};
this.events = [];
this.resources = [];
this.resourceCount;
this.myCalendar = null;
}
window.addEventListener('beforeprint', (event) => {
//console.log('Before print');
event.stopImmediatePropagation();
event.preventDefault();
});
window.addEventListener('afterprint', (event) => {
//console.log('After print');
event.stopImmediatePropagation();
event.preventDefault();
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//リソース(担当看護師一覧)取得
care7_Scheduler.prototype.createResource = function () {
let resource = [];
$p.apiGet({
"id": resourceTableId,
"async": false,
"data": {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"View": {
"ColumnSorterHash": {
"Title": "ASC"
}
}
},
"done": function (data) {
//console.log(data);
$.each(data.Response.Data, function (index, value) {
let member = {
id: value.ResultId,
title: value.Title
}
resource.push(member);
});
resourceCount = data.Response.TotalCount;
}
});
this.resources = resource;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
care7_Scheduler.prototype.createEvents = function () {
let eventList = [];
let exEvent = {};
let nowdate = new Date(document.getElementById('nowdate').getAttribute('nowdate'));
let startdate = nowdate;
startdate.setDate(1);
startdate.setHours(0);
startdate.setMinutes(0);
startdate.setSeconds(0);
let enddate = new Date(startdate);
enddate.setMonth(enddate.getMonth() + 1);
enddate.setMinutes(enddate.getMinutes() - 1);
let startStr = startdate.getFullYear() + '/' + ("00" + (startdate.getMonth() + 1)).slice(-2) + '/' + ("00" + startdate.getDate()).slice(-2) + ' 00:00:00';
let endStr = enddate.getFullYear() + '/' + ("00" + (enddate.getMonth() + 1)).slice(-2) + '/' + ("00" + enddate.getDate()).slice(-2) + ' 00:00:00';
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//例外予定取得
$p.apiGet({
"id": reigaiTableId,
"async": false,
"data": {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"View": {
"ColumnFilterHash": {
"DateB": '["' + startStr + ',' + endStr + '"]'
},
"ColumnSorterHash": {
"Title": "ASC"
}
}
},
"done": function (data) {
//console.log(data.Response.Data);
$.each(data.Response.Data, function (index, value) {
if (Array.isArray(exEvent[value.ClassHash.ClassA]) == false) {
exEvent[value.ClassHash.ClassA] = new Array;
}
exEvent[value.ClassHash.ClassA].push(value.DateHash.DateB.split('T')[0]);
});
}
});
////console.log(exEvent);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//周回予定取得
$p.apiGet({
"id": shukaiTableId,
"async": false,
"data": {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"View": {
"ColumnSorterHash": {
"Title": "ASC"
}
}
},
"done": function (data) {
//console.log(data.Response.Data);
$.each(data.Response.Data, function (index, value) {
let nowdate = new Date(document.getElementById('nowdate').getAttribute('nowdate'));
let startdate = nowdate;
startdate.setDate(1);
startdate.setHours(0);
startdate.setMinutes(0);
startdate.setSeconds(0);
let enddate = new Date(startdate);
enddate.setMonth(enddate.getMonth() + 1);
enddate.setMinutes(enddate.getMinutes() - 1);
let flag = 1;
////console.log(startdate);
////console.log(enddate);
let id = value.ResultId;
let title = value.ClassHash.ClassB;
let freqId = value.ClassHash.ClassC;
let time = value.ClassHash.ClassE + ':00';
let duration = value.ClassHash.ClassF;
let category = value.ClassHash.ClassG;
let date = 1;
date = value.ClassHash.ClassH; //指定週
//開始日よりも月末日があとの場合は除外
let activeStartTime = '';
if (value.DateHash.DateE != '1899-12-30T00:00:00') {
activeStartTime = new Date(value.DateHash.DateE);
if (enddate.getTime() <= activeStartTime.getTime()) {
//console.log('開始日判定 除外 : ' + title)
return true;
}
}
//終了日よりも月初日のほうが手前の場合除外
let activeEndTime = '';
if (value.DateHash.DateF != '1899-12-30T00:00:00') {
activeEndTime = new Date(value.DateHash.DateF);
if (startdate.getTime() >= activeEndTime.getTime()) {
//console.log('終了日判定 除外 : ' + title)
return true;
}
}
//リソースID変換
let str = value.ClassHash.ClassV;
str = str.replaceAll('"', '');
str = str.replaceAll('[', '');
str = str.replaceAll(']', '');
let resourceIds = new Array;
resourceIds = str.split(',');
//曜日返還
str = value.ClassHash.ClassD;
str = str.replaceAll('"', '');
str = str.replaceAll('[', '');
str = str.replaceAll(']', '');
let byweekday = new Array;
byweekday = str.split(',');
let freq = 'weekly';
let interval = 1;
let count = 999;
let bysetpos;
if (freqId == 2) { //第1,3週
freq = 'monthly';
interval = 1;
bysetpos = [1, 3];
} else if (freqId == 3) { //第2,4週
freq = 'monthly';
interval = 1;
bysetpos = [2, 4];
} else if (freqId == 4) { //毎月
freq = 'monthly';
interval = 10;
bysetpos = [date];
} else if (freqId == 5) { //奇数月
if ((startdate.getMonth() + 1) % 2 == 0) { //カレンダー月が偶数の場合はスキップ
//startdate.setMonth(startdate.getMonth() + 1);
//console.log('偶数のため除外 : ' + title);
return true;
} else {
//console.log('奇数月 : ' + title);
}
freq = 'monthly';
interval = 10;
bysetpos = [date];
} else if (freqId == 6) { //偶数月
if ((startdate.getMonth() + 1) % 2 != 0) { //カレンダー月が奇数の場合はスキップ
//startdate.setMonth(startdate.getMonth() + 1);
//console.log('奇数月のため除外 : ' + title);
return true;
} else {
//console.log('偶数月 : ' + title);
}
freq = 'monthly';
interval = 10;
bysetpos = [date];
} else if (freqId >= 7) { //3ヶ月毎1,4,7,10
let monthList = [];
if (freqId == 7) monthList = [1, 4, 7, 10];
if (freqId == 8) monthList = [2, 5, 8, 11];
if (freqId == 9) monthList = [3, 6, 9, 12];
let checkMonth = (startdate.getMonth() + 1);
if (monthList.includes(checkMonth)) { //カレンダー月がリストに含まれてたら
freq = 'monthly';
interval = 10;
bysetpos = [date];
//console.log('3ヶ月パターン : ' + freqId + ' : ' + title);
//console.log(title);
} else {
//console.log('該当月ではないため除外 : ' + title);
return true;
}
}
let dtstart = '';
let until = '';
dtstart = startdate.getFullYear() +
'-' + ("00" + (startdate.getMonth() + 1)).slice(-2) +
'-' + ("00" + startdate.getDate()).slice(-2) +
'T' + time;
until = enddate.getFullYear() +
'-' + ("00" + (enddate.getMonth() + 1)).slice(-2) +
'-' + ("00" + enddate.getDate()).slice(-2) +
'T' + time;
//ピンポイント備考の取得
let comments = [];
for (i = 1; i <= 5; i++) {
if (value.ClassHash['Class' + i.toString().padStart(3, 0)] != '') {
comments.push({
'commentDate': new Date(value.DateHash['Date' + i.toString().padStart(3, 0)]),
'comment': value.ClassHash['Class' + i.toString().padStart(3, 0)]
})
}
}
////console.log(resourceIds);
let event = {
'id': id,
'title': title,
'resourceIds': resourceIds,
'duration': duration,
'textColor': '#000000',
// borderColor: '#000000',
'extendedProps': {
'description': value.Body,
'category': 'その他',
'type': 2,
'byweekday': byweekday,
'comments': comments,
},
'rrule': {
'freq': freq,
'interval': interval,
'byweekday': byweekday,
'dtstart': dtstart,
'count': count,
'until': until,
},
'exdate': [],
}
event.extendedProps.category = categoryData[category].name;
switch (freqId) {
case 2:
case 3:
event.rrule.bysetpos = bysetpos;
break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
event.extendedProps.type = 3;
break;
}
if (freqId == 1) {//毎週
event.backgroundColor = categoryData[category].bgColor;
event.textColor = categoryData[category].fontColor;
event.borderColor = categoryData[category].bgColor;
} else {//その他
event.rrule.bysetpos = bysetpos;
event.backgroundColor = patternData[freqId].bgColor;
event.textColor = patternData[freqId].fontColor;
event.borderColor = patternData[freqId].bgColor;
}
//例外予定日処理
if (Array.isArray(exEvent[id]) == true) {
for (i = 0; i < exEvent[id].length; i++) {
exEvent[id][i] = exEvent[id][i] + 'T' + time;
}
event.exdate = exEvent[id];
}
//開始日が月初日よりもあとの場合、月初日から開始日の前日までを例外日に追加
if (value.DateHash.DateE != '1899-12-30T00:00:00') {
activeStartTime.setDate(activeStartTime.getDate() - 1);
if (startdate.getTime() <= activeStartTime.getTime()) {
//let dates = [];
let tempDate = new Date(startdate);
while (tempDate.getTime() <= activeStartTime.getTime()) {
let dateStr = tempDate.getFullYear() + '-' +
(tempDate.getMonth() + 1).toString().padStart(2, '0') + '-' +
tempDate.getDate().toString().padStart(2, '0');
event.exdate.push(dateStr + 'T' + time);
tempDate.setDate(tempDate.getDate() + 1);
}
//console.log(event.exdate);
}
}
//終了日が月末日よりもまえの場合、終了日の翌日から月末日までを例外日に追加
if (value.DateHash.DateF != '1899-12-30T00:00:00') {
activeEndTime.setDate(activeEndTime.getDate() + 1);
if (enddate.getTime() >= activeEndTime.getTime()) {
//let dates = [];
let tempDate = new Date(activeEndTime);
while (tempDate.getTime() <= enddate.getTime()) {
let dateStr = tempDate.getFullYear() + '-' +
(tempDate.getMonth() + 1).toString().padStart(2, '0') + '-' +
tempDate.getDate().toString().padStart(2, '0');
event.exdate.push(dateStr + 'T' + time);
tempDate.setDate(tempDate.getDate() + 1);
}
}
//console.log(event.exdate);
}
eventList.push(event);
});
//console.log(eventList);
}
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//個別予定取得
$p.apiGet({
"id": kobetsuTableId,
"async": false,
"data": {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"View": {
"ColumnFilterHash": {
"DateA": '["' + startStr + ',' + endStr + '"]'
},
"ColumnSorterHash": {
"Title": "ASC"
}
}
},
"done": function (data) {
//console.log(data.Response.Data);
$.each(data.Response.Data, function (index, value) {
let id = value.ResultId;
let title = value.ClassHash.ClassB;
let time = value.ClassHash.ClassE + ':00';
let duration = value.ClassHash.ClassF;
let category = value.ClassHash.ClassG;
//リソースID変換
let str = value.ClassHash.ClassV;
str = str.replaceAll('"', '');
str = str.replaceAll('[', '');
str = str.replaceAll(']', '');
let resourceIds = new Array;
resourceIds = str.split(',');
let start = new Date(value.DateHash.DateA);
start.setHours(time.split(':')[0]);
start.setMinutes(time.split(':')[1]);
let end = new Date(start);
if (category == '4') {
end.setHours(end.getHours() + 1);
end.setMinutes(end.getMinutes());
} else {
end.setHours(end.getHours() + Number(duration.split(':')[0]));
end.setMinutes(end.getMinutes() + Number(duration.split(':')[1]));
}
let comments = [];
let commentDate = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, 0);
if (value.ClassHash.Class001 != '') {
comments.push({
'commentDate': commentDate,
'comment': value.ClassHash.Class001
});
}
let event = {};
if (category == 4) {
event = {
'id': id,
'title': title,
'resourceIds': resourceIds,
'start': start,
'end': end,
'allDay': true,
'textColor': '#000000',
'borderColor': 'black',
'extendedProps': {
'description': value.Body,
'category': category,
'type': 1,
'comments': comments,
}
}
} else {
event = {
'id': id,
'title': title,
'resourceIds': resourceIds,
'start': start,
'end': end,
//'textColor': '#000000',
'borderColor': 'red',
'extendedProps': {
'description': value.Body,
'category': category,
'type': 1,
'comments': comments,
}
}
}
event.extendedProps.category = categoryData[category].name;
event.backgroundColor = categoryData[category].bgColor
event.textColor = categoryData[category].fontColor;
eventList.push(event);
});
}
});
this.events = eventList;
////console.log(this.events);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
care7_Scheduler.prototype.createCalendar = function (calid, num) {
////console.log(calid);
let calendarEl = document.getElementById(calid);
// let date1 = new Date();
let date1 = new Date(document.getElementById('nowdate').getAttribute('nowdate'));
date1.setDate(1);
let weekDay = date1.getDay();
if (weekDay == 0) {
date1.setDate(date1.getDate() + 1);
} else if (weekDay == 6) {
date1.setDate(date1.getDate() + 2);
} else {
date1.setDate(date1.getDate() - weekDay + 1);
}
date1.setDate(date1.getDate() + (num * 7));
//let myCalendar = new FullCalendar.Calendar(calendarEl, {
calObj[calid] = new FullCalendar.Calendar(calendarEl, {
schedulerLicenseKey: 'CC-Attribution-NonCommercial-NoDerivatives',
firstDay: 1,
rerenderDelay: 500,
droppable: true,
now: new Date(1900, 1, 1),
initialDate: date1,
weekends: false,
editable: true, //編集機能
locale: 'ja', //日本語表記
initialView: 'resourceTimeGridFiveDay',
headerToolbar: false,
datesAboveResources: true,
contentHeight: 'auto',
allDaySlot: true,
allDayText: '備考',
slotDuration: '00:20:00',
slotLabelInterval: '01:00',
slotMinTime: '08:00:00',
slotMaxTime: '17:00:00',
views: {
resourceTimeGridFiveDay: {
type: 'resourceTimeGrid',
duration: {
days: 5
}
},
},
resources: this.resources,
resourceOrder: 'title',
//events: this.events,
events: function (fetchInfo, successCallback, failureCallback) {
successCallback(c7s.events);
},
eventClick: function (info) {
openEventData(info);
},
eventContent: function (eventInfo) {
////console.log(eventInfo);
let timetext_ele = document.createElement('div');
let category_ele = document.createElement('div');
let length = 10000;
let sHour;
let sHourStr;
let sMinutes;
let sMinutesStr
let eHour;
let eHourStr;
let eMinutes;
let eMinutesStr;
if (eventInfo.event.extendedProps.category != '備考') {
sHour = eventInfo.event.start.getHours();
sHourStr = sHour.toString().padStart(2, '0');
sMinutes = eventInfo.event.start.getMinutes();
sMinutesStr = sMinutes.toString().padStart(2, '0');
eHour = eventInfo.event.end.getHours();
eHourStr = eHour.toString().padStart(2, '0');
eMinutes = eventInfo.event.end.getMinutes();
eMinutesStr = eMinutes.toString().padStart(2, '0');
length = (eHour * 60 + eMinutes) - (sHour * 60 + sMinutes)
timetext_ele.innerHTML = sHourStr + ':' + sMinutesStr + '-' + eHourStr + ':' + eMinutesStr;
timetext_ele.style.fontSize = '70%';
category_ele.style.fontSize = '70%';
category_ele.style.fontWeight = 'bold';
category_ele.innerHTML = '[' + eventInfo.event.extendedProps.category + ']';
}
let title_ele = document.createElement('div');
title_ele.style.fontSize = '120%';
title_ele.style.fontWeight = 'bold';
//title_ele.innerHTML = eventInfo.event.title;
title_ele.innerHTML = eventInfo.event.title.replace(/\s+/g, '');
let comments_ele = document.createElement('div');
////ピンポイント備考
let comments = eventInfo.event.extendedProps.comments;
if (comments.length) {
////console.log(comments);
let eventDate = new Date(eventInfo.event.start.getFullYear(), eventInfo.event.start.getMonth(), eventInfo.event.start.getDate(), 0, 0, 0);
for (i = 0; i < comments.length; i++) {
if ((comments[i].commentDate).getTime() == eventDate.getTime()) {
////console.log(comments[i]);
comments_ele.innerHTML = comments[i].comment;
//コメントがある場合に限り、枠が30分以下の場合、行間を狭める
if (length <= 30) {
title_ele.style.fontSize = '100%';
title_ele.style.lineHeight = '11px';
timetext_ele.style.lineHeight = '11px';
category_ele.style.lineHeight = '11px';
}
}
}
}
comments_ele.style.fontSize = '70%';
comments_ele.style.fontWeight = 'bold';
comments_ele.style.color = 'red';
comments_ele.style.backgroundColor = 'white';
comments_ele.style.overflowWrap = 'anywhere';
comments_ele.style.lineHeight = '11px';
let description_ele = document.createElement('pre');
description_ele.innerHTML = eventInfo.event.extendedProps.description;
description_ele.style.fontSize = '70%';
let ele = document.createElement('div');
ele.appendChild(timetext_ele);
ele.appendChild(category_ele);
ele.appendChild(title_ele);
if (eventInfo.event.extendedProps.category == '備考') {
ele.appendChild(description_ele);
}
ele.appendChild(comments_ele);
let arrayOfDomNodes = [ele];
return {
domNodes: arrayOfDomNodes
}
},
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
snapDuration: '00:15:00',
//イベント移動、リサイズ
eventResize: function (eventResizeInfo) {
eventDataUpdate(eventResizeInfo);
c7s.createEvents();
calObj.cal1.refetchEvents();
calObj.cal2.refetchEvents();
calObj.cal3.refetchEvents();
calObj.cal4.refetchEvents();
calObj.cal5.refetchEvents();
},
eventDrop: function (eventDropInfo) {
eventDataUpdate(eventDropInfo);
c7s.createEvents();
calObj.cal1.refetchEvents();
calObj.cal2.refetchEvents();
calObj.cal3.refetchEvents();
calObj.cal4.refetchEvents();
calObj.cal5.refetchEvents();
},
eventReceive: function (info) {
if (info.event.extendedProps.type == 1) {
eventDataUpdate(info);
c7s.createEvents();
}
info.event.remove();
calObj.cal1.refetchEvents();
calObj.cal2.refetchEvents();
calObj.cal3.refetchEvents();
calObj.cal4.refetchEvents();
calObj.cal5.refetchEvents();
},
});
calObj[calid].render();
////console.log(calObj[calid].getEvents());
////console.log(myCalendar.getEventById(2));
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function eventDataUpdate(info) {
////console.log(info);
let week = ['su', 'mo', 'tu', 'we', 'th', 'fr', 'sa'];
let type = info.event.extendedProps.type;
//リソースリスト作成
let resourceIds = '';
$.each(info.event._def.resourceIds, function (index, value) {
if (index == 0) resourceIds += '"' + value + '"';
if (index != 0) resourceIds += ',"' + value + '"';
});
//開始時間算出
let starttime = info.event.start.getHours().toString().padStart(2, '0') + ":" +
info.event.start.getMinutes().toString().padStart(2, '0');
let startdate = info.event.start.getFullYear() + '/' +
(info.event.start.getMonth() + 1).toString().padStart(2, '0') + '/' +
info.event.start.getDate().toString().padStart(2, '0') + ' 00:00:00';
//長さ算出
let diff = new Date(info.event.end - info.event.start);
diff.setHours(diff.getHours() - 9);
let duration = diff.getHours().toString().padStart(2, '0') + ':' +
diff.getMinutes().toString().padStart(2, '0');
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//個別予定の更新
if (type == 1) {
let eventData = {
id: info.event.id,
startdate: startdate,
starttime: starttime,
duration: duration,
}
$p.apiUpdate({
id: eventData.id,
data: {
ApiVersion: 1.0,
DateHash: {
DateA: eventData.startdate
},
ClassHash: {
ClassE: eventData.starttime,
ClassF: eventData.duration,
ClassV: '[' + resourceIds + ']'
}
},
done: function (data) {
////console.log(data);
},
fail: function (data) {
//console.log(data);
},
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//周回予定(週)の更新
} else if (type == 2 || type == 3) {
let eventData = {
id: info.event.id,
newweekday: week[info.event.start.getDay()],
oldweekday: week[info.oldEvent.start.getDay()],
weekList: info.event.extendedProps.byweekday,
starttime: starttime,
duration: duration,
}
eventData.weekList.forEach(function (element, index) {
if (element == eventData.oldweekday) {
eventData.weekList[index] = eventData.newweekday;
}
});
let byweekday = '"' + eventData.weekList.join('","') + '"';
////console.log(eventData);
$p.apiUpdate({
id: eventData.id,
data: {
ApiVersion: 1.0,
ClassHash: {
ClassE: eventData.starttime,
ClassF: eventData.duration,
ClassD: '[' + byweekday + ']',
ClassV: '[' + resourceIds + ']'
}
},
done: function (data) {
////console.log(data);
},
fail: function (data) {
//console.log(data);
},
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//周回予定(月)の更新
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//カレンダー保管コンテナの作成
function createCalendarContainer() {
let app = document.getElementById('Application');
if ($('#myCalContainer')[0]) {
$('#myCalContainer').remove();
}
let myCalContainer = document.createElement('div');
let cal1 = document.createElement('div');
let cal2 = document.createElement('div');
let cal3 = document.createElement('div');
let cal4 = document.createElement('div');
let cal5 = document.createElement('div');
cal1.style.backgroundColor = '#e6e6fa';
cal2.style.backgroundColor = '#ffffe0';
cal3.style.backgroundColor = '#e0ffff';
cal4.style.backgroundColor = '#ffb6c1';
cal5.style.backgroundColor = '#dcdcdc';
myCalContainer.id = 'myCalContainer';
//myCalContainer.style.width = '2200px';
let containerWidth = (resourceCount * 80) * 5 + 100;
myCalContainer.style.width = containerWidth + 'px';
myCalContainer.style.float = 'left';
myCalContainer.style.padding = '0px';
myCalContainer.style.margin = '0px';
cal1.id = 'cal1';
cal2.id = 'cal2';
cal3.id = 'cal3';
cal4.id = 'cal4';
cal5.id = 'cal5';
let pageBreak1 = document.createElement('div');
pageBreak1.classList.add('pagebreak');
let pageBreak2 = document.createElement('div');
pageBreak2.classList.add('pagebreak');
myCalContainer.appendChild(cal1);
myCalContainer.appendChild(cal2);
myCalContainer.appendChild(pageBreak1);
myCalContainer.appendChild(cal3);
myCalContainer.appendChild(cal4);
myCalContainer.appendChild(pageBreak2);
myCalContainer.appendChild(cal5);
// app.innerHTML = '';
// app.appendChild(buttonArea);
app.appendChild(myCalContainer);
$('#Footer').css("display", 'none');
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//イベント編集画面を開く
function openEventData(info) {
let windowName = 'Care7EventData';
let url = 'https://' + document.domain + '/pleasanter/items/' + info.event.id;
let option = 'width=1100px,height=800px,scrollbars = 0';
window.open(url, windowName, option);
}