public static Invoice ProcessConfirmedInvoice(Invoice invoice)
        {
            if (invoice.entity_type == EntityType.UserBalance)
            {
                UserBalanceRepository.FindOrCreate(invoice);
            }

            if (
                !EntityUtils.IsEntityExists(invoice.entity_id, invoice.entity_type) ||
                invoice.status != InvoiceStatus.Confirmed
                )
            {
                throw new Exception("Entity entity not exists or has invalid status");
            }

            switch (invoice.entity_type)
            {
            case EntityType.UserBalance:
                var user = invoice.User();
                if (user == null)
                {
                    throw new Exception("Invoice user not exists");
                }

                UserBalanceUtils.Deposit(user, invoice);
                break;

            default:
                FundingBalanceUtils.FundEntity(invoice);
                break;
            }

            invoice.UpdateStatus(InvoiceStatus.Done);
            return(invoice.Refresh());
        }
Exemple #2
0
        public static FundingBalance FundEntity(
            User from, int id, EntityType type, decimal amount, CurrencyType currency
            )
        {
            if (!EntityUtils.IsEntityExists(id, type) || amount == 0)
            {
                return(null);
            }

            return(FundingBalanceUtils.FundEntity(from, id, type, amount, currency));
        }