vatModule.controller('vatGoodsMappingController', ['$scope', '$log', '$timeout', '$q', '$translate', 'loginContext', 'apiInterceptor', 'SweetAlert', 'vatSessionService', 'uiGridConstants', 'enums', 'vatReductionService', 'vatOperationLogService',
function ($scope, $log, $timeout, $q, $translate, loginContext, apiInterceptor, SweetAlert, vatSessionService, uiGridConstants, enums, vatReductionService, vatOperationLogService) {
    'use strict';
    $log.debug('vatGoodsMappingController.ctor()...');

    var isDouble = 0;
    var comment = vatSessionService.project.name + " " + vatSessionService.project.year + "年" + vatSessionService.month + "月";
    //写日志
    $scope.period = vatSessionService.month;
    $scope.moduleid = enums.vatModuleEnum.Import_GoodsMapping;
    var logDto = {
        ID: '',
        OperationName: '',
        ModuleID: $scope.moduleid,
        OperationObject: '',
        OperationType: '',
        OperationContent: '',
        OriginalState: '',
        UpdateState: '',
        CreatorID: vatSessionService.logUser.ID,
        Comment: comment,
        IP: '',
        Period: $scope.period,
    };

    $scope.mappingList = [];
    $scope.stdGoodsList = [
            { StdId: 1, StdName: $translate.instant('GP_TransportationService') },
            { StdId: 2, StdName: $translate.instant('GP_TelecomService') },
            { StdId: 3, StdName: $translate.instant('GP_BuildService') },
            { StdId: 4, StdName: $translate.instant('GP_EstateLeasingService') },
            { StdId: 5, StdName: $translate.instant('GP_LandUseRight') },
            { StdId: 6, StdName: $translate.instant('GP_FinancialService') },
            { StdId: 7, StdName: $translate.instant('GP_LifeService') },
            { StdId: 8, StdName: $translate.instant('GP_InvisibleCapital') },
            { StdId: 9, StdName: $translate.instant('GP_TangibleMovablesService') },
            { StdId: 10, StdName: $translate.instant('GP_GoodsAndRepairService') },
            { StdId: 11, StdName: $translate.instant('Other') }
    ];

    //匹配结果
    $scope.gridLeftOptions = {
        columns: [{ caption: $translate.instant('CustGoodsName'), dataField: "custGoodsName", alignment: 'left', },
              { caption: $translate.instant('StdGoodsName'), dataField: "stdGoodsName", alignment: 'left', }, ],
        bindingOptions: { "dataSource.store.data": "mappingList", },
        dataSource: { store: { type: "array", key: 'id' } },
        selection: { mode: "multiple", showCheckBoxesMode: "always", },
        hoverStateEnabled: true,
        scrolling: { mode: "virtual" },
        noDataText: $translate.instant('AccountVoucher_DataGrid_NoDataText')
        //remoteOperations: { sorting: true, paging: false }, 
        //onSelectionChanged: function (selectedItems) { 
        //    var data = selectedItems.selectedRowsData;
        //    $scope.selectMappIds = [];
        //    if (data.length > 0) {
        //        data.forEach(function (v) {
        //            $scope.selectMappIds.push(v.id);
        //        }); 
        //    }
        //}
    }

    //标准货物名称
    $scope.gridRightOptions = {
        columns: [{
            caption: $translate.instant('StdGoodsNameList'),
            dataField: "StdName",
            alignment: 'left',
        }],
        bindingOptions: {
            "dataSource.store.data": "stdGoodsList"
        },
        dataSource: {
            store: { type: "array", key: 'StdId' }
        },
        remoteOperations: { sorting: true, paging: false },
        hoverStateEnabled: true,

        onRowPrepared: function (e) {
            if (e.rowType == "header") {
                e.rowElement.css("display", 'none');
            }
        },
        onCellClick: function (e) {
            isDouble++;
            setTimeout(function () {
                if (isDouble == 2) {
                    if ($scope.hasEditPermission)
                    {
                        doGoodsMapping(e.value);
                    }                   
                }
                isDouble = 0;
            }, 500);
        }
    }
    var doGoodsMapping = function (value) {
        var dataGrid = $('#gridLeft').dxDataGrid("instance");
        if (dataGrid.getSelectedRowsData().length > 0) {
            var modifyList = [];
            var customerList = [];
            var stdList = [];
            var originalList = [];
            dataGrid.getSelectedRowsData().forEach(function (m) {
                stdList.push(m.stdGoodsName);
                originalList.push(m.custGoodsName + "-" + m.stdGoodsName);
                customerList.push(m.custGoodsName);
                var mapp = m;
                mapp.stdGoodsName = value;
                modifyList.push(mapp);
            });

            logDto.ID = PWC.newGuid();
            logDto.CreateTime = new Date();
            logDto.UpdateTime = new Date();
            if (PWC.isNullOrEmpty(value)) {
                //取消对应
                logDto.OperationObject = customerList.join(",");
                logDto.OperationContent = value;
                logDto.OperationName = $translate.instant('CancelMapping');
                logDto.OperationType = enums.vatLogOperationTypeEnum.GM_CancelMapping;
                logDto.OriginalState = originalList.join(",");
                logDto.UpdateState = customerList.join(",");
            }
            else {
                //手动对应
                logDto.OperationObject = customerList.join(",");
                logDto.OperationContent = stdList.join(",");
                logDto.OperationName = $translate.instant('HandleMapping');
                logDto.OperationType = enums.vatLogOperationTypeEnum.GM_ManualMapping;
                logDto.OriginalState = customerList.join(",");
                logDto.UpdateState = customerList.join(",") + "-" + value;
            }

            vatReductionService.updateGoodsMapping(modifyList).success(function (result) {
                if (result) {
                    vatOperationLogService.addOperationLog(logDto);

                    initGoodsMappingFromDB();
                    dataGrid.refresh();
                    dataGrid.clearSelection();
                }
            }).error(function () {
                SweetAlert.error($translate.instant('PleaseContactAdministrator'));
            });
        }
        else {
            SweetAlert.warning($translate.instant('SelectMappTips'));
        }
    }

    var cancelGoodsMapping = function () {
        doGoodsMapping("");
    }

    function initGoodsMappingFromDB() {
        vatReductionService.getGoodsMappingList().success(function (data) {
            if (data && data.length > 0) {
                $scope.mappingList = data;
            }
        }).error(function () {
            SweetAlert.error($translate.instant('PleaseContactAdministrator'));
        });
    }

    //日志
    $scope.showOperateLogPop = function () {
        $scope.isShowLog = true;
    };

    var getUserPermission = function () {

        var list = [];

        var code = constant.vatPermission.dataManage.goodsMapping.saveCode; 
        list.push(code);

        $scope.$root.checkUserOrganizationPermissionList(list).success(function (data) {
            $scope.hasEditPermission = data[code];
        });
    };

    (function initialize() {
        $log.debug('vatGoodsMappingController.ctor()...');
        getUserPermission();
        $scope.cancelGoodsMapping = cancelGoodsMapping;
        initGoodsMappingFromDB();

    })();
}
]);