Merge branch 'master' of ssh://float.beyondsoft.de/git/beyondSoft/BeWo

This commit is contained in:
Alexandra
2022-02-14 15:02:21 +01:00
76 changed files with 8718 additions and 5201 deletions

View File

@@ -505,6 +505,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AidshilfeEssen", "ReportImp
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutismusKoelnBonn", "ReportImp\AutismusKoelnBonn\AutismusKoelnBonn.csproj", "{43024B23-C380-4DCE-8DC0-930292417A25}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kimm", "ReportImp\Kimm\Kimm.csproj", "{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|.NET = Debug|.NET
@@ -3932,6 +3934,22 @@ Global
{43024B23-C380-4DCE-8DC0-930292417A25}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{43024B23-C380-4DCE-8DC0-930292417A25}.Release|x86.ActiveCfg = Release|Any CPU
{43024B23-C380-4DCE-8DC0-930292417A25}.Release|x86.Build.0 = Release|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Debug|.NET.ActiveCfg = Debug|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Debug|.NET.Build.0 = Debug|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Debug|x86.ActiveCfg = Debug|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Debug|x86.Build.0 = Debug|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Release|.NET.ActiveCfg = Release|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Release|.NET.Build.0 = Release|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Release|Any CPU.Build.0 = Release|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Release|x86.ActiveCfg = Release|Any CPU
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -4180,6 +4198,7 @@ Global
{A9B88C6C-8965-4F08-B647-42CF0D8058A5} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{C52AC467-D452-4396-8DB3-D04AC1045CFB} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{43024B23-C380-4DCE-8DC0-930292417A25} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5} = {D8A691C5-146D-4613-86CC-438F02FE9106}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FBE985BB-9F0F-4DBB-8F94-ABC37A803FF9}

File diff suppressed because it is too large Load Diff

11
BeWo/packages.config Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClrHeapAllocationAnalyzer" version="3.0.0" targetFramework="net45" />
<package id="CsvHelper" version="15.0.5" targetFramework="net45" />
<package id="Microsoft.CSharp" version="4.5.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net45" />
<package id="RestSharp" version="105.2.3" targetFramework="net45" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net45" />
<package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net45" />
<package id="System.ValueTuple" version="4.4.0" targetFramework="net45" />
</packages>

View File

@@ -24,7 +24,7 @@
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<TargetFrameworkProfile />
<Use64BitIISExpress />
<Use64BitIISExpress>false</Use64BitIISExpress>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TypeScriptToolsVersion>3.7</TypeScriptToolsVersion>
@@ -87,8 +87,8 @@
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
<Reference Include="log4net, Version=2.0.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.13\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
@@ -103,8 +103,8 @@
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="RestSharp, Version=106.12.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
<HintPath>..\packages\RestSharp.106.12.0\lib\net452\RestSharp.dll</HintPath>
<Reference Include="RestSharp, Version=106.13.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
<HintPath>..\packages\RestSharp.106.13.0\lib\net452\RestSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
@@ -812,8 +812,8 @@
<Content Include="Scripts\jquery-3.6.0.slim.min.js" />
<Content Include="Scripts\devexpress-scripts\knockout-3.5.1.js" />
<None Include="Scripts\jquery.validate-vsdoc.js" />
<Content Include="Scripts\jquery-ui-1.12.1.js" />
<Content Include="Scripts\jquery-ui-1.12.1.min.js" />
<Content Include="Scripts\jquery-ui-1.13.0.js" />
<Content Include="Scripts\jquery-ui-1.13.0.min.js" />
<Content Include="Scripts\jquery.validate.js" />
<Content Include="Scripts\jquery.validate.min.js" />
<Content Include="Scripts\jquery.validate.unobtrusive.js" />
@@ -1324,6 +1324,8 @@
<Content Include="Scripts\umd\popper-utils.min.js" />
<Content Include="Scripts\umd\popper.js" />
<Content Include="Scripts\umd\popper.min.js" />
<Content Include="Scripts\utils\list-utils.js" />
<Content Include="Scripts\utils\resources-list-utils.js" />
<Content Include="Scripts\utils\trimCanvas.js" />
<Content Include="Scripts\utils\dateUtils.js" />
<Content Include="Scripts\view-scripts\report.js" />
@@ -1365,6 +1367,11 @@
<Content Include="Views\Scheduler\FiveDaySchedulerPartial.cshtml" />
<Content Include="Views\Scheduler\OneDaySchedulerPartial.cshtml" />
<Content Include="Views\Scheduler\SevenDaySchedulerPartial.cshtml" />
<Content Include="Views\Scheduler\AppointmentIntervalFinderPartial.cshtml" />
<Content Include="Views\Scheduler\AppointmentIntervalFinderResultPartial.cshtml" />
<Content Include="Views\Scheduler\AppointmentFormPartial.cshtml" />
<Content Include="Views\Main\GroupBookingPartial.cshtml" />
<Content Include="Views\Main\SingleBookingPartial.cshtml" />
</ItemGroup>
<ItemGroup>
<Folder Include="App_Data\" />
@@ -1564,7 +1571,7 @@
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<UseIIS>True</UseIIS>
<AutoAssignPort>False</AutoAssignPort>
<DevelopmentServerPort>8808</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<UseIISExpress>true</UseIISExpress>
<Use64BitIISExpress />
<UseIISExpress>false</UseIISExpress>
<Use64BitIISExpress>false</Use64BitIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />

View File

@@ -95,4 +95,8 @@ $theme-colors: ( "bewo-goal-rating": #0000ff,"bewo-dev": #00cf7c, "primary": #FF
}
$font-family-sans-serif: 'Signika Negative', sans-serif;
.interval-finder-customer-text {}
// col-xxl 1200px und col-xxxl 1800px
@import "../node_modules/bootstrap/scss/bootstrap";

View File

@@ -23,7 +23,9 @@ namespace BeWoPlanerMobil.Controllers
ViewData[LoginErrorIndex] = string.Empty;
TempData[LoginErrorIndex] = string.Empty;
if (MobileSessionFacade.IsUserLoggedIn() && !Request.Browser.Browser.Equals("InternetExplorer"))
var isUserLoggedIn = MobileSessionFacade.IsUserLoggedIn();
if (isUserLoggedIn && !Request.Browser.Browser.Equals("InternetExplorer"))
{
var loginState = MobileUtils.GetLoginState(MobileSessionFacade.Tenant);
@@ -67,7 +69,7 @@ namespace BeWoPlanerMobil.Controllers
return RedirectToActionPermanent("Main", "Main");
}
if(MobileSessionFacade.IsUserLoggedIn() && Request.Browser.Browser.Equals("InternetExplorer"))
if(isUserLoggedIn && Request.Browser.Browser.Equals("InternetExplorer"))
{
MobileSessionFacade.LogUserOut();
FormsAuthentication.SignOut();

View File

@@ -175,6 +175,8 @@ namespace BeWoPlanerMobil.Controllers
Model.Employees = new List<CompactEmployeeDC> { MobileSessionFacade.LoggedInCompactEmployee };
}
Model.Employees = Model.Employees.OrderBy(e => e.LastName).ThenBy(e => e.FirstName).ToList();
if(Model?.Employee?.EmployeeOid.HasValue ?? false)
{
Model.SupportConcepts = EmployeeService.GetActiveSupportConceptsForEmployee(Model.Employee.EmployeeOid, Model.SelectedSupportConceptFilter);

View File

@@ -237,15 +237,28 @@ namespace BeWoPlanerMobil.Controllers
var location = formCollection[FormCollectionConstants.AppointmentLocationKey];
var notice = formCollection[FormCollectionConstants.AppointmentNoticeKey];
var isPrivate = formCollection[FormCollectionConstants.AppointmentIsPrivate] == "true,false";
var allDay = formCollection[FormCollectionConstants.AppointmentIsAllDay] == "true,false";
var isSuccessfulStartTime = DateTime.TryParseExact(rawStartTime, "HH:mm", null, DateTimeStyles.None, out var startTime);
var isSuccessfulEndTime = DateTime.TryParseExact(rawEndTime, "HH:mm", null, DateTimeStyles.None, out var endTime);
if(rawStartTime == null)
{
rawStartTime = "00:00";
}
if (rawEndTime == null)
{
rawEndTime = "00:00";
}
var startAndEnd = ConvertStringDatesToDateTimes($"{rawStartDate} {rawStartTime}", $"{rawEndDate} {rawEndTime}");
var startDate = startAndEnd.StartDate;
var endDate = startAndEnd.EndDate;
if (isSuccessfulStartTime && isSuccessfulEndTime)
if (!allDay && isSuccessfulStartTime && isSuccessfulEndTime || allDay)
{
startDate = startDate.MergeDatesByDate(startTime);
endDate = endDate.MergeDatesByDate(endTime);
@@ -279,6 +292,8 @@ namespace BeWoPlanerMobil.Controllers
appointmentToInsert.Originator = MobileSessionFacade.LoggedInCompactEmployee;
appointmentToInsert.Location = location;
appointmentToInsert.ActivationType = ActivationTypeId.Active;
appointmentToInsert.IsPrivate = isPrivate;
appointmentToInsert.AllDay = allDay;
if (!isNew)
{
@@ -380,9 +395,15 @@ namespace BeWoPlanerMobil.Controllers
if (isSuccessful)
{
Model.SelectedAppointment = Model.Appointments.FirstOrDefault(app => app.SchedulerAppointmentOid.HasValue && app.SchedulerAppointmentOid.Value == appointmentOid);
Model.SelectedResources = Model.SelectedAppointment?.ResourceList ?? new List<ResourceDC>();
Model.SelectedEmployees = Model.SelectedAppointment?.EmployeeList.Select(e2a => e2a.Employee).ToList() ?? new List<CompactEmployeeDC>();
Model.SelectedCustomers = Model.SelectedAppointment?.CustomerList ?? new List<CompactCustomerDC>();
if(Model.SelectedAppointment != null)
{
Model.IsAllDay = Model.SelectedAppointment.AllDay;
Model.IsPrivate = Model.SelectedAppointment.IsPrivate;
Model.SelectedResources = Model.SelectedAppointment?.ResourceList ?? new List<ResourceDC>();
Model.SelectedEmployees = Model.SelectedAppointment?.EmployeeList.Select(e2a => e2a.Employee).ToList() ?? new List<CompactEmployeeDC>();
Model.SelectedCustomers = Model.SelectedAppointment?.CustomerList ?? new List<CompactCustomerDC>();
}
}
return RedirectToActionPermanent("Scheduler");
@@ -395,6 +416,8 @@ namespace BeWoPlanerMobil.Controllers
{
Model.SelectedAppointment = null;
Model.SelectedResources.Clear();
Model.IsAllDay = false;
Model.IsPrivate = false;
}
return Json(null, JsonRequestBehavior.AllowGet);
@@ -467,7 +490,7 @@ namespace BeWoPlanerMobil.Controllers
}
[Authorize]
public string SelectEmployeesForAppointment(string employeeOids)
public string SelectEmployeesForAppointment(string oidString)
{
if (Model == null)
{
@@ -475,7 +498,7 @@ namespace BeWoPlanerMobil.Controllers
return _LeerzeichenFuerGetMethoden;
}
var oidList = ConvertOidStringToList(employeeOids);
var oidList = ConvertOidStringToList(oidString);
Model.SelectedEmployees = Model.AllEmployees.Where(employee => oidList.Contains(employee.EmployeeOid)).ToList();
@@ -483,7 +506,7 @@ namespace BeWoPlanerMobil.Controllers
}
[Authorize]
public string SelectCustomersForAppointment(string customerOids)
public string SelectCustomersForAppointment(string oidString)
{
if (Model == null)
{
@@ -491,7 +514,7 @@ namespace BeWoPlanerMobil.Controllers
return _LeerzeichenFuerGetMethoden;
}
var oidList = ConvertOidStringToList(customerOids);
var oidList = ConvertOidStringToList(oidString);
Model.SelectedCustomers = Model.AllCustomers.Where(customer => oidList.Contains(customer.CustomerOid)).ToList();
@@ -549,5 +572,177 @@ namespace BeWoPlanerMobil.Controllers
return RedirectToActionPermanent("Scheduler");
}
[Authorize]
[HttpPost]
public ActionResult FindFreeIntervals(FormCollection formCollection)
{
if(Model == null)
{
return Logout();
}
var d = formCollection["Duration"];
var s = formCollection["IntervalStart"];
var st = formCollection["IntervalStartTime"];
var e = formCollection["IntervalEnd"];
var et = formCollection["IntervalEndTime"];
if (int.TryParse(d, out var duration) && DateTime.TryParse($"{s} {st}", out var start) && DateTime.TryParse($"{e} {et}", out var end) && Model.Employee.EmployeeOid.HasValue)
{
var customerOids = Model.SelectedCustomersForIntervalFinder.Select(c => c.CustomerOid).ToList();
var employeeOids = Model.SelectedEmployeesForIntervalFinder.Select(m => m.EmployeeOid).ToList();
var resourceOids = Model.SelectedResourcesForIntervalFinder.Where(w => w.ResourceOid.HasValue).Select(r => r.ResourceOid.Value).ToList();
Model.FreeIntervals = KalenderService.FindAppointmentsInRange(duration, start, end, resourceOids, customerOids, employeeOids, Model.Employee.EmployeeOid.Value);
Model.IntervalStartDate = start;
Model.IntervalEndDate = end;
Model.IntervalDuration = duration;
}
return RedirectToActionPermanent("Scheduler");
}
[Authorize]
public string SelectEmployeesForIntervalFinder(string oidString)
{
if (Model == null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
var employeeOids = ConvertOidStringToList(oidString);
Model.SelectedEmployeesForIntervalFinder = Model.AllEmployees.Where(employee => employeeOids.Contains(employee.EmployeeOid)).ToList();
return JsonConvert.SerializeObject(Model.SelectedEmployeesForIntervalFinder.OrderBy(o => o.DetailDescription));
}
[Authorize]
public string SelectCustomersForIntervalFinder(string oidString)
{
if (Model == null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
var customerOids = ConvertOidStringToList(oidString);
Model.SelectedCustomersForIntervalFinder = Model.AllCustomers.Where(customer => customerOids.Contains(customer.CustomerOid)).ToList();
return JsonConvert.SerializeObject(Model.SelectedCustomersForIntervalFinder.OrderBy(o => o.LastNameFirstName));
}
[Authorize]
public string SelectResourcesForIntervalFinder(string resourceOids)
{
if (Model == null)
{
Logout();
return _LeerzeichenFuerGetMethoden;
}
var resourceOidList = ConvertOidStringToList(resourceOids);
var list = new List<ResourceDC>();
Model.ResourceCategories2Resources.Values.DoForEach(l => l.DoForEach(s => list.AddIfNotIn(s)));
Model.SelectedResourcesForIntervalFinder = list.Where(resource => resource.ResourceOid.HasValue && resourceOidList.Contains(resource.ResourceOid.Value)).ToList();
return JsonConvert.SerializeObject(Model.SelectedResourcesForIntervalFinder);
}
[Authorize]
[HttpPost]
public ActionResult SetIsInIntervalFinderMode(FormCollection formCollection)
{
if(Model == null)
{
return Logout();
}
var newValue = !Model.IsInIntervalFinderMode;
Model.IsInIntervalFinderMode = newValue;
if(!newValue)
{
Model.SelectedEmployeesForIntervalFinder.Clear();
Model.SelectedCustomersForIntervalFinder.Clear();
Model.SelectedResourcesForIntervalFinder.Clear();
}
return RedirectToActionPermanent("Scheduler");
}
[Authorize]
[HttpPost]
public ActionResult SelectIntervalForForm(FormCollection formCollection)
{
if(Model == null)
{
return Logout();
}
var startStr = formCollection["startDate"];
var endStr = formCollection["endDate"];
if(DateTime.TryParse(startStr, out var startDate) && DateTime.TryParse(endStr, out var endDate))
{
Model.IsInIntervalFinderMode = false;
var employees2Appointment = new List<Employee2SchedulerAppointmentDC>();
Model.SelectedEmployeesForIntervalFinder.DoForEach(employee =>
{
employees2Appointment.Add(new Employee2SchedulerAppointmentDC
{
Employee = employee
});
});
Model.SelectedAppointment = new SchedulerAppointmentDC()
{
ActivationType = ActivationTypeId.Active,
IsTask = false,
IsPrivate = false,
Originator = MobileSessionFacade.LoggedInCompactEmployee,
StartDate = startDate,
EndDate = endDate
};
Model.SelectedCustomers = Model.SelectedCustomersForIntervalFinder.Clone();
Model.SelectedEmployees = Model.SelectedEmployeesForIntervalFinder.Clone();
Model.SelectedResources = Model.SelectedResourcesForIntervalFinder.Clone();
Model.SelectedCustomersForIntervalFinder.Clear();
Model.SelectedEmployeesForIntervalFinder.Clear();
Model.SelectedResourcesForIntervalFinder.Clear();
Model.IntervalStartDate = null;
Model.IntervalEndDate = null;
}
return RedirectToActionPermanent("Scheduler");
}
[Authorize]
public string ResetIntervalFinder()
{
if(Model == null)
{
return _LeerzeichenFuerGetMethoden;
}
Model.SelectedCustomersForIntervalFinder.Clear();
Model.SelectedEmployeesForIntervalFinder.Clear();
Model.SelectedResourcesForIntervalFinder.Clear();
return _LeerzeichenFuerGetMethoden;
}
}
}

View File

@@ -6,6 +6,7 @@ using System.Web.Mvc;
using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
@@ -132,35 +133,7 @@ namespace BeWoPlanerMobil.Models
public List<CompactCustomerDC> SelectedCustomers { get; set; } = new List<CompactCustomerDC>();
public bool IsInEditMode => SelectedAppointment != null;
// Wird nicht benötigt
public string ColWidth
{
get
{
var isOwnAppointment = !IsInEditMode || SelectedAppointment.Originator.EmployeeOid == Employee.EmployeeOid;
var v1 = HasRightToInsertEmployeeAppointments || IsInEditMode && HasRightToEditEmployeeAppointments;
var v2 = HasRightToInsertRessourceAppointments || IsInEditMode && HasRightToEditResourceAppointments;
if(IsInEditMode && !isOwnAppointment)
{
v2 = HasRightToEditOthersResourceAppointments;
}
var v3 = HasRightToInsertCustomerAppointments || IsInEditMode && HasRightToEditCustomerAppointments;
var a = v1 ? 1 : 0;
var b = v2 ? 1 : 0;
var c = v3 ? 1 : 0;
var dividend = a + b + c;
return dividend == 0 ? "col-12" : $"col-{12 / a + b + c}";
}
}
public bool HasResourcesEmployeesOrCustomers
{
get
@@ -184,6 +157,32 @@ namespace BeWoPlanerMobil.Models
public bool ShowEmployeeButton => IsInEditMode ? HasRightToInsertEmployeeAppointments : HasRightToEditEmployeeAppointments;
public bool ShowCustomerButton => IsInEditMode ? HasRightToInsertCustomerAppointments : HasRightToEditCustomerAppointments;
//IntervalFinder
public List<CompactEmployeeDC> SelectedEmployeesForIntervalFinder { get; set; } = new List<CompactEmployeeDC>();
public List<CompactCustomerDC> SelectedCustomersForIntervalFinder { get; set; } = new List<CompactCustomerDC>();
public List<ResourceDC> SelectedResourcesForIntervalFinder { get; set; } = new List<ResourceDC>();
public Dictionary<DateTime, List<DateTimeSpan>> FreeIntervals { get; set; } = new Dictionary<DateTime, List<DateTimeSpan>>();
public bool IsInIntervalFinderMode { get; set; }
public DateTime? IntervalStartDate { get; set; }
public DateTime? IntervalEndDate { get; set; }
public string IntervalStartDateStr => IntervalStartDate.HasValue ? $"{IntervalStartDate:dd.MM.yyyy}" : string.Empty;
public string IntervalEndDateStr => IntervalEndDate.HasValue ? $"{IntervalEndDate:dd.MM.yyyy}" : string.Empty;
public string IntervalStartTimeStr => IntervalStartDate.HasValue ? $"{IntervalStartDate:HH:mm}" : string.Empty;
public string IntervalEndTimeStr => IntervalEndDate.HasValue ? $"{IntervalEndDate:HH:mm}" : string.Empty;
public int? IntervalDuration { get; set; }
public string IntervalDurationStr => IntervalDuration.HasValue ? $"{IntervalDuration}" : string.Empty;
[Display(Name = "Ganztägig")]
public bool IsAllDay { get; set; }
[Display(Name = "Privat")]
public bool IsPrivate { get; set; }
}
public class WeekViewObject
@@ -197,7 +196,7 @@ namespace BeWoPlanerMobil.Models
public KeyValuePair<DateTime, List<AppointmentListItem>> SaturdayAppointments { get; set; }
public KeyValuePair<DateTime, List<AppointmentListItem>> SundayAppointments { get; set; }
public WeekViewObject(IReadOnlyCollection<SchedulerAppointmentDC> appointments, DateTime monday)
public WeekViewObject(IEnumerable<SchedulerAppointmentDC> appointments, DateTime monday)
{
var first = monday.Date;
var last = first.AddDays(6);

View File

@@ -117,7 +117,7 @@ function addEmployeeToGroupBooking() {
var oidString = "";
$("#employee-list input:checked").each(function() {
$("#group-booking-employee-selection-popup input:checked").each(function() {
var oid = $(this).val();
selectedEmployees.push(oid);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -28,6 +28,19 @@ function showMessagePopup(title, message) {
);
}
function showMessagePopupWithHtml(title, messageAsHtml) {
$("#popupTitle").text(title);
$("#modal-body").html(messageAsHtml);
$("#messagePopup").modal(
{
backdrop: "static",
keyboard: false
}
);
}
function showMessagePopupWithCallback(title, message, callback, executeCallbackByBothButtons) {
$("#popupTitle").text(title);
@@ -292,4 +305,33 @@ function toggleChevron(chevronId, cardBodyId) {
function validateNonEmptyString(stringValue) {
return !isUndefinedOrNull(stringValue) && !isEmptyOrSpaces(stringValue) && typeof stringValue === "string";
}
}
function showCollapsable(collapsableElement) {
try {
if (collapsableElement === null || collapsableElement === undefined) {
return;
}
if (!collapsableElement.hasClass("show")) {
collapsableElement.addClass("show");
}
} catch (error) {
logError(error.message);
}
}
function hideCollapsable(collapsableElement) {
try {
if (collapsableElement === null || collapsableElement === undefined) {
return;
}
if (collapsableElement.hasClass("show")) {
collapsableElement.removeClass("show");
}
} catch (error) {
logError(error.message);
}
}

View File

@@ -10,11 +10,14 @@
$("#scheduler-start-date, #scheduler-end-date").val(moment().format("DD.MM.YYYY"));
$("#resources-popup input:checked").each(function() {
$("#resources-popup input:checked, #customers-popup input:checked, #employees-popup input:checked").each(function() {
$(this).prop("checked", false);
});
$("#selected-resources-list").empty();
$("#selected-resources-list, #selected-employees-list, #selected-customers-list").empty();
$("#IsAllDay").prop("checked", false);
$("#IsPrivate").prop("checked", false);
}
function submitInsertAppointmentForm() {
@@ -28,13 +31,16 @@ function submitSchedulerDateForm() {
}
function validateAppointmentForm() {
var isAllDay = $("#IsAllDay").prop("checked") === true;
var startTimePicker = $("#scheduler-start-time-picker");
var startDatePicker = $("#scheduler-start-date-picker");
var endTimePicker = $("#scheduler-end-time-picker");
var endDatePicker = $("#scheduler-end-date-picker");
var isStartTimeInputEmpty = isEmptyOrSpaces($("#scheduler-start-time").val());
var isEndTimeInputEmpty = isEmptyOrSpaces($("#scheduler-end-time").val());
var isStartTimeInputEmpty = isAllDay ? false : isEmptyOrSpaces($("#scheduler-start-time").val());
var isEndTimeInputEmpty = isAllDay ? false : isEmptyOrSpaces($("#scheduler-end-time").val());
var isStartDateInputEmpty = isEmptyOrSpaces($("#scheduler-start-date").val());
var isEndDateInputEmpty = isEmptyOrSpaces($("#scheduler-end-date").val());
@@ -57,14 +63,15 @@ function validateAppointmentForm() {
var a = startDate === undefined || startDate === null || !startDate.isValid();
var b = endDate === undefined || endDate === null || !endDate.isValid();
var c = startTime === undefined || startTime === null || !startTime.isValid();
var d = endTime === undefined || endTime === null || !endTime.isValid();
if(a || b || c || d || isStartDateInputEmpty || isStartTimeInputEmpty || isEndTimeInputEmpty || isEndDateInputEmpty) {
var c = isAllDay ? false : startTime === undefined || startTime === null || !startTime.isValid();
var d = isAllDay ? false : endTime === undefined || endTime === null || !endTime.isValid();
if (a || b || c || d || isStartDateInputEmpty || isStartTimeInputEmpty || isEndTimeInputEmpty || isEndDateInputEmpty) {
hideSpinner();
$("#messagePopup .modal-body").html('<div class="alert alert-danger" role="alert">Die Zeit- und/oder Datumsangaben sind nicht korrekt.</div>');
showMessagePopup("Fehler");
showMessagePopupWithHtml("Fehler", '<div class="alert alert-danger" role="alert">Die Zeit- und/oder Datumsangaben sind nicht korrekt.</div>');
$("#scheduler-start-time, #scheduler-end-time").val("");
return;
}
@@ -73,11 +80,23 @@ function validateAppointmentForm() {
endDate = startDate.clone();
}
startDate = startDate.hours(startTime.hours());
startDate = startDate.minutes(startTime.minutes());
var startHours = 0;
var startMinutes = 0;
var endHours = 0;
var endMinutes = 0;
endDate = endDate.hours(endTime.hours());
endDate = endDate.minutes(endTime.minutes());
if(isAllDay === false) {
startHours = startTime.hours();
startMinutes = startTime.minutes();
endHours = endTime.hours();
endMinutes = endTime.minutes();
}
startDate = startDate.hours(startHours);
startDate = startDate.minutes(startMinutes);
endDate = endDate.hours(endHours);
endDate = endDate.minutes(endMinutes);
if(endDate.isBefore(startDate)) {
hideSpinner();
@@ -180,14 +199,18 @@ function insertOrUpdateAppointment(formattedStartDate, formattedEndDate, formatt
}
function hideAppointmentForm() {
logDebug("hiding appointment form");
$("#form-container").addClass("d-none d-sm-none");
}
function showAppointmentForm() {
logDebug("showing appointment form");
$("#form-container").removeClass("d-none d-sm-none");
}
function toggleAppointmentForm() {
logError("toggling appointment form");
var isVisible = $("#form-container").css("display") === "block";
if (isVisible) {
@@ -197,183 +220,113 @@ function toggleAppointmentForm() {
}
}
function changeResourceSelection() {
var selectedOids = [];
var oidString = "";
function listSearchOnChange(searchInputId, entryClass, textClass) {
try {
var text = $("#" + searchInputId).val().toLowerCase();
$("#resources-popup input:checked").each(function() {
var id = $(this).attr("id");
selectedOids.push(id.split("-")[0]);
});
var entries = $("." + entryClass);
for (var i = 0; i < selectedOids.length; i++) {
oidString += selectedOids[i] + ",";
if (text.length === 0) {
entries.show();
}
$.each(entries, function (index, item) {
var customer = $(item);
if (customer.find("." + textClass).text().toLowerCase().includes(text)) {
customer.show();
} else {
customer.hide();
}
});
} catch (error) {
logError(error.message);
}
$.get(getSelectResourcesForAppointmentUrl(), { resourceOids: oidString }).done(updateSelectedResourceList);
}
function updateSelectedResourceList(jsonResult) {
var list = $("#selected-resources-list");
list.empty();
if (isEmptyOrSpaces(jsonResult)) {
return;
function resetSearch(searchInputId, entryClass) {
try {
$("#" + searchInputId).val("");
$("." + entryClass).show();
} catch (error) {
logError(error.message);
}
var resourceList = $.parseJSON(jsonResult);
$.each(resourceList, function(index, customListItem) {
var html =
"<div class='list-group-item' id='relation-item-" + customListItem.ResourceOid + "'>" +
"<div class='row'>" +
"<div class='col my-auto'>" +
"<i class='fas fa-cubes text-bewo-resource mr-2'></i>" + customListItem.Name +
"</div>" +
"<div class='col-auto my-auto'>" +
"<button type='button' class='btn btn-primary' onclick='removeSelectedResource(" + customListItem.ResourceOid + ")'>" +
"<span class='fas fa-times-circle'></span>" +
"</button>" +
"</div>" +
"</div>" +
"</div>";
list.append(html);
});
}
function removeSelectedResource(resourceOid) {
$("#relation-item-" + resourceOid).remove();
function resourceSearchOnChange(searchInputId) {
try {
var text = $("#" + searchInputId).val().toLowerCase();
var checkbox = $("#" + resourceOid + "-checkbox");
var entries = $(".resource-text");
if (checkbox.length) {
checkbox.prop("checked", false);
if (text.length === 0 || !text.replace(/\s\g/, '').length) {
resetResourceSearch(searchInputId);
return;
}
$.each(entries, function (index, entry) {
var checkbox = $(entry);
var categoryCard = checkbox.closest(".category-card");
var list = categoryCard.find(".collapse");
var resourceName = checkbox.find(".resource-name-label").text().toLowerCase();
var includesText = resourceName.includes(text);
if (includesText) {
checkbox.show();
categoryCard.show();
showCollapsable($(list));
} else {
checkbox.hide();
}
});
var lists = $(".resource-list");
var cardsToHide = [];
$.each(lists, function (index, item) {
var children = $(item).children();
var hasAtLeastOneVisibleChild = false;
var card = $(item).parent().parent();
for (var i = 0; i < children.length; i++) {
var child = children[i];
hasAtLeastOneVisibleChild = $(child).css("display") === "block";
if (hasAtLeastOneVisibleChild === true) {
break;
}
}
if (hasAtLeastOneVisibleChild === false) {
cardsToHide.push(card);
}
});
$.each(cardsToHide, function (index, item) {
$(item).hide();
});
} catch (error) {
logError(error.message);
}
changeResourceSelection();
}
// Mitarbeiter
function changeEmployeeSelection() {
var selectedOids = [];
var oidString = "";
function resetResourceSearch(searchInputId) {
try {
logDebug("reset resource search: " + searchInputId);
$("#employees-popup input:checked").each(function () {
var id = $(this).attr("id");
$("#" + searchInputId).val("");
selectedOids.push(id.split("-")[1]);
});
var entries = $(".resource-text");
var categoryCard = $(".category-card");
var collapsable = categoryCard.find(".collapse");
for (var i = 0; i < selectedOids.length; i++) {
oidString += selectedOids[i] + ",";
entries.show();
categoryCard.show();
hideCollapsable(collapsable);
} catch(error) {
logError(error.message);
}
$.get(getSelectEmployeesForAppointmentUrl(), { employeeOids: oidString }).done(updateSelectedEmployeeList);
}
function updateSelectedEmployeeList(jsonResult) {
var list = $("#selected-employees-list");
list.empty();
if (isEmptyOrSpaces(jsonResult)) {
return;
}
var employeeList = $.parseJSON(jsonResult);
$.each(employeeList, function (index, customListItem) {
var html =
"<div class='list-group-item my-auto' id='related-employee-" + customListItem.EmployeeOid + "'>" +
"<div class='row'>" +
"<div class='input-group'>" +
"<div class='input-group-prepend'>" +
"<i class='fas fa-user text-bewo-employee h-100'></i>" +
"</div>" +
"<p class='form-control border-0 bg-transparent text-truncate'>" + customListItem.LastName + ", " + customListItem.FirstName + "<p>" +
"<div class='input-group-append'>" +
"<button class='btn btn-primary' type='button' onclick='removeSelectedEmployee(" + customListItem.EmployeeOid + ")'><span class='fas fa-times-circle'></span></button>" +
"</div>" +
"</div>" +
"</div>" +
"</div>";
list.append(html);
});
}
function removeSelectedEmployee(employeeOid) {
$("#related-employee-" + employeeOid).remove();
var checkbox = $("#employee-" + employeeOid + "-checkbox");
if (checkbox.length) {
checkbox.prop("checked", false);
}
changeEmployeeSelection();
}
// Klienten
function changeCustomerSelection() {
var selectedOids = [];
var oidString = "";
$("#customers-popup input:checked").each(function () {
var id = $(this).attr("id");
selectedOids.push(id.split("-")[1]);
});
for (var i = 0; i < selectedOids.length; i++) {
oidString += selectedOids[i] + ",";
}
$.get(getSelectCustomersForAppointmentUrl(), { customerOids: oidString }).done(updateSelectedCustomerList);
}
function updateSelectedCustomerList(jsonResult) {
var list = $("#selected-customers-list");
list.empty();
if (isEmptyOrSpaces(jsonResult)) {
return;
}
var customerList = $.parseJSON(jsonResult);
$.each(customerList, function (index, customListItem) {
var html =
"<div class='list-group-item my-auto' id='related-customer-item-" + customListItem.CustomerOid + "'>" +
"<div class='row'>" +
"<div class='input-group'>" +
"<div class='input-group-prepend'>" +
"<i class='fas fa-user text-bewo-customers h-100'></i>" +
"</div>" +
"<p class='form-control border-0 bg-transparent text-truncate'>" + customListItem.LastName + ", " + customListItem.FirstName+ "<p>" +
"<div class='input-group-append'>" +
"<button class='btn btn-primary' type='button' onclick='removeSelectedCustomer(" + customListItem.CustomerOid + ")'><span class='fas fa-times-circle'></span></button>" +
"</div>" +
"</div>" +
"</div>" +
"</div>";
list.append(html);
});
}
function removeSelectedCustomer(customerOid) {
$("#related-customer-" + customerOid).remove();
var checkbox = $("#customer-" + customerOid + "-checkbox");
if (checkbox.length) {
checkbox.prop("checked", false);
}
changeCustomerSelection();
}

View File

@@ -49,6 +49,7 @@ namespace BeWoPlanerMobil.Service
var serverPath = HttpContext.Current.Server.MapPath("");
serverPath = Path.Combine(serverPath, ConfigurationManager.AppSettings.Get("MultitenancyPath"));
serverPath = Path.Combine(serverPath, MobileSessionFacade.Tenant + ".config");
if (!File.Exists(serverPath))

View File

@@ -36,6 +36,8 @@
public static string AppointmentNoticeKey => "Notice";
public static string AppointmentSchedulerDateKey => "SchedulerDate";
public static string AppointmentSchedulerOidHolderKey => "scheduler-oid-holder";
public static string AppointmentIsPrivate => "IsPrivate";
public static string AppointmentIsAllDay => "IsAllDay";
// Auswertung

View File

@@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using BeWoPlanerMobil.Models;
using BS.Shared;

View File

@@ -0,0 +1,371 @@
@using BeWoPlanerMobil.Models
@model BeWoPlanerMobil.Models.MainModel
<div class="row">
<div class="col col-12">
@if (Model != null)
{
var submitButtonText = Model.IsInEditingMode ? "Speichern" : "Anlegen";
using (Html.BeginForm("CreateOrUpdateGroupBooking", "Main", FormMethod.Post, new { onreset = "serviceDescriptionSelectOnReset()", id = "groupBookingForm" }))
{
var startDate = Model.SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
var endDate = Model.SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
var startTime = Model.SelectedServiceRecord?.Start?.ToShortTimeString() ?? string.Empty;
var endTime = Model.SelectedServiceRecord?.End?.ToShortTimeString() ?? string.Empty;
var duration = Model.SelectedServiceRecord?.GroupRoundedDuration?.ToString() ?? string.Empty;
var distance = Model.SelectedServiceRecord?.DistanceInMeter?.ToString() ?? string.Empty;
var notice0 = Model.SelectedServiceRecord?.Notice ?? string.Empty;
var noticeList = new[] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty };
if (Model.SelectedServiceRecord?.NoticeList != null)
{
var selectedNoticeList = Model.SelectedServiceRecord.NoticeList;
for (var i = 0; i < selectedNoticeList.Count; i++)
{
noticeList[i] = selectedNoticeList[i] ?? string.Empty;
}
}
<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">
<button type="button" class="btn btn-primary btn-block" data-toggle="modal" data-target="#group-booking-popup" id="support-concepts-and-groups-button">Hilfepläne und Gruppen hinzufügen</button>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group my-1">
<div class="list-group" id="selected-cb2sc-list">
@foreach (var selectedCb2ScRelation in Model.GroupBookingSelectionObject.SelectedRelations)
{
<div class="list-group-item" id="relation-item-@selectedCb2ScRelation.Value">
<div class="row">
<div class="col">
<span>
@selectedCb2ScRelation.Text1
<br />
<span class="@selectedCb2ScRelation.TextColor">
@selectedCb2ScRelation.Text2
</span>
</span>
</div>
<div class="col-auto my-auto">
<button type="button" class="btn btn-primary" onclick="removeCb2ScRelation(@selectedCb2ScRelation.Value)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<button type="button" class="btn btn-primary btn-block" data-toggle="modal" data-target="#group-booking-employee-selection-popup" id="employees-button">
Mitarbeiter hinzufügen <span class="badge badge-light text-primary" id="selected-employees-count-badge">@Model.SelectedEmployees.Count</span>
</button>
</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 = "custom-select", 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="custom-select" id="leistung-select" name="ServiceDescription" onchange="setServiceDescription('leistung-select')"></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="@startDate" />
<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>
@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="@endDate" />
<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 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="@startTime" />
<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 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="@endTime" />
<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>
<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()" value="@duration">
</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>
@if (Model.ShowDistanceField)
{
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="distance">Gefahrene Kilometer</label>
<input type="text" class="form-control" id="distance" name="Distanz" onchange="validateDistanceInput()" value="@distance">
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToSeeTextModules)
{
<div class="form-row" id="textmodule-container">
<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)
{
<div class="form-group">
<label for="dokufeld">Dokumentation</label>
<textarea class="form-control" name="Dokumentation6" id="dokufeld">@notice0</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">@noticeList[i]</textarea>
</div>
}
</div>
}
</div>
</div>
</div>
}
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
<!-- dient nur als Abstandshalter-->
</div>
<div class="ml-3 bd-highlight">
@using (Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post))
{
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Abbrechen</button>
}
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="create-button" onclick="submitGroupBookingForm()">@submitButtonText</button>
</div>
</div>
}
</div>
</div>
<!-- (Gruppenbuchung) Hilfeplan- und Gruppenauswahl Popup -->
<div class="modal" data-backdrop="static" tabindex="-1" role="dialog" id="group-booking-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Gruppen und Hilfepläne für Gruppenbuchung</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<nav class="nav nav-pills nav-fill">
<a class="nav-item nav-link active" href="#group-booking-supportconcepts" data-toggle="tab" role="tab">Hilfepläne</a>
<a class="nav-item nav-link" href="#group-booking-groups" data-toggle="tab" role="tab">Gruppen</a>
</nav>
<div class="tab-content">
<div class="tab-pane show active" role="tabpanel" id="group-booking-supportconcepts">
<ul class="list-group">
@foreach (var cb2Sc in Model.SupportConceptListObjectsForGroupBooking)
{
<li class="list-group-item">
@{
var timeSpanColorClass2 = cb2Sc.IsAboutToExpire ? "text-bewo-is-about-to-expire" : cb2Sc.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
var wasSuccessful = long.TryParse(cb2Sc.CostBearer2SupportConceptOid, out var cb2ScOid);
var checkedValue = wasSuccessful ? Model.SelectedConceptCostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.Equals(cb2ScOid)) : wasSuccessful;
}
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox"
@{ if (checkedValue) { @Html.Raw("checked=\"checked\"") ; } }
class="custom-control-input" id="cb2sc-checkbox-@cb2Sc.CostBearer2SupportConceptOid" onchange="addCostBearer2SupportConceptsToGroupBooking()" name="cb2sc-checkbox-@cb2Sc.CostBearer2SupportConceptOid" value="@cb2Sc.CostBearer2SupportConceptOid">
<label for="cb2sc-checkbox-@cb2Sc.CostBearer2SupportConceptOid" class="custom-control-label">
<span class="justify-content-between mb-1 text-dark text-left">
@cb2Sc.NameAndDateOfBirth
</span>
<br />
<span class="mb-1 text-left @timeSpanColorClass2">
@cb2Sc.SupportConceptTimeSpan
</span>
</label>
</div>
</li>
}
</ul>
</div>
<div class="tab-pane show" role="tabpanel" id="group-booking-groups">
<ul class="list-group">
@foreach (var group in Model.GroupOfPeopleListItems)
{
<li class="list-group-item">
@{
long groupOid;
var wasSuccessful = long.TryParse(group.Value, out groupOid);
var shouldBeChecked = wasSuccessful ? Model.SelectedGroupOfPeopleOids.Contains(groupOid) : wasSuccessful;
var attribute = shouldBeChecked ? "checked=\"checked\"" : string.Empty;
}
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" @attribute class="custom-control-input" id="group-checkbox-@group.Value" value="@group.Value" onchange="addCostBearer2SupportConceptsToGroupBooking()" />
<label for="group-checkbox-@group.Value" class="custom-control-label">
@group.Text
</label>
</div>
</li>
}
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- (Gruppenbuchung) Mitarbeiterauswahl Popup -->
<div class="modal" tabindex="-1" role="dialog" id="group-booking-employee-selection-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Mitarbeiter hinzufügen</h5>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('gb-employee-search-input', 'employee-text')">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="input-group mb-3">
<input class="form-control w-100" type="text" id="gb-employee-search-input" placeholder="Suchen..." oninput="listSearchOnChange('gb-employee-search-input', 'employee-text', 'employee-name-label')" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetSearch('gb-employee-search-input', 'employee-text')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
@foreach (var employee in Model.Employees)
{
var checkedValue = Model.SelectedEmployees.Contains(employee) ? "checked=\"checked\"" : string.Empty;
<div class="custom-control custom-checkbox employee-text">
<input type="checkbox" @checkedValue class="custom-control-input" id="group-employee-@employee.EmployeeOid" onchange="addEmployeeToGroupBooking()" value="@employee.EmployeeOid" />
<label for="group-employee-@employee.EmployeeOid" class="custom-control-label employee-name-label">@employee.DetailDescription</label>
</div>
}
</div>
</div>
</div>
</div>

View File

@@ -341,848 +341,20 @@
<div class="container-fluid mb-3" id="main-container">
@if(!Model.IsInGroupBookingMode)
{
<div class="row">
<!-- Einzelbuchungsformular -->
<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>
</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>
<!-- Hilfeplanauswahlpopup modal-dialog-centered-->
<div class="modal" role="dialog" tabindex="-1" id="supportConceptList">
<div class="modal-dialog text-center" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Hilfeplanauswahl</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<!-- Hilfeplansuche -->
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="supportConceptSearchOnChange()" id="support-concept-search-input" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetSupportConceptSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<hr />
<!-- Hilfeplanliste -->
<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";
<a href="#" class="list-group-item flex-column align-items-start no-underline blubb-test" onclick="selectSupportConcept(@supportConceptListObject.CostBearer2SupportConceptOid)" data-dismiss="modal">
<div class="justify-content-between">
<h5 class="mb-1 text-dark text-left supportconcept-name-header">
@supportConceptListObject.NameAndDateOfBirth
</h5>
</div>
<p class="mb-1 text-left @timeSpanColorClass">
@supportConceptListObject.SupportConceptTimeSpan
</p>
</a>
}
</div>
</div>
</div>
</div>
</div>
<!-- /Hilfeplanauswahlpopup -->
<input type="text" class="d-none" name="CostBearer2SupportConceptOid" id="CostBearer2SupportConceptOid" value="@Model.SelectedSupportConceptListObject.CostBearer2SupportConceptOid">
}
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 = "custom-select", 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: Leistungskategorie -->
<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 = "custom-select", 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="custom-select" id="leistung-select" name="ServiceDescription" onchange="setServiceDescription('leistung-select')">
</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>
<!-- 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 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" 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>
<!-- 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" 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>
<!-- 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()" value="@Model.DurationToEdit">
</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>
<!-- Einzelbuchung: Distanz -->
@if(Model.ShowDistanceField)
{
<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>
}
@if(AbstractModel.HasRightToSeeTextModules)
{
<!-- Einzelbuchung: Textbausteine -->
<div class="form-row" id="textmodule-container">
<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)
{
<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[i]</textarea>
</div>
}
</div>
}
</div>
</div>
</div>
}
<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>
<!-- /Einzelbuchungsformular -->
<!-- Liste mit den Einträgen und dem Auswahl-Select -->
<div class="col col-12 col-md-7">
@if(Model != null)
{
if(Model.SelectedSupportConcept != null || Model.CostBearer2SupportConceptOid == -2)
{
<div class="container-fluid w-100 mt-3 p-0">
@using(Html.BeginForm("LoadServiceRecords", "Main", FormMethod.Post, new { id = "selectServiceRecordForm" }))
{
<select name="Records" class="custom-select" onchange="showSpinner();this.form.submit();" id="timeFrameSelect">
<option value="-1">Zeitraum wählen</option>
<option value="7"
@{if(Model.Zeitraum == 7) { @Html.Raw("selected") }}>
Letzte 7 Tage
</option>
<option value="30"
@{if(Model.Zeitraum == 30) { @Html.Raw("selected") }}>
Letzte 30 Tage
</option>
<option value="90"
@{if(Model.Zeitraum == 90) { @Html.Raw("selected") }}>
Letzte 90 Tage
</option>
<option value="0"
@{if(Model.Zeitraum == 0) { @Html.Raw("selected") }}>
Alle
</option>
</select>
}
</div>
}
<div class="container-fluid mt-3">
@{
foreach(var serviceRecord in Model.ServiceRecords)
{
if(serviceRecord.Start == null || serviceRecord.End == null)
{
continue;
}
var start = serviceRecord.Start.Value;
var end = serviceRecord.End.Value;
var hasSignatureStr = serviceRecord.SignatureOid.HasValue ? "JA" : "NEIN";
var duration = (end - start).TotalMinutes;
var roundedDuration = MobileUtils.GetDecimalValueWithMaxDecimal(serviceRecord.RoundedDuration, 2);
if(serviceRecord.ServiceDescription.Category.Percentage > 0 && serviceRecord.ServiceDescription.Category.Percentage < 100)
{
roundedDuration = roundedDuration * serviceRecord.ServiceDescription.Category.Percentage / 100;
}
var durationStr = serviceRecord.GroupOid.HasValue ? string.Format("{0:###0.#} ({0:###0.#})", roundedDuration) : $"{duration:###0.#} ({roundedDuration:###0.#})";
var goalsString = string.Empty;
if(serviceRecord.Goals != null && serviceRecord.Goals.Count > 0)
{
foreach(var goal in serviceRecord.Goals)
{
goalsString += goal.TypeDescription;
if(serviceRecord.Goals.IndexOf(goal) < serviceRecord.Goals.Count - 1)
{
goalsString += ", ";
}
}
}
var cardBackground = serviceRecord.GroupOid.HasValue ? "bg-bewo-group-booking" : string.Empty;
<div class="row mb-3">
<div class="card w-100 @cardBackground">
<div class="card-header" onclick="cardHeaderClick('#chevron-@serviceRecord.ServiceRecordOid', '#collapse-service-record-@serviceRecord.ServiceRecordOid')">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-@serviceRecord.ServiceRecordOid"></i>
</div>
<div class="p2 d-inline-flex text-primary h-100">
<button type="button" class="btn btn-link">
@MainModel.GetServiceRecordTimeHeader(serviceRecord, true)
</button>
</div>
</div>
<div id="collapse-service-record-@serviceRecord.ServiceRecordOid" class="collapse">
<div class="card-body">
<div class="container">
<div class="row mb-3">
@if(Model.HasRightToEditServiceRecord(serviceRecord))
{
using(Html.BeginForm("SelectRecordToEdit", "Main", FormMethod.Post))
{
<div class="col-auto">
<button type="submit" class="btn btn-primary">
<span class="fas fa-edit"></span>
</button>
<input type="hidden" name="service-record-oid-holder" value="@serviceRecord.ServiceRecordOid" />
</div>
}
}
@if(MainModel.IsAllowedToDeleteServiceRecord(serviceRecord))
{
<div class="col-auto">
<button type="button" class="btn btn-primary" onclick="deleteServiceRecord(@serviceRecord.ServiceRecordOid)">
<span class="fas fa-trash-alt"></span>
</button>
</div>
}
@if(Model.ShowSignature && !serviceRecord.SignatureOid.HasValue)
{
<div class="col-auto">
<button type="button" class="btn btn-primary" onclick="initializeSignature(@serviceRecord.ServiceRecordOid)">
<span class="fas fa-signature"></span>
</button>
</div>
}
else if(Model.ShowSignature && serviceRecord.SignatureOid.HasValue)
{
<div class="col-auto">
<button type="submit" data-toggle="modal" class="btn btn-primary" onclick="getSignatureImage(@serviceRecord.ServiceRecordOid.Value, @serviceRecord.SignatureOid.Value)">
<span class="fas fa-file-contract"></span>
</button>
</div>
}
</div>
<div class="row">
<div class="col text-secondary">
Minuten (gerundet):
</div>
<div class="col text-info">
@durationStr
</div>
</div>
@if(Model.ShowDistanceField && serviceRecord.DistanceInMeter != null && serviceRecord.DistanceInMeter.Value > 0)
{
<div class="row">
<div class="col text-secondary">
Gefahrene Kilometer:
</div>
<div class="col">
@serviceRecord.DistanceInMeter.ToString()
</div>
</div>
}
@if(serviceRecord.Goals != null && serviceRecord.Goals.Count > 0)
{
<div class="row">
<div class="col text-secondary">
Ziele:
</div>
<div class="col">
@goalsString
</div>
</div>
}
<div class="row">
<div class="col text-secondary">
Leistungskategorie:
</div>
<div class="col">
@serviceRecord.ServiceDescription.CategoryName
</div>
</div>
<div class="row">
<div class="col text-secondary">
Leistung:
</div>
<div class="col">
@serviceRecord.ServiceDescription.Name
</div>
</div>
<div class="row">
<div class="col text-secondary">
Mitarbeiter:
</div>
<div class="col">
@serviceRecord.Employee.ToString()
</div>
</div>
<div class="row">
<div class="col text-secondary">
Angelegt am:
</div>
<div class="col">
@serviceRecord.InsertedOn
</div>
</div>
@{
var header1 = "Dokumentation";
if(Model.NumberOfDokuTypes >= 1)
{
header1 = Model.Dokutypes[0].TypeDescription;
}
<div class="row">
<div class="col text-secondary">
@header1:
</div>
<div class="col">
@serviceRecord.Notice
</div>
</div>
for(var i = 1; i < serviceRecord.NoticeList.Count; i++)
{
var notice = serviceRecord.NoticeList[i];
if(string.IsNullOrWhiteSpace(notice) || Model.NumberOfDokuTypes <= i)
{
continue;
}
var header = $"Dokumentation {i + 1}";
if(Model.NumberOfDokuTypes >= 2)
{
if(Model.NumberOfDokuTypes <= i)
{
continue;
}
header = Model.Dokutypes[i].TypeDescription;
}
<div class="row">
<div class="col text-secondary">
@header:
</div>
<div class="col">
@notice
</div>
</div>
}
}
<div class="row">
<div class="col text-secondary">
Unterschrieben:
</div>
<div class="col">
@hasSignatureStr
</div>
</div>
</div>
</div>
</div>
</div>
</div>
}
}
</div>
}
</div>
<!-- /Liste mit den Einträgen und dem Auswahl-Select -->
</div>
@Html.Partial("SingleBookingPartial", Model)
}
</div>
<div class="container mb-3">
@if(Model.IsInGroupBookingMode)
{
<div class="row">
<div class="col col-12">
@if(Model != null)
{
var submitButtonText = Model.IsInEditingMode ? "Speichern" : "Anlegen";
using(Html.BeginForm("CreateOrUpdateGroupBooking", "Main", FormMethod.Post, new { onreset = "serviceDescriptionSelectOnReset()", id = "groupBookingForm" }))
{
var startDate = Model.SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
var endDate = Model.SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
var startTime = Model.SelectedServiceRecord?.Start?.ToShortTimeString() ?? string.Empty;
var endTime = Model.SelectedServiceRecord?.End?.ToShortTimeString() ?? string.Empty;
var duration = Model.SelectedServiceRecord?.GroupRoundedDuration?.ToString() ?? string.Empty;
var distance = Model.SelectedServiceRecord?.DistanceInMeter?.ToString() ?? string.Empty;
var notice0 = Model.SelectedServiceRecord?.Notice ?? string.Empty;
var noticeList = new string[] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty };
if(Model.SelectedServiceRecord?.NoticeList != null)
{
var selectedNoticeList = Model.SelectedServiceRecord.NoticeList;
for(var i = 0; i < selectedNoticeList.Count; i++)
{
noticeList[i] = selectedNoticeList[i] ?? string.Empty;
}
}
<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>
<!-- Gruppenbuchung: Hilfepläne und Gruppen -->
<div class="form-row">
<div class="col-md">
<button type="button" class="btn btn-primary btn-block" data-toggle="modal" data-target="#group-booking-popup" id="support-concepts-and-groups-button">Hilfepläne und Gruppen hinzufügen</button>
</div>
</div>
<!-- Gruppenbuchung: Hilfepläne hinzufügen -->
<div class="form-row">
<div class="col-md">
<div class="form-group my-1">
<div class="list-group" id="selected-cb2sc-list">
@foreach(var selectedCb2ScRelation in Model.GroupBookingSelectionObject.SelectedRelations)
{
<div class="list-group-item" id="relation-item-@selectedCb2ScRelation.Value">
<div class="row">
<div class="col">
<span>
@selectedCb2ScRelation.Text1
<br />
<span class="@selectedCb2ScRelation.TextColor">
@selectedCb2ScRelation.Text2
</span>
</span>
</div>
<div class="col-auto my-auto">
<button type="button" class="btn btn-primary" onclick="removeCb2ScRelation(@selectedCb2ScRelation.Value)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
<!-- Gruppenbuchung: Mitarbeiter hinzufügen -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<button type="button" class="btn btn-primary btn-block" data-toggle="modal" data-target="#group-booking-employee-selection-popup" id="employees-button">
Mitarbeiter hinzufügen <span class="badge badge-light text-primary" id="selected-employees-count-badge">@Model.SelectedEmployees.Count</span>
</button>
</div>
</div>
</div>
<!-- Gruppenbuchung: Leistungskategorien -->
<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 = "custom-select", Id = "category-select" })
</div>
</div>
</div>
<!-- Gruppenbuchung: Leistung -->
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="leistung-select">Leistung</label>
<select class="custom-select" id="leistung-select" name="ServiceDescription" onchange="setServiceDescription('leistung-select')"></select>
</div>
</div>
</div>
<!-- Gruppenbuchung: Datum -->
<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="@startDate" />
<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>
<!-- Gruppenbuchung: 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="@endDate" />
<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>
<!-- Gruppenbuchung: Start- und Endzeit -->
<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="@startTime" />
<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 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="@endTime" />
<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>
<!-- Gruppenbuchung: 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()" value="@duration">
</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>
<!-- Gruppenbuchung: Distanz -->
@if(Model.ShowDistanceField)
{
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="distance">Gefahrene Kilometer</label>
<input type="text" class="form-control" id="distance" name="Distanz" onchange="validateDistanceInput()" value="@distance">
</div>
</div>
</div>
}
<!-- Gruppenbuchung: Textbausteine -->
@if(AbstractModel.HasRightToSeeTextModules)
{
<div class="form-row" id="textmodule-container">
<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>
}
<!-- Gruppenbuchung: Dokufelder -->
<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">@notice0</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">@noticeList[i]</textarea>
</div>
}
</div>
}
</div>
</div>
</div>
}
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
<!-- dient nur als Abstandshalter-->
</div>
<div class="ml-3 bd-highlight">
@using(Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post))
{
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Abbrechen</button>
}
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="create-button" onclick="submitGroupBookingForm()">@submitButtonText</button>
</div>
</div>
}
</div>
</div>
@Html.Partial("GroupBookingPartial", Model)
}
</div>
<!-- Textbausteine-Popup-->
<div class="modal" tabindex="-1" role="dialog" id="textbausteine-popup">
<div class="modal-dialog" role="document">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title">Textbausteine</h6>
@@ -1220,112 +392,7 @@
</div>
</div>
<!-- (Gruppenbuchung) Hilfeplan- und Gruppenauswahl Popup -->
<div class="modal" data-backdrop="static" tabindex="-1" role="dialog" id="group-booking-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Gruppen und Hilfepläne für Gruppenbuchung</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<nav class="nav nav-pills nav-fill">
<a class="nav-item nav-link active" href="#group-booking-supportconcepts" data-toggle="tab" role="tab">Hilfepläne</a>
<a class="nav-item nav-link" href="#group-booking-groups" data-toggle="tab" role="tab">Gruppen</a>
</nav>
<div class="tab-content">
<div class="tab-pane show active" role="tabpanel" id="group-booking-supportconcepts">
<ul class="list-group">
@foreach(var cb2Sc in Model.SupportConceptListObjectsForGroupBooking)
{
<li class="list-group-item">
@{
var timeSpanColorClass2 = cb2Sc.IsAboutToExpire ? "text-bewo-is-about-to-expire" : cb2Sc.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark";
var wasSuccessful = long.TryParse(cb2Sc.CostBearer2SupportConceptOid, out var cb2ScOid);
var checkedValue = wasSuccessful ? Model.SelectedConceptCostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.Equals(cb2ScOid)) : wasSuccessful;
}
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox"
@{ if(checkedValue) { @Html.Raw("checked=\"checked\"") ; } }
class="custom-control-input" id="cb2sc-checkbox-@cb2Sc.CostBearer2SupportConceptOid" onchange="addCostBearer2SupportConceptsToGroupBooking()" name="cb2sc-checkbox-@cb2Sc.CostBearer2SupportConceptOid" value="@cb2Sc.CostBearer2SupportConceptOid">
<label for="cb2sc-checkbox-@cb2Sc.CostBearer2SupportConceptOid" class="custom-control-label">
<span class="justify-content-between mb-1 text-dark text-left">
@cb2Sc.NameAndDateOfBirth
</span>
<br />
<span class="mb-1 text-left @timeSpanColorClass2">
@cb2Sc.SupportConceptTimeSpan
</span>
</label>
</div>
</li>
}
</ul>
</div>
<div class="tab-pane show" role="tabpanel" id="group-booking-groups">
<ul class="list-group">
@foreach(var group in Model.GroupOfPeopleListItems)
{
<li class="list-group-item">
@{
long groupOid;
var wasSuccessful = long.TryParse(group.Value, out groupOid);
var shouldBeChecked = wasSuccessful ? Model.SelectedGroupOfPeopleOids.Contains(groupOid) : wasSuccessful;
var attribute = shouldBeChecked ? "checked=\"checked\"" : string.Empty;
}
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" @attribute class="custom-control-input" id="group-checkbox-@group.Value" value="@group.Value" onchange="addCostBearer2SupportConceptsToGroupBooking()" />
<label for="group-checkbox-@group.Value" class="custom-control-label">
@group.Text
</label>
</div>
</li>
}
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- (Gruppenbuchung) Mitarbeiterauswahl Popup -->
<div class="modal" tabindex="-1" role="dialog" id="group-booking-employee-selection-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Mitarbeiter hinzufügen</h5>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<ul class="list-group" id="employee-list">
@foreach(var employee in Model.Employees)
{
<li class="list-group-item">
@{
var checkedValue = Model.SelectedEmployees.Contains(employee) ? "checked=\"checked\"" : string.Empty;
}
<div class="custom-control custom-checkbox custom-control-inline">
<input type="checkbox" @checkedValue class="custom-control-input" id="group-employee-@employee.EmployeeOid" onchange="addEmployeeToGroupBooking()" value="@employee.EmployeeOid" />
<label for="group-employee-@employee.EmployeeOid" class="custom-control-label">@employee.DetailDescription</label>
</div>
</li>
}
</ul>
</div>
</div>
</div>
</div>
<!-- Unterschriften-Layover -->
<div class="container-fluid d-none mb-3" id="signature-container">
@@ -1404,7 +471,7 @@
<!-- Statistik-Popup -->
<div id="statistics-popup" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title" id="statistics-header"></h6>

View File

@@ -0,0 +1,563 @@
@using BeWoPlanerMobil.Models
@using BeWoPlanerMobil.Util
@model MainModel
<div class="row">
<!-- Einzelbuchungsformular -->
<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>
</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>
<!-- Hilfeplanauswahlpopup modal-dialog-centered-->
<div class="modal" role="dialog" tabindex="-1" id="supportConceptList">
<div class="modal-dialog text-center" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Hilfeplanauswahl</h5>
<button type="button" class="close" data-dismiss="modal" onclick="resetSupportConceptSearch()">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<!-- Hilfeplansuche -->
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="supportConceptSearchOnChange()" id="support-concept-search-input" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetSupportConceptSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<hr />
<!-- Hilfeplanliste -->
<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";
<a href="#" class="list-group-item flex-column align-items-start no-underline blubb-test" onclick="selectSupportConcept(@supportConceptListObject.CostBearer2SupportConceptOid)" data-dismiss="modal">
<div class="justify-content-between">
<h5 class="mb-1 text-dark text-left supportconcept-name-header">
@supportConceptListObject.NameAndDateOfBirth
</h5>
</div>
<p class="mb-1 text-left @timeSpanColorClass">
@supportConceptListObject.SupportConceptTimeSpan
</p>
</a>
}
</div>
</div>
</div>
</div>
</div>
<!-- /Hilfeplanauswahlpopup -->
<input type="text" class="d-none" name="CostBearer2SupportConceptOid" id="CostBearer2SupportConceptOid" value="@Model.SelectedSupportConceptListObject.CostBearer2SupportConceptOid">
}
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 = "custom-select", 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: Leistungskategorie -->
<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 = "custom-select", 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="custom-select" id="leistung-select" name="ServiceDescription" onchange="setServiceDescription('leistung-select')">
</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>
<!-- 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 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" 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>
<!-- 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" 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>
<!-- 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()" value="@Model.DurationToEdit">
</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>
<!-- Einzelbuchung: Distanz -->
@if (Model.ShowDistanceField)
{
<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>
}
@if (AbstractModel.HasRightToSeeTextModules)
{
<!-- Einzelbuchung: Textbausteine -->
<div class="form-row" id="textmodule-container">
<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)
{
<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[i]</textarea>
</div>
}
</div>
}
</div>
</div>
</div>
}
<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>
<!-- /Einzelbuchungsformular -->
<!-- Liste mit den Einträgen und dem Auswahl-Select -->
<div class="col col-12 col-md-7">
@if (Model != null)
{
if (Model.SelectedSupportConcept != null || Model.CostBearer2SupportConceptOid == -2)
{
<div class="container-fluid w-100 mt-3 p-0">
@using (Html.BeginForm("LoadServiceRecords", "Main", FormMethod.Post, new { id = "selectServiceRecordForm" }))
{
<select name="Records" class="custom-select" onchange="showSpinner();this.form.submit();" id="timeFrameSelect">
<option value="-1">Zeitraum wählen</option>
<option value="7"
@{if (Model.Zeitraum == 7) { @Html.Raw("selected") }}>
Letzte 7 Tage
</option>
<option value="30"
@{if (Model.Zeitraum == 30) { @Html.Raw("selected") }}>
Letzte 30 Tage
</option>
<option value="90"
@{if (Model.Zeitraum == 90) { @Html.Raw("selected") }}>
Letzte 90 Tage
</option>
<option value="0"
@{if (Model.Zeitraum == 0) { @Html.Raw("selected") }}>
Alle
</option>
</select>
}
</div>
}
<div class="container-fluid mt-3">
@{
foreach (var serviceRecord in Model.ServiceRecords)
{
if (serviceRecord.Start == null || serviceRecord.End == null)
{
continue;
}
var start = serviceRecord.Start.Value;
var end = serviceRecord.End.Value;
var hasSignatureStr = serviceRecord.SignatureOid.HasValue ? "JA" : "NEIN";
var duration = (end - start).TotalMinutes;
var roundedDuration = MobileUtils.GetDecimalValueWithMaxDecimal(serviceRecord.RoundedDuration, 2);
if (serviceRecord.ServiceDescription.Category.Percentage > 0 && serviceRecord.ServiceDescription.Category.Percentage < 100)
{
roundedDuration = roundedDuration * serviceRecord.ServiceDescription.Category.Percentage / 100;
}
var durationStr = serviceRecord.GroupOid.HasValue ? string.Format("{0:###0.#} ({0:###0.#})", roundedDuration) : $"{duration:###0.#} ({roundedDuration:###0.#})";
var goalsString = string.Empty;
if (serviceRecord.Goals != null && serviceRecord.Goals.Count > 0)
{
foreach (var goal in serviceRecord.Goals)
{
goalsString += goal.TypeDescription;
if (serviceRecord.Goals.IndexOf(goal) < serviceRecord.Goals.Count - 1)
{
goalsString += ", ";
}
}
}
var cardBackground = serviceRecord.GroupOid.HasValue ? "bg-bewo-group-booking" : string.Empty;
<div class="row mb-3">
<div class="card w-100 @cardBackground">
<div class="card-header" onclick="cardHeaderClick('#chevron-@serviceRecord.ServiceRecordOid', '#collapse-service-record-@serviceRecord.ServiceRecordOid')">
<div class="d-inline-flex">
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-@serviceRecord.ServiceRecordOid"></i>
</div>
<div class="p2 d-inline-flex text-primary h-100">
<button type="button" class="btn btn-link">
@MainModel.GetServiceRecordTimeHeader(serviceRecord, true)
</button>
</div>
</div>
<div id="collapse-service-record-@serviceRecord.ServiceRecordOid" class="collapse">
<div class="card-body">
<div class="container">
<div class="row mb-3">
@if (Model.HasRightToEditServiceRecord(serviceRecord))
{
using (Html.BeginForm("SelectRecordToEdit", "Main", FormMethod.Post))
{
<div class="col-auto">
<button type="submit" class="btn btn-primary">
<span class="fas fa-edit"></span>
</button>
<input type="hidden" name="service-record-oid-holder" value="@serviceRecord.ServiceRecordOid" />
</div>
}
}
@if (MainModel.IsAllowedToDeleteServiceRecord(serviceRecord))
{
<div class="col-auto">
<button type="button" class="btn btn-primary" onclick="deleteServiceRecord(@serviceRecord.ServiceRecordOid)">
<span class="fas fa-trash-alt"></span>
</button>
</div>
}
@if (Model.ShowSignature && !serviceRecord.SignatureOid.HasValue)
{
<div class="col-auto">
<button type="button" class="btn btn-primary" onclick="initializeSignature(@serviceRecord.ServiceRecordOid)">
<span class="fas fa-signature"></span>
</button>
</div>
}
else if (Model.ShowSignature && serviceRecord.SignatureOid.HasValue)
{
<div class="col-auto">
<button type="submit" data-toggle="modal" class="btn btn-primary" onclick="getSignatureImage(@serviceRecord.ServiceRecordOid.Value, @serviceRecord.SignatureOid.Value)">
<span class="fas fa-file-contract"></span>
</button>
</div>
}
</div>
<div class="row">
<div class="col text-secondary">
Minuten (gerundet):
</div>
<div class="col text-info">
@durationStr
</div>
</div>
@if (Model.ShowDistanceField && serviceRecord.DistanceInMeter != null && serviceRecord.DistanceInMeter.Value > 0)
{
<div class="row">
<div class="col text-secondary">
Gefahrene Kilometer:
</div>
<div class="col">
@serviceRecord.DistanceInMeter.ToString()
</div>
</div>
}
@if (serviceRecord.Goals != null && serviceRecord.Goals.Count > 0)
{
<div class="row">
<div class="col text-secondary">
Ziele:
</div>
<div class="col">
@goalsString
</div>
</div>
}
<div class="row">
<div class="col text-secondary">
Leistungskategorie:
</div>
<div class="col">
@serviceRecord.ServiceDescription.CategoryName
</div>
</div>
<div class="row">
<div class="col text-secondary">
Leistung:
</div>
<div class="col">
@serviceRecord.ServiceDescription.Name
</div>
</div>
<div class="row">
<div class="col text-secondary">
Mitarbeiter:
</div>
<div class="col">
@serviceRecord.Employee.ToString()
</div>
</div>
<div class="row">
<div class="col text-secondary">
Angelegt am:
</div>
<div class="col">
@serviceRecord.InsertedOn
</div>
</div>
@{
var header1 = "Dokumentation";
if (Model.NumberOfDokuTypes >= 1)
{
header1 = Model.Dokutypes[0].TypeDescription;
}
<div class="row">
<div class="col text-secondary">
@header1:
</div>
<div class="col">
@serviceRecord.Notice
</div>
</div>
for (var i = 1; i < serviceRecord.NoticeList.Count; i++)
{
var notice = serviceRecord.NoticeList[i];
if (string.IsNullOrWhiteSpace(notice) || Model.NumberOfDokuTypes <= i)
{
continue;
}
var header = $"Dokumentation {i + 1}";
if (Model.NumberOfDokuTypes >= 2)
{
if (Model.NumberOfDokuTypes <= i)
{
continue;
}
header = Model.Dokutypes[i].TypeDescription;
}
<div class="row">
<div class="col text-secondary">
@header:
</div>
<div class="col">
@notice
</div>
</div>
}
}
<div class="row">
<div class="col text-secondary">
Unterschrieben:
</div>
<div class="col">
@hasSignatureStr
</div>
</div>
</div>
</div>
</div>
</div>
</div>
}
}
</div>
}
</div>
<!-- /Liste mit den Einträgen und dem Auswahl-Select -->
</div>

View File

@@ -187,8 +187,6 @@
customerSignatureOidsString += signatureOid + ",";
}
customerSignatureOidsString = customerSignatureOidsString.TrimEnd(',');
var employeeSignatureOidsString = "";
foreach(var employeeSignatureOid in result.EmployeeSignatureOids)
@@ -196,8 +194,6 @@
employeeSignatureOidsString += employeeSignatureOid + ",";
}
employeeSignatureOidsString = employeeSignatureOidsString.TrimEnd(',');
var employeeSignatureState = result.EmployeeSignatureState;
var customerSignatureState = result.CustomerSignatureState;

View File

@@ -0,0 +1,386 @@
@using BeWoPlanerMobil.Models
@model SchedulerModel
<script>
function alldayChange() {
try {
if ($("#IsAllDay").prop("checked")) {
$("#scheduler-start-time, #scheduler-end-time").attr("disabled", true);
} else {
$("#scheduler-start-time, #scheduler-end-time").attr("disabled", false);
}
} catch(error) {
logError(error.message);
}
}
</script>
@using (Html.BeginForm("InsertOrUpdateAppointment", "Scheduler", FormMethod.Post, new { id = "insert-appointment-form" }))
{
<div class="mt-3">
<div class="form-row">
<div class="col-12">
<div class="form-group mb-1">
<label for="scheduler-start-date">Start</label>
<div class="input-group date" id="scheduler-start-date-picker" data-target-input="nearest">
<input type="text" id="scheduler-start-date" name="StartDate" class="form-control datetimepicker-input" data-target="#scheduler-start-date-picker" data-toggle="datetimepicker" value="@Model.StartDateToEdit" />
<div class="input-group-append" data-target="#scheduler-start-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="form-group mb-1">
<label for="scheduler-start-time">Von</label>
<div class="input-group date" id="scheduler-start-time-picker" data-target-input="nearest">
<input type="text" id="scheduler-start-time" name="StartTime" class="form-control datetimepicker-input" data-target="#scheduler-start-time-picker" value="@Model.StartTimeToEdit" />
<div class="input-group-append" data-target="#scheduler-start-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-12">
<div class="form-group mb-1">
<label for="scheduler-end-date">Ende</label>
<div class="input-group date" id="scheduler-end-date-picker" data-target-input="nearest">
<input type="text" id="scheduler-end-date" name="EndDate" class="form-control datetimepicker-input" data-target="#scheduler-end-date-picker" data-toggle="datetimepicker" value="@Model.EndDateToEdit" />
<div class="input-group-append" data-target="#scheduler-end-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="form-group mb-1">
<label for="scheduler-end-time">Bis</label>
<div class="input-group date" id="scheduler-end-time-picker" data-target-input="nearest">
<input type="text" id="scheduler-end-time" name="EndTime" class="form-control datetimepicker-input" data-target="#scheduler-end-time-picker" value="@Model.EndTimeToEdit" />
<div class="input-group-append" data-target="#scheduler-end-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-6 mx-auto">
<div class="custom-control custom-checkbox custom-control-inline mx-auto">
@Html.CheckBoxFor(m => m.IsPrivate, new { @class = "custom-control-input" })
@Html.LabelFor(m => m.IsPrivate, new { @class="custom-control-label" })
</div>
</div>
<div class="col-6 mx-auto">
<div class="custom-control custom-checkbox custom-control-inline mx-auto">
@Html.CheckBoxFor(m => m.IsAllDay, new { @class = "custom-control-input", onchange = "alldayChange()" })
@Html.LabelFor(m => m.IsAllDay, new { @class = "custom-control-label" })
</div>
</div>
</div>
@if (Model.HasResourcesEmployeesOrCustomers)
{
<div class="form-row">
@if (AbstractModel.HasRightToInsertEmployeeAppointments)
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#employees-popup">Mitarbeiter<br />hinzufügen</button>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments)
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#customers-popup">Klienten<br />hinzufügen</button>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#resources-popup">Ressourcen<br />hinzufügen</button>
</div>
</div>
}
</div>
<div class="form-row">
@if (AbstractModel.HasRightToInsertEmployeeAppointments)
{
<div class="col-12">
<div class="form-group my-1">
<div class="list-group" id="selected-employees-list">
@foreach (var selectedEmployee in Model.SelectedEmployees)
{
<div class="list-group-item my-auto" id="related-employee-@selectedEmployee.EmployeeOid">
<div class="row">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-user text-bewo-employee h-100"></i>
</div>
<p class="form-control border-0 bg-transparent text-truncate">
@selectedEmployee.DetailDescription
</p>
<div class="input-group-append">
<button type="button" class="btn btn-primary" onclick="removeSelectedItem(@selectedEmployee.EmployeeOid, '-checkbox', false, '@Url.Action("SelectEmployeesForAppointment", "Scheduler")', 'employees-popup', 'selected-employees-list', 'related-employee-')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments)
{
<div class="col-12">
<div class="form-group my-1">
<div class="list-group" id="selected-customers-list">
@foreach (var selectedCustomer in Model.SelectedCustomers)
{
<div class="list-group-item my-auto" id="related-customer-@selectedCustomer.CustomerOid">
<div class="row">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-user text-bewo-customers h-100"></i>
</div>
<p class="form-control border-0 bg-transparent text-truncate">
@selectedCustomer.DetailDescription
</p>
<div class="input-group-append">
@{
var url = Url.Action("SelectCustomersForAppointment", "Scheduler");
var oid = selectedCustomer.CustomerOid;
var onClickParams = $"{oid}, '-checkbox', true, '{url}', 'customers-popup', 'selected-customers-list', 'related-customer-'";
}
<button type="button" class="btn btn-primary" onclick="removeSelectedItem(@onClickParams)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="col-12">
<div class="form-group my-1">
<div class="list-group" id="selected-resources-list">
@foreach (var selectedResource in Model.SelectedResources)
{
<div class="list-group-item my-auto" id="relation-item-@selectedResource.ResourceOid">
<div class="row">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-cubes text-bewo-resource h-100"></i>
</div>
<p class="form-control border-0 bg-transparent text-truncate">
@selectedResource.Name
</p>
<div class="input-group-append">
<button type="button" class="btn btn-primary" onclick="removeSelectedResource('relation-item-@selectedResource.ResourceOid', 'resource-@selectedResource.ResourceOid-checkbox', 'resources-popup', '@Url.Action("SelectResourcesForAppointment", "Scheduler")', 'selected-resources-list')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
</div>
}
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="subject">Betreff</label>
<input type="text" id="subject" name="Subject" class="form-control" value="@Model.SubjectToEdit" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="location">Ort</label>
<input type="text" id="location" name="Location" class="form-control" value="@Model.LocationToEdit" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="notice">Notiz</label>
<textarea class="form-control" id="notice" name="Notice">@Model.DescriptionToEdit</textarea>
</div>
</div>
</div>
</div>
}
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
<!-- Abstandshalter -->
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="reset-button" onclick="resetInsertAppointmentForm()">Abbrechen</button>
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="create-button" onclick="submitInsertAppointmentForm()">Speichern</button>
</div>
</div>
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="resources-popup">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title text-center w-100">Ressourcen</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetResourceSearch('resource-search-input')">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="resourceSearchOnChange('resource-search-input')" id="resource-search-input" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetResourceSearch('resource-search-input')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
@foreach (var category2Resources in Model.ResourceCategories2Resources)
{
<div class="card w-100 mb-3 category-card" id="resource-category-@category2Resources.Key.ValueListEntryOid">
<div class="card-header" data-toggle="collapse" data-target="#collapsable-resource-category-@category2Resources.Key.ValueListEntryOid">
<div class="d-flex align-items-center">
<h5 class="mr-auto">@category2Resources.Key.DisplayName</h5>
<div class="btn-group" role="group">
<span class="fas fa-chevron-down text-primary"></span>
</div>
</div>
</div>
<div class="collapse" id="collapsable-resource-category-@category2Resources.Key.ValueListEntryOid">
<div class="card-body resource-list">
@foreach (var resource in category2Resources.Value)
{
var checkedValue = Model.SelectedResources.Contains(resource) ? "checked" : string.Empty;
<div class="custom-control custom-checkbox resource-text">
<input type="checkbox" class="custom-control-input" id="resource-@resource.ResourceOid-checkbox" @checkedValue onchange="changeResourceSelection('resources-popup', '@Url.Action("SelectResourcesForAppointment", "Scheduler")', 'selected-resources-list', 'relation-item-', '-checkbox')" />
<label class="custom-control-label resource-name-label" for="resource-@resource.ResourceOid-checkbox">@resource.Name</label>
</div>
}
</div>
</div>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertEmployeeAppointments && Model.AllEmployees.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="employees-popup">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title text-center w-100">Mitarbeiter</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('employee-search-input', 'employee-text')">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="listSearchOnChange('employee-search-input', 'employee-text', 'employee-name-label')" id="employee-search-input" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetSearch('employee-search-input', 'employee-text')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
@foreach (var employee in Model.AllEmployees)
{
var checkedValue = Model.SelectedEmployees.Contains(employee) ? "checked" : string.Empty;
<div class="custom-control custom-checkbox employee-text">
<input type="checkbox" class="custom-control-input" id="employee-@employee.EmployeeOid-checkbox" @checkedValue onchange="changeItemListSelection('@Url.Action("SelectEmployeesForAppointment", "Scheduler")', 'employees-popup', 'selected-employees-list', 'related-employee-', false, '-checkbox')" />
<label class="custom-control-label employee-name-label" for="employee-@employee.EmployeeOid-checkbox">@employee.DetailDescription</label>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments && Model.AllCustomers.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="customers-popup">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title text-center w-100">Klienten</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('customer-search-input', 'customer-text')">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="listSearchOnChange('customer-search-input', 'customer-text', 'customer-name-label')" id="customer-search-input" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetSearch('customer-search-input', 'customer-text')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
@foreach (var customer in Model.AllCustomers)
{
var checkedValue = Model.SelectedCustomers.Contains(customer) ? "checked" : string.Empty;
<div class="custom-control custom-checkbox customer-text">
<input type="checkbox" class="custom-control-input" id="customer-@customer.CustomerOid-checkbox" @checkedValue onchange="changeItemListSelection('@Url.Action("SelectCustomersForAppointment", "Scheduler")', 'customers-popup', 'selected-customers-list', 'related-customer-', true, '-checkbox')" />
<label class="custom-control-label customer-name-label" for="customer-@customer.CustomerOid-checkbox">@customer.DetailDescription</label>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}

View File

@@ -0,0 +1,408 @@
@using BeWoPlanerMobil.Models
@model BeWoPlanerMobil.Models.SchedulerModel
<script type="text/javascript">
$(function () {
$("#scheduler-interval-start-picker").datetimepicker({
locale: "de",
format: "L"
});
$("#scheduler-interval-end-picker").datetimepicker({
locale: "de",
format: "L"
});
$("#scheduler-interval-start-time-picker").datetimepicker({
locale: "de",
format: "LT"
});
$("#scheduler-interval-end-time-picker").datetimepicker({
locale: "de",
format: "LT"
});
});
function resetIntervalFinderForm() {
$("#scheduler-interval-start-time, #scheduler-interval-end-time, #duration").val("");
$("#scheduler-interval-start, #scheduler-interval-end").val(moment().format("DD.MM.YYYY"));
$("#resources-interval-finder-popup input:checked, #customers-interval-finder-popup input:checked, #employees-interval-finder-popup input:checked").each(function() {
$(this).prop("checked", false);
});
$("#selected-resources-interval-finder-list, #selected-employees-interval-finder-list, #selected-customers-interval-finder-list").empty();
var url = '@Url.Action("ResetIntervalFinder", "Scheduler")';
$.get(url);
}
function submitIntervalFinderForm() {
try {
showSpinner();
$("#find-appointment-intervals-form").submit();
} catch(error) {
logError(error.message);
}
}
</script>
<div id="interval-form-container">
@using (Html.BeginForm("FindFreeIntervals", "Scheduler", FormMethod.Post, new { id = "find-appointment-intervals-form" }))
{
<div class="mt-3">
<div class="form-row">
<div class="col-12">
<div class="form-group mb-1">
<label for="scheduler-interval-start">Datum-Zeitraum (von)</label>
<div class="input-group date" id="scheduler-interval-start-picker" data-target-input="nearest">
<input value="@Model.IntervalStartDateStr" type="text" id="scheduler-interval-start" name="IntervalStart" class="form-control datetimepicker-input" data-target="#scheduler-interval-start-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#scheduler-interval-start-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="form-group mb-1">
<label for="scheduler-interval-start-time">Zwischen Uhrzeit (von)</label>
<div class="input-group date" id="scheduler-interval-start-time-picker" data-target-input="nearest">
<input value="@Model.IntervalStartTimeStr" type="text" id="scheduler-interval-start-time" name="IntervalStartTime" class="form-control datetimepicker-input" data-target="#scheduler-interval-start-time-picker" />
<div class="input-group-append" data-target="#scheduler-interval-start-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-12">
<div class="form-group mb-1">
<label for="scheduler-interval-end">Datum-Zeitraum (bis)</label>
<div class="input-group date" id="scheduler-interval-end-picker" data-target-input="nearest">
<input value="@Model.IntervalEndDateStr" type="text" id="scheduler-interval-end" name="IntervalEnd" class="form-control datetimepicker-input" data-target="#scheduler-interval-end-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#scheduler-interval-end-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="form-group mb-1">
<label for="scheduler-interval-end-time">Zwischen Uhrzeit (bis)</label>
<div class="input-group date" id="scheduler-interval-end-time-picker" data-target-input="nearest">
<input value="@Model.IntervalEndTimeStr" type="text" id="scheduler-interval-end-time" name="IntervalEndTime" class="form-control datetimepicker-input" data-target="#scheduler-interval-end-time-picker" />
<div class="input-group-append" data-target="#scheduler-interval-end-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="interval-duration">Dauer</label>
<input value="@Model.IntervalDurationStr" type="number" id="interval-duration" name="Duration" class="form-control" />
</div>
</div>
</div>
@if (Model.HasResourcesEmployeesOrCustomers)
{
<!-- Hinzufügen-Buttons -->
<div class="form-row">
@if (AbstractModel.HasRightToInsertEmployeeAppointments)
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#employees-interval-finder-popup">Mitarbeiter<br/>hinzufügen</button>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments)
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#customers-interval-finder-popup">Klienten<br />hinzufügen</button>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#resources-interval-finder-popup">Ressourcen<br />hinzufügen</button>
</div>
</div>
}
</div>
<div class="form-row">
@if (AbstractModel.HasRightToInsertEmployeeAppointments)
{
<div class="col-12">
<div class="form-group my-1">
<div class="list-group" id="selected-employees-interval-finder-list">
@foreach (var selectedEmployee in Model.SelectedEmployeesForIntervalFinder)
{
<div class="list-group-item my-auto" id="related-employee-interval-finder-@selectedEmployee.EmployeeOid">
<div class="row">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-user text-bewo-employee h-100"></i>
</div>
<p class="form-control border-0 bg-transparent text-truncate">
@selectedEmployee.DetailDescription
</p>
<div class="input-group-append">
@{
var url = Url.Action("SelectEmployeesForIntervalFinder", "Scheduler");
var oid = selectedEmployee.EmployeeOid;
var onClickParams = $"{oid}, '-interval-finder-checkbox', false, '{url}', 'employees-interval-finder-popup', 'employees-interval-finder-popup', 'related-employee-interval-finder-'";
}
<button type="button" class="btn btn-primary" onclick="removeSelectedItem(@onClickParams)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments)
{
<div class="col-12">
<div class="form-group my-1">
<div class="list-group" id="selected-customers-interval-finder-list">
@foreach (var selectedCustomer in Model.SelectedCustomersForIntervalFinder)
{
<div class="list-group-item my-auto" id="related-customer-interval-finder-@selectedCustomer.CustomerOid">
<div class="row">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-user text-bewo-customers h-100"></i>
</div>
<p class="form-control border-0 bg-transparent text-truncate">
@selectedCustomer.DetailDescription
</p>
<div class="input-group-append">
@{
var url = Url.Action("SelectCustomersForIntervalFinder", "Scheduler");
var oid = selectedCustomer.CustomerOid;
var onClickParams = $"{oid}, '-interval-finder-checkbox', false, '{url}', 'customers-interval-finder-popup', 'customers-interval-finder-popup', 'related-customer-interval-finder-'";
}
<button type="button" class="btn btn-primary" onclick="removeSelectedItem(@onClickParams)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="col-12">
<div class="form-group my-1">
<div class="list-group" id="selected-resources-interval-finder-list">
@foreach (var selectedResource in Model.SelectedResourcesForIntervalFinder)
{
<div class="list-group-item my-auto" id="related-resource-interval-finder-item-@selectedResource.ResourceOid">
<div class="row">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-cubes text-bewo-resource h-100"></i>
</div>
<p class="form-control border-0 bg-transparent text-truncate">
@selectedResource.Name
</p>
<div class="input-group-append">
<button type="button" class="btn btn-primary" onclick="removeSelectedResource('related-resource-interval-finder-item-@selectedResource.ResourceOid', 'resource-@selectedResource.ResourceOid-interval-finder-checkbox', 'resources-interval-finder-popup', '@Url.Action("SelectResourcesForIntervalFinder", "Scheduler")', 'selected-resources-interval-finder-list')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
</div>
}
</div>
}
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
<!-- Abstandshalter -->
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="reset-interval-finder-button" onclick="resetIntervalFinderForm()">Abbrechen</button>
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="find-interval-finder-button" onclick="submitIntervalFinderForm()">Intervalle Prüfen</button>
</div>
</div>
</div>
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="resources-interval-finder-popup">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title text-center w-100">Ressourcen</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetResourceSearch('interval-finder-resource-search-input')">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="resourceSearchOnChange('interval-finder-resource-search-input')" id="interval-finder-resource-search-input" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetResourceSearch('interval-finder-resource-search-input')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
@foreach(var category2Resources in Model.ResourceCategories2Resources)
{
<div class="card w-100 mb-3 category-card" id="resource-category-@category2Resources.Key.ValueListEntryOid">
<div class="card-header" data-toggle="collapse" data-target="#collapsable-resource-category-interval-finder-@category2Resources.Key.ValueListEntryOid">
<div class="d-flex align-items-center">
<h5 class="mr-auto">@category2Resources.Key.DisplayName</h5>
<div class="btn-group" role="group">
<span class="fas fa-chevron-down text-primary"></span>
</div>
</div>
</div>
<div class="collapse" id="collapsable-resource-category-interval-finder-@category2Resources.Key.ValueListEntryOid">
<div class="card-body resource-list">
@foreach(var resource in category2Resources.Value)
{
var checkedValue = Model.SelectedResourcesForIntervalFinder.Contains(resource) ? "checked" : string.Empty;
<div class="custom-control custom-checkbox resource-text">
<input type="checkbox" class="custom-control-input" id="resource-@resource.ResourceOid-interval-finder-checkbox" @checkedValue onchange="changeResourceSelection('resources-interval-finder-popup', '@Url.Action("SelectResourcesForIntervalFinder", "Scheduler")', 'selected-resources-interval-finder-list', 'related-resource-interval-finder-item-', '-interval-finder-checkbox')"/>
<label class="custom-control-label resource-name-label" for="resource-@resource.ResourceOid-interval-finder-checkbox">@resource.Name</label>
</div>
}
</div>
</div>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertEmployeeAppointments && Model.AllEmployees.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="employees-interval-finder-popup">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title text-center w-100">Mitarbeiter</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('interval-finder-employee-search-input', 'interval-finder-employee-text')">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="listSearchOnChange('interval-finder-employee-search-input', 'interval-finder-employee-text', 'interval-finder-employee-name-label')" id="interval-finder-employee-search-input" />
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary" onclick="resetSearch('interval-finder-employee-search-input', 'interval-finder-employee-text')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
@foreach(var employee in Model.AllEmployees)
{
var checkedValue = Model.SelectedEmployeesForIntervalFinder.Contains(employee) ? "checked" : string.Empty;
var url = Url.Action("SelectEmployeesForIntervalFinder", "Scheduler");
var onClickParams = $"'{url}', 'employees-interval-finder-popup', 'selected-employees-interval-finder-list', 'related-employee-interval-finder-', false, '-interval-finder-checkbox'";
<div class="custom-control custom-checkbox interval-finder-employee-text">
<input type="checkbox" class="custom-control-input" id="employee-@employee.EmployeeOid-interval-finder-checkbox" @checkedValue onchange="changeItemListSelection(@onClickParams)" />
<label class="custom-control-label interval-finder-employee-name-label" for="employee-@employee.EmployeeOid-interval-finder-checkbox">@employee.DetailDescription</label>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments && Model.AllCustomers.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="customers-interval-finder-popup">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title text-center w-100">Klienten</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('interval-finder-customer-search-input', 'interval-finder-customer-text')">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="input-group mb-3">
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="listSearchOnChange('interval-finder-customer-search-input', 'interval-finder-customer-text', 'interval-finder-customer-name-label')" id="interval-finder-customer-search-input"/>
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary" onclick="resetSearch('interval-finder-customer-search-input', 'interval-finder-customer-text')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
@foreach(var customer in Model.AllCustomers)
{
var checkedValue = Model.SelectedCustomersForIntervalFinder.Contains(customer) ? "checked" : string.Empty;
var url = Url.Action("SelectCustomersForIntervalFinder", "Scheduler");
var onClickParams = $"'{url}', 'customers-interval-finder-popup', 'selected-customers-interval-finder-list', 'related-customer-interval-finder-', true, '-interval-finder-checkbox'";
<div class="custom-control custom-checkbox interval-finder-customer-text">
<input type="checkbox" class="custom-control-input" id="customer-@customer.CustomerOid-interval-finder-checkbox" @checkedValue onchange="changeItemListSelection(@onClickParams)"/>
<label class="custom-control-label interval-finder-customer-name-label" for="customer-@customer.CustomerOid-interval-finder-checkbox">@customer.DetailDescription</label>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}

View File

@@ -0,0 +1,70 @@
@model BeWoPlanerMobil.Models.SchedulerModel
<script>
$(window).ready(showSize);
$(window).resize(showSize);
function showSize() {
var width = $(window).width();
var breakingPoint = getBreakingPoint(width);
//console.log(breakingPoint + "(" + width + "px)");
}
</script>
@if (Model.FreeIntervals.Count > 0)
{
<div class="container-fluid">
<div class="row">
@foreach(var kv in Model.FreeIntervals)
{
<div class="col-sm-12 col-md-6 col-lg-4">
<div class="card w-100 mb-3">
<div class="card-header" data-toggle="collapse" data-target="#collapsable-date-list-@kv.Key.Ticks">
<div class="d-flex align-items-center">
<h5 class="mr-auto">@kv.Key.ToShortDateString()</h5>
<div class="btn-group" role="group">
<span class="fas fa-chevron-down text-primary"></span>
</div>
</div>
</div>
<div class="collapse" id="collapsable-date-list-@kv.Key.Ticks">
<div class="card-body px-1 py-1">
<div class="form-group my-0">
<div class="list-group">
@foreach(var dts in kv.Value)
{
<div class="list-group-item my-auto">
@using(Html.BeginForm("SelectIntervalForForm", "Scheduler", FormMethod.Post))
{
<div class="input-group">
<p class="form-control border-0 bg-transparent">
@dts.StartDate.ToString("HH:mm") - @dts.EndDate.ToString("HH:mm")
</p>
<div class="input-group-append">
<button class="btn btn-primary" type="submit" onclick="showSpinner()">
<span class="far fa-calendar-plus"></span>
</button>
</div>
</div>
<input type="hidden" value="@dts.StartDate.ToString("dd.MM.yyyy HH:mm")" name="startDate"/>
<input type="hidden" value="@dts.EndDate.ToString("dd.MM.yyyy HH:mm")" name="endDate"/>
}
</div>
}
</div>
</div>
</div>
</div>
</div>
</div>
}
</div>
</div>
}

View File

@@ -1,6 +1,4 @@
@using BeWoPlanerMobil.Models;
@using BeWoPlanerMobil.Util
@using NHibernate.Criterion
@using BeWoPlanerMobil.Models
@model SchedulerModel
@{
@@ -47,39 +45,25 @@
return "@Url.Action("CheckForOverlappingAppointments", "Scheduler")";
}
function getSelectResourcesForAppointmentUrl() {
return "@Url.Action("SelectResourcesForAppointment", "Scheduler")";
}
function getCheckResourcesAvailabilityUrl() {
return "@Url.Action("CheckResourcesAvailability", "Scheduler")";
}
function getIsAppointmentSelectedUrl() {
return "@Url.Action("HasSelectedAppointment", "Scheduler")";
}
function getSelectEmployeesForAppointmentUrl() {
return "@Url.Action("SelectEmployeesForAppointment", "Scheduler")";
}
function getSelectCustomersForAppointmentUrl() {
return "@Url.Action("SelectCustomersForAppointment", "Scheduler")";
}
$(document).ready(function() {
@if (Model?.SelectedAppointment != null)
@if(Model != null)
{
<text>
showAppointmentForm();
</text>
if (Model.SelectedAppointment != null && !Model.IsInIntervalFinderMode)
{
<text>
showAppointmentForm();
</text>
}
}
});
</script>
<div class="container mt-3">
@if(Html.IsInDebugMode())
@*@if(Html.IsInDebugMode())
{
<div class="row justify-content-center">
<div class="col-auto px-1">
@@ -96,7 +80,7 @@
}
</div>
</div>
}
}*@
<div class="row justify-content-center">
<div class="col-auto pr-1 pl-0 pt-1">
@using(Html.BeginForm("NavigateToPreviousDate", "Scheduler", FormMethod.Post))
@@ -147,220 +131,45 @@
}
}
<div class="col col-12 @editorCol col-lg-3">
<div id="form-container" class="d-none d-sm-none d-md-block">
@using (Html.BeginForm("InsertOrUpdateAppointment", "Scheduler", FormMethod.Post, new { id = "insert-appointment-form" }))
{
<div class="mt-3">
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="scheduler-start-date">Start</label>
<div class="input-group date" id="scheduler-start-date-picker" data-target-input="nearest">
<input type="text" id="scheduler-start-date" name="StartDate" class="form-control datetimepicker-input" data-target="#scheduler-start-date-picker" data-toggle="datetimepicker" value="@Model.StartDateToEdit" />
<div class="input-group-append" data-target="#scheduler-start-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
<div class="col-md">
<div class="form-group mb-1">
<label for="scheduler-start-time">Von</label>
<div class="input-group date" id="scheduler-start-time-picker" data-target-input="nearest">
<input type="text" id="scheduler-start-time" name="StartTime" class="form-control datetimepicker-input" data-target="#scheduler-start-time-picker" value="@Model.StartTimeToEdit" />
<div class="input-group-append" data-target="#scheduler-start-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="scheduler-end-date">Ende</label>
<div class="input-group date" id="scheduler-end-date-picker" data-target-input="nearest">
<input type="text" id="scheduler-end-date" name="EndDate" class="form-control datetimepicker-input" data-target="#scheduler-end-date-picker" data-toggle="datetimepicker" value="@Model.EndDateToEdit" />
<div class="input-group-append" data-target="#scheduler-end-date-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-calendar-alt"></i></div>
</div>
</div>
</div>
</div>
<div class="col-md">
<div class="form-group mb-1">
<label for="scheduler-end-time">Bis</label>
<div class="input-group date" id="scheduler-end-time-picker" data-target-input="nearest">
<input type="text" id="scheduler-end-time" name="EndTime" class="form-control datetimepicker-input" data-target="#scheduler-end-time-picker" value="@Model.EndTimeToEdit" />
<div class="input-group-append" data-target="#scheduler-end-time-picker" data-toggle="datetimepicker">
<div class="input-group-text"><i class="fas fa-clock"></i></div>
</div>
</div>
</div>
</div>
</div>
@if (Model.HasResourcesEmployeesOrCustomers)
<div class="form-row">
<div class="col-md">
@using (Html.BeginForm("SetIsInIntervalFinderMode", "Scheduler", FormMethod.Post))
{
<div class="form-row">
@if (AbstractModel.HasRightToInsertEmployeeAppointments)
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#employees-popup">Mitarbeiter hinzufügen</button>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments)
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#customers-popup">Klienten hinzufügen</button>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="col-md">
<div class="form-group my-1">
<button type="button" class="btn btn-primary w-100" data-toggle="modal" data-target="#resources-popup">Ressourcen hinzufügen</button>
</div>
</div>
}
var buttonValue = Model.IsInIntervalFinderMode ? "Zurück" : "Freie Termine suchen";
</div>
<div class="form-row">
@if (AbstractModel.HasRightToInsertEmployeeAppointments)
{
<div class="col-md">
<div class="form-group my-1">
<div class="list-group" id="selected-employees-list">
@foreach (var selectedEmployee in Model.SelectedEmployees)
{
<div class="list-group-item my-auto" id="related-employee-@selectedEmployee.EmployeeOid">
<div class="row">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-user text-bewo-employee h-100"></i>
</div>
<p class="form-control border-0 bg-transparent text-truncate">
@selectedEmployee.DetailDescription
</p>
<div class="input-group-append">
<button type="button" class="btn btn-primary" onclick="removeSelectedEmployee(@selectedEmployee.EmployeeOid)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments)
{
<div class="col-md">
<div class="form-group my-1">
<div class="list-group" id="selected-customers-list">
@foreach (var selectedCustomer in Model.SelectedCustomers)
{
<div class="list-group-item my-auto" id="related-customer-@selectedCustomer.CustomerOid">
<div class="row">
<div class="input-group">
<div class="input-group-prepend">
<i class="fas fa-user text-bewo-customers h-100"></i>
</div>
<p class="form-control border-0 bg-transparent text-truncate">
@selectedCustomer.DetailDescription
</p>
<div class="input-group-append">
<button type="button" class="btn btn-primary" onclick="removeSelectedCustomer(@selectedCustomer.CustomerOid)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="col-md">
<div class="form-group my-1">
<div class="list-group" id="selected-resources-list">
@foreach (var selectedResource in Model.SelectedResources)
{
<div class="list-group-item my-auto" id="relation-item-@selectedResource.ResourceOid">
<div class="row">
<div class="col my-auto">
<i class="fas fa-cubes text-bewo-resource mr-2"></i>
@selectedResource.Name
</div>
<div class="col-auto my-auto">
<button type="button" class="btn btn-primary" onclick="removeSelectedResource(@selectedResource.ResourceOid)">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
</div>
}
</div>
</div>
</div>
}
</div>
<button id="find-free-appointments-btn" type="submit" class="btn btn-primary" onclick="showSpinner()">@buttonValue</button>
}
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="subject">Betreff</label>
<input type="text" id="subject" name="Subject" class="form-control" value="@Model.SubjectToEdit" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="location">Ort</label>
<input type="text" id="location" name="Location" class="form-control" value="@Model.LocationToEdit" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="form-group mb-1">
<label for="notice">Notiz</label>
<textarea class="form-control" id="notice" name="Notice">@Model.DescriptionToEdit</textarea>
</div>
</div>
</div>
</div>
}
<div class="d-flex bd-highlight mt-3">
<div class="mr-auto bd-highlight">
<!-- Abstandshalter -->
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="reset-button" onclick="resetInsertAppointmentForm()">Abbrechen</button>
</div>
<div class="ml-3 bd-highlight">
<button type="button" class="btn btn-primary" id="create-button" onclick="submitInsertAppointmentForm()">Speichern</button>
</div>
</div>
</div>
@if (Model.IsInIntervalFinderMode)
{
<!-- Intervallfinder -->
<div id="interval-finder-container">
@Html.Partial("AppointmentIntervalFinderPartial", Model)
</div>
}
else
{
<!-- Formular -->
<div id="form-container" class="d-none d-sm-none d-md-block">
@Html.Partial("AppointmentFormPartial", Model)
</div>
}
</div>
<!-- Terminliste -->
<div class="col col-12 @listCol col-lg-9 mt-3">
@if (Model.SelectedSchedulerView == "1")
<!-- TODO: VORERST NICHT LÖSCHEN!-->
@if(Model.IsInIntervalFinderMode)
{
@Html.Partial("AppointmentIntervalFinderResultPartial", Model)
}
else
{
@Html.Partial("OneDaySchedulerPartial", Model)
}
@*@if (Model.SelectedSchedulerView == "1")
{
@Html.Partial("OneDaySchedulerPartial", Model)
}
@@ -371,121 +180,7 @@
else if (Model.SelectedSchedulerView == "7")
{
@Html.Partial("SevenDaySchedulerPartial", Model)
}
}*@
</div>
</div>
</div>
@if (AbstractModel.HasRightToInsertRessourceAppointments && Model.ResourceCategories2Resources.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="resources-popup">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title">Ressourcen</h6>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
@foreach (var category2Resources in Model.ResourceCategories2Resources)
{
<div class="card w-100 mb-3" id="resource-category-@category2Resources.Key.ValueListEntryOid">
<div class="card-header" data-toggle="collapse" data-target="#collapsable-resource-category-@category2Resources.Key.ValueListEntryOid">
<div class="d-flex align-items-center">
<h5 class="mr-auto">@category2Resources.Key.DisplayName</h5>
<div class="btn-group" role="group">
<span class="fas fa-chevron-down text-primary"></span>
</div>
</div>
</div>
<div class="collapse" id="collapsable-resource-category-@category2Resources.Key.ValueListEntryOid">
<div class="card-body">
@foreach (var resource in category2Resources.Value)
{
var checkedValue = Model.SelectedResources.Contains(resource) ? "checked" : string.Empty;
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="@resource.ResourceOid-checkbox" @checkedValue onchange="changeResourceSelection()" />
<label class="custom-control-label" for="@resource.ResourceOid-checkbox">@resource.Name</label>
</div>
}
</div>
</div>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertEmployeeAppointments && Model.AllEmployees.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="employees-popup">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title">Mitarbeiter</h6>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
@foreach (var employee in Model.AllEmployees)
{
var checkedValue = Model.SelectedEmployees.Contains(employee) ? "checked" : string.Empty;
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="employee-@employee.EmployeeOid-checkbox" @checkedValue onchange="changeEmployeeSelection()" />
<label class="custom-control-label" for="employee-@employee.EmployeeOid-checkbox">@employee.DetailDescription</label>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}
@if (AbstractModel.HasRightToInsertCustomerAppointments && Model.AllCustomers.Any())
{
<div class="modal" tabindex="-1" role="dialog" id="customers-popup">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title">Klienten</h6>
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
@foreach (var customer in Model.AllCustomers)
{
var checkedValue = Model.SelectedCustomers.Contains(customer) ? "checked" : string.Empty;
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customer-@customer.CustomerOid-checkbox" @checkedValue onchange="changeCustomerSelection()" />
<label class="custom-control-label" for="customer-@customer.CustomerOid-checkbox">@customer.DetailDescription</label>
</div>
}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Übernehmen</button>
</div>
</div>
</div>
</div>
}
<!-- TODO: Mitarbeiter hinzufügen und vielleicht in dem Zuge auch Klienten? Oder doch erst den Scheduler von DevExpress testen? -->
</div>

View File

@@ -15,7 +15,7 @@
<!-- jquery first, then Popper.js, then Bootstrap JS -->
<script src="@Url.Content("~/Scripts/jquery-3.6.0.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.12.1.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.13.0.min.js")"></script>
<script src="@Url.Content("~/Scripts/src-min/ace.js")"></script>
<script src="@Url.Content("~/Scripts/devexpress-scripts/knockout-3.5.1.js")"></script>
<script src="@Url.Content("~/node_modules/cldrjs/dist/cldr.js")"></script>
@@ -41,6 +41,8 @@
<script src="~/Scripts/view-scripts/report.js?v=1.10"></script>
<script src="~/Scripts/signature_pad-3.2.min.js?v=1.10"></script>
<script src="~/Scripts/utils/trimCanvas.js?v=1.10"></script>
<script src="~/Scripts/utils/resources-list-utils.js?v=1.10"></script>
<script src="~/Scripts/utils/list-utils.js?v=1.10"></script>
@Html.DevExpress().GetStyleSheets(
new StyleSheet { ExtensionSuite = ExtensionSuite.NavigationAndLayout },
@@ -86,7 +88,7 @@
<script>
$(document).ready(function() {
try {
logWidthAndBreakingPoint();
//logWidthAndBreakingPoint();
var timeoutInMilliseconds = parseInt("@AbstractBaseController.TimeoutLimit", 10) * 60 * 1000;
@@ -132,7 +134,7 @@
});
$(window).resize(function() {
logWidthAndBreakingPoint();
//logWidthAndBreakingPoint();
});
function logWidthAndBreakingPoint() {
@@ -256,7 +258,7 @@
<i class="fas fa-file-invoice text-bewo-report">
</i>
Auswertung
Quittierungsbelege
</button>
</li>
}

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
@@ -227,6 +227,7 @@
<forms loginUrl="~/Login" />
</authentication>
<sessionState timeout="20" />
<identity impersonate="false" />
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

View File

@@ -1,19 +1,305 @@
{
"name": "bewoplanermobil",
"version": "1.0.0",
"lockfileVersion": 1,
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "bewoplanermobil",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"bootstrap": "^4.4.1",
"globalize": "^1.7.0",
"sass": "^1.27.0"
}
},
"node_modules/anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"engines": {
"node": ">=8"
}
},
"node_modules/bootstrap": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz",
"integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==",
"engines": {
"node": ">=6"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/bootstrap"
},
"peerDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.16.0"
}
},
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dependencies": {
"fill-range": "^7.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/cldrjs": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz",
"integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA=="
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/globalize": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/globalize/-/globalize-1.7.0.tgz",
"integrity": "sha512-faR46vTIbFCeAemyuc9E6/d7Wrx9k2ae2L60UhakztFg6VuE42gENVJNuPFtt7Sdjrk9m2w8+py7Jj+JTNy59w==",
"dependencies": {
"cldrjs": "^0.5.4"
}
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"node_modules/sass": {
"version": "1.27.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.27.0.tgz",
"integrity": "sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig==",
"dependencies": {
"chokidar": ">=2.0.0 <4.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
"node": ">=8.9.0"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
}
},
"dependencies": {
"anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
"bootstrap": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz",
"integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA=="
"integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==",
"requires": {}
},
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"requires": {
"fill-range": "^7.0.1"
}
},
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"fsevents": "~2.3.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
}
},
"cldrjs": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.5.tgz",
"integrity": "sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA=="
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"requires": {
"to-regex-range": "^5.0.1"
}
},
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"optional": true
},
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"requires": {
"is-glob": "^4.0.1"
}
},
"globalize": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/globalize/-/globalize-1.7.0.tgz",
@@ -21,6 +307,66 @@
"requires": {
"cldrjs": "^0.5.4"
}
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"requires": {
"binary-extensions": "^2.0.0"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"requires": {
"is-extglob": "^2.1.1"
}
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"requires": {
"picomatch": "^2.2.1"
}
},
"sass": {
"version": "1.27.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.27.0.tgz",
"integrity": "sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig==",
"requires": {
"chokidar": ">=2.0.0 <4.0.0"
}
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"requires": {
"is-number": "^7.0.0"
}
}
}
}

View File

@@ -9,8 +9,8 @@
"license": "ISC",
"dependencies": {
"bootstrap": "^4.4.1",
"globalize": "^1.7.0"
"globalize": "^1.7.0",
"sass": "^1.27.0"
},
"devDependencies": {},
"description": ""
}

View File

@@ -4,9 +4,9 @@
<package id="cldrjs" version="0.5.1" targetFramework="net472" />
<package id="EntityFramework" version="6.4.4" targetFramework="net472" />
<package id="jQuery" version="3.6.0" targetFramework="net472" />
<package id="jQuery.UI.Combined" version="1.12.1" targetFramework="net472" />
<package id="jQuery.UI.Combined" version="1.13.0" targetFramework="net472" />
<package id="jQuery.Validation" version="1.19.3" targetFramework="net472" />
<package id="log4net" version="2.0.12" targetFramework="net472" />
<package id="log4net" version="2.0.13" targetFramework="net472" />
<package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net472" />
<package id="Microsoft.AspNet.Providers.Core" version="2.0.0" targetFramework="net472" />
<package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net472" />
@@ -25,9 +25,10 @@
<package id="Microsoft.jQuery.Unobtrusive.Ajax" version="3.2.6" targetFramework="net472" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.12" targetFramework="net472" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net472" />
<package id="Microsoft.NETCore.Portable.Compatibility" version="1.0.1" targetFramework="net472" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
<package id="Moment.js" version="2.29.1" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" />
<package id="RestSharp" version="106.12.0" targetFramework="net472" />
<package id="RestSharp" version="106.13.0" targetFramework="net472" />
<package id="WebGrease" version="1.6.0" targetFramework="net472" />
</packages>

4
Controls/packages.config Normal file
View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClrHeapAllocationAnalyzer" version="3.0.0" targetFramework="net45" />
</packages>

View File

@@ -127,7 +127,7 @@ namespace BeWo.Data
var name = context.Request.Params["ctl00$tb_login"];
var password = context.Request.Params["ctl00$tb_password"];
if (!Utils.IsAnyNullOrEmpty(name, password))
if (!BS.Shared.Core.Utils.IsAnyNullOrEmpty(name, password))
{
ApplicationUser user = DAOFactory.UserDAO.FindUserByLoginName(name);
@@ -164,7 +164,7 @@ namespace BeWo.Data
lPassword = context.Request.Params["token"];
}
if (!Utils.IsAnyNullOrEmpty(lUserName, lPassword))
if (!BS.Shared.Core.Utils.IsAnyNullOrEmpty(lUserName, lPassword))
{
string ip = null;
if (context.Request != null)

View File

@@ -54,5 +54,10 @@ namespace BeWo.Data.Access
{
//WORKAROUND: Bei geleichzeitigen Asynchronen Calls kann e
}
protected ICriteria CreateCriteriaIsActiveWithAlias<T>(string alias) where T : BeWoEntityBase
{
return Session.CreateCriteria(typeof(T), alias).Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active));
}
}
}

View File

@@ -1,10 +1,12 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using BeWo.Data.Entities;
using BeWo.Data.Utils;
using BeWo.View.Navigation.Filter;
using BS.Shared.Extensions;
using NHibernate;
@@ -488,7 +490,7 @@ namespace BeWo.Data.Access
if(!IsNullOrEmpty(pCustomerReferenceNumber))
lCriteria.Add(Restrictions.Eq(Customer.PropertyName_ReferenceNumber, pCustomerReferenceNumber));
if(!Utils.AreAllNullOrEmpty(pCustomerFirstName, pCustomerLastName))
if(!BS.Shared.Core.Utils.AreAllNullOrEmpty(pCustomerFirstName, pCustomerLastName))
lCriteria.CreateCriteria(Customer.PropertyName_Person)
.Add(Restrictions.Like(Person.PropertyName_FirstName, pCustomerFirstName, MatchMode.Anywhere))
.Add(Restrictions.Like(Person.PropertyName_LastName, pCustomerLastName, MatchMode.Anywhere));
@@ -1417,8 +1419,8 @@ namespace BeWo.Data.Access
var schedulerAppointments = appointments as IList<SchedulerAppointment> ?? appointments.ToList();
// Serientermine anhand der RecurrenceInfo erzeugen und den schedulerAppointments hinzufügen ------------------------------------------------------------
var deletedOccurences = schedulerAppointments.Where(app => app.Type == 4).Select(app => Utils.GetOccurrenceId(app.RecurrenceInfo)).ToList();
var changedOccurences = schedulerAppointments.Where(app => app.Type == 3).Select(app => Utils.GetOccurrenceId(app.RecurrenceInfo)).ToList();
var deletedOccurences = schedulerAppointments.Where(app => app.Type == 4).Select(app => BS.Shared.Core.Utils.GetOccurrenceId(app.RecurrenceInfo)).ToList();
var changedOccurences = schedulerAppointments.Where(app => app.Type == 3).Select(app => BS.Shared.Core.Utils.GetOccurrenceId(app.RecurrenceInfo)).ToList();
var recurringAppointmentsCriteria = CreateRecurrenceCriteria(start, end).Add(Restrictions.Eq(nameof(SchedulerAppointment.Type), 1));
@@ -2772,20 +2774,10 @@ namespace BeWo.Data.Access
var employee2SchedCrit = Subqueries.PropertyIn(BeWoEntityBase.PropertyName_Oid, detachedCriteria1);
var originatorCrit = Restrictions.In(SchedulerAppointment.PropertyName_Originator, pSelectedEmployees);
//var notEmployee2SchedCrit = Subqueries.PropertyNotex(BeWoEntityBase.PropertyName_Oid, detachedCriteria1);
//and not exists(
// SELECT
//this_0_.Oid as y0_
//FROM
// Employee2NewSchApp this_0_
// WHERE
//this_0_.NewSchAppOid = this_.Oid
// )
var detachedCriteria2 = DetachedCriteria.For<Employee2SchedulerAppointment>("e2s2")
.SetProjection(Projections.Property(BeWoEntityBase.PropertyName_Oid))
.Add(Restrictions.EqProperty("e2s2." + Employee2SchedulerAppointment.PropertyName_SchedulerAppointment, "sa.Oid"));
//.Add(Restrictions.Eq(Employee2SchedulerAppointment.PropertyName_SchedulerAppointment + ".Oid", mainCriteria.SetProjection(Projections.Property(Employee2SchedulerAppointment.PropertyName_Oid))));
var employee2SchedCrit2 = Subqueries.NotExists(detachedCriteria2);
@@ -2832,7 +2824,6 @@ namespace BeWo.Data.Access
resourceCriterion = Expression.Sql(blah);
}
// AND {SchedulerAppointment.PropertyName_RecurrenceInfo} IS NOT NULL AND {SchedulerAppointment.PropertyName_RecurrenceInfo} NOT LIKE '%Index%'
var listOfCriterias = new List<ICriterion>
{
employeeCriterion,
@@ -2957,13 +2948,18 @@ namespace BeWo.Data.Access
return ownAppointmentCriterion;
}
private ICriteria CreateRecurrenceCriteria(DateTime start, DateTime end, bool pIncludeInactiveOnes = false)
private ICriteria CreateRecurrenceCriteria(DateTime start, DateTime end, bool pIncludeInactiveOnes = false, bool excludeTasks = false)
{
var recurrenceBetween = Format("'{0:yyyy-MM-dd} 00:00:00' BETWEEN STR_TO_DATE(SUBSTRING({1}, 24, 19), '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE(SUBSTRING({1}, 50, 19), '%m/%d/%Y %H:%i:%s')", start, SchedulerAppointment.PropertyName_RecurrenceInfo);
var recurrenceAfter = $"'{start:yyyy-MM-dd} 00:00:00' > STR_TO_DATE(SUBSTRING({SchedulerAppointment.PropertyName_RecurrenceInfo}, 24, 19), '%m/%d/%Y %H:%i:%s')";
var criteria = CreateCriteria<SchedulerAppointment>("sa");
if(!excludeTasks)
{
criteria.Add(Restrictions.Not(Restrictions.Eq(nameof(SchedulerAppointment.IsTask), true)));
}
if(!pIncludeInactiveOnes)
{
criteria.Add(Restrictions.Eq(BeWoEntityBase.PropertyName_IsActive, ActivationTypeId.Active));
@@ -3324,7 +3320,7 @@ namespace BeWo.Data.Access
{
var c = CreateCriteria<SchedulerAppointment>();
c.Add(Restrictions.Eq(nameof(BeWoEntityBase.Notice), Utils.TestAppointmentNotice));
c.Add(Restrictions.Eq(nameof(BeWoEntityBase.Notice), BS.Shared.Core.Utils.TestAppointmentNotice));
return c.List<SchedulerAppointment>();
}
@@ -4635,5 +4631,203 @@ namespace BeWo.Data.Access
return list.ToList();
}
// TODO: Intervalle werden als frei angezeigt, wenn sie am Ende eines Tages sind und sich mit Serienterminen überschneiden
public Dictionary<DateTime, List<DateTimeSpan>> FindAppointmentsInRange(int duration, DateTime intervalStart, DateTime intervalEnd, List<long> resourceOids, List<long> customerOids, List<long> employeeOids, long loggedInEmployeeOid, int intervalBuffer = 30, bool skipWeekends = true)
{
var result = new List<SchedulerAppointment>();
var intervals = IntervalFinderHelper.CreateIntervals(duration, intervalStart, intervalEnd, skipWeekends, intervalBuffer);
var subset = IntervalFinderHelper.GenereateIntervalsForChecking(intervalStart, intervalEnd);
var sw = new Stopwatch();
sw.Start();
foreach (var dts in subset)
{
var start = dts.StartDate.MergeDatesByDate(intervalStart);
var end = dts.EndDate.MergeDatesByDate(intervalEnd);
var apptmts = LoadAppointmentsForIntervalFinder(start, end, resourceOids, customerOids, employeeOids, loggedInEmployeeOid, skipWeekends);
result.AddRangeIfElementsNotIn(apptmts);
}
sw.Stop();
var ms = sw.ElapsedMilliseconds;
Debug.WriteLine($"FindAppointmentsInRange: Es dauerte {ms}ms {result.Count} Termine zwischen dem {intervalStart:dd.MM.yyyy HH:mm} und dem {intervalEnd:dd.MM.yyyy HH:mm} aus der Datenbank zu laden");
/*
Normal = 0,
Pattern = 1,
Occurrence = 2,
ChangedOccurrence = 3,
DeletedOccurrence = 4
*/
var changedOccurrences = result.Where(a => a.Type == 3).Select(s => BS.Shared.Core.Utils.GetOccurrenceId(s.RecurrenceInfo)).ToList();
var deletedOccurrences = result.Where(a => a.Type == 4).Select(s => BS.Shared.Core.Utils.GetOccurrenceId(s.RecurrenceInfo)).ToList();
var kek = IntervalFinderHelper.GetRecurrencesForIntervalFinder(result, intervalStart, intervalEnd, changedOccurrences, deletedOccurrences, skipWeekends);
result.AddRange(kek);
var freeIntervals = new List<DateTimeSpan>();
if (intervals.Count > 0)
{
if(result.Count > 0)
{
foreach (var interval in intervals)
{
if (!result.Any(a => a.StartDate.HasValue && a.EndDate.HasValue && a.StartDate.Value.IsInInterval(a.EndDate.Value, interval.StartDate, interval.EndDate)))
{
freeIntervals.Add(interval);
}
}
}
else
{
return IntervalFinderHelper.CreateFreeIntervalsDictionary(intervals);
}
}
return IntervalFinderHelper.CreateFreeIntervalsDictionary(freeIntervals);
}
private IEnumerable<SchedulerAppointment> LoadAppointmentsForIntervalFinder(DateTime intervalStart, DateTime intervalEnd, IReadOnlyCollection<long> resourceOids, IReadOnlyCollection<long> customerOids, List<long> employeeOids, long loggedInEmployeeOid, bool skipWeekends)
{
var result = new List<SchedulerAppointment>();
if (intervalStart < intervalEnd)
{
var intervals = IntervalFinderHelper.GenerateIntervalsForCriteria(intervalStart, intervalEnd, skipWeekends);
var intervalRecurrenceCriterias = IntervalFinderHelper.CreateIntervalRecurrenceCriterias(intervals, skipWeekends);
var or = CreateOrCriteria(intervalRecurrenceCriterias);
var criteria = CreateCriteriaIsActiveWithAlias<SchedulerAppointment>("sa")
.Add(Restrictions.Not(Restrictions.Eq(nameof(SchedulerAppointment.IsTask), true)));
if(intervals.Count > 0)
{
if(intervals.Count > 1)
{
var criterionList = new List<ICriterion>();
foreach (var dts in intervals)
{
criterionList.AddIfNotIn(
Restrictions.Or(
Restrictions.Between(nameof(SchedulerAppointment.StartDate), dts.StartDate, dts.EndDate),
Restrictions.Or(
Restrictions.Between(nameof(SchedulerAppointment.EndDate), dts.StartDate, dts.EndDate),
Restrictions.And(
Restrictions.Lt(nameof(SchedulerAppointment.StartDate), dts.StartDate),
Restrictions.Gt(nameof(SchedulerAppointment.EndDate), dts.EndDate)))
));
}
criteria.Add(Restrictions.Or(or, CreateOrCriteria(criterionList)));
}
else
{
var dts = intervals.FirstOrDefault();
if (dts != null)
{
var cri = Restrictions.Or(
Restrictions.Between(nameof(SchedulerAppointment.StartDate), dts.StartDate, dts.EndDate),
Restrictions.Or(
Restrictions.Between(nameof(SchedulerAppointment.EndDate), dts.StartDate, dts.EndDate),
Restrictions.And(
Restrictions.Lt(nameof(SchedulerAppointment.StartDate), dts.StartDate),
Restrictions.Gt(nameof(SchedulerAppointment.EndDate), dts.EndDate)))
);
criteria.Add(Restrictions.Or(or, cri));
}
}
}
ICriterion resourceCriterion = null;
ICriterion customerCriterion = null;
if (employeeOids.Count == 0)
{
employeeOids.Add(loggedInEmployeeOid);
}
var detachedCriteria1 = DetachedCriteria.For<Employee2SchedulerAppointment>()
.Add(Restrictions.In(nameof(Employee2SchedulerAppointment.Employee) + ".Oid", employeeOids))
.SetProjection(Projections.Property(nameof(Employee2SchedulerAppointment.SchedulerAppointmentOid)));
var employee2SchedCrit = Subqueries.PropertyIn(nameof(BeWoEntityBase.Oid), detachedCriteria1);
var originatorCrit = Restrictions.In(nameof(SchedulerAppointment.Originator), employeeOids);
var detachedCriteria2 = DetachedCriteria.For<Employee2SchedulerAppointment>("e2s2")
.SetProjection(Projections.Property(nameof(BeWoEntityBase.Oid)))
.Add(Restrictions.EqProperty("e2s2." + nameof(Employee2SchedulerAppointment.SchedulerAppointmentOid), "sa.Oid"));
var employee2SchedCrit2 = Subqueries.NotExists(detachedCriteria2);
var and = Restrictions.And(originatorCrit, employee2SchedCrit2);
var employeeCriterion = Restrictions.Or(employee2SchedCrit, and);
if (customerOids?.Count > 0)
{
var customerSql = $"{BeWoEntityBase.PropertyName_Oid} IN (SELECT newschappoid FROM customer2newschapp WHERE customeroid IN ({customerOids.ToSeparatedString(",")}))";
customerCriterion = Expression.Sql(customerSql);
}
if (resourceOids?.Count > 0)
{
var resourceSql = $"{BeWoEntityBase.PropertyName_Oid} IN (SELECT newschappoid FROM resource2newschapp WHERE resourceoid IN ({resourceOids.ToSeparatedString(",")}))";
resourceCriterion = Expression.Sql(resourceSql);
}
var listOfCriterias = new List<ICriterion>
{
employeeCriterion,
customerCriterion,
resourceCriterion
};
if (listOfCriterias.Count > 0)
{
var orCriteria = CreateOrCriteria(listOfCriterias);
if (orCriteria != null)
{
criteria.Add(orCriteria);
}
}
var criteriaAsString = criteria.ToString();
var appointments = criteria.List<SchedulerAppointment>().ToList();
result.AddRange(appointments);
}
return result;
}
private static string GetGeneratedSql(ICriteria criteria)
{
var criteriaImpl = (CriteriaImpl) criteria;
var sessionImpl = (SessionImpl) criteriaImpl.Session;
var factory = (SessionFactoryImpl) sessionImpl.SessionFactory;
var implementors = factory.GetImplementors(criteriaImpl.EntityOrClassName);
var loader = new CriteriaLoader((IOuterJoinLoadable) factory.GetEntityPersister(implementors[0]), factory, criteriaImpl, implementors[0], sessionImpl.EnabledFilters);
return loader.SqlString.ToString();
}
}
}

View File

@@ -200,6 +200,7 @@
<Compile Include="Entities\AbwesenheitsInformationPrint.cs" />
<Compile Include="Entities\AddressHistory.cs" />
<Compile Include="Entities\ConfirmationReceiptSignature.cs" />
<Compile Include="Entities\ContractHistory.cs" />
<Compile Include="Entities\CostBearer2SupportConceptHistory.cs" />
<Compile Include="Entities\Dienstvertretung.cs" />
<Compile Include="Entities\Dokumentvorlage.cs" />
@@ -375,6 +376,8 @@
<Compile Include="Entities\Employee.cs" />
<Compile Include="Entities\Person.cs" />
<Compile Include="UpdInsInterceptor.cs" />
<Compile Include="Utils\AppointmentSearchResult.cs" />
<Compile Include="Utils\IntervalFinderHelper.cs" />
<Compile Include="WCFHibernateSessionManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
@@ -721,6 +724,9 @@
<EmbeddedResource Include="Mappings\SupportConceptApprovalPeriodHistory.hbm.xml">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Mappings\ContractHistory.hbm.xml">
<SubType>Designer</SubType>
</EmbeddedResource>
<Content Include="Mappings\Timesheet2Mail.hbm.xml" />
<EmbeddedResource Include="Mappings\ContactHistory.hbm.xml">
<SubType>Designer</SubType>
@@ -885,6 +891,7 @@
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.2.9.6\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.2.9.6\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>

View File

@@ -0,0 +1,206 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using BS.Shared;
namespace BeWo.Data.Entities
{
public class ContractHistory : BeWoEntityBase
{
public static string PropertyName_ContractHistoryProbationPeriod = "ContractHistoryProbationPeriod";
public static string PropertyName_ContractHistoryWeeklyDays = "ContractHistoryWeeklyDays";
public static string PropertyName_ContractHistoryCancellationPeriod = "ContractHistoryCancellationPeriod";
public static string PropertyName_ContractHistoryEntryDate = "ContractHistoryEntryDate";
public static string PropertyName_ContractHistoryContractEndDate = "ContractHistoryContractEndDate";
public static string PropertyName_ContractHistoryHourlyRate = "ContractHistoryHourlyRate";
public static string PropertyName_ContractHistoryWeeklyFLS = "ContractHistoryWeeklyFLS";
public static string PropertyName_ContractHistoryMonthlyFLS = "ContractHistoryMonthlyFLS";
public static string PropertyName_ContractHistoryWeeklyTotalHours = "ContractHistoryWeeklyTotalHours";
public static string PropertyName_ContractHistoryMonthlyTotalHours = "ContractHistoryMonthlyTotalHours";
public static string PropertyName_ContractHistoryLeaveDays = "ContractHistoryLeaveDays";
public static string PropertyName_ContractHistoryEmployeeOid = "ContractHistoryEmployeeOid";
public static string PropertyName_ContractHistoryEmploymentType = "ContractHistoryEmploymentType";
private StatementType _ChangeType;
private decimal? _LeaveDays;
private decimal? _WeeklyTotalHours;
private decimal? _MonthlyTotalHours;
private decimal? _WeeklyFLS;
private decimal? _MonthlyFLS;
private decimal? _HourlyRate;
private DateTime? _EntryDate;
private DateTime? _ContractEndDate;
private int _CancellationPeriod;
private int _ProbationPeriod;
private int? _WeeklyDays;
private long _EmployeeOid;
private EmploymentType _EmploymentType;
public ContractHistory()
{
this._Tid = TableID.ContractHistory;
}
public virtual StatementType ChangeType
{
get
{
return _ChangeType;
}
set
{
if (AreDifferent(_ChangeType, value))
{
_ChangeType = value;
}
}
}
public virtual EmploymentType ContractHistoryEmploymentType
{
get { return this._EmploymentType; }
set
{
if (this.AreDifferent(this._EmploymentType, value))
{
this._EmploymentType = value;
}
}
}
public virtual decimal? ContractHistoryLeaveDays
{
get { return _LeaveDays; }
set
{
if (base.AreDifferent(_LeaveDays, value))
_LeaveDays = value;
}
}
public virtual decimal? ContractHistoryWeeklyTotalHours
{
get { return _WeeklyTotalHours; }
set
{
if (base.AreDifferent(_WeeklyTotalHours, value))
_WeeklyTotalHours = value;
}
}
public virtual decimal? ContractHistoryMonthlyTotalHours
{
get { return _MonthlyTotalHours; }
set
{
if (base.AreDifferent(_MonthlyTotalHours, value))
_MonthlyTotalHours = value;
}
}
public virtual decimal? ContractHistoryWeeklyFLS
{
get { return _WeeklyFLS; }
set
{
if (base.AreDifferent(_WeeklyFLS, value))
_WeeklyFLS = value;
}
}
public virtual decimal? ContractHistoryMonthlyFLS
{
get { return _MonthlyFLS; }
set
{
if (base.AreDifferent(_MonthlyFLS, value))
_MonthlyFLS = value;
}
}
public virtual int ContractHistoryProbationPeriod
{
get { return _ProbationPeriod; }
set
{
if (base.AreDifferent(_ProbationPeriod, value))
_ProbationPeriod = value;
}
}
public virtual int? ContractHistoryWeeklyDays
{
get { return _WeeklyDays; }
set
{
if (base.AreDifferent(_WeeklyDays, value))
_WeeklyDays = value;
}
}
public virtual int ContractHistoryCancellationPeriod
{
get { return _CancellationPeriod; }
set
{
if (base.AreDifferent(_CancellationPeriod, value))
_CancellationPeriod = value;
}
}
public virtual DateTime? ContractHistoryEntryDate
{
get { return _EntryDate; }
set
{
if (base.AreDifferent(_EntryDate, value))
_EntryDate = value;
}
}
public virtual DateTime? ContractHistoryContractEndDate
{
get { return _ContractEndDate; }
set
{
if (base.AreDifferent(_ContractEndDate, value))
_ContractEndDate = value;
}
}
public virtual decimal? ContractHistoryHourlyRate
{
get { return _HourlyRate; }
set
{
if (base.AreDifferent(_HourlyRate, value))
_HourlyRate = value;
}
}
public virtual long ContractHistoryEmployeeOid
{
get { return _EmployeeOid; }
set
{
if (base.AreDifferent(_EmployeeOid, value))
_EmployeeOid = value;
}
}
public virtual CostRatePeriod ContractHistoryHourlyRateCostRateValue { get; set; }
public virtual decimal? ContractHistoryProbationPeriod2 { get; set; }
public virtual ValueListEntry ContractHistoryContractTypeValueListEntry { get; set; }
public virtual ValueListEntry ContractHistoryQualifikationsBedarfValueListEntry { get; set; }
}
}

View File

@@ -154,7 +154,7 @@ namespace BeWo.Data.ICD10
}
}
return Utils.Compress(sr.ToString());
return BS.Shared.Core.Utils.Compress(sr.ToString());
}
public static string GetDiagnosisForCode(string code)

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="BeWo.Data.Entities.ContractHistory,BeWo.Data" table="ContractHistory" >
<id name="Oid" column="Oid" type="Int64" unsaved-value="null" >
<generator class="identity"/>
</id>
<version type="Int64" column="Version" name="Version" />
<property column="Tid" type="BS.Shared.TableID, BS.Shared" name="_Tid" access="field" />
<property column="Notice" type="String" name="Notice" length="1024" />
<property column="InsTs" type="DateTime" name="InsTs" />
<property column="InsUser" type="String" name="InsUser" length="256" />
<property column="UdpUser" type="String" name="UdpUser" length="256" />
<property column="IsActive" type="BS.Shared.ActivationTypeId, BS.Shared" name="IsActive" />
<property column="SystemEntryID" type="BS.Shared.SystemEntryID, BS.Shared" name="SystemEntryID" />
<property column="ChangeType" type="BS.Shared.StatementType, BS.Shared" name="ChangeType" />
<property column="ContractHistoryEmployeeOid" type="Int64" name="ContractHistoryEmployeeOid"/>
<property column="ContractHistoryHourlyRate" type="Decimal" name="ContractHistoryHourlyRate" />
<property column="ContractHistoryWeeklyFLS" type="Decimal" name="ContractHistoryWeeklyFLS" />
<property column="ContractHistoryMonthlyFLS" type="Decimal" name="ContractHistoryMonthlyFLS" />
<property column="ContractHistoryWeeklyTotalHours" type="Decimal" name="ContractHistoryWeeklyTotalHours" />
<property column="ContractHistoryMonthlyTotalHours" type="Decimal" name="ContractHistoryMonthlyTotalHours" />
<property column="ContractHistoryLeaveDays" type="Decimal" name="ContractHistoryLeaveDays" />
<property column="ContractHistoryEntryDate" type="DateTime" name="ContractHistoryEntryDate" />
<property column="ContractHistoryContractEndDate" type="DateTime" name="ContractHistoryContractEndDate" />
<property column="ContractHistoryCancellationPeriod" type="Int32" name="ContractHistoryCancellationPeriod" />
<property column="ContractHistoryProbationPeriod" type="Int32" name="ContractHistoryProbationPeriod" />
<property column="ContractHistoryProbationPeriod2" type="Decimal" name="ContractHistoryProbationPeriod2" />
<property column="ContractHistoryWeeklyDays" type="Int32" name="ContractHistoryWeeklyDays" />
<many-to-one name="ContractHistoryEmploymentType" column="ContractHistoryEmploymentTypeOid" class="BeWo.Data.Entities.EmploymentType,BeWo.Data" cascade="none" />
<many-to-one name="ContractHistoryHourlyRateCostRateValue" column="ContractHistoryHourlyRateCostRateValueOid" class="BeWo.Data.Entities.CostRatePeriod,BeWo.Data" cascade="none" />
<many-to-one name="ContractHistoryContractTypeValueListEntry" column="ContractHistoryContractTypeValueListEntryOid" class="BeWo.Data.Entities.ValueListEntry,BeWo.Data" cascade="none" />
<many-to-one name="ContractHistoryQualifikationsBedarfValueListEntry" column="ContractHistoryQualifikationsBedarfValueListEntryOid" class="BeWo.Data.Entities.ValueListEntry,BeWo.Data" cascade="none" />
</class>
</hibernate-mapping>

View File

@@ -0,0 +1,13 @@
using System.Collections.Generic;
using BeWo.Data.Entities;
using BS.Shared.Core;
namespace BeWo.Data.Utils
{
public class AppointmentSearchResult
{
public List<SchedulerAppointment> Appointments { get; set; } = new List<SchedulerAppointment>();
public List<DateTimeSpan> Intervals { get; set; } = new List<DateTimeSpan>();
}
}

View File

@@ -0,0 +1,320 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Entities;
using BS.Shared.Core;
using BS.Shared.Extensions;
using DevExpress.XtraScheduler;
using DevExpress.XtraScheduler.Compatibility;
using NHibernate.Criterion;
using NHibernate.SqlCommand;
namespace BeWo.Data.Utils
{
public class IntervalFinderHelper
{
public static List<DateTimeSpan> GenerateIntervalsForCriteria(DateTime intervalStart, DateTime intervalEnd, bool skipWeekends)
{
var result = new List<DateTimeSpan>();
if (intervalEnd <= intervalStart)
{
return result;
}
var start = intervalStart;
var end = start.MergeDatesByDate(intervalEnd);
while (end <= intervalEnd)
{
end = start.MergeDatesByDate(intervalEnd);
if (skipWeekends && (start.Date.DayOfWeek == DayOfWeek.Saturday || start.Date.DayOfWeek == DayOfWeek.Sunday))
{
start = start.AddDays(1);
end = start.MergeDatesByDate(intervalEnd);
continue;
}
result.AddIfNotIn(new DateTimeSpan(start, end));
start = start.AddDays(1);
end = start.MergeDatesByDate(intervalEnd);
}
return result;
}
public static List<ICriterion> CreateIntervalRecurrenceCriterias(List<DateTimeSpan> intervals, bool skipWeekends)
{
var result = new List<ICriterion>();
foreach(var interval in intervals)
{
var start = interval.StartDate;
var end = interval.EndDate;
result.AddIfNotIn(CreateRecurrenceCriterion(start, end));
}
// TODO: KGW
//for (var i = 0; i < totalDays; i++)
//{
// start = start.AddDays(i).MergeDatesByDate(startDate);
// if (skipWeekends && (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday))
// {
// continue;
// }
// DateTime e;
// var end = start.MergeDatesByDate(endDate);
// while ((e = start.AddMinutes(duration)) <= end && start <= end.AddMinutes(-1 * duration))
// {
// result.AddIfNotIn(CreateRecurrenceCriterion(start, e));
// start = start.AddMinutes(intervalBuffer);
// }
//}
return result;
}
private static ICriterion CreateRecurrenceCriterion(DateTime start, DateTime end)
{
var recurrenceBetween = $"'{start:yyyy-MM-dd HH:mm:ss}' BETWEEN STR_TO_DATE(SUBSTRING(RecurrenceInfo, 24, 19), '%m/%d/%Y %H:%i:%s') AND STR_TO_DATE(SUBSTRING(RecurrenceInfo, 50, 19), '%m/%d/%Y %H:%i:%s')";
var recurrenceAfter = $"'{start:yyyy-MM-dd HH:mm:ss}' > STR_TO_DATE(SUBSTRING(RecurrenceInfo, 24, 19), '%m/%d/%Y %H:%i:%s')";
var result = Restrictions.Or(
Restrictions.And(
Restrictions.Not(Restrictions.Like(nameof(SchedulerAppointment.RecurrenceInfo), "Range", MatchMode.Anywhere)),
Restrictions.Like(nameof(SchedulerAppointment.RecurrenceInfo), "OccurrenceCount=\"10\"", MatchMode.Anywhere)),
Restrictions.Or(
Restrictions.Or(
Restrictions.And(Restrictions.Lt(nameof(SchedulerAppointment.StartDate), end), Restrictions.Ge(nameof(SchedulerAppointment.EndDate), start)),
Restrictions.Or(Restrictions.And(
Restrictions.Like(nameof(SchedulerAppointment.RecurrenceInfo), "End", MatchMode.Anywhere),
Restrictions.And(Restrictions.IsNotNull(nameof(SchedulerAppointment.RecurrenceInfo)), Expression.Sql(new SqlString(recurrenceBetween)))
), Restrictions.And(
Restrictions.And(
Restrictions.IsNotNull(nameof(SchedulerAppointment.RecurrenceInfo)),
Restrictions.Not(Restrictions.Like(nameof(SchedulerAppointment.RecurrenceInfo), "End", MatchMode.Anywhere))),
Expression.Sql(recurrenceAfter)))
),
Restrictions.And(Restrictions.Eq(nameof(SchedulerAppointment.Type), 3), Expression.Sql(new SqlString(recurrenceBetween)))));
return result;
}
public static Dictionary<DateTime, List<DateTimeSpan>> CreateFreeIntervalsDictionary(IEnumerable<DateTimeSpan> freeIntervals)
{
var result = new Dictionary<DateTime, List<DateTimeSpan>>();
var groupedIntervals = from dateTimeSpan in freeIntervals group dateTimeSpan by dateTimeSpan.StartDate.Date;
var unsortedDictionary = new Dictionary<DateTime, List<DateTimeSpan>>();
foreach (var grouping in groupedIntervals)
{
var orderedList = grouping.OrderBy(dateTimeSpan => dateTimeSpan.StartDate).ToList();
unsortedDictionary.AddOrUpdateValueInDictionary(grouping.Key, orderedList);
}
var keys = unsortedDictionary.Keys.OrderBy(key => key.Date).ToList();
foreach (var key in keys)
{
result.Add(key, unsortedDictionary[key]);
}
return result;
}
public static List<DateTimeSpan> CreateIntervals(int duration, DateTime intervalStart, DateTime intervalEnd, bool skipWeekends, int intervalBuffer)
{
var result = new List<DateTimeSpan>();
if (duration > 0 && intervalStart < intervalEnd && intervalBuffer > 10)
{
var timeSpan = intervalEnd - intervalStart;
var totalDays = Convert.ToInt32(Math.Ceiling(timeSpan.TotalDays));
for (var i = 0; i < totalDays; i++)
{
var start = intervalStart.AddDays(i).MergeDatesByDate(intervalStart);
if (skipWeekends && (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday))
{
continue;
}
DateTime e;
var end = start.MergeDatesByDate(intervalEnd);
while ((e = start.AddMinutes(duration)) <= end && start <= end.AddMinutes(-1 * duration))
{
result.Add(new DateTimeSpan(start, e));
start = start.AddMinutes(intervalBuffer);
}
}
}
return result;
}
public static List<DateTimeSpan> GenereateIntervalsForChecking(DateTime intervalStart, DateTime intervalEnd)
{
var start = intervalStart.Date;
var end = intervalEnd.Date;
var result = new List<DateTimeSpan>();
if (end < start)
{
return result;
}
var days = Convert.ToInt32((end - start).TotalDays);
if (days == 0)
{
days = 1;
}
var rest = days % 6;
var limit = (days - rest) / 6;
var s = start;
DateTime e;
for (var i = 0; i < limit; i++)
{
e = s.AddDays(5);
result.Add(new DateTimeSpan(s, e));
s = e.AddDays(1);
}
if (rest > 0)
{
e = s.AddDays(rest);
if (rest == 1)
{
e = e.AddDays(-1);
}
result.Add(new DateTimeSpan(s, e));
}
return result;
}
public static IEnumerable<SchedulerAppointment> CalculateRecurrences(IEnumerable<SchedulerAppointment> appointments, DateTime start, DateTime end, IReadOnlyCollection<RecurrenceInformation> changedOccurrences, IReadOnlyCollection<RecurrenceInformation> deletedOccurrences)
{
var result = new List<SchedulerAppointment>();
var interval = new TimeInterval(start, end);
foreach (var appointment in appointments.Where(app => app.RecurrenceInfo != null && app.Type == 1 && app.StartDate.HasValue && app.EndDate.HasValue))
{
var recurrenceInfo = new RecurrenceInfo();
recurrenceInfo.FromXml(appointment.RecurrenceInfo);
var occurrenceCalculator = OccurrenceCalculator.CreateInstance(recurrenceInfo);
var pattern = StaticAppointmentFactory.CreateAppointment(AppointmentType.Pattern);
pattern.RecurrenceInfo.FromXml(appointment.RecurrenceInfo);
pattern.Start = pattern.RecurrenceInfo.Start;
pattern.End = pattern.RecurrenceInfo.End;
var patternId = pattern.RecurrenceInfo.Id.ToString();
var occurrences = occurrenceCalculator.CalcOccurrences(interval, pattern);
if (occurrences.Count > 0)
{
foreach (var app in occurrences.GetAppointments(interval))
{
if(appointment.EndDate == null || appointment.StartDate == null)
{
continue;
}
var index = app.RecurrenceIndex;
var duration = (appointment.EndDate.Value - appointment.StartDate.Value).TotalMinutes;
var s = app.Start;
var e = app.Start.AddMinutes(duration);
var isOutOfInterval = s.AreInBetweenDates(e, start, end) == false;
var isChangedOccurrence = changedOccurrences.Any(a => a.PatternId.Equals(patternId) && a.Index == index);
var isDeletedOccurrence = deletedOccurrences.Any(a => a.PatternId.Equals(patternId) && a.Index == index);
if (isOutOfInterval || isChangedOccurrence || isDeletedOccurrence)
{
continue;
}
var recurringAppointment = new SchedulerAppointment
{
AllDay = appointment.AllDay,
CustomerList = appointment.CustomerList,
Notice = appointment.Notice,
EmployeeList = appointment.EmployeeList,
EndDate = app.Start.AddMinutes(duration),
FormerBookingSequenceOid = appointment.FormerBookingSequenceOid,
IsPrivate = appointment.IsPrivate,
Location = appointment.Location,
Originator = appointment.Originator,
RecurrenceInfo = app.RecurrenceInfo.ToXml(),
ReminderInfo = appointment.ReminderInfo,
ResourceList = appointment.ResourceList,
StartDate = app.Start,
Subject = appointment.Subject ?? string.Empty,
Type = appointment.Type
};
result.AddIfNotIn(recurringAppointment);
}
}
}
return result;
}
public static IEnumerable<SchedulerAppointment> GetRecurrencesForIntervalFinder(List<SchedulerAppointment> appointments, DateTime startDate, DateTime endDate, IReadOnlyCollection<RecurrenceInformation> changedOccurrences, IReadOnlyCollection<RecurrenceInformation> deletedOccurrences, bool skipWeekends)
{
var result = new List<SchedulerAppointment>();
var dayCount = Convert.ToInt32(Math.Ceiling((endDate - startDate).TotalDays));
if (dayCount <= 0)
{
return result;
}
for (var i = 0; i < dayCount; i++)
{
var start = startDate.AddDays(i);
if (skipWeekends && (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday))
{
continue;
}
var end = start.MergeDatesByDate(endDate);
var calculatedRecurrences = CalculateRecurrences(appointments, start, end, changedOccurrences, deletedOccurrences);
result.AddRange(calculatedRecurrences);
}
return result;
}
}
}

28
Data/packages.config Normal file
View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClrHeapAllocationAnalyzer" version="3.0.0" targetFramework="net472" />
<package id="EntityFramework" version="6.4.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Providers.Core" version="2.0.0" targetFramework="net45" />
<package id="Microsoft.CodeAnalysis" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="2.9.6" targetFramework="net472" developmentDependency="true" />
<package id="Microsoft.CodeAnalysis.Common" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.VisualBasic" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.VisualBasic.Workspaces" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="3.4.0" targetFramework="net472" />
<package id="System.Buffers" version="4.4.0" targetFramework="net472" />
<package id="System.Collections.Immutable" version="1.5.0" targetFramework="net472" />
<package id="System.Composition" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.AttributedModel" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Convention" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Hosting" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Runtime" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.TypedParts" version="1.0.31" targetFramework="net472" />
<package id="System.Memory" version="4.5.3" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net472" />
<package id="System.Reflection.Metadata" version="1.6.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
<package id="System.Text.Encoding.CodePages" version="4.5.1" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
</packages>

View File

@@ -0,0 +1,36 @@
CREATE TABLE `contracthistory` (
`Oid` bigint NOT NULL AUTO_INCREMENT,
`Tid` int NOT NULL,
`ContractHistoryEmployeeOid` bigint DEFAULT NULL,
`ContractHistoryEmploymentTypeOid` bigint DEFAULT NULL,
`Notice` mediumtext,
`ChangeType` tinyint NOT NULL DEFAULT '0',
`ContractHistoryHourlyRate` decimal(18,10) DEFAULT NULL,
`ContractHistoryEntryDate` datetime DEFAULT NULL,
`ContractHistoryContractEndDate` datetime DEFAULT NULL,
`ContractHistoryCancellationPeriod` int DEFAULT NULL,
`ContractHistoryProbationPeriod` int DEFAULT NULL,
`ContractHistoryWeeklyFls` decimal(18,10) DEFAULT NULL,
`ContractHistoryWeeklyTotalhours` decimal(18,10) DEFAULT NULL,
`ContractHistoryLeaveDays` decimal(18,10) DEFAULT NULL,
`InsTs` datetime DEFAULT NULL,
`InsUser` varchar(256) DEFAULT NULL,
`Version` bigint DEFAULT NULL,
`UdpUser` varchar(256) DEFAULT NULL,
`IsActive` tinyint DEFAULT NULL,
`SystemEntryID` int DEFAULT NULL,
`ContractHistoryWeeklyDays` int DEFAULT NULL,
`ContractHistoryMonthlyTotalHours` decimal(18,10) DEFAULT NULL,
`ContractHistoryMonthlyFLS` decimal(18,10) DEFAULT NULL,
`ContractHistoryHourlyRateCostRateValueOid` bigint DEFAULT NULL,
`ContractHistoryProbationPeriod2` decimal(18,10) DEFAULT NULL,
`ContractHistoryContractTypeValueListEntryOid` bigint DEFAULT NULL,
`ContractHistoryQualifikationsBedarfValueListEntryOid` bigint DEFAULT NULL,
PRIMARY KEY (`Oid`))
ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
ALTER TABLE `bewodemo`.`contracthistory`
ADD COLUMN `UpdTs` DATETIME NULL DEFAULT NULL AFTER `ContractHistoryQualifikationsBedarfValueListEntryOid`;
ALTER TABLE `bewodemo`.`contracthistory`
CHANGE COLUMN `UpdTs` `UpdTs` DATETIME NULL DEFAULT NULL AFTER `UdpUser`;

View File

@@ -211,7 +211,11 @@ namespace BeWo.Report.ReportObjects
lResult.OrganisationDebitorNumber = org.DebitorNumber;
lResult.OrganisationCostCenter = org.CostCenter;
}
else
{
lResult.OrganisationDebitorNumber = "";
lResult.OrganisationCostCenter = "";
}
lResult.AccountingPeriod = String.Format("{0:dd.MM.yyyy}-{1:dd.MM.yyyy}", pDC.InvoiceBase.AccountingPeriodStart, pDC.InvoiceBase.AccountingPeriodEnd);
lResult.AccountingPeriodStart = pDC.InvoiceBase.AccountingPeriodStart.Value;

25
Report/packages.config Normal file
View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.CodeAnalysis" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="2.9.6" targetFramework="net472" developmentDependency="true" />
<package id="Microsoft.CodeAnalysis.Common" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.VisualBasic" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.VisualBasic.Workspaces" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="3.4.0" targetFramework="net472" />
<package id="System.Buffers" version="4.4.0" targetFramework="net472" />
<package id="System.Collections.Immutable" version="1.5.0" targetFramework="net472" />
<package id="System.Composition" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.AttributedModel" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Convention" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Hosting" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Runtime" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.TypedParts" version="1.0.31" targetFramework="net472" />
<package id="System.Memory" version="4.5.3" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net472" />
<package id="System.Reflection.Metadata" version="1.6.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
<package id="System.Text.Encoding.CodePages" version="4.5.1" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
</packages>

View File

@@ -50,6 +50,7 @@
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Service\CustomCustomerService.cs" />
<Compile Include="Service\CustomEmployeeService.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Data\Data.csproj">

View File

@@ -30,22 +30,22 @@ namespace AutismusKoelnBonn
var folder_01_06 = CreateBeWoFolder("Vollmachten", cOid, folder_01.Oid);
//Ordner 2
var folder_02 = CreateBeWoFolder("Verwaltungsdaten", cOid, null);
var folder_02 = CreateBeWoFolder("Verwaltungsdaten - moveAUT", cOid, null);
var folder_02_01 = CreateBeWoFolder("Erstkontakt bis Betreuungsbeginn", cOid, folder_02.Oid);
var folder_02_02 = CreateBeWoFolder("Verträge mit Leistungsanbieter", cOid, folder_02.Oid);
var folder_02_02_01 = CreateBeWoFolder("Betreuung", cOid, folder_02_02.Oid);
var folder_02_02_02 = CreateBeWoFolder("Therapie", cOid, folder_02_02.Oid);
var folder_02_02_03 = CreateBeWoFolder("Wohnen", cOid, folder_02_02.Oid);
var folder_02_02_04 = CreateBeWoFolder("Einverständiserklärung", cOid, folder_02_02.Oid);
var folder_02_02_04 = CreateBeWoFolder("Einverständniserklärung", cOid, folder_02_02.Oid);
var folder_02_03 = CreateBeWoFolder("Leistungsträger (LT) - chron. Aufzählung (Ablage nach Datum)", cOid, folder_02.Oid);
var folder_02_03_01 = CreateBeWoFolder("Selbstzahler", cOid, folder_02_03.Oid);
var folder_02_03_01_01 = CreateBeWoFolder("Hilfeplangespräche", cOid, folder_02_03_01.Oid);
var folder_02_03_01_02 = CreateBeWoFolder("Sachstandsbericht", cOid, folder_02_03_01.Oid);
var folder_02_03_01_03 = CreateBeWoFolder("Kostenübernehme / Bewilligungen", cOid, folder_02_03_01.Oid);
var folder_02_03_01_03 = CreateBeWoFolder("Kostenübernahme / Bewilligungen", cOid, folder_02_03_01.Oid);
var folder_02_03_01_04 = CreateBeWoFolder("Rechnungswesen", cOid, folder_02_03_01.Oid);
var folder_02_03_01_04_01 = CreateBeWoFolder("Leistungsnachweise", cOid, folder_02_03_01_04.Oid);
var folder_02_03_01_04_02 = CreateBeWoFolder("Rechnungen", cOid, folder_02_03_01_04.Oid);
var folder_02_03_01_04_03 = CreateBeWoFolder("Monatsabrechnungen", cOid, folder_02_03_01_04.Oid);
var folder_02_03_01_04_03 = CreateBeWoFolder("Monatsabrechnung", cOid, folder_02_03_01_04.Oid);
var folder_02_03_01_04_04 = CreateBeWoFolder("Eigenanteil", cOid, folder_02_03_01_04.Oid);
var folder_02_03_01_05 = CreateBeWoFolder("Kommunikation/Schriftverkehr mit LT", cOid, folder_02_03_01.Oid);
var folder_02_03_01_06 = CreateBeWoFolder("Abschlussbericht", cOid, folder_02_03_01.Oid);
@@ -57,7 +57,7 @@ namespace AutismusKoelnBonn
var folder_02_03_02_04 = CreateBeWoFolder("Rechnungswesen", cOid, folder_02_03_02.Oid);
var folder_02_03_02_04_01 = CreateBeWoFolder("Leistungsnachweise", cOid, folder_02_03_02_04.Oid);
var folder_02_03_02_04_02 = CreateBeWoFolder("Rechnungen", cOid, folder_02_03_02_04.Oid);
var folder_02_03_02_04_03 = CreateBeWoFolder("Monatsabrechnungen", cOid, folder_02_03_02_04.Oid);
var folder_02_03_02_04_03 = CreateBeWoFolder("Monatsabrechnung", cOid, folder_02_03_02_04.Oid);
var folder_02_03_02_04_04 = CreateBeWoFolder("Eigenanteil", cOid, folder_02_03_02_04.Oid);
var folder_02_03_02_05 = CreateBeWoFolder("Kommunikation/Schriftverkehr mit LT", cOid, folder_02_03_02.Oid);
var folder_02_03_02_06 = CreateBeWoFolder("Abschlussbericht", cOid, folder_02_03_02.Oid);
@@ -65,7 +65,7 @@ namespace AutismusKoelnBonn
var folder_02_03_03 = CreateBeWoFolder("LVR / LWL", cOid, folder_02_03.Oid);
var folder_02_03_03_01 = CreateBeWoFolder("Bedarfsanzeigen", cOid, folder_02_03_03.Oid);
var folder_02_03_03_02 = CreateBeWoFolder("Antrag BEI_NRW / IHP", cOid, folder_02_03_03.Oid);
var folder_02_03_03_03 = CreateBeWoFolder("Antrag BEI_NRW", cOid, folder_02_03_03.Oid);
var folder_02_03_03_03 = CreateBeWoFolder("Anlagen BEI_NRW", cOid, folder_02_03_03.Oid);
var folder_02_03_03_03_01 = CreateBeWoFolder("Vorlage Checkliste Blanko", cOid, folder_02_03_03_03.Oid);
var folder_02_03_03_03_02 = CreateBeWoFolder("Fachärztliche Stellungsnahme", cOid, folder_02_03_03_03.Oid);
var folder_02_03_03_03_03 = CreateBeWoFolder("Grundsicherung", cOid, folder_02_03_03_03.Oid);
@@ -99,11 +99,11 @@ namespace AutismusKoelnBonn
var folder_02_03_05 = CreateBeWoFolder("Sozialamt", cOid, folder_02_03.Oid);
var folder_02_03_05_01 = CreateBeWoFolder("Hilfeplangespräche", cOid, folder_02_03_05.Oid);
var folder_02_03_05_02 = CreateBeWoFolder("Sachstandsbericht", cOid, folder_02_03_05.Oid);
var folder_02_03_05_03 = CreateBeWoFolder("Kostenübernahme", cOid, folder_02_03_05.Oid);
var folder_02_03_05_03 = CreateBeWoFolder("Kostenübernahme / Bewilligungen", cOid, folder_02_03_05.Oid);
var folder_02_03_05_04 = CreateBeWoFolder("Rechnungswesen", cOid, folder_02_03_05.Oid);
var folder_02_03_05_05_01 = CreateBeWoFolder("Leistungsnachweise", cOid, folder_02_03_05_04.Oid);
var folder_02_03_05_05_02 = CreateBeWoFolder("Rechnungen", cOid, folder_02_03_05_04.Oid);
var folder_02_03_05_05_03 = CreateBeWoFolder("Monatsabrechnungen", cOid, folder_02_03_05_04.Oid);
var folder_02_03_05_05_03 = CreateBeWoFolder("Monatsabrechnung", cOid, folder_02_03_05_04.Oid);
var folder_02_03_05_05_04 = CreateBeWoFolder("Eigenanteil", cOid, folder_02_03_05_04.Oid);
var folder_02_03_05_05 = CreateBeWoFolder("Kommunikation / Schriftverkehr mit LT", cOid, folder_02_03_05.Oid);
var folder_02_03_05_06 = CreateBeWoFolder("Abschlussbericht", cOid, folder_02_03_05.Oid);
@@ -149,11 +149,18 @@ namespace AutismusKoelnBonn
var folder_03_05_03 = CreateBeWoFolder("Gruppenangbote", cOid, folder_03_05.Oid);
var folder_03_05_04 = CreateBeWoFolder("Andere", cOid, folder_03_05.Oid);
var folder_03_06 = CreateBeWoFolder("Rechtliche Betreuung", cOid, folder_03.Oid);
var folder_03_06_01 = CreateBeWoFolder("Bestellungsurkunde", cOid, folder_03_06.Oid);
var folder_03_06_02 = CreateBeWoFolder("Kommunikation / Schriftverkehr", cOid, folder_03_06.Oid);
var folder_03_06_03 = CreateBeWoFolder("Protokolle", cOid, folder_03_06.Oid);
var folder_03_06_04 = CreateBeWoFolder("Absprachen", cOid, folder_03_06.Oid);
// Unklar ob Ordner 1st oder 2nd Level
var folder_035 = CreateBeWoFolder("Rechtliche Betreuung", cOid, null);
var folder_035_01 = CreateBeWoFolder("Bestellungsurkunde", cOid, folder_035.Oid);
var folder_035_02 = CreateBeWoFolder("Kommunikation / Schriftverkehr", cOid, folder_035.Oid);
var folder_035_03 = CreateBeWoFolder("Protokolle", cOid, folder_035.Oid);
var folder_035_04 = CreateBeWoFolder("Absprachen", cOid, folder_035.Oid);
//var folder_03_06 = CreateBeWoFolder("Rechtliche Betreuung", cOid, folder_03.Oid);
//var folder_03_06_01 = CreateBeWoFolder("Bestellungsurkunde", cOid, folder_03_06.Oid);
//var folder_03_06_02 = CreateBeWoFolder("Kommunikation / Schriftverkehr", cOid, folder_03_06.Oid);
//var folder_03_06_03 = CreateBeWoFolder("Protokolle", cOid, folder_03_06.Oid);
//var folder_03_06_04 = CreateBeWoFolder("Absprachen", cOid, folder_03_06.Oid);
var folder_04 = CreateBeWoFolder("Therapeutische Daten", cOid, null);
var folder_04_01 = CreateBeWoFolder("Anamnese, Assessments", cOid, folder_04.Oid);

View File

@@ -0,0 +1,122 @@
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AutismusKoelnBonn
{
public class CustomEmployeeService : EmployeeService
{
public override long InsertNewEmployee(EmployeeDC pEmployeeDC)
{
var eOid = base.InsertNewEmployee(pEmployeeDC);
var folder01 = CreateBeWoFolder("Teil 1: Personalführung", eOid, null);
var folder01_01 = CreateBeWoFolder("Personaldaten", eOid, folder01.Oid);
var folder01_02 = CreateBeWoFolder("Vertragsdaten", eOid, folder01.Oid);
var folder01_02_01 = CreateBeWoFolder("Arbeitsvertrag und Anlagen", eOid, folder01_02.Oid);
var folder01_02_02 = CreateBeWoFolder("Arbeitsmaterialien", eOid, folder01_02.Oid);
var folder01_02_03 = CreateBeWoFolder("Anstellungsschreiben", eOid, folder01_02.Oid);
var folder01_02_04 = CreateBeWoFolder("sämtliche Vertragsänderungen der Folgezeit", eOid, folder01_02.Oid);
var folder01_02_05 = CreateBeWoFolder("Vollmachten", eOid, folder01_02.Oid);
var folder01_02_06 = CreateBeWoFolder("Verschwiegenheitsverpflichtungen", eOid, folder01_02.Oid);
var folder01_02_07 = CreateBeWoFolder("Zurverfügungsstellung eines Dienstwagens", eOid, folder01_02.Oid);
var folder01_02_08 = CreateBeWoFolder("Kündigung, Aufhebungsvereinbarung", eOid, folder01_02.Oid);
var folder01_03 = CreateBeWoFolder("Entwicklungsdaten", eOid, folder01.Oid);
var folder01_03_01 = CreateBeWoFolder("Seminarbesuche", eOid, folder01_03.Oid);
var folder01_03_02 = CreateBeWoFolder("Aus- und Weiterbildungsmaßnahmen", eOid, folder01_03.Oid);
var folder01_03_03 = CreateBeWoFolder("Mitarbeitergespräche", eOid, folder01_03.Oid);
var folder01_03_04 = CreateBeWoFolder("Beurteilungen", eOid, folder01_03.Oid);
var folder01_03_05 = CreateBeWoFolder("Zwischenzeugnisse", eOid, folder01_03.Oid);
var folder01_03_06 = CreateBeWoFolder("Endzeugnis", eOid, folder01_03.Oid);
var folder01_03_07 = CreateBeWoFolder("Disziplinarmaßnahmen", eOid, folder01_03.Oid);
var folder01_03_08 = CreateBeWoFolder("Abmahnungen", eOid, folder01_03.Oid);
var folder01_03_09 = CreateBeWoFolder("Beförderungsvorschläge", eOid, folder01_03.Oid);
var folder01_04 = CreateBeWoFolder("Allgemeindaten", eOid, folder01.Oid);
var folder01_04_01 = CreateBeWoFolder("Bescheinigungen", eOid, folder01_04.Oid);
var folder01_04_02 = CreateBeWoFolder("Arbeits-/Aufenthaltserlaubnisse", eOid, folder01_04.Oid);
var folder01_04_03 = CreateBeWoFolder("Pfändungen, Vorschüsse", eOid, folder01_04.Oid);
var folder01_04_04 = CreateBeWoFolder("Personalmeldungen", eOid, folder01_04.Oid);
var folder01_04_05 = CreateBeWoFolder("Vermerke über Fehlzeiten, wie Arbeitsunfähigkeit und Urlaub", eOid, folder01_04.Oid);
var folder01_04_06 = CreateBeWoFolder("Urlaubsanträge", eOid, folder01_04.Oid);
var folder01_04_07 = CreateBeWoFolder("Unfallanzeigen und Untersuchungsbefunde", eOid, folder01_04.Oid);
var folder01_04_08 = CreateBeWoFolder("Werkwohnung", eOid, folder01_04.Oid);
var folder01_04_09 = CreateBeWoFolder("Jubiläen", eOid, folder01_04.Oid);
var folder01_04_010 = CreateBeWoFolder("Beihilfen und Darlehen", eOid, folder01_04.Oid);
var folder01_04_011 = CreateBeWoFolder("Schriftverkehr mit den Mitarbeitern", eOid, folder01_04.Oid);
var folder01_04_012 = CreateBeWoFolder("Schriftverkehr mit Dritten bezüglich des Arbeitnehmers", eOid, folder01_04.Oid);
var folder01_04_013 = CreateBeWoFolder("Durchschriften über Betriebsratsanhörungen und Betriebsratsinformation", eOid, folder01_04.Oid);
var folder01_05 = CreateBeWoFolder("Vorvertragsdaten", eOid, folder01.Oid);
var folder01_05_01 = CreateBeWoFolder("Bewerbungsunterlagen (Bewerbungsschreiben, Zeugnisse, Referenzen, Lebenslauf, Lichtbild)", eOid, folder01_05.Oid);
var folder01_05_02 = CreateBeWoFolder("Interviewbogen mit Stellungnahmen beteiligter Gesprächspartner", eOid, folder01_05.Oid);
var folder01_05_03 = CreateBeWoFolder("Personalfragebogen", eOid, folder01_05.Oid);
var folder01_05_04 = CreateBeWoFolder("Eignungstest", eOid, folder01_05.Oid);
var folder01_05_05 = CreateBeWoFolder("ärztliche Tauglichkeitsfeststellungen, Gutachten und Befunde", eOid, folder01_05.Oid);
var folder01_05_06 = CreateBeWoFolder("Auskünfte Dritter", eOid, folder01_05.Oid);
var folder01_05_07 = CreateBeWoFolder("allgemeine Bewerbungskorrespondenz und Regulierung der Vorstellungskosten", eOid, folder01_05.Oid);
var folder02 = CreateBeWoFolder("Teil 2: Abrechnung", eOid, null);
var folder02_01 = CreateBeWoFolder("Stammdaten", eOid, folder02.Oid);
var folder02_01_01 = CreateBeWoFolder("Lohn-/Gehaltsvereinbarungen", eOid, folder02_01.Oid);
var folder02_01_02 = CreateBeWoFolder("Entgeltänderungen", eOid, folder02_01.Oid);
var folder02_01_03 = CreateBeWoFolder("Versetzungsmeldung", eOid, folder02_01.Oid);
var folder02_02 = CreateBeWoFolder("Variable Daten", eOid, folder02.Oid);
var folder02_02_01 = CreateBeWoFolder("vorübergehende Gehaltskürzung", eOid, folder02_02.Oid);
var folder02_02_02 = CreateBeWoFolder("Prämien", eOid, folder02_02.Oid);
var folder02_02_03 = CreateBeWoFolder("Sonderzahlungen", eOid, folder02_02.Oid);
var folder02_02_04 = CreateBeWoFolder("Fahrgelderstattung", eOid, folder02_02.Oid);
var folder02_02_05 = CreateBeWoFolder("sonstige Aufwandserstattung", eOid, folder02_02.Oid);
var folder02_02_06 = CreateBeWoFolder("Lohnzettel", eOid, folder02_02.Oid);
var folder02_03 = CreateBeWoFolder("Überweisungsdaten", eOid, folder02.Oid);
var folder02_03_01 = CreateBeWoFolder("Vermögensbildung", eOid, folder02_03.Oid);
var folder02_03_02 = CreateBeWoFolder("Sozialversicherung", eOid, folder02_03.Oid);
var folder02_03_03 = CreateBeWoFolder("sonstige Versicherungen", eOid, folder02_03.Oid);
var folder02_03_04 = CreateBeWoFolder("Mieten", eOid, folder02_03.Oid);
var folder02_03_05 = CreateBeWoFolder("Pfändungen", eOid, folder02_03.Oid);
var folder02_03_06 = CreateBeWoFolder("Darlehensrückzahlung", eOid, folder02_03.Oid);
var folder02_04 = CreateBeWoFolder("Lohnsteuer (ELStAM-Verfahren)", eOid, folder02.Oid);
var folder02_04_01 = CreateBeWoFolder("Identifikationsnummer des Arbeitsnehmers", eOid, folder02_04.Oid);
var folder02_04_02 = CreateBeWoFolder("melderechtliches Geburtsdatum", eOid, folder02_04.Oid);
var folder02_04_03 = CreateBeWoFolder("Tag des Beginns des Dienstverhältnisses", eOid, folder02_04.Oid);
var folder02_04_04 = CreateBeWoFolder("Angabe, ob es sich um ein erstes oder weiteres Dienstverhältnis handelt", eOid, folder02_04.Oid);
var folder02_04_05 = CreateBeWoFolder("Angabe, ob und in welcher Höhe ein Freibetrag bzw. Hinzurechnungsbetrag abgerufen werden soll", eOid, folder02_04.Oid);
var folder02_05 = CreateBeWoFolder("Kranken- und Sozialversicherung", eOid, folder02.Oid);
var folder02_05_01 = CreateBeWoFolder("Mitgliedschaftsbescheinigung der privaten oder gesetzlichen Krankenkasse", eOid, folder02_05.Oid);
var folder02_05_02 = CreateBeWoFolder("Kopie Sozialversicherungsausweis", eOid, folder02_05.Oid);
var folder02_06 = CreateBeWoFolder("Allgemeindaten", eOid, folder02.Oid);
var folder02_06_01 = CreateBeWoFolder("Bescheinigungen", eOid, folder02_06.Oid);
var folder02_06_02 = CreateBeWoFolder("Schriftverkehr", eOid, folder02_06.Oid);
return eOid;
}
private BeWoFolder CreateBeWoFolder(string name, long? eOid, long? parentOid)
{
BeWoFolder f = new BeWoFolder();
f.Name = name;
f.ObjectOid = eOid;
f.ObjectTid = TableID.Employee;
f.ParentBeWoFolderOid = parentOid;
DAOFactory.GenericDAO.Insert(f);
return f;
}
}
}

View File

@@ -99,6 +99,8 @@ namespace DomizielAnsbach
}
return new XtraReport();
}
}
}

View File

@@ -52,6 +52,12 @@
<Compile Include="Invoicing\PBInvoiceCreation.cs" />
<Compile Include="Invoicing\CustomCalculations.cs" />
<Compile Include="Invoicing\AbwInvoiceCreation.cs" />
<Compile Include="QuittierungsbelegAbw.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="QuittierungsbelegAbw.Designer.cs">
<DependentUpon>QuittierungsbelegAbw.cs</DependentUpon>
</Compile>
<Compile Include="RechnungBezirk.cs">
<SubType>Component</SubType>
</Compile>
@@ -131,6 +137,9 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="QuittierungsbelegAbw.resx">
<DependentUpon>QuittierungsbelegAbw.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RechnungBezirk.resx">
<DependentUpon>RechnungBezirk.cs</DependentUpon>
<SubType>Designer</SubType>

View File

@@ -0,0 +1,629 @@
using BeWo.Report.ReportObjects;
namespace DomizielAnsbach
{
partial class QuittierungsbelegAbw
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(QuittierungsbelegAbw));
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
this.xrTableServiceRecords1 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell();
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
this.Detail1 = new DevExpress.XtraReports.UI.DetailBand();
this.xrTable3 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow6 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell();
this.picSignature = new DevExpress.XtraReports.UI.XRPictureBox();
this.GroupHeader1 = new DevExpress.XtraReports.UI.GroupHeaderBand();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.formattingRuleStartDate = new DevExpress.XtraReports.UI.FormattingRule();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.xrPictureBox1 = new DevExpress.XtraReports.UI.XRPictureBox();
this.xrLabel29 = new DevExpress.XtraReports.UI.XRLabel();
this.lblBewilligteStunden = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel25 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel24 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel23 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel18 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel15 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel13 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.formattingRuleServiceDesc = new DevExpress.XtraReports.UI.FormattingRule();
this.formattingRuleCostBearer = new DevExpress.XtraReports.UI.FormattingRule();
this.formattingRuleEmployeeName = new DevExpress.XtraReports.UI.FormattingRule();
this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.ReportFooter = new DevExpress.XtraReports.UI.ReportFooterBand();
this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel();
this.fieldAbrechenbareMinuten = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldBillableFLS = new DevExpress.XtraReports.UI.CalculatedField();
this.fieldAbrechenbareFLS = new DevExpress.XtraReports.UI.CalculatedField();
((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
//
// Detail
//
this.Detail.Font = new System.Drawing.Font("Arial", 11F);
this.Detail.HeightF = 0F;
this.Detail.Name = "Detail";
this.Detail.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.Detail.StylePriority.UseFont = false;
this.Detail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrTableServiceRecords1
//
this.xrTableServiceRecords1.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableServiceRecords1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTableServiceRecords1.Name = "xrTableServiceRecords1";
this.xrTableServiceRecords1.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTableServiceRecords1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow2});
this.xrTableServiceRecords1.SizeF = new System.Drawing.SizeF(670F, 60F);
this.xrTableServiceRecords1.StylePriority.UseBackColor = false;
this.xrTableServiceRecords1.StylePriority.UseBorders = false;
this.xrTableServiceRecords1.StylePriority.UseFont = false;
this.xrTableServiceRecords1.StylePriority.UseTextAlignment = false;
this.xrTableServiceRecords1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
//
// xrTableRow2
//
this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell3,
this.xrTableCell1,
this.xrTableCell4,
this.xrTableCell11});
this.xrTableRow2.Name = "xrTableRow2";
this.xrTableRow2.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTableRow2.StylePriority.UseTextAlignment = false;
this.xrTableRow2.Weight = 1.875D;
//
// xrTableCell3
//
this.xrTableCell3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(219)))), ((int)(((byte)(238)))), ((int)(((byte)(243)))));
this.xrTableCell3.Name = "xrTableCell3";
this.xrTableCell3.StylePriority.UseBackColor = false;
this.xrTableCell3.StylePriority.UseFont = false;
this.xrTableCell3.StylePriority.UsePadding = false;
this.xrTableCell3.StylePriority.UseTextAlignment = false;
this.xrTableCell3.Text = "Datum";
this.xrTableCell3.Weight = 0.26824509954648823D;
//
// xrTableCell1
//
this.xrTableCell1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(219)))), ((int)(((byte)(238)))), ((int)(((byte)(243)))));
this.xrTableCell1.Multiline = true;
this.xrTableCell1.Name = "xrTableCell1";
this.xrTableCell1.StylePriority.UseBackColor = false;
this.xrTableCell1.Text = "Dauer des Kontaktes";
this.xrTableCell1.Weight = 0.26824509735842855D;
//
// xrTableCell4
//
this.xrTableCell4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(219)))), ((int)(((byte)(238)))), ((int)(((byte)(243)))));
this.xrTableCell4.Name = "xrTableCell4";
this.xrTableCell4.StylePriority.UseBackColor = false;
this.xrTableCell4.StylePriority.UsePadding = false;
this.xrTableCell4.Text = "Art des Kontaktes bzw. der Tätigkeit";
this.xrTableCell4.Weight = 0.78034937589068865D;
//
// xrTableCell11
//
this.xrTableCell11.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(219)))), ((int)(((byte)(238)))), ((int)(((byte)(243)))));
this.xrTableCell11.Multiline = true;
this.xrTableCell11.Name = "xrTableCell11";
this.xrTableCell11.StylePriority.UseBackColor = false;
this.xrTableCell11.StylePriority.UseFont = false;
this.xrTableCell11.StylePriority.UsePadding = false;
this.xrTableCell11.StylePriority.UseTextAlignment = false;
this.xrTableCell11.Text = "Unterschrift Budgetnehmer";
this.xrTableCell11.Weight = 0.31701693373906548D;
//
// DetailReport
//
this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
this.Detail1,
this.GroupHeader1});
this.DetailReport.DataMember = "Services";
this.DetailReport.DataSource = this.bindingSource1;
this.DetailReport.Level = 0;
this.DetailReport.Name = "DetailReport";
this.DetailReport.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.DetailReport.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// Detail1
//
this.Detail1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTable3});
this.Detail1.Font = new System.Drawing.Font("Arial", 11F);
this.Detail1.HeightF = 25F;
this.Detail1.Name = "Detail1";
this.Detail1.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.Detail1.StylePriority.UseFont = false;
this.Detail1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrTable3
//
this.xrTable3.BorderColor = System.Drawing.Color.Black;
this.xrTable3.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrTable3.Name = "xrTable3";
this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow6});
this.xrTable3.SizeF = new System.Drawing.SizeF(669.9999F, 25F);
this.xrTable3.StylePriority.UseFont = false;
this.xrTable3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrTableRow6
//
this.xrTableRow6.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell13,
this.xrTableCell2,
this.xrTableCell15,
this.xrTableCell5});
this.xrTableRow6.Name = "xrTableRow6";
this.xrTableRow6.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTableRow6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
this.xrTableRow6.Weight = 1.25D;
//
// xrTableCell13
//
this.xrTableCell13.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.StartDate", "{0:dd.MM.yyyy}")});
this.xrTableCell13.Name = "xrTableCell13";
this.xrTableCell13.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 3, 0, 100F);
this.xrTableCell13.StylePriority.UseFont = false;
this.xrTableCell13.StylePriority.UsePadding = false;
this.xrTableCell13.StylePriority.UseTextAlignment = false;
this.xrTableCell13.Text = "xrTableCell13";
this.xrTableCell13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
this.xrTableCell13.Weight = 0.13888887377323028D;
//
// xrTableCell2
//
this.xrTableCell2.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.Minutes", "{0:0.##} Min.")});
this.xrTableCell2.Name = "xrTableCell2";
this.xrTableCell2.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 3, 0, 100F);
this.xrTableCell2.StylePriority.UsePadding = false;
this.xrTableCell2.StylePriority.UseTextAlignment = false;
this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
this.xrTableCell2.Weight = 0.13888887698574931D;
//
// xrTableCell15
//
this.xrTableCell15.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.Notice", "{0:0.##}")});
this.xrTableCell15.Name = "xrTableCell15";
this.xrTableCell15.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 3, 3, 0, 100F);
this.xrTableCell15.StylePriority.UseFont = false;
this.xrTableCell15.StylePriority.UsePadding = false;
this.xrTableCell15.StylePriority.UseTextAlignment = false;
this.xrTableCell15.Text = "xrTableCell15";
this.xrTableCell15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
this.xrTableCell15.Weight = 0.40404036892472889D;
//
// xrTableCell5
//
this.xrTableCell5.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.picSignature});
this.xrTableCell5.Name = "xrTableCell5";
this.xrTableCell5.StylePriority.UsePadding = false;
this.xrTableCell5.StylePriority.UseTextAlignment = false;
this.xrTableCell5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell5.Weight = 0.16414128592247781D;
//
// picSignature
//
this.picSignature.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.picSignature.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Tag", null, "Services.Signature")});
this.picSignature.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.picSignature.Name = "picSignature";
this.picSignature.SizeF = new System.Drawing.SizeF(130F, 25F);
this.picSignature.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage;
this.picSignature.StylePriority.UseBorders = false;
this.picSignature.BeforePrint += new System.Drawing.Printing.PrintEventHandler(this.picSignature_BeforePrint);
//
// GroupHeader1
//
this.GroupHeader1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrTableServiceRecords1});
this.GroupHeader1.Font = new System.Drawing.Font("Arial", 11F);
this.GroupHeader1.HeightF = 60F;
this.GroupHeader1.Name = "GroupHeader1";
this.GroupHeader1.RepeatEveryPage = true;
this.GroupHeader1.StylePriority.UseFont = false;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO);
//
// formattingRuleStartDate
//
this.formattingRuleStartDate.Condition = "[StartDate2] < [StartDate]";
this.formattingRuleStartDate.DataMember = "ServicesDouble";
this.formattingRuleStartDate.Formatting.Visible = DevExpress.Utils.DefaultBoolean.False;
this.formattingRuleStartDate.Name = "formattingRuleStartDate";
//
// ReportHeader
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrPictureBox1,
this.xrLabel29,
this.lblBewilligteStunden,
this.xrLabel25,
this.xrLabel24,
this.xrLabel23,
this.xrLabel18,
this.xrLabel15,
this.xrLabel14,
this.xrLabel13,
this.xrLabel12,
this.xrLabel1});
this.ReportHeader.Font = new System.Drawing.Font("Arial", 11F);
this.ReportHeader.HeightF = 250F;
this.ReportHeader.Name = "ReportHeader";
this.ReportHeader.StylePriority.UseFont = false;
//
// xrPictureBox1
//
this.xrPictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("xrPictureBox1.Image")));
this.xrPictureBox1.LocationFloat = new DevExpress.Utils.PointFloat(490.4167F, 0F);
this.xrPictureBox1.Name = "xrPictureBox1";
this.xrPictureBox1.SizeF = new System.Drawing.SizeF(186.5833F, 120F);
this.xrPictureBox1.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage;
//
// xrLabel29
//
this.xrLabel29.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold);
this.xrLabel29.LocationFloat = new DevExpress.Utils.PointFloat(269.9134F, 200F);
this.xrLabel29.Name = "xrLabel29";
this.xrLabel29.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel29.SizeF = new System.Drawing.SizeF(220.5033F, 29.99998F);
this.xrLabel29.StylePriority.UseBorders = false;
this.xrLabel29.StylePriority.UseFont = false;
this.xrLabel29.Text = "[Month] [Year]";
//
// lblBewilligteStunden
//
this.lblBewilligteStunden.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ApprovedFLSPerWeek", "{0:0.0} h/Woche")});
this.lblBewilligteStunden.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold);
this.lblBewilligteStunden.LocationFloat = new DevExpress.Utils.PointFloat(269.9134F, 170F);
this.lblBewilligteStunden.Name = "lblBewilligteStunden";
this.lblBewilligteStunden.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblBewilligteStunden.SizeF = new System.Drawing.SizeF(220.5033F, 29.99998F);
this.lblBewilligteStunden.StylePriority.UseBorders = false;
this.lblBewilligteStunden.StylePriority.UseFont = false;
//
// xrLabel25
//
this.xrLabel25.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ApprovedStartDate")});
this.xrLabel25.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold);
this.xrLabel25.LocationFloat = new DevExpress.Utils.PointFloat(269.9134F, 140F);
this.xrLabel25.Name = "xrLabel25";
this.xrLabel25.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel25.SizeF = new System.Drawing.SizeF(220.5033F, 30.00002F);
this.xrLabel25.StylePriority.UseBorders = false;
this.xrLabel25.StylePriority.UseFont = false;
//
// xrLabel24
//
this.xrLabel24.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "CustomerBirthday", "{0:dd.MM.yyyy}")});
this.xrLabel24.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold);
this.xrLabel24.LocationFloat = new DevExpress.Utils.PointFloat(269.9134F, 110F);
this.xrLabel24.Name = "xrLabel24";
this.xrLabel24.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel24.SizeF = new System.Drawing.SizeF(220.5033F, 30.00002F);
this.xrLabel24.StylePriority.UseBorders = false;
this.xrLabel24.StylePriority.UseFont = false;
//
// xrLabel23
//
this.xrLabel23.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "CustomerName")});
this.xrLabel23.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold);
this.xrLabel23.LocationFloat = new DevExpress.Utils.PointFloat(269.9134F, 80.00002F);
this.xrLabel23.Name = "xrLabel23";
this.xrLabel23.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel23.SizeF = new System.Drawing.SizeF(220.5033F, 29.99999F);
this.xrLabel23.StylePriority.UseBorders = false;
this.xrLabel23.StylePriority.UseFont = false;
//
// xrLabel18
//
this.xrLabel18.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel18.LocationFloat = new DevExpress.Utils.PointFloat(0F, 200F);
this.xrLabel18.Name = "xrLabel18";
this.xrLabel18.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel18.SizeF = new System.Drawing.SizeF(269.9133F, 30F);
this.xrLabel18.StylePriority.UseFont = false;
this.xrLabel18.Text = "Betreuungsmonat: ";
//
// xrLabel15
//
this.xrLabel15.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(0F, 170F);
this.xrLabel15.Name = "xrLabel15";
this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel15.SizeF = new System.Drawing.SizeF(269.9133F, 30F);
this.xrLabel15.StylePriority.UseFont = false;
this.xrLabel15.Text = "Betreuungsschlüssel:";
//
// xrLabel14
//
this.xrLabel14.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(0F, 140F);
this.xrLabel14.Name = "xrLabel14";
this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel14.SizeF = new System.Drawing.SizeF(269.9133F, 30F);
this.xrLabel14.StylePriority.UseFont = false;
this.xrLabel14.Text = "Im PB seit:";
//
// xrLabel13
//
this.xrLabel13.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel13.LocationFloat = new DevExpress.Utils.PointFloat(0F, 110F);
this.xrLabel13.Name = "xrLabel13";
this.xrLabel13.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel13.SizeF = new System.Drawing.SizeF(269.9133F, 29.99999F);
this.xrLabel13.StylePriority.UseFont = false;
this.xrLabel13.Text = "Geburtsdatum:";
//
// xrLabel12
//
this.xrLabel12.Font = new System.Drawing.Font("Calibri", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(0F, 80.00002F);
this.xrLabel12.Name = "xrLabel12";
this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel12.SizeF = new System.Drawing.SizeF(269.9133F, 30F);
this.xrLabel12.StylePriority.UseFont = false;
this.xrLabel12.Text = "Name der/des Betreuten:";
//
// xrLabel1
//
this.xrLabel1.Font = new System.Drawing.Font("Calibri", 20F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
this.xrLabel1.Multiline = true;
this.xrLabel1.Name = "xrLabel1";
this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel1.SizeF = new System.Drawing.SizeF(480F, 36.45833F);
this.xrLabel1.StylePriority.UseFont = false;
this.xrLabel1.StylePriority.UseTextAlignment = false;
this.xrLabel1.Text = "Monatsübersicht für Persönliches Budget";
this.xrLabel1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// formattingRuleServiceDesc
//
this.formattingRuleServiceDesc.Condition = "[StartDate2] < [StartDate]";
this.formattingRuleServiceDesc.DataMember = "ServicesDouble";
this.formattingRuleServiceDesc.Formatting.Visible = DevExpress.Utils.DefaultBoolean.False;
this.formattingRuleServiceDesc.Name = "formattingRuleServiceDesc";
//
// formattingRuleCostBearer
//
this.formattingRuleCostBearer.Condition = "[StartDate2] < [StartDate]";
this.formattingRuleCostBearer.DataMember = "ServicesDouble";
this.formattingRuleCostBearer.Formatting.Visible = DevExpress.Utils.DefaultBoolean.False;
this.formattingRuleCostBearer.Name = "formattingRuleCostBearer";
//
// formattingRuleEmployeeName
//
this.formattingRuleEmployeeName.Condition = "[StartDate2] < [StartDate]";
this.formattingRuleEmployeeName.DataMember = "ServicesDouble";
this.formattingRuleEmployeeName.Formatting.Visible = DevExpress.Utils.DefaultBoolean.False;
this.formattingRuleEmployeeName.Name = "formattingRuleEmployeeName";
//
// topMarginBand1
//
this.topMarginBand1.Font = new System.Drawing.Font("Times New Roman", 9.75F);
this.topMarginBand1.HeightF = 80F;
this.topMarginBand1.Name = "topMarginBand1";
this.topMarginBand1.StylePriority.UseFont = false;
//
// bottomMarginBand1
//
this.bottomMarginBand1.HeightF = 30F;
this.bottomMarginBand1.Name = "bottomMarginBand1";
//
// ReportFooter
//
this.ReportFooter.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrLabel3,
this.xrLabel2,
this.xrLabel6,
this.xrLabel5});
this.ReportFooter.Font = new System.Drawing.Font("Arial", 11F);
this.ReportFooter.HeightF = 80.08324F;
this.ReportFooter.Name = "ReportFooter";
this.ReportFooter.StylePriority.UseFont = false;
//
// xrLabel3
//
this.xrLabel3.Font = new System.Drawing.Font("Calibri", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(540F, 62.08327F);
this.xrLabel3.Name = "xrLabel3";
this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel3.SizeF = new System.Drawing.SizeF(137F, 17.99997F);
this.xrLabel3.StylePriority.UseBorders = false;
this.xrLabel3.StylePriority.UseFont = false;
this.xrLabel3.Text = "Berufsbezeichnung";
//
// xrLabel2
//
this.xrLabel2.Font = new System.Drawing.Font("Calibri", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(178.3263F, 62.08327F);
this.xrLabel2.Name = "xrLabel2";
this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel2.SizeF = new System.Drawing.SizeF(281.5348F, 17.99997F);
this.xrLabel2.StylePriority.UseBorders = false;
this.xrLabel2.StylePriority.UseFont = false;
this.xrLabel2.Text = "Unterschrift des Bezugsbetreuers";
//
// xrLabel6
//
this.xrLabel6.Font = new System.Drawing.Font("Calibri", 11F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel6.LocationFloat = new DevExpress.Utils.PointFloat(0.6944444F, 62.08327F);
this.xrLabel6.Name = "xrLabel6";
this.xrLabel6.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel6.SizeF = new System.Drawing.SizeF(121.7362F, 17.99997F);
this.xrLabel6.StylePriority.UseBorders = false;
this.xrLabel6.StylePriority.UseFont = false;
this.xrLabel6.Text = "Ort, Datum";
//
// xrLabel5
//
this.xrLabel5.Borders = DevExpress.XtraPrinting.BorderSide.Top;
this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(0F, 51.72221F);
this.xrLabel5.Name = "xrLabel5";
this.xrLabel5.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel5.SizeF = new System.Drawing.SizeF(670.0001F, 10.36106F);
this.xrLabel5.StylePriority.UseBorders = false;
this.xrLabel5.StylePriority.UseFont = false;
//
// fieldAbrechenbareMinuten
//
this.fieldAbrechenbareMinuten.DataMember = "Services";
this.fieldAbrechenbareMinuten.Expression = "Iif([IsBillable], [Minutes], 0)";
this.fieldAbrechenbareMinuten.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldAbrechenbareMinuten.Name = "fieldAbrechenbareMinuten";
//
// fieldBillableFLS
//
this.fieldBillableFLS.Expression = "[TotalFLMBillable] / 60";
this.fieldBillableFLS.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldBillableFLS.Name = "fieldBillableFLS";
//
// fieldAbrechenbareFLS
//
this.fieldAbrechenbareFLS.Expression = "([TotalFLMBillable] / 60) * 1.2";
this.fieldAbrechenbareFLS.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
this.fieldAbrechenbareFLS.Name = "fieldAbrechenbareFLS";
//
// QuittierungsbelegPB
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
this.Detail,
this.DetailReport,
this.ReportHeader,
this.topMarginBand1,
this.bottomMarginBand1,
this.ReportFooter});
this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] {
this.fieldAbrechenbareMinuten,
this.fieldBillableFLS,
this.fieldAbrechenbareFLS});
this.DataSource = this.bindingSource1;
this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] {
this.formattingRuleStartDate,
this.formattingRuleServiceDesc,
this.formattingRuleCostBearer,
this.formattingRuleEmployeeName});
this.Margins = new System.Drawing.Printing.Margins(75, 75, 80, 30);
this.PageHeight = 1169;
this.PageWidth = 827;
this.PaperKind = System.Drawing.Printing.PaperKind.A4;
this.SnapGridSize = 9F;
this.Version = "17.1";
((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
#endregion
private DevExpress.XtraReports.UI.DetailBand Detail;
private System.Windows.Forms.BindingSource bindingSource1;
private DevExpress.XtraReports.UI.DetailReportBand DetailReport;
private DevExpress.XtraReports.UI.DetailBand Detail1;
private DevExpress.XtraReports.UI.XRTable xrTable3;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow6;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell15;
private DevExpress.XtraReports.UI.ReportHeaderBand ReportHeader;
private DevExpress.XtraReports.UI.XRLabel xrLabel1;
private DevExpress.XtraReports.UI.XRTable xrTableServiceRecords1;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow2;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell3;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell11;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell13;
private DevExpress.XtraReports.UI.FormattingRule formattingRuleStartDate;
private DevExpress.XtraReports.UI.FormattingRule formattingRuleServiceDesc;
private DevExpress.XtraReports.UI.FormattingRule formattingRuleCostBearer;
private DevExpress.XtraReports.UI.FormattingRule formattingRuleEmployeeName;
private DevExpress.XtraReports.UI.TopMarginBand topMarginBand1;
private DevExpress.XtraReports.UI.BottomMarginBand bottomMarginBand1;
private DevExpress.XtraReports.UI.XRLabel xrLabel12;
private DevExpress.XtraReports.UI.XRLabel xrLabel18;
private DevExpress.XtraReports.UI.XRLabel xrLabel15;
private DevExpress.XtraReports.UI.XRLabel xrLabel14;
private DevExpress.XtraReports.UI.XRLabel xrLabel13;
private DevExpress.XtraReports.UI.XRLabel xrLabel29;
private DevExpress.XtraReports.UI.XRLabel lblBewilligteStunden;
private DevExpress.XtraReports.UI.XRLabel xrLabel25;
private DevExpress.XtraReports.UI.XRLabel xrLabel24;
private DevExpress.XtraReports.UI.XRLabel xrLabel23;
private DevExpress.XtraReports.UI.ReportFooterBand ReportFooter;
private DevExpress.XtraReports.UI.CalculatedField fieldAbrechenbareMinuten;
private DevExpress.XtraReports.UI.XRLabel xrLabel6;
private DevExpress.XtraReports.UI.XRLabel xrLabel5;
private DevExpress.XtraReports.UI.CalculatedField fieldBillableFLS;
private DevExpress.XtraReports.UI.CalculatedField fieldAbrechenbareFLS;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell1;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell2;
private DevExpress.XtraReports.UI.XRPictureBox xrPictureBox1;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell4;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell5;
private DevExpress.XtraReports.UI.XRLabel xrLabel3;
private DevExpress.XtraReports.UI.XRLabel xrLabel2;
private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader1;
private DevExpress.XtraReports.UI.XRPictureBox picSignature;
}
}

View File

@@ -0,0 +1,119 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text.RegularExpressions;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BeWo.Service.ServiceImplementations;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using DevExpress.XtraReports.UI;
namespace DomizielAnsbach
{
public partial class QuittierungsbelegAbw : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<ServicesOverviewRO>
{
public QuittierungsbelegAbw()
{
InitializeComponent();
}
public void SetReportDataSource(ServicesOverviewRO pRO)
{
if (pRO.Services != null)
{
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
double minuten = 0;
foreach (ServicesOverviewRO.ServiceDetail s in pRO.Services)
{
if (s.IsBillable)
{
ServicesOverviewRO.CreateSignatureString(s);
if (s.ServiceCategory.ToLower().IndexOf("assistenz") < 0)
{
servicesBillable.Add(s);
minuten += s.Minutes;
}
}
}
pRO.TotalFLMBillable = minuten;
pRO.Services = servicesBillable;
}
var approved = pRO.ApprovedFLSPerWeek;
SupportConceptPeriodStatisticsDC stats = GetFlsStatistics(pRO, "assistenz"); ;
if (stats != null)
{
approved = stats.MinutesApprovedPerWeek / 60;
}
lblBewilligteStunden.Text = string.Format("{0:0.##}", approved);
this.bindingSource1.DataSource = pRO;
}
private SupportConceptPeriodStatisticsDC GetFlsStatistics(ServicesOverviewRO ro, String assName)
{
if (ro.CostBearer2SupportConceptList != null && ro.CostBearer2SupportConceptList.Count > 0)
{
var service = new OperationsServiceImp();
foreach (var cb2sc in ro.CostBearer2SupportConceptList)
{
long cb2scOid = cb2sc.Oid.Value;
var stats = service.CreateSupportConceptStatistics(cb2scOid, ro.EndDate);
if (stats.PeriodStatistics != null && stats.PeriodStatistics.Count > 0)
{
foreach (var ps in stats.PeriodStatistics)
{
if ((ps.SupportConceptApprovalPeriod != null && ps.SupportConceptApprovalPeriod.ServiceCategory != null &&
!ps.SupportConceptApprovalPeriod.ServiceCategory.Name.ToLower().Contains(assName)) || ps.SupportConceptApprovalPeriod.ServiceCategory == null)
{
return ps;
}
}
}
}
}
return null;
}
private void picSignature_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
XRPictureBox xrBox = sender as XRPictureBox;
//var test = this.GetCurrent
string base64String = xrBox.Tag as string;
if (!String.IsNullOrWhiteSpace(base64String))
{
var base64Data = Regex.Match(base64String, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
var binData = Convert.FromBase64String(base64Data);
Image img = ByteArrayToImage(binData);
xrBox.Image = Utils.CropImage(img);
}
else
{
xrBox.Image = null;
}
}
public Image ByteArrayToImage(byte[] byteArrayIn)
{
using (var memoryStream = new MemoryStream(byteArrayIn))
{
return Image.FromStream(memoryStream);
}
}
}
}

View File

@@ -0,0 +1,427 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>21, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="xrPictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -1,5 +1,7 @@
using System;
using System.Text;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BS.Shared.Core;
@@ -49,16 +51,27 @@ namespace DomizielAnsbach
lblAdresse.Text = sb.ToString();
DateTime start = pRO.AccountingPeriodStart;
DateTime end = pRO.AccountingPeriodEnd;
//if (start.Month == end.Month && start.Year == end.Year)
//{
// lblAbrechnungszeitraum.Text = String.Format("hiermit berechnen wir für den Monat {0:MMMM yyyy} folgende erbrachte Tätigkeiten:", start);
//}
//else
//{
// lblAbrechnungszeitraum.Text = String.Format("hiermit berechnen wir für den Zeitraum {0:MMMM yyyy} - {1:MMMM yyyy} folgende erbrachte Tätigkeiten:", start, end);
//}
//if (start.Month == end.Month && start.Year == end.Year)
//{
// lblAbrechnungszeitraum.Text = String.Format("hiermit berechnen wir für den Monat {0:MMMM yyyy} folgende erbrachte Tätigkeiten:", start);
//}
//else
//{
// lblAbrechnungszeitraum.Text = String.Format("hiermit berechnen wir für den Zeitraum {0:MMMM yyyy} - {1:MMMM yyyy} folgende erbrachte Tätigkeiten:", start, end);
//}
SetKundennummer(pRO);
this.bindingSource1.DataSource = pRO;
}
private void SetKundennummer(ServiceInvoiceRO pRO)
{
if (pRO.InvoiceBase.RecipientOrganisationOid.HasValue)
{
var org = DAOFactory.GenericDAO.LoadByID<Organisation>(pRO.InvoiceBase.RecipientOrganisationOid.Value);
pRO.OrganisationDebitorNumber = org.DebitorNumber;
}
}
}
}

View File

@@ -18,6 +18,7 @@ namespace Kimm
var list = base.GetFeiertage(year);
list.Add(new DateTime(year, 12, 31));
list.Add(new DateTime(year, 12, 24));
return list;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -39,12 +39,10 @@ namespace Kimm
this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell44 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell50 = new DevExpress.XtraReports.UI.XRTableCell();
this.picSignature = new DevExpress.XtraReports.UI.XRPictureBox();
this.GroupHeader1 = new DevExpress.XtraReports.UI.GroupHeaderBand();
this.xrTableServiceRecords1 = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow();
@@ -64,8 +62,6 @@ namespace Kimm
this.xrTableCell49 = new DevExpress.XtraReports.UI.XRTableCell();
this.formattingRuleStartDate = new DevExpress.XtraReports.UI.FormattingRule();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel16 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel7 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel8 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel();
@@ -79,47 +75,17 @@ namespace Kimm
this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand();
this.lblUnterschriftKlient = new DevExpress.XtraReports.UI.XRLabel();
this.lblUnterschriftMitarbeiter = new DevExpress.XtraReports.UI.XRLabel();
this.xrTableAbwesenheiten = new DevExpress.XtraReports.UI.XRTable();
this.xrTableRow3 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell17 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell18 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableRow5 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell23 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell24 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableRow7 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell25 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell26 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell27 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableRow8 = new DevExpress.XtraReports.UI.XRTableRow();
this.xrTableCell29 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell30 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell31 = new DevExpress.XtraReports.UI.XRTableCell();
this.lblHatAbwesenheiten = new DevExpress.XtraReports.UI.XRLabel();
this.lblHatGruppen = new DevExpress.XtraReports.UI.XRLabel();
this.xrRichText2 = new DevExpress.XtraReports.UI.XRRichText();
this.xrRichText1 = new DevExpress.XtraReports.UI.XRRichText();
this.xrLabel15 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel13 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel11 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel10 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.fieldKontaktArt = new DevExpress.XtraReports.UI.CalculatedField();
this.xrPictureBox3 = new DevExpress.XtraReports.UI.XRPictureBox();
this.picSignature = new DevExpress.XtraReports.UI.XRPictureBox();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.xrLabel11 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel();
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableAbwesenheiten)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
//
@@ -163,7 +129,7 @@ namespace Kimm
this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow6});
this.xrTable3.SizeF = new System.Drawing.SizeF(735F, 20F);
this.xrTable3.SizeF = new System.Drawing.SizeF(762F, 20F);
this.xrTable3.StylePriority.UseFont = false;
this.xrTable3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
@@ -173,7 +139,6 @@ namespace Kimm
this.xrTableCell13,
this.xrTableCell14,
this.xrTableCell10,
this.xrTableCell2,
this.xrTableCell15,
this.xrTableCell12,
this.xrTableCell44,
@@ -209,7 +174,7 @@ namespace Kimm
this.xrTableCell14.StylePriority.UseTextAlignment = false;
this.xrTableCell14.Text = "xrTableCell14";
this.xrTableCell14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell14.Weight = 0.094696981389528381D;
this.xrTableCell14.Weight = 0.095691579001991059D;
//
// xrTableCell10
//
@@ -223,24 +188,12 @@ namespace Kimm
this.xrTableCell10.StylePriority.UseTextAlignment = false;
this.xrTableCell10.Text = "xrTableCell10";
this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell10.Weight = 0.094696933224158855D;
//
// xrTableCell2
//
this.xrTableCell2.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.fieldKontaktArt")});
this.xrTableCell2.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell2.Name = "xrTableCell2";
this.xrTableCell2.StylePriority.UseFont = false;
this.xrTableCell2.StylePriority.UsePadding = false;
this.xrTableCell2.StylePriority.UseTextAlignment = false;
this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell2.Weight = 0.05366162346946534D;
this.xrTableCell10.Weight = 0.095135773020489228D;
//
// xrTableCell15
//
this.xrTableCell15.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.CustomerCount", "{0:0}")});
new DevExpress.XtraReports.UI.XRBinding("Text", null, "Services.ServiceCategory")});
this.xrTableCell15.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell15.Name = "xrTableCell15";
this.xrTableCell15.StylePriority.UseBorders = false;
@@ -248,7 +201,7 @@ namespace Kimm
this.xrTableCell15.StylePriority.UsePadding = false;
this.xrTableCell15.StylePriority.UseTextAlignment = false;
this.xrTableCell15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell15.Weight = 0.05366162346946534D;
this.xrTableCell15.Weight = 0.20987004159462966D;
//
// xrTableCell12
//
@@ -261,7 +214,7 @@ namespace Kimm
this.xrTableCell12.StylePriority.UsePadding = false;
this.xrTableCell12.StylePriority.UseTextAlignment = false;
this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell12.Weight = 0.10732323052948757D;
this.xrTableCell12.Weight = 0.084426309557355375D;
//
// xrTableCell44
//
@@ -273,7 +226,7 @@ namespace Kimm
this.xrTableCell44.StylePriority.UsePadding = false;
this.xrTableCell44.StylePriority.UseTextAlignment = false;
this.xrTableCell44.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell44.Weight = 0.20202019104791347D;
this.xrTableCell44.Weight = 0.16070398498018312D;
//
// xrTableCell50
//
@@ -285,19 +238,7 @@ namespace Kimm
this.xrTableCell50.StylePriority.UsePadding = false;
this.xrTableCell50.StylePriority.UseTextAlignment = false;
this.xrTableCell50.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
this.xrTableCell50.Weight = 0.20202019042968572D;
//
// picSignature
//
this.picSignature.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.picSignature.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Tag", null, "Services.Signature")});
this.picSignature.LocationFloat = new DevExpress.Utils.PointFloat(1F, 1F);
this.picSignature.Name = "picSignature";
this.picSignature.SizeF = new System.Drawing.SizeF(158F, 18F);
this.picSignature.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage;
this.picSignature.StylePriority.UseBorders = false;
this.picSignature.BeforePrint += new System.Drawing.Printing.PrintEventHandler(this.picSignature_BeforePrint);
this.xrTableCell50.Weight = 0.1622530854050562D;
//
// GroupHeader1
//
@@ -318,7 +259,7 @@ namespace Kimm
this.xrTableServiceRecords1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow2,
this.xrTableRow1});
this.xrTableServiceRecords1.SizeF = new System.Drawing.SizeF(735F, 70F);
this.xrTableServiceRecords1.SizeF = new System.Drawing.SizeF(762F, 70F);
this.xrTableServiceRecords1.StylePriority.UseBackColor = false;
this.xrTableServiceRecords1.StylePriority.UseBorders = false;
this.xrTableServiceRecords1.StylePriority.UseFont = false;
@@ -380,9 +321,9 @@ namespace Kimm
this.xrTableCell11.StylePriority.UseFont = false;
this.xrTableCell11.StylePriority.UsePadding = false;
this.xrTableCell11.StylePriority.UseTextAlignment = false;
this.xrTableCell11.Text = "Angebot";
this.xrTableCell11.Text = "Leistungskategorie";
this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell11.Weight = 0.23743016759776542D;
this.xrTableCell11.Weight = 0.46215195232219181D;
//
// xrTableCell9
//
@@ -398,7 +339,7 @@ namespace Kimm
this.xrTableCell9.StylePriority.UseTextAlignment = false;
this.xrTableCell9.Text = "FLS in";
this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell9.Weight = 0.23743016759776536D;
this.xrTableCell9.Weight = 0.1859140259789468D;
//
// xrTableCell28
//
@@ -409,9 +350,9 @@ namespace Kimm
this.xrTableCell28.StylePriority.UseBorders = false;
this.xrTableCell28.StylePriority.UseFont = false;
this.xrTableCell28.StylePriority.UseTextAlignment = false;
this.xrTableCell28.Text = "Betreuerin / Betreuer";
this.xrTableCell28.Text = "Fachkraft";
this.xrTableCell28.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell28.Weight = 0.44692737430167595D;
this.xrTableCell28.Weight = 0.35388414978518545D;
//
// xrTableCell48
//
@@ -425,7 +366,7 @@ namespace Kimm
this.xrTableCell48.StylePriority.UseTextAlignment = false;
this.xrTableCell48.Text = "Unterschrift";
this.xrTableCell48.TextAlignment = DevExpress.XtraPrinting.TextAlignment.BottomCenter;
this.xrTableCell48.Weight = 0.44692737430167606D;
this.xrTableCell48.Weight = 0.35729510561997474D;
//
// xrTableRow1
//
@@ -478,8 +419,7 @@ namespace Kimm
//
// xrTableCell6
//
this.xrTableCell6.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)
this.xrTableCell6.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableCell6.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell6.Multiline = true;
@@ -487,9 +427,8 @@ namespace Kimm
this.xrTableCell6.StylePriority.UseBorders = false;
this.xrTableCell6.StylePriority.UseFont = false;
this.xrTableCell6.StylePriority.UseTextAlignment = false;
this.xrTableCell6.Text = "Art /\r\nAnzahl\r\nKlienten";
this.xrTableCell6.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell6.Weight = 0.23743016759776545D;
this.xrTableCell6.Weight = 0.46215195232219181D;
//
// xrTableCell7
//
@@ -503,9 +442,9 @@ namespace Kimm
this.xrTableCell7.StylePriority.UseBorders = false;
this.xrTableCell7.StylePriority.UseFont = false;
this.xrTableCell7.StylePriority.UseTextAlignment = false;
this.xrTableCell7.Text = "Minuten\r\n(ohne 1,2)";
this.xrTableCell7.Text = "Minuten\r\n";
this.xrTableCell7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
this.xrTableCell7.Weight = 0.23743016759776536D;
this.xrTableCell7.Weight = 0.1859140259789468D;
//
// xrTableCell43
//
@@ -515,7 +454,7 @@ namespace Kimm
this.xrTableCell43.Name = "xrTableCell43";
this.xrTableCell43.StylePriority.UseBorders = false;
this.xrTableCell43.StylePriority.UseFont = false;
this.xrTableCell43.Weight = 0.44692737430167595D;
this.xrTableCell43.Weight = 0.35387584252869314D;
//
// xrTableCell49
//
@@ -529,7 +468,7 @@ namespace Kimm
this.xrTableCell49.StylePriority.UseTextAlignment = false;
this.xrTableCell49.Text = "Klientin / Klient";
this.xrTableCell49.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
this.xrTableCell49.Weight = 0.44692737430167606D;
this.xrTableCell49.Weight = 0.35730341287646705D;
//
// formattingRuleStartDate
//
@@ -541,8 +480,6 @@ namespace Kimm
// ReportHeader
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrLabel14,
this.xrLabel16,
this.xrLabel7,
this.xrLabel8,
this.xrLabel6,
@@ -553,41 +490,6 @@ namespace Kimm
this.ReportHeader.HeightF = 130F;
this.ReportHeader.Name = "ReportHeader";
//
// xrLabel14
//
this.xrLabel14.BackColor = System.Drawing.Color.Gainsboro;
this.xrLabel14.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)));
this.xrLabel14.Font = new System.Drawing.Font("Arial", 10F);
this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(414.9999F, 47.1111F);
this.xrLabel14.Name = "xrLabel14";
this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel14.SizeF = new System.Drawing.SizeF(178.7501F, 30.50001F);
this.xrLabel14.StylePriority.UseBackColor = false;
this.xrLabel14.StylePriority.UseBorders = false;
this.xrLabel14.StylePriority.UseFont = false;
this.xrLabel14.StylePriority.UsePadding = false;
this.xrLabel14.StylePriority.UseTextAlignment = false;
this.xrLabel14.Text = "Bewilligte FLS wöchentlich";
this.xrLabel14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
// xrLabel16
//
this.xrLabel16.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Right)));
this.xrLabel16.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ApprovedFLSPerWeek", "{0:0.##}")});
this.xrLabel16.Font = new System.Drawing.Font("Arial", 10F);
this.xrLabel16.LocationFloat = new DevExpress.Utils.PointFloat(593.75F, 47.1111F);
this.xrLabel16.Name = "xrLabel16";
this.xrLabel16.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel16.SizeF = new System.Drawing.SizeF(100.2502F, 30.50001F);
this.xrLabel16.StylePriority.UseBackColor = false;
this.xrLabel16.StylePriority.UseBorders = false;
this.xrLabel16.StylePriority.UseFont = false;
this.xrLabel16.StylePriority.UsePadding = false;
this.xrLabel16.StylePriority.UseTextAlignment = false;
this.xrLabel16.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
// xrLabel7
//
this.xrLabel7.BackColor = System.Drawing.Color.Gainsboro;
@@ -701,10 +603,10 @@ namespace Kimm
this.xrLabel2.Multiline = true;
this.xrLabel2.Name = "xrLabel2";
this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel2.SizeF = new System.Drawing.SizeF(674.9998F, 25F);
this.xrLabel2.SizeF = new System.Drawing.SizeF(747F, 25F);
this.xrLabel2.StylePriority.UseFont = false;
this.xrLabel2.StylePriority.UseTextAlignment = false;
this.xrLabel2.Text = "Quittierungsbeleg [Mandator.Name]";
this.xrLabel2.Text = "Quittierungsbeleg KIMM flexible Kinder- und Jugendhilfe";
this.xrLabel2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
//
// formattingRuleServiceDesc
@@ -730,7 +632,9 @@ namespace Kimm
//
// topMarginBand1
//
this.topMarginBand1.HeightF = 100F;
this.topMarginBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.xrPictureBox3});
this.topMarginBand1.HeightF = 118.0208F;
this.topMarginBand1.Name = "topMarginBand1";
//
// bottomMarginBand1
@@ -741,15 +645,6 @@ namespace Kimm
// GroupFooter1
//
this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.lblUnterschriftKlient,
this.lblUnterschriftMitarbeiter,
this.xrTableAbwesenheiten,
this.lblHatAbwesenheiten,
this.lblHatGruppen,
this.xrRichText2,
this.xrRichText1,
this.xrLabel15,
this.xrLabel13,
this.xrLabel12,
this.xrLabel11,
this.xrLabel10,
@@ -759,371 +654,15 @@ namespace Kimm
this.GroupFooter1.KeepTogether = true;
this.GroupFooter1.Name = "GroupFooter1";
//
// lblUnterschriftKlient
//
this.lblUnterschriftKlient.Borders = DevExpress.XtraPrinting.BorderSide.Top;
this.lblUnterschriftKlient.Font = new System.Drawing.Font("Arial", 10F);
this.lblUnterschriftKlient.LocationFloat = new DevExpress.Utils.PointFloat(94.99999F, 250F);
this.lblUnterschriftKlient.Name = "lblUnterschriftKlient";
this.lblUnterschriftKlient.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.lblUnterschriftKlient.SizeF = new System.Drawing.SizeF(271.8472F, 20F);
this.lblUnterschriftKlient.StylePriority.UseBackColor = false;
this.lblUnterschriftKlient.StylePriority.UseBorders = false;
this.lblUnterschriftKlient.StylePriority.UseFont = false;
this.lblUnterschriftKlient.StylePriority.UsePadding = false;
this.lblUnterschriftKlient.StylePriority.UseTextAlignment = false;
this.lblUnterschriftKlient.Text = "Datum, Unterschrift Klient/in";
this.lblUnterschriftKlient.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// lblUnterschriftMitarbeiter
//
this.lblUnterschriftMitarbeiter.Borders = DevExpress.XtraPrinting.BorderSide.Top;
this.lblUnterschriftMitarbeiter.Font = new System.Drawing.Font("Arial", 10F);
this.lblUnterschriftMitarbeiter.LocationFloat = new DevExpress.Utils.PointFloat(398.31F, 250F);
this.lblUnterschriftMitarbeiter.Name = "lblUnterschriftMitarbeiter";
this.lblUnterschriftMitarbeiter.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.lblUnterschriftMitarbeiter.SizeF = new System.Drawing.SizeF(336.6944F, 19.99998F);
this.lblUnterschriftMitarbeiter.StylePriority.UseBackColor = false;
this.lblUnterschriftMitarbeiter.StylePriority.UseBorders = false;
this.lblUnterschriftMitarbeiter.StylePriority.UseFont = false;
this.lblUnterschriftMitarbeiter.StylePriority.UsePadding = false;
this.lblUnterschriftMitarbeiter.StylePriority.UseTextAlignment = false;
this.lblUnterschriftMitarbeiter.Text = "Datum, verantwortliche/r Mitarbeiter/in";
this.lblUnterschriftMitarbeiter.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// xrTableAbwesenheiten
//
this.xrTableAbwesenheiten.BorderColor = System.Drawing.Color.Black;
this.xrTableAbwesenheiten.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrTableAbwesenheiten.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableAbwesenheiten.LocationFloat = new DevExpress.Utils.PointFloat(170F, 79.99997F);
this.xrTableAbwesenheiten.Name = "xrTableAbwesenheiten";
this.xrTableAbwesenheiten.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTableAbwesenheiten.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
this.xrTableRow3,
this.xrTableRow4,
this.xrTableRow5,
this.xrTableRow7,
this.xrTableRow8});
this.xrTableAbwesenheiten.SizeF = new System.Drawing.SizeF(230F, 100F);
this.xrTableAbwesenheiten.StylePriority.UseBorders = false;
this.xrTableAbwesenheiten.StylePriority.UseFont = false;
this.xrTableAbwesenheiten.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrTableRow3
//
this.xrTableRow3.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell16,
this.xrTableCell17,
this.xrTableCell18});
this.xrTableRow3.Name = "xrTableRow3";
this.xrTableRow3.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
this.xrTableRow3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
this.xrTableRow3.Weight = 1D;
//
// xrTableCell16
//
this.xrTableCell16.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell16.Name = "xrTableCell16";
this.xrTableCell16.StylePriority.UseBorders = false;
this.xrTableCell16.StylePriority.UseFont = false;
this.xrTableCell16.StylePriority.UsePadding = false;
this.xrTableCell16.StylePriority.UseTextAlignment = false;
this.xrTableCell16.Text = "von";
this.xrTableCell16.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell16.Weight = 0.1073232364991462D;
//
// xrTableCell17
//
this.xrTableCell17.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell17.Name = "xrTableCell17";
this.xrTableCell17.StylePriority.UseBorders = false;
this.xrTableCell17.StylePriority.UseFont = false;
this.xrTableCell17.StylePriority.UsePadding = false;
this.xrTableCell17.StylePriority.UseTextAlignment = false;
this.xrTableCell17.Text = "bis";
this.xrTableCell17.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell17.Weight = 0.10732323432577288D;
//
// xrTableCell18
//
this.xrTableCell18.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell18.Name = "xrTableCell18";
this.xrTableCell18.StylePriority.UseBorders = false;
this.xrTableCell18.StylePriority.UseFont = false;
this.xrTableCell18.StylePriority.UsePadding = false;
this.xrTableCell18.StylePriority.UseTextAlignment = false;
this.xrTableCell18.Text = "Tage";
this.xrTableCell18.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell18.Weight = 0.075757568269402914D;
//
// xrTableRow4
//
this.xrTableRow4.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell19,
this.xrTableCell20,
this.xrTableCell21});
this.xrTableRow4.Name = "xrTableRow4";
this.xrTableRow4.Weight = 1D;
//
// xrTableCell19
//
this.xrTableCell19.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell19.Name = "xrTableCell19";
this.xrTableCell19.StylePriority.UseFont = false;
this.xrTableCell19.StylePriority.UseTextAlignment = false;
this.xrTableCell19.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell19.Weight = 0.1073232364991462D;
//
// xrTableCell20
//
this.xrTableCell20.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell20.Name = "xrTableCell20";
this.xrTableCell20.StylePriority.UseFont = false;
this.xrTableCell20.StylePriority.UseTextAlignment = false;
this.xrTableCell20.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell20.Weight = 0.10732323432577288D;
//
// xrTableCell21
//
this.xrTableCell21.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell21.Name = "xrTableCell21";
this.xrTableCell21.StylePriority.UseFont = false;
this.xrTableCell21.StylePriority.UseTextAlignment = false;
this.xrTableCell21.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell21.Weight = 0.075757568269402914D;
//
// xrTableRow5
//
this.xrTableRow5.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell22,
this.xrTableCell23,
this.xrTableCell24});
this.xrTableRow5.Name = "xrTableRow5";
this.xrTableRow5.Weight = 1D;
//
// xrTableCell22
//
this.xrTableCell22.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell22.Name = "xrTableCell22";
this.xrTableCell22.StylePriority.UseFont = false;
this.xrTableCell22.StylePriority.UseTextAlignment = false;
this.xrTableCell22.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell22.Weight = 0.1073232364991462D;
//
// xrTableCell23
//
this.xrTableCell23.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell23.Name = "xrTableCell23";
this.xrTableCell23.StylePriority.UseFont = false;
this.xrTableCell23.StylePriority.UseTextAlignment = false;
this.xrTableCell23.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell23.Weight = 0.10732323432577288D;
//
// xrTableCell24
//
this.xrTableCell24.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell24.Name = "xrTableCell24";
this.xrTableCell24.StylePriority.UseFont = false;
this.xrTableCell24.StylePriority.UseTextAlignment = false;
this.xrTableCell24.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell24.Weight = 0.075757568269402914D;
//
// xrTableRow7
//
this.xrTableRow7.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell25,
this.xrTableCell26,
this.xrTableCell27});
this.xrTableRow7.Name = "xrTableRow7";
this.xrTableRow7.Weight = 1D;
//
// xrTableCell25
//
this.xrTableCell25.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell25.Name = "xrTableCell25";
this.xrTableCell25.StylePriority.UseFont = false;
this.xrTableCell25.StylePriority.UseTextAlignment = false;
this.xrTableCell25.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell25.Weight = 0.1073232364991462D;
//
// xrTableCell26
//
this.xrTableCell26.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell26.Name = "xrTableCell26";
this.xrTableCell26.StylePriority.UseFont = false;
this.xrTableCell26.StylePriority.UseTextAlignment = false;
this.xrTableCell26.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell26.Weight = 0.10732323432577288D;
//
// xrTableCell27
//
this.xrTableCell27.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell27.Name = "xrTableCell27";
this.xrTableCell27.StylePriority.UseFont = false;
this.xrTableCell27.StylePriority.UseTextAlignment = false;
this.xrTableCell27.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell27.Weight = 0.075757568269402914D;
//
// xrTableRow8
//
this.xrTableRow8.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
this.xrTableCell29,
this.xrTableCell30,
this.xrTableCell31});
this.xrTableRow8.Name = "xrTableRow8";
this.xrTableRow8.Weight = 1D;
//
// xrTableCell29
//
this.xrTableCell29.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell29.Name = "xrTableCell29";
this.xrTableCell29.StylePriority.UseFont = false;
this.xrTableCell29.StylePriority.UseTextAlignment = false;
this.xrTableCell29.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell29.Weight = 0.1073232364991462D;
//
// xrTableCell30
//
this.xrTableCell30.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell30.Name = "xrTableCell30";
this.xrTableCell30.StylePriority.UseFont = false;
this.xrTableCell30.StylePriority.UseTextAlignment = false;
this.xrTableCell30.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell30.Weight = 0.10732323432577288D;
//
// xrTableCell31
//
this.xrTableCell31.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrTableCell31.Name = "xrTableCell31";
this.xrTableCell31.StylePriority.UseFont = false;
this.xrTableCell31.StylePriority.UseTextAlignment = false;
this.xrTableCell31.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
this.xrTableCell31.Weight = 0.075757568269402914D;
//
// lblHatAbwesenheiten
//
this.lblHatAbwesenheiten.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.lblHatAbwesenheiten.Font = new System.Drawing.Font("Arial", 10F);
this.lblHatAbwesenheiten.LocationFloat = new DevExpress.Utils.PointFloat(435.1388F, 130F);
this.lblHatAbwesenheiten.Name = "lblHatAbwesenheiten";
this.lblHatAbwesenheiten.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.lblHatAbwesenheiten.SizeF = new System.Drawing.SizeF(30F, 30F);
this.lblHatAbwesenheiten.StylePriority.UseBackColor = false;
this.lblHatAbwesenheiten.StylePriority.UseBorders = false;
this.lblHatAbwesenheiten.StylePriority.UseFont = false;
this.lblHatAbwesenheiten.StylePriority.UsePadding = false;
this.lblHatAbwesenheiten.StylePriority.UseTextAlignment = false;
this.lblHatAbwesenheiten.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// lblHatGruppen
//
this.lblHatGruppen.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
| DevExpress.XtraPrinting.BorderSide.Right)
| DevExpress.XtraPrinting.BorderSide.Bottom)));
this.lblHatGruppen.Font = new System.Drawing.Font("Arial", 10F);
this.lblHatGruppen.LocationFloat = new DevExpress.Utils.PointFloat(435.1388F, 79.99997F);
this.lblHatGruppen.Name = "lblHatGruppen";
this.lblHatGruppen.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.lblHatGruppen.SizeF = new System.Drawing.SizeF(30F, 30F);
this.lblHatGruppen.StylePriority.UseBackColor = false;
this.lblHatGruppen.StylePriority.UseBorders = false;
this.lblHatGruppen.StylePriority.UseFont = false;
this.lblHatGruppen.StylePriority.UsePadding = false;
this.lblHatGruppen.StylePriority.UseTextAlignment = false;
this.lblHatGruppen.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// xrRichText2
//
this.xrRichText2.Font = new System.Drawing.Font("Arial", 8F);
this.xrRichText2.LocationFloat = new DevExpress.Utils.PointFloat(474.4723F, 130F);
this.xrRichText2.Name = "xrRichText2";
this.xrRichText2.SerializableRtfString = resources.GetString("xrRichText2.SerializableRtfString");
this.xrRichText2.SizeF = new System.Drawing.SizeF(264.972F, 68.05556F);
this.xrRichText2.StylePriority.UseFont = false;
//
// xrRichText1
//
this.xrRichText1.Font = new System.Drawing.Font("Arial", 8F);
this.xrRichText1.LocationFloat = new DevExpress.Utils.PointFloat(474.4723F, 79.99997F);
this.xrRichText1.Name = "xrRichText1";
this.xrRichText1.SerializableRtfString = resources.GetString("xrRichText1.SerializableRtfString");
this.xrRichText1.SizeF = new System.Drawing.SizeF(264.9721F, 50F);
this.xrRichText1.StylePriority.UseFont = false;
//
// xrLabel15
//
this.xrLabel15.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Underline);
this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(0F, 79.99997F);
this.xrLabel15.Multiline = true;
this.xrLabel15.Name = "xrLabel15";
this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel15.SizeF = new System.Drawing.SizeF(170F, 43.61115F);
this.xrLabel15.StylePriority.UseBackColor = false;
this.xrLabel15.StylePriority.UseBorders = false;
this.xrLabel15.StylePriority.UseFont = false;
this.xrLabel15.StylePriority.UsePadding = false;
this.xrLabel15.StylePriority.UseTextAlignment = false;
this.xrLabel15.Text = "Krankenhausaufenthalte/\r\nstat. Rehamaßnahmen:";
this.xrLabel15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrLabel13
//
this.xrLabel13.Font = new System.Drawing.Font("Arial", 10F);
this.xrLabel13.LocationFloat = new DevExpress.Utils.PointFloat(0F, 39.99998F);
this.xrLabel13.Name = "xrLabel13";
this.xrLabel13.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel13.SizeF = new System.Drawing.SizeF(320F, 20F);
this.xrLabel13.StylePriority.UseBackColor = false;
this.xrLabel13.StylePriority.UseBorders = false;
this.xrLabel13.StylePriority.UseFont = false;
this.xrLabel13.StylePriority.UsePadding = false;
this.xrLabel13.StylePriority.UseTextAlignment = false;
this.xrLabel13.Text = "GR = Gruppenangebot";
this.xrLabel13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
// xrLabel12
//
this.xrLabel12.Font = new System.Drawing.Font("Arial", 10F);
this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(0F, 19.99999F);
this.xrLabel12.Name = "xrLabel12";
this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel12.SizeF = new System.Drawing.SizeF(320F, 20F);
this.xrLabel12.StylePriority.UseBackColor = false;
this.xrLabel12.StylePriority.UseBorders = false;
this.xrLabel12.StylePriority.UseFont = false;
this.xrLabel12.StylePriority.UsePadding = false;
this.xrLabel12.StylePriority.UseTextAlignment = false;
this.xrLabel12.Text = "E = ear to ear, face to face";
this.xrLabel12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
//
// xrLabel11
//
this.xrLabel11.Font = new System.Drawing.Font("Arial", 8F);
this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(415F, 19.99999F);
this.xrLabel11.Name = "xrLabel11";
this.xrLabel11.SizeF = new System.Drawing.SizeF(320F, 20F);
this.xrLabel11.StylePriority.UseBackColor = false;
this.xrLabel11.StylePriority.UseBorders = false;
this.xrLabel11.StylePriority.UseFont = false;
this.xrLabel11.StylePriority.UsePadding = false;
this.xrLabel11.StylePriority.UseTextAlignment = false;
this.xrLabel11.Text = "Ohne Faktor 1,2 (wird erst bei Abrechnung eingerechnet)";
this.xrLabel11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
//
// xrLabel10
//
this.xrLabel10.BackColor = System.Drawing.Color.Gainsboro;
this.xrLabel10.Borders = ((DevExpress.XtraPrinting.BorderSide)((DevExpress.XtraPrinting.BorderSide.Right | DevExpress.XtraPrinting.BorderSide.Bottom)));
this.xrLabel10.Font = new System.Drawing.Font("Arial", 10F);
this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(415F, 0F);
this.xrLabel10.LocationFloat = new DevExpress.Utils.PointFloat(496.8219F, 0F);
this.xrLabel10.Name = "xrLabel10";
this.xrLabel10.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel10.SizeF = new System.Drawing.SizeF(320F, 20F);
this.xrLabel10.SizeF = new System.Drawing.SizeF(265.1779F, 20F);
this.xrLabel10.StylePriority.UseBackColor = false;
this.xrLabel10.StylePriority.UseBorders = false;
this.xrLabel10.StylePriority.UseFont = false;
@@ -1136,10 +675,10 @@ namespace Kimm
//
this.xrLabel9.Borders = DevExpress.XtraPrinting.BorderSide.Right;
this.xrLabel9.Font = new System.Drawing.Font("Arial", 10F);
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(245F, 0F);
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(340.9146F, 0F);
this.xrLabel9.Name = "xrLabel9";
this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel9.SizeF = new System.Drawing.SizeF(85F, 20F);
this.xrLabel9.SizeF = new System.Drawing.SizeF(86.58545F, 20F);
this.xrLabel9.StylePriority.UseBackColor = false;
this.xrLabel9.StylePriority.UseBorders = false;
this.xrLabel9.StylePriority.UseFont = false;
@@ -1154,10 +693,10 @@ namespace Kimm
this.xrLabel1.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Text", null, "TotalFLMBillable", "{0:0.##}")});
this.xrLabel1.Font = new System.Drawing.Font("Arial", 10F);
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(330F, 0F);
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(427.5F, 0F);
this.xrLabel1.Name = "xrLabel1";
this.xrLabel1.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel1.SizeF = new System.Drawing.SizeF(85F, 20F);
this.xrLabel1.SizeF = new System.Drawing.SizeF(69.3219F, 20F);
this.xrLabel1.StylePriority.UseBackColor = false;
this.xrLabel1.StylePriority.UseBorders = false;
this.xrLabel1.StylePriority.UseFont = false;
@@ -1172,10 +711,62 @@ namespace Kimm
this.fieldKontaktArt.FieldType = DevExpress.XtraReports.UI.FieldType.String;
this.fieldKontaktArt.Name = "fieldKontaktArt";
//
// xrPictureBox3
//
this.xrPictureBox3.Image = ((System.Drawing.Image)(resources.GetObject("xrPictureBox3.Image")));
this.xrPictureBox3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 38.33332F);
this.xrPictureBox3.Name = "xrPictureBox3";
this.xrPictureBox3.SizeF = new System.Drawing.SizeF(747F, 59.27081F);
this.xrPictureBox3.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage;
//
// picSignature
//
this.picSignature.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.picSignature.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
new DevExpress.XtraReports.UI.XRBinding("Tag", null, "Services.Signature")});
this.picSignature.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0.9999911F);
this.picSignature.Name = "picSignature";
this.picSignature.SizeF = new System.Drawing.SizeF(133.2249F, 18F);
this.picSignature.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage;
this.picSignature.StylePriority.UseBorders = false;
this.picSignature.BeforePrint += new System.Drawing.Printing.PrintEventHandler(this.picSignature_BeforePrint);
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServicesOverviewRO);
//
// xrLabel11
//
this.xrLabel11.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.xrLabel11.Font = new System.Drawing.Font("Arial", 10F);
this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(0F, 74.29544F);
this.xrLabel11.Name = "xrLabel11";
this.xrLabel11.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel11.SizeF = new System.Drawing.SizeF(761.9999F, 61.75001F);
this.xrLabel11.StylePriority.UseBackColor = false;
this.xrLabel11.StylePriority.UseBorders = false;
this.xrLabel11.StylePriority.UseFont = false;
this.xrLabel11.StylePriority.UsePadding = false;
this.xrLabel11.StylePriority.UseTextAlignment = false;
this.xrLabel11.Text = resources.GetString("xrLabel11.Text");
this.xrLabel11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrLabel12
//
this.xrLabel12.Borders = DevExpress.XtraPrinting.BorderSide.None;
this.xrLabel12.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.xrLabel12.LocationFloat = new DevExpress.Utils.PointFloat(0.0001300465F, 55.15907F);
this.xrLabel12.Name = "xrLabel12";
this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(3, 2, 0, 0, 100F);
this.xrLabel12.SizeF = new System.Drawing.SizeF(761.9999F, 19.13637F);
this.xrLabel12.StylePriority.UseBackColor = false;
this.xrLabel12.StylePriority.UseBorders = false;
this.xrLabel12.StylePriority.UseFont = false;
this.xrLabel12.StylePriority.UsePadding = false;
this.xrLabel12.StylePriority.UseTextAlignment = false;
this.xrLabel12.Text = "Hinweis:";
this.xrLabel12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// Quittierungsbeleg
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
@@ -1194,16 +785,13 @@ namespace Kimm
this.formattingRuleServiceDesc,
this.formattingRuleCostBearer,
this.formattingRuleEmployeeName});
this.Margins = new System.Drawing.Printing.Margins(50, 30, 100, 30);
this.Margins = new System.Drawing.Printing.Margins(35, 30, 118, 30);
this.PageHeight = 1169;
this.PageWidth = 827;
this.PaperKind = System.Drawing.Printing.PaperKind.A4;
this.Version = "17.1";
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableServiceRecords1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTableAbwesenheiten)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrRichText1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
@@ -1256,44 +844,13 @@ namespace Kimm
private DevExpress.XtraReports.UI.XRTableCell xrTableCell12;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell44;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell50;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell2;
private DevExpress.XtraReports.UI.CalculatedField fieldKontaktArt;
private DevExpress.XtraReports.UI.XRLabel xrLabel11;
private DevExpress.XtraReports.UI.XRLabel xrLabel10;
private DevExpress.XtraReports.UI.XRLabel xrLabel9;
private DevExpress.XtraReports.UI.XRLabel xrLabel1;
private DevExpress.XtraReports.UI.XRLabel xrLabel13;
private DevExpress.XtraReports.UI.XRLabel xrLabel12;
private DevExpress.XtraReports.UI.XRLabel xrLabel15;
private DevExpress.XtraReports.UI.XRRichText xrRichText1;
private DevExpress.XtraReports.UI.XRRichText xrRichText2;
private DevExpress.XtraReports.UI.XRLabel lblHatAbwesenheiten;
private DevExpress.XtraReports.UI.XRLabel lblHatGruppen;
private DevExpress.XtraReports.UI.XRTable xrTableAbwesenheiten;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow3;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell16;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell17;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell18;
private DevExpress.XtraReports.UI.XRLabel lblUnterschriftKlient;
private DevExpress.XtraReports.UI.XRLabel lblUnterschriftMitarbeiter;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow4;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell19;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell20;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell21;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow5;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell22;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell23;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell24;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow7;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell25;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell26;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell27;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow8;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell29;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell30;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell31;
private DevExpress.XtraReports.UI.XRLabel xrLabel14;
private DevExpress.XtraReports.UI.XRLabel xrLabel16;
private DevExpress.XtraReports.UI.XRPictureBox xrPictureBox3;
private DevExpress.XtraReports.UI.XRPictureBox picSignature;
private DevExpress.XtraReports.UI.XRLabel xrLabel11;
private DevExpress.XtraReports.UI.XRLabel xrLabel12;
}
}

View File

@@ -50,65 +50,65 @@ namespace Kimm
pRO.Services = servicesBillable;
}
if (String.IsNullOrWhiteSpace(pRO.AbsenceTimes))
{
lblHatAbwesenheiten.Text = "X";
}
//if (String.IsNullOrWhiteSpace(pRO.AbsenceTimes))
//{
// lblHatAbwesenheiten.Text = "X";
//}
if (!hatGruppen)
{
lblHatGruppen.Text = "X";
}
//if (!hatGruppen)
//{
// lblHatGruppen.Text = "X";
//}
ErstelleAbwesenheitenTabelle(pRO);
//ErstelleAbwesenheitenTabelle(pRO);
bindingSource1.DataSource = pRO;
}
private void ErstelleAbwesenheitenTabelle(ServicesOverviewRO pRo)
{
if (pRo.Abwesenheiten != null)
{
int newRows = 0;
int index = 1;
foreach (var at in pRo.Abwesenheiten)
{
DevExpress.XtraReports.UI.XRTableRow row = null;
if (index < xrTableAbwesenheiten.Rows.Count)
{
row = xrTableAbwesenheiten.Rows[index];
}
else
{
row = xrTableAbwesenheiten.InsertRowBelow(xrTableAbwesenheiten.Rows[xrTableAbwesenheiten.Rows.Count - 1]);
newRows++;
}
//private void ErstelleAbwesenheitenTabelle(ServicesOverviewRO pRo)
//{
// if (pRo.Abwesenheiten != null)
// {
// int newRows = 0;
// int index = 1;
// foreach (var at in pRo.Abwesenheiten)
// {
// DevExpress.XtraReports.UI.XRTableRow row = null;
// if (index < xrTableAbwesenheiten.Rows.Count)
// {
// row = xrTableAbwesenheiten.Rows[index];
// }
// else
// {
// row = xrTableAbwesenheiten.InsertRowBelow(xrTableAbwesenheiten.Rows[xrTableAbwesenheiten.Rows.Count - 1]);
// newRows++;
// }
row.Cells[0].Text = String.Format("{0:dd.MM.yyyy}", at.Start);
int? days = null;
// row.Cells[0].Text = String.Format("{0:dd.MM.yyyy}", at.Start);
// int? days = null;
if (at.End.HasValue)
{
row.Cells[1].Text = String.Format("{0:dd.MM.yyyy}", at.End);
days = (int)at.End.Value.Subtract(at.Start.Value).TotalDays + 1;
}
else
{
row.Cells[1].Text = "unbekannt";
}
// if (at.End.HasValue)
// {
// row.Cells[1].Text = String.Format("{0:dd.MM.yyyy}", at.End);
// days = (int)at.End.Value.Subtract(at.Start.Value).TotalDays + 1;
// }
// else
// {
// row.Cells[1].Text = "unbekannt";
// }
row.Cells[2].Text = String.Format("{0:0}", days);
// row.Cells[2].Text = String.Format("{0:0}", days);
index++;
}
// index++;
// }
if (newRows > 0)
{
lblUnterschriftKlient.Top += newRows * 20;
lblUnterschriftMitarbeiter.Top += newRows * 20;
}
}
}
// if (newRows > 0)
// {
// lblUnterschriftKlient.Top += newRows * 20;
// lblUnterschriftMitarbeiter.Top += newRows * 20;
// }
// }
//}
private void picSignature_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{

View File

@@ -120,10 +120,180 @@
<metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>21, 17</value>
</metadata>
<data name="xrRichText2.SerializableRtfString" xml:space="preserve">
<value>ewBcAHIAdABmADEAXABkAGUAZgBmADAAewBcAGYAbwBuAHQAdABiAGwAewBcAGYAMAAgAEMAYQBsAGkAYgByAGkAOwB9AHsAXABmADEAIABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgA7AH0AewBcAGYAMgAgAEEAcgBpAGEAbAA7AH0AfQB7AFwAYwBvAGwAbwByAHQAYgBsACAAOwBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAAgADsAXAByAGUAZAAwAFwAZwByAGUAZQBuADAAXABiAGwAdQBlADIANQA1ACAAOwB9AHsAXAAqAFwAZABlAGYAYwBoAHAAIABcAGYAMQBcAGYAcwAyADQAfQB7AFwAcwB0AHkAbABlAHMAaABlAGUAdAAgAHsAXABxAGwAXABmADEAXABmAHMAMgA0ACAATgBvAHIAbQBhAGwAOwB9AHsAXAAqAFwAYwBzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0ADsAfQB7AFwAKgBcAGMAcwAyAFwAcwBiAGEAcwBlAGQAbwBuADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABMAGkAbgBlACAATgB1AG0AYgBlAHIAOwB9AHsAXAAqAFwAYwBzADMAXAB1AGwAXABmADEAXABmAHMAMgA0AFwAYwBmADIAIABIAHkAcABlAHIAbABpAG4AawA7AH0AewBcACoAXAB0AHMANABcAHQAcwByAG8AdwBkAFwAZgAxAFwAZgBzADIANABcAHEAbABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgBsADMAXAB0AHMAYwBlAGwAbABwAGEAZABkAGwAMQAwADgAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAYgAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgB0ADMAXAB0AHMAdgBlAHIAdABhAGwAdABcAGMAbAB0AHgAbAByAHQAYgAgAE4AbwByAG0AYQBsACAAVABhAGIAbABlADsAfQB7AFwAKgBcAHQAcwA1AFwAdABzAHIAbwB3AGQAXABzAGIAYQBzAGUAZABvAG4ANABcAGYAMQBcAGYAcwAyADQAXABxAGwAXAB0AHIAYgByAGQAcgB0AFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGwAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAYgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHIAYgByAGQAcgByAFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGgAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAdgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAbAAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABsADEAMAA4AFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwB2AGUAcgB0AGEAbAB0AFwAYwBsAHQAeABsAHIAdABiACAAVABhAGIAbABlACAAUwBpAG0AcABsAGUAIAAxADsAfQB9AHsAXAAqAFwAbABpAHMAdABvAHYAZQByAHIAaQBkAGUAdABhAGIAbABlAH0AXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcABcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAewBcAGYAMgBcAGYAcwAyADAAXABjAGYAMQAgAEsAZQBpAG4AZQAgAH0AewBcAGwAYQBuAGcAMQAwADMAMQBcAGwAYQBuAGcAZgBlADEAMAAzADEAXAB1AGwAXABmADIAXABmAHMAMgAwAFwAYwBmADEAIABLAHIAYQBuAGsAZQBuAGgAYQB1AHMAYQB1AGYAZQBuAHQAaABhAGwAdABlAH0AXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAdQBsAFwAZgAyAFwAZgBzADIAMABcAGMAZgAxAFwAcABhAHIAXABwAGEAcgBkAFwAcABsAGEAaQBuAFwAcQBsAHsAXABsAGEAbgBnADEAMAAzADEAXABsAGEAbgBnAGYAZQAxADAAMwAxAFwAdQBsAFwAZgAyAFwAZgBzADIAMABcAGMAZgAxACAAYgBlAGsAYQBuAG4AdAAgAG8AZABlAHIAIAB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAHUAbABcAGYAMgBcAGYAcwAyADAAXABjAGYAMQBcAHAAYQByAFwAcABhAHIAZABcAHAAbABhAGkAbgBcAHEAbAB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAHUAbABcAGYAMgBcAGYAcwAyADAAXABjAGYAMQAgAGEAYgByAGUAYwBoAG4AdQBuAGcAcwByAGUAbABlAHYAYQBuAHQAfQB7AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMgBcAGYAcwAyADAAXABjAGYAMQAgACAAaQBtACAAQQBiAHIAZQBjAGgAbgB1AG4AZwBzAHoAZQBpAHQAcgBhAHUAbQB9AFwAbABhAG4AZwAxADAAMwAxAFwAbABhAG4AZwBmAGUAMQAwADMAMQBcAGYAMQBcAGYAcwAyADQAXABjAGYAMQBcAHAAYQByAH0A</value>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="xrPictureBox3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="xrRichText1.SerializableRtfString" xml:space="preserve">
<value>ewBcAHIAdABmADEAXABkAGUAZgBmADAAewBcAGYAbwBuAHQAdABiAGwAewBcAGYAMAAgAEMAYQBsAGkAYgByAGkAOwB9AHsAXABmADEAIABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgA7AH0AewBcAGYAMgAgAEEAcgBpAGEAbAA7AH0AfQB7AFwAYwBvAGwAbwByAHQAYgBsACAAOwBcAHIAZQBkADAAXABnAHIAZQBlAG4AMABcAGIAbAB1AGUAMAAgADsAXAByAGUAZAAwAFwAZwByAGUAZQBuADAAXABiAGwAdQBlADIANQA1ACAAOwB9AHsAXAAqAFwAZABlAGYAYwBoAHAAIABcAGYAMQBcAGYAcwAyADQAfQB7AFwAcwB0AHkAbABlAHMAaABlAGUAdAAgAHsAXABxAGwAXABmADEAXABmAHMAMgA0ACAATgBvAHIAbQBhAGwAOwB9AHsAXAAqAFwAYwBzADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0ADsAfQB7AFwAKgBcAGMAcwAyAFwAcwBiAGEAcwBlAGQAbwBuADEAXABmADEAXABmAHMAMgA0AFwAYwBmADEAIABMAGkAbgBlACAATgB1AG0AYgBlAHIAOwB9AHsAXAAqAFwAYwBzADMAXAB1AGwAXABmADEAXABmAHMAMgA0AFwAYwBmADIAIABIAHkAcABlAHIAbABpAG4AawA7AH0AewBcACoAXAB0AHMANABcAHQAcwByAG8AdwBkAFwAZgAxAFwAZgBzADIANABcAHEAbABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgBsADMAXAB0AHMAYwBlAGwAbABwAGEAZABkAGwAMQAwADgAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAYgAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwBjAGUAbABsAHAAYQBkAGQAZgB0ADMAXAB0AHMAdgBlAHIAdABhAGwAdABcAGMAbAB0AHgAbAByAHQAYgAgAE4AbwByAG0AYQBsACAAVABhAGIAbABlADsAfQB7AFwAKgBcAHQAcwA1AFwAdABzAHIAbwB3AGQAXABzAGIAYQBzAGUAZABvAG4ANABcAGYAMQBcAGYAcwAyADQAXABxAGwAXAB0AHIAYgByAGQAcgB0AFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGwAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAYgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHIAYgByAGQAcgByAFwAYgByAGQAcgBzAFwAYgByAGQAcgB3ADEAMABcAHQAcgBiAHIAZAByAGgAXABiAHIAZAByAHMAXABiAHIAZAByAHcAMQAwAFwAdAByAGIAcgBkAHIAdgBcAGIAcgBkAHIAcwBcAGIAcgBkAHIAdwAxADAAXAB0AHMAYwBlAGwAbABwAGEAZABkAGYAbAAzAFwAdABzAGMAZQBsAGwAcABhAGQAZABsADEAMAA4AFwAdABzAGMAZQBsAGwAcABhAGQAZABmAHIAMwBcAHQAcwBjAGUAbABsAHAAYQBkAGQAcgAxADAAOABcAHQAcwB2AGUAcgB0AGEAbAB0AFwAYwBsAHQAeABsAHIAdABiACAAVABhAGIAbABlACAAUwBpAG0AcABsAGUAIAAxADsAfQB9AHsAXAAqAFwAbABpAHMAdABvAHYAZQByAHIAaQBkAGUAdABhAGIAbABlAH0AXABuAG8AdQBpAGMAbwBtAHAAYQB0AFwAcwBwAGwAeQB0AHcAbgBpAG4AZQBcAGgAdABtAGEAdQB0AHMAcABcAHAAYQByAGQAXABwAGwAYQBpAG4AXABxAGwAewBcAGYAMgBcAGYAcwAyADAAXABjAGYAMQAgAEsAZQBpAG4AZQAgAH0AewBcAHUAbABcAGYAMgBcAGYAcwAyADAAXABjAGYAMQAgAEcAcgB1AHAAcABlAG4AYQBuAGcAZQBiAG8AdABlAH0AewBcAGYAMgBcAGYAcwAyADAAXABjAGYAMQAgACAAaQBtACAAQQBiAHIAZQBjAGgAbgB1AG4AZwBzAHoAZQBpAHQAcgBhAHUAbQB9AFwAZgAxAFwAZgBzADIANABcAGMAZgAxAFwAcABhAHIAfQA=</value>
<data name="xrLabel11.Text" xml:space="preserve">
<value>Die Unterschriften erfolgen digital über das Smartphone nach durchgeführter Leistung. Eine Veränderung der Einträge in Bezug auf Datum und/oder Zeit ist danach nicht mehr möglich. Detaillierte Angaben zu den geleisteten Inhalten entnehmen Sie bitte der beigefügten Dokumentation.</value>
</data>
</root>

View File

@@ -202,8 +202,11 @@ namespace LebenshilfeTrier
else if (scap.ApprovedBETotal.HasValue)
{
var monate = DateTimeUtils.GetTotalMonths(scap.StartDate.Value, scap.EndDate.Value);
proMonat = scap.ApprovedBETotal.Value / monate.GanzeMonate;
proWoche = proMonat / 4.33m;
if (monate.GanzeMonate > 0)
{
proMonat = scap.ApprovedBETotal.Value / monate.GanzeMonate;
proWoche = proMonat / 4.33m;
}
}
wochenLabel.Text = String.Format("{0:0.00}", proWoche);
monatsLabel.Text = String.Format("{0:0.00}", proMonat);

View File

@@ -41,15 +41,12 @@ namespace PraxisPusteblume
this.xrLabel6 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.rtAnschriftNormal = new DevExpress.XtraReports.UI.XRRichText();
this.lblAdresse = new DevExpress.XtraReports.UI.XRLabel();
this.xrPictureBox1 = new DevExpress.XtraReports.UI.XRPictureBox();
this.rtKopfNormal = new DevExpress.XtraReports.UI.XRRichText();
this.ruleRateFactorNull = new DevExpress.XtraReports.UI.FormattingRule();
this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
this.rtKopfIfs = new DevExpress.XtraReports.UI.XRRichText();
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
this.rtFussIfs = new DevExpress.XtraReports.UI.XRRichText();
this.rtFussNormal = new DevExpress.XtraReports.UI.XRRichText();
this.Page1 = new DevExpress.XtraReports.UI.GroupHeaderBand();
this.xrTable2 = new DevExpress.XtraReports.UI.XRTable();
@@ -73,6 +70,7 @@ namespace PraxisPusteblume
this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.GroupFooter1 = new DevExpress.XtraReports.UI.GroupFooterBand();
this.lblZahlbar = new DevExpress.XtraReports.UI.XRLabel();
this.lblNotice = new DevExpress.XtraReports.UI.XRLabel();
@@ -85,17 +83,13 @@ namespace PraxisPusteblume
this.cellGesamtStunden = new DevExpress.XtraReports.UI.XRTableCell();
this.cellGesamtSumme = new DevExpress.XtraReports.UI.XRTableCell();
this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
((System.ComponentModel.ISupportInitialize)(this.rtAnschriftIfs)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rtAnschriftNormal)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rtKopfNormal)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rtKopfIfs)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rtFussIfs)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rtFussNormal)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
//
// Detail
@@ -117,7 +111,6 @@ namespace PraxisPusteblume
this.xrLabel6,
this.xrLabel3,
this.xrLabel1,
this.rtAnschriftNormal,
this.lblAdresse});
this.ReportHeader.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ReportHeader.HeightF = 185.4584F;
@@ -127,7 +120,7 @@ namespace PraxisPusteblume
// rtAnschriftIfs
//
this.rtAnschriftIfs.Font = new System.Drawing.Font("Verdana", 10F);
this.rtAnschriftIfs.LocationFloat = new DevExpress.Utils.PointFloat(245.8331F, 81.79175F);
this.rtAnschriftIfs.LocationFloat = new DevExpress.Utils.PointFloat(45.83333F, 0F);
this.rtAnschriftIfs.Name = "rtAnschriftIfs";
this.rtAnschriftIfs.SerializableRtfString = resources.GetString("rtAnschriftIfs.SerializableRtfString");
this.rtAnschriftIfs.SizeF = new System.Drawing.SizeF(371.875F, 32.2917F);
@@ -210,14 +203,6 @@ namespace PraxisPusteblume
this.xrLabel1.StylePriority.UseFont = false;
this.xrLabel1.Text = "Ansprechpartnerin:";
//
// rtAnschriftNormal
//
this.rtAnschriftNormal.Font = new System.Drawing.Font("Verdana", 10F);
this.rtAnschriftNormal.LocationFloat = new DevExpress.Utils.PointFloat(45.83333F, 0F);
this.rtAnschriftNormal.Name = "rtAnschriftNormal";
this.rtAnschriftNormal.SerializableRtfString = resources.GetString("rtAnschriftNormal.SerializableRtfString");
this.rtAnschriftNormal.SizeF = new System.Drawing.SizeF(371.875F, 32.2917F);
//
// lblAdresse
//
this.lblAdresse.LocationFloat = new DevExpress.Utils.PointFloat(45.83333F, 32.29173F);
@@ -253,36 +238,18 @@ namespace PraxisPusteblume
// topMarginBand1
//
this.topMarginBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.rtKopfIfs,
this.rtKopfNormal,
this.xrPictureBox1});
this.topMarginBand1.HeightF = 201F;
this.topMarginBand1.Name = "topMarginBand1";
//
// rtKopfIfs
//
this.rtKopfIfs.Font = new System.Drawing.Font("Verdana", 10F);
this.rtKopfIfs.LocationFloat = new DevExpress.Utils.PointFloat(245.354F, 34.0625F);
this.rtKopfIfs.Name = "rtKopfIfs";
this.rtKopfIfs.SerializableRtfString = resources.GetString("rtKopfIfs.SerializableRtfString");
this.rtKopfIfs.SizeF = new System.Drawing.SizeF(261.2915F, 156.6458F);
//
// bottomMarginBand1
//
this.bottomMarginBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.rtFussIfs,
this.rtFussNormal});
this.bottomMarginBand1.HeightF = 100F;
this.bottomMarginBand1.Name = "bottomMarginBand1";
//
// rtFussIfs
//
this.rtFussIfs.Font = new System.Drawing.Font("Verdana", 10F);
this.rtFussIfs.LocationFloat = new DevExpress.Utils.PointFloat(12.50079F, 15.12499F);
this.rtFussIfs.Name = "rtFussIfs";
this.rtFussIfs.SerializableRtfString = resources.GetString("rtFussIfs.SerializableRtfString");
this.rtFussIfs.SizeF = new System.Drawing.SizeF(726.9984F, 69.75002F);
//
// rtFussNormal
//
this.rtFussNormal.Font = new System.Drawing.Font("Verdana", 10F);
@@ -536,6 +503,10 @@ namespace PraxisPusteblume
this.xrTableCell1.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleRight;
this.xrTableCell1.Weight = 0.15384615384615372D;
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServiceInvoiceRO);
//
// GroupFooter1
//
this.GroupFooter1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
@@ -688,10 +659,6 @@ namespace PraxisPusteblume
this.xrLabel14.StylePriority.UseTextAlignment = false;
this.xrLabel14.Text = "Mit freundlichen Grüßen\r\nIhr Pusteblume-Team";
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.ServiceInvoiceRO);
//
// SammelrechnungNachKlienten
//
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
@@ -714,15 +681,12 @@ namespace PraxisPusteblume
this.PaperKind = System.Drawing.Printing.PaperKind.A4;
this.Version = "17.1";
((System.ComponentModel.ISupportInitialize)(this.rtAnschriftIfs)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rtAnschriftNormal)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rtKopfNormal)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rtKopfIfs)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rtFussIfs)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rtFussNormal)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
}
@@ -747,7 +711,6 @@ namespace PraxisPusteblume
private DevExpress.XtraReports.UI.XRTableRow xrTableRow10;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell12;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell15;
private DevExpress.XtraReports.UI.XRRichText rtAnschriftNormal;
private DevExpress.XtraReports.UI.XRLabel lblNachweisFuer;
private DevExpress.XtraReports.UI.XRRichText rtFussNormal;
private DevExpress.XtraReports.UI.XRPictureBox xrPictureBox1;
@@ -771,8 +734,6 @@ namespace PraxisPusteblume
private DevExpress.XtraReports.UI.XRLabel lblMonat;
private DevExpress.XtraReports.UI.XRLabel lblZahlbar;
private DevExpress.XtraReports.UI.XRRichText rtAnschriftIfs;
private DevExpress.XtraReports.UI.XRRichText rtKopfIfs;
private DevExpress.XtraReports.UI.XRRichText rtFussIfs;
private DevExpress.XtraReports.UI.XRTable xrTable2;
private DevExpress.XtraReports.UI.XRTableRow xrTableRow2;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell5;

View File

@@ -161,18 +161,18 @@ namespace PraxisPusteblume
}
}
isIfs = true;
isIfs = false;
rtAnschriftIfs.Location = rtAnschriftNormal.Location;
rtFussIfs.Location = rtFussNormal.Location;
rtKopfIfs.Location = rtKopfNormal.Location;
//rtAnschriftIfs.Location = rtAnschriftNormal.Location;
//rtFussIfs.Location = rtFussNormal.Location;
//rtKopfIfs.Location = rtKopfNormal.Location;
rtAnschriftIfs.Visible = isIfs;
rtFussIfs.Visible = isIfs;
rtKopfIfs.Visible = isIfs;
rtAnschriftNormal.Visible = !isIfs;
rtFussNormal.Visible = !isIfs;
rtKopfNormal.Visible = !isIfs;
//rtAnschriftIfs.Visible = isIfs;
//rtFussIfs.Visible = isIfs;
//rtKopfIfs.Visible = isIfs;
//rtAnschriftNormal.Visible = !isIfs;
//rtFussNormal.Visible = !isIfs;
//rtKopfNormal.Visible = !isIfs;
}

File diff suppressed because one or more lines are too long

View File

@@ -20,7 +20,7 @@ namespace BeWo.SeWo
public override void HandleServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, Contract contract)
{
StundenBerechnungHelper.CorrectOverlappingTimes(groupFilteredRecords.OrderBy(s => s.Start).ToList());
StundenBerechnungHelper.CorrectOverlappingTimes(groupFilteredRecords.Where(s => s.ServiceDescription.ServiceCategory.Name != "SeWo Ruf" && s.ServiceDescription.ServiceCategory.Name != "SeWo Notdienst").OrderBy(s => s.Start).ToList());
}
public override void CreateEmployeeDetails(MitarbeiterstundenkontoRO ro)

View File

@@ -33,6 +33,8 @@ namespace BeWo.SeWo
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
this.formattingRuleStartDate = new DevExpress.XtraReports.UI.FormattingRule();
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel();
this.lblRufGesamt = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel14 = new DevExpress.XtraReports.UI.XRLabel();
this.lblGesamtKm = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel12 = new DevExpress.XtraReports.UI.XRLabel();
@@ -617,8 +619,8 @@ namespace BeWo.SeWo
this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.xrLabel9 = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel11 = new DevExpress.XtraReports.UI.XRLabel();
this.lblNotGesamt = new DevExpress.XtraReports.UI.XRLabel();
this.xrLabel15 = new DevExpress.XtraReports.UI.XRLabel();
((System.ComponentModel.ISupportInitialize)(this.table1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
@@ -640,8 +642,10 @@ namespace BeWo.SeWo
// ReportHeader
//
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
this.lblNotGesamt,
this.xrLabel15,
this.xrLabel9,
this.xrLabel11,
this.lblRufGesamt,
this.xrLabel14,
this.lblGesamtKm,
this.xrLabel12,
@@ -657,9 +661,34 @@ namespace BeWo.SeWo
this.ReportHeader.Name = "ReportHeader";
this.ReportHeader.StylePriority.UseFont = false;
//
// xrLabel9
//
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(694.0004F, 40.00003F);
this.xrLabel9.Multiline = true;
this.xrLabel9.Name = "xrLabel9";
this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel9.SizeF = new System.Drawing.SizeF(95.99976F, 20F);
this.xrLabel9.StylePriority.UseBorders = false;
this.xrLabel9.StylePriority.UseFont = false;
this.xrLabel9.StylePriority.UseTextAlignment = false;
this.xrLabel9.Text = "SeWo Ruf:";
this.xrLabel9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// lblRufGesamt
//
this.lblRufGesamt.LocationFloat = new DevExpress.Utils.PointFloat(790.0002F, 40.00003F);
this.lblRufGesamt.Multiline = true;
this.lblRufGesamt.Name = "lblRufGesamt";
this.lblRufGesamt.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblRufGesamt.SizeF = new System.Drawing.SizeF(72.00012F, 20F);
this.lblRufGesamt.StylePriority.UseBorders = false;
this.lblRufGesamt.StylePriority.UseFont = false;
this.lblRufGesamt.StylePriority.UseTextAlignment = false;
this.lblRufGesamt.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrLabel14
//
this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(718.0003F, 20.00001F);
this.xrLabel14.LocationFloat = new DevExpress.Utils.PointFloat(694.0002F, 20F);
this.xrLabel14.Multiline = true;
this.xrLabel14.Name = "xrLabel14";
this.xrLabel14.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -672,7 +701,7 @@ namespace BeWo.SeWo
//
// lblGesamtKm
//
this.lblGesamtKm.LocationFloat = new DevExpress.Utils.PointFloat(886.0001F, 20.00001F);
this.lblGesamtKm.LocationFloat = new DevExpress.Utils.PointFloat(862.0003F, 20F);
this.lblGesamtKm.Multiline = true;
this.lblGesamtKm.Name = "lblGesamtKm";
this.lblGesamtKm.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
@@ -5048,30 +5077,30 @@ namespace BeWo.SeWo
//
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.MitarbeiterstundenkontoRO.EmployeeDetail);
//
// xrLabel9
// lblNotGesamt
//
this.xrLabel9.LocationFloat = new DevExpress.Utils.PointFloat(718.0003F, 40.00003F);
this.xrLabel9.Multiline = true;
this.xrLabel9.Name = "xrLabel9";
this.xrLabel9.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel9.SizeF = new System.Drawing.SizeF(167.9998F, 20F);
this.xrLabel9.StylePriority.UseBorders = false;
this.xrLabel9.StylePriority.UseFont = false;
this.xrLabel9.StylePriority.UseTextAlignment = false;
this.xrLabel9.Text = "SeWo Notdienst";
this.xrLabel9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
this.lblNotGesamt.LocationFloat = new DevExpress.Utils.PointFloat(982.0001F, 40F);
this.lblNotGesamt.Multiline = true;
this.lblNotGesamt.Name = "lblNotGesamt";
this.lblNotGesamt.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.lblNotGesamt.SizeF = new System.Drawing.SizeF(76.99988F, 20F);
this.lblNotGesamt.StylePriority.UseBorders = false;
this.lblNotGesamt.StylePriority.UseFont = false;
this.lblNotGesamt.StylePriority.UseTextAlignment = false;
this.lblNotGesamt.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// xrLabel11
// xrLabel15
//
this.xrLabel11.LocationFloat = new DevExpress.Utils.PointFloat(886.0002F, 40.00003F);
this.xrLabel11.Multiline = true;
this.xrLabel11.Name = "xrLabel11";
this.xrLabel11.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel11.SizeF = new System.Drawing.SizeF(158.0002F, 20F);
this.xrLabel11.StylePriority.UseBorders = false;
this.xrLabel11.StylePriority.UseFont = false;
this.xrLabel11.StylePriority.UseTextAlignment = false;
this.xrLabel11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
this.xrLabel15.LocationFloat = new DevExpress.Utils.PointFloat(862.0003F, 40F);
this.xrLabel15.Multiline = true;
this.xrLabel15.Name = "xrLabel15";
this.xrLabel15.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel15.SizeF = new System.Drawing.SizeF(119.9998F, 20F);
this.xrLabel15.StylePriority.UseBorders = false;
this.xrLabel15.StylePriority.UseFont = false;
this.xrLabel15.StylePriority.UseTextAlignment = false;
this.xrLabel15.Text = "SeWo Notdienst:";
this.xrLabel15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
//
// Zeitzuschlagsbeleg
//
@@ -5691,6 +5720,8 @@ namespace BeWo.SeWo
private DevExpress.XtraReports.UI.XRLabel xrLabel8;
private DevExpress.XtraReports.UI.XRTableCell xrTableCell376;
private DevExpress.XtraReports.UI.XRLabel xrLabel9;
private DevExpress.XtraReports.UI.XRLabel xrLabel11;
private DevExpress.XtraReports.UI.XRLabel lblRufGesamt;
private DevExpress.XtraReports.UI.XRLabel lblNotGesamt;
private DevExpress.XtraReports.UI.XRLabel xrLabel15;
}
}

View File

@@ -46,6 +46,9 @@ namespace BeWo.SeWo
private void FillTableData(DateTime monat, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
decimal kmTotal = 0;
decimal rufTotal = 0;
decimal notdienstTotal = 0;
if (ed.ServiceRecordsInSelectedTimeSpan != null)
{
foreach (var sr in ed.ServiceRecordsInSelectedTimeSpan)
@@ -54,13 +57,27 @@ namespace BeWo.SeWo
{
kmTotal += sr.DistanceInMeter.Value;
}
if (sr.ServiceDescription.ServiceCategory.Name == "SeWo Ruf")
{
rufTotal += GetDuration(sr);
}
else if (sr.ServiceDescription.ServiceCategory.Name == "SeWo Notdienst")
{
notdienstTotal += GetDuration(sr);
}
else
{
AddValueToTable(sr);
}
AddValueToTable(sr);
}
}
BerechneGesamtsummen();
lblGesamtKm.Text = String.Format("{0:0.00} km", kmTotal);
lblRufGesamt.Text = String.Format("{0:0.00} Std.", rufTotal / 60);
lblNotGesamt.Text = String.Format("{0:0.00} Std.", notdienstTotal / 60);
}
private void BerechneGesamtsummen()
@@ -211,24 +228,24 @@ namespace BeWo.SeWo
duration = sr.RoundedDuration;
}
if (sr.ServiceDescription.ServiceCategory.Name == "SeWo Ruf" || sr.ServiceDescription.ServiceCategory.Name == "SeWo Notdienst")
{
var p = sr.ServiceDescription.ServiceCategory.Percentage;
if (p != 100 && p > 0)
{
duration *= (p / 100);
//if (sr.ServiceDescription.ServiceCategory.Name == "SeWo Ruf" || sr.ServiceDescription.ServiceCategory.Name == "SeWo Notdienst")
//{
// var p = sr.ServiceDescription.ServiceCategory.Percentage;
// if (p != 100 && p > 0)
// {
// duration *= (p / 100);
}
}
else
{
var p = sr.ServiceDescription.ServiceCategory.Percentage;
if (p != 100 && p > 0)
{
duration *= (p / 100);
// }
//}
//else
//{
// var p = sr.ServiceDescription.ServiceCategory.Percentage;
// if (p != 100 && p > 0)
// {
// duration *= (p / 100);
}
}
// }
//}
//var p = sr.ServiceDescription.ServiceCategory.Percentage;
//if (p != 100 && p > 0)
//{

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClrHeapAllocationAnalyzer" version="3.0.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="2.9.6" targetFramework="net472" developmentDependency="true" />
<package id="Microsoft.CodeAnalysis.Common" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.VisualBasic" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.VisualBasic.Workspaces" version="3.4.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="3.4.0" targetFramework="net472" />
<package id="System.Buffers" version="4.4.0" targetFramework="net472" />
<package id="System.Collections.Immutable" version="1.5.0" targetFramework="net472" />
<package id="System.Composition" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.AttributedModel" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Convention" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Hosting" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.Runtime" version="1.0.31" targetFramework="net472" />
<package id="System.Composition.TypedParts" version="1.0.31" targetFramework="net472" />
<package id="System.Memory" version="4.5.3" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net472" />
<package id="System.Reflection.Metadata" version="1.6.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
<package id="System.Text.Encoding.CodePages" version="4.5.1" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
</packages>

View File

@@ -17,35 +17,32 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.SchedulerAppointmentOid = pEntity.Oid;
pDataContract.NewSchedulerAppointmentVersion = pEntity.Version;
pDataContract.AllDay = pEntity.AllDay;
pDataContract.EndDate = pEntity.EndDate;
pDataContract.StartDate = pEntity.StartDate;
pDataContract.Status = pEntity.Status;
pDataContract.Subject = pEntity.Subject;
pDataContract.Type = pEntity.Type;
pDataContract.Location = pEntity.Location;
pDataContract.Description = pEntity.Notice;
pDataContract.AllDay = pEntity.AllDay;
pDataContract.EndDate = pEntity.EndDate;
pDataContract.StartDate = pEntity.StartDate;
pDataContract.Status = pEntity.Status;
pDataContract.Subject = pEntity.Subject;
pDataContract.Type = pEntity.Type;
pDataContract.Location = pEntity.Location;
pDataContract.Description = pEntity.Notice;
pDataContract.RecurrenceInfo = pEntity.RecurrenceInfo;
pDataContract.ReminderInfo = pEntity.ReminderInfo;
pDataContract.ReminderInfo = pEntity.ReminderInfo;
pDataContract.IsPrivate = pEntity.IsPrivate;
pDataContract.IsPrivate = pEntity.IsPrivate;
pDataContract.CustomerList = MapperFactory.CompactCustomerDC_Customer.MapToNewDCs(pEntity.CustomerList);
pDataContract.ResourceList = MapperFactory.ResourceDC_Resource.MapToNewDCs(pEntity.ResourceList);
pDataContract.EmployeeList = MapperFactory.Employee2SchedulerAppointmentDC_Employee2SchedulerAppointment.MapToNewDCs(pEntity.EmployeeList);
pDataContract.IsTask = pEntity.IsTask;
pDataContract.IsTask = pEntity.IsTask;
pDataContract.TaskDescription = pEntity.TaskDescription;
pDataContract.CompletedNotice = pEntity.CompletedNotice;
pDataContract.CompletedDate = pEntity.CompletedDate;
pDataContract.DueDate = pEntity.DueDate;
pDataContract.CompletedDate = pEntity.CompletedDate;
pDataContract.DueDate = pEntity.DueDate;
pDataContract.FormerBookingSequenceOid = pEntity.FormerBookingSequenceOid;
pDataContract.SupportConceptList = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(pEntity.SupportConceptList);
pDataContract.FormerTaskOid = pEntity.FormerTaskOid;
pDataContract.HasServiceRecordEntry = pEntity.HasServiceRecordEntry;
pDataContract.SupportConceptList = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(pEntity.SupportConceptList);
pDataContract.FormerTaskOid = pEntity.FormerTaskOid;
pDataContract.HasServiceRecordEntry = pEntity.HasServiceRecordEntry;
if (pEntity.Originator != null)
{
@@ -61,29 +58,25 @@ namespace BeWo.Service.DCEntityMapper
{
ConcurrencyCheck(pDataContract.NewSchedulerAppointmentVersion, pEntity);
pEntity.Oid = pDataContract.SchedulerAppointmentOid;
pEntity.Version = pDataContract.NewSchedulerAppointmentVersion;
pEntity.AllDay = pDataContract.AllDay;
pEntity.EndDate = pDataContract.EndDate;
pEntity.StartDate = pDataContract.StartDate;
pEntity.Status = pDataContract.Status;
pEntity.Subject = pDataContract.Subject;
pEntity.Type = pDataContract.Type;
pEntity.Location = pDataContract.Location;
pEntity.Notice = pDataContract.Description;
pEntity.RecurrenceInfo = pDataContract.RecurrenceInfo;
pEntity.ReminderInfo = pDataContract.ReminderInfo;
pEntity.Oid = pDataContract.SchedulerAppointmentOid;
pEntity.Version = pDataContract.NewSchedulerAppointmentVersion;
pEntity.AllDay = pDataContract.AllDay;
pEntity.EndDate = pDataContract.EndDate;
pEntity.StartDate = pDataContract.StartDate;
pEntity.Status = pDataContract.Status;
pEntity.Subject = pDataContract.Subject;
pEntity.Type = pDataContract.Type;
pEntity.Location = pDataContract.Location;
pEntity.Notice = pDataContract.Description;
pEntity.RecurrenceInfo = pDataContract.RecurrenceInfo;
pEntity.ReminderInfo = pDataContract.ReminderInfo;
pEntity.FormerBookingSequenceOid = pDataContract.FormerBookingSequenceOid;
pEntity.IsTask = pDataContract.IsTask;
pEntity.TaskDescription = pDataContract.TaskDescription;
pEntity.CompletedNotice = pDataContract.CompletedNotice;
pEntity.CompletedDate = pDataContract.CompletedDate;
pEntity.DueDate = pDataContract.DueDate;
pEntity.FormerTaskOid = pDataContract.FormerTaskOid;
pEntity.IsTask = pDataContract.IsTask;
pEntity.TaskDescription = pDataContract.TaskDescription;
pEntity.CompletedNotice = pDataContract.CompletedNotice;
pEntity.CompletedDate = pDataContract.CompletedDate;
pEntity.DueDate = pDataContract.DueDate;
pEntity.FormerTaskOid = pDataContract.FormerTaskOid;
if (pDataContract.Originator != null)
{
@@ -91,8 +84,7 @@ namespace BeWo.Service.DCEntityMapper
}
pEntity.IsPrivate = pDataContract.IsPrivate;
pEntity.HasServiceRecordEntry = pDataContract.HasServiceRecordEntry;
pEntity.HasServiceRecordEntry = pDataContract.HasServiceRecordEntry;
try
{

View File

@@ -33,7 +33,7 @@ namespace BeWo.Service.Plugins
//t = "1193188501"; // Aids Hilfe Dortmund
//t = "7860351957"; // SKF Alsdorf
//t = "3311520228"; // Die Düne
t = "1352143437"; // Sewo
//t = "1352143437"; // Sewo
//t = "7107514623"; // BeWo Neuss
//t = "9098141768"; // Fib e.V. Marburg
//t = "1505148718"; // VSD Hamm
@@ -84,7 +84,7 @@ namespace BeWo.Service.Plugins
//t = "4867997795"; // ADiK Kleve
//t = "3184859776"; // Sergej Becker
//t = "7752610643"; // BWK Gbr
//t = "3785623125"; // Betreuwo
t = "3785623125"; // Betreuwo
//t = "7130228334"; // LH Borken
//t = "4209820830"; // VKM Hamm
//t = "5700328131"; // Betreutes Wohnen St. Ludgerus Essen-Werden

View File

@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.ServiceModel;
using BS.Shared.Core;
using BS.Shared.DataContracts;
namespace BeWo.Service.ServiceContracts
@@ -224,5 +224,9 @@ namespace BeWo.Service.ServiceContracts
[FaultContract(typeof(BeWoFault))]
[OperationContract]
List<SchedulerAppointmentDC> LoadOccurrencesByRecurrenceId(string recurrenceId);
[FaultContract(typeof(BeWoFault))]
[OperationContract]
Dictionary<DateTime, List<DateTimeSpan>> FindAppointmentsInRange(int duration, DateTime startDate, DateTime endDate, List<long> resourceOids, List<long> customerOids, List<long> employeeOids, long loggedInEmployeeOid, int intervalBuffer = 30, bool skipWeekends = true);
}
}

View File

@@ -1662,6 +1662,8 @@ namespace BeWo.Service.ServiceImplementations
CustomerServiceImp.MakeNewPersonHistoryEntry(employee.Person, statementType);
MakeNewContractHistoryEntry(employee, statementType);
DAOFactory.GenericDAO.Insert(employeeHistory);
}
catch (Exception e)
@@ -2132,5 +2134,43 @@ namespace BeWo.Service.ServiceImplementations
throw Utils.CreateBeWoFaultException(ex);
}
}
public void MakeNewContractHistoryEntry(Employee employee, StatementType statementType)
{
foreach (var contract in employee.Contracts)
{
var historyEntry = new ContractHistory()
{
ContractHistoryCancellationPeriod = contract.CancellationPeriod,
ContractHistoryContractEndDate = contract.ContractEndDate,
ContractHistoryContractTypeValueListEntry = contract.ContractTypeValueListEntry,
ContractHistoryEmployeeOid = employee.Oid.Value,
ContractHistoryEmploymentType = contract.EmploymentType,
ContractHistoryEntryDate = contract.EntryDate,
ContractHistoryHourlyRate = contract.HourlyRate,
ContractHistoryHourlyRateCostRateValue = contract.HourlyRateCostRateValue,
ContractHistoryLeaveDays = contract.LeaveDays,
ContractHistoryMonthlyFLS = contract.MonthlyFLS,
ContractHistoryMonthlyTotalHours = contract.MonthlyTotalHours,
ContractHistoryProbationPeriod = contract.ProbationPeriod,
ContractHistoryProbationPeriod2 = contract.ProbationPeriod2,
ContractHistoryQualifikationsBedarfValueListEntry = contract.QualifikationsBedarfValueListEntry,
ContractHistoryWeeklyDays = contract.WeeklyDays,
ContractHistoryWeeklyFLS = contract.WeeklyFLS,
ContractHistoryWeeklyTotalHours = contract.WeeklyTotalHours,
IsActive = contract.IsActive,
Notice = contract.Notice,
InsTs = contract.InsTs,
InsUser = contract.InsUser,
SystemEntryID = contract.SystemEntryID,
Version = contract.Version,
UdpUser = employee.UdpUser,
UpdTs = employee.UpdTs,
ChangeType = statementType
};
DAOFactory.GenericDAO.Insert(historyEntry);
};
}
}
}

View File

@@ -18,6 +18,7 @@ using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using DevExpress.Utils;
using DevExpress.XtraScheduler;
using static System.String;
using Resource = BeWo.Data.Entities.Resource;
@@ -1190,7 +1191,7 @@ namespace BeWo.Service.ServiceImplementations
var result = FilterAppointments(all, pEmployeeOid, filteredEmployeeOids, pSelectedCustomer, pSelectedResources, pCustomersOnly, pResourcesOnly, pShowTasks);
//Check fehlerhaftes RecurrenceInfos
//Check fehlerhafte RecurrenceInfos
foreach(var app in result)
{
if(!IsNullOrEmpty(app.RecurrenceInfo))
@@ -2314,5 +2315,19 @@ namespace BeWo.Service.ServiceImplementations
throw Utils.CreateBeWoFaultException(e);
}
}
public Dictionary<DateTime, List<DateTimeSpan>> FindAppointmentsInRange(int duration, DateTime startDate, DateTime endDate, List<long> resourceOids, List<long> customerOids, List<long> employeeOids, long loggedInEmployeeOid, int intervalBuffer = 30, bool skipWeekends = true)
{
try
{
var intervals = DAOFactory.SearchDAO.FindAppointmentsInRange(duration, startDate, endDate, resourceOids, customerOids, employeeOids, loggedInEmployeeOid, intervalBuffer, skipWeekends);
return intervals;
}
catch (Exception e)
{
throw Utils.CreateBeWoFaultException(e);
}
}
}
}

View File

@@ -163,7 +163,8 @@ namespace BS.Shared
AbwesenheitsInformationPrint = 156,
SupportConceptHistory = 157,
Costbearer2SupportConceptHistory = 158,
SupportConceptApprovalPeriodHistory = 159
SupportConceptApprovalPeriodHistory = 159,
ContractHistory = 160,
}
public enum SystemEntryID

View File

@@ -184,6 +184,16 @@ namespace BS.Shared.Core
return new ArbeitszeitEintragDateTimeObject(start, end);
}
public static string GetTwoDateString(this DateTime date1, DateTime date2)
{
if (date1.Date.Equals(date2.Date))
{
return date2 > date1 ? $"{date1:dd.MM.yyyy HH:mm} - {date2:HH:mm}" : $"{date2:dd.MM.yyyy HH:mm} - {date1:HH:mm}";
}
return date2 > date1 ? $"{date1:dd.MM.yyyy HH:mm} - {date2:dd.MM.yyyy HH:mm}" : $"{date2:dd.MM.yyyy HH:mm} - {date1:dd.MM.yyyy HH:mm}";
}
}
public class AnzahlMonate

View File

@@ -100,5 +100,10 @@ namespace BS.Shared.Extensions
return result;
}
public static List<T> Clone<T>(this IList<T> list)
{
return list?.ToList() ?? new List<T>();
}
}
}