2bf7dcf3b85394184d589493fa196ffe42db1838.svn-base 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. $(function () {
  2. 'use strict';
  3. BemsWebApplication.Popup.AnyCheckSchedule = {
  4. create: function (viewInfo, viewModel, executionPlanOptions) {
  5. var isInnerCheckWorkType = ko.observable(false);
  6. var facilities = ko.observableArray(),
  7. facilitiesInView = ko.observableArray(),
  8. businessFields = ko.observableArray(),
  9. isVisibleEditWorkOrderButton = ko.observable(),
  10. isVisibleButtons = ko.observable();
  11. var eq = BWA.DataUtil.constructEqualFilter;
  12. var and = BWA.DataUtil.andFilter;
  13. var workResultCheckItems = ko.observableArray();
  14. var workResultCheckItemDataSource = BemsWebApplication.db.createDataSource('FmsWorkResultCheckItem', true, true, false, true);
  15. if (executionPlanOptions == null) {
  16. isVisibleEditWorkOrderButton = ko.observable();
  17. isVisibleButtons = ko.observable();
  18. }
  19. else {
  20. isVisibleEditWorkOrderButton = executionPlanOptions ? executionPlanOptions.isVisibleEditWorkOrderButton : undefined;
  21. isVisibleButtons = executionPlanOptions ? executionPlanOptions.isVisibleButtons : undefined;
  22. }
  23. var facilitySearchPopup = null,
  24. facilityFactory = BWA.Factory.Facility,
  25. facilityGridView = ko.observable(undefined),
  26. facilityDataGridOptions,
  27. modifiableFacilityDataGridOptions = undefined,
  28. isWorkOrder = ko.observable(false),
  29. isReject = ko.observable(false);
  30. var workTypeId = null; //= $Code.WorkType.CIVIL_COMPLAINT;
  31. var facilityDataSource = facilityFactory.getBasicDataSourceRef({
  32. dbModeIId: 'FmsWorkRequestToFacility',
  33. primaryKeyDataField: 'WorkRequestId'
  34. });
  35. function isValidateWithFunction(errorMessage) {
  36. if (_.isEmpty(facilities())) {
  37. errorMessage.message = '점검 계획을 위한 시설이 없습니다.';
  38. return false;
  39. }
  40. return true;
  41. }
  42. function handleBeforePopupShowingPromise(isNewInPopup, dataViewModel, clickRowData) {
  43. var workProgressId;
  44. if (isNewInPopup()) {
  45. workProgressId = $Code.WorkProgress.WORK_PLAN;
  46. }
  47. else {
  48. workProgressId = clickRowData.WorkProgressId();
  49. }
  50. isVisibleEditWorkOrderButton(workProgressId === $Code.WorkProgress.WORK_STANDBY);
  51. if (isNewInPopup()) {
  52. isVisibleButtons(false);
  53. }
  54. else {
  55. isVisibleButtons(workProgressId === $Code.WorkProgress.WORK_PLAN);
  56. }
  57. isWorkOrder(workProgressId >= $Code.WorkProgress.WORK_STANDBY);
  58. isReject(workProgressId === $Code.WorkProgress.WORK_POSTPONE);
  59. }
  60. function handlePopupShowing(isNewInPopup, dataModel, selectedData) {
  61. viewModel.visibleEditButton(false);
  62. viewModel.visibleDeleteButton(false);
  63. $("#gridContainer2").dxDataGrid({
  64. paging: {
  65. pageSize: 8,
  66. enabled: true
  67. }
  68. });
  69. $("#gridContainer3").dxDataGrid({
  70. paging: {
  71. pageSize: 8,
  72. enabled: true
  73. }
  74. });
  75. var userInfo = BWA.UserInfo;
  76. if (isNewInPopup()) {
  77. workTypeId = $Code.WorkType.INNER_CHECK;
  78. //if (isInnerCheckWorkType()) {
  79. // workTypeId = $Code.WorkType.INNER_CHECK;
  80. //}
  81. //else {
  82. // //workTypeId = $Code.WorkType.CIVIL_COMPLAINT;
  83. // workTypeId = $Code.WorkType.any
  84. //}
  85. dataModel.BusinessFieldName(userInfo.BusinessFieldName());
  86. dataModel.BusinessFieldId(userInfo.BusinessFieldId());
  87. dataModel.RequestUserName(userInfo.Name());
  88. dataModel.RequestUserId(userInfo.UserId());
  89. dataModel.WorkTypeId(workTypeId);
  90. BWA.db.FmsWorkCodeType.byKey(BWA.DataUtil.pickKeys(dataModel, 'FmsWorkCodeType')).done(function (workType) {
  91. dataModel.WorkTypeName(workType.Name);
  92. });
  93. var now = moment();
  94. dataModel.RequestDate(now.toDate());
  95. dataModel.StartWorkDate(BWA.DataUtil.getDateFromDateTime(now));
  96. dataModel.WorkProgressId($Code.WorkProgress.WORK_PLAN);
  97. BWA.db.FmsWorkCodeProgress.byKey(BWA.DataUtil.pickKeys(dataModel, 'FmsWorkCodeProgress')).done(function (workProgress) {
  98. dataModel.WorkProgressName(workProgress.Name);
  99. });
  100. }
  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, workRequestId;//, businessFieldId;
  112. if (_.isUndefined(responseKey)) {
  113. var dataModel = viewModel.dataModel;
  114. siteId = dataModel.SiteId();
  115. //businessFieldId = dataModel.BusinessFieldId();
  116. workRequestId = dataModel.WorkRequestId();
  117. }
  118. else {
  119. siteId = responseKey.SiteId;
  120. //businessFieldId = responseKey.BusinessFieldId;
  121. workRequestId = responseKey.WorkRequestId;
  122. }
  123. var postData;
  124. var parameters = {
  125. SiteId: siteId,
  126. //BusinessFieldId: businessFieldId,
  127. WorkRequestId: workRequestId
  128. };
  129. postData = _.map(array, function (f) {
  130. return {
  131. SiteId: siteId,
  132. //BusinessFieldId: businessFieldId,
  133. WorkRequestId: workRequestId,
  134. FacilityCode: f.FacilityCode()
  135. };
  136. });
  137. BWA.api.post('FmsWorkRequestToFacility/Insert', postData, parameters);
  138. }
  139. function handleAfterLoadingModelByKey(data, dataViewModel, isNewInPopup) {
  140. if (dataViewModel.WorkProgressId() >= $Code.WorkProgress.WORK_PLAN) {
  141. if (dataViewModel.WorkTypeId() == $Code.WorkType.INNER_CHECK) {
  142. // WorkType 이 내부점검인 경우 수정/삭제할 수 있어야 함
  143. viewModel.visibleEditButton(true);
  144. viewModel.visibleDeleteButton(true);
  145. }
  146. else {
  147. viewModel.visibleEditButton(false);
  148. viewModel.visibleDeleteButton(false);
  149. }
  150. }
  151. facilityDataSource.filter([
  152. eq('SiteId', dataViewModel.SiteId()),
  153. and,
  154. //eq('BusinessFieldId', dataViewModel.BusinessFieldId()),
  155. //and,
  156. eq('WorkRequestId', dataViewModel.WorkRequestId())
  157. ]);
  158. facilityDataSource.load().done(function (dbFacilities) {
  159. facilitiesInView(dbFacilities);
  160. });
  161. if (!isNewInPopup()) {
  162. workResultCheckItemDataSource.filter([
  163. eq('SiteId', dataViewModel.SiteId()),
  164. and,
  165. eq('WorkRequestId', dataViewModel.WorkRequestId())
  166. ]);
  167. workResultCheckItemDataSource.load().done(function (dbWorkCheckItems) {
  168. workResultCheckItems(dbWorkCheckItems);
  169. });
  170. viewModel.dataModel.selectedItemCheckDate("");
  171. viewModel.dataModel.selectedItemTextResult("");
  172. viewModel.dataModel.selectedItemCheckItemId(0);
  173. }
  174. }
  175. function handleBeforeShowingPopupForEdit(rowData, dataViewModel) {
  176. dataViewModel.BusinessFieldName(rowData['CmBusinessField/Name']());
  177. dataViewModel.WorkTypeName(rowData['FmsWorkCodeType/Name']());
  178. dataViewModel.RequestUserName(rowData['CmUser/Name']());
  179. dataViewModel.WorkProgressName(rowData['FmsWorkCodeProgress/Name']());
  180. dataViewModel.RejectUserName($KoValue(rowData['CmUser1/Name']));
  181. }
  182. viewModel.popupVisible.subscribe(function (visible) {
  183. //if (!visible) {
  184. if (visible) {
  185. facilitiesInView([]);
  186. facilities([]);
  187. }
  188. });
  189. viewModel.isEditModeInPopup.subscribe(function (isEditMode) {
  190. if (isEditMode) {
  191. facilities(facilitiesInView.slice(0));
  192. }
  193. });
  194. viewModel.dataModel.WorkTypeName = ko.observable();
  195. viewModel.dataModel.BusinessFieldName = ko.observable();
  196. viewModel.dataModel.RequestUserName = ko.observable();
  197. viewModel.dataModel.RejectUserName = ko.observable();
  198. viewModel.dataModel.WorkProgressName = ko.observable();
  199. viewModel.dataModel.selectedItemCheckDate = ko.observable();
  200. viewModel.dataModel.selectedItemTextResult = ko.observable();
  201. viewModel.dataModel.selectedItemCheckItemId = ko.observable();
  202. viewModel.workResultCheckItems = workResultCheckItems;
  203. viewModel.refreshListData = refreshListData;
  204. viewModel.onItemClick = onItemClick;
  205. facilityDataGridOptions = BWA.Popup.Facility.getReadOnlyDataGridOptions(facilitiesInView, viewModel.viewModeInPopup);
  206. modifiableFacilityDataGridOptions = BWA.Popup.Facility.getModifiableDataGridOptions(
  207. facilities, viewModel.isEditModeInPopup, facilityGridView);
  208. viewModel.facilitySearchPopup = facilitySearchPopup = BWA.Popup.Facility.create(viewModel, undefined, {
  209. isMultipleSelect: true,
  210. onSelectedFacilities: function (selectedFacilities) {
  211. var workRequestId = viewModel.dataModel.WorkRequestId();
  212. _.each(selectedFacilities, function (sf) {
  213. // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다.
  214. var found = _.some(facilities(), function (f) {
  215. //return f.FacilityCode() === sf.FacilityCode();
  216. try {
  217. return f.FacilityCode() === sf.FacilityCode();
  218. } catch (e) {
  219. return f.FacilityCode() === sf.FacilityCode;
  220. }
  221. });
  222. if (found) return;
  223. //facilities.push({
  224. // SiteId: sf.SiteId,
  225. // WorkRequestId: ko.observable(workRequestId),
  226. // FacilityCode: sf.FacilityCode,
  227. // Name: sf.Name,
  228. // FirstClassId: sf.FirstClassId,
  229. // SecondClassId: sf.SecondClassId,
  230. // ThirdClassId: sf.ThirdClassId,
  231. //});
  232. //2019.08.08 수정
  233. try {
  234. facilities.push({
  235. SiteId: ko.observable(sf.SiteId()),
  236. WorkRequestId: ko.observable(workRequestId),
  237. FacilityCode: ko.observable(sf.FacilityCode()),
  238. Name: ko.observable(sf.Name()),
  239. FirstClassId: ko.observable(sf.FirstClassId()),
  240. SecondClassId: ko.observable(sf.SecondClassId()),
  241. ThirdClassId: ko.observable(sf.ThirdClassId()),
  242. });
  243. } catch (e) {
  244. facilities.push({
  245. SiteId: ko.observable(sf.SiteId),
  246. WorkRequestId: ko.observable(workRequestId),
  247. FacilityCode: ko.observable(sf.FacilityCode),
  248. Name: ko.observable(sf.Name),
  249. FirstClassId: ko.observable(sf.FirstClassId),
  250. SecondClassId: ko.observable(sf.SecondClassId),
  251. ThirdClassId: ko.observable(sf.ThirdClassId),
  252. });
  253. }
  254. });
  255. facilityGridView().refresh();
  256. }
  257. });
  258. function refreshListData() {
  259. //workResultCheckItemDataSource.filter([
  260. // eq('SiteId', dataViewModel.SiteId()),
  261. // and,
  262. // eq('WorkRequestId', dataViewModel.WorkRequestId())
  263. //]);
  264. //workResultCheckItemDataSource.load().done(function (dbWorkCheckItems) {
  265. // workResultCheckItems(dbWorkCheckItems);
  266. //});
  267. //viewModel.dataModel.selectedItemCheckDate("");
  268. //viewModel.dataModel.selectedItemTextResult("");
  269. //viewModel.dataModel.selectedItemCheckItemId(0);
  270. }
  271. function onItemClick(e) {
  272. viewModel.dataModel.selectedItemCheckDate(e.itemData.CheckDate());
  273. viewModel.dataModel.selectedItemTextResult(e.itemData.TextResult());
  274. viewModel.dataModel.selectedItemCheckItemId(e.itemData.CheckItemId());
  275. if (viewModel.workResultCheckItemMaterialPopup === undefined) {
  276. return;
  277. }
  278. viewModel.workResultCheckItemMaterialPopup.materials2([]);
  279. viewModel.workResultCheckItemMaterialPopup.materials2DataSource.filter([
  280. eq('SiteId', viewModel.dataModel.SiteId()),
  281. and,
  282. eq('WorkRequestId', viewModel.dataModel.WorkRequestId()),
  283. and,
  284. eq('CheckItemId', e.itemData.CheckItemId())
  285. ]);
  286. viewModel.workResultCheckItemMaterialPopup.materials2DataSource.load().done(function (dbMaterials) {
  287. _.each(dbMaterials, function (sm) {
  288. viewModel.workResultCheckItemMaterialPopup.materials2.push({
  289. SiteId: sm.SiteId,
  290. //PurchaseRequestId: ko.observable(purchaseRequestId),
  291. MaterialId: sm.MaterialId,
  292. Name: sm.Name,
  293. MaterialCode: sm.MaterialCode,
  294. MaterialCount: sm.MaterialCount
  295. //FinalPrice: sm.FinalPrice,
  296. });
  297. });
  298. });
  299. }
  300. return {
  301. workResultCheckItems: workResultCheckItems,
  302. refreshListData: refreshListData,
  303. isInnerCheckWorkType: isInnerCheckWorkType,
  304. facilitySearchPopup: facilitySearchPopup,
  305. facilities: facilitiesInView,
  306. businessFields: businessFields,
  307. isReject: isReject,
  308. isWorkOrder: isWorkOrder,
  309. isValidateWithFunction: isValidateWithFunction,
  310. facilityDataGridOptions: facilityDataGridOptions,
  311. modifiableFacilityDataGridOptions: modifiableFacilityDataGridOptions,
  312. handleAfterLoadingModelByKey: handleAfterLoadingModelByKey,
  313. handleAfterSave: handleAfterSave,
  314. handlePopupShowing: handlePopupShowing,
  315. handlePopupShown: handlePopupShown,
  316. handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit,
  317. handleDeleteSelectedFacilities: BWA.Popup.Facility.getDeleteSelectedFacilitiesFunc(facilityGridView, facilities),
  318. handleBeforePopupShowingPromise: handleBeforePopupShowingPromise
  319. };
  320. }
  321. }
  322. });