// dch rkl 11/15/2016 Add clock out date // dch rkl 01/23/2017 Check value of CaptureTimeInTimeTracker to see if hours or timespan is entered // dch rkl 01/23/2017 Include Service Agreement Code // bk rkl 01/26/2017 adjust to only include transaction date public void ClockOut(TimeSpan departTime, JT_TechnicianStatus technicianStatus, JT_MiscellaneousCodes serviceTicketStatus, JT_ActivityCode activityCode, string departmentWorked, JT_EarningsCode earningsCode, double hoursBilled, double meterReading, string workPerformedText, string clockOutDate, string captureTimeInTimeTracker, double hoursWorked, string svcAgmtContractCode, string billingType) { // dch rkl 12/07/2016 catch exception try { if (captureTimeInTimeTracker == "Y") { // dch rkl 11/15/2016 Add clock out date //DateTime clockOutTime = DateTime.Today; DateTime clockOutTime = DateTime.Parse(clockOutDate); clockOutTime = clockOutTime.Add(departTime); // dch rkl 02/03/2017 Include clockOutDate //App.Database.ClockOut(App.CurrentTechnician, _workTicket, clockOutTime, technicianStatus, serviceTicketStatus, // activityCode.ActivityCode, departmentWorked, earningsCode, hoursBilled, meterReading, workPerformedText, svcAgmtContractCode); App.Database.ClockOut(App.CurrentTechnician, _workTicket, clockOutTime, technicianStatus, serviceTicketStatus, activityCode.ActivityCode, departmentWorked, earningsCode, hoursBilled, hoursWorked, meterReading, workPerformedText, svcAgmtContractCode, clockOutDate, billingType); } else { App.Database.ClockOut(App.CurrentTechnician, _workTicket, technicianStatus, serviceTicketStatus, activityCode.ActivityCode, departmentWorked, earningsCode, hoursBilled, meterReading, workPerformedText, hoursWorked, svcAgmtContractCode, billingType); } } catch (Exception exception) { App.sendException(exception, "TechDashboard.ClockOutPageViewModel.ClockOut()"); } }
// dch rkl 12/02/2016 Set Billable Rate private void SetBillableRate() { decimal billingRate = 0; string sBillable = ""; if (pickerBillable.SelectedIndex > -1 && pickerBillable.SelectedValue != null) { sBillable = pickerBillable.SelectedValue.ToString(); } string sActivityCode = ""; string sBillingMiscCode = ""; if (pickerActivityCode.SelectedIndex > -1 && pickerActivityCode.SelectedValue != null) { sActivityCode = pickerActivityCode.SelectedValue.ToString(); } if (sActivityCode.Length > 0) { JT_ActivityCode activityCode = App.Database.GetActivityCodeFromDB(sActivityCode); if (activityCode != null && activityCode.BillingMiscCode != null) { sBillingMiscCode = activityCode.BillingMiscCode; } } if (sBillable != "B") { billingRate = 0; } else if ((bool)switchLaborCovSvcAgr.IsChecked && _workTicket.ServiceAgreement.BillingType == "F" && _workTicket.DtlCoverageExceptionCode == null && sBillingMiscCode == "") { billingRate = 0; } else if (_workTicket.ServiceAgreement.IsLaborCovered == true && _workTicket.IsCoveredOnContract == true) { billingRate = 0; } else if ((bool)switchLaborCovWarr.IsChecked && _workTicket.DtlCoverageExceptionCode == null && _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"); }
private void SetRefRate() { decimal billingRate = 0; decimal billingRateMultiplier = 1; JT_ActivityCode activityCode = (JT_ActivityCode)_pickerActivityCode.SelectedItem; if (activityCode != null) { billingRateMultiplier = activityCode.BillingRateMultiplier; if (billingRateMultiplier == 0) { billingRateMultiplier = 1; } } if (_vm.WorkTicket.DtlCoverageExceptionCode != null && _vm.WorkTicket.DtlCoverageExceptionCode.Trim().Length > 0) { billingRate = _vm.WorkTicket.DtlCoverageExceptionFixedRate; } if (_vm.WorkTicket.IsPreventativeMaintenance) { billingRate = Math.Round(_vm.WorkTicket.ServiceAgreement.PmDetail.Rate * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } else { if (_vm.WorkTicket.ServiceAgreement.DetailRate != 0) { billingRate = Math.Round(_vm.WorkTicket.ServiceAgreement.DetailRate * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } else { billingRate = Math.Round(_vm.WorkTicket.ServiceAgreement.StandardLaborRate * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } } if (activityCode != null) { App_Customer customer = App.Database.GetAppCustomer(_vm.WorkTicket); JT_CustomerBillingRates custBillRate = App.Database.GetJT_CustomerBillingRate(customer.ARDivisionNo, customer.CustomerNo, activityCode.ActivityCode); if (custBillRate != null) { billingRate = Math.Round(custBillRate.BillRatePerHour * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } } if (billingRate == 0) { JT_Technician technician = App.Database.GetCurrentTechnicianFromDb(); billingRate = Math.Round(technician.StandardBillingRate * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } _editorRefRate.Text = billingRate.ToString("C2"); SetBillableRate(); }
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"); }
public JT_ActivityCode GetActivityCodeFromDB(string activityCode) { JT_ActivityCode codeToReturn = null; lock (_locker) { if (activityCode != null) { codeToReturn = _database.Table <JT_ActivityCode>().Where( ac => (ac.ActivityCode == activityCode) ).FirstOrDefault(); } } return(codeToReturn); }
// dch rkl 11/1/2016 use textbox instead of datetime picker for times END // dch rkl 11/22/2016 if activity code changed, set department to default for this activity code // If the department for the activity code is null/blank, use the employee department private void pickerActivityCode_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Set the Department string sActivityCode = ""; if (pickerActivityCode.SelectedIndex > -1 && pickerActivityCode.SelectedValue != null) { sActivityCode = pickerActivityCode.SelectedValue.ToString(); } JT_ActivityCode activityCode = App.Database.GetActivityCodeFromDB(sActivityCode); if (activityCode != null && activityCode.DeptWorkedIn != null) { pickerDepartment.SelectedValue = activityCode.DeptWorkedIn; } else { JT_Technician tech = App.Database.GetCurrentTechnicianFromDb(); if (tech != null && tech.TechnicianDeptNo != null) { pickerDepartment.SelectedValue = tech.TechnicianDeptNo; } } // Determine if the Billable Dropdown is enabled // An activity code is considered billable when a misc item code is assigned to the activity code if (activityCode != null && activityCode.BillingMiscCode != null && activityCode.BillingMiscCode.Trim().Length > 0) { // When a billable activity code is assigned to the activity code, the billing status dropdown is enabled. pickerBillable.IsEnabled = true; SetBillable(); } else { // When a non-billable activity code is assigned to the activity code, the billing // status is disabled and set to no charge. pickerBillable.IsEnabled = false; pickerBillable.SelectedValue = "N"; } }
// dch rkl 12/02/2016 Set Billable/Non-Billable Flag private void SetBillable() { pickerBillable.SelectedValue = "B"; // default to billable string sActivityCode = ""; if (pickerActivityCode.SelectedIndex > -1 && pickerActivityCode.SelectedValue != null) { sActivityCode = pickerActivityCode.SelectedValue.ToString(); } if (sActivityCode.Length > 0) { JT_ActivityCode activityCode = App.Database.GetActivityCodeFromDB(sActivityCode); if (activityCode.BillingMiscCode == null) { pickerBillable.SelectedValue = "N"; pickerBillable.IsEnabled = false; } else if (_workTicket.ServiceAgreement.BillingType != null && _workTicket.ServiceAgreement.BillingType == "P" && (bool)switchSvcAgrRepair.IsChecked) { pickerBillable.SelectedValue = "N"; } else if (_workTicket.ServiceAgreement.BillingType == "P" && (bool)switchSvcAgrRepair.IsChecked) { pickerBillable.SelectedValue = "X"; } else if (_workTicket.ServiceAgreement.IsLaborCovered == false && _workTicket.ServiceAgreement.BillingType != "T" && _workTicket.ServiceAgreement.BillingType != "P") { pickerBillable.SelectedValue = "X"; } else if (_workTicket.ServiceAgreement.BillingType == "F" && _workTicket.ServiceAgreement.IsLaborCovered == false) { pickerBillable.SelectedValue = "N"; } } }
// dch rkl 12/02/2016 Set Ref Rate private void SetRefRate() { decimal billingRate = 0; string sActivityCode = ""; decimal billingRateMultiplier = 1; if (pickerActivityCode.SelectedIndex > -1 && pickerActivityCode.SelectedValue != null) { sActivityCode = pickerActivityCode.SelectedValue.ToString(); } if (sActivityCode.Length > 0) { JT_ActivityCode activityCode = App.Database.GetActivityCodeFromDB(sActivityCode); billingRateMultiplier = activityCode.BillingRateMultiplier; if (billingRateMultiplier == 0) { billingRateMultiplier = 1; } } if (_workTicket.DtlCoverageExceptionCode != null && _workTicket.DtlCoverageExceptionCode.Trim().Length > 0) { billingRate = _workTicket.DtlCoverageExceptionFixedRate; } if (_workTicket.IsPreventativeMaintenance) { billingRate = Math.Round(_workTicket.ServiceAgreement.PmDetail.Rate * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } else { if (_workTicket.ServiceAgreement.DetailRate != 0) { billingRate = Math.Round(_workTicket.ServiceAgreement.DetailRate * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } else { billingRate = Math.Round(_workTicket.ServiceAgreement.StandardLaborRate * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } } // Look for customer billing rates if (sActivityCode.Trim().Length > 0) { App_Customer customer = App.Database.GetAppCustomer(_workTicket); JT_CustomerBillingRates custBillRate = App.Database.GetJT_CustomerBillingRate(customer.ARDivisionNo, customer.CustomerNo, sActivityCode); if (custBillRate != null) { billingRate = Math.Round(custBillRate.BillRatePerHour * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } } // Set Rate based on Technician if (billingRate == 0) { JT_Technician technician = App.Database.GetCurrentTechnicianFromDb(); billingRate = Math.Round(technician.StandardBillingRate * billingRateMultiplier, 2, MidpointRounding.AwayFromZero); } // Set the value in the rate box editorRefRate.Text = billingRate.ToString("C2"); // Billable Rate SetBillableRate(); }
// dch rkl 10/26/2016 include schedule detail //public ClockOutPage(App_WorkTicket workTicket) public ClockOutPage(App_WorkTicket workTicket, App_ScheduledAppointment scheduleDetail) { InitializeComponent(); _vm = new ClockOutPageViewModel(workTicket); _ciOptions = App.Database.GetCIOptions(); // dch rkl 10/26/2016 return to ticket details instead of scheduled ticket list on cancel _scheduleDetail = scheduleDetail; // dch rkl 11/30/2016 display coverage checkboxes _workTicket = workTicket; // dch rkl 12/02/2016 Ticket Details // Get Current Technician JT_Technician technician = App.Database.GetCurrentTechnicianFromDb(); // Service Ticket textServiceTicket.Content = _scheduleDetail.ServiceTicketNumber; // Employee Number and Name textEmployeeNumber.Content = technician.FormattedTechnicianNo; textEmployeeName.Content = string.Format("{0} {1}", technician.FirstName, technician.LastName); // Set Coverage Checkboxes // Warranty Repair if (_workTicket.DtlWarrantyRepair == "Y") { switchWarrRepair.IsChecked = true; } // Labor Coverred on Warranty bool bIsChkd = false; if (_workTicket.StatusDate != null && _workTicket.RepairItem.MfgLaborWarrantyPeriod != null) { TimeSpan tsDateDiff = _workTicket.RepairItem.MfgLaborWarrantyPeriod.Subtract(_workTicket.StatusDate); if (tsDateDiff.TotalDays > 0 && _workTicket.DtlWarrantyRepair == "Y") { switchLaborCovWarr.IsChecked = true; bIsChkd = true; } } if (_workTicket.StatusDate != null && _workTicket.RepairItem.IntLaborWarrantyPeriod != null) { TimeSpan tsDateDiff = _workTicket.RepairItem.IntLaborWarrantyPeriod.Subtract(_workTicket.StatusDate); if (tsDateDiff.TotalDays > 0 && _workTicket.DtlWarrantyRepair == "Y") { switchLaborCovWarr.IsChecked = true; bIsChkd = true; } } // Service Agreement Repair if (_workTicket.DtlCoveredOnContract == "Y") { switchSvcAgrRepair.IsChecked = true; } // LLabor Covered on Service Agreement if (_workTicket.IsPreventativeMaintenance && _workTicket.ServiceAgreement.IsPMLaborCovered) { switchLaborCovSvcAgr.IsChecked = true; } else if (_workTicket.IsPreventativeMaintenance == false && _workTicket.IsServiceAgreementRepair && _workTicket.ServiceAgreement.IsLaborCovered) { switchLaborCovSvcAgr.IsChecked = true; } // Billable Picker pickerBillable.ItemsSource = _vm.BillableList; // Start Time DateTime dtStartDateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day) + _vm.StartTime; if (App.Database.GetApplicationSettings().TwentyFourHourTime) { textStartTime.Text = dtStartDateTime.ToString("HH:mm"); } else { textStartTime.Text = dtStartDateTime.ToString("hh:mm tt"); } // Start Date textStartDate.Text = technician.CurrentStartDate.ToShortDateString(); // Depart Time textEndDate.Text = DateTime.Now.ToShortDateString(); if (App.Database.GetApplicationSettings().TwentyFourHourTime) { textDepartTime.Text = DateTime.Now.ToString("HH:mm"); } else { textDepartTime.Text = DateTime.Now.ToString("hh:mm tt"); } // dch rkl 01/23/2017 If Time Tracker Options is "Y", they enter start / end time.If "N", they enter hours. BEGIN // bk rkl 02/01/2017 moving north of sethoursbilled call _captureTimeInTimeTracker = "N"; _MinHourlyCostIncrement = 0; JT_TimeTrackerOptions tto = App.Database.GetTimeTrackerOptions(); if (tto != null && tto.CaptureTimeInTimeTracker != null) { _captureTimeInTimeTracker = tto.CaptureTimeInTimeTracker; _MinHourlyCostIncrement = tto.MinHourlyCostIncrement; if (_captureTimeInTimeTracker == "O") { _captureTimeInTimeTracker = "Y"; } } // Set Hours Billed if (textStartTime.Text != null && textDepartTime.Text != null) { SetHoursBilled(); } // Technician Status // dch rkl 01/16/2017 If there is no value for the Default Depart Status Code, use the technician's current status BEGIN string statusCode = _vm.DefaultDepartStatusCode; if (statusCode == null || statusCode.Trim().Length == 0) { statusCode = technician.CurrentStatus; } // dch rkl 01/16/2017 If there is no value for the Default Depart Status Code, use the technician's current status END pickerTechnicianStatus.ItemsSource = _vm.TechnicianStatusList; for (int i = 0; i < pickerTechnicianStatus.Items.Count; i++) { // dch rkl 01/16/2017 If there is no value for the Default Depart Status Code, use the technician's current status BEGIN //if (((JT_TechnicianStatus)pickerTechnicianStatus.Items[i]).StatusDescription == _vm.DefaultDepartStatusCodeDescription) if (((JT_TechnicianStatus)pickerTechnicianStatus.Items[i]).StatusCode == statusCode) // dch rkl 01/16/2017 If there is no value for the Default Depart Status Code, use the technician's current status END { pickerTechnicianStatus.SelectedIndex = i; break; } } // Ticket Status pickerTicketStatus.ItemsSource = _vm.ServiceTicketStatusList; pickerTicketStatus.SelectedValue = _vm.DefaultServiceTicketStatusCode; // Activity Code pickerActivityCode.ItemsSource = _vm.ActivityCodeList; pickerActivityCode.SelectedValue = _vm.DefaultActivityCode; // Department pickerDepartment.ItemsSource = _vm.DepartmentCodesList; JT_ActivityCode dfltActCode = new JT_ActivityCode(); if (_vm.DefaultActivityCode != null) { dfltActCode = App.Database.GetActivityCodeFromDB(_vm.DefaultActivityCode); } if (dfltActCode != null) { pickerDepartment.SelectedValue = dfltActCode.DeptWorkedIn; } // Earnings Code List <JT_EarningsCode> lsEarnCd = new List <Models.JT_EarningsCode>(); foreach (JT_EarningsCode earncd in _vm.EarningsCodeList) { // Only include types of Regular or Overtime if (earncd.TypeOfEarnings == "O" || earncd.TypeOfEarnings == "R") { earncd.EarningsDeductionDesc = string.Format("{0} - {1}", earncd.EarningsCode, earncd.EarningsDeductionDesc); lsEarnCd.Add(earncd); } } pickerEarningsCode.ItemsSource = lsEarnCd; // dch rkl 11/01/2016 make sure default earning code is not null if (_vm.DefaultEarningCode != null) { pickerEarningsCode.SelectedValue = _vm.DefaultEarningCode; } else { pickerEarningsCode.SelectedIndex = 0; } // Meter Reading // dch rkl 11/1/2016 per Jeanne, hide the meter reading if JT_ServiceAgreementPMDetail.Basis = "M" BEGIN if (_vm.WorkTicket.ServiceAgreement != null && _vm.WorkTicket.ServiceAgreement.PmDetail != null && _vm.WorkTicket.ServiceAgreement.PmDetail.Basis != null && _vm.WorkTicket.ServiceAgreement.PmDetail.Basis == "M") { labelMeterReading.Visibility = Visibility.Visible; editorMeterReading.Visibility = Visibility.Visible; } else { labelMeterReading.Visibility = Visibility.Hidden; editorMeterReading.Visibility = Visibility.Hidden; } // dch rkl 11/1/2016 per Jeanne, hide the meter reading if JT_ServiceAgreementPMDetail.Basis = "M" END // Set Ref Rate SetRefRate(); // Work Performed editorWorkPerformed.MaxHeight = editorWorkPerformed.MinHeight; if (_captureTimeInTimeTracker == "Y") { // Enter start/end time textStartDate.IsEnabled = true; textStartTime.IsEnabled = true; textEndDate.IsEnabled = true; textDepartTime.IsEnabled = true; editorHoursWorked.IsEnabled = false; } else { // Enter hours textStartDate.IsEnabled = false; textStartDate.Text = ""; textStartTime.IsEnabled = false; textStartTime.Text = ""; textEndDate.IsEnabled = false; textEndDate.Text = ""; textDepartTime.IsEnabled = false; textDepartTime.Text = ""; editorHoursWorked.IsEnabled = true; } // dch rkl 01/23/2017 If Time Tracker Options is "Y", they enter start / end time.If "N", they enter hours. END // dch rkl 01/12/2017 Set Tab Indexes textStartDate.TabIndex = 0; textStartTime.TabIndex = 1; textEndDate.TabIndex = 2; textDepartTime.TabIndex = 3; editorHoursWorked.TabIndex = 4; pickerBillable.TabIndex = 5; editorHoursBilled.TabIndex = 6; editorBillableRate.TabIndex = 7; pickerTechnicianStatus.TabIndex = 8; pickerTicketStatus.TabIndex = 9; pickerActivityCode.TabIndex = 10; pickerDepartment.TabIndex = 11; pickerEarningsCode.TabIndex = 12; editorMeterReading.TabIndex = 13; editorWorkPerformed.TabIndex = 14; buttonClockout.TabIndex = 15; buttonCancel.TabIndex = 16; }
private void ButtonClockOut_Clicked(object sender, RoutedEventArgs e) { if (pickerTechnicianStatus.SelectedIndex < 0) { MessageBoxResult result = System.Windows.MessageBox.Show("Select a technician status.", "Status", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } if (pickerTicketStatus.SelectedIndex < 0) { MessageBoxResult result = System.Windows.MessageBox.Show("Select a ticket status.", "Status", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } if (pickerEarningsCode.SelectedIndex < 0) { MessageBoxResult result = System.Windows.MessageBox.Show("Select an earnings code.", "Status", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } if (pickerActivityCode.SelectedIndex < 0) { //await DisplayAlert("Activity Code", "Select an activity code.", "OK"); //return; MessageBoxResult result = System.Windows.MessageBox.Show("Select an activity code.", "Status", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } // Validate Dates DateTime dtDepart = DateTime.Now; double hoursWorked = 0; // dch rkl 01/23/2017 captureTimeInTimeTracker == "Y", date and time must be entered if (_captureTimeInTimeTracker == "Y") { DateTime dtArrive; if (textStartTime.Text != null) { if (DateTime.TryParse(textStartTime.Text, out dtArrive) == false) { MessageBoxResult result = System.Windows.MessageBox.Show("Enter a valid Arrive Date.", "Arrive Date", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } } else { MessageBoxResult result = System.Windows.MessageBox.Show("Enter a valid Arrive Date.", "Arrive Date", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } if (textDepartTime.Text != null) { if (DateTime.TryParse(textDepartTime.Text, out dtDepart) == false) { MessageBoxResult result = System.Windows.MessageBox.Show("Enter a valid Depart Date.", "Depart Date", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } } else { MessageBoxResult result = System.Windows.MessageBox.Show("Enter a valid Depart Date.", "Depart Date", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } // dch rkl 02/03/2017 Capture hours worked, for validation if (editorHoursWorked != null) { double.TryParse(editorHoursWorked.Text, out hoursWorked); } } else { // dch rkl 01/23/2017 captureTimeInTimeTracker == "N", hours must be entered if (editorHoursWorked != null) { double.TryParse(editorHoursWorked.Text, out hoursWorked); } if (hoursWorked == 0) { MessageBoxResult result = System.Windows.MessageBox.Show("Enter valid Hours Worked.", "Hours Worked", MessageBoxButton.OK); if (result == MessageBoxResult.OK) { return; } } } if (hoursWorked > 24) { MessageBoxResult result = System.Windows.MessageBox.Show("Time entry cannot exceed 24 hours. Please adjust your Depart Date/Time and create separate Clock In/Clock Out for additional hours.", "Hours Worked", MessageBoxButton.OK); if (result == MessageBoxResult.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 } // dch rkl 01/23/2017 captureTimeInTimeTracker == "Y", date and time must be entered if (_captureTimeInTimeTracker == "Y") { // dch rkl 02/03/2017 use arrive date //_vm.ClockOut(dtDepart.TimeOfDay, selectedTechnicianStatus, selectedTicketStatus, selectedActivityCode, // pickerDepartment.SelectedValue.ToString(), selectedEarningsCode, hoursBilled, meterReading, editorWorkPerformed.Text, // textEndDate.Text, _captureTimeInTimeTracker, hoursWorked, _vm.WorkTicket.ServiceAgreement.ServiceAgreementNumber); _vm.ClockOut(dtDepart.TimeOfDay, selectedTechnicianStatus, selectedTicketStatus, selectedActivityCode, pickerDepartment.SelectedValue.ToString(), selectedEarningsCode, hoursBilled, meterReading, editorWorkPerformed.Text, textStartDate.Text, _captureTimeInTimeTracker, hoursWorked, _vm.WorkTicket.ServiceAgreement.ServiceAgreementNumber); } else { TimeSpan ts = new TimeSpan(); _vm.ClockOut(ts, selectedTechnicianStatus, selectedTicketStatus, selectedActivityCode, pickerDepartment.SelectedValue.ToString(), selectedEarningsCode, hoursBilled, meterReading, editorWorkPerformed.Text, "", _captureTimeInTimeTracker, hoursWorked, _vm.WorkTicket.ServiceAgreement.ServiceAgreementNumber); } ContentControl contentArea = (ContentControl)this.Parent; contentArea.Content = new SchedulePage(); }
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(); }
public ClockOutPage(App_WorkTicket workTicket) { // Set the page title. //Title = "Clock Out"; _vm = new ClockOutPageViewModel(workTicket); Color asbestos = Color.FromHex("#7f8c8d"); BackgroundColor = Color.White; _labelTitle = new Xamarin.Forms.Label(); _labelTitle.Text = "CLOCK OUT"; _labelTitle.FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null); _labelTitle.FontSize = 22; _labelTitle.TextColor = Color.White; _labelTitle.HorizontalTextAlignment = TextAlignment.Center; _labelTitle.VerticalTextAlignment = TextAlignment.Center; Grid titleLayout = new Grid() { BackgroundColor = Color.FromHex("#2980b9"), HorizontalOptions = LayoutOptions.FillAndExpand, HeightRequest = 80 }; titleLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); titleLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); titleLayout.Children.Add(_labelTitle, 0, 0); Label lblServiceTicket = new Label(); lblServiceTicket.TextColor = asbestos; lblServiceTicket.Text = _vm.ScheduleDetail.ServiceTicketNumber; JT_Technician technician = App.Database.GetCurrentTechnicianFromDb(); Label lblEmployeeNo = new Label(); lblEmployeeNo.TextColor = asbestos; lblEmployeeNo.Text = technician.FormattedTechnicianNo; //_vm.CurrentTechnician.FormattedTechnicianNo; Label lblEmployeeName = new Label(); lblEmployeeName.TextColor = asbestos; lblEmployeeName.Text = string.Format("{0} {1}", technician.FirstName, technician.LastName); //_vm.CurrentTechnician.FirstName + " " + _vm.CurrentTechnician.LastName; Grid clockoutLayout = new Grid(); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); clockoutLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); clockoutLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); clockoutLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); clockoutLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); // service ticket line clockoutLayout.Children.Add(new Label() { Text = "Service Ticket", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 0); Grid.SetColumnSpan(lblServiceTicket, 3); clockoutLayout.Children.Add(lblServiceTicket, 1, 0); // employee number clockoutLayout.Children.Add(new Label() { Text = "Employee Number", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 1); clockoutLayout.Children.Add(lblEmployeeNo, 1, 1); clockoutLayout.Children.Add(lblEmployeeName, 2, 1); // checks switches Switch switchWarrantyRepair = new Switch() { IsEnabled = false }; if (_vm.WorkTicket.DtlWarrantyRepair == "Y") { switchWarrantyRepair.IsToggled = true; } clockoutLayout.Children.Add(new Label() { Text = "Warranty Repair", TextColor = asbestos, FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), FontSize = 12 }, 0, 2); clockoutLayout.Children.Add(switchWarrantyRepair, 1, 2); bool isChkd = false; switchLaborCoveredWarranty = new Switch() { IsEnabled = false }; if (_vm.WorkTicket.StatusDate != null && _vm.WorkTicket.RepairItem.MfgLaborWarrantyPeriod != null) { TimeSpan tsDateDiff = _vm.WorkTicket.RepairItem.MfgLaborWarrantyPeriod.Subtract(_vm.WorkTicket.StatusDate); if (tsDateDiff.TotalDays > 0 && _vm.WorkTicket.DtlWarrantyRepair == "Y") { switchLaborCoveredWarranty.IsToggled = true; isChkd = true; } } if (_vm.WorkTicket.StatusDate != null && _vm.WorkTicket.RepairItem.IntLaborWarrantyPeriod != null) { TimeSpan tsDateDiff = _vm.WorkTicket.RepairItem.IntLaborWarrantyPeriod.Subtract(_vm.WorkTicket.StatusDate); if (tsDateDiff.TotalDays > 0 && _vm.WorkTicket.DtlWarrantyRepair == "Y") { switchLaborCoveredWarranty.IsToggled = true; isChkd = true; } } clockoutLayout.Children.Add(new Label() { Text = "Labor Covered on Warranty", TextColor = asbestos, FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), FontSize = 12 }, 2, 2); clockoutLayout.Children.Add(switchLaborCoveredWarranty, 3, 2); Switch switchServiceAgreementRepair = new Switch() { IsEnabled = false }; if (_vm.WorkTicket.DtlCoveredOnContract == "Y") { switchServiceAgreementRepair.IsToggled = true; } clockoutLayout.Children.Add(new Label() { Text = "Svc Agmt Repair", TextColor = asbestos, FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), FontSize = 12 }, 0, 3); clockoutLayout.Children.Add(switchServiceAgreementRepair, 1, 3); switchLaborCoveredSvcAgreement = new Switch() { IsEnabled = false }; if (_vm.WorkTicket.IsPreventativeMaintenance && _vm.WorkTicket.ServiceAgreement.IsPMLaborCovered) { switchLaborCoveredSvcAgreement.IsToggled = true; } else if (_vm.WorkTicket.IsPreventativeMaintenance == false && _vm.WorkTicket.IsServiceAgreementRepair && _vm.WorkTicket.ServiceAgreement.IsLaborCovered) { switchLaborCoveredSvcAgreement.IsToggled = true; } clockoutLayout.Children.Add(new Label() { Text = "Labor Covered on Svc Agmt", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), FontSize = 12, TextColor = asbestos }, 2, 3); clockoutLayout.Children.Add(switchLaborCoveredSvcAgreement, 3, 3); // date part of the grid _pickerBillable = new BindablePicker(); _pickerBillable.ItemsSource = _vm.BillableList; _pickerBillable.SelectedIndexChanged += _pickerBillable_SelectedIndexChanged; DateTime dtStartDateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day) + _vm.StartTime; _pickerStartDate = new DatePicker(); _pickerStartDate.Date = technician.CurrentStartDate; //_vm.CurrentTechnician.CurrentStartDate; _pickerStartTime = new TimePicker(); _pickerStartTime.Time = _vm.StartTime; _pickerStartTime.IsEnabled = false; clockoutLayout.Children.Add(new Label() { Text = "Start Time", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 4); clockoutLayout.Children.Add(_pickerStartDate, 1, 4); clockoutLayout.Children.Add(_pickerStartTime, 2, 4); _pickerDepartDate = new DatePicker(); _pickerDepartDate.Date = DateTime.Now; _pickerDepartTime = new TimePicker { Time = new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second) }; _pickerDepartTime.Unfocused += PickerDepartTime_Unfocused; if (App.Database.GetApplicationSettings().TwentyFourHourTime) { _pickerStartTime.Format = "HH:mm"; _pickerDepartTime.Format = "HH:mm"; } //if (_pickerStartTime.Time != null && _pickerDepartTime.Time != null) { // SetHoursBilled(); //} clockoutLayout.Children.Add(new Label() { Text = "Depart Time", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 5); clockoutLayout.Children.Add(_pickerDepartDate, 1, 5); clockoutLayout.Children.Add(_pickerDepartTime, 2, 5); //hours worked clockoutLayout.Children.Add(new Label() { Text = "Hours Worked", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 6); _editorHoursWorked = new Editor(); _editorHoursWorked.Text = Math.Round((_pickerDepartTime.Time - _pickerStartTime.Time).TotalHours, 2).ToString(); _editorHoursWorked.Keyboard = Keyboard.Numeric; _editorHoursWorked.IsEnabled = false; clockoutLayout.Children.Add(_editorHoursWorked, 1, 6); Grid.SetColumnSpan(_pickerBillable, 2); _pickerBillable.SetBinding(BindablePicker.DisplayPropertyProperty, "BillableDesc"); clockoutLayout.Children.Add(_pickerBillable, 2, 6); //hours billed clockoutLayout.Children.Add(new Label() { Text = "Billable Hours", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 7); _editorHoursBilled = new Editor(); _editorHoursBilled.Text = Math.Round((_pickerDepartTime.Time - _pickerStartTime.Time).TotalHours, 2).ToString(); _editorHoursBilled.Keyboard = Keyboard.Numeric; clockoutLayout.Children.Add(_editorHoursBilled, 1, 7); clockoutLayout.Children.Add(new Label() { Text = "Ref Rate", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 2, 7); _editorRefRate = new Editor() { IsEnabled = false }; clockoutLayout.Children.Add(_editorRefRate, 3, 7); // rates clockoutLayout.Children.Add(new Label() { Text = "Billable Rate", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 8); _editorBillableRate = new Editor() { IsEnabled = false }; clockoutLayout.Children.Add(_editorBillableRate, 1, 8); clockoutLayout.Children.Add(new Label() { Text = "Billable Amount", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 2, 8); _editorBillableAmount = new Editor() { IsEnabled = false }; clockoutLayout.Children.Add(_editorBillableAmount, 3, 8); _pickerTechnicianStatus = new BindablePicker { Title = "Technician Status", ItemsSource = _vm.TechnicianStatusList }; _pickerTechnicianStatus.SetBinding(BindablePicker.DisplayPropertyProperty, "StatusDescription"); for (int i = 0; i < _pickerTechnicianStatus.Items.Count; i++) { if (_pickerTechnicianStatus.Items[i] == _vm.DefaultDepartStatusCodeDescription) { _pickerTechnicianStatus.SelectedIndex = i; break; } } clockoutLayout.Children.Add(new Label() { Text = "Technician Status", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 9); Grid.SetColumnSpan(_pickerTechnicianStatus, 3); clockoutLayout.Children.Add(_pickerTechnicianStatus, 1, 9); _pickerTicketStatus = new BindablePicker { Title = "Service Ticket Status", ItemsSource = _vm.ServiceTicketStatusList }; _pickerTicketStatus.SetBinding(BindablePicker.DisplayPropertyProperty, "Description"); /*for (int i = 0; i < _pickerTicketStatus.Items.Count; i++) { * if (_pickerTicketStatus.Items[i].Substring(0, 3) == _vm.DefaultServiceTicketStatusCode) { * _pickerTicketStatus.SelectedIndex = i; * break; * } * }*/ clockoutLayout.Children.Add(new Label() { Text = "Ticket Status", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 10); Grid.SetColumnSpan(_pickerTicketStatus, 3); clockoutLayout.Children.Add(_pickerTicketStatus, 1, 10); _pickerActivityCode = new BindablePicker { Title = "Activity Code", ItemsSource = _vm.ActivityCodeList }; _pickerActivityCode.SetBinding(BindablePicker.DisplayPropertyProperty, "ActivityDescription"); for (int i = 0; i < _pickerActivityCode.Items.Count; i++) { if (_pickerActivityCode.Items[i] == _vm.DefaultActivityCode) { _pickerActivityCode.SelectedIndex = i; break; } } clockoutLayout.Children.Add(new Label() { Text = "Activity Code", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 11); Grid.SetColumnSpan(_pickerActivityCode, 3); clockoutLayout.Children.Add(_pickerActivityCode, 1, 11); _pickerDepartment = new BindablePicker { Title = "Department", ItemsSource = _vm.DepartmentCodesList }; _pickerDepartment.SetBinding(BindablePicker.DisplayPropertyProperty, "MiscellaneousCode"); JT_ActivityCode dfltActCode = new JT_ActivityCode(); if (_vm.DefaultActivityCode != null) { dfltActCode = App.Database.GetActivityCodeFromDB(_vm.DefaultActivityCode); } if (dfltActCode != null) { for (int i = 0; i < _pickerDepartment.Items.Count; i++) { if (_pickerDepartment.Items[i] == dfltActCode.DeptWorkedIn) { _pickerDepartment.SelectedIndex = i; break; } } } clockoutLayout.Children.Add(new Label() { Text = "Department", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 12); Grid.SetColumnSpan(_pickerDepartment, 3); clockoutLayout.Children.Add(_pickerDepartment, 1, 12); _pickerEarningsCode = new BindablePicker { Title = "Earnings Code", ItemsSource = _vm.EarningsCodeList }; _pickerEarningsCode.SetBinding(BindablePicker.DisplayPropertyProperty, "EarningsDeductionDesc"); /*for (int i = 0; i < _pickerEarningsCode.Items.Count; i++) { * if (_pickerEarningsCode.Items[i] == _vm.DefaultEarningCode) { * _pickerEarningsCode.SelectedIndex = i; * break; * } * }*/ clockoutLayout.Children.Add(new Label() { Text = "Earnings Code", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 13); Grid.SetColumnSpan(_pickerEarningsCode, 3); clockoutLayout.Children.Add(_pickerEarningsCode, 1, 13); _editorMeterReading = new Editor(); _editorMeterReading.Keyboard = Keyboard.Numeric; _editorMeterReading.HeightRequest = 100; _editorMeterReading.IsEnabled = _vm.IsRepairItemAnEquipmentAsset; clockoutLayout.Children.Add(new Label() { Text = "Meter Reading", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 14); Grid.SetColumnSpan(_editorMeterReading, 3); clockoutLayout.Children.Add(_editorMeterReading, 1, 14); _editorWorkPerformed = new Editor(); _editorWorkPerformed.HeightRequest = 100; _editorWorkPerformed.TextChanged += EditorWorkPerformed_TextChanged; clockoutLayout.Children.Add(new Label() { Text = "Work Performed", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = asbestos }, 0, 15); Grid.SetColumnSpan(_editorWorkPerformed, 3); clockoutLayout.Children.Add(_editorWorkPerformed, 1, 15); // create a "clock out" button to go back Xamarin.Forms.Button buttonClockOut = new Button() { Text = "Clock Out", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = Color.White, BackgroundColor = asbestos, HorizontalOptions = LayoutOptions.FillAndExpand }; buttonClockOut.Clicked += ButtonClockOut_Clicked; // create a "cancel" button to go back Xamarin.Forms.Button buttonCancel = new Button() { Text = "Cancel", FontFamily = Device.OnPlatform("OpenSans-Bold", "sans-serif-black", null), TextColor = Color.White, BackgroundColor = Color.FromHex("#E74C3C"), HorizontalOptions = LayoutOptions.FillAndExpand }; buttonCancel.Clicked += buttonCancel_Clicked; Content = new StackLayout { Children = { titleLayout, new StackLayout { Orientation = StackOrientation.Vertical, Padding = 30, Children = { clockoutLayout, buttonClockOut, buttonCancel } } } }; }