public DAO.Rebooking CreateRebooking(Rebooking rebooking) { return(new DAO.Rebooking() { Id = rebooking.Id, BookId = rebooking.BookId, RebookDate = rebooking.RebookDate, Description = rebooking.Description }); }
public void FullRebookPostedFunds(Guid postedId, Guid newBudgetLineId, Staff rebooker) { using (var context = new SCMSEntities()) { using (TransactionScope scope = new TransactionScope()) { try { var posting = context.BudgetPostings.IncludeProjectBudgetViaRFP().FirstOrDefault(p => p.Id == postedId); var fromBudgetLineId = posting.PaymentRequestBudgetLine.ProjectBudget.Id; var amount = posting.AmountPosted; //Deduct amount from current budget line posting.PaymentRequestBudgetLine.ProjectBudget.TotalPosted -= amount; var newBL = context.ProjectBudgets.FirstOrDefault(b => b.Id == newBudgetLineId); //Get amount in new budget line currency var newAmount = (decimal)exchangeRateService.GetForeignCurrencyValue(newBL.BudgetCategory.ProjectDonor.Currency, posting.PaymentRequestBudgetLine.ProjectBudget.BudgetCategory.ProjectDonor.Currency, amount, newBL.BudgetCategory.ProjectDonor.Project.CountryProgrammeId); //Add amount to new budget line posted amount newBL.TotalPosted += newAmount; //Set new budget line in BudgetPosting posting.PaymentRequestBudgetLine.BudgetLineId = newBudgetLineId; posting.AmountPosted = newAmount; context.SaveChanges(); var rebooking = new Rebooking(); rebooking.Id = Guid.NewGuid(); rebooking.BudgetPostingId = postedId; rebooking.FromAmount = amount; rebooking.FromBudgetLineId = fromBudgetLineId; rebooking.IsFullRebook = true; rebooking.RebookedBy = rebooker.Id; rebooking.RebookedOn = DateTime.Now; rebooking.ToAmount = newAmount; rebooking.ToBudgetLineId = newBudgetLineId; context.Rebookings.Add(rebooking); context.SaveChanges(); scope.Complete(); } catch (Exception ex) { scope.Dispose(); } } } }