public void PosterDelay(SidejobEntities context, int status, SidejobModel.ResponseDelay t1)
    {
        if (status == 4)
        {
            var reminderLevel = t1.ReminderLevel;
            if (reminderLevel == 0)
            {
                // Email Poster. Email Bidder
                // Warn Poster with reminder  1
                //Update Time Delay to Reminder level  1

                EmailPoster(t1, Message.Warning);
                EmailBidder(t1, Message.Notification);
                t1.ReminderLevel = 1;

            }
            if (reminderLevel == 1)
            {
                // Email Poster. Email Bidder
                // Warn Poster with reminder 2
                //Update Time Delay to Reminder level 2

                EmailPoster(t1, Message.Warning);
                EmailBidder(t1, Message.Notification);
                t1.ReminderLevel = 2;
            }

            if (reminderLevel == 2)
            {
                // Email Poster. Email Bidder
                // Warn Poster with reminder 3
                //Update Time Delay to Reminder level 3

                EmailPoster(t1, Message.Warning);
                EmailBidder(t1, Message.Notification);
                t1.ReminderLevel = 3;
            }
            if (reminderLevel == 3)
            {
                ////////////////////////////////Poster no payment////////////////////////////

                //  Add The Poster to blocked poster
                BlockPoster(context);

                // Email Bidder & Email Poster
                //Throught Button in CustomerRefund or ProfessionalRefund
                //   EmailBidder(t1, Message.Refund);

                EmailPoster(t1, Message.Blocked);

                //Refund Bidder
                RefundBidder();
                //Through PayPalAPI inthe future
                ////////////////////////////////////////
                //Delete from ClosedProject
                var closedproject = (from c in context.ClosedProjects
                                     where c.ProjectID == ProjectID
                                     select c).FirstOrDefault();
                if (closedproject != null)
                {
                    context.DeleteObject(closedproject);
                }
                context.SaveChanges();

                //Insert into archived
                var currentproject = (from c in context.Projects
                                      where c.ProjectID == ProjectID
                                      select c).FirstOrDefault();
                var currentprojectphoto = (from c in context.ProjectPhotoes
                                           where c.ProjectID == ProjectID
                                           select c).ToList();
                var currentprojectpicture = (from c in context.ProjectPictures
                                             where c.ProjectID == ProjectID
                                             select c).FirstOrDefault();
                var currentprojectrequirement = (from c in context.ProjectRequirements
                                                 where c.ProjectID == ProjectID
                                                 select c).FirstOrDefault();
                if (currentproject != null)
                {
                    if (currentprojectrequirement != null)
                    {
                        if ((from c in context.ArchievedCancelledProjects
                             where c.ProjectID == ProjectID
                             select c).FirstOrDefault() == null)
                        {
                            var acp = new ArchievedCancelledProject
                                          {
                                              ProjectID = (int)currentproject.ProjectID,
                                              DateFinished = DateTime.Now.Date,
                                              PosterID = PosterID,
                                              PosterRole = PosterRole,
                                              BidderID = BidderID,
                                              BidderRole = BidderRole,
                                              HighestBid = currentproject.HighestBid,
                                              Currency = currentprojectrequirement.CurrencyID,
                                              Status = currentproject.StatusInt
                                          };
                            context.AddToArchievedCancelledProjects(acp);
                        }
                    }
                }

                //for each record
                foreach (var cp in currentprojectphoto)
                {
                    if ((from c in context.ArchievedCancelledProjectPhotoes
                         where c.PhotoID == cp.PhotoID
                         select c).FirstOrDefault() == null)
                    {
                        var ac = new ArchievedCancelledProjectPhoto
                                     {
                                         PhotoID = cp.PhotoID,
                                         ProjectID = cp.ProjectID,
                                         PhotoPath = cp.PhotoPath,
                                         Caption = cp.Caption,
                                         AlbumID = cp.AlbumID,
                                         PhotoRank = cp.PhotoRank
                                     };
                        context.AddToArchievedCancelledProjectPhotoes(ac);
                    }
                }

                if (currentprojectpicture != null)
                {
                    if ((from c in context.ArchievedCancelledProjectPictures
                         where c.AlbumID == currentprojectpicture.AlbumID
                         select c).FirstOrDefault() == null)
                    {
                        var acpi = new ArchievedCancelledProjectPicture
                                       {
                                           AlbumID = currentprojectpicture.AlbumID,
                                           AlbumCaption = currentprojectpicture.AlbumCaption,
                                           Numberofimages = currentprojectpicture.Numberofimages,
                                           ProjectID = currentprojectpicture.ProjectID
                                       };
                        context.AddToArchievedCancelledProjectPictures(acpi);
                    }
                }

                if (currentprojectrequirement != null)
                {
                    if ((from c in context.ArchievedCancelledProjectRequirements
                         where c.ProjectID == currentprojectpicture.AlbumID
                         select c).FirstOrDefault() == null)
                    {
                        var acpr = new ArchievedCancelledProjectRequirement
                                       {
                                           ProjectID = currentprojectrequirement.ProjectID,
                                           LCID = currentprojectrequirement.LCID,
                                           CategoryID = currentprojectrequirement.CategoryID,
                                           CategoryName = currentprojectrequirement.CategoryName,
                                           JobID = currentprojectrequirement.JobID,
                                           JobTitle = currentprojectrequirement.JobTitle,
                                           ExperienceID = currentprojectrequirement.ExperienceID,
                                           CrewNumberID = currentprojectrequirement.CrewNumberID,
                                           LicensedID = currentprojectrequirement.LicensedID,
                                           InsuredID = currentprojectrequirement.InsuredID,
                                           RelocationID = currentprojectrequirement.RelocationID,
                                           ProjectTitle = currentprojectrequirement.ProjectTitle,
                                           StartDate = currentprojectrequirement.StartDate,
                                           EndDate = currentprojectrequirement.EndDate,
                                           AmountOffered = currentprojectrequirement.AmountOffered,
                                           CurrencyID = currentprojectrequirement.CurrencyID,
                                           Description = currentprojectrequirement.Description,
                                           SpecialNotes = currentprojectrequirement.SpecialNotes,
                                           Address = currentprojectrequirement.Address,
                                           CountryID = currentprojectrequirement.CountryID,
                                           CountryName = currentprojectrequirement.CountryName,
                                           RegionID = currentprojectrequirement.RegionID,
                                           RegionName = currentprojectrequirement.RegionName,
                                           CityID = currentprojectrequirement.CityID,
                                           CityName = currentprojectrequirement.CityName,
                                           Zipcode = currentprojectrequirement.Zipcode,
                                           DatePosted = currentprojectrequirement.DatePosted,
                                           TimeLeft = currentprojectrequirement.TimeLeft
                                       };

                        context.AddToArchievedCancelledProjectRequirements(acpr);
                    }
                }
                context.SaveChanges();

                //delete from current project
                if (currentprojectrequirement != null) context.DeleteObject(currentproject);
                if (currentprojectphoto.Count != 0)
                {
                    foreach (var cp in currentprojectphoto)
                    {
                        context.DeleteObject(cp);
                    }

                }
                if (currentprojectpicture != null) context.DeleteObject(currentprojectpicture);
                if (currentprojectrequirement != null) context.DeleteObject(currentprojectrequirement);
                t1.ReminderLevel = 4;
                context.SaveChanges();
                ///////////////////////////////Poster no payment////////////////////////////
            }
        }
    }
    /////////////////////Get Bidder Poster Project Properties/////////////////////////
    public void GetBidderPosterProjectProperties(SidejobModel.ResponseDelay rd)
    {
        if (rd.BidderID != null) BidderID = (int)rd.BidderID;
        PosterID = rd.PosterID;
        ProjectID = rd.ProjectID;
        ////////////////////////POSTER BIDDER PROJECT LCID//////////////////////////
        using (var context = new SidejobEntities())
        {
            if (rd.BidderRole == "CUS")
            {
                BidderRole = "CUS";
                var c1 = (from c in context.Customers
                          where c.CustomerID == rd.BidderID
                          select c).FirstOrDefault();
                if (c1 != null)
                {
                    BidderLCID = c1.LCID;
                    BidderUsername = c1.UserName;
                    var cg = (from c in context.CustomerGenerals
                              where c.CustomerID == rd.BidderID
                              select c).FirstOrDefault();
                    if (cg != null)
                    {
                        BidderEmailAddress = cg.EmailAddress;
                    }
                }
            }

            if (rd.BidderRole == "PRO")
            {
                BidderRole = "PRO";
                var c1 = (from c in context.Professionals
                          where c.ProID == rd.BidderID
                          select c).FirstOrDefault();
                if (c1 != null)
                {
                    BidderLCID = c1.LCID;
                    BidderUsername = c1.UserName;
                    var pg = (from c in context.ProfessionalGenerals
                              where c.ProID == rd.BidderID
                              select c).FirstOrDefault();
                    if (pg != null)
                    {
                        BidderEmailAddress = pg.EmailAddress;
                    }
                }
            }

            if (rd.PosterRole == "CUS")
            {
                PosterRole = "CUS";
                var c1 = (from c in context.Customers
                          where c.CustomerID == PosterID
                          select c).FirstOrDefault();
                if (c1 != null)
                {
                    PosterLCID = c1.LCID;
                    PosterUsername = c1.UserName;
                    var cg = (from c in context.CustomerGenerals
                              where c.CustomerID == rd.PosterID
                              select c).FirstOrDefault();
                    if (cg != null)
                    {
                        PosterEmailAddress = cg.EmailAddress;
                    }
                }
            }

            if (rd.PosterRole == "PRO")
            {
                PosterRole = "PRO";
                var c1 = (from c in context.Professionals
                          where c.ProID == PosterID
                          select c).FirstOrDefault();
                if (c1 != null)
                {
                    PosterLCID = c1.LCID;
                    PosterUsername = c1.UserName;
                    var pg = (from c in context.ProfessionalGenerals
                              where c.ProID == rd.BidderID
                              select c).FirstOrDefault();
                    if (pg != null)
                    {
                        BidderEmailAddress = pg.EmailAddress;
                    }
                }
            }

            var p1 = (from c in context.ProjectRequirements
                      where c.ProjectID == ProjectID
                      select c).FirstOrDefault();
            if (p1 != null) ProjectLCID = p1.LCID;
        }
    }
    public void BidderDelay(int status, SidejobEntities context, SidejobModel.ResponseDelay t1)
    {
        if (status == 3)
        {
            var reminderLevel = t1.ReminderLevel;
            if (reminderLevel == 0)
            {
                // Email Poster. Email Bidder
                // Warn Bidder with reminder  1
                // Update Time Delay to Reminder level  1
                EmailPoster(t1, Message.Notification);
                EmailBidder(t1, Message.Warning);
                t1.ReminderLevel = 1;
            }
            if (reminderLevel == 1)
            {
                // Email Poster. Email Bidder
                // Warn Bidder with reminder  2
                // Update Time Delay to Reminder level  2
                EmailPoster(t1, Message.Notification);
                EmailBidder(t1, Message.Warning);
                t1.ReminderLevel = 2;
            }
            if (reminderLevel == 2)
            {
                // Email Poster. Email Bidder
                // Warn Bidder with reminder  3
                //Update Time Delay to Reminder level  3
                EmailPoster(t1, Message.Notification);
                EmailBidder(t1, Message.Warning);
                t1.ReminderLevel = 3;
            }
            if (reminderLevel == 3)
            {
                // Add The Bidder to blocked poster
                BlockBidder(context);

                // Email Bidder & Email Poster
                //Throught Button in CustomerRefund
                //  EmailPoster(t1, Message.Refund);

               EmailBidder(t1, Message.Blocked);

                // Refund Poster
                RefundPoster();

                //If Exist Next Bidder
                var bids = (from c in context.Bids
                            where c.ProjectID == ProjectID
                                  && c.BidderID != BidderID
                            orderby c.AmountOffered
                            select c).FirstOrDefault();

                if (bids != null)
                {
                    //var nextbidder = bids;
                    // Email Poster
                    EmailPoster(t1, Message.NewOption);
                }
                t1.ReminderLevel = 4;
            }
        }
    }
    public void EmailPoster(SidejobModel.ResponseDelay t1, Message messageType, string pdtid = "")
    {
        //Notification:
        //?l=en-US&prid=5&usn=jack&bidder=smith&rem=1
        //Reminder:
        //?l=en-US&usn=jack&rem=1
        //NewOption:(Inside and Outside Website)
        //?l=en-US&prid=5&rol=CUS&cid=28
        //New Opportunity:(Inside and Outside Website)
        //l=en-US&prid=5&pid=25
        //Refund:
        //l=en-US&pdtid=1&prid=5&pid=25
        //Blocked
        //l=fr&prid=5&cid=28

        switch (messageType)
        {
            case Message.Notification:
                {
                    if (PosterRole == "CUS")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                                 "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Customer/CustomerNotification.aspx", Message.Notification, "CUS");
                    }

                    if (PosterRole == "PRO")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                                  "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Professional/ProfessionalNotification.aspx", Message.Notification, "PRO");
                    }
                }
                break;

            case Message.Warning:
                {
                    // Warn Bidder with reminder 1
                    if (PosterRole == "CUS")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                               "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Customer/CustomerReminder.aspx", Message.Warning);
                    }
                    if (PosterRole == "PRO")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                               "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Professional/ProfessionalReminder.aspx", Message.Warning);
                    }
                }
                break;

            case Message.NewOption:
                {
                    if (PosterRole == "CUS")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                            "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Customer/CustomerNewOption.aspx", Message.NewOption, "CUS", PosterID);
                    }
                    if (PosterRole == "PRO")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                               "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Professional/ProfessionalNewOption.aspx", Message.NewOption, "PRO", PosterID);
                    }
                }
                break;

            case Message.NewOpportunity:
                {
                    if (PosterRole == "CUS")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                            "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Customer/CustomerNewOpportunity .aspx", Message.NewOpportunity, "CUS", PosterID);
                    }
                    if (PosterRole == "PRO")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                               "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Professional/ProfessionalNewOpportunity.aspx", Message.NewOpportunity, "PRO", PosterID);
                    }
                }
                break;
            //This will be under Manage Site
            case Message.Refund:
                {
                    if (PosterRole == "CUS")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                               "http://www.my-side-job.com/Manage/MySideJob/Management/Refund/EmailTemplates/Customer/CustomerRefund.aspx", Message.Refund, "CUS", PosterID, PDTID);
                    }
                    if (PosterRole == "PRO")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                               "http://www.my-side-job.com/Manage/MySideJob/Management/Refund/EmailTemplates/Professional/ProfessionalRefund.aspx", Message.Refund, "PRO", PosterID, PDTID);
                    }
                }
                break;

            case Message.Blocked:
                {
                    if (PosterRole == "CUS")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                               "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Customer/CustomerBlocked.aspx", Message.Blocked, "CUS", PosterID);
                    }
                    if (PosterRole == "PRO")
                    {
                        SendEmail(PosterEmailAddress, PosterUsername, PosterLCID, t1.ReminderLevel,
                              "http://my-side-job.com/Schedule/MySideJob/EmailTemplates/Professional/ProfessionalBlocked.aspx", Message.Blocked, "PRO", PosterID);
                    }
                }
                break;
        }
    }
    public void EmailBidder(SidejobModel.ResponseDelay t1, Message messageType)
    {
        //Notification:
        //?l=en-US&prid=5&usn=jack&bidder=smith&rem=1
        //Reminder:
        //?l=en-US&usn=jack&rem=1
        //NewOption:(Inside and Outside Website)
        //?l=en-US&prid=5&rol=CUS&cid=28
        //New Opportunity:(Inside and Outside Website)
        //l=en-US&prid=5&pid=25
        //Refund:
        //l=en-US&pdtid=1&prid=5&pid=25
        //Blocked
        //l=fr&prid=5&cid=28
        switch (messageType)
        {
            case Message.Notification:
                {
                    if (BidderRole == "CUS")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                                  Server.MapPath("~/EmailTemplates/CustomerNotification.aspx"), Message.Notification);
                    }

                    if (BidderRole == "PRO")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                                  Server.MapPath("~/EmailTemplates/ProfessionalNotification.aspx"), Message.Notification);
                    }
                }
                break;

            case Message.Warning:
                {
                    // Warn Bidder with reminder 1
                    if (BidderRole == "CUS")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                                  Server.MapPath("~/EmailTemplates/CustomerReminder.aspx"), Message.Warning);
                    }
                    if (BidderRole == "PRO")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                                  Server.MapPath("~/EmailTemplates/ProfessionalReminder.aspx"), Message.Warning);
                    }
                }
                break;

            case Message.NewOption:
                {
                    if (BidderRole == "CUS")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                                  Server.MapPath("~/EmailTemplates/CustomerNewOption.aspx"), Message.NewOption, "CUS", BidderID);
                    }
                    if (BidderRole == "PRO")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                                  Server.MapPath("~/EmailTemplates/ProfessionalNewOption.aspx"), Message.NewOption, "PRO", BidderID);
                    }
                }

                break;

            case Message.NewOpportunity:
                {
                    if (BidderRole == "CUS")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                               Server.MapPath("~/EmailTemplates/CustomerNewOpportunity .aspx"), Message.NewOpportunity, id: BidderID);
                    }
                    if (BidderRole == "PRO")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                               Server.MapPath("~/EmailTemplates/ProfessionalNewOpportunity .aspx"), Message.NewOpportunity, id: BidderID);
                    }
                }
                break;
            //This will be under Manage Site
            case Message.Refund:
                {
                    if (BidderRole == "CUS")
                    {
                        //Send Email To admin to Refund.
                        //Later will be done through API
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                               Server.MapPath("~/EmailTemplates/Customer/CustomerRefund.aspx"), Message.Refund, id: BidderID, pdtid: PDTID);
                    }
                    if (BidderRole == "PRO")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                               Server.MapPath("~/EmailTemplates/Professional/ProfessionalRefund.aspx"), Message.Refund, id: BidderID, pdtid: PDTID);
                    }
                }
                break;

            case Message.Blocked:
                {
                    if (BidderRole == "CUS")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                               Server.MapPath("~/EmailTemplates/Customer/CustomerBlocked.aspx"), Message.Blocked, id: BidderID);
                    }
                    if (BidderRole == "PRO")
                    {
                        SendEmail(BidderEmailAddress, BidderUsername, BidderLCID, t1.ReminderLevel,
                               Server.MapPath("~/EmailTemplates/Professional/ProfessionalBlocked.aspx"), Message.Blocked, id: BidderID);
                    }
                }
                break;
        }
    }