private static Accrual CreateAccrualInstance(Ending ending)
        {
            var accrualActionRecords = new List <AccrualActionRecord> {
                new AccrualActionRecord("e1520621-a182-4404-b927-1a9b4a2c0c80", AccrualAction.Created, null, null, null, new DateTime(2018, 10, 10))
            };

            var accrual = new Accrual(
                accrualId: Guid.Parse("34bb297c-630e-4036-84c6-8925eaa88f80"),
                userId: "unittest|784734738",
                name: "Test Name",
                startingHours: 50,
                accrualRate: 10,
                startingDate: new DateTime(2018, 7, 4),
                accrualFrequency: AccrualFrequency.Biweekly,
                ending: ending,
                lastModified: new DateTime(2018, 10, 4, 16, 43, 14, 549),
                isHeart: false,
                isArchived: false,
                hourlyRate: 15,
                dayOfPayA: 5,
                dayOfPayB: 20,
                minHours: 40,
                maxHours: 255,
                actions: accrualActionRecords);

            return(accrual);
        }
Exemple #2
0
        public ActionResult Index()
        {
            ApplicationUser currentUser = (from u in _context.Users
                                           where u.UserName == User.Identity.Name
                                           select u).FirstOrDefault();

            LeaveList list = new LeaveList();

            list.Holidays = _context.PublicHoliday.ToList();

            list.UserLeaves = (from u in _context.Users
                               where u.Manager.Id == currentUser.Id
                               select new UserLeave()
            {
                UserID = u.Id,
                Leaves = (from tbl in _context.Leave where tbl.User.Id == u.Id select tbl).ToList(),
                Name = u.FullName,
                EmploymentStartDate = u.EmploymentStartDate
            }).ToList();

            List <UserLeave> subLeaves = (from u in _context.Users
                                          where u.Manager.Manager.Id == currentUser.Id
                                          select new UserLeave()
            {
                UserID = u.Id,
                Leaves = (from tbl in _context.Leave where tbl.User.Id == u.Id select tbl).ToList(),
                Name = u.FullName,
                EmploymentStartDate = u.EmploymentStartDate
            }).ToList();

            list.UserLeaves.AddRange(subLeaves);

            list.Leaves = _context.Leave.Where(tbl => tbl.User.Id == currentUser.Id).ToList();

            list.Leaves = Deferral.AddDeferral(list.Leaves, list.Holidays);
            list.Leaves = Accrual.AddAccrual(currentUser.EmploymentStartDate, currentUser.FullName, list.Leaves);

            foreach (UserLeave userLeave in list.UserLeaves)
            {
                userLeave.Leaves = Deferral.AddDeferral(userLeave.Leaves, list.Holidays);
                userLeave.Leaves = Accrual.AddAccrual(userLeave.EmploymentStartDate, userLeave.Name, userLeave.Leaves);
            }

            list.FormModel = new LeaveFormModel()
            {
                StartDate     = DateTime.Now.Date,
                EndDate       = DateTime.Now.Date,
                UserID        = currentUser.Id,
                RequestDate   = DateTime.Now,
                LeaveStateID  = 1,
                Note          = "",
                Attachement   = "",
                Institution   = "",
                StudentNumber = ""
            };

            ViewBag.LeaveStateID = new SelectList(_context.LeaveState, "LeaveStateID", "Description", 1);

            return(View(list));
        }
        private static Accrual CreateAccrualInstance(AccrualFrequency frequency, Ending ending, int?dayOfPayA = null, int?dayOfPayB = null)
        {
            var accrual = new Accrual(
                accrualId: Guid.Parse("34bb297c-630e-4036-84c6-8925eaa88f80"),
                name: "Test Name",
                userId: "unittest|784734738",
                startingHours: 50,
                maxHours: 255,
                accrualRate: 10,
                accrualFrequency: frequency,
                dayOfPayA: dayOfPayA,
                dayOfPayB: dayOfPayB,
                startingDate: new DateTime(2018, 12, 1),
                ending: ending,
                isHeart: false,
                isArchived: false,
                minHours: 40, lastModified: new DateTime(2018, 10, 10, 3, 1, 12, 154), hourlyRate: 15,
                actions: new List <AccrualActionRecord>
            {
                new AccrualActionRecord("c153da22-6df0-4fab-8069-7ef52946c635", AccrualAction.Created, null, null, null, new DateTime(2018, 10, 10)),
                new AccrualActionRecord("e74f6d32-7ca8-4d6c-beab-89a6ff18aec3", AccrualAction.Adjustment, new DateTime(2018, 12, 3), 8, "jury duty 12/3/18", new DateTime(2018, 10, 10)),
                new AccrualActionRecord("1fdfb091-0c99-4141-8943-82df48759ebd", AccrualAction.Adjustment, new DateTime(2018, 12, 4), 8, "jury duty 12/4/18", new DateTime(2018, 10, 10)),
                new AccrualActionRecord("912304e3-ac13-4782-aa19-1be009ef164f", AccrualAction.Adjustment, new DateTime(2018, 12, 5), 8, "jury duty 12/5/18", new DateTime(2018, 10, 10)),
                new AccrualActionRecord("2badfd74-d3ee-435a-88c9-4a5f604cfca2", AccrualAction.Adjustment, new DateTime(2018, 12, 25), 8, "christmas 2018", new DateTime(2018, 10, 10)),
            });

            return(accrual);
        }
Exemple #4
0
 public static AccrualViewModel FromAccrual(Accrual accrual) =>
 new AccrualViewModel
 {
     Id            = accrual.Id,
     ContractId    = accrual.ContractId,
     InvoiceNumber = accrual.InvoiceNumber,
     AccrualDate   = accrual.AccrualDate,
     Summ          = accrual.Summ
 };
Exemple #5
0
        public async Task <bool> ModifyAccrualAsync(Accrual accrual)
        {
            var filter = Builders <Accrual> .Filter.And(
                Builders <Accrual> .Filter.Eq(e => e.AccrualId, accrual.AccrualId),
                Builders <Accrual> .Filter.Eq(e => e.UserId, accrual.UserId)
                );

            await Accruals.ReplaceOneAsync(filter, accrual);

            return(true);
        }
        public void EndingCurrentYear_EndDateIsCorrect(Ending ending, string currentDateString, string dateTimeString)
        {
            var dnp = new Mock <IDotNetProvider>();

            dnp.Setup(_ => _.DateTimeNow).Returns(DateTime.Parse(currentDateString));

            Accrual accrual = CreateAccrualInstance(ending);

            DateTime end = accrual.GetEndDate(dnp.Object);

            end.ShouldBe(DateTime.Parse(dateTimeString));
        }
Exemple #7
0
        private List <AccrualRow> CreateAccrualTable(Accrual config)
        {
            DateTime previous = config.StartingDate;
            DateTime current  = config.StartingDate;
            DateTime end      = config.GetEndDate(_dotNetProvider);

            var rows = new List <AccrualRow>
            {
                new AccrualRow(0, null, 0, config.StartingHours, null)
            };

            double accrual = config.StartingHours;

            int counter = 1;

            while (current <= end)
            {
                DateTime c = current, p = previous;
                var      actions = config.Actions
                                   .Where(a => a.AccrualAction != AccrualAction.Created)
                                   .Where(a => a.ActionDate >= p && a.ActionDate < c);
                double sum = actions.Sum(x => x.Amount).GetValueOrDefault();

                accrual += config.AccrualRate + sum;

                rows.Add(new AccrualRow(counter++, current, sum, accrual, actions));

                previous = current;

                if (config.AccrualFrequency == AccrualFrequency.Biweekly)
                {
                    current = current.AddDays(14);
                }
                else
                {
                    int day = current.Day;
                    if (day >= config.DayOfPayB)
                    {
                        current = current.AddMonths(1);
                        current = new DateTime(current.Year, current.Month, config.DayOfPayA.Value);
                    }
                    else
                    {
                        current = new DateTime(current.Year, current.Month, config.DayOfPayB.Value);
                    }
                }
            }

            return(rows);
        }
Exemple #8
0
        public List <AccrualRow> Calculate(Accrual config)
        {
            List <AccrualRow> rows = new List <AccrualRow>();

            foreach (var action in config.Actions)
            {
                switch (action.AccrualAction)
                {
                case AccrualAction.Created:
                    rows = CreateAccrualTable(config);
                    break;
                }
            }

            return(rows);
        }
Exemple #9
0
        public void SaveAccrual(AccrualViewModel accrualViewModel)
        {
            var accrual = _accrualRepository.GetExist(accrualViewModel.EmployeId, accrualViewModel.Date);

            if (accrual != null)
            {
                accrual.Amount = accrualViewModel.Amount;
            }
            else
            {
                accrual = new Accrual()
                {
                    Date    = accrualViewModel.Date,
                    Amount  = accrualViewModel.Amount,
                    Employe = _employeRepository.Get(accrualViewModel.EmployeId)
                };
            }
            _accrualRepository.Save(accrual);
        }
Exemple #10
0
        /// <summary>
        /// Parses the response received from the server.
        /// </summary>
        protected override void UnpackResponse()
        {
            base.UnpackResponse();

            // Create the streams we will be reading from.
            using (var responseStream = new MemoryStream(m_responsePayload))
                using (var reader = new BinaryReader(responseStream, Encoding.Unicode))
                {
                    // Try to unpack the data.
                    try
                    {
                        // Seek past return code.
                        reader.BaseStream.Seek(sizeof(int), SeekOrigin.Begin);

                        // Get the count of Product Types.
                        var productItemCount = reader.ReadUInt16();

                        // Clear the Product Item array.
                        m_products = new List <ProductItem>();

                        // Get all the Product Items
                        for (ushort x = 0; x < productItemCount; x++)
                        {
                            var productItem = new ProductItem();

                            productItem.ProductItemId = reader.ReadInt32();

                            productItem.ProductTypeId = reader.ReadInt32();

                            productItem.SalesSourceId = reader.ReadInt32();

                            productItem.IsActive = reader.ReadBoolean();

                            // Product Item Name
                            productItem.ProductItemName = ReadString(reader);

                            // Product Type Name
                            productItem.ProductTypeName = ReadString(reader);

                            // Product Sales Source Name
                            productItem.ProductSalesSourceName = ReadString(reader);

                            // Product Group Id
                            productItem.ProductGroupId = reader.ReadInt32();

                            // Product Group Name
                            productItem.ProductGroupName = ReadString(reader);

                            //START RALLY TA 5744
                            // Paper Layout Id
                            productItem.PaperLayoutId = reader.ReadInt32();

                            // Paper Layout Name
                            productItem.PaperLayoutName = ReadString(reader);

                            // Paper Layout Count
                            productItem.PaperLayoutCount = reader.ReadInt32();
                            //END RALLY TA 5744

                            //START RALLY US1796
                            List <Accrual> accuralList  = new List <Accrual>();
                            ushort         accuralCount = reader.ReadUInt16();
                            for (ushort i = 0; i < accuralCount; i++)
                            {
                                Accrual accural = new Accrual();
                                accural.Id   = reader.ReadInt32();
                                accural.Name = ReadString(reader);
                                accuralList.Add(accural);
                            }
                            productItem.AccuralList = accuralList;

                            // US2826
                            productItem.BarcodedPaper = reader.ReadBoolean();

                            //US4059 Perm File
                            productItem.PermFileId = reader.ReadInt32();

                            var cardColorSetId = reader.ReadInt32();

                            productItem.Validate = reader.ReadBoolean();

                            m_products.Add(productItem);
                        }
                    }
                    catch (EndOfStreamException e)
                    {
                        throw new MessageWrongSizeException(m_strMessageName, e);
                    }
                    catch (Exception e)
                    {
                        throw new ServerException(m_strMessageName, e);
                    }
                }
        }
Exemple #11
0
        public async Task DoWork(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.Log(LogLevel.Information, message: "Call method UpdateDeposit");
                var deposits = await _deposit.GetAll();

                foreach (var item in deposits)
                {
                    if (item.EndDateDeposit < DateTime.Now)
                    {
                        var closedDeposit = new Deposit
                        {
                            Id               = item.Id,
                            IdAccount        = item.IdAccount,
                            StartDateDeposit = item.StartDateDeposit,
                            EndDateDeposit   = item.EndDateDeposit,
                            TypeOfDeposit    = item.TypeOfDeposit,
                            Amount           = item.Amount,
                            PercentDeposit   = item.PercentDeposit,
                            Status           = false
                        };
                        await _deposit.UpdateAsync(closedDeposit);
                    }
                    if (item.Status == true)
                    {
                        var accural = new Accrual
                        {
                            IdDeposit   = item.Id,
                            DateAccrual = DateTime.Now,
                        };

                        if (item.Accruals.Count != 0)
                        {
                            accural.Amount += accural.Amount;
                            await _accural.UpdateAsync(accural);
                        }
                        else
                        {
                            accural.Amount = item.Amount * item.PercentDeposit / 365;
                            await _accural.AddAsync(accural);
                        }

                        var deposit = new Deposit
                        {
                            Id               = item.Id,
                            IdAccount        = item.IdAccount,
                            StartDateDeposit = item.StartDateDeposit,
                            EndDateDeposit   = item.EndDateDeposit,
                            TypeOfDeposit    = item.TypeOfDeposit,
                            Amount           = item.Amount,
                            PercentDeposit   = item.PercentDeposit,
                            Status           = item.Status,
                            Accruals         = new List <Accrual> {
                                accural
                            }
                        };
                        await _deposit.UpdateAsync(deposit);
                    }
                }
                _logger.Log(LogLevel.Information, message: "Start delay");

                await Task.Delay(millisecondsDelay : 60_000, cancellationToken : stoppingToken);
            }
        }
Exemple #12
0
        public async Task <bool> AddAccrual(Accrual accrual)
        {
            await Accruals.InsertOneAsync(accrual);

            return(true);
        }
Exemple #13
0
        private void AccrualPayment(PostingEngineEnvironment env, Transaction element, Accrual accrual)
        {
            var accountToFrom = GetFromToAccount(element);

            if (accountToFrom.To == null || accountToFrom.From == null)
            {
                env.AddMessage($"Unable to identify From/To accounts for trade {element.OrderSource} :: {element.Side}");
                return;
            }

            new AccountUtils().SaveAccountDetails(env, accountToFrom.From);
            new AccountUtils().SaveAccountDetails(env, accountToFrom.To);

            double fxrate = 1.0;

            if (!element.SettleCurrency.Equals(env.BaseCurrency))
            {
                fxrate = Convert.ToDouble(FxRates.Find(env.ValueDate, element.SettleCurrency).Rate);
            }

            var moneyUSD = element.LocalNetNotional * fxrate;

            var debit = new Journal(element)
            {
                Account     = accountToFrom.From,
                When        = env.ValueDate,
                FxRate      = fxrate,
                CreditDebit = env.DebitOrCredit(accountToFrom.From, moneyUSD),
                Value       = env.SignedValue(accountToFrom.From, accountToFrom.To, true, moneyUSD),
                Event       = "prepaid-expense",
                Fund        = env.GetFund(element),
            };

            var credit = new Journal(element)
            {
                Account     = accountToFrom.To,
                When        = env.ValueDate,
                FxRate      = fxrate,
                CreditDebit = env.DebitOrCredit(accountToFrom.To, moneyUSD),
                Value       = env.SignedValue(accountToFrom.From, accountToFrom.To, false, moneyUSD),
                Event       = "prepaid-expense",
                Fund        = env.GetFund(element),
            };

            env.Journals.Add(debit);
            env.Journals.Add(credit);
        }
Exemple #14
0
        public AppMutation(
            IAirportRepository airportRepository,
            IDashboardRepository dashboardRepository,
            IHttpContextAccessor httpContextAccessor,
            IDotNetProvider dotNetProvider)
        {
            _airportRepository   = airportRepository;
            _dashboardRepository = dashboardRepository;
            _httpContextAccessor = httpContextAccessor;
            _dotNetProvider      = dotNetProvider;

            Field <AirportGraphType>("addAirport", "",
                                     arguments: new QueryArguments(
                                         new QueryArgument <NonNullGraphType <AirportInputType> >
            {
                Name = "airport", Description = "The airport to add."
            }
                                         ),
                                     resolve: context =>
            {
                AirportInput airport = context.GetArgument <AirportInput>("airport");
                Airport a            = _airportRepository.GetAirport(airport.Code);
                if (a == null)
                {
                    _airportRepository.AddAirport(airport);

                    return(_airportRepository.GetAirport(airport.Code));
                }

                return(a);
            });

            Field <AccrualGraphType>("addAccrualAction", "",
                                     arguments: new QueryArguments(
                                         new QueryArgument <NonNullGraphType <IdGraphType> >
            {
                Name = "accrualId", Description = "The accrual to modify."
            },
                                         new QueryArgument <NonNullGraphType <AccrualActionRecordInputType> >
            {
                Name = "action", Description = "The action to add."
            }
                                         ),
                                     resolve: context =>
            {
                AccrualActionRecordInput input = context.GetArgument <AccrualActionRecordInput>("action");

                if (AccrualActionRecordValidator.TryValidate(input, out var errors))
                {
                    string accrualIdArgument = context.GetArgument <string>("accrualId");
                    Guid.TryParse(accrualIdArgument, out var id);
                    string userId = _httpContextAccessor.HttpContext.User.UserId();

                    var action = new AccrualActionRecord(_dotNetProvider.NewGuid.ToString(), input.AccrualAction,
                                                         input.ActionDate, input.Amount,
                                                         input.Note, _dotNetProvider.DateTimeNow);

                    bool added = _dashboardRepository.AddActionForAccrualAsync(userId, id, action).Result;
                    if (added)
                    {
                        return(_dashboardRepository.GetAccrualForUserByAccrualIdAsync(userId, id));
                    }

                    context.Errors.Add(new ExecutionError("Error adding new accrual."));
                    return(null);
                }

                context.Errors.Add(new ExecutionError(string.Join(Environment.NewLine, errors)));
                return(null);
            });

            Field <AccrualGraphType>("deleteAccrualAction", "",
                                     arguments: new QueryArguments(
                                         new QueryArgument <NonNullGraphType <IdGraphType> >
            {
                Name = "accrualId", Description = "The accrual to modify."
            },
                                         new QueryArgument <NonNullGraphType <StringGraphType> >
            {
                Name = "accrualActionId", Description = "The action to remove."
            }
                                         ),
                                     resolve: context =>
            {
                string accrualIdArgument       = context.GetArgument <string>("accrualId");
                string accrualActionIdArgument = context.GetArgument <string>("accrualActionId");

                Guid.TryParse(accrualIdArgument, out var accrualId);
                Guid.TryParse(accrualActionIdArgument, out var accrualActionId);
                string userId = _httpContextAccessor.HttpContext.User.UserId();

                bool removed = _dashboardRepository.DeleteActionAsync(userId, accrualId, accrualActionId).Result;
                if (removed)
                {
                    return(_dashboardRepository.GetAccrualForUserByAccrualIdAsync(userId, accrualId));
                }

                context.Errors.Add(new ExecutionError("Error removing accrual action."));
                return(null);
            });

            Field <AccrualGraphType>("modifyAccrual", "",
                                     arguments: new QueryArguments(
                                         new QueryArgument <NonNullGraphType <IdGraphType> >
            {
                Name = "accrualId", Description = "The accrual to add."
            },
                                         new QueryArgument <NonNullGraphType <AccrualInputType> >
            {
                Name = "accrual", Description = "The accrual to update."
            }
                                         ),
                                     resolve: context =>
            {
                string accrualIdArgument = context.GetArgument <string>("accrualId");
                var accrualInput         = context.GetArgument <AccrualInput>("accrual");
                string userId            = _httpContextAccessor.HttpContext.User.UserId();

                Guid.TryParse(accrualIdArgument, out var accrualId);

                bool result = AccrualValidator.TryValidate(accrualInput, out var errors);
                if (result)
                {
                    var accrual = _dashboardRepository.GetAccrualForUserByAccrualIdAsync(userId, accrualId).Result;

                    accrual.Name             = accrualInput.Name;
                    accrual.StartingHours    = accrualInput.StartingHours;
                    accrual.AccrualRate      = accrualInput.AccrualRate;
                    accrual.StartingDate     = accrualInput.StartingDate;
                    accrual.Ending           = accrualInput.Ending;
                    accrual.AccrualFrequency = accrualInput.AccrualFrequency;
                    accrual.LastModified     = _dotNetProvider.DateTimeNow;
                    accrual.HourlyRate       = accrualInput.HourlyRate;
                    accrual.MinHours         = accrualInput.MinHours;
                    accrual.MaxHours         = accrualInput.MaxHours;
                    accrual.IsHeart          = accrualInput.IsHeart;
                    accrual.IsArchived       = accrualInput.IsArchived;
                    accrual.DayOfPayA        = accrualInput.AccrualFrequency == AccrualFrequency.SemiMonthly
                            ? accrualInput.DayOfPayA
                            : null;
                    accrual.DayOfPayB = accrualInput.AccrualFrequency == AccrualFrequency.SemiMonthly
                            ? accrualInput.DayOfPayB
                            : null;

                    bool modified = _dashboardRepository.ModifyAccrualAsync(accrual).Result;
                    if (modified)
                    {
                        return(_dashboardRepository.GetAccrualForUserByAccrualIdAsync(userId, accrualId));
                    }

                    context.Errors.Add(new ExecutionError("Failed to update accrual."));
                    return(null);
                }

                context.Errors.Add(new ExecutionError(string.Join(Environment.NewLine, errors)));
                return(null);
            });

            Field <AccrualGraphType>("addAccrual", "",
                                     arguments: new QueryArguments(
                                         new QueryArgument <NonNullGraphType <AccrualInputType> >
            {
                Name = "accrual", Description = "The accrual to add."
            }
                                         ),
                                     resolve: context =>
            {
                AccrualInput input = context.GetArgument <AccrualInput>("accrual");

                bool result = AccrualValidator.TryValidate(input, out var errors);
                if (result)
                {
                    string userId  = _httpContextAccessor.HttpContext.User.UserId();
                    Guid accrualId = _dotNetProvider.NewGuid;
                    DateTime now   = _dotNetProvider.DateTimeNow;

                    var a = new Accrual
                    {
                        UserId           = userId,
                        AccrualId        = accrualId,
                        Name             = input.Name,
                        StartingHours    = input.StartingHours,
                        AccrualRate      = input.AccrualRate,
                        StartingDate     = input.StartingDate,
                        Ending           = input.Ending,
                        AccrualFrequency = input.AccrualFrequency,
                        LastModified     = _dotNetProvider.DateTimeNow,
                        HourlyRate       = input.HourlyRate,
                        IsHeart          = input.IsHeart,
                        IsArchived       = input.IsArchived,
                        MinHours         = input.MinHours,
                        MaxHours         = input.MaxHours,
                        DayOfPayA        = input.AccrualFrequency == AccrualFrequency.SemiMonthly ? input.DayOfPayA : null,
                        DayOfPayB        = input.AccrualFrequency == AccrualFrequency.SemiMonthly ? input.DayOfPayB : null,
                        Actions          = new List <AccrualActionRecord>
                        {
                            new AccrualActionRecord(_dotNetProvider.NewGuid.ToString(), AccrualAction.Created, null,
                                                    null, null, now)
                        }
                    };

                    bool added = _dashboardRepository.AddAccrual(a).Result;
                    if (added)
                    {
                        return(_dashboardRepository.GetAccrualForUserByAccrualIdAsync(userId, accrualId));
                    }

                    context.Errors.Add(new ExecutionError("Error adding new accrual."));
                    return(null);
                }

                context.Errors.Add(new ExecutionError(string.Join(Environment.NewLine, errors)));
                return(null);
            });
        }