Exemplo n.º 1
0
        public async Task <ActionResult <OverdraftDI> > CalculateOverdraft(CalculateOverdraftDIParams parameters)
        {
            OverdraftDI res = await _service.CalculateOverdraft(parameters, _mapper);

            res.OverdraftDetailDIs = res.OverdraftDetailDIs.OrderBy(p => (int)p.ConceptPaymentDI.ConceptType).ThenBy(p => p.ConceptPaymentDI.Code).ToList();
            return(Ok(res));
        }
Exemplo n.º 2
0
        public async Task <CalculateResult> CalculateFormula(CalculateOverdraftDIParams parameters)
        {
            OverdraftCalculationDIManager mgr = new OverdraftCalculationDIManager();
            var res = await mgr.CalculateFormula(parameters, parameters.Formula);

            return(res);
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        public List <OverdraftDetailDI> GetDefaultDetails(Guid company, Guid instanceID, Guid userID,
                                                          CalculateOverdraftDIParams calculateOverdraftDIParams)
        {
            var details = new List <OverdraftDetailDI>();
            var config  = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <ConceptPayment, ConceptPaymentDI>();
            });

            var _mapper = config.CreateMapper();

            var memoryManager     = new MemoryStorageContext();
            var accumulatedsTypes = memoryManager.GetDefaultAccumulatedType(company, instanceID, userID);

            (var concepts, var lstRelationships) = memoryManager.GetDefaultConcept <ConceptPayment>(company, instanceID, userID, accumulatedsTypes);
            concepts.Where(p => p.GlobalAutomatic).ToList().ForEach(concept =>
            {
                var overdrafDetailDI = new OverdraftDetailDI();
                overdrafDetailDI.ConceptPaymentDI = _mapper.Map <ConceptPayment, ConceptPaymentDI>(concept as ConceptPayment);
                details.Add(overdrafDetailDI);
            });

            return(details);
        }
Exemplo n.º 5
0
        private async Task <CalculationBaseResult> FillDataAsync(CalculateOverdraftDIParams calculateOverdraftDIParams,
                                                                 CalculationBaseResult dataResponse)
        {
            dataResponse.Overdraft = _mapper.Map <OverdraftDI, Overdraft>(calculateOverdraftDIParams.OverdraftDI);
            dataResponse.Overdraft.PeriodDetail        = _mapper.Map <PeriodDetailDI, PeriodDetail>(calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI);
            dataResponse.Overdraft.PeriodDetail.Period = _mapper.Map <PeriodDI, Period>(calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodDI);
            dataResponse.Overdraft.Employee            = _mapper.Map <EmployeeDI, Employee>(calculateOverdraftDIParams.OverdraftDI.EmployeeDI);
            dataResponse.Overdraft.Employee.Workshift  = _mapper.Map <WorkshiftDI, Workshift>(calculateOverdraftDIParams.OverdraftDI.EmployeeDI.WorkshiftDI);
            dataResponse.Overdraft.Employee.HistoricEmployeeSalaryAdjustments = new List <HistoricEmployeeSalaryAdjustment>();
            dataResponse.Overdraft.Employee.HistoricEmployeeSBCAdjustments    = new List <HistoricEmployeeSBCAdjustment>();

            if (calculateOverdraftDIParams.OverdraftDI.OverdraftDetailDIs.Any())
            {
                for (int i = 0; i < calculateOverdraftDIParams.OverdraftDI.OverdraftDetailDIs.Count; i++)
                {
                    var detailDI        = calculateOverdraftDIParams.OverdraftDI.OverdraftDetailDIs[i];
                    var overdraftDetail = _mapper.Map <OverdraftDetailDI, OverdraftDetail>(detailDI);
                    overdraftDetail.ConceptPayment = fixFormulasConceptPayment(_mapper.Map <ConceptPaymentDI, ConceptPayment>(detailDI.ConceptPaymentDI), dataResponse);

                    dataResponse.Overdraft.OverdraftDetails.Add(overdraftDetail);
                }
            }
            else
            {
                dataResponse.Overdraft.OverdraftDetails = new List <OverdraftDetail>();
                dataResponse.ConceptPayments.Where(p => p.GlobalAutomatic).ForEach(p =>
                {
                    var overdraftDetail = new OverdraftDetail()
                    {
                        ConceptPayment   = p,
                        ConceptPaymentID = p.ID,
                        ID = Guid.NewGuid()
                    };
                    dataResponse.Overdraft.OverdraftDetails.Add(overdraftDetail);
                });
            }

            //Neccesary
            dataResponse.AccumulatedEmployees = new List <AccumulatedEmployee>();
            dataResponse.AccumulatedTypes.ForEach(p =>
            {
                var accumulatedEmployee = new AccumulatedEmployee()
                {
                    AccumulatedTypeID           = p.ID,
                    AccumulatedType             = p,
                    Employee                    = dataResponse.Overdraft.Employee,
                    InitialExerciseAmount       = 0,
                    PreviousExerciseAccumulated = 0,
                    ExerciseFiscalYear          = calculateOverdraftDIParams.OverdraftDI.PeriodDetailDI.PeriodDI.FiscalYear,
                };

                dataResponse.AccumulatedEmployees.Add(accumulatedEmployee);
            });


            //Other things
            dataResponse.FonacotMovements             = new List <FonacotMovement>();
            dataResponse.HistoricAccumulatedEmployees = new List <HistoricAccumulatedEmployee>();
            dataResponse.Incidents          = new List <Incident>();
            dataResponse.InfonavitMovements = new List <InfonavitMovement>();
            dataResponse.Inhabilities       = new List <Inhability>();
            dataResponse.Vacations          = new List <Vacation>();

            return(dataResponse);
        }
Exemplo n.º 6
0
        public async Task <ActionResult <CalculateResult> > CalculateFormula(CalculateOverdraftDIParams parameters)
        {
            CalculateResult res = await _service.CalculateFormula(parameters);

            return(Ok(res));
        }
Exemplo n.º 7
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);
            });
        }
Exemplo n.º 8
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);
        }