コード例 #1
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        /// <exception cref="System.Exception">project not found</exception>
        /// <exception cref="System.ApplicationException">Permission denied for this project </exception>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Request.QueryString["projectid"] != null)
                {
                    ProjectID = Convert.ToInt32(Request.QueryString["projectid"].ToString());
                    ucProjectEvents.ProjectID = ProjectID;
                }

                StageBitz.Data.Project project = (from p in DataContext.Projects
                                                  where p.ProjectId == ProjectID
                                                  select p).FirstOrDefault();
                if (project == null)
                {
                    throw new Exception("project not found");
                }

                if (!Support.CanAccessProject(project))
                {
                    if (GetBL <ProjectBL>().IsProjectClosed(project.ProjectId))
                    {
                        StageBitzException.ThrowException(new StageBitzException(ExceptionOrigin.ProjectClose, project.ProjectId, "This Project Is Closed."));
                    }

                    throw new ApplicationException("Permission denied for this project ");
                }

                this.CompanyId = project.CompanyId;
                projectWarningPopup.ProjectId = ProjectID;
                warningDisplay.ProjectID      = ProjectID;
                warningDisplay.LoadData();

                //Set last updated date for concurrency handling
                OriginalLastUpdatedDate = project.LastUpdatedDate.Value;
                btnCancel.PostBackUrl   = string.Format("~/Project/ProjectDashboard.aspx?projectid={0}", ProjectID);
                DisplayTitle            = "Manage Schedule";//string.Format("{0}'s Dashboard", Support.TruncateString(project.ProjectName, 32));

                bool isReadOnlyRightsForProject = Support.IsReadOnlyRightsForProject(ProjectID);
                btnCancel.Visible = !isReadOnlyRightsForProject;

                #region SET LINKS

                lnkCompanyInventory.HRef = string.Format("~/Inventory/CompanyInventory.aspx?companyid={0}&relatedtable={1}&relatedid={2}", project.CompanyId, (int)BookingTypes.Project, ProjectID);
                lnkBookings.HRef         = string.Format("~/Project/ProjectBookingDetails.aspx?projectid={0}", ProjectID);
                linkTaskManager.HRef     = string.Format("~/ItemBrief/TaskManager.aspx?projectid={0}", ProjectID);
                reportList.ShowReportLinks(string.Format("~/ItemBrief/ItemisedPurchaseReport.aspx?projectid={0}", ProjectID), string.Format("~/ItemBrief/BudgetSummaryReport.aspx?projectid={0}", ProjectID), ProjectID);
                projectUpdatesLink.ProjectID = ProjectID;
                projectUpdatesLink.LoadData();

                #endregion SET LINKS

                LoadBreadCrumbs(project);
            }

            ucProjectEvents.SetEventsGridLength(900);//to fix the events grid issue in chrome set the lengh of the grid manually.
        }
コード例 #2
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        /// <param name="Project">The project.</param>
        private void LoadBreadCrumbs(StageBitz.Data.Project Project)
        {
            BreadCrumbs bc         = GetBreadCrumbsControl();
            string      companyUrl = Support.IsCompanyAdministrator(Project.Company.CompanyId) ?
                                     string.Format("~/Company/CompanyDashboard.aspx?CompanyId={0}", Project.Company.CompanyId) : null;

            bc.AddLink(Project.Company.CompanyName, companyUrl);
            bc.AddLink(Project.ProjectName, string.Format("~/Project/ProjectDashboard.aspx?projectid={0}", Project.ProjectId));
            bc.AddLink(DisplayTitle, null);
            bc.LoadControl();
        }
コード例 #3
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        /// <exception cref="System.Exception">project not found</exception>
        /// <exception cref="System.ApplicationException">
        /// Permission denied for this project
        /// or
        /// Invalid request.
        /// </exception>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Request.QueryString["projectid"] != null)
                {
                    ProjectID = Convert.ToInt32(Request.QueryString["projectid"].ToString());
                    projectWarningPopup.ProjectId = ProjectID;

                    StageBitz.Data.Project project = (from p in DataContext.Projects
                                                      where p.ProjectId == ProjectID && p.IsActive == true
                                                      select p).FirstOrDefault();
                    if (project == null)
                    {
                        throw new Exception("project not found");
                    }

                    this.CompanyId = project.CompanyId;
                    DisplayTitle   = string.Format("{0}'s Updates Report", Support.TruncateString(project.ProjectName, 32));

                    if (!Support.CanAccessProject(project))
                    {
                        if (GetBL <ProjectBL>().IsProjectClosed(project.ProjectId))
                        {
                            StageBitzException.ThrowException(new StageBitzException(ExceptionOrigin.ProjectClose, project.ProjectId, "This Project Is Closed."));
                        }

                        throw new ApplicationException("Permission denied for this project ");
                    }

                    warningDisplay.ProjectID = ProjectID;
                    warningDisplay.LoadData();

                    LoadConfigurationSettings();

                    #region SET LINKS

                    lnkCompanyInventory.HRef = string.Format("~/Inventory/CompanyInventory.aspx?companyid={0}&relatedtable={1}&relatedid={2}", project.CompanyId, (int)BookingTypes.Project, ProjectID);
                    lnkBookings.HRef         = string.Format("~/Project/ProjectBookingDetails.aspx?projectid={0}", ProjectID);
                    linkTaskManager.HRef     = ResolveUrl(string.Format("~/ItemBrief/TaskManager.aspx?projectid={0}", ProjectID));
                    reportList.ShowReportLinks(string.Format("~/ItemBrief/ItemisedPurchaseReport.aspx?projectid={0}", ProjectID), string.Format("~/ItemBrief/BudgetSummaryReport.aspx?projectid={0}", ProjectID), ProjectID);
                    projectUpdatesLink.ProjectID = ProjectID;
                    projectUpdatesLink.LoadData(false);

                    #endregion SET LINKS

                    LoadBreadCrumbs(project);
                }
                else //UNCOMMENT this
                {
                    throw new ApplicationException("Invalid request.");
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        /// <param name="project">The project.</param>
        private void LoadBreadCrumbs(StageBitz.Data.Project project)
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            StageBitz.Data.Company company = project.Company;

            string companyUrl = Support.IsCompanyAdministrator(company.CompanyId) ? string.Format("~/Company/CompanyDashboard.aspx?CompanyId={0}", company.CompanyId) : null;

            bc.AddLink(company.CompanyName, companyUrl);
            bc.AddLink(project.ProjectName, string.Format("~/Project/ProjectDashboard.aspx?projectid={0}", project.ProjectId));
            bc.AddLink("Updates Report", null);
            bc.LoadControl();
        }
コード例 #5
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        private void LoadBreadCrumbs()
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            StageBitz.Data.Project project = DataContext.Projects.Where(p => p.ProjectId == ProjectId).FirstOrDefault();
            StageBitz.Data.Company company = project.Company;

            string companyUrl = Support.IsCompanyAdministrator(company.CompanyId) ? string.Format("~/Company/CompanyDashboard.aspx?CompanyId={0}", company.CompanyId) : null;

            bc.AddLink(company.CompanyName, companyUrl);
            bc.AddLink(project.ProjectName, string.Format("~/Project/ProjectDashboard.aspx?ProjectId={0}", project.ProjectId));
            bc.AddLink(DisplayTitle, null);

            bc.LoadControl();
        }
コード例 #6
0
        /// <summary>
        /// Loads the bread crumbs.
        /// </summary>
        private void LoadBreadCrumbs()
        {
            BreadCrumbs bc = GetBreadCrumbsControl();

            StageBitz.Data.Project project = DataContext.Projects.Where(p => p.ProjectId == ProjectId).FirstOrDefault();

            int companyId = project.Company.CompanyId;

            if (Support.IsCompanyAdministrator(companyId))
            {
                bc.AddLink(project.Company.CompanyName, string.Format("~/Company/CompanyDashboard.aspx?companyid={0}", companyId));
            }
            else
            {
                bc.AddLink(project.Company.CompanyName, string.Empty);
            }

            bc.AddLink(project.ProjectName, string.Format("~/Project/ProjectDashboard.aspx?ProjectId={0}", ProjectId));
            bc.AddLink(DisplayTitle, null);
            bc.LoadControl();
        }
コード例 #7
0
        /// <summary>
        /// Loads the data.
        /// </summary>
        public void LoadData()
        {
            StageBitz.Data.Project project = DataContext.Projects.Where(p => p.ProjectId == ProjectID).FirstOrDefault();
            bool paymentsSpecified         = (FinanceSupport.GetCreditCardToken("Company", project.CompanyId) != null);

            ProjectStatusHandler.ProjectWarningInfo warningInfo = ProjectStatusHandler.GetProjectWarningStatus(project.ProjectStatusCodeId, project.ProjectTypeCodeId == Support.GetCodeByValue("ProjectType", "FREETRIALOPTIN").CodeId, project.ExpirationDate);
            StageBitz.Data.User companyAdmin = this.GetBL <CompanyBL>().GetCompanyPrimaryAdministrator(project.CompanyId);

            ProjectName       = Support.TruncateString(project.ProjectName, 30);
            RemainingDays     = string.Format("{0} day{1}", warningInfo.DaysToExpiration < 0 ? 0 : warningInfo.DaysToExpiration, warningInfo.DaysToExpiration == 1 ? string.Empty : "s");
            CompanyAdminName  = Support.TruncateString((companyAdmin.FirstName + " " + companyAdmin.LastName).Trim(), 30);
            CompanyAdminEmail = companyAdmin.Email1;
            PaymentFailedDate = null;

            CompanyFinancialUrl = ResolveUrl(string.Format("~/Company/CompanyFinancialDetails.aspx?companyid={0}", project.CompanyId));

            if (warningInfo.WarningStatus == ProjectStatusHandler.ProjectWarningStatus.NoWarning)
            {
                noticesMultiView.Visible = false;
                return;
            }
            else
            {
                noticesMultiView.Visible = true;
            }

            #region Determine User Permission Type

            ProjectPermission userType = ProjectPermission.Staff;
            if (Support.IsCompanyAdministrator(project.CompanyId))
            {
                userType = ProjectPermission.CompanyAdministrator;
            }
            else if (Support.IsProjectAdministrator(ProjectID))
            {
                userType = ProjectPermission.ProjectAdministrator;
            }
            else
            {
                userType = ProjectPermission.Staff;
            }

            #endregion Determine User Permission Type

            switch (warningInfo.WarningStatus)
            {
            case ProjectStatusHandler.ProjectWarningStatus.FreeTrialGrace:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.FreeTrialGraceCompanyAdmin;
                }
                break;

            case ProjectStatusHandler.ProjectWarningStatus.GracePeriod:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.GracePeriodCompanyAdmin;
                    ucCompanyPaymentFailedWarningGracePeriodCompanyAdmin.CompanyID = project.CompanyId;
                    ucCompanyPaymentFailedWarningGracePeriodCompanyAdmin.LoadData(CompanyPaymentFailedWarning.PermissionLevel.CompanyAdministrator,
                                                                                  CompanyPaymentFailedWarning.DisplayMode.PaymentFailedGracePeriod);
                }
                else if (userType == ProjectPermission.ProjectAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.GracePeriodProjectAdmin;
                    ucCompanyPaymentFailedWarningGracePeriodNonCompanyAdmin.CompanyID = project.CompanyId;
                    ucCompanyPaymentFailedWarningGracePeriodNonCompanyAdmin.LoadData(CompanyPaymentFailedWarning.PermissionLevel.NonCompanyAdministrator,
                                                                                     CompanyPaymentFailedWarning.DisplayMode.PaymentFailedGracePeriod);
                }
                PaymentFailedDate = project.ExpirationDate.Value.AddDays(-7);
                break;

            case ProjectStatusHandler.ProjectWarningStatus.PaymentFailed:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.PaymentFailedCompanyAdmin;
                    ucCompanyPaymentFailedWarningPaymentFailedCompanyAdmin.CompanyID = project.CompanyId;
                    ucCompanyPaymentFailedWarningPaymentFailedCompanyAdmin.LoadData(CompanyPaymentFailedWarning.PermissionLevel.CompanyAdministrator,
                                                                                    CompanyPaymentFailedWarning.DisplayMode.PaymentFailed);
                }
                else if (userType == ProjectPermission.ProjectAdministrator || userType == ProjectPermission.Staff)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.PaymentFailedProjectStaff;
                    ucCompanyPaymentFailedWarningPaymentFailedNonCompanyAdmin.CompanyID = project.CompanyId;
                    ucCompanyPaymentFailedWarningPaymentFailedNonCompanyAdmin.LoadData(CompanyPaymentFailedWarning.PermissionLevel.NonCompanyAdministrator,
                                                                                       CompanyPaymentFailedWarning.DisplayMode.PaymentFailed);
                }

                break;

            case ProjectStatusHandler.ProjectWarningStatus.Suspended:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.SuspendedCompanyAdmin;
                }
                else if (userType == ProjectPermission.ProjectAdministrator || userType == ProjectPermission.Staff)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.SuspendedProjectStaff;
                }
                break;

            case ProjectStatusHandler.ProjectWarningStatus.Closed:
                if (userType == ProjectPermission.CompanyAdministrator)
                {
                    noticesMultiView.ActiveViewIndex = (int)NoticeType.ClosedProjectCompanyAdmin;
                }
                break;
            }

            //If the project's payment has failed, calculate the number of days the payment is due.
            if (PaymentFailedDate != null)
            {
                int paymentOverdueDays = (int)(Today - PaymentFailedDate.Value).TotalDays;
                PaymentOverdueDays = string.Format("{0} day{1}", paymentOverdueDays, paymentOverdueDays == 1 ? string.Empty : "s");
            }

            upnlProjectWarningDisplay.Update();
        }
コード例 #8
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        /// <exception cref="System.ApplicationException">
        /// Item type not found
        /// or
        /// Project not found
        /// or
        /// Permission denied for this project
        /// </exception>
        /// <exception cref="System.Exception">Item Type not found</exception>
        protected void Page_Load(object sender, EventArgs e)
        {
            projectItemTypes.ProjectID = ProjectId;
            if (!IsPostBack)
            {
                LoadItemBriefSorting();
                StageBitz.Data.Project project = GetBL <ProjectBL>().GetProject(ProjectId);

                #region concurrentScenarios

                projectWarningPopup.ProjectId = ProjectId;

                if (isItemRmoved())
                {
                    throw new ApplicationException("Item type not found");
                }

                #endregion concurrentScenarios

                #region Check access security

                if (project == null)
                {
                    throw new ApplicationException("Project not found");
                }

                if (!Support.CanAccessProject(project))
                {
                    if (GetBL <ProjectBL>().IsProjectClosed(project.ProjectId))
                    {
                        StageBitzException.ThrowException(new StageBitzException(ExceptionOrigin.ProjectClose, project.ProjectId, "This Project Is Closed."));
                    }

                    throw new ApplicationException("Permission denied for this project ");
                }

                //Check the validity of the ItemType
                if (Utils.GetItemTypeById(ItemTypeId) == null)
                {
                    throw new Exception("Item Type not found");
                }

                #endregion Check access security

                this.CompanyId           = project.CompanyId;
                warningDisplay.ProjectID = ProjectId;
                warningDisplay.LoadData();

                //Set the page read only status if the user is project "Observer"
                IsReadOnly         = Support.IsReadOnlyRightsForProject(ProjectId);
                pnlAddItem.Visible = !IsReadOnly;

                displaySettings.Module = ListViewDisplaySettings.ViewSettingModule.ProjectItemBriefList;
                displaySettings.LoadControl();

                txtName.Focus();

                #region SET LINKS

                lnkCompanyInventory.HRef = string.Format("~/Inventory/CompanyInventory.aspx?companyid={0}&relatedtable={1}&relatedid={2}&ItemTypeId={3}",
                                                         project.CompanyId, (int)BookingTypes.Project, ProjectId, ItemTypeId);
                lnkBookings.HRef = string.Format("~/Project/ProjectBookingDetails.aspx?projectid={0}", ProjectId);
                hyperLinkTaskManager.NavigateUrl = ResolveUrl(string.Format("~/ItemBrief/TaskManager.aspx?projectid={0}&ItemTypeId={1}", ProjectId, ItemTypeId));
                reportList.ShowReportLinks(string.Format("~/ItemBrief/ItemisedPurchaseReport.aspx?projectid={0}&ItemTypeId={1}", ProjectId, ItemTypeId),
                                           string.Format("~/ItemBrief/BudgetSummaryReport.aspx?projectid={0}&ItemTypeId={1}", ProjectId, ItemTypeId), ProjectId);
                projectUpdatesLink.ProjectID = ProjectId;
                projectUpdatesLink.LoadData();

                #endregion SET LINKS

                var    itemType          = Utils.GetItemTypeById(ItemTypeId);
                string searchDefaultText = string.Concat("Find ", itemType.Name, " Briefs...");
                wmeFindName.WatermarkText = searchDefaultText;
                DisplayTitle = string.Format("{0} Brief List", string.Concat(Utils.GetItemTypeById(ItemTypeId).Name));
                LoadBreadCrumbs(project);
                ImportbulkItemsControl.ProjectID  = ProjectId;
                ImportbulkItemsControl.ItemTypeId = ItemTypeId;
                ImportbulkItemsControl.IsReadOnly = IsReadOnly;

                //Security - Hide editing deleting for Observers
                if (IsReadOnly)
                {
                    foreach (GridColumn col in gvItemList.MasterTableView.RenderColumns)
                    {
                        if (col.UniqueName == "EditCommandColumn")
                        {
                            col.Visible = false;
                        }
                    }
                }
            }

            projectItemTypes.InformParentToReload += delegate()
            {
                //Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri);
                ReloadByItemType();
            };

            ImportbulkItemsControl.InformItemListToLoad += delegate()//Subscribe to the Informparent to get updated
            {
                displaySettings.LoadControl();
            };
        }
コード例 #9
0
        /// <summary>
        /// To be called by the daily agent
        /// </summary>
        public static void UpdateProjectExpirations(DateTime dateToConsider, StageBitzDB dataContext)
        {
            //Get project status code ids
            int freeTrialCodeId      = Utils.GetCodeByValue("ProjectStatus", "FREETRIAL").CodeId;
            int activeCodeId         = Utils.GetCodeByValue("ProjectStatus", "ACTIVE").CodeId;
            int gracePeriodCodeId    = Utils.GetCodeByValue("ProjectStatus", "GRACEPERIOD").CodeId;
            int paymentFailedCodeId  = Utils.GetCodeByValue("ProjectStatus", "PAYMENTFAILED").CodeId;
            int suspendedCodeId      = Utils.GetCodeByValue("ProjectStatus", "SUSPENDED").CodeId;
            int freeTrialOptInCodeId = Utils.GetCodeByValue("ProjectType", "FREETRIALOPTIN").CodeId;
            int freeTrialTypeCodeId  = Utils.GetCodeByValue("ProjectType", "FREETRIAL").CodeId;


            FinanceBL financeBL = new FinanceBL(dataContext);
            CompanyBL companyBL = new CompanyBL(dataContext);
            int       companyPrimaryAdminCodeID  = Utils.GetCodeByValue("CompanyUserTypeCode", "ADMIN").CodeId;
            int       freeTrialProjectTypeCodeId = Utils.GetCodeByValue("ProjectType", "FREETRIAL").CodeId;
            string    userWebUrl   = Utils.GetSystemValue("SBUserWebURL");
            string    supportEmail = Utils.GetSystemValue("FeedbackEmail");

            #region Free Trial ending pre-notice email

            //Get the free trial projects that are about to expire in 7 days, and notify them via email
            var freeTrialProjects = from p in dataContext.Projects
                                    where (p.ProjectStatusCodeId == freeTrialCodeId && p.ProjectTypeCodeId == freeTrialProjectTypeCodeId) &&
                                    p.ExpirationDate != null
                                    select new
            {
                Project           = p,
                PaymentsSpecified = (dataContext.CreditCardTokens
                                     .Where(tk => tk.RelatedTableName == "Company" && tk.RelatedId == p.CompanyId && tk.IsActive == true)
                                     .FirstOrDefault() != null)
            };

            foreach (var projectInfo in freeTrialProjects)
            {
                StageBitz.Data.Project p = projectInfo.Project;

                int datediff = (p.ExpirationDate.Value.Date - dateToConsider).Days;
                if (datediff <= 7 && datediff >= 0)
                {
                    string freeTrialGraceEmailType = "PROJECTFREETRIALGRACE";

                    //Check if the free trial expiration pre-notice has already been sent
                    Email preNoticeEmail = dataContext.Emails.Where(em => em.EmailType == freeTrialGraceEmailType && em.RelatedId == p.ProjectId).FirstOrDefault();

                    if (preNoticeEmail == null)
                    {
                        Data.User companyPrimaryAdmin = //p.Company.CompanyUsers.Where(cu => cu.IsActive == true && cu.CompanyUserTypeCodeId == companyPrimaryAdminCodeID).FirstOrDefault().User;
                                                        (from cu in p.Company.CompanyUsers
                                                         join cur in dataContext.CompanyUserRoles on cu.CompanyUserId equals cur.CompanyUserId
                                                         where cu.IsActive && cur.CompanyUserTypeCodeId == companyPrimaryAdminCodeID && cur.IsActive
                                                         select cu).FirstOrDefault().User;

                        string companyBillingUrl = string.Format("{0}/Company/CompanyFinancialDetails.aspx?companyid={1}", userWebUrl, p.CompanyId);
                        string createProjectUrl  = string.Format("{0}/Project/AddNewProject.aspx?companyid={1}", userWebUrl, p.CompanyId);
                        EmailSender.SendProjectExpirationNoticeToCompanyAdmin(freeTrialGraceEmailType, p.ProjectId, companyPrimaryAdmin.Email1, companyPrimaryAdmin.FirstName, p.ProjectName, Utils.GetLongDateHtmlString(p.ExpirationDate.Value), companyBillingUrl, createProjectUrl, supportEmail);
                    }
                }
            }

            #endregion

            #region Project Status Updates

            // this excute after project ExpirationDate is exceded. eg:- if the agent is down for 7 days, project status should be suspended.
            var projects = from p in dataContext.Projects
                           where (p.ProjectStatusCodeId == freeTrialCodeId ||
                                  p.ProjectStatusCodeId == gracePeriodCodeId ||
                                  p.ProjectStatusCodeId == suspendedCodeId) &&
                           p.ExpirationDate != null &&
                           dateToConsider >= p.ExpirationDate
                           select new
            {
                Project           = p,
                PaymentsSpecified = (dataContext.CreditCardTokens
                                     .Where(tk => tk.RelatedTableName == "Company" && tk.RelatedId == p.CompanyId && tk.IsActive == true)
                                     .FirstOrDefault() != null)
            };

            foreach (var projectInfo in projects)
            {
                StageBitz.Data.Project p = projectInfo.Project;

                Data.User companyPrimaryAdmin = // p.Company.CompanyUsers.Where(cu => cu.IsActive == true && cu.CompanyUserTypeCodeId == companyPrimaryAdminCodeID).FirstOrDefault().User;
                                                (from cu in p.Company.CompanyUsers
                                                 join cur in dataContext.CompanyUserRoles on cu.CompanyUserId equals cur.CompanyUserId
                                                 where cu.IsActive && cur.CompanyUserTypeCodeId == companyPrimaryAdminCodeID && cur.IsActive
                                                 select cu).FirstOrDefault().User;

                string emailTemplateType = string.Empty;

                //Next expiration date is 7 days from current expiration date
                DateTime nextExpirationDate = p.ExpirationDate.Value.Date.AddDays(7);

                if (p.ProjectStatusCodeId == freeTrialCodeId)
                {
                    //Get the current Company package to check.
                    CompanyPaymentPackage companyPaymentPackage = financeBL.GetCurrentPaymentPackageFortheCompanyIncludingFreeTrial(p.CompanyId, dateToConsider);
                    DiscountCodeUsage     discountCodeUsage     = financeBL.GetDiscountCodeUsageByDate(dateToConsider, p.CompanyId);
                    //There are only two possibilities. Either user has given his permission or nothing has done.
                    //Check whether user has given the approval to continue the Free trial project.
                    if (p.ProjectTypeCodeId == freeTrialOptInCodeId)
                    {
                        // He has optin not to continue
                        if (companyPaymentPackage == null)
                        {
                            p.ProjectStatusCodeId = suspendedCodeId;
                        }
                        // He has optin to continue, with zero project package
                        else if ((companyPaymentPackage != null &&
                                  Utils.GetSystemProjectPackageDetailByPaymentPackageTypeId(companyPaymentPackage.ProjectPaymentPackageTypeId).ProjectCount == 0) ||
                                 (!companyPaymentPackage.PaymentMethodCodeId.HasValue && (discountCodeUsage == null || discountCodeUsage.DiscountCode.Discount != 100)))
                        {
                            p.ProjectStatusCodeId = suspendedCodeId;
                        }
                        else
                        {
                            p.ProjectStatusCodeId = activeCodeId;
                        }
                    }
                    else
                    {
                        p.ProjectStatusCodeId = suspendedCodeId;
                        emailTemplateType     = "PROJECTFREETRIALSUSPENDED";
                    }

                    p.ExpirationDate      = null;
                    p.LastUpdatedDate     = Utils.Now;
                    p.LastUpdatedByUserId = 0;
                }
                else if (p.ProjectStatusCodeId == gracePeriodCodeId)
                {
                    p.ProjectStatusCodeId = paymentFailedCodeId;
                    p.LastUpdatedDate     = Utils.Now;
                    p.LastUpdatedByUserId = 0;
                }
                else if (p.ProjectStatusCodeId == suspendedCodeId && (p.ProjectTypeCodeId == freeTrialOptInCodeId || p.ProjectTypeCodeId == freeTrialTypeCodeId))
                {
                    // if free trial project is manually suspended during free trial, set ExpirationDate to null at the end of free trial period.
                    p.ExpirationDate = null;
                }

                //Send the email notice if required
                if (emailTemplateType != string.Empty)
                {
                    string companyBillingUrl = string.Format("{0}/Company/CompanyFinancialDetails.aspx?companyid={1}", userWebUrl, p.CompanyId);
                    string createProjectUrl  = string.Format("{0}/Project/AddNewProject.aspx?companyid={1}", userWebUrl, p.CompanyId);
                    string expirationDate    = string.Empty;

                    if (p.ExpirationDate != null)
                    {
                        expirationDate = Utils.GetLongDateHtmlString(p.ExpirationDate.Value);
                    }
                    string pricingPlanURL = string.Format("{0}/Company/CompanyPricingPlans.aspx?companyId={1}", userWebUrl, p.CompanyId);

                    EmailSender.SendProjectExpirationNoticeToCompanyAdmin(emailTemplateType, p.ProjectId, companyPrimaryAdmin.Email1, companyPrimaryAdmin.FirstName, p.ProjectName, expirationDate, companyBillingUrl, createProjectUrl, supportEmail, pricingPlanURL);
                }
            }

            #endregion
        }
コード例 #10
0
        /// <summary>
        /// Handles the Click event of the btnDecline control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnDecline_Click(object sender, EventArgs e)
        {
            if (!PageBase.StopProcessing)
            {
                Invitation invitation = DataContext.Invitations.Where(inv => inv.InvitationId == InvitationId).FirstOrDefault();

                invitation.InvitationStatusCodeId = Support.GetCodeIdByCodeValue("InvitationStatus", "REJECTED");
                invitation.LastUpdatedByUserId    = UserID;
                invitation.LastUpdatedDate        = Now;

                DataContext.SaveChanges();

                #region Send declined email notice

                Code invitationTypeCode = Support.GetCodeByCodeId(invitation.InvitationTypeCodeId);

                try
                {
                    if (invitationTypeCode.Value == "PROJECTTEAM")
                    {
                        User invitedUser = DataContext.Users.Where(u => u.UserId == invitation.ToUserId).SingleOrDefault();
                        User invitee     = DataContext.Users.Where(u => u.UserId == invitation.FromUserId).SingleOrDefault();

                        string invitedPersonName = (invitedUser.FirstName + " " + invitedUser.LastName).Trim();
                        string toPersonName      = (invitee.FirstName + " " + invitee.LastName).Trim();
                        string toEmail           = invitee.Email1;
                        string role = invitation.ProjectRole;
                        StageBitz.Data.Project project = DataContext.Projects.Where(p => p.ProjectId == invitation.RelatedId).SingleOrDefault();
                        string projectName             = project.ProjectName;
                        string companyName             = DataContext.Companies.Where(c => c.CompanyId == project.CompanyId).SingleOrDefault().CompanyName;

                        #region Notifications

                        Notification nf = new Notification();
                        nf.ModuleTypeCodeId    = Support.GetCodeIdByCodeValue("ModuleType", "PROJTEAM");
                        nf.OperationTypeCodeId = Support.GetCodeIdByCodeValue("OperationType", "DELETE");
                        nf.RelatedId           = invitation.RelatedId;
                        nf.ProjectId           = invitation.RelatedId;
                        nf.Message             = string.Format("{0} declined the Project invitation.", Support.UserFullName);
                        nf.CreatedByUserId     = nf.LastUpdatedByUserId = UserID;
                        nf.CreatedDate         = nf.LastUpdatedDate = Now;
                        DataContext.Notifications.AddObject(nf);
                        DataContext.SaveChanges();

                        #endregion Notifications

                        EmailSender.SendProjectTeamInvitationDeclinedNotice(toEmail, toPersonName, invitedPersonName, projectName, role, companyName);
                    }
                    else if (invitationTypeCode.Value == "COMPANYADMIN" || invitationTypeCode.Value == "INVENTORYTEAM")
                    {
                        int templateCodeId = 0;
                        if (invitationTypeCode.Value == "COMPANYADMIN")
                        {
                            templateCodeId = Utils.GetCodeIdByCodeValue("EmailTemplateTypeCode", "COMPANYADMININV_DECLINED");
                        }
                        else if (invitationTypeCode.Value == "INVENTORYTEAM")
                        {
                            templateCodeId = Utils.GetCodeIdByCodeValue("EmailTemplateTypeCode", "INVENTORYTEAMINV_DECLINED");
                        }

                        User invitedUser = DataContext.Users.Where(u => u.UserId == invitation.ToUserId).SingleOrDefault();
                        User invitee     = DataContext.Users.Where(u => u.UserId == invitation.FromUserId).SingleOrDefault();

                        string invitedPersonName = (invitedUser.FirstName + " " + invitedUser.LastName).Trim();
                        string toPersonName      = (invitee.FirstName + " " + invitee.LastName).Trim();
                        string toEmail           = invitee.Email1;
                        string companyName       = DataContext.Companies.Where(c => c.CompanyId == invitation.RelatedId).SingleOrDefault().CompanyName;

                        EmailSender.SendCompanyAdminInvitationDeclinedNotice(toEmail, toPersonName, invitedPersonName, companyName, templateCodeId);
                    }
                }
                catch
                {
                    //Handle exceptions silently
                }

                #endregion Send declined email notice

                popupViewInvitation.HidePopup();

                if (InvitationStatusChanged != null)
                {
                    InvitationStatusChangedEventArgs args = new InvitationStatusChangedEventArgs();
                    args.Accepted = false;
                    InvitationStatusChanged(this, args);
                }
            }
        }
コード例 #11
0
        /// <summary>
        /// Saves the project details.
        /// </summary>
        private void SaveProjectDetails()
        {
            bool isReadOnlyRightsForProject = Support.IsReadOnlyRightsForProject(ProjectID);

            if (txtName.Text.Trim() != string.Empty && ProjectName != txtName.Text.Trim() && !isReadOnlyRightsForProject)
            {
                StageBitz.Data.Project project = GetBL <ProjectBL>().GetProjectByLastUpdatedDateTime(ProjectID, OriginalLastUpdatedDate);

                if (project == null)
                {
                    StageBitzException.ThrowException(new ConcurrencyException(ExceptionOrigin.ProjectDetails, ProjectID));
                }

                ////Check whether the same project name exist in the company.
                if (!IsValidToSave())
                {
                    errormsg.InnerText = "Project Name cannot be duplicated within the company.";
                    return;
                }

                bool   shouldChangeCreatedForTag = false;
                string oldProjectName            = project.ProjectName;
                string newProjectName            = txtName.Text.Trim();

                // Create notifications, if the project name is being changed.
                // Change Item's CreatedFor field.(if item is created from this project)
                if (project.ProjectName != newProjectName)
                {
                    Notification nf = new Notification();
                    nf.ModuleTypeCodeId    = Support.GetCodeIdByCodeValue("ModuleType", "PROJECT");
                    nf.OperationTypeCodeId = Support.GetCodeIdByCodeValue("OperationType", "EDIT");
                    nf.RelatedId           = project.ProjectId;
                    nf.ProjectId           = project.ProjectId;
                    nf.Message             = string.Format("{0} edited Project Name.", Support.UserFullName);
                    nf.CreatedByUserId     = nf.LastUpdatedByUserId = UserID;
                    nf.CreatedDate         = nf.LastUpdatedDate = Now;

                    GetBL <NotificationBL>().AddNotification(nf);

                    #region Initialize Update CreatedFor field

                    shouldChangeCreatedForTag = true;

                    #endregion Initialize Update CreatedFor field
                }

                project.ProjectName         = newProjectName;
                project.LastUpdatedByUserId = UserID;
                project.LastUpdatedDate     = Now;
                GetBL <ProjectBL>().SaveChanges();

                #region Update CreatedFor field

                if (shouldChangeCreatedForTag)
                {
                    DataContext.UpdateCreatedForField(project.ProjectId, newProjectName, oldProjectName);
                }

                #endregion Update CreatedFor field
            }
        }
コード例 #12
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        /// <exception cref="System.Exception">User does not have permission to access the project team</exception>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                StageBitz.Data.Project project = DataContext.Projects.Where(p => p.ProjectId == ProjectId && p.IsActive == true).SingleOrDefault();
                if (!Support.CanAccessProject(project))
                {
                    if (IsProjectClosed)
                    {
                        StageBitzException.ThrowException(new StageBitzException(ExceptionOrigin.ProjectClose, project.ProjectId, "This Project Is Closed."));
                    }

                    throw new Exception("User does not have permission to access the project team");
                }

                this.CompanyId = project.CompanyId;
                projectWarningPopup.ProjectId = ProjectId;
                warningDisplay.ProjectID      = ProjectId;
                warningDisplay.LoadData();

                sbPackageLimitsValidation.CompanyId   = CompanyId;
                sbPackageLimitsValidation.DisplayMode = UserWeb.Controls.Company.PackageLimitsValidation.ViewMode.UserLimit;
                sbPackageLimitsValidation.LoadData();

                LoadBreadCrumbs();

                SetReadOnlyMode(project);

                if (!IsReadOnly)
                {
                    searchUsers.DisplayMode = SearchUsers.ViewMode.ProjectTeam;
                    searchUsers.ProjectId   = ProjectId;
                    searchUsers.LoadControl();
                }
                else
                {
                    searchUsers.Visible = false;
                }

                LoadProjectTeam();

                #region SET LINKS

                lnkCompanyInventory.HRef = string.Format("~/Inventory/CompanyInventory.aspx?companyid={0}&relatedtable={1}&relatedid={2}", project.CompanyId, (int)BookingTypes.Project, ProjectId);
                lnkBookings.HRef         = string.Format("~/Project/ProjectBookingDetails.aspx?projectid={0}", ProjectId);
                linkTaskManager.HRef     = ResolveUrl(string.Format("~/ItemBrief/TaskManager.aspx?projectid={0}", ProjectId));
                reportList.ShowReportLinks(string.Format("~/ItemBrief/ItemisedPurchaseReport.aspx?projectid={0}", ProjectId), string.Format("~/ItemBrief/BudgetSummaryReport.aspx?projectid={0}", ProjectId), ProjectId);
                projectUpdatesLink.ProjectID = ProjectId;
                projectUpdatesLink.LoadData();

                #endregion SET LINKS

                #region SetValidationGroup

                string validationGroup = string.Concat(ucUserInvitationPopup.ClientID, "ValidationGroup");
                btnApplyUserPermission.ValidationGroup = validationGroup;
                ucUserInvitationPopup.InitializeValidationGroup(validationGroup);

                #endregion SetValidationGroup
            }
        }
コード例 #13
0
ファイル: SearchUsers.ascx.cs プロジェクト: Hennz/StageBitz
        /// <summary>
        /// Handles the Click event of the btnInviteProjectMember control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnInviteProjectMember_Click(object sender, EventArgs e)
        {
            if (!PageBase.StopProcessing)
            {
                if (!Page.IsValid || !sbPackageLimitsValidation.Validate())
                {
                    return;
                }

                HideNotifications();

                Invitation pendingInvitation = null;
                User       user = null;
                if (SelectedUserId > 0)
                {
                    user = this.GetBL <PersonalBL>().GetUser(SelectedUserId);
                    //Check whether this user already has a pending invitation.
                    pendingInvitation = GetPendingInvitationForUser(user);
                }
                else
                {
                    pendingInvitation = GetPendingInvitationForEmail(SelectedUserEmail);
                }

                if (pendingInvitation != null)
                {
                    //This scenario can only occur if the user accidentaly double clicks the send button.
                    //So the popup is silently closed without doing anything.
                    divSearchResults.Visible = false;
                    popupInviteProjectMember.HidePopup();
                }
                else
                {
                    string fromUserFullName        = (Support.UserFirstName + " " + Support.UserLastName).Trim();
                    string fromUserEmail           = (from u in DataContext.Users where u.UserId == UserID select u.Email1).FirstOrDefault();
                    StageBitz.Data.Project project = (from p in DataContext.Projects where p.ProjectId == ProjectId select p).FirstOrDefault();
                    string projectName             = project.ProjectName;
                    string companyName             = (from c in DataContext.Companies where c.CompanyId == project.CompanyId select c.CompanyName).FirstOrDefault();
                    string projectRole             = ucUserInvitationPopup.ProjectRole;// txtProjectRole.Text.Trim();

                    #region Create and save Invitation object

                    Invitation invitation = new Invitation();
                    DataContext.Invitations.AddObject(invitation);

                    invitation.FromUserId = UserID;

                    if (SelectedUserId > 0)
                    {
                        invitation.ToUserId = SelectedUserId;
                        invitation.ToEmail  = user.Email1;
                    }
                    else
                    {
                        invitation.ToName  = ucUserInvitationPopup.ProjectInvitePersonName; //txtProjInvitePersonName.Text.Trim();
                        invitation.ToEmail = SelectedUserEmail;
                    }

                    invitation.InvitationUserRoles.Add(
                        new InvitationUserRole
                    {
                        CreatedByUserId     = UserID,
                        CreatedDate         = Now,
                        IsActive            = true,
                        LastUpdatedByUserId = UserID,
                        LastUpdatedDate     = Now,
                        UserTypeCodeId      = Support.GetCodeIdByCodeValue("ProjectUserTypeCode", ucUserInvitationPopup.IsProjectObserverRadioChecked ? "OBSERVER" : "STAFF")
                    }
                        );

                    invitation.InvitationTypeCodeId   = GetInvitationTypeCodeId(ViewMode.ProjectTeam);
                    invitation.InvitationStatusCodeId = Support.GetCodeIdByCodeValue("InvitationStatus", "PENDING");

                    invitation.ProjectRole                = projectRole;
                    invitation.RelatedTable               = StageBitz.Common.Constants.GlobalConstants.RelatedTables.UserRoleTypes.Projects;
                    invitation.RelatedId                  = ProjectId;
                    invitation.CreatedByUserId            = invitation.LastUpdatedByUserId = UserID;
                    invitation.CreatedDate                = invitation.LastUpdatedDate = Now;
                    invitation.CanSeeProjectBudgetSummary = ucUserInvitationPopup.IsBudgetSummaryChecked;
                    DataContext.SaveChanges();

                    #endregion Create and save Invitation object

                    string toUserFullName = string.Empty;

                    if (SelectedUserId > 0)
                    {
                        toUserFullName = (user.FirstName + " " + user.LastName).Trim();
                        string toEmail      = user.Email1;
                        string dashboardUrl = StageBitzUrl + "/" + "Default.aspx";

                        if (!user.IsActive)
                        {
                            dashboardUrl = string.Format("{0}/Public/Invitation.aspx?invitationCode={1}", StageBitzUrl, HttpServerUtility.UrlTokenEncode(Utils.EncryptStringAES(invitation.InvitationId.ToString())));
                        }

                        //Send invitation email for existing user
                        EmailSender.StageBitzUrl = Support.GetSystemUrl();
                        EmailSender.InviteProjectTeamExistingUser(
                            (ucUserInvitationPopup.IsProjectObserverRadioChecked ? EmailSender.ProjectTeamUserType.Observer : EmailSender.ProjectTeamUserType.Staff),
                            toEmail, toUserFullName, fromUserFullName, fromUserEmail, companyName, projectName, projectRole, dashboardUrl);

                        divInviteSent.InnerText = string.Format("{0} ({1}) has been invited to the project.", Support.TruncateString(toUserFullName, 50), Support.TruncateString(toEmail, 50));
                    }
                    else
                    {
                        toUserFullName = ucUserInvitationPopup.ProjectInvitePersonName;//txtProjInvitePersonName.Text.Trim();
                        string toEmail       = SelectedUserEmail;
                        string invitationUrl = string.Format("{0}/Public/Invitation.aspx?invitationCode={1}", StageBitzUrl, HttpServerUtility.UrlTokenEncode(Utils.EncryptStringAES(invitation.InvitationId.ToString())));

                        //Send invitation email for new user
                        EmailSender.StageBitzUrl = Support.GetSystemUrl();
                        EmailSender.InviteProjectTeamNewUser(
                            (ucUserInvitationPopup.IsProjectObserverRadioChecked ? EmailSender.ProjectTeamUserType.Observer : EmailSender.ProjectTeamUserType.Staff),
                            toEmail, toUserFullName, fromUserFullName, fromUserEmail, companyName, projectName, projectRole, invitationUrl);
                        divInviteSent.InnerText = string.Format("'{0}' has been invited to the project.", Support.TruncateString(SelectedUserEmail, 50));
                    }

                    #region Notifications

                    Notification nf = new Notification();
                    nf.ModuleTypeCodeId    = Support.GetCodeIdByCodeValue("ModuleType", "PROJTEAM");
                    nf.OperationTypeCodeId = Support.GetCodeIdByCodeValue("OperationType", "ADD");
                    nf.RelatedId           = ProjectId;
                    nf.ProjectId           = ProjectId;
                    nf.Message             = string.Format("{0} invited {1} to the Project.", Support.UserFullName, toUserFullName);
                    nf.CreatedByUserId     = nf.LastUpdatedByUserId = UserID;
                    nf.CreatedDate         = nf.LastUpdatedDate = Now;
                    DataContext.Notifications.AddObject(nf);
                    DataContext.SaveChanges();

                    #endregion Notifications

                    divInviteSent.Visible    = true;
                    divSearchResults.Visible = false;
                    popupInviteProjectMember.HidePopup();
                }

                if (InvitationSent != null)
                {
                    InvitationSent(this, EventArgs.Empty);
                }
            }
        }
コード例 #14
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (ProjectID > 0)
                {
                    //Load the project
                    StageBitz.Data.Project project = (from p in DataContext.Projects
                                                      where p.ProjectId == ProjectID && p.IsActive == true
                                                      select p).FirstOrDefault();

                    if (project != null)
                    {
                        if (project.StartDate == DateTime.MinValue || project.StartDate == null)
                        {
                            startDate.Text = "TBC";
                        }
                        else
                        {
                            startDate.Text = Support.FormatDate(project.StartDate);
                        }

                        if (project.EndDate == DateTime.MinValue || project.EndDate == null)
                        {
                            endDate.Text = "TBC";
                        }
                        else
                        {
                            endDate.Text = Support.FormatDate(project.EndDate);
                        }
                    }

                    //Load the top 10 events that are not being expired.
                    var eventList = (from pe in DataContext.ProjectEvents
                                     join proj in DataContext.Projects on pe.ProjectId equals proj.ProjectId
                                     where pe.ProjectId == ProjectID && pe.EventDate > Now && proj.IsActive == true
                                     orderby pe.EventDate
                                     select pe).Take(9).ToList <ProjectEvent>();

                    ConfigureGrids(eventList);

                    int eventListCount = eventList.Count();
                    if (eventListCount > 0)
                    {
                        if (left > 0)
                        {
                            gvEventsLeft.DataSource = eventList.Take(left);
                            gvEventsLeft.DataBind();
                        }

                        if (middle > 0)
                        {
                            gvMiddle.DataSource = eventList.Skip(left).Take(middle);
                            gvMiddle.DataBind();
                            divLeft.Style["border-right"] = "1px Solid Black";
                        }

                        if (right > 0)
                        {
                            gvRight.DataSource = eventList.Skip(left + middle).Take(right);
                            gvRight.DataBind();
                            divMiddle.Style["border-right"] = "1px Solid Black";
                        }

                        ////Assign top 5 to left grid
                        //gvEventsLeft.DataSource = eventList.Take(3);
                        //gvEventsLeft.DataBind();

                        //if (eventList.Skip(3).Count() > 0)
                        //{
                        //    //Assign next 5 to right grid
                        //    gvMiddle.DataSource = eventList.Skip(3).Take(3);
                        //    gvMiddle.DataBind();
                        //}
                        //else
                        //{
                        //    divMiddle.Visible = false;
                        //}

                        //if (eventList.Skip(6).Count() > 0)
                        //{
                        //    gvRight.DataSource = eventList.Skip(6).Take(3);
                        //    gvRight.DataBind();
                        //}
                        //else
                        //{
                        //    divRight.Visible = false;
                        //}
                        ltlEventFeedback.Visible = true;
                    }
                    else
                    {
                        divGridArea.Visible = false;
                    }

                    ltlEventFeedback.Visible   = (eventListCount > 0);
                    ltlNoEventFeedback.Visible = !(eventListCount > 0);

                    lnkSchedule.HRef = ResolveUrl(string.Format("~/Project/ProjectSchedule.aspx?projectid={0}", ProjectID));
                }
            }
        }
コード例 #15
0
        /// <summary>
        /// Saves the schedule.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void SaveSchedule(object sender, EventArgs e)
        {
            if (!StopProcessing)
            {
                bool isReadOnlyRightsForProject = Support.IsReadOnlyRightsForProject(ProjectID);
                if (Page.IsValid && !isReadOnlyRightsForProject)
                {
                    StageBitz.Data.Project project = (from p in DataContext.Projects
                                                      where p.ProjectId == ProjectID && p.LastUpdatedDate == OriginalLastUpdatedDate
                                                      select p).FirstOrDefault();

                    if (project == null)
                    {
                        StageBitzException.ThrowException(new ConcurrencyException(ExceptionOrigin.ProjectDetails, ProjectID));
                    }

                    #region Notification

                    string message = string.Empty;
                    //Build the message
                    if ((ucProjectEvents.ProjectStartDate != project.StartDate && ucProjectEvents.ProjectStartDate != DateTime.MinValue || ucProjectEvents.ProjectStartDate == DateTime.MinValue && project.StartDate != null) &&
                        (ucProjectEvents.ProjectEndDate != project.EndDate && ucProjectEvents.ProjectEndDate != DateTime.MinValue || ucProjectEvents.ProjectEndDate == DateTime.MinValue && project.EndDate != null))
                    {
                        message = string.Format("{0} changed Project Start date and End date.", Support.UserFullName);
                    }
                    else if (ucProjectEvents.ProjectStartDate != project.StartDate && ucProjectEvents.ProjectStartDate != DateTime.MinValue || ucProjectEvents.ProjectStartDate == DateTime.MinValue && project.StartDate != null)
                    {
                        message = string.Format("{0} changed the Project Start date.", Support.UserFullName);
                    }
                    else if (ucProjectEvents.ProjectEndDate != project.EndDate && ucProjectEvents.ProjectEndDate != DateTime.MinValue || ucProjectEvents.ProjectEndDate == DateTime.MinValue && project.EndDate != null)
                    {
                        message = string.Format("{0} changed the Project End date.", Support.UserFullName);
                    }

                    if (message != string.Empty)
                    {
                        Notification nf = new Notification();
                        nf.ModuleTypeCodeId    = Support.GetCodeIdByCodeValue("ModuleType", "SCHEDULE");
                        nf.OperationTypeCodeId = Support.GetCodeIdByCodeValue("OperationType", "EDIT");
                        nf.RelatedId           = ProjectID;
                        nf.ProjectId           = ProjectID;
                        nf.Message             = message;
                        nf.CreatedByUserId     = nf.LastUpdatedByUserId = UserID;
                        nf.CreatedDate         = nf.LastUpdatedDate = Now;
                        DataContext.Notifications.AddObject(nf);
                    }

                    #endregion Notification

                    if (ucProjectEvents.ProjectStartDate != DateTime.MinValue)
                    {
                        project.StartDate = ucProjectEvents.ProjectStartDate;
                    }
                    else
                    {
                        project.StartDate = null;
                    }

                    if (ucProjectEvents.ProjectEndDate != DateTime.MinValue)
                    {
                        project.EndDate = ucProjectEvents.ProjectEndDate;
                    }
                    else
                    {
                        project.EndDate = null;
                    }

                    project.LastUpdatedByUserId = UserID;
                    project.LastUpdatedDate     = Now;
                    DataContext.SaveChanges();
                }
                Response.Redirect(string.Format("~/Project/ProjectDashboard.aspx?projectid={0}", ProjectID));
            }
        }