Merge branch 'master' of ssh://float.ownsoft.de/git/beyondSoft/BeWo
This commit is contained in:
@@ -198,11 +198,18 @@ namespace BeWo.Scheduler.ViewModel
|
||||
|
||||
var message = string.Empty;
|
||||
|
||||
|
||||
ServiceFacade.DoResourceServiceSync( s => message = s.ValidateSchedulerAppointment(start, end, employeeOids, customerOids, resourceOids, originatorOid, schedulerAppointmentOid, recurrenceInfoId, recurrenceIndex, shouldSkipResourceAvailablityCheck));
|
||||
|
||||
if(!string.IsNullOrWhiteSpace(message))
|
||||
{
|
||||
if(message.Contains("Die Ressource") && message.Contains("ist im ausgewählten Zeitraum") && message.Contains("bereits gebucht:") && BeWoApp.LoggedOnUser.HasRight(UserRightType.KalenderRessourcenDoppeltBuchen) is false)
|
||||
{
|
||||
message = message.Remove(message.Length - 31) + "Speichern nicht möglich.";
|
||||
|
||||
MessageBox.Show(message, "Überschneidung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
|
||||
return;
|
||||
}
|
||||
|
||||
var messageBoxResult = MessageBox.Show(message, "Überschneidung", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
|
||||
|
||||
if(messageBoxResult.Equals(MessageBoxResult.No))
|
||||
@@ -212,7 +219,7 @@ namespace BeWo.Scheduler.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
if (item.Type.Equals(AppointmentType.ChangedOccurrence) && _GeoeffneterTermin != null)
|
||||
if(item.Type.Equals(AppointmentType.ChangedOccurrence) && _GeoeffneterTermin != null)
|
||||
{
|
||||
areEqual = _GeoeffneterTermin.Equals(item);
|
||||
}
|
||||
@@ -223,7 +230,7 @@ namespace BeWo.Scheduler.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
if (dcList.Count <= 0)
|
||||
if(dcList.Count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -305,6 +312,14 @@ namespace BeWo.Scheduler.ViewModel
|
||||
|
||||
if(!string.IsNullOrWhiteSpace(message))
|
||||
{
|
||||
if(message.Contains("Die Ressource") && message.Contains("ist im ausgewählten Zeitraum") && message.Contains("bereits gebucht:") && BeWoApp.LoggedOnUser.HasRight(UserRightType.KalenderRessourcenDoppeltBuchen) is false)
|
||||
{
|
||||
message = message.Remove(message.Length - 31) + "Speichern nicht möglich.";
|
||||
|
||||
MessageBox.Show(message, "Überschneidung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
|
||||
return;
|
||||
}
|
||||
|
||||
var messageBoxResult = MessageBox.Show(message, "Überschneidung", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
|
||||
|
||||
if(messageBoxResult.Equals(MessageBoxResult.No))
|
||||
@@ -314,11 +329,10 @@ namespace BeWo.Scheduler.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dcList.Add(vm.CommitToDataContract());
|
||||
}
|
||||
|
||||
if (dcList.Count <= 0)
|
||||
if(dcList.Count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -43,13 +43,12 @@ namespace BeWoPlanerMobil.Controllers
|
||||
#if DEBUG
|
||||
Debug.WriteLine($"+++>Logout aufrufende Methode: {new StackTrace().GetFrame(1).GetMethod().Name}");
|
||||
#endif
|
||||
|
||||
MobileSessionFacade.LogUserOut();
|
||||
FormsAuthentication.SignOut();
|
||||
|
||||
AbstractModel.TimeOfLastAction = null;
|
||||
|
||||
return RedirectToActionPermanent("Index", "Login", new {tenant = MobileSessionFacade.Tenant});
|
||||
return RedirectToActionPermanent("Index", "Login", new {tenant = MobileSessionFacade.Tenant, message = ViewData[LoginController.LoginErrorIndex]?.ToString() });
|
||||
}
|
||||
|
||||
protected virtual void InitModel(AbstractModel model)
|
||||
|
||||
@@ -489,17 +489,24 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
foreach(var appointment in appointmentsToInsert)
|
||||
{
|
||||
appointment.CustomerList = AppointmentModel.SelectedCustomers;
|
||||
appointment.ResourceList = AppointmentModel.SelectedResources;
|
||||
|
||||
appointment.EmployeeList = new List<Employee2SchedulerAppointmentDC>();
|
||||
|
||||
foreach(var selectedEmployee in AppointmentModel.SelectedEmployees ?? new List<CompactEmployeeDC>())
|
||||
if(appointment.Type != (int) AppointmentType.DeletedOccurrence)
|
||||
{
|
||||
appointment.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = selectedEmployee });
|
||||
}
|
||||
// Beim Löschen eines Serientermins wird hier ein Insert für die gelöschte Ausnahme erstellt
|
||||
appointment.CustomerList = AppointmentModel.SelectedCustomers;
|
||||
appointment.ResourceList = AppointmentModel.SelectedResources;
|
||||
appointment.EmployeeList = new List<Employee2SchedulerAppointmentDC>();
|
||||
|
||||
appointment.Originator = Model.LoggedInUser.Employee;
|
||||
foreach(var selectedEmployee in AppointmentModel.SelectedEmployees ?? new List<CompactEmployeeDC>())
|
||||
{
|
||||
appointment.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = selectedEmployee });
|
||||
}
|
||||
|
||||
appointment.Originator = Model.LoggedInUser.Employee;
|
||||
}
|
||||
else
|
||||
{
|
||||
appointment.NewSchedulerAppointmentVersion = null;
|
||||
}
|
||||
|
||||
KalenderService.InsertSchedulerAppointment(appointment);
|
||||
ViewData["EditableAppointmentModel"] = appointment;
|
||||
@@ -532,10 +539,11 @@ namespace BeWoPlanerMobil.Controllers
|
||||
KalenderService.UpdateSchedulerAppointments(new List<SchedulerAppointmentDC> { appointment });
|
||||
}
|
||||
|
||||
KalenderService.DeleteSchedulerAppointments(
|
||||
appointmentsToRemove
|
||||
.Where(appointment => appointment.SchedulerAppointmentOid.HasValue && appointment.NewSchedulerAppointmentVersion.HasValue)
|
||||
.ToDictionary(k => k.SchedulerAppointmentOid.Value, v => v.NewSchedulerAppointmentVersion.Value));
|
||||
var oid2Version = appointmentsToRemove
|
||||
.Where(appointment => appointment.SchedulerAppointmentOid.HasValue && appointment.NewSchedulerAppointmentVersion.HasValue)
|
||||
.ToDictionary(k => k.SchedulerAppointmentOid.Value, v => v.NewSchedulerAppointmentVersion.Value);
|
||||
|
||||
KalenderService.DeleteSchedulerAppointments(oid2Version);
|
||||
|
||||
ReloadAppointments();
|
||||
}
|
||||
@@ -1139,9 +1147,13 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
Model.ResourceCategories2Resources.Values.DoForEach(l => l.DoForEach(s => list.AddIfNotIn(s)));
|
||||
|
||||
Model.SelectedEmployees = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList();
|
||||
Model.SelectedCustomers = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOids.Contains(customer.CustomerOid)).ToList();
|
||||
Model.SelectedResources = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOids.Contains(resource.ResourceOid.Value)).ToList();
|
||||
//Model.SelectedEmployees = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList();
|
||||
//Model.SelectedCustomers = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOids.Contains(customer.CustomerOid)).ToList();
|
||||
//Model.SelectedResources = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOids.Contains(resource.ResourceOid.Value)).ToList();
|
||||
|
||||
AppointmentModel.SelectedEmployees = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList();
|
||||
AppointmentModel.SelectedCustomers = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOids.Contains(customer.CustomerOid)).ToList();
|
||||
AppointmentModel.SelectedResources = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOids.Contains(resource.ResourceOid.Value)).ToList();
|
||||
|
||||
Model.SelectedEmployeesForFiltering = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOidsForFiltering.Contains(employee.EmployeeOid)).ToList();
|
||||
Model.SelectedCustomersForFiltering = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOidsForFiltering.Contains(customer.CustomerOid)).ToList();
|
||||
|
||||
@@ -146,7 +146,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
}
|
||||
|
||||
|
||||
public ActionResult Index(string tenant, string returnUrl)
|
||||
public ActionResult Index(string tenant, string returnUrl, string message = null)
|
||||
{
|
||||
if(returnUrl != null)
|
||||
{
|
||||
@@ -184,6 +184,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
return Redirect(url);
|
||||
}
|
||||
|
||||
ViewData[LoginErrorIndex] = message;
|
||||
MobileSessionFacade.Tenant = tenant;
|
||||
return View("Index");
|
||||
}
|
||||
|
||||
@@ -36,6 +36,8 @@ namespace BeWoPlanerMobil.Models
|
||||
|
||||
public int? RecurrenceIndex { get; set; }
|
||||
|
||||
public long? NewSchedulerAppointmentVersion { get; set; }
|
||||
|
||||
public bool ShowEmployeeColors { get; set; }
|
||||
public List<ServiceRecordDC> ServiceRecordList { get; set; }
|
||||
|
||||
@@ -214,6 +216,8 @@ namespace BeWoPlanerMobil.Models
|
||||
TaskDescription = appointment.TaskDescription;
|
||||
|
||||
OriginatorOid = appointment.Originator.EmployeeOid;
|
||||
|
||||
NewSchedulerAppointmentVersion = appointment.NewSchedulerAppointmentVersion;
|
||||
}
|
||||
|
||||
public virtual void Assign(AppointmentModel source)
|
||||
@@ -252,6 +256,7 @@ namespace BeWoPlanerMobil.Models
|
||||
TaskDescription = source.TaskDescription;
|
||||
|
||||
OriginatorOid = source.OriginatorOid;
|
||||
NewSchedulerAppointmentVersion = source.NewSchedulerAppointmentVersion;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,28 @@
|
||||
newAptBtn.empty();
|
||||
newAptBtn.append("<span>Neuer Termin</span>");
|
||||
}
|
||||
|
||||
const observer = new MutationObserver((mutations, obs) => {
|
||||
const el0 = document.getElementById("appointmentRecurrenceForm_AptRecCtl_Monthly_WmeWeekOfMnth_DDD_L_LBI0T0");
|
||||
const el1 = document.getElementById("appointmentRecurrenceForm_AptRecCtl_Monthly_WmeWeekOfMnth_DDD_L_LBI1T0");
|
||||
const el2 = document.getElementById("appointmentRecurrenceForm_AptRecCtl_Monthly_WmeWeekOfMnth_DDD_L_LBI2T0");
|
||||
const el3 = document.getElementById("appointmentRecurrenceForm_AptRecCtl_Monthly_WmeWeekOfMnth_DDD_L_LBI3T0");
|
||||
const el4 = document.getElementById("appointmentRecurrenceForm_AptRecCtl_Monthly_WmeWeekOfMnth_DDD_L_LBI4T0");
|
||||
|
||||
const dropdown = document.getElementById("appointmentRecurrenceForm_AptRecCtl_Monthly_WmeWeekOfMnth_I");
|
||||
|
||||
if(el0 && el1 && el2 && el3 && el4 && dropdown) {
|
||||
$(el0).text("Ersten");
|
||||
$(el1).text("Zweiten");
|
||||
$(el2).text("Dritten");
|
||||
$(el3).text("Vierten");
|
||||
$(el4).text("Letzten");
|
||||
|
||||
obs.disconnect();
|
||||
}
|
||||
});
|
||||
|
||||
observer.observe(document.body, {childList: true, subtree: true});
|
||||
});
|
||||
|
||||
function UpdateSchedulerHeight() {
|
||||
@@ -41,7 +63,7 @@
|
||||
if(editFormPopup.css("top") !== undefined) {
|
||||
editFormPopup.css("top", "50px");
|
||||
|
||||
const recurrence = $("#appointmentRecurrenceForm_AptRecCtl_mainDiv label:contains('Recurrence')");
|
||||
const recurrence = $("#appointmentRecurrenceForm_ChkRecurrence label:contains('Recurrence')");
|
||||
const daily = $("#appointmentRecurrenceForm_AptRecCtl_mainDiv label:contains('Daily')");
|
||||
const weekly = $("#appointmentRecurrenceForm_AptRecCtl_mainDiv label:contains('Weekly')");
|
||||
const monthly = $("#appointmentRecurrenceForm_AptRecCtl_mainDiv label:contains('Monthly')");
|
||||
@@ -52,6 +74,32 @@
|
||||
weekly.text("Wöchentlich");
|
||||
monthly.text("Monatlich");
|
||||
yearly.text("Jährlich");
|
||||
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Daily_mainDiv label:contains('Every weekday')").text("Jeden Wochentag");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Daily_mainDiv label:contains('Every')").text("Alle");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Daily_mainDiv span:contains('day(s)')").text("Tage");
|
||||
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Weekly_mainDiv label:contains('Recur every')").text("Alle");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Weekly_mainDiv span:contains('week(s) on:')").text("Wochen am:");
|
||||
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_mainDiv label:contains('Day')").text("Tag");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_ctl02").text("im");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_mainDiv span:contains('month(s)')").text("Monat");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_mainDiv label:contains('The')").text("Am");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_ctl04").text("jeden");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_mainDiv span:contains('month(s)')").text("Monats");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_WmeWeekOfMnth_DDD_L_LBI1T0").text("zweiten");
|
||||
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Yearly_mainDiv label:contains('Every')").text("Jeden");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Yearly_mainDiv label:contains('The')").text("Am");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_Yearly_mainDiv label:contains('of')").text("im");
|
||||
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_RangeCtl_mainDiv label:contains('No end date')").text("Ohne Enddatum");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_RangeCtl_mainDiv label:contains('End after:')").text("Endet nach:");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_RangeCtl_mainDiv span:contains('occurrences')").text("Wiederholungen");
|
||||
$("#appointmentRecurrenceForm_AptRecCtl_RangeCtl_mainDiv label:contains('End by:')").text("Endet am:");
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(editFormPopup.outerWidth() !== undefined) {
|
||||
@@ -616,12 +664,13 @@
|
||||
}
|
||||
|
||||
<div class="d-flex justify-content-center align-items-center">
|
||||
@*@if(Html.IsInDebugMode())
|
||||
@*@if(Html.IsInDebugMode())
|
||||
{
|
||||
<button type="button" class="btn btn-bewo-dev m-1" onclick='scheduler.PerformCallback({ apptID: "", actionId: "debug_DummyAppointments", args: null }, () => { performReload(true);hideSpinner(); });'>
|
||||
Testtermine
|
||||
</button>
|
||||
}*@
|
||||
<h4 id="scheduler-log"></h4>
|
||||
<button class="btn btn-sm btn-primary dropdown-toggle m-1" type="button" data-toggle="dropdown">
|
||||
Filtern
|
||||
</button>
|
||||
|
||||
@@ -58,6 +58,8 @@ namespace BeWoPlanerMobil.Views.DevExpressScheduler
|
||||
appointmentStorage.CustomFieldMappings.Add(new ASPxAppointmentCustomFieldMapping("CanBeViewed", "CanBeViewed"));
|
||||
appointmentStorage.CustomFieldMappings.Add(new ASPxAppointmentCustomFieldMapping("CanBeDeleted", "CanBeDeleted"));
|
||||
|
||||
appointmentStorage.CustomFieldMappings.Add(new ASPxAppointmentCustomFieldMapping("NewSchedulerAppointmentVersion", "NewSchedulerAppointmentVersion"));
|
||||
|
||||
return appointmentStorage;
|
||||
}
|
||||
|
||||
|
||||
@@ -380,7 +380,8 @@
|
||||
CompletedDate = container.Appointment.CustomFields["CompletedDate"] is DateTime completedDate ? completedDate : null,
|
||||
OriginatorOid = (container.Appointment.CustomFields["Originator"] as CompactEmployeeDC)?.EmployeeOid,
|
||||
RecurrenceInfo = container.Appointment.RecurrenceInfo?.ToXml(),
|
||||
RecurrenceIndex = container.Appointment.RecurrenceIndex
|
||||
RecurrenceIndex = container.Appointment.RecurrenceIndex,
|
||||
NewSchedulerAppointmentVersion = container.Appointment.CustomFields["NewSchedulerAppointmentVersion"] as long?
|
||||
};
|
||||
|
||||
var appointmentModel = ViewData["EditableAppointmentModel"] != null ? (AppointmentModel)ViewData["EditableAppointmentModel"] : newModel;
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
<div class="modal-dialog col-sm-8">
|
||||
<div class="modal-content border-0">
|
||||
@if(ViewData[LoginController.LoginErrorIndex] != null || ViewData[AbstractBaseController.IsSessionTimedOut] != null)
|
||||
@if(ViewData[LoginController.LoginErrorIndex] != null || TempData[LoginController.LoginErrorIndex] != null || ViewData[AbstractBaseController.IsSessionTimedOut] != null)
|
||||
{
|
||||
<div class="alert alert-danger mx-3" role="alert">
|
||||
@ViewData[LoginController.LoginErrorIndex]
|
||||
|
||||
@@ -4579,8 +4579,8 @@ WHERE sc.Billable = 1 and sr.StartDate >= '{0:yyyy-MM-dd}' and sr.StartDate < '{
|
||||
}
|
||||
|
||||
public string ValidateSchedulerAppointment(DateTime start, DateTime end, IEnumerable<long> employees, IEnumerable<long> customers, List<long> resources, long originator, long? appointmentOid, Guid? recurrenceId = null, int occurrenceIndex = 0, bool shouldSkipResourceAvailability = false)
|
||||
{
|
||||
var resourceList = resources;
|
||||
{
|
||||
var resourceList = resources;
|
||||
if (shouldSkipResourceAvailability)
|
||||
{
|
||||
resourceList = null;
|
||||
|
||||
@@ -10,7 +10,6 @@ namespace BeWo.Service.Plugins
|
||||
{
|
||||
public class ResourceService : AbstractIDSpecificDefaultClass<ResourceService>
|
||||
{
|
||||
|
||||
public virtual string ValidateSchedulerAppointment(DateTime start, DateTime end, IEnumerable<long> employees, IEnumerable<long> customers, List<long> resources, long originator, long? appointmentOid, Guid? recurrenceId, int occurrenceIndex = 0, bool shouldSkipResourceAvailability = false)
|
||||
{
|
||||
return DAOFactory.SearchDAO.ValidateSchedulerAppointment(start, end, employees, customers, resources, originator, appointmentOid, recurrenceId, occurrenceIndex);
|
||||
|
||||
@@ -493,20 +493,20 @@ namespace BS.Shared
|
||||
|
||||
ServiceRecord_AllowEditForOtherEmployees = 20602,
|
||||
|
||||
KalenderAnsehen = 20700,
|
||||
KalenderMitarbeitertermineAnsehen = 20701,
|
||||
KalenderMitarbeitertermineAnlegen = 20702,
|
||||
KalenderMitarbeitertermineAendern = 20703,
|
||||
KalenderKliententermineAlleAnsehen = 20704,
|
||||
KalenderKliententermineAnlegen = 20706,
|
||||
KalenderKliententermineAendern = 20707,
|
||||
KalenderRessourcentermineAnsehen = 20708,
|
||||
KalenderRessourcentermineAnlegen = 20709,
|
||||
KalenderRessourcentermineAendern = 20710,
|
||||
KalenderAnsehen = 20700,
|
||||
KalenderMitarbeitertermineAnsehen = 20701,
|
||||
KalenderMitarbeitertermineAnlegen = 20702,
|
||||
KalenderMitarbeitertermineAendern = 20703,
|
||||
KalenderKliententermineAlleAnsehen = 20704,
|
||||
KalenderKliententermineAnlegen = 20706,
|
||||
KalenderKliententermineAendern = 20707,
|
||||
KalenderRessourcentermineAnsehen = 20708,
|
||||
KalenderRessourcentermineAnlegen = 20709,
|
||||
KalenderRessourcentermineAendern = 20710,
|
||||
KalenderRessourcentermineAndererAendern = 20711,
|
||||
|
||||
KalenderInZeiterfassungUebernehmen = 20720,
|
||||
KalenderInAbwesenheitenUebernehmen = 20721,
|
||||
KalenderInZeiterfassungUebernehmen = 20720,
|
||||
KalenderInAbwesenheitenUebernehmen = 20721,
|
||||
KalenderRessourcenDoppeltBuchen = 20722,
|
||||
|
||||
AllowChangeOwnPassword = 20800,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user