public async Task <ActionResult> CancelExpenditureGroup(int id) { List <Expenditure> expenditureList = (from e in _db.Expenditures.Include(e => e.IncomingExpenditure) where e.IncomingExpenditureId == id select e).ToList(); foreach (Expenditure e in expenditureList) { var operation = new ExpenditureOperation { Expenditure = e, OperationDateTime = DateTime.Now, OperationTypeId = ExpenditureOperation.EOType.Cancelled }; _db.ExpenditureOperations.Add(operation); } if (expenditureList.Count() > 0) { expenditureList.FirstOrDefault().IncomingExpenditure.IsProcessed = false; } await _db.SaveChangesAsync(); return(RedirectToAction("CashlessExpenditures")); }
public async Task <ActionResult> CreateExpenditure(CreateExpenditureModel model) { var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone(); nfi.NumberGroupSeparator = " "; var officeRole = _db.Roles.SingleOrDefault(r => r.Name.Contains("Офис")); var office = _db.Users.FirstOrDefault(u => u.Roles.Any(r => r.RoleId == officeRole.Id)); if (office == null) { return(RedirectToAction("IssuedExpenditures")); } var otherSum = decimal.Parse(_db.SettingsValues.FirstOrDefault(sv => sv.Key == "OtherSum").Value .Replace(" ", string.Empty), CultureInfo.InvariantCulture); var remainder = model.Amount; if (otherSum > 0) { _db.SettingsValues.FirstOrDefault(sv => sv.Key == "OtherSum").Value = otherSum >= model.Amount ? (otherSum - model.Amount).ToString("#,0", nfi) : (0).ToString("#,0", nfi); } office.Balance -= model.Amount; var expenditure = new Expenditure { Name = model.Name, Amount = model.Amount, DeskGroupId = model.SelectedDeskGroupId, TypeId = model.SelectedTypeId, ObjectId = model.SelectedObjectId, PaymentTypeId = PaymentTypes.Cash }; var operation = new ExpenditureOperation { Expenditure = expenditure, OperationDateTime = DateTime.Now, OperationTypeId = ExpenditureOperation.EOType.New }; var user = await _userManager.FindByIdAsync(_userManager.GetUserId(User)); using (var transaction = await _db.Database.BeginTransactionAsync()) { _db.ExpenditureOperations.Add(operation); _db.SetUserContext(user.Id); await _db.SaveChangesAsync(); transaction.Commit(); } return(RedirectToAction("IssuedExpenditures")); }
public async Task <ActionResult> ProcessIncomingExpenditure([FromBody] ProcessIncomingExpenditurePostModel model) { var incomingExpenditure = _db.IncomingExpenditures.Include(e => e.FinancialAccountOperation) .ThenInclude(fao => fao.Counterparty) .Include(e => e.FinancialAccountOperation.PayeeUser) .FirstOrDefault(e => e.IncomingExpenditureId == model.ExpenditureId); foreach (var item in model.Items) { var deskGroup = _db.DeskGroups.FirstOrDefault(g => g.DeskGroupId == item.GroupId); var expenditure = new Expenditure { Name = incomingExpenditure.FinancialAccountOperation.Counterparty?.Name ?? incomingExpenditure.FinancialAccountOperation.PayeeUser?.Name ?? "" + " - " + incomingExpenditure.FinancialAccountOperation.Description, Amount = item.Amount, DeskGroupId = item.GroupId, TypeId = _db.ExpenditureTypes.FirstOrDefault(et => et.Description == "Расход").ExpenditureTypeId, ObjectId = model.ExpenditureObjectId, PaymentTypeId = PaymentTypes.Cashless, IncomingExpenditure = incomingExpenditure }; var operation = new ExpenditureOperation { Expenditure = expenditure, OperationDateTime = DateTime.Now, OperationTypeId = ExpenditureOperation.EOType.New }; _db.ExpenditureOperations.Add(operation); } incomingExpenditure.IsProcessed = true; await _db.SaveChangesAsync(); return(Json(new { message = "Ok" })); }
public async Task <ActionResult> CancelExpenditure(int id) { var expenditure = await _db.Expenditures.FindAsync(id); if (expenditure == null) { return(PartialView("Error", new[] { "Операция не найдена" })); } var officeRole = _db.Roles.SingleOrDefault(r => r.Name.Contains("Офис")); var office = _db.Users.FirstOrDefault(u => u.Roles.Any(r => r.RoleId == officeRole.Id)); if (office == null) { return(RedirectToAction("IssuedExpenditures")); } office.Balance += expenditure.Amount; var operation = new ExpenditureOperation { Expenditure = expenditure, OperationDateTime = DateTime.Now, OperationTypeId = ExpenditureOperation.EOType.Cancelled }; var user = await _userManager.FindByIdAsync(_userManager.GetUserId(User)); using (var transaction = await _db.Database.BeginTransactionAsync()) { _db.ExpenditureOperations.Add(operation); _db.SetUserContext(user.Id); await _db.SaveChangesAsync(); transaction.Commit(); } return(RedirectToAction("IssuedExpenditures")); }