$(function () { 'use strict'; var materialClassForSearch = ko.observableArray(); var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass'); var UserGroupDataSource = BemsWebApplication.db.createDataSource('CmUserGroupPermission'); var first = true; var defaultSearchClassArray = $SearchView.createDefaultArray('MaterialClassId'); var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()]; var searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()]; var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()]; BWA.Popup.Material = BWA.Popup.Material || {}; BWA.Popup.Material.create = function (viewModel, options) { options = options || {}; options.datagridId = options.datagridId || 'materialDataGridForSearch'; var onSelectedMaterials = options.onSelectedMaterials, isMultipleSelect = options.isMultipleSelect; //var dataViewModel = new BemsWebApplication.FmsMaterialViewModel(), var dataViewModel = new BemsWebApplication.FmsMaterialExViewModel(), initialized = false, gridView, popupVisible = ko.observable(false), materialFactory = BemsWebApplication.Factory.Material; //var dataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: materialFactory.getDataSourceForDataGrid() }, 'FmsMaterial'); var MenuPermission; var dataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: { store: BemsWebApplication.odata.FmsMaterialEx, select: [ 'SiteId', 'BusinessFieldId', 'MaterialId', 'MaterialCode', 'Name', 'FirstClassId', 'SecondClassId', 'ThirdClassId', 'LocationId', 'MaterialTypeId', 'TradeCompanyId', 'WarehouseId', 'Rfid', 'Unit', 'DurableYears', 'ReasonableStockCount', 'Manufacturer', 'Standard', 'FinalPrice', 'ImageFileId', 'Note', 'IsDiscontinued', 'IsUse', 'FinalStockCount', 'FinalTotalStockAmount', 'StockCount', 'StockAmount', ], }, }); var materialClass = ko.observableArray(); var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter; var userInfo = BWA.UserInfo; //자재 검색시 나타나는 팝업은 공통 및 자신이 포함된 비즈니스 영역만 해당됨 for (var i = 0; i < BWA.UserInfo.MenuPermissions().length; i++) { if (BWA.UserInfo.MenuPermissions()[i].MenuId == 'PurchaseRequest') { MenuPermission = BWA.UserInfo.MenuPermissions()[i].MenuPermission; break; } } if (MenuPermission >= 4) { dataSource.filter([ eq('SiteId', userInfo.SiteId()), and, [ eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1) ] ]); } else { dataSource.filter([ eq('SiteId', userInfo.SiteId()) ]); } var dataGridOptions = utils.datagrid.defaultOptions({ dxDataSource: dataSource, selectedSourceItem: dataViewModel, //datagridId: options.datagridId, //dbId: 'FmsMaterialEx', handleDataGridRowClick: function () { }, //columns: materialFactory.getColumns([ // //{ dataField: 'ClassName', width: '25%' }, // { dataField: 'MaterialCode', width: '30%' }, // { dataField: 'Name', width: '55%' }, // //{ dataField: 'StockCount', width: '15%' , caption: '재고수량', alignment: 'center'} //]), columns: [ //{ dataField: 'ClassName', width: '25%' }, { dataField: 'MaterialCode', width: '30%', caption: '자재코드', alignment: 'center', visible: false }, { dataField: 'FirstClassId', width: '19%', caption: '자재(대)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < materialClassForSearch().length; i++) { if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) { return materialClassForSearch()[i].Name(); } } } }, { dataField: 'SecondClassId', width: '19%', caption: '자재(중)', alignment: 'center', customizeText: function (cellInfo) { for (var i = 1; i < materialClassForSearch().length; i++) { if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) { return materialClassForSearch()[i].Name(); } } } }, { dataField: 'ThirdClassId', width: '19%', caption: '자재(소)', alignment: 'center', customizeText: function (cellInfo) { if (cellInfo.value == null) { return; } else { for (var i = 1; i < materialClassForSearch().length; i++) { if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) { return materialClassForSearch()[i].Name(); } } } } }, { dataField: 'Name', width: '35%', caption: '자재명', alignment: 'center' }, { dataField: 'Standard', width: '35%', caption: '규격', alignment: 'center' }, { dataField: 'Unit', width: '15%', caption: '단위', alignment: 'center' }, { dataField: 'StockCount', width: '15%', caption: '재고수량', alignment: 'center', format: 'currency' } ], paging: { pageSize: 15, enabled: false }, wordWrapEnabled: true, cellPrepared: BemsWebApplication.Factory.Material.cellPrepared }); if (isMultipleSelect) { dataGridOptions.selection = { mode: 'multiple', allowSelectAll: true }; dataGridOptions.handleDataGridRowClick = function () { }; } else { dataGridOptions.handleDataGridRowClick = function (id, dataGrid, clickRow) { var data = clickRow.data; if (!_.isUndefined(onSelectedMaterials)) { onSelectedMaterials([BWA.DataUtil.convertViewModelToJS(data)]); //{ // SiteId: data.SiteId(), // BusinessFieldId: data.BusinessFieldId(), // MaterialId: data.MaterialId(), // MaterialCode: data.MaterialCode(), // FinalPrice: data.FinalPrice(), // TradeCompanyId: _.isUndefined(data.TradeCompanyId) ? undefined : data.TradeCompanyId(), // 'FmsMaterialTradeCompany/Name': data['FmsMaterialTradeCompany/Name'], // Name: data.Name() //}]); } // TODO : 어기서 데이터가 전체선택시와 단일선택시 어찌 바뀌는가... popupVisible(false); } } function handlePopupShowing() { MaterialCodeClassDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()] ]); $.when( MaterialCodeClassDataSource.load() ).done(function (Result) { materialClass = ko.observableArray(); var cnt = 0; for (var i = 0; i < Result.length; i++) { materialClass.push(Result[i]); if (Result[i].Depth() == 0) { if (cnt == 0) { searchFacilityClasses[0](defaultSearchClassArray.slice(0).concat(Result[i])); cnt++; } else { searchFacilityClasses[0].push(Result[i]); } } } facilityClasses[0](Result[0]); materialClassForSearch($SearchView.createArrayOfSelectBox('MaterialClassId', materialClass())); }); } function handlePopupShown() { if (initialized === false) { gridView = $('#materialDataGridForSearch').dxDataGrid('instance'); $("#materialDataGridForSearch").dxDataGrid({ paging: { pageSize: 14, enabled: false } }); initialized = true; } gridView.clearSelection(); gridView.refresh(); searchView.show(); } function handlePopupButtonSelect() { var array = utils.datagrid.getSelectedRowsData(options.datagridId); if (!_.isUndefined(onSelectedMaterials)) { onSelectedMaterials(array); } popupVisible(false); } viewModel.handleSelectBoxChangeFirstClass = function (e) { BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, facilityClasses[1]); viewModel.dataModel.SecondClassId(null); viewModel.dataModel.ThirdClassId(null); }; viewModel.handleSelectBoxChangeSecondClass = function (e) { BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, facilityClasses[2]); viewModel.dataModel.ThirdClassId(null); }; var handleFirstClassChangedValueInSearchView = function (e) { if (first == true && e.value == null) { e.value = 0; first = false; searchFacilityClassValues[0](0); } if (e.value === 0) { initializeSearchClasses(); return; } BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray); }; var handleSecondClassChangedValueInSearchView = function (e) { if (e.value === 0) { initializeSearchClasses(true); return; } BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray); }; function initializeSearchClasses(onlyThird) { if (onlyThird === undefined || onlyThird === false) { searchFacilityClasses[1](defaultSearchClassArray.slice(0)); searchFacilityClassValues[1](0); } searchFacilityClasses[2](defaultSearchClassArray.slice(0)); searchFacilityClassValues[2](0); } function handlePopupButtonClose() { popupVisible(false); } var toolbarItems = [ { location: 'before', text: '자재 선택' }, { location: 'after', widget: 'button', options: { text: $G('select'), icon: 'save', visible: isMultipleSelect, clickAction: handlePopupButtonSelect } }, { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } } ]; var popupOptions = { width: '850px', height: '600px', visible: popupVisible, closeOnOutsideClick: true, showingAction: handlePopupShowing, shownAction: handlePopupShown, animation: window.utils.popup.createAnimation() }; var searchView = BWA.Popup.SearchView.create({ parentPopupId: 'popupSearchMaterial', parentPopupVisible: popupVisible, searchItems: [ { id: 'MaterialCode' }, { id: 'Name' },// { id: 'Standard' }, { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView }, { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView }, { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] }, ], handleInitializeUpdate: function () { }, handleSearch: function (filter, searchItems) { if (MenuPermission >= 4) { filter = [ eq('SiteId', userInfo.SiteId()), and, [ eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1) ] ].concat(filter) } else { filter = [ eq('SiteId', userInfo.SiteId()) ].concat(filter) } gridView.filter(filter); } }); viewModel.handleSecondClassChangedValueInSearchView = handleSecondClassChangedValueInSearchView; viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView; viewModel.facilityClasses = facilityClasses; viewModel.searchItems = searchView.searchItems; return { dataModel: dataViewModel, dataSource: dataSource, popupOptions: popupOptions, toolbarItems: toolbarItems, dataGridOptions: dataGridOptions, searchView: searchView, show: function () { popupVisible(true); } }; }; });