Files
BeWoPlaner/BeWoPlanerMobil/Views/Customer/Customer.cshtml
Lyndon Jetten f99d674f8c FaC:
NullPointerException bei Zusagen/Absagen von Serienterminen gefixt.
Terminanzeige im HomeView hat "In Zeiterfassung übertragen"-Icons
Terminanzeige Termine werden wie folgt dargestellt: [Datum]: [Betreff]

MoK:
Auswahl des Ladeintervalls der Zeiterfassungseinträge ist standardmäßig auf "Letzte 7 Tage" und die Änderung wird nur in der Session gespeichert.
Termine in die Zeiterfassung übertragen
2023-03-03 21:54:36 +01:00

692 lines
42 KiB
Plaintext

@using BeWoPlanerMobil.Models;
@using BeWoPlanerMobil.Util
@using BS.Shared
@model CustomerModel
@{
ViewBag.Title = "Klient";
}
<script>
$(function() {
$("#date-of-birth-picker").datetimepicker({
locale: "de",
format: "L"
});
});
$("#stammdaten-container").ready(function() {
var width = getMaxWidth("customer-prepend-text-eigenschaften");
if(width > 0) {
$(".customer-prepend-text-eigenschaften").width(width);
}
width = getMaxWidth("customer-prepend-text-adresse");
if(width > 0) {
$(".customer-prepend-text-adresse").width(width);
}
width = getMaxWidth("customer-prepend-text-rechnungsadresse");
if(width > 0) {
$(".customer-prepend-text-rechnungsadresse").width(width);
}
width = getMaxWidth("customer-prepend-text-kontakt");
if(width > 0) {
$(".customer-prepend-text-kontakt").width(width);
}
});
function submitStammdatenForm() {
try {
showSpinner();
$("#stammdaten-form").submit();
} catch(error) {
hideSpinner();
logError(error);
}
}
(function() {
'use strict';
window.addEventListener('load', function() {
var forms = document.getElementsByClassName("needs-validation");
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function (event) {
if(form.checkValidity() === false) {
hideSpinner();
event.preventDefault();
event.stopPropagation();
$([document.documentElement, document.body]).animate({
scrollTop: $("#stammdaten-container").offset().top
}, 10);
}
form.classList.add('was-validated');
}, false);
});
}, false);
})();
</script>
<div class="container-fluid mt-3">
@if(AbstractModel.IsAllowedToSeeCustomerFilter)
{
using(Html.BeginForm("SetCustomerFilter", "Customer", FormMethod.Post))
{
<div class="row mb-3 align-items-center">
<div class="col-sm-2 col-md-1">
@Html.LabelFor(m => m.SelectedCustomerFilter)
</div>
<div class="col-sm-10 col-md-11">
@Html.DropDownListFor(m => m.SelectedCustomerFilter, Model.CustomerFilter, new { onchange = "submitForm(this)", @class = "custom-select" })
</div>
</div>
}
}
@using(Html.BeginForm("SelectCustomer", "Customer", FormMethod.Post, new { id = "select-customer-form" }))
{
<div class="row align-items-center">
<div class="col-sm-2 col-md-1">
@Html.LabelFor(m => m.SelectedCustomerOid)
</div>
<div class="col-sm-10 col-md-11">
@Html.DropDownListFor(m => m.SelectedCustomerOid, Model.CustomerListItems, new { onchange = "submitCustomerSelectionForm();", @class = "custom-select" })
</div>
</div>
}
@if(Model?.SelectedJsonCustomer != null)
{
using(Html.BeginForm("UpdateCustomer", "Customer", FormMethod.Post, new { id = "stammdaten-form", @class = "needs-validation", novalidate="novalidate" }))
{
<div class="row my-3" id="stammdaten-container">
<div class="col-sm-6 col-md-6 col-lg-3 mt-3">
<div class="card">
<div class="card-body pb-0">
<div class="card-title text-bewo-customer-card-header">
Eigenschaften
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-eigenschaften">
Vorname
</div>
</div>
<input required type="text" class="form-control" id="vorname" name="vorname" value="@Model.SelectedJsonCustomer.Vorname" />
<div class="invalid-feedback">
Dieses Feld darf nicht leer sein!
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-eigenschaften">
Nachname
</div>
</div>
<input required type="text" class="form-control" id="nachname" name="nachname" value="@Model.SelectedJsonCustomer.Nachname" />
<div class="invalid-feedback">
Dieses Feld darf nicht leer sein!
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group date" id="date-of-birth-picker" data-target-input="nearest">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-eigenschaften">
Geburtstag
</div>
</div>
<input type="text" id="date-of-birth" name="geburtstag" class="form-control datetimepicker-input" data-target="#date-of-birth-picker" value="@Model.SelectedJsonCustomer.Geburtstag" />
<div class="input-group-append" data-target="#date-of-birth-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2">
<i class="fas fa-clock"></i>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-eigenschaften">
Geschlecht
</div>
</div>
@{
var selectedMale = Model.SelectedJsonCustomer.CustomerSex == Sex.Male ? "selected" : string.Empty;
var selectedFemale = Model.SelectedJsonCustomer.CustomerSex == Sex.Female ? "selected" : string.Empty;
var selectedDiverse = Model.SelectedJsonCustomer.CustomerSex == Sex.Divers ? "selected" : string.Empty;
var selectedNull = Model.SelectedJsonCustomer.CustomerSex is null ? "selected" : string.Empty;
}
<select class="custom-select" name="geschlecht">
<option value="-1" @selectedNull></option>
<option value="0" @selectedMale>Männlich</option>
<option value="1" @selectedFemale>Weiblich</option>
<option value="2" @selectedDiverse>Divers</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-md-6 col-lg-3 mt-3">
<div class="card">
<div class="card-body pb-0">
<div class="card-title text-bewo-customer-card-header">
<a href="@Model.SelectedJsonCustomer.GoogleMapsLink" target="_blank" class="text-bewo-customer-card-header">Adresse<i class="fas fa-map-marker-alt ml-3"></i></a>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-adresse">
Adresszusatz
</div>
</div>
<input type="text" class="form-control" id="adresszusatz" name="adresszusatz" value="@Model.SelectedJsonCustomer.Adresszusatz" />
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-adresse">
Straße
</div>
</div>
<input type="text" class="form-control" id="strasse" name="strasse" value="@Model.SelectedJsonCustomer.Strasse" />
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-adresse">
PLZ
</div>
</div>
<input type="text" class="form-control" id="plz" name="plz" value="@Model.SelectedJsonCustomer.Postleitzahl" />
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-adresse">
Ort
</div>
</div>
<input type="text" class="form-control" id="ort" name="ort" value="@Model.SelectedJsonCustomer.Ort" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-md-6 col-lg-3 mt-3">
<div class="card">
<div class="card-body pb-0">
<div class="card-title text-bewo-customer-card-header">
Rechnungsadresse
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-rechnungsadresse">
Name
</div>
</div>
<input type="text" class="form-control" id="name-rechnungsadresse" name="name-rechnungsadresse" value="@Model.SelectedJsonCustomer.RechnungsadresseName" />
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-rechnungsadresse">
Straße
</div>
</div>
<input type="text" class="form-control" id="strasse-rechnungsadresse" name="strasse-rechnungsadresse" value="@Model.SelectedJsonCustomer.RechnungsadresseStrasse" />
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-rechnungsadresse">
PLZ
</div>
</div>
<input type="text" class="form-control" id="plz-rechnungsadresse" name="plz-rechnungsadresse" value="@Model.SelectedJsonCustomer.RechnungsadressePostleitzahl" />
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-rechnungsadresse">
Ort
</div>
</div>
<input type="text" class="form-control" id="ort-rechnungsadresse" name="ort-rechnungsadresse" value="@Model.SelectedJsonCustomer.RechnungsadresseOrt" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-md-6 col-lg-3 mt-3">
<div class="card">
<div class="card-body pb-0">
<div class="card-title text-bewo-customer-card-header">
Kontakt
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-kontakt">
Handy
</div>
</div>
<input type="text" class="form-control" id="handy" name="handy" value="@Model.SelectedJsonCustomer.Handy" />
<div class="input-group-append">
<button type="button" class="btn btn-primary px-2" onclick="window.open('tel:@Model.SelectedJsonCustomer.Handy')">
<i class="fas fa-phone"></i>
</button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-kontakt">
Telefon
</div>
</div>
<input type="text" class="form-control" id="telefon" name="telefon" value="@Model.SelectedJsonCustomer.Telefon" />
<div class="input-group-append">
<button type="button" class="btn btn-primary px-2" onclick="window.open('tel:@Model.SelectedJsonCustomer.Telefon')">
<i class="fas fa-phone"></i>
</button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-kontakt">
Fax
</div>
</div>
<input type="text" class="form-control" id="fax" name="fax" value="@Model.SelectedJsonCustomer.Fax" />
</div>
</div>
</div>
<div class="row">
<div class="form-group w-100">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-kontakt">
Mail
</div>
</div>
<input type="text" class="form-control" id="mail" name="mail" value="@Model.SelectedJsonCustomer.EMail" />
<div class="input-group-append">
<button type="button" class="btn btn-primary px-2" onclick="window.open('mailto:@Model.SelectedJsonCustomer.EMail')">
<i class="fas fa-at"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6 my-3">
<div class="card w-100 h-100">
<div class="card-header">
<div class="clearfix">
<h5 class="text-bewo-customer-card-header d-inline float-left">Kommentar</h5>
</div>
</div>
<div class="card-body">
<div class="container-fluid">
<textarea id="notice-textarea" name="notiz" class="w-100" style="resize: vertical;">@Model.SelectedJsonCustomer.Kommentar</textarea>
</div>
</div>
</div>
</div>
<div class="col-12 my-3">
<button type="submit" class="btn btn-primary float-right w-100" onclick="showSpinner()">Speichern</button>
</div>
<div class="col-12">
<hr/>
</div>
<!-- Aktenzeichen -->
@if(Model.SelectedJsonCustomer.ReferenceNumbers.Any())
{
<div class="col-sm-12 col-md-6 my-3">
<div class="card w-100 h-100">
<div class="card-header">
<h5 class="text-bewo-customer-card-header">Aktenzeichen pro Kostenträger</h5>
</div>
<div class="card-body">
<div class="container-fluid">
<table class="table">
<thead>
<tr>
<th class="text-left">
Kostenträger
</th>
<th class="text-right">
Aktenzeichen
</th>
</tr>
</thead>
<tbody>
@foreach(var x in Model.SelectedJsonCustomer.ReferenceNumbers)
{
<tr>
<td class="text-left">
@x.Costbearer
</td>
<td class="text-right">
@x.ReferenceNumber
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
</div>
}
<!-- Umfeld -->
@if(Model.SelectedJsonCustomer.Umfeldpersonen.Any())
{
<div class="col-sm-12 col-md-6 my-3">
<div class="card w-100 h-100">
<div class="card-header">
<h5 class="text-bewo-customer-card-header">Umfeld</h5>
</div>
<div class="card-body">
<div class="container-fluid px-0">
@foreach(var umfeldPerson in Model.SelectedJsonCustomer.Umfeldpersonen)
{
<div class="card w-100 mb-3">
<div class="card-header" onclick="cardHeaderClick('#chevron-umfeldperson-@umfeldPerson.Customer2PersonOid', '#collapse-umfeldperson-@umfeldPerson.Customer2PersonOid')">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-umfeldperson-@umfeldPerson.Customer2PersonOid"></i>
</div>
<div class="p2 d-inline-flex text-primary h-100">
<button type="button" class="btn btn-link">
@umfeldPerson.FormattedName
</button>
</div>
</div>
<div class="collapse" id="collapse-umfeldperson-@umfeldPerson.Customer2PersonOid">
<div class="card-body">
<div class="container-fluid">
<div class="row mb-3">
<div class="col text-secondary text-left">
Rolle:
</div>
<div class="col-auto text-right">
@umfeldPerson.Rolle
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Adresse:
</div>
<div class="col-auto text-right">
@umfeldPerson.StrNameNr<br />@umfeldPerson.PLZOrt
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Tel.:
</div>
<div class="col-auto text-right">
<a href="tel:@umfeldPerson.TelNr">@umfeldPerson.TelNr</a>
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Mobil:
</div>
<div class="col-auto text-right">
<a href="tel:@umfeldPerson.Mobil">@umfeldPerson.Mobil</a>
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
E-Mail:
</div>
<div class="col-auto text-right">
<a href="mailto:@umfeldPerson.EMail">@umfeldPerson.EMail</a>
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Fax:
</div>
<div class="col-auto text-right">
@umfeldPerson.Fax
</div>
</div>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
}
<!-- Organisationen des Umfelds -->
@if(Model.SelectedJsonCustomer.Organisations.Any())
{
<div class="col-sm-12 col-md-6 my-3">
<div class="card w-100 h-100">
<div class="card-header">
<h5 class="text-bewo-customer-card-header">Organisationen des Umfelds</h5>
</div>
<div class="card-body">
<div class="container-fluid px-0">
@foreach(var organisation in Model.SelectedJsonCustomer.Organisations)
{
<div class="card w-100 mb-3">
<div class="card-header" onclick="cardHeaderClick('#chevron-umfeldorganisation-@organisation.Customer2OrganisationOid', '#collapse-umfeldorganisation-@organisation.Customer2OrganisationOid')">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-umfeldorganisation-@organisation.Customer2OrganisationOid"></i>
</div>
<div class="p2 d-inline-flex text-primary h-100">
<button type="button" class="btn btn-link">
@organisation.Name
</button>
</div>
</div>
<div class="collapse" id="collapse-umfeldorganisation-@organisation.Customer2OrganisationOid">
<div class="card-body">
<div class="container-fluid">
<div class="row mb-3">
<div class="col text-secondary text-left">
Ansprechpartner
</div>
<div class="col-auto text-right">
@organisation.ContactPerson
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Rolle
</div>
<div class="col-auto text-right">
@organisation.Role
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Adresse
</div>
<div class="col-auto text-right">
@organisation.StreetName
@if(!string.IsNullOrEmpty(organisation.StreetName) && !string.IsNullOrEmpty(organisation.ZipCode2Town))
{
<br />
}
@organisation.ZipCode2Town
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Tel.:
</div>
<div class="col-auto text-right">
<a href="tel:@organisation.PhoneNumber">@organisation.PhoneNumber</a>
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Fax:
</div>
<div class="col-auto text-right">
@organisation.FaxNumber
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
E-Mail:
</div>
<div class="col-auto text-right">
<a href="mailto:@organisation.Email">@organisation.Email</a>
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Internet:
</div>
<div class="col-auto text-right">
<a href="@organisation.Website">@organisation.Website</a>
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Info
</div>
<div class="col-auto text-right">
@organisation.Info
</div>
</div>
<div class="row mb-3">
<div class="col text-secondary text-left">
Notiz
</div>
<div class="col-auto text-right">
@organisation.Notice
</div>
</div>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
}
<!-- Dokumente -->
<div class="col-12 my-3">
<div class="card w-100">
<div class="card-header">
<h5 class="text-bewo-customer-card-header">Dokumente</h5>
</div>
<div class="card-body">
<div class="container-fluid px-0">
@Html.Partial("DocumentPartial", Model)
</div>
</div>
</div>
</div>
<!-- Medikamentenliste TODO: kollabierbar machen -->
@if(Html.IsInDebugMode() && AbstractModel.IsAllowedToSeeMedikamentenliste && Html.IsInDebugMode())
{
<div class="col-12 my-3">
<div class="card w-100">
<div class="card-header">
<h5 class="text-bewo-customer-card-header">Berichte</h5>
</div>
<div class="card-body">
<div class="container-fluid px-0">
@using(Html.BeginForm("SelectReport", "Customer", FormMethod.Post, new { }))
{
@Html.DropDownListFor(m => m.SelectedReportType, Model.ReportTypeItems, new { @class = "custom-select", name = "SelectedReportType" })
<button class="btn btn-primary my-3" type="submit" onclick="showSpinner()">Bericht anzeigen</button>
<div class="card w-100 h-100">
<div class="card-header" onclick="cardHeaderClick('#chevron-customer-report', '#collapse-customer-report')">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-customer-report"></i>
</div>
<div class="p2 d-inline-flex text-primary h-100">
<button type="button" class="btn btn-link">
Medikamentenliste
</button>
</div>
</div>
<div class="collapse" id="collapse-customer-report">
<div class="card-body">
@Html.Partial("CustomerReportPartial", Model)
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
}
</div>
}
}
</div>