From de5e7ff8291559c37a3ebf453b2e4c91d2f0428c Mon Sep 17 00:00:00 2001 From: Lyndon Date: Wed, 28 Jan 2026 17:21:08 +0100 Subject: [PATCH] =?UTF-8?q?MoK:=20Mitarbeiterabwesenheiten=20hinzugef?= =?UTF-8?q?=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWoPlanerMobil.sln | 12 +- BeWoPlanerMobil/BeWoPlanerMobil.csproj | 13 +- BeWoPlanerMobil/BeWoPlanerMobil.csproj.user | 2 +- .../Controllers/CustomerController.cs | 54 ++-- .../Controllers/EmployeeController.cs | 280 ++++++++++++++++++ .../Controllers/IAbsenceTimeController.cs | 27 ++ BeWoPlanerMobil/Controllers/MainController.cs | 14 +- .../Controllers/PersonController.cs | 93 ++++++ BeWoPlanerMobil/Models/AbstractModel.cs | 13 +- BeWoPlanerMobil/Models/CustomerModel.cs | 90 ++++-- .../Models/CustomerSessionModel.cs | 16 +- BeWoPlanerMobil/Models/EmployeeModel.cs | 75 +++++ .../Models/EmployeeSessionModel.cs | 21 ++ BeWoPlanerMobil/Models/IAbsenceTimeModel.cs | 17 ++ .../Models/IAbsenceTimeSessionModel.cs | 7 + BeWoPlanerMobil/Models/PersonModel.cs | 30 ++ BeWoPlanerMobil/Models/PersonSessionModel.cs | 20 ++ BeWoPlanerMobil/Util/ISignable.cs | 5 +- .../Views/Customer/Customer.cshtml | 62 ++-- .../CustomerAbsenceTimeFormPartial.cshtml | 233 --------------- .../Views/Employee/Employee.cshtml | 81 +++++ BeWoPlanerMobil/Views/Person/Person.cshtml | 1 + .../Shared/AbsenceTimeFormPartial.cshtml | 237 +++++++++++++++ .../AbsenceTimePartial.cshtml} | 115 +++---- BeWoPlanerMobil/Views/Shared/_Layout.cshtml | 13 + .../CompactEmployeeDC_Employee.cs | 2 +- .../Compact/CompactEmployeeDC.cs | 2 +- Shared/DataContracts/CustomerDC.cs | 2 +- Shared/DataContracts/EmployeeDC.cs | 2 +- Shared/DataContracts/IAbsenceTime.cs | 12 + Shared/Shared.csproj | 1 + 31 files changed, 1142 insertions(+), 410 deletions(-) create mode 100644 BeWoPlanerMobil/Controllers/EmployeeController.cs create mode 100644 BeWoPlanerMobil/Controllers/IAbsenceTimeController.cs create mode 100644 BeWoPlanerMobil/Controllers/PersonController.cs create mode 100644 BeWoPlanerMobil/Models/EmployeeModel.cs create mode 100644 BeWoPlanerMobil/Models/EmployeeSessionModel.cs create mode 100644 BeWoPlanerMobil/Models/IAbsenceTimeModel.cs create mode 100644 BeWoPlanerMobil/Models/IAbsenceTimeSessionModel.cs create mode 100644 BeWoPlanerMobil/Models/PersonModel.cs create mode 100644 BeWoPlanerMobil/Models/PersonSessionModel.cs delete mode 100644 BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml create mode 100644 BeWoPlanerMobil/Views/Employee/Employee.cshtml create mode 100644 BeWoPlanerMobil/Views/Person/Person.cshtml create mode 100644 BeWoPlanerMobil/Views/Shared/AbsenceTimeFormPartial.cshtml rename BeWoPlanerMobil/Views/{Customer/CustomerAbsenceTimePartial.cshtml => Shared/AbsenceTimePartial.cshtml} (54%) create mode 100644 Shared/DataContracts/IAbsenceTime.cs diff --git a/BeWoPlanerMobil.sln b/BeWoPlanerMobil.sln index 0dcc5d657..3d700739c 100644 --- a/BeWoPlanerMobil.sln +++ b/BeWoPlanerMobil.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31729.503 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36908.2 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BeWoPlanerMobil", "BeWoPlanerMobil\BeWoPlanerMobil.csproj", "{284B02ED-114A-426C-9162-31BB6CF05589}" EndProject @@ -27,6 +27,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FeidPartnerReports", "Repor EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PaSMoenchengladbach", "ReportImp\PaSMoenchengladbach\PaSMoenchengladbach.csproj", "{EA3C4BE1-6128-4FC9-8194-3C4202233371}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Host", "Host\Host.csproj", "{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -100,6 +102,12 @@ Global {EA3C4BE1-6128-4FC9-8194-3C4202233371}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU {EA3C4BE1-6128-4FC9-8194-3C4202233371}.Release|Any CPU.ActiveCfg = Release|Any CPU {EA3C4BE1-6128-4FC9-8194-3C4202233371}.Release|Any CPU.Build.0 = Release|Any CPU + {E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU + {E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU + {E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index 1ccd4f089..413dc8caa 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -307,7 +307,9 @@ + + @@ -316,6 +318,10 @@ + + + + @@ -688,6 +694,9 @@ + + + @@ -728,13 +737,13 @@ - + - + diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user index eeebdd5de..883ab72a1 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user @@ -15,7 +15,7 @@ root/Common/MVC/Controller 600 False - False + True False diff --git a/BeWoPlanerMobil/Controllers/CustomerController.cs b/BeWoPlanerMobil/Controllers/CustomerController.cs index 66f4c0c92..e4cf89006 100644 --- a/BeWoPlanerMobil/Controllers/CustomerController.cs +++ b/BeWoPlanerMobil/Controllers/CustomerController.cs @@ -18,44 +18,30 @@ using DevExpress.XtraReports.UI; namespace BeWoPlanerMobil.Controllers { - public class CustomerController : ReportBaseController + public class CustomerController : ReportBaseController, IAbsenceTimeController { - public CustomerController() - { + public CustomerController() { } - } private CustomerModel _Model; public CustomerModel Model { get { - if (!MobileSessionFacade.IsUserLoggedIn()) + if(!MobileSessionFacade.IsUserLoggedIn()) { Logout(); return null; } - if (_Model == null) + if(_Model != null) { - _Model = new CustomerModel(); - - InitModel(_Model); - InitViewModel(); - + return _Model; } - //if (((CustomerModel) Session[ModelSessionConstants.CustomerModelKey])?.LoggedInEmployee is null) - //{ - // _Model = new CustomerModel(); + _Model = new CustomerModel(); - // InitModel(_Model); - - // Session[ModelSessionConstants.CustomerModelKey] = _Model; - //} - //else - //{ - // _Model = (CustomerModel)Session[ModelSessionConstants.CustomerModelKey]; - //} + InitModel(_Model); + InitViewModel(); return _Model; } @@ -112,9 +98,10 @@ namespace BeWoPlanerMobil.Controllers Model.Customers = new List(); } - if(Model.CustomerSessionModel.SelectedCustomerOid.HasValue) + var selectedCustomerOid = Model.CustomerSessionModel.SelectedAbsenceTimeObjectOid; + if(selectedCustomerOid.HasValue) { - Model.SelectedCustomer = CustomerService.LoadCustomer(Model.CustomerSessionModel.SelectedCustomerOid.Value); + Model.SelectedCustomer = CustomerService.LoadCustomer(selectedCustomerOid.Value); } if(Model.IsAllowedToSeeMedikamentenliste) @@ -1271,11 +1258,11 @@ namespace BeWoPlanerMobil.Controllers var startDateString = formCollection["customer-absence-time-start-date"]; var startTimeString = formCollection["customer-absence-time-start-time"]; - var endDateString = formCollection["customer-absence-time-end-date"]; - var endTimeString = formCollection["customer-absence-time-end-time"]; - var category = formCollection["customer-absence-time-category"]; - var notice = formCollection["customer-absence-time-notice"]; - var allDay = "on" == formCollection["customer-absence-time-allday-cb"]; + var endDateString = formCollection["customer-absence-time-end-date"]; + var endTimeString = formCollection["customer-absence-time-end-time"]; + var category = formCollection["customer-absence-time-category"]; + var notice = formCollection["customer-absence-time-notice"]; + var allDay = "on" == formCollection["customer-absence-time-allday-cb"]; if(allDay) { @@ -1340,7 +1327,6 @@ namespace BeWoPlanerMobil.Controllers if(absenceTimeOid == 0) { return RedirectToActionPermanent("Customer", Model); - //return "Es ist ein Fehler bei der Auswahl der zu bearbeitenden Abwesenheit aufgetreten.
Bitte wenden Sie sich an Ihren Systemadministrator."; } var selectedAbsenceTime = Model.SelectedCustomer.AbsenceTimes.FirstOrDefault(absenceTime => absenceTime.AbsenceTimeOid.HasValue && absenceTime.AbsenceTimeOid.Value.Equals(absenceTimeOid)); @@ -1348,13 +1334,11 @@ namespace BeWoPlanerMobil.Controllers if(selectedAbsenceTime is null) { return RedirectToActionPermanent("Customer", Model); - //return "Es ist ein Fehler bei der Auswahl der zu bearbeitenden Abwesenheit aufgetreten.
Bitte wenden Sie sich an Ihren Systemadministrator."; } Model.SelectedAbsenceTimeOid = absenceTimeOid; Model.SelectedAbsenceReasonOid = selectedAbsenceTime.Reason.AbsenceReasonOid; - //return LeerzeichenFuerGetMethoden; return RedirectToActionPermanent("Customer", Model); } @@ -1382,7 +1366,7 @@ namespace BeWoPlanerMobil.Controllers TempData[TempDataConstants.DoLogoutKey] = true; } - return PartialView("CustomerAbsenceTimeFormPartial", Model); + return PartialView("AbsenceTimeFormPartial", Model); } [Authorize] @@ -1400,7 +1384,7 @@ namespace BeWoPlanerMobil.Controllers if(Model is null) { TempData[TempDataConstants.DoLogoutKey] = true; - return PartialView("CustomerAbsenceTimePartial"); + return PartialView("AbsenceTimePartial"); } var absenceTime2Delete = Model.SelectedCustomer.AbsenceTimes.FirstOrDefault(absenceTime => absenceTime.AbsenceTimeOid.HasValue && absenceTime.AbsenceTimeOid.Equals(absenceTimeOid)); @@ -1418,7 +1402,7 @@ namespace BeWoPlanerMobil.Controllers LoadCustomerToModel(customer.CustomerOid); - return PartialView("CustomerAbsenceTimePartial", Model); + return PartialView("AbsenceTimePartial", Model); } #endregion diff --git a/BeWoPlanerMobil/Controllers/EmployeeController.cs b/BeWoPlanerMobil/Controllers/EmployeeController.cs new file mode 100644 index 000000000..1b9e5f0ec --- /dev/null +++ b/BeWoPlanerMobil/Controllers/EmployeeController.cs @@ -0,0 +1,280 @@ +using System; +using System.Diagnostics; +using System.Linq; +using System.Web.Mvc; +using BeWoPlanerMobil.Models; +using BeWoPlanerMobil.Service; +using BeWoPlanerMobil.Util; +using BS.Shared; +using BS.Shared.DataContracts; + +namespace BeWoPlanerMobil.Controllers +{ + public class EmployeeController : AbstractBaseController, IAbsenceTimeController + { + public EmployeeController() { } + + [Authorize] + public override string SaveCollapsibleStatus(bool isOpen, string identifier) + { + return SaveCollapsibleStatusToModel(Model, isOpen, identifier); + } + + private EmployeeModel _Model; + + public EmployeeModel Model + { + get + { + if(false == MobileSessionFacade.IsUserLoggedIn()) + { + Logout(); + return null; + } + + if(_Model != null) + { + return _Model; + } + + _Model = new EmployeeModel(); + + InitModel(_Model); + InitViewModel(); + + return _Model; + } + } + + [Authorize] + public ActionResult Employee(long? id) + { + + if(!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer")) + { + return Logout(); + } + + if(id.HasValue) + { + LoadEmployeeToModel(id); + } + + return View(Model); + } + + private void InitViewModel() + { + if(!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer")) + { + Logout(); + return; + } + + Model.AllAbsenceReasons = CustomerService.GetAllAbsenceReasons() + .Where(ar => ar.Sichtbarkeit is null || + ar.Sichtbarkeit == AbsenceReasonVisibilityType.Employee || + ar.Sichtbarkeit == AbsenceReasonVisibilityType.All) + .ToList(); + + if(Model.EmployeeSessionModel.SelectedAbsenceTimeObjectOid != null) + { + Model.SelectedEmployee = EmployeeService.LoadEmployee(Model.EmployeeSessionModel.SelectedAbsenceTimeObjectOid.Value); + Model.AbsenceTimeObject = Model.SelectedEmployee; + } + + var selectedAbsenceTimeOid = Model.EmployeeSessionModel.SelectedAbsenceTimeOid; + + if(selectedAbsenceTimeOid.HasValue && Model.SelectedEmployee != null) + { + Model.SelectedAbsenceTime = Model.SelectedEmployee.AbsenceTimes.FirstOrDefault(absenceTime => absenceTime.AbsenceTimeOid?.Equals(selectedAbsenceTimeOid.Value) ?? false); + } + } + + private void LoadEmployeeToModel(long? employeeOid) + { + if(employeeOid == -1) + { + Model.EmployeeSessionModel.ResetValues(); + return; + } + + if(Model.SelectedEmployeeOid.HasValue && Model.SelectedEmployeeOid != employeeOid) + { + Model.EmployeeSessionModel.ResetValues(); + } + + Model.SelectedEmployeeOid = employeeOid; + + if(employeeOid != null) + { + Model.SelectedEmployee = EmployeeService.LoadEmployee(Model.EmployeeSessionModel.SelectedAbsenceTimeObjectOid.Value); + Model.AbsenceTimeObject = Model.SelectedEmployee; + } + } + + [Authorize] + [HttpPost] + public ActionResult CreateOrUpdateAbsenceTime(FormCollection formCollection) + { + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return Logout(); + } + + var selectedAbsenceTime = Model.SelectedAbsenceTime; + var oid = selectedAbsenceTime?.AbsenceTimeOid; + + var isNew = oid is null; + + var startDateString = formCollection["employee-absence-time-start-date"]; + var startTimeString = formCollection["employee-absence-time-start-time"]; + var endDateString = formCollection["employee-absence-time-end-date"]; + var endTimeString = formCollection["employee-absence-time-end-time"]; + var category = formCollection["employee-absence-time-category"]; + var notice = formCollection["employee-absence-time-notice"]; + var allDay = "on" == formCollection["employee-absence-time-allday-cb"]; + + if(allDay) + { + startTimeString = null; + endTimeString = null; + } + + var startString = $"{startDateString} {startTimeString ?? "00:00"}"; + var endString = $"{endDateString} {endTimeString ?? "00:00"}"; + + var start = DateTime.Parse(startString); + var end = string.IsNullOrWhiteSpace(endDateString) && string.IsNullOrWhiteSpace(endTimeString) ? null : (DateTime?) DateTime.Parse(endString); + + var categoryOid = long.Parse(category); + + var absenceReason = Model.AllAbsenceReasons.FirstOrDefault(ar => ar.AbsenceReasonOid.HasValue && ar.AbsenceReasonOid.Value.Equals(categoryOid)); + + var employee = Model.SelectedEmployee; + + if(isNew) + { + var absenceTime = new AbsenceTimeDC + { + EmployeeOid = employee.EmployeeOid, + Reason = absenceReason, + Start = start, + End = end, + Notice = notice + }; + + OperationsService.InsertNewEmployeeAbsenceTime(employee.EmployeeOid.Value, absenceTime); + } + else + { + selectedAbsenceTime.Start = start; + selectedAbsenceTime.End = end; + selectedAbsenceTime.Reason = absenceReason; + selectedAbsenceTime.Notice = notice; + + OperationsService.UpdateAbsenceTime(selectedAbsenceTime); + } + + LoadEmployeeToModel(employee.EmployeeOid); + + Model.SelectedAbsenceTime = null; + Model.SelectedAbsenceTimeOid = null; + Model.SelectedAbsenceReasonOid = -1; + + return RedirectToActionPermanent("Employee"); + } + + [Authorize] + [HttpPost] + public ActionResult SelectAbsenceTime(long absenceTimeOid) + { + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return Logout(); + } + + if(absenceTimeOid == 0) + { + return RedirectToActionPermanent("Employee", Model); + } + + var selectedAbsenceTime = Model.SelectedEmployee.AbsenceTimes.FirstOrDefault(absenceTime => absenceTime.EmployeeOid?.Equals(absenceTimeOid) ?? false); + + if(selectedAbsenceTime is null) + { + return RedirectToActionPermanent("Employee", Model); + } + + Model.SelectedAbsenceTimeOid = absenceTimeOid; + Model.SelectedAbsenceReasonOid = selectedAbsenceTime.Reason.AbsenceReasonOid; + + return RedirectToActionPermanent("Employee", Model); + } + + [Authorize] + public string SetSelectedAbsenceTimeOid(long absenceTimeOid) + { + var selectedAbsenceTime = Model.SelectedEmployee.AbsenceTimes.FirstOrDefault(absenceTime => absenceTime.AbsenceTimeOid?.Equals(absenceTimeOid) ?? false); + + if(selectedAbsenceTime is null) + { + return "Es ist ein Fehler bei der Auswahl der zu bearbeitenden Abwesenheit aufgetreten.
Bitte wenden Sie sich an Ihren Systemadministrator"; + } + + Model.SelectedAbsenceTimeOid = absenceTimeOid; + Model.SelectedAbsenceReasonOid = selectedAbsenceTime.Reason.AbsenceReasonOid; + + return LeerzeichenFuerGetMethoden; + } + + [Authorize] + public ActionResult LoadAbsenceTimeToForm() + { + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + } + + return PartialView("AbsenceTimeFormPartial", Model); + } + + [Authorize] + public string DeselectAbsenceTime() + { + Model.SelectedAbsenceTimeOid = null; + Model.SelectedAbsenceReasonOid = -1; + + return LeerzeichenFuerGetMethoden; + } + + [Authorize] + public ActionResult DeleteAbsenceTime(long absenceTimeOid) + { + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("AbsenceTimePartial"); + } + + var absenceTime2Delete = Model.SelectedEmployee.AbsenceTimes.FirstOrDefault(absenceTime => absenceTime.AbsenceTimeOid?.Equals(absenceTimeOid) ?? false); + + if(absenceTime2Delete is null) + { + ViewData["AbsenceTimeError"] = "Beim Löschen der Abwesenheit ist ein Fehler aufgetreten!

Bitte wenden Sie sich an Ihren Administrator."; + } + + var employee = Model.SelectedEmployee; + + employee.AbsenceTimes.Remove(absenceTime2Delete); + + EmployeeService.UpdateEmployee(employee); + + LoadEmployeeToModel(employee.EmployeeOid); + + return PartialView("AbsenceTimePartial", Model); + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Controllers/IAbsenceTimeController.cs b/BeWoPlanerMobil/Controllers/IAbsenceTimeController.cs new file mode 100644 index 000000000..231451d84 --- /dev/null +++ b/BeWoPlanerMobil/Controllers/IAbsenceTimeController.cs @@ -0,0 +1,27 @@ +using System.Web.Mvc; + +namespace BeWoPlanerMobil.Controllers +{ + internal interface IAbsenceTimeController + { + [Authorize] + [HttpPost] + ActionResult CreateOrUpdateAbsenceTime(FormCollection formCollection); + + [Authorize] + [HttpPost] + ActionResult SelectAbsenceTime(long absenceTimeOid); + + [Authorize] + string SetSelectedAbsenceTimeOid(long absenceTimeOid); + + [Authorize] + ActionResult LoadAbsenceTimeToForm(); + + [Authorize] + string DeselectAbsenceTime(); + + [Authorize] + ActionResult DeleteAbsenceTime(long absenceTimeOid); + } +} diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 0e6ede9ca..1e557bc20 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -3362,10 +3362,22 @@ namespace BeWoPlanerMobil.Controllers return RedirectToMain(); } + /// + /// Leitet zur Mitarbeiter-Seite weiter, die bis jetzt aber nur die Abwesenheiten des angemeldeten Mitarbeiters anzeigt + /// + /// Aufruf zur Mitarbeiter-Seite [Authorize] public ActionResult RedirectToPersons() { - return RedirectToActionPermanent("Person", "Person"); + return RedirectToActionPermanent("Person", "Person", new { id = Model.LoggedInEmployee?.EmployeeOid }); + } + + [Authorize] + public ActionResult RedirectToEmployees() + { + var employeeOid = Model.LoggedInEmployee.EmployeeOid; + + return RedirectToActionPermanent("Employee", "Employee", new { id = Model.LoggedInEmployee?.EmployeeOid }); } [Authorize] diff --git a/BeWoPlanerMobil/Controllers/PersonController.cs b/BeWoPlanerMobil/Controllers/PersonController.cs new file mode 100644 index 000000000..a4116b9cf --- /dev/null +++ b/BeWoPlanerMobil/Controllers/PersonController.cs @@ -0,0 +1,93 @@ +using BeWoPlanerMobil.Models; +using BeWoPlanerMobil.Service; +using DevExpress.Web.Internal.XmlProcessor; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; + +namespace BeWoPlanerMobil.Controllers +{ + public class PersonController : AbstractBaseController + { + public PersonController() { } + + private PersonModel _Model; + + public PersonModel Model + { + get + { + if(!MobileSessionFacade.IsUserLoggedIn()) + { + Logout(); + return null; + } + + if(_Model is null) + { + _Model = new PersonModel(); + + InitModel(_Model); + InitViewModel(); + } + + return _Model; + } + } + + [Authorize] + public ActionResult Person(long? id) + { + try + { + if(!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer")) + { + return Logout(); + } + + if(id.HasValue) + { + LoadPersonToModel(id); + } + } + catch(Exception exception) + { + Log.Info("Exception: " + exception.Message + "\n" + exception.StackTrace); + if(exception.InnerException != null) + { + Log.Info("\n\nInnerException: " + exception.InnerException.Message + "\n" + exception.InnerException.StackTrace); + } + + throw; + } + + return View(Model); + } + + private void InitViewModel() + { + if(!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer")) + { + Logout(); + return; + } + + + } + + private void LoadPersonToModel(long? personOid) + { + if(personOid is null || (personOid.Value > 0 && false == Model.Persons.Any(p => p.PersonOid.Equals(personOid.Value)))) + { + return; + } + } + + public override string SaveCollapsibleStatus(bool isOpen, string identifier) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/AbstractModel.cs b/BeWoPlanerMobil/Models/AbstractModel.cs index 55d7809db..150dd62b5 100644 --- a/BeWoPlanerMobil/Models/AbstractModel.cs +++ b/BeWoPlanerMobil/Models/AbstractModel.cs @@ -51,8 +51,8 @@ namespace BeWoPlanerMobil.Models public static string TimeOfLastAction { - get { return MobileSessionFacade.TimeOfLastAction; } - set { MobileSessionFacade.TimeOfLastAction = value; } + get => MobileSessionFacade.TimeOfLastAction; + set => MobileSessionFacade.TimeOfLastAction = value; } public bool HasRightToInsertRessourceAppointments => CheckRight(UserRightType.KalenderRessourcentermineAnlegen) || CheckRight(UserRightType.CreateAll); @@ -223,6 +223,11 @@ namespace BeWoPlanerMobil.Models public bool HasRightToViewCustomerDocuments => CheckForAtLeastOneRight(new[] { UserRightType.ViewAll, UserRightType.DokumenteKlienten }); + public bool HasRightToViewOwnEmployee => CheckForAtLeastOneRight(new[] { UserRightType.ViewAll, UserRightType.Employee_AllowViewOwnEmployees }) && + CheckForAtLeastOneRight(new[] { UserRightType.EditAll, UserRightType.Employee_AllowEditOwnEmployees }); + + + //public string UserMessage { get; set; } public XtraReport Report { get; set; } @@ -260,7 +265,9 @@ namespace BeWoPlanerMobil.Models public List Persons { get; set; } = new List(); - public Dictionary Collapsibles2IsShown { get => SessionModel.Collapsibles2IsShown; + public Dictionary Collapsibles2IsShown + { + get => SessionModel.Collapsibles2IsShown; set => SessionModel.Collapsibles2IsShown = value; } diff --git a/BeWoPlanerMobil/Models/CustomerModel.cs b/BeWoPlanerMobil/Models/CustomerModel.cs index 688b6b009..c68565302 100644 --- a/BeWoPlanerMobil/Models/CustomerModel.cs +++ b/BeWoPlanerMobil/Models/CustomerModel.cs @@ -11,23 +11,29 @@ using DevExpress.XtraReports.UI; namespace BeWoPlanerMobil.Models { - public class CustomerModel : AbstractModel, ISignable + public class CustomerModel : AbstractModel, ISignable, IAbsenceTimeModel { + public string HtmlPrefix => "customer"; + + public IAbsenceTime AbsenceTimeObject + { + get => SelectedCustomer; + set => SelectedCustomer = (CustomerDC) value; + } + public CustomerModel() { SessionModel = new CustomerSessionModel(); } - public CustomerSessionModel CustomerSessionModel - { - get - { - return SessionModel as CustomerSessionModel; - } - } + public CustomerSessionModel CustomerSessionModel => SessionModel as CustomerSessionModel; [Display(Name = "Klient")] - public long? SelectedCustomerOid { get { return CustomerSessionModel.SelectedCustomerOid; } set { CustomerSessionModel.SelectedCustomerOid = value; } } + public long? SelectedCustomerOid + { + get => CustomerSessionModel.SelectedAbsenceTimeObjectOid; + set => CustomerSessionModel.SelectedAbsenceTimeObjectOid = value; + } public CustomerDC SelectedCustomer { get; set; } @@ -47,7 +53,11 @@ namespace BeWoPlanerMobil.Models public JsonCustomer SelectedJsonCustomer => SelectedCustomer != null ? new JsonCustomer(SelectedCustomer, FolderTree, ICD10Diagnosen) : null; [Display(Name = "Filter")] - public CustomerFilterEnum SelectedCustomerFilter { get { return CustomerSessionModel.SelectedCustomerFilter; } set { CustomerSessionModel.SelectedCustomerFilter = value; } } + public CustomerFilterEnum SelectedCustomerFilter + { + get => CustomerSessionModel.SelectedCustomerFilter; + set => CustomerSessionModel.SelectedCustomerFilter = value; + } public List CustomerFilter { @@ -93,7 +103,11 @@ namespace BeWoPlanerMobil.Models public List ReportTypes { get; set; } [Display(Name = "Bericht")] - public CustomerReportType SelectedReportType { get { return CustomerSessionModel.SelectedReportType; } set { CustomerSessionModel.SelectedReportType = value; } } + public CustomerReportType SelectedReportType + { + get => CustomerSessionModel.SelectedReportType; + set => CustomerSessionModel.SelectedReportType = value; + } public List ReportTypeItems { @@ -117,7 +131,11 @@ namespace BeWoPlanerMobil.Models public List Bargeldkassen { get; set; } = new List(); [Display(Name = "Kategorie")] - public long? SelectedAbsenceReasonOid { get { return CustomerSessionModel.SelectedAbsenceReasonOid; } set { CustomerSessionModel.SelectedAbsenceReasonOid = value; } } + public long? SelectedAbsenceReasonOid + { + get => CustomerSessionModel.SelectedAbsenceReasonOid; + set => CustomerSessionModel.SelectedAbsenceReasonOid = value; + } public List AllAbsenceReasons { get; set; } @@ -145,7 +163,11 @@ namespace BeWoPlanerMobil.Models } } - public long? SelectedAbsenceTimeOid { get { return CustomerSessionModel.SelectedAbsenceTimeOid; } set { CustomerSessionModel.SelectedAbsenceTimeOid = value; } } + public long? SelectedAbsenceTimeOid + { + get => CustomerSessionModel.SelectedAbsenceTimeOid; + set => CustomerSessionModel.SelectedAbsenceTimeOid = value; + } public AbsenceTimeDC SelectedAbsenceTime { get; set; } //{ @@ -157,19 +179,28 @@ namespace BeWoPlanerMobil.Models // } //} - public long? SelectedBargeldkasseOid { get { return CustomerSessionModel.SelectedBargeldkasseOid; } set { CustomerSessionModel.SelectedBargeldkasseOid = value; } } + public long? SelectedBargeldkasseOid + { + get => CustomerSessionModel.SelectedBargeldkasseOid; + set => CustomerSessionModel.SelectedBargeldkasseOid = value; + } public BargeldkassenDC SelectedBargeldkasse { get; set; } - [Display(Name="Auszahlunsintervall")] - public int SelectedAuszahlungsintervall { get { return CustomerSessionModel.SelectedAuszahlungsintervall; } set { CustomerSessionModel.SelectedAuszahlungsintervall = value; } } - public List Auszahlungsintervalle => + [Display(Name = "Auszahlunsintervall")] + public int SelectedAuszahlungsintervall + { + get => CustomerSessionModel.SelectedAuszahlungsintervall; + set => CustomerSessionModel.SelectedAuszahlungsintervall = value; + } + + public List Auszahlungsintervalle => new List { - new SelectListItem{Value = ((int) Auszahlungsintervall.Kein).ToString(), Text = "Kein"}, - new SelectListItem{Value = ((int) Auszahlungsintervall.Monatlich).ToString(), Text = "Monatlich"}, - new SelectListItem{Value = ((int) Auszahlungsintervall.Woechentlich).ToString(), Text = "Wöchentlich"}, - new SelectListItem{Value = ((int) Auszahlungsintervall.Taeglich).ToString(), Text = "Täglich"}, + new SelectListItem { Value = ((int) Auszahlungsintervall.Kein).ToString(), Text = "Kein" }, + new SelectListItem { Value = ((int) Auszahlungsintervall.Monatlich).ToString(), Text = "Monatlich" }, + new SelectListItem { Value = ((int) Auszahlungsintervall.Woechentlich).ToString(), Text = "Wöchentlich" }, + new SelectListItem { Value = ((int) Auszahlungsintervall.Taeglich).ToString(), Text = "Täglich" } }; public XtraReport BargeldkassenReportObject { get; set; } @@ -177,17 +208,26 @@ namespace BeWoPlanerMobil.Models public XtraReport ZahlungsbelegsReportObject { get; set; } - public long? SelectedBargeldtransaktionOid { get { return CustomerSessionModel.SelectedBargeldtransaktionOid; } set { CustomerSessionModel.SelectedBargeldtransaktionOid = value; } } + public long? SelectedBargeldtransaktionOid + { + get => CustomerSessionModel.SelectedBargeldtransaktionOid; + set => CustomerSessionModel.SelectedBargeldtransaktionOid = value; + } public BargeldtransaktionDC SelectedBargeldtransaktion { get; set; } [Display(Name = "Art")] - public int SelectedTransaktionsart { get { return CustomerSessionModel.SelectedTransaktionsart; } set { CustomerSessionModel.SelectedTransaktionsart = value; } } + public int SelectedTransaktionsart + { + get => CustomerSessionModel.SelectedTransaktionsart; + set => CustomerSessionModel.SelectedTransaktionsart = value; + } + public List Transaktionsarten => new List { - new SelectListItem{Value=((int) Zahlungstyp.Einzahlung).ToString(), Text = "Einzahlung"}, - new SelectListItem{Value=((int) Zahlungstyp.Auszahlung).ToString(), Text = "Auszahlung"} + new SelectListItem { Value = ((int) Zahlungstyp.Einzahlung).ToString(), Text = "Einzahlung" }, + new SelectListItem { Value = ((int) Zahlungstyp.Auszahlung).ToString(), Text = "Auszahlung" } }; public List BargeldtransaktionshistoryEntries { get; set; } = new List(); diff --git a/BeWoPlanerMobil/Models/CustomerSessionModel.cs b/BeWoPlanerMobil/Models/CustomerSessionModel.cs index 149059094..517625611 100644 --- a/BeWoPlanerMobil/Models/CustomerSessionModel.cs +++ b/BeWoPlanerMobil/Models/CustomerSessionModel.cs @@ -1,23 +1,13 @@ using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Web.Mvc; using BeWo.View.Navigation.Filter; using BeWoPlanerMobil.Controllers; -using BeWoPlanerMobil.Service; -using BeWoPlanerMobil.Util; -using BS.Shared; -using BS.Shared.DataContracts; -using BS.Shared.DataContracts.Compact; -using DevExpress.XtraReports.UI; namespace BeWoPlanerMobil.Models { [Serializable] - public class CustomerSessionModel : BaseSessionModel + public class CustomerSessionModel : BaseSessionModel, IAbsenceTimeSessionModel { - public long? SelectedCustomerOid { get; set; } + public long? SelectedAbsenceTimeObjectOid { get; set; } public CustomerFilterEnum SelectedCustomerFilter { get; set; } @@ -39,7 +29,7 @@ namespace BeWoPlanerMobil.Models { base.ResetValues(); - SelectedCustomerOid = null; + SelectedAbsenceTimeObjectOid = null; //SelectedCustomerFilter = CustomerFilterEnum.All; //SelectedReportType = CustomerReportType.Medikamentenliste; SelectedAbsenceReasonOid = null; diff --git a/BeWoPlanerMobil/Models/EmployeeModel.cs b/BeWoPlanerMobil/Models/EmployeeModel.cs new file mode 100644 index 000000000..f7563e13c --- /dev/null +++ b/BeWoPlanerMobil/Models/EmployeeModel.cs @@ -0,0 +1,75 @@ +using BS.Shared.DataContracts; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Web.Mvc; + +namespace BeWoPlanerMobil.Models +{ + public class EmployeeModel : AbstractModel, IAbsenceTimeModel + { + public string HtmlPrefix => "employee"; + + public EmployeeSessionModel EmployeeSessionModel => SessionModel as EmployeeSessionModel; + + public EmployeeDC SelectedEmployee { get; set; } + + public IAbsenceTime AbsenceTimeObject + { + get => SelectedEmployee; + set => SelectedEmployee = (EmployeeDC) value; + } + + public AbsenceTimeDC SelectedAbsenceTime { get; set; } + + [Display(Name = "Mitarbeiter")] + public long? SelectedEmployeeOid + { + get => EmployeeSessionModel.SelectedAbsenceTimeObjectOid; + set => EmployeeSessionModel.SelectedAbsenceTimeObjectOid = value; + } + + public EmployeeModel() + { + SessionModel = new EmployeeSessionModel(); + } + + public List AllAbsenceReasons { get; set; } + + public List AbsenceReasonItems + { + get + { + var result = new List { new SelectListItem { Value = "-1", Text = string.Empty } }; + + foreach(var absenceReason in AllAbsenceReasons) + { + if(absenceReason.AbsenceReasonOid is null) + { + continue; + } + + result.Add(new SelectListItem + { + Value = absenceReason.AbsenceReasonOid.Value.ToString(), + Text = absenceReason.Description + }); + } + + return result; + } + } + + [Display(Name = "Kategorie")] + public long? SelectedAbsenceReasonOid + { + get => EmployeeSessionModel.SelectedAbsenceReasonOid; + set => EmployeeSessionModel.SelectedAbsenceReasonOid = value; + } + + public long? SelectedAbsenceTimeOid + { + get => EmployeeSessionModel.SelectedAbsenceTimeOid; + set => EmployeeSessionModel.SelectedAbsenceTimeOid = value; + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/EmployeeSessionModel.cs b/BeWoPlanerMobil/Models/EmployeeSessionModel.cs new file mode 100644 index 000000000..479973b18 --- /dev/null +++ b/BeWoPlanerMobil/Models/EmployeeSessionModel.cs @@ -0,0 +1,21 @@ +using System; + +namespace BeWoPlanerMobil.Models +{ + [Serializable] + public class EmployeeSessionModel : BaseSessionModel, IAbsenceTimeSessionModel + { + public long? SelectedAbsenceTimeObjectOid { get; set; } + public long? SelectedAbsenceReasonOid { get; set; } + public long? SelectedAbsenceTimeOid { get; set; } + + public override void ResetValues() + { + base.ResetValues(); + + SelectedAbsenceTimeObjectOid = null; + SelectedAbsenceReasonOid = null; + SelectedAbsenceTimeOid = null; + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/IAbsenceTimeModel.cs b/BeWoPlanerMobil/Models/IAbsenceTimeModel.cs new file mode 100644 index 000000000..19ed5f6ea --- /dev/null +++ b/BeWoPlanerMobil/Models/IAbsenceTimeModel.cs @@ -0,0 +1,17 @@ +using BS.Shared.DataContracts; +using System.Collections.Generic; +using System.Web.Mvc; + +namespace BeWoPlanerMobil.Models +{ + public interface IAbsenceTimeModel + { + string HtmlPrefix { get; } + long? SelectedAbsenceTimeOid { get; set; } + long? SelectedAbsenceReasonOid { get; set; } + AbsenceTimeDC SelectedAbsenceTime { get; set; } + IAbsenceTime AbsenceTimeObject { get; set; } + Dictionary Collapsibles2IsShown { get; set; } + List AbsenceReasonItems { get; } + } +} diff --git a/BeWoPlanerMobil/Models/IAbsenceTimeSessionModel.cs b/BeWoPlanerMobil/Models/IAbsenceTimeSessionModel.cs new file mode 100644 index 000000000..375023fe3 --- /dev/null +++ b/BeWoPlanerMobil/Models/IAbsenceTimeSessionModel.cs @@ -0,0 +1,7 @@ +namespace BeWoPlanerMobil.Models +{ + internal interface IAbsenceTimeSessionModel + { + long? SelectedAbsenceTimeObjectOid { get; set; } + } +} diff --git a/BeWoPlanerMobil/Models/PersonModel.cs b/BeWoPlanerMobil/Models/PersonModel.cs new file mode 100644 index 000000000..07a42409a --- /dev/null +++ b/BeWoPlanerMobil/Models/PersonModel.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Web; +using BS.Shared.DataContracts; + +namespace BeWoPlanerMobil.Models +{ + public class PersonModel : AbstractModel + { + public PersonModel() + { + SessionModel = new PersonSessionModel(); + } + + public PersonSessionModel PersonSessionModel => SessionModel as PersonSessionModel; + + [Display(Name = "Person")] + public long? SelectedPersonOid + { + get => PersonSessionModel.SelectedPersonOid; + set => PersonSessionModel.SelectedPersonOid = value; + } + + public PersonDC SelectedPerson { get; set; } + + + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/PersonSessionModel.cs b/BeWoPlanerMobil/Models/PersonSessionModel.cs new file mode 100644 index 000000000..95a1c8977 --- /dev/null +++ b/BeWoPlanerMobil/Models/PersonSessionModel.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace BeWoPlanerMobil.Models +{ + [Serializable] + public class PersonSessionModel : BaseSessionModel + { + public long? SelectedPersonOid { get; set; } + + public override void ResetValues() + { + base.ResetValues(); + + SelectedPersonOid = null; + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Util/ISignable.cs b/BeWoPlanerMobil/Util/ISignable.cs index 8d3273abf..680656f71 100644 --- a/BeWoPlanerMobil/Util/ISignable.cs +++ b/BeWoPlanerMobil/Util/ISignable.cs @@ -1,7 +1,4 @@ -using System.Web.Mvc; -using BS.Shared; - -namespace BeWoPlanerMobil.Util +namespace BeWoPlanerMobil.Util { internal interface ISignable { diff --git a/BeWoPlanerMobil/Views/Customer/Customer.cshtml b/BeWoPlanerMobil/Views/Customer/Customer.cshtml index 5e6f51a56..1bf318057 100644 --- a/BeWoPlanerMobil/Views/Customer/Customer.cshtml +++ b/BeWoPlanerMobil/Views/Customer/Customer.cshtml @@ -496,7 +496,7 @@ - +
@@ -803,32 +803,32 @@ @* ----- Dokumente ----- *@ if(Model.HasRightToViewCustomerDocuments) { -
-
-
-
- -
-
- -
-
-
-
-
- @Html.Partial("DocumentPartial", Model) -
-
-
-
-
+
+
+
+
+ +
+
+ +
+
+
+
+
+ @Html.Partial("DocumentPartial", Model) +
+
+
+
+
} @* ----- Medikamentenliste ----- *@ - if (Model.IsAllowedToSeeMedikamentenliste && Model.SelectedCustomer.Medikamentenverordnungslisten.Any()) - { + if(Model.IsAllowedToSeeMedikamentenliste && Model.SelectedCustomer.Medikamentenverordnungslisten.Any()) + {
@@ -1028,13 +1028,13 @@
-
+
-
+
- @Html.Partial("CustomerAbsenceTimePartial", Model) + @Html.Partial("AbsenceTimePartial", Model)
@@ -1060,7 +1060,7 @@
-
+
@Html.Partial("CustomerBetreuungPartial", Model) @@ -1085,11 +1085,11 @@
diff --git a/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml b/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml deleted file mode 100644 index cde0bceb9..000000000 --- a/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimeFormPartial.cshtml +++ /dev/null @@ -1,233 +0,0 @@ -@using BeWoPlanerMobil.Models; -@using BS.Shared.Extensions - -@model CustomerModel - - - -@using(Html.BeginForm("CreateOrUpdateAbsenceTime", "Customer", FormMethod.Post, new { id = "create-absence-time-form" })) -{ - var isAllDay = Model.SelectedAbsenceTime?.Start?.IsTimeZero() ?? false; - var allDay = isAllDay ? "checked" : ""; - var isDisabled = isAllDay ? "disabled" : ""; - var startDate = Model.SelectedAbsenceTime?.Start?.ToString("yyyy-MM-dd"); - var endDate = Model.SelectedAbsenceTime?.End?.ToString("yyyy-MM-dd"); - var startTime = Model.SelectedAbsenceTime?.Start?.ToString("HH:mm"); - var endTime = Model.SelectedAbsenceTime?.End?.ToString("HH:mm"); - - if(startTime?.Equals("00:00") ?? false) - { - startTime = string.Empty; - } - - if(endTime?.Equals("00:00") ?? false) - { - endTime = string.Empty; - } - - - -
-
- -
-
- - @* Neue Datums- und Zeitinputs *@ -
-
-
-
- - Startdatum - -
- -
-
-
-
-
- - Enddatum - -
- -
-
-
- -
-
-
-
- - Von - -
- -
-
-
-
-
- - Bis - -
- -
-
-
- @* /Neue Datums- und Zeitinputs *@ - -
-
-
- - -
-
-
- -
-
-
-
-
-
- Kategorie -
-
- @Html.DropDownListFor(m => m.SelectedAbsenceReasonOid, Model.AbsenceReasonItems, new { @class = "custom-select", Id = "absence-reason-select", Name = "customer-absence-time-category" }) -
-
-
-
- -
-
-
-
-
-
- Erläuterung -
-
- -
-
-
-
-} \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/Employee/Employee.cshtml b/BeWoPlanerMobil/Views/Employee/Employee.cshtml new file mode 100644 index 000000000..77d23e5b1 --- /dev/null +++ b/BeWoPlanerMobil/Views/Employee/Employee.cshtml @@ -0,0 +1,81 @@ +@using BeWoPlanerMobil.Util +@model BeWoPlanerMobil.Models.EmployeeModel + +@{ + ViewBag.Title = "Mitarbeiter"; + + var selectedEmployeeName = Model.SelectedEmployee.FirstName + " " + Model.SelectedEmployee.LastName; +} + + + +
+
+
+
+ @selectedEmployeeName +
+
+ @if(Model.HasRightToViewOwnEmployee) + { +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ @Html.Partial("AbsenceTimePartial", Model) +
+
+
+
+ } +
+
+
+
+ +@if(Model.HasRightToViewOwnEmployee) +{ + +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/Person/Person.cshtml b/BeWoPlanerMobil/Views/Person/Person.cshtml new file mode 100644 index 000000000..b65bdad3f --- /dev/null +++ b/BeWoPlanerMobil/Views/Person/Person.cshtml @@ -0,0 +1 @@ +@model BeWoPlanerMobil.Models.PersonModel \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/Shared/AbsenceTimeFormPartial.cshtml b/BeWoPlanerMobil/Views/Shared/AbsenceTimeFormPartial.cshtml new file mode 100644 index 000000000..ae6358675 --- /dev/null +++ b/BeWoPlanerMobil/Views/Shared/AbsenceTimeFormPartial.cshtml @@ -0,0 +1,237 @@ +@using BeWoPlanerMobil.Models; +@using BS.Shared.Extensions + +@model IAbsenceTimeModel + +@{ + var controllerName = Model is EmployeeModel ? "Employee" : "Customer"; + var prefix = Model.HtmlPrefix; +} + + + +@using(Html.BeginForm("CreateOrUpdateAbsenceTime", controllerName, FormMethod.Post, new { id = "create-absence-time-form" })) +{ + var isAllDay = Model.SelectedAbsenceTime?.Start?.IsTimeZero() ?? false; + var allDay = isAllDay ? "checked" : ""; + var isDisabled = isAllDay ? "disabled" : ""; + var startDate = Model.SelectedAbsenceTime?.Start?.ToString("yyyy-MM-dd"); + var endDate = Model.SelectedAbsenceTime?.End?.ToString("yyyy-MM-dd"); + var startTime = Model.SelectedAbsenceTime?.Start?.ToString("HH:mm"); + var endTime = Model.SelectedAbsenceTime?.End?.ToString("HH:mm"); + + if(startTime?.Equals("00:00") ?? false) + { + startTime = string.Empty; + } + + if(endTime?.Equals("00:00") ?? false) + { + endTime = string.Empty; + } + + var absenceTimeOid = Model.SelectedAbsenceTime?.AbsenceTimeOid; + + + +
+
+ +
+
+ + #region Datumsangaben +
+
+
+
+ + Startdatum + +
+ +
+
+
+
+
+ + Enddatum + +
+ +
+
+
+ +
+
+
+
+ + Von + +
+ +
+
+
+
+
+ + Bis + +
+ +
+
+
+ +
+
+
+ + +
+
+
+ #endregion + +
+
+
+
+
+
+ Kategorie +
+
+ @Html.DropDownListFor(m => m.SelectedAbsenceReasonOid, Model.AbsenceReasonItems, new { @class = "custom-select", Id = "absence-reason-select", Name = Model.HtmlPrefix + "-absence-time-category" }) +
+
+
+
+ +
+
+
+
+
+
+ Erläuterung +
+
+ +
+
+
+
+} \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimePartial.cshtml b/BeWoPlanerMobil/Views/Shared/AbsenceTimePartial.cshtml similarity index 54% rename from BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimePartial.cshtml rename to BeWoPlanerMobil/Views/Shared/AbsenceTimePartial.cshtml index 4ce899de4..d4966fde6 100644 --- a/BeWoPlanerMobil/Views/Customer/CustomerAbsenceTimePartial.cshtml +++ b/BeWoPlanerMobil/Views/Shared/AbsenceTimePartial.cshtml @@ -1,74 +1,77 @@ -@using BeWoPlanerMobil.Models; +@using BeWoPlanerMobil.Models @using BeWoPlanerMobil.Util @using BS.Shared.Extensions +@model BeWoPlanerMobil.Models.IAbsenceTimeModel -@model CustomerModel +@{ + var controllerName = Model is CustomerModel ? "Customer" : "Employee"; +} -@foreach(var absenceTime in Model.SelectedCustomer.AbsenceTimes.OrderByDescending(at => at.Start)) +@foreach(var absenceTime in Model.AbsenceTimeObject.AbsenceTimes.OrderByDescending(at => at.Start)) { if(absenceTime.Start is null) { continue; } -
+
@@ -98,7 +101,7 @@
-
+
diff --git a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml index bb1f1f305..c2132ffe8 100644 --- a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml +++ b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml @@ -410,6 +410,19 @@ } } + + if(Model.HasRightToViewOwnEmployee) + { + using(Html.BeginForm("RedirectToEmployees", "Main", FormMethod.Post)) + { + + } + } } diff --git a/Service/DCEntityMapper/CompactEmployeeDC_Employee.cs b/Service/DCEntityMapper/CompactEmployeeDC_Employee.cs index 577c9ecec..83fc7f91d 100644 --- a/Service/DCEntityMapper/CompactEmployeeDC_Employee.cs +++ b/Service/DCEntityMapper/CompactEmployeeDC_Employee.cs @@ -22,7 +22,7 @@ namespace BeWo.Service.DCEntityMapper pDataContract.EmployeeColor = pEntity.EmployeeColor; pDataContract.RelatedCustomerOIDList = pEntity.Employee2CustomerList.Where(w => w.CustomerOid.HasValue).Select(s => s.CustomerOid.Value).ToList(); - return pDataContract; + return pDataContract; } // COMPACT EMPLOYEES ARE NOT EDITABLE diff --git a/Shared/DataContracts/Compact/CompactEmployeeDC.cs b/Shared/DataContracts/Compact/CompactEmployeeDC.cs index 6a6680d15..0cdc3d4f9 100644 --- a/Shared/DataContracts/Compact/CompactEmployeeDC.cs +++ b/Shared/DataContracts/Compact/CompactEmployeeDC.cs @@ -28,7 +28,7 @@ namespace BS.Shared.DataContracts.Compact [DataMember] public String Details2 { get; set; } [DataMember] public String Details3 { get; set; } - [DataMember] + [DataMember] public List RelatedCustomerOIDList { get diff --git a/Shared/DataContracts/CustomerDC.cs b/Shared/DataContracts/CustomerDC.cs index d6e6de530..e61680627 100644 --- a/Shared/DataContracts/CustomerDC.cs +++ b/Shared/DataContracts/CustomerDC.cs @@ -9,7 +9,7 @@ using BS.Shared.DataContracts.Wohnhilfe; namespace BS.Shared.DataContracts { [DataContract] - public class CustomerDC : PersonDC + public class CustomerDC : PersonDC, IAbsenceTime { [DataMember] public List AbsenceTimes { get; set; } [DataMember] public List AssessmentSheetCategoryDCs { get; set; } diff --git a/Shared/DataContracts/EmployeeDC.cs b/Shared/DataContracts/EmployeeDC.cs index f114e4ed3..86af90a57 100644 --- a/Shared/DataContracts/EmployeeDC.cs +++ b/Shared/DataContracts/EmployeeDC.cs @@ -8,7 +8,7 @@ namespace BS.Shared.DataContracts { [DebuggerDisplay("Oid = {EmployeeOid}, Name = {LastNameFirstName}")] [DataContract] - public class EmployeeDC : PersonDC, IDataContract + public class EmployeeDC : PersonDC, IDataContract, IAbsenceTime { private List _Focuses; diff --git a/Shared/DataContracts/IAbsenceTime.cs b/Shared/DataContracts/IAbsenceTime.cs new file mode 100644 index 000000000..50dd0b71d --- /dev/null +++ b/Shared/DataContracts/IAbsenceTime.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace BS.Shared.DataContracts +{ + /// + /// Damit im MoK nur ein PartialView für die darstellung der Abwesenheiten benötigt wird. + /// + public interface IAbsenceTime + { + List AbsenceTimes { get; set; } + } +} diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj index 00d94001b..a10316e4f 100644 --- a/Shared/Shared.csproj +++ b/Shared/Shared.csproj @@ -187,6 +187,7 @@ +