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)); }
public async Task <CalculateResult> CalculateFormula(CalculateOverdraftDIParams parameters) { OverdraftCalculationDIManager mgr = new OverdraftCalculationDIManager(); var res = await mgr.CalculateFormula(parameters, parameters.Formula); return(res); }
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); }
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); }
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); }
public async Task <ActionResult <CalculateResult> > CalculateFormula(CalculateOverdraftDIParams parameters) { CalculateResult res = await _service.CalculateFormula(parameters); return(Ok(res)); }
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); }); }
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); }