$(function () { 'use strict'; BemsWebApplication.Popup.PurchaseOrderStatusByPurchaseRequest = { create: function (viewInfo, viewModel, forApprovalOptions) { var materials = ko.observableArray(); var materialFactory = BWA.Factory.Material, purchaseProgressCode = BWA.Code.PurchaseProgress, materialGridView, materialDataGridOptions = undefined; var materialsDataSource = materialFactory.getBasicDataSourceRef({ dbModeIId: 'FmsMaterialPurchaseRequestMaterial', primaryKeyDataField: 'PurchaseRequestId' }), materialsForPurchaseOrderDataSource = materialFactory.getBasicDataSourceRef({ dbModeIId: 'FmsMaterialPurchaseOrderMaterial', primaryKeyDataField: 'PurchaseOrderId', expand: ['FmsMaterialPurchaseOrder'], moreSelectFields: [ 'FmsMaterialPurchaseOrder/StoredDueDate', 'FmsMaterialPurchaseOrder/OrderDate', 'FmsMaterial/TradeCompanyId', 'FmsMaterial/FinalPrice' ] }); function handlePopupShowing(isNewInPopup, dataModel) { $("#gridContainer2").dxDataGrid({ paging: { pageSize: 12, enabled: true } }); var userInfo = BWA.UserInfo; if (isNewInPopup()) { var progressId = $Code.PurchaseProgress.PURCHASE_REQUEST; if (userInfo.isDependBusinessField(viewInfo.viewName)) { BWA.db.CmBusinessField.byKey({ SiteId: userInfo.SiteId(), BusinessFieldId: userInfo.BusinessFieldId() }).done(function (businessField) { dataModel.BusinessFieldName(businessField.Name); }); } dataModel.ProgressId(progressId); dataModel.ProgressName(purchaseProgressCode.getName(progressId)); dataModel.BusinessFieldId(userInfo.BusinessFieldId()); dataModel.RequestUserId(userInfo.UserId()); dataModel.RequesterName(userInfo.Name()); dataModel.RequestDate(new Date()); dataModel.PurchaseHopeDate(moment().add(1, 'd').toDate()); } } function handleDeleteSelectedMaterials() { } function handlePopupShown(editMode, isNew, dataViewModel) { } // 구매신청 정보가 저장된 후에 호출 된다. // 등록이면 responseKey가 있고, 수정이면 없다. function handleAfterSave(responseKey) { } function handleAfterLoadingModelByKey(data, dataViewModel) { if (dataViewModel.ProgressId() !== $Code.PurchaseProgress.PURCHASE_REQUEST) { viewModel.visibleEditButton(false); viewModel.visibleDeleteButton(false); } dataViewModel.ProgressName(purchaseProgressCode.getName(dataViewModel.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()) ]); materialsForPurchaseOrderDataSource.filter([ eq('SiteId', dataViewModel.SiteId()), and, eq('BusinessFieldId', dataViewModel.BusinessFieldId()), and, eq('FmsMaterialPurchaseOrder/PurchaseRequestId', dataViewModel.PurchaseRequestId()) ]); $.when( materialsDataSource.load(), materialsForPurchaseOrderDataSource.load()) .done(function (dbRequestMaterials, dbOrderMaterials) { dbRequestMaterials = dbRequestMaterials[0]; dbOrderMaterials = dbOrderMaterials[0]; var materialArray = []; _.each(dbRequestMaterials, function (requestMaterial) { var materialId = requestMaterial.MaterialId(); var material = BWA.DataUtil.convertViewModelToJS(requestMaterial); var orderMaterial = BWA.DataUtil.popFromArray(dbOrderMaterials, function (m) { return (m.MaterialId() === materialId); }); if (orderMaterial) { material.PurchaseOrderCount = orderMaterial.MaterialCount(); material.StoredDueDate = orderMaterial['FmsMaterialPurchaseOrder/StoredDueDate'](); material.OrderDate = orderMaterial['FmsMaterialPurchaseOrder/OrderDate'](); } materialArray.push(material); }); if (_.isEmpty(dbOrderMaterials) === false) { _.each(dbOrderMaterials, function (m) { // 같은 자재에 대해 발주가 여러개라면 더해준다. var dupOrderMaterial = _.find(materialArray, function (mm) { return mm.MaterialId === m.MaterialId(); }); if (dupOrderMaterial) { dupOrderMaterial.PurchaseOrderCount += m.MaterialCount(); return; } var material = BWA.DataUtil.convertViewModelToJS(m); material.PurchaseOrderCount = m.MaterialCount(); delete material.MaterialCount; material.StoredDueDate = m['FmsMaterialPurchaseOrder/StoredDueDate'](); material.OrderDate = m['FmsMaterialPurchaseOrder/OrderDate'](); materialArray.push(material); }); } materials(materialArray); }); } function handleBeforeShowingPopupForEdit(rowData, dataViewModel) { dataViewModel.BusinessFieldName = $KoSet(dataViewModel.BusinessFieldName, rowData['CmBusinessField/Name']); dataViewModel.RequesterName = $KoSet(dataViewModel.RequesterName, rowData['CmUser/Name']); dataViewModel.ApprovalUserName = $KoSet(dataViewModel.ApprovalUserName, rowData['CmUser1/Name']); dataViewModel.PurchaseTypeName = $KoSet(dataViewModel.PurchaseTypeName, rowData['FmsMaterialCodePurchaseType/Name']); } viewModel.popupVisible.subscribe(function (visible) { if (!visible) { materials([]); } }); viewModel.dataModel.BusinessFieldName = ko.observable(); viewModel.dataModel.ProgressName = ko.observable(); viewModel.dataModel.RequesterName = ko.observable(); viewModel.dataModel.PurchaseTypeName = ko.observable(); var materialColumns = materialFactory.getColumns([ { dataField: 'MaterialCode', width: '20%' }, { dataField: 'Name', width: '30%' }, { dataField: 'Standard', width: '30%', alignment: 'center', caption: '규격' }, { dataField: 'Unit', width: '15%', alignment: 'center', caption: '단위' } ]); materialDataGridOptions = utils.datagrid.defaultOptions({ width: 840, visible: viewModel.viewModeInPopup, pager: { showPageSizeSelector: false, allowedPageSizes: [] }, dataSource: materials, columns: materialColumns.concat([ { dataField: 'MaterialCount', width: '15%', alignment: 'center', caption: '구매신청수량', format: 'currency' }, { dataField: 'PurchaseOrderCount', width: '15%', alignment: 'center', caption: $G('purchaseOrderCount'), format: 'currency' }, { dataField: 'StoredDueDate', width: '15%', alignment: 'center', caption: $G('storedDueDate') }, ]), rowPrepared: function (rowElement, rowInfo) { if (rowInfo.rowType == 'data') { var data = rowInfo.data; if (data.MaterialCount !== data.PurchaseOrderCount) { rowElement.css('background-color', 'rgba(255,0,0,0.1)'); } } } }); return { materialDataGridOptions: materialDataGridOptions, handleAfterLoadingModelByKey: handleAfterLoadingModelByKey, handlePopupShowing: handlePopupShowing, handlePopupShown: handlePopupShown, handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit, }; } } });