| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 | $(function () {    'use strict';    var materialClassForSearch = ko.observableArray();    var materialClass = ko.observableArray();    var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass');    BemsWebApplication.Popup.PurchaseRequest = {        create: function (viewInfo, viewModel, forApprovalOptions) {            var materials = ko.observableArray(),                materialsInView = ko.observableArray(),                businessFields = ko.observableArray();            var materialFactory = BWA.Factory.Material,                purchaseProgressCode = BWA.Code.PurchaseProgress,                materialGridView,                materialDataGridOptions,                modifiableMaterialDataGridOptions = undefined;            var materialsDataSource = materialFactory.getBasicDataSourceRef({                dbModeIId: 'FmsMaterialPurchaseRequestMaterial',                primaryKeyDataField: 'PurchaseRequestId'            });            function isValidateWithFunction(errorMessage) {                if (_.isEmpty(materials())) {                    errorMessage.message = '구매요청한 자재가 없습니다.';                    return false;                }                return true;            }            function handlePopupShowing(isNewInPopup, dataModel) {                                $("#gridContainer2").dxDataGrid({                    paging: {                        pageSize: 10,                        enabled: true                    }                });                $("#gridContainer3").dxDataGrid({                    paging: {                        pageSize: 10,                        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_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());                    dataModel.bSameOrder(false);                }            }            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 = row.MaterialId();                    for (var i = 0 ; i < length ; i++) {                        if (id === array[i].MaterialId()) {                            materials().splice(i, 1);                            break;                        }                    }                });                materialGridView.refresh();            }            function handlePopupShown(editMode, isNew, dataViewModel) {            }            // 구매신청 정보가 저장된 후에 호출 된다.             // 등록이면 responseKey가 있고, 수정이면 없다.            function handleAfterSave(responseKey) {                var array = materials();                if (_.isEmpty(array)) {                    return;                }                var siteId, purchaseRequestId, businessFieldId;                if (_.isUndefined(responseKey)) {                    var dataModel = viewModel.dataModel;                    siteId = dataModel.SiteId();                    businessFieldId = dataModel.BusinessFieldId();                    purchaseRequestId = dataModel.PurchaseRequestId();                }                else {                    siteId = responseKey.SiteId;                    // JD Comment : BusinessField 가 키에서 제거되면서 발생된 사항                     // businessFieldId = responseKey.BusinessFieldId;                    businessFieldId = viewModel.dataModel.BusinessFieldId();                    purchaseRequestId = responseKey.PurchaseRequestId;                }                var postData;                var parameters = {                    SiteId: siteId,                    BusinessFieldId: businessFieldId,                    PurchaseRequestId: purchaseRequestId                };                postData = _.map(array, function (m) {                    return {                        SiteId: siteId,                        BusinessFieldId: businessFieldId,                        PurchaseRequestId: purchaseRequestId,                        MaterialId: m.MaterialId(),                        MaterialCount: m.MaterialCount()                    };                });                BWA.api.post('FmsMaterialPurchaseRequestMaterial', postData, parameters).done(function () {                    utils.toast.show($G('successDatabaseInsertionMsg'));                    viewModel.popupVisible(false);                    viewModel.gridView().refresh();                });            }            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;                var useBusinessFiltering = BWA.UserInfo.isDependBusinessField(viewInfo.viewName)                if (useBusinessFiltering) {                    materialsDataSource.filter([                        eq('SiteId', dataViewModel.SiteId()),                        and,                        [                            eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()),                            'or',                            eq('BusinessFieldId', 1)                        ],                        and,                        eq('PurchaseRequestId', dataViewModel.PurchaseRequestId())                    ]);                }                else {                    materialsDataSource.filter([                        eq('SiteId', dataViewModel.SiteId()),                        and,                        eq('PurchaseRequestId', dataViewModel.PurchaseRequestId())                    ]);                }                materialsDataSource.load().done(function (dbMaterials) {                    materialsInView(dbMaterials);                });            }            function handleBeforeShowingPopupForEdit(rowData, dataViewModel) {                dataViewModel.BusinessFieldName(rowData['CmBusinessField/Name']());                dataViewModel.RequesterName(rowData['CmUser/Name']());                dataViewModel.PurchaseTypeName(rowData['FmsMaterialCodePurchaseType/Name']());                dataViewModel.ApprovalUserName = $KoSet(dataViewModel.ApprovalUserName, rowData['CmUser1/Name']);            }            viewModel.popupVisible.subscribe(function (visible) {                if (!visible) {                    materialsInView([]);                    // TODO : Sitde-Effects ???                    materials([]);                }            });            viewModel.isEditModeInPopup.subscribe(function (isEditMode) {                if (isEditMode) {                    materials(materialsInView.slice(0));                }            });            viewModel.dataModel.BusinessFieldName = ko.observable();            viewModel.dataModel.ProgressName = ko.observable();            viewModel.dataModel.RequesterName = ko.observable();            viewModel.dataModel.ApprovalUserName = ko.observable();            viewModel.dataModel.PurchaseTypeName = ko.observable();            var materialColumns = materialFactory.getColumns([                {                    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: 'MaterialCode', width: '30%', visible: false },                { dataField: 'Name', width: '25%' },                { dataField: 'Standard', width: '25%', caption: '규격', alignment: 'center' },                { dataField: 'Unit', width: '15%', caption: '단위', alignment: 'center' },                //{ dataField: 'UnitCost', width: '25%', caption: '단가', alignment: 'center' }            ]);            materialDataGridOptions = utils.datagrid.defaultOptions({                width: 820,                visible: viewModel.viewModeInPopup,                pager: {                    showPageSizeSelector: false,                    allowedPageSizes: []                },                dataSource: materialsInView,                columns: materialColumns.concat([{ dataField: 'MaterialCount', width: '15%', alignment: 'center', caption: $G('materialCount'), format: 'currency' }])            });            if (_.isObject(forApprovalOptions) === false) {                modifiableMaterialDataGridOptions = utils.datagrid.defaultOptions({                    width: 820,                    pager: {                        showPageSizeSelector: false,                        allowedPageSizes: []                    },                    visible: viewModel.isEditModeInPopup,                    dataSource: materials,                    selection: { mode: 'multiple', allowSelectAll: true },                    columns: materialColumns.concat([{                        dataField: 'MaterialCount', width: '20%', type: 'number',                        caption: $G('materialCount'), alignment: 'center',                        cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({                            min: 1,                            max: 1000000,                            dataField: 'MaterialCount',                            convertValueWhenValueChanged: function (value) {                                return Math.max(1, value);                            }                        })                    }]),                    cellClick: function (e) {                        utils.datagrid.cellClickEventForDataGridTemplate(e, 'MaterialCount');                    },                    contentReadyAction: function (e) {                        materialGridView = e.component;                    },                });                viewModel.materialSearchPopup = BWA.Popup.Material.create(viewModel, {                    isMultipleSelect: true,                    onSelectedMaterials: function (selectedMaterials) {                        var purchaseRequestId = viewModel.dataModel.PurchaseRequestId();                        _.each(selectedMaterials, function (sm) {                            // 어차피 SiteId와 BusinessField는 동일 할 수 밖에 없으므로 비교하지 않는다.                            // JD : 팝업에서 전체선택시 추가로 하면 오류 발생함. 이에 대한 회피 코드로 try-catch                            // JD : 근본적인 원인은 시간 관계상 차후로 넘김                            var found = _.some(materials(), function (m) {                                try {                                    return m.MaterialId() === sm.MaterialId();                                } catch (e) {                                    return m.MaterialId() === sm.MaterialId;                                }                            });                            if (found) return;                            try {                                materials.push({                                    SiteId: ko.observable(sm.SiteId()),                                    PurchaseRequestId: ko.observable(purchaseRequestId),                                    MaterialId: ko.observable(sm.MaterialId()),                                    Name: ko.observable(sm.Name()),                                    MaterialCode: ko.observable(sm.MaterialCode()),                                    MaterialCount: ko.observable(1),                                    FirstClassId: ko.observable(sm.FirstClassId()),                                    SecondClassId: ko.observable(sm.SecondClassId()),                                    ThirdClassId: ko.observable(sm.ThirdClassId()),                                    Standard: ko.observable(sm.Standard()),                                    Unit: ko.observable(sm.Unit()),                                });                            } catch (e) {                                materials.push({                                    SiteId: ko.observable(sm.SiteId),                                    PurchaseRequestId: ko.observable(purchaseRequestId),                                    MaterialId: ko.observable(sm.MaterialId),                                    Name: ko.observable(sm.Name),                                    MaterialCode: ko.observable(sm.MaterialCode),                                    MaterialCount: ko.observable(1),                                    FirstClassId: ko.observable(sm.FirstClassId),                                    SecondClassId: ko.observable(sm.SecondClassId),                                    ThirdClassId: ko.observable(sm.ThirdClassId),                                    Standard: ko.observable(sm.Standard),                                    Unit: ko.observable(sm.Unit),                                });                            }                        });                        materialGridView.refresh();                    }                });            }            return {                materials: materials,                businessFields: businessFields,                isValidateWithFunction: isValidateWithFunction,                materialDataGridOptions: materialDataGridOptions,                modifiableMaterialDataGridOptions: modifiableMaterialDataGridOptions,                handleAfterLoadingModelByKey: handleAfterLoadingModelByKey,                handleAfterSave: handleAfterSave,                handlePopupShowing: handlePopupShowing,                handlePopupShown: handlePopupShown,                handleBeforeShowingPopupForEdit: handleBeforeShowingPopupForEdit,                handleDeleteSelectedMaterials: handleDeleteSelectedMaterials            };        }    }});
 |