Exemplo n.º 1
0
        /// <summary>
        /// new expense
        /// </summary>
        /// <param name="editingUserId"></param>
        /// <param name="expense"></param>
        /// <returns></returns>
        public async Task <RServiceResult <GanjoorExpense> > AddExpense(Guid editingUserId, GanjoorExpense expense)
        {
            expense.DonationExpenditures = new List <DonationExpenditure>();//fix swagger posting a list which causes a donation to be added
            _context.GanjoorExpenses.Add(expense);
            await _context.SaveChangesAsync();

            if (!string.IsNullOrEmpty(expense.Unit) && expense.Amount > 0)
            {
                var expenseRemaining = expense.Amount;

                var donations = await _context.GanjoorDonations.Where(d => d.Unit == expense.Unit && d.Remaining > 0).OrderBy(d => d.Id).ToListAsync();

                foreach (var d in donations)
                {
                    if (expenseRemaining <= 0)
                    {
                        break;
                    }

                    var remaining = expenseRemaining;
                    if (remaining > d.Remaining)
                    {
                        remaining = d.Remaining;
                    }

                    DonationExpenditure n = new DonationExpenditure()
                    {
                        Amount            = remaining,
                        GanjoorDonationId = d.Id
                    };

                    expense.DonationExpenditures.Add(n);
                    _context.GanjoorExpenses.Update(expense);

                    var amount = d.Remaining == d.Amount && remaining == d.Remaining ? "" : d.Remaining == remaining ? "باقیماندهٔ آن " : $"مبلغ {LanguageUtils.FormatMoney(remaining)} {d.Unit} آن ";
                    var part   = expense.DonationExpenditures.Count == 1 && remaining == expenseRemaining ? "" : "بخشی از ";
                    if (!string.IsNullOrEmpty(d.ExpenditureDesc))
                    {
                        d.ExpenditureDesc += " ";
                    }
                    d.ExpenditureDesc += $"{amount}جهت تأمین {part}هزینهٔ {expense.Description} به مبلغ {LanguageUtils.FormatMoney(expense.Amount)} {d.Unit} صرف شد ({LanguageUtils.FormatDate(expense.ExpenseDate)}).";
                    d.Remaining       -= remaining;
                    _context.GanjoorDonations.Update(d);


                    await _context.SaveChangesAsync();

                    expenseRemaining -= remaining;
                }
            }

            await RegenerateDonationsPage(editingUserId, $"ثبت هزینهٔ {expense.Description} به مبلغ {LanguageUtils.FormatMoney(expense.Amount)} {expense.Unit}");//ignore possible errors here!

            return(new RServiceResult <GanjoorExpense>(expense));
        }
Exemplo n.º 2
0
        /// <summary>
        /// new donation
        /// </summary>
        /// <param name="editingUserId"></param>
        /// <param name="donation"></param>
        /// <returns></returns>
        public async Task <RServiceResult <GanjoorDonationViewModel> > AddDonation(Guid editingUserId, GanjoorDonationViewModel donation)
        {
            var d = new GanjoorDonation()
            {
                DateString      = LanguageUtils.FormatDate(donation.RecordDate),
                RecordDate      = donation.RecordDate,
                Amount          = donation.Amount,
                Unit            = donation.Unit,
                AmountString    = LanguageUtils.FormatMoney(donation.Amount),
                DonorName       = donation.DonorName,
                Remaining       = donation.Amount,
                ExpenditureDesc = "",
                ImportedRecord  = false
            };

            if (!string.IsNullOrEmpty(donation.Unit))
            {
                d.AmountString = $"{d.AmountString} {d.Unit}";
            }

            _context.GanjoorDonations.Add(d);
            await _context.SaveChangesAsync();

            if (!string.IsNullOrEmpty(d.Unit) && d.Amount > 0)
            {
                var expenses =
                    await _context.GanjoorExpenses
                    .Include(e => e.DonationExpenditures)
                    .Where(e => e.Unit == d.Unit && (e.Amount - e.DonationExpenditures.Sum(x => x.Amount)) > 0)
                    .OrderBy(e => e.Id)
                    .ToListAsync();

                foreach (var expense in expenses)
                {
                    if (d.Remaining <= 0)
                    {
                        break;
                    }
                    var remaining = expense.Amount - expense.DonationExpenditures.Sum(x => x.Amount);
                    if (remaining > d.Remaining)
                    {
                        remaining = d.Remaining;
                    }

                    DonationExpenditure n = new DonationExpenditure()
                    {
                        Amount            = remaining,
                        GanjoorDonationId = d.Id
                    };

                    expense.DonationExpenditures.Add(n);
                    _context.GanjoorExpenses.Update(expense);
                    var amount = d.Remaining == d.Amount && remaining == d.Remaining ? "" : d.Remaining == remaining ? "" : $"مبلغ {LanguageUtils.FormatMoney(remaining)} {d.Unit} آن ";
                    var part   = expense.DonationExpenditures.Count == 0 && remaining == expense.Amount ? "" : "بخشی از ";
                    if (!string.IsNullOrEmpty(d.ExpenditureDesc))
                    {
                        d.ExpenditureDesc += " ";
                    }
                    d.ExpenditureDesc += $"{amount}جهت تأمین {part}هزینهٔ {expense.Description} به مبلغ {LanguageUtils.FormatMoney(expense.Amount)} {d.Unit} صرف شد ({LanguageUtils.FormatDate(expense.ExpenseDate)}).";
                    d.Remaining       -= remaining;
                    _context.GanjoorDonations.Update(d);
                    await _context.SaveChangesAsync();
                }
            }


            await RegenerateDonationsPage(editingUserId, $"ثبت کمک مالی از {d.DonorName} به مبلغ {d.AmountString}");//ignore possible errors here!

            donation.Id              = d.Id;
            donation.DateString      = d.DateString;
            donation.AmountString    = d.AmountString;
            donation.Remaining       = d.Remaining;
            donation.ExpenditureDesc = d.ExpenditureDesc;
            donation.ImportedRecord  = d.ImportedRecord;



            return(new RServiceResult <GanjoorDonationViewModel>(donation));
        }