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