/// <summary>
        /// Save and update agent details in database
        /// </summary>
        /// <param name="agentDetails">object containing agent details</param>
        public int SaveAndUpdateAgent(AgentDTO agentDetails)
        {            
            agentdetail agentEntity = new agentdetail();
            AutoMapper.Mapper.Map(agentDetails, agentEntity);

            if (agentEntity.Agent_Id > 0)
            {
                ESalesUnityContainer.Container.Resolve<IGenericRepository<agentdetail>>().Update(agentEntity);
            }
            else
            {
                //Save agent details
                ESalesUnityContainer.Container.Resolve<IGenericRepository<agentdetail>>().Save(agentEntity);

                //Gets list of materials from database
                IList<MaterialTypeDTO> listMaterial = ESalesUnityContainer.Container.Resolve<IMaterialTypeService>()
                    .GetMaterialTypeList(false);

                //Loops through list of materials and create mapping between agent and material
                foreach (var material in listMaterial)
                {                    
                    AgentMaterialPercentageDTO agentMaterialPercentageDetails = new AgentMaterialPercentageDTO();
                    agentMaterialPercentageDetails.AMP_Agent_Id = agentEntity.Agent_Id;
                    agentMaterialPercentageDetails.AMP_MaterialType_Id = material.MaterialType_Id;
                    agentMaterialPercentageDetails.AMP_IsActive = true;
                    agentMaterialPercentageDetails.AMP_CreatedBy = agentEntity.Agent_CreatedBy;
                    AgentMaterialPercentageService agentMatPercentageService = new AgentMaterialPercentageService();

                    //Save agent material mapping
                    agentMatPercentageService.SaveAgentMaterialPercentage(agentMaterialPercentageDetails);
                }
            }
            return agentEntity.Agent_Id;
        }
 /// <summary>
 /// Retrieves agent details by Agent Id
 /// </summary>
 /// <param name="agentId">Int32: agentId</param>
 /// <returns></returns>
 public AgentDTO GetAgentByAgentId(int agentId)
 {            
     AgentDTO agentDetails = new AgentDTO();
     
     //Select agent by agent id and maps it to DTO object
     AutoMapper.Mapper.Map(ESalesUnityContainer.Container.Resolve<IGenericRepository<agentdetail>>()
         .GetSingle(item => item.Agent_Id == agentId && item.Agent_IsDeleted == false), agentDetails);
     return agentDetails;
 }
    /// <summary>
    /// Initialize Agent details object with control values
    /// </summary>
    /// <returns></returns>
    private AgentDTO IntializeAgentDetails()
    {
        AgentDTO agentDetails = new AgentDTO();

        //To check need to edit or add agent
        if (ViewState[Globals.StateMgmtVariables.AGENTID] != null)
        {
            agentDetails.Agent_Id = Convert.ToInt32(ViewState[Globals.StateMgmtVariables.AGENTID]);
        }

        agentDetails.Agent_ShortName = txtShortName.Text.Trim();
        agentDetails.Agent_Name = txtDCAName.Text.Trim();
        agentDetails.Agent_StartDate = Convert.ToDateTime(txtStartDate.Text.Trim());
        agentDetails.Agent_PanNumber = txtPanNumber.Text.Trim();
        agentDetails.Agent_SalesTaxNumber = txtSalesTaxNumber.Text.Trim();
        agentDetails.Agent_TSLCode = txtTSLCode.Text.Trim();

        if (!txtClosureDate.Text.Trim().Equals(string.Empty))
        {
            agentDetails.Agent_ClosureDate = Convert.ToDateTime(txtClosureDate.Text.Trim());
        }

        agentDetails.Agent_RegContactPerson = txtRegContactPerson.Text.Trim();
        agentDetails.Agent_RegAddress = txtRegAddress.Text.Trim();
        agentDetails.Agent_RegState = Convert.ToInt32(ddlRegState.SelectedValue);
        agentDetails.Agent_RegDistrict = Convert.ToInt32(ddlRegDistrict.SelectedValue);

        if (txtRegPinCode.Text.Trim() != string.Empty)
        {
            agentDetails.Agent_RegPinCode = Convert.ToInt32(txtRegPinCode.Text.Trim());
        }

        agentDetails.Agent_RegMobileNo = txtRegMobileNo.Text.Trim();
        agentDetails.Agent_RegPhoneNo = txtRegMobileNo.Text.Trim();
        agentDetails.Agent_RegEmail = txtRegEmail.Text.Trim();

        agentDetails.Agent_LocalContactPerson = txtLocalContactPerson.Text.Trim();
        agentDetails.Agent_LocalAddress = txtLocalAddress.Text.Trim();
        agentDetails.Agent_LocalState = Convert.ToInt32(ddlLocalState.SelectedValue);
        agentDetails.Agent_LocalDistrict = Convert.ToInt32(ddlLocalDistrict.SelectedValue);

        if (txtLocalPinCode.Text.Trim() != string.Empty)
        {
            agentDetails.Agent_LocalPinCode = Convert.ToInt32(txtLocalPinCode.Text.Trim());
        }

        agentDetails.Agent_LocalMobileNo = txtLocalMobileNo.Text.Trim();
        agentDetails.Agent_LocalPhoneNo = txtLocalPhoneNo.Text.Trim();
        agentDetails.Agent_LocalEmail = txtLocalEmail.Text.Trim();

        agentDetails.Agent_ComContactPerson = txtComContactPerson.Text.Trim();
        agentDetails.Agent_ComAddress = txtComAddress.Text.Trim();
        agentDetails.Agent_ComState = Convert.ToInt32(ddlComState.SelectedValue);
        agentDetails.Agent_ComDistrict = Convert.ToInt32(ddlComDistrict.SelectedValue);

        if (txtComPinCode.Text.Trim() != string.Empty)
        {
            agentDetails.Agent_ComPinCode = Convert.ToInt32(txtComPinCode.Text.Trim());
        }

        agentDetails.Agent_ComMobileNo = txtComMobileNo.Text.Trim();
        agentDetails.Agent_ComPhoneNo = txtComPhoneNo.Text.Trim();
        agentDetails.Agent_ComEmail = txtComEmail.Text.Trim();

        //return the value
        return agentDetails;
    }
        /// <summary>
        /// Checks if Agent details exists in database
        /// </summary>
        /// <param name="agentId">Int32: AgentId</param>
        /// <param name="shortName">String: Agent short name</param>
        /// <returns>returns true if agent exists, false otherwise</returns>
        public bool IsAgentDetailsExists(int agentId, string shortName)
        {           
            AgentDTO agentDetails = new AgentDTO();
            bool result = false;

            //If new agent details
            if (agentId == 0)
            {
                AutoMapper.Mapper.Map(ESalesUnityContainer.Container.Resolve<IGenericRepository<agentdetail>>()
                    .GetSingle(item => item.Agent_ShortName == shortName && item.Agent_IsDeleted == false), agentDetails);
            }
            //If agent details already exist in database
            else if (agentId > 0)
            {
                AutoMapper.Mapper.Map(ESalesUnityContainer.Container.Resolve<IGenericRepository<agentdetail>>()
                    .GetSingle(item => item.Agent_ShortName == shortName && item.Agent_IsDeleted == false
                        && item.Agent_Id != agentId), agentDetails);                
            }

            if (agentDetails.Agent_Id > 0)
            {
                result = true;
            }
            return result;
        }