Files
BeWoPlaner/BeWoPlanerMobil/Views/DevExpressScheduler/CustomAppointmentFormPartial.cshtml

254 lines
9.6 KiB
Plaintext

@model BeWoPlanerMobil.Models.AppointmentModel
@using BS.Shared.DataContracts
@using DevExpress.Web.Mvc.UI
@{
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
// Ist bei Serientermininstanzen ebenfalls null!
var isNew = Model.Oid is null && Model.RecurrenceIndex == 0 && Model.RecurrenceInfo is null;
var cancelButtonText = "Abbrechen";
var isOriginator = Model.OriginatorOid?.Equals(Model.LoggedInCompactEmployee.EmployeeOid) ?? false;
var isInEmployeeList = Model.SelectedEmployee2SchedulerAppointments.Any(employee2Appointment => employee2Appointment.Employee.Equals(Model.LoggedInCompactEmployee));
var hasCustomers = Model.SelectedCustomers.Any();
var hasEmployees = Model.SelectedEmployee2SchedulerAppointments.Any();
var hasResources = Model.SelectedResources.Any();
var canEditCustomerApt = Model.HasRightKalenderKlientenTermineAendern;
var canEditEmployeeApt = Model.HasRightKalenderMitarbeiterTermineAendern;
var canEditResourceApt = Model.HasRightKalenderRessourcenTermineAendern;
var canEditOthersResourceApt = Model.HasRightKalenderRessourcenTermineAndererAendern;
var areButtonsVisible = true;
if(isOriginator is false || isNew is false)
{
if(canEditCustomerApt is false && hasCustomers)
{
areButtonsVisible = false;
}
if(canEditEmployeeApt is false && hasEmployees && isInEmployeeList is false)
{
areButtonsVisible = false;
}
}
// Es ist eigentlich unmöglich als jemand anderes einen Termin anzulegen, denn der angemeldete Mitarbeiter ist ja immer der InsUser.
if(isOriginator is false && isNew is false)
{
if(canEditOthersResourceApt is false && hasResources)
{
areButtonsVisible = false;
}
}
else if(isNew is false)
{
// Falls man beim Anlegen mehr Rechte hatte als beim Bearbeiten:
if(canEditResourceApt is false && hasResources)
{
areButtonsVisible = false;
}
}
var disabled = string.Empty;
if(areButtonsVisible is false)
{
cancelButtonText = "Schließen";
disabled = "disabled";
}
var isDeleteButtonVisible = areButtonsVisible && isNew is false;
var dateInputType = isNew is false && Model.AllDay ? "date" : "datetime-local";
var start = Model.StartTime.HasValue ? Model.AllDay ? $"{Model.StartTime:yyyy-MM-dd}" : $"{Model.StartTime:yyyy-MM-ddTHH:mm}" : string.Empty;
var end = Model.EndTime.HasValue ? Model.AllDay ? $"{Model.EndTime:yyyy-MM-dd}" : $"{Model.EndTime:yyyy-MM-ddTHH:mm}" : string.Empty;
var showEmployeeButton = (Model.HasRightKalenderMitarbeitertermineAnsehen && Model.Oid.HasValue) ||
(Model.Oid.HasValue && Model.HasRightKalenderMitarbeiterTermineAendern) ||
(Model.Oid is null && Model.HasRightKalenderMitarbeiterTermineAnlegen);
var showCustomerButton = (Model.HasRightKalenderKliententermineAnsehen && Model.Oid.HasValue) ||
(Model.Oid.HasValue && Model.HasRightKalenderKlientenTermineAendern) ||
(Model.Oid is null && Model.HasRightKalenderKlientenTermineAnlegen);
var showResourceButton = (Model.HasRightKalenderRessourcentermineAnsehen && Model.Oid.HasValue) ||
(Model.Oid.HasValue && (Model.HasRightKalenderRessourcenTermineAendern && isOriginator || isOriginator is false && Model.HasRightKalenderRessourcenTermineAndererAendern)) ||
(Model.Oid is null && Model.HasRightKalenderRessourcenTermineAnlegen);
if(areButtonsVisible != Model.CanBeEdited)
{
}
}
<style type="text/css">
.centeredLabel {
margin: 0 auto;
padding-left: .25em;
}
</style>
@using(Html.BeginForm())
{
<div class="row" id="abc-table">
<div class="col">
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Betreff</span>
</div>
<input class="form-control" type="text" @disabled id="Subject" name="Subject" value="@Model.Subject" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Ort</span>
</div>
<input class="form-control" type="text" @disabled id="Location" name="Location" value="@Model.Location" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Start</span>
</div>
<input class="form-control" type="@dateInputType" @disabled id="StartDate" name="StartDate" value="@start" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Ende</span>
</div>
<input class="form-control" type="@dateInputType" @disabled id="EndDate" name="EndDate" value="@end" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">
@Html.DevExpress().CheckBox(
settings =>
{
settings.Name = nameof(SchedulerAppointmentDC.IsPrivate);
settings.Width = Unit.Percentage(100);
settings.Properties.RootStyle.CssClass = "";
settings.ReadOnly = disabled.Length > 0;
}).Bind(Model.IsPrivate).GetHtml()
</div>
</div>
<div class="input-group-append">
<span class="input-group-text">Privat</span>
</div>
</div>
</div>
<div class="col-md">
<div class="input-group pl-2 mb-2 justify-content-end">
<div class="input-group-prepend">
<div class="input-group-text">
@Html.DevExpress().CheckBox(
settings =>
{
settings.Name = nameof(SchedulerAppointmentDC.AllDay);
settings.Width = Unit.Percentage(100);
settings.ReadOnly = disabled.Length > 0;
}).Bind(Model.AllDay).GetHtml()
</div>
</div>
<div class="input-group-append">
<span class="input-group-text">Ganztägig</span>
</div>
</div>
</div>
</div>
@if(Model.HasRightKalenderMitarbeitertermineAnsehen || Model.HasRightKalenderKliententermineAnsehen || Model.HasRightKalenderRessourcentermineAnsehen)
{
<div class="form-row justify-content-center">
@if(showEmployeeButton)
{
@Html.Partial("CustomEmployeeSelectPartial", Model)
}
@if(showCustomerButton)
{
@Html.Partial("CustomCustomerSelectPartial", Model)
}
@if(showResourceButton)
{
@Html.Partial("CustomResourceSelectPartial", Model)
}
</div>
}
<div class="form-row">
<div class="col-md">
<div class="form-group">
<label for="Description">Notiz</label>
<textarea class="form-control" @disabled id="Description" name="Description">@Model.Description</textarea>
</div>
</div>
</div>
<div id="recurrence-container">
@{
var recurrenceSettings = (AppointmentRecurrenceFormSettings) ViewBag.AppointmentRecurrenceFormSettings;
recurrenceSettings.Enabled = areButtonsVisible;
}
@Html.DevExpress().AppointmentRecurrenceForm(recurrenceSettings).GetHtml()
</div>
<div class="form-row">
<div class="col">
<div class="float-right">
@if(areButtonsVisible)
{
<button type="button" class="btn btn-sm-auto btn-primary mr-2" id="Apply" name="Apply" onclick="OnAppointmentFormSave()">OK</button>
}
<button type="button" class="btn btn-sm-auto btn-primary mr-2" id="Cancel" name="Cancel" onclick="OnAppointmentFormCancel()">@cancelButtonText</button>
@if(isDeleteButtonVisible)
{
<button type="button" class="btn btn-sm-auto btn-danger" id="Delete" name="Delete" onclick="OnAppointmentFormDelete()">Löschen</button>
}
</div>
</div>
</div>
<div>
@Html.DevExpress().SchedulerStatusInfo(
settings =>
{
settings.Name = "schedulerStatusInfo";
settings.Priority = 1;
settings.SchedulerName = "scheduler";
}).GetHtml()
</div>
</div>
</div>
}