private void SetBillableRate()
        {
            decimal billingRate = 0;
            string  sBillable   = "";

            ClockOutPageViewModel.App_Billable appBillable = (ClockOutPageViewModel.App_Billable)_pickerBillable.SelectedItem;

            sBillable = appBillable.BillableFlag;

            string          sBillingMiscCode = "";
            JT_ActivityCode activityCode     = (JT_ActivityCode)_pickerActivityCode.SelectedItem;

            if (activityCode != null)
            {
                if (activityCode.BillingMiscCode != null)
                {
                    sBillingMiscCode = activityCode.BillingMiscCode;
                }
            }

            if (sBillable != "B")
            {
                billingRate = 0;
            }
            else if ((bool)switchLaborCoveredSvcAgreement.IsToggled &&
                     _vm.WorkTicket.ServiceAgreement.BillingType == "F" &&
                     _vm.WorkTicket.DtlCoverageExceptionCode == null &&
                     sBillingMiscCode == "")
            {
                billingRate = 0;
            }
            else if (_vm.WorkTicket.ServiceAgreement.IsLaborCovered == true &&
                     _vm.WorkTicket.IsCoveredOnContract == true)
            {
                billingRate = 0;
            }
            else if ((bool)switchLaborCoveredWarranty.IsToggled && _vm.WorkTicket.DtlCoverageExceptionCode == null &&
                     _vm.WorkTicket.SE_OverridePricing != "Y")
            {
                billingRate = 0;
            }
            else
            {
                billingRate = Decimal.Parse(_editorRefRate.Text.Replace("$", ""));
            }

            // Set the value in the rate box
            _editorBillableRate.Text = billingRate.ToString("C2");

            // Set the value in the Billable Amount Box
            decimal hours;

            decimal.TryParse(_editorHoursBilled.Text.Replace("$", ""), out hours);
            _editorBillableAmount.Text = Math.Round(billingRate * hours, 2, MidpointRounding.AwayFromZero).ToString("C2");
        }
        protected async void ButtonClockOut_Clicked(object sender, EventArgs e)
        {
            if (_pickerTechnicianStatus.SelectedIndex < 0)
            {
                await DisplayAlert("Status", "Select a technician status.", "OK");

                return;
            }
            if (_pickerTicketStatus.SelectedIndex < 0)
            {
                await DisplayAlert("Status", "Select a ticket status.", "OK");

                return;
            }
            if (_pickerEarningsCode.SelectedIndex < 0)
            {
                await DisplayAlert("Earnings Code", "Select an earnings code.", "OK");

                return;
            }
            if (_pickerActivityCode.SelectedIndex < 0)
            {
                await DisplayAlert("Activity Code", "Select an activity code.", "OK");

                return;
            }

            DateTime dtDepart    = DateTime.Now;
            double   hoursWorked = 0;

            if (_captureTimeInTimeTracker == "Y")
            {
                DateTime dtArrive;
                if (_pickerStartDate.Date == null)
                {
                    await DisplayAlert("Arrive Date", "Enter a valid arrival date.", "OK");

                    return;
                }

                if (_pickerDepartDate.Date == null)
                {
                    await DisplayAlert("Depart Date", "Enter a valid departure date.", "OK");

                    return;
                }

                // dch rkl 02/03/2017 Capture hours worked, for validation
                if (_editorHoursWorked.Text != null)
                {
                    double.TryParse(_editorHoursWorked.Text, out hoursWorked);
                }
            }
            else
            {
                // dch rkl 01/23/2017 captureTimeInTimeTracker == "N", hours must be entered
                if (_editorHoursWorked.Text != null)
                {
                    double.TryParse(_editorHoursWorked.Text, out hoursWorked);
                }
                if (hoursWorked == 0)
                {
                    await DisplayAlert("Hours Worked", "Enter valid hours worked.", "OK");

                    return;
                }
            }
            if (hoursWorked > 24)
            {
                await DisplayAlert("Hours Worked", "Time entry cannot exceed 24 hours.  Please adjust your Depart Date/Time and create a separate Clock In/Clock Out for additional hours.", "OK");

                return;
            }

            double meterReading = 0;
            double hoursBilled  = 0;

            JT_TechnicianStatus   selectedTechnicianStatus = _pickerTechnicianStatus.SelectedItem as JT_TechnicianStatus;
            JT_MiscellaneousCodes selectedTicketStatus     = _pickerTicketStatus.SelectedItem as JT_MiscellaneousCodes;
            JT_EarningsCode       selectedEarningsCode     = _pickerEarningsCode.SelectedItem as JT_EarningsCode;
            JT_ActivityCode       selectedActivityCode     = _pickerActivityCode.SelectedItem as JT_ActivityCode;

            try
            {
                if (_vm.IsRepairItemAnEquipmentAsset)
                {
                    meterReading = double.Parse(_editorMeterReading.Text);
                }
                else
                {
                    meterReading = 0;
                }
            }
            catch
            {
                // empty
            }
            try
            {
                hoursBilled = double.Parse(_editorHoursBilled.Text);
            }
            catch
            {
                // empty
            }
            JT_MiscellaneousCodes deptCode = (JT_MiscellaneousCodes)_pickerDepartment.SelectedItem;

            ClockOutPageViewModel.App_Billable appBillable = (ClockOutPageViewModel.App_Billable)_pickerBillable.SelectedItem;

            if (_captureTimeInTimeTracker == "Y")
            {
                //_vm.ClockOut(_pickerDepartTime.Time, selectedTechnicianStatus, selectedTicketStatus, selectedActivityCode, string.Empty,
                //             selectedEarningsCode, hoursBilled, meterReading, _editorWorkPerformed.Text, _pickerDepartDate.Date.ToShortDateString());
                _vm.ClockOut(_pickerDepartTime.Time, selectedTechnicianStatus, selectedTicketStatus, selectedActivityCode, deptCode.MiscellaneousCode,
                             selectedEarningsCode, hoursBilled, meterReading, _editorWorkPerformed.Text, _pickerDepartDate.Date.ToShortDateString(), _captureTimeInTimeTracker,
                             hoursWorked, _vm.WorkTicket.ServiceAgreement.ServiceAgreementNumber, appBillable.BillableFlag);
            }
            else
            {
                _vm.ClockOut(new TimeSpan(), selectedTechnicianStatus, selectedTicketStatus, selectedActivityCode, deptCode.MiscellaneousCode,
                             selectedEarningsCode, hoursBilled, meterReading, _editorWorkPerformed.Text, "", _captureTimeInTimeTracker, hoursWorked,
                             _vm.WorkTicket.ServiceAgreement.ServiceAgreementNumber, appBillable.BillableFlag);
            }
            await Navigation.PopToRootAsync();
        }