public async Task <JsonResult> GetPeriods(PaymentPeriodicity paymentPeriodicity, DateTime initialDate, Int32 periodTotalDays) { var fixToMonth = paymentPeriodicity != PaymentPeriodicity.Weekly; var result = new PeriodSimulator().GetPeriodDetails(paymentPeriodicity, initialDate, periodTotalDays, fixToMonth); var periods = from r in result orderby r.Number select new { id = r.Number, description = r.InitialDate.ToString("dd/MMM/yyyy", new CultureInfo("es-mx")).Replace(".", "") }; return(await Task.FromResult(Json(periods))); }
public static string GetTraduction(PaymentPeriodicity paymentPeriodicity) { _dictionary.TryGetValue(paymentPeriodicity, out string result); return(result); }
public async Task <List <T> > CreateDefaultAsync <T>(Guid identityWorkId, Guid instanceId, DateTime initialDate, DateTime finalDate, PaymentPeriodicity paymentPeriodicity) where T : BaseEntity { var periodType = (await new PeriodTypeUT().CreateDefaultAsync <PeriodType> (identityWorkId, instanceId, paymentPeriodicity)).FirstOrDefault(); var Periods = new List <Period>(); Periods.Add(new Period() { ID = Guid.NewGuid(), Active = true, company = identityWorkId, Timestamp = DateTime.UtcNow, InstanceID = instanceId, Description = $"Periodo del Ejercicio {DateTime.Now.Year}", CreationDate = DateTime.Now, Name = $"{DateTime.Now.Year}", InitialDate = initialDate, FinalDate = initialDate.AddYears(1), FiscalYear = DateTime.Now.Year, IsActualFiscalYear = true, IsFiscalYearClosed = false, PeriodTypeID = periodType.ID, ExtraordinaryPeriod = periodType.ExtraordinaryPeriod, FortnightPaymentDays = periodType.FortnightPaymentDays, MonthCalendarFixed = periodType.MonthCalendarFixed, PaymentDayPosition = periodType.PaymentDayPosition, PaymentDays = periodType.PaymentDays, PaymentPeriodicity = periodType.PaymentPeriodicity, PeriodTotalDays = periodType.PeriodTotalDays, StatusID = 1 }); var middlewareManager = new MiddlewareManager <Period>(new BaseRecordManager <Period>(), new PeriodValidator()); await middlewareManager.CreateAsync(Periods, identityWorkId); return(Periods as List <T>); }
public List <PeriodDetail> GetPeriodDetails(PaymentPeriodicity paymentPeriodicity, DateTime initialDate, int periodTotalDays, bool fixToMonthCalendar) { var lstPeriodDetail = new List <PeriodDetail>(); var finalDate = initialDate.AddYears(1); //calculates the difference betweent initial and final date to the proximous final year //si la fecha inicial es más próxima al final del año inicial que el inicio del siguiente año, tomamos el año final if ((new DateTime(initialDate.Year, 12, 31) - initialDate) <= (finalDate - new DateTime(finalDate.Year, 1, 1))) { finalDate = new DateTime(finalDate.Year, 12, 31); } else { finalDate = new DateTime(initialDate.Year, 12, 31); } if (paymentPeriodicity == PaymentPeriodicity.Biweekly || paymentPeriodicity == PaymentPeriodicity.Monthly || paymentPeriodicity == PaymentPeriodicity.Weekly) { var paymentDays = periodTotalDays - 1; var actualNumber = 0; var initialDay = initialDate.Date; var finalDay = finalDate.Date; var isFirstPeriodDetail = true; var company = Guid.NewGuid(); var instanceId = Guid.NewGuid(); var userId = Guid.NewGuid(); var period = new Period() { Active = true, company = company, CreationDate = DateTime.Now, DeleteDate = null, Description = "Periodo dumyy", ExtraordinaryPeriod = false, FinalDate = finalDate, FiscalYear = finalDate.Year, FortnightPaymentDays = AdjustmentPay_16Days_Febrary.PayCalendarDays, ID = Guid.NewGuid(), IdentityID = userId, InstanceID = instanceId, InitialDate = initialDate, IsActualFiscalYear = true, IsFiscalYearClosed = false, MonthCalendarFixed = fixToMonthCalendar, PaymentPeriodicity = paymentPeriodicity, StatusID = 1, PeriodTotalDays = periodTotalDays, }; while (initialDay < finalDay) { var finalTempDate = initialDay.AddDays((double)paymentDays); int previousBiweeklyMonth = 0; bool isInitialMonth = false; bool isFinalMonth = false; var nextPeriodInitial = initialDay.AddDays((double)paymentDays); var nextPeriodFinal = nextPeriodInitial.AddDays((double)paymentDays); //if the last period is greater than final day of exercise if (finalTempDate > finalDay) { break; } //MonthCalendarFixed if (fixToMonthCalendar) { if (finalTempDate.Month > initialDay.Month) { finalTempDate = new DateTime(initialDay.Year, initialDay.Month, lastDayOfMonth(initialDay.Year, initialDay.Month)).Date; } if (nextPeriodInitial.Month != nextPeriodFinal.Month && (lastDayOfMonth(initialDay.Year, initialDay.Month) - nextPeriodInitial.Day) < paymentDays && finalTempDate.Month != 2) { finalTempDate = new DateTime(initialDay.Year, initialDay.Month, lastDayOfMonth(initialDay.Year, initialDay.Month)).Date; } previousBiweeklyMonth = initialDay.AddDays(-1 * (double)paymentDays).Month; isInitialMonth = initialDay.Month != previousBiweeklyMonth; isFinalMonth = new DateTime(initialDay.Year, initialDay.Month, lastDayOfMonth(initialDay.Year, initialDay.Month)).Date == finalTempDate.Date; } //When not used MonthFixed else { previousBiweeklyMonth = initialDay.AddDays(-1 * (double)paymentDays).Month; isInitialMonth = initialDay.Month != previousBiweeklyMonth; isFinalMonth = nextPeriodInitial.Month != initialDay.Month; } var defaultPeriodDetail = CreateDefaultPeriodDetail(period, company, instanceId, userId, number: ++actualNumber, initialDate: initialDay, finalDate: finalTempDate, initialBimonthlyIMSS: initialDay.Month % 2 != 0 && isInitialMonth, finalBimonthlyIMSS: initialDay.Month % 2 == 0 && isFinalMonth, initialMonth: isInitialMonth, finalMonth: isFinalMonth, initialPayrollYear: isInitialMonth && initialDay.Month == 1, finalPayrollYear: isFinalMonth && initialDay.Month == 12, paymentDays: paymentDays, null); if (isFirstPeriodDetail) { defaultPeriodDetail.PeriodStatus = PeriodStatus.Calculating; isFirstPeriodDetail = false; } else { defaultPeriodDetail.PeriodStatus = PeriodStatus.Open; } lstPeriodDetail.Add(defaultPeriodDetail); initialDay = finalTempDate.AddDays(1); } } return(lstPeriodDetail); }
public async Task <List <T> > CreateDefaultAsync <T>(Guid identityWorkId, Guid instanceID, PaymentPeriodicity paymentPeriodicity) where T : BaseEntity { var periodTypes = new List <PeriodType>(); var namePeriodicity = Enum.GetName(typeof(PaymentPeriodicity), paymentPeriodicity); var periodTotalDays = 0; var paymentDays = 0; var paymentDayPosition = 0; bool monthCalendarFixed = true; if (paymentPeriodicity == PaymentPeriodicity.Biweekly) { periodTotalDays = 15; paymentDays = 15; paymentDayPosition = 15; monthCalendarFixed = true; } else if (paymentPeriodicity == PaymentPeriodicity.Monthly) { periodTotalDays = 30; paymentDays = 30; paymentDayPosition = 30; monthCalendarFixed = true; } else if (paymentPeriodicity == PaymentPeriodicity.Weekly) { periodTotalDays = 7; paymentDays = 7; paymentDayPosition = 7; monthCalendarFixed = false; } periodTypes.Add(new PeriodType() { ID = Guid.NewGuid(), Active = true, company = identityWorkId, Timestamp = DateTime.UtcNow, InstanceID = instanceID, Description = $"Periodo de pago {namePeriodicity}", CreationDate = DateTime.Now, Name = namePeriodicity, StatusID = 1, PaymentPeriodicity = paymentPeriodicity, PeriodTotalDays = periodTotalDays, PaymentDays = paymentDays, ExtraordinaryPeriod = false, MonthCalendarFixed = monthCalendarFixed, FortnightPaymentDays = AdjustmentPay_16Days_Febrary.PayCalendarDays, PaymentDayPosition = paymentDayPosition }); //Act var middlewareManager = new MiddlewareManager <PeriodType>(new BaseRecordManager <PeriodType>(), new PeriodTypeValidator()); await middlewareManager.CreateAsync(periodTypes, identityWorkId); return(periodTypes as List <T>); }