$(function () { 'use strict'; window.utils = window.utils || {}; $.extend(window.utils, { holiday: { createHolidayManager: function () { var holidayDataSource = BemsWebApplication.db.createDataSource('CmHoliday', true, true); var holidayCustomDataSource = BemsWebApplication.db.createDataSource('CmHolidayCustom', true); var holidayWeekendDataSource = BemsWebApplication.db.createDataSource('CmHolidayWeekend', true); var holidaySources, holidayCustomSources, weekend; var isSaturday = false, isSunday = false; var cc = new CalendarConverter; var holidays = []; var isLoaded = false; var currentYear = 0; return { loadHolidays: function () { var deferred = new $.Deferred(); $.when(holidayDataSource.load(), holidayCustomDataSource.load(), holidayWeekendDataSource.load()) .done(function (result1, result2, result3) { holidaySources = result1[0]; holidayCustomSources = result2[0]; weekend = result3[0]; if (weekend.length > 0) { isSaturday = weekend[0].Saturday(); isSunday = weekend[0].Sunday(); } isLoaded = true; deferred.resolve(); }) .fail(function () { deferred.reject(); }); return deferred.promise(); }, isLoaded: function () { return isLoaded; }, generateHolidays: function (momentDate) { var year, month, day, solar; var self = this; if (currentYear !== momentDate.year()) { holidays = []; $.each(holidaySources, function (i, item) { year = momentDate.year(); 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; } holidays.push($G.date(moment([year, month, day]))); }); $.each(holidayCustomSources, function (i, item) { var itemDate = item.HolidayDate(); holidays.push($G.date(moment([itemDate.getFullYear(), itemDate.getMonth(), itemDate.getDate()]))); }); currentYear = momentDate.year(); } var weekends = self.getWeekendHolidayArray(momentDate, isSaturday, isSunday); return holidays.concat(weekends); }, getWeekendHolidayArray: function (momentDate, isSaturday, isSunday) { var month = momentDate.clone().startOf('month'); var sunday = month.clone(), saturday = month.clone(); var weekends = []; if (month.day() !== 0) { sunday.day(-7); } if (month.day() !== 6) { saturday.day(-1); } for (var i = 0 ; i < 7 ; i++) { if (isSunday) { weekends.push($G.date(moment([sunday.year(), sunday.month(), sunday.date()]))); sunday.day(7); } if (isSaturday) { weekends.push($G.date(moment([saturday.year(), saturday.month(), saturday.date()]))); saturday.day(13); } } return weekends; }, }; }, getWeekendHolidays: function (momentDate, isSaturday, isSunday) { var month = momentDate.clone().startOf('month'); var sunday = month.clone(), saturday = month.clone(); var weekends = []; if (month.day() !== 0) { sunday.day(-7); } if (month.day() !== 6) { saturday.day(-1); } for (var i = 0 ; i < 7 ; i++) { if (isSunday) { this.pushHolidayEventInArray(weekends, '주말 휴일', moment([sunday.year(), sunday.month(), sunday.date()]), null, true, 2, false); // 마지막 false 추가 hcLee 2016 01 22 sunday.day(7); } if (isSaturday) { this.pushHolidayEventInArray(weekends, '주말 휴일', moment([saturday.year(), saturday.month(), saturday.date()]), null, true, 2, false); // 마지막 false 추가 hcLee 2016 01 22 saturday.day(13); } } return weekends; }, // holidayType : 0: 정기휴일, 1: 특정휴일, 2: 주말휴일 // hcLee 2016 01 22 //pushHolidayEventInArray: function( destArray, title, day, isYearlyHoliday, isWeekend, holidayType ) { pushHolidayEventInArray: function (destArray, title, day, isYearlyHoliday, isWeekend, holidayType, isLunar) { var o = { title: title, holiday: true, start: day, allDay: true, backgroundColor: holidayType === 0 ? 'rgb(0,162,232)' : (holidayType === 1 ? 'rgb(255,201,14)' : 'rgb(237,28,36)'), // hcLee 2016 01 22 isLunar: isLunar, }; if (isWeekend) { o.isWeekend = isWeekend; } else if (isYearlyHoliday) { o.isYearlyHoliday = isYearlyHoliday; } destArray.push(o); }, pushWorkScheduleEventInArray: function (destArray, item, day, isYearlyHoliday, isWeekend, holidayType) { var o = { title: item.Name(), holiday: false, //content: item.Content(), item: item, start: day, allDay: true, //backgroundColor: holidayType === 0 ? 'rgb(0,162,232)' : (holidayType === 1 ? 'rgb(255,201,14)' : 'rgb(237,28,36)') backgroundColor: 'rgb(34,177,76)' }; if (isWeekend) { o.isWeekend = isWeekend; } else if (isYearlyHoliday) { o.isYearlyHoliday = isYearlyHoliday; } destArray.push(o); }, } }); });