BemsWebApplication.ShortStockStatus2 = function (params, viewInfo) { "use strict"; var materialFactory = BemsWebApplication.Factory.Material; var imagefileUrl = ko.observable(); var materialClassForSearch = ko.observableArray(); var materialClass = ko.observableArray(); var searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()]; var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()]; var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()]; var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass'); var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter; var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true), materialClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass', true, true), materialTypeDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeType', true, true), tradeCompanyDataSource = BemsWebApplication.db.createDataSource('FmsMaterialTradeCompany', true, true), warehouseDataSource = BemsWebApplication.db.createDataSource('FmsMaterialWarehouse', true, true), locationDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeLocation', true, true); var materialClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()], businessFields = ko.observableArray(), materialTypes = ko.observableArray(), tradeCompanies = ko.observableArray(), warehouses = ko.observableArray(), locations = ko.observableArray(); var materialClassesForSearch = [ko.observableArray(), ko.observableArray(), ko.observableArray()], materialTypesForSearch = ko.observableArray(), materialClassValuesForSearch = [ko.observable(), ko.observable(), ko.observable()], businessFieldsForSearch = ko.observableArray(), materialTypeIdForSearch = ko.observable(), businessFieldIdForSearch = ko.observable(); var deferredForSearch = new $.Deferred(); var defaultSearchClassArray = $SearchView.createDefaultArray('MaterialClassId'); function initializeSearchClasses(onlyThird) { if (onlyThird === undefined || onlyThird === false) { searchFacilityClasses[1](defaultSearchClassArray.slice(0)); searchFacilityClassValues[1](0); } searchFacilityClasses[2](defaultSearchClassArray.slice(0)); searchFacilityClassValues[2](0); } var handleFirstClassChangedValueInSearchView = function (e) { if (e.value === 0) { initializeSearchClasses(); return; } BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[1], defaultSearchClassArray); }; var handleSecondClassChangedValueInSearchView = function (e) { if (searchFacilityClassValues[1]() == null) { initializeSearchClasses(); BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', 0, searchFacilityClasses[1], defaultSearchClassArray); } if (e.value === 0) { initializeSearchClasses(true); return; } BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray); }; var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsMaterial', { dataSourceOptions: { store: BemsWebApplication.odata.FmsMaterialEx, select: [ 'SiteId', 'BusinessFieldId', 'MaterialId', 'MaterialCode', 'Name', 'FirstClassId', 'SecondClassId', 'ThirdClassId', 'LocationId', 'MaterialTypeId', 'TradeCompanyId', 'WarehouseId', 'WHouseName', 'Rfid', 'Unit', 'DurableYears', 'ReasonableStockCount', 'Manufacturer', 'Standard', 'FinalPrice', 'ImageFileId', 'Note', 'IsDiscontinued', 'IsUse', 'FinalStockCount', 'FinalTotalStockAmount', 'StockCount', 'StockAmount', 'CmBusinessField/Name', 'NeedCount', 'FmsMaterialCodeType/Name', ], filter: [ ['SiteId', '=', BWA.UserInfo.SiteId()], and, ['NeedCount', '>', 0] ], expand: [ 'CmBusinessField', 'FmsMaterialCodeType', ], extendOptions: { forceOriginalField: true } }, columns: [ { dataField: 'MaterialId', caption: $G('number'), width: '10%', alignment: 'center', allowFiltering: false }, { dataField: 'CmBusinessField/Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center', }, { dataField: 'FirstClassId', width: '15%', 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: '15%', 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: '15%', 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: 'Name', caption: '자재명', width: '30%', alignment: 'center' }, { dataField: 'Standard', caption: '규격', width: '30%', alignment: 'center' }, { dataField: 'Unit', caption: '단위', width: '10%', alignment: 'center' }, { dataField: 'ReasonableStockCount', caption: '적정재고수량', width: '15%', alignment: 'center', format: 'fixedPoint' }, { dataField: 'StockCount', caption: '현재수량', width: '10%', alignment: 'center', format: 'fixedPoint' }, { caption: '부족수량', width: '10%', alignment: 'center', format: 'fixedPoint', calculateCellValue: function (data) { var currentNeedsCount = data.ReasonableStockCount() - data.StockCount(); if (currentNeedsCount > 0) { return currentNeedsCount; } else { return 0; } } }, ], paging: { pageSize: 18, enabled: true }, pager: {}, "export": { enabled: true, fileName: '과부족 재고 현황', }, onExporting: function (e) { e.component.columnOption("MaterialId", "visible", false); }, onExported: function (e) { e.component.columnOption("MaterialId", "visible", true); }, rowPrepared: function (rowElement, rowInfo) { }, wordWrapEnabled: true, searchViewItems: [ { id: 'MaterialCode' }, { id: 'Name' }, { id: 'Unit' }, { 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] }, ], promiseDataInSearchView: deferredForSearch.promise(), handleViewShowing: function () { 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())); }); materialClassDataSource.filter([ ['SiteId', '=', BWA.UserInfo.SiteId()], 'and', ['ParentMaterialClassId', '=', null], ]); var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName) if (useBusinessFiltering) { this.dataSourceOptions.filter.push('and'); this.dataSourceOptions.filter.push([eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)]); businessFieldDataSource.filter([ eq('SiteId', BWA.UserInfo.SiteId()), and, [eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()), 'or', eq('BusinessFieldId', 1)] ]); } $.when( businessFieldDataSource.load(), materialClassDataSource.load(), materialTypeDataSource.load(), tradeCompanyDataSource.load(), warehouseDataSource.load(), locationDataSource.load() ).done(function (dbBusinessFields, dbMaterialClasses, dbMaterialTypes, dbTradeCompanies, dbWarehouses, dbLocations) { dbBusinessFields = dbBusinessFields[0]; dbMaterialClasses = dbMaterialClasses[0]; dbMaterialTypes = dbMaterialTypes[0]; dbTradeCompanies = dbTradeCompanies[0]; dbWarehouses = dbWarehouses[0]; dbLocations = dbLocations[0]; materialClasses[0](dbMaterialClasses); materialClassesForSearch[0]($SearchView.createArrayOfSelectBox('MaterialClassId', dbMaterialClasses)); initializeSearchClasses(); businessFields(dbBusinessFields); materialTypes(dbMaterialTypes); tradeCompanies(dbTradeCompanies); warehouses(dbWarehouses); locations(dbLocations); businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', dbBusinessFields)); materialTypesForSearch($SearchView.createArrayOfSelectBox('MaterialTypeId', dbMaterialTypes)); deferredForSearch.resolve(); }); }, handleViewShown: function (dataViewModel, isEditModeInPopup) { }, handleSaveSuccess: function () { }, handleAfterLoadingModelByKey: function (data, dataViewModel, isNewInPopup) { if (isNewInPopup() == false) { BWA.DataUtil.setArrayDataSourceFilter(materialClassDataSource, 'ParentMaterialClassId', dataViewModel.FirstClassId(), materialClasses[1]).done(function () { BWA.DataUtil.setArrayDataSourceFilter(materialClassDataSource, 'ParentMaterialClassId', dataViewModel.SecondClassId(), materialClasses[2]); }); BWA.DataUtil.setArrayDataSourceFilter(warehouseDataSource, 'BusinessFieldId', dataViewModel.BusinessFieldId(), warehouses); if (_.isNull(dataViewModel.ImageFileId()) === false) { imagefileUrl('{0}/CmFile(SiteId={1},FileId={2})/$value'.formati(BWA.db._url, dataViewModel.SiteId(), dataViewModel.ImageFileId())); } else { imagefileUrl("images/default.png"); } } }, handlePopupShowing: function (isNewInPopup) { if (isNewInPopup() == false) { // 이전 이미지 잔상 문제로 인한 방어코드 // 이미지 경로 강제 초기화 imagefileUrl(undefined); } viewModel.toolbarItems[1].options.visible(false); viewModel.toolbarItems[2].options.visible(false); }, handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) { dataGrid.clearSelection(); viewModel.isNewInPopup(false); var data = clickRow.data; var dataModel = viewModel.dataModel; var firstClassname, secondClassname, thirdClassname, companyname; for (var i = 1; i < materialClassForSearch().length; i++) { if (materialClassForSearch()[i].MaterialClassId() == data.FirstClassId()) { firstClassname = materialClassForSearch()[i].Name(); break; } } for (var i = 1; i < materialClassForSearch().length; i++) { if (materialClassForSearch()[i].MaterialClassId() == data.SecondClassId()) { secondClassname = materialClassForSearch()[i].Name(); break; } } for (var i = 1; i < materialClassForSearch().length; i++) { if (materialClassForSearch()[i].MaterialClassId() == data.ThirdClassId()) { thirdClassname = materialClassForSearch()[i].Name(); break; } } dataModel.ClassName = $KoSet(dataModel.ClassName, materialFactory.formatClassName(firstClassname, secondClassname, thirdClassname)); dataModel.Note = $KoSet(dataModel.Note, data['Note']); dataModel.BusinessFieldName = $KoSet(dataModel.BusinessFieldName, data['CmBusinessField/Name']); dataModel.Name = $KoSet(dataModel.Name, data['Name']);//자재명 dataModel.Standard = $KoSet(dataModel.Standard, data['Standard']);// 규격 dataModel.Unit = $KoSet(dataModel.Unit, data['Unit']); //단위 dataModel.Rfid = $KoSet(dataModel.Rfid, data['Rfid']); dataModel.IsDiscontinued = $KoSet(dataModel.IsDiscontinued, data['IsDiscontinued']);//단종여부 dataModel.ReasonableStockCount = $KoSet(dataModel.ReasonableStockCount, data['ReasonableStockCount']);//적정재고량 dataModel.DurableYears = $KoSet(dataModel.DurableYears, data['DurableYears']); //내용연수 dataModel.FinalPrice = $KoSet(dataModel.FinalPrice, data['FinalPrice']); //단가 dataModel.MaterialTypeName = $KoSet(dataModel.MaterialTypeName, data['FmsMaterialCodeType/Name']); //자재구분 dataModel.IsUse(true); dataModel.Manufacturer = $KoSet(dataModel.Manufacturer, data['Manufacturer']); popupVisible(true); } }); viewModel.handleSelectBoxChangeBusinessField = function (e) { BWA.DataUtil.setArrayDataSourceFilter(warehouseDataSource, 'BusinessFieldId', e.value, warehouses); viewModel.dataModel.WarehouseId(null); } viewModel.handleSelectBoxChangeFirstClass = function (e) { BWA.DataUtil.setArrayDataSourceFilter(materialClassDataSource, 'ParentMaterialClassId', e.value, materialClasses[1]); viewModel.dataModel.SecondClassId(null); viewModel.dataModel.ThirdClassId(null); } viewModel.handleSelectBoxChangeSecondClass = function (e) { BWA.DataUtil.setArrayDataSourceFilter(materialClassDataSource, 'ParentMaterialClassId', e.value, materialClasses[2]); viewModel.dataModel.ThirdClassId(null); } viewModel.materialClasses = materialClasses; viewModel.materialTypes = materialTypes; viewModel.tradeCompanies = tradeCompanies; viewModel.warehouses = warehouses; viewModel.locations = locations; viewModel.businessFields = businessFields; // hcLee 2016 01 15 viewModel.dataModel.ClassName = ko.observable(); viewModel.dataModel.BusinessFieldName = ko.observable(); viewModel.dataModel.Note = ko.observable(); viewModel.dataModel.MaterialTypeName = ko.observable(); viewModel.dataModel.Standard = ko.observable();// 규격 viewModel.dataModel.Unit = ko.observable();//단위 viewModel.dataModel.DurableYears = ko.observable();//내뇽ㅇ연수 viewModel.dataModel.Rfid = ko.observable(); viewModel.dataModel.TradeCompanyName = ko.observable(); viewModel.dataModel.FinalPrice = ko.observable(); //단가 viewModel.dataModel.ReasonableStockCount = ko.observable(); //적정재고량 viewModel.dataModel.IsDiscontinued = ko.observable();//단종여부 viewModel.dataModel.IsUse = ko.observable();//사용여부 viewModel.imagefileUrl = imagefileUrl; // hcLee 2015 12 16 hcLee !!!!!! viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView; viewModel.handleSecondClassChangedValueInSearchView = handleSecondClassChangedValueInSearchView; return viewModel; };