f4de3e2e1da59679ee753c6ce13265bcc1c57355.svn-base 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. BemsWebApplication.RegisterCheckSchedule = function(params, viewInfo) {
  2. "use strict";
  3. var cycleTypeClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeCycleType', true, true),
  4. cycleUnitClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeCycleUnit', true, true),
  5. holidayClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeHoliday', true, true),
  6. orderClassDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCodeOrder', true, true),
  7. businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true);
  8. var checkScheduleManager = utils.checkSchedule.createScheduleManager();
  9. var cycleTypes = ko.observableArray(),
  10. cycleUnits = ko.observableArray(),
  11. holidayTypes = ko.observableArray(),
  12. orders = ko.observableArray(),
  13. businessFields = ko.observableArray();
  14. var searchCycleTypes = ko.observableArray(),
  15. searchBusinessFields = ko.observableArray();
  16. var deferredForSearch = new $.Deferred();
  17. var scheduleMultiViewVisible = ko.observable(false),
  18. isRegularlyCycleType = ko.observable(false);
  19. var selectedScheduleId;
  20. var selectedScheduleName = ko.observable();
  21. var scheduleCalendar = null;
  22. var exceptionDays = [];
  23. var removedDays = [];
  24. var scheduleCalendarOptions = {
  25. selectable: false,
  26. //select: function( start, end ) {
  27. // var selectedDate = $G.date( start );
  28. // if( loadedExceptionDays.indexOf( selectedDate ) < 0 ) {
  29. // var index = exceptionDays.indexOf( selectedDate );
  30. // if( index < 0 ) {
  31. // return;
  32. // }
  33. // exceptionDays.splice( index, 1 );
  34. // }
  35. // removedDays.push( selectedDate );
  36. // scheduleCalendar.pushEvent( selectedScheduleName(), start, true );
  37. //},
  38. editable: true,
  39. changedMonth: function(view) {
  40. if (scheduleCalendar === null) return;
  41. var date = view.calendar.getDate();
  42. var events = checkScheduleManager.generateScheduleEvents(date, viewModel.dataModel);
  43. scheduleCalendar.updateEvents(events);
  44. },
  45. eventClick: function(event) {
  46. if (viewModel.isEditModeInPopup() == false) return;
  47. var formattedDate = $G.date(event.start);
  48. scheduleCalendar.removeEvent(event.start, undefined, true);
  49. var index;
  50. if (event.isException) {
  51. removedDays.push(formattedDate);
  52. index = exceptionDays.indexOf(formattedDate);
  53. if (index >= 0) {
  54. exceptionDays.splice(index, 1);
  55. }
  56. scheduleCalendar.pushEvent(selectedScheduleName(), event.start, true);
  57. }
  58. else {
  59. exceptionDays.push(formattedDate);
  60. index = removedDays.indexOf(formattedDate);
  61. if (index >= 0) {
  62. removedDays.splice(index, 1);
  63. }
  64. scheduleCalendar.pushExceptionEvent(event.start, true);
  65. }
  66. },
  67. };
  68. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsFacilitySchedule', {
  69. dataSourceOptions: {
  70. select: ['SiteId', 'ScheduleId', 'BusinessFieldId', 'CycleTypeId', 'Name', 'ConfirmedUserId', 'IsUse', 'CycleSize', 'StartDate', 'CmBusinessField/Name', 'FmsFacilityCodeCycleType/Name', 'FmsFacilityCodeCycleUnit/Name', 'FmsFacilityCodeHoliday/Name', 'FmsFacilityCodeOrder/Name'],
  71. expand: ['CmBusinessField', 'FmsFacilityCodeCycleType', 'FmsFacilityCodeCycleUnit', 'FmsFacilityCodeHoliday', 'FmsFacilityCodeOrder']
  72. },
  73. columns: [
  74. { dataField: 'Number', caption: $G('number'), width: '8%', alignment: 'center', allowFiltering: false },
  75. { dataField: 'CmBusinessField_Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center', allowFiltering: false },
  76. { dataField: 'Name', caption: $G('facilityCheckScheduleName'), width: '18%', alignment: 'center', allowFiltering: false },
  77. { dataField: 'FmsFacilityCodeCycleType_Name', caption: $G('facilityCheckScheduleCycleTypeName'), width: '10%', alignment: 'center' },
  78. { dataField: 'FmsFacilityCodeCycleUnit_Name', caption: $G('facilityCheckScheduleCycleUnitName'), width: '10%', alignment: 'center' },
  79. { dataField: 'FmsFacilityCodeHoliday_Name', caption: $G('facilityCheckScheduleHolidayName'), width: '10%', alignment: 'center' },
  80. { dataField: 'FmsFacilityCodeOrder_Name', caption: $G('facilityCheckScheduleOrderName'), width: '12%', alignment: 'center' },
  81. {
  82. dataField: 'StartDate', caption: $G('facilityCheckScheduleStartDate'), width: '10%', alignment: 'center', allowFiltering: false,
  83. customizeText: function(cellInfo) {
  84. return $G.date(cellInfo.value);
  85. }
  86. },
  87. {
  88. dataField: 'ConfirmedUserId', caption: $G('facilityCheckScheduleIsConfirm'), width: '10%', alignment: 'center', allowFiltering: false,
  89. customizeText: function(cellInfo) {
  90. return $G.isConfirm(cellInfo.value);
  91. }
  92. },
  93. utils.datagrid.columnIsUse('10%')
  94. ],
  95. promiseDataInSearchView: deferredForSearch.promise(),
  96. searchViewItems: [
  97. { id: 'CycleTypeId', ignoreValue: 0, defaultValue: 0, dataSource: searchCycleTypes },
  98. { id: 'BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: searchBusinessFields },
  99. { id: 'Name' }],
  100. popupWidth: '740px',
  101. wordWrapEnabled: true,
  102. cellPrepared: function(cellElement, cellInfo) {
  103. switch (cellInfo.columnIndex) {
  104. case 4:
  105. {
  106. if (cellInfo.data.CycleTypeId() === $Code.CycleType.Regularly) {
  107. $(cellElement).text(cellInfo.data.CycleSize() + ' ' + cellInfo.data.FmsFacilityCodeCycleUnit_Name());
  108. }
  109. else {
  110. $(cellElement).text('-');
  111. }
  112. break;
  113. }
  114. }
  115. },
  116. handleViewShowing: function() {
  117. $.when(cycleTypeClassDataSource.load(), businessFieldDataSource.load()).done(function(result1, result2) {
  118. cycleTypes(result1[0]);
  119. searchCycleTypes($SearchView.createArrayOfSelectBox('CycleTypeId', cycleTypes()));
  120. businessFields(result2[0]);
  121. searchBusinessFields($SearchView.createArrayOfSelectBox('BusinessFieldId', businessFields()));
  122. deferredForSearch.resolve();
  123. });
  124. },
  125. handleAfterLoadingModelByKey: function(data) {
  126. var dataModel = viewModel.dataModel;
  127. dataModel.CycleSizeText(data.CycleSize + ' ' + dataModel.CycleUnitName());
  128. },
  129. handleDataGridRowClick: function(id, dataGrid, clickRow, popupVisible) {
  130. dataGrid.clearSelection();
  131. var data = clickRow.data;
  132. var dataModel = viewModel.dataModel;
  133. dataModel.CycleTypeName = $KoSet(dataModel.CycleTypeName, data.FmsFacilityCodeCycleType_Name);
  134. dataModel.CycleUnitName = $KoSet(dataModel.CycleUnitName, data.FmsFacilityCodeCycleUnit_Name);
  135. dataModel.HolidayName = $KoSet(dataModel.HolidayName, data.FmsFacilityCodeHoliday_Name);
  136. dataModel.OrderName = $KoSet(dataModel.OrderName, data.FmsFacilityCodeOrder_Name);
  137. dataModel.BusinessFieldName = $KoSet(dataModel.OrderName, data.CmBusinessField_Name);
  138. selectedScheduleId = data.ScheduleId();
  139. selectedScheduleName = $KoSet(selectedScheduleName, data.Name());
  140. selectedCheckGroupDataSource.filter([
  141. ['SiteId', '=', BWA.UserInfo.SiteId()],
  142. 'and',
  143. ['ScheduleId', '=', selectedScheduleId]
  144. ]);
  145. popupVisible(true);
  146. },
  147. handleSaveButtonInPopup: function(isInsert) {
  148. //var dataGrid = $( '#gridCheckGroupContainer' ).dxDataGrid( 'instance' );
  149. //var items = dataGrid.getSelectedRowsData();
  150. //var postData = [];
  151. //$.each( items, function( i, item ) {
  152. // postData.push( {
  153. // SiteId: $KoValue( item.SiteId ),
  154. // ScheduleId: selectedScheduleId,
  155. // CheckGroupId: $KoValue( item.CheckGroupId )
  156. // } );
  157. //} );
  158. //promises.push( BemsWebApplication.api.post( 'FmsFacilityScheduleToCheckGroup', postData ) );
  159. var promises = [];
  160. promises.push(BemsWebApplication.api.postWithDataGrid('FmsFacilityScheduleToCheckGroup', 'gridCheckGroupContainer', {
  161. SiteId: BWA.UserInfo.SiteId(),
  162. ScheduleId: selectedScheduleId,
  163. CheckGroupId: null
  164. }));
  165. if (exceptionDays.length > 0) {
  166. var exceptionViewModel = new BemsWebApplication.FmsFacilityScheduleCheckExceptionDateViewModel();
  167. exceptionViewModel.SiteId(BWA.UserInfo.SiteId());
  168. exceptionViewModel.ScheduleId(selectedScheduleId);
  169. $.each(exceptionDays, function(i, formattedDate) {
  170. // if( loadedExceptionDays.indexOf( formattedDate ) >= 0 ) return true;
  171. exceptionViewModel.ExceptionDate(moment(formattedDate).toDate());
  172. promises.push(BemsWebApplication.db.FmsFacilityScheduleCheckExceptionDate.insert(exceptionViewModel.toJS()));
  173. });
  174. }
  175. if (removedDays.length > 0) {
  176. var removeItem = {
  177. SiteId: BWA.UserInfo.SiteId(),
  178. ScheduleId: selectedScheduleId
  179. };
  180. $.each(removedDays, function(i, formattedDate) {
  181. removeItem.ExceptionDate = formattedDate;
  182. promises.push(BemsWebApplication.db.FmsFacilityScheduleCheckExceptionDate.remove(removeItem));
  183. });
  184. }
  185. return $.when.apply($, promises);
  186. //.done( function() {
  187. // utils.toast.show( '일정 저장을 성공하였습니다.' );
  188. //} );
  189. },
  190. handlePopupShowing: function(that) {
  191. cycleUnitClassDataSource.load().done(function(result) {
  192. cycleUnits(result);
  193. });
  194. holidayClassDataSource.load().done(function(result) {
  195. holidayTypes(result);
  196. });
  197. orderClassDataSource.load().done(function(result) {
  198. orders(result);
  199. });
  200. selectedCheckGroupDataSource.load().done(function(result) {
  201. var dataGrid = $('#gridSelectedCheckGroupContainer').dxDataGrid('instance');
  202. dataGrid.refresh();
  203. });
  204. viewModel.currentTabIndex(0);
  205. },
  206. handlePopupShown: function(editMode, isNewInPopup, dataModel) {
  207. if (scheduleCalendar === null) {
  208. scheduleCalendar = utils.fullCalendar.create('scheduleCalendar', scheduleCalendarOptions);
  209. //scheduleCalendar = $( '#scheduleCalendar' );
  210. //scheduleCalendar.fullCalendar( calendarOption );
  211. }
  212. var checkGroupDataGrid = $('#gridCheckGroupContainer').dxDataGrid('instance');
  213. var selectedCheckGroupdDataGrid = $('#gridSelectedCheckGroupContainer').dxDataGrid('instance');
  214. checkGroupDataGrid.clearSelection();
  215. if (isNewInPopup === false) {
  216. var items = utils.datagrid.getItems(selectedCheckGroupdDataGrid);
  217. var keys = [];
  218. $.each(items, function(i, item) {
  219. keys.push({
  220. CheckGroupId: item.CheckGroupId(),
  221. SiteId: item.SiteId()
  222. });
  223. });
  224. checkGroupDataGrid.selectRows(keys);
  225. checkScheduleManager.load(scheduleCalendar.getDate(), dataModel).done(function(events) {
  226. scheduleCalendar.updateEvents(events);
  227. });
  228. scheduleMultiViewVisible(true);
  229. }
  230. else {
  231. scheduleMultiViewVisible(false);
  232. }
  233. }
  234. });
  235. viewModel.isEditModeInPopup.subscribe(function(value) {
  236. if (scheduleCalendar) {
  237. scheduleCalendar.setReadOnly(!value);
  238. }
  239. });
  240. viewModel.dataModel.CycleSizeText = ko.observable();
  241. viewModel.cycleTypes = cycleTypes;
  242. viewModel.cycleUnits = cycleUnits;
  243. viewModel.holidayTypes = holidayTypes;
  244. viewModel.orders = orders;
  245. viewModel.businessFields = businessFields;
  246. viewModel.dataModel.CycleTypeId.subscribe(function(cycleTypeId) {
  247. isRegularlyCycleType(cycleTypeId === $Code.CycleType.Regularly);
  248. });
  249. var checkGroupDataSource = $DataSource({
  250. dataSourceOptions: {
  251. store: BemsWebApplication.db.FmsFacilityScheduleCheckGroup,
  252. select: ['SiteId', 'CheckGroupId', 'Name', 'CmBusinessField/Name'],
  253. expand: ['CmBusinessField'],
  254. filer: [['SiteId', '=', BWA.UserInfo.SiteId()], 'and', ['IsUse', '=', true]]
  255. }
  256. });
  257. var selectedCheckGroupDataSource = $DataSource({
  258. dataSourceOptions: {
  259. store: BemsWebApplication.db.FmsFacilityScheduleToCheckGroup,
  260. select: ['SiteId', 'ScheduleId', 'CheckGroupId', 'FmsFacilityScheduleCheckGroup/Name'],
  261. expand: ['FmsFacilityScheduleCheckGroup']
  262. }
  263. });
  264. var Factory = {
  265. dxDataSource: checkGroupDataSource,
  266. columns: [
  267. { dataField: 'CmBusinessField_Name', caption: $G('businessFieldName'), width: '25%', alignment: 'center' },
  268. { dataField: 'Name', caption: $G('facilityCheckScheduleName'), width: '45%', alignment: 'center', allowFiltering: false }
  269. ],
  270. height: 360
  271. };
  272. var selectedFactory = {
  273. dxDataSource: selectedCheckGroupDataSource,
  274. columns: [
  275. { dataField: 'FmsFacilityScheduleCheckGroup_Name', caption: $G('facilityCheckScheduleCheckGroupName'), width: '45%', alignment: 'center', allowFiltering: false }
  276. ],
  277. height: 360
  278. };
  279. viewModel.tabsItems = [
  280. { text: '기본 정보' },
  281. { text: '점검 그룹' },
  282. {
  283. text: '계획 일정',
  284. visible: scheduleMultiViewVisible,
  285. }
  286. ];
  287. viewModel.currentTabIndex = ko.observable(0);
  288. var dataModel = viewModel.dataModel;
  289. viewModel.multiViewItems = [
  290. {
  291. dataModel: dataModel,
  292. viewModel: viewModel,
  293. template: 'generalInfo'
  294. },
  295. {
  296. dataModel: dataModel,
  297. viewModel: viewModel,
  298. checkGroupFactory: utils.datagrid.defaultOptions($.extend({}, Factory, {
  299. visible: viewModel.isEditModeInPopup,
  300. dxDataSource: checkGroupDataSource,
  301. selection: { mode: 'multiple', allowSelectAll: true },
  302. })),
  303. selectedCheckGroupFactory: utils.datagrid.defaultOptions($.extend({}, selectedFactory, {
  304. visible: viewModel.viewModeInPopup,
  305. dxDataSource: selectedCheckGroupDataSource,
  306. })),
  307. template: 'checkGroup'
  308. },
  309. {
  310. dataModel: dataModel,
  311. viewModel: viewModel,
  312. visible: scheduleMultiViewVisible,
  313. template: 'schedule'
  314. }
  315. ];
  316. //var events = utils.fullCalendar.generateScheduleEvents( '2014-09-10', '2014-09-02', 'test', 1, 1 );
  317. //console.log( events );
  318. viewModel.isRegularlyCycleType = isRegularlyCycleType;
  319. return viewModel;
  320. };