예제 #1
0
        private async void SaveAnnualLeaveRequest_ClickedAsync(object sender, EventArgs e)
        {
            try
            {
                ApplyActivityIndicator();

                var staff = App.StaffDatabase.GetStaffById(Convert.ToInt32(App.SettingsDatabase.GetSetting("AssignedStaffId").Value));

                var startDate = StartDate.Date;
                var endDate   = EndDate.Date;

                var m = new Models.AnnualLeave
                {
                    StaffId       = staff.Id,
                    CancelReason  = null,
                    DateRequested = DateTime.Now,
                    Ending        = endDate,
                    Notes         = Notes.Text,
                    RequestId     = Guid.NewGuid(),
                    Starting      = startDate,
                    StatusId      = 1,
                    DeclineReason = null,
                    SentToOffice  = false,
                    EndingTime    = 1,
                    StartingTime  = 1,
                    IsSynced      = false,
                    TotalDays     = 0
                };

                var startTime = StartTime;
                var endTime   = EndTime;

                if ((String)startTime.SelectedItem == "Morning")
                {
                    m.StartingTime = 1;
                }
                else
                {
                    m.StartingTime = 2;
                }

                if ((String)endTime.SelectedItem == "Afternoon")
                {
                    m.EndingTime = 1;
                }
                else
                {
                    m.EndingTime = 2;
                }

                var totalWholeDays = Weeks.GetBusinessDays(m.Starting, m.Ending);
                var bankHolidays   = Weeks.CountBankHolidays(m.Starting, m.Ending);

                if (m.StartingTime == 1 && m.EndingTime == 1)
                {
                    m.TotalDays = (totalWholeDays - .5);
                }
                else if (m.StartingTime == 1 && m.EndingTime == 2)
                {
                    m.TotalDays = totalWholeDays;
                }
                else if (m.StartingTime == 2 && m.EndingTime == 2)
                {
                    m.TotalDays = (totalWholeDays - .5);
                }
                else
                {
                    m.TotalDays = totalWholeDays;
                }

                m.TotalDays = (m.TotalDays - bankHolidays);

                if (staff.AnnualLeaveBalance < m.TotalDays)
                {
                    ResetActivityIndicator();

                    await DisplayAlert("Error", "You currently do not have enough annual leave remaining.", "Acknowledge");
                }
                else if (m.Starting > m.Ending)
                {
                    ResetActivityIndicator();

                    await DisplayAlert("Error", "Ending date must be greater than the starting date.", "Acknowledge");
                }
                else
                {
                    if (App.AnnualLeaveDatabase.InsertAnnualLeaveRequest(m))
                    {
                        await Navigation.PushAsync(new Edit(m.Id));
                    }
                    else
                    {
                        ResetActivityIndicator();

                        await DisplayAlert("Error", "An error has occurred creating this annual leave request. Please contact support.", "Acknowledge");
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }