protected virtual View CreateDayHeaders()
        {
            _linearLayoutDayHeaders = new LinearLayout(Context)
            {
                LayoutParameters = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MatchParent,
                    LinearLayout.LayoutParams.WrapContent)
            };

            DateTime date = DateTools.Last(FirstDayOfWeek);

            for (int i = 0; i < 7; i++, date = date.AddDays(1))
            {
                TextView dayHeader = new TextView(Context)
                {
                    Text             = date.ToString("ddd"),
                    LayoutParameters = new LinearLayout.LayoutParams(
                        0,
                        LinearLayout.LayoutParams.WrapContent)
                    {
                        Weight = 1
                    },
                    Gravity = GravityFlags.Right
                };

                dayHeader.SetPadding(0, 0, ThemeHelper.AsPx(Context, 4), 0);

                _linearLayoutDayHeaders.AddView(dayHeader);
            }

            return(_linearLayoutDayHeaders);
        }
        private FrameworkElement CreatePrintableView()
        {
            MyAdaptiveGridPanel panel = new MyAdaptiveGridPanel()
            {
                MinColumnWidth = 280
            };

            DayOfWeek dayOfWeek = DayOfWeek.Sunday;

            for (int i = 0; i < 7; i++, dayOfWeek = dayOfWeek + 1)
            {
                var snapshot = new DayScheduleSnapshot();
                snapshot.Initialize(_scheduleViewModel.SemesterViewItemsGroup, DateTools.Last(dayOfWeek, _scheduleViewModel.StartDate));

                panel.Children.Add(new StackPanel()
                {
                    Children =
                    {
                        new TextBlock()
                        {
                            Text     = dayOfWeek.ToString(),
                            FontSize = 30
                        },

                        snapshot
                    }
                });
            }

            return(panel);
        }
        public ScheduleViewModel(BaseViewModel parent, Params modelParams = null) : base(parent)
        {
            SemesterItemsViewGroup semesterGroup = SemesterItemsViewGroup.Load(MainScreenViewModel.CurrentLocalAccountId, MainScreenViewModel.CurrentSemester, trackChanges: true);

            if (semesterGroup == null)
            {
                throw new NullReferenceException("semesterGroup was null");
            }
            if (semesterGroup.Semester == null)
            {
                throw new NullReferenceException("semesterGroup.Semester was null");
            }

            if (modelParams == null)
            {
                modelParams = new Params();
            }
            _modelParams = modelParams;

            _arrangerItemsChangedHandler = new WeakEventHandler <EventArgs>(Arranger_OnItemsChanged);

            SemesterViewItemsGroup = semesterGroup;

            var acct = MainScreenViewModel.CurrentAccount;

            Account        = acct ?? throw new NullReferenceException("MainScreenViewModel.CurrentAccount was null");
            FirstDayOfWeek = acct.WeekChangesOn;

            DateTime today = DateTime.Today;

            if (semesterGroup.Semester.IsDateDuringThisSemester(today))
            {
                StartDate = DateTools.Last(FirstDayOfWeek);
            }
            else if (!PowerPlannerSending.DateValues.IsUnassigned(semesterGroup.Semester.Start) && today < semesterGroup.Semester.Start)
            {
                // Semester hasn't started yet, jump to first week of semester
                StartDate = DateTools.Last(FirstDayOfWeek, semesterGroup.Semester.Start);
            }
            else
            {
                // Semester already ended, jump to last week of semester
                StartDate = DateTools.Last(FirstDayOfWeek, semesterGroup.Semester.End);
            }

            if (!HasSchedules() || modelParams.IsEditing)
            {
                EnterEditMode();
            }

            AccountDataStore.AddDataChangedEventHandler(this);

            UpdateHasTwoWeekSchedule();
        }
        /// <summary>
        /// Doesn't do any saving or setting of any other dependent properties
        /// </summary>
        /// <param name="startsOn"></param>
        /// <param name="currentWeek"></param>
        public bool SetWeekSimple(DayOfWeek startsOn, Schedule.Week currentWeek)
        {
            DateTime today = DateTime.SpecifyKind(DateTime.Today, DateTimeKind.Utc);

            if (currentWeek == Schedule.Week.WeekTwo)
            {
                today = today.AddDays(-7);
            }

            DateTime answer = DateTools.Last(startsOn, today);

            if (answer != WeekOneStartsOn)
            {
                WeekOneStartsOn = answer;
                return(true);
            }

            return(false);
        }
Exemple #5
0
        protected override FrameworkElement GenerateDayHeader(DayOfWeek dayOfWeek)
        {
            Grid grid = new Grid()
            {
                Background = CalendarView.GridDayHeaderBackground,
                Margin     = new Thickness(0, 0, 0, 1)
            };

            grid.Children.Add(new TextBlock()
            {
                Text                = DateTools.Last(dayOfWeek).ToString("ddd"),
                Foreground          = CalendarView.GridDayHeaderForeground,
                Margin              = new Thickness(6, 2, 6, 2),
                HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Right,
                FontSize            = 16
            });

            return(grid);
        }
Exemple #6
0
        /// <summary>
        /// Automatically updates display, resets reminders, starts settings sync, and submits changes
        /// </summary>
        /// <param name="startsOn"></param>
        /// <param name="currentWeek"></param>
        public async System.Threading.Tasks.Task SetWeek(DayOfWeek startsOn, Schedule.Week currentWeek)
        {
            // Clear cached schedules on day since they don't subscribe to these changes.
            // Ideally I would have the lists subscribe to the account, but this will do for now.
            ViewLists.SchedulesOnDay.ClearCached();
            ViewLists.DayScheduleItemsArranger.ClearCached();

            DateTime today = DateTime.SpecifyKind(DateTime.Today, DateTimeKind.Utc);

            if (currentWeek == Schedule.Week.WeekTwo)
            {
                today = today.AddDays(-7);
            }

            DateTime answer = DateTools.Last(startsOn, today);

            if (answer != WeekOneStartsOn)
            {
                WeekOneStartsOn     = answer;
                NeedsToSyncSettings = true;

                // Save
                await SaveOnThread();

                //make upcoming update
                OnPropertyChanged("ShowSchedule");

                AccountDataStore data = await AccountDataStore.Get(this.LocalAccountId);

                var dontWait = RemindersExtension.Current?.ResetReminders(this, data);

                var dontWaitThread = System.Threading.Tasks.Task.Run(delegate
                {
                    // Update schedule tile
                    var dontWaitScheduleTile = ScheduleTileExtension.Current?.UpdateScheduleTile(this, data);
                });

                dontWait = Sync.SyncSettings(this, Sync.ChangedSetting.WeekOneStartsOn);
            }
        }
        public static bool CreateAccount(SqlConnection conn, string username, string password, string email)
        {
            string salt           = CreateSalt();
            string saltedPassword = SaltPassword(password, salt);

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "insert into Account (Username, Password, PasswordSalt, Email, WeekOneStartsOn) values (@username, @password, @passwordSalt, @email, @weekOneStartsOn) select cast(scope_identity() as bigint)";

                cmd.Parameters.AddWithValue("username", username);
                cmd.Parameters.AddWithValue("password", saltedPassword);
                cmd.Parameters.AddWithValue("passwordSalt", salt);
                cmd.Parameters.AddWithValue("email", email);
                cmd.Parameters.AddWithValue("weekOneStartsOn", DateTools.Last(DayOfWeek.Sunday));

                try
                {
                    object answer = cmd.ExecuteScalar();

                    if (answer is long)
                    {
                        return(true); // To get the account ID, app should request to login
                    }
                    else
                    {
                        return(false);
                    }
                }

                catch
                {
                    //likely means there was a duplicate username
                    return(false);
                }
            }
        }