BemsWebApplication.MaterialStockAdjustment = function (params, viewInfo, forApprovalOptions) {
    "use strict";
    var endpointSelector = "";
    if (BemsWebApplication.config.mode == "production") {
        endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.production;
    } else {
        endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints).config.db.local;
    }
    var materialClassForSearch = ko.observableArray();
    var materialClass = ko.observableArray();
    var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass');
    var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
    var searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()];
    var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];
    var first = true, popupVisible1 = ko.observable(false);

    var visibleApprovalButton = ko.observable();

    var businessFieldDataSource = BemsWebApplication.db.createDataSource('CmBusinessField', true, true, true),
        materialClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass', true, true),
        warehouseDataSource = BemsWebApplication.db.createDataSource('FmsMaterialWarehouse', true, true),
        releaseTypeDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeReleaseType'),
        adjustmentTypeDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeAdjustmentType');

    var materialClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
        businessFields = ko.observableArray(),
        releaseTypes = ko.observableArray(),
        warehouses = ko.observableArray(),
        materials = ko.observableArray(),
        adjustmentTypes = ko.observableArray();

    var forApprovalViewOptions, forApprovalPopupOptions, popup;

    var materialClassesForSearch = [ko.observableArray(), ko.observableArray(), ko.observableArray()],
        materialClassValuesForSearch = [ko.observable(), ko.observable(), ko.observable()],
        businessFieldsForSearch = ko.observableArray(),
        businessFieldIdForSearch = ko.observable(),
        warehousesForSearch = ko.observableArray(),
        warehousesIdForSearch = ko.observable(),
        releaseTypesForSearch = ko.observableArray(),
        adjustmentTypesForSearch = ko.observableArray();

    if (_.isObject(forApprovalOptions)) {
        forApprovalViewOptions = forApprovalOptions.viewOptions;
        forApprovalPopupOptions = forApprovalOptions.popupOptions;
    }

    var deferredForSearch = new $.Deferred();
    var defaultSearchClassArray = $SearchView.createDefaultArray('MaterialClassId');

    var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;

    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 (first == true && e.value == null) {
            e.value = 0;
            first = false;
            searchFacilityClassValues[0](0);
        }
        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 dataSourceOptions = {
        select: [
            'SiteId',
            'BusinessFieldId',
            'MaterialId',
            'FmsMaterial/MaterialCode',
            'FmsMaterial/Name',
            'FmsMaterial/Unit',
            'MaterialReleaseId',
            'ReleaseTypeId',
            'FmsMaterialCodeReleaseType/Name',
            'FmsMaterialCodeAdjustmentType/Name',
            'ReleaseDate',
            'MaterialCount',
            'ReleaseTotalCost',
            'WarehouseId',
            'CmUser1/Name',
            'CmUser/Name',
            'IsConfirmed',
            'ConfirmedUserId',
            'AdjustmentTypeId',
            'StockCountByPoint',
            'FmsMaterial/FirstClassId',
            'FmsMaterial/SecondClassId',
            'FmsMaterial/ThirdClassId',
            'CmBusinessField/Name',
            'FmsMaterial/Standard'
        ],
        filter: [
            ['SiteId', '=', BWA.UserInfo.SiteId()],
            'and',
            ['AdjustmentTypeId', '<>', 0]
        ],

        expand: [
            'CmUser', 'CmUser1',
            'FmsMaterial',
            'FmsMaterialCodeReleaseType',
            'CmBusinessField',
            'FmsMaterialCodeAdjustmentType'
        ],
        extendOptions: {
            forceOriginalField: true
        }
    };

    var viewModel;
    var viewOptions = {
        dataSourceOptions: dataSourceOptions,
        columns: [
            { dataField: 'MaterialReleaseId', caption: $G('number'), width: '8%', alignment: 'center', allowFiltering: false },
            { dataField: 'CmBusinessField/Name', caption: $G('businessFieldName'), width: '10%', alignment: 'center', },
            { dataField: 'FmsMaterialCodeReleaseType/Name', caption: '출고구분', width: '10%', alignment: 'center', visible: false },
            { dataField: 'FmsMaterialCodeAdjustmentType/Name', caption: '정산사유', width: '10%', alignment: 'center' },
            { dataField: 'FmsMaterial/MaterialCode', caption: '자재코드', width: '20%', alignment: 'center', visible: false },
            {
                dataField: 'FmsMaterial/FirstClassId', width: '13%', 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: 'FmsMaterial/SecondClassId', width: '13%', 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: 'FmsMaterial/ThirdClassId', width: '13%', 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: 'FmsMaterial/Name', caption: '자재명', width: '20%', alignment: 'center' },
            { dataField: 'FmsMaterial/Standard', caption: '규격', width: '20%', alignment: 'center' },
            { dataField: 'FmsMaterial/Unit', caption: '단위', width: '8%', alignment: 'center' },
            { dataField: 'MaterialCount', caption: '수량', width: '8%', alignment: 'center', format: 'fixedPoint' },
            {
                dataField: 'ReleaseDate', caption: '출고일', width: '20%', alignment: 'center', sortOrder: 'desc', dataType: "shortDate", format: "yyyy-MM-dd hh:mm:ss",
                customizeText: function (cellInfo) {
                    return cellInfo.valueText;
                }
            },
            { dataField: 'CmUser1/Name', caption: '등록자', width: '10%', alignment: 'center' },
            { dataField: 'CmUser/Name', caption: '승인자', width: '10%', alignment: 'center' },
        ],
        pager: {
        },
        paging: {
            pageSize: 18,
            enabled: true
        },

        // 2019.04.17 엑셀 출력 기능 추가 ~~~
        "export": {
            enabled: true,
            fileName: '자재 정산 등록 목록'
        },
        onExporting: function (e) {
            e.component.columnOption("MaterialReleaseId", "visible", false);
        },
        onExported: function (e) {
            e.component.columnOption("MaterialReleaseId", "visible", true);
        },
        // ~~~ 2019.04.17 엑셀 출력 기능 추가

        selection: { mode: 'multiple', allowSelectAll: true },
        popupWidth: 1060,
        searchViewItems: [

            { id: 'ReleaseTypeId', ignoreValue: 0, defaultValue: 0, dataSource: releaseTypesForSearch },
            { id: 'FmsMaterialCodeAdjustmentType/Name' },
            { id: 'FmsMaterial/MaterialCode' },
            { id: 'FmsMaterial/Name' },
            { id: 'FmsMaterial/Unit' },
            { id: 'FmsMaterial/Standard' },
            { id: 'ReleaseDate', type: 'dateRange', isOnlyDate: true },
            { id: 'CmUser/Name' },
            { id: 'CmUser1/Name' },
            { id: 'FmsMaterial/FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView },
            { id: 'FmsMaterial/SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FmsMaterial/FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView },
            { id: 'FmsMaterial/ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FmsMaterial/FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] },
        ],
        isValidateWithFunction: function (errorMessage) {

            return popup.isValidateWithFunction(errorMessage);
        },

        mandatoryFields: [
                { dataField: 'ReleaseDate', name: '출고일' },
                { dataField: 'BusinessFieldId', name: $G('businessField') },
                { dataField: 'FmsMaterialCodeReleaseType/Name', name: '출고구분' },
                { dataField: 'FmsMaterialCodeAdjustmentType/Name', name: '정산사유' }
        ],

        handleDataGridRowClick: function (id, dataGrid, clickRow, popupVisible) {

            dataGrid.clearSelection();
            var data = clickRow.data;
            var dataModel = viewModel.dataModel;

            if (popup && popup.handleBeforeShowingPopupForEdit) {
                popup.handleBeforeShowingPopupForEdit(data, dataModel);
            }

            popupVisible(true);
        },

        handleAfterLoadingModelByKey: function (data, dataViewModel) {
            if (popup && popup.handleAfterLoadingModelByKey) {
                popup.handleAfterLoadingModelByKey(data, dataViewModel);
            }
        },

        handlePopupShowing: function (isNewInPopup, dataViewModel) {

            //if (isNewInPopup()) {
            //    viewModel.toolbarItems[1].options.visible(true);
            //    viewModel.toolbarItems[2].options.visible(true);
            //}
            //else {
            //    viewModel.toolbarItems[1].options.visible(false);
            //    viewModel.toolbarItems[2].options.visible(false);
            //}

            if (popup && popup.handlePopupShowing) {
                popup.handlePopupShowing(isNewInPopup, dataViewModel);
            }
        },

        handlePopupShown: function (editMode, isNew, dataViewModel) {
            if (popup && popup.handlePopupShown) {
                popup.handlePopupShown(editMode, isNew, dataViewModel);
            }
        },

        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()));
            });

            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)]
                ]);
            }

            materialClassDataSource.filter([
                    ['SiteId', '=', BWA.UserInfo.SiteId()],
                    'and',
                    ['ParentMaterialClassId', '=', null]
            ]);

            adjustmentTypeDataSource.filter([
                ['AdjustmentTypeId', '<>', 0]
            ]);

            $.when(
                businessFieldDataSource.load(),
                materialClassDataSource.load(),
                warehouseDataSource.load(),
                releaseTypeDataSource.load(),
                adjustmentTypeDataSource.load()
            ).done(function (dbBusinessFields, dbMaterialClasses, dbWarehouses, dbreleaseTypes, dbadjustmentTypes) {

                dbBusinessFields = dbBusinessFields[0];
                dbMaterialClasses = dbMaterialClasses[0];
                dbWarehouses = dbWarehouses[0];

                // TODO : 아래 두코드의 차이점이 무엇인지 확인 필요.
                //releaseTypes(dbreleaseTypes);
                // 의도한 대로 동작하려면 아래 코드로 써야 함
                releaseTypes(dbreleaseTypes[0]);
                adjustmentTypes(dbadjustmentTypes[0]);
                materialClasses[0](dbMaterialClasses);

                materialClassesForSearch[0]($SearchView.createArrayOfSelectBox('MaterialClassId', dbMaterialClasses));

                initializeSearchClasses();

                businessFields(dbBusinessFields);
                warehouses(dbWarehouses);

                releaseTypesForSearch($SearchView.createArrayOfSelectBox('ReleaseTypeId', releaseTypes()));
                //adjustmentTypesForSearch($SearchView.createArrayOfSelectBox('AdjustmentTypeId', adjustmentTypes));
                //adjustmentTypesForSearch(adjustmentTypes);

                businessFieldsForSearch($SearchView.createArrayOfSelectBox('BusinessFieldId', dbBusinessFields));
                warehousesForSearch($SearchView.createArrayOfSelectBox('WarehouseId', dbWarehouses));

                deferredForSearch.resolve();
            });
        },

        handleViewShown: function () {
        },
    };

    if (_.isObject(forApprovalViewOptions)) {

        _.extend(viewOptions, forApprovalViewOptions);
    }
    else {

        // 승인 화면이 아니면 수정에 관련 기능이 필요없다.
        _.extend(viewOptions, {

            isValidateWithFunction: function (errorMessage) {

                if (popup && popup.isValidateWithFunction) {
                    return popup.isValidateWithFunction(errorMessage);
                }
                return true;
            },
            mandatoryFields: [
                { dataField: 'BusinessFieldId', name: $G('businessField') }
            ],
            handleSaveButtonInPopup: function (isInsert) {
                if (isInsert === false) {
                    if (popup && popup.handleAfterSave) {
                        popup.handleAfterSave(undefined);
                    }
                }
            },

            handleAfterSaveInPopup: function (responseKey, response) {

                if (popup && popup.handleAfterSave) {

                    popup.handleAfterSave(responseKey, response);
                }
            },

            getAddedToolbarItemsInPopup: function (e) {

                var hasnotModificationPermission = e.hasnotModificationPermission,
                    dataViewModel = e.dataViewModel,
                    popupVisible = e.popupVisible,
                    isEditModeInPopup = e.isEditModeInPopu,
                    isNewInPopup = e.isNewInPopup

                return [
                {
                    location: 'after', widget: 'button', options: {
                        text: $G('materialInsertion'), icon: 'search', visible: isNewInPopup,
                        clickAction: function () {
                            viewModel.materialSearchPopup.show();
                        }
                    }
                },
                {
                    location: 'after', widget: 'button', options: {
                        text: $G('materialDeletion'), icon: 'remove', type: 'danger', visible: isNewInPopup,
                        clickAction: function () {
                            if (popup && popup.handleDeleteSelectedMaterials) { popup.handleDeleteSelectedMaterials(); }
                        }
                    }
                },
                {
                    location: 'after',
                    widget: 'button',
                    options: {
                        text: $G('approval'), icon: 'save', type: 'success',
                        //visible: visibleApprovalButton,
                        visible: false, // 2016 01 13 hcLee
                        disabled: hasnotModificationPermission,
                        clickAction: function () {

                            dataViewModel.ConfirmedDate(new Date());
                            dataViewModel.IsConfirmed(true);
                            dataViewModel.ConfirmedUserId(BWA.UserInfo.UserId());

                            var keys = BWA.db.extractKeysObject('FmsMaterialRelease', dataViewModel);
                            BWA.db.FmsMaterialRelease.update(keys, dataViewModel.toJS()).done(function (res) {
                                // TODO : 트랜잭션이 필요할 것으로 예상됨
                                var postData = dataViewModel.toJS();
                                var parameters = {
                                    SiteId: dataViewModel.SiteId(),
                                    BusinessFieldId: dataViewModel.BusinessFieldId(),
                                    MaterialId: dataViewModel.MaterialId()
                                };

                                // 자재 테이블 업데이트 필요, 자재정산 승인 
                                BWA.api.post('FmsMaterialRelease/Approval', postData, parameters).done(function () {
                                    utils.toast.show($G('successDatabaseInsertionMsg'));
                                    popupVisible(false);
                                    viewModel.gridView().refresh();
                                });
                            });
                        }
                    }
                }
                ];
            },
        });
    }

    viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsMaterialRelease', viewOptions);

    // 툴바 버튼 관련 수정 
    viewModel.toolbarItems[7].options.clickAction = handlePopupButtonSave;
    //viewModel.toolbarItems[6].options.clickAction = handlePopupButtonSave;

    function handlePopupButtonSave() {

        if (viewModel.isNewInPopup()) {

            if (viewModel.popup.modifiableMaterialDataGridOptions.dataSource().length != 0) {

                var parameters = {
                    SiteId: BWA.UserInfo.SiteId(),
                    BusinessFieldId: viewModel.dataModel.BusinessFieldId(),
                    //WorkRequestId: viewModel.dataModel.WorkRequestId()
                };

                var postData = [];
                var Totalcnt = viewModel.popup.modifiableMaterialDataGridOptions.dataSource().length, cnt = 0;
                for (var i = 0; i < Totalcnt; i++) {
                    // AdjustmentTypeName
                    // AdjustmentTypeId == 1 인 경우 재고수량보다 클 수 없음 

                    if (viewModel.dataModel.AdjustmentTypeId() == 1) {
                        if (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount() > (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint)) {
                            //viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount(viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCount());
                            //viewModel.popup.materialGridView.refresh();
                            utils.toast.show('자재손실은 재고수량 보다 클 수 없습니다.', 'error');
                            return;
                        }
                    }
                    var okcnt = 0;
                    if (viewModel.dataModel.AdjustmentTypeId() == 2) {
                        var dataSource = new DevExpress.data.DataSource({
                            store: new DevExpress.data.ODataStore({
                                url: endpointSelector + "/FmsMaterialStored"
                            }),
                            requireTotalCount: true,
                            pageSize: 3000
                        });
                        dataSource.filter([
                                ["SiteId", "=", BWA.UserInfo.SiteId()],
                                "and",
                                ["MaterialId", "=", (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId)]
                        ]);
                        dataSource.load()
                        .done(function (result) {
                            if (result != 0) {
                                var varMaterialId = result[0].MaterialId;
                                var MaterialId, StockCountByPoint, MaterialCount;
                                for (var i = 0; i < result.length; i++) {
                                    okcnt += (result[i].StoredCount - result[i].RemainStoredCount);
                                }
                                for (var j = 0; j < Totalcnt; j++) {
                                    if (varMaterialId == (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId)) {
                                        StockCountByPoint = (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].StockCountByPoint) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].StockCountByPoint() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].StockCountByPoint);
                                        MaterialId = (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialId);
                                        MaterialCount = (typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialCount) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialCount() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[j].MaterialCount);
                                    }
                                }
                                if (MaterialCount <= okcnt) {
                                    viewModel.dataModel.StockCountByPoint(StockCountByPoint);
                                    viewModel.dataModel.MaterialId(MaterialId);
                                    viewModel.dataModel.MaterialCount(MaterialCount);
                                    viewModel.dataModel.ReleaseTotalCost(0);
                                    postData.push(viewModel.dataModel.toJS());
                                }
                                else {
                                    utils.toast.show('반납할 재고가 없습니다.', 'error');
                                    cnt++;
                                    return;
                                }
                                cnt++;
                                if (Totalcnt == cnt) {
                                    BWA.api.post('FmsMaterialRelease/Add', postData, parameters).done(function () {
                                        utils.toast.show($G('successDatabaseInsertionMsg'));
                                        viewModel.popupVisible(false);
                                        viewModel.gridView().refresh();
                                    });
                                }
                            }
                            else {
                                cnt++;
                                utils.toast.show('반납할 재고가 없습니다.', 'error');
                            }
                        });
                    }
                    else {
                        viewModel.dataModel.StockCountByPoint((typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].StockCountByPoint));
                        viewModel.dataModel.MaterialId((typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialId));
                        viewModel.dataModel.MaterialCount((typeof (viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount) == "function" ? viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount() : viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[i].MaterialCount));
                        viewModel.dataModel.ReleaseTotalCost(0);

                        postData.push(viewModel.dataModel.toJS());
                        cnt++;
                        if (Totalcnt == cnt) {
                            BWA.api.post('FmsMaterialRelease/Add', postData, parameters).done(function () {
                                utils.toast.show($G('successDatabaseInsertionMsg'));
                                viewModel.popupVisible(false);
                                viewModel.gridView().refresh();
                            });
                        }
                    }
                }
            }
            else {
                utils.toast.show('선택된 자재가 없습니다.', 'error');
            }
        }
        else if (viewModel.isEditModeInPopup()) {
            viewModel.dataModel.MaterialCount(viewModel.popup.modifiableMaterialDataGridOptions.dataSource()[0].MaterialCount());
            var keys = BWA.db.extractKeysObject('FmsMaterialRelease', viewModel.dataModel);
            BWA.db.FmsMaterialRelease.update(keys, viewModel.dataModel.toJS()).done(function (res) {
                utils.toast.show($G('successDatabaseUpdateMsg'));
                viewModel.popupVisible(false);
                viewModel.gridView().refresh();
            });
        }
    };

    var commandInsertButtonOptions = [
    {
        id: 'create1',
        title: '등록',
        disabled: viewModel.hasnotModificationPermission,
        action: function () {
            viewModel.isNewInPopup(true);
            viewModel.viewModeInPopup(false);
            viewModel.isEditModeInPopup(true);
            viewModel.visibleDeleteButton(false);
            viewModel.visibleEditButton(false);
            viewModel.popupVisible(true);
        }
    }, // 2016 01 13 승인화면 따로 추가 hcLee
    {

        id: 'create2',
        title: '승인',
        disabled: viewModel.hasnotModificationPermission,
        action: handleApproveSelectedItem
    }];

    viewModel.businessFields = businessFields;
    viewModel.releaseTypes = releaseTypes;
    viewModel.adjustmentTypes = adjustmentTypes;
    viewModel.visibleApprovalButton = visibleApprovalButton;
    viewModel.commandInsertButtonOptions = commandInsertButtonOptions;

    var isUsePopup = forApprovalPopupOptions && forApprovalPopupOptions.isUsePopup !== false;

    if ((forApprovalPopupOptions && _.isFunction(forApprovalPopupOptions.popupCreatorFunc))) {

        popup = viewModel.popup = forApprovalPopupOptions.popupCreatorFunc(viewInfo, viewModel, forApprovalPopupOptions);
    }
    else {
        popup = viewModel.popup = BWA.Popup.MaterialStockAdjustment.create(viewInfo, viewModel, forApprovalPopupOptions);
    }

    function handleApproveSelectedItem() {
        var materialStoredList = viewModel.gridView().getSelectedRowsData();

        var list = _.reject(materialStoredList, function (x) {
            try {
                return x.IsConfirmed();
            } catch (e) {
                return x.IsConfirmed;
            }
        });

        if (_.isEmpty(list)) {
            utils.toast.show('승인 할 정산 항목이 없습니다. 이미 승인되었거나 선택된 항목이 없습니다.', 'error');
            return;
        }

        var postData = list; // undefined;

        list.forEach(function (item) {
            item.IsConfirmed = true;
            item.ConfirmedUserId = BWA.UserInfo.UserId();

            try {
                item.MaterialReleaseId = item.MaterialReleaseId();
            } catch (e) {
                item.MaterialReleaseId = item.MaterialReleaseId;
            }
        });

        return BWA.api.post('FmsMaterialRelease/ApprovalMany', postData).then(function () {
            viewModel.refreshList();
            utils.toast.show('성공적으로 승인 처리되었습니다.');
        });
    }
    viewModel.handleSecondClassChangedValueInSearchView1 = handleSecondClassChangedValueInSearchView;
    viewModel.handleFirstClassChangedValueInSearchView1 = handleFirstClassChangedValueInSearchView;
    return viewModel;
};