$(function () { 'use strict'; BemsWebApplication.Popup.MaterialStored = { create: function (viewInfo, viewModel, forApprovalOptions) { var material = BWA.db.createDataSource('FmsMaterialStored', true, true), materials = ko.observableArray(), dataModelMaterial = new BWA.FmsMaterialViewModel(); var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter; var materialFactory = BWA.Factory.Material, purchaseProgressCode = BWA.Code.PurchaseProgress, materialGridView, materialDataGridOptions = undefined; var materialsDataSource = materialFactory.getBasicDataSourceRef({ dbModeIId: 'FmsMaterialPurchaseRequestMaterial', primaryKeyDataField: 'PurchaseRequestId' }), materialsForPurchaseRequestDataSource = materialFactory.getBasicDataSourceRef({ dbModeIId: 'FmsMaterialPurchaseRequestMaterial', primaryKeyDataField: 'PurchaseRequestId', moreSelectFields: [ 'FmsMaterial/Unit', 'FmsMaterial/Standard', 'FmsMaterial/TradeCompanyId', 'FmsMaterial/FinalPrice'] }); function loadMaterialsInPurchaseRequest(purchaseRequest) { materialsForPurchaseRequestDataSource.filter([ eq('SiteId', purchaseRequest.SiteId), and, eq('BusinessFieldId', purchaseRequest.BusinessFieldId), and, eq('PurchaseRequestId', purchaseRequest.PurchaseRequestId) ]); // 선택된 구매요청에 대한 자재들을 로드한다. var promise = materialsForPurchaseRequestDataSource.load(); promise.then(function (dbMaterials) { var companies = []; materials(_.map(dbMaterials, function (m) { m.Unit = m['FmsMaterial/Unit']; m.Standard = m['FmsMaterial/Standard']; m.UnitCost = m['FmsMaterial/FinalPrice']; if (m.UnitCost() === null) { m.UnitCost(0); } return m; })); }); } // 구매신청 정보가 저장된 후에 호출 된다. // 등록이면 responseKey가 있고, 수정이면 없다. function handleAfterSave(responseKey, response) { BWA.db.FmsMaterialPurchaseRequest.update({ SiteId: response.SiteId, BusinessFieldId: response.BusinessFieldId, PurchaseRequestId: response.PurchaseRequestId }, { ProgressId: $Code.PurchaseProgress.MATERIAL_STORED }); } function handlePopupShowing(isNewInPopup, dataModel) { var userInfo = BWA.UserInfo; if (isNewInPopup()) { var progressId = $Code.PurchaseProgress.MATERIAL_STORED; dataModel.ProgressName(purchaseProgressCode.getName(progressId)); dataModel.BusinessFieldId(userInfo.BusinessFieldId()); dataModel.StoredUserId(userInfo.UserId()); dataModel.StoredUserName(userInfo.Name()); dataModel.StoredDate(new Date()); } } function handlePopupShown(isEditMode, isNew, dataViewModel) { var warehouses = viewModel.warehouses(); if (!_.isEmpty(warehouses)) { dataViewModel.WarehouseId(warehouses[0].WarehouseId()); } if (isEditMode) { if (isNew) { dataViewModel.IsApproval(false); } var userInfo = BWA.UserInfo; dataViewModel.BusinessFieldId(userInfo.BusinessFieldId()); dataViewModel.BusinessFieldName(userInfo.BusinessFieldName()); } } function handleAfterLoadingModelByKey(data, dataViewModel) { var progressId = dataViewModel.ProgressId(); if (progressId !== $Code.PurchaseProgress.MATERIAL_STORED) { viewModel.visibleEditButton(false); viewModel.visibleDeleteButton(false); } dataViewModel.ProgressName(purchaseProgressCode.getName(progressId)); var eq = BWA.DataUtil.constructEqualFilter; var and = BWA.DataUtil.andFilter; materialsDataSource.filter([ eq('SiteId', dataViewModel.SiteId()), and, eq('BusinessFieldId', dataViewModel.BusinessFieldId()), and, eq('PurchaseRequestId', dataViewModel.PurchaseRequestId()) ]); materialsDataSource.load().done(function (dbMaterials) { materials(dbMaterials); }); } function handleBeforeShowingPopupForEdit(rowData, dataViewModel) { dataViewModel.BusinessFieldName = $KoSet(dataViewModel.BusinessFieldName, rowData['CmBusinessField/Name']); dataViewModel.StoredUserName = $KoSet(dataViewModel.StoredUserName, rowData['CmUser/Name']); dataViewModel.PurchaseRequestTitle = $KoSet(dataViewModel.PurchaseRequestTitle, rowData['FmsMaterialPurchaseRequest/Title']); dataViewModel.ApprovalUserName = $KoSet(dataViewModel.ApprovalUserName, rowData['CmUser1/Name']); dataViewModel.WarehouseName = $KoSet(dataViewModel.WarehouseName, rowData['FmsMaterialWarehouse/Name']); dataViewModel.ProgressId = $KoSet(dataViewModel.ProgressId, rowData['FmsMaterialPurchaseRequest/ProgressId']); dataViewModel.ProgressName = $KoSet(dataViewModel.ProgressName, rowData['FmsMaterialPurchaseRequest/FmsMaterialCodeProgress/Name']); dataModelMaterial.Name(rowData['FmsMaterial/Name']()); dataModelMaterial.Unit(rowData['FmsMaterial/Unit']()); dataModelMaterial.Standard(rowData['FmsMaterial/Standard']()); } function handleButtonSearchPurchaseRequest() { viewModel.purchaseRequestSearchPopup.show(); } function handleButtonSearchMaterial() { viewModel.materialSearchPopup.show(); } viewModel.popupVisible.subscribe(function (visible) { if (!visible) { materials([]); } }); viewModel.dataModel.StoredCount.subscribe(function (count) { viewModel.dataModel.StockCount(count); }); viewModel.dataModel.PurchaseRequestTitle = ko.observable(); viewModel.dataModel.BusinessFieldName = ko.observable(); viewModel.dataModel.ProgressName = ko.observable(); viewModel.dataModel.StoredUserName = ko.observable(); viewModel.dataModel.WarehouseName = ko.observable(); materialDataGridOptions = utils.datagrid.defaultOptions({ width: 650, visible: true, pager: { showPageSizeSelector: false, allowedPageSizes: [] }, dataSource: materials, columns: materialFactory.getColumns([ { dataField: 'MaterialCode', width: '35%' }, { dataField: 'Name', width: '40%' }, { dataField: 'MaterialCount', width: '15%', alignment: 'center', caption: $G('materialCount') }, { dataField: 'UnitCost', width: '20%', alignment: 'center', caption: $G('unitCost') } ]), contentReadyAction: function (e) { materialGridView = e.component; }, rowPrepared: function (rowElement, rowInfo) { var data = rowInfo.data; if (data.MaterialId() === viewModel.dataModel.MaterialId()) { var color; if (data.MaterialCount() === viewModel.dataModel.StoredCount()) { color = 'rgba(0,255,0,0.1)'; } else { color = 'rgba(255,0,0,0.1)'; } rowElement.css('background-color', color); } }, rowClick: function (clickRow) { var data = clickRow.data; if (viewModel.isEditModeInPopup()) { dataModelMaterial.MaterialId(data.MaterialId()); dataModelMaterial.Name(data.Name()); dataModelMaterial.Unit(data.Unit()); dataModelMaterial.Standard(data.Standard()); viewModel.dataModel.MaterialId(data.MaterialId()); viewModel.dataModel.StoredCount(data.MaterialCount()); viewModel.dataModel.UnitCost(data.UnitCost()); } } }); if (_.isObject(forApprovalOptions) === false) { viewModel.materialSearchPopup = BWA.Popup.Material.create(viewModel, { isMultipleSelect: false, onSelectedMaterials: function (selectedMaterial) { var purchaseRequestId = viewModel.dataModel.PurchaseRequestId(); var dm = viewModel.dataModel; var m = selectedMaterial[0]; viewModel.dataModel.MaterialId(m.MaterialId); viewModel.dataModel.UnitCost(m.FinalPrice); dataModelMaterial.fromJS(m); materialGridView.refresh(); } }); viewModel.purchaseRequestSearchPopup = BWA.Popup.PurchaseRequestSearch.create(viewModel, { filter: [ eq('SiteId', BWA.UserInfo.SiteId()), and, [ // 구매요청에서 자재입고 승인 전까지 입고가 가능하다. ['ProgressId', '>=', $Code.PurchaseProgress.PURCHASE_REQUEST_APPROVAL], and, ['ProgressId', '<', $Code.PurchaseProgress.MATERIAL_STORED_APPROVAL] ] ], onSelectedPurchaseRequest: function (purchaseRequest) { var purchaseRequestId = purchaseRequest.PurchaseRequestId; loadMaterialsInPurchaseRequest(purchaseRequest); viewModel.dataModel.PurchaseRequestId(purchaseRequest.PurchaseRequestId); viewModel.dataModel.PurchaseRequestTitle(purchaseRequest.Title); } }); } return { dataModelMaterial: dataModelMaterial, materialDataGridOptions: materialDataGridOptions, handleAfterLoadingModelByKey: handleAfterLoadingModelByKey, handleAfterSave: handleAfterSave, handlePopupShowing: handlePopupShowing, handlePopupShown: handlePopupShown, handleButtonSearchPurchaseRequest: handleButtonSearchPurchaseRequest, handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit, handleButtonSearchMaterial: handleButtonSearchMaterial, }; } } });