1071 lines
41 KiB
JavaScript
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);
|
|
|
|
}
|