static void importBatch(Rbr_Db pDb, PhoneCardBatch pPhoneCardBatch, BackgroundWorker pBackgroundWorker) { if (pPhoneCardBatch.InventoryStatus != InventoryStatus.Activated) { throw new ArgumentException("Unexpected pPhoneCardBatch.InventoryStatus [" + pPhoneCardBatch.InventoryStatus + "]"); } pPhoneCardBatch.DateCreated = DateTime.Now; int _index = 0; pDb.BeginTransaction(); try { foreach (PhoneCardDto _phoneCard in pPhoneCardBatch.PhoneCards) { _index++; importPhoneCardAndRetailAccount(pDb, _phoneCard, pPhoneCardBatch.InventoryStatus, pPhoneCardBatch); reportProgress(_index * 100 / pPhoneCardBatch.PhoneCards.Count, pBackgroundWorker); if (_index % 100 == 0) { reportStatus("Loaded " + _index + " Phone Cards", pBackgroundWorker); } } } catch { pDb.RollbackTransaction(); throw; } pDb.CommitTransaction(); }
//BUG: will not work on remote (replicated nodes //TODO: !!!! public static void Import(PhoneCardBatch pPhoneCardBatch, BackgroundWorker pBackgroundWorker) { reportStatus("Connecting to DB...", pBackgroundWorker); using (var _db = new Rbr_Db()) { //using (Transaction _tx = new Transaction(_db, pPhoneCardBatch, null)) { ServiceRow _serviceRow = ServiceManager.Get(_db, pPhoneCardBatch.ServiceId); if (_serviceRow == null) { throw new Exception("Service not found [Id: " + pPhoneCardBatch.ServiceId + "]"); } checkPendingCancellation(pBackgroundWorker); reportStatus("Data Import Stated", pBackgroundWorker); importBatch(_db, pPhoneCardBatch, pBackgroundWorker); //_tx.Commit(); //} } }
static void importPhoneCardAndRetailAccount(Rbr_Db pDb, PhoneCardDto pPhoneCard, InventoryStatus pInitialInventoryStatus, PhoneCardBatch pPhoneCardBatch) { var _retailAccountRow = new RetailAccountRow(); _retailAccountRow.AccountStatus = Status.Active; //NOTE _retailAccountRow.Start_balance = pPhoneCardBatch.StartBalance; _retailAccountRow.Start_bonus_minutes = pPhoneCardBatch.StartBonusMinutes; _retailAccountRow.Current_balance = pPhoneCardBatch.StartBalance; _retailAccountRow.Current_bonus_minutes = pPhoneCardBatch.StartBonusMinutes; _retailAccountRow.Customer_acct_id = pPhoneCardBatch.CustomerAcctId; _retailAccountRow.Date_created = pPhoneCardBatch.DateCreated; //NOTE _retailAccountRow.Date_active = pPhoneCardBatch.DateCreated; //NOTE _retailAccountRow.Date_to_expire = pPhoneCardBatch.DateToExpire; _retailAccountRow.Date_expired = Configuration.Instance.Db.SqlSmallDateTimeMaxValue; RetailAccountManager.Instance.Add(pDb, _retailAccountRow); pPhoneCard.RetailAcctId = _retailAccountRow.Retail_acct_id; var _phoneCardRow = new PhoneCardRow(); _phoneCardRow.InventoryStatus = pInitialInventoryStatus; if (pInitialInventoryStatus == InventoryStatus.Activated) { _phoneCardRow.CardStatus = Status.Active; } else { _phoneCardRow.CardStatus = Status.Pending; } _phoneCardRow.Pin = pPhoneCard.Pin; _phoneCardRow.Serial_number = pPhoneCard.SerialNumber; _phoneCardRow.Service_id = pPhoneCard.ServiceId; _phoneCardRow.Retail_acct_id = pPhoneCard.RetailAcctId; _phoneCardRow.Date_loaded = pPhoneCardBatch.DateCreated; _phoneCardRow.Date_active = pPhoneCardBatch.DateCreated; _phoneCardRow.Date_to_expire = pPhoneCardBatch.DateToExpire; _phoneCardRow.IsDate_deactivatedNull = true; _phoneCardRow.IsDate_archivedNull = true; RetailAccountManager.AddPhoneCard(pDb, _phoneCardRow); }