/// <summary> /// initialisiert Kampagne /// </summary> public Campaign(itCampus.bb.Monitor.Campaign campaign, CampaignControl campaignControl) { // Parameter initialisieren _key = campaign.Key; _callJobResultCountRcn = new int[17]; _callJobResultCountTtl = new int[17]; _incomingCallResultCountRcn = new int[5]; _incomingCallResultCountTtl = new int[5]; _agentModeCount = new int[3]; _agentStateCount = new int[9]; _agentStateTimeAvgCur = new int[9]; _agentStateTimeAvgTtl = new int[9]; _callJobStateCount = new int[9]; _incomingCallStateCount = new int[4]; // Verlaufsdaten initialisieren InitializeDataCollections(); // Kampagne zu Kampagnenverwaltung hinzufügen _campaignControl = campaignControl; _campaignControl.AddCampaign(this); // Parameter aktualisiern RefreshParameters(campaign); }
/// <summary> /// schließt Kampagne ab /// </summary> private void _monitor_OnRemoveCampaign(itCampus.bb.Monitor.Campaign campaign) { try { // Ereignis protokollieren Logger.Log.Info("[Monitor] -> [OnRemoveCampaign]" + " Campaign: Campaign#" + campaign.Key); // Kampagne abschließen _campaignControl[campaign.Key].Terminate(); } catch (Exception ex) { Logger.Log.Error("Error on processing event.", ex); } }
/// <summary> /// aktualisiert Kampagne /// </summary> private void _monitor_OnRefreshCampaign(itCampus.bb.Monitor.Campaign campaign) { try { // Ereignis protokollieren Logger.Log.Info("[Monitor] -> [OnRefreshCampaign]" + " Campaign: Campaign#" + campaign.Key); // Kampagne aktualisieren _campaignControl[campaign.Key].RefreshParameters(campaign); } catch (Exception ex) { Logger.Log.Error("Error on processing event.", ex); } }
/// <summary> /// initialisiert Kampagne /// </summary> private void _monitor_OnAddCampaign(itCampus.bb.Monitor.Campaign campaign) { try { // Ereignis protokollieren Logger.Log.Info("[Monitor] -> [OnAddCampaign]" + " Campaign: Campaign#" + campaign.Key); // Kampagne initialisieren new Campaign(campaign, _campaignControl); } catch (Exception ex) { Logger.Log.Error("Error on processing event.", ex); } }
/// <summary> /// aktualisiert Parameter /// </summary> public void RefreshParameters(itCampus.bb.Monitor.Campaign campaign) { // alte Parameter merken string code = _code; string name = _name; // Parameter aktualisieren _code = campaign.Code; _name = campaign.Name; _state = campaign.State; _lastStateChange = campaign.LastStateChange; _availabilityMode = campaign.AvailabilityMode; _dialMode = campaign.DialMode; _carrierCode = campaign.CarrierCode; _callingNumber = campaign.CallingNumber; _minRingCount = campaign.MinRingCount; _maxRingCount = campaign.MaxRingCount; _maxSwitchingTime = campaign.MaxSwitchingTime; _maxDialRate = campaign.MaxDialRate; _maxDropRate = campaign.MaxDropRate; _maxLostRate = campaign.MaxLostRate; _agentRelaxTarget = campaign.AgentRelaxTarget; _musicOnReadyFile = campaign.MusicOnReadyFile; _greetingFile = campaign.GreetingFile; _waitingFile = campaign.WaitingFile; _answeringMachineFile = campaign.AnsweringMachineFile; _abandonmentFile = campaign.AbandonmentFile; _cpaLevel = campaign.CPALevel; _hotlineNumbers = campaign.HotlineNumbers; _hotlineQueueSizeFactor = campaign.HotlineQueueSizeFactor; _hotlineGreetingFile = campaign.HotlineGreetingFile; _hotlineWaitingFile = campaign.HotlineWaitingFile; _hotlineAbandonmentFile = campaign.HotlineAbandonmentFile; _autoRecording = campaign.AutoRecording; _dialRate = campaign.DialRate; _preLevel = campaign.PreLevel; _dropRateCur = campaign.DropRateCur; _dropRateTtl = campaign.DropRateTtl; _lostRateCur = campaign.LostRateCur; _lostRateTtl = campaign.LostRateTtl; _agentRelaxTimeCur = campaign.AgentRelaxTimeCur; _agentRelaxTimeTtl = campaign.AgentRelaxTimeTtl; foreach (CallJobResult callJobResult in Enum.GetValues(typeof(CallJobResult))) { _callJobResultCountRcn[(int)callJobResult] = campaign.GetCallJobResultCountRcn(callJobResult); _callJobResultCountTtl[(int)callJobResult] = campaign.GetCallJobResultCountTtl(callJobResult); } foreach (IncomingCallResult incomingCallResult in Enum.GetValues(typeof( IncomingCallResult))) { _incomingCallResultCountRcn[(int)incomingCallResult] = campaign.GetIncomingCallResultCountRcn(incomingCallResult); _incomingCallResultCountTtl[(int)incomingCallResult] = campaign.GetIncomingCallResultCountTtl(incomingCallResult); } foreach (AgentMode agentMode in Enum.GetValues(typeof(AgentMode))) { _agentModeCount[(int)agentMode] = campaign.GetAgentModeCount(agentMode); } foreach (AgentState agentState in Enum.GetValues(typeof(AgentState))) { _agentStateCount[(int)agentState] = campaign.GetAgentStateCount(agentState); _agentStateTimeAvgCur[(int)agentState] = campaign.GetAgentStateTimeAvgCur(agentState); _agentStateTimeAvgTtl[(int)agentState] = campaign.GetAgentStateTimeAvgTtl(agentState); } foreach (CallJobState callJobState in Enum.GetValues(typeof(CallJobState))) { _callJobStateCount[(int)callJobState] = campaign.GetCallJobStateCount(callJobState); } foreach (IncomingCallState incomingCallState in Enum.GetValues(typeof( IncomingCallState))) { _incomingCallStateCount[(int)incomingCallState] = campaign.GetIncomingCallStateCount(incomingCallState); } _agentCount = 0; foreach (int count in _agentModeCount) { _agentCount += count; } _callJobCount = 0; foreach (int count in _callJobStateCount) { _callJobCount += count; } _incomingCallCount = 0; foreach (int count in _incomingCallStateCount) { _incomingCallCount += count; } // Verlaufsdaten aktualisieren RefreshDataCollections(campaign); // wenn Kampagnencode geändert if (code != _code) { // zugeordnete Frontends aus Kampagne entfernen foreach (Frontend frontend in (ArrayList)_frontends.Clone()) { frontend.UnassignCampaign(); } // zugehörige Frontends suchen und Kampagne zuordnen foreach (Frontend frontend in _campaignControl.MainControl.FrontendControl) { if (frontend.CampaignCode == _code) { frontend.AssignCampaign(this); } } } else { // sonst, wenn Kampagnenname geändert if (name != _name) { // zugeordnete Frontends aktualisieren foreach (Frontend frontend in _frontends) { frontend.RefreshCampaign(); } } } // Kampagnenverwaltung aktualisieren _campaignControl.RefreshCampaign(this); }
/// <summary> /// aktualisiert Verlaufsdaten /// </summary> private void RefreshDataCollections(itCampus.bb.Monitor.Campaign campaign) { // Verlaufsdaten Speeds aktualisieren _performanceSpeedsData["DialRate"].Value = campaign.DialRate; _performanceSpeedsData["PreLevel"].Value = campaign.PreLevel; // Verlaufsdaten Limits aktualisieren _performanceLimitsData["DropRateCur"].Value = campaign.DropRateCur; _performanceLimitsData["DropRateTtl"].Value = campaign.DropRateTtl; _performanceLimitsData["LostRateCur"].Value = campaign.LostRateCur; _performanceLimitsData["LostRateTtl"].Value = campaign.LostRateTtl; _performanceLimitsData["AgentRelaxTimeCur"].Value = campaign.AgentRelaxTimeCur; _performanceLimitsData["AgentRelaxTimeTtl"].Value = campaign.AgentRelaxTimeTtl; // Verlaufsdaten Ergebnisanzahl Calljobs absolut aktualisieren int processedCallJobCountRcn = campaign.GetCallJobResultCountRcn(CallJobResult.Busy) + campaign.GetCallJobResultCountRcn(CallJobResult.NoAnswer) + campaign.GetCallJobResultCountRcn(CallJobResult.WrongNumber) + campaign.GetCallJobResultCountRcn(CallJobResult.Blacklist) + campaign.GetCallJobResultCountRcn(CallJobResult.RouteDenied) + campaign.GetCallJobResultCountRcn(CallJobResult.PSTNFailure) + campaign.GetCallJobResultCountRcn(CallJobResult.TelcoOverload) + campaign.GetCallJobResultCountRcn(CallJobResult.ACR) + campaign.GetCallJobResultCountRcn(CallJobResult.Fax) + campaign.GetCallJobResultCountRcn(CallJobResult.AnsweringMachine) + campaign.GetCallJobResultCountRcn(CallJobResult.NoInterest) + campaign.GetCallJobResultCountRcn(CallJobResult.Lost) + campaign.GetCallJobResultCountRcn(CallJobResult.PutThrough); _recentCallJobResultCountAbsData["Busy"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.Busy); _recentCallJobResultCountAbsData["NoAnswer"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.NoAnswer); _recentCallJobResultCountAbsData["WrongNumber"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.WrongNumber); _recentCallJobResultCountAbsData["Blacklist"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.Blacklist); _recentCallJobResultCountAbsData["RouteDenied"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.RouteDenied); _recentCallJobResultCountAbsData["PSTNFailure"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.PSTNFailure); _recentCallJobResultCountAbsData["TelcoOverload"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.TelcoOverload); _recentCallJobResultCountAbsData["ACR"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.ACR); _recentCallJobResultCountAbsData["Fax"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.Fax); _recentCallJobResultCountAbsData["AnsweringMachine"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.AnsweringMachine); _recentCallJobResultCountAbsData["NoInterest"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.NoInterest); _recentCallJobResultCountAbsData["Lost"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.Lost); _recentCallJobResultCountAbsData["PutThrough"].Value = campaign.GetCallJobResultCountRcn(CallJobResult.PutThrough); _recentCallJobResultCountAbsData["Total"].Value = processedCallJobCountRcn; // Verlaufsdaten Ergebnisanzahl Calljobs relativ aktualisieren _recentCallJobResultCountRelData["Busy"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.Busy), processedCallJobCountRcn); _recentCallJobResultCountRelData["NoAnswer"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.NoAnswer), processedCallJobCountRcn); _recentCallJobResultCountRelData["WrongNumber"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.WrongNumber), processedCallJobCountRcn); _recentCallJobResultCountRelData["Blacklist"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.Blacklist), processedCallJobCountRcn); _recentCallJobResultCountRelData["RouteDenied"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.RouteDenied), processedCallJobCountRcn); _recentCallJobResultCountRelData["PSTNFailure"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.PSTNFailure), processedCallJobCountRcn); _recentCallJobResultCountRelData["TelcoOverload"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.TelcoOverload), processedCallJobCountRcn); _recentCallJobResultCountRelData["ACR"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.ACR), processedCallJobCountRcn); _recentCallJobResultCountRelData["Fax"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.Fax), processedCallJobCountRcn); _recentCallJobResultCountRelData["AnsweringMachine"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.AnsweringMachine), processedCallJobCountRcn); _recentCallJobResultCountRelData["NoInterest"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.NoInterest), processedCallJobCountRcn); _recentCallJobResultCountRelData["Lost"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.Lost), processedCallJobCountRcn); _recentCallJobResultCountRelData["PutThrough"].Value = GetRelativeValue( campaign.GetCallJobResultCountRcn(CallJobResult.PutThrough), processedCallJobCountRcn); // Verlaufsdaten Ergebnisanzahl eingehender Anrufe absolut aktualisieren int processedIncomingCallCountRcn = campaign.GetIncomingCallResultCountRcn(IncomingCallResult.PSTNFailure) + campaign.GetIncomingCallResultCountRcn(IncomingCallResult.TelcoOverload) + campaign.GetIncomingCallResultCountRcn(IncomingCallResult.NoInterest) + campaign.GetIncomingCallResultCountRcn(IncomingCallResult.Lost) + campaign.GetIncomingCallResultCountRcn(IncomingCallResult.PutThrough); _recentIncomingCallResultCountAbsData["PSTNFailure"].Value = campaign.GetIncomingCallResultCountRcn(IncomingCallResult.PSTNFailure); _recentIncomingCallResultCountAbsData["TelcoOverload"].Value = campaign.GetIncomingCallResultCountRcn(IncomingCallResult.TelcoOverload); _recentIncomingCallResultCountAbsData["NoInterest"].Value = campaign.GetIncomingCallResultCountRcn(IncomingCallResult.NoInterest); _recentIncomingCallResultCountAbsData["Lost"].Value = campaign.GetIncomingCallResultCountRcn(IncomingCallResult.Lost); _recentIncomingCallResultCountAbsData["PutThrough"].Value = campaign.GetIncomingCallResultCountRcn(IncomingCallResult.PutThrough); _recentIncomingCallResultCountAbsData["Total"].Value = processedIncomingCallCountRcn; // Verlaufsdaten Ergebnisanzahl eingehender Anrufe relativ aktualisieren _recentIncomingCallResultCountRelData["PSTNFailure"].Value = GetRelativeValue( campaign.GetIncomingCallResultCountRcn(IncomingCallResult.PSTNFailure), processedIncomingCallCountRcn); _recentIncomingCallResultCountRelData["TelcoOverload"].Value = GetRelativeValue( campaign.GetIncomingCallResultCountRcn(IncomingCallResult.TelcoOverload), processedIncomingCallCountRcn); _recentIncomingCallResultCountRelData["NoInterest"].Value = GetRelativeValue( campaign.GetIncomingCallResultCountRcn(IncomingCallResult.NoInterest), processedIncomingCallCountRcn); _recentIncomingCallResultCountRelData["Lost"].Value = GetRelativeValue( campaign.GetIncomingCallResultCountRcn(IncomingCallResult.Lost), processedIncomingCallCountRcn); _recentIncomingCallResultCountRelData["PutThrough"].Value = GetRelativeValue( campaign.GetIncomingCallResultCountRcn(IncomingCallResult.PutThrough), processedIncomingCallCountRcn); // Verlaufsdaten Agentenanzahl aktualisieren _agentStateCountData["NotReady"].Value = campaign.GetAgentStateCount(AgentState.NotReady); _agentStateCountData["Ready"].Value = campaign.GetAgentStateCount(AgentState.Ready); _agentStateCountData["Pending"].Value = campaign.GetAgentStateCount(AgentState.Pending); _agentStateCountData["Signaling"].Value = campaign.GetAgentStateCount(AgentState.Signaling); _agentStateCountData["Preparing"].Value = campaign.GetAgentStateCount(AgentState.Preparing); _agentStateCountData["Calling"].Value = campaign.GetAgentStateCount(AgentState.Calling); _agentStateCountData["Talking"].Value = campaign.GetAgentStateCount(AgentState.Talking); _agentStateCountData["Conferencing"].Value = campaign.GetAgentStateCount(AgentState.Conferencing); _agentStateCountData["Wrapup"].Value = campaign.GetAgentStateCount(AgentState.Wrapup); _agentStateCountData["Total"].Value = _agentCount; // Verlaufsdaten Agentenzeiten aktualisieren _agentStateTimeData["NotReady"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.NotReady); _agentStateTimeData["Ready"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.Ready); _agentStateTimeData["Pending"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.Pending); _agentStateTimeData["Signaling"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.Signaling); _agentStateTimeData["Preparing"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.Preparing); _agentStateTimeData["Calling"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.Calling); _agentStateTimeData["Talking"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.Talking); _agentStateTimeData["Conferencing"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.Conferencing); _agentStateTimeData["Wrapup"].Value = campaign.GetAgentStateTimeAvgCur(AgentState.Wrapup); // Verlaufsdaten Calljob-Anzahl aktualisieren _callJobStateCountData["Ready"].Value = campaign.GetCallJobStateCount(CallJobState.Ready); _callJobStateCountData["Preparing"].Value = campaign.GetCallJobStateCount(CallJobState.Preparing); _callJobStateCountData["Dialing"].Value = campaign.GetCallJobStateCount(CallJobState.Dialing); _callJobStateCountData["Alerting"].Value = campaign.GetCallJobStateCount(CallJobState.ForcedAlerting) + campaign.GetCallJobStateCount(CallJobState.FreeAlerting); _callJobStateCountData["CPA"].Value = campaign.GetCallJobStateCount(CallJobState.CPA); _callJobStateCountData["Greeting"].Value = campaign.GetCallJobStateCount(CallJobState.Greeting); _callJobStateCountData["Waiting"].Value = campaign.GetCallJobStateCount(CallJobState.Waiting); _callJobStateCountData["Signaling"].Value = campaign.GetCallJobStateCount(CallJobState.Signaling); _callJobStateCountData["Total"].Value = _callJobCount; // Verlaufsdaten Anzahl eingehender Anrufe aktualisieren _incomingCallStateCountData["Alerting"].Value = campaign.GetIncomingCallStateCount(IncomingCallState.Alerting); _incomingCallStateCountData["Greeting"].Value = campaign.GetIncomingCallStateCount(IncomingCallState.Greeting); _incomingCallStateCountData["Waiting"].Value = campaign.GetIncomingCallStateCount(IncomingCallState.Waiting); _incomingCallStateCountData["Signaling"].Value = campaign.GetIncomingCallStateCount(IncomingCallState.Signaling); _incomingCallStateCountData["Total"].Value = _incomingCallCount; }