Beispiel #1
0
        public void New(int issuerEntityID, int receiverEntityID, int currencyID)
        {
            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    var newInvoice = new AccountingLib.Models.invoice()
                    {
                        issuerEntityID   = issuerEntityID,
                        receiverEntityID = receiverEntityID,
                        currencyID       = currencyID
                    };
                    ctx.invoice.AddObject(newInvoice);
                    ctx.SaveChanges();

                    //create invoice Action
                    var invAction = new AccountingLib.Models.invoiceAction()
                    {
                        invoiceID     = newInvoice.ID,
                        invoiceStatID = (int)enums.invoiceStat.Generated
                    };
                    ctx.invoiceAction.AddObject(invAction);
                    ctx.SaveChanges();

                    this.loadInvoiceByInvoiceID(newInvoice.ID);

                    ts.Complete();
                }
        }
Beispiel #2
0
        private void RecordInvoiceTransaction(List <int> transactions, enums.invoiceStat invoiceStat)
        {
            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    //create invoice Action
                    var invAction = new AccountingLib.Models.invoiceAction()
                    {
                        invoiceID     = this.invoiceID,
                        invoiceStatID = (int)invoiceStat
                    };
                    ctx.invoiceAction.AddObject(invAction);
                    ctx.SaveChanges();


                    //create invoice Transactions and invoice action Transactions
                    foreach (var item in transactions)
                    {
                        var invActionTrans = new AccountingLib.Models.invoiceActionTransaction()
                        {
                            invoiceActionID = invAction.ID,
                            transactionID   = item
                        };
                        ctx.invoiceActionTransaction.AddObject(invActionTrans);

                        ctx.SaveChanges();
                    }

                    ts.Complete();
                }
        }
Beispiel #3
0
        public void New(string firstName, string lastName)
        {
            using (var ctx = new AccContexts())
            {
                base.New((int)enums.entityType.Person);

                var checkDuplication = ctx.person.Where(x => x.firstName == firstName && x.lastName == lastName).FirstOrDefault();
                if (checkDuplication != null)
                {
                    throw new Exception("Person Duplicated");
                }

                var newPerson = new AccountingLib.Models.person()
                {
                    firstName = firstName,
                    lastName  = lastName,
                    entityID  = base.ENTITYID
                };
                ctx.person.AddObject(newPerson);
                ctx.SaveChanges();

                this.id        = newPerson.ID;
                this.firstname = newPerson.firstName;
                this.lastname  = newPerson.lastName;
            }
        }
Beispiel #4
0
        /*cancelling one payment od invoice at the time*/
        public void cancelInvoicePaymentEXT(int paymentID)
        {
            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    accounting.classes.externalPayment payment = new accounting.classes.externalPayment();
                    payment.loadByPaymentID(paymentID);

                    List <int> transactions = payment.cancelPayment(enums.paymentAction.Void);

                    /*Record Invoice Payment transactions*/
                    this.RecordInvoicePaymentTransactions(transactions, paymentID, enums.paymentStat.VoidApproved);

                    /*Record Invoice Transaction*/
                    if (payment.extPaymentTypeID == (int)enums.extPaymentType.CreditPayment)
                    {
                        this.RecordInvoiceTransaction(transactions, enums.invoiceStat.partialCreditCardPaymantCancelled);
                    }

                    if (payment.extPaymentTypeID == (int)enums.extPaymentType.InteracPayment)
                    {
                        this.RecordInvoiceTransaction(transactions, enums.invoiceStat.partialInteracPaymantCancelled);
                    }

                    ts.Complete();
                }
        }
Beispiel #5
0
        public void loadByCardID(int cardID)
        {
            using (var ctx = new AccContexts())
            {
                var paymentRecord = ctx.card
                                    .Where(x => x.ID == cardID)
                                    .Select(x => new
                {
                    cardID     = x.ID,
                    cardNumber = x.cardNumber,
                    cardTypeID = x.cardTypeID,
                    expiryDate = (DateTime)x.expiryDate,
                })
                                    .SingleOrDefault();

                if (paymentRecord == null)
                {
                    throw new Exception("no such a Card Exists");
                }

                this.cardID     = paymentRecord.cardID;
                this.cardTypeID = (int)paymentRecord.cardTypeID;
                this.cardNumber = paymentRecord.cardNumber;
                this.expiryDate = (DateTime)paymentRecord.expiryDate;
            }
        }
Beispiel #6
0
        public AccountingLib.Models.account Create(int ownerEntityId, int currencyID, decimal balance = 0)
        {
            using (var ctx = new AccContexts())
            {
                var duplicate = ctx.account
                                .Where(x => x.ownerEntityID == ownerEntityId && x.currencyID == currencyID && x.catTypeID == CATTYPE)
                                .SingleOrDefault();
                if (duplicate != null)
                {
                    ctx.DeleteObject(duplicate);
                }

                var newAccount = new account()
                {
                    catTypeID     = CATTYPE,
                    ownerEntityID = ownerEntityId,
                    currencyID    = currencyID,
                    balance       = balance
                };
                ctx.account.AddObject(newAccount);
                ctx.SaveChanges();

                return(newAccount);
            }
        }
Beispiel #7
0
        public void createNew(int cardTypeID)
        {
            if (this.cardNumber == null)
            {
                throw new Exception("No Card Number Entered");
            }
            if (this.expiryDate == null)
            {
                throw new Exception("No Expiy Date Entered");
            }

            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    var newCard = new AccountingLib.Models.card()
                    {
                        cardTypeID = cardTypeID,
                        cardNumber = this.cardNumber,
                        expiryDate = this.expiryDate
                    };
                    ctx.card.AddObject(newCard);
                    ctx.SaveChanges();

                    /*Reload object Props*/
                    this.loadByCardID(newCard.ID);

                    ts.Complete();
                }
        }
Beispiel #8
0
        protected void loadByPaymentID(int paymentID)
        {
            using (var ctx = new AccContexts())
            {
                var paymentRecord = ctx.payment
                                    .Where(x => x.ID == paymentID)
                                    .Select(x => new
                {
                    paymentID     = x.ID,
                    payerEntityID = (int)x.payerEntityID,
                    payeeEntityID = (int)x.payeeEntityID,
                    amount        = (decimal)x.amount,
                    paymentTypeID = (int)x.paymentTypeID,
                    currencyID    = (int)x.currencyID
                })
                                    .SingleOrDefault();

                if (paymentRecord == null)
                {
                    throw new Exception("no such a Payment Exists");
                }

                this.paymentID     = paymentRecord.paymentID;
                this.paymentTypeID = (int)paymentRecord.paymentTypeID;
                this.payerEntityID = (int)paymentRecord.payerEntityID;
                this.payeeEntityID = (int)paymentRecord.payeeEntityID;
                this.amount        = (decimal)paymentRecord.amount;
                this.currencyID    = (int)paymentRecord.currencyID;
            }
        }
Beispiel #9
0
        public void doCCExtPayment(decimal amount, int cardID, enums.ccCardType ccCardType)
        {
            //var ccFeeFor

            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    classes.ccPayment creditCardPayment = new ccPayment();
                    creditCardPayment.createNew(this.receiverEntityID, this.issuerEntityID, amount, this.currencyID, cardID);


                    /*Record New Invoice Payment*/
                    var NewInvoicePayment = new AccountingLib.Models.invoicePayment()
                    {
                        invoiceID = invoiceID,
                        paymentID = creditCardPayment.paymentID
                    };
                    ctx.invoicePayment.AddObject(NewInvoicePayment);
                    ctx.SaveChanges();

                    //get Fee bank cardType
                    var card = new classes.card.CreditCard();
                    card.loadByCardID(cardID);


                    ccFee ccfee = new ccFee();
                    ccfee.loadccFeeByBankCardTypeID((int)ccCardType, (card as Entity).getBankByCard(card.cardID).bankID);

                    //Record related transctions [for invoice payment]
                    List <int> transactions = new List <int>();

                    transactions.Add(Transaction.createNew(receiverEntityID, (int)AssetCategories.CCCASH, -1 * amount, this.currencyID));
                    transactions.Add(Transaction.createNew(receiverEntityID, (int)LibCategories.AP, +1 * amount, this.currencyID));

                    transactions.Add(Transaction.createNew(issuerEntityID, (int)AssetCategories.W, +1 * amount - (decimal)ccfee.amount, this.currencyID));
                    transactions.Add(Transaction.createNew(issuerEntityID, (int)AssetCategories.AR, -1 * amount, this.currencyID));
                    transactions.Add(Transaction.createNew(issuerEntityID, (int)OECategories.EXP, (decimal)ccfee.amount, this.currencyID));

                    /*Record Invoice Payment transactions*/
                    this.RecordInvoicePaymentTransactions(transactions, creditCardPayment.paymentID, enums.paymentStat.PaidApproved);

                    /*Record Invoice Transaction*/
                    enums.invoiceStat?invoicestat = null;
                    switch (ccCardType)
                    {
                    case enums.ccCardType.MASTERCARD:
                        invoicestat = enums.invoiceStat.masterCardPaymant;
                        break;

                    case enums.ccCardType.VISACARD:
                        invoicestat = enums.invoiceStat.visaCardPaymant;
                        break;
                    }
                    this.RecordInvoiceTransaction(transactions, (enums.invoiceStat)invoicestat);


                    ts.Complete();
                }
        }
Beispiel #10
0
 public static AccountingLib.Models.account getAccount(int entityID, int catTypeID, int currencyID)
 {
     using (var ctx = new AccContexts())
     {
         var account = ctx.account.Where(x => x.catTypeID == catTypeID && x.ownerEntityID == entityID && x.currencyID == currencyID).SingleOrDefault();
         return(account);
     }
 }
Beispiel #11
0
 /// <summary>
 /// //Get Sum of Invoice Services added
 /// </summary>
 /// <param name="invoiceID"></param>
 /// <returns></returns>
 public decimal getInvoiceServicesSumAmt()
 {
     using (var ctx = new AccContexts())
     {
         var invoice = ctx.invoice.Where(x => x.ID == this.invoiceID).SingleOrDefault();
         if (invoice == null)
         {
             throw new Exception();
         }
         var invoiceServicesAmt = ctx.invoiceService.Where(x => x.invoiceID == this.invoiceID).Sum(x => x.amount);
         return((decimal)invoiceServicesAmt);
     }
 }
Beispiel #12
0
        public List <AccountingLib.Models.card> fetchCards()
        {
            using (var ctx = new AccContexts())
            {
                var cardsList = ctx.entityCard
                                .Where(x => x.entityID == this.ENTITYID)
                                .Select(x => x.card).ToList();

                this.cards = cardsList;

                return(cardsList);
            }
        }
Beispiel #13
0
        public List <AccountingLib.Models.payment> getAllPayments()
        {
            using (var ctx = new AccContexts())
            {
                var payments = ctx.invoicePayment
                               .Where(z => (int)z.invoiceID == this.invoiceID)
                               //.Where(z=>z.invoice.in)
                               .Select(x => x.payment)
                               .ToList();

                return(payments);
            }
        }
Beispiel #14
0
        public List <int> cancelPayment(enums.paymentAction _paymentAction)
        {
            //First check this payment is able to be cancelled  ************

            //get Related transacions and input reveres ones
            using (var ctx = new AccContexts())
            {
                //get Payment details
                var payment = ctx.payment
                              .Where(x => x.ID == paymentID).SingleOrDefault();

                if (payment == null)
                {
                    throw new Exception("Payment Could not be found");
                }

                this.paymentID     = (int)payment.ID;
                this.payerEntityID = (int)payment.payerEntityID;
                this.payeeEntityID = (int)payment.payeeEntityID;
                this.amount        = (decimal)payment.amount;
                this.currencyID    = (int)payment.currencyID;

                //get payment Transactions
                var paymentTransactions = ctx.paymentAction
                                          .Where(x => x.paymentID == this.paymentID)
                                          .Single()
                                          .paymentActionTransaction
                                          .Select(x => new
                {
                    ownerEntityID = x.transaction.account.ownerEntityID,
                    catTypeID     = x.transaction.account.catTypeID,
                    amount        = x.transaction.amount,
                    currencyID    = x.transaction.account.currencyID
                })
                                          .ToList();

                //enter and save revered Transactions
                List <int> reveresedTransactions = new List <int>();
                foreach (var txn in paymentTransactions)
                {
                    reveresedTransactions.Add(Transaction.createNew((int)txn.ownerEntityID, (int)txn.catTypeID, -1 * (decimal)txn.amount, (int)txn.currencyID));
                }

                //IF PAYMENT ACTION IS REFUND, NEW FEE HANDLING TRANSACTIONS WOULD BE NEEDED



                return(reveresedTransactions);
            }
        }
Beispiel #15
0
        protected void New(int entityTypeID)
        {
            using (var ctx = new AccContexts())
            {
                var newEntity = new AccountingLib.Models.entity()
                {
                    entityTypeID = entityTypeID
                };
                ctx.entity.AddObject(newEntity);
                ctx.SaveChanges();

                /*reload entity*/
                this.ENTITYID = newEntity.ID;
            }
        }
Beispiel #16
0
        public void loadccFeeByBankCardTypeID(int ccCardTypeID, int bankID)
        {
            using (var ctx = new AccContexts())
            {
                var ccfee = ctx.ccFee.Where(x => (int)x.ccCardTypeID == ccCardTypeID && x.bankID == bankID)
                            .SingleOrDefault();

                if (ccfee == null)
                {
                    throw new Exception("CC fee does not Exists [loadccFeeByBankCardTypeID]");
                }

                this.loadFeeByID(ccfee.ID);
            }
        }
Beispiel #17
0
        public void addCard(int cardID)
        {
            int entityID = (int)this.ENTITYID;

            using (var ctx = new AccContexts())
            {
                var person        = ctx.person.Where(x => x.entityID == entityID).SingleOrDefault();
                var newEntityCard = new AccountingLib.Models.entityCard()
                {
                    entityID = this.ENTITYID,
                    CardID   = cardID
                };
                ctx.entityCard.AddObject(newEntityCard);
                ctx.SaveChanges();
            }
        }
Beispiel #18
0
        /// <summary>
        /// load the bank class params from DB by bankID
        /// </summary>
        /// <param name="bankID"></param>
        private void loadBankByBankID(int bankID)
        {
            using (var ctx = new AccContexts())
            {
                var _bank = ctx.bank
                            .Where(x => x.ID == bankID).SingleOrDefault();
                if (_bank == null)
                {
                    throw new Exception("bank has not found");
                }

                this.bankID   = _bank.ID;
                this.bankName = _bank.name;
                base.ENTITYID = (int)_bank.entityID;
            }
        }
Beispiel #19
0
        public invoiceService addService(int serviceID, decimal amount)
        {
            using (var ctx = new AccContexts())
            {
                var newInvoiceService = new AccountingLib.Models.invoiceService()
                {
                    invoiceID  = this.invoiceID,
                    serviceID  = serviceID,
                    currencyID = this.currencyID,
                    amount     = amount
                };
                ctx.invoiceService.AddObject(newInvoiceService);
                ctx.SaveChanges();

                return(newInvoiceService);
            }
        }
Beispiel #20
0
        private void loadInvoiceByInvoiceID(int invoiceID)
        {
            using (var ctx = new AccContexts())
            {
                var inv = ctx.invoice
                          .Where(x => x.ID == invoiceID).SingleOrDefault();
                if (inv == null)
                {
                    throw new Exception("Invoice does not exists");
                }

                this.invoiceID        = inv.ID;
                this.issuerEntityID   = (int)inv.issuerEntityID;
                this.receiverEntityID = (int)inv.receiverEntityID;
                this.currencyID       = (int)inv.currencyID;
            }
        }
Beispiel #21
0
        public void doINTERACPayment(decimal amount, int cardID)
        {
            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    classes.dbPayment debitCardPayment = new dbPayment();
                    debitCardPayment.createNew(this.receiverEntityID, this.issuerEntityID, amount, this.currencyID, cardID);

                    /*Record New Invoice Payment*/
                    var NewInvoicePayment = new AccountingLib.Models.invoicePayment()
                    {
                        invoiceID = this.invoiceID,
                        paymentID = debitCardPayment.paymentID
                    };
                    ctx.invoicePayment.AddObject(NewInvoicePayment);
                    ctx.SaveChanges();


                    //get Fee bank cardType
                    var card = new classes.card.DebitCard();
                    card.loadByCardID(cardID);


                    Fee fee = new Fee();
                    fee.loadFeeByBankCardTypeID(card.cardTypeID, ((Entity)card).getBankByCard(cardID).bankID);

                    //Record related transctions [for invoice payment]
                    List <int> transactions = new List <int>();
                    transactions.Add(Transaction.createNew(receiverEntityID, (int)AssetCategories.DBCASH, -1 * amount, this.currencyID));
                    transactions.Add(Transaction.createNew(receiverEntityID, (int)LibCategories.AP, +1 * amount, this.currencyID));

                    transactions.Add(Transaction.createNew(issuerEntityID, (int)AssetCategories.W, +1 * amount - (decimal)fee.amount, this.currencyID));
                    transactions.Add(Transaction.createNew(issuerEntityID, (int)AssetCategories.AR, -1 * amount, this.currencyID));
                    transactions.Add(Transaction.createNew(issuerEntityID, (int)OECategories.EXP, (decimal)fee.amount, this.currencyID));

                    /*Record Invoice Payment transactions*/
                    this.RecordInvoicePaymentTransactions(transactions, debitCardPayment.paymentID, enums.paymentStat.PaidApproved);

                    /*Record Invoice Transaction*/
                    this.RecordInvoiceTransaction(transactions, enums.invoiceStat.interacPaymant);


                    ts.Complete();
                }
        }
Beispiel #22
0
        public void cancelInvoicePaymentINTERNAL(int paymentID)
        {
            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    accounting.classes.internalPayment payment = new accounting.classes.internalPayment();
                    payment.loadByPaymentID(paymentID);

                    List <int> transactions = payment.cancelPayment(enums.paymentAction.Void);
                    /*Record Invoice Payment transactions*/
                    this.RecordInvoicePaymentTransactions(transactions, paymentID, enums.paymentStat.VoidApproved);

                    /*Record Invoice Transaction*/
                    this.RecordInvoiceTransaction(transactions, enums.invoiceStat.partialInternalPaymantCancelled);

                    ts.Complete();
                }
        }
Beispiel #23
0
        protected void createNew(int payerEntityID, int payeeEntityID, decimal amount, int currencyID, int paymentTypeID)
        {
            using (var ctx = new AccContexts())
            {
                var _payment = new AccountingLib.Models.payment()
                {
                    payerEntityID = payerEntityID,
                    payeeEntityID = payeeEntityID,
                    amount        = amount,
                    currencyID    = currencyID,
                    paymentTypeID = paymentTypeID
                };
                ctx.payment.AddObject(_payment);
                ctx.SaveChanges();

                loadByPaymentID(_payment.ID);
            }
        }
Beispiel #24
0
        public void createNew(int payerEntityID, int payeeEntityID, decimal amount, int currencyID)
        {
            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    base.createNew(payerEntityID, payeeEntityID, amount, currencyID, (int)enums.paymentType.Internal);

                    var _internalPayment = new AccountingLib.Models.internalPayment()
                    {
                        paymentID = base.paymentID
                    };
                    ctx.internalPayment.AddObject(_internalPayment);
                    ctx.SaveChanges();

                    this.loadByPaymentID((int)_internalPayment.paymentID);

                    ts.Complete();
                }
        }
Beispiel #25
0
        public new void loadByPaymentID(int paymentID)
        {
            using (var ctx = new AccContexts())
            {
                base.loadByPaymentID(paymentID);

                var internalPaymentRecord = ctx.internalPayment
                                            .Where(x => x.paymentID == paymentID)
                                            .SingleOrDefault();

                if (internalPaymentRecord == null)
                {
                    throw new Exception("no such a EXT Payment Exists");
                }

                this.internalPaymentID          = internalPaymentRecord.ID;
                this.internalPaymentDescription = internalPaymentRecord.description;
            }
        }
Beispiel #26
0
        private void loadPerson(int personEntityId)
        {
            using (var ctx = new AccContexts())
            {
                var person = ctx.person
                             .Where(x => x.entityID == personEntityId)
                             .SingleOrDefault();

                if (person == null)
                {
                    throw new Exception("no such a Person Exists");
                }

                this.id        = person.ID;
                this.firstname = person.firstName;
                this.lastname  = person.lastName;
                base.ENTITYID  = (int)person.entityID;
            }
        }
Beispiel #27
0
        public void loadFeeByID(int ccfeeID)
        {
            using (var ctx = new AccContexts())
            {
                var _fee = ctx.ccFee
                           .Where(x => x.ID == ccfeeID)
                           .SingleOrDefault();

                if (_fee == null)
                {
                    throw new Exception("no such a CCFee Exists");
                }

                this.ccfeeID      = _fee.ID;
                this.bankID       = (int)_fee.bankID;
                this.ccCardTypeID = (int)_fee.ccCardTypeID;
                this.amount       = (decimal)_fee.amount;
                this.deacription  = _fee.description;
            }
        }
Beispiel #28
0
        public void New()
        {
            base.createNew((int)enums.ccCardType.VISACARD);

            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    var newvisaCard = new visaCard()
                    {
                        ccCardID = base.ccCardID
                    };

                    ctx.visaCard.AddObject(newvisaCard);
                    ctx.SaveChanges();

                    /*Reload object Props*/
                    this.visaCardID = newvisaCard.ID;

                    ts.Complete();
                }
        }
Beispiel #29
0
        public void New()
        {
            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    base.createNew((int)enums.cardType.DebitCard);

                    var newDBCard = new AccountingLib.Models.dbCard()
                    {
                        cardID     = base.cardID,
                        cardTypeID = this.CARDTYPEID
                    };
                    ctx.dbCard.AddObject(newDBCard);
                    ctx.SaveChanges();

                    /*reload object props*/
                    this.dbCardID = newDBCard.ID;

                    ts.Complete();
                }
        }
Beispiel #30
0
        /// <summary>
        /// 1-Records related transactions
        /// 2-record Invoice Tranactions
        /// </summary>
        /// <param name="invoiceID"></param>
        public void finalizeInvoice()
        {
            using (var ctx = new AccContexts())
                using (var ts = new TransactionScope())
                {
                    //Get Sum of Invoice Services added
                    decimal invoiceServicesAmt = this.getInvoiceServicesSumAmt();

                    //Record related transctions
                    List <int> transactions = new List <int>();
                    var        trans1       = Transaction.createNew((int)this.receiverEntityID, (int)LibCategories.AP, -1 * (decimal)invoiceServicesAmt, (int)this.currencyID);
                    transactions.Add(trans1);
                    var trans2 = Transaction.createNew((int)this.issuerEntityID, (int)AssetCategories.AR, +1 * (decimal)invoiceServicesAmt, (int)this.currencyID);
                    transactions.Add(trans2);

                    /*Record Invoice Transaction*/
                    this.RecordInvoiceTransaction(transactions, enums.invoiceStat.Finalized);

                    ts.Complete();
                }
        }