Exemple #1
0
        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)));
        }
Exemple #2
0
 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);
        }
Exemple #5
0
        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>);
        }