//--------------------------------------EVENT----START-WORK--------------------------------------------- private async void StartWork(object sender, EventArgs e) { string assignmentName = assignmentList.SelectedItem?.ToString(); if (string.IsNullOrEmpty(assignmentName)) { await DisplayAlert("Työ puuttuu", "Valitse ensin aloitettava työtehtävä!", "OK"); } else { try { // Käytetään Xamarin sovellukseen luotua model luokkaa ja perustetaan objekti palvelimelle lähetettäväksi. WorkAssignmentOperationModel data = new WorkAssignmentOperationModel() { Operation = "Start", AssignmentTitle = assignmentName }; HttpClient client = new HttpClient(); client.BaseAddress = new Uri("https://timesheetrestapi.azurewebsites.net/"); // Muutetaan em. data objekti Jsoniksi string input = JsonConvert.SerializeObject(data); StringContent content = new StringContent(input, Encoding.UTF8, "application/json"); // Lähetetään serialisoitu objekti back-endiin Post pyyntönä HttpResponseMessage message = await client.PostAsync("/api/workassignments", content); // Otetaan vastaan palvelimen vastaus string reply = await message.Content.ReadAsStringAsync(); //Asetetaan vastaus serialisoituna success muuttujaan bool success = JsonConvert.DeserializeObject <bool>(reply); if (success) // Näytetään ehdollisesti alert viesti { await DisplayAlert("Työn aloitus", "Työ aloitettu.", "Sulje"); // (otsikko, teksti, kuittausnapin teksti) } else { await DisplayAlert("Aloitus ei onnistu", "Työ on jo käynnissä!", "Sulje"); // Muutettu 4.5. } } catch (Exception ex) // Otetaan poikkeus ex muuttujaan ja sijoitetaan errorMessageen { string errorMessage = ex.GetType().Name + ": " + ex.Message; // Poikkeuksen customoitu selvittäminen ja... assignmentList.ItemsSource = new string[] { errorMessage }; // ..näyttäminen list viewissä } } }
public async void StartWork(object sender, EventArgs e) //StopWork = rutiini (Clicked Button) { string assignmentName = assignmentList.SelectedItem?.ToString(); if (string.IsNullOrEmpty(assignmentName)) { await DisplayAlert("Start Work", "You must select work assignment first.", "OK"); } else { try { WorkAssignmentOperationModel data = new WorkAssignmentOperationModel() { Operation = "Start", AssignmentTitle = assignmentName }; HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://mobilebackendmvc-api2.azurewebsites.net/"); string input = JsonConvert.SerializeObject(data); StringContent content = new StringContent(input, Encoding.UTF8, "application/json"); HttpResponseMessage message = await client.PostAsync("/api/workassignment", content); string reply = await message.Content.ReadAsStringAsync(); bool success = JsonConvert.DeserializeObject <bool>(reply); if (success) { await DisplayAlert("Start Work", "Work has been started.", "Close"); } else { await DisplayAlert("Start Work", "Could not start work.", "Close"); } } catch (Exception ex) { string errorMessage = ex.GetType().Name + ": " + ex.Message; assignmentList.ItemsSource = new string[] { errorMessage }; } } }
[HttpPost] //verbiattribuutti public bool PostStatus(WorkAssignmentOperationModel input) { MobileWorkDataEntities entities = new MobileWorkDataEntities(); try { WorkAssignments assignment = (from wa in entities.WorkAssignments where (wa.Active == true) && (wa.Title == input.AssignmentTitle) select wa).FirstOrDefault(); if (assignment == null) { return(false); } //NumberStyles style; //CultureInfo provider; //provider = new CultureInfo("fi-FI"); //string valueString = input.Latitude.ToString("R", CultureInfo.InvariantCulture); //style = NumberStyles.AllowDecimalPoint; if (input.Operation == "Start") { int assignmentId = assignment.Id_WorkAssignment; Timesheets newEntry = new Timesheets() { Id_WorkAssignment = assignmentId, StartTime = DateTime.Now, WorkComplete = false, Active = true, CreatedAt = DateTime.Now }; entities.Timesheets.Add(newEntry); } else if (input.Operation == "Stop") { int assignmentId = assignment.Id_WorkAssignment; Timesheets existing = (from ts in entities.Timesheets where (ts.Id_WorkAssignment == assignmentId) && (ts.Active == true) && (ts.WorkComplete == false) orderby ts.StartTime descending select ts).FirstOrDefault(); if (existing != null) { existing.StopTime = DateTime.Now; existing.WorkComplete = true; existing.LastModifiedAt = DateTime.Now; } else { return(false); } } entities.SaveChanges(); } catch { return(false); } finally { entities.Dispose(); } return(true); }
[HttpPost] //verbiattribuutti public bool GetStatus(WorkAssignmentOperationModel input) { return(true); }
public bool PostStatus(WorkAssignmentOperationModel input) { TimesheetEntities entities = new TimesheetEntities(); try { WorkAssignments assignment = (from wa in entities.WorkAssignments where (wa.Active == true) && (wa.Title == input.AssignmentTitle) select wa).FirstOrDefault(); if (assignment == null) { return(false); } if (input.Operation == "Start") { int assignmentId = assignment.Id_WorkAssignment; Timesheets newEntry = new Timesheets() { Id_WorkAssignment = assignmentId, StartTime = DateTime.Now, WorkComplete = false, Active = true, CreatedAt = DateTime.Now }; entities.Timesheets.Add(newEntry); //Päivitetään samalla work-assignmentin tilatietoja assignment.InProgress = true; assignment.InProgressAt = DateTime.Now; assignment.LastModifiedAt = DateTime.Now; } else if (input.Operation == "Stop") { int assignmentId = assignment.Id_WorkAssignment; Timesheets existing = (from ts in entities.Timesheets where (ts.Id_WorkAssignment == assignmentId) && (ts.Active == true) && (ts.WorkComplete == false) orderby ts.StartTime descending select ts).FirstOrDefault(); if (existing != null) { existing.StopTime = DateTime.Now; existing.WorkComplete = true; existing.LastModifiedAt = DateTime.Now; //Päivitetään samalla work-assignmentin tilatietoja assignment.InProgress = false; assignment.Completed = true; assignment.CompletedAt = DateTime.Now; assignment.LastModifiedAt = DateTime.Now; } else { return(false); } } entities.SaveChanges(); } catch { return(false); } finally { entities.Dispose(); } return(true); }
private async void StopWork(object sender, EventArgs e) { string assignmentName = assignmentList.SelectedItem?.ToString(); if (string.IsNullOrEmpty(assignmentName)) { await DisplayAlert("Työ puuttuu", "Valitse ensin aloitettava työtehtävä", "OK"); } else { string result = await DisplayPromptAsync("Kommentti", "Kirjoita kommentti tai kuittaus", "OK", "Peruuta", "Kirjoita tähän"); if (string.IsNullOrEmpty(result)) { string kommentti = " "; SelectedEmployee.Comment = kommentti; } else { string kommentti = result; SelectedEmployee.Comment = kommentti; } try { // Käytetään Xamarin sovellukseen luotua model luokkaa ja perustetaan objekti palvelimelle lähetettäväksi WorkAssignmentOperationModel data = new WorkAssignmentOperationModel() { Operation = "Stop", AssignmentTitle = assignmentName, Name = SelectedEmployee.Name, Comment = SelectedEmployee.Comment }; HttpClient client = new HttpClient(); client.BaseAddress = new Uri("https://timesheetrestapiriku.azurewebsites.net"); // yhteys RestApi appiin // muutetaan em data objekti Jsoniksi string input = JsonConvert.SerializeObject(data); StringContent content = new StringContent(input, Encoding.UTF8, "application/json"); //Lähetetään serialisoitu objekti back-endiin Post pyyntönä HttpResponseMessage message = await client.PostAsync("/api/workassignments", content); // Otetaan vastaan palvelimen vastaus string reply = await message.Content.ReadAsStringAsync(); // Asetetaan vastaus serialisoituna success muuttujaan bool success = JsonConvert.DeserializeObject <bool>(reply); if (success) { await DisplayAlert("Työn lopetus", "Työ lopetettu", "Sulje"); assignmentList.ItemsSource = ""; } else { await DisplayAlert("Työn lopetus", "Työtä ei voitu lopettaa, koska sitä ei ole aloitettu", "Sulje"); } } catch (Exception ex) { string errorMessage = ex.GetType().Name + ": " + ex.Message; //Poikkeuksen customoitu selvittäminen ja näyttäminen list viewssä assignmentList.ItemsSource = new string[] { errorMessage }; } } }
// tapahtuma käsittelijä - aloita työ private async void StartWork(object sender, EventArgs e) { string assignmentName = assignmentList.SelectedItem?.ToString(); if (string.IsNullOrEmpty(assignmentName)) { await DisplayAlert("Työ puuttuu", "Valitse ensin aloitettava työtehtävä", "OK"); } else { // Selvitetään nykyinen lokaatio sekä kysytään kohteen lokaatio ja lasketaan niiden välinen matka var request = new GeolocationRequest(GeolocationAccuracy.Medium); var locationStart = await Geolocation.GetLocationAsync(request); string osoite = await DisplayPromptAsync("Sijainti", "Anna työkohteen sijainti"); if (string.IsNullOrEmpty(osoite)) { distanceLabel.Text = "Osoite tieto puuttuu..."; } else { var locations = await Geocoding.GetLocationsAsync(osoite); var locationEnd = locations?.FirstOrDefault(); // Viedään tiedot SelectedEmployee tauluun lähetystä varten SelectedEmployee.Latitude = locationEnd.Latitude.ToString(); SelectedEmployee.Longtitude = locationEnd.Longitude.ToString(); double kilometrit = Math.Round(Location.CalculateDistance(locationStart, locationEnd, DistanceUnits.Kilometers), 2); distanceLabel.Text = kilometrit.ToString(); await DisplayAlert("Työmatkan pituus", kilometrit.ToString() + " km", "OK"); } // Luodaan PopUp ikkuna mahdolliselle kommentin jättämiselle. Kommentti string välitetään SelectedEmployy olioon string result = await DisplayPromptAsync("Kommentti", "Kirjoita kommentti tai kuittaus"); if (string.IsNullOrEmpty(result)) { SelectedEmployee.Comment = " "; } else { SelectedEmployee.Comment = result; } try { // Käytetään Xamarin sovellukseen luotua model luokkaa ja perustetaan objekti palvelimelle lähetettäväksi WorkAssignmentOperationModel data = new WorkAssignmentOperationModel() { Operation = "Start", AssignmentTitle = assignmentName, Name = SelectedEmployee.Name, Comment = SelectedEmployee.Comment, Latitude = SelectedEmployee.Latitude, Longtitude = SelectedEmployee.Longtitude }; HttpClient client = new HttpClient(); client.BaseAddress = new Uri("https://timesheetrestapiriku.azurewebsites.net"); // yhteys RestApi appiin // muutetaan em data objekti Jsoniksi string input = JsonConvert.SerializeObject(data); StringContent content = new StringContent(input, Encoding.UTF8, "application/json"); //Lähetetään serialisoitu objekti bacn-endiin Post pyyntönä HttpResponseMessage message = await client.PostAsync("/api/workassignments", content); // Otetaan vastaan palvelimen vastaus string reply = await message.Content.ReadAsStringAsync(); // Asetetaan vastaus serialisoituna success muuttujaan bool success = JsonConvert.DeserializeObject <bool>(reply); if (success) { await DisplayAlert("Työn aloitus", "Työ aloitettu", "Sulje"); } else { await DisplayAlert("Aloitus ei onnistu", "Työ on jo käynnissä!", "Sulje"); } } catch (Exception ex) { string errorMessage = ex.GetType().Name + ": " + ex.Message; //Poikkeuksen customoitu selvittäminen ja näyttäminen list viewssä assignmentList.ItemsSource = new string[] { errorMessage }; } } }
public bool PostStatus(WorkAssignmentOperationModel input) // Todo: Ota myös customer ja employee tieto { tuntidbContext context = new tuntidbContext(); try { //Ensin haetaan työtehtävä Otsikon (title) perusteella ja nimetään se assignment muuttujaksi WorkAssignments assignment = (from wa in context.WorkAssignments where (wa.Active == true) && (wa.Title == input.AssignmentTitle) select wa).FirstOrDefault(); if (assignment == null) { return(false); } //--------------------------IF--START---------------------------------------------------------------------- else if (input.Operation == "Start") { if (assignment.InProgress == true || assignment.Completed == true) // Lisätty 4.5. { return(false); } else { int assignmentId = assignment.IdWorkAssignment; // Luodaan uusi timesheet työlle Timesheet newEntry = new Timesheet() { IdWorkAssignment = assignmentId, StartTime = DateTime.Now, //WorkComplete = false, ------------ poistettu turha kenttä Active = true, CreatedAt = DateTime.Now }; context.Timesheet.Add(newEntry); // Päivitetään työtehtävän tilaa myös work assignments tauluun WorkAssignments assignments = (from wa in context.WorkAssignments where (wa.IdWorkAssignment == assignmentId) && (wa.Active == true) select wa).FirstOrDefault(); assignment.InProgress = true; assignment.WorkStartedAt = DateTime.Now; assignment.LastModifiedAt = DateTime.Now; context.SaveChanges(); // talletetaan kaikki em muutokset } } //--------------------------------IF--STOP---------------------------------------------------------------------- else if (input.Operation == "Stop") { int assignmentId = assignment.IdWorkAssignment; // Halutaan muuttaa tietoja sekä timesheetiin... Timesheet existing = (from ts in context.Timesheet where (ts.IdWorkAssignment == assignmentId) && (ts.Active == true) select ts).FirstOrDefault(); //............että work assignmentteihin WorkAssignments assignments = (from wa in context.WorkAssignments where (wa.IdWorkAssignment == assignmentId) && (wa.Active == true) select wa).FirstOrDefault(); if (existing != null && assignment != null) { if (assignment.InProgress == false || assignment.Completed == true) // Muutettu 4.5. { return(false); } else { // Timesheetin uudet arvot existing.StopTime = DateTime.Now; existing.WorkComplete = true; existing.LastModifiedAt = DateTime.Now; // Assignmentin uudet arvot assignment.LastModifiedAt = DateTime.Now; assignment.Completed = true; assignment.CompletedAt = DateTime.Now; assignment.InProgress = false; } } else { return(false); // Jos id tieto on null jommassa kummassa. } } context.SaveChanges(); // talletetaan kaikki em muutokset } catch { return(false); // Jos jotain muuta menee pileen. } finally { context.Dispose(); } return(true); // Mobiilisovellukselle palautetaan true }
// ----------------------- EVENT - ALOITA TYÖ ------------------------------------------// private async void btnStartWork_Clicked(object sender, EventArgs e) { string latitude = lblLatitude.Text; string longitude = lblLongitude.Text; //Tarkistetaan ensin, onko näkymässä valittu työtä. Muutetaan se string-muotoon string assignmentName = listWorkAssignments.SelectedItem?.ToString(); if (string.IsNullOrEmpty(assignmentName)) { await DisplayAlert("Työ puuttuu", "Valitse ensin aloitettava työ", "OK"); } else { //---- Jostain syystä LOPETA TYÖN kommentti ei tallentunut tietokantaan, jos tämä ALOITA TYÖ kommentti oli siellä jo. ----// string comment = await DisplayPromptAsync("Työn kommentti", "Kirjoita kommentti"); if (string.IsNullOrEmpty(comment)) { SelectedEmployee.StartComment = ""; } else { SelectedEmployee.StartComment = comment; } try { //Käytetään perustettua WorkAssignmentOperationModel-luokkaa ja luodaan objekti palvelimelle lähetettäväksi WorkAssignmentOperationModel operationData = new WorkAssignmentOperationModel() { Operation = "Start", AssignmentTitle = assignmentName, Name = SelectedEmployee.Name, Comment = SelectedEmployee.StartComment, Latitude = latitude, Longitude = longitude }; //HTTP-yhteyden alustaminen HttpClient client = new HttpClient(); client.BaseAddress = new Uri("https://timesheetrestapiske.azurewebsites.net/"); //Muutetaan operationData => JSON:ksi string operationInput = JsonConvert.SerializeObject(operationData); StringContent operationContent = new StringContent(operationInput, Encoding.UTF8, "application/json"); //Lähetetään serialisoitu objekti back-endille POST-pyyntönä HttpResponseMessage operationMessage = await client.PostAsync("api/workassignments", operationContent); //Otetaan vastaan palvelimen vastaus string operationReply = await operationMessage.Content.ReadAsStringAsync(); //Asetetaan operationReply deserialisoituna operationSuccess -muuttujaan bool operationSuccess = JsonConvert.DeserializeObject <bool>(operationReply); //Näytetään mobiilissa kuittausviesti if (operationSuccess) { await DisplayAlert("Työn aloitus", "Työ on aloitettu", "OK"); } else { await DisplayAlert("Työn aloitus", "Työtä ei voi aloittaa, koska se on jo aloitettu.", "Sulje"); } } catch (Exception ex) //otetaan poikkeus kiinni muuttujaan ex ja ja sijoitetaan errorMessageen { string errorMessage = ex.GetType().Name + ": " + ex.Message; //poikkeuksen selvittäminen listWorkAssignments.ItemsSource = new string[] { errorMessage }; //ja näytetään listViewssä mobiilissa } } }
public bool PostStatus(WorkAssignmentOperationModel input) { ProjektitDBCareContext context = new ProjektitDBCareContext(); try { // Haetaan aktiiviset työtehtävät nimen perusteella ja sijoitetaan se oneAssignment-muuttujaan WorkAssignments oneAssignment = (from wa in context.WorkAssignments where wa.Active == true && wa.Title == input.AssignmentTitle //Otsikko vastaa sitä, mitä mobiilisovellus on lähettänyt select wa).FirstOrDefault(); //Hajautetaan valitun työntekijän nimi kahteen muuttujaan etu- ja sukunimeksi //(Lisättiin WorkAssingmentOperationModel.cs:ään prop Name) string[] nameParts = input.Name.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); string fname = nameParts[0]; string lname = nameParts[1]; //Luodaan Employees tyyppinen olio (employee) edellisen nimen jaon perusteella Employees employee = (from e in context.Employees where e.Active == true && e.FirstName == fname && e.LastName == lname select e).FirstOrDefault(); if (oneAssignment == null) { return(false); } // ---------- Jos painettu "ALOITA TYÖ" -------------// else if (input.Operation == "Start") { if (oneAssignment.InProgress == true || oneAssignment.Completed == true) { return(false); } else { int assignmentId = oneAssignment.IdWorkAssignment; int employeeId = employee.IdEmployee; string oneComment = input.Comment; string latitude = input.Latitude; string longitude = input.Longitude; //Luodaan työlle uusi TimeSheet Timesheet newEntry = new Timesheet() { IdWorkAssignment = assignmentId, IdEmployee = employeeId, StartTime = DateTime.Now, Active = true, Comments = oneComment + " - " + fname, Longitude = longitude, Latitude = latitude, CreatedAt = DateTime.Now, LastModifiedAt = DateTime.Now }; context.Timesheet.Add(newEntry); //Päivitetään samalla myös WorkAssignments-taulua oneAssignment.InProgress = true; oneAssignment.WorkStartedAt = DateTime.Now; oneAssignment.LastModifiedAt = DateTime.Now; } //Tallennetaan kaikki em. muutokset tietokantaan context.SaveChanges(); } // ---------- Jos painettu "LOPETA TYÖ" -------------// else if (input.Operation == "Stop") { string oneFinalComment = input.Comment; int assignmentId = oneAssignment.IdWorkAssignment; //Haetaan tiedot Timesheet ja WorkAssignments-tauluista ja..... Timesheet timesheet = (from ts in context.Timesheet where ts.IdWorkAssignment == assignmentId && ts.Active == true select ts).FirstOrDefault(); WorkAssignments assignments = (from wa in context.WorkAssignments where wa.IdWorkAssignment == assignmentId && wa.Active == true select wa).FirstOrDefault(); //....muutetaan niiden tietoja if (timesheet != null && assignments != null) { if (assignments.InProgress == false || assignments.Completed == true) { return(false); } else { //Timesheet-taulun uudet tiedot timesheet.StopTime = DateTime.Now; timesheet.LastModifiedAt = DateTime.Now; timesheet.Comments = oneFinalComment + " - " + fname; //WorkAssignments-taulun uudet tiedot assignments.Completed = true; assignments.CompletedAt = DateTime.Now; assignments.InProgress = false; assignments.LastModifiedAt = DateTime.Now; } } else { return(false); //Jos id-tieto on null jommassa kummassa } } context.SaveChanges(); } catch (Exception) { return(false); //jos jotain meni pieleen } finally { context.Dispose(); } return(true); //Mobiilisovellukselle palautetaan true, kun kaikki onnistui }
public bool PostStatus(WorkAssignmentOperationModel input) { TimesheetMobileEntities entities = new TimesheetMobileEntities(); try { WorkAssignments assignment = (from wa in entities.WorkAssignments where (wa.Active == true) && (wa.Title == input.AssignmentTitle) select wa).FirstOrDefault(); if (assignment == null) { return(false); } if (input.Operation == "Start") { int assignmentId = assignment.Id_WorkAssignment; Timesheet newEntry = new Timesheet() { Id_WorkAssignment = assignmentId, WorkComplete = false, StartTime = DateTime.Now, Active = true, CreatedAt = DateTime.Now }; entities.Timesheet.Add(newEntry); } else if (input.Operation == "Stop") { int assignmentId = assignment.Id_WorkAssignment; Timesheet existing = (from ts in entities.Timesheet where (ts.Id_WorkAssignment == assignmentId) && (ts.Active == true) select ts).FirstOrDefault(); if (existing != null) { existing.StopTime = DateTime.Now; existing.WorkComplete = true; existing.LastModifiedAt = DateTime.Now; } else { return(false); } } entities.SaveChanges(); } catch { return(false); } finally { entities.Dispose(); } return(true); }
public bool PostStatus(WorkAssignmentOperationModel input) { MobileDBEntities1 entities = new MobileDBEntities1(); try { WorkAssignment assignment = (from e in entities.WorkAssignments where (e.Active == true) && (e.Title == input.AssignmentTitle) select e).FirstOrDefault(); if (assignment == null) { return(false); } if (input.Operation == "Start") { int assignmentId = assignment.Id_WorkAssignment; Timesheet newEntry = new Timesheet() { Id_WorkAssignment = assignmentId, StartTime = DateTime.Now, WorkComplete = false, Active = true, CreatedAt = DateTime.Now }; entities.Timesheets.Add(newEntry); //assignment.InProgress = true; //assignment.InProgressAt = DateTime.Now; //assignment.LastModifiedAt = DateTime.Now; } else if (input.Operation == "Stop") { int assignmentId = assignment.Id_WorkAssignment; Timesheet existing = (from op in entities.Timesheets where (op.Id_WorkAssignment == assignmentId) && (op.Active == true) && (op.WorkComplete == false) orderby op.StartTime descending select op).FirstOrDefault(); if (existing != null) { existing.StopTime = DateTime.Now; existing.WorkComplete = true; existing.LastModifiedAt = DateTime.Now; //assignment.InProgress = false; //assignment.Completed = true; //assignment.CompletedAt = DateTime.Now; //assignment.LastModifiedAt = DateTime.Now; } else { return(false); } } entities.SaveChanges(); } catch { return(false); } finally { entities.Dispose(); } return(true); }