Beispiel #1
0
        public async Task <IActionResult> Handle(GetAdministrationDataQuery request, CancellationToken cancellationToken)
        {
            try
            {
                if (!(await PermissionMonitor.CheckPermissionsAsync(_userRepository, request.UserId, "Panel administracji")))
                {
                    return(new JsonResult(new ApiResponse <object>
                    {
                        Data = null,
                        Code = 403,
                        ErrorMessage = "Brak uprawnień"
                    }));
                }

                var users = await _userRepository.GetCompanyTraders(request.CompanyId);

                var administrationData = new AdministrationDataDto
                {
                    Users      = new List <UserForAdministrationDto>(),
                    Statistics = new CompanyStatisticsDto
                    {
                        Activities      = new List <int>(),
                        Opportunities   = new List <int>(),
                        ThisMonthGross  = 0,
                        ThisMonthMarkup = 0,
                        ThisMonthNet    = 0,
                        ThisYearGross   = 0,
                        ThisYearMarkup  = 0,
                        ThisYearNet     = 0
                    },
                };

                var company = await _companyRepository.GetByIdAsync(request.CompanyId);

                administrationData.Company = new CompanyDataDto
                {
                    Address = new AddressDto
                    {
                        ApartmentNumber = company.Address.ApartmentNumber,
                        City            = company.Address.City,
                        HouseNumber     = company.Address.HouseNumber,
                        Id       = company.Address.Id,
                        PostCode = company.Address.PostCode,
                        Province = company.Address.Province,
                        Street   = company.Address.Street
                    },
                    Id    = company.Id,
                    Name  = company.CompanyName,
                    Nip   = company.NIP,
                    Regon = company.Regon
                };

                var oppos = await _opportunityRepository.GetAllOpportunitiesAsync(request.CompanyId, new List <string> {
                    "", "", ""
                }, new DateTime(DateTime.Now.Year - 1, 1, 1), new DateTime(DateTime.Now.Year, 12, 31));

                oppos.AddRange(await _opportunityRepository.GetAllOrdersAsync(request.CompanyId, new List <string> {
                    "", ""
                }, new DateTime(DateTime.Now.Year - 1, 1, 1), new DateTime(DateTime.Now.Year, 12, 31)));

                foreach (var oppo in oppos)
                {
                    administrationData.Statistics.ThisYearGross  += oppo.SumGrossValue;
                    administrationData.Statistics.ThisYearMarkup += oppo.SumMarkupValue;
                    administrationData.Statistics.ThisYearNet    += oppo.SumNetValue;

                    if (oppo.CreateDate.Month == DateTime.Now.Month)
                    {
                        administrationData.Statistics.ThisMonthGross  += oppo.SumGrossValue;
                        administrationData.Statistics.ThisMonthMarkup += oppo.SumMarkupValue;
                        administrationData.Statistics.ThisMonthNet    += oppo.SumNetValue;
                    }
                }

                var oppoStatuses = new List <string>
                {
                    "Nowa",
                    "Modyfikowana",
                    "Anulowana",
                    "Zaakceptowana",
                    "Oferta"
                };

                foreach (var oppoStat in oppoStatuses)
                {
                    administrationData.Statistics.Opportunities.Add(oppos.Where(x => x.Status.Name == oppoStat).Count());
                }

                foreach (var user in users)
                {
                    administrationData.Users.Add(new UserForAdministrationDto
                    {
                        Id         = user.Id,
                        CanDelete  = (user.Id != request.UserId),
                        Department = user.CompanyPosition,
                        Name       = user.FirstName + " " + user.LastName,
                        StartDate  = user.WorkStartDate.ToString("dd.MM.yyyy"),
                        Gender     = user.Gender
                    });
                }

                var activities = await _activityTypeRepository.GetActivityTypesAsync();

                var leads = await _leadRepository.GetAllLeadsAsync(request.CompanyId, new DateTime(DateTime.Now.Year, 1, 1), new DateTime(DateTime.Now.Year, 12, 31));

                foreach (var activity in activities)
                {
                    administrationData.Statistics.Activities.Add(0);
                }

                foreach (var lead in leads)
                {
                    int counter = 0;
                    foreach (var activity in activities)
                    {
                        administrationData.Statistics.Activities[counter] += lead.Activities.Where(x => x.ActivityType == activity).Count();
                        counter += 1;
                    }
                }

                return(new JsonResult(new ApiResponse <AdministrationDataDto>
                {
                    Code = 200,
                    Data = administrationData,
                    ErrorMessage = ""
                }));
            }
            catch
            {
                return(new JsonResult(new ApiResponse <object>
                {
                    Code = 500,
                    Data = null,
                    ErrorMessage = "Nastąpił problem z serwerem, skontaktuj się z działem IT."
                }));
            }
        }
Beispiel #2
0
        public async Task <IActionResult> Handle(GetAllLeadsQuery request, CancellationToken cancellationToken)
        {
            try
            {
                if (!(await PermissionMonitor.CheckPermissionsAsync(_userRepository, request.UserId, "Przeglądanie leadów")))
                {
                    return(new JsonResult(new ApiResponse <object>
                    {
                        Data = null,
                        Code = 403,
                        ErrorMessage = "Brak uprawnień"
                    }));
                }

                var dbLeads = await _leadRepository.GetAllLeadsAsync(request.CompanyId, request.Filters.DateFrom, request.Filters.DateTo);

                var traders = await _userRepository.GetCompanyTraders(request.CompanyId);

                var response = new LeadListResponseDto()
                {
                    CompanyTraders = new List <string>(),
                    Leads          = new List <LeadForListDto>()
                };

                foreach (var trader in traders)
                {
                    response.CompanyTraders.Add(trader.FirstName + " " + trader.LastName);
                }

                foreach (var lead in dbLeads)
                {
                    response.Leads.Add(new LeadForListDto
                    {
                        Id          = lead.Id,
                        Email       = lead.LeadContacts.Count > 0?lead.LeadContacts.First().Email:"",
                        User        = lead.User.FirstName + " " + lead.User.LastName,
                        MainContact = lead.LeadContacts.Count > 0 ? lead.LeadContacts.First().Name:"",
                        Name        = lead.Name,
                        CreateDate  = lead.CreateDate,
                        Status      = lead.LeadStatus.Name
                    });
                }

                if (request.Filters.Name != "")
                {
                    response.Leads = response.Leads.Where(x => x.Name.Contains(request.Filters.Name)).ToList();
                }
                if (request.Filters.Status != "")
                {
                    response.Leads = response.Leads.Where(x => x.Status == request.Filters.Status).ToList();
                }
                if (request.Filters.User != "")
                {
                    response.Leads = response.Leads.Where(x => x.User.Contains(request.Filters.User)).ToList();
                }
                if (request.Filters.Email != "")
                {
                    response.Leads = response.Leads.Where(x => x.Email.Contains(request.Filters.Email)).ToList();
                }

                return(new JsonResult(new ApiResponse <LeadListResponseDto>
                {
                    Data = response,
                    Code = 200,
                    ErrorMessage = ""
                }));
            }
            catch
            {
                return(new JsonResult(new ApiResponse <object>
                {
                    Data = null,
                    Code = 500,
                    ErrorMessage = "Nastąpił problem z serwerem, skontaktuj się z działem IT."
                }));
            }
        }
        public async Task GetLeads_Return_All_Leads()
        {
            var leads = await _repository.GetAllLeadsAsync();

            Assert.AreEqual(5, leads.Count);
        }
Beispiel #4
0
        public async Task <IActionResult> Handle(GetOpportunityQuery request, CancellationToken cancellationToken)
        {
            try
            {
                var tradersList = await _userRepository.GetCompanyTraders(request.CompanyId);

                var products = await _productRepository.GetAllProductsAsync(request.CompanyId, new List <string> {
                    "", "", ""
                });

                var leads = await _leadRepository.GetAllLeadsAsync(request.CompanyId, new DateTime(2000, 01, 01), new DateTime(2999, 12, 31));

                var opportunity = await _opportunityRepository.GetOpportunityAsync(request.OpportunityId, request.CompanyId);

                if (opportunity != null && opportunity.TraderId != request.UserId)
                {
                    if (!(await PermissionMonitor.CheckPermissionsAsync(_userRepository, request.UserId, "Modyfikacja cudzych szans sprzedaży")))
                    {
                        return(new JsonResult(new ApiResponse <object>
                        {
                            Data = null,
                            Code = 403,
                            ErrorMessage = "Brak uprawnień"
                        }));
                    }
                }

                var oppoRes = new SellOpportunityDetailsDto();

                if (request.OpportunityId > 0)
                {
                    oppoRes = new SellOpportunityDetailsDto
                    {
                        Id        = opportunity.Id,
                        Lead      = opportunity.Lead.Name + "," + opportunity.Lead.NIP,
                        Positions = new List <SellOpportunityPositionDetailsDto>(),
                        Status    = opportunity.Status.Name,
                        Trader    = opportunity.Trader.FirstName + " " + opportunity.Trader.LastName
                    };

                    var counter = 1;
                    foreach (var position in opportunity.Positions)
                    {
                        oppoRes.Positions.Add(new SellOpportunityPositionDetailsDto
                        {
                            Deleted           = false,
                            GrossValue        = position.GrossValue,
                            Id                = position.Id,
                            LocalId           = counter,
                            Markup            = position.Markup,
                            NetValue          = position.NetValue,
                            Product           = position.Product.Name,
                            Quantity          = position.Quantity,
                            VatValue          = position.VatValue,
                            UnitOfMeasurement = position.Product.UnitOfMeasurement
                        });
                        counter += 1;
                    }
                }
                else
                {
                    oppoRes = new SellOpportunityDetailsDto
                    {
                        Lead      = "",
                        Positions = new List <SellOpportunityPositionDetailsDto>(),
                        Status    = "",
                        Trader    = ""
                    };
                }

                var response = new SellOpportunityDetailsResponseDto
                {
                    CompanyTraders = tradersList.Select(x => (x.FirstName + " " + x.LastName)).ToList(),
                    Leads          = leads.Select(x => (x.Name + "," + x.NIP)).ToList(),
                    Products       = products.Select(x => new ProductForListDto
                    {
                        Id                = x.Id,
                        Name              = x.Name,
                        MarkupRate        = x.MarkupRate,
                        UnitOfMeasurement = x.UnitOfMeasurement,
                        UnitValue         = x.UnitValue,
                        VatRate           = x.VatRate
                    }).ToList(),
                    SellOpportunity = oppoRes
                };

                return(new JsonResult(new ApiResponse <SellOpportunityDetailsResponseDto>
                {
                    Data = response,
                    Code = 200,
                    ErrorMessage = ""
                }));
            }
            catch
            {
                return(new JsonResult(new ApiResponse <object>
                {
                    Data = null,
                    Code = 500,
                    ErrorMessage = "Nastąpił problem z serwerem, skontaktuj się z działem IT."
                }));
            }
        }