Ejemplo n.º 1
0
        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"));
        }
Ejemplo n.º 2
0
        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"));
        }
Ejemplo n.º 3
0
        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" }));
        }
Ejemplo n.º 4
0
        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"));
        }