//Create group
        public static int Create(GroupDTO GroupDTO)
        {
            try
            {

                GlobalSettings.LoggedInClientId = GroupDTO.ClientID;
                int PartnerId = ClientService.GetById(GroupDTO.ClientID).PartnerId;
                GlobalSettings.LoggedInPartnerId = PartnerId;

                var group = new Group();

                UnitOfWork uow = new UnitOfWork();
                GroupDTO.ClientID = GroupDTO.ClientID;
                group = Transform.GroupToDomain(GroupDTO);
                uow.GroupRepo.Insert(group);

                uow.SaveChanges();

                GroupDTO.Id = group.Id;
                return GroupDTO.Id;

            }

            catch (Exception)
            {
                throw;
            }
        }
 public void EditGroup(GroupDTO GroupDTO)
 {
     try
     {
         GroupService.Edit(GroupDTO);
     }
     catch (TimeoutException)
     {
         throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.RequestTimeout)
         {
             Content = new StringContent("An error occurred, please try again or contact the administrator."),
             ReasonPhrase = "Critical Exception"
         });
     }
     catch (Exception e)
     {
         throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
         {
             Content = new StringContent("An error occurred, please try again or contact the administrator."),
             ReasonPhrase = "Critical Exception"
         });
     }
 }
        //Edit group
        public static void Edit(GroupDTO GroupDTO)
        {
            try
            {
                GlobalSettings.LoggedInClientId = GroupDTO.ClientID;
                int PartnerId = ClientService.GetById(GroupDTO.ClientID).PartnerId;
                GlobalSettings.LoggedInPartnerId = PartnerId;

                UnitOfWork uow = new UnitOfWork();
                Group Group = Transform.GroupToDomain(GroupDTO);
                uow.GroupRepo.Update(Group);
                uow.SaveChanges();
            }
            catch
            {
                throw;
            }
        }
        // Returns group list which have clients
        public static List<GroupContactDTO> GetGroupListWithContactPresentByClientId(int ClientId)
        {
            List<GroupContactDTO> GroupDTOList = new List<GroupContactDTO>();

            try
            {

                using (var uow = new UnitOfWork())
                {
                    IEnumerable<Group> Group = uow.GroupRepo.GetAll().Where(e => e.ClientID == ClientId).OrderBy(e => e.Name).ToList();
                    if (Group != null)
                    {
                        foreach (var item in Group)
                        {
                            GroupDTO GroupDTO = new GroupDTO();
                            GroupDTO = GetById(item.Id);
                            GroupContactDTO GroupContactDTO = new GroupContactDTO();
                            //GroupContactDTO = GetGroupContactById(GroupDTO.Id);
                            List<ContactDTO> ContactDTOList = new List<ContactDTO>();
                            ContactDTOList = GroupContactService.GetGroupIdWiseContacts(GroupDTO.Id);// GroupDTOTemp.Id

                            GroupContactDTO.ContactCount = ContactDTOList.Count();// GroupContactDTO.Contacts.Count();
                            if (ContactDTOList.Count() > 0) // GroupContactDTO.Contacts.Count
                            {
                                GroupDTOList.Add(GroupContactDTO);// (Transform.GroupContactToDTO(item));
                            }
                        }
                    }
                }

                return GroupDTOList;
            }
            //catch (LoggedInUserException)
            //{
            //    throw new System.TimeoutException();
            //}
            catch (Exception)
            {

                throw;
            }
        }
        //get group list by client id
        public static List<GroupDTO> GetGroupListByClientIdForCampaign(int ClientId)
        {
            List<GroupDTO> GroupDTOList = new List<GroupDTO>();

            try
            {

                using (var uow = new UnitOfWork())
                {
                    IEnumerable<Group> Group = uow.GroupRepo.GetAll().Where(e => e.ClientID == ClientId).OrderBy(e => e.Name).ToList();
                    if (Group != null)
                    {
                        GroupDTO GroupDTOAllContact = new GroupDTO();
                        GroupDTOAllContact.Id = 0;
                        GroupDTOAllContact.Name = "All Contacts";
                        string ReceipentsNumber = ContactService.GetAllReceipentNumberByClientId(ClientId);
                        int TotalContactCount = CommonService.GetRecipientsCount(ReceipentsNumber);
                        GroupDTOAllContact.ContactCount = TotalContactCount;
                        GroupDTOList.Add(GroupDTOAllContact);

                        foreach (var item in Group)
                        {
                            GroupDTO GroupDTO = new GroupDTO();
                            GroupDTO = Transform.GroupToDTO(item);
                            Group objGroup = uow.GroupRepo.GetById(item.Id);//, true
                            //GroupContactDTO GroupContactDTO = new GroupContactDTO();
                            //GroupContactDTO = GetGroupContactById(GroupDTO.Id);
                            List<ContactDTO> ContactDTO = new List<ContactDTO>();
                            int ContactCount = GroupContactService.GetGroupIdWiseContactsCount(objGroup.Id, "");

                            GroupDTO.ContactCount = ContactCount;// objGroup.Contacts.Count();//GroupContactDTO.Contacts.Count(); //
                            GroupDTOList.Add(GroupDTO);
                        }
                    }
                }

                return GroupDTOList;
            }
            //catch (LoggedInUserException)
            //{
            //    throw new System.TimeoutException();
            //}
            catch (Exception ex)
            {

                throw;
            }
        }
        //Get group details by group name and client id
        public static GroupDTO GetGroupByNameAndClientId(string Name, int ClientId)
        {
            try
            {
                GroupDTO GroupDTO = new GroupDTO();
                UnitOfWork uow = new UnitOfWork();
                IEnumerable<Group> Group = uow.GroupRepo.GetAll().Where(e => e.Name.ToLower() == Name.ToLower() && e.ClientID == ClientId);
                //ClientDTO ClientDTO = Transform.ClientToDTO(Client);
                if (Group.ToList().Count > 0)
                {
                    foreach (var item in Group)
                    {

                        GroupDTO = Transform.GroupToDTO(item);
                        return GroupDTO;
                    }
                    return GroupDTO;
                }
                else return GroupDTO;
            }
            catch
            {
                throw;
            }
        }
        public static void ReadSqlite(int ClientId, string sqlitefile)
        {
            int NewGroupId = 0;
            int GrpId = 0;
            try
            {

                DataTable dtGroupContacts = GetGroupContacts(sqlitefile);
                int GroupId = 0;
                for (int i = 0; (i <= (dtGroupContacts.Rows.Count - 1)); i++)
                {
                    try
                    {
                        int ContactId = 0;

                        if (!Convert.IsDBNull(dtGroupContacts.Rows[i]["GroupID"].ToString()))
                        {
                            GroupId = Convert.ToInt32( dtGroupContacts.Rows[i]["GroupID"].ToString());
                        }
                        else
                        {
                            GroupId = 0;
                        }

                        if (!Convert.IsDBNull(dtGroupContacts.Rows[i]["ContactID"].ToString()))
                        {
                            ContactId = Convert.ToInt32(dtGroupContacts.Rows[i]["ContactID"].ToString());
                        }
                        else
                        {
                            ContactId = 0;
                        }

                        DataTable dtGroups = GetGroups(sqlitefile, GroupId);
                        for (int j = 0; (j <= (dtGroups.Rows.Count - 1)); j++)
                        {
                            try
                            {
                                //int chkGroupid = 0;
                                    string Groupname = "";
                                    if (!Convert.IsDBNull(dtGroups.Rows[j]["GroupName"].ToString()))
                                    {
                                        Groupname = dtGroups.Rows[j]["GroupName"].ToString();
                                    }
                                    else
                                    {
                                        Groupname = "";
                                    }

                                    //if (!Convert.IsDBNull(dtGroups.Rows[j]["GroupID"].ToString()))
                                    //{
                                    //    GrpId = Convert.ToInt32(dtGroups.Rows[j]["GroupID"].ToString());
                                    //}
                                    //else
                                    //{
                                    //    GrpId = 0;
                                    //}

                                    if (GroupId != GrpId)
                                    {
                                        // Check group name already present or not
                                        GroupDTO GroupDTOPresent = new GroupDTO();
                                        GroupDTOPresent = GroupService.GetGroupByNameAndClientId(Groupname, ClientId);
                                        if (GroupDTOPresent.Id == 0)
                                        {
                                            ////CreateGroup
                                            GroupDTO GroupDTO = new GroupDTO();
                                            GroupDTO.Name = Groupname;
                                            GroupDTO.ClientID = ClientId;
                                            NewGroupId = GroupService.Create(GroupDTO);
                                        }
                                        else
                                        {
                                            NewGroupId = GroupDTOPresent.Id;
                                        }

                                    }

                                    DataTable dtContacts = GetContactsById(sqlitefile, ContactId);

                                for (int k = 0; (k <= (dtContacts.Rows.Count - 1)); k++)
                                {
                                    try
                                    {
                                         string FirstName;
                                         if (!Convert.IsDBNull(dtContacts.Rows[k]["FirstName"].ToString()))
                                         {
                                             FirstName = dtContacts.Rows[k]["FirstName"].ToString();
                                         }
                                         else
                                         {
                                             FirstName = "";
                                         }

                                         string LastName;
                                         if (!Convert.IsDBNull(dtContacts.Rows[k]["LastName"].ToString()))
                                         {
                                             LastName = dtContacts.Rows[k]["LastName"].ToString();
                                         }
                                         else
                                         {
                                             LastName = "";
                                         }

                                         string FullName = FirstName + " " + LastName;

                                         string Mobile;
                                         if (!Convert.IsDBNull(dtContacts.Rows[k]["MobileNumber"].ToString()))
                                         {
                                             Mobile = dtContacts.Rows[k]["MobileNumber"].ToString();
                                             if (Mobile == "") { continue; }
                                         }
                                         else
                                         {
                                             Mobile = "";
                                         }

                                         string Gender;
                                         if (!Convert.IsDBNull(dtContacts.Rows[k]["Gender"].ToString()))
                                         {
                                             Gender = dtContacts.Rows[k]["Gender"].ToString();
                                             if (Gender == "")
                                             {
                                                 Gender = "Male";
                                             }
                                         }
                                         else
                                         {
                                             Gender = "Male";
                                         }

                                         string BirthDate;
                                         if (!Convert.IsDBNull(dtContacts.Rows[k]["BirthDate"].ToString()))
                                         {
                                             BirthDate = dtContacts.Rows[k]["BirthDate"].ToString();
                                         }
                                         else
                                         {
                                             BirthDate =  null;
                                         }

                                         string Anniversary;
                                         if (!Convert.IsDBNull(dtContacts.Rows[k]["Anniversary"].ToString()))
                                         {
                                             Anniversary = dtContacts.Rows[k]["Anniversary"].ToString();
                                         }
                                         else
                                         {
                                             Anniversary =  null;
                                         }

                                         string Email;
                                         if (!Convert.IsDBNull(dtContacts.Rows[k]["EmailID"].ToString()))
                                         {
                                             Email = dtContacts.Rows[k]["EmailID"].ToString();
                                         }
                                         else
                                         {
                                             Email = null;
                                         }

                                         //Check Contact Present or not
                                         ContactDTO ContactDTO = new ContactDTO();
                                         ContactDTO = ContactService.GetContactByMobileNumberAndClientId(Mobile, ClientId);
                                         if (ContactDTO.Id == 0)
                                         {
                                             ////Create Contact
                                             ContactDTO ContactDTONew = new ContactDTO();
                                             ContactDTONew.Name = FullName;
                                             if (CommonService.IsDate(BirthDate))
                                             {
                                                DateTime? bdate = Convert.ToDateTime( BirthDate);
                                                 ContactDTONew.BirthDate = bdate;
                                             }

                                             if (CommonService.IsDate(Anniversary))
                                             {
                                                 DateTime? anniversarydate = Convert.ToDateTime(Anniversary);
                                                 ContactDTONew.BirthDate = anniversarydate;
                                             }
                                             ContactDTONew.Email = Email;
                                             ContactDTONew.ClientId = ClientId;

                                             ContactDTONew.Gender = Gender;
                                             ContactDTONew.MobileNumber = Mobile;

                                             ContactDTONew.FirstName = FirstName;
                                             ContactDTONew.LastName = LastName;
                                             GroupDTO GroupDTO = GroupService.GetById(NewGroupId);
                                             List<GroupDTO> Groups = new List<GroupDTO>();
                                             Groups.Add(GroupDTO);
                                             ContactDTONew.Groups = Groups;

                                             if (ContactDTONew.FirstName.Length > 50)
                                             {
                                                 continue;
                                             }

                                             if (ContactDTONew.LastName.Length > 50)
                                             {
                                                 continue;
                                             }
                                             ContactService.Create(ContactDTONew);

                                         }
                                    }
                                    catch
                                    {
                                        continue;
                                    }

                                }

                                GrpId = GroupId;
                            }
                            catch
                            {
                                continue;
                            }
                        }

                    }
                    catch
                    {
                        continue;
                    }
                }

            }
            catch(Exception ex)
            {
                using (FileStream file = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "\\" + System.DateTime.Now.Date.ToString("dd-MMM-yyyy") + "_Log.txt", FileMode.Append, FileAccess.Write))
                {
                    StreamWriter streamWriter = new StreamWriter(file);
                    streamWriter.WriteLine(System.DateTime.Now + " - " + "ReadSqlite" + " - " + ex.Message.ToString());
                    streamWriter.Close();
                }
            }
        }
        public static void CreatePacket()
        {
            StringBuilder recipientnumberslist = new StringBuilder();

            try
            {
                bool ismailmarge = false;
                int requiredCreditTosendmsg = 0;
                //DataTable dtContact = new DataTable();
                int MOBILENUMBERLEN = 0;
                string xmlpacket = null;
                List<CampaignDTO> CampaignDTOList = CampaignService.GetCampaignNotSentList();
                if (CampaignDTOList.Count != 0)
                {
                    foreach (var item in CampaignDTOList)
                    {
                        // create xml packet
                        DataTable dtContact = new DataTable();

                        xmlpacket = "<?xml version=" + "\"1.0\"?>";
                        xmlpacket += "<packet>";
                        xmlpacket += "<mbversion>MessageBlaster_Web</mbversion>";
                        xmlpacket += "<messagesource>MSGBLASTER</messagesource>";
                        //DataTable regInfoDT = oCompanyInfo.LoadAll();
                        ClientDTO ClientDTO = new ClientDTO();
                        ClientDTO = ClientService.GetById(item.ClientId);

                        SettingDTO SettingDTO = new SettingDTO();
                        SettingDTO = SettingService.GetById(1);
                        MOBILENUMBERLEN = SettingDTO.MobileNumberLength;

                        ArrayList recipientsnumbers = new ArrayList();
                        MessageLogDTO oMessageLog = new MessageLogDTO();
                        string[] recipients;
                        if (item.GroupId == null) // To check wheather the user sending Group message
                        {
                            recipients = item.RecipientsNumber.ToString().Split(',');
                        }
                        else
                        {
                            recipients = item.RecipientsNumber.ToString().Split(',');
                        }
                        if (recipients.Length == 0)
                        {
                            //oUcButtonControl.showMessage(frmButtonControl.Messageflag.warningMessage, "Select recipients first.");
                            return;
                        }
                        for (int i = 0; i < recipients.Length; i++) // Loop through each recipient number & remove duplicate numbers
                        {
                            if (!string.IsNullOrEmpty(recipients[i].ToString())) // Don`t allow empty number
                            {
                                string mobileNumber = GetValidMobileNumber(recipients[i].ToString().Trim()); // Get only digits from Mobile number
                                if (mobileNumber.Length >= MOBILENUMBERLEN) // Check for valid mobile number
                                {
                                    mobileNumber = mobileNumber.Substring(mobileNumber.Length - MOBILENUMBERLEN);
                                    if (!recipientsnumbers.Contains(mobileNumber)) // Check for number duplication.
                                    {
                                        recipientsnumbers.Add(mobileNumber);
                                        recipientnumberslist.Append(mobileNumber).Append(',');
                                    }
                                }
                            }
                        }
                        if (recipientnumberslist.Length != 0)
                        {
                            oMessageLog.Recipients = recipientnumberslist.ToString().Substring(0, recipientnumberslist.Length - 1);
                        }

                        MsgInformationDTO _oMsginfo = new MsgInformationDTO();

                        _oMsginfo.CampaignId = item.Id;// regInfoDT.Rows[0]["SerialKey"].ToString();
                        //xmlpacket += "<cdkey>" + regInfoDT.Rows[0]["SerialKey"].ToString() + "</cdkey>";
                        xmlpacket += "<campaignId>" + _oMsginfo.CampaignId + "</campaignId>";
                        _oMsginfo.ClientId = item.ClientId;// MachineID.Value();
                        //xmlpacket += "<machineid>" + _oMsginfo.MachineID + "</machineid>";
                        xmlpacket += "<clientId>" + _oMsginfo.ClientId + "</clientId>";

                        if (!string.IsNullOrEmpty(item.Name)) // check for TemplateName
                        {
                            //xmlpacket += "<campaignname>" + MsgCorrect(lkupTemplate.Text) + "</campaignname>";
                            xmlpacket += "<campaignname>" + MsgCorrect(item.Name.ToString()) + "</campaignname>";
                            oMessageLog.MessageTemplateID = _oMsginfo.CampaignId;
                        }
                        else
                        {
                            xmlpacket += "<campaignname>Direct_Message</campaignname>";
                            oMessageLog.MessageTemplateID = _oMsginfo.CampaignId;
                        }

                        if (!string.IsNullOrEmpty(item.GroupId.ToString())) //nameOfGroupForMsgSending
                        {
                            GroupDTO GroupDTO = new GroupDTO();
                            GroupDTO = GroupService.GetById(Convert.ToInt32(item.GroupId));
                            xmlpacket += "<groupname>" + MsgCorrect(GroupDTO.Name) + "</groupname>"; // nameOfGroupForMsgSending
                            oMessageLog.RecipientType = GroupDTO.Name;
                        }
                        else if (!string.IsNullOrEmpty(item.Name))  //nameOfImportedFile // Check for is direct message to imported contact
                        {
                            oMessageLog.RecipientType = item.Name;//  nameOfImportedFile ;
                        }
                        else
                        {
                            oMessageLog.RecipientType = "Direct";
                        }

                        oMessageLog.MessageDateTime = Convert.ToString(System.DateTime.Now);
                        xmlpacket += "<senddate>" + System.DateTime.Now.ToString("d/MMM/yyyy") + "</senddate>";

                        if (!string.IsNullOrEmpty(item.ScheduledDate.ToString())) //scheduledDate.Text // check for sheduled Date
                        {
                            DateTime ScheduledDateTime = DateTime.Parse(item.ScheduledDate.ToString());
                            if (item.ScheduledTime == null || item.ScheduledTime == "")
                            {
                                item.ScheduledTime = "12:00 AM";
                            }
                            DateTime ScheduledTime = Convert.ToDateTime(item.ScheduledTime);
                            ScheduledDateTime = ScheduledDateTime.AddHours(ScheduledTime.TimeOfDay.Hours);
                            ScheduledDateTime = ScheduledDateTime.AddMinutes(ScheduledTime.TimeOfDay.Minutes);
                            DateTime ActualScheduleDatetime = Convert.ToDateTime(item.ScheduledDate.ToString("MM/dd/yyyy") + " " + ScheduledDateTime.TimeOfDay); ;
                            xmlpacket += "<scheduleddate>" + ActualScheduleDatetime.ToString("dd/MMM/yyyy HH:mm tt") + "</scheduleddate>";
                            oMessageLog.MessageScheduledDateTime = Convert.ToString(ScheduledDateTime);
                        }

                        oMessageLog.MessageText = item.Message.ToString().Replace("'", "''"); //memoMessagetxt.Text.Replace("'", "''");

                        if (FormatMessageText(item.Message)) //memoMessagetxt.Text
                        {
                            ismailmarge = true;
                            xmlpacket += "<messagetype>MAILMERGE</messagetype>";
                            oMessageLog.MessageTemplateType = "MAILMERGE";
                            // Get information of numbers which are in Contact list to foramte mail-marge-message
                            string nameOfGroupForMsgSending = null;

                            if (nameOfGroupForMsgSending == null)
                                dtContact = CommonService.SelectContatsInNumber(recipientnumberslist.ToString().Substring(0, recipientnumberslist.Length - 1), item.ClientId);
                            else
                                dtContact = CommonService.SelectContatsInNumber(recipientnumberslist.ToString().Substring(0, recipientnumberslist.Length - 1), item.ClientId);
                        }
                        else
                        {

                            xmlpacket += "<messagetype>NORMAL</messagetype>";
                            oMessageLog.MessageTemplateType = "NORMAL";
                        }

                        oMessageLog.Count = recipientsnumbers.Count;
                        xmlpacket += "<messagecount>" + recipientsnumbers.Count.ToString() + "</messagecount>";

                        //oMessageLog.SenderNumber = lookUpSender.Text;
                        List<UserDTO> UserDTOList = new List<UserDTO>();
                        UserDTOList = UserService.GetUsersbyClientId(ClientDTO.Id, "");
                        if (UserDTOList.Count != 0)
                        {
                            foreach (var itemuser in UserDTOList)
                            {
                                if (itemuser.UserType == "Admin")
                                {
                                    oMessageLog.SenderNumber = itemuser.Mobile;
                                    xmlpacket += "<sender>" + MsgCorrect(oMessageLog.SenderNumber) + "</sender>";
                                }

                            }
                        }

                        xmlpacket += "<numbers>";
                        if (ismailmarge)
                            requiredCreditTosendmsg = AddMsgRecipToXmlpacketMailMerge(item.Message, recipientsnumbers, dtContact.DefaultView, xmlpacket, _oMsginfo, recipientsnumbers.Count);
                        else
                            requiredCreditTosendmsg = AddMsgRecipToXmlpacket(item.Message, recipientsnumbers, xmlpacket, _oMsginfo, recipientsnumbers.Count) * recipientsnumbers.Count;

                        //xmlpacket += "</numbers>";
                        //xmlpacket += "</packet>";
                        //_oMsginfo.xmlpacket = xmlpacket;
                        //_oMsginfo.RequiredCredits = requiredCreditTosendmsg;
                        //Byte[] array = Serializeobject(_oMsginfo);
                        //Byte[] checksum = new MD5CryptoServiceProvider().ComputeHash(array); // calculate checksum for validation

                        //if (requiredCreditTosendmsg > recipientsnumbers.Count)
                        //{
                        //    //DialogResult dlg = XtraMessageBox.Show("You will be charged " + requiredCreditTosendmsg + " credits to send this message." + "\r\n" + "Do you want to send ?", "Conformation", MessageBoxButtons.YesNo);
                        //    //if (dlg == DialogResult.Yes)
                        //    //{

                        //    string responsefromService = SendMessage(array, checksum);
                        //    Response(responsefromService);

                        //    //}
                        //    //else
                        //    //{
                        //    //oUcButtonControl.ShowSend = true;
                        //    //oUcButtonControl.showMessage(frmButtonControl.Messageflag.none, "");
                        //    //oUcButtonControl.ButtonView();
                        //    //this.Update();
                        //    //}
                        //}
                        //else
                        //{
                        //    string responsefromService = SendMessage(array, checksum);
                        //    Response(responsefromService);
                        //}
                    }
                }

            }
            catch (WebException ex)
            {
                //oUcButtonControl.showMessage(frmButtonControl.Messageflag.errorMessage, Global.DisplayConnectionError(ex));
                throw;
            }
        }
        public static List<ContactDTO> GetContactsbyClientId(int ClientId, string search, PagingInfo pagingInfo)
        {
            List<ContactDTO> contactDTO = new List<ContactDTO>();
            GroupDTO GroupDTO = new GroupDTO();
            try
            {
                UnitOfWork uow = new UnitOfWork();
                int skip = (pagingInfo.Page - 1) * pagingInfo.ItemsPerPage;
                int take = pagingInfo.ItemsPerPage;
                IQueryable<Contact> Contact = uow.ContactRepo.GetAll().Where(e => e.ClientId == ClientId).AsQueryable();// ToList().Skip(skip).Take(take); //.OrderBy(e => e.Name)

                Contact = PagingService.Sorting<Contact>(Contact, pagingInfo.SortBy, pagingInfo.Reverse);
                Contact = Contact.Skip(skip).Take(take);
                if (Contact != null)
                {
                    if (search != "" && search != null)
                    {

                        bool IsDate = CommonService.IsDate(search);
                        if (IsDate != true)
                        {
                            // string search

                            IQueryable<Contact> Contactsearch = uow.ContactRepo.GetAll().Where(e => (e.ClientId == ClientId) && ((e.Email != null ? (e.Email.ToLower().Contains(search.ToLower())) : false) || e.MobileNumber.Contains(search) || (e.Name != null ? (e.Name.ToLower().Contains(search.ToLower())) : false) || (e.FirstName != null ? (e.FirstName.ToLower().Contains(pagingInfo.Search.ToLower())) : false) || (e.LastName != null ? (e.LastName.ToLower().Contains(pagingInfo.Search.ToLower())) : false) || (e.AnniversaryDate.ToString() != null ? (Convert.ToDateTime(e.AnniversaryDate).ToString("dd-MMM-yyyy").ToLower().Contains(pagingInfo.Search.ToLower())) : false) || (e.BirthDate.ToString() != null ? (Convert.ToDateTime(e.BirthDate).ToString("dd-MMM-yyyy").ToLower().Contains(pagingInfo.Search.ToLower())) : false))).AsQueryable();// .ToList().Skip(skip).Take(take); //.OrderBy(e => e.Name)
                            Contactsearch = PagingService.Sorting<Contact>(Contactsearch, pagingInfo.SortBy, pagingInfo.Reverse);
                            Contactsearch = Contactsearch.Skip(skip).Take(take);

                            if (Contactsearch != null)
                            {
                                foreach (var item in Contactsearch)
                                {
                                    ContactDTO ContactDTOObj = new ContactDTO();
                                    ContactDTOObj = GetById(item.Id);
                                    contactDTO.Add(ContactDTOObj);

                                    //ContactDTOObj =Transform.ContactToDTO(item);
                                    // contactDTO.Add(Transform.ContactToDTO(item));

                                }

                            }

                        }
                        else
                        {
                            //date wise search
                            DateTime date = Convert.ToDateTime(search);
                            IQueryable<Contact> Contactsearch = uow.ContactRepo.GetAll().Where(e => (e.ClientId == ClientId) && e.AnniversaryDate >= date && e.AnniversaryDate < date.AddDays(1) || e.BirthDate >= date && e.BirthDate < date.AddDays(1)).AsQueryable();//.OrderBy(e => e.Name);

                            Contactsearch = PagingService.Sorting<Contact>(Contactsearch, pagingInfo.SortBy, pagingInfo.Reverse);
                            Contactsearch = Contactsearch.Skip(skip).Take(take);

                            if (Contactsearch != null)
                            {
                                foreach (var item in Contactsearch)
                                {
                                    ContactDTO ContactDTOObj = new ContactDTO();
                                    ContactDTOObj = GetById(item.Id);
                                    contactDTO.Add(ContactDTOObj);
                                    // contactDTO.Add(Transform.ContactToDTO(item));

                                }
                            }
                            return contactDTO;

                        }

                    }
                    else
                    {
                        foreach (var item in Contact)
                        {
                            ContactDTO ContactDTOObj = new ContactDTO();
                            ContactDTOObj = GetById(item.Id);
                            contactDTO.Add(ContactDTOObj);
                            //contactDTO.Add(Transform.ContactToDTO(item));

                        }
                    }
                }

                return contactDTO;
            }
            catch (Exception)
            {

                throw;
            }
        }
        //int GroupId,
        public static bool ImportContactsFromExcelFile(int ClientId, List<ContactDTO> ContactDTOList)
        {
            //List<ContactDTO> ContactDTOListNew = new List<ContactDTO>();
            //ContactDTOListNew = ContactDTOList;

            bool IsImported = false;
            try
            {
                ContactDTO ContactDTO = new ContactDTO();
                GroupDTO GroupDTO = new GroupDTO();
                // Create Group
                GroupDTO.Name = "MyGroup " + string.Format("{0:G}", System.DateTime.Now);
                GroupDTO.ClientID = ClientId;
                int GroupId = GroupService.Create(GroupDTO);

                if (GroupId != 0)
                {
                    GroupDTO = GroupService.GetById(GroupId);
                }
                else
                {
                    GroupDTO = null;
                }

                foreach (var item in ContactDTOList)
                {

                    ContactDTO = item;
                    ContactDTO.ClientId = ClientId;
                    if (ContactDTO.Groups == null && GroupDTO != null)
                    {
                        ContactDTO.Groups = new List<GroupDTO>();
                        ContactDTO.Groups.Add(GroupDTO);
                    }

                    bool IsMobileExist = SearchMobileNumber(ContactDTO.MobileNumber, ClientId, ContactDTO.Id);
                    if (IsMobileExist != true)
                    {
                        //Insert Contact information to Contact.
                        try
                        {
                            if (ContactDTO.IsValid == true)
                            {
                                ////Check Contact Present or not
                                //ContactDTO ContactDTOpresent = new ContactDTO();
                                //ContactDTOpresent = ContactService.GetContactByMobileNumberAndClientId(ContactDTO.MobileNumber, ClientId);
                                if (ContactDTO.Id == 0)
                                {
                                    int ContactId = Create(ContactDTO);
                                }
                            }
                        }
                        catch (Exception)
                        {
                            continue;
                        }
                    }

                    IsImported = true;
                }

                GroupDTO GroupDTOTemp = new GroupDTO();
                GroupDTOTemp.ContactCount = GroupContactService.GetGroupIdWiseContactsCount(GroupId, "");
                if (GroupDTOTemp.ContactCount == 0)
                {
                    GroupService.Delete(GroupId);
                }

                return IsImported;
            }
            catch (Exception e)
            {
                throw;
            }
        }
        //Returns Campaign paged list as per client and search with pagingInfo obect
        public static PageData<CampaignDTO> GetCampaignPagedListbyClientId(PagingInfo pagingInfo, int ClientId)
        {
            List<CampaignDTO> CampaignDTOList = new List<CampaignDTO>();
            PageData<CampaignDTO> pageList = new PageData<CampaignDTO>();

            if (pagingInfo == null)
            {
                PagingInfo PagingInfoCreated = new PagingInfo();
                PagingInfoCreated.Page = 1;
                PagingInfoCreated.Reverse = false;
                PagingInfoCreated.ItemsPerPage = 1;
                PagingInfoCreated.Search = "";
                PagingInfoCreated.TotalItem = 0;

                pagingInfo = PagingInfoCreated;
            }
            if (pagingInfo.SortBy == "")
            {
                pagingInfo.SortBy = "CreatedDate";
            }

            CampaignDTOList = GetCampaignsbyClientId(ClientId, pagingInfo.Search, pagingInfo);
            IQueryable<CampaignDTO> CampaignDTOPagedList = CampaignDTOList.AsQueryable();
            UnitOfWork uow = new UnitOfWork();
            int count = 0;

            if (pagingInfo.Search != "" && pagingInfo.Search != null)
            {
                bool IsDate = CommonService.IsDate(pagingInfo.Search);
                if (IsDate != true)
                {
                    count = 0;
                    count = uow.CampaignRepo.GetAll().Where(e => e.Name.ToLower().Contains(pagingInfo.Search.ToLower()) || e.RecipientsNumber.Contains(pagingInfo.Search) || e.RequiredCredits.ToString() == (pagingInfo.Search) || (e.ScheduledDate.ToString() != null ? (Convert.ToDateTime(e.ScheduledDate).ToString("dd-MMM-yyyy").ToLower().Contains(pagingInfo.Search.ToLower())) : false)).OrderByDescending(e => e.CreatedDate).Count();
                }
                else
                {
                    DateTime date = Convert.ToDateTime(pagingInfo.Search);
                    count = 0;
                    count = uow.CampaignRepo.GetAll().Where(e => e.CreatedDate >= date && e.CreatedDate < date.AddDays(1) || e.ScheduledDate >= date && e.ScheduledDate < date.AddDays(1)).OrderByDescending(e => e.CreatedDate).Count();

                }

            }
            else
            {
                count = uow.CampaignRepo.GetAll().Where(e => e.ClientId == ClientId).Count();
            }

            ////Sorting
            //CampaignDTOPagedList = PagingService.Sorting<CampaignDTO>(CampaignDTOPagedList, pagingInfo.SortBy, pagingInfo.Reverse);

            // paging
            if (CampaignDTOPagedList.Count() > 0)
            {
                //var ContacDTOPerPage = PagingService.Paging<CampaignDTO>(CampaignDTOPagedList, pagingInfo.ItemsPerPage, pagingInfo.Page);
                pageList.Count = count;// CampaignDTOPagedList.Count();

                List<CampaignDTO> pagedCampaignDTOList = new List<CampaignDTO>();
                foreach (var item in CampaignDTOPagedList)
                {
                    if (item.Status == "Unsend" && item.GroupId != null)//item.IsSent == false
                    {
                        GroupContactDTO GroupDTO = new GroupContactDTO();
                        GroupDTO GroupDTOTemp = new GroupDTO();
                        GroupDTOTemp = GroupService.GetById(Convert.ToInt32(item.GroupId));
                        //GroupDTO = GroupService.GetGroupContactById(GroupDTOTemp.Id);

                        //List<ContactDTO> ContactDTOList = new List<ContactDTO>();
                        //ContactDTOList = GroupContactService.GetGroupIdWiseContacts(GroupDTOTemp.Id);

                        int CotactCount = GroupContactService.GetGroupIdWiseContactsCount(GroupDTOTemp.Id, "");

                        item.GroupName = GroupDTOTemp.Name;// GroupDTO.Name;
                        item.GroupContactCount = item.RecipientsCount;

                        if (item.RecipientsCount != CotactCount) // GroupDTO.Contacts.Count()
                        {
                            item.RecipientsCount = CotactCount;// GroupDTO.Contacts.Count();
                            item.GroupContactCount = item.RecipientsCount;
                            item.RequiredCredits = item.RecipientsCount * item.MessageCount;
                            CampaignService.Edit(item);
                        }

                        if (CotactCount == 1) //GroupDTO.Contacts.Count()
                        {
                            item.GroupContactCount = null;
                            List<ContactDTO> ContactDTOList = GroupContactService.GetGroupIdWiseContacts(GroupDTOTemp.Id).ToList();
                            item.RecipientsNumber = ContactDTOList[0].MobileNumber;// GroupDTO.Contacts[0].MobileNumber;
                            item.RecipientsCount = 1;
                        }
                    }
                    else if (item.Status == "Unsend" && item.ForAllContact == true)//item.IsSent == false
                    {
                        int CotactCount = uow.ContactRepo.GetAll().Where(e => e.ClientId == item.ClientId).Count();
                        item.GroupContactCount = CotactCount;
                        if (item.RecipientsCount != CotactCount) // GroupDTO.Contacts.Count()
                        {
                            item.GroupContactCount = CotactCount;
                            item.RecipientsCount = CotactCount;
                            item.RequiredCredits = item.RecipientsCount * item.MessageCount;
                            CampaignService.Edit(item);
                        }

                        if (CotactCount == 1) //GroupDTO.Contacts.Count()
                        {
                            item.GroupContactCount = null;
                            List<ContactDTO> ContactDTOList = ContactService.GetListByClientId(item.ClientId).ToList();
                            item.RecipientsNumber = ContactDTOList[0].MobileNumber;// GroupDTO.Contacts[0].MobileNumber;
                            item.RecipientsCount = 1;
                        }

                    }

                    pagedCampaignDTOList.Add(item);
                }
                pageList.Data = pagedCampaignDTOList;
            }
            else
            {
                pageList.Data = null;
            }

            return pageList;
        }
        public static CampaignDTO GetById(int Id)
        {
            try
            {
                UnitOfWork uow = new UnitOfWork();
                Campaign Campaign = uow.CampaignRepo.GetById(Id);
                CampaignDTO CampaignDTO = Transform.CampaignToDTO(Campaign);

                //TemplateDTO TemplateDTO = new TemplateDTO();
                CampaignDTO.TemplateDTO = TemplateService.GetTemplateByMessage(CampaignDTO.Message);

                //List<GroupDTO> GroupDTOList = new List<GroupDTO>();
                //GroupDTOList = CommonService.GetGroupList(CampaignDTO.Groups);
                //CampaignDTO.GroupDTOList = GroupDTOList;
                if(CampaignDTO.Status == "Unsend")// (CampaignDTO.IsSent == false)
                {
                    if (CampaignDTO.GroupId != null || CampaignDTO.GroupId > 0)
                    {
                        //List<GroupDTO> GroupDTOList = new List<GroupDTO>();
                        GroupDTO GroupDTO = new GroupDTO();
                        //GroupDTOList = CommonService.Get(EcouponCampaignDTO.Groups);
                        GroupDTO = GroupService.GetByIdWithContactCount(Convert.ToInt32(CampaignDTO.GroupId));
                        CampaignDTO.GroupName = GroupDTO.Name;
                        CampaignDTO.GroupContactCount = GroupDTO.ContactCount;
                    }

                    if (CampaignDTO.ForAllContact == true)
                    {
                        CampaignDTO.GroupId = 0;
                        CampaignDTO.GroupContactCount = uow.ContactRepo.GetAll().Where(e => e.ClientId == CampaignDTO.ClientId).Count();
                        CampaignDTO.GroupName = "All Contacts";
                    }
                }

                if (CampaignDTO.ForAllContact == true && CampaignDTO.Status == "Sent")// CampaignDTO.IsSent == true)
                {
                    CampaignDTO.GroupId = 0;
                    CampaignDTO.GroupContactCount = CampaignDTO.RecipientsCount;
                    CampaignDTO.GroupName = "All Contacts";
                }

                if (CampaignDTO.Status == "Sent" && CampaignDTO.GroupId != null || CampaignDTO.GroupId > 0) // CampaignDTO.IsSent == true
                {
                    //List<GroupDTO> GroupDTOList = new List<GroupDTO>();
                    GroupDTO GroupDTO = new GroupDTO();
                    //GroupDTOList = CommonService.Get(EcouponCampaignDTO.Groups);
                    if (CampaignDTO.GroupId > 0)
                    {
                        GroupDTO = GroupService.GetByIdWithContactCount(Convert.ToInt32(CampaignDTO.GroupId));
                        CampaignDTO.GroupName = GroupDTO.Name;
                    }

                }

                return CampaignDTO;
            }
            catch
            {
                throw;
            }
        }
        public static List<GroupDTO> GetGroupList(string GroupIdList)
        {
            int GroupCount = 0;
            List<GroupDTO> GroupDTOList = new List<GroupDTO>();

            try
            {

                // Input string contain separators.
                string value1 = GroupIdList;

                char[] delimiter1 = new char[] { ',', ';' };   // <-- Split on these
                // ... Use StringSplitOptions.RemoveEmptyEntries.
                string[] array2 = value1.Split(delimiter1,
                    StringSplitOptions.RemoveEmptyEntries);
                GroupCount = array2.Count();
                if (GroupCount > 0)
                {
                    foreach (string GrpId in array2)
                    {
                        int GroupId = Convert.ToInt32(GrpId);
                        GroupDTO GroupDTO = new GroupDTO();
                        GroupDTO = GroupService.GetById(GroupId);
                        GroupDTOList.Add(GroupDTO);

                    }
                }

                return GroupDTOList;

            }
            catch (Exception)
            {
                return GroupDTOList;
            }
        }
        public static void ReadEcouponEcouponCampaign()
        {
            List<EcouponCampaignDTO> EcouponCampaignDTOList = new List<EcouponCampaignDTO>();
            EcouponCampaignDTOList = EcouponCampaignService.GetEcouponCampaignNotSentList();
            if (EcouponCampaignDTOList != null)
            {
                foreach (var item in EcouponCampaignDTOList)
                {
                    try
                    {
                        EcouponCampaignDTO EcouponCampaignDTO = new EcouponCampaignDTO();
                        EcouponCampaignDTO = item;
                        DateTime ScheduledDate = EcouponCampaignDTO.SendOn.Date;
                        DateTime Time;
                        if (EcouponCampaignDTO.ScheduleTime != "")
                        {
                            Time = Convert.ToDateTime(EcouponCampaignDTO.ScheduleTime);
                        }
                        else Time = Convert.ToDateTime("12:00 AM");

                        ScheduledDate = Convert.ToDateTime(ScheduledDate.Date.ToString("MM/dd/yyyy") + " " + Time.TimeOfDay);

                        Console.WriteLine("Scheduled Time = " + ScheduledDate);

                        if (ScheduledDate <= System.DateTime.Now)
                        {
                            //SplitMobile(item.ReceipentNumber, EcouponCampaignDTO);
                            if (item.GroupId == null && item.ForAllContact == false)
                            {
                                SplitMobile(item.ReceipentNumber, EcouponCampaignDTO);
                            }
                            else
                            {

                                string RecipientsNumberList = null;
                                if (item.GroupId > 0)
                                {
                                    GroupContactDTO GroupContactDTO = new GroupContactDTO();
                                    GroupDTO GroupDTO = new GroupDTO();
                                    GroupDTO = GroupService.GetById(Convert.ToInt32(item.GroupId));
                                    //GroupContactDTO = GroupService.GetGroupContactById(Convert.ToInt32(GroupDTO.Id));

                                    List<ContactDTO> ContactDTO = new List<ContactDTO>();
                                    ContactDTO = GroupContactService.GetGroupIdWiseContacts(GroupDTO.Id);

                                    foreach (var Contactitem in ContactDTO) //GroupContactDTO.Contacts
                                    {
                                        RecipientsNumberList = Contactitem.MobileNumber + "," + RecipientsNumberList;
                                    }
                                }
                                else if(item.ForAllContact == true)
                                {
                                    RecipientsNumberList = null;
                                    RecipientsNumberList = ContactService.GetAllReceipentNumberByClientId(item.ClientId);
                                    RecipientsNumberList = RecipientsNumberList + ",";
                                }

                                item.ReceipentNumber = RecipientsNumberList.Remove(RecipientsNumberList.LastIndexOf(','));
                                item.RecipientsCount = CommonService.GetRecipientsCount(item.ReceipentNumber);
                                EcouponCampaignService.EditEcouponCampaignFromBackend(item);

                                EcouponCampaignDTO EcouponCampaignGrpDTO = new EcouponCampaignDTO();
                                EcouponCampaignGrpDTO = item;
                                SplitMobile(item.ReceipentNumber, EcouponCampaignGrpDTO);
                            }

                        }
                        else { }

                    }
                    catch (Exception ex)
                    {
                        using (FileStream file = new FileStream(Directory.GetCurrentDirectory() + "\\msgBlasterBackendService_Log.txt", FileMode.Append, FileAccess.Write))
                        {
                            StreamWriter streamWriter = new StreamWriter(file);
                            streamWriter.WriteLine(System.DateTime.Now + " - " + "  ReadEcouponEcouponCampaign()" + " - " + ex.Message);
                            streamWriter.Close();
                        }

                        continue;
                    }

                }
            }

            //Check Client Balance

            //Modify Client Balance
        }
 public static Group GroupToDomain(GroupDTO GroupDTO)
 {
     if (GroupDTO == null) return null;
      Mapper.CreateMap<GroupDTO, Group>();
      Mapper.CreateMap<ContactDTO, Contact>();
      Group Group = Mapper.Map<Group>(GroupDTO);
      return Group;
 }
        //Get ecoupon campaign by id
        public static EcouponCampaignDTO GetById(int Id)
        {
            try
            {
                UnitOfWork uow = new UnitOfWork();
                EcouponCampaign EcouponCampaign = uow.EcouponCampaignRepo.GetById(Id);
                EcouponCampaignDTO EcouponCampaignDTO = Transform.EcouponCampaignToDTO(EcouponCampaign);

                EcouponCampaignDTO.TemplateDTO = TemplateService.GetTemplateByMessage(EcouponCampaignDTO.Message);
                if (EcouponCampaignDTO.IsSent == false)
                {
                    if (EcouponCampaignDTO.GroupId != null || EcouponCampaignDTO.GroupId > 0)
                    {
                        //List<GroupDTO> GroupDTOList = new List<GroupDTO>();
                        GroupDTO GroupDTO = new GroupDTO();
                        //GroupDTOList = CommonService.Get(EcouponCampaignDTO.Groups);
                        GroupDTO = GroupService.GetByIdWithContactCount(Convert.ToInt32(EcouponCampaignDTO.GroupId));
                        EcouponCampaignDTO.Group = GroupDTO.Name;
                        EcouponCampaignDTO.GroupContactCount = GroupDTO.ContactCount;
                    }

                    if (EcouponCampaignDTO.ForAllContact == true)
                    {
                        EcouponCampaignDTO.GroupId = 0;
                        EcouponCampaignDTO.GroupContactCount = uow.ContactRepo.GetAll().Where(e => e.ClientId == EcouponCampaignDTO.ClientId).Count();
                        EcouponCampaignDTO.Group = "All Contacts";
                    }
                }
                else if (EcouponCampaignDTO.IsSent == true)
                {
                    if (EcouponCampaignDTO.ForAllContact == true)
                    {
                        EcouponCampaignDTO.GroupId = 0;
                        EcouponCampaignDTO.GroupContactCount = EcouponCampaignDTO.RecipientsCount;
                        EcouponCampaignDTO.Group = "All Contacts";
                    }

                    if (EcouponCampaignDTO.GroupId != null && EcouponCampaignDTO.GroupId > 0)
                    {
                        EcouponCampaignDTO.Group = GroupService.GetById(Convert.ToInt32(EcouponCampaignDTO.GroupId)).Name;
                    }
                }

                return EcouponCampaignDTO;
            }
            catch
            {
                throw;
            }
        }