private static string GetStatusTitle(ApplicationStatusEnum appEnum) { switch (appEnum) { case ApplicationStatusEnum.Draft: return("Черновик"); case ApplicationStatusEnum.InWork: return("В работе"); case ApplicationStatusEnum.InRepair: return("В ремонте"); case ApplicationStatusEnum.DocumentCollect: return("Сбор документации"); case ApplicationStatusEnum.Agreement: return("Согласование"); case ApplicationStatusEnum.PaymentFormation: return("Формирование заявки на оплату"); case ApplicationStatusEnum.Payment: return("На оплате"); case ApplicationStatusEnum.ReWork: return("На доработке"); case ApplicationStatusEnum.Paid: return("Оплачен"); default: return(""); } }
private async Task <DateTime?> GetPlanedEndDatetime(Guid applicationId, ApplicationStatusEnum status) { var application = await _baseLogic.Of <Data.Context.Application>().GetById(applicationId); switch (status) { //case ApplicationStatusEnum.InRepair: //{ // //if (application.WithReplacement??false) // // return DateTime.Now.AddDays(19); // //else // // return DateTime.Now.AddDays(9); //} case ApplicationStatusEnum.DocumentCollect: return(DateTime.Now.AddDays(10)); case ApplicationStatusEnum.ReWork: return(DateTime.Now.AddDays(3)); case ApplicationStatusEnum.Agreement: return(DateTime.Now.AddDays(2)); default: return(null); } }
public async Task <IActionResult> GetApplications(ApplicationStatusEnum status) { try { var res = await _applicationLogic.GetApplications(CurrentUserId, status); return(Ok(res)); } catch (Exception e) { return(ExceptionResult(e)); } }
public async Task InsertLoanApplicationTaskUserPrevious(Guid applicationId, Guid userId, RoleEnum role, ApplicationStatusEnum status) { var planEndDate = await GetPlanedEndDatetime(applicationId, status); await _baseLogic.Of <Data.Context.ApplicationTask>().Add( new Data.Context.ApplicationTask { ApplicationId = applicationId, UserId = userId, RoleId = _baseLogic.Of <Role>().GetQueryable(x => !x.IsDeleted && x.Value == role).Select(x => x.Id).FirstOrDefault(), AppointmentDate = DateTime.Now, PlanEndDate = planEndDate, Status = status }); }
public async Task <Guid> InsertLoanApplicationTaskUser(Data.Context.Application application, Guid userId, RoleEnum role, ApplicationStatusEnum status, string instanceId = null) { try { var currentApplication = await _baseLogic.Of <Data.Context.Application>().Base() .FirstOrDefaultAsync(a => a.Id == application.Id); currentApplication.Status = status; await _baseLogic.Of <Data.Context.Application>().Update(currentApplication); var planEndDate = await GetPlanedEndDatetime(application.Id, status); var _role = await _baseLogic.Of <Role>().GetQueryable(x => !x.IsDeleted && x.Value == role).Select(x => x.Id) .FirstOrDefaultAsync(); var result = await _baseLogic.Of <Data.Context.ApplicationTask>().Add( new Data.Context.ApplicationTask { ApplicationId = application.Id, UserId = userId, RoleId = _role, AppointmentDate = DateTime.Now, PlanEndDate = planEndDate, Status = status }); return(result); } catch (Exception e) { Console.WriteLine(e); throw; } }
public async Task <object> GetApplications(Guid userId, ApplicationStatusEnum status) { var currentUserRole = await _baseLogic.Of <Role>().Base() .FirstOrDefaultAsync(a => a.UserRoles.Any(t => t.UserId == userId)); var _ = _baseLogic.Of <Data.Context.ApplicationTask>().GetQueryable(x => !x.IsDeleted && !x.Application.IsDeleted) .AsNoTracking(); ApplicationStatusEnum applicationStatus = status; if (status != ApplicationStatusEnum.All) { switch (currentUserRole.Value) { case RoleEnum.AuditService when status == ApplicationStatusEnum.InWork: case RoleEnum.Economist when status == ApplicationStatusEnum.InWork: case RoleEnum.SalesDepartment when status == ApplicationStatusEnum.InWork: applicationStatus = ApplicationStatusEnum.InWork; _ = _.Where(a => a.Status == ApplicationStatusEnum.Agreement && a.UserId == userId); break; case RoleEnum.TorManager when status == ApplicationStatusEnum.InWork: applicationStatus = ApplicationStatusEnum.InWork; _ = _.Where(a => a.Status == ApplicationStatusEnum.PaymentFormation && a.UserId == userId); break; case RoleEnum.Treasurer when status == ApplicationStatusEnum.InWork: applicationStatus = ApplicationStatusEnum.InWork; _ = _.Where(a => a.Status == ApplicationStatusEnum.Payment && a.UserId == userId); break; case RoleEnum.Counterparty: _ = _.Where(a => a.Status == status && a.UserId == userId); break; default: _ = _.Where(a => a.Status == status); break; } } else if (currentUserRole.Value == RoleEnum.Counterparty) { _ = _.Where(a => a.UserId == userId); } var res = _ .Select(x => new ApplicationOutDto() { Id = x.Application.Id, Number = x.Application.Number, DateCreated = x.Application.CreatedDate.ToString("dd.MM.yyyy"), Status = applicationStatus, StatusTitle = GetStatusTitle(x.Status), CarriageNumber = x.Application.CarriageNumber, ContractorsName = x.Application.Contractors.NameRu, DefectName = x.Application.Defect.NameRu, RepairPlaceName = x.Application.RepairPlace.NameRu, IsExpired = x.PlanEndDate != null && DateTime.Now.Subtract((DateTime)x.PlanEndDate).Days > 0, FinishDate = x.Application.FinishDate != null? ((DateTime)x.Application.FinishDate).ToString("dd.MM.yyyy") :string.Empty, ReleaseDate = x.Application.ReleaseDate.ToString("dd.MM.yyyy") }) .ToList(); return(new { TotalItems = _.Count(), Items = res }); }
/** * Based on a producer get the total number of donations (applications) their products have been a part of + the total price of these donations * Get for a specific application status * Get for either all time or past 'days' days */ private async Task <(int, int)> GetDonationCountAndPriceOfStatusXForPastYDays(int userId, ApplicationStatusEnum status, bool allTime, int days = 0) { TimeSpan pastDays = new TimeSpan(days, 0, 0, 0); DateTime sinceDate = DateTime.UtcNow - pastDays; var products = await(from p in _context.Products where p.UserId == userId select new { p.Price, Applications = from a in p.Applications where a.Status == status && (a.LastModified >= sinceDate || allTime) select new { a.Id }, }).ToListAsync(); if (products.Count == 0) { return(0, 0); } var donations = 0; var totalPrice = 0; foreach (var p in products) { var aCount = p.Applications.Count(); donations += aCount; totalPrice += p.Price * aCount; } return(donations, totalPrice); }