Ignore Test

This commit is contained in:
Lyndon Jetten
2020-04-08 14:44:20 +02:00
parent ea43958717
commit 68816d3fb7
13 changed files with 584 additions and 876 deletions

View File

@@ -456,15 +456,15 @@ namespace BeWo.View
if (!_Code.Equals(""))
{
//Login _login = new Login(_kundennummer, _Code, _benutzername, _passwort, _apikey);
var login = new Login(_kundennummer, _Code, _benutzername, _passwort, _apikey);
//var x = _login.AnmeldevorgangDurchFuehren();
var x = login.AnmeldevorgangDurchFuehren();
//if (x != null)
//{
// ServiceChatView = new ChatView(x);
// ServiceChatView.Show();
//}
if(x != null)
{
ServiceChatView = new ChatView(x);
ServiceChatView.Show();
}
}
else
{

View File

@@ -202,7 +202,6 @@
<DependentUpon>TestWebService.asmx</DependentUpon>
<SubType>Component</SubType>
</Compile>
<Compile Include="Util\JSONCustomer.cs" />
<Compile Include="Util\MobileUtils.cs" />
<Compile Include="Util\ReferenceNumberWithNotice.cs" />
<Compile Include="Util\ServiceRecord2Validation.cs" />

View File

@@ -668,7 +668,15 @@ namespace BeWoPlanerMobil.Controllers
return RedirectToActionPermanent("Index", "Login");
}
if (string.IsNullOrEmpty(collection["Datum"]) || Model.NewServiceRecord == null)
{
return View("Main", Model);
}
string doku1;
var distanceInMeters = 0;
var dauer = 0;
var serviceDescOid = 0L;
if(Model.Dokutypes != null && Model.Dokutypes.Length > 0)
{
@@ -678,16 +686,18 @@ namespace BeWoPlanerMobil.Controllers
{
doku1 = collection["Dokumentation6"];
}
Log.Info($"CreateServiceRecord: datum:{collection["Datum"]}; start:{collection["Start"]}; ende:{collection["Ende"]}; dauer:{collection["Dauer"]}; doku:{doku1}; aktion:{collection["versteckt"]}");
if(string.IsNullOrEmpty(collection["Datum"]))
{
return View("Main", Model);
}
var doku2 = collection["Dokumentation2"];
var doku3 = collection["Dokumentation3"];
var doku4 = collection["Dokumentation4"];
var doku5 = collection["Dokumentation5"];
var distanz = collection["Distanz"];
var distanceInMeters = 0;
var start = collection["Start"];
var ende = collection["Ende"];
var endDateString = collection["Enddatum"];
var selectedCostbearerScRelOid = Model.CostBearer2SupportConceptOid < 1 ? null : Model.CostBearer2SupportConceptOid;
var datum = Convert.ToDateTime(collection["Datum"]);
if(!string.IsNullOrEmpty(distanz))
{
@@ -697,21 +707,15 @@ namespace BeWoPlanerMobil.Controllers
}
}
var selectedCostbearerScRelOid = Model.CostBearer2SupportConceptOid < 1 ? null : Model.CostBearer2SupportConceptOid;
var datum = Convert.ToDateTime(collection["Datum"]);
Log.Info($"CreateServiceRecord: datum:{collection["Datum"]}; start:{collection["Start"]}; ende:{collection["Ende"]}; dauer:{collection["Dauer"]}; doku:{doku1}; aktion:{collection["versteckt"]}");
var enddatum = datum;
var endDateString = collection["Enddatum"];
if(endDateString != null)
{
enddatum = Convert.ToDateTime(endDateString);
}
var start = collection["Start"];
var ende = collection["Ende"];
var dauer = 0;
if(datum > enddatum) {
enddatum = datum;
}
@@ -721,11 +725,6 @@ namespace BeWoPlanerMobil.Controllers
int.TryParse(collection["Dauer"], out dauer);
}
var doku2 = collection["Dokumentation2"];
var doku3 = collection["Dokumentation3"];
var doku4 = collection["Dokumentation4"];
var doku5 = collection["Dokumentation5"];
var zeitenFeld = new DateTime[2];
if(start == string.Empty && ende == string.Empty)
@@ -751,17 +750,10 @@ namespace BeWoPlanerMobil.Controllers
dauer = (int) (zeitenFeld[1] - zeitenFeld[0]).TotalMinutes;
}
if(Model.NewServiceRecord == null)
{
return RedirectToActionPermanent("Main");
}
Model.NewServiceRecord.IP = Request.UserHostAddress;
Model.NewServiceRecord.Goals = Model.SelectedGoals;
Model.NewServiceRecord.Start = zeitenFeld[0];
Model.NewServiceRecord.End = zeitenFeld[1];
Model.NewServiceRecord.DistanceInMeter = distanceInMeters;
if(Model.Employee.EmployeeOid != null)
@@ -810,14 +802,7 @@ namespace BeWoPlanerMobil.Controllers
Model.NewServiceRecord.Notice3 = string.IsNullOrEmpty(doku3) ? null : doku3;
Model.NewServiceRecord.Notice4 = string.IsNullOrEmpty(doku4) ? null : doku4;
Model.NewServiceRecord.Notice5 = string.IsNullOrEmpty(doku5) ? null : doku5;
var serviceDescOid = 0L;
//if(Model.SelectedServiceDescriptionOid.HasValue)
//{
// serviceDescOid = Model.SelectedServiceDescriptionOid.Value;
//}
//else
if(!string.IsNullOrEmpty(collection["ServiceDescription"]))
{
serviceDescOid = Convert.ToInt64(collection["ServiceDescription"]);
@@ -864,12 +849,237 @@ namespace BeWoPlanerMobil.Controllers
return RedirectToActionPermanent("Main");
}
[HttpPost]
[Authorize]
public ActionResult CreateOrUpdateServiceRecord(FormCollection collection)
{
try
{
if(Model == null)
{
return RedirectToActionPermanent("Index", "Login");
}
string doku1;
if(Model.Dokutypes != null && Model.Dokutypes.Length > 1)
{
doku1 = collection["Dokumentation"];
}
else
{
doku1 = collection["Dokumentation6"];
}
Log.Info($"CreateServiceRecord: datum:{collection["Datum"]}; start:{collection["Start"]}; ende:{collection["Ende"]}; dauer:{collection["Dauer"]}; doku:{doku1}; aktion:{(Model.IsInEditingMode ? "Speichern" : "Anlegen")}");
if(string.IsNullOrEmpty(collection["Datum"]))
{
return View("Main", Model);
}
var distanz = collection["Distanz"];
var distanceInMeters = 0;
if(!string.IsNullOrEmpty(distanz))
{
if(int.TryParse(distanz, out var parsedDistance))
{
distanceInMeters = parsedDistance;
}
}
var selectedCostbearerSCRelOid = Model.CostBearer2SupportConceptOid < 1 ? null : Model.CostBearer2SupportConceptOid;
var datum = Convert.ToDateTime(collection["Datum"]);
var enddatum = datum;
var start = collection["Start"];
var ende = collection["Ende"];
var dauer = 0;
if(datum > enddatum)
{
enddatum = datum;
}
if(!string.IsNullOrEmpty(collection["Dauer"]))
{
int.TryParse(collection["Dauer"], out dauer);
}
var doku2 = collection["Dokumentation2"];
var doku3 = collection["Dokumentation3"];
var doku4 = collection["Dokumentation4"];
var doku5 = collection["Dokumentation5"];
var zeitenFeld = new DateTime[2];
if(start == string.Empty && ende == string.Empty)
{
zeitenFeld[0] = new DateTime(datum.Year, datum.Month, datum.Day, 0, 0, 1);
if(enddatum == datum)
{
zeitenFeld[1] = new DateTime(datum.Year, datum.Month, datum.Day, 0, 0, 1).AddMinutes(dauer);
}
else
{
zeitenFeld[1] = new DateTime(enddatum.Year, enddatum.Month, enddatum.Day, 0, 0, 1).AddMinutes(dauer);
}
}
else
{
zeitenFeld = enddatum == datum ? ConvertRecordTimes(start, ende, datum, dauer) : ConvertRecordTimesWithEndDate(start, ende, datum, enddatum, dauer);
}
if(dauer == 0 || zeitenFeld[1] != zeitenFeld[0])
{
dauer = (int)(zeitenFeld[1] - zeitenFeld[0]).TotalMinutes;
}
if(Model.IsInEditingMode)
{
var selectedRecordOid = Model.SelectedServiceRecordOid ?? Model.SelectedServiceRecord.ServiceRecordOid;
Model.NewServiceRecord = OperationsService.GetServiceRecordById(selectedRecordOid.Value);
}
if(Model.NewServiceRecord == null)
{
return RedirectToActionPermanent("Main");
}
Model.NewServiceRecord.IP = Request.UserHostAddress;
Model.NewServiceRecord.Goals = Model.SelectedGoals;
Model.NewServiceRecord.Start = zeitenFeld[0];
Model.NewServiceRecord.End = zeitenFeld[1];
Model.NewServiceRecord.DistanceInMeter = distanceInMeters;
if(Model.Employee.EmployeeOid != null)
{
if(!Model.IsInEditingMode)
{
Model.NewServiceRecord.Employee = Model.SelectedEmployee ?? MobileSessionFacade.LoggedInCompactEmployee;
}
else
{
if(Model.SelectedEmployee != null)
{
Model.NewServiceRecord.Employee = Model.SelectedEmployee;
}
}
var sc = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.HasValue && a.CostBearer2SupportConceptOid.Value.Equals(selectedCostbearerSCRelOid)));
if(sc != null)
{
if(sc.SupportConceptOid != null)
{
Model.NewServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(sc.SupportConceptOid.Value, Model.Employee.EmployeeOid);
}
Model.NewServiceRecord.Customer = sc.Customer;
var cb2ScRel = sc.CostBearerRelations.First(f => f.CostBearer2SupportConceptOid.HasValue && f.CostBearer2SupportConceptOid.Equals(selectedCostbearerSCRelOid));
Model.NewServiceRecord.CostBearer = cb2ScRel.CostBearer;
var intervall = Model.NewServiceRecord.CostBearer.ActualMinuteIntervall;
if(intervall > 0)
{
Model.NewServiceRecord.RoundedDuration = dauer % intervall != 0 ? dauer + (intervall - dauer % intervall) : dauer;
}
else
{
Model.NewServiceRecord.RoundedDuration = dauer;
}
Model.NewServiceRecord.CostBearer2SupportConceptOid = selectedCostbearerSCRelOid;
}
else
{
Model.NewServiceRecord.RoundedDuration = dauer;
}
}
Model.NewServiceRecord.DurationInStunden = ZeiterfassungsDauer.Minuten;
Model.NewServiceRecord.ServiceRecordFormat = ServiceRecordFormate.OriginaleZeiterfassung;
Model.NewServiceRecord.Notice = string.IsNullOrEmpty(doku1) ? null : doku1;
Model.NewServiceRecord.Notice2 = string.IsNullOrEmpty(doku2) ? null : doku2;
Model.NewServiceRecord.Notice3 = string.IsNullOrEmpty(doku3) ? null : doku3;
Model.NewServiceRecord.Notice4 = string.IsNullOrEmpty(doku4) ? null : doku4;
Model.NewServiceRecord.Notice5 = string.IsNullOrEmpty(doku5) ? null : doku5;
var serviceDescOid = 0L;
if(!string.IsNullOrEmpty(collection["ServiceDescription"]))
{
serviceDescOid = Convert.ToInt64(collection["ServiceDescription"]);
}
else if(Model.SelectedServiceDescriptionOid.HasValue)
{
serviceDescOid = Model.SelectedServiceDescriptionOid.Value;
}
if(serviceDescOid > 0)
{
Model.NewServiceRecord.ServiceDescription = OperationsService.GetServiceDescription(serviceDescOid);
}
if(Model.NewServiceRecord.RoundedDuration == 0)
{
Model.NewServiceRecord.RoundedDuration = dauer;
}
Model.NewServiceRecord.IP = Request.UserHostAddress;
Model.NewServiceRecord.InsertedOn = DateTime.Now;
Model.NewServiceRecord.InsUser = $"{MobileSessionFacade.LoggedInEmployee.FirstName} {MobileSessionFacade.LoggedInEmployee.LastName}";
Model.NewServiceRecord.IsCreatedInMobileClient = true;
if(Model.IsInGroupBookingMode && Model.SelectedSupportConcepts.Count > 1)
{
return Model.NewServiceRecord.ServiceRecordOid.HasValue ? SaveGroupBooking() : UpdateGroupBooking();
}
if(!Model.IsInEditingMode)
{
var oidList = OperationsService.InsertNewServiceRecords(new List<ServiceRecordDC> { Model.NewServiceRecord });
Model.ServiceRecordOid = oidList[0];
}
else
{
OperationsService.UpdateServiceRecords(new List<ServiceRecordDC> { Model.NewServiceRecord });
}
Model.NewServiceRecord = new ServiceRecordDC();
if(selectedCostbearerSCRelOid.HasValue)
{
Model.ServiceRecords = OperationsService.FindServiceRecordsForLastDays(selectedCostbearerSCRelOid, Model.Zeitraum, Model.Employee.EmployeeOid).ToList();
}
}
catch (Exception e)
{
Log.Error(e.Message, e);
}
return RedirectToActionPermanent("Main");
}
private ActionResult SaveGroupBooking()
{
var employeeCount = Model.SelectedEmployees.Count;
var personCount = Model.SelectedSupportConcepts.Count;
var cb2ScOids = (from scDc in Model.SelectedSupportConcepts where scDc.CostBearerRelations != null && scDc.CostBearerRelations.Count > 0 let costBearer2SupportConceptOid = scDc.CostBearerRelations[0].CostBearer2SupportConceptOid where costBearer2SupportConceptOid != null select costBearer2SupportConceptOid.Value).ToList();
var cb2ScOids = (from scDc in Model.SelectedSupportConcepts
where scDc.CostBearerRelations != null && scDc.CostBearerRelations.Count > 0 let costBearer2SupportConceptOid = scDc.CostBearerRelations[0].CostBearer2SupportConceptOid
where costBearer2SupportConceptOid != null select costBearer2SupportConceptOid.Value).ToList();
var list = CalculateGroupBookingDuration(employeeCount, personCount, cb2ScOids);
@@ -918,6 +1128,7 @@ namespace BeWoPlanerMobil.Controllers
}
}
Model.NewServiceRecord = new ServiceRecordDC();
Model.SelectedSupportConcepts.Clear();
Model.SelectedConceptCostBearerRelations.Clear();
Model.SelectedCostbearerRelOids.Clear();
@@ -1285,7 +1496,7 @@ namespace BeWoPlanerMobil.Controllers
LoadGoalTreeItems();
return RedirectToActionPermanent("Main");
return ResetEditingMode(null);
}
private void LoadServiceCategoriesToModel(long? cb2ScOid)
@@ -1607,12 +1818,21 @@ namespace BeWoPlanerMobil.Controllers
}
var mandator = OperationsService.GetMandator();
var settings = mandator.Settings ?? string.Empty;
var splitSettings = settings.Split(';');
var maxDaysEditSRsAllowedSetting = splitSettings.ToList().FirstOrDefault(f => f.Contains("MaxDaysEditServiceRecordsAllowed"));
var maxDaysEditSRsAllowed = maxDaysEditSRsAllowedSetting != null ? int.Parse(maxDaysEditSRsAllowedSetting.Split('=')[1]) : 0;
var limitFuerZeiterfassungSetting = splitSettings.ToList().FirstOrDefault(f => f.Contains("AnzTageZeiterfassErfolgt"));
var limitFuerZeiterfassung = limitFuerZeiterfassungSetting != null ? int.Parse(limitFuerZeiterfassungSetting.Split('=')[1]) : 0;
var maxDaysEditSRsAllowedString = GetSettingValue(mandator.Settings, "MaxDaysEditServiceRecordsAllowed");
var limitFuerZeiterfassungString = GetSettingValue(mandator.Settings, "AnzTageZeiterfassErfolgt");
var isSuccessful1 = int.TryParse(maxDaysEditSRsAllowedString, out var maxDaysEditSRsAllowed);
if (!isSuccessful1)
{
maxDaysEditSRsAllowed = 0;
}
var isSuccessful2 = int.TryParse(limitFuerZeiterfassungString, out var limitFuerZeiterfassung);
if(!isSuccessful2)
{
limitFuerZeiterfassung = 0;
}
if (MobileSessionFacade.CheckForUserRight(UserRightType.ServiceRecord_AllowEditAfterMaxDaysInNextMonth))
{
@@ -1855,6 +2075,7 @@ namespace BeWoPlanerMobil.Controllers
return _LeerzeichenFuerGetMethoden;
}
// Menünavigation
public ActionResult RedirectToScheduler()
{
return RedirectToActionPermanent("Scheduler", "Scheduler");
@@ -1921,6 +2142,9 @@ namespace BeWoPlanerMobil.Controllers
Model.ServiceCategories = CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions());
Model.SelectedEmployees.Add(MobileSessionFacade.LoggedInCompactEmployee);
Model.IsInEditingMode = false;
Model.SelectedServiceRecord = null;
}
else
{
@@ -2160,6 +2384,26 @@ namespace BeWoPlanerMobil.Controllers
return RedirectToActionPermanent("Index", "Login");
}
if(Model.SelectedConceptCostBearerRelations.Count == 1)
{
var cb2ScOids = (from scDc in Model.SelectedSupportConcepts
where scDc.CostBearerRelations != null && scDc.CostBearerRelations.Count > 0
let costBearer2SupportConceptOid = scDc.CostBearerRelations[0].CostBearer2SupportConceptOid
where costBearer2SupportConceptOid != null
select costBearer2SupportConceptOid.Value).ToList();
var cb2ScOidsCount = cb2ScOids.Count;
if (cb2ScOidsCount == 1)
{
Model.CostBearer2SupportConceptOid = cb2ScOids[0];
}
else
{
return RedirectToActionPermanent("Main");
}
}
string doku1;
if(Model.Dokutypes != null && Model.Dokutypes.Length > 0)

View File

@@ -186,34 +186,6 @@ namespace BeWoPlanerMobil.Models
public List<SupportConceptCostBearerRelDC> SelectedConceptCostBearerRelations { get; set; }
public IEnumerable<CustomSelectListItem> SelectedRelations
{
get
{
var result = new List<CustomSelectListItem>();
foreach(var rel in SelectedConceptCostBearerRelations)
{
var text1 = $"{rel.SupportConcept.Customer.LastNameFirstName}";
var text2 = $"{rel.StartDate?.ToShortDateString() ?? string.Empty} - {rel.EndDate?.ToShortDateString()} {rel.CostBearer.Name}";
var value = rel.CostBearer2SupportConceptOid.ToString();
var textColor = rel.SupportConcept.IsAboutToExpire ?
"text-bewo-is-about-to-expire" :
rel.SupportConcept.ExpiresIn3MonthOrLess ?
"text-bewo-expires-in-three-months" :
"text-dark";
var listItem = new CustomSelectListItem(text1, text2, value, textColor);
result.Add(listItem);
}
return result;
}
}
public GroupBookingSelectionObject GroupBookingSelectionObject => new GroupBookingSelectionObject(SelectedConceptCostBearerRelations, SelectedGroupOfPeopleOids);
public IEnumerable<SupportConceptListObject> SupportConceptListObjectsForGroupBooking
@@ -454,6 +426,26 @@ namespace BeWoPlanerMobil.Models
}
public bool IsZeiterfassungInStdMin { get; set; }
public string StartDateToEdit => SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
public string EndDateToEdit => SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
public string StartTimeToEdit => SelectedServiceRecord?.Start?.ToString("HH:mm") ?? string.Empty;
public string EndTimeToEdit => SelectedServiceRecord?.End?.ToString("HH:mm") ?? string.Empty;
public string DurationToEdit => SelectedServiceRecord?.RoundedDuration.ToString() ?? string.Empty;
public string DistanceToEdit => SelectedServiceRecord?.DistanceInMeter.ToString() ?? string.Empty;
public string NoticeToEdit => SelectedServiceRecord?.NoticeList.FirstOrDefault() ?? string.Empty;
public List<string> NoticeListToEdit => SelectedServiceRecord != null ? SelectedServiceRecord.NoticeList : new List<string> {string.Empty, string.Empty, string.Empty, string.Empty, string.Empty};
public string SubmitButtonValue => IsInEditingMode || IsInGroupBookingMode ? "Speichern" : "Anlegen";
public long SelectedServiceRecordsServiceDescriptionOid => SelectedServiceRecord?.ServiceDescription.ServiceDescriptionOid ?? 0L;
}
public class CustomSelectListItem

View File

@@ -33,10 +33,28 @@ function loadServiceDescriptions() {
serviceDescriptionsSelect.append('<option value="' + serviceDescription.ServiceDescriptionOid + '">' + serviceDescription.Name + "</option>");
});
if (serviceDescriptions[0] !== undefined) {
serviceDescriptionsSelect.val(serviceDescriptions[0].ServiceDescriptionOid);
var serviceDescriptionToEdit = getServiceDescriptionToEdit();
$.get(getSetServiceDescriptionUrl(), { pServiceDescriptionOid: serviceDescriptions[0].ServiceDescriptionOid });
var selectedOid = 0;
if (serviceDescriptionToEdit > 0) {
$("#leistung-select > option").each(function() {
var val = $(this).val();
if (serviceDescriptionToEdit == val) {
serviceDescriptionsSelect.val(val);
selectedOid = val;
}
});
} else {
if(serviceDescriptions[0] !== undefined) {
serviceDescriptionsSelect.val(serviceDescriptions[0].ServiceDescriptionOid);
selectedOid = serviceDescriptions[0].ServiceDescriptionOid;
}
}
if (selectedOid > 0) {
$.get(getSetServiceDescriptionUrl(), { pServiceDescriptionOid: selectedOid });
}
$.get(getLoadTextbausteineForServiceCategoryUrl(), { pServiceCategoryOid: selectedCategoryOid }).done(function(result) {
@@ -239,6 +257,16 @@ function resetCreateForm() {
$("#serviceRecordCreationForm").trigger("reset");
}
function resetSingleBookingForm() {
$("#singleBookingForm").trigger("reset");
}
function submitSingleBookingForm() {
showSpinner();
validateForm($("#singleBookingForm"));
}
function submitCreateForm() {
showSpinner();

View File

@@ -1,121 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
namespace BeWoPlanerMobil.Util
{
public class JSONCustomer
{
public string Vorname { get; set; }
public string Nachname { get; set; }
public string Geburtstag { get; set; }
public string Geschlecht { get; set; }
public string Adresszusatz { get; set; }
public string Strasse { get; set; }
public string Postleitzahl { get; set; }
public string Ort { get; set; }
public string RechnungsadresseName { get; set; }
public string RechnungsadresseStrasse { get; set; }
public string RechnungsadressePostleitzahl { get; set; }
public string RechnungsadresseOrt { get; set; }
public string EMail { get; set; }
public string Fax { get; set; }
public string Telefon { get; set; }
public string Handy { get; set; }
public string Kommentar { get; set; }
public List<Umfeldsperson> Umfeldpersonen { get; set; } = new List<Umfeldsperson>();
public List<ReferenceNumberWithNotice> ReferenceNumbers { get; set; } = new List<ReferenceNumberWithNotice>();
public List<JsonAbsenceTime> AbsenceTimes { get; set; } = new List<JsonAbsenceTime>();
public string GoogleMapsLink
{
get
{
if(!string.IsNullOrWhiteSpace(Strasse) && !string.IsNullOrWhiteSpace(Postleitzahl) && !string.IsNullOrWhiteSpace(Ort))
{
var htmlEncodedStreetname = HttpUtility.UrlEncode(Strasse);
var htmlEncodedCityName = HttpUtility.UrlEncode(Ort);
return $"http://maps.google.de/maps?q={htmlEncodedStreetname},+{Postleitzahl}+{htmlEncodedCityName}&z=17";
}
return "#";
}
}
public JSONCustomer(CustomerDC init)
{
Vorname = init.FirstName;
Nachname = init.LastName;
Geburtstag = init.DateOfBirth?.ToShortDateString() ?? string.Empty;
switch (init.Sex)
{
case Sex.Male:
Geschlecht = "Männlich";
break;
case Sex.Female:
Geschlecht = "Weiblich";
break;
case Sex.Divers:
Geschlecht = "Divers";
break;
default:
Geschlecht = string.Empty;
break;
}
Adresszusatz = init.AddressLine1;
Strasse = init.Street;
Postleitzahl = init.PostalCode;
Ort = init.Town;
RechnungsadresseName = init.InvoiceAddressLine1;
RechnungsadresseStrasse = init.InvoiceAddressStreet;
RechnungsadressePostleitzahl = init.InvoiceAddressPostalCode;
RechnungsadresseOrt = init.InvoiceAddressTown;
Kommentar = init.Notice;
init.CostBearers?.DoForEach(cb => { ReferenceNumbers.AddIfNotIn(new ReferenceNumberWithNotice(cb.ReferenceNumber, cb.Notice, cb.CostBearer.Name)); });
foreach (var iContactDC in init.ContactInformations)
{
switch (iContactDC.ContactType)
{
case ContactType.business_Mail:
EMail = iContactDC.ContactValue;
break;
case ContactType.business_Fax:
Fax = iContactDC.ContactValue;
break;
case ContactType.business_Phone:
Telefon = iContactDC.ContactValue;
break;
case ContactType.business_MobilePhone:
Handy = iContactDC.ContactValue;
break;
}
}
foreach (var rel in init.EnvironmentPersons)
{
Umfeldpersonen.Add(new Umfeldsperson(rel));
}
foreach (var absenceTime in init.AbsenceTimes.OrderByDescending(o => o.Start))
{
AbsenceTimes.Add(new JsonAbsenceTime(absenceTime.Start, absenceTime.End, absenceTime.Notice, absenceTime.Reason));
}
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
@@ -220,11 +221,6 @@ namespace BeWoPlanerMobil.Util
return null;
}
public static JSONCustomer GetJSONCustomer(CustomerDC pCustomer)
{
return new JSONCustomer(pCustomer);
}
public static List<ServiceCategoryModel> CreateServiceCategoryModels(IEnumerable<ServiceDescriptionDC> serviceDescriptions)
{
var catOid2ModelDict = new Dictionary<long, ServiceCategoryModel>();
@@ -381,6 +377,8 @@ namespace BeWoPlanerMobil.Util
public static BeWoLoginState GetLoginState(string tenant)
{
Debug.WriteLine($"GetLoginState {DateTime.Now:DD.MM.yyyy HH:mm:sss}");
var result = new BeWoLoginState(-1, null);
const string baseUrl = "https://support.bewoplaner.de/api";

View File

@@ -252,6 +252,16 @@
return boolString.toLowerCase() === "true";
}
function getServiceDescriptionToEdit() {
if (getIsInEditingMode()) {
var floatString = "@Model.SelectedServiceRecordsServiceDescriptionOid";
return parseFloat(floatString);
} else {
return 0;
}
}
</script>
<div class="container mt-3" id="checkbox-container">
@@ -297,481 +307,277 @@
@if(!Model.IsInGroupBookingMode)
{
<div class="row">
<div class="col col-12 col-md-5">
@if(Model != null)
{
using(Html.BeginForm("SelectSupportConcept", "Main", FormMethod.Post, new { Id = "selectSupportConceptForm" }))
{
var selectedSuportConceptTimeSpanColorClass = Model.SelectedSupportConceptListObject.IsAboutToExpire ? "text-bewo-is-about-to-expire" : Model.SelectedSupportConceptListObject.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
<div>
<div class="container p-0">
<div class="row">
<div class="col mt-3">
<div class="list-group">
<a href="#" class="list-group-item flex-column align-items-start no-underline" data-toggle="modal" data-target="#supportConceptList">
<div class="d-flex">
<h5 class="mb-1 text-dark text-left" id="selectedSupportConceptCustomerInfo">@Model.SelectedSupportConceptListObject.NameAndDateOfBirth</h5>
<div class="col col-12 col-md-5">
@if(Model != null)
{
using(Html.BeginForm("SelectSupportConcept", "Main", FormMethod.Post, new { Id = "selectSupportConceptForm" }))
{
var selectedSuportConceptTimeSpanColorClass = Model.SelectedSupportConceptListObject.IsAboutToExpire ? "text-bewo-is-about-to-expire" : Model.SelectedSupportConceptListObject.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
<div>
<div class="container p-0">
<div class="row">
<div class="col mt-3">
<div class="list-group">
<a href="#" class="list-group-item flex-column align-items-start no-underline" data-toggle="modal" data-target="#supportConceptList">
<div class="d-flex">
<h5 class="mb-1 text-dark text-left" id="selectedSupportConceptCustomerInfo">@Model.SelectedSupportConceptListObject.NameAndDateOfBirth</h5>
</div>
<p class="mb-1 text-left @selectedSuportConceptTimeSpanColorClass" id="selectedSupportConceptInfo">
@Model.SelectedSupportConceptListObject.SupportConceptTimeSpan
</p>
</a>
</div>
<p class="mb-1 text-left @selectedSuportConceptTimeSpanColorClass" id="selectedSupportConceptInfo">
@Model.SelectedSupportConceptListObject.SupportConceptTimeSpan
</p>
</a>
</div>
</div>
@if(Model.CostBearer2SupportConceptOid != null && Model.CostBearer2SupportConceptOid > 0)
{
<div class="col-md-auto mt-3">
<button type="button" class="btn btn-outline-primary w-100 h-100" id="statistics-button" data-toggle="modal" data-target="#statistics-popup" onclick="showPieChart()">
<span class="d-md-none align-middle">Statistik</span>
<span class="fas fa-chart-pie align-middle" style="font-size: 2rem;"></span>
</button>
</div>
}
</div>
</div>
</div>
<div class="modal" role="dialog" tabindex="-1" id="supportConceptList">
<div class="modal-dialog modal-dialog-centered text-center" role="document">
<div class="modal-content">
<div class="modal-body">
<div class="list-group">
@foreach(var supportConceptListObject in Model.SupportConceptListObjects)
</div>
@if(Model.CostBearer2SupportConceptOid != null && Model.CostBearer2SupportConceptOid > 0)
{
var timeSpanColorClass = supportConceptListObject.IsAboutToExpire ? "text-bewo-is-about-to-expire" : supportConceptListObject.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
<a href="#" class="list-group-item flex-column align-items-start no-underline" onclick="selectSupportConcept(@supportConceptListObject.CostBearer2SupportConceptOid)" data-dismiss="modal">
<div class="justify-content-between">
<h5 class="mb-1 text-dark text-left">
@supportConceptListObject.NameAndDateOfBirth
</h5>
</div>
<p class="mb-1 text-left @timeSpanColorClass">
@supportConceptListObject.SupportConceptTimeSpan
</p>
</a>
<div class="col-md-auto mt-3">
<button type="button" class="btn btn-outline-primary w-100 h-100" id="statistics-button" data-toggle="modal" data-target="#statistics-popup" onclick="showPieChart()">
<span class="d-md-none align-middle">Statistik</span>
<span class="fas fa-chart-pie align-middle" style="font-size: 2rem;"></span>
</button>
</div>
}
</div>
</div>
</div>
</div>
</div>
<div class="modal" role="dialog" tabindex="-1" id="supportConceptList">
<div class="modal-dialog modal-dialog-centered text-center" role="document">
<div class="modal-content">
<div class="modal-body">
<div class="list-group">
@foreach(var supportConceptListObject in Model.SupportConceptListObjects)
{
var timeSpanColorClass = supportConceptListObject.IsAboutToExpire ? "text-bewo-is-about-to-expire" : supportConceptListObject.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
<input type="text" class="d-none" name="CostBearer2SupportConceptOid" id="CostBearer2SupportConceptOid" value="@Model.SelectedSupportConceptListObject.CostBearer2SupportConceptOid">
}
if(!Model.IsInEditingMode)
{
using(Html.BeginForm("CreateServiceRecord", "Main", FormMethod.Post, new { onreset = "serviceDescriptionSelectOnReset()", id = "serviceRecordCreationForm" }))
{
<div class="mt-3">
<div class="form-row">
<div class="col-md">
<div class="alert alert-danger collapse" role="alert" id="form-alert">
</div>
</div>
</div>
<!-- Einzelbuchung: Mitarbeiter -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
@Html.LabelFor(m => m.SelectedEmployeeOid)
@Html.DropDownListFor(m => m.SelectedEmployeeOid, Model.EmployeeListItems, new { id = "employeesDropDown", @class = "form-control", onchange = "setSelectedEmployee()" })
</div>
</div>
</div>
@if(Model.SelectedSupportConcept != null && Model.SelectedSupportConcept.Goals.Any())
{
<!-- Einzelbuchung: Ziele -->
<div class="form-row">
<div class="col-md">
<button type="button" class="btn btn-primary form-control my-3" data-toggle="collapse" data-target="#goals-container" id="goals-button">Ziele</button>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="collapse w-100 mt-1 max-vw-50" id="goals-container"></div>
</div>
</div>
}
<!-- Einzelbuchung: Kategorie -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
@Html.LabelFor(m => m.SelectedServiceCategoryOid)
@Html.DropDownListFor(m => m.SelectedServiceCategoryOid, Model.ServiceCategoryListItems, new { onchange = "loadServiceDescriptions()", @class = "form-control", Id = "category-select" })
</div>
</div>
</div>
<!-- Einzelbuchung: Leistung -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="leistung-select">Leistung</label>
<select class="form-control" id="leistung-select" name="ServiceDescription">
</select>
</div>
</div>
</div>
<!-- Einzelbuchung: Startdatum -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="start-date">Startdatum</label>
<div class="input-group date" id="start-date-picker" data-target-input="nearest">
<input type="text" id="start-date" name="Datum" class="form-control datetimepicker-input" data-target="#start-date-picker" data-toggle="datetimepicker" value="@DateTime.Today.ToShortDateString()" />
<div class="input-group-append" data-target="#start-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
<a href="#" class="list-group-item flex-column align-items-start no-underline" onclick="selectSupportConcept(@supportConceptListObject.CostBearer2SupportConceptOid)" data-dismiss="modal">
<div class="justify-content-between">
<h5 class="mb-1 text-dark text-left">
@supportConceptListObject.NameAndDateOfBirth
</h5>
</div>
<p class="mb-1 text-left @timeSpanColorClass">
@supportConceptListObject.SupportConceptTimeSpan
</p>
</a>
}
</div>
</div>
</div>
</div>
</div>
<input type="text" class="d-none" name="CostBearer2SupportConceptOid" id="CostBearer2SupportConceptOid" value="@Model.SelectedSupportConceptListObject.CostBearer2SupportConceptOid">
}
<!-- Zwei-in-eins-Test -->
using (Html.BeginForm("CreateOrUpdateServiceRecord", "Main", FormMethod.Post, new { onreset = "serviceDescriptionSelectOnReset()", id = "singleBookingForm" }))
{
<div class="mt-3">
<!-- Einzelbuchung: Mitarbeiter -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
@Html.LabelFor(m => m.SelectedEmployeeOid)
@Html.DropDownListFor(m => m.SelectedEmployeeOid, Model.EmployeeListItems, new { id = "employeesDropDown", @class = "form-control", onchange = "setSelectedEmployee()" })
</div>
</div>
</div>
<!-- Einzelbuchung: Enddatum -->
@if(Model.IsEndDateVisible)
@if(Model.SelectedSupportConcept != null && Model.SelectedSupportConcept.Goals.Any())
{
<!-- Einzelbuchung: Ziele -->
<div class="form-row">
<div class="col-md">
<button type="button" class="btn btn-primary form-control my-3" data-toggle="collapse" data-target="#goals-container" id="goals-button">Ziele</button>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="collapse w-100 mt-1 max-vw-50" id="goals-container"></div>
</div>
</div>
}
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="start-date">Enddatum</label>
<div class="input-group date" id="end-date-picker" data-target-input="nearest">
<input type="text" id="end-date" name="Enddatum" class="form-control datetimepicker-input" data-target="#end-date-picker" data-toggle="datetimepicker" value="@DateTime.Today.ToShortDateString()" />
<div class="input-group-append" data-target="#end-date-picker" data-toggle="datetimepicker">
@Html.LabelFor(m => m.SelectedServiceCategoryOid)
@Html.DropDownListFor(m => m.SelectedServiceCategoryOid, Model.ServiceCategoryListItems, new { onchange = "loadServiceDescriptions()", @class = "form-control", Id = "category-select" })
</div>
</div>
</div>
<!-- Einzelbuchung: Leistung -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="leistung-select">Leistung</label>
<select class="form-control" id="leistung-select" name="ServiceDescription">
</select>
</div>
</div>
</div>
<!-- Einzelbuchung: Startdatum -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="start-date">Startdatum</label>
<div class="input-group date" id="start-date-picker" data-target-input="nearest">
<input type="text" id="start-date" name="Datum" class="form-control datetimepicker-input" data-target="#start-date-picker" data-toggle="datetimepicker" value="@Model.StartDateToEdit" />
<div class="input-group-append" data-target="#start-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
}
</div>
<div class="form-row">
<!-- Einzelbuchung: Von -->
<div class="col-md">
<div class="form-group mb-1">
<label for="start-time">Von</label>
<div class="input-group date" id="start-time-picker" data-target-input="nearest">
<input type="text" id="start-time" name="Start" class="form-control datetimepicker-input" data-target="#start-time-picker" />
<div class="input-group-append" data-target="#start-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
<!-- Einzelbuchung: Enddatum -->
@if(Model.IsEndDateVisible)
{
<div class="col-md">
<div class="form-group mb-1">
<label for="start-date">Enddatum</label>
<div class="input-group date" id="end-date-picker" data-target-input="nearest">
<input type="text" id="end-date" name="Enddatum" class="form-control datetimepicker-input" data-target="#end-date-picker" data-toggle="datetimepicker" value="@Model.EndDateToEdit" />
<div class="input-group-append" data-target="#end-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
</div>
}
</div>
<!-- Einzelbuchung: Bis -->
<div class="col-md">
<div class="form-group mb-1">
<label for="end-time">Bis</label>
<div class="input-group date" id="end-time-picker" data-target-input="nearest">
<input type="text" id="end-time" name="Ende" class="form-control datetimepicker-input" data-target="#end-time-picker" />
<div class="input-group-append" data-target="#end-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
</div>
<!-- Einzelbuchung: Dauer -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="duration">Dauer</label>
<input type="text" class="form-control" id="duration" name="Dauer" onchange="onDurationChange()">
</div>
</div>
@if(Model.IsZeiterfassungInStdMin)
{
<div class="form-row">
<!-- Einzelbuchung: Von -->
<div class="col-md">
<div class="form-group mb-1">
<label for="hours-minutes-dropdown-btn">Minuten/Stunden</label>
<div class="dropdown">
<button id="hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle w-100" type="button" data-toggle="dropdown">
Minuten
</button>
<div class="dropdown-menu w-100">
<a class="dropdown-item" href="#" onclick="toggleHoursMinutesDropdownButton(this)">Minuten</a>
<a class="dropdown-item" href="#" onclick="toggleHoursMinutesDropdownButton(this)">Stunden</a>
<label for="start-time">Von</label>
<div class="input-group date" id="start-time-picker" data-target-input="nearest">
<input type="text" id="start-time" name="Start" class="form-control datetimepicker-input" data-target="#start-time-picker" value="@Model.StartTimeToEdit" />
<div class="input-group-append" data-target="#start-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
}
</div>
<!-- Einzelbuchung: Distanz -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="distance">Gefahrene Kilometer</label>
<input class="form-control" id="distance" name="Distanz" onchange="validateDistanceInput()">
</div>
</div>
</div>
@if(AbstractModel.HasRightToSeeTextModules)
{
<!-- Einzelbuchung: Textbausteine -->
<div class="form-row">
<div class="col-md">
<button type="button" class="btn btn-primary form-control mt-3" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button">Textbausteine</button>
</div>
</div>
}
<!-- Einzelbuchung: Dokumentation -->
<div class="form-row">
<div class="col-md mt-3">
@if(Model.NumberOfDokuTypes == 0)
{
<div class="form-group">
<label for="dokufeld">Dokumentation</label>
<textarea class="form-control" name="Dokumentation6" id="dokufeld"></textarea>
</div>
}
else
{
<ul class="nav nav-tabs" role="tab-list">
@for(var i = 0; i < Model.Dokutypes.Length; i++)
{
var currentDokuType = Model.Dokutypes[i];
<li class="nav-item">
<a href="#doku_@i" id="doku_@i-tab" data-toggle="tab" role="tab" aria-controls="doku_@i" class="nav-link@(i == 0 ? " active" : string.Empty)" aria-selected="true">
@currentDokuType.DisplayName
</a>
</li>
}
</ul>
<div class="tab-content" id="dokufelderTab">
@for(var i = 0; i < Model.Dokutypes.Length; i++)
{
var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1);
<div class="tab-pane show@(i == 0 ? " active" : string.Empty)" id="doku_@i" role="tabpanel" aria-labelledby="doku_@i-tab">
<textarea class="form-control doku-form-control" id="doku-textarea-@i" name="@textareaName"></textarea>
</div>
}
</div>
}
</div>
<input type="hidden" name="versteckt" value="Anlegen">
</div>
</div>
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="reset-button" onclick="resetCreateForm()">Abbrechen</button>
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="create-button" onclick="submitCreateForm()">Anlegen</button>
</div>
</div>
}
}
else
{
using(Html.BeginForm("EditServiceRecord", "Main", FormMethod.Post, new { id = "serviceRecordEditForm" }))
{
<div class="mt-3">
<div class="form-row">
<div class="col-md">
<div class="alert alert-danger collapse" role="alert" id="form-alert">
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
@Html.LabelFor(m => m.SelectedEmployeeOid)
@Html.DropDownListFor(m => m.SelectedEmployeeOid, Model.EmployeeListItems, new { id = "employeesDropDown", @class = "form-control", onchange = "setSelectedEmployee()" })
</div>
</div>
</div>
@if(Model.SelectedSupportConcept != null && Model.SelectedSupportConcept.Goals.Any())
{
<div class="form-row">
<div class="col-md">
<button type="button" class="btn btn-primary form-control my-3" data-toggle="collapse" data-target="#goals-container">Ziele</button>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="collapse w-100 mt-1 max-vw-50" id="goals-container"></div>
</div>
</div>
}
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
@Html.LabelFor(m => m.SelectedServiceCategoryOid)
@Html.DropDownListFor(m => m.SelectedServiceCategoryOid, Model.ServiceCategoryListItems, new { onchange = "loadServiceDescriptions()", @class = "form-control", Id = "category-select" })
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="leistung-select">Leistung</label>
<select class="form-control" id="leistung-select" name="ServiceDescription">
</select>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="start-date">Startdatum</label>
<div class="input-group date" id="start-date-picker" data-target-input="nearest">
<input type="text" id="start-date" name="Datum" class="form-control datetimepicker-input" data-target="#start-date-picker" data-toggle="datetimepicker" value="@Model.SelectedServiceRecord.Start.Value.ToString("dd.MM.yyyy")" />
<div class="input-group-append" data-target="#start-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
<!-- Single Edit Mode: Enddatum -->
@if(Model.IsEndDateVisible)
{
<!-- Einzelbuchung: Bis -->
<div class="col-md">
<div class="form-group mb-1">
<label for="start-date">Enddatum</label>
<div class="input-group date" id="end-date-picker" data-target-input="nearest">
<input type="text" id="end-date" name="Enddatum" class="form-control datetimepicker-input" data-target="#end-date-picker" data-toggle="datetimepicker" value="@Model.SelectedServiceRecord.End.Value.ToString("dd.MM.yyyy")" />
<div class="input-group-append" data-target="#end-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
<label for="end-time">Bis</label>
<div class="input-group date" id="end-time-picker" data-target-input="nearest">
<input type="text" id="end-time" name="Ende" class="form-control datetimepicker-input" data-target="#end-time-picker" value="@Model.EndTimeToEdit" />
<div class="input-group-append" data-target="#end-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
}
</div>
<!-- Single Edit Mode: Von -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="start-time">Von</label>
<div class="input-group date" id="start-time-picker" data-target-input="nearest">
<input type="text" id="start-time" name="Start" class="form-control datetimepicker-input" data-target="#start-time-picker" value="@Model.SelectedServiceRecord.Start.Value.ToString("HH:mm")" />
<div class="input-group-append" data-target="#start-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
<!-- Single Edit Mode: Bis -->
<div class="col-md">
<div class="form-group mb-1">
<label for="end-time">Bis</label>
<div class="input-group date" id="end-time-picker" data-target-input="nearest">
<input type="text" id="end-time" name="Ende" class="form-control datetimepicker-input" data-target="#end-time-picker" value="@Model.SelectedServiceRecord.End.Value.ToString("HH:mm")" />
<div class="input-group-append" data-target="#end-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
</div>
<!-- Single Edit Mode: Dauer -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="duration">Dauer</label>
<input type="text" class="form-control" id="duration" name="Dauer" onchange="onDurationChange()">
</div>
</div>
@if(Model.IsZeiterfassungInStdMin)
{
<div class="col-md">
<div class="form-group mb-1">
<label for="hours-minutes-dropdown-btn">Minuten/Stunden</label>
<div class="dropdown">
<button id="hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle w-100" type="button" data-toggle="dropdown">
Minuten
</button>
<div class="dropdown-menu w-100">
<a class="dropdown-item" href="#" onclick="toggleHoursMinutesDropdownButton(this)">Minuten</a>
<a class="dropdown-item" href="#" onclick="toggleHoursMinutesDropdownButton(this)">Stunden</a>
</div>
</div>
</div>
</div>
}
</div>
<!-- Single Edit Mode: Distanz -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="distance">Gefahrene Kilometer</label>
<input class="form-control" id="distance" name="Distanz" value="@Model.SelectedServiceRecord.DistanceInMeter">
</div>
</div>
</div>
<!-- Single Edit Mode: Textbausteine -->
@if(AbstractModel.HasRightToSeeTextModules)
{
<!-- Einzelbuchung: Dauer -->
<div class="form-row">
<div class="col-md">
<button type="button" class="btn btn-primary form-control mt-3" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button">Textbausteine</button>
</div>
</div>
}
<!-- Single Edit Mode: Dokumentation -->
<div class="form-row">
<div class="col-md mt-3">
@if(Model.NumberOfDokuTypes == 0)
{
<div class="form-group">
<label for="dokufeld">Dokumentation</label>
<textarea class="form-control" name="Dokumentation6" id="dokufeld">@Model.SelectedServiceRecord.Notice</textarea>
<div class="form-group mb-1">
<label for="duration">Dauer</label>
<input type="text" class="form-control" id="duration" name="Dauer" onchange="onDurationChange()" value="@Model.DurationToEdit">
</div>
}
else
</div>
@if(Model.IsZeiterfassungInStdMin)
{
<ul class="nav nav-tabs" role="tab-list">
@for(var i = 0; i < Model.Dokutypes.Length; i++)
{
var currentDokuType = Model.Dokutypes[i];
<li class="nav-item">
<a href="#doku_@i" id="doku_@i-tab" data-toggle="tab" role="tab" aria-controls="doku_@i" class="nav-link@(i == 0 ? " active" : string.Empty)" aria-selected="true">
@currentDokuType.DisplayName
</a>
</li>
}
</ul>
<div class="tab-content" id="dokufelderTab">
@for(var i = 0; i < Model.Dokutypes.Length; i++)
{
var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1);
<div class="tab-pane show@(i == 0 ? " active" : string.Empty)" id="doku_@i" role="tabpanel" aria-labelledby="doku_@i-tab">
<textarea class="form-control doku-form-control" id="doku-textarea-@i" name="@textareaName">@Model.SelectedServiceRecord.NoticeList[i]</textarea>
<div class="col-md">
<div class="form-group mb-1">
<label for="hours-minutes-dropdown-btn">Minuten/Stunden</label>
<div class="dropdown">
<button id="hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle w-100" type="button" data-toggle="dropdown">
Minuten
</button>
<div class="dropdown-menu w-100">
<a class="dropdown-item" href="#" onclick="toggleHoursMinutesDropdownButton(this)">Minuten</a>
<a class="dropdown-item" href="#" onclick="toggleHoursMinutesDropdownButton(this)">Stunden</a>
</div>
</div>
}
</div>
</div>
}
</div>
</div>
</div>
}
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
<!-- Einzelbuchung: Distanz -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="distance">Gefahrene Kilometer</label>
<input class="form-control" id="distance" name="Distanz" onchange="validateDistanceInput()" value="@Model.DistanceToEdit">
</div>
</div>
<div class="ml-3 bd-highlight">
@using(Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post))
</div>
@if(AbstractModel.HasRightToSeeTextModules)
{
<!-- Einzelbuchung: Textbausteine -->
<div class="form-row">
<div class="col-md">
<button type="button" class="btn btn-primary form-control mt-3" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button">Textbausteine</button>
</div>
</div>
}
<div class="form-row">
<div class="col-md mt-3">
@if(Model.NumberOfDokuTypes == 0)
{
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Abbrechen</button>
<div class="form-group">
<label for="dokufeld">Dokumentation</label>
<textarea class="form-control" name="Dokumentation6" id="dokufeld">@Model.NoticeToEdit</textarea>
</div>
}
else
{
<ul class="nav nav-tabs" role="tab-list">
@for(var i = 0; i < Model.Dokutypes.Length; i++)
{
var currentDokuType = Model.Dokutypes[i];
<li class="nav-item">
<a href="#doku_@i" id="doku_@i-tab" data-toggle="tab" role="tab" aria-controls="doku_@i" class="nav-link@(i == 0 ? " active" : string.Empty)" aria-selected="true">
@currentDokuType.DisplayName
</a>
</li>
}
</ul>
<div class="tab-content" id="dokufelderTab">
@for(var i = 0; i < Model.Dokutypes.Length; i++)
{
var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1);
<div class="tab-pane show@(i == 0 ? " active" : string.Empty)" id="doku_@i" role="tabpanel" aria-labelledby="doku_@i-tab">
<textarea class="form-control doku-form-control" id="doku-textarea-@i" name="@textareaName">@Model.NoticeListToEdit[0]</textarea>
</div>
}
</div>
}
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="create-button" onclick="submitEditForm()">Speichern</button>
</div>
</div>
}
}
</div>
</div>
}
<!-- /Zwei-in-eins-Test -->
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
</div>
@if(Model.IsInEditingMode)
{
using(Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post))
{
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Abbrechen</button>
}
}
else
{
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="reset-button" onclick="resetSingleBookingForm()">Abbrechen</button>
</div>
}
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="create-button" onclick="submitSingleBookingForm()">@Model.SubmitButtonValue</button>
</div>
</div>
}
</div>
<!-- Liste mit den Einträgen und dem Auswahl-Select -->
<div class="col col-12 col-md-7">

View File

@@ -168,6 +168,7 @@
</div>
</div>
</div>
<!-- Terminliste -->
<div class="col col-12 col-md-7">
<div class="container-fluid mt-3 px-0">
@foreach(var appointment in Model.AppointmentListItems)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -90,9 +90,6 @@
<Reference Include="DevExpress.Xpf.Grid.v17.1.Core, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Xpf.Grid.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraScheduler.v17.1.Core, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
@@ -427,236 +424,6 @@
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="Scripts\jquery-3.4.1.min.map" />
<None Include="Scripts\jquery-3.4.1.slim.min.map" />
<None Include="Scripts\jquery.mobile-1.4.5.min.map" />
</ItemGroup>
<ItemGroup>
<Content Include="Content\images\ajax-loader.gif" />
<Content Include="Content\images\icons-png\action-black.png" />
<Content Include="Content\images\icons-png\action-white.png" />
<Content Include="Content\images\icons-png\alert-black.png" />
<Content Include="Content\images\icons-png\alert-white.png" />
<Content Include="Content\images\icons-png\arrow-d-black.png" />
<Content Include="Content\images\icons-png\arrow-d-l-black.png" />
<Content Include="Content\images\icons-png\arrow-d-l-white.png" />
<Content Include="Content\images\icons-png\arrow-d-r-black.png" />
<Content Include="Content\images\icons-png\arrow-d-r-white.png" />
<Content Include="Content\images\icons-png\arrow-d-white.png" />
<Content Include="Content\images\icons-png\arrow-l-black.png" />
<Content Include="Content\images\icons-png\arrow-l-white.png" />
<Content Include="Content\images\icons-png\arrow-r-black.png" />
<Content Include="Content\images\icons-png\arrow-r-white.png" />
<Content Include="Content\images\icons-png\arrow-u-black.png" />
<Content Include="Content\images\icons-png\arrow-u-l-black.png" />
<Content Include="Content\images\icons-png\arrow-u-l-white.png" />
<Content Include="Content\images\icons-png\arrow-u-r-black.png" />
<Content Include="Content\images\icons-png\arrow-u-r-white.png" />
<Content Include="Content\images\icons-png\arrow-u-white.png" />
<Content Include="Content\images\icons-png\audio-black.png" />
<Content Include="Content\images\icons-png\audio-white.png" />
<Content Include="Content\images\icons-png\back-black.png" />
<Content Include="Content\images\icons-png\back-white.png" />
<Content Include="Content\images\icons-png\bars-black.png" />
<Content Include="Content\images\icons-png\bars-white.png" />
<Content Include="Content\images\icons-png\bullets-black.png" />
<Content Include="Content\images\icons-png\bullets-white.png" />
<Content Include="Content\images\icons-png\calendar-black.png" />
<Content Include="Content\images\icons-png\calendar-white.png" />
<Content Include="Content\images\icons-png\camera-black.png" />
<Content Include="Content\images\icons-png\camera-white.png" />
<Content Include="Content\images\icons-png\carat-d-black.png" />
<Content Include="Content\images\icons-png\carat-d-white.png" />
<Content Include="Content\images\icons-png\carat-l-black.png" />
<Content Include="Content\images\icons-png\carat-l-white.png" />
<Content Include="Content\images\icons-png\carat-r-black.png" />
<Content Include="Content\images\icons-png\carat-r-white.png" />
<Content Include="Content\images\icons-png\carat-u-black.png" />
<Content Include="Content\images\icons-png\carat-u-white.png" />
<Content Include="Content\images\icons-png\check-black.png" />
<Content Include="Content\images\icons-png\check-white.png" />
<Content Include="Content\images\icons-png\clock-black.png" />
<Content Include="Content\images\icons-png\clock-white.png" />
<Content Include="Content\images\icons-png\cloud-black.png" />
<Content Include="Content\images\icons-png\cloud-white.png" />
<Content Include="Content\images\icons-png\comment-black.png" />
<Content Include="Content\images\icons-png\comment-white.png" />
<Content Include="Content\images\icons-png\delete-black.png" />
<Content Include="Content\images\icons-png\delete-white.png" />
<Content Include="Content\images\icons-png\edit-black.png" />
<Content Include="Content\images\icons-png\edit-white.png" />
<Content Include="Content\images\icons-png\eye-black.png" />
<Content Include="Content\images\icons-png\eye-white.png" />
<Content Include="Content\images\icons-png\forbidden-black.png" />
<Content Include="Content\images\icons-png\forbidden-white.png" />
<Content Include="Content\images\icons-png\forward-black.png" />
<Content Include="Content\images\icons-png\forward-white.png" />
<Content Include="Content\images\icons-png\gear-black.png" />
<Content Include="Content\images\icons-png\gear-white.png" />
<Content Include="Content\images\icons-png\grid-black.png" />
<Content Include="Content\images\icons-png\grid-white.png" />
<Content Include="Content\images\icons-png\heart-black.png" />
<Content Include="Content\images\icons-png\heart-white.png" />
<Content Include="Content\images\icons-png\home-black.png" />
<Content Include="Content\images\icons-png\home-white.png" />
<Content Include="Content\images\icons-png\info-black.png" />
<Content Include="Content\images\icons-png\info-white.png" />
<Content Include="Content\images\icons-png\location-black.png" />
<Content Include="Content\images\icons-png\location-white.png" />
<Content Include="Content\images\icons-png\lock-black.png" />
<Content Include="Content\images\icons-png\lock-white.png" />
<Content Include="Content\images\icons-png\mail-black.png" />
<Content Include="Content\images\icons-png\mail-white.png" />
<Content Include="Content\images\icons-png\minus-black.png" />
<Content Include="Content\images\icons-png\minus-white.png" />
<Content Include="Content\images\icons-png\navigation-black.png" />
<Content Include="Content\images\icons-png\navigation-white.png" />
<Content Include="Content\images\icons-png\phone-black.png" />
<Content Include="Content\images\icons-png\phone-white.png" />
<Content Include="Content\images\icons-png\plus-black.png" />
<Content Include="Content\images\icons-png\plus-white.png" />
<Content Include="Content\images\icons-png\power-black.png" />
<Content Include="Content\images\icons-png\power-white.png" />
<Content Include="Content\images\icons-png\recycle-black.png" />
<Content Include="Content\images\icons-png\recycle-white.png" />
<Content Include="Content\images\icons-png\refresh-black.png" />
<Content Include="Content\images\icons-png\refresh-white.png" />
<Content Include="Content\images\icons-png\search-black.png" />
<Content Include="Content\images\icons-png\search-white.png" />
<Content Include="Content\images\icons-png\shop-black.png" />
<Content Include="Content\images\icons-png\shop-white.png" />
<Content Include="Content\images\icons-png\star-black.png" />
<Content Include="Content\images\icons-png\star-white.png" />
<Content Include="Content\images\icons-png\tag-black.png" />
<Content Include="Content\images\icons-png\tag-white.png" />
<Content Include="Content\images\icons-png\user-black.png" />
<Content Include="Content\images\icons-png\user-white.png" />
<Content Include="Content\images\icons-png\video-black.png" />
<Content Include="Content\images\icons-png\video-white.png" />
<Content Include="Content\images\icons-svg\action-black.svg" />
<Content Include="Content\images\icons-svg\action-white.svg" />
<Content Include="Content\images\icons-svg\alert-black.svg" />
<Content Include="Content\images\icons-svg\alert-white.svg" />
<Content Include="Content\images\icons-svg\arrow-d-black.svg" />
<Content Include="Content\images\icons-svg\arrow-d-l-black.svg" />
<Content Include="Content\images\icons-svg\arrow-d-l-white.svg" />
<Content Include="Content\images\icons-svg\arrow-d-r-black.svg" />
<Content Include="Content\images\icons-svg\arrow-d-r-white.svg" />
<Content Include="Content\images\icons-svg\arrow-d-white.svg" />
<Content Include="Content\images\icons-svg\arrow-l-black.svg" />
<Content Include="Content\images\icons-svg\arrow-l-white.svg" />
<Content Include="Content\images\icons-svg\arrow-r-black.svg" />
<Content Include="Content\images\icons-svg\arrow-r-white.svg" />
<Content Include="Content\images\icons-svg\arrow-u-black.svg" />
<Content Include="Content\images\icons-svg\arrow-u-l-black.svg" />
<Content Include="Content\images\icons-svg\arrow-u-l-white.svg" />
<Content Include="Content\images\icons-svg\arrow-u-r-black.svg" />
<Content Include="Content\images\icons-svg\arrow-u-r-white.svg" />
<Content Include="Content\images\icons-svg\arrow-u-white.svg" />
<Content Include="Content\images\icons-svg\audio-black.svg" />
<Content Include="Content\images\icons-svg\audio-white.svg" />
<Content Include="Content\images\icons-svg\back-black.svg" />
<Content Include="Content\images\icons-svg\back-white.svg" />
<Content Include="Content\images\icons-svg\bars-black.svg" />
<Content Include="Content\images\icons-svg\bars-white.svg" />
<Content Include="Content\images\icons-svg\bullets-black.svg" />
<Content Include="Content\images\icons-svg\bullets-white.svg" />
<Content Include="Content\images\icons-svg\calendar-black.svg" />
<Content Include="Content\images\icons-svg\calendar-white.svg" />
<Content Include="Content\images\icons-svg\camera-black.svg" />
<Content Include="Content\images\icons-svg\camera-white.svg" />
<Content Include="Content\images\icons-svg\carat-d-black.svg" />
<Content Include="Content\images\icons-svg\carat-d-white.svg" />
<Content Include="Content\images\icons-svg\carat-l-black.svg" />
<Content Include="Content\images\icons-svg\carat-l-white.svg" />
<Content Include="Content\images\icons-svg\carat-r-black.svg" />
<Content Include="Content\images\icons-svg\carat-r-white.svg" />
<Content Include="Content\images\icons-svg\carat-u-black.svg" />
<Content Include="Content\images\icons-svg\carat-u-white.svg" />
<Content Include="Content\images\icons-svg\check-black.svg" />
<Content Include="Content\images\icons-svg\check-white.svg" />
<Content Include="Content\images\icons-svg\clock-black.svg" />
<Content Include="Content\images\icons-svg\clock-white.svg" />
<Content Include="Content\images\icons-svg\cloud-black.svg" />
<Content Include="Content\images\icons-svg\cloud-white.svg" />
<Content Include="Content\images\icons-svg\comment-black.svg" />
<Content Include="Content\images\icons-svg\comment-white.svg" />
<Content Include="Content\images\icons-svg\delete-black.svg" />
<Content Include="Content\images\icons-svg\delete-white.svg" />
<Content Include="Content\images\icons-svg\edit-black.svg" />
<Content Include="Content\images\icons-svg\edit-white.svg" />
<Content Include="Content\images\icons-svg\eye-black.svg" />
<Content Include="Content\images\icons-svg\eye-white.svg" />
<Content Include="Content\images\icons-svg\forbidden-black.svg" />
<Content Include="Content\images\icons-svg\forbidden-white.svg" />
<Content Include="Content\images\icons-svg\forward-black.svg" />
<Content Include="Content\images\icons-svg\forward-white.svg" />
<Content Include="Content\images\icons-svg\gear-black.svg" />
<Content Include="Content\images\icons-svg\gear-white.svg" />
<Content Include="Content\images\icons-svg\grid-black.svg" />
<Content Include="Content\images\icons-svg\grid-white.svg" />
<Content Include="Content\images\icons-svg\heart-black.svg" />
<Content Include="Content\images\icons-svg\heart-white.svg" />
<Content Include="Content\images\icons-svg\home-black.svg" />
<Content Include="Content\images\icons-svg\home-white.svg" />
<Content Include="Content\images\icons-svg\info-black.svg" />
<Content Include="Content\images\icons-svg\info-white.svg" />
<Content Include="Content\images\icons-svg\location-black.svg" />
<Content Include="Content\images\icons-svg\location-white.svg" />
<Content Include="Content\images\icons-svg\lock-black.svg" />
<Content Include="Content\images\icons-svg\lock-white.svg" />
<Content Include="Content\images\icons-svg\mail-black.svg" />
<Content Include="Content\images\icons-svg\mail-white.svg" />
<Content Include="Content\images\icons-svg\minus-black.svg" />
<Content Include="Content\images\icons-svg\minus-white.svg" />
<Content Include="Content\images\icons-svg\navigation-black.svg" />
<Content Include="Content\images\icons-svg\navigation-white.svg" />
<Content Include="Content\images\icons-svg\phone-black.svg" />
<Content Include="Content\images\icons-svg\phone-white.svg" />
<Content Include="Content\images\icons-svg\plus-black.svg" />
<Content Include="Content\images\icons-svg\plus-white.svg" />
<Content Include="Content\images\icons-svg\power-black.svg" />
<Content Include="Content\images\icons-svg\power-white.svg" />
<Content Include="Content\images\icons-svg\recycle-black.svg" />
<Content Include="Content\images\icons-svg\recycle-white.svg" />
<Content Include="Content\images\icons-svg\refresh-black.svg" />
<Content Include="Content\images\icons-svg\refresh-white.svg" />
<Content Include="Content\images\icons-svg\search-black.svg" />
<Content Include="Content\images\icons-svg\search-white.svg" />
<Content Include="Content\images\icons-svg\shop-black.svg" />
<Content Include="Content\images\icons-svg\shop-white.svg" />
<Content Include="Content\images\icons-svg\star-black.svg" />
<Content Include="Content\images\icons-svg\star-white.svg" />
<Content Include="Content\images\icons-svg\tag-black.svg" />
<Content Include="Content\images\icons-svg\tag-white.svg" />
<Content Include="Content\images\icons-svg\user-black.svg" />
<Content Include="Content\images\icons-svg\user-white.svg" />
<Content Include="Content\images\icons-svg\video-black.svg" />
<Content Include="Content\images\icons-svg\video-white.svg" />
<Content Include="Content\jquery.mobile-1.4.5.css" />
<Content Include="Content\jquery.mobile-1.4.5.min.css" />
<Content Include="Content\jquery.mobile.external-png-1.4.5.css" />
<Content Include="Content\jquery.mobile.external-png-1.4.5.min.css" />
<Content Include="Content\jquery.mobile.icons-1.4.5.css" />
<Content Include="Content\jquery.mobile.icons-1.4.5.min.css" />
<Content Include="Content\jquery.mobile.inline-png-1.4.5.css" />
<Content Include="Content\jquery.mobile.inline-png-1.4.5.min.css" />
<Content Include="Content\jquery.mobile.inline-svg-1.4.5.css" />
<Content Include="Content\jquery.mobile.inline-svg-1.4.5.min.css" />
<Content Include="Content\jquery.mobile.structure-1.4.5.css" />
<Content Include="Content\jquery.mobile.structure-1.4.5.min.css" />
<Content Include="Content\jquery.mobile.theme-1.4.5.css" />
<Content Include="Content\jquery.mobile.theme-1.4.5.min.css" />
<Content Include="Scripts\jquery-3.4.1.intellisense.js" />
<Content Include="Scripts\jquery-3.4.1.js" />
<Content Include="Scripts\jquery-3.4.1.min.js" />
<Content Include="Scripts\jquery-3.4.1.slim.js" />
<Content Include="Scripts\jquery-3.4.1.slim.min.js" />
<Content Include="Scripts\jquery.mobile-1.4.5.js" />
<Content Include="Scripts\jquery.mobile-1.4.5.min.js" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="jQuery" version="3.4.1" targetFramework="net45" />
<package id="jquery.mobile" version="1.4.5" targetFramework="net45" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net45" />
</packages>