public async Task <IActionResult> Create([FromBody] BudgetCreateViewModel input)
        {
            var    user        = User.GetDetails();
            var    data        = _mapper.Map <BudgetCreateViewModel, Budget>(input);
            var    budget      = new Budget(input.Name, input.Description, input.BudgetHeadId, input.BudgetCategoryId, input.DepartmentId, input.CurrencyId, user.Id);
            string referenceId = await _unitOfWork.NumberingSequences.GenerateReferenceId(NumberingSequenceTypeEnum.Budget);

            if (referenceId == null)
            {
                return(BadRequest("ReferenceId not generated"));
            }

            budget.SetBudgetData(input.BudgetType, referenceId, input.DivisionId, input.SubDivisionId, input.PersonInChargeId, input.Justification);
            budget.SetBudgetAmountData(input.StartDate, input.EndDate, input.TransactionDate, input.BasicAmount, input.TaxAmount);
            budget.CalculateTotalAmount();
            budget.AddSpendLimits(data.BudgetSpendLimits.ToList(), user.Id);
            budget.AddCostCodes(data.BudgetCostCodes.ToList(), user.Id);
            budget.SetBaseId(null);
            budget.SetRevisionNumber(0);
            budget.SetActive();
            if (await _unitOfWork.Budgets.AnyAsync(budget))
            {
                return(BadRequest("Budget Already Exists"));
            }

            _unitOfWork.Budgets.Add(budget);
            await _unitOfWork.CompleteAsync(user.Id);

            return(Ok(budget));
        }
        public async Task <IActionResult> Update([FromBody] BudgetEditViewModel input)
        {
            var user           = User.GetDetails();
            var data           = _mapper.Map <BudgetEditViewModel, Budget>(input);
            var previousBudget = await _unitOfWork.Budgets.GetBudgets(input.Uid);

            previousBudget.SetInActive();
            _unitOfWork.Budgets.Update(previousBudget);
            await _unitOfWork.CompleteAsync(user.Id);

            var budget = new Budget(input.Name, input.Description, input.BudgetHeadId, input.BudgetCategoryId, input.DepartmentId, input.CurrencyId, user.Id);

            budget.SetBudgetData(input.BudgetType, previousBudget.ReferenceId, input.DivisionId, input.SubDivisionId, input.PersonInChargeId, input.Justification);
            budget.SetBudgetAmountData(input.StartDate, input.EndDate, input.TransactionDate, input.BasicAmount, input.TaxAmount);
            budget.CalculateTotalAmount();
            budget.AddSpendLimits(data.BudgetSpendLimits.ToList(), user.Id);
            budget.AddCostCodes(data.BudgetCostCodes.ToList(), user.Id);
            if (previousBudget != null)
            {
                if (previousBudget.BaseId > 0)
                {
                    budget.SetBaseId(previousBudget.BaseId);
                }
                else
                {
                    budget.SetBaseId(previousBudget.Id);
                }
                budget.SetRevisionNumber(previousBudget.RevisionNumber + 1);

                budget.SetActive();
            }
            if (await _unitOfWork.Budgets.AnyAsync(budget))
            {
                return(BadRequest("budget Already Exists."));
            }
            _unitOfWork.Budgets.Add(budget);
            await _unitOfWork.CompleteAsync(user.Id);

            return(Ok(budget));
        }