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); }