public async Task <JsonResult> Save(PeriodDTO data) { //Get the period type base template var periodType = (await clientPT.FindAsync(x => x.ID == data.PeriodTypeId, SessionModel.CompanyID, new String[] { })).FirstOrDefault(); //First update data of template period type periodType.PaymentDays = data.PaymentDays; periodType.SeventhDays = (data.SeventhDayPosition != (int)WeeklySeventhDay.None ? 1 : 0); periodType.SeventhDayPosition = data.SeventhDayPosition.ToString(); periodType.FortnightPaymentDays = data.FortnightPaymentDays; if (!data.IsEditing) { //Enable the first fiscal year var resultID = Guid.NewGuid(); var year = data.Year; var initialDate = data.InitialDate; var finalDate = new DateTime(year, 12, 31); //create period (fiscal year) var Periods = new List <Period> { new Period() { ID = resultID, Active = true, company = SessionModel.CompanyID, Timestamp = DateTime.UtcNow, InstanceID = SessionModel.InstanceID, Description = $"Periodo del Ejercicio {year}", CreationDate = DateTime.Now, Name = $"{year}", InitialDate = initialDate, FinalDate = finalDate, FiscalYear = data.Year, IsActualFiscalYear = year == DateTime.Now.Year, 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, SeventhDayPosition = periodType.SeventhDayPosition, SeventhDays = periodType.SeventhDays } }; await clientPeriod.CreateAsync(Periods, SessionModel.CompanyID); var newPeriodDetails = await clientPD.FindAsync(x => x.PeriodID == resultID, SessionModel.CompanyID, new String[] { }); for (int i = 0; i < newPeriodDetails.Count(); i++) { var pd = newPeriodDetails[i]; if (pd.Number < data.CurrentPeriod) { pd.PeriodStatus = PeriodStatus.NA; } else if (pd.Number == data.CurrentPeriod) { pd.PeriodStatus = PeriodStatus.Calculating; } else if (pd.Number > data.CurrentPeriod) { pd.PeriodStatus = PeriodStatus.Open; } } await clientPD.UpdateAsync(newPeriodDetails, SessionModel.CompanyID); } //Update period type await clientPT.UpdateAsync(new List <PeriodType>() { periodType }, SessionModel.CompanyID); //Recalculate await RecalculateAsync(periodType); return(Json("OK")); }