Пример #1
0
        public async Task <CalculateResult> CalculateFormula(CalculateOverdraftDIParams parameters)
        {
            OverdraftCalculationDIManager mgr = new OverdraftCalculationDIManager();
            var res = await mgr.CalculateFormula(parameters, parameters.Formula);

            return(res);
        }
Пример #2
0
        public async Task <OverdraftDI> CalculateOverdraft(CalculateOverdraftDIParams parameters, IMapper mapper)
        {
            OverdraftDI result = new OverdraftDI();
            OverdraftCalculationDIManager mgr = new OverdraftCalculationDIManager();
            var res = await mgr.CalculateAsync(parameters);

            var over = (res as CalculateOverdraftResult).OverdraftResult;

            mapper.Map(over, result);

            return(result);
        }
Пример #3
0
        public async Task TM_CalculateByOverdraftDI()
        {
            Guid company    = Guid.NewGuid();
            Guid instanceID = Guid.NewGuid();
            Guid userID     = Guid.NewGuid();

            //Fill unnecesary data
            var overdraftDIManager         = new OverdraftCalculationDIManager();
            var calculateOverdraftDIParams = new CalculateOverdraftDIParams();

            calculateOverdraftDIParams.IdentityWorkID   = company;
            calculateOverdraftDIParams.InstanceID       = instanceID;
            calculateOverdraftDIParams.UserID           = userID;
            calculateOverdraftDIParams.ResetCalculation = true;

            //Fill data necesary for the calculation
            calculateOverdraftDIParams.OverdraftDI.OverdraftStatus                              = OverdraftStatus.None;
            calculateOverdraftDIParams.OverdraftDI.OverdraftType                                = OverdraftType.Ordinary;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.FullName                          = "Hector Omar Ramirez Mendez";
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.ContributionBase                  = BaseQuotation.Fixed;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.DailySalary                       = 372M;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SalaryZone                        = SalaryZone.ZoneA;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SBCFixedPart                      = 390.34M;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SBCVariablePart                   = 0;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SBCMax25UMA                       = 390.34M;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SettlementSalaryBase              = 0M;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.WorkshiftDI.Hours                 = 8.0;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.InitialDate                   = new DateTime(2020, 5, 1);
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.FinalDate                     = new DateTime(2020, 5, 15);
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PaymentDays                   = 15M;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodBimonthlyIMSS           = PeriodBimonthlyIMSS.Initial;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodFiscalYear              = PeriodFiscalYear.None;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodMonth                   = PeriodMonth.Initial;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.SeventhDayPosition            = "-1";
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.SeventhDays                   = 0;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodDI.FiscalYear           = 2020;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodDI.FortnightPaymentDays = AdjustmentPay_16Days_Febrary.PayPaymentDays;

            //Add concepts  / details
            var concepts = new Dictionary <int, InternalConceptCheck>()
            {
                //Percepciones
                //Sueldo
                {
                    1, new InternalConceptCheck(ConceptType.SalaryPayment,
                                                formulaTotal: "IIF(VPeriodoDeVacaciones , 0 ,(VDiasDerechoSueldoAnterior * VSalDiarioAnt) +(VDiasDerechoSueldoVigente * VSalDiarioVigente) - VImpRetardos) + VPago_SueldoFin +(DiasDescansoVacPeriodoCompleto(_0) * VSalDiarioVigente) + 20")
                    {
                        ExpectedResult = 5580M + 20M
                    }
                },
                //Séptimo día
                {
                    3, new InternalConceptCheck(ConceptType.SalaryPayment)
                    {
                        ExpectedResult = 0M
                    }
                },

                //Deducciones
                //RET. INV. Y VIDA
                {
                    5, new InternalConceptCheck(ConceptType.DeductionPayment)
                    {
                        ExpectedResult = 36.59M
                    }
                },
                //RET. CESANTIA
                {
                    6, new InternalConceptCheck(ConceptType.DeductionPayment)
                    {
                        ExpectedResult = 65.87M
                    }
                },
            };

            //Fill
            concepts.ForEach(concept =>
            {
                var overdrafDetailDI = new OverdraftDetailDI();
                overdrafDetailDI.ConceptPaymentDI.Code        = concept.Key;
                overdrafDetailDI.ConceptPaymentDI.ConceptType = concept.Value.ConceptPaymentDI.ConceptType;
                if (!String.IsNullOrEmpty(concept.Value.ConceptPaymentDI.FormulaTotal))
                {
                    overdrafDetailDI.ConceptPaymentDI.FormulaTotal = concept.Value.ConceptPaymentDI.FormulaTotal;
                }

                //add to list
                calculateOverdraftDIParams.OverdraftDI.OverdraftDetailDIs.Add(overdrafDetailDI);
            });

            var json = JsonConvert.SerializeObject(calculateOverdraftDIParams);

            //Do the calculation
            var response = await overdraftDIManager.CalculateAsync(calculateOverdraftDIParams) as CalculateOverdraftResult;

            //Asserts
            Assert.True(response.OverdraftResult != null);

            //Multiple Validations
            concepts.ForEach(concept =>
            {
                var conceptApplied = response.OverdraftResult.OverdraftDetails.FirstOrDefault(p =>
                                                                                              p.ConceptPayment.Code == concept.Key &&
                                                                                              p.ConceptPayment.ConceptType == concept.Value.ConceptPaymentDI.ConceptType).Amount;
                Assert.True(conceptApplied == concept.Value.ExpectedResult);
            });
        }
Пример #4
0
        public async Task TM_CalculateByOverdraftDIByFormula()
        {
            Guid company    = Guid.NewGuid();
            Guid instanceID = Guid.NewGuid();
            Guid userID     = Guid.NewGuid();

            //Fill unnecesary data
            var overdraftDIManager         = new OverdraftCalculationDIManager();
            var calculateOverdraftDIParams = new CalculateOverdraftDIParams();

            calculateOverdraftDIParams.IdentityWorkID   = company;
            calculateOverdraftDIParams.InstanceID       = instanceID;
            calculateOverdraftDIParams.UserID           = userID;
            calculateOverdraftDIParams.ResetCalculation = true;

            //Fill data necesary for the calculation
            calculateOverdraftDIParams.OverdraftDI.OverdraftStatus                              = OverdraftStatus.None;
            calculateOverdraftDIParams.OverdraftDI.OverdraftType                                = OverdraftType.Ordinary;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.FullName                          = "Hector Omar Ramirez Mendez";
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.ContributionBase                  = BaseQuotation.Fixed;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.DailySalary                       = 372M;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SalaryZone                        = SalaryZone.ZoneA;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SBCFixedPart                      = 390.34M;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SBCVariablePart                   = 0;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SBCMax25UMA                       = 390.34M;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.SettlementSalaryBase              = 0M;
            calculateOverdraftDIParams.OverdraftDI.EmployeeDI.WorkshiftDI.Hours                 = 8.0;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.InitialDate                   = new DateTime(2020, 5, 1);
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.FinalDate                     = new DateTime(2020, 5, 15);
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PaymentDays                   = 15M;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodBimonthlyIMSS           = PeriodBimonthlyIMSS.Initial;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodFiscalYear              = PeriodFiscalYear.None;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodMonth                   = PeriodMonth.Initial;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.SeventhDayPosition            = "-1";
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.SeventhDays                   = 0;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodDI.FiscalYear           = 2020;
            calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodDI.FortnightPaymentDays = AdjustmentPay_16Days_Febrary.PayPaymentDays;

            //Add concepts  / details
            var concepts = new Dictionary <int, InternalConceptCheck>()
            {
                //Percepciones
                //Sueldo
                {
                    1, new InternalConceptCheck(ConceptType.SalaryPayment)
                },
                //Séptimo día
                {
                    3, new InternalConceptCheck(ConceptType.SalaryPayment)
                },

                //Deducciones
                //RET. INV. Y VIDA
                {
                    5, new InternalConceptCheck(ConceptType.DeductionPayment)
                },
                //RET. CESANTIA
                {
                    6, new InternalConceptCheck(ConceptType.DeductionPayment)
                },
            };

            //Fill
            concepts.ForEach(concept =>
            {
                var overdrafDetailDI = new OverdraftDetailDI();
                overdrafDetailDI.ConceptPaymentDI.Code        = concept.Key;
                overdrafDetailDI.ConceptPaymentDI.ConceptType = concept.Value.ConceptPaymentDI.ConceptType;
                if (!String.IsNullOrEmpty(concept.Value.ConceptPaymentDI.FormulaTotal))
                {
                    overdrafDetailDI.ConceptPaymentDI.FormulaTotal = concept.Value.ConceptPaymentDI.FormulaTotal;
                }

                //add to list
                calculateOverdraftDIParams.OverdraftDI.OverdraftDetailDIs.Add(overdrafDetailDI);
            });

            //Asserts
            var response = await overdraftDIManager.CalculateFormula(calculateOverdraftDIParams, "VDiasIMSSVigente");

            Assert.True(response.Result == 15);

            var salary = await overdraftDIManager.CalculateFormula(calculateOverdraftDIParams, "Sueldo + 20");

            Assert.True(salary.Result == 5600M);
        }