//Edit Campaign
        public static void CancelCampaign(CampaignDTO campaignDTO)
        {
            try
            {
                UnitOfWork uow = new UnitOfWork();

                //Add Consumed Credits to clients
                ClientDTO ClientDTO = new ClientDTO();
                ClientDTO = ClientService.GetById(campaignDTO.ClientId);
                ClientDTO.SMSCredit = ClientDTO.SMSCredit + campaignDTO.ConsumedCredits;
                ClientService.Edit(ClientDTO);

                campaignDTO.ConsumedCredits = 0;
                campaignDTO.Status = "Cancelled";
                CampaignService.Edit(campaignDTO);

                Campaign Campaign = Transform.CampaignToDomain(campaignDTO);
                uow.CampaignRepo.Update(Campaign);
                uow.SaveChanges();
            }
            catch
            {
                throw;
            }
        }
 public static Campaign CampaignToDomain(CampaignDTO CampaignDTO)
 {
     if (CampaignDTO == null) return null;
      Mapper.CreateMap<CampaignDTO, Campaign>();
      Campaign Campaign = Mapper.Map<Campaign>(CampaignDTO);
      return Campaign;
 }
        //
        // Method for adding recipient number and mail-marge-message
        //
        public static int AddMsgRecipToXmlpacketMailMerge(string message, ArrayList recipients, DataView DVrecipientInfo, string xmlpacket, MsgInformationDTO _oMsginfo, int recipientsnumberscount, CampaignDTO CampaignDTO)
        {
            //string xmlpacket = null;
            int messagecount = 0;
            string formatedmessage;
            for (int i = 0; i < recipients.Count; i++)
            {
                DVrecipientInfo.RowFilter = "MobileNumber = '" + recipients[i].ToString().Trim() + "'";
                xmlpacket += "<number>" + recipients[i].ToString().Trim() + "</number>";
                xmlpacket += "<message>";
                formatedmessage = FormatMessageTextMicrows(message, DVrecipientInfo);
                xmlpacket += MsgCorrect(FormatMessageText(formatedmessage, DVrecipientInfo));
                messagecount += MessageCount(formatedmessage, CampaignDTO);
                xmlpacket += "</message>";
                DVrecipientInfo.RowFilter = "";
            }

            //////////////////////////////////////////////////////////////////////

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

            if (messagecount > recipientsnumberscount)
            {
                //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);
            }
            //////////////////////////////////////////////////////////////////////
            return messagecount;
        }
 public void CancelCampaign(string accessId, CampaignDTO campaignDTO)
 {
     try
     {
         CampaignService.CancelCampaign(campaignDTO);
     }
     catch (Exception)
     {
         throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
         {
             Content = new StringContent("An error occurred, please try again or contact the administrator."),
             ReasonPhrase = "Critical Exception"
         });
     }
 }
 public int CreateCampaignFromExternalApplication(CampaignDTO campaignDTO)
 {
     try
     {
         return CampaignService.CreateCampaignFromBackend(campaignDTO);
     }
     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)
     {
         throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
         {
             Content = new StringContent("An error occurred, please try again or contact the administrator."),
             ReasonPhrase = "Critical Exception"
         });
     }
 }
 public static bool AllowToProcessClient(CampaignDTO CampaignDTO)
 {
     if (CampaignDTO == null)
     {
         return false;
     }
     else
     {
         ClientDTO ClientDTO = new ClientDTO();
         ClientDTO = ClientService.GetById(CampaignDTO.ClientId);
         if (ClientDTO.SMSCredit > 0)
         {
             return true;
         }
         else
             return false;
     }
 }
        //Returns Contact paged list as per campaign and client with search criteria
        public static PageData<ContactDTO> GetContactsByCampaignId(PagingInfo pagingInfo, int CampaignId, int ClientId)
        {
            UnitOfWork uow = new UnitOfWork();
            CampaignDTO CampaignDTO = new CampaignDTO();
            PageData<ContactDTO> pageList = new PageData<ContactDTO>();

            CampaignDTO = GetById(CampaignId);

            if (CampaignDTO != null)
            {
                string[] array;
                if (CampaignDTO.RecipientsNumber != "")
                {
                    string value = CampaignDTO.RecipientsNumber;
                    array = value.Replace(" ", "").Split(',');

                    List<ContactDTO> ContactDTOList = new List<ContactDTO>();
                    Contact Contact = new Contact();
                    ContactDTO ContactDTO = new ContactDTO();

                    int skip = (pagingInfo.Page - 1) * pagingInfo.ItemsPerPage;
                    int take = pagingInfo.ItemsPerPage;

                    var newlist = array.Skip(skip).Take(take).ToArray();

                    if (pagingInfo.Search != "")
                    {
                        ContactDTOList = SearchContacts(pagingInfo.Search, array, CampaignId, ClientId);
                        pageList.Data = ContactDTOList;
                        pageList.Count = ContactDTOList.Count;
                    }
                    else
                    {
                        for (int i = 0; i < newlist.Length; i++)
                        {
                            Contact = uow.ContactRepo.GetAll().Where(e => e.MobileNumber == newlist[i] && e.ClientId == ClientId).FirstOrDefault();
                            if (Contact == null)
                            {
                                Contact = new Contact();
                                Contact.MobileNumber = newlist.ToList()[i];
                                Contact.Gender = null;
                                Contact.Id = 0;
                                Contact.ClientId = 0;
                                //Contact.Name = null;
                            }

                            ContactDTO = Transform.ContactToDTO(Contact);

                            ContactDTOList.Add(ContactDTO);
                        }
                        pageList.Data = ContactDTOList;
                        pageList.Count = array.Length;
                    }
                }
                else if (CampaignDTO.GroupId != null)
                {
                    // GroupContactDTO GroupContactDTO =  GroupService.GetGroupContactById((int)CampaignDTO.GroupId);
                    pagingInfo.GroupId = (int)CampaignDTO.GroupId;
                    pageList = ContactService.GetGroupIdWisePresentContactsPagedListByClientId(pagingInfo, ClientId);
                }

            }
            else
            {
                pageList.Data = null;
            }

            return pageList;
        }
        public void SendMessages()
        {
            try
            {
                //// Load Queue processor settings
                //sErrlocation = "Loading QueueProcessor Settings From QueueProcessorSettings.xml file-Line 69";
                //Load settings from QueueProcessorSettings.xml file (File present in basedirectory of application.)
                queuesettingsXML = new XmlDocument();
                queuesettingsXML.Load(ConfigurationManager.AppSettings["SETTIGNDIR_PATH"].ToString() + "QueueProcessorSettings.xml");
                MAXCHECKFORCONNECTION = Convert.ToInt32(queuesettingsXML.DocumentElement["maxcheckforgatewqycon"].InnerText);
                MAXCHECKFORRESPONSE = Convert.ToInt32(queuesettingsXML.DocumentElement["maxcheckforgatewayresponse"].InnerText);
                UPDATEBALAFTER = Convert.ToInt32(queuesettingsXML.DocumentElement["updatebalafterevery"].InnerText);
                MAXSMSLENGTH = Convert.ToInt32(queuesettingsXML.DocumentElement["maxsmslength"].InnerText);
                SMSBLOCKLENGTH = Convert.ToInt32(queuesettingsXML.DocumentElement["smsblocklength"].InnerText);
                MAXMOBILELENGTH = Convert.ToInt32(queuesettingsXML.DocumentElement["maxmobilelength"].InnerText);

                sErrlocation = "Select All files from SMSQueue Folder - Line 112";
                string[] files = System.IO.Directory.GetFiles(SMSQDIR, "*.xml"); // Get all *.xml files from SMSQUEUE folder
                if (files.Length > 0)
                {
                    General.WriteInFile("\r\n" + "Total Number of Files = " + files.Length + "");
                    General.WriteInFile("=========================================================================================================");
                    foreach (string file in files)
                    {
                        baseFileName = System.IO.Path.GetFileName(file);
                        // Prepare file path for copying file to BAD or SENT folder depending on situation.
                        sentQFile = SENTQDIR + baseFileName;
                        sourceQFile = SMSQDIR + baseFileName;
                        badQFile = BADQDIR + baseFileName;

                        // Check for Xml File Validation against the Schema
                        if (!System.IO.File.Exists(ConfigurationManager.AppSettings["SETTIGNDIR_PATH"].ToString() + "XmlSchema.xsd"))
                        {
                            General.WriteInFile("SMSQueue processor was terminated because XmlSchema.xsd file is not available in " + APP_PATH + " directory \r\n");
                            break;
                        }

                        sErrlocation = "File Validation against the Schema - Line 133";
                        if (!IsValidFile(sourceQFile))
                        {
                            MoveFileToBadFolder(schemaValidationError); // Invalid file
                            General.WriteInFile(baseFileName + " file moved to BAD folder because, this file is invalid according to Schema Validation.\r\n");
                            continue;
                        }

                        sErrlocation = "Load basefile for sending - Line 140";
                        baseFileXML = new XmlDocument();
                        baseFileXML.Load(sourceQFile); // load xml file from SMSQUEUE folder to process

                        strcampaignId = baseFileXML.DocumentElement["campaignId"].InnerText;
                        strclientId = baseFileXML.DocumentElement["clientId"].InnerText;
                        strSender = baseFileXML.DocumentElement["sender"].InnerText;
                        double number;
                        bool IsNumeric = double.TryParse(strSender, out number); // Check the number is in Numeric form or not
                        if (IsNumeric && strSender.Length == 10)
                            strSender = "91" + strSender;

                        campaignname = ReformatMsg(baseFileXML.DocumentElement["campaignname"].InnerText);

                        // Check for validation of recipient number count and message count
                        // i.e message count > 1 AND != recipient number count than it is invalid file.
                        XmlNodeList MessageToSend = baseFileXML.SelectNodes("/packet/numbers/message");
                        XmlNodeList RecipientsToSendMessage = baseFileXML.SelectNodes("/packet/numbers/number");
                        if (MessageToSend.Count > 1 && MessageToSend.Count != RecipientsToSendMessage.Count)
                        {
                            // This indicates that Msg count & Number count doesnot match
                            MoveFileToBadFolder("Msg count & Number count doesnot match.");
                            General.WriteInFile(baseFileName + " file is moved to BAD folder because Msg count & Number count doesnot match.\r\n");
                            continue;
                        }

                        ClientDTO = new MsgBlaster.DTO.ClientDTO();
                        CampaignDTO = new MsgBlaster.DTO.CampaignDTO();

                        ClientDTO.Id = Convert.ToInt32(strclientId);
                        CampaignDTO.Id =Convert.ToInt32( strcampaignId);

                        ClientDTO = MsgBlaster.Service.ClientService.GetById(ClientDTO.Id);
                        CampaignDTO = MsgBlaster.Service.CampaignService.GetById(CampaignDTO.Id);

                        // Befor AddToSMSQueue() validate user
                        sErrlocation = "Check for Valid User - Line 195";
                        int result = ClientDTO.Id;// oClient.IsValidUser(oClient);
                        if (result == 0)// Invalid User
                        {
                            MoveFileToBadFolder("Invalid user.");
                            General.WriteInFile(baseFileName + " file  moved to BAD folder because of invalid campaignId & clientId.\r\n");
                            continue;
                        }

                        //if (result == 2) // Database Error
                        //{
                        //    General.WriteInFile(baseFileName + " file is skiped due to database error during User validation.\r\n");
                        //    continue;//skip this file and continue
                        //}

                        General.WriteInFile("Opening Balance = " + ClientDTO.SMSCredit);// ClientDBOperation.ActualCredits(oClient));
                        // Check for time restriction over message sending for this user
                        sErrlocation = "Check for Send time restriction - Line 214";
                        //double FROMTIME = Convert.ToDouble(oClient.SendFromTime.Replace(':', '.'));
                        //double UPTOTIME = Convert.ToDouble(oClient.SendUptoTime.Replace(':', '.'));
                        double currentTime = Convert.ToDouble(System.DateTime.Now.Hour + "." + System.DateTime.Now.Minute);
                        //if (currentTime < FROMTIME || currentTime > UPTOTIME)
                        //{
                        //    // skip this file due to time restriction.
                        //    General.WriteInFile(baseFileName + " file is skiped due to send time restriction.\r\n");// +
                        //    continue;
                        //}

                        if (baseFileXML.SelectSingleNode("//scheduleddate") != null)
                        {
                            DateTime ScheduledDate;
                            try
                            {
                                ScheduledDate = Convert.ToDateTime(baseFileXML.DocumentElement["scheduleddate"].InnerText);
                            }
                            catch (Exception ex)
                            {
                                MoveFileToBadFolder("Unrecognized scheduled date.");
                                General.WriteInFile(baseFileName + " file moved to BAD folder because of Unrecognized scheduled date.\r\n");
                                continue;
                            }
                            // 1 = Scheduled datetime is > current datetime
                            // 0 = Scheduled datetime = current datetime
                            // -1 = Scheduled datetime < current datetime
                            if (DateTime.Compare(ScheduledDate, System.DateTime.Now) == 1)
                            {
                                // This file will be send in futuer so skip this file
                                General.WriteInFile(baseFileName + " file is skiped due to scheduled datetime restriction.\r\n");
                                continue;
                            }
                        }
                        // Function for preapearing message to broadcast
                        AddToSMSQueue();
                    }
                    General.WriteInFile("========================================================================================================= ");
                }
            }
            catch (Exception ex)
            {
                General.WriteInFile(sErrlocation + "\r\n" + ex.Message);
                General.WriteInFile("========================================================================================================= ");
            }
        }
        //Edit Campaign from backend process
        public static void EditCampaignFromBackend(CampaignDTO campaignDTO)
        {
            try
            {
                GlobalSettings.LoggedInClientId = campaignDTO.ClientId;
                GlobalSettings.LoggedInUserId = campaignDTO.CreatedBy;
                int PartnerId = ClientService.GetById(campaignDTO.ClientId).PartnerId;
                GlobalSettings.LoggedInPartnerId = PartnerId;

                UnitOfWork uow = new UnitOfWork();
                Campaign Campaign = Transform.CampaignToDomain(campaignDTO);
                uow.CampaignRepo.Update(Campaign);
                uow.SaveChanges();
            }
            catch
            {
                throw;
            }
        }
        //Create Camoaign
        public static int Create(CampaignDTO campaignDTO)
        {
            try
            {
                GlobalSettings.LoggedInClientId = campaignDTO.ClientId;
                GlobalSettings.LoggedInUserId = campaignDTO.CreatedBy;
                ClientDTO ClientDTO = new ClientDTO();
                ClientDTO = ClientService.GetById(campaignDTO.ClientId);
                int PartnerId = ClientDTO.PartnerId;// ClientService.GetById(campaignDTO.ClientId).PartnerId;
                GlobalSettings.LoggedInPartnerId = PartnerId;

                //If SMS Credit balance is low then should not create campaign
                if (ClientDTO.SMSCredit < campaignDTO.ConsumedCredits)
                {
                    return 0;
                }
                var campaign = new Campaign();
                SettingDTO SettingDTO = new SettingDTO();
                SettingDTO = SettingService.GetById(1);
                UnitOfWork uow = new UnitOfWork();
                if (campaignDTO.RecipientsNumber != null && campaignDTO.RecipientsNumber != "")
                {
                    campaignDTO.RecipientsNumber = CommonService.RemoveDuplicateMobile(campaignDTO.RecipientsNumber);
                }

                //Get Message Count
                if (campaignDTO.IsUnicode != true)
                {
                    campaignDTO.MessageCount = CommonService.GetMessageCount(campaignDTO.Message);
                }
                else
                {
                    campaignDTO.MessageCount = CommonService.GetUnicodeMessageCount(campaignDTO.Message);
                }
                campaignDTO.IPAddress = CommonService.GetIP();
                if (campaignDTO.GroupId == null)
                {
                    campaignDTO.RecipientsCount = CommonService.GetRecipientsCount(campaignDTO.RecipientsNumber);
                    campaignDTO.RequiredCredits = (campaignDTO.RecipientsCount * campaignDTO.MessageCount) * SettingDTO.NationalCampaignSMSCount;
                    campaignDTO.CreditsDiffrence = campaignDTO.ConsumedCredits - campaignDTO.RequiredCredits;
                }

                if (campaignDTO.ForAllContact == true)
                {
                    campaignDTO.RecipientsNumber = ContactService.GetAllReceipentNumberByClientId(campaignDTO.ClientId);
                    campaignDTO.RecipientsCount = CommonService.GetRecipientsCount(campaignDTO.RecipientsNumber);
                    campaignDTO.RequiredCredits = (campaignDTO.RecipientsCount * campaignDTO.MessageCount) * SettingDTO.NationalCampaignSMSCount;
                    campaignDTO.GroupId = null;
                    campaignDTO.RecipientsNumber = "";
                    campaignDTO.CreditsDiffrence = campaignDTO.ConsumedCredits - campaignDTO.RequiredCredits;
                }

                if (campaignDTO.GroupId > 0)
                {
                    campaignDTO.RequiredCredits = (campaignDTO.RecipientsCount * campaignDTO.MessageCount) * SettingDTO.NationalCampaignSMSCount;
                }

                campaignDTO.IsReconcile = false;
                campaignDTO.ReconcileDate = System.DateTime.Now.Date;
                campaign = Transform.CampaignToDomain(campaignDTO);
                uow.CampaignRepo.Insert(campaign);
                uow.SaveChanges();

                // Deduct SMS credit balance
                campaignDTO.Id = campaign.Id;

                ClientDTO.SMSCredit = ClientDTO.SMSCredit - campaignDTO.ConsumedCredits;
                ClientService.Edit(ClientDTO);

                return campaignDTO.Id;

            }

            catch (Exception)
            {
                throw;
            }
        }
        public static void ReadCampaign()
        {
            List<CampaignDTO> CampaignDTOList = new List<CampaignDTO>();
            CampaignDTOList = CampaignService.GetCampaignNotSentList();
            if (CampaignDTOList != null)
            {
                foreach (var item in CampaignDTOList)
                {
                    try
                    {
                        CampaignDTO CampaignDTO = new CampaignDTO();
                        CampaignDTO = item;
                        DateTime ScheduledDate = CampaignDTO.ScheduledDate.Date;
                        DateTime Time;
                        if (CampaignDTO.ScheduledTime != "")
                        {
                            Time = Convert.ToDateTime(CampaignDTO.ScheduledTime);
                        }
                        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.RecipientsNumber, CampaignDTO);
                        }
                        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 + " - " + "  ReadCampaign()" + " - " + ex.Message);
                            streamWriter.Close();
                        }

                        continue;
                    }

                }
            }

            //Check Client Balance

            //Modify Client Balance
        }
        //Edit Campaign
        public static void Edit(CampaignDTO campaignDTO)
        {
            try
            {

                //Get previous consumed count and restore clients credits
                ClientDTO ClientDTO = new ClientDTO();
                ClientDTO = ClientService.GetById(campaignDTO.ClientId);
                CampaignDTO CampaignDTORestore = new CampaignDTO();
                CampaignDTORestore = GetById(campaignDTO.Id);
                ClientDTO.SMSCredit = ClientDTO.SMSCredit + CampaignDTORestore.ConsumedCredits;
                ClientService.Edit(ClientDTO);

                //If SMS Credit balance is greater or equal to ConsumededCredits then create campaign
                if (ClientDTO.SMSCredit >= campaignDTO.ConsumedCredits)
                {
                GlobalSettings.LoggedInClientId = campaignDTO.ClientId;
                GlobalSettings.LoggedInUserId = campaignDTO.CreatedBy;
                int PartnerId = ClientService.GetById(campaignDTO.ClientId).PartnerId;
                GlobalSettings.LoggedInPartnerId = PartnerId;

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

                UnitOfWork uow = new UnitOfWork();

                if (campaignDTO.RecipientsNumber != null && campaignDTO.RecipientsNumber != "")
                {
                    campaignDTO.RecipientsNumber = CommonService.RemoveDuplicateMobile(campaignDTO.RecipientsNumber);
                }

                campaignDTO.MessageCount = CommonService.GetMessageCount(campaignDTO.Message);
                if (campaignDTO.GroupId == null)
                {
                    campaignDTO.RecipientsCount = CommonService.GetRecipientsCount(campaignDTO.RecipientsNumber);
                    campaignDTO.RequiredCredits = (campaignDTO.RecipientsCount * campaignDTO.MessageCount) * SettingDTO.NationalCampaignSMSCount;
                    campaignDTO.CreditsDiffrence = campaignDTO.ConsumedCredits - campaignDTO.RequiredCredits;
                }
                campaignDTO.IPAddress = CommonService.GetIP();

                if (campaignDTO.ForAllContact == true)
                {
                    campaignDTO.RecipientsNumber = ContactService.GetAllReceipentNumberByClientId(campaignDTO.ClientId);
                    campaignDTO.RecipientsCount = CommonService.GetRecipientsCount(campaignDTO.RecipientsNumber);
                    campaignDTO.RequiredCredits = (campaignDTO.RecipientsCount * campaignDTO.MessageCount) * SettingDTO.NationalCampaignSMSCount;
                    campaignDTO.GroupId = null;
                    campaignDTO.GroupName = null;
                    campaignDTO.RecipientsNumber = "";
                    campaignDTO.CreditsDiffrence = campaignDTO.ConsumedCredits - campaignDTO.RequiredCredits;
                }

                if (campaignDTO.GroupId > 0)
                {
                    campaignDTO.RequiredCredits = (campaignDTO.RecipientsCount * campaignDTO.MessageCount) * SettingDTO.NationalCampaignSMSCount;
                }

                campaignDTO.IsReconcile = false;
                campaignDTO.ReconcileDate = System.DateTime.Now.Date;
                Campaign Campaign = Transform.CampaignToDomain(campaignDTO);
                uow.CampaignRepo.Update(Campaign);
                uow.SaveChanges();

                //Deduct clients Credit
                ClientDTO.SMSCredit = ClientDTO.SMSCredit - campaignDTO.ConsumedCredits;
                ClientService.Edit(ClientDTO);

                }
            }
            catch
            {
                throw;
            }
        }
        //Create Campaign for Backend process
        public static int CreateCampaignFromBackend(CampaignDTO campaignDTO)
        {
            try
            {

                GlobalSettings.LoggedInClientId = campaignDTO.ClientId;
                GlobalSettings.LoggedInUserId = campaignDTO.CreatedBy;

                ClientDTO ClientDTO = new ClientDTO();
                ClientDTO = ClientService.GetById(campaignDTO.ClientId);

                int PartnerId = ClientDTO.PartnerId;// ClientService.GetById(campaignDTO.ClientId).PartnerId;
                GlobalSettings.LoggedInPartnerId = PartnerId;

                //If SMS Credit balance is low then should not create campaign
                if (ClientDTO.SMSCredit < campaignDTO.ConsumedCredits)
                {
                    return 0;
                }

                var campaign = new Campaign();
                SettingDTO SettingDTO = new SettingDTO();
                SettingDTO = SettingService.GetById(1);
                UnitOfWork uow = new UnitOfWork();
                if (campaignDTO.RecipientsNumber != null)
                {
                    campaignDTO.RecipientsNumber = CommonService.RemoveDuplicateMobile(campaignDTO.RecipientsNumber);
                }
                //Get Message Count
                if (campaignDTO.IsUnicode != true)
                {
                    campaignDTO.MessageCount = CommonService.GetMessageCount(campaignDTO.Message);
                }
                else
                {
                    campaignDTO.MessageCount = CommonService.GetUnicodeMessageCount(campaignDTO.Message);
                }

                if (campaignDTO.GroupId == null)
                {
                    campaignDTO.RecipientsCount = CommonService.GetRecipientsCount(campaignDTO.RecipientsNumber);
                    campaignDTO.RequiredCredits = (campaignDTO.RecipientsCount * campaignDTO.MessageCount) * SettingDTO.NationalCampaignSMSCount;
                }

                campaignDTO.IsReconcile = false;
                campaignDTO.ReconcileDate = System.DateTime.Now.Date;

                //Calculate consumed credits
                double ConsumedCreditPerOneMsg = CommonService.GetConsumedCreditsForOneMessage(campaignDTO.Message, false);
                int RecepientsCount = CommonService.GetRecipientsCount(campaignDTO.RecipientsNumber);
                campaignDTO.ConsumedCredits = RecepientsCount * ConsumedCreditPerOneMsg;

                campaign = Transform.CampaignToDomain(campaignDTO);
                uow.CampaignRepo.Insert(campaign);
                uow.SaveChanges();
                campaignDTO.Id = campaign.Id;

                //Deduct clients balance

                ClientDTO.SMSCredit = ClientDTO.SMSCredit - campaignDTO.ConsumedCredits;
                ClientService.Edit(ClientDTO);

                return campaignDTO.Id;
            }

            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Campaign Log Paged List by CampaignId
        /// </summary>
        /// <param name="CampaignId">Campaign Id</param>
        /// <param name="pagingInfo">pagingInfo object</param>
        /// <returns>Returns paged data list of Campaign log</returns>
        public static PageData<CampaignLogDTO> GetCampaignLogPagedListbyCampaignId(int CampaignId, PagingInfo pagingInfo)
        {
            List<CampaignLogDTO> CampaignLogDTOList = new List<CampaignLogDTO>();
            PageData<CampaignLogDTO> pageList = new PageData<CampaignLogDTO>();

            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 = "SentDateTime";
            }
            CampaignLogDTOList = GetCampaignLogXMLByCampaignId(CampaignId, pagingInfo);
            IQueryable<CampaignLogDTO> CampaignLogDTOPagedList = CampaignLogDTOList.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 = GetCampaignLogXMLPagedCountByCampaignId(CampaignId, pagingInfo);
                }
                else
                {
                    DateTime date = Convert.ToDateTime(pagingInfo.Search);
                    count = 0;
                    count = GetCampaignLogXMLPagedCountByCampaignId(CampaignId, pagingInfo);

                }

            }
            else
            {
                count = GetCampaignLogXMLPagedCountByCampaignId(CampaignId, pagingInfo);
            }

            ////Sorting
            // CampaignLogDTOPagedList = PagingService.Sorting<CampaignLogDTO>(CampaignLogDTOPagedList, pagingInfo.SortBy, pagingInfo.Reverse);

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

                List<CampaignLogDTO> pagedCampaignLogDTOList = new List<CampaignLogDTO>();
                foreach (var item in CampaignLogDTOPagedList)
                {
                    CampaignDTO CampaignDTO = new CampaignDTO();
                    CampaignDTO = CampaignService.GetById(item.CampaignId);
                    item.CampaignName = CampaignDTO.Name;
                    item.CreatedBy = UserService.GetById(CampaignDTO.CreatedBy).Name;
                    pagedCampaignLogDTOList.Add(item);
                }
                pageList.Data = pagedCampaignLogDTOList;
                pageList.SuccessCount = GetCampaignLogXMLCountByCampaignId(CampaignId, true);
                pageList.FailureCount = GetCampaignLogXMLCountByCampaignId(CampaignId, false);
            }
            else
            {
                pageList.Data = null;
                pageList.SuccessCount = GetCampaignLogXMLCountByCampaignId(CampaignId, true);
                pageList.FailureCount = GetCampaignLogXMLCountByCampaignId(CampaignId, false);
            }

            return pageList;
        }
        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)
                    {
                        DateTime Time;
                        if (item.ScheduledTime != "")
                        {
                            Time = Convert.ToDateTime(item.ScheduledTime);
                        }
                        else Time = Convert.ToDateTime("12:00 AM");

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

                        ismailmarge = false;
                        // 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 && item.ForAllContact == false) // To check wheather the user sending Group message
                        {
                            recipients = item.RecipientsNumber.ToString().Split(',');
                        }
                        else
                        {
                            string RecipientsNumberList = null;
                            if (item.GroupId > 0)
                            {

                                GroupContactDTO GroupContactDTO = new GroupContactDTO();
                                GroupDTO GroupDTO = new GroupDTO();
                                GroupDTO = GroupService.GetById(Convert.ToInt32(item.GroupId));
                                List<ContactDTO> ContactDTOList = new List<ContactDTO>();
                                ContactDTOList = GroupContactService.GetGroupIdWiseContacts(Convert.ToInt32(item.GroupId));
                                //GroupContactDTO = GroupService.GetGroupContactById(Convert.ToInt32(GroupDTO.Id));
                                foreach (var Contactitem in ContactDTOList) //GroupContactDTO.Contacts
                                {
                                    RecipientsNumberList = Contactitem.MobileNumber + "," + RecipientsNumberList;
                                }

                            }
                            else if(item.ForAllContact == true)
                            {
                                RecipientsNumberList = null;
                                RecipientsNumberList = ContactService.GetAllReceipentNumberByClientId(item.ClientId);
                                RecipientsNumberList = RecipientsNumberList + ",";

                            }
                                item.RecipientsNumber = RecipientsNumberList.Remove(RecipientsNumberList.LastIndexOf(','));
                                item.RecipientsCount = CommonService.GetRecipientsCount(item.RecipientsNumber);
                                CampaignService.EditCampaignFromBackend(item);
                                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("MM/dd/yyyy") + "</senddate>";

                        if (!string.IsNullOrEmpty(item.ScheduledDate.ToString())) //scheduledDate.Text // check for sheduled Date
                        {

                            if (item.ScheduledDate >= System.DateTime.Now)
                            {

                                continue;
                            }

                            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);
                            DateTime ActualScheduleDatetime = Convert.ToDateTime(item.ScheduledDate);
                            xmlpacket += "<scheduleddate>" + ActualScheduleDatetime.ToString("MM/dd/yyyy HH:mm tt") + "</scheduleddate>";
                            //oMessageLog.MessageScheduledDateTime = Convert.ToString(ScheduledDateTime);
                            oMessageLog.MessageScheduledDateTime = Convert.ToString(ActualScheduleDatetime);
                        }

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

                        CampaignDTO CampaignDTO = new CampaignDTO();
                        CampaignDTO = item;

                        if (ismailmarge)
                            requiredCreditTosendmsg = AddMsgRecipToXmlpacketMailMerge(item.Message, recipientsnumbers, dtContact.DefaultView, xmlpacket, _oMsginfo, recipientsnumbers.Count, CampaignDTO);
                        else

                            requiredCreditTosendmsg = AddMsgRecipToXmlpacket(item.Message, recipientsnumbers, xmlpacket, _oMsginfo, recipientsnumbers.Count, CampaignDTO) * 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 (Exception ex)
            {
                //oUcButtonControl.showMessage(frmButtonControl.Messageflag.errorMessage, Global.DisplayConnectionError(ex));
                throw;
            }
        }
        public static void CreateCampaigns()
        {
            List<ClientDTO> ClientDTOList = new List<ClientDTO>();
            ClientDTOList = ClientService.GetAllActiveClients();

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

            if (ClientDTOList != null)
            {
                foreach (var item in ClientDTOList)
                {
                    if (item.IsSendBirthdayMessages || item.IsSendBirthdayCoupons)
                    {
                        string RecipientsNumberList = null;
                        int userId = UserService.GetAdminUserByClientId(item.Id);
                        List<ContactDTO> ContactDTOList = new List<ContactDTO>();
                        ContactDTOList = ContactService.GetContactsForTodaysBirthday();
                        if (ContactDTOList.Count > 0)
                        {
                            if (ContactDTOList.Count == 1)
                            {
                                foreach (var Contactitem in ContactDTOList)
                                {
                                    RecipientsNumberList = Contactitem.MobileNumber;
                                }
                            }
                            else {
                                    foreach (var Contactitem in ContactDTOList)
                                    {
                                        RecipientsNumberList = Contactitem.MobileNumber + "," + RecipientsNumberList;
                                    }

                                    RecipientsNumberList = RecipientsNumberList.Remove(RecipientsNumberList.Length - 1);
                            }

                            if (item.IsSendBirthdayMessages)
                            {
                                CampaignDTO CampaignDTO = new CampaignDTO();
                                CampaignDTO.Message = item.BirthdayMessage;
                                CampaignDTO.RecipientsNumber = RecipientsNumberList;
                                CampaignDTO.Name = "Birthday Message_" + string.Format("{0:G}", System.DateTime.Now); ;
                                CampaignDTO.ClientId = item.Id;
                                CampaignDTO.CreatedDate = System.DateTime.Now.Date;
                                CampaignDTO.IsScheduled = false;
                                CampaignDTO.GroupId = null;
                                CampaignDTO.ScheduledDate = System.DateTime.Now.Date;
                                CampaignDTO.CreatedBy = userId;

                                ////Calculate consumed credits
                                //double ConsumedCreditPerOneMsg = CommonService.GetConsumedCreditsForOneMessage(CampaignDTO.Message, false);
                                //int RecepientsCount = CommonService.GetRecipientsCount(CampaignDTO.RecipientsNumber);
                                //CampaignDTO.ConsumededCredits = RecepientsCount * ConsumedCreditPerOneMsg;

                                CampaignService.CreateCampaignFromBackend(CampaignDTO);
                            }

                            if (item.IsSendBirthdayCoupons)
                            {
                                EcouponCampaignDTO EcouponCampaignDTO = new EcouponCampaignDTO();
                                EcouponCampaignDTO.Message = item.BirthdayMessage;
                                EcouponCampaignDTO.ReceipentNumber = RecipientsNumberList;
                                EcouponCampaignDTO.Title = "Birthday Coupon_" + string.Format("{0:G}", System.DateTime.Now); ;
                                EcouponCampaignDTO.ClientId = item.Id;
                                EcouponCampaignDTO.CreatedDate = System.DateTime.Now.Date;
                                EcouponCampaignDTO.SendOn = System.DateTime.Now.Date;
                                EcouponCampaignDTO.IsScheduled = false;
                                EcouponCampaignDTO.GroupId = null;
                                EcouponCampaignDTO.MinPurchaseAmount = Convert.ToDouble(item.MinPurchaseAmountForBirthdayCoupon);
                                EcouponCampaignDTO.CreatedBy = userId;

                                int value = Convert.ToInt32(item.BirthdayCouponExpire);

                                string expire_format = item.BirthdayCouponExpireType;
                                if (expire_format == "Day")
                                {
                                    EcouponCampaignDTO.ExpiresOn = System.DateTime.Now.Date.AddDays(value);
                                }
                                else if (expire_format == "Month")
                                {
                                    EcouponCampaignDTO.ExpiresOn = System.DateTime.Now.Date.AddMonths(value);
                                }
                                else if (expire_format == "Week")
                                {
                                    value = value * 7;
                                    EcouponCampaignDTO.ExpiresOn = System.DateTime.Now.Date.AddDays(value);
                                }
                                ////Calculate consumed credits
                                //double ConsumedCreditPerOneMsg = CommonService.GetConsumedCreditsForOneMessage(EcouponCampaignDTO.Message, true);
                                //int RecepientsCount = CommonService.GetRecipientsCount(EcouponCampaignDTO.ReceipentNumber);
                                //EcouponCampaignDTO.ConsumededCredits = RecepientsCount * ConsumedCreditPerOneMsg;

                                EcouponCampaignService.CreateEcouponCampaignBackend(EcouponCampaignDTO);
                            }
                        }
                    }

                    if (item.IsSendAnniversaryMessages || item.IsSendAnniversaryCoupons)
                    {

                        string RecipientsNumberList = null;
                        int userId = UserService.GetAdminUserByClientId(item.Id);
                        List<ContactDTO> ContactDTOList = new List<ContactDTO>();
                        ContactDTOList = ContactService.GetContactsForTodaysAnniversary();
                        if (ContactDTOList.Count > 0)
                        {
                            if (ContactDTOList.Count == 1)
                            {
                                foreach (var Contactitem in ContactDTOList)
                                {
                                    RecipientsNumberList = Contactitem.MobileNumber;
                                }
                            }
                            else
                            {
                                foreach (var Contactitem in ContactDTOList)
                                {
                                    RecipientsNumberList = Contactitem.MobileNumber + "," + RecipientsNumberList;
                                }

                                RecipientsNumberList = RecipientsNumberList.Remove(RecipientsNumberList.Length - 1);
                            }

                            if (item.IsSendAnniversaryMessages)
                            {
                                CampaignDTO CampaignDTO = new CampaignDTO();
                                CampaignDTO.Message = item.AnniversaryMessage;
                                CampaignDTO.RecipientsNumber = RecipientsNumberList;
                                CampaignDTO.Name = "Anniversary Message_" + string.Format("{0:G}", System.DateTime.Now); ;
                                CampaignDTO.ClientId = item.Id;
                                CampaignDTO.CreatedDate = System.DateTime.Now.Date;
                                CampaignDTO.IsScheduled = false;
                                CampaignDTO.GroupId = null;
                                CampaignDTO.ScheduledDate = System.DateTime.Now.Date;
                                CampaignDTO.CreatedBy = userId;

                                ////Calculate consumed credits
                                //double ConsumedCreditPerOneMsg = CommonService.GetConsumedCreditsForOneMessage(CampaignDTO.Message, false);
                                //int RecepientsCount = CommonService.GetRecipientsCount(CampaignDTO.RecipientsNumber);
                                //CampaignDTO.ConsumededCredits = RecepientsCount * ConsumedCreditPerOneMsg;

                                CampaignService.CreateCampaignFromBackend(CampaignDTO);
                            }

                            if (item.IsSendAnniversaryCoupons)
                            {
                                EcouponCampaignDTO EcouponCampaignDTO = new EcouponCampaignDTO();
                                EcouponCampaignDTO.Message = item.AnniversaryMessage;
                                EcouponCampaignDTO.ReceipentNumber = RecipientsNumberList;
                                EcouponCampaignDTO.Title = "Anniversary Coupon_" + string.Format("{0:G}", System.DateTime.Now); ;
                                EcouponCampaignDTO.ClientId = item.Id;
                                EcouponCampaignDTO.CreatedDate = System.DateTime.Now.Date;
                                EcouponCampaignDTO.SendOn = System.DateTime.Now.Date;
                                EcouponCampaignDTO.IsScheduled = false;
                                EcouponCampaignDTO.GroupId = null;
                                EcouponCampaignDTO.MinPurchaseAmount = Convert.ToDouble(item.MinPurchaseAmountForAnniversaryCoupon);
                                EcouponCampaignDTO.CreatedBy = userId;

                                int value = Convert.ToInt32(item.AnniversaryCouponExpire);

                                string expire_format = item.AnniversaryCouponExpireType;
                                if (expire_format == "Day")
                                {
                                    EcouponCampaignDTO.ExpiresOn = System.DateTime.Now.Date.AddDays(value);
                                }
                                else if (expire_format == "Month")
                                {
                                    EcouponCampaignDTO.ExpiresOn = System.DateTime.Now.Date.AddMonths(value);
                                }
                                else if (expire_format == "Week")
                                {
                                    value = value * 7;
                                    EcouponCampaignDTO.ExpiresOn = System.DateTime.Now.Date.AddDays(value);
                                }

                                ////Calculate consumed credits
                                //double ConsumedCreditPerOneMsg = CommonService.GetConsumedCreditsForOneMessage(EcouponCampaignDTO.Message, true);
                                //int RecepientsCount = CommonService.GetRecipientsCount(EcouponCampaignDTO.ReceipentNumber);
                                //EcouponCampaignDTO.ConsumededCredits = RecepientsCount * ConsumedCreditPerOneMsg;

                                EcouponCampaignService.CreateEcouponCampaignBackend(EcouponCampaignDTO);
                            }
                        }
                    }
                }
            }
        }
        //
        // Calculate the messagecount
        //
        private static int MessageCount(string message, CampaignDTO CampaignDTO)
        {
            if (CampaignDTO.IsUnicode == true)
            {
               return GetUnicodeMessageCount(message);
            }
            SettingDTO SettingDTO = new SettingDTO();
            SettingDTO = SettingService.GetById(1);

            int MsgLength = SettingDTO.MessageLength;
            int MsgLenPerSingleMessage = SettingDTO.SingleMessageLength;

            if (message.Length <= MsgLength)
                return 1;
            else if (message.Length % MsgLenPerSingleMessage != 0)
                return (message.Length / MsgLenPerSingleMessage) + 1;
            else
                return message.Length / MsgLenPerSingleMessage;
        }
        private static String ActualSmsSend(string mobilenumber, string message, string Gateway, CampaignDTO CampaignDTO, ClientDTO ClientDTO)
        {
            string result = "";

            int SMSMsgCount = GetMessageCount(message);
            message = MsgCorrect(message);

            if (CampaignDTO.MessageCount != SMSMsgCount)
            {
                CampaignDTO.MessageCount = SMSMsgCount;
            }

            if (message != "" && mobilenumber != "")// Check for empty message.
            {

                string Url = ConfigurationManager.AppSettings["TransactionalGateWay"].ToString();
                Url = Url.Replace("%26", "&");
                Url = Url.Replace("[recipient]", mobilenumber);
                Url = Url.Replace("[message]", message);
                if (Gateway != "022751") //if (Gateway.ToLower() != "default")
                {
                    Url = Url.Replace("[gateway]", Gateway); //Gateway = "MSGBLS"
                }
                else
                {
                    Url="";
                    Url = ConfigurationManager.AppSettings["PromotionalGateWay"].ToString();
                    Url = Url.Replace("%26", "&");
                    Url = Url.Replace("[recipient]", mobilenumber);
                    Url = Url.Replace("[message]", message);
                }

                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url);
                myRequest.Method = "GET";
                WebResponse myResponse = myRequest.GetResponse();
                StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
                result = sr.ReadToEnd();
                sr.Close();

                string statuscode = "";
                if (result.Contains('|'))
                    statuscode = result.Substring(0, result.IndexOf('|'));
                else
                    statuscode = result;

                string SMSReplyMessage = SMSResult(statuscode) + "-" + result; //result
                myResponse.Close();

                CampaignLogDTO CampaignLogDTO = new CampaignLogDTO();
                CampaignLogDTO.CampaignId = CampaignDTO.Id;
                CampaignLogDTO.RecipientsNumber = mobilenumber;
                CampaignLogDTO.MessageStatus = SMSReplyMessage;
                CampaignLogDTO.Message = message;
                CampaignLogDTO.GatewayID = Gateway;
                CampaignLogDTO.SentDateTime = System.DateTime.Now;

                CampaignLogDTO.MessageID = statuscode;
                CampaignLogDTO.MessageCount = SMSMsgCount;

                if (statuscode == "1701")
                {
                    CampaignLogDTO.IsSuccess = true;
                }
                else if (statuscode != "1701")
                {
                    CampaignLogDTO.IsSuccess = false;
                }

                CampaignLogService.Create(CampaignLogDTO);

                // Reduce SMS Credits From Clients List
                ClientDTO.SMSCredit = ClientDTO.SMSCredit - SMSMsgCount;// CampaignDTO.MessageCount;
                ClientService.Edit(ClientDTO);

            }

            return result;
        }
        public static String SplitMobile(string Mobile, CampaignDTO CampaignDTO)
        {
            string result = "";

            try
            {
                string finalstring = "";

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

                char[] delimiter1 = new char[] { ',', ';' };   // <-- Split on these
                // ... Use StringSplitOptions.RemoveEmptyEntries.
                string[] array2 = value1.Split(delimiter1,
                    StringSplitOptions.RemoveEmptyEntries);

                //Console.WriteLine();
                foreach (string mobile in array2)
                {
                    Console.WriteLine(mobile);
                    bool isMessageSent = CheckCampainLogByCampaingIdAndMobile(CampaignDTO.Id, Mobile);

                    ClientDTO ClientDTO = new ClientDTO();
                    ClientDTO = ClientService.GetById(CampaignDTO.ClientId);

                    //SMSGatewayDTO SMSGatewayDTO = new SMSGatewayDTO();
                    //SMSGatewayDTO = SMSGatewayService.GetById(ClientDTO.SMSGatewayId);

                    if (isMessageSent == false)
                    {
                        Console.Write("Send SMS");
                        // Check the Message required credits and actual client credits
                        string message = "";
                        CampaignDTO.Message = CampaignService.GetById(CampaignDTO.Id).Message;
                        //// macros

                               List<Macros> MacrosList = Enum.GetValues(typeof(Macros)).Cast<Macros>().ToList();
                               ContactDTO ContactDTO = new ContactDTO();
                               ContactDTO = ContactService.GetContactByMobileNumberAndClientId(mobile, CampaignDTO.ClientId);

                                 if (MacrosList.Count() > 0)
                                    {
                                   foreach (var item in MacrosList)
                                   {

                                       if (item.ToString() == "FirstName")
                                       {
                                           string FirstName = "";
                                           FirstName = CommonService.GetFirstname(ContactDTO.Name);
                                           CampaignDTO.Message = CampaignDTO.Message.Replace("[" + item.ToString() + "]", FirstName);
                                       }

                                       if (item.ToString() == "LastName")
                                       {
                                           string LastName = "";
                                           LastName = CommonService.GetLastname(ContactDTO.Name);

                                           CampaignDTO.Message = CampaignDTO.Message.Replace("[" + item.ToString() + "]", LastName);
                                       }

                                   }

                                   message = CampaignDTO.Message;

                                   CampaignDTO.Message = ReformatMsg(message);
                                   int SMSMsgCount = GetMessageCount(message);

                                   if (ClientDTO.SMSCredit >= SMSMsgCount)
                                   {
                                       if (CampaignLogService.GetCampaignLogListByCampaignIdAndMobile(CampaignDTO.Id, mobile).Count != 0)
                                       {
                                           continue;
                                       }

                                       //CampaignDTO.Message
                                       string sender = "";
                                       if (ClientDTO.SenderCode != null && ClientDTO.SenderCode != "")
                                       {
                                           sender = ClientDTO.SenderCode;
                                       }
                                       else
                                       {

                                           sender = "022751";
                                       }

                                       ActualSmsSend(mobile, CampaignDTO.Message, sender, CampaignDTO, ClientDTO);

                                   }
                                   else
                                   {
                                       goto nextprocess;
                                   }

                               }

                        //CampaignDTO.Message = ReformatMsg(message);
                        //int SMSMsgCount = GetMessageCount(message);

                        //if (ClientDTO.SMSCredit >= SMSMsgCount)
                        //{
                        //     //CampaignDTO.Message
                        //    ActualSmsSend(mobile, CampaignDTO.Message, SMSGatewayDTO.Name, CampaignDTO, ClientDTO);

                        //}
                        //else
                        //{
                        //    goto nextprocess;
                        //}

                    }
                    else
                    {

                    }
                }

                // Modify Campaign IsSent status
                CampaignDTO.IsSent = true;
                CampaignDTO.Message = CampaignService.GetById(CampaignDTO.Id).Message;
                CampaignService.EditCampaignFromBackend(CampaignDTO);

                nextprocess:
                result = finalstring;
            }

            catch (Exception ex)
            {

                result = "";

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

            }
            return result;
        }
        public static string SendMessage(Byte[] array, Byte[] checksum)
        {
            try
            {
                //Checking for Data Accuracy
                Byte[] newchecksum = new MD5CryptoServiceProvider().ComputeHash(array);
                if (checksum.Length == newchecksum.Length)
                {
                    int arraylength = 0;
                    while ((arraylength < checksum.Length) && (newchecksum[arraylength] == checksum[arraylength]))
                    {
                        arraylength++;
                    }
                    if (arraylength != newchecksum.Length)
                    {
                        return ErrorFlag.DataCorrupted.ToString();
                    }
                }

                // Checking User's Validation that is CDKey & MachineID
                XmlSerializer xs = new XmlSerializer(typeof(MsgInformationDTO));
                MemoryStream msgStream = new MemoryStream(array);
                MsgInformationDTO oMsgInformationDTO = (MsgInformationDTO)xs.Deserialize(msgStream);

                CampaignDTO CampaignDTO = new CampaignDTO();
                CampaignDTO = CampaignService.GetById(oMsgInformationDTO.CampaignId);
                //CampaignDTO.ClientId = oMsgInformationDTO.ClientId;
                //CampaignDTO.Id = oMsgInformationDTO.CampaignId;
                ClientDTO ClientDTO = new ClientDTO();
                ClientDTO = ClientService.GetById(CampaignDTO.ClientId);

                string packet = oMsgInformationDTO.xmlpacket;
                string fname = null;
                if (ValidatePacketAgainstSchema(packet)) // Check xml file validation.
                {
                    if (AllowToProcessClient(CampaignDTO))
                    {
                        DateTime DateAndTime = System.DateTime.Now;
                        SettingDTO SettingDTO = new SettingDTO(); // Get limit on msg size
                        SettingDTO = SettingService.GetById(1);

                        int requiredCredit = 0;
                        XmlDocument x = new XmlDocument();
                        x.LoadXml(packet);
                        XmlNodeList messages = x.SelectNodes("/packet/numbers/message/text()"); // Get all messages from xmlpacket
                        XmlNodeList numbers = x.SelectNodes("/packet/numbers/number");
                        for (int i = 0; i < messages.Count; i++) // Get required credits to send this packet;
                        {
                            requiredCredit += MessageCount(MsgCorrect(messages[i].InnerText.TrimEnd()));
                        }
                        if (messages.Count == 1) // Means one message to all numbers
                        {
                            requiredCredit = requiredCredit * numbers.Count;
                        }

                        if (ClientDTO.SMSCredit >= requiredCredit)
                        {
                            XmlNode root = x.DocumentElement;
                            XmlElement requiredcredits = x.CreateElement("requiredcredits");
                            requiredcredits.InnerText = requiredCredit.ToString();
                            root.InsertBefore(requiredcredits, root.LastChild);
                            //_oClsClients.SMSCredits -= requiredCredit;
                            try
                            {
                                fname = DateAndTime.Year.ToString() + DateAndTime.Month + DateAndTime.Day + "-" + DateAndTime.Hour + DateAndTime.Minute + DateAndTime.Second + "-" + oMsgInformationDTO.CampaignId + "-Q.xml";
                                x.Save(ConfigurationManager.AppSettings["SMSFolderPath"].ToString() + fname);
                                x = null;
                                //dbClients.ReduceSMSCredits(oClient, requiredCredit);

                                CampaignDTO CampaignDTONew = new CampaignDTO();
                                CampaignDTONew = CampaignDTO;
                                //CampaignDTONew.IsSent = true;
                                CampaignDTONew.Status = "Sent";
                                CampaignService.Edit(CampaignDTONew);

                                ClientDTO ClientDTOUpdate = new ClientDTO();
                                ClientDTOUpdate = ClientDTO;
                                ClientDTOUpdate.SMSCredit = ClientDTOUpdate.SMSCredit - requiredCredit;
                                ClientService.Edit(ClientDTOUpdate);

                            }
                            catch (Exception ex)
                            {
                                return ErrorFlag.FailedToWriteData.ToString();      // Returns "FailedToWriteData" enum name if message file not created

                            }
                            //return ErrorFlag.Success.ToString();                // Return "Success" enum name if Message file created in the SMSQueue folder successfully
                            return fname;
                        }
                        else
                            return ErrorFlag.InsufficientCredits.ToString();  // Returns "InsufficientCredits" enum name if SMSCredits are insufficient for sending message
                    }
                    else
                        return ErrorFlag.InvalidUser.ToString();        // Returns "InvalidUser" enum name if the CDKey or MachineID not matching
                }
                else
                    return ErrorFlag.BadXml.ToString(); // Return BAD XmlPacke Error
            }
            catch
            {
                throw;             // Returns error flag name if there are any web exception
            }
        }
        //Delete campaign
        public static void Delete(int id)
        {
            try
            {
                CampaignDTO CampaignDTO = new CampaignDTO();
                CampaignDTO = CampaignService.GetById(id);
                //Add Consumed Credits to clients
                ClientDTO ClientDTO = new ClientDTO();
                ClientDTO = ClientService.GetById(CampaignDTO.ClientId);
                ClientDTO.SMSCredit = ClientDTO.SMSCredit + CampaignDTO.ConsumedCredits;
                ClientService.Edit(ClientDTO);

                UnitOfWork uow = new UnitOfWork();
                uow.CampaignRepo.Delete(id);
                uow.SaveChanges();

            }
            catch
            {
                throw;
            }
        }
Exemple #22
0
        public void SendMessages()
        {
            try
            {
                //// Load Queue processor settings
                //sErrlocation = "Loading QueueProcessor Settings From QueueProcessorSettings.xml file-Line 69";
                //Load settings from QueueProcessorSettings.xml file (File present in basedirectory of application.)
                queuesettingsXML = new XmlDocument();
                queuesettingsXML.Load(ConfigurationManager.AppSettings["SETTIGNDIR_PATH"].ToString() + "QueueProcessorSettings.xml");
                MAXCHECKFORCONNECTION = Convert.ToInt32(queuesettingsXML.DocumentElement["maxcheckforgatewqycon"].InnerText);
                MAXCHECKFORRESPONSE   = Convert.ToInt32(queuesettingsXML.DocumentElement["maxcheckforgatewayresponse"].InnerText);
                UPDATEBALAFTER        = Convert.ToInt32(queuesettingsXML.DocumentElement["updatebalafterevery"].InnerText);
                MAXSMSLENGTH          = Convert.ToInt32(queuesettingsXML.DocumentElement["maxsmslength"].InnerText);
                SMSBLOCKLENGTH        = Convert.ToInt32(queuesettingsXML.DocumentElement["smsblocklength"].InnerText);
                MAXMOBILELENGTH       = Convert.ToInt32(queuesettingsXML.DocumentElement["maxmobilelength"].InnerText);

                sErrlocation = "Select All files from SMSQueue Folder - Line 112";
                string[] files = System.IO.Directory.GetFiles(SMSQDIR, "*.xml"); // Get all *.xml files from SMSQUEUE folder
                if (files.Length > 0)
                {
                    General.WriteInFile("\r\n" + "Total Number of Files = " + files.Length + "");
                    General.WriteInFile("=========================================================================================================");
                    foreach (string file in files)
                    {
                        baseFileName = System.IO.Path.GetFileName(file);
                        // Prepare file path for copying file to BAD or SENT folder depending on situation.
                        sentQFile   = SENTQDIR + baseFileName;
                        sourceQFile = SMSQDIR + baseFileName;
                        badQFile    = BADQDIR + baseFileName;

                        // Check for Xml File Validation against the Schema
                        if (!System.IO.File.Exists(ConfigurationManager.AppSettings["SETTIGNDIR_PATH"].ToString() + "XmlSchema.xsd"))
                        {
                            General.WriteInFile("SMSQueue processor was terminated because XmlSchema.xsd file is not available in " + APP_PATH + " directory \r\n");
                            break;
                        }

                        sErrlocation = "File Validation against the Schema - Line 133";
                        if (!IsValidFile(sourceQFile))
                        {
                            MoveFileToBadFolder(schemaValidationError); // Invalid file
                            General.WriteInFile(baseFileName + " file moved to BAD folder because, this file is invalid according to Schema Validation.\r\n");
                            continue;
                        }

                        sErrlocation = "Load basefile for sending - Line 140";
                        baseFileXML  = new XmlDocument();
                        baseFileXML.Load(sourceQFile); // load xml file from SMSQUEUE folder to process

                        strcampaignId = baseFileXML.DocumentElement["campaignId"].InnerText;
                        strclientId   = baseFileXML.DocumentElement["clientId"].InnerText;
                        strSender     = baseFileXML.DocumentElement["sender"].InnerText;
                        double number;
                        bool   IsNumeric = double.TryParse(strSender, out number); // Check the number is in Numeric form or not
                        if (IsNumeric && strSender.Length == 10)
                        {
                            strSender = "91" + strSender;
                        }

                        campaignname = ReformatMsg(baseFileXML.DocumentElement["campaignname"].InnerText);

                        // Check for validation of recipient number count and message count
                        // i.e message count > 1 AND != recipient number count than it is invalid file.
                        XmlNodeList MessageToSend           = baseFileXML.SelectNodes("/packet/numbers/message");
                        XmlNodeList RecipientsToSendMessage = baseFileXML.SelectNodes("/packet/numbers/number");
                        if (MessageToSend.Count > 1 && MessageToSend.Count != RecipientsToSendMessage.Count)
                        {
                            // This indicates that Msg count & Number count doesnot match
                            MoveFileToBadFolder("Msg count & Number count doesnot match.");
                            General.WriteInFile(baseFileName + " file is moved to BAD folder because Msg count & Number count doesnot match.\r\n");
                            continue;
                        }

                        ClientDTO   = new MsgBlaster.DTO.ClientDTO();
                        CampaignDTO = new MsgBlaster.DTO.CampaignDTO();

                        ClientDTO.Id   = Convert.ToInt32(strclientId);
                        CampaignDTO.Id = Convert.ToInt32(strcampaignId);

                        ClientDTO   = MsgBlaster.Service.ClientService.GetById(ClientDTO.Id);
                        CampaignDTO = MsgBlaster.Service.CampaignService.GetById(CampaignDTO.Id);



                        // Befor AddToSMSQueue() validate user
                        sErrlocation = "Check for Valid User - Line 195";
                        int result = ClientDTO.Id; // oClient.IsValidUser(oClient);
                        if (result == 0)           // Invalid User
                        {
                            MoveFileToBadFolder("Invalid user.");
                            General.WriteInFile(baseFileName + " file  moved to BAD folder because of invalid campaignId & clientId.\r\n");
                            continue;
                        }

                        //if (result == 2) // Database Error
                        //{
                        //    General.WriteInFile(baseFileName + " file is skiped due to database error during User validation.\r\n");
                        //    continue;//skip this file and continue
                        //}

                        General.WriteInFile("Opening Balance = " + ClientDTO.SMSCredit);// ClientDBOperation.ActualCredits(oClient));
                        // Check for time restriction over message sending for this user
                        sErrlocation = "Check for Send time restriction - Line 214";
                        //double FROMTIME = Convert.ToDouble(oClient.SendFromTime.Replace(':', '.'));
                        //double UPTOTIME = Convert.ToDouble(oClient.SendUptoTime.Replace(':', '.'));
                        double currentTime = Convert.ToDouble(System.DateTime.Now.Hour + "." + System.DateTime.Now.Minute);
                        //if (currentTime < FROMTIME || currentTime > UPTOTIME)
                        //{
                        //    // skip this file due to time restriction.
                        //    General.WriteInFile(baseFileName + " file is skiped due to send time restriction.\r\n");// +
                        //    continue;
                        //}

                        if (baseFileXML.SelectSingleNode("//scheduleddate") != null)
                        {
                            DateTime ScheduledDate;
                            try
                            {
                                ScheduledDate = Convert.ToDateTime(baseFileXML.DocumentElement["scheduleddate"].InnerText);
                            }
                            catch (Exception ex)
                            {
                                MoveFileToBadFolder("Unrecognized scheduled date.");
                                General.WriteInFile(baseFileName + " file moved to BAD folder because of Unrecognized scheduled date.\r\n");
                                continue;
                            }
                            // 1 = Scheduled datetime is > current datetime
                            // 0 = Scheduled datetime = current datetime
                            // -1 = Scheduled datetime < current datetime
                            if (DateTime.Compare(ScheduledDate, System.DateTime.Now) == 1)
                            {
                                // This file will be send in futuer so skip this file
                                General.WriteInFile(baseFileName + " file is skiped due to scheduled datetime restriction.\r\n");
                                continue;
                            }
                        }
                        // Function for preapearing message to broadcast
                        AddToSMSQueue();
                    }
                    General.WriteInFile("========================================================================================================= ");
                }
            }
            catch (Exception ex)
            {
                General.WriteInFile(sErrlocation + "\r\n" + ex.Message);
                General.WriteInFile("========================================================================================================= ");
            }
        }
        /// <summary>
        ///  Campaign Log By CampaignId
        /// </summary>
        /// <param name="CampaignId">Campaign Id</param>
        /// <param name="pagingInfo">pagingInfo object</param>
        /// <returns>Returns list of campaign Log </returns>
        public static List<CampaignLogDTO> GetCampaignLogXMLByCampaignId(int CampaignId, PagingInfo pagingInfo)
        {
            List<CampaignLogXMLDTO> CampaignLogXMLDTOList = new List<CampaignLogXMLDTO>();

            List<CampaignLogDTO> CampaignLogDTOList = new List<CampaignLogDTO>();
            CampaignDTO CampaignDTO = new CampaignDTO();
            CampaignDTO = CampaignService.GetById(CampaignId);
            try
            {
                UnitOfWork uow = new UnitOfWork();
                int skip = (pagingInfo.Page - 1) * pagingInfo.ItemsPerPage;
                int take = pagingInfo.ItemsPerPage;

                IEnumerable<CampaignLogXML> CampaignLogXML = uow.CampaignLogXMLRepo.GetAll().Where(e => e.CampaignId == CampaignId).ToList();

                if (CampaignLogXML != null)
                {
                    foreach (var item in CampaignLogXML)
                    {
                        CampaignLogXMLDTOList.Add(Transform.CampaignLogXMLToDTO(item));
                    }

                    if (CampaignLogXMLDTOList != null)
                    {
                        foreach (var item in CampaignLogXMLDTOList)
                        {
                            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["msgBlasterWebContext"].ToString());
                            con.Open();
                            SqlCommand command = new SqlCommand("Select XMLLog From CampaignLogXMLs WHERE Id=" + item.Id, con);

                            XmlDocument xdoc = new XmlDocument();
                            XmlReader reader = command.ExecuteXmlReader();

                            if (reader.Read())
                            {
                                xdoc.Load(reader);

                                //XmlNodeList msgList = xdoc.SelectNodes("/packet/numbers/message");
                                //XmlNodeList numList = xdoc.SelectNodes("/packet/numbers/number");

                                foreach (XmlNode currentnode in xdoc.DocumentElement.GetElementsByTagName("numbers"))
                                {

                                    //

                                    XmlNodeList numList = xdoc.SelectNodes("/packet/numbers/number");
                                    foreach (XmlNode node in numList)
                                    {
                                        CampaignLogDTO CampaignLogDTO = new CampaignLogDTO();

                                        CampaignLogDTO.RecipientsNumber = node.InnerText;// node.SelectNodes("number").Item(0).InnerText;// node.SelectSingleNode("number").InnerText;
                                        string MsgStatus = null;
                                        string code = null;

                                        if (node.Attributes != null)
                                        {
                                            code = node.Attributes["msgCode"].Value;
                                            CampaignLogDTO.SentDateTime = Convert.ToDateTime(node.Attributes["sentTime"].Value);
                                            CampaignLogDTO.MessageCount = Convert.ToInt32(node.Attributes["msgCount"].Value);
                                            CampaignLogDTO.RequiredCredits = Convert.ToDouble(node.Attributes["msgCredits"].Value);
                                            CampaignLogDTO.CampaignId = CampaignId;
                                            CampaignLogDTO.CampaignName = CampaignDTO.Name;
                                            CampaignLogDTO.CreatedOn = CampaignDTO.CreatedDate;
                                            CampaignLogDTO.CreatedBy = UserService.GetById(CampaignDTO.CreatedBy).Name;

                                        }

                                        MsgStatus = CodeDescription(code);
                                        CampaignLogDTO.MessageStatus = MsgStatus;
                                        //if (IsSuccessful == true)
                                        //{
                                        if (code == "1701" || code == "0")
                                        {
                                            CampaignLogDTOList.Add(CampaignLogDTO);
                                        }
                                        else
                                            //}
                                            //else if (code != "1701" && code != "0")
                                            //{
                                            CampaignLogDTOList.Add(CampaignLogDTO);
                                        // }

                                    }
                                }
                            }
                            con.Close();

                            if (pagingInfo.Search != "" && pagingInfo.Search != null)
                            {
                                bool Isdate = CommonService.IsDate(pagingInfo.Search);
                                if (Isdate != true)
                                {
                                    List<CampaignLogDTO> CampaignLogDTOSearchList = new List<CampaignLogDTO>();
                                    var CampaignLogSearch = CampaignLogDTOList.Where(e => e.MessageStatus.ToLower().Contains(pagingInfo.Search.ToLower()) || e.RecipientsNumber.Contains(pagingInfo.Search) || (e.SentDateTime.ToString() != null ? (Convert.ToDateTime(e.SentDateTime).ToString("dd-MMM-yyyy").ToLower().Contains(pagingInfo.Search.ToLower())) : false)).OrderByDescending(e => e.SentDateTime);//.Skip(skip).Take(take); //|| (e.GatewayID != null ? (e.GatewayID.ToLower().Contains(pagingInfo.Search.ToLower())) : false)|| e.Message.ToLower().Contains(pagingInfo.Search.ToLower())|| (e.MessageID != null ? (e.MessageID.ToLower().Contains(pagingInfo.Search.ToLower())) : false)|| (e.CampaignName != null ? (e.CampaignName.ToLower().Contains(search.ToLower())) : false)
                                    if (CampaignLogSearch != null)
                                    {
                                        foreach (var itemsearch in CampaignLogSearch)
                                        {
                                            itemsearch.CampaignName = CampaignDTO.Name;
                                            itemsearch.CreatedOn = CampaignDTO.CreatedDate;
                                            itemsearch.CreatedBy = UserService.GetById(CampaignDTO.CreatedBy).Name;

                                            CampaignLogDTOSearchList.Add(itemsearch);
                                        }
                                    }

                                    IQueryable<CampaignLogDTO> CampaignLogDTOQuarableSearch = CampaignLogDTOSearchList.AsQueryable();
                                    return CampaignLogDTOQuarableSearch.Skip(skip).Take(take).ToList();

                                }
                                else
                                {
                                    List<CampaignLogDTO> CampaignLogDTOSearchList = new List<CampaignLogDTO>();
                                    DateTime date = Convert.ToDateTime(pagingInfo.Search);
                                    var CampaignLogSearch = CampaignLogDTOList.Where(e => e.SentDateTime >= date && e.SentDateTime < date.AddDays(1)).OrderByDescending(e => e.SentDateTime);//.Skip(skip).Take(take);
                                    if (CampaignLogSearch != null)
                                    {
                                        foreach (var itemsearch in CampaignLogSearch)
                                        {
                                            itemsearch.CampaignName = CampaignDTO.Name;
                                            itemsearch.CreatedOn = CampaignDTO.CreatedDate;
                                            itemsearch.CreatedBy = UserService.GetById(CampaignDTO.CreatedBy).Name;
                                            CampaignLogDTOSearchList.Add(itemsearch);
                                        }
                                    }
                                    IQueryable<CampaignLogDTO> CampaignLogDTOQuarableDate = CampaignLogDTOSearchList.AsQueryable();
                                    return CampaignLogDTOQuarableDate.Skip(skip).Take(take).ToList();

                                }
                            }

                        }

                    }

                }
                //List<CampaignLogXMLDTO> CampaignLogXMLDTOSearchList = new List<CampaignLogXMLDTO>();

                IQueryable<CampaignLogDTO> CampaignLogDTOQuarableall = CampaignLogDTOList.AsQueryable();
                CampaignLogDTOQuarableall = PagingService.Sorting<CampaignLogDTO>(CampaignLogDTOQuarableall, pagingInfo.SortBy, pagingInfo.Reverse);
                return CampaignLogDTOQuarableall.Skip(skip).Take(take).ToList();

            }

            catch (Exception)
            {
                throw;
            }
        }