Diverse Bugfixes und Verbesserungen im MoK

Dateien Hochladen im MoK
This commit is contained in:
2024-09-12 14:55:35 +02:00
parent 40973edc22
commit 2ff705bfb0
48 changed files with 2388 additions and 890 deletions

View File

@@ -160,11 +160,12 @@
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Rectangle Fill="{StaticResource CustomerContentBrush}" Height="6" /> <Rectangle Fill="{StaticResource CustomerContentBrush}" Height="6" />
<TabControl x:Name="tabroot" Grid.Row="1" Style="{StaticResource ObjectEditTabControl}" BorderThickness="0,0,0,0" Padding="4,4,4,4"> <TabControl x:Name="tabroot" Grid.Row="1" Style="{StaticResource ObjectEditTabControl}" BorderThickness="0,0,0,0" Padding="4,4,4,4">
<TabItem Header="Details" IsSelected="True" Name="tabitem_details"> <!-- Details -->
<TabItem Header="Details" IsSelected="True" Name="tabitem_details">
<ScrollViewer VerticalScrollBarVisibility="Auto"> <ScrollViewer VerticalScrollBarVisibility="Auto">
<Grid x:Name="grid_details"> <Grid x:Name="grid_details">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -176,13 +177,12 @@
<RowDefinition Height="Auto" MinHeight="136" /> <RowDefinition Height="Auto" MinHeight="136" />
<RowDefinition Height="*" MinHeight="165" /> <RowDefinition Height="*" MinHeight="165" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- Eigenschaften -->
<GroupBox Grid.ColumnSpan="3" Header="Eigenschaften" Style="{StaticResource ObjectEditGroupBox}"> <GroupBox Grid.ColumnSpan="3" Header="Eigenschaften" Style="{StaticResource ObjectEditGroupBox}">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
@@ -201,18 +201,18 @@
<Label Grid.Column="0" Grid.Row="0" Content="Vorname" /> <Label Grid.Column="0" Grid.Row="0" Content="Vorname" />
<Label Grid.Column="0" Grid.Row="1" Content="Nachname" /> <Label Grid.Column="0" Grid.Row="1" Content="Nachname" />
<!--<Label x:Name="lblAktenzeichen" Grid.Column="0" Grid.Row="2" Content="Aktenzeichen" />--> <!--<Label x:Name="lblAktenzeichen" Grid.Column="0" Grid.Row="2" Content="Aktenzeichen" />-->
<Grid x:Name="panelDebitor" Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="2" > <Grid x:Name="panelDebitor" Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="2" >
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label x:Name="lblDebitorNumber" Content="Debitor Nr." /> <Label x:Name="lblDebitorNumber" Content="Debitor Nr." />
<TextBox x:Name="txtDebitorNumber" Grid.Column="1" Margin="7,3,3,3" Height="23" Text="{val:ValidationBinding Path=DebitorNumber, UpdateSourceTrigger=PropertyChanged}" /> <TextBox x:Name="txtDebitorNumber" Grid.Column="1" Margin="7,3,3,3" Height="23" Text="{val:ValidationBinding Path=DebitorNumber, UpdateSourceTrigger=PropertyChanged}" />
<Label x:Name="lblCostCenter" Grid.Column="2" Content="Kostenstelle" /> <Label x:Name="lblCostCenter" Grid.Column="2" Content="Kostenstelle" />
<TextBox x:Name="txtCostCenter" Grid.Column="3" Margin="7,3,3,3" Height="23" Text="{val:ValidationBinding Path=CostCenter, UpdateSourceTrigger=PropertyChanged}" /> <TextBox x:Name="txtCostCenter" Grid.Column="3" Margin="7,3,3,3" Height="23" Text="{val:ValidationBinding Path=CostCenter, UpdateSourceTrigger=PropertyChanged}" />
</Grid> </Grid>
<Label Grid.Column="0" Grid.Row="2" Content="Geburtstag" /> <Label Grid.Column="0" Grid.Row="2" Content="Geburtstag" />
<Label Grid.Column="0" Grid.Row="3" Content="Geschlecht" /> <Label Grid.Column="0" Grid.Row="3" Content="Geschlecht" />
@@ -222,8 +222,8 @@
<TextBox x:Name="textbox_first" Grid.Column="1" Grid.Row="0" Margin="3" Height="23" Text="{val:ValidationBinding Path=FirstName, UpdateSourceTrigger=PropertyChanged}" /> <TextBox x:Name="textbox_first" Grid.Column="1" Grid.Row="0" Margin="3" Height="23" Text="{val:ValidationBinding Path=FirstName, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Grid.Column="1" Grid.Row="1" Margin="3" Height="23" Text="{val:ValidationBinding Path=LastName, UpdateSourceTrigger=PropertyChanged}" /> <TextBox Grid.Column="1" Grid.Row="1" Margin="3" Height="23" Text="{val:ValidationBinding Path=LastName, UpdateSourceTrigger=PropertyChanged}" />
<dxe:DateEdit AllowNullInput="True" Grid.Column="1" Grid.Row="2" Height="23" Margin="3" EditValue="{Binding Path=DateOfBirth, UpdateSourceTrigger=PropertyChanged}" Width="100" HorizontalAlignment="Left"/> <dxe:DateEdit AllowNullInput="True" Grid.Column="1" Grid.Row="2" Height="23" Margin="3" EditValue="{Binding Path=DateOfBirth, UpdateSourceTrigger=PropertyChanged}" Width="100" HorizontalAlignment="Left"/>
<Grid Grid.Column="1" Grid.Row="3" Height="23" Margin="0,3,0,3"> <Grid Grid.Column="1" Grid.Row="3" Height="23" Margin="0,3,0,3">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="RB1" /> <ColumnDefinition Width="Auto" SharedSizeGroup="RB1" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
@@ -232,7 +232,7 @@
<RadioButton Grid.Column="1" Margin="3" VerticalAlignment="Center" HorizontalAlignment="Left" IsChecked="{Binding Path=IsFemale, UpdateSourceTrigger=PropertyChanged}" Content="weiblich" /> <RadioButton Grid.Column="1" Margin="3" VerticalAlignment="Center" HorizontalAlignment="Left" IsChecked="{Binding Path=IsFemale, UpdateSourceTrigger=PropertyChanged}" Content="weiblich" />
</Grid> </Grid>
<TextBox Grid.Column="3" Grid.Row="0" Margin="3" Height="23" Text="{Binding Path=Childs, UpdateSourceTrigger=PropertyChanged}" /> <TextBox Grid.Column="3" Grid.Row="0" Margin="3" Height="23" Text="{Binding Path=Childs, UpdateSourceTrigger=PropertyChanged}" />
<CheckBox x:Name="chkArchiviert" Grid.Column="3" Grid.Row="1" Margin="3" Height="23" IsChecked="{Binding Path=IsArchived, UpdateSourceTrigger=PropertyChanged}" /> <CheckBox x:Name="chkArchiviert" Grid.Column="3" Grid.Row="1" Margin="3" Height="23" IsChecked="{Binding Path=IsArchived, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Margin="3" Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="5" Text="{Binding Path=Notice, UpdateSourceTrigger=PropertyChanged}" Height="60" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Left" ScrollViewer.CanContentScroll="False" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" TextWrapping="Wrap" AcceptsReturn="True" AutoWordSelection="True" /> <TextBox Margin="3" Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="5" Text="{Binding Path=Notice, UpdateSourceTrigger=PropertyChanged}" Height="60" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Left" ScrollViewer.CanContentScroll="False" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" TextWrapping="Wrap" AcceptsReturn="True" AutoWordSelection="True" />
</Grid> </Grid>
</GroupBox> </GroupBox>
@@ -242,7 +242,8 @@
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<GroupBox Grid.Column="0" Margin="0 8 0 0" Header="Adresse" Style="{StaticResource ObjectEditGroupBox}"> <!-- Adresse -->
<GroupBox Grid.Column="0" Margin="0 8 0 0" Header="Adresse" Style="{StaticResource ObjectEditGroupBox}">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
@@ -263,8 +264,8 @@
<TextBox Grid.Column="1" Grid.Row="2" Margin="3" Height="23" Text="{Binding Path=Town, UpdateSourceTrigger=PropertyChanged}" /> <TextBox Grid.Column="1" Grid.Row="2" Margin="3" Height="23" Text="{Binding Path=Town, UpdateSourceTrigger=PropertyChanged}" />
</Grid> </Grid>
</GroupBox> </GroupBox>
<!-- Kontakt -->
<GroupBox Grid.Column="1" Header="Kontakt" Grid.ColumnSpan="2" Style="{StaticResource ObjectEditGroupBox}" Margin="8,8,0,0"> <GroupBox Grid.Column="1" Header="Kontakt" Grid.ColumnSpan="2" Style="{StaticResource ObjectEditGroupBox}" Margin="8,8,0,0">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
@@ -289,7 +290,8 @@
</Grid> </Grid>
</GroupBox> </GroupBox>
</Grid> </Grid>
<GroupBox Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" Header="Familie" Style="{StaticResource ObjectEditGroupBox}"> <!-- Familie -->
<GroupBox Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" Header="Familie" Style="{StaticResource ObjectEditGroupBox}">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
@@ -312,7 +314,8 @@
<TextBox Grid.Column="3" Grid.Row="1" Margin="3" Height="80" Text="{Binding Path=Vormund, UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap" AcceptsReturn="True" AutoWordSelection="True" /> <TextBox Grid.Column="3" Grid.Row="1" Margin="3" Height="80" Text="{Binding Path=Vormund, UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap" AcceptsReturn="True" AutoWordSelection="True" />
</Grid> </Grid>
</GroupBox> </GroupBox>
<Grid x:Name="grid_jugendamt" Grid.Row="3" Grid.ColumnSpan="3"> <!-- Jugendamt -->
<Grid x:Name="grid_jugendamt" Grid.Row="3" Grid.ColumnSpan="3" Grid.Column="0">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
@@ -350,17 +353,17 @@
</Grid> </Grid>
</ScrollViewer> </ScrollViewer>
</TabItem> </TabItem>
<TabItem Header="Dokumentation" Name="tabitem_notice"> <TabItem Header="Dokumentation" Name="tabitem_notice">
<GroupBox Header="Dokumentation" Style="{StaticResource ObjectEditGroupBox}"> <GroupBox Header="Dokumentation" Style="{StaticResource ObjectEditGroupBox}">
<TextBox Margin="3" Text="{Binding Path=Notice, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Left" ScrollViewer.CanContentScroll="False" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" TextWrapping="Wrap" AcceptsReturn="True" AutoWordSelection="True" /> <TextBox Margin="3" Text="{Binding Path=Notice, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Left" ScrollViewer.CanContentScroll="False" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" TextWrapping="Wrap" AcceptsReturn="True" AutoWordSelection="True" />
</GroupBox> </GroupBox>
</TabItem> </TabItem>
<TabItem Header="Weitere Eigenschaften" Name="tabitem_varFields"> <TabItem Header="Weitere Eigenschaften" Name="tabitem_varFields">
<ScrollViewer VerticalScrollBarVisibility="Auto"> <ScrollViewer VerticalScrollBarVisibility="Auto">
<localView:VarFieldView VarFieldList="{Binding VarFields}" /> <localView:VarFieldView VarFieldList="{Binding VarFields}" />
</ScrollViewer> </ScrollViewer>
</TabItem> </TabItem>
<TabItem Header="Aktenzeichen" Selector.Selected="TabItemCostBearer_Selected"> <TabItem Header="Aktenzeichen" Selector.Selected="TabItemCostBearer_Selected">
<Grid x:Name="grid_costBearerRel"> <Grid x:Name="grid_costBearerRel">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
@@ -505,7 +508,7 @@
</ScrollViewer> </ScrollViewer>
</TabItem> </TabItem>
<TabItem Header="Dokumente" Name="tabitem_documents" Selector.Selected="tabitem_documents_Selected" /> <TabItem Header="Dokumente" Name="tabitem_documents" Selector.Selected="tabitem_documents_Selected" />
<TabItem Header="Log" Name="tabitem_log" Selector.Selected="tabitem_log_Selected" /> <TabItem Header="Log" Name="tabitem_log" Selector.Selected="tabitem_log_Selected" />
</TabControl> </TabControl>
<Border Grid.Row="3" Grid.ColumnSpan="3" Height="40" Margin="0,10,0,0" VerticalAlignment="Stretch" Background="#FF000000"> <Border Grid.Row="3" Grid.ColumnSpan="3" Height="40" Margin="0,10,0,0" VerticalAlignment="Stretch" Background="#FF000000">
<Border.OpacityMask> <Border.OpacityMask>

View File

@@ -754,7 +754,7 @@ namespace BeWo.View.Detail.Report
}, },
rstr => this.Dispatch(delegate rstr => this.Dispatch(delegate
{ {
DataTable table = BS.Shared.Core.Utils.XMLDeserializeFromString<DataTable>(rstr); var table = Utils.XMLDeserializeFromString<DataTable>(rstr);
datagrid_result.ItemsSource = table; datagrid_result.ItemsSource = table;
SetOidColumnsInvisible(); SetOidColumnsInvisible();

View File

@@ -198,7 +198,6 @@
<Button Content="🠞" x:Name="TimeIntervalForwardsButton" Click="TimeIntervalForwardsButtonOnClick" /> <Button Content="🠞" x:Name="TimeIntervalForwardsButton" Click="TimeIntervalForwardsButtonOnClick" />
</StackPanel> </StackPanel>
<!-- ToDo: ServiceRecord-Icon einbauen -->
<ListBox Grid.Row="2" ScrollViewer.CanContentScroll="True" IsSynchronizedWithCurrentItem="True" x:Name="listboxTasks" <ListBox Grid.Row="2" ScrollViewer.CanContentScroll="True" IsSynchronizedWithCurrentItem="True" x:Name="listboxTasks"
Margin="0,3,0,0" Padding="0,0,0,0" Width="Auto" HorizontalAlignment="Stretch" MinWidth="0" Margin="0,3,0,0" Padding="0,0,0,0" Width="Auto" HorizontalAlignment="Stretch" MinWidth="0"
HorizontalContentAlignment="Stretch" Style="{DynamicResource HomeViewListStyle}" ItemContainerStyle="{DynamicResource HomeViewListBoxItemStyle}" HorizontalContentAlignment="Stretch" Style="{DynamicResource HomeViewListStyle}" ItemContainerStyle="{DynamicResource HomeViewListBoxItemStyle}"

View File

@@ -7,12 +7,10 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Security;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Documents; using System.Windows.Documents;
using System.Windows.Input; using System.Windows.Input;
@@ -35,15 +33,12 @@ using BS.Shared.Extensions;
using BS.Shared.RSS; using BS.Shared.RSS;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Windows.Markup; using System.Windows.Markup;
using System.Xml;
using BeWo.Annotations; using BeWo.Annotations;
using BeWo.ownChat; using BeWo.ownChat;
using BeWo.Scheduler.Utils; using BeWo.Scheduler.Utils;
using BeWo.Scheduler.View; using BeWo.Scheduler.View;
using BeWo.View.Master; using BeWo.View.Master;
using ChatController.HauptKlassen; using ChatController.HauptKlassen;
using DevExpress.Data.Helpers;
using DevExpress.Xpf.Docking.VisualElements;
using DevExpress.Xpf.DocumentViewer; using DevExpress.Xpf.DocumentViewer;
using DevExpress.Xpf.Printing; using DevExpress.Xpf.Printing;
using DevExpress.XtraScheduler; using DevExpress.XtraScheduler;
@@ -999,13 +994,13 @@ namespace BeWo.View
{ {
var test = 0; var test = 0;
while (BeWoApp.LoggedOnEmployee == null && test < 50) while(BeWoApp.LoggedOnEmployee == null && test < 50)
{ {
Thread.Sleep(100); Thread.Sleep(100);
test++; test++;
} }
if (BeWoApp.LoggedOnEmployee != null) if(BeWoApp.LoggedOnEmployee != null)
{ {
var rights = new List<UserRightType> { UserRightType.KalenderAnsehen }; var rights = new List<UserRightType> { UserRightType.KalenderAnsehen };

View File

@@ -352,6 +352,7 @@
<Content Include="Content\dx.light.css" /> <Content Include="Content\dx.light.css" />
<Content Include="Scripts\bootstrap\bootstrap.bundle.min.js" /> <Content Include="Scripts\bootstrap\bootstrap.bundle.min.js" />
<Content Include="Scripts\bootstrap\bootstrap4-modal-fullscreen.min.css" /> <Content Include="Scripts\bootstrap\bootstrap4-modal-fullscreen.min.css" />
<Content Include="Scripts\bs-custom-file-input.min.js" />
<Content Include="Scripts\devexpress-dependencies\ace\ace.min.js" /> <Content Include="Scripts\devexpress-dependencies\ace\ace.min.js" />
<Content Include="Scripts\devexpress-dependencies\cldr\cldr.min.js" /> <Content Include="Scripts\devexpress-dependencies\cldr\cldr.min.js" />
<Content Include="Scripts\devexpress-dependencies\cldr\event.min.js" /> <Content Include="Scripts\devexpress-dependencies\cldr\event.min.js" />

View File

@@ -114,6 +114,51 @@ textarea {
transition: none !important; transition: none !important;
} }
.wide-dropdown {
position: relative;
flex: 1 1 0%;
width: 100%;
}
.pointer-element {
cursor: pointer !important;
}
.no-focus-outline:focus {
outline: none !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
.file-description {
min-height: 50px !important;
overflow-y: scroll;
}
.no-selection {
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
.white-space-normal {
white-space: normal !important;
}
.dropdown-append {
flex: 1 0 0 !important;
display: flex !important;
}
.cursor-pointer {
cursor: pointer;
}
.dropdown-max-height {
max-height: 80vh !important;
overflow-y: auto !important;
}
/*! /*!
* Bootstrap v4.4.1 (https://getbootstrap.com/) * Bootstrap v4.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 The Bootstrap Authors

File diff suppressed because one or more lines are too long

View File

@@ -142,4 +142,49 @@ $font-family-sans-serif: 'Signika Negative', sans-serif;
transition: none !important; transition: none !important;
} }
.wide-dropdown {
position: relative;
flex: 1 1 0%;
width: 100%;
}
.pointer-element {
cursor: pointer !important;
}
.no-focus-outline:focus {
outline: none !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
.file-description {
min-height: 50px !important;
overflow-y: scroll;
}
.no-selection {
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
.white-space-normal {
white-space: normal !important;
}
.dropdown-append {
flex: 1 0 0 !important;
display: flex !important;
}
.cursor-pointer {
cursor: pointer;
}
.dropdown-max-height {
max-height: 80vh !important;
overflow-y: auto !important;
}
@import "bootstrap/scss/bootstrap"; @import "bootstrap/scss/bootstrap";

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.IO;
using System.Linq; using System.Linq;
using System.Web.Mvc; using System.Web.Mvc;
using BeWo.Report.DefaultReports; using BeWo.Report.DefaultReports;
@@ -106,20 +107,37 @@ namespace BeWoPlanerMobil.Controllers
private void LoadCustomerToModel(long? customerOid) private void LoadCustomerToModel(long? customerOid)
{ {
if(!(customerOid > 0) || !Model.Customers.Any(c => c.CustomerOid.Equals(customerOid.Value))) return; if(customerOid is null || (customerOid.Value > 0 && !Model.Customers.Any(c => c.CustomerOid.Equals(customerOid.Value))))
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, customerOid.Value);
Model.SelectedCustomerOid = customerOid;
var customer = CustomerService.LoadCustomer(customerOid.Value);
if(!(customer is null))
{ {
Model.ICD10Diagnosen = OperationsService.GetDiagiosisStringsForICD10Codes(customer.ICD10DiagnosisCodes); return;
} }
Model.SelectedCustomer = customer; if(customerOid == -1)
{
Model.SelectedCustomer = null;
Model.SelectedCustomerOid = null;
Model.FolderTree = null;
Model.ICD10Diagnosen = null;
Model.Bargeldkassen = new List<BargeldkassenDC>();
Model.BargeldtransaktionshistoryEntries = new List<BargeldtransaktionshistoryDC>();
Model.TransaktionsOid2HasHistoryEntries = new Dictionary<long, bool>();
Model.SelectedBargeldtransaktion = null;
}
else
{
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, customerOid.Value);
Model.SelectedCustomerOid = customerOid;
var customer = CustomerService.LoadCustomer(customerOid.Value);
ReloadBargeldkassen(); if(!(customer is null))
{
Model.ICD10Diagnosen = OperationsService.GetDiagiosisStringsForICD10Codes(customer.ICD10DiagnosisCodes);
}
Model.SelectedCustomer = customer;
ReloadBargeldkassen();
}
} }
[Authorize] [Authorize]
@@ -135,7 +153,7 @@ namespace BeWoPlanerMobil.Controllers
} }
var selectedCustomerOidString = formCollection[FormCollectionConstants.SelectedCustomerOidKey]; var selectedCustomerOidString = formCollection[FormCollectionConstants.SelectedCustomerOidKey];
if (long.TryParse(selectedCustomerOidString, out var selectedCustomerOid)) if(long.TryParse(selectedCustomerOidString, out var selectedCustomerOid))
{ {
LoadCustomerToModel(selectedCustomerOid); LoadCustomerToModel(selectedCustomerOid);
} }
@@ -172,20 +190,216 @@ namespace BeWoPlanerMobil.Controllers
return RedirectToActionPermanent("Customer"); return RedirectToActionPermanent("Customer");
} }
#region Dokumente
[Authorize]
public ActionResult SaveDescriptionChange(string descriptionText, long? fileOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn())
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(Model.SelectedCustomerOid is null || fileOid is null)
{
TempData[TempDataConstants.ErrorAlertPopupMessage] = "Es ist leider ein unbekannter Fehler aufgetreten.<br/><br/>Bitte kontaktieren Sie einen Administrator.";
return PartialView("DocumentPartial", Model);
}
var file = DownloadService.GetFileAttachmentForMobile(fileOid.Value, MobileSessionFacade.Tenant);
if(file != null)
{
file.Description = descriptionText;
OperationsService.UpdateFileAttachment(file);
}
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, Model.SelectedCustomerOid.Value);
return PartialView("DocumentPartial", Model);
}
[Authorize] [Authorize]
public FileResult DownloadFile(long fileOid) public FileResult DownloadFile(long fileOid)
{ {
if (Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer")) if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{ {
TempData[TempDataConstants.DoLogoutKey] = true; TempData[TempDataConstants.DoLogoutKey] = true;
return null; return null;
} }
var fileAttachment = DownloadService.GetFileAttachmentForMobile(fileOid, MobileSessionFacade.Tenant); var fileAttachment = DownloadService.GetFileAttachmentForMobile(fileOid, MobileSessionFacade.Tenant);
return File(fileAttachment.BinaryData, "application/octet-stream", fileAttachment.FileName); return File(fileAttachment.BinaryData, "application/octet-stream", fileAttachment.FileName);
} }
[Authorize]
public ActionResult DeleteFile(long? fileOid, long? fileVersion)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn())
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(fileOid is null || fileVersion is null || Model.SelectedCustomerOid is null)
{
return PartialView("DocumentPartial", Model);
}
OperationsService.DeleteFileAttachment(fileOid.Value, fileVersion.Value);
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, Model.SelectedCustomerOid.Value);
return PartialView("DocumentPartial", Model);
}
[Authorize]
[HttpPost]
public ActionResult UploadFile(FormCollection formCollection)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(Request.Files.Count > 0)
{
var folderOidAsString = formCollection["folder-oid-input"];
var description = formCollection["file-description-input"];
var folderOid = string.IsNullOrWhiteSpace(folderOidAsString) ? null : (long?) long.Parse(folderOidAsString);
var file = Request.Files[0];
if(file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
byte[] fileData;
using(var binaryReader = new BinaryReader(file.InputStream))
{
fileData = binaryReader.ReadBytes(file.ContentLength);
}
var fileAttachment = new FileAttachmentDC
{
BeWoFolderOid = folderOid,
Description = description,
FileName = fileName,
ObjectTid = TableID.Customer,
ObjectOid = Model.SelectedCustomerOid,
BinaryData = fileData,
FileAttachmentType = FileAttachmentType.NotSpecified,
InsertedBy = $"{Model.Employee.FirstName} {Model.Employee.LastName}",
InsertedOn = DateTime.Now
};
OperationsService.InsertFileAttachment(fileAttachment);
}
}
return RedirectToActionPermanent("Customer", new { id = Model.SelectedCustomerOid, model = Model });
}
[Authorize]
public ActionResult DeleteFolder(long? folderOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(folderOid is null)
{
return PartialView("DocumentPartial", Model);
}
var folder = OperationsService.GetFolderById(folderOid.Value);
if(folder?.BeWoFolderOid != null && folder.BeWoFolderVersion.HasValue && Model.SelectedCustomerOid.HasValue && folder.ObjectOid.Equals(Model.SelectedCustomerOid.Value) && folder.ObjectTid == TableID.Customer)
{
OperationsService.DeleteFolder(folder.BeWoFolderOid.Value, folder.BeWoFolderVersion.Value);
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, Model.SelectedCustomerOid.Value);
}
return PartialView("DocumentPartial", Model);
}
[Authorize]
public ActionResult RenameFolder(string newName, long folderOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(string.IsNullOrWhiteSpace(newName))
{
TempData[TempDataConstants.ErrorMessageKey] = "Ungültiger Name";
return PartialView("DocumentPartial", Model);
}
var folder2Rename = OperationsService.GetFolderById(folderOid);
if(folder2Rename != null && Model.SelectedCustomerOid.HasValue && folder2Rename.ObjectTid == TableID.Customer && folder2Rename.ObjectOid == Model.SelectedCustomerOid.Value)
{
folder2Rename.Name = newName;
OperationsService.UpdateFolder(folder2Rename);
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, Model.SelectedCustomerOid.Value);
}
return PartialView("DocumentPartial", Model);
}
[Authorize]
public ActionResult AddNewFolder(string folderName, long? parentFolderOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(Model.SelectedCustomerOid is null)
{
return PartialView("DocumentPartial", Model);
}
if(string.IsNullOrWhiteSpace(folderName))
{
folderName = "Neuer Ordner";
}
var folder = new BeWoFolderDC
{
Name = folderName,
ObjectTid = TableID.Customer,
ObjectOid = Model.SelectedCustomerOid,
ParentBeWoFolderOid = parentFolderOid
};
OperationsService.InsertNewFolder(folder);
Model.FolderTree = OperationsService.GetFolderTree(TableID.Customer, Model.SelectedCustomerOid.Value);
return PartialView("DocumentPartial", Model);
}
#endregion
[Authorize] [Authorize]
public string SaveEditedNotice(string newNotice) public string SaveEditedNotice(string newNotice)
{ {

View File

@@ -31,6 +31,11 @@ using GoalRating = BeWoPlanerMobil.Util.GoalRating;
using Image = System.Drawing.Image; using Image = System.Drawing.Image;
using ServiceRecordDC = BS.Shared.DataContracts.ServiceRecordDC; using ServiceRecordDC = BS.Shared.DataContracts.ServiceRecordDC;
/*
* ToDo für Montag, den 26.08.2024: Klickt man auf "bearbeiten" bei einem Eintrag, wird die Leistung nicht geladen
* ToDo: Hat man vor dem Anlegen einer Mehrfachbuchung einen Hilfeplan ausgewählt, wird der nicht richtig nach dem Anlegen geladen und die Intervallauswahl ist nicht sichtbar.
*/
namespace BeWoPlanerMobil.Controllers namespace BeWoPlanerMobil.Controllers
{ {
public class MainController : AbstractBaseController public class MainController : AbstractBaseController
@@ -127,6 +132,8 @@ namespace BeWoPlanerMobil.Controllers
} }
} }
Model.ShowBetrag = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowBetrag);
Model.ShowMarker = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowMarker); Model.ShowMarker = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowMarker);
} }
@@ -341,6 +348,32 @@ namespace BeWoPlanerMobil.Controllers
UserService.UpdateUserSettings(loggedInUser.UserOid.Value, userSettings); UserService.UpdateUserSettings(loggedInUser.UserOid.Value, userSettings);
} }
[HttpPost]
[Authorize]
public ActionResult SetShowExpiredSupportConcepts(FormCollection pCollection)
{
if(Model is null)
{
TempData[TempDataConstants.DoLogoutKey] = true;
return Logout();
}
var newValue = "true,false" == pCollection[FormCollectionConstants.ShowExpiredSupportConceptsKey];
Model.ShowExpiredSupportConcepts = newValue;
return UpdateApplicationSettings(SettingsKeys.ShowExpiredSupportConcepts, newValue ? "1" : "0");
}
[HttpPost]
public new ActionResult Logout()
{
return base.Logout();
}
#region Ziele und Maßnahmen
[Authorize] [Authorize]
public void LoadGoalRatings() public void LoadGoalRatings()
{ {
@@ -378,7 +411,7 @@ namespace BeWoPlanerMobil.Controllers
} }
var goal = allGoals.FirstOrDefault(g => g.ValueListEntryOid?.Equals(goalOid.Value) ?? false); var goal = allGoals.FirstOrDefault(g => g.ValueListEntryOid?.Equals(goalOid.Value) ?? false);
if(goal != null) if(goal != null)
{ {
if(!Model.SelectedGoals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == goal.ValueListEntryOid)) if(!Model.SelectedGoals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == goal.ValueListEntryOid))
@@ -432,29 +465,6 @@ namespace BeWoPlanerMobil.Controllers
} }
} }
[HttpPost]
[Authorize]
public ActionResult SetShowExpiredSupportConcepts(FormCollection pCollection)
{
if(Model is null)
{
TempData[TempDataConstants.DoLogoutKey] = true;
return Logout();
}
var newValue = "true,false" == pCollection[FormCollectionConstants.ShowExpiredSupportConceptsKey];
Model.ShowExpiredSupportConcepts = newValue;
return UpdateApplicationSettings(SettingsKeys.ShowExpiredSupportConcepts, newValue ? "1" : "0");
}
[HttpPost]
public new ActionResult Logout()
{
return base.Logout();
}
[Authorize] [Authorize]
public void LoadGoals() public void LoadGoals()
{ {
@@ -512,7 +522,7 @@ namespace BeWoPlanerMobil.Controllers
Log.Error(exception); Log.Error(exception);
} }
} }
private List<GoalTreeItem> BuildGoalTree(IReadOnlyCollection<ValueListEntryDC> goals) private List<GoalTreeItem> BuildGoalTree(IReadOnlyCollection<ValueListEntryDC> goals)
{ {
var ziele = goals.Where(w => Zieltypen.Contains(w.Type)).OrderBy(s => s.DisplayName).ToList(); var ziele = goals.Where(w => Zieltypen.Contains(w.Type)).OrderBy(s => s.DisplayName).ToList();
@@ -531,12 +541,12 @@ namespace BeWoPlanerMobil.Controllers
var treeItem = new GoalTreeItem(true, ziel.Type) var treeItem = new GoalTreeItem(true, ziel.Type)
{ {
Children = new List<GoalTreeItem>(), Children = new List<GoalTreeItem>(),
Header = ziel.DisplayName ?? string.Empty, Header = ziel.DisplayName ?? string.Empty,
ParentOid = ziel.ParentOid, ParentOid = ziel.ParentOid,
ValueListEntryOid = ziel.ValueListEntryOid ValueListEntryOid = ziel.ValueListEntryOid
}; };
goalTreeDic.Add(ziel.ValueListEntryOid.Value, treeItem); goalTreeDic.Add(ziel.ValueListEntryOid.Value, treeItem);
if(ziel.ParentOid is null) if(ziel.ParentOid is null)
@@ -572,10 +582,10 @@ namespace BeWoPlanerMobil.Controllers
var kind = new GoalTreeItem(false, ziel.Type) var kind = new GoalTreeItem(false, ziel.Type)
{ {
Children = new List<GoalTreeItem>(), Children = new List<GoalTreeItem>(),
Header = ziel.DisplayName ?? string.Empty, Header = ziel.DisplayName ?? string.Empty,
IsLeaf = true, IsLeaf = true,
ValueListEntryOid = ziel.ValueListEntryOid, ValueListEntryOid = ziel.ValueListEntryOid,
RatingName = ratingName, RatingName = ratingName,
ParentOid = ziel.ParentOid ParentOid = ziel.ParentOid
}; };
@@ -637,6 +647,8 @@ namespace BeWoPlanerMobil.Controllers
break; break;
} }
} }
#endregion
[Authorize] [Authorize]
public string LoadStatistics(long oid) public string LoadStatistics(long oid)
@@ -965,6 +977,13 @@ namespace BeWoPlanerMobil.Controllers
doku1 = collection[FormCollectionConstants.Dokumentation6Key]; doku1 = collection[FormCollectionConstants.Dokumentation6Key];
} }
decimal? betrag = null;
var betragAsString = collection[FormCollectionConstants.BetragKey]?.Replace('.', ',');
if(decimal.TryParse(betragAsString, out var betragAsDecimal))
{
betrag = betragAsDecimal;
}
Log.Info($"CreateOrUpdateServiceRecord: datum:{collection[FormCollectionConstants.DateKey]}; start:{collection[FormCollectionConstants.StartKey]}; ende:{collection[FormCollectionConstants.EndKey]}; dauer:{collection[FormCollectionConstants.DurationKey]}; doku:{doku1}; aktion:{(Model.IsInEditingMode ? "Speichern" : "Anlegen")}"); Log.Info($"CreateOrUpdateServiceRecord: datum:{collection[FormCollectionConstants.DateKey]}; start:{collection[FormCollectionConstants.StartKey]}; ende:{collection[FormCollectionConstants.EndKey]}; dauer:{collection[FormCollectionConstants.DurationKey]}; doku:{doku1}; aktion:{(Model.IsInEditingMode ? "Speichern" : "Anlegen")}");
if(string.IsNullOrEmpty(collection[FormCollectionConstants.DateKey])) if(string.IsNullOrEmpty(collection[FormCollectionConstants.DateKey]))
@@ -1063,7 +1082,7 @@ namespace BeWoPlanerMobil.Controllers
Model.NewServiceRecord.Goals = Model.SelectedGoals; Model.NewServiceRecord.Goals = Model.SelectedGoals;
Model.NewServiceRecord.Start = zeitenFeld[0]; Model.NewServiceRecord.Start = zeitenFeld[0];
Model.NewServiceRecord.End = zeitenFeld[1]; Model.NewServiceRecord.End = zeitenFeld[1];
Model.NewServiceRecord.Betrag = betrag;
Model.NewServiceRecord.ServiceRecordType = marker ? ServiceRecordTypeId.Content : ServiceRecordTypeId.DefaultActivity; Model.NewServiceRecord.ServiceRecordType = marker ? ServiceRecordTypeId.Content : ServiceRecordTypeId.DefaultActivity;
Model.NewServiceRecord.DistanceInMeter = null; Model.NewServiceRecord.DistanceInMeter = null;
@@ -1440,6 +1459,7 @@ namespace BeWoPlanerMobil.Controllers
item.GroupPersonCount = group.CustomerCount; item.GroupPersonCount = group.CustomerCount;
item.GroupOid = Model.NewServiceRecord.GroupOid; item.GroupOid = Model.NewServiceRecord.GroupOid;
item.GroupRoundedDuration = groupDuration; item.GroupRoundedDuration = groupDuration;
item.Betrag = Model.NewServiceRecord.Betrag;
if(item.CostBearer != null && item.CostBearer.CostBearerOid is null && item.SupportConcept != null && item.SupportConcept.CostBearerList.Count > 0) if(item.CostBearer != null && item.CostBearer.CostBearerOid is null && item.SupportConcept != null && item.SupportConcept.CostBearerList.Count > 0)
{ {
@@ -2047,6 +2067,54 @@ namespace BeWoPlanerMobil.Controllers
return RedirectToActionPermanent("Main"); return RedirectToActionPermanent("Main");
} }
[Authorize]
public ActionResult LoadServiceRecordsNonPost(int dayCountNumber, string start, string end, int month, int year, int recordsKey)
{
if(Model is null)
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("ServiceRecordListPartial");
}
var lastSelectedServiceRecordMonth = new DateTime(year, month, 1);
var isValidStart = DateTime.TryParse(start, out var parsedStart);
var isValidEnd = DateTime.TryParse(end, out var parsedEnd);
if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.ZeitraumWaehlen)
{
if(!isValidStart)
{
parsedStart = DateTime.Today.GetFirstOfMonth();
}
if(!isValidEnd)
{
parsedEnd = DateTime.Today;
}
if(parsedStart > parsedEnd)
{
(parsedStart, parsedEnd) = (parsedEnd, parsedStart);
}
Model.SelectedZeitraum = new NullableDateTimeSpan(parsedStart, parsedEnd);
}
var serviceRecordTimeInterval = (ServiceRecordTimeInterval) recordsKey;
Model.ServiceRecordTimeInterval = serviceRecordTimeInterval;
CalculateSelectedDayCount(dayCountNumber, lastSelectedServiceRecordMonth, parsedStart, parsedEnd, serviceRecordTimeInterval);
if(Model.CostBearer2SupportConceptOid.HasValue && Model.CostBearer2SupportConceptOid != -1)
{
LoadPaginatedServiceRecordsToModel(Model.CurrentPage);
}
return PartialView("ServiceRecordListPartial", Model);
}
private void CalculateSelectedDayCount(int? dayCountNumber, DateTime? lastSelectedServiceRecordMonth, DateTime? von, DateTime? bis, ServiceRecordTimeInterval? serviceRecordTimeInterval) private void CalculateSelectedDayCount(int? dayCountNumber, DateTime? lastSelectedServiceRecordMonth, DateTime? von, DateTime? bis, ServiceRecordTimeInterval? serviceRecordTimeInterval)
{ {
if(dayCountNumber is null) if(dayCountNumber is null)
@@ -2239,6 +2307,8 @@ namespace BeWoPlanerMobil.Controllers
var end = formCollection[FormCollectionConstants.EndKey]; var end = formCollection[FormCollectionConstants.EndKey];
var durationRaw = formCollection[FormCollectionConstants.DurationKey]; var durationRaw = formCollection[FormCollectionConstants.DurationKey];
var betragRaw = formCollection[FormCollectionConstants.BetragKey];
var distanceRaw = formCollection[FormCollectionConstants.DistanceKey]; var distanceRaw = formCollection[FormCollectionConstants.DistanceKey];
var doku1 = formCollection[FormCollectionConstants.Dokumentation1Key]?.RemoveUppercaseEsszett(); var doku1 = formCollection[FormCollectionConstants.Dokumentation1Key]?.RemoveUppercaseEsszett();
@@ -2295,6 +2365,11 @@ namespace BeWoPlanerMobil.Controllers
checkServiceRecord.Notice4 = doku4; checkServiceRecord.Notice4 = doku4;
checkServiceRecord.Notice5 = doku5; checkServiceRecord.Notice5 = doku5;
if(betragRaw != null && decimal.TryParse(betragRaw, out var betrag))
{
checkServiceRecord.Betrag = betrag;
}
checkServiceRecord.Goals = Model.SelectedGoals; checkServiceRecord.Goals = Model.SelectedGoals;
checkServiceRecord.Start = startDt; checkServiceRecord.Start = startDt;
@@ -2642,6 +2717,7 @@ namespace BeWoPlanerMobil.Controllers
[FormCollectionConstants.EndKey] = end, [FormCollectionConstants.EndKey] = end,
[FormCollectionConstants.DurationKey] = durationRaw, [FormCollectionConstants.DurationKey] = durationRaw,
[FormCollectionConstants.DistanceKey] = distanceRaw, [FormCollectionConstants.DistanceKey] = distanceRaw,
[FormCollectionConstants.BetragKey] = betragRaw,
[FormCollectionConstants.MarkerKey] = marker, [FormCollectionConstants.MarkerKey] = marker,
[FormCollectionConstants.ServiceDescriptionKey] = serviceDescription, [FormCollectionConstants.ServiceDescriptionKey] = serviceDescription,
[FormCollectionConstants.Dokumentation1Key] = doku1, [FormCollectionConstants.Dokumentation1Key] = doku1,
@@ -2767,7 +2843,7 @@ namespace BeWoPlanerMobil.Controllers
} }
Model.SelectedEmployee = Model.AllEmployees.First(f => f.EmployeeOid.Equals(employeeOid)); Model.SelectedEmployee = Model.AllEmployees.First(f => f.EmployeeOid.Equals(employeeOid));
return LeerzeichenFuerGetMethoden; return Model.SelectedEmployee?.DetailDescription ?? LeerzeichenFuerGetMethoden;
} }
catch(Exception e) catch(Exception e)
{ {
@@ -3393,6 +3469,13 @@ namespace BeWoPlanerMobil.Controllers
// Marker // Marker
var marker = "on" == formCollection[FormCollectionConstants.MarkerKey]; var marker = "on" == formCollection[FormCollectionConstants.MarkerKey];
decimal? betrag = null;
var betragAsString = formCollection[FormCollectionConstants.BetragKey]?.Replace('.', ',');
if(decimal.TryParse(betragAsString, out var betragAsDecimal))
{
betrag = betragAsDecimal;
}
// Distanz // Distanz
var distanz = formCollection[FormCollectionConstants.DistanceKey]; var distanz = formCollection[FormCollectionConstants.DistanceKey];
decimal? distanceInMeters = null; decimal? distanceInMeters = null;
@@ -3489,6 +3572,7 @@ namespace BeWoPlanerMobil.Controllers
Model.NewServiceRecord.Goals = Model.SelectedGoals; Model.NewServiceRecord.Goals = Model.SelectedGoals;
Model.NewServiceRecord.Start = zeitenFeld[0]; Model.NewServiceRecord.Start = zeitenFeld[0];
Model.NewServiceRecord.End = zeitenFeld[1]; Model.NewServiceRecord.End = zeitenFeld[1];
Model.NewServiceRecord.Betrag = betrag;
if(marker) if(marker)
{ {
@@ -4097,6 +4181,13 @@ namespace BeWoPlanerMobil.Controllers
var marker = "on" == formCollection[FormCollectionConstants.MarkerKey]; var marker = "on" == formCollection[FormCollectionConstants.MarkerKey];
decimal? betrag = null;
var betragAsString = formCollection[FormCollectionConstants.BetragKey]?.Replace('.', ',');
if(decimal.TryParse(betragAsString, out var betragAsDecimal))
{
betrag = betragAsDecimal;
}
var distanz = formCollection[FormCollectionConstants.DistanceKey]; var distanz = formCollection[FormCollectionConstants.DistanceKey];
decimal? distanceInMeters = null; decimal? distanceInMeters = null;
@@ -4213,7 +4304,8 @@ namespace BeWoPlanerMobil.Controllers
IsCreatedInMobileClient = true, IsCreatedInMobileClient = true,
Employee = employee, Employee = employee,
ServiceRecordFormat = ServiceRecordFormate.OriginaleZeiterfassung, ServiceRecordFormat = ServiceRecordFormate.OriginaleZeiterfassung,
ServiceDescription = OperationsService.GetServiceDescription(Model.SelectedServiceDescriptionOid.Value) ServiceDescription = OperationsService.GetServiceDescription(Model.SelectedServiceDescriptionOid.Value),
Betrag = betrag
}; };
if(marker) if(marker)
@@ -4373,21 +4465,22 @@ namespace BeWoPlanerMobil.Controllers
int totalServiceRecords; int totalServiceRecords;
var firstResult = (selectedPage - 1) * Model.MaxResults; var firstResult = (selectedPage - 1) * Model.MaxResults;
var selectedEmployeeOid = Model.SelectedEmployee?.EmployeeOid ?? Model.Employee.EmployeeOid.Value;
// Ohne Hilfeplan // Ohne Hilfeplan
if(Model.CostBearer2SupportConceptOid is null || Model.CostBearer2SupportConceptOid < 1) if(Model.CostBearer2SupportConceptOid is null || Model.CostBearer2SupportConceptOid < 1)
{ {
records = Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.ZeitraumWaehlen || Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.Monatsauswahl ? records = Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.ZeitraumWaehlen || Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.Monatsauswahl ?
//Zeitraum oder Monat gewählt //Zeitraum oder Monat gewählt
OperationsService.GetEmployeesServiceRecordsWithStartEndDatePaginated(Model.Employee.EmployeeOid.Value, Model.SelectedZeitraum.StartDate.Value, Model.SelectedZeitraum.EndDate.Value, firstResult, Model.MaxResults, out totalServiceRecords).ToList() : OperationsService.GetEmployeesServiceRecordsWithStartEndDatePaginated(selectedEmployeeOid, Model.SelectedZeitraum.StartDate.Value, Model.SelectedZeitraum.EndDate.Value, firstResult, Model.MaxResults, out totalServiceRecords).ToList() :
OperationsService.GetEmployeesServiceRecords2Paginated(Model.Employee.EmployeeOid.Value, selectedDayCount, firstResult, Model.MaxResults, out totalServiceRecords).ToList(); OperationsService.GetEmployeesServiceRecords2Paginated(selectedEmployeeOid, selectedDayCount, firstResult, Model.MaxResults, out totalServiceRecords).ToList();
} }
else else
{ {
records = Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.ZeitraumWaehlen || Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.Monatsauswahl ? records = Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.ZeitraumWaehlen || Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.Monatsauswahl ?
//Zeitraum oder Monat gewählt //Zeitraum oder Monat gewählt
OperationsService.GetCustomerServiceRecordsWithStartEndDatePaginated(Model.SelectedSupportConcept.Customer.CustomerOid, Model.CostBearer2SupportConceptOid.Value, Model.SelectedZeitraum.StartDate.Value, Model.SelectedZeitraum.EndDate.Value, firstResult, Model.MaxResults, out totalServiceRecords) : OperationsService.GetCustomerServiceRecordsWithStartEndDatePaginated(Model.SelectedSupportConcept.Customer.CustomerOid, Model.CostBearer2SupportConceptOid.Value, Model.SelectedZeitraum.StartDate.Value, Model.SelectedZeitraum.EndDate.Value, firstResult, Model.MaxResults, out totalServiceRecords) :
OperationsService.FindServiceRecordsForLastDaysPaginated(Model.CostBearer2SupportConceptOid, Model.SelectedDayCount, Model.Employee.EmployeeOid.Value, firstResult, Model.MaxResults, out totalServiceRecords).ToList(); OperationsService.FindServiceRecordsForLastDaysPaginated(Model.CostBearer2SupportConceptOid, Model.SelectedDayCount, Model.Employee?.EmployeeOid, firstResult, Model.MaxResults, out totalServiceRecords).ToList();
} }
var pages = Math.DivRem(totalServiceRecords, Model.MaxResults, out var remainder); var pages = Math.DivRem(totalServiceRecords, Model.MaxResults, out var remainder);
@@ -4508,7 +4601,7 @@ namespace BeWoPlanerMobil.Controllers
} }
#endregion #endregion
private string GetLocalIPAddress() private static string GetLocalIPAddress()
{ {
var host = Dns.GetHostEntry(Dns.GetHostName()); var host = Dns.GetHostEntry(Dns.GetHostName());
foreach(var ip in host.AddressList) foreach(var ip in host.AddressList)
@@ -4546,9 +4639,7 @@ namespace BeWoPlanerMobil.Controllers
if(long.TryParse(categoryOidStr, out var categoryOid)) if(long.TryParse(categoryOidStr, out var categoryOid))
{ {
Model.SelectedServiceCategory = Model.Categories2Descriptions.FirstOrDefault(f => f.Key?.ServiceCategoryOid != null && f.Key.ServiceCategoryOid.Value.Equals(categoryOid)).Key; Model.SelectedServiceCategory = Model.Categories2Descriptions.FirstOrDefault(f => f.Key?.ServiceCategoryOid != null && f.Key.ServiceCategoryOid.Value.Equals(categoryOid)).Key;
//Model.SelectedServiceCategoryOid = Model.SelectedServiceCategory?.ServiceCategoryOid;
Model.SelectedServiceDescription = null; Model.SelectedServiceDescription = null;
//Model.SelectedServiceDescriptionOid = null;
if(Model.SelectedServiceCategory is null) if(Model.SelectedServiceCategory is null)
{ {
@@ -4558,7 +4649,6 @@ namespace BeWoPlanerMobil.Controllers
var selectedServiceDescription = Model.Categories2Descriptions[Model.SelectedServiceCategory].OrderBy(sd => sd.Position).ThenBy(sd => sd.ServiceDescriptionOid).FirstOrDefault(); var selectedServiceDescription = Model.Categories2Descriptions[Model.SelectedServiceCategory].OrderBy(sd => sd.Position).ThenBy(sd => sd.ServiceDescriptionOid).FirstOrDefault();
Model.SelectedServiceDescription = selectedServiceDescription; Model.SelectedServiceDescription = selectedServiceDescription;
//Model.SelectedServiceDescriptionOid = selectedServiceDescription?.ServiceDescriptionOid;
} }
return PartialView("Category2ServiceDescriptionPartial", Model); return PartialView("Category2ServiceDescriptionPartial", Model);

View File

@@ -124,7 +124,7 @@ namespace BeWoPlanerMobil.Controllers
Model.ServiceCategories = OperationsService.GetAllServiceCategories(); Model.ServiceCategories = OperationsService.GetAllServiceCategories();
Model.Organisations = CustomerService.GetAllCostBearerCompact(); Model.Organisations = CustomerService.GetAllCostBearerCompact();
Model.Organisations.Sort((x, y) => x.Name.CompareTo(y.Name)); Model.Organisations.Sort((x, y) => string.Compare(x.Name, y.Name, StringComparison.CurrentCulture));
Model.AllTeams = EmployeeService.GetAllActiveCompactTeamsForEmployee(MobileSessionFacade.LoggedInEmployee.EmployeeOid); Model.AllTeams = EmployeeService.GetAllActiveCompactTeamsForEmployee(MobileSessionFacade.LoggedInEmployee.EmployeeOid);
} }
@@ -468,14 +468,27 @@ namespace BeWoPlanerMobil.Controllers
[Authorize] [Authorize]
public string SetCustomer(long customerOid) public string SetCustomer(long customerOid)
{ {
if(Model == null) if(Model is null)
{ {
return LeerzeichenFuerGetMethoden; return LeerzeichenFuerGetMethoden;
} }
Model.SelectedCustomer = Model.Customers.FirstOrDefault(customer => customer.CustomerOid == customerOid); Model.SelectedCustomer = Model.Customers.FirstOrDefault(customer => customer.CustomerOid == customerOid);
return LeerzeichenFuerGetMethoden; return Model.SelectedCustomer?.DetailDescription ?? "Klient";
}
[Authorize]
public string SetTeam(long teamOid)
{
if(Model is null)
{
return LeerzeichenFuerGetMethoden;
}
Model.SelectedTeam = Model.AllTeams.FirstOrDefault(team => team.TeamOid == teamOid);
return Model.SelectedTeam?.DetailDescription ?? string.Empty;
} }
[Authorize] [Authorize]
@@ -564,7 +577,7 @@ namespace BeWoPlanerMobil.Controllers
} }
Model.IsForSelectedCostbearersOnly = isForSelectedOrganisationOnly ?? false; Model.IsForSelectedCostbearersOnly = isForSelectedOrganisationOnly ?? false;
Model.SelectedOrganisation = organisationOid.HasValue ? Model.Organisations.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(organisationOid)) : null; Model.SelectedOrganisation = organisationOid.HasValue && Model.IsForSelectedCostbearersOnly ? Model.Organisations.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(organisationOid)) : null;
return LeerzeichenFuerGetMethoden; return LeerzeichenFuerGetMethoden;
} }
@@ -593,10 +606,8 @@ namespace BeWoPlanerMobil.Controllers
} }
Model.IsForSelectedCategoryOnly = isForSelectedServiceCategoryOnly ?? false; Model.IsForSelectedCategoryOnly = isForSelectedServiceCategoryOnly ?? false;
if(serviceCategoryOid.HasValue)
{ Model.SelectedServiceCategory = serviceCategoryOid.HasValue && Model.IsForSelectedCategoryOnly ? Model.ServiceCategories.FirstOrDefault(serviceCategory => serviceCategory.ServiceCategoryOid == serviceCategoryOid) : null;
Model.SelectedServiceCategory = Model.ServiceCategories.FirstOrDefault(serviceCategory => serviceCategory.ServiceCategoryOid == serviceCategoryOid);
}
return LeerzeichenFuerGetMethoden; return LeerzeichenFuerGetMethoden;
} }

View File

@@ -10,6 +10,7 @@ using BeWoPlanerMobil.Models;
using BeWoPlanerMobil.Service; using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util; using BeWoPlanerMobil.Util;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions; using BS.Shared.Extensions;
@@ -92,39 +93,71 @@ namespace BeWoPlanerMobil.Controllers
Text = "Berichte", Text = "Berichte",
Value = "0" Value = "0"
}); });
}
Model.AllEmployeesForQueries = EmployeeService.GetAllActiveEmployeesCompact(); Model.AllEmployeesForQueries = EmployeeService.GetAllActiveEmployeesCompact();
Model.AllCustomersForQueries = EmployeeService.GetActiveCompactCustomersForEmployee(null); Model.AllCustomersForQueries = EmployeeService.GetActiveCompactCustomersForEmployee(null);
Model.Queries = QueryService.GetAllQueriesOfType(QueryType.Public); Model.Queries = QueryService.GetAllQueriesOfType(QueryType.Public);
foreach(var query in Model.Queries.Where(q => q.Parameter?.Any() ?? false)) var names2ValueListEntryTypes = new Dictionary<string, ValueListEntryType>();
{
foreach(var parameter in query.Parameter.Where(p => p.ParamType == QueryParameterType.ValueListEntryType)) foreach(var query in Model.Queries.Where(q => q.Parameter?.Any() ?? false))
{ {
// ToDo: Hier am 05.08.2024 weitermachen! foreach(var parameter in query.Parameter.Where(p => p.ParamType == QueryParameterType.ValueListEntryType))
{
var parameterName = parameter.Name;
if(!(parameterName?.Contains("_") ?? false))
{
continue;
}
var name2Type = parameterName.Split('_');
var name = name2Type[0];
var type = name2Type[1];
if(!int.TryParse(type, out var typeEnumInt))
{
continue;
}
var valueListEntryType = (ValueListEntryType) typeEnumInt;
names2ValueListEntryTypes.AddIfNotIn(new KeyValuePair<string, ValueListEntryType>(name, valueListEntryType));
}
} }
}
if(Model.Employee?.EmployeeOid.HasValue ?? false) Model.AllValueListEntriesForQuery = ValueListService.GetAllValueListEntrysByTypes(names2ValueListEntryTypes.Values.ToList()).ToList();
{
Model.SupportConcepts = EmployeeService.GetActiveSupportConceptsForEmployee(Model.Employee.EmployeeOid, CustomerFilterEnum.All);
}
else
{
Model.SupportConcepts = new List<SupportConceptDC>();
}
Model.SupportConcepts.DoForEach(sc => Model.CostBearer2SupportConceptRels.AddRangeIfElementsNotIn(sc.CostBearerRelations)); Model.AllValueListEntriesForQuery.DoForEach(valueListEntry =>
{
Model.ValueListEntryTypes2ValueListEntries.AddOrUpdateValueInDictionary(valueListEntry.Type, valueListEntry);
});
if(Model.SelectedCostBearer2SupportConceptRelListObject is null) if(Model.Employee?.EmployeeOid.HasValue ?? false)
{ {
Model.SelectedCostBearer2SupportConceptRelListObject = Model.CostBearer2SupportConceptRelListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == "-1") ?? Model.CostBearer2SupportConceptRelListObjects.First(); Model.SupportConcepts = EmployeeService.GetActiveSupportConceptsForEmployee(Model.Employee.EmployeeOid, CustomerFilterEnum.All);
}
else
{
Model.SupportConcepts = new List<SupportConceptDC>();
}
Model.SupportConcepts.DoForEach(sc => Model.CostBearer2SupportConceptRels.AddRangeIfElementsNotIn(sc.CostBearerRelations));
if(Model.SelectedCostBearer2SupportConceptRelListObject is null)
{
Model.SelectedCostBearer2SupportConceptRelListObject = Model.CostBearer2SupportConceptRelListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == "-1") ?? Model.CostBearer2SupportConceptRelListObjects.First();
}
Model.AllOrganisationForQuery = CustomerService.GetAllActiveOrganisationsCompact();
Model.AllTeamsForQueries = EmployeeService.GetAllActiveCompactTeamsForEmployee(null);
Model.AllServiceCategoriesForQueries = OperationsService.GetAllServiceCategories();
} }
Model.AllOrganisationForQuery = CustomerService.GetAllActiveOrganisationsCompact();
Model.AllTeamsForQueries = EmployeeService.GetAllActiveCompactTeamsForEmployee(null);
#endif #endif
if(AbstractModel.HasRightToViewMitarbeiterstundenkonto) if(AbstractModel.HasRightToViewMitarbeiterstundenkonto)
@@ -135,6 +168,8 @@ namespace BeWoPlanerMobil.Controllers
Value = "1" Value = "1"
}); });
} }
#if !DEBUG #if !DEBUG
Model.SelectedReportType = ReportType.Mitarbeiterstundenkonto; Model.SelectedReportType = ReportType.Mitarbeiterstundenkonto;
#endif #endif
@@ -176,6 +211,8 @@ namespace BeWoPlanerMobil.Controllers
return PartialView("BeWoReportPartial", Model); return PartialView("BeWoReportPartial", Model);
} }
Model.SelectedCustomReport = Model.CustomReports.FirstOrDefault(cr => cr.QueryOid == selectedQuery.Oid);
Model.SelectedQuery = selectedQuery; Model.SelectedQuery = selectedQuery;
var dcid = $"{MobileSessionFacade.Tenant}queryeoid{Model.Employee.EmployeeOid.Value}"; var dcid = $"{MobileSessionFacade.Tenant}queryeoid{Model.Employee.EmployeeOid.Value}";
@@ -219,6 +256,13 @@ namespace BeWoPlanerMobil.Controllers
var selectedQuery = Model.Queries.FirstOrDefault(query => query.Oid.Equals(reportOid.Value)); var selectedQuery = Model.Queries.FirstOrDefault(query => query.Oid.Equals(reportOid.Value));
if(selectedQuery is null)
{
return PartialView("BerichteFormPartialView", Model);
}
Model.SelectedCustomReport = Model.CustomReports.FirstOrDefault(cr => cr.QueryOid == selectedQuery.Oid);
Model.SelectedQuery = selectedQuery; Model.SelectedQuery = selectedQuery;
foreach(var parameter in selectedQuery?.Parameter ?? new List<QueryParamDC>()) foreach(var parameter in selectedQuery?.Parameter ?? new List<QueryParamDC>())
@@ -483,7 +527,6 @@ namespace BeWoPlanerMobil.Controllers
return PartialView("BerichteFormPartialView", Model); return PartialView("BerichteFormPartialView", Model);
} }
// ToDo: Was bei Datumsangaben etc. machen? -> String
[Authorize] [Authorize]
public ActionResult SelectQueryParameter(long? objectOid, int parameterType, long? parameterOid, string textValue) public ActionResult SelectQueryParameter(long? objectOid, int parameterType, long? parameterOid, string textValue)
{ {
@@ -493,20 +536,32 @@ namespace BeWoPlanerMobil.Controllers
return PartialView("BerichteFormPartialView"); return PartialView("BerichteFormPartialView");
} }
if(objectOid.HasValue && parameterOid.HasValue) if((objectOid.HasValue || textValue != null) && parameterOid.HasValue)
{ {
var queryParameterType = (QueryParameterType)parameterType; var queryParameterType = (QueryParameterType)parameterType;
switch(queryParameterType) switch(queryParameterType)
{ {
case QueryParameterType.Custom: case QueryParameterType.Custom:
throw new NotImplementedException("Der QueryParameterType.Custom wird noch nicht unterstützt!"); throw new NotImplementedException("Dieser Parametertyp wird noch nicht unterstützt!");
break; break;
case QueryParameterType.Customer: case QueryParameterType.Customer:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
break;
}
var selectedCustomer = Model.AllCustomersForQueries.FirstOrDefault(customer => customer.CustomerOid.Equals(objectOid.Value)); var selectedCustomer = Model.AllCustomersForQueries.FirstOrDefault(customer => customer.CustomerOid.Equals(objectOid.Value));
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedCustomer)); Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedCustomer));
break; break;
case QueryParameterType.Employee: case QueryParameterType.Employee:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
break;
}
var selectedEmployee = Model.AllEmployeesForQueries.FirstOrDefault(employee => employee.EmployeeOid.Equals(objectOid.Value)); var selectedEmployee = Model.AllEmployeesForQueries.FirstOrDefault(employee => employee.EmployeeOid.Equals(objectOid.Value));
if(selectedEmployee != null) if(selectedEmployee != null)
{ {
@@ -514,6 +569,12 @@ namespace BeWoPlanerMobil.Controllers
} }
break; break;
case QueryParameterType.Organisation: case QueryParameterType.Organisation:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
break;
}
var selectedOrganisation = Model.AllOrganisationForQuery.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(objectOid.Value)); var selectedOrganisation = Model.AllOrganisationForQuery.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(objectOid.Value));
if(selectedOrganisation != null) if(selectedOrganisation != null)
@@ -522,14 +583,65 @@ namespace BeWoPlanerMobil.Controllers
} }
break; break;
case QueryParameterType.Text: case QueryParameterType.Text:
if(false == string.IsNullOrEmpty(textValue))
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, textValue));
}
else
{
Model.SelectedValues.Remove(parameterOid.Value);
}
break; break;
case QueryParameterType.Date: case QueryParameterType.Date:
if(textValue != null && DateTime.TryParse(textValue, out var selectedDate))
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedDate));
}
else
{
Model.SelectedValues.Remove(parameterOid.Value);
}
break; break;
case QueryParameterType.DateRange: case QueryParameterType.DateRange:
if(textValue != null && textValue.Length == 21 &&textValue.Contains("_"))
{
var split = textValue.Split('_');
if(DateTime.TryParse(split[0], out var start) && DateTime.TryParse(split[1], out var end))
{
var dateRange = new DateTimeSpan(start, end);
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, dateRange));
}
}
else
{
Model.SelectedValues.Remove(parameterOid.Value);
}
break; break;
case QueryParameterType.Month: case QueryParameterType.Month:
if(!textValue.Contains("_"))
{
break;
}
var month2Year = textValue.Split('_');
var monthAsString = month2Year[0];
var yearAsString = month2Year[1];
if(int.TryParse(monthAsString, out var month) && month > 0 && month < 13 && int.TryParse(yearAsString, out var year) && Model.Years.Any(listItem => listItem.Value.Equals(yearAsString)))
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, new DateTime(year, month, 1)));
}
break; break;
case QueryParameterType.ServiceCategory: case QueryParameterType.ServiceCategory:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
break;
}
var selectedServiceCategory = Model.AllServiceCategoriesForQueries.FirstOrDefault(serviceCategory => serviceCategory.ServiceCategoryOid.HasValue && serviceCategory.ServiceCategoryOid.Value.Equals(objectOid)); var selectedServiceCategory = Model.AllServiceCategoriesForQueries.FirstOrDefault(serviceCategory => serviceCategory.ServiceCategoryOid.HasValue && serviceCategory.ServiceCategoryOid.Value.Equals(objectOid));
if(selectedServiceCategory != null) if(selectedServiceCategory != null)
@@ -540,12 +652,26 @@ namespace BeWoPlanerMobil.Controllers
case QueryParameterType.SupportConcept: case QueryParameterType.SupportConcept:
var costBearer2SupportConceptRelListObj = Model.CostBearer2SupportConceptRelListObjects.FirstOrDefault(costBearer2SupportConceptRelListObject => costBearer2SupportConceptRelListObject.CostBearer2SupportConceptOid.Equals(objectOid.ToString())); var costBearer2SupportConceptRelListObj = Model.CostBearer2SupportConceptRelListObjects.FirstOrDefault(costBearer2SupportConceptRelListObject => costBearer2SupportConceptRelListObject.CostBearer2SupportConceptOid.Equals(objectOid.ToString()));
Model.SelectedCostBearer2SupportConceptRelListObject = costBearer2SupportConceptRelListObj;
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
break;
}
if(costBearer2SupportConceptRelListObj != null) if(costBearer2SupportConceptRelListObj != null)
{ {
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, costBearer2SupportConceptRelListObj)); Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, costBearer2SupportConceptRelListObj));
} }
break; break;
case QueryParameterType.Team: case QueryParameterType.Team:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
break;
}
var selectedTeam = Model.AllTeamsForQueries.FirstOrDefault(team => team.TeamOid.Equals(objectOid.Value)); var selectedTeam = Model.AllTeamsForQueries.FirstOrDefault(team => team.TeamOid.Equals(objectOid.Value));
if(selectedTeam != null) if(selectedTeam != null)
@@ -554,6 +680,12 @@ namespace BeWoPlanerMobil.Controllers
} }
break; break;
case QueryParameterType.ValueListEntryType: case QueryParameterType.ValueListEntryType:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
break;
}
var selectedValueListEntry = Model.AllValueListEntriesForQuery.FirstOrDefault(valueListEntry => valueListEntry.ValueListEntryOid?.Equals(objectOid.Value) ?? false); var selectedValueListEntry = Model.AllValueListEntriesForQuery.FirstOrDefault(valueListEntry => valueListEntry.ValueListEntryOid?.Equals(objectOid.Value) ?? false);
if(selectedValueListEntry != null) if(selectedValueListEntry != null)
@@ -568,5 +700,51 @@ namespace BeWoPlanerMobil.Controllers
return PartialView("BerichteFormPartialView", Model); return PartialView("BerichteFormPartialView", Model);
} }
[Authorize]
public ActionResult ExecuteQuery()
{
if(Model?.Employee?.EmployeeOid is null)
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("BeWoReportPartial");
}
var query = Model.SelectedQuery;
var paramList = new List<QueryParamDC>();
foreach(var item in query.Parameter)
{
var param = new QueryParamDC();
paramList.Add(param);
param.Name = item.Name;
param.ParamType = item.ParamType;
if(item.QueryParameterOid.HasValue && Model.SelectedValues.ContainsKey(item.QueryParameterOid.Value))
{
param.Value = Model.SelectedValues[item.QueryParameterOid.Value].Parameter;
}
}
var dcid = $"{MobileSessionFacade.Tenant}queryeoid{Model.Employee.EmployeeOid.Value}";
var queryResult = QueryService.ExecuteQuery(query.Oid, paramList);
if(queryResult is null)
{
return PartialView("BeWoReportPartial", Model);
}
QueryService.PrepareQueryReport(queryResult, dcid);
var queryReport = Model.ReportCreator.CreateQueryReport(query.Oid, dcid);
Model.Report = queryReport;
Model.ReportName = query.Title;
return PartialView("BeWoReportPartial", Model);
}
} }
} }

View File

@@ -83,22 +83,7 @@ namespace BeWoPlanerMobil.Models
} }
} }
public static bool IsAllowedToSeeCustomerFilter public static bool IsAllowedToSeeCustomerFilter => MobileSessionFacade.LoggedInUser?.CheckForAtLeastOneRight(new List<UserRightType> { UserRightType.ViewAll, UserRightType.CustomerView_View, UserRightType.Customer_ViewMyTeams }) ?? false;
{
get
{
var user = MobileSessionFacade.LoggedInUser;
if(user != null)
{
return
user.CheckForRight(UserRightType.ViewAll) ||
user.CheckForRight(UserRightType.Customer_ViewMyTeams);
}
return false;
}
}
public static bool IsAllowedToSeeMedikamentenliste public static bool IsAllowedToSeeMedikamentenliste
{ {

View File

@@ -1,5 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Web.Mvc; using System.Web.Mvc;
@@ -27,7 +26,7 @@ namespace BeWoPlanerMobil.Models
{ {
get get
{ {
var result = new List<SelectListItem> { new SelectListItem { Value = "-1", Text = string.Empty } }; var result = new List<SelectListItem> { new SelectListItem { Value = "-1", Text = "&nbsp;" } };
result.AddRange(Customers.Select(item => new SelectListItem { Value = item.CustomerOid.ToString(), Text = item.SimpleDescription }).ToList()); result.AddRange(Customers.Select(item => new SelectListItem { Value = item.CustomerOid.ToString(), Text = item.SimpleDescription }).ToList());
return result; return result;

View File

@@ -754,6 +754,8 @@ namespace BeWoPlanerMobil.Models
return SelectedServiceDescription; return SelectedServiceDescription;
} }
public bool ShowBetrag { get; set; }
} }
public class CustomSelectListItem public class CustomSelectListItem

View File

@@ -7,7 +7,7 @@ using BeWo.Report;
using BS.Shared; using BS.Shared;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;
using DevExpress.XtraRichEdit.Import.Html; using BS.Shared.Extensions;
namespace BeWoPlanerMobil.Models namespace BeWoPlanerMobil.Models
{ {
@@ -68,25 +68,25 @@ namespace BeWoPlanerMobil.Models
[Display(Name = "Bericht")] [Display(Name = "Bericht")]
public long? SelectedCustomReport { get; set; } public ReportSelectListItem SelectedCustomReport { get; set; }
public List<SelectListItem> CustomReports public List<ReportSelectListItem> CustomReports
{ {
get get
{ {
var result = new List<SelectListItem>(); var result = new List<ReportSelectListItem>();
if(Queries is null) if(Queries is null)
{ {
return result; return result;
} }
result.Add(new SelectListItem { Text = "", Value = "0_0" }); result.Add(new ReportSelectListItem(0, false) { Text = string.Empty, Value = "0_0" });
foreach(var query in Queries) foreach(var query in Queries)
{ {
var hasParameters = query.Parameter != null && query.Parameter.Count > 0; var hasParameters = query.Parameter != null && query.Parameter.Count > 0;
result.Add(new SelectListItem { Text = query.Title, Value = $"{query.Oid}_{(hasParameters ? "1" : "0")}" }); result.Add(new ReportSelectListItem(query.Oid, hasParameters) { Text = query.Title, Value = $"{query.Oid}_{(hasParameters ? "1" : "0")}" });
} }
return result; return result;
@@ -163,7 +163,7 @@ namespace BeWoPlanerMobil.Models
{ {
get get
{ {
var allCostBearerRelations = new List<CostBearer2SupportConceptRelListObject> { new CostBearer2SupportConceptRelListObject("Hilfeplan auswählen", "", "-1", false, false), new CostBearer2SupportConceptRelListObject("Ohne Hilfeplan", "", "-2", false, false) }; var allCostBearerRelations = new List<CostBearer2SupportConceptRelListObject> { new CostBearer2SupportConceptRelListObject("Hilfeplan auswählen", "", "0", false, false) };
foreach(var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) foreach(var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName))
{ {
allCostBearerRelations.AddRange(sc.CostBearerRelations.Select( allCostBearerRelations.AddRange(sc.CostBearerRelations.Select(
@@ -198,6 +198,24 @@ namespace BeWoPlanerMobil.Models
public Dictionary<ValueListEntryType, List<ValueListEntryDC>> ValueListEntryTypes2ValueListEntries { get; set; } = new Dictionary<ValueListEntryType, List<ValueListEntryDC>>(); public Dictionary<ValueListEntryType, List<ValueListEntryDC>> ValueListEntryTypes2ValueListEntries { get; set; } = new Dictionary<ValueListEntryType, List<ValueListEntryDC>>();
public List<SupportConceptCostBearerRelDC> CostBearer2SupportConceptRels { get; set; } = new List<SupportConceptCostBearerRelDC>(); public List<SupportConceptCostBearerRelDC> CostBearer2SupportConceptRels { get; set; } = new List<SupportConceptCostBearerRelDC>();
public ValueListEntryType GetValueListEntryTypeByQueryParameter(string parameterName)
{
foreach(var query in Queries.Where(q => q.Parameter.Any()))
{
var parameter = query.Parameter.FirstOrDefault(param => param.Name?.Equals(parameterName) ?? false);
if((parameter?.Name.Equals(parameterName) ?? false) && parameter.Name.Contains("_"))
{
if(int.TryParse(parameter.Name.Split('_')[1], out var typeAsInt))
{
return (ValueListEntryType)typeAsInt;
}
}
}
return ValueListEntryType.EmploymentType;
}
} }
public struct SelectedValue public struct SelectedValue
@@ -212,6 +230,18 @@ namespace BeWoPlanerMobil.Models
} }
} }
public class ReportSelectListItem : SelectListItem
{
public long? QueryOid { get; set; }
public bool HasParameters { get; set; }
public ReportSelectListItem(long? queryOid, bool hasParameters)
{
QueryOid = queryOid;
HasParameters = hasParameters;
}
}
public enum ReportType public enum ReportType
{ {
Berichte = 0, Berichte = 0,

View File

@@ -0,0 +1,7 @@
/*!
* bsCustomFileInput v1.3.4 (https://github.com/Johann-S/bs-custom-file-input)
* Copyright 2018 - 2020 Johann-S <johann.servoire@gmail.com>
* Licensed under MIT (https://github.com/Johann-S/bs-custom-file-input/blob/master/LICENSE)
*/
!function (e, t) {"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = e || self).bsCustomFileInput = t()}(this, function () {"use strict"; var s = {CUSTOMFILE: '.custom-file input[type="file"]', CUSTOMFILELABEL: ".custom-file-label", FORM: "form", INPUT: "input"}, l = function (e) {if(0 < e.childNodes.length) for(var t = [].slice.call(e.childNodes), n = 0; n < t.length; n++) {var l = t[n]; if(3 !== l.nodeType) return l} return e}, u = function (e) {var t = e.bsCustomFileInput.defaultText, n = e.parentNode.querySelector(s.CUSTOMFILELABEL); n && (l(n).textContent = t)}, n = !!window.File, r = function (e) {if(e.hasAttribute("multiple") && n) return [].slice.call(e.files).map(function (e) {return e.name}).join(", "); if(-1 === e.value.indexOf("fakepath")) return e.value; var t = e.value.split("\\"); return t[t.length - 1]}; function d() {var e = this.parentNode.querySelector(s.CUSTOMFILELABEL); if(e) {var t = l(e), n = r(this); n.length ? t.textContent = n : u(this)} } function v() {for(var e = [].slice.call(this.querySelectorAll(s.INPUT)).filter(function (e) {return !!e.bsCustomFileInput}), t = 0, n = e.length; t < n; t++)u(e[t])} var p = "bsCustomFileInput", m = "reset", h = "change"; return {init: function (e, t) {void 0 === e && (e = s.CUSTOMFILE), void 0 === t && (t = s.FORM); for(var n, l, r = [].slice.call(document.querySelectorAll(e)), i = [].slice.call(document.querySelectorAll(t)), o = 0, u = r.length; o < u; o++) {var c = r[o]; Object.defineProperty(c, p, {value: {defaultText: (n = void 0, n = "", (l = c.parentNode.querySelector(s.CUSTOMFILELABEL)) && (n = l.textContent), n)}, writable: !0}), d.call(c), c.addEventListener(h, d)} for(var f = 0, a = i.length; f < a; f++)i[f].addEventListener(m, v), Object.defineProperty(i[f], p, {value: !0, writable: !0})}, destroy: function () {for(var e = [].slice.call(document.querySelectorAll(s.FORM)).filter(function (e) {return !!e.bsCustomFileInput}), t = [].slice.call(document.querySelectorAll(s.INPUT)).filter(function (e) {return !!e.bsCustomFileInput}), n = 0, l = t.length; n < l; n++) {var r = t[n]; u(r), r[p] = void 0, r.removeEventListener(h, d)} for(var i = 0, o = e.length; i < o; i++)e[i].removeEventListener(m, v), e[i][p] = void 0}}});
//# sourceMappingURL=bs-custom-file-input.min.js.map

View File

@@ -115,23 +115,6 @@ function submitForm(submitButton) {
submitButton.form.submit(); submitButton.form.submit();
} }
//function showMessagePopupWithHtml(title, html) {
// $("#popupTitle").text(title);
// if(html !== null) {
// $("#modal-body").html("<p id=\"popupMessage\"></p>");
// }
// $("#popupMessage").html(html);
// $("#messagePopup").modal(
// {
// backdrop: "static",
// keyboard: false
// }
// );
//}
function hasEmptyRequiredFields(form) { function hasEmptyRequiredFields(form) {
var count = 0; var count = 0;
@@ -184,7 +167,7 @@ function cloneCanvas(oldCanvas) {
function showAlertMessageBoxWithoutCallback(title, message) { function showAlertMessageBoxWithoutCallback(title, message) {
$("#popupTitle").text(title); $("#popupTitle").text(title);
$("#messagePopup .modal-body").html('<div class="alert alert-danger" role="alert">' + message + "</div>"); $("#messagePopup .modal-body").html(`<div class="row"><div class="col-auto"><span class="fas fa-exclamation-triangle fa-3x text-alert"></span></div><div class="col">${message}</div></div>`);
$("#popupMessage").text(message); $("#popupMessage").text(message);
@@ -202,7 +185,7 @@ function showAlertMessageBoxWithoutCallback(title, message) {
function showAlertMessageBox(title, message, callback, executeCallbackByBothButtons) { function showAlertMessageBox(title, message, callback, executeCallbackByBothButtons) {
$("#popupTitle").text(title); $("#popupTitle").text(title);
$("#messagePopup .modal-body").html('<div class="alert alert-danger" role="alert">' + message + "</div>"); $("#messagePopup .modal-body").html(`<div class="row"><div class="col-auto"><span class="fas fa-exclamation-triangle fa-3x text-danger"></span></div><div class="col">${message}</div></div>`);
$("#popupMessage").text(message); $("#popupMessage").text(message);
@@ -230,7 +213,7 @@ function showAlertMessageBox(title, message, callback, executeCallbackByBothButt
function showWarningMessageBox(title, message, callback, executeCallbackByBothButtons) { function showWarningMessageBox(title, message, callback, executeCallbackByBothButtons) {
$("#popupTitle").text(title); $("#popupTitle").text(title);
$("#messagePopup .modal-body").html('<div class="alert alert-warning" role="alert">' + message + "</div>"); $("#messagePopup .modal-body").html(`<div class="row"><div class="col-auto"><span class="fas fa-exclamation-triangle fa-3x text-warning"></span></div><div class="col">${message}</div></div>`);
$("#popupMessage").text(message); $("#popupMessage").text(message);
@@ -293,19 +276,10 @@ function cardHeaderClick2(element, callback) {
var chevronDown = $(element).find(".fa-chevron-down"); var chevronDown = $(element).find(".fa-chevron-down");
var chevronUp = $(element).find(".fa-chevron-up"); var chevronUp = $(element).find(".fa-chevron-up");
//if(chevronDown.length) { chevronDown.removeClass("fa-chevron-down").addClass("fa-chevron-up");
chevronDown.removeClass("fa-chevron-down").addClass("fa-chevron-up");
//chevronDown.addClass("fa-chevron-up");
//}
//if(chevronUp.length) {
chevronUp.removeClass("fa-chevron-up").addClass("fa-chevron-down"); chevronUp.removeClass("fa-chevron-up").addClass("fa-chevron-down");
//}
//logInfo(`${chevronDown.attr("class")}`);
//$(element).find(".fa-chevron-down,.fa-chevron-up").toggleClass("fa-chevron-down").toggleClass("fa-chevron-up");
$(element).next(".collapse").toggle(); $(element).next(".collapse").toggle();
if(typeof callback === "function") { if(typeof callback === "function") {
@@ -504,4 +478,17 @@ function parseJason(jsonToParse) {
showErrorPopup(error); showErrorPopup(error);
} }
} }
}
function getCurrentTimeStamp() {
var now = new Date(Date.now());
var date = String(2).padStart(2, now.getDate().toString());
var month = String(2).padStart(2, now.getMonth().toString());
var hours = String(2).padStart(2, now.getHours().toString());
var minutes = String(2).padStart(2, now.getMinutes().toString());
var seconds = String(2).padStart(2, now.getSeconds().toString());
var milliseconds = String(3).padStart(3, now.getMilliseconds().toString());
return `${date}.${month}.${now.getFullYear()} ${hours}:${minutes}:${seconds}.${milliseconds}`;
} }

View File

@@ -72,11 +72,11 @@ function submitGroupBookingForm() {
} }
function deactivateGroupBookingForm() { function deactivateGroupBookingForm() {
$("#employees-button, #category-select, #leistung-select, #start-date, #end-date, #start-time, #end-time, #duration, #distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", true); $("#betrag, #employees-button, #category-select, #leistung-select, #start-date, #end-date, #start-time, #end-time, #duration, #distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", true);
} }
function activateGroupBookingForm() { function activateGroupBookingForm() {
$("#employees-button, #category-select, #leistung-select, #start-date, #end-date, #start-time, #end-time, #duration, #distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", false); $("#betrag, #employees-button, #category-select, #leistung-select, #start-date, #end-date, #start-time, #end-time, #duration, #distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", false);
} }
function deleteServiceRecord(serviceRecordOid) { function deleteServiceRecord(serviceRecordOid) {
@@ -228,6 +228,7 @@ function validateForm(form, prefix) {
$("#srv-marker").val($(`${prefix}marker-cb`).val()); $("#srv-marker").val($(`${prefix}marker-cb`).val());
$("#srv-service-description").val($(`#${prefix}leistung-select`).find(":selected").val()); $("#srv-service-description").val($(`#${prefix}leistung-select`).find(":selected").val());
$("#srv-duration").val($(`#${prefix}duration`).val()); $("#srv-duration").val($(`#${prefix}duration`).val());
$("#srv-betrag").val($("#betrag").val());
showSpinner(); showSpinner();
$("#service-record-validation-form").submit(); $("#service-record-validation-form").submit();

View File

@@ -70,65 +70,7 @@ function onMonthOrYearChange() {
checkForExistingSignature(); checkForExistingSignature();
} }
function checkForExistingSignature() {
var month = $("#month-select option:selected").val();
var year = $("#year-select option:selected").val();
var startDay = $("#start-day-select option:selected").val();
var endDay = $("#end-day-select option:selected").val();
if(startDay === 0 || endDay === 0 || year === 0 || month === 0 || areUndefinedOrNull([month, year, startDay, endDay])) {
return;
}
var changeDateSelectionUrl = getChangeDateSelectionUrl();
$.get(changeDateSelectionUrl,
{
startDayString: startDay,
endDayString: endDay,
monthString: month,
yearString: year
});
}
function qbFilterSelectionChange() {
var selectedOption = $("#qb-filter-select option:selected").val();
switch(selectedOption) {
case "3":
$("#team-selection-container").removeClass("d-block");
$("#team-selection-container").addClass("d-none");
$("#customer-selection-container").removeClass("d-none");
$("#customer-selection-container").addClass("d-block");
break;
case "4":
$("#customer-selection-container").removeClass("d-block");
$("#customer-selection-container").addClass("d-none");
$("#team-selection-container").removeClass("d-none");
$("#team-selection-container").addClass("d-block");
break;
default:
$("#customer-selection-container, #team-selection-container").removeClass("d-block");
$("#customer-selection-container, #team-selection-container").addClass("d-none");
break;
}
var selectedFilterEnumUrl = getSetQbFilterEnumUrl();
$.get(selectedFilterEnumUrl, { filterEnumString: selectedOption});
}
function onCustomerSelectionChange() {
var url = getSetCustomerUrl();
var selectedCustomerOid = $("#customers-drop-down option:selected").val();
$.get(url, { customerOid: selectedCustomerOid}).done(function() {
checkForExistingSignature();
});
}
function cancelSignature(canSign, signaturePad, canvasId, signatureContainer, overridingAlertId) { function cancelSignature(canSign, signaturePad, canvasId, signatureContainer, overridingAlertId) {
try { try {
@@ -179,7 +121,6 @@ function hideSignatureContainer(signatureContainer, overridingAlertId) {
$("#report-form-container").show(); $("#report-form-container").show();
} }
// ToDo: Löschen. An andere Stelle verlegt!
function saveSignature(customerOid, isEmployeeSignature, overwrite, signaturePad, canvasId) { function saveSignature(customerOid, isEmployeeSignature, overwrite, signaturePad, canvasId) {
try { try {
var canvas = document.getElementById(canvasId); var canvas = document.getElementById(canvasId);

View File

@@ -28,6 +28,7 @@
public static string DurationInMinutesKey => "DurationInMinutes"; public static string DurationInMinutesKey => "DurationInMinutes";
public static string MarkerKey => "marker-cb"; public static string MarkerKey => "marker-cb";
public static string FormIdKey => "form-id"; public static string FormIdKey => "form-id";
public static string BetragKey => "betrag";
// Kalender // Kalender
public static string AppointmentStartDateKey => "StartDate"; public static string AppointmentStartDateKey => "StartDate";
@@ -77,5 +78,6 @@
public static string ErrorMessageKey => "ErrorMessage"; public static string ErrorMessageKey => "ErrorMessage";
public static string DoLogoutKey => "DoLogout"; public static string DoLogoutKey => "DoLogout";
public static string ReportErrorMessageKey => "ReportErrorMessage"; public static string ReportErrorMessageKey => "ReportErrorMessage";
public static string ErrorAlertPopupMessage => "ErrorAlertPopupMessage";
} }
} }

View File

@@ -5,7 +5,6 @@ using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Web; using System.Web;
using System.Web.Mvc;
using BeWoPlanerMobil.Models; using BeWoPlanerMobil.Models;
using BS.Shared; using BS.Shared;
using BS.Shared.Core; using BS.Shared.Core;
@@ -370,7 +369,8 @@ namespace BeWoPlanerMobil.Util
WohnheimbuchungsOid = m.WohnheimbuchungsOid, WohnheimbuchungsOid = m.WohnheimbuchungsOid,
DurationInStunden = m.DurationInStunden, DurationInStunden = m.DurationInStunden,
ServiceRecordFormat = m.ServiceRecordFormat, ServiceRecordFormat = m.ServiceRecordFormat,
DistanceInMeterDecimal = m.DistanceInMeterDecimal DistanceInMeterDecimal = m.DistanceInMeterDecimal,
Betrag = m.Betrag
}; };
return clone; return clone;

View File

@@ -78,9 +78,62 @@
}); });
}, false); }, false);
})(); })();
function resetCustomerSearch() {
try {
$("#customer-search-input").val("");
$("#customer-dropdown-menu .dropdown-item").show();
var e = window.event;
e.cancelBubble = true;
if(e.stopPropagation) {
e.stopPropagation();
}
} catch(error) {
window.showErrorPopup(error);
}
}
function onCustomerSearchInput() {
try {
var searchText = $("#customer-search-input").val();
logInfo2($`Suche Klient mit ${searchText} im Namen`);
if(searchText === null || searchText === undefined || searchText.length === 0) {
$("#customer-dropdown-menu .dropdown-item").show();
return;
}
var menuItems = $("#customer-dropdown-menu .dropdown-item");
menuItems.hide();
$.each(menuItems,
function(index, item) {
var itemText = $(item).text().toLowerCase();
if(itemText.includes(searchText.toLowerCase())) {
$(item).show();
}
});
} catch(error) {
window.showErrorPopup(error);
}
}
function selectCustomer(customerOid) {
try {
$("#customer-oid-input").val(customerOid);
showSpinner();
$("#select-customer-form").submit();
} catch(error) {
window.showErrorPopup(error);
}
}
</script> </script>
<div class="container mt-3"> <div class="container mt-3" style="max-width: 1200px !important;">
<div class="row mb-3"> <div class="row mb-3">
@if(AbstractModel.IsAllowedToSeeCustomerFilter) @if(AbstractModel.IsAllowedToSeeCustomerFilter)
{ {
@@ -95,18 +148,42 @@
<div class="col-md"> <div class="col-md">
@using(Html.BeginForm("SelectCustomer", "Customer", FormMethod.Post, new { id = "select-customer-form" })) @using(Html.BeginForm("SelectCustomer", "Customer", FormMethod.Post, new { id = "select-customer-form" }))
{ {
<div class="input-group"> var customerName = Model.SelectedCustomer != null ? $"{Model.SelectedCustomer.LastName}, {Model.SelectedCustomer.FirstName}{(!string.IsNullOrWhiteSpace(Model.SelectedCustomer.CustomerAlias) ? $"({Model.SelectedCustomer.CustomerAlias})" : string.Empty)}" : string.Empty;
<div class="input-group-prepend">
<span class="input-group-text">Klient</span> <div class="wide-dropdown">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Klient</span>
</div>
<div class="input-group-append dropdown-append">
<button class="btn btn-bewo-customers dropdown-toggle w-100 text-truncate white-space-normal" type="button" data-toggle="dropdown">
@customerName
</button>
<div class="dropdown-menu w-100" id="customer-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;">
<div class="input-group px-2">
<input class="form-control w-100" id="customer-search-input" type="text" placeholder="Suchen ..." oninput="onCustomerSearchInput()" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetCustomerSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<div class="dropdown-divider"></div>
@foreach(var customer in Model.CustomerListItems)
{
<a class="dropdown-item" style="cursor: pointer;" onclick="selectCustomer('@customer.Value')">@Html.Raw(customer.Text)</a>
}
</div>
</div>
</div> </div>
@Html.DropDownListFor(m => m.SelectedCustomerOid, Model.CustomerListItems, new { onchange = "submitCustomerSelectionForm();", @class = "custom-select" })
</div> </div>
<input type="hidden" name="SelectedCustomerOid" id="customer-oid-input"/>
} }
</div> </div>
</div> </div>
</div> </div>
<div class="container-fluid mt-3 px-0" id="customer-container"> <div class="container-fluid mt-3 px-0" id="customer-container" style="max-width: 1200px !important;">
@if(Model?.SelectedJsonCustomer != null) @if(Model?.SelectedJsonCustomer != null)
{ {
@* ----- Details ----- *@ @* ----- Details ----- *@
@@ -129,7 +206,7 @@
var inputDisabled = !AbstractModel.HasRightToEditCustomers ? "disabled" : string.Empty; var inputDisabled = !AbstractModel.HasRightToEditCustomers ? "disabled" : string.Empty;
<div class="row" id="stammdaten-container"> <div class="row" id="stammdaten-container">
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3"> <div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3 px-1">
<div class="card"> <div class="card">
<div class="card-body pb-0"> <div class="card-body pb-0">
<div class="card-title text-bewo-customer-card-header"> <div class="card-title text-bewo-customer-card-header">
@@ -226,7 +303,7 @@
<div class="form-group w-100"> <div class="form-group w-100">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-eigenschaften"> <div class="input-group-text">
Krankenkasse Krankenkasse
</div> </div>
</div> </div>
@@ -238,8 +315,8 @@
<div class="form-group w-100"> <div class="form-group w-100">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-eigenschaften"> <div class="input-group-text">
Versichertennummer Versichertennr.
</div> </div>
</div> </div>
<input @inputDisabled maxlength="45" type="text" class="form-control" id="versichertennummer" name="versichertennummer" value="@Model.SelectedJsonCustomer.Versichertennummer" /> <input @inputDisabled maxlength="45" type="text" class="form-control" id="versichertennummer" name="versichertennummer" value="@Model.SelectedJsonCustomer.Versichertennummer" />
@@ -250,7 +327,7 @@
<div class="form-group w-100"> <div class="form-group w-100">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<div class="input-group-text customer-prepend-text-eigenschaften"> <div class="input-group-text">
Versichertenstatus Versichertenstatus
</div> </div>
</div> </div>
@@ -261,7 +338,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3"> <div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3 px-1">
<div class="card"> <div class="card">
<div class="card-body pb-0"> <div class="card-body pb-0">
<div class="card-title text-bewo-customer-card-header"> <div class="card-title text-bewo-customer-card-header">
@@ -318,7 +395,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3"> <div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3 px-1">
<div class="card"> <div class="card">
<div class="card-body pb-0"> <div class="card-body pb-0">
<div class="card-title text-bewo-customer-card-header"> <div class="card-title text-bewo-customer-card-header">
@@ -375,7 +452,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3"> <div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3 px-1">
<div class="card"> <div class="card">
<div class="card-body pb-0"> <div class="card-body pb-0">
<div class="card-title text-bewo-customer-card-header"> <div class="card-title text-bewo-customer-card-header">
@@ -766,7 +843,7 @@
</div> </div>
<div class="collapse"> <div class="collapse">
<div class="card-body"> <div class="card-body">
<div class="container-fluid px-0"> <div class="container-fluid px-0" id="customer-document-container">
@Html.Partial("DocumentPartial", Model) @Html.Partial("DocumentPartial", Model)
</div> </div>
</div> </div>
@@ -1030,7 +1107,7 @@
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Abwesenheit hinzufügen</h5> <h5 class="modal-title font-weight-bold">Abwesenheit hinzufügen</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close"> <button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>

View File

@@ -676,7 +676,7 @@
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="customer-bargeldkassen-form-popup-title">Bargeldkasse hinzufügen</h5> <h5 class="modal-title font-weight-bold" id="customer-bargeldkassen-form-popup-title">Bargeldkasse hinzufügen</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close" onclick="deselectBargeldkasse()"> <button class="close" type="button" data-dismiss="modal" aria-label="close" onclick="deselectBargeldkasse()">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@@ -696,7 +696,7 @@
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Neue Zahlung hinzufügen</h5> <h5 class="modal-title font-weight-bold">Neue Zahlung hinzufügen</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close"> <button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@@ -718,7 +718,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="customer-bargeldtransaktionshistorienpopup-title">Änderungshistorie</h5> <h5 class="modal-title font-weight-bold" id="customer-bargeldtransaktionshistorienpopup-title">Änderungshistorie</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close" onclick="closeTransactionHistoryPopup()"> <button class="close" type="button" data-dismiss="modal" aria-label="close" onclick="closeTransactionHistoryPopup()">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>

View File

@@ -268,7 +268,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"></h5> <h5 class="modal-title font-weight-bold"></h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close"> <button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>

View File

@@ -1,29 +1,270 @@
@using BeWoPlanerMobil.Models; @using BeWoPlanerMobil.Models;
@using BeWoPlanerMobil.Util
@using BS.Shared.DataContracts @using BS.Shared.DataContracts
@model CustomerModel @model CustomerModel
<script> <script>
$(document).ready(() => {
try {
window.bsCustomFileInput.destroy();
window.bsCustomFileInput.init();
@{
var errorMessage = TempData[TempDataConstants.ErrorAlertPopupMessage]?.ToString();
if(errorMessage != null) {
<text>
$("#error-alert-message").html("@Html.Raw(errorMessage)");
$("#error-alert-popup").modal("show");
</text>
}
}
$.each($(".file-description"), (index, item) => {
toggleDescriptionTextareaSaveButton(item);
});
} catch(error) {
showErrorPopup(error);
}
});
function toggleFolderIcon(element) { function toggleFolderIcon(element) {
try { try {
$(element).find(".fa-folder,.fa-folder-open").toggleClass("fa-folder").toggleClass("fa-folder-open"); $(element).find(".fa-folder,.fa-folder-open").toggleClass("fa-folder").toggleClass("fa-folder-open");
$(element).next(".collapse").toggle(); $(element).siblings(".input-group-prepend").find(".input-group-text").find(".fa-folder,.fa-folder-open").toggleClass("fa-folder").toggleClass("fa-folder-open");
$(element).parents(".card-header").next(".collapse").toggle();
} catch (error) { } catch (error) {
showErrorPopup(error); showErrorPopup(error);
} }
} }
function toggleDescriptionTextareaSaveButton(item) {
try {
var descriptionText = $(item).val();
var descriptionSaveButton = $(item).siblings("button");
var hasDescriptionText = descriptionText !== undefined && descriptionText !== null && descriptionText.length > 0
descriptionSaveButton.attr("disabled", !hasDescriptionText);
} catch(error) {
showErrorPopup(error);
}
}
function fileDescriptionOnInput(item) {
try {
toggleDescriptionTextareaSaveButton(item);
} catch(error) {
showErrorPopup(error);
}
}
function saveDescriptionChange(fileOid) {
try {
var descriptionText = $(`#description-${fileOid}`).val();
$("#customer-document-container").load("@Url.Action("SaveDescriptionChange")", {descriptionText: descriptionText, fileOid: fileOid});
} catch(error) {
showErrorPopup(error);
}
}
function uploadFile(folderOid) {
try {
$("#folder-oid-input").val(folderOid);
$("#new-file-popup").modal("show");
} catch(error) {
showErrorPopup(error);
}
}
function createNewFolder(folderOid) {
try {
$("#folder-popup-title").text("Ordner hinzufügen");
$("#new-folder-popup").modal("show");
$("#new-folder-name").val("Neuer Ordner");
$("#folder-popup-save-btn").off("click");
$("#folder-popup-save-btn").on("click", () => {
var newFolderName = $("#new-folder-name").val();
if(newFolderName === null || newFolderName === undefined || newFolderName.length === 0) {
newFolderName = "Neuer Ordner";
}
$("#customer-document-container").load("@Url.Action("AddNewFolder")", {folderName: newFolderName, parentFolderOid: folderOid});
$("#new-folder-popup").modal("hide");
});
} catch(error) {
showErrorPopup(error);
}
}
function renameFolder(folderOid, oldName) {
try {
$("#folder-popup-title").text("Ordner umbenennen");
$("#new-folder-name").val(oldName);
$("#new-folder-popup").modal("show");
$("#folder-popup-save-btn").off("click");
$("#folder-popup-save-btn").on("click", () => {
$("#customer-document-container").load("@Url.Action("RenameFolder")", {newName: $("#new-folder-name").val(), folderOid: folderOid});
$("#new-folder-popup").modal("hide");
});
} catch(error) {
showErrorPopup(error);
}
}
function deleteFolder(folderOid, folderName) {
try {
showAlertMessageBox("Ordner löschen",
`ACHTUNG: Das Löschen von Ordnern kann nicht rückgängig gemacht werden.<br />Alle enthaltenen Dokumente bleiben erhalten und werden in den obersten Ordner "<span class='font-weight-bold'>Alle Ordner</span>" verschoben.<br /><br />Wollen Sie den Ordner "<span class='font-weight-bold'>${folderName}</span>" wirklich löschen?`,
() => {
$("#customer-document-container").load("@Url.Action("DeleteFolder")", {folderOid: folderOid});
},
false);
} catch(error) {
showErrorPopup(error);
}
}
function showFolderEditPopup(parentFolderOid, name) {
try {
event.preventDefault();
event.stopPropagation();
$("#new-folder-name").val(name);
$("#folder-oid-container").val(parentFolderOid);
$("#new-folder-popup").modal("show");
} catch(error) {
showErrorPopup(error);
}
}
function deleteFile(fileOid, fileVersion, fileName) {
try {
showAlertMessageBox("Datei löschen",
`ACHTUNG: Das Löschen von Dateien kann nicht rückgängig gemacht werden!<br />Wollen Sie das Dokument '<span class='font-weight-bold'>${fileName}</span>' wirklich löschen?`,
() => {
$("#customer-document-container").load("@Url.Action("DeleteFile")", {fileOid: fileOid, fileVersion: fileVersion});
},
false);
} catch(error) {
showErrorPopup(error);
}
}
</script> </script>
@helper BuildFolderTreeBranch(BeWoFolderDC folder) @helper BuildFolderTreeBranch(BeWoFolderDC folder)
{ {
<div class="card w-100 mb-3"> <div class="card w-100 mt-2">
<div class="card-header px-2" onclick="toggleFolderIcon(this)"> <div class="card-header p-0 border-0 d-flex">
<i class="fas fa-folder pr-1 text-primary"></i>@folder.Name <div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text pointer-element" onclick="toggleFolderIcon(this)">
<i class="fas fa-folder text-warning"></i>
</span>
</div>
<input type="text" class="input-group-text px-1 form-control text-left pointer-element no-focus-outline no-selection" value="@folder.Name" readonly onclick="toggleFolderIcon(this)"/>
<div class="input-group-append">
<button class="btn btn-primary rounded-right" data-toggle="dropdown">
<i class="fas fa-ellipsis-v"></i>
</button>
<div class="dropdown-menu">
<button class="btn btn-primary dropdown-item text-primary" type="button" onclick="uploadFile(@folder.BeWoFolderOid)">
<i class="fas fa-file-upload"></i>
Datei hochladen
</button>
<button class="btn btn-outline-primary dropdown-item text-primary" type="button" onclick="createNewFolder(@folder.BeWoFolderOid)">
<i class="fas fa-folder-plus text-warning"></i>
Neuer Ordner
</button>
@if(folder.BeWoFolderOid.HasValue)
{
<button class="btn btn-outline-primary dropdown-item text-primary" type="button" onclick="renameFolder(@folder.BeWoFolderOid, '@folder.Name')">
<i class="fas fa-edit"></i>
Umbenennen
</button>
<div role="separator" class="dropdown-divider"></div>
<button class="btn btn-danger dropdown-item text-danger" type="button" onclick="deleteFolder(@folder.BeWoFolderOid, '@folder.Name')">
<i class="fas fa-trash-alt"></i>
Löschen
</button>
}
</div>
</div>
</div>
</div> </div>
<div class="collapse"> <div class="collapse">
<div class="card-body px-2"> <div class="card-body p-1">
@foreach(var file in folder.Files) @foreach(var file in folder.Files)
{ {
<i class="fas fa-file text-primary"></i>@Html.ActionLink(file.FileName, "DownloadFile", new { fileOid = file.FileAttachmentOid }, new { @class = "pl-2 px-2" })<br/> <div class="card w-100 my-2">
<div class="card-header p-0 border-0 d-flex">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text text-primary">
<i class="fas fa-file"></i>
</span>
</div>
<input type="text" class="rounded-0 input-group-text px-1 form-control text-left pointer-element no-focus-outline no-selection" value="@file.FileName" readonly data-toggle="collapse" data-target="#file-details-@file.FileAttachmentOid" />
<div class="input-group-append">
<button class="btn btn-primary rounded-right" data-toggle="dropdown">
<i class="fas fa-ellipsis-v"></i>
</button>
<div class="dropdown-menu">
<a href="@Url.Action("DownloadFile", new { fileOid = file.FileAttachmentOid })" class="btn btn-primary dropdown-item text-primary" role="button">
<i class="fas fa-download"></i>
Herunterladen
</a>
<div role="separator" class="dropdown-divider"></div>
<button class="btn btn-danger dropdown-item text-danger" type="button" onclick="deleteFile(@file.FileAttachmentOid, @file.FileAttachmentVersion, '@file.FileName')">
<i class="fas fa-trash-alt"></i>
Löschen
</button>
</div>
</div>
</div>
</div>
<div class="collapse" id="file-details-@file.FileAttachmentOid">
<div class="card-body p-1 my-2">
<div class="row">
<div class="col text-secondary">
Hinterlegt am
</div>
<div class="col">
@file.InsertedOn.ToString("dd.MM.yyyy")
</div>
</div>
<div class="row">
<div class="col text-secondary">
Hinterlegt von
</div>
<div class="col">
@file.InsertedBy
</div>
</div>
<div class="dropdown-divider" role="separator"></div>
<div class="form-group mt-1 mb-0">
@{
var fileDescription = file.Description ?? string.Empty;
}
<button class="btn btn-primary float-right mb-1" type="button" onclick="saveDescriptionChange(@file.FileAttachmentOid)">
<i class="fas fa-save"></i>
</button>
<label class="text-secondary float-left" for="description-@file.FileAttachmentOid">Beschreibung</label>
<textarea id="description-@file.FileAttachmentOid" oninput="fileDescriptionOnInput(this)" class="form-control file-description">@fileDescription</textarea>
</div>
</div>
</div>
</div>
} }
@foreach(var subFolder in folder.SubFolders) @foreach(var subFolder in folder.SubFolders)
@@ -52,3 +293,83 @@
Write(BuildFolderTree()); Write(BuildFolderTree());
} }
} }
<div class="modal" tabindex="-1" role="dialog" id="new-folder-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold" id="folder-popup-title">Ordner hinzuf&uuml;gen</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="new-folder-popup-form">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Name</span>
</div>
<input id="new-folder-name" type="text" class="form-control" />
<div class="input-group-append">
<button type="button" class="btn btn-outline-primary" onclick="$('#new-folder-name').val('');">
<span class="fas fa-times-circle"></span>
</button>
</div>
<input type="hidden" id="folder-oid-container"/>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Abbrechen</button>
<button type="button" class="btn btn-primary" id="folder-popup-save-btn">Speichern</button>
</div>
</div>
</div>
</div>
<div class="modal" tabindex="-1" role="dialog" id="new-file-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Neue Datei hochladen</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
@using(Html.BeginForm("UploadFile", "Customer", FormMethod.Post, new { id="new-file-form", enctype="multipart/form-data" }))
{
<div class="row">
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Datei</span>
</div>
<div class="custom-file">
<input type="file" class="custom-file-input text-truncate" id="file" name="file">
<label class="custom-file-label" for="file">Auswählen</label>
</div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Beschreibung</span>
</div>
<input type="text" class="form-control text-truncate" name="file-description-input" id="file-description-input" />
</div>
</div>
</div>
<input type="hidden" id="folder-oid-input" name="folder-oid-input" />
}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="$('#file').val(null); $('#file-description-input, #folder-oid-input').val('');">Abbrechen</button>
<button type="button" class="btn btn-primary" onclick="showSpinner(); $('#new-file-form').submit();">Dokument hochladen</button>
</div>
</div>
</div>
</div>

View File

@@ -34,7 +34,7 @@
$("#employees-button, #category-select, #leistung-select, " + $("#employees-button, #category-select, #leistung-select, " +
"#start-date, #end-date, #start-time, #end-time, #duration, " + "#start-date, #end-date, #start-time, #end-time, #duration, " +
"#distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb") "#distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb, #betrag")
.prop("disabled", (checkedCheckboxes.length > 0 ? false : true)); .prop("disabled", (checkedCheckboxes.length > 0 ? false : true));
$("#goals-tree").load("@Url.Action("ReloadGoals")", function () { $("#goals-tree").load("@Url.Action("ReloadGoals")", function () {
@@ -136,6 +136,34 @@
</div> </div>
} }
@* ----- Betrag ----- *@
@if(Model.ShowBetrag)
{
var betrag = string.Empty;
if(Model.SelectedServiceRecord?.Betrag != null && Model.SelectedServiceRecord.Betrag.Value > 0)
{
betrag = Model.SelectedServiceRecord.Betrag.Value.ToString("#.00");
}
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Betrag
</div>
</div>
<input class="form-control" type="text" id="betrag" name="betrag" value="@betrag" />
<div class="input-group-append">
<div class="input-group-text">€</div>
</div>
</div>
</div>
</div>
</div>
}
@* Trennstrich *@ @* Trennstrich *@
<div class="form-row"> <div class="form-row">
<div class="col-md"> <div class="col-md">

View File

@@ -94,7 +94,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Gruppen und Hilfepläne für Gruppenbuchung</h5> <h5 class="modal-title font-weight-bold">Gruppen und Hilfepläne für Gruppenbuchung</h5>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -117,7 +117,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Mitarbeiter hinzufügen</h5> <h5 class="modal-title font-weight-bold">Mitarbeiter hinzufügen</h5>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('gb-employee-search-input', 'employee-text')"> <button type="button" class="close" data-dismiss="modal" onclick="resetSearch('gb-employee-search-input', 'employee-text')">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -70,8 +70,6 @@
return "@Model.EinheitZeiterfassung" === "0"; return "@Model.EinheitZeiterfassung" === "0";
} }
$(function() { $(function() {
$("#start-date-picker").datetimepicker({ $("#start-date-picker").datetimepicker({
locale: "de", locale: "de",
@@ -147,17 +145,17 @@
var isSupportConceptSelected = supportConceptOid !== -1; var isSupportConceptSelected = supportConceptOid !== -1;
$("#employeesDropDown, #category-select, #leistung-select, " + $("#employeesDropDown, #single-booking-dropdown-employees-menu, #category-select, #leistung-select, " +
"#start-date, #end-date, #start-time, #end-time, #duration, " + "#start-date, #end-date, #start-time, #end-time, #duration, " +
"#distance, #textbausteine-button, #goals-button, textarea, #reset-button, " + "#distance, #textbausteine-button, #goals-button, textarea, #reset-button, " +
"#create-button, #statistics-button, #timeFrameSelect, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", (isSupportConceptSelected ? false : true)); "#create-button, #statistics-button, #timeFrameSelect, #hours-minutes-dropdown-btn, #marker-cb, #betrag").prop("disabled", (isSupportConceptSelected ? false : true));
if("@Model.IsInGroupBookingMode".toLowerCase() === "true") { if("@Model.IsInGroupBookingMode".toLowerCase() === "true") {
var hasSelectedSupportConcepts = "@Model.SelectedConceptCostBearerRelations.Any()".toLowerCase() === "true"; var hasSelectedSupportConcepts = "@Model.SelectedConceptCostBearerRelations.Any()".toLowerCase() === "true";
$("#employees-button, #category-select, #leistung-select, " + $("#employees-button, #single-booking-dropdown-employees-menu, #category-select, #leistung-select, " +
"#start-date, #end-date, #start-time, #end-time, #duration, " + "#start-date, #end-date, #start-time, #end-time, #duration, " +
"#distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb").prop("disabled", (hasSelectedSupportConcepts ? false : true)); "#distance, textarea, #reset-button, #create-button, #textbausteine-button, #hours-minutes-dropdown-btn, #marker-cb, #betrag").prop("disabled", (hasSelectedSupportConcepts ? false : true));
} }
$("#fehlerdetail-textarea").prop("disabled", false); $("#fehlerdetail-textarea").prop("disabled", false);
@@ -167,20 +165,7 @@
toggleMultiBookingForm(isMultiBookingFormDisabled); toggleMultiBookingForm(isMultiBookingFormDisabled);
} }
//var categorySelectId = "category-select";
//var leistungSelectId = "leistung-select";
@*if("@Model.IsInMultiBookingMode".toLowerCase() === "true") {
categorySelectId = "mb-category-select";
leistungSelectId = "mb-leistung-select";
}*@
@*if("@Model.IsInGroupBookingMode".toLowerCase() === "false") {
loadServiceDescriptions("category-select", "leistung-select", 'textmodule-container', 'tree');
}*@
initializeTimeInputs(); initializeTimeInputs();
initializeSignatureImagePopup(); initializeSignatureImagePopup();
@@ -344,19 +329,23 @@
} }
function setInputFilter(durationId, distanceId, hoursMinutesDropdownBtnId) { function setInputFilter(durationId, distanceId, hoursMinutesDropdownBtnId) {
$("#" + durationId).inputFilter(function (value) { $(`#${durationId}`).inputFilter(function (value) {
var result = /^\d*$/; var result = /^\d*$/;
var dropdownButton = $("#" + hoursMinutesDropdownBtnId); var dropdownButton = $(`#${hoursMinutesDropdownBtnId}`);
if (dropdownButton.length && dropdownButton.text() === "Stunden" || getIsZeiterfassungseinheitInMinutes() === false) { if(dropdownButton.length && dropdownButton.text() === "Stunden" || getIsZeiterfassungseinheitInMinutes() === false) {
result = /^-?\d*[.,]?\d*$/; result = /^\d*[.,]?\d*$/;
} }
return result.test(value); return result.test(value);
}); });
$("#" + distanceId).inputFilter(function(value) { $(`#${distanceId}`).inputFilter(function(value) {
return /^-?\d*[.,]?\d*$/.test(value); return /^\d*[.,]?\d*$/.test(value);
});
$(`#betrag`).inputFilter(function (value) {
return /^\d*([.,]?\d{0,2})?$/.test(value);
}); });
} }
@@ -456,7 +445,7 @@
} }
</script> </script>
<div class="container mt-3" id="checkbox-container"> <div class="container mt-3" id="checkbox-container" style="max-width: 1200px !important;">
<div class="row"> <div class="row">
@if(AbstractModel.IsAllowedToSeeSupportConceptFilter) @if(AbstractModel.IsAllowedToSeeSupportConceptFilter)
{ {
@@ -471,7 +460,7 @@
<div class="col-md pt-1"> <div class="col-md pt-1">
@using(Html.BeginForm("SetShowExpiredSupportConcepts", "Main", FormMethod.Post)) @using(Html.BeginForm("SetShowExpiredSupportConcepts", "Main", FormMethod.Post))
{ {
<div class="custom-control custom-checkbox custom-control-inline"> <div class="custom-control custom-switch custom-control-inline">
@Html.CheckBoxFor(m => m.ShowExpiredSupportConcepts, new { onchange = "submitForm(this)", @class = "custom-control-input" }) @Html.CheckBoxFor(m => m.ShowExpiredSupportConcepts, new { onchange = "submitForm(this)", @class = "custom-control-input" })
@Html.LabelFor(m => m.ShowExpiredSupportConcepts, new { @class = "custom-control-label" }) @Html.LabelFor(m => m.ShowExpiredSupportConcepts, new { @class = "custom-control-label" })
</div> </div>
@@ -483,7 +472,7 @@
<div class="col-md pt-1"> <div class="col-md pt-1">
@using(Html.BeginForm("SetGroupBookingMode", "Main", FormMethod.Post)) @using(Html.BeginForm("SetGroupBookingMode", "Main", FormMethod.Post))
{ {
<div class="custom-control custom-checkbox custom-control-inline"> <div class="custom-control custom-switch custom-control-inline">
@Html.CheckBoxFor(m => m.IsInGroupBookingMode, new { onchange = "submitForm(this)", @class = "custom-control-input" }) @Html.CheckBoxFor(m => m.IsInGroupBookingMode, new { onchange = "submitForm(this)", @class = "custom-control-input" })
@Html.LabelFor(m => m.IsInGroupBookingMode, new { @class = "custom-control-label" }) @Html.LabelFor(m => m.IsInGroupBookingMode, new { @class = "custom-control-label" })
</div> </div>
@@ -496,7 +485,7 @@
<div class="col-md pt-1"> <div class="col-md pt-1">
@using(Html.BeginForm("SetMultiBookingMode", "Main", FormMethod.Post)) @using(Html.BeginForm("SetMultiBookingMode", "Main", FormMethod.Post))
{ {
<div class="custom-control custom-checkbox custom-control-inline"> <div class="custom-control custom-switch custom-control-inline">
@Html.CheckBoxFor(m => m.IsInMultiBookingMode, new { onchange = "submitForm(this)", @class = "custom-control-input" }) @Html.CheckBoxFor(m => m.IsInMultiBookingMode, new { onchange = "submitForm(this)", @class = "custom-control-input" })
@Html.LabelFor(m => m.IsInMultiBookingMode, new { @class = "custom-control-label" }) @Html.LabelFor(m => m.IsInMultiBookingMode, new { @class = "custom-control-label" })
</div> </div>
@@ -507,7 +496,7 @@
</div> </div>
@* ----- Einzelbuchung ----- *@ @* ----- Einzelbuchung ----- *@
<div class="container-fluid mb-3" id="main-container"> <div class="container-fluid mb-3" id="main-container" style="max-width: 1200px !important;">
@if(!Model.IsInGroupBookingMode && !Model.IsInMultiBookingMode) @if(!Model.IsInGroupBookingMode && !Model.IsInMultiBookingMode)
{ {
@Html.Partial("SingleBookingPartial", Model) @Html.Partial("SingleBookingPartial", Model)
@@ -515,7 +504,7 @@
</div> </div>
@* ----- Gruppenbuchung ----- *@ @* ----- Gruppenbuchung ----- *@
<div class="container mb-3"> <div class="container mb-3" style="max-width: 1200px !important;">
@if(Model.IsInGroupBookingMode && !Model.IsInMultiBookingMode) @if(Model.IsInGroupBookingMode && !Model.IsInMultiBookingMode)
{ {
<div id="group-booking-container"> <div id="group-booking-container">
@@ -525,7 +514,7 @@
</div> </div>
@* ----- Mehrfachbuchung ----- *@ @* ----- Mehrfachbuchung ----- *@
<div class="container mb-3"> <div class="container mb-3" style="max-width: 1200px !important;">
@if(Model.IsInMultiBookingMode && !Model.IsInGroupBookingMode) @if(Model.IsInMultiBookingMode && !Model.IsInGroupBookingMode)
{ {
@Html.Partial("MultiBookingPartial", Model); @Html.Partial("MultiBookingPartial", Model);
@@ -537,7 +526,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title">Textbausteine</h6> <h6 class="modal-title font-weight-bold">Textbausteine</h6>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -555,7 +544,7 @@
</div> </div>
@* ----- Unterschriften-Layover ----- *@ @* ----- Unterschriften-Layover ----- *@
<div class="container-fluid d-none mb-3" id="signature-container"> <div class="container-fluid d-none mb-3" id="signature-container" style="max-width: 1200px !important;">
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
@@ -639,7 +628,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title" id="statistics-header"></h6> <h6 class="modal-title font-weight-bold" id="statistics-header"></h6>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -664,7 +653,7 @@
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="signature-text"></h5> <h5 class="modal-title font-weight-bold" id="signature-text"></h5>
<button type="button" class="close" data-dismiss="modal" onclick="hideSignature()"> <button type="button" class="close" data-dismiss="modal" onclick="hideSignature()">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -686,7 +675,7 @@
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Bewertungsskala</h5> <h5 class="modal-title font-weight-bold">Bewertungsskala</h5>
<button class="close" type="button" data-dismiss="modal" onclick="hideGoalRatingPopup()"> <button class="close" type="button" data-dismiss="modal" onclick="hideGoalRatingPopup()">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -717,7 +706,7 @@
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Passwort &auml;ndern</h5> <h5 class="modal-title font-weight-bold">Passwort &auml;ndern</h5>
<button type="button" class="close" data-dismiss="modal" onclick="$('#password-change-error-alert').html(''); $('#password-change-error-alert').modal('hide');"> <button type="button" class="close" data-dismiss="modal" onclick="$('#password-change-error-alert').html(''); $('#password-change-error-alert').modal('hide');">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -792,7 +781,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">Warnung</h5> <h5 class="modal-title font-weight-bold" id="staticBackdropLabel">Warnung</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@@ -846,6 +835,7 @@
<input type="hidden" name="@FormCollectionConstants.MarkerKey" id="srv-marker" /> <input type="hidden" name="@FormCollectionConstants.MarkerKey" id="srv-marker" />
<input type="hidden" name="@FormCollectionConstants.ServiceDescriptionKey" id="srv-service-description" /> <input type="hidden" name="@FormCollectionConstants.ServiceDescriptionKey" id="srv-service-description" />
<input type="hidden" name="@FormCollectionConstants.DurationKey" id="srv-duration" /> <input type="hidden" name="@FormCollectionConstants.DurationKey" id="srv-duration" />
<input type="hidden" name="@FormCollectionConstants.BetragKey" id="srv-betrag" />
} }
@@ -854,7 +844,7 @@
<div class="modal-dialog modal-dialog-scrollable h-100" role="document"> <div class="modal-dialog modal-dialog-scrollable h-100" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title">Ziele und Ma&szlig;nahmen</h6> <h6 class="modal-title font-weight-bold">Ziele und Ma&szlig;nahmen</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetGoalTreeSearch()"> <button type="button" class="close" data-dismiss="modal" onclick="resetGoalTreeSearch()">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -98,6 +98,28 @@
</div> </div>
} }
@* ----- Betrag ----- *@
@if(Model.ShowBetrag)
{
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Betrag
</div>
</div>
<input class="form-control" type="text" id="betrag" name="betrag" />
<div class="input-group-append">
<div class="input-group-text">€</div>
</div>
</div>
</div>
</div>
</div>
}
@* Trennlinie *@ @* Trennlinie *@
<div class="form-row"> <div class="form-row">
<div class="col-md"> <div class="col-md">

View File

@@ -132,7 +132,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Gruppen und Hilfepläne für Gruppenbuchung</h5> <h5 class="modal-title font-weight-bold">Gruppen und Hilfepläne für Gruppenbuchung</h5>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -155,7 +155,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Mitarbeiter hinzufügen</h5> <h5 class="modal-title font-weight-bold">Mitarbeiter hinzufügen</h5>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('mb-employee-search-input', 'employee-text')"> <button type="button" class="close" data-dismiss="modal" onclick="resetSearch('mb-employee-search-input', 'employee-text')">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -72,8 +72,6 @@
showErrorPopup(error); showErrorPopup(error);
} }
} }
</script> </script>
@{ @{
@@ -161,110 +159,105 @@
</nav> </nav>
} }
foreach(var serviceRecord in Model.ServiceRecords) 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 massnahmenString = string.Empty;
var zieleString = string.Empty;
if(serviceRecord.Goals != null && serviceRecord.Goals.Count > 0)
{
foreach(var goal in serviceRecord.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptGoalType || g.Type == ValueListEntryType.SupportConceptIndividualGoalType))
{
if(goal.Abbreviation != null && goal.TypeDescription != null)
{
massnahmenString += $"{goal.Abbreviation}: {goal.TypeDescription}";
}
else if(goal.Abbreviation is null && goal.TypeDescription != null)
{
massnahmenString += goal.TypeDescription;
}
else if(goal.Abbreviation != null && goal.TypeDescription is null)
{
massnahmenString += goal.Abbreviation;
}
#if DEBUG
if(goal.RatingTypeOid.HasValue)
{
var goalRating = Model.GoalRatingTypes.FirstOrDefault(g => g.RatingTypeOid.HasValue && g.RatingTypeOid.Equals(goal.RatingTypeOid.Value));
if(goalRating?.DisplayName != null && goalRating.DisplayName.Length > 0)
{ {
if(serviceRecord.Start == null || serviceRecord.End == null) massnahmenString += $" <strong style='color: blue;'>({goalRating.DisplayName})</strong>";
{ }
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 massnahmenString = string.Empty;
var zieleString = string.Empty;
if(serviceRecord.Goals != null && serviceRecord.Goals.Count > 0)
{
foreach(var goal in serviceRecord.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptGoalType || g.Type == ValueListEntryType.SupportConceptIndividualGoalType))
{
if(goal.Abbreviation != null && goal.TypeDescription != null)
{
massnahmenString += $"{goal.Abbreviation}: {goal.TypeDescription}";
}
else if(goal.Abbreviation is null && goal.TypeDescription != null)
{
massnahmenString += goal.TypeDescription;
}
else if(goal.Abbreviation != null && goal.TypeDescription is null)
{
massnahmenString += goal.Abbreviation;
}
#if DEBUG
if(goal.RatingTypeOid.HasValue)
{
var goalRating = Model.GoalRatingTypes.FirstOrDefault(g => g.RatingTypeOid.HasValue && g.RatingTypeOid.Equals(goal.RatingTypeOid.Value));
if(goalRating?.DisplayName != null && goalRating.DisplayName.Length > 0)
{
massnahmenString += $" <strong style='color: blue;'>({goalRating.DisplayName})</strong>";
}
}
#endif #endif
if(serviceRecord.Goals.IndexOf(goal) < serviceRecord.Goals.Count - 1) if(serviceRecord.Goals.IndexOf(goal) < serviceRecord.Goals.Count - 1)
{ {
massnahmenString += ", "; massnahmenString += ", ";
} }
} }
if(serviceRecord.ServiceRecordOid.HasValue && Model.ServiceRecordOids2GoalHeader.ContainsKey(serviceRecord.ServiceRecordOid.Value)) if(serviceRecord.ServiceRecordOid.HasValue && Model.ServiceRecordOids2GoalHeader.ContainsKey(serviceRecord.ServiceRecordOid.Value))
{ {
var ziele = serviceRecord.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == ValueListEntryType.SupportConceptGoalCategoryType).ToList(); var ziele = serviceRecord.Goals.Where(g => g.Type == ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == ValueListEntryType.SupportConceptGoalCategoryType).ToList();
foreach(var ziel in ziele) foreach(var ziel in ziele)
{ {
if(ziel.Abbreviation != null && ziel.TypeDescription != null) if(ziel.Abbreviation != null && ziel.TypeDescription != null)
{ {
zieleString += $"{ziel.Abbreviation}: {ziel.TypeDescription} "; zieleString += $"{ziel.Abbreviation}: {ziel.TypeDescription} ";
} }
else if(ziel.Abbreviation is null && ziel.TypeDescription != null) else if(ziel.Abbreviation is null && ziel.TypeDescription != null)
{ {
zieleString += ziel.TypeDescription; zieleString += ziel.TypeDescription;
} }
else if(ziel.Abbreviation != null && ziel.TypeDescription is null) else if(ziel.Abbreviation != null && ziel.TypeDescription is null)
{ {
zieleString += ziel.Abbreviation; zieleString += ziel.Abbreviation;
} }
#if DEBUG #if DEBUG
if(ziel.RatingTypeOid.HasValue) if(ziel.RatingTypeOid.HasValue)
{ {
var zielbewertung = Model.GoalRatingTypes.FirstOrDefault(goalRatingType => goalRatingType.RatingTypeOid.HasValue && goalRatingType.RatingTypeOid.Equals(ziel.RatingTypeOid.Value)); var zielbewertung = Model.GoalRatingTypes.FirstOrDefault(goalRatingType => goalRatingType.RatingTypeOid.HasValue && goalRatingType.RatingTypeOid.Equals(ziel.RatingTypeOid.Value));
if(zielbewertung?.DisplayName != null && zielbewertung.DisplayName.Length > 0) if(zielbewertung?.DisplayName != null && zielbewertung.DisplayName.Length > 0)
{ {
zieleString += $" <strong style='color: blue;'>({zielbewertung.DisplayName})</strong>"; zieleString += $" <strong style='color: blue;'>({zielbewertung.DisplayName})</strong>";
} }
} }
#endif #endif
zieleString += ", "; zieleString += ", ";
} }
}
//foreach(var goalHeader in Model.ServiceRecordOids2GoalHeader[serviceRecord.ServiceRecordOid.Value]) zieleString = zieleString.TrimEnd(' ').TrimEnd(',');
//{ }
// zieleString += $"{goalHeader}, ";
//}
}
zieleString = zieleString.TrimEnd(' ').TrimEnd(','); var cardBackground = serviceRecord.ServiceRecordType == ServiceRecordTypeId.Content ? "bg-service-record-marked" : serviceRecord.GroupOid.HasValue ? "bg-bewo-group-booking" : string.Empty;
}
var cardBackground = serviceRecord.ServiceRecordType == ServiceRecordTypeId.Content ? "bg-service-record-marked" : serviceRecord.GroupOid.HasValue ? "bg-bewo-group-booking" : string.Empty;
<div class="row mb-3"> <div class="row mb-3">
<div class="card w-100 @cardBackground"> <div class="card w-100 @cardBackground">
@@ -371,7 +364,7 @@
</div> </div>
</div> </div>
} }
if(serviceRecord.Goals.Any(goal => goal.Type == ValueListEntryType.SupportConceptGoalType || goal.Type == ValueListEntryType.SupportConceptIndividualGoalType)) if(serviceRecord.Goals.Any(goal => goal.Type == ValueListEntryType.SupportConceptGoalType || goal.Type == ValueListEntryType.SupportConceptIndividualGoalType))
{ {
<div class="row"> <div class="row">
@@ -429,6 +422,25 @@
</div> </div>
} }
@if(Model.ShowBetrag)
{
var betrag = string.Empty;
if(serviceRecord.Betrag.HasValue && serviceRecord.Betrag.Value > 0)
{
betrag = serviceRecord.Betrag.Value.ToString("#.00") + " €";
}
<div class="row">
<div class="col text-secondary">
Betrag:
</div>
<div class="col">
@betrag
</div>
</div>
}
@{ @{
var header1 = "Dokumentation"; var header1 = "Dokumentation";
if(Model.NumberOfDokuTypes >= 1) if(Model.NumberOfDokuTypes >= 1)
@@ -579,7 +591,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title">Einmal-Unterschrift</h6> <h6 class="modal-title font-weight-bold">Einmal-Unterschrift</h6>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -15,7 +15,7 @@
} }
} }
<script> <script type="text/javascript">
$(document).ready(function () { $(document).ready(function () {
$("#hours-minutes-dropdown-btn").on("click", function() { $("#hours-minutes-dropdown-btn").on("click", function() {
$("#hours-minutes-dropdown-btn").data("text", $("#hours-minutes-dropdown-btn").text().replaceAll(/\s/g, "")); $("#hours-minutes-dropdown-btn").data("text", $("#hours-minutes-dropdown-btn").text().replaceAll(/\s/g, ""));
@@ -32,12 +32,25 @@
var buttonText = $(this).text(); var buttonText = $(this).text();
$("#hours-minutes-dropdown-btn").text(buttonText); $("#hours-minutes-dropdown-btn").text(buttonText);
setInputFilter('duration', 'distance', 'hours-minutes-dropdown-btn'); window.setInputFilter('duration', 'distance', 'hours-minutes-dropdown-btn');
$.get('@Url.Action("ToggleDurationUnit")', { isInHoursMode: buttonText === "Stunden" }); $.get('@Url.Action("ToggleDurationUnit")', { isInHoursMode: buttonText === "Stunden" });
calculateDuration(true, 'start-time', 'end-time', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker', false, false); calculateDuration(true, 'start-time', 'end-time', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker', false, false);
}); });
@{
if(Model.SelectedSupportConcept != null || Model.CostBearer2SupportConceptOid == -2)
{
<text>
try {
initializeIntervalSelection();
} catch (error) {
window.showErrorPopup(error);
}
</text>
}
}
}); });
function deleteSigntarue(signatureOid, serviceRecordOid, customerName, dateOfRecord) { function deleteSigntarue(signatureOid, serviceRecordOid, customerName, dateOfRecord) {
@@ -74,6 +87,151 @@
showErrorPopup(error); showErrorPopup(error);
} }
} }
function onSingleBookingEmployeeDropdownInput() {
try {
var input = $("#single-booking-employee-search-input");
var searchText = input.val();
if(searchText === null || searchText === undefined || searchText.length === 0) {
$("#single-booking-employee-dropdown-menu .dropdown-item").show();
return;
}
var menuItems = $("#single-booking-employee-dropdown-menu .dropdown-item");
menuItems.hide();
$.each(menuItems, function(index, item) {
var itemText = $(item).text().toLowerCase();
if(itemText.includes(searchText.toLowerCase())) {
$(item).show();
}
});
} catch(error) {
showErrorPopup(error);
}
}
function resetSingleBookingEmployeeSearch() {
try {
$("#single-booking-employee-search-input").val("");
$("#single-booking-employee-dropdown-menu .dropdown-item").show();
var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) {
e.stopPropagation();
}
} catch(error) {
showErrorPopup(error);
}
}
function setSelectedEmployeeForSingleBooking(employeeOid) {
try {
if(employeeOid !== null && employeeOid !== undefined && $.isNumeric(employeeOid) === true && employeeOid > 0) {
$.get("@Url.Action("SetServiceRecordEmployee")", {employeeOid: employeeOid}, function (employeeName) {
$("#single-booking-dropdown-employees-menu").text(employeeName);
loadServiceRecords();
});
}
} catch(error) {
window.showErrorPopup(error);
}
}
function loadServiceRecords() {
try {
var selectedOption = $("#timeFrameSelect").val();
var start = $("#time-frame-start-date").val();
var end = $("#time-frame-end-date").val();
var dayCount = $("#day-count-number").val();
var year = $("#year-select").val();
var month = $("#month-select").val();
showSpinner();
$("#service-record-list-container").load("@Url.Action("LoadServiceRecordsNonPost")", {dayCountNumber: dayCount, start: start, end: end, month: month, year: year, recordsKey: selectedOption},
() => {
hideSpinner();
});
} catch (error) {
showErrorPopup(error);
}
}
function initializeIntervalSelection() {
try {
var selectedOption = $("#timeFrameSelect option:selected").val();
switch (selectedOption) {
case "0":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "1":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "2":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "3":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "4":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "5":
$("#last-x-interval-container").show();
$("#custom-interval-container, #month-interval-container").hide();
break;
case "6":
$("#custom-interval-container").show();
$("#last-x-interval-container, #month-interval-container").hide();
break;
case "7":
$("#month-interval-container").show();
$("#last-x-interval-container, #custom-interval-container").hide();
break;
}
} catch (error) {
showErrorPopup(error);
}
}
function changeServiceRecordIntervalSelection(select) {
try {
var selectedOption = $(select).val();
showSpinner();
if(["0", "1", "2", "3", "4"].includes(selectedOption)) {
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
loadServiceRecords();
}
else if(selectedOption === "5") {
$("#last-x-interval-container").show();
$("#custom-interval-container, #month-interval-container").hide();
hideSpinner();
}
else if(selectedOption === "6") {
$("#custom-interval-container").show();
$("#last-x-interval-container, #month-interval-container").hide();
hideSpinner();
}
else if(selectedOption === "7") {
$("#month-interval-container").show();
$("#last-x-interval-container, #custom-interval-container").hide();
hideSpinner();
}
} catch (error) {
showErrorPopup(error);
}
}
</script> </script>
@using(Html.BeginForm("ResetSingleBookingForm", "Main", FormMethod.Post, new { Id = "reset-single-booking-form-form" })) @using(Html.BeginForm("ResetSingleBookingForm", "Main", FormMethod.Post, new { Id = "reset-single-booking-form-form" }))
@@ -121,7 +279,7 @@
<div class="modal-dialog text-center modal-dialog-scrollable" role="document"> <div class="modal-dialog text-center modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Hilfeplanauswahl</h5> <h5 class="modal-title font-weight-bold">Hilfeplanauswahl</h5>
<button type="button" class="close" data-dismiss="modal" onclick="resetSupportConceptSearch()"> <button type="button" class="close" data-dismiss="modal" onclick="resetSupportConceptSearch()">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -183,16 +341,51 @@
@* ----- Einzelbuchung: Mitarbeiter ----- *@ @* ----- Einzelbuchung: Mitarbeiter ----- *@
<div class="form-row"> <div class="form-row">
<div class="col-md"> <div class="col-md">
<div class="form-group my-2"> <div class="dropdown mt-3">
<div class="input-group"> @{
<div class="input-group-prepend"> var employeeButtonValue = "Mitarbeiter";
<div class="input-group-text prepend-input-group-text">Mitarbeiter</div>
if(Model.SelectedEmployee != null)
{
employeeButtonValue = Model.SelectedEmployee.DetailDescription;
}
}
<div class="wide-dropdown">
<div class="input-group" id="single-booking-employee-input-group">
<div class="input-group-prepend" id="single-booking-employee-prepend">
<span class="input-group-text prepend-input-group-text">Mitarbeiter</span>
</div>
<div class="input-group-append dropdown-append" id="single-booking-employee-dropdown-container">
<button class="btn btn-primary dropdown-toggle text-truncate w-100 white-space-normal" type="button" id="single-booking-dropdown-employees-menu" data-toggle="dropdown">
@employeeButtonValue
</button>
<div class="dropdown-menu" id="single-booking-employee-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;">
<div class="input-group px-2">
<input class="form-control" type="text" id="single-booking-employee-search-input" placeholder="Suchen..." oninput="onSingleBookingEmployeeDropdownInput()" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetSingleBookingEmployeeSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<div class="dropdown-divider"></div>
@foreach(var employee in Model.Employees)
{
<a class="dropdown-item" style="cursor: pointer;" id="employee-@employee.EmployeeOid" onclick="setSelectedEmployeeForSingleBooking(@employee.EmployeeOid)">@employee.DetailDescription</a>
}
</div>
</div>
</div> </div>
@Html.DropDownListFor(m => m.SelectedEmployeeOid, Model.EmployeeListItems, new { id = "employeesDropDown", @class = "custom-select", onchange = "setSelectedEmployee()" })
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@* ----- Einzelbuchung: Ziele ----- *@
@if(Model.SelectedSupportConcept != null && Model.SelectedSupportConcept.Goals.Any()) @if(Model.SelectedSupportConcept != null && Model.SelectedSupportConcept.Goals.Any())
{ {
<!-- Einzelbuchung: Ziele --> <!-- Einzelbuchung: Ziele -->
@@ -211,6 +404,8 @@
} }
@* ----- Einzelbuchung: Kategorie & Leistung ----- *@ @* ----- Einzelbuchung: Kategorie & Leistung ----- *@
<div id="category-to-description-container"> <div id="category-to-description-container">
@Html.Partial("Category2ServiceDescriptionPartial", Model) @Html.Partial("Category2ServiceDescriptionPartial", Model)
@@ -230,6 +425,34 @@
</div> </div>
</div> </div>
} }
@* ----- Betrag ----- *@
@if(Model.ShowBetrag)
{
var betrag = string.Empty;
if(Model.SelectedServiceRecord?.Betrag != null && Model.SelectedServiceRecord.Betrag.Value > 0)
{
betrag = Model.SelectedServiceRecord.Betrag.Value.ToString("#.00");
}
<div class="form-row">
<div class="col-md">
<div class="form-group my-2">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Betrag
</div>
</div>
<input class="form-control" type="text" id="betrag" name="betrag" value="@betrag" />
<div class="input-group-append">
<div class="input-group-text">€</div>
</div>
</div>
</div>
</div>
</div>
}
<div class="form-row"> <div class="form-row">
<div class="col-md"> <div class="col-md">
@@ -352,7 +575,7 @@
@labelText @labelText
</div> </div>
</div> </div>
<input type="text" class="form-control" id="duration" name="Dauer" onchange="onDurationChange('start-time', 'end-time', 'start-date', 'end-date', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker')" value="@durationValue"> <input type="number" step="0.01" min="0" class="form-control" id="duration" name="Dauer" onchange="onDurationChange('start-time', 'end-time', 'start-date', 'end-date', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker')" value="@durationValue">
@if(Model.IsZeiterfassungInStdMin) @if(Model.IsZeiterfassungInStdMin)
{ {
<div class="input-group-append"> <div class="input-group-append">
@@ -484,303 +707,196 @@
{ {
if(Model.SelectedSupportConcept != null || Model.CostBearer2SupportConceptOid == -2) if(Model.SelectedSupportConcept != null || Model.CostBearer2SupportConceptOid == -2)
{ {
var defaultStartDate = DateTime.Now.GetFirstOfMonth().ToShortDateString();
var defaultEndDate = DateTime.Today.ToShortDateString();
<div class="container-fluid w-100 mt-3 p-0"> <div class="container-fluid w-100 mt-3 p-0">
@using(Html.BeginForm("LoadServiceRecords", "Main", FormMethod.Post, new { id = "selectServiceRecordForm" })) <div class="form-row">
{ <div class="col">
<div class="form-row"> <div class="form-group">
<div class="col"> <select name="Records" class="custom-select" onchange="changeServiceRecordIntervalSelection(this)" id="timeFrameSelect">
<div class="form-group"> <option value="5"
<select name="Records" class="custom-select" onchange="changeServiceRecordIntervalSelection(this)" id="timeFrameSelect"> @{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.XTage) { @Html.Raw("selected") }}>
<option value="5" Letzten x Tage
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.XTage) { @Html.Raw("selected") }}> </option>
Letzten x Tage <option value="0"
</option> @{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.LastWeek) { @Html.Raw("selected") }}>
<option value="0" Letzten 7 Tage
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.LastWeek) { @Html.Raw("selected") }}> </option>
Letzten 7 Tage <option value="1"
</option> @{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.LastMonth) { @Html.Raw("selected") }}>
Letzten 30 Tage
</option>
<option value="2"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.Last3Month) { @Html.Raw("selected") }}>
Letzten 90 Tage
</option>
<option value="3"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.All) { @Html.Raw("selected") }}>
Alle
</option>
<option value="6"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.ZeitraumWaehlen) { @Html.Raw("selected") }}>
Zeitraum wählen
</option>
<option value="7"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.Monatsauswahl) { @Html.Raw("selected") }}>
Monat wählen
</option>
</select>
</div>
</div>
<div class="col-auto">
<button type="button" class="btn btn-success w-100" onclick="loadServiceRecords()">
<span class="fas fa-sync-alt"></span>
</button>
</div>
</div>
@*----- Anzahl Tage: [Nummern-Input] ----- *@
<div class="form-row" id="last-x-interval-container">
<div class="col-12">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Anzahl Tage:</span>
</div>
<input class="form-control" id="day-count-number" type="number" name="day-count-number" min="0" value="@Model.LastSelectedServiceRecordTimeIntervalDays" />
</div>
</div>
</div>
</div>
@*----- Zeitraum wählen: [Von-Datum] bis [Bis-Datum] erster des Monats bis aktuelles Datum ----- *@
<div class="form-row" id="custom-interval-container">
<div class="col-12">
<div class="form-group">
<div class="form-row">
<div class="col-6">
<div class="form-group mb-1">
<div class="input-group date" id="time-frame-start-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<span class="input-group-text">Von</span>
</div>
<input type="text" id="time-frame-start-date" name="von" class="form-control datetimepicker-input" data-target="#time-frame-start-date-picker" value="@defaultStartDate" />
<div class="input-group-append" data-target="#time-frame-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-6">
<div class="form-group mb-1">
<div class="input-group date" id="time-frame-end-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<span class="input-group-text">Bis</span>
</div>
<input type="text" id="time-frame-end-date" name="bis" class="form-control datetimepicker-input" data-target="#time-frame-end-date-picker" value="@defaultEndDate" />
<div class="input-group-append" data-target="#time-frame-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>
</div>
</div>
<div class="form-row" id="month-interval-container">
<div class="col-6">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Monat</span>
</div>
<select name="month-select" class="custom-select" id="month-select">
<option value="1" <option value="1"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.LastMonth) { @Html.Raw("selected") }}> @{if(Model.LastSelectedServiceRecordMonth.Month == 1) { @Html.Raw("selected") } }>
Letzten 30 Tage Januar
</option> </option>
<option value="2" <option value="2"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.Last3Month) { @Html.Raw("selected") }}> @{if(Model.LastSelectedServiceRecordMonth.Month == 2) { @Html.Raw("selected") } }>
Letzten 90 Tage Februar
</option> </option>
<option value="3" <option value="3"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.All) { @Html.Raw("selected") }}> @{ if(Model.LastSelectedServiceRecordMonth.Month == 3) { @Html.Raw("selected") } }>
Alle März
</option>
<option value="4"
@{if(Model.LastSelectedServiceRecordMonth.Month == 4) { @Html.Raw("selected") }}>
April
</option>
<option value="5"
@{if(Model.LastSelectedServiceRecordMonth.Month == 5) { @Html.Raw("selected") }}>
Mai
</option> </option>
<option value="6" <option value="6"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.ZeitraumWaehlen) { @Html.Raw("selected") }}> @{if(Model.LastSelectedServiceRecordMonth.Month == 6) { @Html.Raw("selected") }}>
Zeitraum wählen Juni
</option> </option>
<option value="7" <option value="7"
@{if(Model.ServiceRecordTimeInterval == ServiceRecordTimeInterval.Monatsauswahl) { @Html.Raw("selected") }}> @{if(Model.LastSelectedServiceRecordMonth.Month == 7) { @Html.Raw("selected") }}>
Monat wählen Juli
</option>
<option value="8"
@{if(Model.LastSelectedServiceRecordMonth.Month == 8) { @Html.Raw("selected") }}>
August
</option>
<option value="9"
@{if(Model.LastSelectedServiceRecordMonth.Month == 9) { @Html.Raw("selected") }}>
September
</option>
<option value="10"
@{if(Model.LastSelectedServiceRecordMonth.Month == 10) { @Html.Raw("selected") }}>
Oktober
</option>
<option value="11"
@{if(Model.LastSelectedServiceRecordMonth.Month == 11) { @Html.Raw("selected") }}>
November
</option>
<option value="12"
@{if(Model.LastSelectedServiceRecordMonth.Month == 12) { @Html.Raw("selected") }}>
Dezember
</option> </option>
</select> </select>
</div>
</div>
<div class="col-auto">
<button type="button" class="btn btn-success w-100" onclick="showSpinner();$('#selectServiceRecordForm').submit();">
<span class="fas fa-sync-alt"></span>
</button>
</div>
</div>
@*----- Anzahl Tage: [Nummern-Input] ----- *@
<div class="form-row" id="last-x-interval-container">
<div class="col-12">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Anzahl Tage:</span>
</div>
<input class="form-control" id="day-count-number" type="number" name="day-count-number" min="0" value="@Model.LastSelectedServiceRecordTimeIntervalDays" />
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="col-6">
@*----- Zeitraum wählen: [Von-Datum] bis [Bis-Datum] erster des Monats bis aktuelles Datum ----- *@ <div class="form-group">
var defaultStartDate = DateTime.Now.GetFirstOfMonth().ToShortDateString(); <div class="input-group">
var defaultEndDate = DateTime.Today.ToShortDateString(); <div class="input-group-prepend">
<div class="form-row" id="custom-interval-container"> <span class="input-group-text">Jahr</span>
<div class="col-12">
<div class="form-group">
<div class="form-row">
<div class="col-6">
<div class="form-group mb-1">
<div class="input-group date" id="time-frame-start-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<span class="input-group-text">Von</span>
</div>
<input type="text" id="time-frame-start-date" name="von" class="form-control datetimepicker-input" data-target="#time-frame-start-date-picker" value="@defaultStartDate" />
<div class="input-group-append" data-target="#time-frame-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-6">
<div class="form-group mb-1">
<div class="input-group date" id="time-frame-end-date-picker" data-target-input="nearest">
<div class="input-group-prepend">
<span class="input-group-text">Bis</span>
</div>
<input type="text" id="time-frame-end-date" name="bis" class="form-control datetimepicker-input" data-target="#time-frame-end-date-picker" value="@defaultEndDate" />
<div class="input-group-append" data-target="#time-frame-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>
</div> <select class="custom-select" name="year-select" id="year-select">
</div> @{
</div> var heuer = DateTime.Today.Year;
for(var year = heuer + 1; year >= heuer - 10; year--)
<div class="form-row" id="month-interval-container"> {
<div class="col-6"> <option value="@year"
<div class="form-group"> @{if(Model.LastSelectedServiceRecordMonth.Year == year) { @Html.Raw("selected") }}>
<div class="input-group"> @year
<div class="input-group-prepend"> </option>
<span class="input-group-text">Monat</span>
</div>
<select name="month-select" class="custom-select">
<option value="1"
@{if(Model.LastSelectedServiceRecordMonth.Month == 1) { @Html.Raw("selected") } }>
Januar
</option>
<option value="2"
@{if(Model.LastSelectedServiceRecordMonth.Month == 2) { @Html.Raw("selected") } }>
Februar
</option>
<option value="3"
@{ if(Model.LastSelectedServiceRecordMonth.Month == 3) { @Html.Raw("selected") } }>
März
</option>
<option value="4"
@{if(Model.LastSelectedServiceRecordMonth.Month == 4) { @Html.Raw("selected") }}>
April
</option>
<option value="5"
@{if(Model.LastSelectedServiceRecordMonth.Month == 5) { @Html.Raw("selected") }}>
Mai
</option>
<option value="6"
@{if(Model.LastSelectedServiceRecordMonth.Month == 6) { @Html.Raw("selected") }}>
Juni
</option>
<option value="7"
@{if(Model.LastSelectedServiceRecordMonth.Month == 7) { @Html.Raw("selected") }}>
Juli
</option>
<option value="8"
@{if(Model.LastSelectedServiceRecordMonth.Month == 8) { @Html.Raw("selected") }}>
August
</option>
<option value="9"
@{if(Model.LastSelectedServiceRecordMonth.Month == 9) { @Html.Raw("selected") }}>
September
</option>
<option value="10"
@{if(Model.LastSelectedServiceRecordMonth.Month == 10) { @Html.Raw("selected") }}>
Oktober
</option>
<option value="11"
@{if(Model.LastSelectedServiceRecordMonth.Month == 11) { @Html.Raw("selected") }}>
November
</option>
<option value="12"
@{if(Model.LastSelectedServiceRecordMonth.Month == 12) { @Html.Raw("selected") }}>
Dezember
</option>
</select>
</div>
</div>
</div>
<div class="col-6">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Jahr</span>
</div>
<select class="custom-select" name="year-select">
@{
var heuer = DateTime.Today.Year;
for(var year = heuer + 1; year >= heuer - 10; year--)
{
<option value="@year"
@{if(Model.LastSelectedServiceRecordMonth.Year == year) { @Html.Raw("selected") }}>
@year
</option>
}
} }
</select> }
</div> </select>
</div> </div>
</div> </div>
</div> </div>
} </div>
</div> </div>
} }
<script> <hr class="mt-0"/>
@{
if(Model.SelectedSupportConcept != null || Model.CostBearer2SupportConceptOid == -2)
{
<text>
try {
initializeIntervalSelection();
} catch (error) {
showErrorPopup(error);
}
</text>
}
}
function initializeIntervalSelection() {
try {
var selectedOption = $("#timeFrameSelect").val();
switch (selectedOption) {
case "0":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "1":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "2":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "3":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "4":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
break;
case "5":
$("#last-x-interval-container").show();
$("#custom-interval-container, #month-interval-container").hide();
break;
case "6":
$("#custom-interval-container").show();
$("#last-x-interval-container, #month-interval-container").hide();
break;
case "7":
$("#month-interval-container").show();
$("#last-x-interval-container, #custom-interval-container").hide();
break;
}
} catch (error) {
showErrorPopup(error);
}
}
function changeServiceRecordIntervalSelection(select) {
var form = $("#selectServiceRecordForm");
try {
var selectedOption = $(select).val();
showSpinner();
switch (selectedOption) {
case "0":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
form.submit();
break;
case "1":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
form.submit();
break;
case "2":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
form.submit();
break;
case "3":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
form.submit();
break;
case "4":
$("#last-x-interval-container, #custom-interval-container, #month-interval-container").hide();
form.submit();
break;
case "5":
$("#last-x-interval-container").show();
$("#custom-interval-container, #month-interval-container").hide();
hideSpinner();
break;
case "6":
$("#custom-interval-container").show();
$("#last-x-interval-container, #month-interval-container").hide();
hideSpinner();
break;
case "7":
$("#month-interval-container").show();
$("#last-x-interval-container, #custom-interval-container").hide();
hideSpinner();
break;
}
} catch (error) {
showErrorPopup(error);
}
}
</script>
<div class="container-fluid mt-3" id="service-record-list-container"> <div class="container-fluid mt-3" id="service-record-list-container">
@Html.Partial("ServiceRecordListPartial", Model) @Html.Partial("ServiceRecordListPartial", Model)
</div> </div>
} }
</div> </div>
@*----- /Liste mit den Einträgen und dem Auswahl-Select ----- *@ @*----- /Liste mit den Einträgen und dem Auswahl-Select ----- *@
</div> </div>
@using(Html.BeginForm("DeleteSignature", "Main", FormMethod.Post, new { id = "delete-signature-form" })) @using(Html.BeginForm("DeleteSignature", "Main", FormMethod.Post, new { id = "delete-signature-form" }))

View File

@@ -39,7 +39,7 @@
}); });
</script> </script>
<div class="container-fluid"> <div class="container-fluid" style="max-width: 1200px !important;">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<button type="button" class="btn btn-primary float-right" id="qb-sig-cancel-btn"> <button type="button" class="btn btn-primary float-right" id="qb-sig-cancel-btn">

View File

@@ -204,16 +204,186 @@
try { try {
$.get("@Url.Action("ResetQuittierungsbeleg")"); $.get("@Url.Action("ResetQuittierungsbeleg")");
} catch(error) { } catch(error) {
showErrorPopup(error); window.showErrorPopup(error);
} }
} }
$(document).on("shown.bs.modal", "#qb-report-popup", function () { $(document).on("shown.bs.modal", "#qb-report-popup", function () {
quittierungsbelegsViewer.AdjustControl(); quittierungsbelegsViewer.AdjustControl();
}); });
function checkForExistingSignature() {
try {
var month = $("#month-select option:selected").val();
var year = $("#year-select option:selected").val();
var startDay = $("#start-day-select option:selected").val();
var endDay = $("#end-day-select option:selected").val();
if(startDay === 0 || endDay === 0 || year === 0 || month === 0 || areUndefinedOrNull([month, year, startDay, endDay])) {
return;
}
$.get("@Url.Action("ChangeDateSelection")",
{
startDayString: startDay,
endDayString: endDay,
monthString: month,
yearString: year
});
} catch(error) {
window.showErrorPopup(error);
}
}
function qbFilterSelectionChange() {
try {
var selectedOption = $("#qb-filter-select option:selected").val();
switch(selectedOption) {
case "3":
$("#team-selection-container").removeClass("d-block");
$("#team-selection-container").addClass("d-none");
$("#customer-selection-container").removeClass("d-none");
$("#customer-selection-container").addClass("d-block");
break;
case "4":
$("#customer-selection-container").removeClass("d-block");
$("#customer-selection-container").addClass("d-none");
$("#team-selection-container").removeClass("d-none");
$("#team-selection-container").addClass("d-block");
break;
default:
$("#customer-selection-container, #team-selection-container").removeClass("d-block");
$("#customer-selection-container, #team-selection-container").addClass("d-none");
break;
}
var selectedFilterEnumUrl = getSetQbFilterEnumUrl();
$.get(selectedFilterEnumUrl, {filterEnumString: selectedOption});
} catch(error) {
window.showErrorPopup(error);
}
}
function onQBCustomerDropdownItemClick(customerOid) {
try {
$.get("@Url.Action("SetCustomer")", {customerOid: customerOid}).done(function(result) {
$("#qb-customer-dropdown-menu-btn").text(result);
checkForExistingSignature();
});
} catch(error) {
window.showErrorPopup(error);
}
}
function onQBCustomerSearchInput() {
try {
var input = $("#qb-customer-search-input");
var searchText = input.val();
if(searchText === null || searchText === undefined || searchText.length === 0) {
$("#qb-customer-dropdown-menu .dropdown-item").show();
return;
}
var menuItems = $("#qb-customer-dropdown-menu .dropdown-item");
menuItems.hide();
searchText = searchText.toLowerCase();
$.each(menuItems, function(index, item) {
var itemText = $(item).text().toLowerCase();
if(itemText.includes(searchText)) {
$(item).show();
}
});
} catch(error) {
window.showErrorPopup(error);
}
}
function resetQBCustomerSearch() {
try {
$("#qb-customer-search-input").val("");
$("#qb-customer-dropdown-menu .dropdown-item").show();
var e = window.event;
e.cancelBubble = true;
if(e.stopPropagation) {
e.stopPropagation();
}
} catch(error) {
showErrorPopup(error);
}
}
function onQBTeamDropdownItemClick(teamOid) {
try {
$.get("@Url.Action("SetTeam")", {teamOid: teamOid}).done(function(selectedTeamName) {
$("#qb-team-dropdown-menu-btn").text(selectedTeamName);
checkForExistingSignature();
});
} catch(error) {
window.showErrorPopup(error);
}
}
function onQBTeamSearchInput() {
try {
var input = $("#qb-team-search-input");
var searchText = input.val();
if (searchText === null || searchText === undefined || searchText.length === 0) {
$("#qb-team-dropdown-menu .dropdown-item").show();
return;
}
var menuItems = $("#qb-team-dropdown-menu .dropdown-item");
menuItems.hide();
searchText = searchText.toLowerCase();
$.each(menuItems,
function(index, item) {
var itemText = $(item).text().toLowerCase();
if(itemText.includes(searchText)) {
$(item).show();
}
});
} catch(error) {
window.showErrorPopup(error);
}
}
function resetQBTeamSearch() {
try {
$("#qb-team-search-input").val("");
$("#qb-team-dropdown-menu .dropdown-item").show();
var e = window.event;
e.cancelBubble = true;
if(e.stopPropagation) {
e.stopPropagation();
}
} catch(error) {
window.showErrorPopup(error);
}
}
</script> </script>
<div class="container-fluid my-3" id="report-form-container"> <div class="container-fluid my-3" id="report-form-container" style="max-width: 1200px !important;">
<div class="row"> <div class="row">
<div class="col col-12"> <div class="col col-12">
<div class="mt-3"> <div class="mt-3">
@@ -229,14 +399,36 @@
<div class="mt-3"> <div class="mt-3">
<div class="form-row"> <div class="form-row">
<div class="col-md"> <div class="col-md">
<div class="form-group mb-1 d-none" id="customer-selection-container"> <div class="mt-3" id="customer-selection-container">
<div class="input-group"> @{
<div class="input-group-prepend"> var customerButtonValue = Model.SelectedCustomer?.DetailDescription ?? string.Empty;
<div class="input-group-text"> }
Klient <div class="wide-dropdown">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Klient</span>
</div>
<div class="input-group-append dropdown-append">
<button class="btn btn-bewo-customers dropdown-toggle w-100 text-truncate white-space-normal" type="button" id="qb-customer-dropdown-menu-btn" data-toggle="dropdown">
@customerButtonValue
</button>
<div class="dropdown-menu w-100 dropdown-max-height" id="qb-customer-dropdown-menu">
<div class="input-group px-2">
<input class="form-control" type="text" id="qb-customer-search-input" placeholder="Suchen..." oninput="onQBCustomerSearchInput()" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetQBCustomerSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<div class="dropdown-divider"></div>
@foreach(var customer in Model.Customers)
{
<a class="dropdown-item cursor-pointer" id="customer-@customer.CustomerOid" onclick="onQBCustomerDropdownItemClick(@customer.CustomerOid)">@customer.DetailDescription</a>
}
</div>
</div> </div>
</div> </div>
@Html.DropDownListFor(m => m.SelectedCustomerOid, Model.CustomerListItems, new { id = "customers-drop-down", @class = "custom-select", onchange = "onCustomerSelectionChange()" })
</div> </div>
</div> </div>
</div> </div>
@@ -248,12 +440,33 @@
<div class="col-xl"> <div class="col-xl">
<div class="form-group mb-1 d-none" id="team-selection-container"> <div class="form-group mb-1 d-none" id="team-selection-container">
<div class="input-group"> <div class="input-group">
@{
var teamButtonValue = Model.SelectedTeam?.DetailDescription ?? string.Empty;
}
<div class="input-group-prepend"> <div class="input-group-prepend">
<div class="input-group-text"> <div class="input-group-text">Team</div>
Team </div>
<div class="input-group-append dropdown-append">
<button type="button" class="btn btn-bewo-teams dropdown-toggle w-100 text-truncate white-space-normal" id="qb-team-dropdown-menu-btn" data-toggle="dropdown">
@teamButtonValue
</button>
<div class="dropdown-menu w-100 dropdown-max-height" id="qb-team-dropdown-menu">
<div class="input-group px-2">
<input class="form-control" type="text" id="qb-team-search-input" placeholder="Suchen..." oninput="onQBTeamSearchInput()" />
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary" onclick="resetQBTeamSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<div class="dropdown-divider"></div>
@foreach(var team in Model.AllTeams)
{
<a class="dropdown-item cursor-pointer" id="team-@team.TeamOid" onclick="onQBTeamDropdownItemClick(@team.TeamOid)">@team.DetailDescription</a>
}
</div> </div>
</div> </div>
@Html.DropDownListFor(m => m.SelectedTeamOid, Model.Teams, new { id = "teams-drop-down", @class = "custom-select", onchange = "checkForExistingSignature()" }) @*@Html.DropDownListFor(m => m.SelectedTeamOid, Model.Teams, new { id = "teams-drop-down", @class = "custom-select", onchange = "checkForExistingSignature()" })*@
</div> </div>
</div> </div>
</div> </div>
@@ -264,7 +477,7 @@
<div class="form-row"> <div class="form-row">
<div class="col-xl"> <div class="col-xl">
<div class="form-group mb-1"> <div class="form-group mb-1">
<!-- Nur für ausgewählten Mitarbeiter --> @* Nur für ausgewählten Mitarbeiter *@
<div class="custom-control custom-checkbox custom-control-inline"> <div class="custom-control custom-checkbox custom-control-inline">
@Html.CheckBoxFor(m => m.IsForSelectedEmployeesOnly, new { onchange = "setIsOnlyForSelectedEmployee()", @class = "custom-control-input", id = "selected-employee-cb", data_toggle = "collapse", data_target = "#employee-select-container" }) @Html.CheckBoxFor(m => m.IsForSelectedEmployeesOnly, new { onchange = "setIsOnlyForSelectedEmployee()", @class = "custom-control-input", id = "selected-employee-cb", data_toggle = "collapse", data_target = "#employee-select-container" })
<label class="custom-control-label" for="selected-employee-cb">Nur für ausgewählten Mitarbeiter</label> <label class="custom-control-label" for="selected-employee-cb">Nur für ausgewählten Mitarbeiter</label>
@@ -276,7 +489,7 @@
</div> </div>
<div class="col-xl"> <div class="col-xl">
<div class="form-group mb-1"> <div class="form-group mb-1">
<!-- Nur für ausgewählten Kostenträger --> @* Nur für ausgewählten Kostenträger *@
<div class="custom-control custom-checkbox custom-control-inline"> <div class="custom-control custom-checkbox custom-control-inline">
@Html.CheckBoxFor(m => m.IsForSelectedCostbearersOnly, new { id = "selected-organisation-cb", @class = "custom-control-input", onchange = "setIsOnlyForSelectedOrganisation()", data_toggle = "collapse", data_target = "#organisation-select-container" }) @Html.CheckBoxFor(m => m.IsForSelectedCostbearersOnly, new { id = "selected-organisation-cb", @class = "custom-control-input", onchange = "setIsOnlyForSelectedOrganisation()", data_toggle = "collapse", data_target = "#organisation-select-container" })
<label class="custom-control-label" for="selected-organisation-cb">Nur für ausgewählten Kostenträger</label> <label class="custom-control-label" for="selected-organisation-cb">Nur für ausgewählten Kostenträger</label>
@@ -288,7 +501,7 @@
</div> </div>
<div class="col-xl"> <div class="col-xl">
<div class="form-group mb-1"> <div class="form-group mb-1">
<!-- Nur für ausgewählte Leistungskategorie --> @* Nur für ausgewählte Leistungskategorie *@
<div class="custom-control custom-checkbox custom-control-inline"> <div class="custom-control custom-checkbox custom-control-inline">
@Html.CheckBoxFor(m => m.IsForSelectedCategoryOnly, new { id = "selected-category-cb", @class = "custom-control-input", onchange = "setIsOnlyForSelectedServiceCategory()", data_toggle = "collapse", data_target = "#test-div3" }) @Html.CheckBoxFor(m => m.IsForSelectedCategoryOnly, new { id = "selected-category-cb", @class = "custom-control-input", onchange = "setIsOnlyForSelectedServiceCategory()", data_toggle = "collapse", data_target = "#test-div3" })
<label class="custom-control-label" for="selected-category-cb">Nur für ausgewählte Leistungskategorie</label> <label class="custom-control-label" for="selected-category-cb">Nur für ausgewählte Leistungskategorie</label>
@@ -353,9 +566,10 @@
</div> </div>
</div> </div>
</div> </div>
@* Info-, Erstellen- und Vorschau-Buttons *@
<div class="clearfix mt-3"> <div class="clearfix mt-3">
<button type="button" class="btn btn-primary float-left" data-toggle="modal" data-target="#qb-info-popup"> <button type="button" class="btn btn-info float-left" data-toggle="modal" data-target="#qb-info-popup">
<span class="fas fa-info"></span> <span class="fas fa-info"></span>
</button> </button>
@@ -377,13 +591,13 @@
</div> </div>
<!-- Container für die Mitarbeiterunterschrift --> <!-- Container für die Mitarbeiterunterschrift -->
<div class="container-fluid d-none my-3" id="report-signature-container"> <div class="container-fluid d-none my-3" id="report-signature-container" style="max-width: 1200px !important;">
</div> </div>
<!-- /Container für die Mitarbeiterunterschrift --> <!-- /Container für die Mitarbeiterunterschrift -->
<!-- Container für die Unterschrift --> <!-- Container für die Unterschrift -->
<div class="container-fluid d-none my-3" id="report-signature-container-div"> <div class="container-fluid d-none my-3" id="report-signature-container-div" style="max-width: 1200px !important;">
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
@@ -423,7 +637,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title text-danger">Legende</h5> <h5 class="modal-title text-danger font-weight-bold">Legende</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close"> <button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@@ -508,7 +722,7 @@
<div class="modal-dialog modal-xl modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-xl modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header py-1"> <div class="modal-header py-1">
<p class="modal-title">Quittierungsbeleg</p> <p class="modal-title font-weight-bold">Quittierungsbeleg</p>
<button class="close" type="button" data-dismiss="modal" aria-label="close" onclick="resetQuittierungsbeleg()"> <button class="close" type="button" data-dismiss="modal" aria-label="close" onclick="resetQuittierungsbeleg()">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -15,29 +15,6 @@
} }
} }
@*
Formular-Inputs:
1. SupportConcept wie in SingleBookingFormPartial.cshtml
2. Employee
3. Customer
4. Team
5. Organisation
6. Month
7. Year (DateTime.Now.Year - 10 bis DateTime.Now.Year + 1)
8. Date
9. DateRange (Start & Ende)
10. ValueListEntry, z.B. Betreuungsart_8 -> Name: Betreuungsart, ValueListEntryType: 8
11. ServiceCategory
12. Custom
13. Text
// ToDo: Beim Auswählen eines Hilfeplans etc. berichte-form-container neu laden!
*@
<script type="text/javascript"> <script type="text/javascript">
$(function () { $(function () {
$("#query-date-picker").datetimepicker({ $("#query-date-picker").datetimepicker({
@@ -54,6 +31,16 @@
locale: "de", locale: "de",
format: "L" format: "L"
}); });
});
$(document).ready(function() {
try {
calcPrependWidth();
} catch (error) {
showErrorPopup(error);
}
}); });
function selectCostBearer2SupportConceptRel(relOid, parameterType, parameterOid) { function selectCostBearer2SupportConceptRel(relOid, parameterType, parameterOid) {
@@ -66,9 +53,10 @@
function selectMonth(parameterType, parameterOid) { function selectMonth(parameterType, parameterOid) {
try { try {
var selectedMonth = $("#month-select").find(":selected").val(); var selectedMonth = $("#month-select").find(":selected").val().toString();
var selectedYear = $("#month-year-select").find(":selected").val().toString();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: selectedMonth.toString()}); $("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: `${selectedMonth}_${selectedYear}`});
} catch(error) { } catch(error) {
showErrorPopup(error); showErrorPopup(error);
} }
@@ -111,9 +99,9 @@
$.each(menuItems, $.each(menuItems,
function (index, item) { function (index, item) {
var itemText = $(item).text(); var itemText = $(item).text().toLowerCase();
if(itemText.includes(searchText)) { if(itemText.includes(searchText.toLowerCase())) {
$(item).show(); $(item).show();
} }
}); });
@@ -159,7 +147,7 @@
function selectOrganisationParameter(element, organisationOid, parameterType, parameterOid) { function selectOrganisationParameter(element, organisationOid, parameterType, parameterOid) {
try { try {
$("#dropdownOrganisationsMenu").text($(element).text()); $("#dropdownOrganisationsMenu").text(organisationOid === 0 ? "Organisation" : $(element).text());
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: organisationOid, parameterType: parameterType, parameterOid: parameterOid}); $("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: organisationOid, parameterType: parameterType, parameterOid: parameterOid});
} catch(error) { } catch(error) {
@@ -184,17 +172,69 @@
showErrorPopup(error); showErrorPopup(error);
} }
} }
function selectValueListEntry(element, parameterType, parameterOid) {
try {
var selectedOption = $(element).find(":selected");
var valueListEntryOid = selectedOption.val();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: valueListEntryOid, parameterType: parameterType, parameterOid: parameterOid});
} catch(error) {
showErrorPopup(error);
}
}
function selectQueryText(element, parameterType, parameterOid) {
try {
var selectedText = $(element).val();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: selectedText});
} catch(error) {
showErrorPopup(error);
}
}
function selectQueryDate(element, parameterType, parameterOid) {
try {
var date = $(element).val().toString();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: date});
} catch(error) {
showErrorPopup(error);
}
}
function selectQueryDateRange(parameterType, parameterOid) {
try {
var start = $("#query-date-range-start").val().toString();
var end = $("#query-date-range-end").val().toString();
if(!start || !end) {
return;
}
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: `${start}_${end}`});
} catch(error) {
showErrorPopup(error);
}
}
</script> </script>
@if(Model.SelectedQuery != null && Model.SelectedQuery.Parameter != null && Model.SelectedQuery.Parameter.Count > 0) @if(Model.SelectedQuery != null && Model.SelectedQuery.Parameter != null && Model.SelectedQuery.Parameter.Count > 0)
{ {
<div class="mt-3"> <div>
<hr /> <hr />
@for(var i = 0; i < Model.SelectedQuery.Parameter.Count; i++) @for(var i = 0; i < Model.SelectedQuery.Parameter.Count; i++)
{ {
var parameter = Model.SelectedQuery.Parameter[i]; var parameter = Model.SelectedQuery.Parameter[i];
if(parameter?.QueryParameterOid is null)
{
continue;
}
var parameterType = (int) parameter.ParamType; var parameterType = (int) parameter.ParamType;
var parameterOid = parameter.QueryParameterOid; var parameterOid = parameter.QueryParameterOid.Value;
switch(parameter.ParamType) switch(parameter.ParamType)
{ {
@@ -224,7 +264,7 @@
<div class="modal-dialog text-center modal-dialog-scrollable" role="document"> <div class="modal-dialog text-center modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Hilfeplanauswahl</h5> <h5 class="modal-title font-weight-bold">Hilfeplanauswahl</h5>
<button type="button" class="close" data-dismiss="modal" onclick="resetSupportConceptSearch()"> <button type="button" class="close" data-dismiss="modal" onclick="resetSupportConceptSearch()">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -272,28 +312,39 @@
@{ @{
var employeeButtonValue = "Mitarbeiter"; var employeeButtonValue = "Mitarbeiter";
if(parameterOid.HasValue && Model.SelectedValues.ContainsKey(parameterOid.Value) && Model.SelectedValues[parameterOid.Value].Parameter is CompactEmployeeDC selectedEmployee) if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is CompactEmployeeDC selectedEmployee)
{ {
employeeButtonValue = selectedEmployee.DetailDescription; employeeButtonValue = selectedEmployee.DetailDescription;
} }
} }
<button class="btn btn-bewo-employee dropdown-toggle w-100" type="button" id="dropdownEmployeesMenu" data-toggle="dropdown">
@employeeButtonValue <div class="input-group">
</button> <div class="input-group-prepend wide-dropdown">
<div class="dropdown-menu" id="query-employee-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;"> <button class="btn btn-bewo-employee dropdown-toggle w-100" type="button" id="dropdownEmployeesMenu" data-toggle="dropdown">
<div class="input-group px-2"> @employeeButtonValue
<input class="form-control w-100" id="query-employee-search-input" type="text" placeholder="Suchen ..." oninput="onDropdownParameterInput(this)" /> </button>
<div class="input-group-append"> <div class="dropdown-menu w-100" id="query-employee-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;">
<button class="btn btn-outline-secondary" type="button" onclick="resetDropdownParameterSearch('employee')"> <div class="input-group px-2">
<span class="fas fa-times-circle"></span> <input class="form-control" id="query-employee-search-input" type="text" placeholder="Suchen..." oninput="onDropdownParameterInput(this)" />
</button> <div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetDropdownParameterSearch('employee')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<div class="dropdown-divider"></div>
<a class="dropdown-item" style="cursor: pointer;" id="query-team-0" onclick="selectEmployeeParameter(this, 0, @parameterType, @parameterOid)">&nbsp;</a>
@foreach(var employee in Model.AllEmployeesForQueries)
{
<a class="dropdown-item" style="cursor: pointer;" id="query-employee-@employee.EmployeeOid" onclick="selectEmployeeParameter(this, @employee.EmployeeOid, @parameterType, @parameterOid)">@employee.DetailDescription</a>
}
</div> </div>
</div> </div>
<div class="dropdown-divider"></div> <div class="input-group-append" style="min-width: min-content !important;">
@foreach(var employee in Model.AllEmployeesForQueries) <button class="btn btn-outline-bewo-employee w-100" type="button" onclick="selectEmployeeParameter(getElementById('query-employee-0'), 0, @parameterType, @parameterOid)">
{ <span class="fas fa-times-circle"></span>
<a class="dropdown-item" style="cursor: pointer;" id="query-employee-@employee.EmployeeOid" onclick="selectEmployeeParameter(this, @employee.EmployeeOid, @parameterType, @parameterOid)">@employee.DetailDescription</a> </button>
} </div>
</div> </div>
</div> </div>
</div> </div>
@@ -308,31 +359,41 @@
@{ @{
var customerButtonValue = "Klient"; var customerButtonValue = "Klient";
if(parameterOid.HasValue && Model.SelectedValues.ContainsKey(parameterOid.Value)) if(Model.SelectedValues.ContainsKey(parameterOid))
{ {
if(Model.SelectedValues[parameterOid.Value].Parameter is CompactCustomerDC selectedCustomer) if(Model.SelectedValues[parameterOid].Parameter is CompactCustomerDC selectedCustomer)
{ {
customerButtonValue = selectedCustomer.DetailDescription; customerButtonValue = selectedCustomer.DetailDescription;
} }
} }
} }
<button class="btn btn-bewo-customers dropdown-toggle w-100" type="button" id="dropdownCustomersMenu" data-toggle="dropdown"> <div class="input-group">
@customerButtonValue <div class="input-group-prepend wide-dropdown">
</button> <button class="btn btn-bewo-customers dropdown-toggle w-100" type="button" id="dropdownCustomersMenu" data-toggle="dropdown">
<div class="dropdown-menu" id="query-customer-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;"> @customerButtonValue
<div class="input-group px-2"> </button>
<input class="form-control w-100" id="query-customer-search-input" type="text" placeholder="Suchen ..." oninput="onDropdownParameterInput(this)" /> <div class="dropdown-menu w-100" id="query-customer-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;">
<div class="input-group-append"> <div class="input-group px-2">
<button class="btn btn-outline-secondary" type="button" onclick="resetDropdownParameterSearch('customer')"> <input class="form-control w-100" id="query-customer-search-input" type="text" placeholder="Suchen ..." oninput="onDropdownParameterInput(this)" />
<span class="fas fa-times-circle"></span> <div class="input-group-append">
</button> <button class="btn btn-outline-secondary" type="button" onclick="resetDropdownParameterSearch('customer')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<div class="dropdown-divider"></div>
<a class="dropdown-item" style="cursor: pointer;" id="query-customer-0" onclick="selectCustomerParameter(this, 0, @parameterType, @parameterOid)">&nbsp;</a>
@foreach(var customer in Model.AllCustomersForQueries)
{
<a class="dropdown-item" style="cursor: pointer;" id="query-customer-@customer.CustomerOid" onclick="selectCustomerParameter(this, @customer.CustomerOid, @parameterType, @parameterOid)">@customer.DetailDescription</a>
}
</div> </div>
</div> </div>
<div class="dropdown-divider"></div> <div class="input-group-append" style="min-width: min-content !important;">
@foreach(var customer in Model.AllCustomersForQueries) <button class="btn btn-outline-bewo-customers w-100" type="button" onclick="selectCustomerParameter(getElementById('query-customer-0', 0, @parameterType, @parameterOid))">
{ <span class="fas fa-times-circle"></span>
<a class="dropdown-item" style="cursor: pointer;" id="query-customer-@customer.CustomerOid" onclick="selectCustomerParameter(this, @customer.CustomerOid, @parameterType, @parameterOid)">@customer.DetailDescription</a> </button>
} </div>
</div> </div>
</div> </div>
</div> </div>
@@ -349,14 +410,24 @@
Monat Monat
</div> </div>
</div> </div>
<select class="custom-select" id="month-select" onchange="selectMonth()"> <select class="custom-select" id="month-select" onchange="selectMonth(@parameterType, @parameterOid)">
@foreach(var month in Model.Months) @foreach(var month in Model.Months)
{ {
var selected = string.Empty; var selected = string.Empty;
if(parameterOid.HasValue && Model.SelectedValues.ContainsKey(parameterOid.Value)) if(Model.SelectedValues.ContainsKey(parameterOid))
{ {
if(Model.SelectedValues[parameterOid.Value].Parameter is string monthAsString && Model.Months.Any(m => m.Value.Equals(monthAsString))) if(Model.SelectedValues[parameterOid].Parameter is DateTime monthDate && month.Value.Equals(monthDate.Month.ToString()))
{
selected = "selected";
}
}
else
{
var lastMonth = DateTime.Today.AddMonths(-1);
var selectedMonth = lastMonth.Month.ToString();
if(selectedMonth.Equals(month.Text))
{ {
selected = "selected"; selected = "selected";
} }
@@ -365,20 +436,27 @@
<option value="@month.Value" @selected>@month.Text</option> <option value="@month.Value" @selected>@month.Text</option>
} }
</select> </select>
<select class="custom-select" id="month-year-select" onchange="selectYear()"> <select class="custom-select" id="month-year-select" onchange="selectMonth(@parameterType, @parameterOid)">
@foreach(var year in MobileUtils.Years) @foreach(var year in MobileUtils.Years)
{ {
var selected = string.Empty; var selected = string.Empty;
if(parameterOid.HasValue && Model.SelectedValues.ContainsKey(parameterOid.Value)) if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is DateTime selectedYear)
{ {
if(Model.SelectedValues[parameterOid.Value].Parameter is int selectedYear && year.Equals(selectedYear)) if(year.Equals(selectedYear.Year))
{ {
selected = "selected"; selected = "selected";
} }
} }
else
{
var lastMonth = DateTime.Today.AddMonths(-1);
var selectedYear2 = lastMonth.Year;
<option value="@MobileUtils.Years.IndexOf(year)" @selected>@year</option> selected = year.Equals(selectedYear2) ? "selected" : string.Empty;
}
<option value="@year" @selected>@year</option>
} }
</select> </select>
</div> </div>
@@ -388,6 +466,12 @@
</div> </div>
break; break;
case QueryParameterType.Date: case QueryParameterType.Date:
var dateValue = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is DateTime queryDate)
{
dateValue = queryDate.ToString("dd.MM.yyyy");
}
<div class="form-row"> <div class="form-row">
<div class="col-md"> <div class="col-md">
<div class="form-group my-2"> <div class="form-group my-2">
@@ -397,7 +481,7 @@
Datum Datum
</div> </div>
</div> </div>
<input type="text" id="query-date" name="query-date" class="form-control datetimepicker-input" data-target="#query-date-picker" data-toggle="datetimepicker" /> <input onfocusout="selectQueryDate(this, @parameterType, @parameterOid)" type="text" id="query-date" value="@dateValue" name="query-date" class="form-control datetimepicker-input" data-target="#query-date-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#query-date-picker" data-toggle="datetimepicker"> <div class="input-group-append" data-target="#query-date-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2"> <div class="input-group-text px-2">
<i class="fas fa-calendar-alt"></i> <i class="fas fa-calendar-alt"></i>
@@ -409,6 +493,14 @@
</div> </div>
break; break;
case QueryParameterType.DateRange: case QueryParameterType.DateRange:
var startValue = string.Empty;
var endValue = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is BS.Shared.Core.DateTimeSpan dateTimeSpan)
{
startValue = dateTimeSpan.StartDate.ToString("dd.MM.yyyy");
endValue = dateTimeSpan.EndDate.ToString("dd.MM.yyyy");
}
<div class="form-row"> <div class="form-row">
<div class="col-md"> <div class="col-md">
<div class="form-group my-2"> <div class="form-group my-2">
@@ -418,7 +510,7 @@
Zeitraum Zeitraum
</div> </div>
</div> </div>
<input type="text" id="query-date-range-start" name="query-date-range-start" class="form-control datetimepicker-input" data-target="#query-date-range-start-picker" data-toggle="datetimepicker" /> <input onfocusout="selectQueryDateRange(@parameterType, @parameterOid)" value="@startValue" type="text" id="query-date-range-start" name="query-date-range-start" class="form-control datetimepicker-input" data-target="#query-date-range-start-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#query-date-range-start-picker" data-toggle="datetimepicker"> <div class="input-group-append" data-target="#query-date-range-start-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2"> <div class="input-group-text px-2">
<i class="fas fa-calendar-alt"></i> <i class="fas fa-calendar-alt"></i>
@@ -430,7 +522,7 @@
<div class="col-md"> <div class="col-md">
<div class="form-group my-2"> <div class="form-group my-2">
<div class="input-group date" id="query-date-range-end-picker" data-target-input="nearest"> <div class="input-group date" id="query-date-range-end-picker" data-target-input="nearest">
<input type="text" id="query-date-range-end" name="query-date-range-end" class="form-control datetimepicker-input" data-target="#query-date-range-end-picker" data-toggle="datetimepicker" /> <input onfocusout="selectQueryDateRange(@parameterType, @parameterOid)" value="@endValue" type="text" id="query-date-range-end" name="query-date-range-end" class="form-control datetimepicker-input" data-target="#query-date-range-end-picker" data-toggle="datetimepicker" />
<div class="input-group-append" data-target="#query-date-range-end-picker" data-toggle="datetimepicker"> <div class="input-group-append" data-target="#query-date-range-end-picker" data-toggle="datetimepicker">
<div class="input-group-text px-2"> <div class="input-group-text px-2">
<i class="fas fa-calendar-alt"></i> <i class="fas fa-calendar-alt"></i>
@@ -448,28 +540,40 @@
@{ @{
var teamButtonValue = "Team"; var teamButtonValue = "Team";
if(parameterOid.HasValue && Model.SelectedValues[parameterOid.Value].Parameter is CompactTeamDC selectedTeam) if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is CompactTeamDC selectedTeam)
{ {
teamButtonValue = selectedTeam.Name; teamButtonValue = selectedTeam.Name;
} }
} }
<button class="btn btn-bewo-teams dropdown-toggle w-100" type="button" id="dropdownTeamsMenu" data-toggle="dropdown">
@teamButtonValue <div class="input-group">
</button> <div class="input-group-prepend wide-dropdown">
<div class="dropdown-menu" id="query-team-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;"> <button class="btn btn-bewo-teams dropdown-toggle w-100" type="button" id="dropdownTeamsMenu" data-toggle="dropdown">
<div class="input-group px-2"> @teamButtonValue
<input class="form-control w-100" id="query-team-search-input" type="text" placeholder="Suchen ..." oninput="onDropdownParameterInput(this)" /> </button>
<div class="input-group-append"> <div class="dropdown-menu w-100" id="query-team-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;">
<button class="btn btn-outline-secondary" type="button" onclick="resetDropdownParameterSearch('team')"> <div class="input-group px-2">
<span class="fas fa-times-circle"></span> <input class="form-control w-100" id="query-team-search-input" type="text" placeholder="Suchen ..." oninput="onDropdownParameterInput(this)" />
</button> <div class="input-group-append">
<button class="btn btn-outline-bewo-teams" type="button" onclick="resetDropdownParameterSearch('team')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<div class="dropdown-divider"></div>
<a class="dropdown-item" style="cursor: pointer;" id="query-team-0" onclick="selectTeamParameter(this, 0, @parameterType, @parameterOid)">&nbsp;</a>
@foreach(var team in Model.AllTeamsForQueries)
{
<a class="dropdown-item" style="cursor: pointer;" id="query-team-@team.TeamOid" onclick="selectTeamParameter(this, @team.TeamOid, @parameterType, @parameterOid)">@team.Name</a>
}
</div> </div>
</div> </div>
<div class="dropdown-divider"></div> <div class="input-group-append" style="min-width: min-content !important;">
@foreach(var team in Model.AllTeamsForQueries) <button class="btn btn-outline-secondary w-100" type="button" onclick="selectTeamParameter(getElementById('query-team-0', 0, @parameterType, @parameterOid))">
{ <span class="fas fa-times-circle"></span>
<a class="dropdown-item" style="cursor: pointer;" id="query-team-@team.TeamOid" onclick="selectTeamParameter(this, @team.TeamOid, @parameterType, @parameterOid)">@team.Name</a> </button>
} </div>
</div> </div>
</div> </div>
</div> </div>
@@ -486,13 +590,15 @@
</div> </div>
</div> </div>
<select class="custom-select" id="category-@i-select" onchange="selectServiceCategoryParameter(this, @parameterType, @parameterOid)"> <select class="custom-select" id="category-@i-select" onchange="selectServiceCategoryParameter(this, @parameterType, @parameterOid)">
<option value="0"></option>
@foreach(var category in Model.AllServiceCategoriesForQueries) @foreach(var category in Model.AllServiceCategoriesForQueries)
{ {
var selected = string.Empty; var selected = string.Empty;
if(parameterOid.HasValue && Model.SelectedValues.ContainsKey(parameterOid.Value)) if(Model.SelectedValues.ContainsKey(parameterOid))
{ {
if(Model.SelectedValues[parameterOid.Value].Parameter is ServiceCategoryDC serviceCategory && serviceCategory.Equals(category)) if(Model.SelectedValues[parameterOid].Parameter is ServiceCategoryDC serviceCategory && serviceCategory.Equals(category))
{ {
selected = "selected"; selected = "selected";
} }
@@ -516,7 +622,10 @@
Text Text
</div> </div>
</div> </div>
<input class="form-control w-100" type="text" id="query-text" name="query-text" /> @{
var selectedText = Model.SelectedValues.ContainsKey(parameterOid) ? Model.SelectedValues[parameterOid].Parameter.ToString() : string.Empty;
}
<input class="form-control w-100" value="@selectedText" type="text" id="query-text" name="query-text" onchange="selectQueryText(this, @parameterType, @parameterOid)" />
</div> </div>
</div> </div>
</div> </div>
@@ -532,14 +641,14 @@
Jahr Jahr
</div> </div>
</div> </div>
<select class="custom-select" id="year-select" onchange="selectYear()"> <select class="custom-select" id="year-select" onchange="selectYear(@parameterType, @parameterOid)">
@foreach(var year in MobileUtils.Years) @foreach(var year in MobileUtils.Years)
{ {
var selected = string.Empty; var selected = string.Empty;
if(parameterOid.HasValue && Model.SelectedValues.ContainsKey(parameterOid.Value)) if(Model.SelectedValues.ContainsKey(parameterOid))
{ {
if(Model.SelectedValues[parameterOid.Value].Parameter is int selectedYear && year.Equals(selectedYear)) if(Model.SelectedValues[parameterOid].Parameter is int selectedYear && year.Equals(selectedYear))
{ {
selected = "selected"; selected = "selected";
} }
@@ -559,26 +668,44 @@
<div class="form-group my-2"> <div class="form-group my-2">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text"> <div class="input-group-text">
@parameter.Name @{
</div> var parameterName = parameter.Name;
</div> if(parameter.Name.Contains("_"))
@*<select class="custom-select" id="category-@i-select" onchange="selectServiceCategoryParameter(this, @parameterType, @parameterOid)">
@foreach(var category in Model.AllServiceCategoriesForQueries)
{
var selected = string.Empty;
if(parameterOid.HasValue && Model.SelectedValues.ContainsKey(parameterOid.Value))
{
if(Model.SelectedValues[parameterOid.Value].Parameter is ServiceCategoryDC serviceCategory && serviceCategory.Equals(category))
{ {
selected = "selected"; var splitName = parameter.Name.Split('_');
parameterName = string.Empty;
for(var j = 0; j < splitName.Length-1; j++)
{
parameterName += splitName[j];
}
}
ValueListEntryDC selectedValueListEntry = null;
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is ValueListEntryDC vle)
{
selectedValueListEntry = vle;
} }
} }
<option value="@category.ServiceCategoryOid" @selected>@category.Name</option> @parameterName
</div>
</div>
<select class="custom-select" id="value-list-entry-@i-select" onchange="selectValueListEntry(this, @parameterType, @parameter.QueryParameterOid)">
<option value="0"></option>
@foreach(var valueListEntry in Model.ValueListEntryTypes2ValueListEntries[Model.GetValueListEntryTypeByQueryParameter(parameter.Name)])
{
var selected = string.Empty;
if(selectedValueListEntry?.Equals(valueListEntry) ?? false)
{
selected = "selected";
}
<option value="@valueListEntry.ValueListEntryOid" @selected>@valueListEntry.DisplayName</option>
} }
</select>*@ </select>
</div> </div>
</div> </div>
</div> </div>
@@ -591,32 +718,44 @@
@{ @{
var organisationButtonValue = "Organisation"; var organisationButtonValue = "Organisation";
if(parameterOid.HasValue && Model.SelectedValues.ContainsKey(parameterOid.Value)) if(Model.SelectedValues.ContainsKey(parameterOid))
{ {
if(Model.SelectedValues[parameterOid.Value].Parameter is CompactOrganisationDC selectedOrganisation) if(Model.SelectedValues[parameterOid].Parameter is CompactOrganisationDC selectedOrganisation)
{ {
organisationButtonValue = selectedOrganisation.DetailDescription; organisationButtonValue = selectedOrganisation.DetailDescription;
} }
} }
} }
<button class="btn btn-bewo-organisation dropdown-toggle w-100" type="button" id="dropdownOrganisationsMenu" data-toggle="dropdown"> <div class="input-group">
@organisationButtonValue <div class="input-group-prepend wide-dropdown">
</button> <button class="btn btn-bewo-organisation dropdown-toggle w-100" type="button" id="dropdownOrganisationsMenu" data-toggle="dropdown">
<div class="dropdown-menu" id="query-organisation-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;"> @organisationButtonValue
<div class="input-group px-2"> </button>
<input class="form-control w-100" id="query-organisation-search-input" type="text" placeholder="Suchen ..." oninput="onDropdownParameterInput(this)" /> <div class="dropdown-menu w-100" id="query-organisation-dropdown-menu" style="max-height: 90vh !important; overflow-y: auto !important;">
<div class="input-group-append"> <div class="input-group px-2">
<button class="btn btn-outline-secondary" type="button" onclick="resetDropdownParameterSearch('organisation')"> <input class="form-control w-100" id="query-organisation-search-input" type="text" placeholder="Suchen ..." oninput="onDropdownParameterInput(this)" />
<span class="fas fa-times-circle"></span> <div class="input-group-append">
</button> <button class="btn btn-outline-bewo-organisation" type="button" onclick="resetDropdownParameterSearch('organisation')">
<span class="fas fa-times-circle"></span>
</button>
</div>
</div>
<div class="dropdown-divider"></div>
<a class="dropdown-item" style="cursor: pointer;" id="query-organisation-0" onclick="selectOrganisationParameter(this, 0, @parameterType, @parameterOid)">&nbsp;</a>
@foreach(var organisation in Model.AllOrganisationForQuery)
{
<a class="dropdown-item" style="cursor: pointer;" id="query-organisation-@organisation.OrganisationOid" onclick="selectOrganisationParameter(this, @organisation.OrganisationOid, @parameterType, @parameterOid)">@organisation.Name</a>
}
</div> </div>
</div> </div>
<div class="dropdown-divider"></div> <div class="input-group-append" style="min-width: min-content !important;">
@foreach(var organisation in Model.AllOrganisationForQuery) <button class="btn btn-outline-secondary w-100" type="button" onclick="selectOrganisationParameter(getElementById('query-organisation-0', 0, @parameterType, @parameterOid))">
{ <span class="fas fa-times-circle"></span>
<a class="dropdown-item" style="cursor: pointer;" id="query-team-@organisation.OrganisationOid" onclick="selectOrganisationParameter(this, @organisation.OrganisationOid, @parameterType, @parameterOid)">@organisation.Name</a> </button>
} </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -627,7 +766,7 @@
<div class="form-group my-2"> <div class="form-group my-2">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text"> <div class="input-group-text">
@parameter.Name @parameter.Name
</div> </div>
</div> </div>
@@ -644,6 +783,13 @@
break; break;
} }
} }
<hr />
<div class="form-row">
<div class="col-md">
<button class="btn btn-primary" type="button">Bericht &ouml;ffnen</button>
</div>
</div>
</div> </div>
} }

View File

@@ -52,7 +52,7 @@
} }
</script> </script>
<div class="container my-3"> <div class="container my-3" style="max-width: 1200px !important;">
<div class="row h-auto" id="abc-def"> <div class="row h-auto" id="abc-def">
<div class="col-sm-12 col-md-4 col-lg-4 col-xl-3"> <div class="col-sm-12 col-md-4 col-lg-4 col-xl-3">
<div class="row"> <div class="row">
@@ -68,5 +68,8 @@
</div> </div>
<div id="msk-report-container"> <div id="msk-report-container">
@Html.Partial("BeWoReportPartial", Model) @if(Model?.Report != null)
{
@Html.Partial("BeWoReportPartial", Model)
}
</div> </div>

View File

@@ -16,7 +16,6 @@
<script type="text/javascript"> <script type="text/javascript">
function reportFilterOnChange() { function reportFilterOnChange() {
try { try {
//team oder mitarbeiter
toggleMitarbeiterstundenForm(); toggleMitarbeiterstundenForm();
} catch (error) { } catch (error) {
showErrorPopup(error); showErrorPopup(error);
@@ -153,8 +152,6 @@
$("#bewo-report-popup").modal("show"); $("#bewo-report-popup").modal("show");
}); });
} }
} catch (error) { } catch (error) {
showErrorPopup(error); showErrorPopup(error);
} }
@@ -166,11 +163,12 @@
@if(Model.SelectedReportType == ReportType.Berichte) @if(Model.SelectedReportType == ReportType.Berichte)
{ {
@Html.DropDownListFor(model => model.SelectedCustomReport, Model.CustomReports, new { @class = "custom-select", id = "msk-customReportSelect", onchange = "loadCustomReport()" }) @Html.DropDownListFor(model => model.SelectedCustomReport, Model.CustomReports, new { @class = "custom-select", id = "msk-customReportSelect", onchange = "loadCustomReport()" })
var berichteFormContainerDisplay = Model.SelectedCustomReport?.QueryOid != null ? "block" : "none";
<div id="berichte-form-container" style="display: none;"> <div id="berichte-form-container" style="display: @berichteFormContainerDisplay;">
@Html.Partial("BerichteFormPartialView", Model) @Html.Partial("BerichteFormPartialView", Model)
</div> </div>
} }
@if(Model.SelectedReportType == ReportType.Mitarbeiterstundenkonto && AbstractModel.HasRightToViewMitarbeiterstundenkonto) @if(Model.SelectedReportType == ReportType.Mitarbeiterstundenkonto && AbstractModel.HasRightToViewMitarbeiterstundenkonto)

View File

@@ -312,7 +312,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Ressourcen</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Ressourcen</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetTreeSearch('resource-search-input', 'resource-text', 'category-card')"> <button type="button" class="close" data-dismiss="modal" onclick="resetTreeSearch('resource-search-input', 'resource-text', 'category-card')">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -535,7 +535,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Mitarbeiter</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Mitarbeiter</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetEmployeeSearch()"> <button type="button" class="close" data-dismiss="modal" onclick="resetEmployeeSearch()">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -614,7 +614,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Klienten</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Klienten</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('customer-search-input', 'customer-text')"> <button type="button" class="close" data-dismiss="modal" onclick="resetSearch('customer-search-input', 'customer-text')">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -431,7 +431,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Ressourcen</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Ressourcen</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetTreeSearch('interval-finder-resource-search-input', 'resource-text', 'category-card')"> <button type="button" class="close" data-dismiss="modal" onclick="resetTreeSearch('interval-finder-resource-search-input', 'resource-text', 'category-card')">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -501,7 +501,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Mitarbeiter</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Mitarbeiter</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('interval-finder-employee-search-input', 'interval-finder-employee-text')"> <button type="button" class="close" data-dismiss="modal" onclick="resetSearch('interval-finder-employee-search-input', 'interval-finder-employee-text')">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -587,7 +587,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Klienten</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Klienten</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetSearch('interval-finder-customer-search-input', 'interval-finder-customer-text')"> <button type="button" class="close" data-dismiss="modal" onclick="resetSearch('interval-finder-customer-search-input', 'interval-finder-customer-text')">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -113,7 +113,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Klienten</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Klienten</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetCustomerSearchForFiltering()"> <button type="button" class="close" data-dismiss="modal" onclick="resetCustomerSearchForFiltering()">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -134,7 +134,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Mitarbeiter</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Mitarbeiter</h6>
<button type="button" class="close" onclick="resetEmployeeSearchForFiltering()"> <button type="button" class="close" onclick="resetEmployeeSearchForFiltering()">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -59,7 +59,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title">Termin l&ouml;schen</h6> <h6 class="modal-title font-weight-bold">Termin l&ouml;schen</h6>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -262,7 +262,7 @@
} }
</div> </div>
<div class="container-fluid"> <div class="container-fluid" style="max-width: 1200px !important;">
<hr /> <hr />
<div class="row"> <div class="row">
@{ @{
@@ -323,7 +323,7 @@
<div class="modal-dialog modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h6 class="modal-title text-center w-100">Ressourcen</h6> <h6 class="modal-title text-center w-100 font-weight-bold">Ressourcen</h6>
<button type="button" class="close" data-dismiss="modal" onclick="resetTreeSearch('resource-search-input2', 'resource-text2', 'category-card')"> <button type="button" class="close" data-dismiss="modal" onclick="resetTreeSearch('resource-search-input2', 'resource-text2', 'category-card')">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -26,7 +26,7 @@
<div class="modal-dialog modal-xl modal-dialog-scrollable" role="document"> <div class="modal-dialog modal-xl modal-dialog-scrollable" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">@Model.ReportName</h5> <h5 class="modal-title font-weight-bold">@Model.ReportName</h5>
<button type="button" class="close" data-dismiss="modal" onclick="closeReport()"> <button type="button" class="close" data-dismiss="modal" onclick="closeReport()">
<span>&times;</span> <span>&times;</span>
</button> </button>

View File

@@ -6,13 +6,13 @@
<html> <html>
<head> <head>
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Error</title> <title>Fehler</title>
<link rel="stylesheet" href="~/Content/BeWoMobileStyle.css?v=1.2" /> <link rel="stylesheet" href="@Url.Content("~/Content/style.css")" />
</head> </head>
<body> <body>
<hgroup> <hgroup>
<h1>Error.</h1> <h1>Fehler.</h1>
<h2>An error occurred while processing your request. </h2> <h2>Es ist ein Fehler aufgetreten. Bitte wenden Sie sich an Ihren Administrator.</h2>
<h4>@ViewData["BeWoError"]</h4> <h4>@ViewData["BeWoError"]</h4>
</hgroup> </hgroup>
</body> </body>

View File

@@ -72,6 +72,7 @@
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/js-helper.js")" type="text/javascript"></script> <script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/js-helper.js")" type="text/javascript"></script>
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/logging.js")" type="text/javascript"></script> <script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/logging.js")" type="text/javascript"></script>
<script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/MoKPasswordSecurity.js")" type="text/javascript"></script> <script src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/MoKPasswordSecurity.js")" type="text/javascript"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/bs-custom-file-input.min.js")"></script>
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/devextreme/dx.all.js")"></script> <script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/devextreme/dx.all.js")"></script>
@@ -95,8 +96,6 @@
window.addEventListener("error", (event) => { window.addEventListener("error", (event) => {
hideSpinner(); hideSpinner();
var textToShow = `Message: ${event.message}\r\nFile name: ${event.filename}\r\nLine: ${event.lineno}\r\nColumn: ${event.colno}\r\nStack: ${event.error.stack}`;
if(event.message === "Uncaught TypeError: this._contentReadyAction is not a function") { if(event.message === "Uncaught TypeError: this._contentReadyAction is not a function") {
logInfo("contentReadyAction-Fehler ist aufgetregen. Kann ignoriert werden."); logInfo("contentReadyAction-Fehler ist aufgetregen. Kann ignoriert werden.");
return; return;
@@ -112,7 +111,7 @@
return; return;
} }
configureErrorPopup(textToShow); configureErrorPopup(`Message: ${event.message}\r\nFile name: ${event.filename}\r\nLine: ${event.lineno}\r\nColumn: ${event.colno}\r\nStack: ${event.error.stack}`);
}); });
function showChangePasswordPopup() { function showChangePasswordPopup() {
@@ -123,11 +122,11 @@
var initialPwPrependWidth = 0; var initialPwPrependWidth = 0;
function calcChPwPrepend() { function calcChPwPrepend() {
try { try {
if (initialPwPrependWidth <= 0 && $.isNumeric(getMaxWidth("pw-prepend"))) { if(initialPwPrependWidth <= 0 && $.isNumeric(getMaxWidth("pw-prepend"))) {
initialPwPrependWidth = getMaxWidth("pw-prepend"); initialPwPrependWidth = getMaxWidth("pw-prepend");
} }
if (initialPwPrependWidth <= 0) { if(initialPwPrependWidth <= 0) {
return; return;
} }
@@ -137,7 +136,6 @@
} }
} }
function copyErrorToClipboard() { function copyErrorToClipboard() {
var element = document.querySelector("#fehlerdetail-textarea"); var element = document.querySelector("#fehlerdetail-textarea");
element.select(); element.select();
@@ -149,9 +147,7 @@
function showErrorPopup(error, htmlMessage) { function showErrorPopup(error, htmlMessage) {
hideSpinner(); hideSpinner();
var textToShow = "name: " + error.name + ";\r\nmessage: " + error.message + ";\r\nstack: " + error.stack; configureErrorPopup(`name: ${error.name};\r\nmessage: ${error.message};\r\nstack: ${error.stack}`, htmlMessage);
configureErrorPopup(textToShow, htmlMessage);
} }
function showErrorMessagePopup(text, htmlMessage) { function showErrorMessagePopup(text, htmlMessage) {
@@ -226,11 +222,22 @@
s = "0" + s; s = "0" + s;
} }
$("#countdown").html("Abmeldung in " + m + ":" + s + '<span class="fas fa-unlock-alt pl-1"></span>'); $("#countdown").html(`Abmeldung in ${m}:${s}<span class="fas fa-unlock-alt pl-1"></span>`);
}, 1000); }, 1000);
} }
calcPrependWidth(); calcPrependWidth();
@{
var errorAlertMessage = TempData[TempDataConstants.ErrorAlertPopupMessage]?.ToString();
if(!string.IsNullOrWhiteSpace(errorAlertMessage))
{
<text>
$("#error-alert-popup").modal("show");
</text>
}
}
} catch (error) { } catch (error) {
showErrorPopup(error); showErrorPopup(error);
} }
@@ -248,11 +255,11 @@
var val = widthToBootstrapVal(width); var val = widthToBootstrapVal(width);
if(previousWidth !== val) { if(previousWidth !== val) {
console.log("%c" + val, "font-size: 16px; font-weight: bold; color: #00F2FF;"); console.log(`%c${val}`, "font-size: 16px; font-weight: bold; color: #00F2FF;");
} }
previousWidth = val; window.previousWidth = val;
$("#size-info-span").text(val); $("#dev-size-span").text(val);
} }
function widthToBootstrapVal(width) { function widthToBootstrapVal(width) {
@@ -366,10 +373,14 @@
<div class="container-fluid"> <div class="container-fluid">
<a href="#" class="navbar-brand"> <a href="#" class="navbar-brand">
@Model.LoggedInEmplyeeFirstNameLastName @Model.LoggedInEmplyeeFirstNameLastName
@if(Html.IsInDebugMode())
{
<span class="navbar-text text-bewo-dev" id="dev-size-span"></span>
}
</a> </a>
<span class="d-inline-block" data-toggle="tooltip" title="Zeit bis zur automatischen Abmeldung" id="countdown-tooltip"> <span class="d-inline-block" data-toggle="tooltip" title="Zeit bis zur automatischen Abmeldung" id="countdown-tooltip">
<span class="navbar-text" id="countdown" onclick="countdownClick()"></span> <span class="navbar-text" style="font-size: small !important;" id="countdown" onclick="countdownClick()"></span>
</span> </span>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive">
@@ -504,7 +515,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="popupTitle"></h5> <h5 class="modal-title font-weight-bold" id="popupTitle"></h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close" id="message-popup-esc-btn"> <button class="close" type="button" data-dismiss="modal" aria-label="close" id="message-popup-esc-btn">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@@ -524,7 +535,7 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title text-danger">Es ist ein Fehler aufgetreten</h5> <h5 class="modal-title text-danger font-weight-bold">Es ist ein Fehler aufgetreten</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close"> <button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@@ -549,7 +560,32 @@
</div> </div>
</div> </div>
</div> </div>
<div class="modal" tabindex="-1" role="dialog" id="error-alert-popup">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title font-weight-bold">Fehler</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-auto">
<span class="fas fa-exclamation-triangle fa-3x text-danger"></span>
</div>
<div class="col" id="error-alert-message">
@Html.Raw(TempData[TempDataConstants.ErrorAlertPopupMessage])
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" type="button" data-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
@if(TempData[TempDataConstants.ErrorMessageKey] != null) @if(TempData[TempDataConstants.ErrorMessageKey] != null)
{ {
@@ -569,7 +605,6 @@
<div class="alert alert-danger" id="error-message-alert" role="alert"> <div class="alert alert-danger" id="error-message-alert" role="alert">
@TempData[TempDataConstants.ErrorMessageKey] @TempData[TempDataConstants.ErrorMessageKey]
</div> </div>
<button type="button" class="btn btn-primary" onclick="clearErrorLog()">Error Log leeren</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -51,7 +51,7 @@ namespace BeWo.Service.Plugins
//t = "4950382346"; // Holsinger //t = "4950382346"; // Holsinger
//t = "5973016645"; // Verein Lebensgestaltung Hanau //t = "5973016645"; // Verein Lebensgestaltung Hanau
//t = "7375324044"; // Diakonie KK Kleve //t = "7375324044"; // Diakonie KK Kleve
t = "1441747891"; // BeWo Mobil Köln //t = "1441747891"; // BeWo Mobil Köln
//t = "5120047701"; // Trialog //t = "5120047701"; // Trialog
//t = "3629696651"; // Soziale Dienste Niederrhein (SDN) //t = "3629696651"; // Soziale Dienste Niederrhein (SDN)
//t = "9893557471"; // Caritas Frankfurt //t = "9893557471"; // Caritas Frankfurt
@@ -341,7 +341,7 @@ namespace BeWo.Service.Plugins
//t = "2986016022"; // Ev Verein für Wohnraumhilfe Frankfurt a.M. //t = "2986016022"; // Ev Verein für Wohnraumhilfe Frankfurt a.M.
//t = "2181497347"; // BetreuungsserviceFuerAlltagUndWohnen (BAW Aachen) //t = "2181497347"; // BetreuungsserviceFuerAlltagUndWohnen (BAW Aachen)
//t = "5433105975"; // aha e.V. //t = "5433105975"; // aha e.V.
//t = "7396826106"; // SKF Sozialdienst katholischer Frauen e.V. Leverkusen t = "7396826106"; // SKF Sozialdienst katholischer Frauen e.V. Leverkusen
//t = "4748304562"; // BeWo Darmstadt //t = "4748304562"; // BeWo Darmstadt
//t = "5315865694"; // Wismarer Werkstätten GmbH //t = "5315865694"; // Wismarer Werkstätten GmbH
//t = "6971328056"; // SKM Krefeld //t = "6971328056"; // SKM Krefeld
@@ -390,6 +390,7 @@ namespace BeWo.Service.Plugins
//t = "8735029937"; // Caritas Ostvest //t = "8735029937"; // Caritas Ostvest
//t = "7653029063"; // SkF Leverkusen JuHi //t = "7653029063"; // SkF Leverkusen JuHi
//t = "5000000000"; //t = "5000000000";
//t = "5564670353"; // Mittelpunkt GbR
return t; return t;
#else #else