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);
        }