c5b50fc047573c808cfc5d45f18c3cb40d1fd07d.svn-base 20 KB

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