BemsWebApplication.PurchaseOrder = function (params, viewInfo) { 'use strict'; var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true), materialDataSource = BemsWebApplication.db.createDataSource('FmsMaterial', true, true), progressDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeProgress'), businessFields = ko.observableArray(); var popup; var deferredForSearch = new $.Deferred(); var businessFieldsForSearch = ko.observableArray(), progressesForSearch = ko.observableArray(); var eq = BWA.DataUtil.constructEqualFilter; var and = BWA.DataUtil.andFilter; var dataSourceOptions = { select: [ 'SiteId', 'BusinessFieldId', 'PurchaseOrderId', 'Title', 'OrderDate', 'StoredDueDate', 'CmFile/Name', 'FmsMaterialTradeCompany/Name', 'FmsMaterialPurchaseRequest/Title', 'FmsMaterialPurchaseRequest/Reason', 'FmsMaterialPurchaseRequest/FmsMaterialCodeProgress/Name', 'CmBusinessField/Name', 'CmUser/Name' ], filter: [ eq('SiteId', BWA.UserInfo.SiteId()), and, [ eq('FmsMaterialPurchaseRequest/ProgressId', $Code.PurchaseProgress.PURCHASE_REQUEST_APPROVAL), 'or', eq('FmsMaterialPurchaseRequest/ProgressId', $Code.PurchaseProgress.PURCHASE_ORDER_REQUEST) ] ], expand: [ 'CmUser', 'FmsMaterialTradeCompany', 'CmFile', 'FmsMaterialPurchaseRequest', 'CmBusinessField', 'FmsMaterialPurchaseRequest/FmsMaterialCodeProgress', 'FmsMaterialPurchaseOrderMaterial/FmsMaterial' ], extendOptions: { forceOriginalField: true } } var viewModel; var viewOptions = { popupWidth: 1450, dataSourceOptions: dataSourceOptions, columns: [ { dataField: 'PurchaseOrderId', caption: $G('number'), width: '10%', alignment: 'center' }, { dataField: 'CmBusinessField/Name', caption: $G('businessField'), width: '10%', alignment: 'center' }, { dataField: 'FmsMaterialPurchaseRequest/FmsMaterialCodeProgress/Name', caption: $G('progressStatus'), width: '10%', alignment: 'center' }, { dataField: 'Title', caption: $G('purchaseOrderTitle'), width: '40%', alignment: 'center' }, { dataField: 'CmUser/Name', caption: $G('purchaseOrdererName'), width: '10%', alignment: 'center' }, { dataField: 'OrderDate', caption: $G('purchaseOrderDate'), width: '15%', alignment: 'center', sortOrder: 'desc', dataType: "shortDate", format: "yyyy-MM-dd", customizeText: function (cellInfo) { return cellInfo.valueText; } }, { dataField: 'StoredDueDate', caption: $G('storedDueDate'), width: '15%', alignment: 'center', dataType: "shortDate", format: "yyyy-MM-dd", customizeText: function (cellInfo) { return cellInfo.valueText; } } ], paging: { pageSize: 18, enabled: true }, pager: {}, "export": { enabled: true, fileName: '발주 신청 목록', }, onExporting: function (e) { e.component.columnOption("PurchaseOrderId", "visible", false); }, onExported: function (e) { e.component.columnOption("PurchaseOrderId", "visible", true); }, promiseDataInSearchView: deferredForSearch.promise(), searchViewItems: [ { id: 'BusinessFieldId', ignoreValue: 0, defaultValue: 0, dataSource: businessFieldsForSearch }, { id: 'OrderDate', type: 'dateRange', isOnlyDate: true }, { id: 'Title' }, { id: 'CmUser/Name' }, //{ id: 'FmsMaterialTradeCompany/Name' }, { id: 'FmsMaterial/Name', filterFormatString: 'FmsMaterialPurchaseOrderMaterial/any(c: substringof(\'{0}\', c/FmsMaterial/Name))', type: 'formatting' }, //{ id: 'FmsMaterial/Name'}, { id: 'FmsMaterialPurchaseRequest/ProgressId', ignoreValue: 0, defaultValue: 0, dataSource: progressesForSearch } ], handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); var data = clickRow.data; var dataModel = viewModel.dataModel; popup.handleBeforeShowingPopupForEdit(data, dataModel); popupVisible(true); }, handleAfterLoadingModelByKey: function (data, dataViewModel) { popup.handleAfterLoadingModelByKey(data, dataViewModel); }, handlePopupShowing: function (isNewInPopup, dataViewModel) { popup.handlePopupShowing(isNewInPopup, dataViewModel); }, handleSaveInPopup: function () { if (_.isEmpty(viewModel.popup.materials())) { utils.toast.show('선택된 발주등록 자재가 없습니다.', 'error'); return false; } if ($G.date(viewModel.dataModel.StoredDueDate()) < $G.date(viewModel.dataModel.OrderDate())) { utils.toast.show('입고예정일은 발주일 이후로 설정하시기 바랍니다.', 'error'); return; } if (_.isEmpty(viewModel.dataModel.PurchaseRequestTitle())) { utils.toast.show('선택된 구매요청 제목이 없습니다.', 'error'); return; } BWA.db.FmsMaterialPurchaseOrder.insert(viewModel.dataModel.toJS()).done(function (response, responseKey) { if (popup && popup.handleAfterSave) { popup.handleAfterSave(response, responseKey); } }); }, beforeUpdateDataViewModel: function () { if (_.isEmpty(viewModel.popup.materials())) { utils.toast.show('선택된 발주등록 자재가 없습니다.', 'error'); return 0; } if ($G.date(viewModel.dataModel.StoredDueDate()) < $G.date(viewModel.dataModel.OrderDate())) { utils.toast.show('입고예정일은 발주일 이후로 설정하시기 바랍니다.', 'error'); return 0; } var keys = BWA.db.extractKeysObject('FmsMaterialPurchaseOrder', viewModel.dataModel); BWA.db.FmsMaterialPurchaseOrder.update(keys, viewModel.dataModel.toJS()).done(function (response, responseKey) { if (popup && popup.handleAfterSave) { popup.handleAfterSave(response, responseKey); } }); return 1; }, handleAfterSaveInPopup: function (responseKey, response) { popup.handleAfterSave(responseKey, response); }, handlePopupShown: function (editMode, isNew, dataViewModel) { popup.handlePopupShown(editMode, isNew, dataViewModel); }, handleViewShowing: function (dataModel) { var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName) this.dataSourceOptions.filter.splice(0, this.dataSourceOptions.filter.length); this.dataSourceOptions.filter.push([eq('SiteId', BWA.UserInfo.SiteId())]); if (useBusinessFiltering) { this.dataSourceOptions.filter.push('and'); this.dataSourceOptions.filter.push([eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId())]); businessFieldDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), 'and', ['BusinessFieldId', '=', BWA.UserInfo.BusinessFieldId()], ]); } else { this.dataSourceOptions.filter.push('and'); this.dataSourceOptions.filter.push(['BusinessFieldId', '<>', 1]); businessFieldDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), 'and', ['BusinessFieldId', '<>', 1] ]); } $.when( businessFieldDataSource.load(), progressDataSource.load()) .done(function (dbBusinessField, dbProgresses) { dbBusinessField = dbBusinessField[0]; dbProgresses = dbProgresses[0]; businessFields(dbBusinessField); businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', dbBusinessField)); progressesForSearch($SearchView.createArrayOfSelectBox('ProgressId', dbProgresses)); deferredForSearch.resolve(); }); }, handleViewShown: function (dataViewModel, isEditModeInPopup) { popup.handleViewShown(dataViewModel, isEditModeInPopup); }, handleSaveSuccess: function () { popup.handleSaveSuccess(); }, isValidateWithFunction: function (errorMessage) { return popup.isValidateWithFunction(errorMessage); }, mandatoryFields: [ { dataField: 'BusinessFieldId', name: $G('businessField') }, { dataField: 'Title', name: $G('requestTitle') } ], getAddedToolbarItemsInPopup: function (e) { var isEditModeInPopup = e.isEditModeInPopup, isNewInPopup = e.isNewInPopup; return [{ location: 'after', widget: 'button', options: { text: $G('materialInsertion'), icon: 'search', visible: isNewInPopup, //isEditModeInPopup, clickAction: function () { viewModel.materialSearchPopup.show(); } } }, { location: 'after', widget: 'button', options: { text: $G('materialDeletion'), icon: 'remove', type: 'danger', visible: isNewInPopup,//isEditModeInPopup, clickAction: function () { popup.handleDeleteSelectedMaterials(); } } }]; } }; viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsMaterialPurchaseOrder', viewOptions); viewModel.businessFields = businessFields; popup = viewModel.popup = BWA.Popup.PurchaseOrder.create(viewInfo, viewModel); return viewModel; };