BemsWebApplication.EquipManagement = function (params, viewInfo) {
    "use strict";

    var codeTypeDataSource = BemsWebApplication.db.createDataSource('FmsEquipmentCodeType', true, false, true),
        codeStateTypeDataSource = BemsWebApplication.db.createDataSource('FmsEquipmentCodeStateType', false, false, true),
        warehouseDataSource = BemsWebApplication.db.createDataSource('FmsMaterialWarehouse', true, false, true);

    var codeTypes = ko.observableArray(),
        codeStateTypes = ko.observableArray(),
        warehouses = ko.observableArray();

    var codeTypesForSearch = ko.observableArray(),
        codeStateTypesForSearch = ko.observableArray(),
        warehousesForSearch = ko.observableArray();

    var deferredForSearch = new $.Deferred();

    var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsEquipment', {

        dataSourceOptions: {
            select: [
                'SiteId',
                'EquipmentId',
                'Name',
                'EquipmentTypeId',
                'WarehouseId',
                'Unit',
                'Standard',
                'AddDate',
                'UpdateDate',
                'RegisterUserId',
                'SupplierName',
                'SupplierPhoneNo',
                'FmsEquipmentCodeType/Name',
                'CmUser/Name',
            ],
            expand: [
                'CmUser',
                'FmsEquipmentCodeType'
            ],
            extendOptions: {
                forceOriginalField: true,
            }
        },
        columns: [
            { dataField: 'Number', caption: $G('number'), width: '10%', alignment: 'center' },
            { dataField: 'Name', caption: $G('name'), width: '30%', alignment: 'center' },
            { dataField: 'FmsEquipmentCodeType/Name', caption: '분류', width: '20%', alignment: 'center' },
            { dataField: 'Standard', caption: '규격', width: '20%', alignment: 'center' },
            { caption: '보유수량', width: '20%', alignment: 'center', format: 'currency' }, //  dataField: 'CurrentStockCount', 
            { caption: '전체수량', width: '20%', alignment: 'center', format: 'currency' }, // 
            { dataField: 'Unit', caption: '단위', width: '20%', alignment: 'center' },
            { dataField: 'CmUser/Name', caption: '등록자', width: '20%', alignment: 'center' },
        ],
        sort: { field: "EquipmentId", desc: true },
        searchViewItems: [{ id: 'Name' }, { id: 'Name' }],
        popupWidth: 400,

        handleViewShowing: function (dataModel) {
            $.when(
                codeStateTypeDataSource.load(),
                codeTypeDataSource.load(),
                warehouseDataSource.load()
            ).done(function (codeStateTypeResult, codeTypeResult, warehouseResult) {

                codeStateTypes(codeStateTypeResult[0]);
                codeTypes(codeTypeResult[0]);
                warehouses(warehouseResult[0]);

                codeStateTypesForSearch($SearchView.createArrayOfSelectBox('EquipmentStateTypeId', codeStateTypes()));
                codeTypesForSearch($SearchView.createArrayOfSelectBox('EquipmentTypeId', codeTypes()));
                warehousesForSearch($SearchView.createArrayOfSelectBox('WarehouseId', warehouses()));

                deferredForSearch.resolve();
            });
        },

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

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

            //dataModel.CompanyName = $KoSet( dataModel.CompanyName, data.CmCompany_Name );

            popupVisible(true);
        },

        handlePopupShown: function (isEditMode, isNew, dataViewModel) {

            if (isNew) { // 신규등록인 경우 
                dataViewModel.AddDate($G.date(new Date()));
                dataViewModel.UpdateDate($G.date(new Date()));
                dataViewModel.RegisterUserId(BWA.UserInfo.UserId());
            }
        }
    });

    viewModel.codeTypes = codeTypes;
    viewModel.codeStateTypes = codeStateTypes;
    viewModel.warehouses = warehouses;

    return viewModel;
};