Exemplo n.º 1
0
        public async Task <bool> UpdateAndApprove(PLDeskDm pLDeskDm)
        {
            var plData = await _context.Hierarchies.Where(x => x.DEPT_LEAF_NODE == pLDeskDm.HeirarchyId).FirstAsync();

            if (plData == null)
            {
                throw new CustomDataException(pLDeskDm.HeirarchyId);
            }

            var dealEst = await _context.Estimates
                          .Where(x => x.HierarchyId == pLDeskDm.HeirarchyId && x.Date == pLDeskDm.BusinessDate)
                          .FirstOrDefaultAsync();

            dealEst.ExplainedVariance = pLDeskDm.ExplainedVariance;
            var user = await _context.Users.Where(x => x.UserName == pLDeskDm.ApprovedBy).FirstOrDefaultAsync();

            foreach (var trade in pLDeskDm.DailyPLTrades)
            {
                var dailyPl = await _context.DailyPLs.Where(x => x.PortfolioId == trade.PortfolioId && x.Business_Date == pLDeskDm.BusinessDate).FirstOrDefaultAsync();

                dailyPl.Commentary1  = pLDeskDm.PLCommentary;
                dailyPl.Commentary2  = pLDeskDm.VarianceComentary;
                dailyPl.IsApproved   = pLDeskDm.IsApproved;
                dailyPl.IsReviewed   = pLDeskDm.IsReviewed;
                dailyPl.ApprovedDate = DateTime.UtcNow;
                dailyPl.LastUpdated  = DateTime.UtcNow;
                dailyPl.UserId       = user.UserName;
                dailyPl.User         = user;
                //dailyPl.ApprovedBy = ushort   //TODO: add approver when user implemented
            }

            return(await _context.SaveChangesAsync() > 0);
        }
Exemplo n.º 2
0
        public async Task <IActionResult> UpdateAndApprove(PLDeskDm plDesk, string userId)
        {
            if (userId != User.FindFirst(ClaimTypes.NameIdentifier).Value)
            {
                return(Unauthorized(new ResponseDm
                {
                    IsSuccess = false,
                    Message = "User not Authorized."
                }));
            }

            var roles = User.FindFirst(ClaimTypes.Role).Value.Split(",").ToList();

            var accessDetails = await _profitLossService.GetDesksAsync(roles);

            if (!accessDetails.Any(x => x.DeskId == plDesk.HeirarchyId))
            {
                return(Unauthorized(new ResponseDm
                {
                    IsSuccess = false,
                    Message = $"User Not Authorized access this Desk",
                    Errors = new List <string>
                    {
                        $"DeskId - {plDesk.Desk}"
                    }
                }));
            }
            plDesk.ApprovedBy = userId;
            var isUpdated = await _profitLossService.UpdateAndApprove(plDesk);

            if (!isUpdated)
            {
                return(NotFound(new ResponseDm
                {
                    IsSuccess = false,
                    Message = "Unable to update."
                }));
            }

            return(Ok(plDesk));
        }
Exemplo n.º 3
0
        public async Task <bool> UpdateAndApprove(PLDeskDm pLDeskDm)
        {
            var isUpdated = await _profitLossRepository.UpdateAndApprove(pLDeskDm);

            return(isUpdated);
        }
Exemplo n.º 4
0
        public async Task <PLDeskDm> GetDailyPLTradeAsync(string deskId, DateTime date)
        {
            var plData = await _context.Hierarchies.Where(x => x.DEPT_LEAF_NODE == deskId).FirstAsync();

            if (plData == null)
            {
                throw new CustomDataException(deskId);
            }

            var dealEst = await _context.Estimates.Where(x => x.HierarchyId == deskId && x.Date == date).FirstOrDefaultAsync();

            var portfolios = await _context.Portfolios.Include(x => x.DailyPLs).Include(x => x.DailyTrades).Where(x => x.HierarchyId == deskId).ToListAsync();

            if (portfolios == null)
            {
                throw new InvalidOperationException("No Portfolio's found.");
            }

            var dailyDeskDm = new PLDeskDm
            {
                HeirarchyId  = plData.DEPT_LEAF_NODE,
                Desk         = plData.DEPT_L6_NODE_M,
                BusinessDate = date
            };
            var tradesFound = false;

            foreach (var p in portfolios)
            {
                var dailyPl = await _context.DailyPLs.Where(x => x.PortfolioId == p.PortfolioId && x.Business_Date == date).FirstOrDefaultAsync();

                var dailyTrades = await _context.DailyTrades.Where(x => x.PortfolioId == p.PortfolioId && x.Business_Date == date).FirstOrDefaultAsync();

                if ((dailyPl == null || dailyTrades == null) && !tradesFound)
                {
                    tradesFound = false;
                    continue;
                }
                else
                {
                    tradesFound = true;
                }
                dailyDeskDm.Currency = p.Currency;
                dailyDeskDm.DailyPLTrades.Add(new DailyPLTradeDm
                {
                    ActualPL       = dailyPl.Daily_PL,
                    PortfolioId    = p.PortfolioId,
                    Portfolio_Name = p.Portfolio_Name,
                    NewTrades      = dailyTrades.NewTrades,
                    Adjustment     = dailyTrades.Adjustment,
                    Ammends        = dailyTrades.Ammends,
                });
                dailyDeskDm.TotalPL          += dailyPl.Daily_PL;
                dailyDeskDm.TotalNewTrades   += dailyTrades.NewTrades;
                dailyDeskDm.TotalAmmendments += dailyTrades.Ammends;
                dailyDeskDm.TotalAdjustments += dailyTrades.Adjustment;
                dailyDeskDm.TotalUnexplained += dailyTrades.Unexplained;
                dailyDeskDm.IsApproved        = dailyPl.IsApproved;
                dailyDeskDm.IsReviewed        = dailyPl.IsReviewed;
                dailyDeskDm.PLCommentary      = dailyPl.Commentary1;
                dailyDeskDm.VarianceComentary = dailyPl.Commentary2;
                dailyDeskDm.ApprovedBy        = dailyPl.UserId;
            }
            if (!tradesFound)
            {
                return(null);
            }
            dailyDeskDm.ExplainedVariance = dealEst == null ? 0 : dealEst.ExplainedVariance;
            dailyDeskDm.DealerEstimate    = dealEst == null ? 0 : dealEst.EstimateAmount;
            dailyDeskDm.Variance          = dailyDeskDm.TotalPL - dailyDeskDm.DealerEstimate;

            return(dailyDeskDm);
        }
Exemplo n.º 5
0
        public async Task <IActionResult> GetDailyPLTrades(string userId, string deskId, [FromQuery] DateTime businessDate)
        {
            if (userId != User.FindFirst(ClaimTypes.NameIdentifier).Value)
            {
                return(Unauthorized(new ResponseDm
                {
                    IsSuccess = false,
                    Errors = new List <string>
                    {
                        $"UserId - {userId}"
                    },
                    Message = $"Invalid UserId - {userId}"
                }));
            }

            var roles = User.FindFirst(ClaimTypes.Role).Value.Split(",").ToList();

            var accessDetails = await _profitLossService.GetDesksAsync(roles);

            if (!accessDetails.Any(x => x.DeskId == deskId))
            {
                return(Unauthorized(new ResponseDm
                {
                    IsSuccess = false,
                    Message = $"User Not Authorized access this Desk",
                    Errors = new List <string>
                    {
                        $"DeskId - {deskId}"
                    }
                }));
            }

            PLDeskDm dailyPlInfos = null;

            try
            {
                dailyPlInfos = await _profitLossService.GetDailyPLTradeAsync(deskId, businessDate);

                if (dailyPlInfos == null)
                {
                    return(NotFound(new ResponseDm
                    {
                        IsSuccess = false,
                        Message = "No Trades found."
                    }));
                }
            }
            catch (CustomDataException ex)
            {
                return(BadRequest(new ResponseDm
                {
                    IsSuccess = false,
                    Message = ex.Message
                }));
            }
            catch (InvalidOperationException ex)
            {
                return(NotFound(new ResponseDm
                {
                    IsSuccess = false,
                    Message = ex.Message
                }));
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, new ResponseDm
                {
                    IsSuccess = false,
                    Message = "Error occured. Please contact administrator."
                }));
            }
            return(Ok(dailyPlInfos));
        }