amount-check-manual-input.ctrl.js 7.65 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
invoiceModule.controller('amountCheckManualInputController', ['$scope', '$log', '$timeout', '$translate',
    'messagebox', 'vatOutputInvoiceManageService',
function ($scope, $log, $timeout, $translate, messagebox, vatOutputInvoiceManageService) {

    var initControls = function () {
        $scope.configOptions = {
            finalAmountOption: {
                width: "100%",
                //placeholder: $translate.instant("InputPlaceholder"),
                bindingOptions: {
                    value: 'editModel.finalAmount'
                },
                onFocusIn: function () {
                    if ($scope.editModel.finalAmount && !isNaN($scope.editModel.finalAmount.replace(/,/g, '')) && $scope.editModel.finalAmount != 'NaN') {
                        $scope.editModel.finalAmount = $scope.editModel.finalAmount.replace(/,/g, '');
                    }
                },
                onFocusOut: function () {
                    if (!isNaN($scope.editModel.finalAmount) && $scope.editModel.finalAmount != 'NaN') {
                        $scope.editModel.finalAmount = ($scope.editModel.finalAmount * 1).formatAmount(2);
                    }
                },
                onInitialized: function () {
                    if ($scope.editModel.finalAmount && !isNaN($scope.editModel.finalAmount) && $scope.editModel.finalAmount != 'NaN') {
                        $scope.editModel.finalAmount = ($scope.editModel.finalAmount * 1).formatAmount(2);
                    }
                }
            },
            reasonOption: $scope.reasonDataSource
        };

        $scope.validateOption = {};
        $scope.validateOption.finalAmountOption = {
            validationRules: [{
                type: "required",
                message: $translate.instant('FinalAmountRequired')
            }, {
                type: 'custom',
                validationCallback: $scope.checkFinalAmountCustom
            }]
        };
    };

    $scope.checkFinalAmountCustom = function (options) {
        if (isNaN(options.value.replace(/,/g, '')) || options.value == 'NaN') {
            options.rule.message = $translate.instant('FinalAmountShouldBeNumber');
            return false;
        } else if (options.value.replace(/,/g, '') * 1 <= 0 || options.value.replace(/,/g, '') * 1 >= $scope.invoiceQuota / 1.17) {
            options.rule.message = $translate.instant('FinalAmountRangeCheck');
            return false;
        } else {
            return true;
        }
    }

    //关闭弹窗口
    $scope.hidePopPanel = function () {
        $scope.$parent.isOpen = false;
        $scope.$dismiss({ $value: 'cancel' });
    };

    var tempValue = "";
    $scope.checkFinalAmountKeyUp = function () {
        if ($scope.isShowInput && isNaN($scope.editModel.finalAmount)) {
            $scope.editModel.finalAmount = tempValue;
            return;
        } else {
            tempValue = $scope.editModel.finalAmount;
        }
    };

    
    $scope.checkFinalAmountKeyPress = function () {
        if ($scope.isShowInput && isNaN($scope.editModel.finalAmount)) {
            $scope.editModel.finalAmount = tempValue;
            return;
        }
    };

    //保存
    $scope.saveManualInput = function () {
        var dxResult = DevExpress.validationEngine.validateGroup($('#finalAmountForm').dxValidationGroup("instance")).isValid;
        if (!dxResult) {
            return;
        }

        if (_.isEmpty($scope.editModel.reasonList)) {
            messagebox.warning('ReasonRequired');
            return;
        }

        var reasonList = _.chain($scope.editModel.reasonList).pairs().filter(function (x) {
            return x[1] === true;
        }).pluck('0').value();

        if (_.isEmpty(reasonList)) {
            messagebox.warning('ReasonRequired');
            return;
        }

        if (_.isEmpty($scope.editModel.evidenceFiles)) {
            messagebox.warning('EvidenceFilesRequired');
            return;
        }

        $scope.$parent.model.manualInput = {
            finalAmount: $scope.editModel.finalAmount.replace(/,/g, ''),
            reasonList: reasonList,
            evidenceFiles: $scope.editModel.evidenceFiles
        };
        
        if ($scope.isShowInput) {
            $scope.$parent.model.finalAmount = Number(Number($scope.editModel.finalAmount.replace(/,/g, '')).toFixed(2));
        } else {
            $scope.$parent.model.finalAmount = $scope.$parent.model.shipmentAmount;
        }
        if (_.isFunction($scope.refreshParent)) {
            $scope.refreshParent();
        }
        $scope.$parent.isOpen = false;
        $scope.$dismiss({ $value: 'cancel' });
    };

    $scope.$watch('$parent.$parent.$parent.uploadFileOption.files', function (newValue, oldValue) {
        if (newValue && newValue != oldValue) {
            $scope.editModel.evidenceFiles = $scope.$parent.$parent.$parent.uploadFileOption.files;
        }
    });

    //上传文件
    $scope.uploadFile = function () {
        $scope.$parent.$parent.$parent.uploadFileType = 'multiple';
        $scope.$parent.$parent.$parent.uploadFileOption = {
            title: 'Upload Evidence Document',
            uploadButtonText: 'Select Upload Files',
            files: $scope.editModel.evidenceFiles || []
        };
    }

    //删除证据文件
    $scope.deleteEvidenceFile = function (fileId) {
        var fileList = [fileId];
        vatOutputInvoiceManageService.deleteEvidenceFile(fileList).then(function () {
            $scope.$parent.$parent.$parent.uploadFileOption.files = _.filter($scope.$parent.$parent.$parent.uploadFileOption.files, function (item) {
                return item.data.fileID != fileId;
            });
        });
    }

    $scope.$watch('model', function (newVal, oldVal) {
        if (newVal.manualInput && !_.isEmpty(newVal.manualInput.reasonList)) {
            $scope.editModel.finalAmount = newVal.manualInput.finalAmount;
            $scope.editModel.reasonList = {};
            //for (var i = 0; i < newVal.manualInput.reasonList.length; i++) {
            //    //$scope.editModel.reasonList[newVal.manualInput.reasonList[i]] = true;
            //    $scope.editModel.selectedReasonId = newVal.manualInput.reasonList[0];
            //}
            $scope.editModel.selectedReasonId = newVal.manualInput.reasonList[0];
            $scope.editModel.evidenceFiles = newVal.manualInput.evidenceFiles;
            $scope.isShowInput = $scope.editModel.reasonList[$scope.configOptions.reasonOption[0].id] || $scope.editModel.reasonList[$scope.configOptions.reasonOption[2].id];
            //$scope.editModel.evidenceFiles = null;
        }
        else {
            $scope.editModel = {
                finalAmount: '',
                reasonList: {},
                evidenceFiles: null
            };
        }
    });

    $scope.isShowInput = false;
    $scope.toggleInput = function (reasonName, id) {
        for (var key in $scope.editModel.reasonList) {
            $scope.editModel.reasonList[key] = false;
        }
        $scope.editModel.reasonList[id] = true;
        $scope.isShowInput = $scope.editModel.reasonList[$scope.configOptions.reasonOption[0].id] || $scope.editModel.reasonList[$scope.configOptions.reasonOption[3].id];
    };

    (function initialize() {
        $log.debug('amountCheckManualInputController.ctor()...');
        $scope.editModel = {
            finalAmount: '',
            reasonList: {},
            evidenceFiles: null
        };

        vatOutputInvoiceManageService.getInvoiceQuota().then(function (data) {
            if (data && data.data && data.data.data) {
                $scope.invoiceQuota = data.data.data;
            } else {
                $scope.invoiceQuota = 10000000;
            }
        });

        initControls();
    })();
}]);