Exemple #1
0
        public async Task <DashboardDataDto> GetDashboardDataAsync(Guid userId)
        {
            var allTransactions = await _transactionQueries.GetAllTransactionsWithDetailsAsync(userId);

            var user = await _userQueries.GetUserAsync(userId); // not sufficient. Can be omitted and use just one query

            if (user == null)
            {
                throw new ServiceException(UserNotFound);
            }

            var     userEmail   = user.Email;
            var     withdrawals = 0;
            var     deposits    = 0;
            var     transfers   = 0;
            decimal incomes     = 0;
            decimal outcomes    = 0;

            foreach (var transaction in allTransactions)
            {
                switch (transaction.Type)
                {
                case "Deposit":
                    deposits++;
                    incomes += transaction.Amount;
                    break;

                case "Withdrawal":
                    withdrawals++;
                    outcomes += transaction.Amount;
                    break;

                case "Transfer":
                    transfers++;
                    if (transaction.UserTo == userEmail)
                    {
                        incomes += transaction.Amount;
                    }
                    else
                    {
                        outcomes += transaction.Amount;
                    }
                    break;

                default:
                    throw new ServiceException("Invalid transaction type found.");
                }
            }

            var dashboardData = new DashboardDataDto()
            {
                DepositsCount    = deposits,
                WithdrawalsCount = withdrawals,
                TransfersCount   = transfers,
                Incomes          = incomes,
                Outcomes         = outcomes
            };

            return(dashboardData);
        }
        public async Task <IActionResult> Handle(GetDashboardDataQuery request, CancellationToken cancellationToken)
        {
            try
            {
                var user = await _userRepository.GetUserByIdAsync(request.UserId);

                if (user != null)
                {
                    var todoTasks = await _todoTaskRepository.GetTodoTasksForUserWithinDateRangeAsync(DateTime.Now.Date, DateTime.Now.Date, request.UserId);

                    var dashboardData = new DashboardDataDto
                    {
                        Name         = user.FirstName + " " + user.LastName,
                        Position     = user.CompanyPosition,
                        TodoTasks    = new List <TodoTaskDto>(),
                        UserActivity = await _leadRepository.GetUserActivitiesCountAsync(request.UserId),
                        SalesData    = await _opportunityRepository.GetUserOpportunitiesCountAsync(request.UserId)
                    };

                    foreach (var task in todoTasks)
                    {
                        dashboardData.TodoTasks.Add(new TodoTaskDto
                        {
                            Id        = task.Id,
                            Completed = task.Completed,
                            Title     = task.Title
                        });
                    }

                    return(new JsonResult(new ApiResponse <DashboardDataDto>
                    {
                        Code = 200,
                        Data = dashboardData,
                        ErrorMessage = ""
                    }));
                }

                return(new JsonResult(new ApiResponse <object>
                {
                    Data = null,
                    Code = 404,
                    ErrorMessage = "Nie znaleziono użytkownika."
                }));
            }
            catch
            {
                return(new JsonResult(new ApiResponse <object>
                {
                    Data = null,
                    Code = 500,
                    ErrorMessage = "Nastąpił problem z serwerem, skontaktuj się z działem IT."
                }));
            }
        }
        public DashboardDataDto MapToDashboardDataDto(SqlDataReader sqlDataReader)
        {
            DashboardDataDto dashboardDataDto = new DashboardDataDto();

            if (sqlDataReader.Read())
            {
                dashboardDataDto.TotalCompanyCount   = sqlDataReader["TotalCompanyCount"].ToInteger();
                dashboardDataDto.TotalRequestCount   = sqlDataReader["TotalRequestCount"].ToInteger();
                dashboardDataDto.TotalBeuatyTipCount = sqlDataReader["TotalBeuatyTipCount"].ToInteger();

                sqlDataReader.NextResult();

                while (sqlDataReader.Read())
                {
                    dashboardDataDto.RecentRequests.Add(CompanyRequestMapper.Instance.MapToCompanyRequestDto(sqlDataReader));
                }

                sqlDataReader.NextResult();

                while (sqlDataReader.Read())
                {
                    dashboardDataDto.RecentCompanies.Add(CompanyMappers.Instance.MapToCompanySummaryDto(sqlDataReader));
                }

                sqlDataReader.NextResult();

                while (sqlDataReader.Read())
                {
                    int companyId = sqlDataReader["CompanyId"].ToInteger();
                    CompanySummaryDto companyDto = dashboardDataDto.RecentCompanies.Where(item => item.Id == companyId).FirstOrDefault();

                    if (companyDto == null)
                    {
                        continue;
                    }

                    string imageType = sqlDataReader["ImageType"].ToString();

                    if (imageType == "Logo")
                    {
                        companyDto.Logo = CompanyLogoMappers.Instance.MapToCompanyLogoDto(sqlDataReader);
                    }
                    else
                    {
                        companyDto.Galleries.Add(CompanyLogoMappers.Instance.MapToCompanyLogoDto(sqlDataReader));
                    }
                }
            }

            return(dashboardDataDto);
        }
        public HttpResponseMessage GetData()
        {
            DashboardDataDto response = dashboardDataManager.GetData(UserId);

            return(Request.CreateResponse <DashboardDataDto>(HttpStatusCode.OK, response));
        }