Example #1
0
 public void DoSomething(bool isConnected = true)
 {
     ConsoleMsg("DoSomething",MsgType.NewCall);
     try
     {
         //Do the emails need to be sent?
         EmailBatch eBatch = (from eb in _db.EmailBatches orderby eb.Created descending select eb).FirstOrDefault();
         if (eBatch == null)
         {
             //Make fake batch for prev Monday am
             DateTime fakeTime = DateTime.Today.AddHours(2);
             fakeTime = fakeTime.AddDays((((int)fakeTime.DayOfWeek) - 1) * -1);
             fakeTime = fakeTime.AddDays(-7);
             eBatch = new EmailBatch
             {
                 Created = fakeTime
             };
         }
         if ((DateTime.Now - eBatch.Created).TotalDays >= 7)
             SendClaimEmails();
         else
             HarvestTrainJourneyInfo(isConnected);
     }
     catch (Exception ex)
     {
         ConsoleMsg(ex.Message,MsgType.Error);
         var db = new DR_Entities();
         LogType ltError = (from lt in db.LogTypes where lt.LogTypeName == "Error" select lt).FirstOrDefault();
         var log = new Log
         {
             LogType = ltError,
             Header = ex.Message,
             Message = ex.StackTrace,
             Timestamp = DateTime.Now
         };
         db.Logs.Add(log);
         db.SaveChanges();
         db.Dispose();
     }
 }
Example #2
0
        private void SendClaimEmails()
        {
            ConsoleMsg("SendClaimEmails", MsgType.FunctionCall);
            //Create new Batch
            var newBatch = new EmailBatch
            {
                Created = DateTime.Today
            };
            _db.EmailBatches.Add(newBatch);

            //Get Station Pairs
            var stationPairs = new List<StationPair>();
            foreach (User user in _db.Users)
            {
                //Build suggested new SP
                var stationPair = new StationPair();
                if (user.HomeStationId > user.DestinationStationId)
                {
                    stationPair.Station1 = user.DestinationStation;
                    stationPair.Station2 = user.HomeStation;
                }
                else
                {
                    stationPair.Station1 = user.HomeStation;
                    stationPair.Station2 = user.DestinationStation;
                }

                //Is it already in list?
                int spCount = (from sp in stationPairs where sp.Station1.Id == stationPair.Station1.Id && sp.Station2.Id == stationPair.Station2.Id select sp).ToList().Count;
                if (spCount == 0)
                    stationPairs.Add(stationPair);
            }

            //Get delayed trains since last email
            var claimableDestinations = new List<Destination>();
            List<Destination> destinationsNotEmailed = (from d in _db.Destinations where d.EmailBatchId == null select d).ToList();
            foreach (Destination destinationNotEmailed in destinationsNotEmailed)
            {
                if (destinationNotEmailed.IsClaimable)
                    claimableDestinations.Add(destinationNotEmailed);
            }

            //Each Station Pair
            var smtpClient = new SmtpClient(Properties.Settings.Default.SmtpClient)
            {
                Port = Properties.Settings.Default.SmtpPort,
                Credentials =
                    new NetworkCredential(Properties.Settings.Default.SmtpUsername,
                        Properties.Settings.Default.SmtpPassword),
                EnableSsl = true
            };
            foreach (StationPair sp in stationPairs)
            {
                //Get Claimable trains for this pair
                var fromStation = new Station();
                var claimableForStationPair = new List<Destination>();
                foreach (Destination claimableDestination in claimableDestinations)
                {
                    if (sp.Station1.Id == claimableDestination.StationId) fromStation = sp.Station2;
                    if (sp.Station2.Id == claimableDestination.StationId) fromStation = sp.Station1;
                    if (fromStation.Id == 0) continue;

                    int fromStationCount = (from fs in claimableDestination.FromStations where fs.StationId == fromStation.Id select fs).ToList().Count;
                    if (fromStationCount > 0)
                        claimableForStationPair.Add(claimableDestination);
                }

                //Build email body
                var mm = new MailMessage
                {
                    Subject = "Train Delays.  Claimable: " + claimableForStationPair.Count,
                    Body =
                        "Travel between " + sp.Station1.StationName + " and " + sp.Station2.StationName +
                        Environment.NewLine
                };
                mm.Body += "Number of claimable trains: " + claimableForStationPair.Count + Environment.NewLine;
                foreach (Destination claimer in claimableForStationPair)
                {
                    //Save data
                    newBatch.Destinations.Add(claimer);

                    //Get FromStation
                    FromStation fsClaimer = (from fs in claimer.FromStations where fs.StationId == fromStation.Id select fs).FirstOrDefault();
                    if (fsClaimer == null)
                        throw new Exception("Can't find FromStation");

                    string line = claimer.Journey.TrainOperator + ". ";
                    line += claimer.MinutesDelay + " minutes delay.  ";
                    line += fsClaimer.ScheduledDeparture.ToString("ddd dd/MM/yy HH:mm") + " from " + fsClaimer.Station.StationName;
                    //line += "Arrived at " + claimer.Station.StationName + " [" + claimer.ScheduledArrival.ToString("ddd dd/MM/yy HH:mm") + "]: " + claimer.MinutesDelay.ToString() + " Minutes late.";
                    mm.Body += line + Environment.NewLine;
                }
                mm.From = new MailAddress("*****@*****.**");
                mm.IsBodyHtml = false;

                //Send to relevant users
                List<User> users = (from u in _db.Users
                                    where (u.HomeStationId == sp.Station1.Id || u.HomeStationId == sp.Station2.Id)
                                    && (u.DestinationStationId == sp.Station1.Id || u.DestinationStationId == sp.Station2.Id)
                                    select u).ToList();
                if (users.Count == 0) throw new Exception("No users found");
                foreach (User recipient in users)
                {
                    mm.To.Clear();
                    mm.To.Add(new MailAddress(recipient.EMail));
                    try
                    {
                        smtpClient.Send(mm);
                    }
                    catch (Exception ex)
                    {
                        ConsoleMsg(ex.Message, MsgType.Error);
                    }
                    _db.SaveChanges();
                }
            }
            _db.SaveChanges();
        }