BemsWebApplication.EquipReturnInfo = 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, 'FmsEquipmentHistory', {

        dataSourceOptions: {
            select: [
                'SiteId',
                'EquipmentHistoryId',
                'EquipmentId',
                'TotalStockCount',
                'CurrentStockCount',
                'RentCount',
                'CurrentRentCount',
                'ReturnCount',
                'LossCount',
                'StoredCount',
                'EquipmentRentId',
                'EquipmentStateTypeId',
                'AddDate',
                'UpdateDate',
                'FmsEquipment/WarehouseId',
                'FmsEquipment/Unit',
                'FmsEquipment/Standard',
                'FmsEquipment/Name',
                'FmsEquipmentCodeStateType/Name', 
                'FmsEquipment/Standard',
                'FmsEquipmentRentInfo/Title',
                'FmsEquipmentRentInfo/CmUser1/Name', // 대여자
                'FmsEquipmentRentInfo/RentDate',
                'FmsEquipmentRentInfo/ReturnDueDate'
            ],
            expand: [
                'FmsEquipment',
                'FmsEquipmentRentInfo',
                'FmsEquipmentRentInfo/CmUser1',
                'FmsEquipmentCodeStateType'
            ],
            extendOptions: {
                forceOriginalField: true,
            },
            filter: [
                ['SiteId', '=', BWA.UserInfo.SiteId()] ,
                //'and',
                //['EquipmentStateTypeId', '=', 2],
                'and',
                ['IsReturned', '=', false]
            ]
        },

        columns: [
            { dataField: 'Number', caption: $G('number'), width: '10%', alignment: 'center' },
            { dataField: 'EquipmentRentId', caption: '대여고유번호', width: '15%', alignment: 'center', sortOrder: 'desc' },
            { dataField: 'FmsEquipment/Name', caption: $G('name'), width: '30%', alignment: 'center' },
            // { dataField: 'FmsEquipmentCodeStateType/Name', caption: '상태', width: '20%', alignment: 'center' },
            { dataField: 'FmsEquipment/Standard', caption: '규격', width: '15%', alignment: 'center' },
            { dataField: 'FmsEquipment/Unit', caption: '단위', width: '15%', alignment: 'center' },
            { dataField: 'CurrentRentCount', caption: '대여수량', width: '10%', alignment: 'center', format: 'currency' },
            //{ dataField: 'CurrentStockCount', caption: '보유수량', width: '10%', alignment: 'center' },
            //{ dataField: 'TotalStockCount', caption: '전체수량', width: '10%', alignment: 'center' },
            { dataField: 'FmsEquipmentRentInfo/CmUser1/Name', caption: '대여자', width: '20%', alignment: 'center' },
              {
                  dataField: 'FmsEquipmentRentInfo/RentDate', caption: '대여일', width: '20%', alignment: 'center',
                  customizeText: function (cellInfo) {
                      return $G.date(cellInfo.value);
                  }
              },
            {
                dataField: 'FmsEquipmentRentInfo/ReturnDueDate', caption: '반납예정일', width: '20%', alignment: 'center',
                customizeText: function (cellInfo) {
                    return $G.date(cellInfo.value);
                }
            },
        ],
        sort: { field: "EquipmentRentId", desc: true },
        searchViewItems: [{ id: 'Name' }, { id: 'Name' }],
        popupWidth: 740,

        handleViewShowing: function (dataModel) {

            codeStateTypeDataSource.filter([
                ['EquipmentStateTypeId', '>', 2], // 입고,출고 유형제외
            ]);

            $.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.EquipmentName = $KoSet(dataModel.EquipmentName, data['FmsEquipment/Name']());
            dataModel.Standard = $KoSet(dataModel.Standard, data['FmsEquipment/Standard']());
            dataModel.Title = $KoSet(dataModel.Title, data['FmsEquipmentRentInfo/Title']());

            if (data['FmsEquipmentRentInfo/CmUser1/Name'] !== undefined) {
                dataModel.RentUserName = $KoSet(dataModel.RentUserName, data['FmsEquipmentRentInfo/CmUser1/Name']());
            }

            dataModel.RentDate = $KoSet(dataModel.RentDate, data['FmsEquipmentRentInfo/RentDate']());
            dataModel.ReturnDueDate = $KoSet(dataModel.ReturnDueDate, data['FmsEquipmentRentInfo/ReturnDueDate']());

            //dataModel.NewReturnCount(0);
            //dataModel.NewLossCount(0);

            popupVisible(true);
        },

        handlePopupShowing: function (isNewInPopup, dataViewModel) {
            // 저장 버튼 
            viewModel.toolbarItems[4].options.clickAction = this.handlePopupButtonSave;
            // Admin 계정만 활성화 되는 이상 현상으로 인한 코드 
            viewModel.toolbarItems[4].options.disabled(false);
        },

        handlePopupButtonSave: function () {
            var dataViewModel = viewModel.dataModel;

            if (dataViewModel.CurrentRentCount() < dataViewModel.LossCount() + dataViewModel.ReturnCount()) {
                utils.toast.show('반납 혹은 손실을 확인하시기 바랍니다.', 'warning');
                return;
            }

            var postData = dataViewModel.toJS();
            BWA.api.post('FmsEquipmentHistory/AddHistory', postData).done(
                function () {
                    viewModel.gridView().refresh();
                    utils.toast.show($G('successDatabaseProcessMsg'));
                    viewModel.popupVisible(false);
                });
        },

        handlePopupShown: function (isEditMode, isNew, dataViewModel) {
            setEditMode();
            dataViewModel.ReturnCount(0);
            dataViewModel.LossCount(0);
        }
    });

    function setEditMode() {
        viewModel.visibleEditButton(false);
        viewModel.visibleDeleteButton(false);
        viewModel.viewModeInPopup(false);
        viewModel.isEditModeInPopup(true);
    }

    viewModel.dataModel.NewReturnCount = ko.observable(0);
    viewModel.dataModel.NewLossCount = ko.observable(0);

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

    return viewModel;
};