3cbc45a3c9785cc17ae3b5c628af7c9d0be3c8fa.svn-base 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
  1. BemsWebApplication.EquipManagement2 = function (params, viewInfo) {
  2. "use strict";
  3. var codeTypeDataSource = BemsWebApplication.db.createDataSource('FmsEquipmentCodeType', true, false, true),
  4. codeStateTypeDataSource = BemsWebApplication.db.createDataSource('FmsEquipmentCodeStateType', false, false, true),
  5. warehouseDataSource = BemsWebApplication.db.createDataSource('FmsMaterialWarehouse', true, false, true);
  6. var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;
  7. var filePath = "/App_Data/files/form/공기구등록양식.xlsx";
  8. var EquipmentTypes = ko.observableArray();
  9. var EquipmentTypesDataSource = BemsWebApplication.db.createDataSource('FmsEquipmentCodeType', true);
  10. var Equipment = ko.observableArray();
  11. var EquipmentDataSource = BemsWebApplication.db.createDataSource('FmsEquipment', true);
  12. var EquipmentInfo = ko.observableArray();
  13. var FmsEquipmentDataSource = BemsWebApplication.db.createDataSource('FmsEquipment');
  14. var RowEquipmentName, RowEquipmentTypeId;
  15. var equipmentExDataSource = BWA.DataUtil.createDataSource({
  16. dataSourceOptions: {
  17. store: BemsWebApplication.odata.FmsEquipmentEx,
  18. map: function (item) {
  19. return new BemsWebApplication.FmsEquipmentExViewModel(item);
  20. },
  21. filter: ([
  22. eq('SiteId', BWA.UserInfo.SiteId())
  23. ]),
  24. }
  25. });
  26. var visibleEditButton = ko.observable(false); // 수정 버튼 활성화 여부 플래그
  27. var hasnotModificationPermission = ko.observable(true); // 수정버튼 비활성화 플래그
  28. var visibleDeleteButton = ko.observable(false); // 삭제버튼 활성화 플래그
  29. var visibleCancelButton = ko.observable(false); // 취소버튼 활성화 플래그
  30. var isEditModeInPopup = ko.observable(); // 저장버튼 활성화 플래그
  31. var isNotModifyMode = ko.observable(false); // 저장버튼 비활성화 플래그
  32. var codeTypes = ko.observableArray(),
  33. codeStateTypes = ko.observableArray(),
  34. warehouses = ko.observableArray(),
  35. equipmentExs = ko.observableArray();
  36. var IsAdditionalEquipment = ko.observable(false);
  37. var codeTypesForSearch = ko.observableArray(),
  38. codeStateTypesForSearch = ko.observableArray(),
  39. warehousesForSearch = ko.observableArray();
  40. var deferredForSearch = new $.Deferred();
  41. var backupDataViewModel = null;
  42. var imagefileUrl = ko.observable(), uploadedFileInfo = {}, dropZone = null;
  43. var equipPopupToolbarItems = [
  44. { location: 'before', text: '입고 등록' },
  45. { location: 'after', widget: 'button', options: { text: $G('edit'), icon: 'edit', visible: visibleEditButton, disabled: hasnotModificationPermission, clickAction: handlePopupButtonEdit } },
  46. { location: 'after', widget: 'button', options: { text: $G('delete'), type: 'danger', icon: 'remove', visible: visibleDeleteButton, disabled: hasnotModificationPermission, clickAction: handlePopupButtonDelete } },
  47. { location: 'after', widget: 'button', options: { text: $G('cancel'), icon: 'cancel', visible: visibleCancelButton, clickAction: handlePopupButtonCancel } },
  48. { location: 'after', widget: 'button', options: { text: $G('save'), icon: 'save', visible: isEditModeInPopup, disabled: isNotModifyMode, clickAction: handlePopupButtonSave } },
  49. { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: equipEstimatePopupButtonClose } }
  50. ];
  51. function EquipImport() {
  52. var inputFileControl = document.getElementById("FILE_IMPORT");
  53. $(document).ready(function () {
  54. function changeValue(e) {
  55. if (e.currentTarget.value == "") {
  56. }
  57. else if (!checkFileType(e.currentTarget.value)) {
  58. utils.toast.show('정해진 양식으로만 올려주세요!', 'error');
  59. return;
  60. } else {
  61. var files = e.target.files; //input file 객체를 가져온다.
  62. var i, f;
  63. for (i = 0; i != files.length; ++i) {
  64. f = files[i];
  65. var reader = new FileReader(); //FileReader를 생성한다.
  66. //성공적으로 읽기 동작이 완료된 경우 실행되는 이벤트 핸들러를 설정한다.
  67. reader.onload = function (e) {
  68. if (e) {
  69. var data = e.target.result;
  70. data = new Uint8Array(data);
  71. var EXCELarray = [];
  72. var tempEXCELarray = [];
  73. var workbook = XLSX.read(data, { type: 'array' });
  74. workbook.SheetNames.forEach(function (item, index, array) {
  75. EXCELarray.push(XLSX.utils.sheet_to_json(workbook.Sheets[item]));
  76. });
  77. for (var i = 0; i < EXCELarray[0].length; i++) {
  78. var tempmaterial = {
  79. SiteId: BWA.UserInfo.SiteId(),
  80. EquipmentId: null,
  81. Name: EXCELarray[0][i]['이름 (*)'],
  82. EquipmentTypeId: EXCELarray[0][i]['분류 (*)'],
  83. WarehouseId: EXCELarray[0][i]['창고명칭 (*)'],
  84. Unit: EXCELarray[0][i]['단위'],
  85. Standard: EXCELarray[0][i]['규격'],
  86. AddDate: new Date(),
  87. UpdateDate: new Date(),
  88. RegisterUserId: BWA.UserInfo.UserId(),
  89. SupplierName: EXCELarray[0][i]['공급업체'],
  90. SupplierPhoneNo: EXCELarray[0][i]['업체연락처'],
  91. ImageFileId: null,
  92. TotalStockCount: null,
  93. CurrentStockCount: null,
  94. CurrentRentCount: null,
  95. StoredCount: EXCELarray[0][i]['최초입고수량']
  96. }
  97. var Addonoff = EXCELarray[0][i]['추가입고여부(*)[아니오]'];
  98. // 공기구 분류
  99. if (tempmaterial.EquipmentTypeId == null) {
  100. utils.toast.show('공기구 분류를 입력해야합니다(' + (i + 1) + '번 행)', 'error');
  101. return;
  102. }
  103. else {
  104. var cnt = 0;
  105. for (var j = 0; j < EquipmentTypes().length; j++) {
  106. if (tempmaterial.EquipmentTypeId == EquipmentTypes()[j].Name()) {
  107. tempmaterial.EquipmentTypeId = EquipmentTypes()[j].EquipmentTypeId();
  108. break;
  109. }
  110. else {
  111. cnt++;
  112. if (cnt == EquipmentTypes().length) {
  113. utils.toast.show('잘못된 공기구 분류 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error');
  114. return;
  115. }
  116. }
  117. }
  118. }
  119. // 공기구 이름
  120. if (tempmaterial.Name == null) {
  121. utils.toast.show('공기구 이름을 입력해야합니다(' + (i + 1) + '번 행)', 'error');
  122. return;
  123. }
  124. else {
  125. tempmaterial.Name = tempmaterial.Name.toString();
  126. }
  127. // 규격
  128. if (tempmaterial.Standard == null) {
  129. tempmaterial.Standard = "";
  130. } else {
  131. tempmaterial.Standard = tempmaterial.Standard.toString();
  132. }
  133. for (var j = 0; j < Equipment().length; j++) {
  134. if (tempmaterial.Name == Equipment()[j].Name()) {
  135. if (tempmaterial.Standard == Equipment()[j].Standard()) {
  136. utils.toast.show('동일한 공기구이름과 규격을 입력할수 없습니다(' + (i + 1) + '번 행)', 'error');
  137. return;
  138. }
  139. }
  140. }
  141. //공기구 창고 명칭
  142. if (tempmaterial.WarehouseId == null) {
  143. utils.toast.show('창고 명칭을 입력해야합니다(' + (i + 1) + '번 행)', 'error');
  144. return;
  145. }
  146. else {
  147. var cnt = 0;
  148. for (var j = 0; j < warehouses().length; j++) {
  149. if ((tempmaterial.WarehouseId == warehouses()[j].Name()) && warehouses()[j].IsUse() == true) {
  150. tempmaterial.WarehouseId = warehouses()[j].WarehouseId();
  151. break;
  152. }
  153. else {
  154. cnt++;
  155. if (cnt == warehouses().length) {
  156. utils.toast.show('잘못된 창고 명칭 내용을 입력하였습니다(' + (i + 1) + '번 행)', 'error');
  157. return;
  158. }
  159. }
  160. }
  161. }
  162. //추가입고여부
  163. if (Addonoff != null) {
  164. if (Addonoff != "아니오") {
  165. utils.toast.show('추가입고여부는 아니오만 입력해야합니다(' + (i + 1) + '번 행)[아니오]', 'error');
  166. return;
  167. }
  168. } else {
  169. utils.toast.show('추가입고여부를 입력해야합니다(' + (i + 1) + '번 행)', 'error');
  170. return;
  171. }
  172. //단위
  173. if (tempmaterial.Unit != null)
  174. tempmaterial.Unit = tempmaterial.Unit.toString();
  175. //공급업체
  176. if (tempmaterial.SupplierName != null)
  177. tempmaterial.SupplierName = tempmaterial.SupplierName.toString();
  178. //업체 연락처
  179. if (tempmaterial.SupplierPhoneNo != null)
  180. tempmaterial.SupplierPhoneNo = tempmaterial.SupplierPhoneNo.toString();
  181. if (tempmaterial.TotalStockCount != null) {
  182. if (typeof (tempmaterial.TotalStockCount) == "string") {
  183. utils.toast.show('최초 입고수량은 숫자만 입력가능합니다(' + (i + 1) + '번 행)', 'error');
  184. return;
  185. }
  186. else {
  187. tempmaterial.TotalStockCount = tempmaterial.CurrentStockCount = tempmaterial.StoredCount = parseInt(tempmaterial.TotalStockCount);
  188. }
  189. }
  190. tempEXCELarray.push(tempmaterial);
  191. }
  192. var parameters = {
  193. SiteId: BWA.UserInfo.SiteId(),
  194. IsAdditionalEquipment: false
  195. };
  196. for (var k = 0; k < tempEXCELarray.length; k++) {
  197. BWA.api.post('FmsEquipment/InsertFmsEquipment', tempEXCELarray[k], parameters).done(
  198. function () {
  199. if (k == tempEXCELarray.length) {
  200. EquipmentDataSource.load().done(function (result5) {
  201. utils.toast.show($G('successDatabaseInsertionMsg'));
  202. viewModel.gridView().refresh();
  203. });
  204. }
  205. }).fail(function (error) {
  206. utils.toast.show(error);
  207. });
  208. }
  209. }
  210. };
  211. //파일객체를 읽는다. 완료되면 원시 이진 데이터가 문자열로 포함됨.
  212. reader.readAsArrayBuffer(f);
  213. }//end. for
  214. }
  215. $("#FILE_IMPORT").val("");
  216. }
  217. $("#FILE_IMPORT").on("change", changeValue);
  218. });
  219. inputFileControl.click();
  220. }
  221. function checkFileType(filePath) {
  222. var fileLen = filePath.length;
  223. var lastDot = filePath.lastIndexOf('.');
  224. var fileFormat = filePath.substring(lastDot, fileLen).toLowerCase();
  225. if (fileFormat == ".xls" || fileFormat == ".xlsx") {
  226. return true;
  227. } else { return false; }
  228. }
  229. function setupDropZone(dataViewModel) {//2019-11-11 변경
  230. var timer = null;
  231. viewModel.isEditModeInPopup.subscribe(function (value) {
  232. if (value) {
  233. if (timer) {
  234. clearInterval(timer);
  235. }
  236. timer = setInterval(function () {
  237. if ($('#equipmentDropZone').length) {
  238. if (_.isNull(dropZone)) {
  239. dropZone = BWA.DropZone.create({
  240. id: '#equipmentDropZone',
  241. categoryId: $Code.FileCategory.EQUIPMENT,
  242. uploadedFileInfo: uploadedFileInfo,
  243. handleRemoveBeforePromise: function () {
  244. var keys = BWA.db.extractKeysObject('FmsEquipment', dataViewModel);
  245. return BWA.db.FmsEquipment.update(keys, { ImageFileId: null });
  246. },
  247. handleSuccess: function (fileInfo) {
  248. if (uploadedFileInfo.FileId) {
  249. dataViewModel.ImageFileId(uploadedFileInfo.FileId);
  250. var keys = BWA.db.extractKeysObject('FmsEquipment', dataViewModel);
  251. if (keys.EquipmentId != null) {
  252. return BWA.db.FmsEquipment.update(keys, { ImageFileId: uploadedFileInfo.FileId })
  253. .done(function (res) {
  254. $('#gridContainer').dxDataGrid('instance').refresh();
  255. });
  256. }
  257. }
  258. },
  259. handleRemovedFile: function () {
  260. dataViewModel.ImageFileId(null);
  261. }
  262. });
  263. }
  264. }
  265. }, 100);
  266. }
  267. else {
  268. if (timer) {
  269. clearInterval(timer);
  270. timer = null;
  271. }
  272. dropZone = null;
  273. }
  274. });
  275. }
  276. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsEquipmentHistory', {
  277. dataSourceOptions: {
  278. select: [
  279. 'SiteId',
  280. 'EquipmentHistoryId',
  281. 'EquipmentId',
  282. 'TotalStockCount',
  283. 'CurrentStockCount',
  284. 'RentCount',
  285. 'CurrentRentCount',
  286. 'ReturnCount',
  287. 'LossCount',
  288. 'StoredCount',
  289. 'EquipmentRentId',
  290. 'EquipmentStateTypeId',
  291. 'AddDate',
  292. 'UpdateDate',
  293. 'IsReturned',
  294. 'FmsEquipment/SupplierName',
  295. 'FmsEquipment/SupplierPhoneNo',
  296. 'FmsEquipment/FmsEquipmentCodeType/Name',
  297. 'FmsEquipment/FmsEquipmentCodeType/EquipmentTypeId',
  298. 'FmsEquipment/Name',
  299. 'FmsEquipment/CmUser/Name',
  300. 'FmsEquipmentCodeStateType/Name',
  301. 'FmsEquipment/Standard',
  302. 'FmsEquipment/Unit',
  303. 'FmsEquipment/ImageFileId',
  304. 'FmsEquipmentRentInfo/CmUser1/Name',
  305. 'FmsEquipmentRentInfo/RentDate',
  306. 'FmsEquipmentRentInfo/ReturnDueDate',
  307. 'FmsEquipmentRentInfo/ReturnFixDate',
  308. 'FmsEquipment/FmsMaterialWarehouse/'
  309. ],
  310. expand: [
  311. 'FmsEquipment/FmsEquipmentCodeType',
  312. 'FmsEquipmentCodeStateType',
  313. 'FmsEquipment/CmUser',
  314. 'FmsEquipmentRentInfo',
  315. 'FmsEquipmentRentInfo/CmUser1',
  316. 'FmsEquipment/FmsMaterialWarehouse',
  317. 'FmsEquipmentCodeStateType / Name',
  318. 'FmsEquipment/ImageFileId'
  319. ],
  320. extendOptions: {
  321. forceOriginalField: true
  322. },
  323. filter: [
  324. eq('SiteId', BWA.UserInfo.SiteId()),
  325. 'and',
  326. eq('EquipmentStateTypeId', 1), // 공사완료 항목만 가져옴
  327. ]
  328. },
  329. columns: [
  330. { dataField: 'EquipmentHistoryId', caption: $G('number'), width: '10%', alignment: 'center' },
  331. { dataField: 'FmsEquipment/FmsEquipmentCodeType/Name', caption: '분류', width: '8%', alignment: 'center' },
  332. { dataField: 'FmsEquipment/Name', caption: '공기구명', width: '20%', alignment: 'center' },
  333. { dataField: 'FmsEquipment/Standard', caption: '규격', width: '20%', alignment: 'center' },
  334. { dataField: 'FmsEquipment/Unit', caption: '단위', width: '10%', alignment: 'center' },
  335. { dataField: 'StoredCount', caption: '수량', width: '10%', alignment: 'center' },
  336. {
  337. dataField: 'UpdateDate', caption: '등록일', width: '17%', alignment: 'center', sortOrder: 'desc', dataType: "shortDate", format: "yyyy-MM-dd hh:mm:ss",
  338. customizeText: function (cellInfo) {
  339. return cellInfo.valueText;
  340. }
  341. },
  342. { dataField: 'FmsEquipment/SupplierName', caption: '공급업체', width: '15%', alignment: 'center' },
  343. { dataField: 'FmsEquipment/SupplierPhoneNo', caption: '연락처', width: '15%', alignment: 'center' },
  344. { dataField: 'FmsEquipment/FmsMaterialWarehouse/Name', caption: '창고위치', width: '10%', alignment: 'center' },
  345. { dataField: 'FmsEquipment/CmUser/Name', caption: '관리자', width: '10%', alignment: 'center', visible: false },
  346. ],
  347. paging: {
  348. pageSize: 18,
  349. enabled: true
  350. },
  351. pager: {},
  352. "export": {
  353. enabled: true,
  354. fileName: '공기구 등록 목록',
  355. },
  356. onExporting: function (e) {
  357. e.component.columnOption("EquipmentHistoryId", "visible", false);
  358. },
  359. onExported: function (e) {
  360. e.component.columnOption("EquipmentHistoryId", "visible", true);
  361. },
  362. sort: { field: "EquipmentHistoryId", desc: true },
  363. searchViewItems: [
  364. { id: 'FmsEquipment/FmsEquipmentCodeType/Name' },
  365. { id: 'FmsEquipment/Name' },
  366. { id: 'FmsEquipment/Standard' },
  367. { id: 'UpdateDate', type: 'dateRange', isOnlyDate: true }
  368. ],
  369. popupWidth: 700,
  370. handleViewShowing: function (dataModel) {
  371. //권한설정
  372. hasnotModificationPermission(!BWA.UserInfo.hasPermissionOfModification(viewInfo.viewName));
  373. //2016 04 27 추가 hcLee
  374. warehouseDataSource.filter([
  375. eq('SiteId', BWA.UserInfo.SiteId()),
  376. and,
  377. eq('IsUse', true)
  378. ])
  379. $.when(
  380. codeStateTypeDataSource.load(),
  381. codeTypeDataSource.load(),
  382. warehouseDataSource.load(),
  383. EquipmentTypesDataSource.load(),
  384. EquipmentDataSource.load()
  385. ).done(function (codeStateTypeResult, codeTypeResult, warehouseResult, EquipmentTypesResult, EquipmentResult) {
  386. codeStateTypes(codeStateTypeResult[0]);
  387. codeTypes(codeTypeResult[0]);
  388. warehouses(warehouseResult[0]);
  389. codeStateTypesForSearch($SearchView.createArrayOfSelectBox('EquipmentStateTypeId', codeStateTypes()));
  390. codeTypesForSearch($SearchView.createArrayOfSelectBox('EquipmentTypeId', codeTypes()));
  391. warehousesForSearch($SearchView.createArrayOfSelectBox('WarehouseId', warehouses()));
  392. EquipmentTypes(EquipmentTypesResult[0]);
  393. Equipment(EquipmentResult[0]);
  394. deferredForSearch.resolve();
  395. });
  396. },
  397. handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {
  398. dataGrid.clearSelection();
  399. viewModel.visibleEditButton(true);
  400. viewModel.visibleDeleteButton(true);
  401. viewModel.isNotModifyMode(true);
  402. var data = clickRow.data;
  403. var viewDataModel = viewModel.dataModel;
  404. viewDataModel.AddDate(data.AddDate());
  405. viewDataModel.UpdateDate(data.UpdateDate());
  406. viewDataModel.SiteId(data.SiteId());
  407. viewDataModel.Name = $KoSet(viewDataModel.Name, data['FmsEquipment/Name']);
  408. viewDataModel.EquipmentTypeId = $KoSet(viewDataModel.EquipmentTypeId, data['FmsEquipment/FmsEquipmentCodeType/EquipmentTypeId']);
  409. viewDataModel.WarehouseId = $KoSet(viewDataModel.WarehouseId, data['FmsEquipment/FmsMaterialWarehouse/WarehouseId']);
  410. viewDataModel.WarehouseName = $KoSet(viewDataModel.WarehouseName, data['FmsEquipment/FmsMaterialWarehouse/Name']);
  411. viewDataModel.Unit = $KoSet(viewDataModel.Unit, data['FmsEquipment/Unit']);
  412. viewDataModel.Standard = $KoSet(viewDataModel.Standard, data['FmsEquipment/Standard']);
  413. viewDataModel.RegisterUserId(BWA.UserInfo.UserId());
  414. viewDataModel.SupplierName = $KoSet(viewDataModel.SupplierName, data['FmsEquipment/SupplierName']);
  415. viewDataModel.SupplierPhoneNo = $KoSet(viewDataModel.SupplierPhoneNo, data['FmsEquipment/SupplierPhoneNo']);
  416. viewDataModel.TotalStockCount(data.TotalStockCount());
  417. viewDataModel.CurrentStockCount(data.CurrentStockCount());
  418. viewDataModel.StoredCount(data.StoredCount());
  419. viewDataModel.CurrentRentCount(data.CurrentRentCount());
  420. viewDataModel.EquipmentId(data.EquipmentId());//2019-11-11 변경
  421. viewDataModel.ImageFileId = $KoSet(viewDataModel.ImageFileId, data['FmsEquipment/ImageFileId']);
  422. // 여기서 ViewModel 설정하고 그리드 rowiTem
  423. // 갯수만 수정하면 되지 않을까? 만일 수정을 요청하면 말이다. hcLee 2016 01 14
  424. popupVisible(true); // Detail 모드를 수행하지 않음 // hcLee 2016 01 14 확인 공기구등록에서는 수정의 의미가 없다
  425. RowEquipmentName = data['FmsEquipment/Name'];
  426. RowEquipmentTypeId = data['FmsEquipment/FmsEquipmentCodeType/EquipmentTypeId'];
  427. },
  428. handleViewShown: function (dataViewModel, isEditModeInPopup) {
  429. setupDropZone(dataViewModel);
  430. },
  431. handlePopupShowing: function (isNewInPopup, dataViewModel) {
  432. imagefileUrl(undefined);//2019-11-11 변경
  433. // 저장 버튼
  434. if (isNewInPopup() == false) {
  435. } else {
  436. dataViewModel.Name('');
  437. dataViewModel.Unit('');
  438. dataViewModel.Standard('');
  439. dataViewModel.SupplierName('');
  440. dataViewModel.SupplierPhoneNo('');
  441. dataViewModel.RegisterUserId(BWA.UserInfo.UserId());
  442. dataViewModel.AddDate(new Date());
  443. dataViewModel.UpdateDate(new Date());
  444. dataViewModel.StoredCount(1);
  445. dataViewModel.ImageFileId(null);
  446. viewModel.isNewInPopup(true);
  447. viewModel.isEditModeInPopup(true);
  448. IsAdditionalEquipment(false);
  449. }
  450. FmsEquipmentDataSource.filter([
  451. ["SiteId", "=", BWA.UserInfo.SiteId()]
  452. ]);
  453. FmsEquipmentDataSource.load().done(function (result) {
  454. EquipmentInfo(result);
  455. });
  456. },
  457. handlePopupShown: function (isEditMode, isNew, dataViewModel) {
  458. $.when(
  459. equipmentExDataSource.load()
  460. ).done(function (equipmentExResult) {
  461. equipmentExs(equipmentExResult);
  462. });
  463. if (isNew) { // 신규등록인 경우
  464. }
  465. },
  466. handleSaveSuccess: function () {
  467. if (_.isNull(dropZone) === false) {//2019-11-11 변경
  468. dropZone.resetUploadedFileInfo();
  469. }
  470. },
  471. handleBeforeDelete: function () {//2019-11-11 변경
  472. var temp = {
  473. SiteId: BWA.UserInfo.SiteId(),
  474. FileId: viewModel.dataModel.ImageFileId()
  475. }
  476. BWA.db.CmFile.byKey(temp).done(function (data) {
  477. if ($('#equipmentDropZone1').length) {
  478. if (_.isNull(dropZone)) {
  479. dropZone = BWA.DropZone.create({
  480. id: '#equipmentDropZone1',
  481. categoryId: $Code.FileCategory.EQUIPMENT
  482. });
  483. dropZone.removeFile(data);
  484. dropZone = null;
  485. }
  486. }
  487. });
  488. },
  489. handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) {
  490. if (isNewInPopup() == false) {
  491. getImageUrl();
  492. }
  493. }
  494. });
  495. function handlePopupButtonSave() {
  496. var dataViewModel = viewModel.dataModel;
  497. if (IsAdditionalEquipment()) {
  498. if (dataViewModel.EquipmentId() == null) {
  499. utils.toast.show('추가입고할 공기구를 선택하세요.', 'error');
  500. return;
  501. }
  502. }
  503. else {
  504. if (dataViewModel.EquipmentTypeId() == null) {
  505. utils.toast.show('입고할 공기구 분류 선택하세요.', 'error');
  506. return;
  507. }
  508. else if (dataViewModel.Name() == null || dataViewModel.Name() == "") {
  509. utils.toast.show('입고할 공기구 이름을 입력하세요.', 'error');
  510. return;
  511. }
  512. }
  513. if (dataViewModel.WarehouseId() == null) {
  514. utils.toast.show('입고될 창고위치를 선택하세요.', 'error');
  515. return;
  516. }
  517. if (dataViewModel.StoredCount() == "" || dataViewModel.StoredCount() < 0) {
  518. utils.toast.show('입고수량을 입력하세요. 수량은 0 이상이어야 합니다.', 'error');
  519. return;
  520. }
  521. var isDuplicated = false;
  522. if (viewModel.isNewInPopup()) {
  523. for (var i = 0; i < EquipmentInfo().length; i++) {
  524. if (dataViewModel.Name() == EquipmentInfo()[i].Name() && dataViewModel.EquipmentTypeId() == EquipmentInfo()[i].EquipmentTypeId()) {
  525. isDuplicated = true;
  526. }
  527. }
  528. if (!BWA.DataUtil.isValidInputValue(dataViewModel.Name())) {
  529. if (!IsAdditionalEquipment()) {
  530. utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
  531. return;
  532. }
  533. }
  534. else {
  535. if (isDuplicated) {
  536. utils.toast.show('동일 정보가 존재합니다.', 'error');
  537. return;
  538. }
  539. }
  540. }
  541. else {
  542. for (var i = 0; i < EquipmentInfo().length; i++) {
  543. if (dataViewModel.EquipmentTypeId() == EquipmentInfo()[i].EquipmentTypeId() && dataViewModel.Name() == EquipmentInfo()[i].Name()
  544. && (RowEquipmentTypeId() != EquipmentInfo()[i].EquipmentTypeId() || RowEquipmentName() != EquipmentInfo()[i].Name())) {
  545. isDuplicated = true;
  546. }
  547. }
  548. if (!BWA.DataUtil.isValidInputValue(dataViewModel.Name())) {
  549. if (!IsAdditionalEquipment()) {
  550. utils.toast.show('저장 혹은 수정 반드시 필수 입력 정보를 모두 입력하셔야 합니다 (앞뒤공백 허용안함)', 'error');
  551. return;
  552. }
  553. }
  554. else {
  555. if (isDuplicated) {
  556. utils.toast.show('동일 정보가 존재합니다.', 'error');
  557. return;
  558. }
  559. }
  560. }
  561. var parameters = {
  562. SiteId: dataViewModel.SiteId(),
  563. IsAdditionalEquipment: IsAdditionalEquipment()
  564. };
  565. var postViewModel = new BemsWebApplication.FmsEquipmentExViewModel();
  566. if (!viewModel.isNewInPopup() || IsAdditionalEquipment()) {
  567. postViewModel.EquipmentId(dataViewModel.EquipmentId());
  568. }
  569. postViewModel.AddDate(dataViewModel.AddDate());
  570. postViewModel.UpdateDate(dataViewModel.UpdateDate());
  571. postViewModel.SiteId(dataViewModel.SiteId());
  572. postViewModel.Name(dataViewModel.Name());
  573. postViewModel.EquipmentTypeId(dataViewModel.EquipmentTypeId())
  574. postViewModel.WarehouseId(dataViewModel.WarehouseId());
  575. postViewModel.Unit(dataViewModel.Unit());
  576. postViewModel.Standard(dataViewModel.Standard());
  577. postViewModel.RegisterUserId(dataViewModel.RegisterUserId());
  578. postViewModel.SupplierName(dataViewModel.SupplierName());
  579. postViewModel.SupplierPhoneNo(dataViewModel.SupplierPhoneNo());
  580. postViewModel.TotalStockCount(dataViewModel.TotalStockCount());
  581. postViewModel.CurrentStockCount(dataViewModel.CurrentStockCount());
  582. postViewModel.StoredCount(dataViewModel.StoredCount());
  583. postViewModel.CurrentRentCount(dataViewModel.CurrentRentCount());
  584. postViewModel.ImageFileId(dataViewModel.ImageFileId());
  585. var postData = postViewModel.toJS();
  586. var url = viewModel.isNewInPopup() ? 'FmsEquipment/InsertFmsEquipment' : 'FmsEquipment/UpdateFmsEquipment';
  587. BWA.api.post(url, postData, parameters).done(//2019-11-11 변경
  588. function (responseKey, response) {
  589. viewModel.dataModel.EquipmentId(responseKey);
  590. if (viewModel.isNewInPopup() === false) {//추가, 변경 여부
  591. if (_.isNull(dropZone) === false) {
  592. if (viewModel.dataModel.ImageFileId() != null) { //변경 - 그림삭제
  593. var temp = {
  594. SiteId: BWA.UserInfo.SiteId(),
  595. FileId: viewModel.dataModel.ImageFileId()
  596. }
  597. BWA.db.CmFile.byKey(temp).done(function (data) {
  598. dropZone.removeFile(data);
  599. dropZone.processQueue();
  600. utils.toast.show($G('successDatabaseInsertionMsg'));
  601. equipEstimatePopupButtonClose();
  602. $('#gridContainer').dxDataGrid('instance').refresh();
  603. });
  604. }
  605. else {
  606. dropZone.processQueue();//변경 - 그림 삭제 필요없음
  607. utils.toast.show($G('successDatabaseInsertionMsg'));
  608. equipEstimatePopupButtonClose();
  609. $('#gridContainer').dxDataGrid('instance').refresh();
  610. }
  611. }
  612. else {
  613. utils.toast.show($G('successDatabaseInsertionMsg'));
  614. equipEstimatePopupButtonClose();
  615. $('#gridContainer').dxDataGrid('instance').refresh();
  616. }
  617. }
  618. else {
  619. if (_.isNull(dropZone) === false) { //추가
  620. if (viewModel.dataModel.ImageFileId() == null) {
  621. dropZone.processQueue();
  622. utils.toast.show($G('successDatabaseInsertionMsg'));
  623. equipEstimatePopupButtonClose();
  624. $('#gridContainer').dxDataGrid('instance').refresh();
  625. }
  626. }
  627. else {
  628. utils.toast.show($G('successDatabaseInsertionMsg'));
  629. equipEstimatePopupButtonClose();
  630. $('#gridContainer').dxDataGrid('instance').refresh();
  631. }
  632. }
  633. });
  634. }
  635. function switchChanged(e) {
  636. var dataViewModel = viewModel.dataModel;
  637. dataViewModel.Name(null);
  638. dataViewModel.EquipmentId(null);
  639. dataViewModel.EquipmentTypeId(null);
  640. dataViewModel.WarehouseId(null);
  641. dataViewModel.Unit(null);
  642. dataViewModel.Standard(null);
  643. dataViewModel.RegisterUserId(BWA.UserInfo.UserId());
  644. dataViewModel.SupplierName(null);
  645. dataViewModel.SupplierPhoneNo(null);
  646. dataViewModel.TotalStockCount(null);
  647. dataViewModel.CurrentStockCount(null);
  648. dataViewModel.StoredCount(1);
  649. dataViewModel.ImageFileId(null);
  650. imagefileUrl(undefined);
  651. if (_.isNull(dropZone) === false) {//2019-11-11 변경
  652. dropZone.destroy();
  653. $('#equipmentDropZone').empty();
  654. dropZone = null;
  655. }
  656. }
  657. function processValueChange(e) {
  658. var foundModel = _.find(equipmentExs(), function (x) {
  659. return x.EquipmentId() === e.value;
  660. });
  661. if (foundModel !== undefined) {
  662. var dataViewModel = viewModel.dataModel;
  663. dataViewModel.EquipmentId(foundModel.EquipmentId());
  664. dataViewModel.EquipmentTypeId(foundModel.EquipmentTypeId());
  665. dataViewModel.WarehouseId(foundModel.WarehouseId());
  666. dataViewModel.Unit(foundModel.Unit());
  667. dataViewModel.Standard(foundModel.Standard());
  668. dataViewModel.UpdateDate(new Date());
  669. dataViewModel.SupplierName(foundModel.SupplierName());
  670. dataViewModel.SupplierPhoneNo(foundModel.SupplierPhoneNo());
  671. dataViewModel.TotalStockCount(foundModel.TotalStockCount());
  672. dataViewModel.CurrentStockCount(foundModel.CurrentStockCount());
  673. dataViewModel.ImageFileId(foundModel.ImageFileId());
  674. getImageUrl();
  675. }
  676. }
  677. function getImageUrl() {
  678. if (_.isNull(viewModel.dataModel.ImageFileId()) === false) {
  679. imagefileUrl('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, viewModel.dataModel.SiteId(), viewModel.dataModel.ImageFileId()));
  680. }
  681. else {
  682. imagefileUrl("images/default.png");
  683. }
  684. }
  685. function getBackupDataViewModel(model) {
  686. var object = {};
  687. $.each(model, function (name, value) {
  688. if (ko.isObservable(value)) {
  689. object[name] = value();
  690. }
  691. });
  692. return object;
  693. }
  694. function restoreDataViewModelFromBackup(model, backupModel) {
  695. $.each(backupModel, function (name, value) {
  696. model[name](value);
  697. });
  698. }
  699. // 수정버튼 클릭
  700. function handlePopupButtonEdit() {
  701. viewModel.isNewInPopup(false);
  702. viewModel.visibleEditButton(false);
  703. viewModel.visibleDeleteButton(false);
  704. viewModel.visibleCancelButton(true);
  705. viewModel.isEditModeInPopup(true);
  706. viewModel.isNotModifyMode(false);
  707. backupDataViewModel = getBackupDataViewModel(viewModel.dataModel);
  708. }
  709. // 삭제버튼 클릭
  710. function handlePopupButtonDelete() {//2019-11-11 변경
  711. DevExpress.ui.dialog.confirm($G('deleteConfirmMsg'), "삭제").then(function (result) {
  712. if (result) {
  713. var postViewModel = new BemsWebApplication.FmsEquipmentExViewModel();
  714. var dataViewModel = viewModel.dataModel;
  715. postViewModel.EquipmentId(dataViewModel.EquipmentId());
  716. var postData = dataViewModel.toJS();
  717. var parameters = {
  718. SiteId: dataViewModel.SiteId()
  719. };
  720. if (viewModel.dataModel.ImageFileId() != null) {
  721. var temp = {
  722. SiteId: BWA.UserInfo.SiteId(),
  723. FileId: viewModel.dataModel.ImageFileId()
  724. }
  725. BWA.db.CmFile.byKey(temp).done(function (data) {
  726. if ($('#equipmentDropZone1').length) {
  727. if (_.isNull(dropZone)) {
  728. dropZone = BWA.DropZone.create({
  729. id: '#equipmentDropZone1',
  730. categoryId: $Code.FileCategory.EQUIPMENT
  731. });
  732. dropZone.removeFile(data);
  733. dropZone = null;
  734. }
  735. }
  736. });
  737. }
  738. BWA.api.post('FmsEquipment/FmsEquipmentDelete', postData, parameters).done(
  739. function () {
  740. EquipmentDataSource.load().done(function (result5) {
  741. Equipment(result5);
  742. utils.toast.show($G('successDatabaseDeleteMsg'));
  743. viewModel.IsAdditionalEquipment(false);
  744. viewModel.isNewInPopup(false);
  745. viewModel.visibleEditButton(false);
  746. viewModel.visibleDeleteButton(false);
  747. viewModel.visibleCancelButton(false);
  748. viewModel.isEditModeInPopup(false);
  749. viewModel.isNotModifyMode(false);
  750. viewModel.dataModel.ImageFileId(null);
  751. viewModel.popupVisible(false);
  752. viewModel.gridView().refresh();
  753. if (postData.EquipmentRentId != null) {
  754. BWA.db.FmsEquipmentRentInfo.remove({
  755. SiteId: postData.SiteId,
  756. EquipmentRentId: postData.EquipmentRentId
  757. }).done(function () {
  758. viewModel.gridView().refresh();
  759. });
  760. }
  761. else {
  762. viewModel.gridView().refresh();
  763. }
  764. });
  765. });
  766. }
  767. });
  768. }
  769. function EquipDownload() {
  770. var url = "";
  771. if (BemsWebApplication.config.mode == "production") {
  772. url = BemsWebApplication.config.endpoints.service.production + filePath;
  773. } else {
  774. url = BemsWebApplication.config.endpoints.service.local + filePath;
  775. }
  776. window.location.assign(url);
  777. }
  778. // 취소버튼
  779. function handlePopupButtonCancel() {
  780. viewModel.visibleEditButton(true);
  781. viewModel.visibleDeleteButton(true);
  782. viewModel.visibleCancelButton(false);
  783. viewModel.isEditModeInPopup(false);
  784. viewModel.isNotModifyMode(true);
  785. restoreDataViewModelFromBackup(viewModel.dataModel, backupDataViewModel);
  786. }
  787. // 닫기버튼
  788. function equipEstimatePopupButtonClose() {
  789. viewModel.IsAdditionalEquipment(false);
  790. viewModel.isNewInPopup(false);
  791. viewModel.visibleEditButton(false);
  792. viewModel.visibleDeleteButton(false);
  793. viewModel.visibleCancelButton(false);
  794. viewModel.isEditModeInPopup(false);
  795. viewModel.isNotModifyMode(false);
  796. viewModel.dataModel.ImageFileId(null);
  797. viewModel.popupVisible(false);
  798. }
  799. viewModel.EquipImport = EquipImport;
  800. viewModel.EquipDownload = EquipDownload;
  801. viewModel.equipPopupToolbarItems = equipPopupToolbarItems;
  802. viewModel.dataModel.Name = ko.observable();
  803. viewModel.dataModel.EquipmentTypeId = ko.observable();
  804. viewModel.dataModel.WarehouseId = ko.observable();
  805. viewModel.dataModel.Unit = ko.observable();
  806. viewModel.dataModel.Standard = ko.observable();
  807. viewModel.dataModel.SupplierName = ko.observable();
  808. viewModel.dataModel.SupplierPhoneNo = ko.observable();
  809. viewModel.dataModel.RegisterUserId = $KoSet(viewModel.dataModel.RegisterUserId, BWA.UserInfo.UserId());
  810. viewModel.dataModel.AddDate = $KoSet(viewModel.dataModel.AddDate, new Date());
  811. viewModel.dataModel.UpdateDate = $KoSet(viewModel.dataModel.UpdateDate, new Date());
  812. viewModel.dataModel.StoredCount(1);
  813. viewModel.dataModel.ImageFileId = ko.observable();
  814. viewModel.switchChanged = switchChanged;
  815. viewModel.processValueChange = processValueChange;
  816. viewModel.IsAdditionalEquipment = IsAdditionalEquipment;
  817. viewModel.equipmentExs = equipmentExs;
  818. viewModel.codeTypes = codeTypes;
  819. viewModel.codeStateTypes = codeStateTypes;
  820. viewModel.warehouses = warehouses;
  821. viewModel.imagefileUrl = imagefileUrl;
  822. viewModel.backupDataViewModel = backupDataViewModel;
  823. viewModel.visibleEditButton = visibleEditButton;
  824. viewModel.hasnotModificationPermission = hasnotModificationPermission;
  825. viewModel.visibleDeleteButton = visibleDeleteButton;
  826. viewModel.visibleCancelButton = visibleCancelButton;
  827. viewModel.isEditModeInPopup = isEditModeInPopup;
  828. viewModel.isNotModifyMode = isNotModifyMode;
  829. return viewModel;
  830. };