/// <summary>
        /// Calculation generic
        /// </summary>
        /// <param name="calculateParams"></param>
        /// <returns></returns>
        public async Task <ICalculateResult> CalculateAsync(ICalculateParams calculateParams)
        {
            //result instance
            var calculateGenericResult = new CalculateGenericResult();
            var genericParams          = calculateParams as CalculateGenericParams;

            var calculateOverdraftParams = new CalculateOverdraftParams()
            {
                DeleteAccumulates = true,
                SaveOverdraft     = false,
                IdentityWorkID    = genericParams.IdentityWorkID,
                InstanceID        = genericParams.InstanceID,
                OverdraftID       = genericParams.OverdraftID.Value,
                ResetCalculation  = false,
            };

            var overdraftCalculationManager = new OverdraftCalculationManager();
            await overdraftCalculationManager.CalculateAsync(calculateOverdraftParams);

            var calculateResult = overdraftCalculationManager.CalculateFormula(genericParams.Formula);

            calculateGenericResult.Result             = calculateResult.Result;
            calculateGenericResult.ResultText         = calculateResult.ResultText;
            calculateGenericResult.CalculateArguments = calculateResult.CalculateArguments;

            return(calculateGenericResult);
        }
Ejemplo n.º 2
0
        public async Task <CalculateOverdraftResult> CalculateOverdraftAsync(CalculateOverdraftParams calculateOverdraftParams)
        {
            ICalculationManager calculationManager = new OverdraftCalculationManager();
            var calculationResult = await calculationManager.CalculateAsync(calculateOverdraftParams) as CalculateOverdraftResult;

            return(calculationResult);
        }
Ejemplo n.º 3
0
 public async Task CalculationFireAndForgetByPeriodIdsAsync(CalculationFireAndForgetByPeriodParams calculationFireAndForgetByPeriodParams)
 {
     var calculationManager = new OverdraftCalculationManager();
     await calculationManager.CalculationFireAndForgetByPeriodIdsAsync(
         calculationFireAndForgetByPeriodParams.PeriodIds,
         calculationFireAndForgetByPeriodParams.IdentityWorkID,
         calculationFireAndForgetByPeriodParams.InstanceID,
         calculationFireAndForgetByPeriodParams.UserID);
 }
        private async Task <Overdraft> Calculate(Overdraft actualOverdraft, Guid identityWorkID, Guid instanceID, Guid user)
        {
            var mgr    = new OverdraftCalculationManager();
            var result = await mgr.CalculateAsync(new CalculateOverdraftParams()
            {
                IdentityWorkID    = identityWorkID,
                InstanceID        = instanceID,
                DeleteAccumulates = false,
                OverdraftID       = actualOverdraft.ID,
                ResetCalculation  = false,
                UserID            = user
            });

            return((result as CalculateOverdraftResult).OverdraftResult);
        }
Ejemplo n.º 5
0
        public async Task TM_229_()
        {
            using var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);

            //Arrange
            var identityWorkId = Guid.NewGuid();
            var instanceID     = Guid.NewGuid();

            var diarySalary = 250M;
            var fixedSBC    = 261.30M;

            //creates overdraft
            var overdraft = await new PayrollStampingManagerUT().CreateRealOverdraftAsync(
                identityWorkId, instanceID, diarySalary, fixedSBC);

            ICalculateParams calculateByOverdraftParams = new Schema.Calculation.CalculateOverdraftParams()
            {
                OverdraftID      = overdraft.ID,
                IdentityWorkID   = identityWorkId,
                InstanceID       = instanceID,
                ResetCalculation = true,
                UserID           = Guid.NewGuid()
            };

            //Act
            ICalculationManager overdraftCalculationManager = new OverdraftCalculationManager();
            var calculateResult = await overdraftCalculationManager.CalculateAsync(calculateByOverdraftParams);

            var calculateOverdraftResult = calculateResult as CalculateOverdraftResult;
            var details = calculateOverdraftResult.OverdraftResult.OverdraftDetails;

            //Asserts
            //Ret. Inv. Y Vida - Deducción 5
            var retInvYVida = details.FirstOrDefault(p =>
                                                     p.ConceptPayment.Code == 5 &&
                                                     p.ConceptPayment.ConceptType == ConceptType.DeductionPayment);

            Assert.True(retInvYVida.Amount == 24.5M);

            //Ret. Cesantia - Deduccion 6
            var retCesantia = details.FirstOrDefault(p =>
                                                     p.ConceptPayment.Code == 6 &&
                                                     p.ConceptPayment.ConceptType == ConceptType.DeductionPayment);

            Assert.True(retCesantia.Amount == 44.09M);
        }
Ejemplo n.º 6
0
        public async Task <CalculateResult> CalculateFormula(ICalculateParams calculateParams, string formula)
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            //result instance
            var calculateOverdraftDIParams = calculateParams as CalculateOverdraftDIParams;

            //Functions params // Para inyectarle a las formulas los datos necesarios para el calculo (1 sola llamada a BD)
            var dataResponse = await GetDataAsync(
                calculateOverdraftDIParams.InstanceID,
                calculateOverdraftDIParams.IdentityWorkID,
                calculateOverdraftDIParams.UserID);

            //Fill necesary data to calculate
            dataResponse = await FillDataAsync(calculateOverdraftDIParams, dataResponse);

            //Poner en 0 todos los amounts / previous calculation
            dataResponse.Overdraft.OverdraftDetails.ForEach(p =>
            {
                p.Taxed      = 0M;
                p.Exempt     = 0M;
                p.IMSSTaxed  = 0M;
                p.IMSSExempt = 0M;

                if (calculateOverdraftDIParams.ResetCalculation)
                {
                    p.IsAmount1CapturedByUser     = false;
                    p.IsAmount2CapturedByUser     = false;
                    p.IsAmount3CapturedByUser     = false;
                    p.IsAmount4CapturedByUser     = false;
                    p.IsTotalAmountCapturedByUser = false;
                    p.IsValueCapturedByUser       = false;
                    p.Value  = 0M;
                    p.Amount = 0M;
                }
            });

            var calculateOverdraftParams = new CalculateOverdraftParams();

            calculateOverdraftParams.DeleteAccumulates = false;
            calculateOverdraftParams.IdentityWorkID    = calculateOverdraftDIParams.IdentityWorkID;
            calculateOverdraftParams.InstanceID        = calculateOverdraftDIParams.InstanceID;
            calculateOverdraftParams.OverdraftID       = dataResponse.Overdraft.ID;
            calculateOverdraftParams.ResetCalculation  = true;
            calculateOverdraftParams.SaveOverdraft     = false;
            calculateOverdraftParams.UserID            = calculateOverdraftDIParams.UserID;

            FunctionParams functionParams = new FunctionParams();

            functionParams.CalculationBaseResult = dataResponse;
            functionParams.IdentityWorkID        = calculateOverdraftParams.IdentityWorkID;
            functionParams.InstanceID            = calculateOverdraftParams.InstanceID;

            //overdraftDetails - All Perceptions, Deductions and Obligations
            List <AccumulatedEmployee> accumulatedEmployees = dataResponse.AccumulatedEmployees;
            var overdraftCalculationManager = new OverdraftCalculationManager();

            //Initializate data, arguments, and functions
            overdraftCalculationManager.Initializate(functionParams);

            //Perceptions
            (Overdraft overdraft, List <AccumulatedEmployee> employeeAccumulates) = await overdraftCalculationManager.CalculateByConceptAsync(dataResponse, ConceptType.SalaryPayment,
                                                                                                                                              calculateOverdraftParams, null);

            accumulatedEmployees   = employeeAccumulates;
            dataResponse.Overdraft = overdraft;

            //Deductions
            (overdraft, employeeAccumulates) = await overdraftCalculationManager.CalculateByConceptAsync(dataResponse, ConceptType.DeductionPayment,
                                                                                                         calculateOverdraftParams, new ConcurrentBag <AccumulatedEmployee>(accumulatedEmployees));

            accumulatedEmployees   = employeeAccumulates;
            dataResponse.Overdraft = overdraft;

            //Liabilities
            //Liability
            dataResponse.IsLiability         = true;
            (overdraft, employeeAccumulates) = await overdraftCalculationManager.CalculateByConceptAsync(dataResponse, ConceptType.LiabilityPayment,
                                                                                                         calculateOverdraftParams, new ConcurrentBag <AccumulatedEmployee>(accumulatedEmployees));

            dataResponse.Overdraft   = overdraft;
            dataResponse.IsLiability = false;

            //Ajuste al neto
            await overdraftCalculationManager.amountAdjustmentAsync(dataResponse.Overdraft, calculateOverdraftParams, dataResponse);

            var calculareResult = overdraftCalculationManager.CalculateFormula(formula);

            stopwatch.Stop();
            Trace.WriteLine($"Time elapsed in the overdraft di calculation {stopwatch.Elapsed}");

            return(calculareResult);
        }