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); }
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)); }
public async Task <bool> UpdateAndApprove(PLDeskDm pLDeskDm) { var isUpdated = await _profitLossRepository.UpdateAndApprove(pLDeskDm); return(isUpdated); }
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); }
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)); }