| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 | 
							- $(function () {
 
-     'use strict';
 
-     window.utils = window.utils || {};
 
-     $.extend(window.utils, {
 
-         fullCalendar: {
 
-             fromExceptionEvent: function (startDate) {
 
-                 return {
 
-                     title: '예외',
 
-                     start: startDate,
 
-                     backgroundColor: 'rgb(220,10,10)',
 
-                     isException: true
 
-                 };
 
-             },
 
-             generateScheduleEvents: function (currentDate, startDate, scheduleId, scheduleName, cycleType, cycleSize, cycleUnit, holidayType, holidays, exceptionDays) {
 
-                 startDate = startDate instanceof Date ? moment(startDate) : startDate;
 
-                 if (cycleType === $Code.CycleType.Anytime) {
 
-                     return [
 
-                         {
 
-                             scheduleId: scheduleId,
 
-                             title: scheduleName,
 
-                             start: $G.date(startDate)
 
-                         }
 
-                     ];
 
-                 }
 
-                 currentDate = currentDate instanceof Date ? moment(currentDate) : currentDate;
 
-                 var events = [];
 
-                 var cycle;
 
-                 var unit = $Code.CycleUnit;
 
-                 var htype = $Code.HolidayWorkType;
 
-                 var term = 1;
 
-                 switch (cycleUnit) {
 
-                     case unit.Daily: cycle = 'days'; break;
 
-                     case unit.Weekly: cycle = 'weeks'; break;
 
-                     case unit.Monthly: cycle = 'months'; break;
 
-                     case unit.Quaterly: cycle = 'months'; term = 3; break;
 
-                     case unit.HalfYearly: cycle = 'months'; term = 6; break;
 
-                     case unit.Yearly: cycle = 'years'; break;
 
-                 }
 
-                 if (currentDate.year() < startDate.year()) return events;
 
-                 if (currentDate.year() === startDate.year() && currentDate.month() < startDate.month()) return events;
 
-                 var date = startDate.clone();
 
-                 if (currentDate.month() !== startDate.month()) {
 
-                     date.startOf('days');
 
-                     while (date.year() < currentDate.year() || date.month() < currentDate.month()) {
 
-                         date.add(cycleSize * term, cycle);
 
-                     }
 
-                 }
 
-                 var m = date.month();
 
-                 var formattedDate;
 
-                 var willPush = false;
 
-                 if (holidayType === htype.NextDayWork) {
 
-                     var isPendingWork = false;
 
-                     var nextDay = date.clone();
 
-                     var formattedNextDate = $G.date(nextDay);
 
-                     for (; date.month() === m ; date.add(1, 'days')) {
 
-                         formattedDate = $G.date(date);
 
-                         if (formattedNextDate === formattedDate) {
 
-                             nextDay.add(cycleSize * term, cycle);
 
-                             formattedNextDate = $G.date(nextDay);
 
-                             if (holidays.indexOf(formattedDate) >= 0) {
 
-                                 isPendingWork = true;
 
-                                 continue;
 
-                             }
 
-                             if (exceptionDays.indexOf(formattedDate) >= 0) {
 
-                                 isPendingWork = false;
 
-                                 events.push(this.fromExceptionEvent(formattedDate));
 
-                                 continue;
 
-                             }
 
-                             events.push({
 
-                                 title: scheduleName,
 
-                                 start: formattedDate
 
-                             });
 
-                             isPendingWork = false;
 
-                         }
 
-                         else if (isPendingWork) {
 
-                             if (holidays.indexOf(formattedDate) >= 0) {
 
-                                 continue;
 
-                             }
 
-                             if (exceptionDays.indexOf(formattedDate) >= 0) {
 
-                                 isPendingWork = false;
 
-                                 events.push(this.fromExceptionEvent(formattedDate));
 
-                                 continue;
 
-                             }
 
-                             events.push({
 
-                                 scheduleId: scheduleId,
 
-                                 title: scheduleName,
 
-                                 start: formattedDate
 
-                             });
 
-                             isPendingWork = false;
 
-                         }
 
-                     }
 
-                 }
 
-                 else {
 
-                     for (; date.month() === m ; date.add(cycleSize * term, cycle)) {
 
-                         formattedDate = $G.date(date);
 
-                         if (holidays.indexOf(formattedDate) >= 0) {
 
-                             willPush = true;
 
-                             switch (holidayType) {
 
-                                 case htype.Work: break; // Nothing to do
 
-                                 case htype.NotWork:
 
-                                     {
 
-                                         willPush = false;
 
-                                         break;
 
-                                     } // Nothing to do
 
-                             }
 
-                             if (willPush === false) continue;
 
-                         }
 
-                         events.push({
 
-                             scheduleId: scheduleId,
 
-                             title: scheduleName,
 
-                             start: formattedDate
 
-                         });
 
-                     }
 
-                 }
 
-                 return events;
 
-             },
 
-             create: function (id, options) {
 
-                 var events = options.events || [];
 
-                 var self = $('#' + id);
 
-                 options = $.extend({}, options, {
 
-                     header: {
 
-                         right: 'prev,next today',
 
-                         left: 'title'
 
-                     },
 
-                     lang: 'ko',
 
-                     buttonIcons: false,
 
-                     //weekNumbers: true,
 
-                     selectable: true,
 
-                     selectHelper: true,
 
-                     events: events
 
-                 });
 
-                 if (options.selectable === undefined) {
 
-                     options.selectable = true;
 
-                 }
 
-                 self.fullCalendar(options);
 
-                 return {
 
-                     self: self,
 
-                     events: events,
 
-                     updateEvents: function (newEvents) {
 
-                         self.fullCalendar('removeEventSource', events);
 
-                         if (newEvents !== undefined) {
 
-                             events = newEvents;
 
-                         }
 
-                         self.fullCalendar('addEventSource', events);
 
-                     },
 
-                     setReadOnly: function (isReadOnly) {
 
-                         //                        console.log( self.fullCalendar( 'option', 'selectable' ) );
 
-                         var view = self.fullCalendar('getView');
 
-                         view.calendar.options['selectable'] = isReadOnly ? false : true;
 
-                         //                        if( isReadOnly ) {
 
-                         ////                            console.log( 'after setting false ' + self.fullCalendar( 'option', 'selectable' ) );
 
-                         //                        }
 
-                         //                        else {
 
-                         //                            self.fullCalendar( { 'selectable': true } );
 
-                         //                        }
 
-                     },
 
-                     isExistEvent: function (day, handle, title) {
 
-                         var isExist = false;
 
-                         if (arguments.length === 3) {
 
-                             $.each(events, function (i, event) {
 
-                                 if ($G.date(event.start) === $G.date(day) && event.title == title) {
 
-                                     if (typeof handle === 'function') handle(i, event);
 
-                                     isExist = true;
 
-                                     return false;
 
-                                 }
 
-                             });
 
-                         }
 
-                         else {
 
-                             $.each(events, function (i, event) {
 
-                                 if ($G.date(event.start) === $G.date(day)) {
 
-                                     if (typeof handle === 'function') handle(i, event);
 
-                                     isExist = true;
 
-                                     return false;
 
-                                 }
 
-                             });
 
-                         }
 
-                         return isExist;
 
-                     },
 
-                     pushEventIfNotExist: function (title, day, isRefresh) {
 
-                         if (this.isExistEvent(day, null, title) == false) {
 
-                             this.pushEvent(title, day, isRefresh);
 
-                         }
 
-                     },
 
-                     pushEventInArray: function (destArray, title, day) {
 
-                         var o = {
 
-                             title: title,
 
-                             start: day,
 
-                             allDay: true,
 
-                         };
 
-                         destArray.push(o);
 
-                         return o;
 
-                     },
 
-                     pushEvent: function (title, day, isRefresh) {
 
-                         this.pushEventInArray(events, title, day);
 
-                         if (isRefresh !== undefined && isRefresh) this.updateEvents();
 
-                     },
 
-                     pushExceptionEvent: function (day, isRefresh) {
 
-                         var o = this.pushEventInArray(events, '예외', day);
 
-                         o.isException = true;
 
-                         o.backgroundColor = 'rgb(210,10,10)';
 
-                         if (isRefresh !== undefined && isRefresh) this.updateEvents();
 
-                     },
 
-                     clearEvents: function (isRefresh) {
 
-                         events.splice(0, events.length);
 
-                         if (isRefresh !== undefined && isRefresh) this.updateEvents();
 
-                     },
 
-                     removeEvent: function (day, title, isRefresh) {
 
-                         var wasDeleted = false;
 
-                         if (title === undefined) {
 
-                             this.isExistEvent(day, function (i) {
 
-                                 events.splice(i, 1);
 
-                                 wasDeleted = true;
 
-                             });
 
-                         }
 
-                         else {
 
-                             this.isExistEvent(day, function (i) {
 
-                                 events.splice(i, 1);
 
-                                 wasDeleted = true;
 
-                             }, title);
 
-                         }
 
-                         if (arguments.length == 3 && isRefresh && wasDeleted) {
 
-                             console.log('updateEvents in remove');
 
-                             this.updateEvents();
 
-                         }
 
-                         return wasDeleted;
 
-                     },
 
-                     getDate: function () {
 
-                         return self.fullCalendar('getDate');
 
-                     },
 
-                     getEvents: function (date, callback) {
 
-                         $.each(events, function (i, event) {
 
-                             if (event.start === date) {
 
-                                 callback(event);
 
-                             }
 
-                         });
 
-                     }
 
-                 };
 
-             }
 
-         }
 
-     });
 
- });
 
 
  |