public ActivityHistoryModel(Transaction_Subtransaction sub, SIEBUEntities db = null) { if (db == null) db = new SIEBUEntities(); value = sub.total.Value; date = (DateTime)sub.Transaction.dateprocessed; invoice = sub.Transaction.invoice; transaction = sub.st_id; is_purchase = false; }
/// <summary> /// Create all the subtransactions associated with the transaction ID and shopping cart /// </summary> /// <param name="cart">the shopping cart</param> /// <param name="transactionId">the transaction id</param> private Dictionary<int, int> createSubTransaction(ShoppingCartModel cart, int transactionId, int status) { List<CartStore> stores = cart.getStoreItems(); int numberOfVendors = stores.Count; Dictionary<int, int> subtransactionIds = new Dictionary<int, int>(); foreach (CartStore store in stores) { Transaction_Subtransaction subTransaction = new Transaction_Subtransaction(); //create the invoice List<Transaction_Subtransaction> subTransactionList = db.Transaction_Subtransaction.Where(o => o.store_id == store.storeId).ToList(); int subOrderCount = 0; foreach (Transaction_Subtransaction sub in subTransactionList) { if (sub.invoice.Contains(DateTime.Now.ToString("yyyyMMdd"))) subOrderCount++; } subTransaction.invoice = "INV" + store.storeId + "D" + DateTime.Now.ToString("yyyyMMdd") + "N" + subOrderCount + "S"; subTransaction.transaction_id = transactionId; subTransaction.store_id = store.storeId; subTransaction.commission = store.commission; subTransaction.shipping_fees = store.shipping; subTransaction.subtotal = store.subtotal; if (status == paymentProcessed) { subTransaction.processing_fees = 0; //Processing fee should be zero if items were bought in store. subTransaction.siebu_processing_fees = 0; subTransaction.siebu_revenue = store.commission; } else { subTransaction.processing_fees = Math.Round(decimal.Multiply(store.subtotal, processingFeePercent), 2) + Math.Round(decimal.Divide(processingFeeOffset, numberOfVendors), 2); //2.9% of the subtotal + $0.30/#of vendors subTransaction.siebu_processing_fees = Math.Round(decimal.Multiply(store.subtotal, processingFeePercent), 2) + processingFeeOffset; //2.9% of the subtotal + $0.30 subTransaction.siebu_revenue = subTransaction.commission + subTransaction.siebu_processing_fees - subTransaction.processing_fees; } db.Transaction_Subtransaction.Add(subTransaction); subTransaction.total = store.subtotal + store.shipping - store.commission - subTransaction.siebu_processing_fees; //EARNINGS: Give earnings to the vendor in the user table. After the item has been shipping (transaction status = 1) if (status == paymentProcessed) { Store vendor = db.Stores.Where(st => st.s_id == store.storeId).FirstOrDefault(); vendor.credit = (vendor.credit != null) ? vendor.credit + subTransaction.total : subTransaction.total; } db.SaveChanges(); Store theStore = db.Stores.Where(s => s.s_id == store.storeId).FirstOrDefault(); subtransactionIds.Add(theStore.creator_id, subTransaction.st_id); //create individual transaction items for (int i = 0; i < store.cartItems.Count; i++) { this.createTransactionItem(transactionId, subTransaction.st_id, store.cartItems[i], status); } db.SaveChanges(); } return subtransactionIds; }