/// <summary>
 /// Dispatches the specified lead to agent scheduler.
 /// </summary>
 /// <param name="leadDetails">The lead details.</param>
 public IAgentDTO Dispatch(ILeadDTO leadDetails)
 {
     IAgentDataManager agentDataManager = new LeadDistributionDataFactory().GetAgentDataManager(DataComponentType.InMemoryData);
     ///Get the agent container for given territory using lead details
     INodeContainerIterator<IAgentDTO> agentContainerIterator = agentDataManager.GetAgentsContainerIterator(leadDetails);
     ///Schedule an agent using the agent container iterator
     return this.AgentScheduler.ScheduleAgent(leadDetails, agentContainerIterator);
 }
 /// <summary>
 /// Schedules an agent using agent container iterator
 /// </summary>
 /// <param name="leadDetails">The lead to be given to an agent.</param>
 /// <param name="agentContainerIterator">Agent Container iterator.</param>
 /// <returns></returns>
 public IAgentDTO ScheduleAgent(ILeadDTO leadDetails, INodeContainerIterator<IAgentDTO> agentContainerIterator)
 {
     IAgentDTO assignedAgent = null;
     if (agentContainerIterator.HasNodes())
     {
         ///Fetch the next available node
         assignedAgent = agentContainerIterator.PeekCurrent();
         ///Assign lead to the agent in Datastore
         IAgentDataManager agentDataManager = new LeadDistributionDataFactory().GetAgentDataManager(DataComponentType.InMemoryData);
         agentDataManager.AssignLeadToAgent(leadDetails, assignedAgent);
         ///Move the iterator to the next node.
         agentContainerIterator.MoveNext();
     }
     return assignedAgent;
 }
 /// <summary>
 /// Validates the specified lead details.
 /// </summary>
 /// <param name="leadDetails">The lead details.</param>
 public void Validate(ILeadDTO leadDetails)
 {
     if (!string.IsNullOrWhiteSpace(leadDetails.Territory))
     {
         LeadDistributionDataFactory leadDistributionDataFactory = new LeadDistributionDataFactory();
         ITerritoryDataManager territoryDataManager = leadDistributionDataFactory.GetTerritoryDataManager(DataComponentType.InMemoryData);
         ITerritoryDTO territory = territoryDataManager.GetTerritoryByName(leadDetails.Territory);
         IAgentDataManager agentDataManager = leadDistributionDataFactory.GetAgentDataManager(DataComponentType.InMemoryData);
         if (territory == null) ///Check for valid territory
         {
             Message = InValidTerritoryMessage;
         }
         else if (agentDataManager.IsLeadAssociatedWithAgent(leadDetails.ID))///Check for already processed lead
         {
             Message = AlreadyAssociatedLeadMessage;
         }
         else
         {
             IsValid = true;
             Message = ValidLeadMessage;
         }
     }
 }
 /// <summary>
 /// Removes the agent.
 /// </summary>
 /// <param name="agentDetails">The agent details.</param>
 /// <returns></returns>
 public bool RemoveAgent(IAgentDTO agentDetails)
 {
     IAgentDataManager agentDataManager = new LeadDistributionDataFactory().GetAgentDataManager(DataComponentType.InMemoryData);
     return agentDataManager.RemoveAgent(agentDetails);
 }
 /// <summary>
 /// Cleans the data store.
 /// </summary>
 public void CleanDataStore()
 {
     ITerritoryDataManager territoryDataManager = new LeadDistributionDataFactory().GetTerritoryDataManager(DataComponentType.InMemoryData);
     territoryDataManager.CleanDataStore();
 }
 /// <summary>
 /// Adds the territory data.
 /// </summary>
 /// <param name="territoryData">The territory data.</param>
 public void AddTerritoryData(ITerritoryDTO territoryData)
 {
     ITerritoryDataManager territoryDataManager = new LeadDistributionDataFactory().GetTerritoryDataManager(DataComponentType.InMemoryData);
     territoryDataManager.AddTerritoryData(territoryData);
 }
 /// <summary>
 /// Adds the agent for territory.
 /// </summary>
 /// <param name="agentDetails">The agent details.</param>
 public void AddAgent(IAgentDTO agentDetails)
 {
     IAgentDataManager agentDataManager = new LeadDistributionDataFactory().GetAgentDataManager(DataComponentType.InMemoryData);
     agentDataManager.AddAgent(agentDetails);
 }