dfe7f4b93f336bc9610d910bf60f19078c5100bd.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. $(function () {
  2. 'use strict';
  3. // TODO : 아래 코드 정리 필요 함
  4. //BemsWebApplication.Popup.WorkExecutionRegister = {
  5. BWA.Popup = BWA.Popup || {};
  6. BWA.Popup.WorkExecutionRegister = {
  7. create: function (viewInfo, viewModel) {
  8. var dataModelResult = new BWA.FmsWorkResultViewModel();
  9. var popupVisible = ko.observable();
  10. var isNew = ko.observable(true),
  11. isEditMode = ko.observable(true);
  12. var facilities = ko.observableArray(),
  13. facilitiesInView = ko.observableArray(),
  14. businessFields = ko.observableArray();
  15. var facilitySearchPopup = null,
  16. facilityFactory = BWA.Factory.Facility,
  17. facilityGridView = ko.observable(undefined),
  18. facilityDataGridOptions,
  19. modifiableFacilityDataGridOptions = undefined;
  20. var facilityDataSource = facilityFactory.getBasicDataSourceRef({
  21. dbModeIId: 'FmsWorkOrderToFacility',
  22. primaryKeyDataField: 'WorkRequestId'
  23. });
  24. var popupOptions = {
  25. position: { offset: '0 -50' },
  26. width: '560px',
  27. height: 'auto',
  28. //shading: false,
  29. shadingColor: 'rgba(0,0,0,0.0)',
  30. visible: popupVisible,
  31. closeOnOutsideClick: false,
  32. animation: utils.popup.createAnimation(),
  33. shownAction: function () {
  34. }
  35. };
  36. var toolbarItems = [
  37. { location: 'before', text: '작업수행 - 상세정보' },
  38. { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', clickAction: handlePopupButtonSave } },
  39. { location: 'after', widget: 'button', options: { text: $G('cancel'), icon: 'cancel', clickAction: handlePopupButtonClose } },
  40. ];
  41. function handlePopupButtonSave() {
  42. if (isNew()) {
  43. if ($G.date(dataModelResult.StartDate()) > $G.date(dataModelResult.EndDate())) {
  44. utils.toast.show('작업종료일을 작업시작일 이후로 설정하시기 바랍니다.', 'error');
  45. return;
  46. }
  47. //BWA.db.FmsWorkOrder.update(viewModel.dataModel.toJS()).done(function () {
  48. BWA.db.FmsWorkResult.insert(dataModelResult.toJS()).done(
  49. function () {
  50. var array = viewModel.popup.facilities();
  51. var postData;
  52. var parameters = {
  53. SiteId: dataModelResult.SiteId(),
  54. WorkRequestId: dataModelResult.WorkRequestId()
  55. };
  56. postData = _.map(array, function (f) {
  57. return {
  58. SiteId: dataModelResult.SiteId(),
  59. WorkRequestId: dataModelResult.WorkRequestId(),
  60. FacilityCode: f.FacilityCode()
  61. };
  62. });
  63. var promise = BWA.api.post('FmsWorkResultToFacility', postData, parameters);
  64. promise.done(function () {
  65. viewModel.dataModel.StartWorkDate(dataModelResult.StartDate());
  66. var keys = BWA.db.extractKeysObject('FmsWorkOrder', viewModel.dataModel);
  67. BWA.db.FmsWorkOrder.update(keys, viewModel.dataModel.toJS()).done(function (res) {
  68. utils.toast.show($G('successDatabaseProcessMsg'));
  69. popupVisible(false);
  70. viewModel.popupVisible(false);
  71. viewModel.gridView().refresh();
  72. });
  73. });
  74. }
  75. );
  76. //});
  77. }
  78. }
  79. function handlePopupButtonClose() {
  80. popupVisible(false);
  81. }
  82. function isValidateWithFunction(errorMessage) {
  83. if (_.isEmpty(facilities())) {
  84. errorMessage.message = '점검을 위한 시설이 없습니다.';
  85. return false;
  86. }
  87. return true;
  88. }
  89. function handleBeforePopupShowingPromise(isNewInPopup, dataViewModel, clickRowData) {
  90. var workProgressId;
  91. if (isNewInPopup()) {
  92. workProgressId = $Code.WorkProgress.WORK_PLAN;
  93. }
  94. else {
  95. workProgressId = clickRowData['FmsWorkRequest/WorkProgressId'](); // clickRowData.WorkProgressId();
  96. dataViewModel.WorkProgressId = ko.observable();
  97. dataViewModel.WorkProgressId(workProgressId);
  98. }
  99. }
  100. function handlePopupShowing(isNewInPopup, dataModel, selectedData) {
  101. }
  102. function handlePopupShown(isEditMode, isNew, dataViewModel) {
  103. }
  104. // 점검계획 정보가 저장된 후에 호출 된다.
  105. // 등록이면 responseKey가 있고, 수정이면 없다.
  106. function handleAfterSave(responseKey) {
  107. var array = facilities();
  108. if (_.isEmpty(array)) {
  109. return;
  110. }
  111. var siteId,
  112. workRequestId;//, businessFieldId;
  113. if (_.isUndefined(responseKey)) {
  114. var dataModel = viewModel.dataModel;
  115. siteId = dataModel.SiteId();
  116. //businessFieldId = dataModel.BusinessFieldId();
  117. workRequestId = dataModel.WorkRequestId();
  118. }
  119. else {
  120. siteId = responseKey.SiteId;
  121. //businessFieldId = responseKey.BusinessFieldId;
  122. workRequestId = responseKey.WorkRequestId;
  123. }
  124. var postData;
  125. var parameters = {
  126. SiteId: siteId,
  127. //BusinessFieldId: businessFieldId,
  128. WorkRequestId: workRequestId
  129. };
  130. postData = _.map(array, function (f) {
  131. return {
  132. SiteId: siteId,
  133. //BusinessFieldId: businessFieldId,
  134. WorkRequestId: workRequestId,
  135. FacilityCode: f.FacilityCode()
  136. };
  137. });
  138. BWA.api.post('FmsWorkOrderToFacility', postData, parameters);
  139. }
  140. function handleAfterLoadingModelByKey(data, dataViewModel, isNewInPopup) {
  141. // 작업지시 세부 내용은 수정/삭제 할 수 없음
  142. viewModel.visibleEditButton(false);
  143. viewModel.visibleDeleteButton(false);
  144. var eq = BWA.DataUtil.constructEqualFilter;
  145. var and = BWA.DataUtil.andFilter;
  146. facilityDataSource.filter([
  147. eq('SiteId', dataViewModel.SiteId()),
  148. and,
  149. eq('WorkRequestId', dataViewModel.WorkRequestId())
  150. ]);
  151. facilityDataSource.load().done(function (dbFacilities) {
  152. facilitiesInView(dbFacilities);
  153. });
  154. }
  155. function handleBeforeShowingPopupForEdit(rowData, dataViewModel) {
  156. dataViewModel.BusinessFieldName(rowData['FmsWorkRequest/CmBusinessField/Name']());
  157. dataViewModel.WorkTypeName(rowData['FmsWorkRequest/FmsWorkCodeType/Name']());
  158. dataViewModel.RequestUserName(rowData['CmUser/Name']());
  159. dataViewModel.WorkProgressName(rowData['FmsWorkRequest/FmsWorkCodeProgress/Name']());
  160. dataViewModel.RejectUserName($KoValue(rowData['CmUser1/Name']));
  161. }
  162. popupVisible.subscribe(function (visible) {
  163. if (!visible) {
  164. facilitiesInView([]);
  165. } else {
  166. var userInfo = BWA.UserInfo;
  167. dataModelResult.SiteId(viewModel.dataModel.SiteId());
  168. dataModelResult.WorkRequestId(viewModel.dataModel.WorkRequestId());
  169. //dataModelResult.Content(viewModel.dataModel.Content());
  170. dataModelResult.Content(''); // hcLee 2016 03 14
  171. //var now = moment();
  172. var time = viewModel.dataModel.StartWorkDate();
  173. dataModelResult.StartDate(time); //BWA.DataUtil.getDateFromDateTime(time)
  174. dataModelResult.EndDate(time);
  175. dataModelResult.WorkerUserId(userInfo.UserId());
  176. dataModelResult.IsConfirmed(false);
  177. viewModel.dataModelResult = dataModelResult;
  178. }
  179. });
  180. //isEditModeInPopup.subscribe(function (isEditMode) {
  181. // if (isEditMode) {
  182. // facilities(facilitiesInView.slice(0));
  183. // }
  184. //});
  185. viewModel.dataModel.WorkTypeName = ko.observable();
  186. viewModel.dataModel.BusinessFieldName = ko.observable();
  187. viewModel.dataModel.RequestUserName = ko.observable();
  188. viewModel.dataModel.RejectUserName = ko.observable();
  189. viewModel.dataModel.WorkProgressName = ko.observable();
  190. facilityDataGridOptions = BWA.Popup.Facility.getReadOnlyDataGridOptions(
  191. facilitiesInView, viewModel.viewModeInPopup);
  192. modifiableFacilityDataGridOptions = BWA.Popup.Facility.getModifiableDataGridOptions(
  193. facilities, viewModel.isEditModeInPopup, facilityGridView);
  194. viewModel.facilitySearchPopup = facilitySearchPopup = BWA.Popup.Facility.create(viewModel, undefined, {
  195. isMultipleSelect: true,
  196. onSelectedFacilities: function (selectedFacilities) {
  197. var workRequestId = viewModel.dataModel.WorkRequestId();
  198. _.each(selectedFacilities, function (sf) {
  199. // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다.
  200. var found = _.some(facilities(), function (f) {
  201. return f.FacilityCode() === sf.FacilityCode();
  202. });
  203. if (found) return;
  204. facilities.push({
  205. SiteId: sf.SiteId,
  206. WorkRequestId: ko.observable(workRequestId),
  207. FacilityCode: sf.FacilityCode,
  208. Name: sf.Name,
  209. });
  210. });
  211. facilityGridView().refresh();
  212. }
  213. });
  214. return {
  215. isNew: isNew,
  216. isEditMode: isEditMode,
  217. toolbarItems: toolbarItems,
  218. options: popupOptions,
  219. facilitySearchPopup: facilitySearchPopup,
  220. popupVisible: popupVisible,
  221. facilities: facilitiesInView,
  222. businessFields: businessFields,
  223. isValidateWithFunction: isValidateWithFunction,
  224. facilityDataGridOptions: facilityDataGridOptions,
  225. modifiableFacilityDataGridOptions: modifiableFacilityDataGridOptions,
  226. handleAfterLoadingModelByKey: handleAfterLoadingModelByKey,
  227. handleAfterSave: handleAfterSave,
  228. handlePopupShowing: handlePopupShowing,
  229. handlePopupShown: handlePopupShown,
  230. handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit,
  231. handleDeleteSelectedFacilities: BWA.Popup.Facility.getDeleteSelectedFacilitiesFunc(facilityGridView, facilities),
  232. handleBeforePopupShowingPromise: handleBeforePopupShowingPromise,
  233. };
  234. }
  235. }
  236. });