9e971f5bedbe4cb789a8913e02384de308205b4d.svn-base 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. $(function () {
  2. "use strict";
  3. BemsWebApplication.Factory.WorkResultContentsPopup = {
  4. create: function (viewModel, params, isEdit) {
  5. var workResultDataSource = BemsWebApplication.db.createDataSource('FmsWorkResult', true),
  6. workProgressDataSource = BemsWebApplication.db.createDataSource('FmsWorkCodeProgress', true),
  7. facilityCheckItemDataSource = BemsWebApplication.db.createDataSource('FmsFacilityCheckItem', true),
  8. workResultCheckItemDataSource = BemsWebApplication.db.createDataSource('FmsWorkResultCheckItem', true),
  9. workResultDataViewModel = new BemsWebApplication.FmsWorkResultViewModel(),
  10. workOrderToFacilityDataViewModel = new BemsWebApplication.FmsWorkResultViewModel(),
  11. workOrderDataModel = viewModel.dataModel,
  12. overlayVisible = ko.observable(false),
  13. position = ko.observable(),
  14. isEditable = params.isEditableWorkContents || ko.observable(true),
  15. isConfirmFunction = params.isConfirmFunction || ko.observable(false),
  16. isShowCheckItemList = ko.observable(true),
  17. isNewData = ko.observable(false),
  18. selectedFacility = null,
  19. facilityDataGrid = null,
  20. timer = null,
  21. mainPopupElement = params.mainPopupElement,
  22. progresses = ko.observableArray([]),
  23. checkItems = ko.observableArray();
  24. //dataSourceOptions: {
  25. // store: BemsWebApplication.odata.Facility,
  26. // select: [ 'SiteId' , 'FacilityCode' , 'ParentFacilityName', 'FirstClassName', 'SecondClassName', 'ThirdClassName', 'Name', 'Nickname',
  27. // 'BuildingName', 'FloorName', 'ZoneName', 'ManufactureModel', 'MainContactorUserName', 'SubContactorUserName' ]
  28. //},
  29. workResultDataViewModel.WorkerUserName = ko.observable();
  30. workResultDataViewModel.ProgressId = ko.observable();
  31. workResultDataViewModel.ProgressName = ko.observable();
  32. workResultDataViewModel.StartTime = ko.observable();
  33. workResultDataViewModel.EndTime = ko.observable();
  34. viewModel.isEditableWorkContents = isEditable;
  35. viewModel.isShowCheckItemListInWorkContents = isShowCheckItemList;
  36. function updateWorkOrderToFacility(dataModel, deferred) {
  37. var db = BemsWebApplication.db;
  38. var keys = db.extractKeysObject('FmsWorkOrderToFacility', dataModel);
  39. db.FmsWorkOrderToFacility.update(keys, dataModel.toJS()).done(function () {
  40. var promise = viewModel.refreshFaciliyList();
  41. promise.done(function (facilities) {
  42. var length = facilities.length;
  43. var wp = $Code.WorkProgress;
  44. var workStandbyCount = 0, workingCount = 0, workCompleteCount = 0, workConfirmCount = 0;
  45. $.each(facilities, function (i, f) {
  46. switch (f.ProgressId()) {
  47. case wp.WorkStandby:
  48. workStandbyCount++;
  49. break;
  50. case wp.Working:
  51. workingCount++;
  52. break;
  53. case wp.WorkComplete:
  54. workCompleteCount++;
  55. break;
  56. case wp.WorkConfirm:
  57. workConfirmCount++;
  58. break;
  59. default:
  60. throw new Error('Unknown ProgressId');
  61. }
  62. });
  63. var progressId = null;
  64. if (workStandbyCount === length) {
  65. progressId = wp.WorkStandby;
  66. }
  67. else if (workConfirmCount === length) {
  68. progressId = wp.WorkConfirm;
  69. }
  70. else if (workCompleteCount === length) {
  71. progressId = wp.WorkComplete;
  72. }
  73. else {
  74. progressId = wp.Working;
  75. }
  76. var wrdm = viewModel.workRequestDataModel;
  77. if (progressId !== null && progressId !== wrdm.ProgressId()) {
  78. wrdm.ProgressId(progressId);
  79. db.FmsWorkRequest.update(db.extractKeysObject('FmsWorkRequest', wrdm), wrdm.toJS()).done(function () {
  80. viewModel.refreshList();
  81. deferred.resolve();
  82. });
  83. }
  84. else {
  85. deferred.resolve();
  86. }
  87. });
  88. });
  89. }
  90. function handleButtonSave() {
  91. workResultDataViewModel.StartDate(BWA.DataUtil.getDateTimeFromDateAndTime(
  92. workResultDataViewModel.StartDate(),
  93. workResultDataViewModel.StartTime()));
  94. workResultDataViewModel.EndDate(BWA.DataUtil.getDateTimeFromDateAndTime(
  95. workResultDataViewModel.EndDate(),
  96. workResultDataViewModel.EndTime()));
  97. var workResultPromise = null;
  98. var db = BemsWebApplication.db;
  99. if (isNewData()) {
  100. workResultPromise = db.FmsWorkResult.insert(workResultDataViewModel.toJS());
  101. }
  102. else {
  103. var keys = db.extractKeysObject('FmsWorkResult', workResultDataViewModel);
  104. workResultPromise = db.FmsWorkResult.update(keys, workResultDataViewModel.toJS());
  105. }
  106. var deferred = new $.Deferred();
  107. workResultPromise.done(function (result) {
  108. if (selectedFacility === null) {
  109. throw new Error('selectedFacility is null!');
  110. }
  111. var model = new BemsWebApplication.FmsWorkOrderToFacility();
  112. model.SiteId(workOrderDataModel.SiteId());
  113. model.OrderId(workOrderDataModel.OrderId());
  114. model.FacilityCode(selectedFacility.FacilityCode());
  115. model.ProgressId(workResultDataViewModel.ProgressId());
  116. updateWorkOrderToFacility(model, deferred);
  117. var postData = [];
  118. var itemKeys = _.keys(new BWA.FmsWorkResultCheckItemViewModel());
  119. var toJS = BWA.DataUtil.convertViewModelToJS;
  120. $.each(checkItems(), function (i, item) {
  121. item = toJS(_.pick(item, itemKeys));
  122. item.OrderId = workOrderDataModel.OrderId();
  123. if (_.isBoolean(item.BoolResult) === false) {
  124. item.BoolResult = false;
  125. }
  126. postData.push(item);
  127. });
  128. var postPromise = BemsWebApplication.api.post(
  129. 'FmsWorkResultCheckItem', postData, {
  130. SiteId: workResultDataViewModel.SiteId(),
  131. OrderId: workResultDataViewModel.OrderId(),
  132. FacilityCode: workResultDataViewModel.FacilityCode()
  133. }
  134. );
  135. $.when(postPromise, deferred.promise()).done(function () {
  136. utils.toast.show($G('successDatabaseProcessMsg'));
  137. });
  138. });
  139. }
  140. function handlePopupButtonConfirm() {
  141. var deferred = new $.Deferred();
  142. var keys = BemsWebApplication.db.extractKeysObject('FmsWorkResult', workResultDataViewModel);
  143. //var dataModel = new BemsWebApplication.FmsWorkResultViewModel();
  144. //workResultDataViewModel.fromJS( workResultDataSource.toJS() );
  145. workResultDataViewModel.ConfirmedUserId(BWA.UserInfo.UserId());
  146. workResultDataViewModel.ConfirmedDate(moment().toDate());
  147. var db = BemsWebApplication.db;
  148. db.FmsWorkResult.update(keys, workResultDataViewModel.toJS()).done(function () {
  149. if (selectedFacility === null) {
  150. throw new Error('selectedFacility is null!');
  151. }
  152. var model = new BemsWebApplication.FmsWorkOrderToFacility();
  153. model.SiteId(workOrderDataModel.SiteId());
  154. model.OrderId(workOrderDataModel.OrderId());
  155. model.FacilityCode(selectedFacility.FacilityCode());
  156. model.ProgressId($Code.WorkProgress.WorkConfirm);
  157. updateWorkOrderToFacility(model, deferred);
  158. deferred.promise().done(function () {
  159. utils.toast.show($G('successDatabaseProcessMsg'));
  160. });
  161. });
  162. }
  163. workProgressDataSource.filter(
  164. ['SiteId', '=', BWA.UserInfo.SiteId()],
  165. 'and',
  166. ['ProgressId', '>=', $Code.WorkProgress.WorkStandby],
  167. 'and',
  168. ['ProgressId', '<=', $Code.WorkProgress.WorkComplete]
  169. );
  170. overlayVisible.subscribe(function (value) {
  171. if (value) {
  172. if (timer !== null) {
  173. clearInterval(timer);
  174. }
  175. var top, left;
  176. var element = $('#popupWorkContentsDetail').offsetParent();
  177. position({ my: 'left top', at: 'right top', of: element });
  178. timer = setInterval(function () {
  179. var offset = element.offset();
  180. if (top !== offset.top || left !== offset.left) {
  181. top = offset.top;
  182. left = offset.left;
  183. position({ my: 'left top', at: 'right top', of: element });
  184. }
  185. }, 100);
  186. }
  187. else {
  188. if (timer !== null) {
  189. clearInterval(timer);
  190. timer = null;
  191. }
  192. }
  193. });
  194. position.subscribe(function (value) {
  195. });
  196. viewModel.popupVisible.subscribe(function (value) {
  197. if (value === false) {
  198. overlayVisible(false);
  199. }
  200. workProgressDataSource.load().done(function (result) {
  201. progresses(result);
  202. });
  203. });
  204. viewModel.progressesInWorkResult = progresses;
  205. viewModel.workContentsDataModel = workResultDataViewModel;
  206. viewModel.workContentsCheckItems = checkItems;
  207. viewModel.workContentsResultTypes = $G.FacilityCheckItemResultType;
  208. viewModel.workResultContentsViewOptions = {
  209. width: '720px',
  210. height: '616px',
  211. dragEnabled: false,
  212. position: position,
  213. visible: overlayVisible,
  214. showingAction: function () {
  215. },
  216. closeOnOutsideClick: false,
  217. shading: false,
  218. animation: {
  219. show: { type: "slide", duration: 150, from: { left: '-=10', opacity: 0 }, to: { opacity: 1 } },
  220. hide: { type: "slide", duration: 150, from: { left: '-=10', opacity: 1 }, to: { opacity: 0 } }
  221. //show: { type: "slide", duration: 150, from: { left: screenWidth() - 260, width: '260px', opacity: 0.0 }, to: { left: screenWidth() - 260, width: '260px', opacity: 1 } },
  222. //hide: { type: "slide", duration: 100, from: { left: screenWidth() - 260, width: '260px', opacity: 1 }, to: { left: screenWidth() - 260, width: '260px', opacity: 0 } }
  223. }
  224. };
  225. //var popup = e.component;
  226. viewModel.toolbarItemsInWorkResult = [
  227. { location: 'before', text: $G('workContents') },
  228. { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', visible: isEditable, disabled: viewModel.hasnotModificationPermission, clickAction: handleButtonSave } },
  229. { location: 'after', widget: 'button', options: { text: $G('workResultConfirm'), icon: 'save', visible: isConfirmFunction, disabled: viewModel.hasnotModificationPermission, clickAction: handlePopupButtonConfirm } },
  230. { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: function () { overlayVisible(false); } } }
  231. ];
  232. return {
  233. visible: overlayVisible,
  234. checkItems: checkItems,
  235. setFacilityGridViewInstance: function (instance) {
  236. facilityDataGrid = instance;
  237. },
  238. setSelectedFacility: function (facility) {
  239. selectedFacility = facility;
  240. isConfirmFunction(selectedFacility.ProgressId() === $Code.WorkProgress.WorkComplete);
  241. (function (workResultDataModel) {
  242. var eq = BWA.DataUtil.constructEqualFilter;
  243. workResultDataSource.filter(
  244. eq('SiteId', BWA.UserInfo.SiteId()),
  245. 'and',
  246. eq('OrderId', workOrderDataModel.OrderId()),
  247. 'and',
  248. eq('FacilityCode', selectedFacility.FacilityCode())
  249. );
  250. facilityCheckItemDataSource.filter([
  251. eq('SiteId', BWA.UserInfo.SiteId()),
  252. 'and',
  253. eq('FacilityCode', selectedFacility.FacilityCode()),
  254. 'and',
  255. eq('WorkTypeId', viewModel.workRequestDataModel.WorkTypeId())
  256. ]);
  257. workResultCheckItemDataSource.filter([
  258. eq('SiteId', BWA.UserInfo.SiteId()),
  259. 'and',
  260. eq('FacilityCode', selectedFacility.FacilityCode()),
  261. 'and',
  262. eq('OrderId', workOrderDataModel.OrderId())
  263. ]);
  264. $.when(workResultDataSource.load(),
  265. facilityCheckItemDataSource.load(),
  266. workResultCheckItemDataSource.load())
  267. .done(function (workResultArray, facilityCheckItems, workResultCheckItems) {
  268. workResultArray = workResultArray[0];
  269. facilityCheckItems = facilityCheckItems[0];
  270. workResultCheckItems = workResultCheckItems[0];
  271. if (workResultArray.length === 0) {
  272. isNewData(true);
  273. BWA.DataUtil.resetViewModel(workResultDataViewModel);
  274. workResultDataViewModel.SiteId(workOrderDataModel.SiteId());
  275. workResultDataViewModel.OrderId(workOrderDataModel.OrderId());
  276. workResultDataViewModel.FacilityCode(selectedFacility.FacilityCode());
  277. workResultDataViewModel.RequestId(workOrderDataModel.RequestId());
  278. var currentDate = moment().toDate();
  279. workResultDataModel.StartDate(currentDate);
  280. workResultDataModel.StartTime(currentDate);
  281. workResultDataModel.EndDate(currentDate);
  282. workResultDataModel.EndTime(currentDate);
  283. }
  284. else {
  285. var model = workResultArray[0];
  286. isNewData(false);
  287. BWA.DataUtil.copyViewModel(model, workResultDataModel);
  288. workResultDataModel.StartTime(model.StartDate());
  289. workResultDataModel.EndTime(model.EndDate());
  290. }
  291. checkItems(_.map(facilityCheckItems, function (item) {
  292. var foundItem = BWA.DataUtil.koFindWhere(workResultCheckItems, { CheckItemId: item.CheckItemId() });
  293. if (_.isEmpty(foundItem) === false) {
  294. $.extend(item, foundItem);
  295. }
  296. return item;
  297. }));
  298. workResultDataModel.ProgressName(selectedFacility.FmsWorkCodeProgress_Name());
  299. workResultDataModel.ProgressId(selectedFacility.ProgressId());
  300. workResultDataModel.WorkerUserId(workOrderDataModel.WorkerUserId());
  301. workResultDataModel.WorkerUserName(workOrderDataModel.WorkerUserName());
  302. });
  303. })(viewModel.workContentsDataModel);
  304. }
  305. }
  306. }
  307. }
  308. });
  309. /* 한번에 해결하려 했으나 여러가지 상황이 발생해 나눠서 요청하고 합쳐서 처리하기로 결정
  310. var checkItemDataSource = BWA.DataUtil.createDataSource({
  311. dataSourceOptions: {
  312. store: BemsWebApplication.odata.FmsWorkResultCheckItem,
  313. select: [
  314. 'SiteId', 'FacilityCode', 'CheckItemId', 'WorkTypeId', 'CycleUnitId', 'Name',
  315. 'IsYesNoResult', 'CheckItemId', 'OrderId', 'BoolResult', 'TextResult'
  316. ],
  317. //store: BemsWebApplication.db.FmsFacilityCheckItem,
  318. //select: [
  319. // 'SiteId', 'FacilityCode', 'CheckItemId', 'WorkTypeId', 'CycleUnitId', 'Name',
  320. // 'IsYesNoResult', 'IsUse',
  321. // 'FmsWorkResultCheckItem/CheckItemId',
  322. // 'FmsWorkResultCheckItem/OrderId',
  323. // 'FmsWorkResultCheckItem/BoolResult',
  324. // 'FmsWorkResultCheckItem/TextResult'
  325. //],
  326. //expand: [ 'FmsWorkResultCheckItem' ],
  327. //extendOptions: {
  328. // alterNames: {
  329. // 'FmsWorkResultCheckItem/CheckItemId': 'ResultCheckItemId',
  330. // 'FmsWorkResultCheckItem/OrderId': 'OrderId',
  331. // 'FmsWorkResultCheckItem/BoolResult': 'BoolResult',
  332. // 'FmsWorkResultCheckItem/TextResult': 'TextResult',
  333. // }
  334. //}
  335. }
  336. });
  337. */