private static RetailAccountRow createRetailAccount(Rbr_Db pDb, InventoryCommandRequest pInventoryCommandRequest)
        {
            var _retailAccountRow = new RetailAccountRow();

            _retailAccountRow.Customer_acct_id      = pInventoryCommandRequest.CustomerAcctId;
            _retailAccountRow.Start_balance         = pInventoryCommandRequest.Denomination;
            _retailAccountRow.Start_bonus_minutes   = 0;
            _retailAccountRow.Current_balance       = pInventoryCommandRequest.Denomination;
            _retailAccountRow.Current_bonus_minutes = 0;
            _retailAccountRow.AccountStatus         = Status.Active;
            _retailAccountRow.Date_active           = pInventoryCommandRequest.DateCreated;
            _retailAccountRow.Date_created          = pInventoryCommandRequest.DateCreated;
            _retailAccountRow.Date_to_expire        = pInventoryCommandRequest.DateToExpire;
            _retailAccountRow.Date_expired          = Configuration.Instance.Db.SqlSmallDateTimeMaxValue;

            pDb.RetailAccountCollection.Insert(_retailAccountRow);
            TimokLogger.Instance.LogRbr(LogSeverity.Debug, "InventoryController.loadPhoneCardAndRetailAccount", string.Format("RetailAccountRow inserted, Id={0}", _retailAccountRow.Retail_acct_id));
            return(_retailAccountRow);
        }
        private static void executeExport(Rbr_Db pDb, BackgroundWorker pBackgroundWorker, DoWorkEventArgs pEvtArg, InventoryCommandRequest pInventoryCommandRequest)
        {
            int _count = 0;

            foreach (var _batch in pInventoryCommandRequest.Batches)
            {
                pBackgroundWorker.ReportStatus("Start exporting " + pInventoryCommandRequest.InventoryCommand + " command on Batch: [id=" + _batch.BatchId + "] [CardCount=" + _batch.BatchSize + "]");

                if (pBackgroundWorker.CancellationPending)
                {
                    pEvtArg.Cancel = true;
                    return;
                }

                int[] _retailAcctIds = pDb.PhoneCardCollection.Export(InventoryStatus.Loaded, _batch.FirstSerial, _batch.LastSerial);
                var   _batchRow      = MapToBatchRow(_batch);
                pDb.BatchCollection.Update(_batchRow);

                //TODO: !!! ResellerAgentId - N/A FOR NOW
                //TODO: !!! SalesRepAcctId - N/A FOR NOW
                logInventoryHistory(pDb, pInventoryCommandRequest.Person, DateTime.Now, pInventoryCommandRequest.ServiceId, _batch.Denomination, _batch.BatchId, _batch.BatchSize, pInventoryCommandRequest.InventoryCommand, pInventoryCommandRequest.CustomerAcctId, 0, 0);
                pBackgroundWorker.ReportProgress(++_count * 100 / pInventoryCommandRequest.Batches.Length);
                pBackgroundWorker.ReportStatus("Finished executing " + pInventoryCommandRequest.InventoryCommand + " command on Batch: [id=" + _batch.BatchId + "] [CardCount=" + _batch.BatchSize + "]");
            }
        }
        private static void executeCommand(Rbr_Db pDb, BackgroundWorker pBackgroundWorker, DoWorkEventArgs pEvtArg, InventoryCommandRequest pInventoryCommandRequest)
        {
            #region exec logic

            //RetAcct  NO CHANGE
            //PoneCard status = Activeted,    date_active =       pInventoryCommandRequest.DateActive
            //PoneCard status = Deactivated,  date_deactivated =  pInventoryCommandRequest.DateDeactive
            //PoneCard status = Archived,     date_deactivated =  pInventoryCommandRequest.DateArchive

            #endregion exec logic

            int _count = 0;
            foreach (var _batch in pInventoryCommandRequest.Batches)
            {
                pBackgroundWorker.ReportStatus("Start executing " + pInventoryCommandRequest.InventoryCommand + " command on Batch: [id=" + _batch.BatchId + "] [CardCount=" + _batch.BatchSize + "]");

                if (pBackgroundWorker.CancellationPending)
                {
                    pEvtArg.Cancel = true;
                    return;
                }

                switch (pInventoryCommandRequest.InventoryCommand)
                {
                case InventoryCommand.Activate:
                    _batch.InventoryStatus = InventoryStatus.Activated;
                    pDb.PhoneCardCollection.ActivateInventory(pInventoryCommandRequest.DateActive, _batch.FirstSerial, _batch.LastSerial);
                    break;

                case InventoryCommand.Deactivate:
                    _batch.InventoryStatus = InventoryStatus.Deactivated;
                    pDb.PhoneCardCollection.DeactivateInventory(_batch.FirstSerial, _batch.LastSerial);
                    break;

                case InventoryCommand.Archive:
                    _batch.InventoryStatus = InventoryStatus.Archived;
                    pDb.PhoneCardCollection.ArchiveInventory(_batch.FirstSerial, _batch.LastSerial);
                    break;

                case InventoryCommand.Load:
                default:
                    throw new ArgumentException("Unexpected InventoryCommand [" + pInventoryCommandRequest.InventoryCommand + "]");
                }
                var _batchRow = MapToBatchRow(_batch);
                pDb.BatchCollection.Update(_batchRow);

                //TODO: !!! ResellerAgentId - N/A FOR NOW
                //TODO: !!! SalesRepAcctId - N/A FOR NOW
                logInventoryHistory(pDb, pInventoryCommandRequest.Person, DateTime.Now, pInventoryCommandRequest.ServiceId, _batch.Denomination, _batch.BatchId, _batch.BatchSize, pInventoryCommandRequest.InventoryCommand, pInventoryCommandRequest.CustomerAcctId, 0, 0);
                pBackgroundWorker.ReportProgress(++_count * 100 / pInventoryCommandRequest.Batches.Length);
                pBackgroundWorker.ReportStatus("Finished executing " + pInventoryCommandRequest.InventoryCommand + " command on Batch: [id=" + _batch.BatchId + "] [CardCount=" + _batch.BatchSize + "]");
            }
        }
        private static void loadPhoneCardAndRetailAccount(Rbr_Db pDb, long pSerial, long pPin, InventoryCommandRequest pInventoryCommandRequest)
        {
            //PoneCard status = Loaded | (Activeted if Activate on load)
            //RetAcct  status = Active, date_active = pInventoryCommandRequest.DateCreated

            RetailAccountRow _retailAccountRow = createRetailAccount(pDb, pInventoryCommandRequest);

            var _phoneCardRow = new PhoneCardRow();

            //TODO: !!! setup new dates here...
            if (pInventoryCommandRequest.ActivateOnLoad)
            {
                _phoneCardRow.InventoryStatus = InventoryStatus.Activated;
                _phoneCardRow.CardStatus      = Status.Active;
                _phoneCardRow.Date_active     = pInventoryCommandRequest.DateActive;
            }
            else
            {
                _phoneCardRow.InventoryStatus   = InventoryStatus.Loaded;
                _phoneCardRow.CardStatus        = Status.Pending;
                _phoneCardRow.IsDate_activeNull = true;
            }
            _phoneCardRow.Pin            = pPin;
            _phoneCardRow.Retail_acct_id = _retailAccountRow.Retail_acct_id;
            _phoneCardRow.Serial_number  = pSerial;
            _phoneCardRow.Service_id     = pInventoryCommandRequest.ServiceId;

            _phoneCardRow.Date_loaded            = pInventoryCommandRequest.DateCreated;
            _phoneCardRow.Date_to_expire         = pInventoryCommandRequest.DateToExpire;
            _phoneCardRow.IsDate_deactivatedNull = true;
            _phoneCardRow.IsDate_archivedNull    = true;

            pDb.PhoneCardCollection.Insert(_phoneCardRow);
            TimokLogger.Instance.LogRbr(LogSeverity.Debug, "InventoryController.loadPhoneCardAndRetailAccount", string.Format("PhoneCardRow inserted, Serial={0}", _phoneCardRow.Serial_number));
        }
        //--------------------------------- Privates -----------------------------------
        private static void executeLoadCommand(Rbr_Db pDb, BackgroundWorker pBackgroundWorker, DoWorkEventArgs pEvtArg, InventoryCommandRequest pInventoryCommandRequest)
        {
            pBackgroundWorker.ReportStatus(string.Format("Loading {0} Batches", pInventoryCommandRequest.Batches));

            foreach (var _batch in pInventoryCommandRequest.Batches)
            {
                string _batchFilePath = Configuration.Instance.Folders.GetInventoryBatchFilePath(_batch.ServiceId, _batch.Denomination, _batch.BatchId);
                pBackgroundWorker.ReportStatus("Loading Batch File: " + _batchFilePath);

                using (var _sr = new StreamReader(_batchFilePath)) {
                    _batch.CustomerAcctId = pInventoryCommandRequest.CustomerAcctId;

                    if (pInventoryCommandRequest.ActivateOnLoad)
                    {
                        _batch.InventoryStatus = InventoryStatus.Activated;
                    }
                    else
                    {
                        _batch.InventoryStatus = InventoryStatus.Loaded;
                    }

                    try {
                        int    _cardCount = 0;
                        string _line;
                        while ((_line = _sr.ReadLine()) != null)
                        {
                            //pBackgroundWorker.ReportStatus(string.Format("{0}", _line));
                            if (pBackgroundWorker.CancellationPending)
                            {
                                pBackgroundWorker.ReportStatus("Canceled");
                                pEvtArg.Cancel = true;
                                return;
                            }

                            string[] _fields = _line.Split(FieldDelimiter);
                            long     _serial = long.Parse(_fields[0]);
                            long     _pin    = long.Parse(_fields[1]);
                            loadPhoneCardAndRetailAccount(pDb, _serial, _pin, pInventoryCommandRequest);

                            pBackgroundWorker.ReportProgress(++_cardCount * 100 / _batch.BatchSize);
                        }
                    }
                    catch (Exception _ex) {
                        pBackgroundWorker.ReportStatus(string.Format("Exception:\r\n{0}", _ex));
                        pEvtArg.Cancel = true;
                        return;
                    }

                    BatchRow _batchRow = MapToBatchRow(_batch);
                    pBackgroundWorker.ReportStatus(string.Format("Mapped BatchId={0}", _batch.BatchId));

                    pBackgroundWorker.ReportStatus(string.Format("Updated BatchId={0}", _batch.BatchId));
                    pDb.BatchCollection.Update(_batchRow);

                    logInventoryHistory(pDb, pInventoryCommandRequest.Person, DateTime.Now, pInventoryCommandRequest.ServiceId, _batch.Denomination, _batch.BatchId, _batch.BatchSize, InventoryCommand.Load, pInventoryCommandRequest.CustomerAcctId, 0, //TODO: !!! ResellerPartnerId - N/A FOR NOW
                                        0                                                                                                                                                                                                                 //TODO: !!! ResellerAgentId - N/A FOR NOW
                                        );
                    pBackgroundWorker.ReportStatus("Logged Inventory History");

                    if (pInventoryCommandRequest.ActivateOnLoad)
                    {
                        logInventoryHistory(pDb, pInventoryCommandRequest.Person, DateTime.Now.AddMilliseconds(11),                                                                                           //Just to make sure that time is different from prev History entry
                                            pInventoryCommandRequest.ServiceId, _batch.Denomination, _batch.BatchId, _batch.BatchSize, InventoryCommand.Activate, pInventoryCommandRequest.CustomerAcctId, 0, //TODO: !!! SalesRepAcctId - N/A FOR NOW
                                            0                                                                                                                                                                 //TODO: !!! ResellerAgentId - N/A FOR NOW
                                            );
                    }
                    pBackgroundWorker.ReportStatus("Finished Loading Batch File: " + _batchFilePath);
                }
            }
        }
 public static RetailAccountRow CreateRetailAccount(InventoryCommandRequest pInventoryCommandRequest)
 {
     using (var _db = new Rbr_Db()) {
         return(createRetailAccount(_db, pInventoryCommandRequest));
     }
 }