| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 | $(function () {    'use strict';    var materialClassForSearch = ko.observableArray();    var MaterialCodeClassDataSource = BemsWebApplication.db.createDataSource('FmsMaterialCodeClass');    var UserGroupDataSource = BemsWebApplication.db.createDataSource('CmUserGroupPermission');    var first = true;    var defaultSearchClassArray = $SearchView.createDefaultArray('MaterialClassId');    var searchFacilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];    var searchFacilityClassValues = [ko.observable(), ko.observable(), ko.observable()];    var facilityClasses = [ko.observableArray(), ko.observableArray(), ko.observableArray()];    BWA.Popup.Material = BWA.Popup.Material || {};    BWA.Popup.Material.create = function (viewModel, options) {        options = options || {};        options.datagridId = options.datagridId || 'materialDataGridForSearch';        var onSelectedMaterials = options.onSelectedMaterials, isMultipleSelect = options.isMultipleSelect;        //var dataViewModel = new BemsWebApplication.FmsMaterialViewModel(),        var dataViewModel = new BemsWebApplication.FmsMaterialExViewModel(),            initialized = false,            gridView,            popupVisible = ko.observable(false),            materialFactory = BemsWebApplication.Factory.Material;        //var dataSource = BWA.DataUtil.createDataSource({ dataSourceOptions: materialFactory.getDataSourceForDataGrid() }, 'FmsMaterial');        var MenuPermission;        var dataSource = BWA.DataUtil.createDataSource({            dataSourceOptions: {                store: BemsWebApplication.odata.FmsMaterialEx,                select: [                    'SiteId',                    'BusinessFieldId',                    'MaterialId',                    'MaterialCode',                    'Name',                    'FirstClassId',                    'SecondClassId',                    'ThirdClassId',                    'LocationId',                    'MaterialTypeId',                    'TradeCompanyId',                    'WarehouseId',                    'Rfid',                    'Unit',                    'DurableYears',                    'ReasonableStockCount',                    'Manufacturer',                    'Standard',                    'FinalPrice',                    'ImageFileId',                    'Note',                    'IsDiscontinued',                    'IsUse',                    'FinalStockCount',                    'FinalTotalStockAmount',                    'StockCount',                    'StockAmount',                ],            },        });        var materialClass = ko.observableArray();        var eq = BWA.DataUtil.constructEqualFilter, and = BWA.DataUtil.andFilter;        var userInfo = BWA.UserInfo;        //자재 검색시 나타나는 팝업은 공통 및 자신이 포함된 비즈니스 영역만 해당됨              for (var i = 0; i < BWA.UserInfo.MenuPermissions().length; i++) {            if (BWA.UserInfo.MenuPermissions()[i].MenuId == 'PurchaseRequest') {                MenuPermission = BWA.UserInfo.MenuPermissions()[i].MenuPermission;                break;            }        }        if (MenuPermission >= 4) {            dataSource.filter([                eq('SiteId', userInfo.SiteId()),                and,                [                    eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()),                    'or',                    eq('BusinessFieldId', 1)                ]            ]);        }        else {            dataSource.filter([                eq('SiteId', userInfo.SiteId())            ]);        }        var dataGridOptions = utils.datagrid.defaultOptions({            dxDataSource: dataSource,            selectedSourceItem: dataViewModel,            //datagridId: options.datagridId,            //dbId: 'FmsMaterialEx',            handleDataGridRowClick: function () {            },            //columns: materialFactory.getColumns([            //    //{ dataField: 'ClassName', width: '25%' },            //    { dataField: 'MaterialCode', width: '30%' },            //    { dataField: 'Name', width: '55%' },            //    //{ dataField: 'StockCount', width: '15%' , caption: '재고수량', alignment: 'center'}            //]),            columns: [               //{ dataField: 'ClassName', width: '25%' },               { dataField: 'MaterialCode', width: '30%', caption: '자재코드', alignment: 'center', visible: false },               {                   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) {                       if (cellInfo.value == null) {                           return;                       }                       else {                           for (var i = 1; i < materialClassForSearch().length; i++) {                               if (materialClassForSearch()[i].MaterialClassId() == cellInfo.value) {                                   return materialClassForSearch()[i].Name();                               }                           }                       }                   }               },               { dataField: 'Name', width: '35%', caption: '자재명', alignment: 'center' },               { dataField: 'Standard', width: '35%', caption: '규격', alignment: 'center' },               { dataField: 'Unit', width: '15%', caption: '단위', alignment: 'center' },               { dataField: 'StockCount', width: '15%', caption: '재고수량', alignment: 'center', format: 'currency' }            ],            paging: {                pageSize: 15,                enabled: false            },            wordWrapEnabled: true,            cellPrepared: BemsWebApplication.Factory.Material.cellPrepared        });        if (isMultipleSelect) {            dataGridOptions.selection = { mode: 'multiple', allowSelectAll: true };            dataGridOptions.handleDataGridRowClick = function () { };        }        else {            dataGridOptions.handleDataGridRowClick = function (id, dataGrid, clickRow) {                var data = clickRow.data;                if (!_.isUndefined(onSelectedMaterials)) {                    onSelectedMaterials([BWA.DataUtil.convertViewModelToJS(data)]);                    //{                    //    SiteId: data.SiteId(),                    //    BusinessFieldId: data.BusinessFieldId(),                    //    MaterialId: data.MaterialId(),                    //    MaterialCode: data.MaterialCode(),                    //    FinalPrice: data.FinalPrice(),                    //    TradeCompanyId: _.isUndefined(data.TradeCompanyId) ? undefined : data.TradeCompanyId(),                    //    'FmsMaterialTradeCompany/Name': data['FmsMaterialTradeCompany/Name'],                    //    Name: data.Name()                    //}]);                }                // TODO : 어기서 데이터가 전체선택시와 단일선택시 어찌 바뀌는가...                popupVisible(false);            }        }        function handlePopupShowing() {            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()));            });        }        function handlePopupShown() {            if (initialized === false) {                gridView = $('#materialDataGridForSearch').dxDataGrid('instance');                $("#materialDataGridForSearch").dxDataGrid({                    paging: {                        pageSize: 14,                        enabled: false                    }                });                initialized = true;            }            gridView.clearSelection();            gridView.refresh();            searchView.show();        }        function handlePopupButtonSelect() {            var array = utils.datagrid.getSelectedRowsData(options.datagridId);            if (!_.isUndefined(onSelectedMaterials)) {                onSelectedMaterials(array);            }            popupVisible(false);        }        viewModel.handleSelectBoxChangeFirstClass = function (e) {            BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, facilityClasses[1]);            viewModel.dataModel.SecondClassId(null);            viewModel.dataModel.ThirdClassId(null);        };        viewModel.handleSelectBoxChangeSecondClass = function (e) {            BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, facilityClasses[2]);            viewModel.dataModel.ThirdClassId(null);        };        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 (e.value === 0) {                initializeSearchClasses(true);                return;            }            BWA.DataUtil.setArrayDataSourceFilter(MaterialCodeClassDataSource, 'ParentMaterialClassId', e.value, searchFacilityClasses[2], defaultSearchClassArray);        };        function initializeSearchClasses(onlyThird) {            if (onlyThird === undefined || onlyThird === false) {                searchFacilityClasses[1](defaultSearchClassArray.slice(0));                searchFacilityClassValues[1](0);            }            searchFacilityClasses[2](defaultSearchClassArray.slice(0));            searchFacilityClassValues[2](0);        }        function handlePopupButtonClose() {            popupVisible(false);        }        var toolbarItems = [            { location: 'before', text: '자재 선택' },            { location: 'after', widget: 'button', options: { text: $G('select'), icon: 'save', visible: isMultipleSelect, clickAction: handlePopupButtonSelect } },            { location: 'after', widget: 'button', options: { text: $G('close'), icon: 'close', clickAction: handlePopupButtonClose } }        ];        var popupOptions = {            width: '850px',            height: '600px',            visible: popupVisible,            closeOnOutsideClick: true,            showingAction: handlePopupShowing,            shownAction: handlePopupShown,            animation: window.utils.popup.createAnimation()        };        var searchView = BWA.Popup.SearchView.create({            parentPopupId: 'popupSearchMaterial',            parentPopupVisible: popupVisible,            searchItems: [                { id: 'MaterialCode' },                { id: 'Name' },//                { id: 'Standard' },                { id: 'FirstClassId', ignoreValue: 0, defaultValue: 0, value: searchFacilityClassValues[0], dataSource: searchFacilityClasses[0], handleChangedValue: handleFirstClassChangedValueInSearchView },                { id: 'SecondClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[1], dataSource: searchFacilityClasses[1], handleChangedValue: handleSecondClassChangedValueInSearchView },                { id: 'ThirdClassId', ignoreValue: 0, defaultValue: 0, withCheckId: 'FirstClassId', value: searchFacilityClassValues[2], dataSource: searchFacilityClasses[2] },            ],            handleInitializeUpdate: function () {            },            handleSearch: function (filter, searchItems) {                if (MenuPermission >= 4) {                    filter = [                        eq('SiteId', userInfo.SiteId()),                        and,                        [                            eq('BusinessFieldId', BWA.UserInfo.BusinessFieldId()),                            'or',                            eq('BusinessFieldId', 1)                        ]                    ].concat(filter)                }                else {                    filter = [                        eq('SiteId', userInfo.SiteId())                    ].concat(filter)                }                gridView.filter(filter);            }        });        viewModel.handleSecondClassChangedValueInSearchView = handleSecondClassChangedValueInSearchView;        viewModel.handleFirstClassChangedValueInSearchView = handleFirstClassChangedValueInSearchView;        viewModel.facilityClasses = facilityClasses;        viewModel.searchItems = searchView.searchItems;        return {            dataModel: dataViewModel,            dataSource: dataSource,            popupOptions: popupOptions,            toolbarItems: toolbarItems,            dataGridOptions: dataGridOptions,            searchView: searchView,            show: function () {                popupVisible(true);            }        };    };});
 |