示例#1
0
        public IHttpActionResult UpdateBudget(string referenceId, BudgetRequest budgetRequest)
        {
            if (string.IsNullOrEmpty(referenceId))
            {
                return(BadRequest("referenceId not found"));
            }

            if (budgetRequest == null)
            {
                return(BadRequest("spendBudgetEntity not found"));
            }

            if (budgetRequest.SpendCategoryId <= 0 || budgetRequest.CareHomeId <= 0)
            {
                return(BadRequest("SpendCateCareHome id and amount not found"));
            }

            if (string.IsNullOrEmpty(budgetRequest.DateFrom.ToString()) || string.IsNullOrEmpty(budgetRequest.DateTo.ToString()))
            {
                return(BadRequest("Missing required fields"));
            }

            var loggedInUser = HttpContext.Current.User as SecurityPrincipal;

            logger.Info($"Spend Budget created by {loggedInUser.ForeName}");
            budgetRequest.UpdatedById = loggedInUser.Id;
            budgetRequest.UpdatedDate = DateTime.Now;

            var result = _budgetService.Update(budgetRequest);

            return(Ok(result));
        }
示例#2
0
        public ActionResult Index(BudgetRequest request)
        {
            var result = this.ProjectService.GetBudgetList(request);

            foreach (var rt in result)
            {
                if (rt.LaborCost != null)
                {
                    rt.BudgetTotal += rt.LaborCost.LaborTotal;
                }
                if (rt.MaterialCost != null)
                {
                    rt.BudgetTotal += rt.MaterialCost.MaterialTotal;
                }
                if (rt.MachineryCost != null)
                {
                    rt.BudgetTotal += rt.MachineryCost.MachineryTotal;
                }
                if (rt.Measure != null)
                {
                    rt.BudgetTotal += rt.Measure.MeasureTotal;
                }
                if (rt.Overhead != null)
                {
                    rt.BudgetTotal += rt.Overhead.OverheadTotal;
                }


                //rt.BudgetTotal +=rt.Warranty + rt.Subcontracting + rt.OtherBudget;
            }
            return(View(result));
        }
示例#3
0
        public void GetBudgetReturnsLastAvailableBudget()
        {
            Budget budget = budgetService.CreateBudget(budgetRequest);

            BudgetRequest budgetRequest2 = new BudgetRequest
            {
                StartDate   = new DateTime(2034, 05, 06),
                EndDate     = new DateTime(2050, 12, 17),
                Amount      = 123.5,
                BudgetItems = new List <BudgetItemRequest>()
            };

            Budget budget2 = budgetService.CreateBudget(budgetRequest2);

            int id_budget1 = budget.BudgetId;
            int id_budget2 = budget2.BudgetId;

            budget  = dbContext.Budgets.Where(b => b.BudgetId == id_budget1).FirstOrDefault();
            budget2 = dbContext.Budgets.Where(b => b.BudgetId == id_budget2).FirstOrDefault();
            Assert.NotNull(budget);
            Assert.NotNull(budget2);

            Budget budgetFromService = budgetService.GetCurrentBudget();

            Assert.Equal(budget2, budgetFromService);
        }
        private BudgetEntity ToEntity(BudgetRequest budgetRequest)
        {
            IEnumerable <BudgetAllocationEntity> spendBudgetAllocationEntities = budgetRequest.BudgetAllocations.Select(a =>
            {
                return(ToEntity(a));
            }).ToArray();

            return(new BudgetEntity()
            {
                Id = budgetRequest.Id,
                ReferenceId = budgetRequest.ReferenceId,
                SpendCategoryId = budgetRequest.SpendCategoryId,
                CareHomeId = budgetRequest.CareHomeId,
                Name = budgetRequest.Name,
                BudgetType = budgetRequest.BudgetType,
                DateFrom = budgetRequest.DateFrom,
                DateTo = budgetRequest.DateTo,
                Description = budgetRequest.Description,
                PoPrefix = budgetRequest.PoPrefix,
                Status = budgetRequest.Status,
                Reason = budgetRequest.Reason,
                CreatedById = budgetRequest.CreatedById,
                UpdatedById = budgetRequest.UpdatedById,
                UpdatedDate = budgetRequest.UpdatedDate,
                BudgetAllocations = spendBudgetAllocationEntities
            });
        }
        public async Task <IActionResult> CreateBudget([FromBody] BudgetRequest request)
        {
            var userId = User.Claims.FirstOrDefault(c => c.Type == "id").Value;

            var userExists = await _identityService.CheckIfUserExists(userId);

            if (!userExists)
            {
                return(NotFound(new ErrorResponse(new ErrorModel {
                    Message = $"There is no user with id: {userId}"
                })));
            }

            var budget = await _budgetService.NewBudgetAsync(request, userId);

            if (budget == null)
            {
                return(BadRequest(new ErrorResponse(new ErrorModel {
                    Message = "Could not create new budget"
                })));
            }

            var locationUri = _uriService.GetBudgetUri(budget.Id);

            return(Created(locationUri, new Response <BudgetResponse>(_mapper.Map <BudgetResponse>(budget))));
        }
示例#6
0
        public Budget CreateBudget(BudgetRequest request)
        {
            string loggedUser = _httpContextAccessor.HttpContext.User.FindFirstValue("userId");

            LocalDate newStartDate = LocalDate.FromDateTime((DateTime)request.StartDate);
            LocalDate newEndDate   = LocalDate.FromDateTime((DateTime)request.EndDate);


            List <Budget> foundBudgets = dbContext.Budgets.Where(b =>
                                                                 (b.StartDate.CompareTo(newStartDate) < 0 && b.EndDate.CompareTo(newStartDate) > 0) ||
                                                                 (b.StartDate.CompareTo(newEndDate) < 0 && b.EndDate.CompareTo(newStartDate) > 0))
                                         .ToList();

            if (foundBudgets.Count > 0)
            {
                throw new SkrillaApiException("conflict", "There is a budget for that time period already");
            }


            Budget budget = new Budget(
                LocalDate.FromDateTime((DateTime)request.StartDate),
                LocalDate.FromDateTime((DateTime)request.EndDate),
                request.Amount,
                loggedUser);

            dbContext.Add(budget);

            List <int> categoryIds = request.BudgetItems.Select(i => i.category).ToList();

            List <Category> categories = dbContext.Categories
                                         .Where(s => s.PersonId.Equals(loggedUser))
                                         .ToList();

            if (categories == null)
            {
                throw new SkrillaApiException("not_found",
                                              "One or more categories were not found.");
            }

            categories.ForEach(category =>
            {
                BudgetItem item = new BudgetItem(budget,
                                                 category,
                                                 0);
                dbContext.Add(item);
            });

            request.BudgetItems.ForEach(i =>
            {
                BudgetItem item = budget.BudgetItems.Where(bi => i.category.Equals(bi.Category.CategoryId)).FirstOrDefault();
                if (item != null)
                {
                    item.BudgetedAmount = i.amount;
                }
            });

            dbContext.SaveChanges();

            return(budget);
        }
示例#7
0
        public async Task <BudgetRequest> Create(BudgetRequestCreate budgetRequestIn, string labGroupId)
        {
            var budgetRequest = BudgetRequest.FromCreate(budgetRequestIn, labGroupId);
            await _budgetRequests.InsertOneAsync(budgetRequest);

            return(budgetRequest);
        }
示例#8
0
        public BudgetControllerTest()
        {
            ContextOptions = new DbContextOptionsBuilder <SkrillaDbContext>()
                             .UseSqlite(CreateInMemoryDatabase())
                             .Options;

            _connection = RelationalOptionsExtension.Extract(ContextOptions).Connection;

            dbContext = new SkrillaDbContext(ContextOptions);
            dbContext.Database.EnsureDeleted();
            dbContext.Database.EnsureCreated();

            category  = new Category("ExampleCategory", false, "mockUser", "exampleIcon");
            category2 = new Category("ExampleCategory2", false, "mockUser", "exampleIcon");

            dbContext.Add(category);
            dbContext.Add(category2);
            dbContext.SaveChanges();

            List <BudgetItemRequest> budgetItems = new List <BudgetItemRequest>
            {
                new BudgetItemRequest
                {
                    category = category.CategoryId,
                    amount   = 23.5
                },

                new BudgetItemRequest
                {
                    category = category2.CategoryId,
                    amount   = 101.5
                }
            };

            budgetRequest = new BudgetRequest
            {
                StartDate   = new DateTime(2019, 05, 06),
                EndDate     = new DateTime(2030, 04, 17),
                Amount      = 123.5,
                BudgetItems = budgetItems
            };

            var budgetLoggerMock     = new Mock <ILogger <BudgetService> >();
            var controllerLoggerMock = new Mock <ILogger <BudgetController> >();

            budgetService = new BudgetService(budgetLoggerMock.Object,
                                              dbContext,
                                              GetMockHttpAccesor());

            controller = new BudgetController(controllerLoggerMock.Object, budgetService);

            controller.ControllerContext = new ControllerContext
            {
                HttpContext = new DefaultHttpContext
                {
                    User = principal
                }
            };
        }
示例#9
0
    public void ProcessAllocation(int budget, int withheld)
    {
        var request = new BudgetRequest()
        {
            Budget = budget, DebtPayed = withheld
        };

        _requests.Add(request);
        CheckRequests();
    }
示例#10
0
 public IEnumerable <BudgetInfo> GetBudgetList(BudgetRequest request = null)
 {
     request = request ?? new BudgetRequest();
     using (var dbContext = new ProjectDbContext())
     {
         IQueryable <BudgetInfo> Budgets = dbContext.Budgets.Include("LaborCost").Include("Overhead").Include("MachineryCost").Include("MaterialCost").Include("Measure");
         if (!string.IsNullOrEmpty(request.ProjectName))
         {
             Budgets = Budgets.Where(u => u.ProjectName.Contains(request.ProjectName));
         }
         return(Budgets.OrderByDescending(u => u.ID).ToPagedList(request.PageIndex, request.PageSize));
     }
 }
        public BudgetResponse IncreaseBudgetAllocation(BudgetRequest budgetRequest)
        {
            BudgetAllocation allocation = budgetRequest.BudgetAllocations.FirstOrDefault();

            if (allocation.Approved == Constants.BUDGET_APPROVED)
            {
                allocation.ApprovedById = budgetRequest.UpdatedById;
                allocation.ApprovedDate = DateTime.Now;
            }
            allocation.UpdatedById = budgetRequest.UpdatedById;
            allocation.UpdatedDate = DateTime.Now;

            var updated = _spendBudgetDataProvider.IncreaseBudgetAllocation(ToEntity(budgetRequest));

            return(ToModel(updated));
        }
示例#12
0
        public async Task <BudgetRequest> AddBudGetRequest(BudgetRequest budgetRequest, string userId)
        {
            if (budgetRequest.ProjectNumber == "ADMIN")
            {
                budgetRequest.ProjectId = null;
            }
            var key = await GenerateBudgetRequestNumber();

            budgetRequest.RequestNumber = key.Reference;
            budgetRequest.RNumber       = key.Number;

            _db.UserId = userId;
            var result = _db.BudgetRequests.Add(budgetRequest);

            return(result);
        }
示例#13
0
        public async Task <ActionResult <BudgetRequest> > Get([FromHeader] string authToken)
        {
            if (!await _authenticationService.CheckAccess(authToken, "budgetView"))
            {
                return(Unauthorized());
            }

            BudgetRequest budgetRequest = await _budgetRequestService.Get(await _labGroupService.GetByMemberId(AuthenticationHelpers.GetUserIdFromToken(authToken)));

            if (budgetRequest == null)
            {
                return(BadRequest("No Active Budget Requests!"));
            }

            return(budgetRequest);
        }
        public BudgetResponse Update(BudgetRequest budgetRequest)
        {
            // If allocation is, Approved already, do not change the amount
            // If budget Compleated do not change any fields
            // Else only update, dateFrom, dateTo, desc, poPrefix, status
            var existingBudget = GetBudgetListResponse(budgetRequest.ReferenceId);

            if (existingBudget.Status == Constants.BUDGET_STATUS_COMPLETED)
            {
                return(null); // Todo: throw valid bus exception to be bubble upto UI
            }

            var unApprovedIds = existingBudget.BudgetAllocations.Where(a => a.Approved != "Y").Select(a => a.Id);
            List <BudgetAllocation> unApproved = new List <BudgetAllocation>();

            unApprovedIds.ForEach(id =>
            {
                unApproved.Add(budgetRequest.BudgetAllocations.Where(a => a.Id == id).FirstOrDefault());
            });

            // With unApproved list, when a user is approving, add date and user id
            unApproved.ForEach(a =>
            {
                if (a.Approved == Constants.BUDGET_APPROVED)
                {
                    a.ApprovedById = budgetRequest.UpdatedById;
                    a.ApprovedDate = DateTime.Now;
                }
                // Ensure updated date and updated by id is filled in
                a.UpdatedById = budgetRequest.UpdatedById;
                a.UpdatedDate = DateTime.Now;
            });

            budgetRequest.BudgetAllocations = unApproved;

            // Find start and end dates when the budget type is 'Monthly'
            if (budgetRequest.BudgetType == BudgetType.Monthly)
            {
                IEnumerable <DatePair> dates = GenerateMonthStartEndDates(budgetRequest.BudgetMonth, 1);
                budgetRequest.DateFrom = dates.First().StartDate;
                budgetRequest.DateTo   = dates.First().EndDate;
            }

            var spendBudgetEntityUpdated = _spendBudgetDataProvider.Update(ToEntity(budgetRequest));

            return(ToModel(spendBudgetEntityUpdated));
        }
示例#15
0
        public IHttpActionResult IncrementBudgetAllocationAmount(string referenceId, BudgetRequest budgetRequest)
        {
            if (string.IsNullOrEmpty(referenceId) || budgetRequest == null)
            {
                return(BadRequest("Budget reference id or allocation is missing."));
            }

            var loggedInUser = HttpContext.Current.User as SecurityPrincipal;

            logger.Info($"Spend Budget created by {loggedInUser.ForeName}");
            budgetRequest.UpdatedById = loggedInUser.Id;
            budgetRequest.UpdatedDate = DateTime.Now;

            var inserted = _budgetService.IncreaseBudgetAllocation(budgetRequest);

            return(Ok(inserted));
        }
示例#16
0
        public async Task <Budget> NewBudgetAsync(BudgetRequest budgetRequest, string userId)
        {
            var budgetDto = new BudgetDto
            {
                CreatedAt   = DateTime.UtcNow,
                UpdatedAt   = DateTime.UtcNow,
                Name        = budgetRequest.Name,
                Description = budgetRequest.Description,
                UserId      = userId
            };

            var budget = _mapper.Map <Budget>(budgetDto);

            var created = await _baseRepository.CreateEntityAsync(budget);

            return(created);
        }
        public BudgetResponse Insert(BudgetRequest budgetRequest)
        {
            // For Inserts, request comes with ONE allocation entity. User can save ONLY ONE AMOUNT. But entity is handled as multiple (1-many)
            if (budgetRequest.BudgetAllocations.FirstOrDefault().Approved == Constants.BUDGET_APPROVED)
            {
                budgetRequest.BudgetAllocations.FirstOrDefault().ApprovedById = budgetRequest.CreatedById;
                budgetRequest.BudgetAllocations.FirstOrDefault().ApprovedDate = DateTime.Now;
            }
            // Ensure all allocations has updated id and date..
            budgetRequest.BudgetAllocations.ForEach(a =>
            {
                a.UpdatedById = budgetRequest.CreatedById;
            });

            // Find start and end dates when the budget type is 'Monthly'
            if (budgetRequest.BudgetType == BudgetType.Monthly)
            {
                IEnumerable <DatePair> dates = GenerateMonthStartEndDates(budgetRequest.BudgetMonth, 1);
                budgetRequest.DateFrom = dates.First().StartDate;
                budgetRequest.DateTo   = dates.First().EndDate;
            }

            // Recurring budgets. Month starts at 1. 1=Jan. If less than Zero, than no recurring budgets.
            BudgetEntity inserted = null;

            BudgetEntity[] budgetEntities;
            if (budgetRequest.NumberOfMonths > 0)
            {
                // Recurring budget
                budgetEntities = CreateRecurringBudgets(budgetRequest);
            }
            else
            {
                // Standard insert. ONE budget entity. make it array so imple is easier
                budgetEntities = new List <BudgetEntity>()
                {
                    ToEntity(budgetRequest)
                }.ToArray();
            }

            inserted = _spendBudgetDataProvider.Insert(budgetEntities);
            return(ToModel(inserted));
        }
        private BudgetEntity[] CreateRecurringBudgets(BudgetRequest budgetRequest)
        {
            var startMonth  = budgetRequest.BudgetMonth;
            var numOfMonths = budgetRequest.NumberOfMonths;

            var listOfDates = GenerateMonthStartEndDates(startMonth, numOfMonths).ToArray();

            // create n number of reqs entities
            List <BudgetEntity> list = new List <BudgetEntity>();

            for (int i = 0; i < numOfMonths; i++)
            {
                var temp = ToEntity(budgetRequest);
                temp.DateFrom = listOfDates[i].StartDate;
                temp.DateTo   = listOfDates[i].EndDate;
                list.Add(temp);
            }
            return(list.ToArray());
        }
示例#19
0
        public void BudgetRequestIsCreatedSuccessfully()
        {
            DateTime start = new DateTime(2019, 05, 10);
            DateTime end   = new DateTime(2020, 04, 15);

            BudgetRequest request = new BudgetRequest
            {
                StartDate   = start,
                EndDate     = end,
                Amount      = 123.5,
                BudgetItems = items
            };


            string jsonString = JsonSerializer.Serialize <BudgetRequest>(request);

            Assert.Equal(start, request.StartDate);
            Assert.Equal(end, request.EndDate);
            Assert.Equal(123.5, request.Amount);
            Assert.Single(request.BudgetItems);
        }
示例#20
0
        public IHttpActionResult InsertBudget(BudgetRequest budgetRequest)
        {
            if (budgetRequest == null)
            {
                return(BadRequest("Spend budget is null"));
            }

            if (budgetRequest.SpendCategoryId <= 0 || budgetRequest.CareHomeId <= 0)
            {
                return(BadRequest("Care category id and care home id is required"));
            }

            if (budgetRequest.BudgetAllocations.FirstOrDefault().Amount <= 0)
            {
                return(BadRequest("Budget amount is required"));
            }

            if (budgetRequest.BudgetType == BudgetType.Monthly && budgetRequest.BudgetMonth <= 0)
            {
                return(BadRequest("Budget month is required field"));
            }

            if (budgetRequest.BudgetType == BudgetType.Project)
            {
                if (string.IsNullOrEmpty(budgetRequest.DateFrom.ToString()) || string.IsNullOrEmpty(budgetRequest.DateTo.ToString()))
                {
                    return(BadRequest("Budget dates are required fields"));
                }
            }

            var loggedInUser = HttpContext.Current.User as SecurityPrincipal;

            logger.Info($"Spend Budget created by {loggedInUser.ForeName}");
            budgetRequest.CreatedById = loggedInUser.Id;
            budgetRequest.UpdatedById = loggedInUser.Id;

            var result = _budgetService.Insert(budgetRequest);

            return(Ok(result));
        }
示例#21
0
        public ActionResult <object> Post([FromBody] BudgetRequest request)
        {
            string loggedUser = User.FindFirstValue("userId");

            if (loggedUser == null)
            {
                return(Unauthorized());
            }

            ValidationResult result = validator.Validate(request);

            if (!result.IsValid)
            {
                return(BadRequest(new ValidationSummary(result)));
            }

            try
            {
                Budget budget = budgetService.CreateBudget(request);

                if (budget == null)
                {
                    return(StatusCode(500));
                }

                return(CreatedAtAction(nameof(Post), null, budget));
            }
            catch (SkrillaApiException e)
            {
                if ("conflict".Equals(e.Code))
                {
                    return(new SkrillaGenericResponse(e.Code, e.Message));
                }
                else
                {
                    return(BadRequest(e.Message));
                }
            }
        }
示例#22
0
        public void GetBudgetList()
        {
            BudgetRequest secondBudgetRequest = new BudgetRequest
            {
                StartDate   = new DateTime(2030, 05, 06),
                EndDate     = new DateTime(2040, 04, 17),
                Amount      = 123.5,
                BudgetItems = new List <BudgetItemRequest>()
            };

            Budget firstBudget  = budgetService.CreateBudget(budgetRequest);
            Budget secondBudget = budgetService.CreateBudget(secondBudgetRequest);

            var           result     = controller.GetBudgetList();
            List <Budget> budgetList = (List <Budget>)result.Value;

            Assert.True(budgetList.Exists(b => b.BudgetId.Equals(firstBudget.BudgetId) &&
                                          b.Amount.Equals(firstBudget.Amount)
                                          ));
            Assert.True(budgetList.Exists(b => b.BudgetId.Equals(secondBudget.BudgetId) &&
                                          b.Amount.Equals(secondBudget.Amount)));
        }
示例#23
0
        public async Task <ActionResult <BudgetRequest> > Create([FromHeader] string authToken, BudgetRequestCreate budgetRequest)
        {
            if (!await _authenticationService.CheckAccess(authToken, "announceView"))
            {
                return(Unauthorized());
            }

            LabGroup group = await _labGroupService.GetByMemberId(AuthenticationHelpers.GetUserIdFromToken(authToken));

            BudgetRequest created = await _budgetRequestService.Create(budgetRequest, group.Id);

            await _logService.Create(new Log(
                                         null,
                                         AuthenticationHelpers.GetUserIdFromToken(authToken),
                                         DateTime.UtcNow,
                                         "Document created.",
                                         "budgetRequests",
                                         created.Id,
                                         JsonSerializer.Serialize(created)
                                         ));

            return(Ok(budgetRequest));
        }
示例#24
0
        public void ModifyBudgetFailsDueToOldBudget()
        {
            BudgetRequest oldBudgetRequest = new BudgetRequest
            {
                StartDate   = new DateTime(2019, 05, 06),
                EndDate     = new DateTime(2019, 08, 17),
                Amount      = 123.5,
                BudgetItems = new List <BudgetItemRequest>()
            };

            Budget            budget      = budgetService.CreateBudget(oldBudgetRequest);
            BudgetItemRequest itemRequest = new BudgetItemRequest();

            itemRequest.category     = 123456;
            itemRequest.budgetId     = budget.BudgetId;
            itemRequest.amount       = 10005.5;
            itemRequest.ForceRequest = false;

            var result = controller.ModifyCategoryBudget(itemRequest).Result as ObjectResult;
            SkrillaGenericResponse resultValue = (SkrillaGenericResponse)result.Value;

            Assert.Equal("invalid_request", resultValue.Code);
            Assert.Equal("No se puede alterar presupuestos pasados.", resultValue.Message);
        }
示例#25
0
        private async Task ProcessApprovedRequest(BudgetRequest request)
        {
            var project = await GetProjectByIdAsync(request.ProjectId.Value);

            project.RemainingBudget = project.RemainingBudget - request.TotalAmount;
            if (request.BudgetRequestItems.Count > 0)
            {
                foreach (var item in request.BudgetRequestItems)
                {
                    if (item.Amount > 0)
                    {
                        if (item.Category == "CONTRACTORS/OUTSOURCE")
                        {
                            var result = await GetProposalContractorByIdAsync(item.ItemId);

                            if (result != null)
                            {
                                result.RemainingBudget  = result.RemainingBudget - item.Amount;
                                _db.Entry(result).State = EntityState.Modified;
                            }
                        }
                        else if (item.Category == "OPERATING EXPENSES")
                        {
                            var result = await GetProposalExpenseByIdAsync(item.ItemId);

                            if (result != null)
                            {
                                result.RemainingBudget  = result.RemainingBudget - item.Amount;
                                _db.Entry(result).State = EntityState.Modified;
                            }
                        }
                        else if (item.Category == "EQUIPMENT")
                        {
                            var pEquip = await GetProposalEquipmentByIdAsync(item.ItemId);

                            var result = await GetInventoryByIdAsync(pEquip.InventoryId);

                            if (result != null)
                            {
                                pEquip.RemainingBudget  = pEquip.RemainingBudget - item.Amount;
                                _db.Entry(result).State = EntityState.Modified;
                            }
                        }
                        else if (item.Category == "LABORATORY ANALYSIS")
                        {
                            var result = await GetProposalLaboratoryByIdAync(item.ItemId);

                            if (result != null)
                            {
                                result.RemainingBudget  = result.RemainingBudget - item.Amount;
                                _db.Entry(result).State = EntityState.Modified;
                            }
                        }
                        else if (item.Category == "COMMISSIONS/REPRESENTATIONS")
                        {
                            var result = await GetProposalCommissionByIdAsync(item.ItemId);

                            if (result != null)
                            {
                                result.RemainingBudget  = result.RemainingBudget - item.Amount;
                                _db.Entry(result).State = EntityState.Modified;
                            }
                        }
                    }
                }
            }
            _db.Entry(project).State = EntityState.Modified;
        }
示例#26
0
 public async void Update(BudgetRequest original, BudgetRequestUpdate update) =>
 await _budgetRequests.ReplaceOneAsync(budgetRequest => budgetRequest.Id == original.Id, BudgetRequest.FromUpdate(original, update));
示例#27
0
        public async Task <ActionResult> ProjectRequest(BudgetRequestViewModel model)
        {
            try
            {
                // How this work everytime you add a new item it will store to Items note this list cant be modified to
                // as of deleting you need to add the TempId to ToBeDeleted List this list is for the deleted items you can only store id here
                // like the Items you cant modify this list
                // to get the not deleted list you need to just filer the ToBeDeleted list to Items the get the result and add it to ShowItems
                // note if you refresh the will all temp data will be lost

                // Add item
                await SetListItemsAsync(model);

                if (model.Item != null && model.IsCreate == "addItem")
                {
                    if (model.Items.Count > 0 && model.IsCreate != "delete")
                    {
                        // Asign tempId
                        int count = model.Items.Last().TempId;
                        model.Item.TempId = count += 1;
                    }
                    else
                    {
                        // Asign defualt value
                        model.Item.TempId = 1;
                    }

                    #region Dropdown

                    // Add item to item list
                    model = await ManageDropDownValuesAndValidition(model);

                    if (!model.Error.IsEmpty())
                    {
                        model.ShowItems   = model.Items.Where(m => !model.ListOfDeleted.Any(xx => xx == m.TempId)).ToList();
                        TempData["Error"] = model.Error;
                        return(View(model));
                    }
                    #endregion
                    model.Items.Add(model.Item);
                    model.IsCreate      = null;
                    TempData["Success"] = "New item added";

                    // Get not delete items
                    model.ShowItems = model.Items.Where(m => !model.ListOfDeleted.Any(xx => xx == m.TempId)).ToList();
                    return(View(model));
                }

                // Removed Item
                else if (model.IsCreate != "true" && model.IsCreate != "addItem")
                {
                    // Get item to be removed
                    int toBeDeleted = model.Items.Where(m => m.TempId == model.TobeDeleted).First().TempId;
                    // Add tempid to list of deleted
                    model.ListOfDeleted.Add(toBeDeleted);
                    // Get not delete items
                    model.ShowItems     = model.Items.Where(m => !model.ListOfDeleted.Any(xx => xx == m.TempId)).ToList();
                    model.TobeDeleted   = 0;
                    TempData["Success"] = "Item Removed";
                    return(View(model));
                }

                // Save Budget Request
                // Purpose an Date needed validation
                model.ShowItems = model.Items.Where(m => !model.ListOfDeleted.Any(xx => xx == m.TempId)).ToList();
                if (model.Purpose.IsEmpty())
                {
                    model.Error = "Please enter Purpose of request";
                }
                else if (model.DateNeeded == null)
                {
                    model.Error = "Please enter Date Needed";
                }
                else if (model.Items.Count <= 0)
                {
                    model.Error = "Please add request item";
                }
                if (!model.Error.IsEmpty())
                {
                    TempData["Error"] = model.Error;
                    return(View(model));
                }
                model.RequestorName = CurrentUser.DisplayName;
                model.RequestorId   = CurrentUser.Id;
                model.TotalAmount   = model.TotalAmountForView;
                BudgetRequest request = await _repo.AddBudGetRequest(_mapper.Map <BudgetRequest>(model), CurrentUser.Id);

                // Get proper list
                foreach (var item in model.ShowItems)
                {
                    item.BudgetRequestId = request.Id;
                    _repo.AddBudGetRequestItem(_mapper.Map <BudgetRequestItem>(item), CurrentUser.Id);
                }

                if (await _repo.SaveAllAsync())
                {
                    TempData["Success"] = string.Format("BudgetRequest has been successfully Sent");
                    return(RedirectToAction("Show", "Project", new { id = model.ProjectId }));
                }
                else
                {
                    await SetListItemsAsync(model);

                    TempData["Error"] = "Unable to send BudgetRequest due to some internal issues.";
                    return(View(model));
                }
            }
            catch (Exception e)
            {
                TempData["Error"] = e.Message;
                await SetListItemsAsync(model);

                return(View(model));
            }
        }
示例#28
0
 public BudgetRequestValidationTest()
 {
     request   = new BudgetRequest();
     validator = new BudgetValidation();
 }
示例#29
0
        public async Task <IActionResult> Update([FromHeader] string authToken, string id, BudgetRequestUpdate budgetRequestUpdate)
        {
            if (!await _authenticationService.CheckAccess(authToken, "budgetMgr"))
            {
                return(Unauthorized());
            }

            var budgetRequest = await _budgetRequestService.Get(id);

            if (budgetRequest == null)
            {
                return(NotFound());
            }

            _budgetRequestService.Update(budgetRequest, budgetRequestUpdate);

            await _logService.Create(new Log(
                                         null,
                                         AuthenticationHelpers.GetUserIdFromToken(authToken),
                                         DateTime.UtcNow,
                                         "Document modified.",
                                         "budgetRequests",
                                         id,
                                         JsonSerializer.Serialize(BudgetRequest.FromUpdate(budgetRequest, budgetRequestUpdate))
                                         ));

            if (budgetRequestUpdate.StockroomApprovedFlag)
            {
                LabGroup group = await _labGroupService.GetByMemberId(AuthenticationHelpers.GetUserIdFromToken(authToken));

                group.Budget        = group.Budget + budgetRequestUpdate.IncreaseAmount;
                group.BudgetBalance = group.BudgetBalance + budgetRequestUpdate.IncreaseAmount;

                group.Transactions.Add(new Transaction(
                                           null,
                                           "Add",
                                           "Budget Increase",
                                           budgetRequestUpdate.IncreaseAmount,
                                           DateTime.UtcNow
                                           ));

                _labGroupService.Update(group, group.Id);

                await _logService.Create(new Log(
                                             null,
                                             AuthenticationHelpers.GetUserIdFromToken(authToken),
                                             DateTime.UtcNow,
                                             "Document modified.",
                                             "budgetRequests",
                                             id,
                                             JsonSerializer.Serialize(group)
                                             ));

                if (!_hostEnvironment.EnvironmentName.Equals("Development", StringComparison.OrdinalIgnoreCase))
                {
                    foreach (string userId in group.Members)
                    {
                        User temp = await _userService.Get(userId);

                        EmailHelpers.SendBudgetRequestApprovedEmail(temp.TechMail);
                    }
                }
            }

            return(Ok());
        }