BemsWebApplication.ExecutionScheduleCalendar = function (params, viewInfo) {
"use strict";
var endpointSelector;
if (BemsWebApplication.config.mode == "production") {
endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.production;
} else {
endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.local;
}
var eq = BWA.DataUtil.constructEqualFilter,
and = BWA.DataUtil.andFilter,
noteq = BWA.DataUtil.constructNotEqualFilter;
var executionScheduleCalendarPopup = null;
var SiteId = BWA.UserInfo.SiteId();
var holidayDataSource = BemsWebApplication.db.createDataSource('CmHoliday', true, true);
var holidayCustomDataSource = BemsWebApplication.db.createDataSource('CmHolidayCustom', true);
var holidayWeekendDataSource = BemsWebApplication.db.createDataSource('CmHolidayWeekend', true);
var checkBox_regular = true, checkBox_legal = true, checkBox_any = true;
var useBusinessFiltering = ko.observable(false);
var workScheduleDataSource = BWA.DataUtil.createDataSource({
dataSourceOptions: {
select: [
'SiteId', 'WorkScheduleId', 'WorkTypeId', 'BusinessFieldId', 'Title', 'FmsWorkSchedule/CycleUnitId',
'FmsWorkSchedule/CycleSize', 'FmsWorkSchedule/IsUse', 'FmsWorkSchedule/IsAutoOrder', 'StartWorkDate',
'CmUser/Name', 'CmBusinessField/Name',
'CmPartner/Name', 'FmsWorkSchedule/HolidayWorkTypeId'
],
expand: ['FmsWorkSchedule', 'CmUser', 'CmBusinessField', 'CmPartner'],
extendOptions: {
forceOriginalField: true
}
}
}, 'FmsWorkRequest');
var holidaySources;
var holidayCustomSources;
var workScheduleSources;
var popupWeekendSetupVisible = ko.observable(false),
popupInsertVisible = ko.observable(false),
hasnotModificationPermission = ko.observable(true);
var holidayModel = {
SiteId: ko.observable(),
HolidayMonth: ko.observable(),
HolidayDay: ko.observable(),
IsLunar: ko.observable(),
HolidayDate: ko.observable(),
IsYearlyHoliday: ko.observable(false),
Name: ko.observable(),
};
var cc = new CalendarConverter;
var holidayWeekendDataViewModel = new BemsWebApplication.CmHolidayWeekendViewModel();
var loadedYears = [];
var viewDate = null;
var currentYear = null;
var holidays = [];
var weekends = [];
var isSaturday = false;
var isSunday = false;
var holidayCalendar = null;
var calendarOptions = {
selectable: true,
editable: false,
weekends: true,
weekNumbers: true,
height: 680,
select: handleSelectInCalendar,
eventClick: handleEventClickInCalendar,
changedMonth: function (view) {
var date = view.calendar.getDate();
viewDate = date; //hcLee 2016 03 21
if (currentYear !== null && date.year() !== currentYear) {
currentYear = date.year();
check_button();
}
else {
applyWeekends(date);
}
}
// Tooltip 관련
//eventMouseover: function (calEvent, jsEvent) {
// if (!calEvent.holiday) {
// var xOffset = 10;
// var yOffset = 30;
// var tooltip = '
';
// tooltip += '신청제목: ' + calEvent.title + '
';
// tooltip += '신청내용: ' + calEvent.content;
// tooltip += '
';
// $("body").append(tooltip);
// $('.tooltipevent')
// .css("top", (jsEvent.clientY - xOffset) + "px")
// .css("left", (jsEvent.clientX + yOffset) + "px")
// .fadeIn("fast");
// }
//},
//eventMouseout: function (calEvent, jsEvent) {
// $('.tooltipevent').remove();
//}
};
var selectedDates = {};
function handleSelectInCalendar(start, end) {
//var date = start.startOf('hour');
//var isExist = holidayCalendar.isExistEvent(date, function (i, event) {
// utils.toast.show('이미 등록된 휴일이 있습니다.', 'error');
//});
//if (isExist) return;
//selectedDates.start = start;
//selectedDates.end = end;
//popupInsertVisible(true);
}
function handleEventClickInCalendar(event) {
if (event.holiday === true) { return; }
event.item.CycleUnitName = $KoSet(event.item.CycleUnitName, event.item['FmsWorkCodeCycleUnit/Name']);
event.item.BusinessFieldName = $KoSet(event.item.BusinessFieldName, event.item['CmBusinessField/Name']);
event.item.UpdateUserName = $KoSet(event.item.UpdateUserName, event.item['CmUser/Name']);
event.item.InspectionAgencyName = $KoSet(event.item.InspectionAgencyName, event.item['CmPartner/Name']);
event.item.IsAutoOrder = $KoSet(event.item.IsAutoOrder, event.item['FmsWorkSchedule/IsAutoOrder']);
if (event.item.WorkTypeId() == 1 || event.item.WorkTypeId() == 2 || event.item.WorkTypeId() == 4) {
event.item.WorkTypevisible = true;
var CycleSize = event.item['FmsWorkSchedule/CycleSize']();
var CycleUnitId = event.item['FmsWorkSchedule/CycleUnitId']();
var FmsWorkCodeCycleUnitdataSource = new DevExpress.data.DataSource({
store: {
type: "odata",
url: endpointSelector + "/FmsWorkCodeCycleUnit"
},
requireTotalCount: true,
pageSize: 1
});
FmsWorkCodeCycleUnitdataSource.filter([
["SiteId", "=", SiteId],
"and",
["CycleUnitId", "=", CycleUnitId]
]);
FmsWorkCodeCycleUnitdataSource.load()
.done(function (result) {
var CycleUnitName = result[0].Name;
var dispText = CycleSize + ' ' + CycleUnitName;
event.item.CycleSizeText = $KoSet(event.item.CycleSizeText, dispText);
var HolidayWorkTypeId = event.item['FmsWorkSchedule/HolidayWorkTypeId']();
var FmsWorkCodeHolidayWorkTypedataSource = new DevExpress.data.DataSource({
store: {
type: "odata",
url: endpointSelector + "/FmsWorkCodeHolidayWorkType"
},
requireTotalCount: true,
pageSize: 1
});
FmsWorkCodeHolidayWorkTypedataSource.filter([
["SiteId", "=", SiteId],
"and",
["HolidayWorkTypeId", "=", HolidayWorkTypeId]
]);
FmsWorkCodeHolidayWorkTypedataSource.load()
.done(function (result) {
event.item.HolidayWorkTypeName = result[0].Name;
executionScheduleCalendarPopup.selectedWorkSchedule(event.item);
executionScheduleCalendarPopup.show();
})
.fail(function (error) {
utils.toast.show(error);
});
})
.fail(function (error) {
utils.toast.show(error);
});
}
else {
event.item.WorkTypevisible = false;
executionScheduleCalendarPopup.selectedWorkSchedule(event.item);
executionScheduleCalendarPopup.show();
}
}
function refreshList() {
//var date = moment();
//loadHolidays(date);
//hcLee 2016 03 21
currentYear = viewDate.year();
//loadHolidays(viewDate);
Data_fliter(viewDate);
}
// hcLee 2016 10 18 추가
var initialized = false;
function handleViewShowing() {
useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName);
}
function handleViewShown() {
$SideMenu.showSideMenuIfWill(params.view);
if (initialized === false) { // hcLee 2016 10 18 추가
holidayCalendar = utils.fullCalendar.create('holidayCalendar', calendarOptions);
var date = moment();
currentYear = date.year();
check_button();
}
else
refreshList(); // hcLee 2016 10 18 추가
}
function check_button() {
$("#checkBox_regular").dxCheckBox({
text: "정기 점검",
value: true,
onValueChanged: function (e) {
switch (e.value) {
case true:
checkBox_regular = true;
break;
case false:
checkBox_regular = false;
break;
}
Data_fliter(viewDate);
}
});
$("#checkBox_legal").dxCheckBox({
text: "법정 검사",
value: true,
onValueChanged: function (e) {
switch (e.value) {
case true:
checkBox_legal = true;
break;
case false:
checkBox_legal = false;
break;
}
Data_fliter(viewDate);
}
});
$("#checkBox_any").dxCheckBox({
text: "수시 점검",
value: true,
onValueChanged: function (e) {
switch (e.value) {
case true:
checkBox_any = true;
break;
case false:
checkBox_any = false;
break;
}
Data_fliter(viewDate);
}
});
Data_fliter(viewDate);
}
function Data_fliter(date) {
workScheduleDataSource.filter([]);
if (checkBox_regular) {//1
if (checkBox_legal) {//2
if (checkBox_any) {//5
workScheduleDataSource.filter().push(["WorkTypeId", ">=", 1]);//1,2,5
}
else {
workScheduleDataSource.filter().push([["WorkTypeId", "=", 1], 'or', ["WorkTypeId", "=", 2]]);//1,2
}
}
else {
if (checkBox_any) {//5
workScheduleDataSource.filter().push([["WorkTypeId", "=", 1], 'or', ["WorkTypeId", "=", 5]]);//1,5
}
else {
workScheduleDataSource.filter().push(["WorkTypeId", "=", 1]);//1
}
}
}
else {
if (checkBox_legal) {//2
if (checkBox_any) {//5
workScheduleDataSource.filter().push([["WorkTypeId", "=", 2], 'or', ["WorkTypeId", "=", 5]]);//2,5
}
else {
workScheduleDataSource.filter().push(["WorkTypeId", "=", 2]);//2
}
}
else {
if (checkBox_any) {//5
workScheduleDataSource.filter().push(["WorkTypeId", "=", 5]);//5
}
else {
workScheduleDataSource.filter().push(["WorkTypeId", "=", 0]);//0
}
}
}
loadHolidays(date);
hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName));
$SearchView.setPopupVisibleObservable(null);
initialized = true;
}
function refreshHolidays(date) {
holidays = [];
var currentYear = date.year();
if (loadedYears.indexOf(currentYear) < 0) {
loadedYears.push(currentYear);
var year;
var month;
var day;
var solar;
$.each(holidaySources, function (i, item) {
year = currentYear;
month = item.HolidayMonth() - 1;
day = item.HolidayDay();
if (item.IsLunar()) {
solar = cc.lunar2solar(new Date(year - 1, month, day));
if (solar.sYear !== year) {
solar = cc.lunar2solar(new Date(year, month, day));
}
year = solar.sYear;
month = solar.sMonth - 1;
day = solar.sDay;
}
utils.holiday.pushHolidayEventInArray(holidays, item.Name(), moment([year, month, day]), true, undefined, 0);
});
$.each(holidayCustomSources, function (i, item) {
var itemDate = item.HolidayDate();
if (itemDate.getFullYear() === currentYear) {
utils.holiday.pushHolidayEventInArray(holidays, item.Name(), moment([itemDate.getFullYear(), itemDate.getMonth(), itemDate.getDate()]), false, undefined, 1);
}
});
$.each(workScheduleSources, function (i, item) {
var itemDate = item.StartWorkDate();//추가
item.Name = item.Title;
if (itemDate.getFullYear() === currentYear) {
utils.holiday.pushWorkScheduleEventInArray(holidays, item, moment([itemDate.getFullYear(), itemDate.getMonth(), itemDate.getDate()]), false, undefined, item.WorkTypeId());
}
});
}
applyWeekends(date);
}
function loadHolidays(date) {
holidays = [];
loadedYears = [];
if (!useBusinessFiltering) {
workScheduleDataSource.filter().push("and", eq("WorkProgressId", $Code.WorkProgress.WORK_PLAN), "and", eq("SiteId", SiteId));
} else {
workScheduleDataSource.filter().push("and", eq("WorkProgressId", $Code.WorkProgress.WORK_PLAN), "and", eq("SiteId", SiteId), "and",
[eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]);
}
$.when(
holidayDataSource.load(),
holidayCustomDataSource.load(),
holidayWeekendDataSource.load(),
workScheduleDataSource.load())//수정
.done(function (result1, result2, result3, result4) {
holidaySources = result1[0];
holidayCustomSources = result2[0];
var tempworkScheduleSources = result4[0];
workScheduleSources = [];
for (var i = 0; i < tempworkScheduleSources.length; i++) {
if (tempworkScheduleSources[i].WorkTypeId() <= $Code.WorkType.LEGAL_CHECK) {
if (tempworkScheduleSources[i]['FmsWorkSchedule/IsUse']() == true)
workScheduleSources.push(tempworkScheduleSources[i]);
}
else {
workScheduleSources.push(tempworkScheduleSources[i]);
}
}
if (result3.length > 0) {
var weekend = result3[0][0];
isSaturday = weekend.Saturday();
isSunday = weekend.Sunday();
holidayWeekendDataViewModel.SiteId(weekend.SiteId());
holidayWeekendDataViewModel.Saturday(weekend.Saturday());
holidayWeekendDataViewModel.Sunday(weekend.Sunday());
}
refreshHolidays(date);
});
}
function applyWeekends(date) {
if (holidayCalendar === null) return;
if (isSunday == false && isSaturday == false) {
holidayCalendar.updateEvents(holidays);
return;
}
weekends = utils.holiday.getWeekendHolidays(date, isSaturday, isSunday);
//var month = date.clone().startOf( 'month' );
//var sunday = month.clone(),
// saturday = month.clone();
//weekends = [];
//if( month.day() !== 0 ) {
// sunday.day( -7 );
//}
//if( month.day() !== 6 ) {
// saturday.day( -1 );
//}
//for( var i = 0 ; i < 7 ; i++ ) {
// if( isSunday ) {
// holidayCalendar.pushEventInArray( weekends, '주말 휴일', moment( [ sunday.year(), sunday.month(), sunday.date() ], null, true, 2 ));
// sunday.day( 7 );
// }
// if( isSaturday ) {
// holidayCalendar.pushEventInArray( weekends, '주말 휴일', moment( [ saturday.year(), saturday.month(), saturday.date() ], null, true, 2 ));
// saturday.day( 13 );
// }
//}
holidayCalendar.updateEvents(holidays.concat(weekends));
}
function handleModification() {
//shouldReload = true;
}
function handleViewHidden() {
holidayCalendar.clearEvents(true);
}
function handleViewDisposing() {
BemsWebApplication.db.CmHolidayWeekend.modified.remove(handleModification);
}
BemsWebApplication.db.CmHolidayWeekend.modified.add(handleModification);
function popupInsertView() {
popupWeekendSetupVisible(true);
}
function handleWeekendSetupPopupButtonSave() {
BemsWebApplication.db.CmHolidayWeekend.update(SiteId, holidayWeekendDataViewModel.toJS()).done(function () {
refreshList();
utils.toast.show('데이터베이스 항목 수정 작업이 성공하였습니다.');
popupWeekendSetupVisible(false);
});
}
function handleWeekendPopupButtonClose() {
popupWeekendSetupVisible(false);
}
function handleInsertPopupButtonSave() {
var dbModelId;
var dataViewModel;
var selectedDate = selectedDates.start;
if (holidayModel.IsYearlyHoliday()) {
dbModelId = 'CmHoliday';
dataViewModel = new BemsWebApplication.CmHolidayViewModel();
}
else {
dbModelId = 'CmHolidayCustom';
dataViewModel = new BemsWebApplication.CmHolidayCustomViewModel();
}
var promised = {};
for (selectedDate = selectedDates.start ; selectedDate.isSame(selectedDates.end) === false ; selectedDate.add(1, 'days')) {
if (holidayModel.IsYearlyHoliday()) {
dataViewModel.IsLunar(holidayModel.IsLunar());
var month = selectedDate.month() + 1,
date = selectedDate.date();
if (holidayModel.IsLunar()) {
var lunar = cc.solar2lunar(new Date(selectedDate.year(), month - 1, date));
month = lunar.lMonth;
date = lunar.lDay;
}
console.log(month + ' ' + date);
dataViewModel.HolidayMonth(month);
dataViewModel.HolidayDay(date);
}
else {
dataViewModel.HolidayDate(new Date(selectedDate.year(), selectedDate.month(), selectedDate.date()));
}
dataViewModel.SiteId(SiteId);
dataViewModel.Name(holidayModel.Name());
dataViewModel.IsUse(true);
promised = BemsWebApplication.db[dbModelId].insert(dataViewModel.toJS());
}
promised.done(function (values, newId) {
popupInsertVisible(false);
refreshList();
utils.toast.show('휴일 등록 작업이 성공하였습니다.');
}).fail(function () {
popupInsertVisible(false);
refreshList();
});
}
function handleInsertPopupButtonClose() {
popupInsertVisible(false);
}
var holidayWeekendSetupToolbarItems = [
{ location: 'before', text: '주말 휴일 설정' },
{ location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', clickAction: handleWeekendSetupPopupButtonSave } },
{ location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handleWeekendPopupButtonClose } }
];
var insertHolidayToolbarItems = [
{ location: 'before', text: '주말 휴일 설정' },
{ location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', clickAction: handleInsertPopupButtonSave } },
{ location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handleInsertPopupButtonClose } }
];
var popupOptions = {
width: '480px',
height: 'auto',
visible: popupWeekendSetupVisible,
closeOnOutsideClick: false,
//showingAction: handlePopupShowing,
//shownAction: handlePopupShown,
animation: utils.popup.createAnimation()
};
var insertPopupOptions = $.extend({}, popupOptions);
insertPopupOptions.visible = popupInsertVisible;
executionScheduleCalendarPopup = BWA.Popup.ExecutionScheduleCalendarPopup.create(holidayWeekendDataViewModel);
return {
viewShowing: handleViewShowing,
viewShown: handleViewShown,
viewHidden: handleViewHidden,
viewDisposing: handleViewDisposing,
refreshList: refreshList,
popupInsertView: popupInsertView,
popupOptions: popupOptions,
insertPopupOptions: insertPopupOptions,
holidayWeekendSetupToolbarItems: holidayWeekendSetupToolbarItems,
insertHolidayToolbarItems: insertHolidayToolbarItems,
dataModel: holidayWeekendDataViewModel,
executionScheduleCalendarPopup: executionScheduleCalendarPopup,
holidayModel: holidayModel,
hasnotModificationPermission: hasnotModificationPermission
};
};