コード例 #1
0
 public CallbackRecord()
 {
     _ID                      = String.Empty;
     _ReqID                   = String.Empty;
     _DNIS                    = String.Empty;
     _TargetCSQ               = String.Empty;
     _OriginCSQ               = String.Empty;
     _Prompt                  = String.Empty;
     _Status                  = Constants.RecordStatus.NEW;
     _AgentID                 = String.Empty;
     _RequestDate             = DateTime.Now;
     _StatusLastUpdated       = DateTime.Now;
     _ContactImplementationID = String.Empty;
     _ContactID               = String.Empty;
     _SessionID               = String.Empty;
     _ReentryDate             = DateTime.Now;
     _QueuedAt                = DateTime.MinValue;
     _QueueStartTime          = 0L;
     _AgentAcknowledgedAt     = DateTime.MinValue;
     _TargetDialedAt          = DateTime.MinValue;
     _NumberOfAttempts        = 0;
     bCallbackProcessingTimeframeBeginCrossed = true;
     bCallbackProcessingTimeframeEndCrossed   = true;
     bPurge          = false;
     bPurgeDueToAge  = false;
     bReportOn       = false;
     _Language       = String.Empty;
     _CustomVar1     = String.Empty;
     _CustomVar2     = String.Empty;
     _CustomVar3     = String.Empty;
     _CustomVar4     = String.Empty;
     _CustomVar5     = String.Empty;
     _RequeueCode    = String.Empty;
     _RequeueCounter = "0";
 }
コード例 #2
0
        public CallbackRecord(String ID, String ReqID, String DNIS, String OriginCSQ, String TargetCSQ, String Prompt, Constants.RecordStatus Status, DateTime RequestDate, String QueueStartTime, String ContactImplementationID, String ContactID, String SessionID, DateTime ReentryDate, String Language, String CustomVar1, String CustomVar2, String CustomVar3, String CustomVar4, String CustomVar5, String RequeueCode, String RequeueCounter)
        {
            _ID                      = ID;
            _ReqID                   = ReqID;
            _DNIS                    = DNIS;
            _OriginCSQ               = OriginCSQ;
            _TargetCSQ               = TargetCSQ;
            _Prompt                  = Prompt;
            _Status                  = Status;
            _RequestDate             = RequestDate;
            _StatusLastUpdated       = DateTime.Now;
            _AgentID                 = String.Empty;
            _ContactImplementationID = ContactImplementationID;
            _ContactID               = ContactID;
            _SessionID               = SessionID;
            _ReentryDate             = ReentryDate;
            _QueuedAt                = DateTime.MinValue;

            try
            {
                long lMillisecondsSinceEpoch = long.Parse(QueueStartTime);

                _QueueStartTime = lMillisecondsSinceEpoch;
            }
            catch
            {
                Trace.TraceWarning("Contact ID:" + ID + " Exception casting QueueStartTime:" + QueueStartTime + "; zero assumed.");
                _QueueStartTime = 0L;
            }

            _AgentAcknowledgedAt = DateTime.MinValue;
            _TargetDialedAt      = DateTime.MinValue;
            _NumberOfAttempts    = 0;
            bCallbackProcessingTimeframeBeginCrossed = true;
            bCallbackProcessingTimeframeEndCrossed   = true;
            bPurge          = false;
            bPurgeDueToAge  = false;
            bReportOn       = false;
            _Language       = Language;
            _CustomVar1     = CustomVar1;
            _CustomVar2     = CustomVar2;
            _CustomVar3     = CustomVar3;
            _CustomVar4     = CustomVar4;
            _CustomVar5     = CustomVar5;
            _RequeueCode    = RequeueCode;
            _RequeueCounter = RequeueCounter;
        }
コード例 #3
0
        public bool Update(String RecordID, String AgentID, String RequestID, Constants.RecordStatus Status, out String ErrorDescription)
        {
            Trace.TraceInformation("Enter.");

            lock (objLock)
            {
                if (RecordID != null && RecordID != String.Empty)
                {
                    foreach (CallbackRecord record in _Records)
                    {
                        if (record.ID == RecordID)
                        {
                            if (Status == Constants.RecordStatus.REQUESTED ||
                                Status == Constants.RecordStatus.QUEUED ||
                                Status == Constants.RecordStatus.AGENTACKNOWLEDGED ||
                                Status == Constants.RecordStatus.AGENTABANDONED ||
                                Status == Constants.RecordStatus.DIALINGTARGET ||
                                Status == Constants.RecordStatus.IVR_FAILURE)
                            {
                                if (record.ReqID != RequestID)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " request id " + record.ReqID + " does not match " + RequestID);
                                    continue;
                                }
                            }

                            switch (Status) //Requested status
                            {
                            case Constants.RecordStatus.PURGED:

                                if (record.Status != Constants.RecordStatus.NEW)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                    return(false);
                                }

                                break;

                            case Constants.RecordStatus.REQUESTED:

                                if (record.Status != Constants.RecordStatus.PROCESSING)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                    return(false);
                                }

                                break;

                            case Constants.RecordStatus.QUEUED:

                                //if (record.Status != Constants.RecordStatus.REQUESTED)
                                //{
                                //    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                //    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                //    return false;
                                //}

                                break;

                            case Constants.RecordStatus.AGENTACKNOWLEDGED:

                                if (record.Status != Constants.RecordStatus.PROCESSING &&
                                    record.Status != Constants.RecordStatus.QUEUED)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                    return(false);
                                }

                                break;

                            case Constants.RecordStatus.DIALINGTARGET:

                                if (record.Status != Constants.RecordStatus.PROCESSING &&
                                    record.Status != Constants.RecordStatus.QUEUED &&
                                    record.Status != Constants.RecordStatus.AGENTACKNOWLEDGED)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                    return(false);
                                }

                                break;

                            case Constants.RecordStatus.AGENTABANDONED:

                                if (record.Status != Constants.RecordStatus.PROCESSING &&
                                    record.Status != Constants.RecordStatus.QUEUED &&
                                    record.Status != Constants.RecordStatus.AGENTACKNOWLEDGED)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                    return(false);
                                }

                                break;

                            case Constants.RecordStatus.IVR_FAILURE:

                                if (record.Status != Constants.RecordStatus.REQUESTED &&
                                    record.Status != Constants.RecordStatus.QUEUED &&
                                    record.Status != Constants.RecordStatus.AGENTACKNOWLEDGED &&
                                    record.Status != Constants.RecordStatus.AGENTABANDONED &&
                                    record.Status != Constants.RecordStatus.DIALINGTARGET)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                    return(false);
                                }

                                break;

                            case Constants.RecordStatus.RETRY:

                                if (record.Status != Constants.RecordStatus.REQUESTED &&
                                    record.Status != Constants.RecordStatus.PROCESSING &&
                                    record.Status != Constants.RecordStatus.QUEUED &&
                                    record.Status != Constants.RecordStatus.AGENTABANDONED &&
                                    record.Status != Constants.RecordStatus.AGENTACKNOWLEDGED &&
                                    record.Status != Constants.RecordStatus.EXCEEDEDNUMBEROFATTEMPTS &&
                                    record.Status != Constants.RecordStatus.COMPLETED)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                    return(false);
                                }

                                break;

                            case Constants.RecordStatus.FORCERETRY:

                                if (record.Status != Constants.RecordStatus.COMPLETED &&
                                    record.Status != Constants.RecordStatus.EXCEEDEDNUMBEROFATTEMPTS &&
                                    record.Status != Constants.RecordStatus.INVALID)
                                {
                                    Trace.TraceWarning("Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString());
                                    ErrorDescription = "Record " + record.ID + " cannot go to " + Status.ToString() + " status from " + record.Status.ToString();
                                    return(false);
                                }

                                break;
                            }

                            switch (Status)
                            {
                            case Constants.RecordStatus.PROCESSING:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = RequestID;
                                record.NumberOfAttempts++;

                                break;

                            case Constants.RecordStatus.RETRY:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = String.Empty;

                                break;

                            case Constants.RecordStatus.FORCERETRY:

                                record.Status            = Constants.RecordStatus.RETRY;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = String.Empty;
                                record.NumberOfAttempts  = 0;

                                break;

                            case Constants.RecordStatus.AGENTACKNOWLEDGED:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;

                                record.AgentID             = AgentID;
                                record.AgentAcknowledgedAt = DateTime.Now;

                                break;

                            case Constants.RecordStatus.QUEUED:

                                if (record.Status == Constants.RecordStatus.REQUESTED)
                                {
                                    record.Status            = Status;
                                    record.StatusLastUpdated = DateTime.Now;

                                    record.QueuedAt = DateTime.Now;
                                }
                                else if (record.Status == Constants.RecordStatus.QUEUED)
                                {
                                    record.StatusLastUpdated = DateTime.Now;
                                }
                                else
                                {
                                    record.Status            = Status;
                                    record.StatusLastUpdated = DateTime.Now;

                                    record.QueuedAt = DateTime.Now;
                                }

                                break;

                            case Constants.RecordStatus.DIALINGTARGET:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;

                                record.TargetDialedAt = DateTime.Now;

                                break;

                            case Constants.RecordStatus.IVR_FAILURE:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = String.Empty;

                                break;

                            case Constants.RecordStatus.INVALID:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = String.Empty;

                                break;

                            case Constants.RecordStatus.INACTIVE:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = String.Empty;

                                break;

                            case Constants.RecordStatus.REQUESTED:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;

                                break;

                            case Constants.RecordStatus.AGENTABANDONED:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;

                                record.AgentID = AgentID;

                                break;

                            case Constants.RecordStatus.EXCEEDEDNUMBEROFATTEMPTS:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = String.Empty;

                                break;

                            case Constants.RecordStatus.COMPLETED:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = String.Empty;

                                break;

                            case Constants.RecordStatus.PURGED:

                                record.Status            = Status;
                                record.StatusLastUpdated = DateTime.Now;
                                record.ReqID             = String.Empty;

                                break;
                            }

                            if (Status == Constants.RecordStatus.INVALID)
                            {
                                if (RecordStatusUpdated != null)
                                {
                                    RecordStatusUpdated(this, new CallbackRecordStatusUpdateEventArgs(record));
                                }
                            }

                            UpdateNumberOfRecordsCurrentlyInIVR();

                            WriteToDisk();

                            ErrorDescription = String.Empty;

                            return(true);
                        } //if (record.ID == RecordID)
                    }     //foreach (CallbackRecord record in _Records)

                    ErrorDescription = "No record was found with RecordID";

                    return(false);
                }
                else//if (RecordID != null && RecordID != String.Empty)
                {
                    Trace.TraceWarning("RecordID is either null or empty.");
                    ErrorDescription = "RecordID is either null or empty";
                    return(false);
                } //if (RecordID != null && RecordID != String.Empty)
            }     //lock (objLock)
        }