123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523 |
- $(function () {
- 'use strict';
- var materialClassForSearch = ko.observableArray();
- var materialClass = ko.observableArray();
- var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass');
- BemsWebApplication.Popup.PurchaseOrder = {
- create: function (viewInfo, viewModel, forApprovalOptions) {
- var tradeCompanies = ko.observableArray(),
- materials = ko.observableArray(),
- materialsInView = ko.observableArray(),
- materialsInPurchaseRequest = ko.observableArray(),
- businessFields = ko.observableArray();
- var materialFactory = BWA.Factory.Material,
- purchaseProgressCode = BWA.Code.PurchaseProgress,
- materialGridView,
- uploadedFileInfo = {},
- materialDataGridOptions,
- modifiableMaterialDataGridOptions = undefined,
- purchaseOrderFileUrl = ko.observable(),
- initialized = false;
- var materialsDataSource = materialFactory.getBasicDataSourceRef({
- dbModeIId: 'FmsMaterialPurchaseOrderMaterial',
- primaryKeyDataField: 'PurchaseOrderId',
- moreSelectFields: ['UnitCost']
- }),
- materialsForPurchaseRequestDataSource = materialFactory.getBasicDataSourceRef({
- dbModeIId: 'FmsMaterialPurchaseRequestMaterial',
- primaryKeyDataField: 'PurchaseRequestId',
- moreSelectFields: [
- 'FmsMaterial/TradeCompanyId',
- 'FmsMaterial/FinalPrice']
- });
- var eq = BWA.DataUtil.constructEqualFilter,
- and = BWA.DataUtil.andFilter;
- function isValidateWithFunction(errorMessage) {
- if (_.isEmpty(materials())) {
- errorMessage.message = '발주 요청한 자재가 없습니다.';
- return false;
- }
- return true;
- }
- function handlePopupShowing(isNewInPopup, dataModel) {
- $("#gridContainer2").dxDataGrid({
- paging: {
- pageSize: 13,
- enabled: true
- }
- });
- $("#gridContainer3").dxDataGrid({
- paging: {
- pageSize: 13,
- enabled: true
- }
- });
- 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]);
- }
- materialClassForSearch($SearchView.createArrayOfSelectBox('MaterialClassId', materialClass()));
- });
- var userInfo = BWA.UserInfo;
- if (isNewInPopup()) {
- var progressId = $Code.PurchaseProgress.PURCHASE_ORDER;
- if (userInfo.isDependBusinessField(viewInfo.viewName)) {
- BWA.db.CmBusinessField.byKey({
- SiteId: userInfo.SiteId(),
- BusinessFieldId: userInfo.BusinessFieldId()
- }).done(function (businessField) {
- dataModel.BusinessFieldName(businessField.Name);
- });
- }
- dataModel.BusinessFieldId(userInfo.BusinessFieldId());
- dataModel.OrderUserId(userInfo.UserId());
- dataModel.OrdererName(userInfo.Name());
- dataModel.OrderDate(new Date());
- dataModel.StoredDueDate(moment().add(1, 'd').toDate());
- }
- }
- function handleDeleteSelectedMaterials() {
- var rows = materialGridView.getSelectedRowsData();
- if (_.isEmpty(rows)) {
- utils.toast.show('선택된 자재가 없습니다.', 'error');
- return;
- }
- _.each(rows, function (row) {
- var array = materials();
- var length = array.length;
- var id = (typeof (row.MaterialId) == "function" ? row.MaterialId() : row.MaterialId);
- for (var i = 0 ; i < length ; i++) {
- if (id === (typeof (array[i].MaterialId) == "function" ? array[i].MaterialId() : array[i].MaterialId)) {
- materials().splice(i, 1);
- break;
- }
- }
- });
- materialGridView.refresh();
- }
- function handleViewShown(dataViewModel, isEditModeInPopup) {
- if (initialized === false) {
- }
- }
- function handleSaveSuccess() {
- }
- function handlePopupShown(isEditMode, isNew, dataViewModel) {
- }
- // 구매신청 정보가 저장된 후에 호출 된다.
- // 등록이면 responseKey가 있고, 수정이면 없다.
- function handleAfterSave(response, responseKey) {
- var array = materials();
- if (_.isEmpty(array)) {
- return;
- }
- var siteId, purchaseOrderId, purchaseRequestId, businessFieldId;
- if (_.isUndefined(responseKey)) {
- var dataModel = viewModel.dataModel;
- siteId = dataModel.SiteId();
- businessFieldId = dataModel.BusinessFieldId();
- purchaseOrderId = dataModel.PurchaseOrderId();
- purchaseRequestId = dataModel.PurchaseRequestId();
- }
- else {
- siteId = responseKey.SiteId;
- businessFieldId = viewModel.dataModel.BusinessFieldId();
- //hcLee 2016 01 05 아래 위 변경
- purchaseOrderId = responseKey.PurchaseOrderId;
- purchaseRequestId = viewModel.dataModel.PurchaseRequestId();
- }
- var parameters = {
- SiteId: siteId,
- BusinessFieldId: businessFieldId,
- PurchaseOrderId: purchaseOrderId,
- PurchaseRequestId: purchaseRequestId
- };
- var postData = _.map(array, function (m) {
- return {
- SiteId: siteId,
- BusinessFieldId: businessFieldId,
- PurchaseOrderId: purchaseOrderId,
- MaterialId: (typeof (m.MaterialId) == "function" ? m.MaterialId() : m.MaterialId),
- MaterialCount: (typeof (m.MaterialCount) == "function" ? m.MaterialCount() : m.MaterialCount),
- UnitCost: (typeof (m.UnitCost) == "function" ? m.UnitCost() : m.UnitCost)
- };
- });
- BWA.api.post('FmsMaterialPurchaseOrderMaterial', postData, parameters).done(function () {
- utils.toast.show($G('successDatabaseInsertionMsg'));
- viewModel.popupVisible(false);
- viewModel.gridView().refresh();
- });
- }
- function handleAfterLoadingModelByKey(data, dataViewModel) {
- var url = [
- BWA.db._url,
- '/CmFile(SiteId={0},FileId={1})/$value'.formati(dataViewModel.SiteId(), dataViewModel.FileId())
- ].join('');
- purchaseOrderFileUrl(url);
- loadMaterialsInPurchaseRequest({
- SiteId: dataViewModel.SiteId(),
- BusinessFieldId: dataViewModel.BusinessFieldId(),
- PurchaseRequestId: dataViewModel.PurchaseRequestId()
- });
- materialsDataSource.filter([
- eq('SiteId', dataViewModel.SiteId()),
- and,
- eq('BusinessFieldId', dataViewModel.BusinessFieldId()),
- and,
- eq('PurchaseOrderId', dataViewModel.PurchaseOrderId())
- ]);
- materialsDataSource.load().done(function (dbMaterials) {
- materialsInView(dbMaterials);
- });
- viewModel.visibleDeleteButton(false);
- }
- function handleBeforeShowingPopupForEdit(rowData, dataViewModel) {
- dataViewModel.OrdererName = $KoSet(dataViewModel.OrdererName, rowData['CmUser/Name']);
- dataViewModel.BusinessFieldName = $KoSet(dataViewModel.BusinessFieldName, rowData['CmBusinessField/Name']);
- dataViewModel.PurchaseRequestTitle = $KoSet(dataViewModel.PurchaseRequestTitle, rowData['FmsMaterialPurchaseRequest/Title']);
- dataViewModel.PurchaseRequestReason = $KoSet(dataViewModel.PurchaseRequestReason, rowData['FmsMaterialPurchaseRequest/Reason']);
- dataViewModel.TradeCompanyName = $KoSet(dataViewModel.TradeCompanyName, rowData['FmsMaterialTradeCompany/Name']);
- dataViewModel.FileName = $KoSet(dataViewModel.FileName, rowData['CmFile/Name']);
- }
- function handleButtonSearchPurchaseRequest() {
- viewModel.purchaseRequestSearchPopup.show();
- }
- function handleSelectBoxChangeTradeCompany(e) {
- e.value;
- }
- 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 = [];
- materialsInPurchaseRequest(_.map(dbMaterials, function (m) {
- var tradeCompanyId = m['FmsMaterial/TradeCompanyId'];
- BWA.DataUtil.pushInArrayNoDup(companies, ['TradeCompanyId'], {
- TradeCompanyId: tradeCompanyId,
- Name: m['FmsMaterial/FmsMaterialTradeCompany/Name']
- });
- m.TradeCompanyId = tradeCompanyId;
- m.UnitCost = m['FmsMaterial/FinalPrice'];
- if (m.UnitCost() === null) {
- m.UnitCost(0);
- }
- return m;
- }));
- // 구매신청에 대한 모든 자재를 표시
- materials(dbMaterials);
- });
- }
- viewModel.popupVisible.subscribe(function (visible) {
- if (!visible) {
- materialsInView([]);
- }
- });
- viewModel.isEditModeInPopup.subscribe(function (isEditMode) {
- if (isEditMode) {
- materials(materialsInView.slice(0));
- }
- });
- // 값이 같아도 항상 subscribe가 호출
- viewModel.dataModel.TradeCompanyId.extend({ notify: 'always' });
- // 거래처가 바뀌면 해당하는 자재들로 보여준다.
- viewModel.dataModel.TradeCompanyId.subscribe(function (tradeCompanyId) {
- if (viewModel.isEditModeInPopup() && viewModel.isNewInPopup()) {
- if (_.isNull(tradeCompanyId)) {
- materials([]);
- return;
- }
- materials(_.reject(materialsInPurchaseRequest(), function (m) {
- return m.TradeCompanyId() !== tradeCompanyId;
- }));
- }
- else {
- var isNeedRefresh = false;
- _.each(materialsInPurchaseRequest(), function (m) {
- isNeedRefresh |= BWA.DataUtil.pushInArrayNoDup(materials(), ['MaterialId'], m);
- });
- if (isNeedRefresh) {
- materialGridView.refresh();
- }
- }
- });
- // dxview에서 사용할 ko를 미리 생성해 둬야 값 변경시 적용된다.
- viewModel.dataModel.BusinessFieldName = ko.observable();
- viewModel.dataModel.ProgressName = ko.observable();
- viewModel.dataModel.OrdererName = ko.observable();
- viewModel.dataModel.TradeCompanyName = ko.observable();
- viewModel.dataModel.PurchaseRequestTitle = ko.observable();
- viewModel.dataModel.PurchaseRequestReason = ko.observable();
- var materialColumns = [
- ].concat(materialFactory.getColumns([
- {
- 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) {
- for (var i = 1; i < materialClassForSearch().length; i++) {
- if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {
- return materialClassForSearch()[i].Name();
- }
- }
- }
- },
- { dataField: 'Name', width: '35%' },
- { dataField: 'Standard', width: '35%', caption: '규격', alignment: 'center' },
- { dataField: 'Unit', width: '15%', caption: '단위', alignment: 'center' },
- ]));
- var numberFormat = $NumberFormat;
- materialDataGridOptions = utils.datagrid.defaultOptions({
- width: 940,
- visible: viewModel.viewModeInPopup,
- pager: {
- showPageSizeSelector: false,
- allowedPageSizes: []
- },
- dataSource: materialsInView,
- columns: materialColumns.concat([
- {
- dataField: 'UnitCost', width: '15%', alignment: 'center', caption: $G('unitCost'),
- customizeText: function (cellInfo) {
- return numberFormat(cellInfo.value);
- }
- },
- {
- dataField: 'MaterialCount', width: '15%', alignment: 'center', caption: $G('materialCount'),
- customizeText: function (cellInfo) {
- return numberFormat(cellInfo.value);
- }
- },
- ])
- });
- modifiableMaterialDataGridOptions = utils.datagrid.defaultOptions({
- width: 940,
- pager: {
- showPageSizeSelector: false,
- allowedPageSizes: []
- },
- visible: viewModel.isEditModeInPopup,
- dataSource: materials,
- selection: { mode: 'multiple', allowSelectAll: true },
- columns: materialColumns.concat([
- {
- dataField: 'UnitCost', width: '15%', type: 'number', caption: $G('unitCost'),
- alignment: 'center',
- cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({
- step: 100
- })
- },
- {
- dataField: 'MaterialCount', width: '15%', type: 'number',
- caption: $G('materialCount'), alignment: 'center',
- cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({
- min: 0,
- max: 1000000,
- convertValueWhenValueChanged: function (value) {
- return Math.max(1, value);
- }
- })
- }]),
- cellClick: function (e) {
- utils.datagrid.cellClickEventForDataGridTemplate(e, 'MaterialCount');
- utils.datagrid.cellClickEventForDataGridTemplate(e, 'UnitCost');
- },
- contentReadyAction: function (e) {
- materialGridView = e.component;
- },
- });
- viewModel.materialSearchPopup = BWA.Popup.Material.create(viewModel, {
- isMultipleSelect: true,
- onSelectedMaterials: function (sMaterials) {
- var koValue = $KoValue;
- var purchaseOrderId = viewModel.dataModel.PurchaseOrderId();
- _.each(sMaterials, function (sm) {
- // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다.
- var found = _.some(materials(), function (m) {
- return (typeof (m.MaterialId) == "function" ? m.MaterialId() : m.MaterialId) === (typeof (sm.MaterialId) == "function" ? sm.MaterialId() : sm.MaterialId);
- });
- if (found) return;
- var newMaterial = {
- SiteId: sm.SiteId,
- PurchaseOrderId: ko.observable(purchaseOrderId),
- MaterialId: sm.MaterialId,
- Name: sm.Name,
- MaterialCode: sm.MaterialCode,
- MaterialCount: ko.observable(1),
- UnitCost: ko.observable(koValue(sm.FinalPrice)),
- FirstClassId: (typeof (sm.FirstClassId) == "function" ? ko.observable(sm.FirstClassId()) : ko.observable(sm.FirstClassId)),
- SecondClassId: (typeof (sm.SecondClassId) == "function" ? ko.observable(sm.SecondClassId()) : ko.observable(sm.SecondClassId)),
- ThirdClassId: (typeof (sm.ThirdClassId) == "function" ? ko.observable(sm.ThirdClassId()) : ko.observable(sm.ThirdClassId)),
- Standard: (typeof (sm.Standard) == "function" ? ko.observable(sm.Standard()) : ko.observable(sm.Standard)),
- Unit: (typeof (sm.Unit) == "function" ? ko.observable(sm.Unit()) : ko.observable(sm.Unit)),
- 'FmsMaterial/FmsMaterialTradeCompany/Name': sm['FmsMaterialTradeCompany/Name']
- };
- if (_.isNull(newMaterial.UnitCost())) {
- newMaterial.UnitCost(0);
- }
- materials.push(newMaterial);
- });
- materialGridView.refresh();
- }
- });
- viewModel.purchaseRequestSearchPopup = BWA.Popup.PurchaseRequestSearch.create(viewModel, {
- filter: [
- eq('SiteId', BWA.UserInfo.SiteId()),
- and,
- eq('ProgressId', $Code.PurchaseProgress.PURCHASE_REQUEST_APPROVAL)
- ],
- onSelectedPurchaseRequest: function (purchaseRequest) {
- var purchaseRequestId = purchaseRequest.PurchaseRequestId;
- loadMaterialsInPurchaseRequest(purchaseRequest);
- viewModel.dataModel.PurchaseRequestId(purchaseRequest.PurchaseRequestId);
- viewModel.dataModel.PurchaseRequestTitle(purchaseRequest.Title);
- viewModel.dataModel.PurchaseRequestReason(purchaseRequest.Reason);
- // JD Comment : 구매목록이 선택되면 비즈니스 필드를 변경
- viewModel.dataModel.BusinessFieldId(purchaseRequest.BusinessFieldId);
- }
- });
- return {
- businessFields: businessFields,
- tradeCompanies: tradeCompanies,
- purchaseOrderFileUrl: purchaseOrderFileUrl,
- isValidateWithFunction: isValidateWithFunction,
- materialDataGridOptions: materialDataGridOptions,
- modifiableMaterialDataGridOptions: modifiableMaterialDataGridOptions,
- handleAfterLoadingModelByKey: handleAfterLoadingModelByKey,
- handleAfterSave: handleAfterSave,
- handleViewShown: handleViewShown,
- handlePopupShowing: handlePopupShowing,
- handlePopupShown: handlePopupShown,
- handleSaveSuccess: handleSaveSuccess,
- handleButtonSearchPurchaseRequest: handleButtonSearchPurchaseRequest,
- handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit,
- handleDeleteSelectedMaterials: handleDeleteSelectedMaterials,
- materials: materials,
- };
- }
- }
- });
|