Merge branch 'master' of ssh://float.ownsoft.de/git/beyondSoft/BeWo
This commit is contained in:
54
.cr/server/Editor/Code Cleanup.xml
Normal file
54
.cr/server/Editor/Code Cleanup.xml
Normal file
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Root Type="DevExpress.CodeAnalysis.CodeCleanUp.CodeCleanUpOptions">
|
||||
<Options Language="C#">
|
||||
<Providers>
|
||||
<Item Id="{53ccb10f-f7af-40a6-9472-d05054672052}" />
|
||||
<Item Id="{bb96a982-bed0-4d8f-93a7-1e1ce7493e96}" />
|
||||
<Item Id="{12f6d456-d2ec-407e-aa44-2b74d7c56e9c}" />
|
||||
<Item Id="{ffa114f4-9122-46e4-96c8-655d54c904e6}" />
|
||||
<Item Id="{0e6b7b2c-84e6-4eee-83d1-6149282c8501}">
|
||||
<ApplyOnSave>True</ApplyOnSave>
|
||||
</Item>
|
||||
<Item Id="{03781427-dea7-45b0-9eef-81abe2961a61}" />
|
||||
<Item Id="{ab07124b-0893-4a2d-b6f5-39bfa9f10148}" />
|
||||
<Item Id="{5d712912-91ed-4728-ba16-ac1821b702ca}">
|
||||
<ApplyOnSave>True</ApplyOnSave>
|
||||
</Item>
|
||||
<Item Id="{c47b114f-eeae-46fc-9562-454e8f9196c0}" />
|
||||
<Item Id="{4216ef39-52bd-4e7f-92a7-673406f92bc8}" />
|
||||
<Item Id="{f410df1e-6e44-4854-a3f0-14bb756113f9}">
|
||||
<ApplyOnSave>True</ApplyOnSave>
|
||||
</Item>
|
||||
<Item Id="{d2f76d4e-97a9-4031-a7a2-23f192201426}" />
|
||||
<Item Id="{3824f6f0-fee1-4847-94ff-1efa133ba199}" />
|
||||
<Item Id="{d24bd9c7-7686-4101-9ec1-f61c19af8d2e}" />
|
||||
<Item Id="{f804e36e-414f-409c-9b90-63b7727745a7}">
|
||||
<ApplyOnSave>True</ApplyOnSave>
|
||||
</Item>
|
||||
<Item Id="{163af547-186c-4fa1-9a3e-b9b0a1ceec32}" />
|
||||
<Item Id="{00bb41b3-3de9-458a-93c1-1f126253eab0}" />
|
||||
<Item Id="{8e24f031-d25c-4ddb-86a5-c28f8fc354eb}" />
|
||||
<Item Id="{e950f01e-2b15-4da5-8176-cafe3cc883d9}" />
|
||||
<Item Id="{37bde68f-a39d-4791-adba-8ad7b2952ab0}" />
|
||||
<Item Id="{ef51c8cb-e48a-498f-98b2-eadda592c4c7}" />
|
||||
<Item Id="{20943A7B-2B32-4727-8E9D-61CB5B5F2A0D}" />
|
||||
<Item Id="{528bdd86-5882-4b4c-b717-e0ec33958bd7}" />
|
||||
<Item Id="{40c971cf-ebeb-419d-a559-6183d8d0d6a4}" />
|
||||
<Item Id="{4B42E272-EE39-4E83-924C-B2458D827DE3}" />
|
||||
<Item Id="{73a73e0e-5575-4c34-a97b-a942c6da1f90}" />
|
||||
<Item Id="{f7752b2b-7ba5-43ec-b0f7-7f45c21c1c23}" />
|
||||
<Item Id="{9dab2827-57cc-40e9-a330-a0626261453e}" />
|
||||
<Item Id="{6bf7cfc1-1332-4bec-982e-c2d0968237cd}" />
|
||||
<Item Id="{7e640eab-b585-47a5-afdc-0f110357cebb}" />
|
||||
<Item Id="{44ac74a7-dba7-45aa-b2ca-8094b85cb9c9}" />
|
||||
<Item Id="{2cd1441b-9e0f-4e39-bd8c-8aaa6e2a1728}" />
|
||||
<Item Id="{41388575-074b-49f2-b3bc-9d28b212bd1a}" />
|
||||
<Item Id="{4fa0bfa3-0a7e-471b-9933-3a379bdd5bd7}" />
|
||||
<Item Id="{1f88209e-45e2-40b9-a235-1df251df05dd}" />
|
||||
<Item Id="{086b0e70-893d-4b97-a6cf-d366ddbae573}" />
|
||||
<Item Id="{4771fd98-4357-4780-b479-a7a875fec011}" />
|
||||
<Item Id="{174C98E6-48C4-42D0-BC30-35EDE6377C9B}" />
|
||||
</Providers>
|
||||
<IsNewVersion>True</IsNewVersion>
|
||||
</Options>
|
||||
</Root>
|
||||
15
.cr/server/Editor/Formatting/Other.CSharp.xml
Normal file
15
.cr/server/Editor/Formatting/Other.CSharp.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Root Type="DevExpress.CodeRush.Formatting.UI.Options.OtherOptionsContainer">
|
||||
<Options Language="C#">
|
||||
<Options>
|
||||
<Item Id="{7b13bb67-6fc9-44dd-87a1-ea1dc649d561}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.PlaceOnNewLineOtherOption">
|
||||
<ElseOnNewLine>True</ElseOnNewLine>
|
||||
<WhileOnNewLine>True</WhileOnNewLine>
|
||||
<CatchOnNewLine>True</CatchOnNewLine>
|
||||
<FinallyOnNewLine>True</FinallyOnNewLine>
|
||||
</Item>
|
||||
<Item Id="{84e7d791-613d-4018-bf31-9a9f43264480}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.XmlDocCommentsOtherOption" />
|
||||
<Item Id="{8921dd1e-bb6c-4fa8-b4d5-58e6edcea04f}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.OtherIndentOption" />
|
||||
</Options>
|
||||
</Options>
|
||||
</Root>
|
||||
32
.cr/server/Editor/Formatting/Wrapping.CSharp.xml
Normal file
32
.cr/server/Editor/Formatting/Wrapping.CSharp.xml
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Root Type="DevExpress.CodeRush.Formatting.UI.Options.WrappingOptionsContainer">
|
||||
<Options Language="C#">
|
||||
<Options>
|
||||
<Item Id="{48f3f6c0-b3c2-4567-b071-33af7480c9a3}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.QueryExpressionFormattingOption" />
|
||||
<Item Id="{a2c75ad7-ba6a-49ca-8070-6d9e3c52e3c6}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.BinaryExpressionFormattingOption" />
|
||||
<Item Id="{0e2d0391-24ba-4ed8-aeb4-1b3e9f26be55}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.RelationalExpressionFormattingOption" />
|
||||
<Item Id="{fea50ebc-99c9-4599-9b55-bf2961b9cc95}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.BitwiseExpressionFormattingOption" />
|
||||
<Item Id="{4246b900-cbb3-44f4-b59e-b3055fb4f7bc}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.LogicalExpressionFormattingOption" />
|
||||
<Item Id="{cd721fc1-23fb-4d88-a9f0-42d6b318a32b}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.TernaryExpressionFormattingOption" />
|
||||
<Item Id="{10e904ea-f51d-4c32-9320-1b93fa557564}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.AssignmentExpressionFormattingOption">
|
||||
<WrapAssignment>
|
||||
<Kind>WrapBefore</Kind>
|
||||
</WrapAssignment>
|
||||
</Item>
|
||||
<Item Id="{25746bdc-0a43-4741-a740-20784691314b}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.InvocationArgumentListFormattingOption" />
|
||||
<Item Id="{D5EE2ECB-9FA6-47F7-A11F-007FC45E872D}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.AttributeArgumentsFormattingOption" />
|
||||
<Item Id="{5A186AB9-03A5-4BFE-83B1-B99B3B8408BC}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.DeclarationParameterListFormattingOption" />
|
||||
<Item Id="{8739877d-3674-40ae-90c4-38b2b160e92b}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.ArrayInitializerFormattingOption" />
|
||||
<Item Id="{a940ae15-f98a-4b7d-8357-2214eb421250}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.CollectionInitializerFormattingOption" />
|
||||
<Item Id="{0414181a-3915-4d0c-81d3-3bc7718da90f}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.ObjectInitializerFormattingOption" />
|
||||
<Item Id="{ea60e2ab-d67a-45e8-ab42-36d747c494c}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.ChainedMethodCallsFormattingOption" />
|
||||
<Item Id="{5f4ed422-88b9-4e95-8401-cef404d645d6}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.LambdaExpressionFormattingOption" />
|
||||
<Item Id="{0531de5e-ff20-4043-a67c-eeef76a8f3c3}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.ArrowExpressionFormattingOption" />
|
||||
<Item Id="{08fa5953-cc71-4ded-bd41-ef5d5b690585}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.TypeParameterListFormattingOption" />
|
||||
<Item Id="{dc060d33-cfc0-411e-9508-8d27b84934e8}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.CoalesceExpressionFormattingOption" />
|
||||
<Item Id="{b25d25a0-dd92-45ed-88ef-51953e28222c}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.BaseListWrappingFormattingOption" />
|
||||
<Item Id="{4db5e14f-8f4c-416f-9b59-7e9239f2150e}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.CtorInitWrappingFormattingOption" />
|
||||
<Item Id="{be0c2117-5732-40fd-9b4a-0fe749356e87}" Type="DevExpress.CodeRush.Formatting.UI.Options.Conversion.SwitchExpressionWrappingFormattingOption" />
|
||||
</Options>
|
||||
</Options>
|
||||
</Root>
|
||||
6
.cr/server/Editor/NamingSuggestions.xml
Normal file
6
.cr/server/Editor/NamingSuggestions.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Root Type="DevExpress.CodeRush.CodeCompletion.NamingSuggestions.Options.NamingSuggestionsOptions">
|
||||
<Options Language="C#">
|
||||
<Enabled>True</Enabled>
|
||||
</Options>
|
||||
</Root>
|
||||
165
.cr/server/Editor/Organize Members.xml
Normal file
165
.cr/server/Editor/Organize Members.xml
Normal file
@@ -0,0 +1,165 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Root Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersOptions">
|
||||
<Options Language="Neutral">
|
||||
<Schemes>
|
||||
<Item Id="{537ce5d1-771a-4e99-9f4a-c409ebd5e213}">
|
||||
<IsActive>False</IsActive>
|
||||
<Rules>
|
||||
<Item Id="{a1310165-0385-4fbf-92d3-71402b646318}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<GroupRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.AndRule">
|
||||
<Rules>
|
||||
<Item Id="{2ebbe39b-ad28-42e6-b6fe-58cbbe1366ea}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.GroupByParentTypeAttributesRule">
|
||||
<AttributeName>InterfaceType</AttributeName>
|
||||
</Item>
|
||||
<Item Id="{e7428898-429e-46c7-84f8-a4eeffbf1bc7}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.GroupByKindRule" />
|
||||
</Rules>
|
||||
</GroupRule>
|
||||
<RuleName>Members in type with InterfaceType</RuleName>
|
||||
</Item>
|
||||
<Item Id="{ebd30c1d-59b5-4a03-9f33-8813a996b952}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{02fdb982-e0dd-4b47-84c3-f44926013188}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{f5649b7d-32eb-4a64-88b4-5de14ed335e4}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{b72b1c09-252f-4d4f-881c-1a4832911d5f}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{eae9a2ed-5135-45c6-9cd1-e75ee9e9ac68}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{7e2e2ef2-8ef3-4f28-825d-ce10da1931e6}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{0430f49d-5690-49a2-b2ef-154bfbf64cd7}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{907fc4a7-efee-4337-af73-d71b996b3923}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{724ebc08-3b98-4c52-91c5-158b7a759d95}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{bcbd84af-ad2b-4353-a834-ece7b6e41d92}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{c49c00d2-9626-428d-8818-e71e68bf07f9}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{335094b6-641c-4832-bfdc-84087f8c7b24}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{1136a603-d516-4f42-a80b-c2bc7baf163b}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{89215376-ecad-435a-a6bf-137f09a41f0d}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{380049a0-9dbf-4d84-9612-20fc0c34dca2}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{36cc0c47-d29c-4e7a-a29b-d73ec1b3910b}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{c87a250e-ef05-4000-9e2c-e5c078ce51ae}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{0fcd1a59-0fc8-4bde-9db7-2d73508b918d}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{050f50d0-7ec6-4610-a820-08f54f1d4c3c}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{6b6953c9-dcb7-4d34-a123-7f390fd24e1e}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{b8f8c881-e919-48b1-8655-602c75ddbfec}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{f591aeca-b50c-47e2-ab24-84fb3a7327c2}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{c9b4252f-60a9-48d3-869e-2c3c23c20aae}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{d6d0a5a4-c770-47f3-8cda-c699e76101d1}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{9b31a53f-4bae-4b97-8356-39a48bd91e9c}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{45e128f7-55bf-4186-b09c-760d2a6477cb}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{1c54e8e0-33dd-4a95-8899-42ba94669156}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{b76710ac-780e-4cad-bd0c-02f7f676db0f}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{48b47296-0fd0-4056-bdc1-b09ae6266d06}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{9d6898f1-002e-4c71-a281-1ec6e78a3003}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{f1959e1c-1062-4a5f-a26d-b66a530b56dc}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{4651e354-b408-4df4-bb8c-0490daddccaa}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{6653a3b6-576e-4f5e-9c6a-a440ee257399}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{dc81be48-841a-48c0-bb6a-e70cb3c26341}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{b8475833-a96e-4e5a-825c-bf3266fcf330}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<DeletedItem Id="{1eb07ab2-16f0-4bf2-a2a6-33b899b861b8}" />
|
||||
</Rules>
|
||||
</Item>
|
||||
<Item Id="{fb41924a-35f9-47ee-8f8c-74cc34c4bf63}">
|
||||
<IsActive>True</IsActive>
|
||||
<Rules>
|
||||
<Item Id="{b98b9ab7-3a4c-4b50-8c32-771f758e4507}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{175afa49-1b02-4335-8697-426564eb966b}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{793c3efa-da34-4af7-9338-b079461a74c8}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{2a66d808-4878-480c-b9b8-8ae03700c1e8}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{3f3676c5-45dd-45df-888a-0f07b1b3707d}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{1b549ff5-3ce2-43ff-93bc-f4da46903b6a}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{761299d1-70d4-44bf-b06b-ccd7c409e448}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{b0120844-0819-42f0-a49b-62c4c7497a99}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{00b09b98-ac03-48d2-b2a0-9c6e1b7ba907}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{612527cd-1b3e-41be-8a3c-fce9731c5798}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{9766d442-e0fb-427f-99b0-405fc57f6d4f}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{f82b02cb-b317-44af-ab65-2a3c90761afe}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{f2379393-c0e5-4bee-a551-6383d0c1f843}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{7c815ce6-5ac8-4c71-a1a9-b7fc8adea37c}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{300ff320-0e96-446c-8de9-3f808dafce55}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{78216f10-5d1c-41eb-a048-bd50ff4224fd}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{f0d58f97-1bb4-4762-95e4-fb7f7b1e184f}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{c17095aa-afa2-4136-8771-c2a7ac591d15}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{b1d169c2-df12-4479-8c61-2af5bbee8a06}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule">
|
||||
<SortingRule Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.MultipleSortingsRule">
|
||||
<Sortings>
|
||||
<Item Id="{c2c647e5-108d-4154-ad61-de7692259d35}" />
|
||||
</Sortings>
|
||||
</SortingRule>
|
||||
</Item>
|
||||
<Item Id="{b02e42bb-4a64-4196-8d23-aca15029a893}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{096ce198-34f5-4265-8a4a-4a4b00c711ac}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{eddf6fb8-a51b-4632-b8fd-20965a20efe2}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{0aa19952-807c-40eb-ab92-6c7a5f3f79b2}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
<Item Id="{e7160382-ae65-4f07-aaac-72e124360b1d}" Type="DevExpress.CodeAnalysis.CodeCleanUp.OrganizeMembers.OrganizeMembersGroupAndSortRule" />
|
||||
</Rules>
|
||||
</Item>
|
||||
</Schemes>
|
||||
<UseMemberSections>False</UseMemberSections>
|
||||
</Options>
|
||||
</Root>
|
||||
@@ -39,16 +39,16 @@
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>true</UpdateRequired>
|
||||
<MapFileExtensions>false</MapFileExtensions>
|
||||
<InstallUrl>https://app.ownsoft.de/</InstallUrl>
|
||||
<InstallUrl>https://app.ownsoft.de/test/</InstallUrl>
|
||||
<TargetCulture>de-DE</TargetCulture>
|
||||
<ProductName>BeWoPlaner</ProductName>
|
||||
<PublisherName>ownSoft GmbH</PublisherName>
|
||||
<MinimumRequiredVersion>2.0.1.260</MinimumRequiredVersion>
|
||||
<MinimumRequiredVersion>2.0.1.265</MinimumRequiredVersion>
|
||||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||
<WebPage>publish.htm</WebPage>
|
||||
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
|
||||
<TrustUrlParameters>true</TrustUrlParameters>
|
||||
<ApplicationRevision>261</ApplicationRevision>
|
||||
<ApplicationRevision>266</ApplicationRevision>
|
||||
<ApplicationVersion>2.0.1.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||
@@ -67,6 +67,7 @@
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<UseVSHostingProcess>true</UseVSHostingProcess>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>CS0659, CS0162, CS0168, CS0649, CS0219, CS0169, CS0414, CS0067, CS0618</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
@@ -94,6 +95,7 @@
|
||||
</StartupObject>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Converter\AddressToStringConverter.cs" />
|
||||
<Compile Include="Converter\Features\AiConversationMessageSystemConverter.cs" />
|
||||
<Compile Include="Converter\NewlineConverter.cs" />
|
||||
<Compile Include="ServiceProxy\GeneratedAiEnhancedService.cs" />
|
||||
@@ -103,6 +105,7 @@
|
||||
<Compile Include="Services\IControlFactory.cs" />
|
||||
<Compile Include="Services\IWindowFactory.cs" />
|
||||
<Compile Include="Services\IWindowService.cs" />
|
||||
<Compile Include="ViewModel\AddressVM.cs" />
|
||||
<Compile Include="ViewModel\AiConfigVM.cs" />
|
||||
<Compile Include="View\Detail\AI\AiConfigView.xaml.cs">
|
||||
<DependentUpon>AiConfigView.xaml</DependentUpon>
|
||||
@@ -1183,6 +1186,7 @@
|
||||
<Compile Include="SchulbegleitenderDienst\WochenansichtVM.cs" />
|
||||
<Compile Include="SchulbegleitenderDienst\WochenVertretung.cs" />
|
||||
<Compile Include="Security\EncryptionUtils.cs" />
|
||||
<Compile Include="ServiceProxy\ServiceFacadeExtension.cs" />
|
||||
<Compile Include="ServiceProxy\GeneratedOperationsEnhancedService.cs" />
|
||||
<Compile Include="UploadDialog.xaml.cs">
|
||||
<DependentUpon>UploadDialog.xaml</DependentUpon>
|
||||
@@ -1262,10 +1266,13 @@
|
||||
<Compile Include="ViewModel\AiConversationVM.cs" />
|
||||
<Compile Include="ViewModel\BaseVM.cs" />
|
||||
<Compile Include="ViewModel\CustomerVermittlungArbeitVM.cs" />
|
||||
<Compile Include="ViewModel\Light\GkvAbrechnungLightVM.cs" />
|
||||
<Compile Include="ViewModel\Light\InvoiceBaseLightVM.cs" />
|
||||
<Compile Include="ViewModel\ListViewModel\AbstractListVM.cs" />
|
||||
<Compile Include="ViewModel\ListViewModel\AiConversationMessageListVM.cs" />
|
||||
<Compile Include="ViewModel\ListViewModel\AiConversationListVM.cs" />
|
||||
<Compile Include="ViewModel\ListViewModel\CustomerVermittlungArbeitListVM.cs" />
|
||||
<Compile Include="ViewModel\ListViewModel\Light\GkvAbrechnungLightListVM.cs" />
|
||||
<Compile Include="ViewModel\Wohnhilfe\CustomerWohnhilfeBereichBundVM.cs" />
|
||||
<Compile Include="ViewModel\Wohnhilfe\CustomerWohnhilfeBereichEinkommenUndArbeitVM.cs" />
|
||||
<Compile Include="ViewModel\Wohnhilfe\CustomerWohnhilfeBereichSozialeKontakteVM.cs" />
|
||||
@@ -1283,7 +1290,6 @@
|
||||
<Compile Include="ViewModel\DocumentTreeItemVM.cs" />
|
||||
<Compile Include="ViewModel\DokumentvorlageVM.cs" />
|
||||
<Compile Include="ViewModel\GeschenkterUrlaubstagVM.cs" />
|
||||
<Compile Include="ViewModel\ListViewModel\GkvAbrechnungListVM.cs" />
|
||||
<Compile Include="ViewModel\ListViewModel\PreisListVM.cs" />
|
||||
<Compile Include="ViewModel\GkvAbrechnungVM.cs" />
|
||||
<Compile Include="ViewModel\PlatzhalterVM.cs" />
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<PublishUrlHistory>D:\Projects\beyondsoft\BeWoPlaner\Publish\|publish\|D:\Projects\beyondsoft\BeWoPlaner\PublishTest\|D:\Projects\beyondsoft\BeWoPlaner\PublishDev\|D:\Projects\beyondsoft\BeWoPlaner\Publish45\</PublishUrlHistory>
|
||||
<InstallUrlHistory>https://app.ownsoft.de/|https://app.ownsoft.de/test/|https://app.ownsoft.de/dev/|http://app.ownsoft.de/dev/|http://app.beyondsoft.de/dev/</InstallUrlHistory>
|
||||
<InstallUrlHistory>https://app.ownsoft.de/test/|https://app.ownsoft.de/|https://app.ownsoft.de/dev/|http://app.ownsoft.de/dev/|http://app.beyondsoft.de/dev/</InstallUrlHistory>
|
||||
<SupportUrlHistory />
|
||||
<UpdateUrlHistory>https://app.ownsoft.de/|https://app.ownsoft.de/bewoplaner.application/</UpdateUrlHistory>
|
||||
<BootstrapperUrlHistory />
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
<conv:EnumTranslationConverter x:Key="EnumTranslationConverter" />
|
||||
<conv:TooltipTextConverter x:Key="TooltipTextConverter" />
|
||||
<conv:NewlineConverter x:Key="NewlineConverter" />
|
||||
<conv:AddressToStringConverter x:Key="AddressToStringConverter" />
|
||||
|
||||
<conv:ValidationConverter x:Key="ValidationConverter" />
|
||||
<conv:ValueConverterGroup x:Key="Validation2BrushConverter">
|
||||
|
||||
@@ -56,9 +56,9 @@ namespace BeWo
|
||||
public static LoginControl LoginControl;
|
||||
public static MainControl MainControl;
|
||||
|
||||
public static string ShortVersion = "3.25";
|
||||
public static string ShortVersion = "3.26";
|
||||
|
||||
public static string Version = "Version 3.25";
|
||||
public static string Version = "Version 3.26 Test";
|
||||
|
||||
public static int RenderTier = 0;
|
||||
public static bool IsInDesignMode = DesignerProperties.GetIsInDesignMode(new DependencyObject());
|
||||
@@ -631,7 +631,7 @@ namespace BeWo
|
||||
//AppSettings.AllowGkvAbrechnung = true;
|
||||
//AppSettings.AllowGkvAbrechnung = false;
|
||||
//showInfoButtonInCalender = true;
|
||||
IsInDeveloperMode = true;
|
||||
//IsInDeveloperMode = true;
|
||||
//IsInDeveloperMode = false;
|
||||
AppSettings.ModuleAiEnabled = true;
|
||||
AppSettings.ModuleAiSettingsEnabled = false;
|
||||
|
||||
29
BeWo/Converter/AddressToStringConverter.cs
Normal file
29
BeWo/Converter/AddressToStringConverter.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using BeWo.ViewModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace BeWo.Converter
|
||||
{
|
||||
public class AddressToStringConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
var vm = value as AddressVM;
|
||||
|
||||
if (vm is null)
|
||||
return null;
|
||||
|
||||
return vm.ToSingleLine();
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -294,6 +294,16 @@ namespace BeWo.Core
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void ScrollToTop(ListBox listBox)
|
||||
{
|
||||
if (VisualTreeHelper.GetChildrenCount(listBox) > 0)
|
||||
{
|
||||
Border border = (Border)VisualTreeHelper.GetChild(listBox, 0);
|
||||
ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
||||
scrollViewer.ScrollToTop();
|
||||
}
|
||||
}
|
||||
|
||||
public static void ScrollToBottom(ListBox listBox)
|
||||
{
|
||||
if (VisualTreeHelper.GetChildrenCount(listBox) > 0)
|
||||
|
||||
@@ -6,7 +6,8 @@ using System.Diagnostics;
|
||||
|
||||
namespace BeWo.Core
|
||||
{
|
||||
[DebuggerDisplay("{GoalEntryVM.Abbreviation}: {GoalEntryVM.Description}")]
|
||||
#pragma warning disable CS0108 // Rethrow to preserve stack details
|
||||
[DebuggerDisplay("{GoalEntryVM.Abbreviation}: {GoalEntryVM.Description}")]
|
||||
public class SupportConceptGoalTreeItem : SupportConceptGoalDC
|
||||
{
|
||||
private ValueListEntryVM _GoalEntryVM;
|
||||
@@ -97,5 +98,6 @@ namespace BeWo.Core
|
||||
}
|
||||
|
||||
public ValueListEntryType GoalType => GoalEntryDC?.Type ?? GoalEntryVM.Type;
|
||||
}
|
||||
}
|
||||
#pragma warning restore CS0108 // Rethrow to preserve stack details
|
||||
}
|
||||
@@ -147,9 +147,9 @@ namespace BeWo
|
||||
AutoLogin = true,
|
||||
//SelectView = UIContext.AiConversation,
|
||||
//SelectIndex = 8,
|
||||
DefaultLoginUsername = "m1",
|
||||
DefaultLoginPassword = "bewobewo",
|
||||
DefaultProfilename = "5000000000",
|
||||
//DefaultLoginUsername = "m1",
|
||||
//DefaultLoginPassword = "bewobewo",
|
||||
//DefaultProfilename = "5000000000",
|
||||
EnableAutoRemoteDebugging = true
|
||||
});
|
||||
|
||||
|
||||
@@ -720,7 +720,6 @@
|
||||
<localView:ImageButton
|
||||
x:Name="button_Dokumente"
|
||||
Width="90"
|
||||
r:DemandUserRight.VisibleDemands="ViewAll, TeamView_ViewAll, TeamView_ViewMyTeams"
|
||||
Background="{StaticResource DokumenteContentBrush}"
|
||||
Click="button_Dokumente_Click"
|
||||
Content="{t:Translate DokumenteMenuItem}"
|
||||
|
||||
@@ -176,7 +176,16 @@ namespace BeWo
|
||||
{
|
||||
this.button_SchulbegleitenderDienst.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
this.button_Dokumente.Visibility = Visibility.Collapsed;
|
||||
|
||||
|
||||
if (BeWoApp.LoggedOnUser != null && BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsAllowViewAll))
|
||||
{
|
||||
this.button_Dokumente.Visibility = Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.button_Dokumente.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if DEBUG
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -28,12 +28,17 @@ namespace BeWo.ServiceProxy
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/GetAiConversations", ReplyAction="http://tempuri.org/IAiEnhancedService/GetAiConversationsResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/GetAiConversationsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationDC> GetAiConversations(int uicontext, long? oid);
|
||||
System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationDC> GetAiConversations(int uicontext, System.Nullable<long> oid);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/CreateAiConversation", ReplyAction="http://tempuri.org/IAiEnhancedService/CreateAiConversationResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/CreateAiConversationBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.Feature.AI.AiConversationDC CreateAiConversation(BS.Shared.DataContracts.Feature.AI.AiConversationDC conversation, long modell_oid);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/CreateAiConversationWithMessage", ReplyAction="http://tempuri.org/IAiEnhancedService/CreateAiConversationWithMessageResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/CreateAiConversationWithMessageBeWoFaultFau" +
|
||||
"lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.Feature.AI.AiConversationDC CreateAiConversationWithMessage(BS.Shared.DataContracts.Feature.AI.AiConversationDC conversation, long modell_oid, string message);
|
||||
|
||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/CloneAiConversation", ReplyAction="http://tempuri.org/IAiEnhancedService/CloneAiConversationResponse")]
|
||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/CloneAiConversationBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||
BS.Shared.DataContracts.Feature.AI.AiConversationDC CloneAiConversation(long conversation_oid, System.Nullable<long> message_oid);
|
||||
@@ -96,7 +101,7 @@ namespace BeWo.ServiceProxy
|
||||
return base.Channel.GetAiModels();
|
||||
}
|
||||
|
||||
public System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationDC> GetAiConversations(int uicontext, long? oid)
|
||||
public System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationDC> GetAiConversations(int uicontext, System.Nullable<long> oid)
|
||||
{
|
||||
return base.Channel.GetAiConversations(uicontext, oid);
|
||||
}
|
||||
@@ -106,6 +111,11 @@ namespace BeWo.ServiceProxy
|
||||
return base.Channel.CreateAiConversation(conversation, modell_oid);
|
||||
}
|
||||
|
||||
public BS.Shared.DataContracts.Feature.AI.AiConversationDC CreateAiConversationWithMessage(BS.Shared.DataContracts.Feature.AI.AiConversationDC conversation, long modell_oid, string message)
|
||||
{
|
||||
return base.Channel.CreateAiConversationWithMessage(conversation, modell_oid, message);
|
||||
}
|
||||
|
||||
public BS.Shared.DataContracts.Feature.AI.AiConversationDC CloneAiConversation(long conversation_oid, System.Nullable<long> message_oid)
|
||||
{
|
||||
return base.Channel.CloneAiConversation(conversation_oid, message_oid);
|
||||
|
||||
@@ -301,47 +301,14 @@ namespace BeWo.ServiceProxy
|
||||
#endregion
|
||||
|
||||
#region GkvAccounting
|
||||
public static void DoGkvAccountingServiceAsync<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack, bool showWaitDialog)
|
||||
{
|
||||
DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, pCallBack, showWaitDialog);
|
||||
}
|
||||
public static void DoGkvAccountingServiceAsync<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack)
|
||||
{
|
||||
DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, pCallBack, true);
|
||||
}
|
||||
public static void DoGkvAccountingServiceAsyncGUI<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack, Dispatcher dispatcher)
|
||||
{
|
||||
DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, pCallBack, null, true, dispatcher);
|
||||
}
|
||||
|
||||
public static void DoGkvAccountingServiceAsync(Action<IGkvAccountingService> pAction)
|
||||
{
|
||||
DoAsync<GkvAccountingServiceClient, IGkvAccountingService>(pAction, true);
|
||||
}
|
||||
public static void DoGkvAccountingServiceSync(Action<IGkvAccountingService> pAction)
|
||||
{
|
||||
try
|
||||
{
|
||||
pAction.Invoke(GetInstance<GkvAccountingServiceClient, IGkvAccountingService>());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ShowErrorMessage(e);
|
||||
}
|
||||
}
|
||||
=> DoSync<GkvAccountingServiceClient, IGkvAccountingService>(pAction);
|
||||
public static T DoGkvAccountingServiceSync<T>(Func<IGkvAccountingService, T> pFunc)
|
||||
{
|
||||
try
|
||||
{
|
||||
return pFunc.Invoke(GetInstance<GkvAccountingServiceClient, IGkvAccountingService>());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ShowErrorMessage(e);
|
||||
}
|
||||
|
||||
return default(T);
|
||||
}
|
||||
=> DoSync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc);
|
||||
public static void DoGkvAccountingServiceAsync(Action<IGkvAccountingService> pAction, Action pCallback = null, Action<Exception> pErrorCallback = null, bool showWaitDialog = true, UserControl caller = null)
|
||||
=> DoAsync<GkvAccountingServiceClient, IGkvAccountingService>(pAction, pCallback, pErrorCallback, showWaitDialog, caller?.Dispatcher);
|
||||
public static void DoGkvAccountingServiceAsync<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallback = null, Action<Exception> pErrorCallback = null, bool showWaitDialog = true, UserControl caller = null)
|
||||
=> DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, pCallback, pErrorCallback, showWaitDialog, caller?.Dispatcher);
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
48
BeWo/ServiceProxy/ServiceFacadeExtension.cs
Normal file
48
BeWo/ServiceProxy/ServiceFacadeExtension.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using DevExpress.Export.Xl;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace BeWo.ServiceProxy
|
||||
{
|
||||
internal static class ServiceFacadeExtension
|
||||
{
|
||||
public static void DoGkvAccountingServiceAsync<T>(this UserControl uc, Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack = null, bool showWaitDialog = true)
|
||||
{
|
||||
Action<T> lCallBack = null;
|
||||
|
||||
if (pCallBack != null)
|
||||
{
|
||||
lCallBack = (t) => uc.Dispatcher.BeginInvoke(
|
||||
DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
pCallBack(t);
|
||||
});
|
||||
}
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync<T>(pFunc, lCallBack);
|
||||
}
|
||||
|
||||
public static void DoGkvAccountingServiceAsync(this UserControl uc, Action<IGkvAccountingService> pAction, Action pCallBack = null, bool showWaitDialog = true)
|
||||
{
|
||||
Action lCallBack = null;
|
||||
|
||||
if (pCallBack != null)
|
||||
{
|
||||
lCallBack = () => uc.Dispatcher.BeginInvoke(
|
||||
DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
pCallBack();
|
||||
});
|
||||
}
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(pAction, lCallBack);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,13 +15,13 @@ namespace BeWo.Services
|
||||
{
|
||||
public Dictionary<UIContext, string> UIContext2Header { get; set; } = new Dictionary<UIContext, string>()
|
||||
{
|
||||
{UIContext.ServiceRecord, "Zeiterfassung KI Chat" },
|
||||
{UIContext.Customer, "Klienten Übersicht KI Chat" },
|
||||
{UIContext.Person, "Personen Übersicht KI Chat" },
|
||||
{UIContext.Employee, "Mitarbeiter Übersicht KI Chat" },
|
||||
{UIContext.Organisation, "Organisation Übersicht KI Chat" },
|
||||
{UIContext.SupportConcept, "Hilfeplan Übersicht KI Chat" },
|
||||
{UIContext.CustomerSingle, "Klient KI Chat" },
|
||||
{UIContext.ServiceRecord, "KI Chat: Zeiterfassung" },
|
||||
{UIContext.Customer, "KI Chat: Klienten Übersicht" },
|
||||
{UIContext.Person, "KI Chat: Personen Übersicht" },
|
||||
{UIContext.Employee, "KI Chat: Mitarbeiter Übersicht" },
|
||||
{UIContext.Organisation, "KI Chat: Organisation Übersicht" },
|
||||
{UIContext.SupportConcept, "KI Chat: Hilfeplan Übersicht" },
|
||||
{UIContext.CustomerSingle, "KI Chat: Klient" },
|
||||
};
|
||||
|
||||
public AnimatedBeWoWindow GetAiConversationWindow(UIContext uIContext, Control control, double height = 600, double width = 1200)
|
||||
|
||||
@@ -102,33 +102,48 @@
|
||||
<!-- Endregion -->
|
||||
|
||||
<!-- Module AI Farben -->
|
||||
|
||||
<!-- FFD2D2D2 -->
|
||||
<!-- #FFA0A0A0 -->
|
||||
|
||||
<Color x:Key="ModuleAiControlDefaultNavigationHeaderColor">#ffaaaaaa</Color>
|
||||
<Color x:Key="ModuleAiControlDefaultNavigationContentColor">#FFD7DADB</Color>
|
||||
<Color x:Key="ModuleAiControlDefaultNavigationContentColor2">#FF92A9B3</Color>
|
||||
|
||||
<Color x:Key="ModuleAiControlZeiterfassungNavigationHeaderColor">#FFC80000</Color>
|
||||
<Color x:Key="ModuleAiControlZeiterfassungNavigationContentColor">#FFD7DADB</Color>
|
||||
<Color x:Key="ModuleAiControlZeiterfassungNavigationContentColor2">#FF92A9B3</Color>
|
||||
<Color x:Key="ModuleAiControlZeiterfassungNavigationHeaderColor">#FF5C1919</Color>
|
||||
<Color x:Key="ModuleAiControlZeiterfassungNavigationContentColor">#FF993B3B</Color>
|
||||
<Color x:Key="ModuleAiControlZeiterfassungNavigationContentColor2">#FF5C1919</Color>
|
||||
|
||||
<Color x:Key="ModuleAiControlSupportConceptNavigationHeaderColor">#FF993B3B</Color>
|
||||
<Color x:Key="ModuleAiControlSupportConceptNavigationContentColor">#FFD7DADB</Color>
|
||||
<Color x:Key="ModuleAiControlSupportConceptNavigationContentColor2">#FF92A9B3</Color>
|
||||
<Color x:Key="ModuleAiControlSupportConceptNavigationHeaderColor">#FF5C1919</Color>
|
||||
<Color x:Key="ModuleAiControlSupportConceptNavigationContentColor">#FF993B3B</Color>
|
||||
<Color x:Key="ModuleAiControlSupportConceptNavigationContentColor2">#FF5C1919</Color>
|
||||
|
||||
<Color x:Key="ModuleAiControlCustomerNavigationHeaderColor">#FF19485C</Color>
|
||||
<Color x:Key="ModuleAiControlCustomerNavigationContentColor">#FFD7DADB</Color>
|
||||
<Color x:Key="ModuleAiControlCustomerNavigationContentColor2">#FF92A9B3</Color>
|
||||
<Color x:Key="ModuleAiControlCustomerNavigationContentColor">#FF3B7799</Color>
|
||||
<Color x:Key="ModuleAiControlCustomerNavigationContentColor2">#FF19485C</Color>
|
||||
<!--<Color x:Key="ModuleAiControlCustomerNavigationContentColor">#FFD7DADB</Color>
|
||||
<Color x:Key="ModuleAiControlCustomerNavigationContentColor2">#FF92A9B3</Color>-->
|
||||
|
||||
<Color x:Key="ModuleAiControlPersonNavigationHeaderColor">#FF9E3D02</Color>
|
||||
<Color x:Key="ModuleAiControlPersonNavigationContentColor">#FFD7DADB</Color>
|
||||
<Color x:Key="ModuleAiControlPersonNavigationContentColor2">#FF92A9B3</Color>
|
||||
<Color x:Key="ModuleAiControlPersonNavigationContentColor">#FFB5662D</Color>
|
||||
<Color x:Key="ModuleAiControlPersonNavigationContentColor2">#FF9E3D02</Color>
|
||||
|
||||
<Color x:Key="ModuleAiControlEmployeeNavigationHeaderColor">#FF205C19</Color>
|
||||
<Color x:Key="ModuleAiControlEmployeeNavigationContentColor">#FFD7DADB</Color>
|
||||
<Color x:Key="ModuleAiControlEmployeeNavigationContentColor2">#FF92A9B3</Color>
|
||||
<Color x:Key="ModuleAiControlEmployeeNavigationContentColor">#FF45993B</Color>
|
||||
<Color x:Key="ModuleAiControlEmployeeNavigationContentColor2">#FF205C19</Color>
|
||||
|
||||
<Color x:Key="ModuleAiControlOrganisationNavigationHeaderColor">#FFC8C000</Color>
|
||||
<Color x:Key="ModuleAiControlOrganisationNavigationContentColor">#FFD7DADB</Color>
|
||||
<Color x:Key="ModuleAiControlOrganisationNavigationContentColor2">#FF92A9B3</Color>
|
||||
<Color x:Key="ModuleAiControlOrganisationNavigationContentColor">#FFC8C000</Color>
|
||||
<Color x:Key="ModuleAiControlOrganisationNavigationContentColor2">#FF706000</Color>
|
||||
|
||||
<Color x:Key="BrightTextPrimary">#FFFFFFFF</Color>
|
||||
<Color x:Key="BrightTextSecondary">#FFD2D2D2</Color>
|
||||
|
||||
<Color x:Key="LightTextPrimary">#FFD2D2D2</Color>
|
||||
<Color x:Key="LightTextSecondary">#FFA0A0A0</Color>
|
||||
|
||||
<Color x:Key="DarkTextPrimary">#FF111111</Color>
|
||||
<Color x:Key="DarkTextSecondary">#FF777777</Color>
|
||||
|
||||
<SolidColorBrush x:Key="ModuleAiChatTabItem" Color="#FFFFFFBF" />
|
||||
<SolidColorBrush x:Key="ModuleAiChatPrimaryColor" Color="#FFCECF7F" />
|
||||
|
||||
@@ -14,14 +14,19 @@
|
||||
<Setter Property="Height" Value="auto" />
|
||||
<Setter Property="Padding" Value="3" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource TextForegroundPrimary}" />
|
||||
<Setter Property="BorderThickness" Value="0" />
|
||||
<Setter Property="IsReadOnly" Value="True" />
|
||||
<Setter Property="TextWrapping" Value="Wrap" />
|
||||
<Setter Property="Text" Value="{Binding Message, Converter={StaticResource NewlineConverter}}" />
|
||||
<Setter Property="FontSize" Value="14" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}" />
|
||||
|
||||
<SolidColorBrush x:Key="TextForegroundPrimary" Color="{StaticResource LightTextPrimary}" />
|
||||
<SolidColorBrush x:Key="TextForegroundSecondary" Color="{StaticResource LightTextSecondary}" />
|
||||
|
||||
<Style x:Key="ModuleAiControlDefaultStyle" TargetType="{x:Type GroupBox}">
|
||||
<Style.Resources>
|
||||
<SolidColorBrush x:Key="NavigationHeaderBrush" Color="{StaticResource ModuleAiControlDefaultNavigationHeaderColor}" />
|
||||
@@ -29,11 +34,16 @@
|
||||
<GradientStop Offset="0" Color="{StaticResource ModuleAiControlDefaultNavigationContentColor}" />
|
||||
<GradientStop Offset="1" Color="{StaticResource ModuleAiControlDefaultNavigationContentColor2}" />
|
||||
</LinearGradientBrush>
|
||||
<SolidColorBrush x:Key="TextForegroundPrimary" Color="{StaticResource LightTextPrimary}" />
|
||||
<SolidColorBrush x:Key="TextForegroundSecondary" Color="{StaticResource LightTextSecondary}" />
|
||||
</Style.Resources>
|
||||
<Setter Property="Template" Value="{StaticResource NavigationGroupTemplate2}" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ModuleAiControlZeiterfassungStyle" TargetType="{x:Type GroupBox}">
|
||||
<Style
|
||||
x:Key="ModuleAiControlZeiterfassungStyle"
|
||||
BasedOn="{StaticResource ModuleAiControlDefaultStyle}"
|
||||
TargetType="{x:Type GroupBox}">
|
||||
<Style.Resources>
|
||||
<SolidColorBrush x:Key="NavigationHeaderBrush" Color="{StaticResource ModuleAiControlZeiterfassungNavigationHeaderColor}" />
|
||||
<LinearGradientBrush x:Key="NavigationContentBrush" StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
@@ -41,10 +51,12 @@
|
||||
<GradientStop Offset="1" Color="{StaticResource ModuleAiControlZeiterfassungNavigationContentColor2}" />
|
||||
</LinearGradientBrush>
|
||||
</Style.Resources>
|
||||
<Setter Property="Template" Value="{StaticResource NavigationGroupTemplate2}" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ModuleAiControlSupportConceptStyle" TargetType="{x:Type GroupBox}">
|
||||
<Style
|
||||
x:Key="ModuleAiControlSupportConceptStyle"
|
||||
BasedOn="{StaticResource ModuleAiControlDefaultStyle}"
|
||||
TargetType="{x:Type GroupBox}">
|
||||
<Style.Resources>
|
||||
<SolidColorBrush x:Key="NavigationHeaderBrush" Color="{StaticResource ModuleAiControlSupportConceptNavigationHeaderColor}" />
|
||||
<LinearGradientBrush x:Key="NavigationContentBrush" StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
@@ -52,10 +64,12 @@
|
||||
<GradientStop Offset="1" Color="{StaticResource ModuleAiControlSupportConceptNavigationContentColor2}" />
|
||||
</LinearGradientBrush>
|
||||
</Style.Resources>
|
||||
<Setter Property="Template" Value="{StaticResource NavigationGroupTemplate2}" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ModuleAiControlCustomerStyle" TargetType="{x:Type GroupBox}">
|
||||
<Style
|
||||
x:Key="ModuleAiControlCustomerStyle"
|
||||
BasedOn="{StaticResource ModuleAiControlDefaultStyle}"
|
||||
TargetType="{x:Type GroupBox}">
|
||||
<Style.Resources>
|
||||
<SolidColorBrush x:Key="NavigationHeaderBrush" Color="{StaticResource ModuleAiControlCustomerNavigationHeaderColor}" />
|
||||
<LinearGradientBrush x:Key="NavigationContentBrush" StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
@@ -63,10 +77,12 @@
|
||||
<GradientStop Offset="1" Color="{StaticResource ModuleAiControlCustomerNavigationContentColor2}" />
|
||||
</LinearGradientBrush>
|
||||
</Style.Resources>
|
||||
<Setter Property="Template" Value="{StaticResource NavigationGroupTemplate2}" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ModuleAiControlPersonStyle" TargetType="{x:Type GroupBox}">
|
||||
<Style
|
||||
x:Key="ModuleAiControlPersonStyle"
|
||||
BasedOn="{StaticResource ModuleAiControlDefaultStyle}"
|
||||
TargetType="{x:Type GroupBox}">
|
||||
<Style.Resources>
|
||||
<SolidColorBrush x:Key="NavigationHeaderBrush" Color="{StaticResource ModuleAiControlPersonNavigationHeaderColor}" />
|
||||
<LinearGradientBrush x:Key="NavigationContentBrush" StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
@@ -74,10 +90,12 @@
|
||||
<GradientStop Offset="1" Color="{StaticResource ModuleAiControlPersonNavigationContentColor2}" />
|
||||
</LinearGradientBrush>
|
||||
</Style.Resources>
|
||||
<Setter Property="Template" Value="{StaticResource NavigationGroupTemplate2}" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ModuleAiControlEmployeeStyle" TargetType="{x:Type GroupBox}">
|
||||
<Style
|
||||
x:Key="ModuleAiControlEmployeeStyle"
|
||||
BasedOn="{StaticResource ModuleAiControlDefaultStyle}"
|
||||
TargetType="{x:Type GroupBox}">
|
||||
<Style.Resources>
|
||||
<SolidColorBrush x:Key="NavigationHeaderBrush" Color="{StaticResource ModuleAiControlEmployeeNavigationHeaderColor}" />
|
||||
<LinearGradientBrush x:Key="NavigationContentBrush" StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
@@ -85,18 +103,21 @@
|
||||
<GradientStop Offset="1" Color="{StaticResource ModuleAiControlEmployeeNavigationContentColor2}" />
|
||||
</LinearGradientBrush>
|
||||
</Style.Resources>
|
||||
<Setter Property="Template" Value="{StaticResource NavigationGroupTemplate2}" />
|
||||
</Style>
|
||||
|
||||
<Style x:Key="ModuleAiControlOrganisationStyle" TargetType="{x:Type GroupBox}">
|
||||
<Style
|
||||
x:Key="ModuleAiControlOrganisationStyle"
|
||||
BasedOn="{StaticResource ModuleAiControlDefaultStyle}"
|
||||
TargetType="{x:Type GroupBox}">
|
||||
<Style.Resources>
|
||||
<SolidColorBrush x:Key="NavigationHeaderBrush" Color="{StaticResource ModuleAiControlOrganisationNavigationHeaderColor}" />
|
||||
<LinearGradientBrush x:Key="NavigationContentBrush" StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
<GradientStop Offset="0" Color="{StaticResource ModuleAiControlOrganisationNavigationContentColor}" />
|
||||
<GradientStop Offset="1" Color="{StaticResource ModuleAiControlOrganisationNavigationContentColor2}" />
|
||||
</LinearGradientBrush>
|
||||
<SolidColorBrush x:Key="TextForegroundPrimary" Color="{StaticResource BrightTextPrimary}" />
|
||||
<SolidColorBrush x:Key="TextForegroundSecondary" Color="{StaticResource BrightTextSecondary}" />
|
||||
</Style.Resources>
|
||||
<Setter Property="Template" Value="{StaticResource NavigationGroupTemplate2}" />
|
||||
</Style>
|
||||
|
||||
<!-- OLD -->
|
||||
@@ -122,9 +143,9 @@
|
||||
Width="auto"
|
||||
Margin="0,0,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Background="#44000000"
|
||||
Background="#17000000"
|
||||
BorderBrush="Black"
|
||||
BorderThickness="1"
|
||||
BorderThickness="0"
|
||||
CornerRadius="10, 10, 10, 10">
|
||||
<Grid Margin="8">
|
||||
<Grid.RowDefinitions>
|
||||
@@ -133,22 +154,23 @@
|
||||
<RowDefinition Height="auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock
|
||||
FontSize="12"
|
||||
FontSize="14"
|
||||
FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource TextForegroundPrimary}"
|
||||
Text="{Binding Displayname}"
|
||||
TextTrimming="CharacterEllipsis" />
|
||||
<TextBlock
|
||||
Grid.Row="1"
|
||||
FontSize="10"
|
||||
FontWeight="Thin"
|
||||
FontSize="11"
|
||||
Foreground="{DynamicResource TextForegroundSecondary}"
|
||||
Style="{StaticResource TextBlockStyle}"
|
||||
Text="{Binding Created, StringFormat=Erstellt: {0:dd.MM.yyyy HH:mm:ss}}" />
|
||||
Text="{Binding Created, StringFormat=Erstellt: {0:dd.MM.yy HH:mm}}" />
|
||||
<TextBlock
|
||||
Grid.Row="2"
|
||||
FontSize="10"
|
||||
FontWeight="Thin"
|
||||
FontSize="11"
|
||||
Foreground="{DynamicResource TextForegroundSecondary}"
|
||||
Style="{StaticResource TextBlockStyle}"
|
||||
Text="{Binding Updated, StringFormat=Aktualisiert: {0:dd.MM.yyyy HH:mm:ss}}" />
|
||||
Text="{Binding Updated, StringFormat=Aktualisiert: {0:dd.MM.yy HH:mm}}" />
|
||||
<!--<TextBlock
|
||||
Grid.Row="2"
|
||||
FontSize="10"
|
||||
@@ -183,7 +205,7 @@
|
||||
<Border
|
||||
Grid.Column="1"
|
||||
Padding="8,4,8,4"
|
||||
Background="#00000000"
|
||||
Background="#20000000"
|
||||
BorderBrush="Black"
|
||||
BorderThickness="0"
|
||||
CornerRadius="0, 10, 10, 10">
|
||||
@@ -200,8 +222,9 @@
|
||||
<TextBlock
|
||||
Margin="0"
|
||||
Padding="0"
|
||||
FontSize="12"
|
||||
FontSize="14"
|
||||
FontWeight="SemiBold"
|
||||
Foreground="{DynamicResource TextForegroundPrimary}"
|
||||
Style="{StaticResource TextBlockStyle}"
|
||||
Text="{Binding ModelName}" />
|
||||
<TextBlock
|
||||
@@ -209,8 +232,9 @@
|
||||
Margin="8,0,0,0"
|
||||
Padding="0"
|
||||
VerticalAlignment="Bottom"
|
||||
FontSize="10"
|
||||
FontSize="12"
|
||||
FontWeight="Medium"
|
||||
Foreground="{DynamicResource TextForegroundPrimary}"
|
||||
Style="{StaticResource TextBlockStyle}"
|
||||
Text="{Binding Created, StringFormat={}{0:dd.MM.yyyy HH:mm:ss}}" />
|
||||
<TextBlock
|
||||
@@ -219,9 +243,9 @@
|
||||
Margin="0,4,0,4"
|
||||
Padding="0"
|
||||
VerticalAlignment="Center"
|
||||
FontSize="11"
|
||||
FontSize="12"
|
||||
FontWeight="Medium"
|
||||
Foreground="#888888"
|
||||
Foreground="{DynamicResource TextForegroundSecondary}"
|
||||
Style="{StaticResource TextBlockStyle}"
|
||||
Text="{Binding DurationSec, StringFormat=Nachgedacht für {0} Sekunden}" />
|
||||
<!--<TextBlock
|
||||
|
||||
@@ -79,35 +79,45 @@
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<Label
|
||||
Grid.Row="0"
|
||||
Grid.Column="0"
|
||||
Content="Eigenes Aktenzeichen" />
|
||||
Content="AZ der Staatsanwaltschaft/des Gerichts" />
|
||||
<TextBox
|
||||
Grid.Row="0"
|
||||
Grid.Column="1"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Text="{Binding Path=AktenzeichenGericht, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Grid.Column="0"
|
||||
Content="Eigenes Aktenzeichen" />
|
||||
<TextBox
|
||||
Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Text="{Binding Path=EigenesAktenzeichen, UpdateSourceTrigger=PropertyChanged}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Grid.Row="2"
|
||||
Grid.Column="0"
|
||||
Content="Auftragseingang" />
|
||||
<dxe:DateEdit
|
||||
Grid.Row="1"
|
||||
Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=Auftragseingang, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
ShowClearButton="False" />
|
||||
|
||||
<Label
|
||||
Grid.Row="2"
|
||||
Grid.Row="3"
|
||||
Grid.Column="0"
|
||||
Content="Auftragsherkunft" />
|
||||
<uc:NullItemComboBox
|
||||
x:Name="comboBox_Auftragsherkunft"
|
||||
Grid.Row="2"
|
||||
Grid.Row="3"
|
||||
Grid.Column="1"
|
||||
DisplayMemberPath="TypeDescription"
|
||||
IsEnabled="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, ElementName=root}"
|
||||
@@ -116,12 +126,12 @@
|
||||
Style="{StaticResource PrimaryNullItemComboBox}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="3"
|
||||
Grid.Row="4"
|
||||
Grid.Column="0"
|
||||
Content="Vermittlungsgrundlage" />
|
||||
<uc:NullItemComboBox
|
||||
x:Name="comboBox_Vermittlungsgrundlage"
|
||||
Grid.Row="3"
|
||||
Grid.Row="4"
|
||||
Grid.Column="1"
|
||||
DisplayMemberPath="TypeDescription"
|
||||
IsEnabled="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, ElementName=root}"
|
||||
@@ -129,65 +139,65 @@
|
||||
SelectedValue="{Binding Path=Vermittlungsgrundlage, Mode=TwoWay}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="4"
|
||||
Grid.Row="5"
|
||||
Grid.Column="0"
|
||||
Content="Tagessätze" />
|
||||
<dxe:TextEdit
|
||||
Grid.Row="4"
|
||||
Grid.Row="5"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=Tagessatze, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Style="{StaticResource TextEditNumberDecimalNullable}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="5"
|
||||
Grid.Row="6"
|
||||
Grid.Column="0"
|
||||
Content="Tagessatzhöhe" />
|
||||
<dxe:TextEdit
|
||||
Grid.Row="5"
|
||||
Grid.Row="6"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=Tagessatzhohe, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Style="{StaticResource TextEditCurrency}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="6"
|
||||
Grid.Row="7"
|
||||
Grid.Column="0"
|
||||
Content="Höhe der Geldstrafe" />
|
||||
<dxe:TextEdit
|
||||
Grid.Row="6"
|
||||
Grid.Row="7"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=HoheDerGeldstrafe, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="True"
|
||||
Style="{StaticResource TextEditCurrency}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="7"
|
||||
Grid.Row="8"
|
||||
Grid.Column="0"
|
||||
Content="Zu leistende Arbeitsstunden" />
|
||||
<dxe:TextEdit
|
||||
Grid.Row="7"
|
||||
Grid.Row="8"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=ZuLeistendeArbeitsstunden, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Style="{StaticResource TextEditHours}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="8"
|
||||
Grid.Row="9"
|
||||
Grid.Column="0"
|
||||
Content="Hinweis" />
|
||||
<TextBox
|
||||
Grid.Row="8"
|
||||
Grid.Row="9"
|
||||
Grid.Column="1"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Text="{Binding Path=Hinweis, UpdateSourceTrigger=PropertyChanged}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="9"
|
||||
Grid.Row="10"
|
||||
Grid.Column="0"
|
||||
Content="Termin" />
|
||||
<dxe:DateEdit
|
||||
Grid.Row="9"
|
||||
Grid.Row="10"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=Termin, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
@@ -200,12 +210,12 @@
|
||||
</dxe:DateEdit>
|
||||
|
||||
<Label
|
||||
Grid.Row="10"
|
||||
Grid.Row="11"
|
||||
Grid.Column="0"
|
||||
Content="Bearbeitungsstatus" />
|
||||
<uc:NullItemComboBox
|
||||
x:Name="combobox_bearbeitungsstatus"
|
||||
Grid.Row="10"
|
||||
Grid.Row="11"
|
||||
Grid.Column="1"
|
||||
HorizontalAlignment="Stretch"
|
||||
IsEnabled="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, ElementName=root}"
|
||||
@@ -214,75 +224,75 @@
|
||||
Style="{StaticResource EnumTranslationNullItemComboBox}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="11"
|
||||
Grid.Row="12"
|
||||
Grid.Column="0"
|
||||
Content="Auftragsrückgabe" />
|
||||
<TextBox
|
||||
Grid.Row="11"
|
||||
Grid.Row="12"
|
||||
Grid.Column="1"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Text="{Binding Path=Auftragsruckgabe, UpdateSourceTrigger=PropertyChanged}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="12"
|
||||
Grid.Row="13"
|
||||
Grid.Column="0"
|
||||
Content="Verlauf" />
|
||||
<TextBox
|
||||
Grid.Row="12"
|
||||
Grid.Row="13"
|
||||
Grid.Column="1"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Text="{Binding Path=Verlauf, UpdateSourceTrigger=PropertyChanged}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="13"
|
||||
Grid.Row="14"
|
||||
Grid.Column="0"
|
||||
Content="Abgeleistete Stunden" />
|
||||
<dxe:TextEdit
|
||||
Grid.Row="13"
|
||||
Grid.Row="14"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=AbgeleisteteStunden, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Style="{StaticResource TextEditHours}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="14"
|
||||
Grid.Row="15"
|
||||
Grid.Column="0"
|
||||
Content="Ersparte Hafttage" />
|
||||
<dxe:TextEdit
|
||||
Grid.Row="14"
|
||||
Grid.Row="15"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=ErsparteHafttage, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Style="{StaticResource TextEditDays}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="15"
|
||||
Grid.Row="16"
|
||||
Grid.Column="0"
|
||||
Content="Geleistete Ratenzahlung" />
|
||||
<dxe:TextEdit
|
||||
Grid.Row="15"
|
||||
Grid.Row="16"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=GeleisteteRatenzahlung, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Style="{StaticResource TextEditCurrency}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="16"
|
||||
Grid.Row="17"
|
||||
Grid.Column="0"
|
||||
Content="Geleistete Einmalzahlung" />
|
||||
<dxe:TextEdit
|
||||
Grid.Row="16"
|
||||
Grid.Row="17"
|
||||
Grid.Column="1"
|
||||
EditValue="{Binding Path=GeleisteteEinmalzahlung, UpdateSourceTrigger=PropertyChanged}"
|
||||
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
|
||||
Style="{StaticResource TextEditCurrency}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="17"
|
||||
Grid.Row="18"
|
||||
Grid.Column="0"
|
||||
Content="Bemerkung" />
|
||||
<TextBox
|
||||
Grid.Row="17"
|
||||
Grid.Row="18"
|
||||
Grid.Column="1"
|
||||
Height="92"
|
||||
MaxHeight="184"
|
||||
|
||||
@@ -63,24 +63,22 @@ namespace BeWo.View.Controls
|
||||
{
|
||||
var protokoll = datagrid_transfer.GetCurrentValue<GkvTransferProtokollDC>();
|
||||
|
||||
var oid = protokoll.GkvTransferProtokollOid.Value;
|
||||
var oid = protokoll.Oid.Value;
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsyncGUI(
|
||||
this.DoGkvAccountingServiceAsync(
|
||||
service => service.GetProtokollRawDataString(oid, BS.Shared.GkvRawDataType.Auftragsdatei),
|
||||
callback => ShowTextViewer("Auftragsdatei", callback),
|
||||
Dispatcher);
|
||||
callback => ShowTextViewer("Auftragsdatei", callback));
|
||||
}
|
||||
|
||||
private void btn_nutzdatendatei_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var protokoll = datagrid_transfer.GetCurrentValue<GkvTransferProtokollDC>();
|
||||
|
||||
var oid = protokoll.GkvTransferProtokollOid.Value;
|
||||
var oid = protokoll.Oid.Value;
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsyncGUI(
|
||||
this.DoGkvAccountingServiceAsync(
|
||||
service => service.GetProtokollRawDataString(oid, BS.Shared.GkvRawDataType.Nutzdatendatei),
|
||||
callback => ShowTextViewer("Nutzdatendatei", callback),
|
||||
Dispatcher);
|
||||
callback => ShowTextViewer("Nutzdatendatei", callback));
|
||||
}
|
||||
|
||||
private void ShowTextViewer(string title, string text)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<listviewmodel:AiConversationListVM />
|
||||
</localView:BeWoView.DataContext>
|
||||
<Grid>
|
||||
<GroupBox x:Name="rootgroupbox" Style="{StaticResource ModuleAiControlDefaultStyle}">
|
||||
<GroupBox x:Name="rootgroupbox" Style="{StaticResource ModuleAiControlSupportConceptStyle}">
|
||||
<GroupBox.Header>
|
||||
<StackPanel
|
||||
Grid.Row="0"
|
||||
@@ -112,7 +112,7 @@
|
||||
</dxwui:HamburgerMenu.Content>
|
||||
</dxwui:HamburgerMenu>-->
|
||||
|
||||
<Grid Background="#33000000">
|
||||
<Grid Background="#12000000">
|
||||
<ListView
|
||||
x:Name="listbox_conversations"
|
||||
Padding="4"
|
||||
@@ -122,7 +122,8 @@
|
||||
ItemsSource="{Binding VMList}"
|
||||
ScrollViewer.CanContentScroll="False"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
SelectedItem="{Binding SelectedVM, Mode=TwoWay}">
|
||||
SelectedItem="{Binding SelectedVM, Mode=TwoWay}"
|
||||
SelectionChanged="listbox_conversations_SelectionChanged">
|
||||
<ListView.ItemContainerStyle>
|
||||
<Style TargetType="ListViewItem">
|
||||
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
|
||||
@@ -147,12 +148,14 @@
|
||||
x:Name="listbox_messages"
|
||||
Grid.Column="1"
|
||||
Padding="3"
|
||||
HorizontalAlignment="Stretch"
|
||||
Background="Transparent"
|
||||
BorderThickness="0"
|
||||
ItemTemplateSelector="{StaticResource AiConversationMessageTemplateSelector}"
|
||||
ItemsSource="{Binding SelectedVM.Messages.VMList, Converter={StaticResource AiConversationMessageSystemConverter}, UpdateSourceTrigger=PropertyChanged}"
|
||||
ScrollViewer.CanContentScroll="False"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
Visibility="{Binding IsNewConversationVisible, Converter={StaticResource BoolVisibilityConverter}, ConverterParameter=Reverse}">
|
||||
<ListView.ItemContainerStyle>
|
||||
<Style TargetType="ListViewItem">
|
||||
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
|
||||
@@ -179,7 +182,7 @@
|
||||
Margin="4">
|
||||
<Grid.Visibility>
|
||||
<MultiBinding Converter="{StaticResource BooleanAndVisibilityMultiConverter}">
|
||||
<Binding Converter="{StaticResource ObjectBoolConverter}" Path="SelectedVM" />
|
||||
<Binding Converter="{StaticResource BoolReverseConverter}" Path="IsNewConversationVisible" />
|
||||
<Binding Converter="{StaticResource UserPermission2BoolConverter}" ConverterParameter="{x:Static shared:UserRightType.AiModuleChatAdd}" />
|
||||
</MultiBinding>
|
||||
</Grid.Visibility>
|
||||
@@ -205,7 +208,6 @@
|
||||
MaxHeight="200"
|
||||
Margin="0,0,4,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch"
|
||||
AcceptsReturn="True"
|
||||
IsReadOnly="{Binding IsSending}"
|
||||
Text="{Binding MessageInput, UpdateSourceTrigger=PropertyChanged}" />
|
||||
@@ -220,6 +222,48 @@
|
||||
Content="Senden"
|
||||
Visibility="Visible" />
|
||||
</Grid>
|
||||
<Grid
|
||||
Grid.RowSpan="2"
|
||||
Grid.Column="1"
|
||||
Margin="4">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="0" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.Visibility>
|
||||
<MultiBinding Converter="{StaticResource BooleanAndVisibilityMultiConverter}">
|
||||
<Binding Path="IsNewConversationVisible" />
|
||||
<Binding Converter="{StaticResource UserPermission2BoolConverter}" ConverterParameter="{x:Static shared:UserRightType.AiModuleChatAdd}" />
|
||||
</MultiBinding>
|
||||
</Grid.Visibility>
|
||||
<TextBox
|
||||
x:Name="txt_input_message2"
|
||||
Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
Height="auto"
|
||||
MaxHeight="200"
|
||||
Margin="0,0,4,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
AcceptsReturn="True"
|
||||
IsReadOnly="{Binding IsSending}"
|
||||
Text="{Binding MessageInput, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<Button
|
||||
Grid.Row="1"
|
||||
Grid.Column="2"
|
||||
Height="auto"
|
||||
MinHeight="25"
|
||||
MaxHeight="100"
|
||||
Margin="0"
|
||||
VerticalAlignment="Stretch"
|
||||
Command="{Binding StartConversationWithMessageCommand}"
|
||||
Content="Senden"
|
||||
Visibility="Visible" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<Border
|
||||
@@ -234,8 +278,10 @@
|
||||
<Rectangle Fill="#FF000000">
|
||||
<Rectangle.OpacityMask>
|
||||
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
|
||||
<GradientStop Offset="0" Color="#33000000" />
|
||||
<GradientStop Offset="1" Color="#99FFFFFF" />
|
||||
<!--<GradientStop Offset="0" Color="#33000000" />
|
||||
<GradientStop Offset="1" Color="#99FFFFFF" />-->
|
||||
<GradientStop Offset="0" Color="#19000000" />
|
||||
<GradientStop Offset="1" Color="#33FFFFFF" />
|
||||
</LinearGradientBrush>
|
||||
</Rectangle.OpacityMask>
|
||||
</Rectangle>
|
||||
@@ -248,7 +294,7 @@
|
||||
<Button
|
||||
x:Name="btnNew"
|
||||
Margin="0,0,0,0"
|
||||
Command="{Binding RequestNewConversationCommand}"
|
||||
Command="{Binding OpenNewConversationCommand}"
|
||||
Content="Neuer Chat" />
|
||||
<Button
|
||||
x:Name="btnSettings"
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace BeWo.View.Detail.AI
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
((INotifyCollectionChanged)listbox_messages.Items).CollectionChanged += listbox_conversations_SelectionChanged;
|
||||
((INotifyCollectionChanged)listbox_messages.Items).CollectionChanged += listbox_messages_SelectionChanged;
|
||||
|
||||
popup_settings.Closed += (s, e) => ViewModel.UpdateConfig();
|
||||
|
||||
@@ -62,7 +62,15 @@ namespace BeWo.View.Detail.AI
|
||||
ViewModel.ReloadConversationsCommand.Execute(null);
|
||||
}
|
||||
|
||||
private void listbox_conversations_SelectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||
private void listbox_conversations_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (ViewModel.IsNewConversationVisible)
|
||||
BeWoWpfUtils.ScrollToTop(listbox_conversations);
|
||||
else
|
||||
listbox_conversations.ScrollIntoView(listbox_conversations.SelectedItem);
|
||||
}
|
||||
|
||||
private void listbox_messages_SelectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
BeWoWpfUtils.ScrollToBottom(listbox_messages);
|
||||
}
|
||||
@@ -87,8 +95,10 @@ namespace BeWo.View.Detail.AI
|
||||
// Console.WriteLine("Enter erkannt");
|
||||
|
||||
object p = null;
|
||||
if(ViewModel.SendNewMessageCommand.CanExecute(p))
|
||||
if(ViewModel.SelectedVM is object && ViewModel.SendNewMessageCommand.CanExecute(p))
|
||||
ViewModel.SendNewMessageCommand.Execute(p);
|
||||
else if (ViewModel.SelectedVM is null && ViewModel.StartConversationWithMessageCommand.CanExecute(p))
|
||||
ViewModel.StartConversationWithMessageCommand.Execute(p);
|
||||
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Activities.Statements;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
@@ -15,170 +16,173 @@ using BeWo.ServiceProxy;
|
||||
using BeWo.View.Controls;
|
||||
using BeWo.View.Windows;
|
||||
using BeWo.ViewModel;
|
||||
using BeWo.ViewModel.Light;
|
||||
using BeWo.ViewModel.ListViewModel;
|
||||
|
||||
using BeWo.ViewModel.ListViewModel.Light;
|
||||
using BS.Shared;
|
||||
using BS.Shared.AppSender;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using BS.Shared.DataContracts.Light;
|
||||
using BS.Shared.Extensions;
|
||||
using DevExpress.Data.Filtering;
|
||||
using DevExpress.Mvvm;
|
||||
using DevExpress.Utils.Extensions;
|
||||
using DevExpress.Xpf.Editors;
|
||||
using DevExpress.Xpf.Grid;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace BeWo.View.Detail.Accounting
|
||||
{
|
||||
public partial class GkvAbrechnungOverview : BeWoView
|
||||
{
|
||||
private bool _IsRequesting = false;
|
||||
public partial class GkvAbrechnungOverview : BeWoView
|
||||
{
|
||||
private bool _IsRequesting = false;
|
||||
|
||||
private readonly NewGkvAbrechnungPopUpView _NewGkvAbrechnungPopUpView;
|
||||
private readonly GkvAbrechnungListVM _Viewmodel;
|
||||
private readonly NewGkvAbrechnungPopUpView _NewGkvAbrechnungPopUpView;
|
||||
private readonly GkvAbrechnungLightListVM _Viewmodel;
|
||||
|
||||
public GkvAbrechnungOverview()
|
||||
{
|
||||
UpdateDataGridFilterCommand = new DelegateCommand(UpdateDataGridFilter);
|
||||
public GkvAbrechnungOverview()
|
||||
{
|
||||
UpdateDataGridFilterCommand = new DelegateCommand(UpdateDataGridFilter);
|
||||
|
||||
InitializeComponent();
|
||||
InitializeComponent();
|
||||
|
||||
DownloadLinkEngine = new DownloadLinkEngine();
|
||||
DownloadLinkEngine = new DownloadLinkEngine();
|
||||
|
||||
_Viewmodel = new GkvAbrechnungListVM();
|
||||
_Viewmodel.VMList.ListChanged += (s, e) => gridView.BestFitColumns();
|
||||
_Viewmodel = new GkvAbrechnungLightListVM();
|
||||
_Viewmodel.VMList.ListChanged += (s, e) => gridView.BestFitColumns();
|
||||
|
||||
DataContext = _Viewmodel;
|
||||
DataContext = _Viewmodel;
|
||||
|
||||
//datagrid_gkvAbrechnungen.FixedFilter = new BinaryOperator("Datenaustauschreferenz", 1);
|
||||
//datagrid_gkvAbrechnungen.FixedFilter = new BinaryOperator("Datenaustauschreferenz", 1);
|
||||
|
||||
_NewGkvAbrechnungPopUpView = new NewGkvAbrechnungPopUpView();
|
||||
_NewGkvAbrechnungPopUpView.CancelButtonClicked += NewGkvAbrechnungPopUpViewCancelButtonClicked;
|
||||
_NewGkvAbrechnungPopUpView.CreateButtonClicked += NewGkvAbrechnungPopUpViewCreateButtonClicked;
|
||||
_NewGkvAbrechnungPopUpView = new NewGkvAbrechnungPopUpView();
|
||||
_NewGkvAbrechnungPopUpView.CancelButtonClicked += NewGkvAbrechnungPopUpViewCancelButtonClicked;
|
||||
_NewGkvAbrechnungPopUpView.CreateButtonClicked += NewGkvAbrechnungPopUpViewCreateButtonClicked;
|
||||
|
||||
_Viewmodel.DateTimeSpanFilter = yearMonthFilter.FilterSpan;
|
||||
}
|
||||
_Viewmodel.DateTimeSpanFilter = yearMonthFilter.FilterSpan;
|
||||
}
|
||||
|
||||
public DownloadLinkEngine DownloadLinkEngine { get; set; }
|
||||
public DelegateCommand UpdateDataGridFilterCommand { get; set; }
|
||||
public DownloadLinkEngine DownloadLinkEngine { get; set; }
|
||||
public DelegateCommand UpdateDataGridFilterCommand { get; set; }
|
||||
|
||||
private bool ShowAllInvoices => _Viewmodel.DateTimeSpanFilter is null;
|
||||
private bool ShowAllInvoices => _Viewmodel.DateTimeSpanFilter is null;
|
||||
|
||||
private void RefreshGkvAbrechnungenList()
|
||||
{
|
||||
if (_IsRequesting && ServiceFacade.IsWaiting())
|
||||
return;
|
||||
private void RefreshGkvAbrechnungenList()
|
||||
{
|
||||
if (_IsRequesting && ServiceFacade.IsWaiting())
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
_IsRequesting = true;
|
||||
_IsRequesting = true;
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(s => s.GetFilteredGkvAbrechnungen(null), UpdateGkvAbrechnungList);
|
||||
}
|
||||
catch(Exception e)
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(s => s.GetFilteredGkvAbrechnungen(null), UpdateGkvAbrechnungList);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_IsRequesting = false;
|
||||
_IsRequesting = false;
|
||||
|
||||
throw e;
|
||||
throw e;
|
||||
}
|
||||
|
||||
_IsRequesting = false;
|
||||
}
|
||||
|
||||
private void UpdateGkvAbrechnungList(IList<GkvAbrechnungDC> dcList)
|
||||
{
|
||||
this.Dispatcher.BeginInvoke(
|
||||
DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
_Viewmodel.UpdateList(dcList);
|
||||
_IsRequesting = false;
|
||||
}
|
||||
|
||||
if (datagrid_gkvAbrechnungen.Visibility != Visibility.Visible)
|
||||
datagrid_gkvAbrechnungen.Visibility = Visibility.Visible;
|
||||
private void UpdateGkvAbrechnungList(IList<GkvAbrechnungLightDC> dcList)
|
||||
{
|
||||
this.Dispatcher.BeginInvoke(
|
||||
DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
_Viewmodel.UpdateList(dcList);
|
||||
|
||||
UpdateDataGridFilter();
|
||||
});
|
||||
}
|
||||
if (datagrid_gkvAbrechnungen.Visibility != Visibility.Visible)
|
||||
datagrid_gkvAbrechnungen.Visibility = Visibility.Visible;
|
||||
|
||||
private void UpdateDataGridFilter()
|
||||
{
|
||||
datagrid_gkvAbrechnungen.FixedFilter = null;
|
||||
UpdateDataGridFilter();
|
||||
});
|
||||
}
|
||||
|
||||
if (ShowAllInvoices)
|
||||
{
|
||||
datagrid_gkvAbrechnungen.FixedFilter = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
var filterByInvoiceDate = radioFilterByInvoiceDate.IsChecked.Value;
|
||||
private void UpdateDataGridFilter()
|
||||
{
|
||||
datagrid_gkvAbrechnungen.FixedFilter = null;
|
||||
|
||||
var filter_start = _Viewmodel.DateTimeSpanFilter.StartDate;
|
||||
var filter_ende = _Viewmodel.DateTimeSpanFilter.EndDate.AddDays(1).AddMilliseconds(-1);
|
||||
|
||||
if (filterByInvoiceDate)
|
||||
{
|
||||
datagrid_gkvAbrechnungen.FixedFilter = CriteriaOperator.And(
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.ErstelltAm >= filter_start),
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.ErstelltAm <= filter_ende));
|
||||
}
|
||||
else
|
||||
{
|
||||
datagrid_gkvAbrechnungen.FixedFilter = CriteriaOperator.Or(
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => filter_start <= gkv.AbrechnungsZeitraumStart && gkv.AbrechnungsZeitraumStart <= filter_ende),
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => filter_start <= gkv.AbrechnungsZeitraumEnde && gkv.AbrechnungsZeitraumEnde <= filter_ende),
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.AbrechnungsZeitraumStart <= filter_start && filter_ende <= gkv.AbrechnungsZeitraumEnde));
|
||||
}
|
||||
}
|
||||
|
||||
gridView.BestFitColumns();
|
||||
gridView.BestFitColumn(ColumnButtons);
|
||||
}
|
||||
|
||||
private void NewGkvAbrechnungPopUpViewCancelButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
MainControl.CloseCurrentPopUp();
|
||||
}
|
||||
private void NewGkvAbrechnungPopUpViewCreateButtonClicked(object sender, EventArgs<GkvAbrechnungDC> e)
|
||||
{
|
||||
var gkv_abrechnung = e.Data;
|
||||
|
||||
var checked_invoice_bases = _NewGkvAbrechnungPopUpView.ViewModel.InvoiceBases.Where(x => x.IsChecked);
|
||||
|
||||
if (!checked_invoice_bases.Any())
|
||||
return;
|
||||
|
||||
var success = ValidatorExtended.TryValidateGkvAbrechnung(gkv_abrechnung, checked_invoice_bases, false);
|
||||
if (!success)
|
||||
{
|
||||
var txt = "Sie haben Rechnungen mit verschiedenen Rechnungsadressen ausgewählt.";
|
||||
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OK);
|
||||
return;
|
||||
}
|
||||
|
||||
var already_used_invoices = checked_invoice_bases.Where(x => x.IsAlreadyInActiveGkvAbrechnung.Value);
|
||||
if (already_used_invoices.Any())
|
||||
if (ShowAllInvoices)
|
||||
{
|
||||
var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits in einer " +
|
||||
"anderen aktiven GKV-Abrechnung enthalten sind. Möchten Sie fortfahren?";
|
||||
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel);
|
||||
datagrid_gkvAbrechnungen.FixedFilter = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
var filterByInvoiceDate = radioFilterByInvoiceDate.IsChecked.Value;
|
||||
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
var filter_start = _Viewmodel.DateTimeSpanFilter.StartDate;
|
||||
var filter_ende = _Viewmodel.DateTimeSpanFilter.EndDate.AddDays(1).AddMilliseconds(-1);
|
||||
|
||||
if (filterByInvoiceDate)
|
||||
{
|
||||
datagrid_gkvAbrechnungen.FixedFilter = CriteriaOperator.And(
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.ErstelltAm >= filter_start),
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.ErstelltAm <= filter_ende));
|
||||
}
|
||||
else
|
||||
{
|
||||
datagrid_gkvAbrechnungen.FixedFilter = CriteriaOperator.Or(
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => filter_start <= gkv.AbrechnungsZeitraumStart && gkv.AbrechnungsZeitraumStart <= filter_ende),
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => filter_start <= gkv.AbrechnungsZeitraumEnde && gkv.AbrechnungsZeitraumEnde <= filter_ende),
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.AbrechnungsZeitraumStart <= filter_start && filter_ende <= gkv.AbrechnungsZeitraumEnde));
|
||||
}
|
||||
}
|
||||
|
||||
var bereits_bezahlt = checked_invoice_bases.Where(x => x.IsPaid);
|
||||
if (bereits_bezahlt.Any())
|
||||
{
|
||||
var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits als 'Bezahlt' " +
|
||||
"markiert sind. Möchten Sie fortfahren?";
|
||||
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel);
|
||||
gridView.BestFitColumns();
|
||||
gridView.BestFitColumn(ColumnButtons);
|
||||
}
|
||||
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
}
|
||||
private void NewGkvAbrechnungPopUpViewCancelButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
MainControl.CloseCurrentPopUp();
|
||||
}
|
||||
private void NewGkvAbrechnungPopUpViewCreateButtonClicked(object sender, EventArgs<GkvAbrechnungDC> e)
|
||||
{
|
||||
var gkv_abrechnung = e.Data;
|
||||
|
||||
MainControl.CloseCurrentPopUp();
|
||||
var checked_invoice_bases = _NewGkvAbrechnungPopUpView.ViewModel.InvoiceBases.Where(x => x.IsChecked);
|
||||
|
||||
if (!checked_invoice_bases.Any())
|
||||
return;
|
||||
|
||||
var success = ValidatorExtended.TryValidateGkvAbrechnung(gkv_abrechnung, checked_invoice_bases, false);
|
||||
if (!success)
|
||||
{
|
||||
var txt = "Sie haben Rechnungen mit verschiedenen Rechnungsadressen ausgewählt.";
|
||||
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OK);
|
||||
return;
|
||||
}
|
||||
|
||||
var already_used_invoices = checked_invoice_bases.Where(x => x.IsAlreadyInActiveGkvAbrechnung.Value);
|
||||
if (already_used_invoices.Any())
|
||||
{
|
||||
var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits in einer " +
|
||||
"anderen aktiven GKV-Abrechnung enthalten sind. Möchten Sie fortfahren?";
|
||||
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel);
|
||||
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
}
|
||||
|
||||
var bereits_bezahlt = checked_invoice_bases.Where(x => x.IsPaid);
|
||||
if (bereits_bezahlt.Any())
|
||||
{
|
||||
var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits als 'Bezahlt' " +
|
||||
"markiert sind. Möchten Sie fortfahren?";
|
||||
var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel);
|
||||
|
||||
if (result != MessageBoxResult.OK)
|
||||
return;
|
||||
}
|
||||
|
||||
MainControl.CloseCurrentPopUp();
|
||||
|
||||
var gkv_filter = new GkvAbrechnungCreateRequestDC
|
||||
{
|
||||
@@ -187,264 +191,245 @@ namespace BeWo.View.Detail.Accounting
|
||||
};
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.CreateNewGkvAbrechnung(gkv_filter),
|
||||
cb => Dispatcher.BeginInvoke(DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
if (cb.Success)
|
||||
{
|
||||
RefreshGkvAbrechnungenList();
|
||||
}
|
||||
else
|
||||
{
|
||||
BeWoWindowBuilder.ShowTitleErrorMessageBox(cb.Message, cb.TitleMessage);
|
||||
}
|
||||
}));
|
||||
}
|
||||
cb => Dispatcher.BeginInvoke(DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
if (cb.Success)
|
||||
{
|
||||
RefreshGkvAbrechnungenList();
|
||||
}
|
||||
else
|
||||
{
|
||||
BeWoWindowBuilder.ShowTitleErrorMessageBox(cb.Message, cb.TitleMessage);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private void YearMonthFilter_FilterSpanChanged(object sender, EventArgs<DateTimeSpan> e)
|
||||
{
|
||||
_Viewmodel.DateTimeSpanFilter = e.Data;
|
||||
UpdateDataGridFilter();
|
||||
}
|
||||
private void YearMonthFilter_FilterSpanChanged(object sender, EventArgs<DateTimeSpan> e)
|
||||
{
|
||||
_Viewmodel.DateTimeSpanFilter = e.Data;
|
||||
UpdateDataGridFilter();
|
||||
}
|
||||
|
||||
private void btn_details_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var vm = this.datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
||||
private void btn_details_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var vm = this.datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
||||
|
||||
var window = BeWoWindowBuilder.GetGkvAbrechnungDetailWindow(vm);
|
||||
var window = BeWoWindowBuilder.GetGkvAbrechnungDetailWindow(vm);
|
||||
|
||||
window.Closing += Detail_Window_Closing;
|
||||
window.Closing += Detail_Window_Closing;
|
||||
|
||||
window.ShowDialog();
|
||||
}
|
||||
window.ShowDialog();
|
||||
}
|
||||
|
||||
private void Detail_Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
var bewo_window = sender as BeWoWindow;
|
||||
var detail_control = bewo_window.GroupBoxContent as GkvAbrechnungDetailControl;
|
||||
private void Detail_Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
var bewo_window = sender as BeWoWindow;
|
||||
var detail_control = bewo_window.GroupBoxContent as GkvAbrechnungDetailControl;
|
||||
|
||||
var vm = detail_control.DataContext as GkvAbrechnungVM;
|
||||
var vm = detail_control.DataContext as GkvAbrechnungLightVM;
|
||||
|
||||
vm.CheckAllInvoiceBases();
|
||||
vm.CheckAllInvoiceBases();
|
||||
|
||||
var checkbox_checked = detail_control.Checkbox_Bezahlt.IsChecked;
|
||||
var textbox_text = detail_control.txt_Notice.Text;
|
||||
var checkbox_checked = detail_control.Checkbox_Bezahlt.IsChecked;
|
||||
var textbox_text = detail_control.txt_Notice.Text;
|
||||
|
||||
vm.Notice = textbox_text;
|
||||
vm.Notice = textbox_text;
|
||||
|
||||
if (vm.IsDirty)
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
if (vm.IsDirty)
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
{
|
||||
Dispatcher.Invoke(() => {
|
||||
vm.UpdateByDataContract(dc_out);
|
||||
});
|
||||
}, false);
|
||||
}
|
||||
}
|
||||
this.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), vm.UpdateByDataContract, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void btn_send_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
||||
private void btn_send_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungLightVM>();
|
||||
|
||||
var state = vm.GetState();
|
||||
var state = vm.GetState();
|
||||
|
||||
string text = "Sind Sie sicher, dass Sie die gewählte GKV-Abrechnung senden möchten?";
|
||||
string text = "Sind Sie sicher, dass Sie die gewählte GKV-Abrechnung senden möchten?";
|
||||
|
||||
if (state == GkvState.ErrorSoft)
|
||||
text = "Die gewählte GKV-Abrechnung wurde nicht erfolgreich an die Krankenkasse übertragen. Möchten Sie sie erneut senden?";
|
||||
|
||||
if (MessageBox.Show(text, "GKV-Abrechnung senden", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
|
||||
{
|
||||
vm.SendGkvAbrechnung();
|
||||
}
|
||||
}
|
||||
private void btn_delete_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
||||
if (state == GkvState.ErrorSoft)
|
||||
text = "Die gewählte GKV-Abrechnung wurde nicht erfolgreich an die Krankenkasse übertragen. Möchten Sie sie erneut senden?";
|
||||
|
||||
if (MessageBox.Show("Sind Sie sicher, dass Sie die gewählte GKV-Abrechnung löschen möchten?", "GKV-Abrechnung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
|
||||
{
|
||||
_Viewmodel.VMList.Remove(vm);
|
||||
if (MessageBox.Show(text, "GKV-Abrechnung senden", MessageBoxButton.YesNo, MessageBoxImage.Warning) != MessageBoxResult.Yes)
|
||||
return;
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(s => s.DeleteGkvAbrechnung(vm.CommitToDataContract()));
|
||||
}
|
||||
}
|
||||
private void NewButton_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
GkvAbrechnungDC gkvAbrechnungDC = new GkvAbrechnungDC();
|
||||
var req = new GkvAbrechnungSendRequestDC();
|
||||
req.GkvAbrechnungOid = vm.Oid;
|
||||
|
||||
var start = DateTime.Today.AddMonths(-1);
|
||||
var first = new DateTime(start.Year, start.Month, 1);
|
||||
var last = first.AddMonths(1).AddDays(-1);
|
||||
this.DoGkvAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req), vm.UpdateBySendResponse);
|
||||
}
|
||||
private void btn_delete_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungLightVM>();
|
||||
|
||||
gkvAbrechnungDC.AbrechnungsZeitraumStart = first;
|
||||
gkvAbrechnungDC.AbrechnungsZeitraumEnde = last;
|
||||
if (MessageBox.Show("Sind Sie sicher, dass Sie die gewählte GKV-Abrechnung löschen möchten?", "GKV-Abrechnung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
|
||||
{
|
||||
this.DoGkvAccountingServiceAsync(s => s.DeleteGkvAbrechnung(vm.Oid, vm.Version), () => _Viewmodel.VMList.Remove(vm));
|
||||
}
|
||||
}
|
||||
private void NewButton_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
GkvAbrechnungDC gkvAbrechnungDC = new GkvAbrechnungDC();
|
||||
|
||||
GkvAbrechnungVM gkvAbrechnungVM = new GkvAbrechnungVM(gkvAbrechnungDC);
|
||||
_NewGkvAbrechnungPopUpView.Clear();
|
||||
_NewGkvAbrechnungPopUpView.ViewModel = gkvAbrechnungVM;
|
||||
this.MainControl.ShowControlAsModalPopup(this._NewGkvAbrechnungPopUpView);
|
||||
}
|
||||
private void ReloadButton_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
RefreshGkvAbrechnungenList();
|
||||
}
|
||||
var start = DateTime.Today.AddMonths(-1);
|
||||
var first = new DateTime(start.Year, start.Month, 1);
|
||||
var last = first.AddMonths(1).AddDays(-1);
|
||||
|
||||
private void gridView_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.gridView.BestFitColumns();
|
||||
}
|
||||
private void gridView_ShownEditor(object sender, EditorEventArgs e)
|
||||
{
|
||||
if (e.Editor is CheckEdit)
|
||||
{
|
||||
var ed = (CheckEdit)e.Editor;
|
||||
ed.Tag = e.Row;
|
||||
}
|
||||
else if (int.TryParse(datagrid_gkvAbrechnungen.CurrentColumn.Tag?.ToString(), out int tag) && gridView.ActiveEditor is TextEdit)
|
||||
{
|
||||
((TextEdit)gridView.ActiveEditor).SetPropertyValue("MaxLength", tag);
|
||||
}
|
||||
}
|
||||
private void gridView_CellValueChanging(object sender, CellValueChangedEventArgs e)
|
||||
{
|
||||
if (e.Column is null)
|
||||
return;
|
||||
gkvAbrechnungDC.AbrechnungsZeitraumStart = first;
|
||||
gkvAbrechnungDC.AbrechnungsZeitraumEnde = last;
|
||||
|
||||
if (e.Column.FieldName == nameof(GkvAbrechnungVM.Bezahlt))
|
||||
{
|
||||
if (e.Value is bool b && e.Row is GkvAbrechnungVM vm)
|
||||
{
|
||||
SaveBezahltChange(vm, b);
|
||||
}
|
||||
}
|
||||
else if (e.Column.FieldName == nameof(GkvAbrechnungVM.UrbelegeGesendet))
|
||||
{
|
||||
if (e.Value is bool b && e.Row is GkvAbrechnungVM vm)
|
||||
{
|
||||
SaveUrbelegeGesendetChange(vm, b);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void TableView_OnCustomRowAppearance(object sender, CustomRowAppearanceEventArgs e)
|
||||
{
|
||||
if (e.Property != null && e.Property.Name == "Background")
|
||||
{
|
||||
var gkvAbrechnungVM = datagrid_gkvAbrechnungen.GetRow(e.RowHandle) as GkvAbrechnungVM;
|
||||
GkvAbrechnungVM gkvAbrechnungVM = new GkvAbrechnungVM(gkvAbrechnungDC);
|
||||
_NewGkvAbrechnungPopUpView.Clear();
|
||||
_NewGkvAbrechnungPopUpView.ViewModel = gkvAbrechnungVM;
|
||||
this.MainControl.ShowControlAsModalPopup(this._NewGkvAbrechnungPopUpView);
|
||||
}
|
||||
private void ReloadButton_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
RefreshGkvAbrechnungenList();
|
||||
}
|
||||
|
||||
if (gkvAbrechnungVM is null)
|
||||
return;
|
||||
private void gridView_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.gridView.BestFitColumns();
|
||||
}
|
||||
private void gridView_ShownEditor(object sender, EditorEventArgs e)
|
||||
{
|
||||
if (e.Editor is CheckEdit)
|
||||
{
|
||||
var ed = (CheckEdit)e.Editor;
|
||||
ed.Tag = e.Row;
|
||||
}
|
||||
else if (int.TryParse(datagrid_gkvAbrechnungen.CurrentColumn.Tag?.ToString(), out int tag) && gridView.ActiveEditor is TextEdit)
|
||||
{
|
||||
((TextEdit)gridView.ActiveEditor).SetPropertyValue("MaxLength", tag);
|
||||
}
|
||||
}
|
||||
private void gridView_CellValueChanging(object sender, CellValueChangedEventArgs e)
|
||||
{
|
||||
if (e.Column is null)
|
||||
return;
|
||||
|
||||
if (gkvAbrechnungVM.GkvState == GkvState.WaitingForKrankenkasseTooLong && BeWoApp.Mandator.ColorWaitTooLong is string colorWaiting)
|
||||
{
|
||||
e.Result = ColorExtensions.ParseSolidColorBrush(colorWaiting);
|
||||
e.Handled = true;
|
||||
}
|
||||
else if (gkvAbrechnungVM.GkvState == GkvState.WaitingForUrbelege && BeWoApp.Mandator.ColorSendUrbelege is string colorSend)
|
||||
{
|
||||
e.Result = ColorExtensions.ParseSolidColorBrush(colorSend);
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (e.Column.FieldName == nameof(GkvAbrechnungLightVM.Bezahlt))
|
||||
{
|
||||
if (e.Value is bool b && e.Row is GkvAbrechnungLightVM vm)
|
||||
{
|
||||
SaveBezahltChange(vm, b);
|
||||
}
|
||||
}
|
||||
else if (e.Column.FieldName == nameof(GkvAbrechnungLightVM.UrbelegeGesendet))
|
||||
{
|
||||
if (e.Value is bool b && e.Row is GkvAbrechnungLightVM vm)
|
||||
{
|
||||
SaveUrbelegeGesendetChange(vm, b);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void TableView_OnCustomRowAppearance(object sender, CustomRowAppearanceEventArgs e)
|
||||
{
|
||||
if (e.Property != null && e.Property.Name == "Background")
|
||||
{
|
||||
var gkvAbrechnungVM = datagrid_gkvAbrechnungen.GetRow(e.RowHandle) as GkvAbrechnungLightVM;
|
||||
|
||||
private void radioFilterByInvoiceDate_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
UpdateDataGridFilter();
|
||||
}
|
||||
if (gkvAbrechnungVM is null)
|
||||
return;
|
||||
|
||||
private void SaveBezahltChange(GkvAbrechnungVM vm, bool b)
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
if (gkvAbrechnungVM.GkvState == GkvState.WaitingForKrankenkasseTooLong && BeWoApp.Mandator.ColorWaitTooLong is string colorWaiting)
|
||||
{
|
||||
e.Result = ColorExtensions.ParseSolidColorBrush(colorWaiting);
|
||||
e.Handled = true;
|
||||
}
|
||||
else if (gkvAbrechnungVM.GkvState == GkvState.WaitingForUrbelege && BeWoApp.Mandator.ColorSendUrbelege is string colorSend)
|
||||
{
|
||||
e.Result = ColorExtensions.ParseSolidColorBrush(colorSend);
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dc_in.Bezahlt = b;
|
||||
private void radioFilterByInvoiceDate_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
UpdateDataGridFilter();
|
||||
}
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
{
|
||||
Dispatcher.Invoke(() => {
|
||||
vm.UpdateByDataContract(dc_out);
|
||||
});
|
||||
}, false);
|
||||
}
|
||||
private void SaveBezahltChange(GkvAbrechnungLightVM vm, bool b)
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
|
||||
private void SaveUrbelegeGesendetChange(GkvAbrechnungVM vm, bool b)
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
dc_in.Bezahlt = b;
|
||||
|
||||
dc_in.UrbelegeGesendet = b;
|
||||
this.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), vm.UpdateByDataContract, false);
|
||||
}
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
{
|
||||
Dispatcher.Invoke(() => {
|
||||
vm.UpdateByDataContract(dc_out);
|
||||
});
|
||||
}, false);
|
||||
}
|
||||
private void SaveUrbelegeGesendetChange(GkvAbrechnungLightVM vm, bool b)
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
|
||||
private void SaveNoticeChange(GkvAbrechnungVM vm, string notice)
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
dc_in.UrbelegeGesendet = b;
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||
{
|
||||
Dispatcher.Invoke(() => {
|
||||
vm.UpdateByDataContract(dc_out);
|
||||
});
|
||||
}, false);
|
||||
}
|
||||
this.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), vm.UpdateByDataContract, false);
|
||||
}
|
||||
|
||||
private void gridView_CellValueChanged_1(object sender, CellValueChangedEventArgs e)
|
||||
{
|
||||
if (e.Column != null && e.Column.FieldName == "Notice")
|
||||
{
|
||||
if (e.Value is string s && e.Row is GkvAbrechnungVM vm)
|
||||
{
|
||||
SaveNoticeChange(vm, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void SaveNoticeChange(GkvAbrechnungLightVM vm, string notice)
|
||||
{
|
||||
var dc_in = vm.CommitToDataContract();
|
||||
|
||||
this.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), vm.UpdateByDataContract, false);
|
||||
}
|
||||
|
||||
private void gridView_CellValueChanged_1(object sender, CellValueChangedEventArgs e)
|
||||
{
|
||||
if (e.Column != null && e.Column.FieldName == "Notice")
|
||||
{
|
||||
if (e.Value is string s && e.Row is GkvAbrechnungLightVM vm)
|
||||
{
|
||||
SaveNoticeChange(vm, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void BeWoView_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_Viewmodel.FirePropertyChangedItself();
|
||||
_Viewmodel.FirePropertyChangedItself();
|
||||
|
||||
if (_NewGkvAbrechnungPopUpView.PopupObjectList is object)
|
||||
_NewGkvAbrechnungPopUpView.PopupObjectList = null;
|
||||
if (_NewGkvAbrechnungPopUpView.PopupObjectList is object)
|
||||
_NewGkvAbrechnungPopUpView.PopupObjectList = null;
|
||||
|
||||
RefreshGkvAbrechnungenList();
|
||||
}
|
||||
RefreshGkvAbrechnungenList();
|
||||
}
|
||||
|
||||
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
|
||||
{
|
||||
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
||||
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
|
||||
{
|
||||
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungLightVM>();
|
||||
|
||||
string what2send = "unterschriebene Leistungsnachweise";
|
||||
string what2send = "unterschriebene Leistungsnachweise";
|
||||
|
||||
if (vm.Verfahrensstufe != GkvVerfahrensstufe.Echt)
|
||||
what2send += " und Rechnungen";
|
||||
if (vm.Verfahrensstufe != GkvVerfahrensstufe.Echt)
|
||||
what2send += " und Rechnungen";
|
||||
|
||||
BeWoApp.ShowInfoMessage($"Begleitzettel bitte inklusive der enthaltenen Urbelege ({what2send}) ausdrucken, " +
|
||||
$"Anzahl der Urbelege noch eintragen und alles zusammen versenden.");
|
||||
BeWoApp.ShowInfoMessage($"Begleitzettel bitte inklusive der enthaltenen Urbelege ({what2send}) ausdrucken, " +
|
||||
$"Anzahl der Urbelege noch eintragen und alles zusammen versenden.");
|
||||
|
||||
BeWoUtils.NavigateToReportUri(vm.ReportLink, "Druckvorschau");
|
||||
}
|
||||
BeWoUtils.NavigateToReportUri(vm.ReportLink, "Druckvorschau");
|
||||
}
|
||||
|
||||
private void Hyperlink_OnRequestNavigate2(object sender, RequestNavigateEventArgs e)
|
||||
{
|
||||
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungVM>();
|
||||
var vm = datagrid_gkvAbrechnungen.GetCurrentValue<GkvAbrechnungLightVM>();
|
||||
|
||||
string what2send = "Leistungsnachweise";
|
||||
string what2send = "Leistungsnachweise";
|
||||
|
||||
if (vm.Verfahrensstufe != GkvVerfahrensstufe.Echt)
|
||||
what2send += " und Rechnungen";
|
||||
if (vm.Verfahrensstufe != GkvVerfahrensstufe.Echt)
|
||||
what2send += " und Rechnungen";
|
||||
|
||||
BeWoApp.ShowInfoMessage($"Begleitzettel bitte inklusive der enthaltenen Urbelege ({what2send}) ausdrucken, " +
|
||||
$"Anzahl der Urbelege noch eintragen und alles zusammen versenden.");
|
||||
BeWoApp.ShowInfoMessage($"Begleitzettel bitte inklusive der enthaltenen Urbelege ({what2send}) ausdrucken, " +
|
||||
$"Anzahl der Urbelege noch eintragen und alles zusammen versenden.");
|
||||
|
||||
BeWoUtils.NavigateToReportUri(vm.ReportLink2, "Druckvorschau");
|
||||
}
|
||||
BeWoUtils.NavigateToReportUri(vm.ReportLink2, "Druckvorschau");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -258,7 +258,7 @@
|
||||
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="3"
|
||||
Grid.Row="0"
|
||||
Grid.Column="0"
|
||||
Margin="3,5,3,5"
|
||||
VerticalAlignment="Center"
|
||||
@@ -268,7 +268,7 @@
|
||||
</TextBlock>
|
||||
<dxe:SpinEdit
|
||||
x:Name="LockUITimeSpinEdit"
|
||||
Grid.Row="3"
|
||||
Grid.Row="0"
|
||||
Grid.Column="1"
|
||||
Height="23"
|
||||
Margin="3,5,3,5"
|
||||
@@ -278,7 +278,7 @@
|
||||
MinValue="0" />
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="4"
|
||||
Grid.Row="1"
|
||||
Grid.Column="0"
|
||||
Margin="3,5,3,5"
|
||||
VerticalAlignment="Center"
|
||||
@@ -288,7 +288,7 @@
|
||||
</TextBlock>
|
||||
<dxe:SpinEdit
|
||||
x:Name="MoKSessionTimeoutSpinEdit"
|
||||
Grid.Row="4"
|
||||
Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
Height="23"
|
||||
Margin="3,5,3,5"
|
||||
@@ -296,9 +296,17 @@
|
||||
IsFloatValue="False"
|
||||
MaxValue="60"
|
||||
MinValue="20" />
|
||||
|
||||
<CheckBox
|
||||
Grid.Row="2"
|
||||
Grid.ColumnSpan="2"
|
||||
Margin="3,5,3,5"
|
||||
IsChecked="{Binding Path=ShowServicesOverviewHalfOrWholeMonth}">
|
||||
<CheckBox.Content>
|
||||
<TextBlock TextWrapping="Wrap" Text="{markup:Translate In Mobilversion die Zeitraumauswahl für Quittierungsbelege ändern\, so dass nur noch Monatshälften oder der gesamte Monat ausgewählt werden kann.}" />
|
||||
</CheckBox.Content>
|
||||
</CheckBox>
|
||||
<TextBlock
|
||||
Grid.Row="5"
|
||||
Grid.Row="3"
|
||||
Grid.Column="0"
|
||||
Margin="3,5,3,5"
|
||||
VerticalAlignment="Center"
|
||||
@@ -307,7 +315,7 @@
|
||||
TextWrapping="Wrap" />
|
||||
<dxe:SpinEdit
|
||||
x:Name="helpplan"
|
||||
Grid.Row="5"
|
||||
Grid.Row="3"
|
||||
Grid.Column="1"
|
||||
Height="23"
|
||||
Margin="3,5,3,5"
|
||||
@@ -317,7 +325,7 @@
|
||||
MinValue="0" />
|
||||
|
||||
<CheckBox
|
||||
Grid.Row="7"
|
||||
Grid.Row="4"
|
||||
Grid.ColumnSpan="2"
|
||||
Margin="3,5,3,5"
|
||||
Content="Passwortsicherheit aktivieren"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:core="clr-namespace:BS.Shared.Core;assembly=BS.Shared"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
|
||||
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
|
||||
xmlns:localView="clr-namespace:BeWo.View"
|
||||
@@ -11,6 +12,7 @@
|
||||
xmlns:shared="clr-namespace:BS.Shared;assembly=BS.Shared"
|
||||
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls"
|
||||
xmlns:val="clr-namespace:BeWo.Validation"
|
||||
xmlns:viewmodel="clr-namespace:BeWo.ViewModel"
|
||||
Width="Auto"
|
||||
Height="Auto"
|
||||
HorizontalAlignment="Stretch"
|
||||
@@ -560,9 +562,7 @@
|
||||
Grid.Row="2"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
Width="360"
|
||||
Margin="0,8,0,0"
|
||||
HorizontalAlignment="Left"
|
||||
Header="GKV-Abrechnung"
|
||||
Style="{StaticResource ObjectEditGroupBox}">
|
||||
<GroupBox.Resources>
|
||||
@@ -587,9 +587,16 @@
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition
|
||||
Width="*"
|
||||
Width="10*"
|
||||
MinWidth="50"
|
||||
MaxWidth="200" />
|
||||
<ColumnDefinition Width="*" MinWidth="100" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition
|
||||
Width="10*"
|
||||
MinWidth="50"
|
||||
MaxWidth="200" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Label
|
||||
Grid.Row="0"
|
||||
@@ -608,6 +615,7 @@
|
||||
ToolTip="{Binding Path=IKKrankenkasse, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
ToolTipService.ShowOnDisabled="True" />
|
||||
</DockPanel>
|
||||
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Grid.Column="0"
|
||||
@@ -622,79 +630,42 @@
|
||||
Text="{Binding Path=Leistungserbringergruppe, UpdateSourceTrigger=PropertyChanged}"
|
||||
ToolTip="{Binding Path=Leistungserbringergruppe, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationLeistungserbringergruppe}}"
|
||||
ToolTipService.ShowOnDisabled="True" />
|
||||
|
||||
<Button
|
||||
x:Name="btn_ik"
|
||||
Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
Grid.RowSpan="2"
|
||||
Grid.Column="2"
|
||||
Height="auto"
|
||||
Margin="10,3,10,3"
|
||||
VerticalAlignment="Center"
|
||||
Click="button_ik_ermitteln_click"
|
||||
IsEnabled="{Binding IsIKNumberValid}"
|
||||
Style="{StaticResource PrimaryButtonSmall}"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
Weitere IK's ermitteln
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}"
|
||||
ToolTip="Daten aus Kostenträgerdatei ermitteln">
|
||||
<TextBlock Margin="3" TextAlignment="Center">
|
||||
GKV-Daten<LineBreak/>ermitteln
|
||||
</TextBlock>
|
||||
</Button>
|
||||
|
||||
|
||||
<Label
|
||||
Grid.Row="3"
|
||||
Grid.Column="0"
|
||||
VerticalAlignment="Center">
|
||||
IK Kostenträger
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="txt_ikkostentrager"
|
||||
Grid.Row="3"
|
||||
Grid.Column="1"
|
||||
Foreground="{Binding Path=IKKostentrager, Converter={StaticResource Validation2BrushConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=IKKostentrager, UpdateSourceTrigger=PropertyChanged}"
|
||||
ToolTip="{Binding Path=IKKostentrager, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
ToolTipService.ShowOnDisabled="True" />
|
||||
<Label
|
||||
Grid.Row="4"
|
||||
Grid.Column="0"
|
||||
VerticalAlignment="Center">
|
||||
IK Datenannahmestelle
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="txt_ikdatenannahmestelle"
|
||||
Grid.Row="4"
|
||||
Grid.Column="1"
|
||||
Foreground="{Binding Path=IKDatenannahmestelle, Converter={StaticResource Validation2BrushConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=IKDatenannahmestelle, UpdateSourceTrigger=PropertyChanged}"
|
||||
ToolTip="{Binding Path=IKDatenannahmestelle, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
ToolTipService.ShowOnDisabled="True" />
|
||||
<Label
|
||||
Grid.Row="5"
|
||||
Grid.Column="0"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip="Bezeichnung Datenannahmestelle"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
Bez. Datenannahmeste...
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="txt_bezdatenannahmestelle"
|
||||
Grid.Row="5"
|
||||
Grid.Column="1"
|
||||
Foreground="{Binding Path=BezDatenannahmestelle, Converter={StaticResource Validation2BrushConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationBezDatenannahmestelle}}"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=BezDatenannahmestelle, UpdateSourceTrigger=PropertyChanged}"
|
||||
ToolTip="{Binding Path=BezDatenannahmestelle, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationBezDatenannahmestelle}}"
|
||||
ToolTipService.ShowOnDisabled="True"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}" />
|
||||
<!--<Label
|
||||
Grid.Row="6"
|
||||
Grid.Row="2"
|
||||
Grid.Column="0"
|
||||
VerticalAlignment="Center"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
Echtverfahren
|
||||
Ausblenden
|
||||
</Label>
|
||||
<CheckBox
|
||||
Grid.Row="6"
|
||||
Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
IsChecked="{Binding Echtverfahren}"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}" />-->
|
||||
IsChecked="{Binding GkvAusblenden, UpdateSourceTrigger=PropertyChanged}"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}" />
|
||||
|
||||
<Label
|
||||
x:Name="label_verfahrensstufe"
|
||||
Grid.Row="7"
|
||||
Grid.Row="3"
|
||||
Grid.Column="0"
|
||||
VerticalAlignment="Center"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
@@ -702,10 +673,18 @@
|
||||
</Label>
|
||||
<StackPanel
|
||||
x:Name="radiobuttons_verfahrensstufe"
|
||||
Grid.Row="7"
|
||||
Grid.Row="3"
|
||||
Grid.RowSpan="3"
|
||||
Grid.Column="1"
|
||||
Orientation="Horizontal"
|
||||
Margin="0,4,0,0"
|
||||
Orientation="Vertical"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
<StackPanel.Resources>
|
||||
<Style TargetType="RadioButton">
|
||||
<Setter Property="Padding" Value="2" />
|
||||
<Setter Property="Margin" Value="2" />
|
||||
</Style>
|
||||
</StackPanel.Resources>
|
||||
<RadioButton
|
||||
x:Name="rb_test"
|
||||
GroupName="a"
|
||||
@@ -725,18 +704,106 @@
|
||||
Echt
|
||||
</RadioButton>
|
||||
</StackPanel>
|
||||
|
||||
<Label
|
||||
Grid.Row="8"
|
||||
Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
Grid.Column="3"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip="Bezeichnung Datenannahmestelle"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
Ausblenden
|
||||
Datenannahmestelle
|
||||
</Label>
|
||||
<CheckBox
|
||||
Grid.Row="8"
|
||||
Grid.Column="1"
|
||||
IsChecked="{Binding GkvAusblenden, UpdateSourceTrigger=PropertyChanged}"
|
||||
<TextBox
|
||||
x:Name="txt_bezdatenannahmestelle"
|
||||
Grid.Row="0"
|
||||
Grid.Column="4"
|
||||
Foreground="{Binding Path=BezDatenannahmestelle, Converter={StaticResource Validation2BrushConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationBezDatenannahmestelle}}"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=BezDatenannahmestelle, UpdateSourceTrigger=PropertyChanged}"
|
||||
ToolTip="{Binding Path=BezDatenannahmestelle, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationBezDatenannahmestelle}}"
|
||||
ToolTipService.ShowOnDisabled="True"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Grid.Column="3"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip="Hausanschrift der Datenannahmestelle"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
Hausanschrift
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="txt_hausanschrift"
|
||||
Grid.Row="1"
|
||||
Grid.Column="4"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=HausanschriftDatenannahmestelle, Converter={StaticResource AddressToStringConverter}, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="2"
|
||||
Grid.Column="3"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip="Postfachanschrift der Datenannahmestelle"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
Postfachanschrift
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="txt_postfachanschrift"
|
||||
Grid.Row="2"
|
||||
Grid.Column="4"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=PostfachanschriftDatenannahmestelle, Converter={StaticResource AddressToStringConverter}, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="3"
|
||||
Grid.Column="3"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip="Großkundenanschrift der Datenannahmestelle"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}">
|
||||
Großkundenanschrift
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="txt_großkundenanschrift"
|
||||
Grid.Row="3"
|
||||
Grid.Column="4"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=GroßkundenanschriftDatenannahmestelle, Converter={StaticResource AddressToStringConverter}, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
|
||||
Visibility="{Binding Converter={StaticResource UserPermission2VisibleConverter}, ConverterParameter={x:Static core:SettingsKeys.AllowGkvAbrechnung}}" />
|
||||
|
||||
<Label
|
||||
Grid.Row="4"
|
||||
Grid.Column="3"
|
||||
VerticalAlignment="Center">
|
||||
IK Datenannahmestelle
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="txt_ikdatenannahmestelle"
|
||||
Grid.Row="4"
|
||||
Grid.Column="4"
|
||||
Foreground="{Binding Path=IKDatenannahmestelle, Converter={StaticResource Validation2BrushConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=IKDatenannahmestelle, UpdateSourceTrigger=PropertyChanged}"
|
||||
ToolTip="{Binding Path=IKDatenannahmestelle, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
ToolTipService.ShowOnDisabled="True" />
|
||||
<Label
|
||||
Grid.Row="5"
|
||||
Grid.Column="3"
|
||||
VerticalAlignment="Center">
|
||||
IK Kostenträger
|
||||
</Label>
|
||||
<TextBox
|
||||
x:Name="txt_ikkostentrager"
|
||||
Grid.Row="5"
|
||||
Grid.Column="4"
|
||||
Foreground="{Binding Path=IKKostentrager, Converter={StaticResource Validation2BrushConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
IsEnabled="False"
|
||||
Text="{Binding Path=IKKostentrager, UpdateSourceTrigger=PropertyChanged}"
|
||||
ToolTip="{Binding Path=IKKostentrager, Converter={StaticResource Validation2TooltipConverter}, ConverterParameter={x:Static shared:ValidationType.OrganisationIKNumber}}"
|
||||
ToolTipService.ShowOnDisabled="True" />
|
||||
|
||||
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
<GroupBox
|
||||
|
||||
@@ -63,11 +63,12 @@ namespace BeWo.View.Detail
|
||||
tabitem_documents.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
txt_bezdatenannahmestelle.IsEnabled = true;
|
||||
txt_ikdatenannahmestelle.IsEnabled = true;
|
||||
txt_ikkostentrager.IsEnabled = true;
|
||||
#endif
|
||||
if (BeWoApp.IsInDeveloperMode)
|
||||
{
|
||||
txt_bezdatenannahmestelle.IsEnabled = true;
|
||||
txt_ikdatenannahmestelle.IsEnabled = true;
|
||||
txt_ikkostentrager.IsEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public event EventHandler<EventArgs<OrganisationVM>> OrganisationSavedOrUpdated;
|
||||
@@ -360,9 +361,7 @@ namespace BeWo.View.Detail
|
||||
return;
|
||||
}
|
||||
|
||||
ViewModel.BezDatenannahmestelle = response.BezDatenannahmestelle;
|
||||
ViewModel.IKKostentrager = response.IKKostentrager;
|
||||
ViewModel.IKDatenannahmestelle = response.IKDatenannahmestelle;
|
||||
ViewModel.UpdateByGetIKResponse(response);
|
||||
|
||||
CommandManager.InvalidateRequerySuggested();
|
||||
}
|
||||
|
||||
@@ -255,18 +255,18 @@ namespace BeWo.View.Detail.Report
|
||||
|
||||
private void InitFilterCombos()
|
||||
{
|
||||
var filterList = new List<QBFilterItem>();
|
||||
var filterList = new List<QbFilterItem>();
|
||||
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.CustomerView_View) || BeWoApp.LoggedOnUser.HasRight(UserRightType.ViewAll))
|
||||
{
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.AlleKlienten));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.AlleKlienten));
|
||||
}
|
||||
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.Customer_ViewMyTeams) || BeWoApp.LoggedOnUser.HasRight(UserRightType.ViewAll))
|
||||
{
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.NurKlientenMeinesTeams));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.NurKlientenMeinesTeams));
|
||||
}
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.MeineKlienten));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.MeineKlienten));
|
||||
//filterList.Add(new QBFilterItem(QBFilterEnum.KlientenAuswahl));
|
||||
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.TeamView_ViewMyTeams) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.TeamView_ViewAll))
|
||||
@@ -274,7 +274,7 @@ namespace BeWo.View.Detail.Report
|
||||
//Wenn man das Recht hat nur das eigene Team zu sehen aber nicht alle, muss man zumindest auch noch das Recht haben die Klienten des eigenen Teams zu sehen
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.Customer_ViewMyTeams) || BeWoApp.LoggedOnUser.HasRight(UserRightType.ViewAll))
|
||||
{
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.TeamAuswahl));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.TeamAuswahl));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -283,7 +283,7 @@ namespace BeWo.View.Detail.Report
|
||||
//Wenn man das Recht hat alle Team zu sehen muss man auch das Recht haben alle Klienten zu sehen.
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.CustomerView_View) || BeWoApp.LoggedOnUser.HasRight(UserRightType.ViewAll))
|
||||
{
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.TeamAuswahl));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.TeamAuswahl));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -317,7 +317,7 @@ namespace BeWo.View.Detail.Report
|
||||
popupedit_customer.Visibility = Visibility.Collapsed;
|
||||
popupedit_team.Visibility = Visibility.Collapsed;
|
||||
|
||||
QBFilterItem filterItem = FilterComboBox.SelectedItem as QBFilterItem;
|
||||
QbFilterItem filterItem = FilterComboBox.SelectedItem as QbFilterItem;
|
||||
|
||||
if (filterItem != null)
|
||||
{
|
||||
@@ -339,7 +339,7 @@ namespace BeWo.View.Detail.Report
|
||||
{
|
||||
DateTime start = new DateTime((int)combobox_year.SelectedItem, combobox_month.SelectedIndex + 1, combobox_Startday.SelectedIndex + 1);
|
||||
DateTime ende = new DateTime((int)combobox_year.SelectedItem, combobox_month.SelectedIndex + 1, combobox_Endday.SelectedIndex + 1);
|
||||
QBFilterEnum e = (FilterComboBox.SelectedItem as QBFilterItem).FilterEnum;
|
||||
QBFilterEnum e = (FilterComboBox.SelectedItem as QbFilterItem).FilterEnum;
|
||||
long? customerOid = null;
|
||||
long? teamOid = null;
|
||||
long? orgaOid = null;
|
||||
@@ -400,16 +400,16 @@ namespace BeWo.View.Detail.Report
|
||||
long? orgaOid = 0;
|
||||
|
||||
|
||||
QBFilterItem filterItem = null;
|
||||
QbFilterItem filterItem = null;
|
||||
|
||||
if (FilterComboBox.SelectedItem != null)
|
||||
{
|
||||
filterItem = FilterComboBox.SelectedItem as QBFilterItem;
|
||||
filterItem = FilterComboBox.SelectedItem as QbFilterItem;
|
||||
}
|
||||
|
||||
if (filterItem == null)
|
||||
{
|
||||
filterItem = new QBFilterItem(QBFilterEnum.AlleKlienten);
|
||||
filterItem = new QbFilterItem(QBFilterEnum.AlleKlienten);
|
||||
}
|
||||
|
||||
if (filterItem.FilterEnum != QBFilterEnum.KlientenAuswahl)
|
||||
@@ -680,15 +680,15 @@ namespace BeWo.View.Detail.Report
|
||||
long? empOid = 0;
|
||||
long? orgaOid = 0;
|
||||
|
||||
QBFilterItem filterItem = null;
|
||||
QbFilterItem filterItem = null;
|
||||
|
||||
if (FilterComboBox.SelectedItem != null)
|
||||
{
|
||||
filterItem = FilterComboBox.SelectedItem as QBFilterItem;
|
||||
filterItem = FilterComboBox.SelectedItem as QbFilterItem;
|
||||
}
|
||||
if (filterItem == null)
|
||||
{
|
||||
filterItem = new QBFilterItem(QBFilterEnum.AlleKlienten);
|
||||
filterItem = new QbFilterItem(QBFilterEnum.AlleKlienten);
|
||||
}
|
||||
if (filterItem.FilterEnum != QBFilterEnum.KlientenAuswahl)
|
||||
{
|
||||
@@ -766,7 +766,7 @@ namespace BeWo.View.Detail.Report
|
||||
else if(source.Equals("System.Windows.Controls.Button: 2"))
|
||||
{
|
||||
var qvm = datagrid_quittierungsbelege_status.GetCurrentValue<QuittierungsbelegsstatusVM>();
|
||||
QBFilterItem filterItem = new QBFilterItem(QBFilterEnum.KlientenAuswahl);
|
||||
QbFilterItem filterItem = new QbFilterItem(QBFilterEnum.KlientenAuswahl);
|
||||
var customerOid = qvm.Customer.CustomerOid;
|
||||
var teamOid = 0;
|
||||
var orgaOid = 0;
|
||||
@@ -1207,37 +1207,6 @@ namespace BeWo.View.Detail.Report
|
||||
|
||||
}
|
||||
|
||||
public class QBFilterItem
|
||||
{
|
||||
public QBFilterItem(QBFilterEnum e)
|
||||
{
|
||||
FilterEnum = e;
|
||||
}
|
||||
|
||||
public QBFilterEnum FilterEnum { get; set; }
|
||||
|
||||
public String Name
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (FilterEnum)
|
||||
{
|
||||
case QBFilterEnum.AlleKlienten:
|
||||
return Translator.Translate("Für alle Klienten");
|
||||
case QBFilterEnum.NurKlientenMeinesTeams:
|
||||
return Translator.Translate("Für Klienten meiner Teams");
|
||||
case QBFilterEnum.MeineKlienten:
|
||||
return Translator.Translate("Für meine Klienten");
|
||||
case QBFilterEnum.KlientenAuswahl:
|
||||
return Translator.Translate("Klient/in auswählen");
|
||||
case QBFilterEnum.TeamAuswahl:
|
||||
return Translator.Translate("Team auswählen");
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class QBSortOrderItem
|
||||
{
|
||||
|
||||
@@ -211,26 +211,26 @@ namespace BeWo.View.Detail.Report
|
||||
|
||||
private void InitFilterCombos()
|
||||
{
|
||||
var filterList = new List<QBFilterItem>();
|
||||
var filterList = new List<QbFilterItem>();
|
||||
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.CustomerView_View) || BeWoApp.LoggedOnUser.HasRight(UserRightType.ViewAll))
|
||||
{
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.AlleKlienten));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.AlleKlienten));
|
||||
}
|
||||
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.Customer_ViewMyTeams) || BeWoApp.LoggedOnUser.HasRight(UserRightType.ViewAll))
|
||||
{
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.NurKlientenMeinesTeams));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.NurKlientenMeinesTeams));
|
||||
}
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.MeineKlienten));
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.KlientenAuswahl));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.MeineKlienten));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.KlientenAuswahl));
|
||||
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.TeamView_ViewMyTeams) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.TeamView_ViewAll))
|
||||
{
|
||||
//Wenn man das Recht hat nur das eigene Team zu sehen aber nicht alle, muss man zumindest auch noch das Recht haben die Klienten des eigenen Teams zu sehen
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.Customer_ViewMyTeams) || BeWoApp.LoggedOnUser.HasRight(UserRightType.ViewAll))
|
||||
{
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.TeamAuswahl));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.TeamAuswahl));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -239,7 +239,7 @@ namespace BeWo.View.Detail.Report
|
||||
//Wenn man das Recht hat alle Teams zu sehen, muss man auch das Recht haben alle Klienten zu sehen.
|
||||
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.CustomerView_View) || BeWoApp.LoggedOnUser.HasRight(UserRightType.ViewAll))
|
||||
{
|
||||
filterList.Add(new QBFilterItem(QBFilterEnum.TeamAuswahl));
|
||||
filterList.Add(new QbFilterItem(QBFilterEnum.TeamAuswahl));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -273,7 +273,7 @@ namespace BeWo.View.Detail.Report
|
||||
popupedit_customer.Visibility = Visibility.Collapsed;
|
||||
popupedit_team.Visibility = Visibility.Collapsed;
|
||||
|
||||
QBFilterItem filterItem = FilterComboBox.SelectedItem as QBFilterItem;
|
||||
QbFilterItem filterItem = FilterComboBox.SelectedItem as QbFilterItem;
|
||||
|
||||
if (filterItem != null)
|
||||
{
|
||||
@@ -304,16 +304,16 @@ namespace BeWo.View.Detail.Report
|
||||
long? orgaOid = 0;
|
||||
|
||||
|
||||
QBFilterItem filterItem = null;
|
||||
QbFilterItem filterItem = null;
|
||||
|
||||
if (FilterComboBox.SelectedItem != null)
|
||||
{
|
||||
filterItem = FilterComboBox.SelectedItem as QBFilterItem;
|
||||
filterItem = FilterComboBox.SelectedItem as QbFilterItem;
|
||||
}
|
||||
|
||||
if (filterItem == null)
|
||||
{
|
||||
filterItem = new QBFilterItem(QBFilterEnum.AlleKlienten);
|
||||
filterItem = new QbFilterItem(QBFilterEnum.AlleKlienten);
|
||||
}
|
||||
|
||||
if (filterItem.FilterEnum != QBFilterEnum.KlientenAuswahl)
|
||||
|
||||
@@ -1392,7 +1392,7 @@
|
||||
Margin="3,0,3,3"
|
||||
AllowNullInput="False"
|
||||
EditValue="{Binding Path=PrototypeVM.Duration, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
Increment="5"
|
||||
Increment="1"
|
||||
IsFloatValue="False"
|
||||
Mask="########0"
|
||||
MaskUseAsDisplayFormat="True"
|
||||
@@ -1509,7 +1509,7 @@
|
||||
Margin="3,0,3,3"
|
||||
AllowNullInput="False"
|
||||
EditValue="{Binding Path=PrototypeVM.Duration, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
Increment="5"
|
||||
Increment="1"
|
||||
IsFloatValue="False"
|
||||
Mask="########0"
|
||||
MaskUseAsDisplayFormat="True"
|
||||
|
||||
@@ -57,7 +57,8 @@ using BeWo.View.Windows;
|
||||
|
||||
namespace BeWo.View.Detail.Zeiterfassung
|
||||
{
|
||||
public partial class ServiceRecordView2
|
||||
#pragma warning disable CS0618
|
||||
public partial class ServiceRecordView2
|
||||
{
|
||||
public static Visibility InsertedOnAndByVisibility
|
||||
{
|
||||
@@ -5134,33 +5135,34 @@ namespace BeWo.View.Detail.Zeiterfassung
|
||||
}
|
||||
}
|
||||
|
||||
//public class RowBackgroundHelper
|
||||
//{
|
||||
// public static Brush GetBackground(DependencyObject obj)
|
||||
// {
|
||||
// return (Brush)obj.GetValue(BackgroundProperty);
|
||||
// }
|
||||
// public static void SetBackground(DependencyObject obj, Brush value)
|
||||
// {
|
||||
// obj.SetValue(BackgroundProperty, value);
|
||||
// }
|
||||
// public static readonly DependencyProperty BackgroundProperty =
|
||||
// DependencyProperty.RegisterAttached("Background", typeof(Brush), typeof(RowBackgroundHelper), null);
|
||||
//public class RowBackgroundHelper
|
||||
//{
|
||||
// public static Brush GetBackground(DependencyObject obj)
|
||||
// {
|
||||
// return (Brush)obj.GetValue(BackgroundProperty);
|
||||
// }
|
||||
// public static void SetBackground(DependencyObject obj, Brush value)
|
||||
// {
|
||||
// obj.SetValue(BackgroundProperty, value);
|
||||
// }
|
||||
// public static readonly DependencyProperty BackgroundProperty =
|
||||
// DependencyProperty.RegisterAttached("Background", typeof(Brush), typeof(RowBackgroundHelper), null);
|
||||
|
||||
|
||||
|
||||
// public static bool GetIsEnabled(DependencyObject obj)
|
||||
// {
|
||||
// return (bool)obj.GetValue(IsEnabledProperty);
|
||||
// }
|
||||
// public static bool GetIsEnabled(DependencyObject obj)
|
||||
// {
|
||||
// return (bool)obj.GetValue(IsEnabledProperty);
|
||||
// }
|
||||
|
||||
// public static void SetIsEnabled(DependencyObject obj, bool value)
|
||||
// {
|
||||
// obj.SetValue(IsEnabledProperty, value);
|
||||
// }
|
||||
// public static void SetIsEnabled(DependencyObject obj, bool value)
|
||||
// {
|
||||
// obj.SetValue(IsEnabledProperty, value);
|
||||
// }
|
||||
|
||||
// public static readonly DependencyProperty IsEnabledProperty =
|
||||
// DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(RowBackgroundHelper), new PropertyMetadata(false));
|
||||
// public static readonly DependencyProperty IsEnabledProperty =
|
||||
// DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(RowBackgroundHelper), new PropertyMetadata(false));
|
||||
|
||||
//}
|
||||
//}
|
||||
#pragma warning restore CS0618
|
||||
}
|
||||
@@ -15,6 +15,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace BeWo.View.Document
|
||||
{
|
||||
@@ -30,10 +31,8 @@ namespace BeWo.View.Document
|
||||
{
|
||||
var view = new SingleTemplateSelectionView();
|
||||
|
||||
var customerFolderList = VMFactory.CreateFolderList(objectTid, objectOid);
|
||||
|
||||
var templateFolderList = VMFactory.CreateFolderList(TableID.Vorlagentabelle, tabelle.VorlagentabelleOid.Value);
|
||||
view.InitView(tabelle, alleVorlagen, templateFolderList, customerFolderList, true, false);
|
||||
view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, "");
|
||||
var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Vorlage auswählen"), view, 500, 500);
|
||||
|
||||
view.ButtonCancelClicked += () => beWoWindow.Close();
|
||||
@@ -47,32 +46,66 @@ namespace BeWo.View.Document
|
||||
beWoWindow.ShowDialog();
|
||||
}
|
||||
}
|
||||
|
||||
public static BeWoFolderDC OpenAndSelectBeWoFolderSelectionDialog(TableID objectTid, long objectOid, String fileName)
|
||||
{
|
||||
BeWoFolderDC selectedFolder = null;
|
||||
|
||||
var view = new SingleTemplateSelectionView();
|
||||
|
||||
var customerFolderList = VMFactory.CreateFolderList(objectTid, objectOid);
|
||||
|
||||
//var alleVorlagenTabellen = ServiceFacade.DoOperationsServiceSync(s => s.GetVorlagentabelleDCs());
|
||||
//var tabelle = alleVorlagenTabellen.FirstOrDefault(v => v.VorlagentabelleObjectTid.HasValue && v.VorlagentabelleObjectTid.Value == (int)objectTid);
|
||||
//if (tabelle != null)
|
||||
//{
|
||||
view.InitView(null, null, null, customerFolderList, false, true, fileName);
|
||||
var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Ordner auswählen"), view, 500, 500);
|
||||
|
||||
view.ButtonCancelClicked += () => beWoWindow.Close();
|
||||
view.ButtonCreateForSelectionClicked += () =>
|
||||
{
|
||||
|
||||
selectedFolder = view.SelectedFolder;
|
||||
beWoWindow.Close();
|
||||
|
||||
|
||||
};
|
||||
|
||||
beWoWindow.ShowDialog();
|
||||
//}
|
||||
return selectedFolder;
|
||||
|
||||
}
|
||||
|
||||
public static void CreateTemplateTreeViewItems(TreeListControl treeControl, IList<VorlagentabelleDC> vorlagentabellen, List<BeWoFolderDC> allFolder, bool expandItems)
|
||||
{
|
||||
treeControl.BeginDataUpdate();
|
||||
|
||||
foreach (var table in vorlagentabellen)
|
||||
if (vorlagentabellen != null)
|
||||
{
|
||||
TreeListNode node = new TreeListNode();
|
||||
DocumentTreeItemDC dc = new DocumentTreeItemDC()
|
||||
foreach (var table in vorlagentabellen)
|
||||
{
|
||||
DocTreeItemOid = table.VorlagentabelleOid,
|
||||
ParentOid = null,
|
||||
Name = table.Tabellenname,
|
||||
Table = BS.Shared.TableID.Vorlagentabelle,
|
||||
ObjectOid = table.VorlagentabelleOid,
|
||||
Node = node,
|
||||
BeWoFolderDC = new BeWoFolderDC { Name = "RootFolder", SubFolders = new List<BeWoFolderDC>() }
|
||||
};
|
||||
DocumentTreeItemVM vm = new DocumentTreeItemVM(dc);
|
||||
node.Content = vm;
|
||||
treeControl.View.Nodes.Add(node);
|
||||
node.IsExpandButtonVisible = DefaultBoolean.True;
|
||||
node.IsExpanded = expandItems;
|
||||
node.Image = LoadImage(table.ImageName);
|
||||
TreeListNode node = new TreeListNode();
|
||||
DocumentTreeItemDC dc = new DocumentTreeItemDC()
|
||||
{
|
||||
DocTreeItemOid = table.VorlagentabelleOid,
|
||||
ParentOid = null,
|
||||
Name = table.Tabellenname,
|
||||
Table = BS.Shared.TableID.Vorlagentabelle,
|
||||
ObjectOid = table.VorlagentabelleOid,
|
||||
Node = node,
|
||||
BeWoFolderDC = new BeWoFolderDC { Name = "RootFolder", SubFolders = new List<BeWoFolderDC>() }
|
||||
};
|
||||
DocumentTreeItemVM vm = new DocumentTreeItemVM(dc);
|
||||
node.Content = vm;
|
||||
treeControl.View.Nodes.Add(node);
|
||||
node.IsExpandButtonVisible = DefaultBoolean.True;
|
||||
node.IsExpanded = expandItems;
|
||||
node.Image = LoadImage(table.ImageName);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (allFolder != null && allFolder.Count > 0)
|
||||
{
|
||||
AddFolderToTreeView(treeControl, allFolder, expandItems);
|
||||
@@ -140,38 +173,81 @@ namespace BeWo.View.Document
|
||||
{
|
||||
treeControl.BeginDataUpdate();
|
||||
|
||||
|
||||
foreach (var node in treeControl.View.Nodes)
|
||||
if (treeControl.View.Nodes.Count > 0) // Wenn Nodes vorhanden sind (Vorlagen Ordner) hänge die Folder an die Vorlagen Objekte
|
||||
{
|
||||
AddFolderToNode(node, folders, expandItems);
|
||||
foreach (var node in treeControl.View.Nodes)
|
||||
{
|
||||
AddFolderToNode(treeControl, node, folders, expandItems);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AddFolderToNode(treeControl, null, folders, expandItems);
|
||||
//foreach (var folder in folders)
|
||||
//{
|
||||
|
||||
// DocumentTreeItemDC dc = new DocumentTreeItemDC()
|
||||
// {
|
||||
// DocTreeItemOid = folder.BeWoFolderOid,
|
||||
// Name = folder.Name,
|
||||
// FilesInFolder = new List<FileAttachmentDC>(),
|
||||
// BeWoFolderDC = folder
|
||||
// };
|
||||
// DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(dc);
|
||||
// var newFolderNode = new TreeListNode()
|
||||
// {
|
||||
// Content = folder_vm,
|
||||
// IsExpandButtonVisible = folder.SubFolders != null && folder.SubFolders.Count > 0 ? DefaultBoolean.True : DefaultBoolean.False,
|
||||
// IsExpanded = expandItems,
|
||||
// Tag = false,
|
||||
// Image = LoadFolderImage()
|
||||
// };
|
||||
// dc.Node = newFolderNode;
|
||||
|
||||
// AddFolderToNode(newFolderNode, folder.SubFolders, expandItems);
|
||||
// //}
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (folder.ObjectOid.HasValue && folder.ObjectOid == parentVm.DocTreeItemOid)
|
||||
// {
|
||||
// AddFolderToNode(parentNode, folder.SubFolders, expandItems);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
treeControl.EndDataUpdate();
|
||||
}
|
||||
|
||||
private static void AddFolderToNode(TreeListNode parentNode, List<BeWoFolderDC> folders, bool expandItems)
|
||||
private static void AddFolderToNode(TreeListControl treeControl, TreeListNode parentNode, List<BeWoFolderDC> folders, bool expandItems)
|
||||
{
|
||||
if (parentNode != null && folders != null)
|
||||
if (folders != null)
|
||||
{
|
||||
var parentVm = parentNode.Content as DocumentTreeItemVM;
|
||||
DocumentTreeItemVM parentVm = null;
|
||||
|
||||
if (parentNode != null)
|
||||
{
|
||||
parentVm = parentNode.Content as DocumentTreeItemVM;
|
||||
}
|
||||
|
||||
|
||||
foreach (var folder in folders)
|
||||
{
|
||||
|
||||
if (folder.BeWoFolderOid.HasValue)
|
||||
if (folder.BeWoFolderOid.HasValue || (folder.Name == "Alle Ordner" && folder.ObjectTid != TableID.Vorlagentabelle))// && folder.ObjectTid !=
|
||||
{
|
||||
//if (parentVm != null && parentVm.DocTreeItemOid == folder.ObjectOid)
|
||||
//{
|
||||
DocumentTreeItemDC dc = new DocumentTreeItemDC()
|
||||
{
|
||||
DocTreeItemOid = folder.BeWoFolderOid,
|
||||
ParentOid = parentVm.DocTreeItemOid,
|
||||
ParentOid = parentVm?.DocTreeItemOid,
|
||||
Name = folder.Name,
|
||||
FilesInFolder = new List<FileAttachmentDC>(),
|
||||
BeWoFolderDC = folder,
|
||||
Table = parentVm.DataContract.Table,
|
||||
ObjectOid = parentVm.DataContract.ObjectOid
|
||||
Table = parentVm != null ? parentVm.DataContract.Table : folder.ObjectTid,
|
||||
ObjectOid = parentVm?.DataContract.ObjectOid
|
||||
};
|
||||
if (folder.Files.Count != 0)
|
||||
{
|
||||
@@ -190,16 +266,22 @@ namespace BeWo.View.Document
|
||||
Image = LoadFolderImage()
|
||||
};
|
||||
dc.Node = newFolderNode;
|
||||
parentNode.Nodes.Add(newFolderNode);
|
||||
|
||||
AddFolderToNode(newFolderNode, folder.SubFolders, expandItems);
|
||||
if (parentNode != null)
|
||||
{
|
||||
parentNode.Nodes.Add(newFolderNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
treeControl.View.Nodes.Add(newFolderNode);
|
||||
}
|
||||
AddFolderToNode(treeControl, newFolderNode, folder.SubFolders, expandItems);
|
||||
//}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (folder.ObjectOid.HasValue && folder.ObjectOid == parentVm.DocTreeItemOid)
|
||||
if (folder.ObjectOid.HasValue && parentVm != null && folder.ObjectOid == parentVm.DocTreeItemOid)
|
||||
{
|
||||
AddFolderToNode(parentNode, folder.SubFolders, expandItems);
|
||||
AddFolderToNode(treeControl, parentNode, folder.SubFolders, expandItems);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -266,17 +348,128 @@ namespace BeWo.View.Document
|
||||
|
||||
}
|
||||
|
||||
|
||||
//public static DokumentvorlageVM EditTemplate(VorlagentabelleDC vt, DokumentvorlageVM vm)
|
||||
//{
|
||||
|
||||
// var control = new VorlageEditView();
|
||||
|
||||
// control.InitView(vt, vm);
|
||||
// var beWoWindow = new BeWoWindow
|
||||
// {
|
||||
// rootGroupBox = { Header = "Vorlage bearbeiten" },
|
||||
// Height = this.Height,
|
||||
// Width = 1200,
|
||||
// MinWidth = 550,
|
||||
// WindowStartupLocation = WindowStartupLocation.CenterOwner,
|
||||
// GroupBoxContent = control,
|
||||
// Owner = BeWoApp.CurrentBeWo.MainWindow
|
||||
// };
|
||||
// bool saved = false;
|
||||
|
||||
// control.ButtonSavedClicked += () =>
|
||||
// {
|
||||
// saved = true;
|
||||
// if (control.ViewModel.IsNew || control.ViewModel.IsDirty)
|
||||
// {
|
||||
// var dc = SaveInDatabase(control.ViewModel);
|
||||
// vm.DataContract = dc;
|
||||
|
||||
// RefreshSelectedList();
|
||||
// }
|
||||
|
||||
// beWoWindow.Close();
|
||||
// };
|
||||
|
||||
// control.ButtonCancelClicked += () =>
|
||||
// {
|
||||
// beWoWindow.Close();
|
||||
// };
|
||||
|
||||
// beWoWindow.ShowDialog();
|
||||
|
||||
// if (!saved)
|
||||
// {
|
||||
// return null;
|
||||
// }
|
||||
// return control.ViewModel;
|
||||
//}
|
||||
|
||||
|
||||
private static void PrintTemplate(DokumentvorlageDC vorlage, TableID objectTid, long objectOid)
|
||||
{
|
||||
|
||||
string url = GenerateURL(vorlage.DokumentvorlageOid.Value, objectTid, new List<long> { objectOid });
|
||||
|
||||
BeWoUtils.NavigateToReportUri(url, vorlage.Name);
|
||||
ServiceFacade.DoOperationsServiceAsync(s => s.CreateRtfDocumentFromTemplate(vorlage.DokumentvorlageOid.Value, objectTid, new List<long> { objectOid }),
|
||||
rtf =>
|
||||
BeWoApp.CurrentBeWo.Dispatcher.BeginInvoke(
|
||||
DispatcherPriority.Normal,
|
||||
(Action)delegate
|
||||
{
|
||||
var control = new RtfEditView();
|
||||
control.InitView(rtf);
|
||||
|
||||
var window = BeWoWindowBuilder.GetBeWoWindow(vorlage.Name, control, Math.Min(BeWoApp.MainControl.ActualHeight, 1000), Math.Min(BeWoApp.MainControl.ActualWidth, 1600));
|
||||
|
||||
control.ButtonSavedClicked += () =>
|
||||
{
|
||||
var selectedFolder = OpenAndSelectBeWoFolderSelectionDialog(objectTid, objectOid, vorlage.Name);
|
||||
if (selectedFolder != null)
|
||||
{
|
||||
var newRtfText = control.RtfText;
|
||||
var filename = selectedFolder.Name;
|
||||
window.Close();
|
||||
|
||||
SaveRtfInBeWoFolder(selectedFolder, newRtfText, filename, objectTid, objectOid);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
control.ButtonCancelClicked += () =>
|
||||
{
|
||||
window.Close();
|
||||
};
|
||||
|
||||
window.ShowDialog();
|
||||
}));
|
||||
|
||||
//var rtf = ServiceFacade.DoOperationsServiceSync(s => s.CreateRtfDocumentFromTemplate(vorlage.DokumentvorlageOid.Value, objectTid, new List<long> { objectOid }));
|
||||
|
||||
|
||||
//string url = GenerateURL(vorlage.DokumentvorlageOid.Value, objectTid, new List<long> { objectOid });
|
||||
|
||||
//BeWoUtils.NavigateToReportUri(url, vorlage.Name);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private static void SaveRtfInBeWoFolder(BeWoFolderDC selectedFolder, string rtfText, string filename, TableID objectTid, long objectOid)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
var ms = new System.IO.MemoryStream(Encoding.Default.GetBytes(rtfText));
|
||||
var upload = new ProgressStream(ms);
|
||||
|
||||
var lUlPackage = new UploadPackage(selectedFolder.BeWoFolderOid, 0, String.Format("{0}.{1}", filename, "rtf"), "", objectOid, (int)objectTid, upload);
|
||||
|
||||
ServiceFacade.DoStreamingServiceAsync(
|
||||
s => s.UploadDocument(lUlPackage),
|
||||
r =>
|
||||
{
|
||||
upload.Dispose();
|
||||
ms.Dispose();
|
||||
},
|
||||
() =>
|
||||
{
|
||||
upload.Dispose();
|
||||
ms.Dispose();
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static string GenerateURL(long vorlage, TableID objectTid, List<long> objectOids)
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:controls="clr-namespace:BeWo.View.Controls"
|
||||
xmlns:doc="clr-namespace:BeWo.View.Document"
|
||||
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
|
||||
xmlns:dxa="http://schemas.devexpress.com/winfx/2008/xaml/accordion"
|
||||
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
|
||||
@@ -12,7 +13,6 @@
|
||||
xmlns:localView="clr-namespace:BeWo.View"
|
||||
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
|
||||
xmlns:master="clr-namespace:BeWo.View.Master"
|
||||
xmlns:doc="clr-namespace:BeWo.View.Document"
|
||||
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls"
|
||||
Width="Auto"
|
||||
Height="Auto"
|
||||
@@ -516,11 +516,22 @@
|
||||
dx:ThemeManager.ThemeName="Office2010Black"
|
||||
DefaultSorting="Name">
|
||||
<dxg:TreeListControl.Columns>
|
||||
<dxg:TreeListColumn AllowSorting="True" FieldName="Name" AllowEditing="False">
|
||||
<dxg:TreeListColumn
|
||||
AllowEditing="False"
|
||||
AllowSorting="True"
|
||||
FieldName="Name">
|
||||
<dxg:TreeListColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<dxe:TextEdit x:Name="PART_Editor" EditMode="InplaceActive" Text="{Binding Path=DataContext.RowData.Row.Name, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}"
|
||||
AcceptsReturn="False" AcceptsTab="False" TextTrimming="WordEllipsis" TextWrapping="NoWrap" SelectAllOnGotFocus="True" SelectAllOnMouseUp="True" />
|
||||
<dxe:TextEdit
|
||||
x:Name="PART_Editor"
|
||||
AcceptsReturn="False"
|
||||
AcceptsTab="False"
|
||||
EditMode="InplaceActive"
|
||||
SelectAllOnGotFocus="True"
|
||||
SelectAllOnMouseUp="True"
|
||||
Text="{Binding Path=DataContext.RowData.Row.Name, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}"
|
||||
TextTrimming="WordEllipsis"
|
||||
TextWrapping="NoWrap" />
|
||||
</DataTemplate>
|
||||
</dxg:TreeListColumn.CellTemplate>
|
||||
</dxg:TreeListColumn>
|
||||
@@ -529,12 +540,14 @@
|
||||
<dxg:TreeListView
|
||||
x:Name="TemplateTreeView"
|
||||
AllowEditing="True"
|
||||
AutoExpandOnDrag="True"
|
||||
AutoWidth="True"
|
||||
ContextMenu="{StaticResource templatecm}"
|
||||
FocusedRowChanged="TemplateTreeView_FocusedRowChanged"
|
||||
HorizontalScrollbarVisibility="Auto"
|
||||
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}"
|
||||
LostFocus="TemplateTreeView_LostFocus"
|
||||
NavigationStyle="Cell"
|
||||
NodeExpanding="templateTreeListView_NodeExpanding"
|
||||
ParentFieldName="Binding DocumentTreeItemVM.ParentOid"
|
||||
PreviewMouseLeftButtonDown="TemplateTreeView_PreviewMouseButtonDown"
|
||||
@@ -545,10 +558,8 @@
|
||||
ShowIndicator="False"
|
||||
ShowNodeImages="True"
|
||||
ShowVerticalLines="False"
|
||||
VerticalScrollbarVisibility="Auto"
|
||||
AutoExpandOnDrag="True"
|
||||
NavigationStyle="Cell"
|
||||
ShownEditor="TemplateTreeView_ShownEditor" />
|
||||
VerticalScrollbarVisibility="Auto"
|
||||
/>
|
||||
</dxg:TreeListControl.View>
|
||||
</dxg:TreeListControl>
|
||||
<!--
|
||||
@@ -619,11 +630,11 @@
|
||||
</dxlc:LayoutGroup>
|
||||
<dxlc:LayoutGroup dxlc:LayoutControl.AllowHorizontalSizing="True">
|
||||
<GroupBox
|
||||
x:Name="GroupBoxTemplateList"
|
||||
Grid.ColumnSpan="2"
|
||||
Padding="5"
|
||||
Header=""
|
||||
Style="{StaticResource ObjectEditGroupBox}">
|
||||
x:Name="GroupBoxTemplateList"
|
||||
Grid.ColumnSpan="2"
|
||||
Padding="5"
|
||||
Header=""
|
||||
Style="{StaticResource ObjectEditGroupBox}">
|
||||
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -634,54 +645,54 @@
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<dxg:GridControl
|
||||
x:Name="datagrid_templates"
|
||||
Grid.Row="0"
|
||||
Grid.Column="1"
|
||||
Margin="2,3,5,5">
|
||||
x:Name="datagrid_templates"
|
||||
Grid.Row="0"
|
||||
Grid.Column="1"
|
||||
Margin="2,3,5,5">
|
||||
<dxg:GridControl.Columns>
|
||||
<dxg:GridColumn
|
||||
Width="24"
|
||||
FieldName="FileName"
|
||||
FixedWidth="True"
|
||||
Header=""
|
||||
ReadOnly="True">
|
||||
Width="24"
|
||||
FieldName="FileName"
|
||||
FixedWidth="True"
|
||||
Header=""
|
||||
ReadOnly="True">
|
||||
<dxg:GridColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Button
|
||||
Width="20"
|
||||
Height="20"
|
||||
Margin="1"
|
||||
VerticalAlignment="Center"
|
||||
Click="TemplateDeleteButton_Click"
|
||||
Content="r"
|
||||
FontFamily="Webdings" />
|
||||
Width="20"
|
||||
Height="20"
|
||||
Margin="1"
|
||||
VerticalAlignment="Center"
|
||||
Click="TemplateDeleteButton_Click"
|
||||
Content="r"
|
||||
FontFamily="Webdings" />
|
||||
</DataTemplate>
|
||||
</dxg:GridColumn.CellTemplate>
|
||||
</dxg:GridColumn>
|
||||
<dxg:GridColumn
|
||||
Width="*"
|
||||
AllowEditing="False"
|
||||
FieldName="Name"
|
||||
Header="Name" />
|
||||
Width="*"
|
||||
AllowEditing="False"
|
||||
FieldName="Name"
|
||||
Header="Name" />
|
||||
<dxg:GridColumn
|
||||
Width="*"
|
||||
AllowEditing="False"
|
||||
FieldName="Beschreibung"
|
||||
Header="Beschreibung" />
|
||||
Width="*"
|
||||
AllowEditing="False"
|
||||
FieldName="Beschreibung"
|
||||
Header="Beschreibung" />
|
||||
<dxg:GridColumn
|
||||
Width="80"
|
||||
FieldName="FileEdit"
|
||||
FixedWidth="True"
|
||||
Header=""
|
||||
ReadOnly="True">
|
||||
Width="80"
|
||||
FieldName="FileEdit"
|
||||
FixedWidth="True"
|
||||
Header=""
|
||||
ReadOnly="True">
|
||||
<dxg:GridColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Button
|
||||
Width="75"
|
||||
Height="23"
|
||||
VerticalAlignment="Center"
|
||||
Click="EditTemplate_Click"
|
||||
Content="Bearbeiten" />
|
||||
Width="75"
|
||||
Height="23"
|
||||
VerticalAlignment="Center"
|
||||
Click="EditTemplate_Click"
|
||||
Content="Bearbeiten" />
|
||||
</DataTemplate>
|
||||
</dxg:GridColumn.CellTemplate>
|
||||
</dxg:GridColumn>
|
||||
@@ -705,13 +716,13 @@
|
||||
</dxg:GridControl.Columns>
|
||||
<dxg:GridControl.View>
|
||||
<dxg:TableView
|
||||
x:Name="TemplateTableView"
|
||||
AutoWidth="false"
|
||||
NavigationStyle="Row"
|
||||
ShowGroupPanel="False"
|
||||
ShowGroupedColumns="false"
|
||||
ShowTotalSummary="False"
|
||||
RowDoubleClick="TemplateTableView_RowDoubleClick"/>
|
||||
x:Name="TemplateTableView"
|
||||
AutoWidth="false"
|
||||
NavigationStyle="Row"
|
||||
RowDoubleClick="TemplateTableView_RowDoubleClick"
|
||||
ShowGroupPanel="False"
|
||||
ShowGroupedColumns="false"
|
||||
ShowTotalSummary="False" />
|
||||
</dxg:GridControl.View>
|
||||
</dxg:GridControl>
|
||||
</Grid>
|
||||
|
||||
@@ -45,7 +45,9 @@ using System.ComponentModel;
|
||||
|
||||
namespace BeWo.View.Document
|
||||
{
|
||||
public partial class DokumenteView
|
||||
|
||||
#pragma warning disable CS0618
|
||||
public partial class DokumenteView
|
||||
{
|
||||
private string _UploadFileName;
|
||||
private string _NormalFileName = null;
|
||||
@@ -1439,6 +1441,8 @@ namespace BeWo.View.Document
|
||||
row.DataContract.Node.Nodes.Add(dc.Node);
|
||||
row.DataContract.Node.IsExpanded = true;
|
||||
row.DataContract.Node.IsExpandButtonVisible = DefaultBoolean.True;
|
||||
|
||||
EditTemplateFolder(node);
|
||||
}
|
||||
else if (twi.Header.Equals("Umbenennen"))
|
||||
{
|
||||
@@ -1464,6 +1468,15 @@ namespace BeWo.View.Document
|
||||
}
|
||||
}
|
||||
|
||||
private void EditTemplateFolder(TreeListNode node)
|
||||
{
|
||||
//var vm = node.Content as DocumentTreeItemVM;
|
||||
//template_treeview_control.SelectItem(node);
|
||||
//var test = template_treeview_control.SelectedItems;
|
||||
template_treeview_control.View.FocusedNode = node;
|
||||
|
||||
EditSelectedTemplateFolder();
|
||||
}
|
||||
|
||||
private DokumentvorlageVM EditTemplate(DokumentvorlageVM vm)
|
||||
{
|
||||
@@ -1535,11 +1548,6 @@ namespace BeWo.View.Document
|
||||
private DokumentvorlageDC SaveInDatabase(DokumentvorlageVM savedTemplate)
|
||||
{
|
||||
var dc = savedTemplate.CommitToDataContract();
|
||||
if (!String.IsNullOrEmpty(dc.RTFText))
|
||||
{
|
||||
var textasbytes = Encoding.ASCII.GetBytes(dc.RTFText);
|
||||
dc.Data = textasbytes;
|
||||
}
|
||||
var updatedDC = ServiceFacade.DoOperationsServiceSync(s => s.InsertTemplate(dc));
|
||||
|
||||
return updatedDC;
|
||||
@@ -1740,7 +1748,7 @@ namespace BeWo.View.Document
|
||||
objectOids.Add((long)p.ObjectOid);
|
||||
}
|
||||
|
||||
string url = GenerateURL((long)templateVM.DataContract.DokumentvorlageOid, objectOids, (long)printSelectionVMs[0].Table);
|
||||
string url = DokumentViewHelper.GenerateURL(templateVM.DataContract.DokumentvorlageOid.Value, (TableID)printSelectionVMs[0].Table.Value, objectOids);
|
||||
|
||||
BeWoUtils.NavigateToReportUri(url, Translator.Translate("Dokument mit ersetzten Platzhaltern"), () => { });
|
||||
|
||||
@@ -1858,28 +1866,6 @@ namespace BeWo.View.Document
|
||||
}
|
||||
}
|
||||
|
||||
public string GenerateURL(long vorlage, List<long> objectOids, long table)
|
||||
{
|
||||
string url = BeWoApp.SiteOfOrigin + "/ReportView.aspx?";
|
||||
|
||||
url += "&vorlage=" + vorlage;
|
||||
|
||||
url += "&obj=";
|
||||
foreach (var oid in objectOids)
|
||||
{
|
||||
if (objectOids.IndexOf(oid) == objectOids.Count - 1)
|
||||
url += oid;
|
||||
else
|
||||
url += oid + ",";
|
||||
}
|
||||
|
||||
url += "&table=" + table;
|
||||
url += "&type=" + Utils.EnumName(ReportTypes.VorlagenReport);
|
||||
url = BeWoWpfUtils.GetHTMLEncodedURL(url);
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
private void TextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
|
||||
{
|
||||
if (e.Key != Key.Enter)
|
||||
@@ -2071,20 +2057,12 @@ namespace BeWo.View.Document
|
||||
popup_UploadFiles.IsOpen = false;
|
||||
}
|
||||
|
||||
private void DocumentsTreeView_ShownEditor(object sender, TreeListEditorEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void TemplateTreeView_ShownEditor(object sender, TreeListEditorEventArgs e)
|
||||
{
|
||||
//e.Editor.SelectAll();
|
||||
}
|
||||
|
||||
private void TemplateTableView_RowDoubleClick(object sender, RowDoubleClickEventArgs e)
|
||||
{
|
||||
EditSelectedTemplate();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
internal class DocumentRootNodeConfig
|
||||
@@ -2132,3 +2110,4 @@ namespace BeWo.View.Document
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore CS0618
|
||||
@@ -19,14 +19,14 @@
|
||||
|
||||
<Grid Margin="0,3,0,0" Background="{StaticResource ObjectEditBackgroundBrush}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" /> <!-- Felder für Vorlagenname und Beschreibung -->
|
||||
<RowDefinition Height="*" />
|
||||
|
||||
<RowDefinition Height="Auto" /> <!-- Speichern und abbrechen -->
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<dxre:RichEditControl x:Name="EditorControl" Grid.Row="0" Grid.Column="0" Language="de-DE" CommandBarStyle="Ribbon" Margin="0,0,0,0" VerticalAlignment="Stretch" Grid.ColumnSpan="2" ShowReviewingPane="False" RtfTextChanged="EditorControl_RtfTextChanged"/>
|
||||
<dxre:RichEditControl x:Name="EditorControl" Grid.Row="0" Grid.Column="0" Language="de-DE" CommandBarStyle="Ribbon" Margin="0,0,0,0" VerticalAlignment="Stretch" Grid.ColumnSpan="2" ShowReviewingPane="False" />
|
||||
|
||||
<StackPanel Grid.ColumnSpan="3" Grid.Row="2" Orientation="Horizontal" VerticalAlignment="Center" Height="Auto" Margin="0,5,0,5" HorizontalAlignment="Right">
|
||||
<StackPanel Grid.ColumnSpan="3" Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Height="Auto" Margin="0,5,0,5" HorizontalAlignment="Right">
|
||||
<Button x:Name="btnSave" Content="Als Dokument speichern" Margin="0,0,3,0" Height="25" Click="btnSave_Click"/>
|
||||
<Button x:Name="btnClose" Content="Schließen" Margin="0,0,3,0" Height="25" Click="btnClose_Click"/>
|
||||
</StackPanel>
|
||||
|
||||
@@ -32,141 +32,41 @@ namespace BeWo.View.Document
|
||||
{
|
||||
public partial class RtfEditView
|
||||
{
|
||||
List<PlatzhalterVM> Templates = new List<PlatzhalterVM>();
|
||||
Dictionary<string, BitmapImage> ImageTypeToImage = new Dictionary<string, BitmapImage>();
|
||||
|
||||
|
||||
|
||||
public event Action ButtonSavedClicked;
|
||||
public event Action ButtonCancelClicked;
|
||||
|
||||
public VorlagentabelleDC VorlagenTabelle { get; set; }
|
||||
public DokumentvorlageVM ViewModel { get; set; }
|
||||
|
||||
public RtfEditView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public override bool IsDirty
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
|
||||
//if (ViewModel.SelectedVMForEditing != null && _SelectedEmployee != null &&
|
||||
// !_SelectedEmployee.Equals(ViewModel.SelectedVMForEditing.Employee))
|
||||
// return true;
|
||||
|
||||
return ViewModel != null && ViewModel.IsDirty;
|
||||
}
|
||||
}
|
||||
|
||||
public void InitView(VorlagentabelleDC vorlagenTabelle, DokumentvorlageVM pVM)
|
||||
public void InitView(String rtfText)
|
||||
{
|
||||
InitializeComponent();
|
||||
VorlagenTabelle = vorlagenTabelle;
|
||||
ViewModel = pVM;
|
||||
DataContext = pVM;
|
||||
|
||||
if (pVM.Text != null)
|
||||
{
|
||||
EditorControl.RtfText = pVM.RTFText;
|
||||
}
|
||||
|
||||
|
||||
RtfText = rtfText;
|
||||
|
||||
|
||||
Focus();
|
||||
}
|
||||
|
||||
private void LoadImagesForNodes(List<PlatzhalterVM> templates)
|
||||
public String RtfText
|
||||
{
|
||||
// Icons in ImageTypeToImage laden
|
||||
foreach (var item in templates)
|
||||
get
|
||||
{
|
||||
if (item.Children != null)
|
||||
LoadImagesForNodes(item.Children);
|
||||
|
||||
if (item.IconType != null)
|
||||
item.Icon = LoadImage(item.IconType);
|
||||
|
||||
return EditorControl.RtfText;
|
||||
}
|
||||
set
|
||||
{
|
||||
EditorControl.RtfText = value;
|
||||
}
|
||||
}
|
||||
private BitmapImage LoadImage(string imageName)
|
||||
{
|
||||
return new BitmapImage(new Uri("/Ressources/Icons/" + imageName + ".png", UriKind.Relative));
|
||||
}
|
||||
|
||||
private PlatzhalterVM ConvertDataContractToViewModel(PlatzhalterDC dc)
|
||||
{
|
||||
var vm = new PlatzhalterVM()
|
||||
{
|
||||
Bezeichnung = dc.Bezeichnung,
|
||||
Children = new List<PlatzhalterVM>(),
|
||||
FieldName = dc.FieldName,
|
||||
Icon = LoadImage(dc.IconType),
|
||||
IconType = dc.IconType,
|
||||
Platzhalter = dc.Platzhalter
|
||||
};
|
||||
|
||||
if (dc.Children != null && dc.Children.Count > 0)
|
||||
{
|
||||
foreach (var item in dc.Children)
|
||||
vm.Children.Add(ConvertDataContractToViewModel(item));
|
||||
}
|
||||
|
||||
return vm;
|
||||
}
|
||||
private List<PlatzhalterVM> ConvertListOfDataContractsToViewModels(List<PlatzhalterDC> dcs)
|
||||
{
|
||||
List<PlatzhalterVM> vms = new List<PlatzhalterVM>();
|
||||
foreach (var dc in dcs)
|
||||
vms.Add(ConvertDataContractToViewModel(dc));
|
||||
|
||||
return vms;
|
||||
}
|
||||
|
||||
//private List<PlatzhalterDC> LoadTemplates(long? tabelle)
|
||||
//{
|
||||
// List<PlatzhalterDC> templates = new List<PlatzhalterDC>();
|
||||
|
||||
// List<PlatzhalterDC> platzhalterDCs = new List<PlatzhalterDC>();
|
||||
|
||||
// switch (tabelle)
|
||||
// {
|
||||
// case 1: platzhalterDCs = ServiceFacade.DoOperationsServiceSync(s => s.GetPlatzhalterForSupportConcept()); break;
|
||||
// case 2: platzhalterDCs = TemplatesForCustomers(); break;
|
||||
// case 3: platzhalterDCs = TemplatesForEmployee(); break;
|
||||
// }
|
||||
|
||||
// return templates;
|
||||
//}
|
||||
|
||||
private List<PlatzhalterVM> GetPlatzhalter()
|
||||
{
|
||||
return ConvertListOfDataContractsToViewModels(ServiceFacade.DoOperationsServiceSync(s => s.GetPlatzhalterForTemplate(VorlagenTabelle)));
|
||||
|
||||
}
|
||||
/*
|
||||
private void combobox_templates_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (combobox_templates.SelectedItem == null)
|
||||
return;
|
||||
var selected = combobox_templates.SelectedItem as PlatzhalterDC;
|
||||
|
||||
if(selected.ToString().StartsWith("-") && selected.ToString().EndsWith("-"))
|
||||
{
|
||||
MessageBox.Show("Bindestriche kennzeichnen eine Vorlagenkategorie. Wählen Sie eine Vorlage ohne Bindestriche.", "BeWoPlaner", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
return;
|
||||
}
|
||||
EditorControl.Document.InsertText(EditorControl.Document.CaretPosition, "[" + selected.Platzhalter + "]");
|
||||
|
||||
|
||||
|
||||
|
||||
//EditorControl.Text += "[" + selected.Platzhalter + "]";
|
||||
//EditorControl.RtfText += "[" + selected.Platzhalter + "]";
|
||||
|
||||
combobox_templates.SelectedItem = null;
|
||||
}
|
||||
*/
|
||||
private void btnSave_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
|
||||
@@ -176,15 +76,14 @@ namespace BeWo.View.Document
|
||||
private void btnClose_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
bool close = true;
|
||||
if (ViewModel.IsDirty)
|
||||
{
|
||||
if (MessageBox.Show(
|
||||
Translator.Translate("Möchten Sie wirklich abbrechen und die Änderungen verwerfen?"),
|
||||
|
||||
if (MessageBox.Show(
|
||||
Translator.Translate("Möchten Sie wirklich abbrechen und das Dokument verwerfen?"),
|
||||
"BeWoPlaner", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)
|
||||
{
|
||||
close = false;
|
||||
}
|
||||
{
|
||||
close = false;
|
||||
}
|
||||
|
||||
|
||||
if (close)
|
||||
{
|
||||
@@ -192,24 +91,5 @@ namespace BeWo.View.Document
|
||||
}
|
||||
}
|
||||
|
||||
// Mouseup, um die aktuelle Position des Cursors zu speichern, um dort den Platzhalter an der aktuellen Stelle einzusetzen
|
||||
// Klappt nur, wenn in Text geklickt wird und nicht hinter ein Wort..
|
||||
// Hat aber keine verwendbaren Inhalte
|
||||
private void richEditControl1_MouseUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
RichEditControl richEditControl = sender as RichEditControl;
|
||||
System.Windows.Point point = e.GetPosition(richEditControl);
|
||||
System.Drawing.Point docPoint = new System.Drawing.Point((int)point.X, (int)point.Y);
|
||||
docPoint = Units.PixelsToDocuments(docPoint, richEditControl.DpiX, richEditControl.DpiY);
|
||||
DocumentPosition pos = richEditControl.GetPositionFromPoint(docPoint);
|
||||
//pos.
|
||||
}
|
||||
|
||||
private void EditorControl_RtfTextChanged(object sender, EventArgs e)
|
||||
{
|
||||
ViewModel.Text = EditorControl.Text;
|
||||
ViewModel.RTFText = EditorControl.RtfText;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -16,46 +16,53 @@
|
||||
Focusable="True">
|
||||
|
||||
<Grid Background="{StaticResource ObjectEditBackgroundBrush}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition x:Name="GridRowTemplate" Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition x:Name="GridRowFolder" Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
|
||||
<Label Margin="0,0,0,0" x:Name="lblTemplate" Content="Vorlage:"/>
|
||||
<dxg:TreeListControl x:Name="treelistcontrol_template" Grid.Row="1" DefaultSorting="Name" Margin="5,0,5,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
|
||||
<dxg:TreeListControl x:Name="treelistcontrol_template" Grid.Row="1" Grid.ColumnSpan="2" DefaultSorting="Name" Margin="5,0,5,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
|
||||
<dxg:TreeListControl.Columns>
|
||||
<dxg:TreeListColumn FieldName="Name" AllowSorting="True" CellToolTipBinding="{Binding Description}"/>
|
||||
</dxg:TreeListControl.Columns>
|
||||
<dxg:TreeListControl.View>
|
||||
<dxg:TreeListView x:Name="TreeView_template" ShowColumnHeaders="False" ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False" AutoWidth="True"
|
||||
FocusedRowChanged="DocumentsTreeView_FocusedRowChanged" PreviewMouseLeftButtonDown="DocumentsTreeView_folderStructureForSelection_PreviewMouseLeftButtonDown"
|
||||
NodeExpanding="DocumentsTreeView_NodeExpanding" AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True"
|
||||
AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True"
|
||||
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}" ParentFieldName="Binding DocumentTreeItemVM.ParentOid">
|
||||
</dxg:TreeListView>
|
||||
</dxg:TreeListControl.View>
|
||||
</dxg:TreeListControl>
|
||||
|
||||
<CheckBox x:Name="chkSaveDoc" Content="Dokument abspeichern" Grid.Row="2" Checked="CheckBox_Checked" Margin="5,8,0,0" Unchecked="CheckBox_Unchecked" />
|
||||
<!--<CheckBox x:Name="chkSaveDoc" Content="Dokument abspeichern" Grid.Row="2" Checked="CheckBox_Checked" Margin="5,8,0,0" Unchecked="CheckBox_Unchecked" />-->
|
||||
|
||||
<dxg:TreeListControl x:Name="treelistcontrol_folderStructureForSelection" Grid.Row="3" DefaultSorting="Name" Margin="5,5,5,0" VerticalAlignment="Stretch" Visibility="Visible">
|
||||
<Label x:Name="lblFileName" Grid.Row="2" Margin="0,3,0,0" Content="Name:" />
|
||||
<TextBox x:Name="txtFileName" Grid.Row="2" Grid.Column="1" Margin="3,3,0,0" HorizontalAlignment="Stretch"/>
|
||||
|
||||
<dxg:TreeListControl x:Name="treelistcontrol_folderStructureForSelection" Grid.Row="4" Grid.ColumnSpan="2" DefaultSorting="Name" Margin="5,5,5,0" VerticalAlignment="Stretch" Visibility="Visible">
|
||||
<dxg:TreeListControl.Columns>
|
||||
<dxg:TreeListColumn FieldName="Name" AllowSorting="True"/>
|
||||
</dxg:TreeListControl.Columns>
|
||||
<dxg:TreeListControl.View>
|
||||
<dxg:TreeListView x:Name="TreeView_folderStructureForSelection" ShowColumnHeaders="False" ShowIndicator="False" ShowHorizontalLines="False" ShowVerticalLines="False" AutoWidth="True"
|
||||
FocusedRowChanged="DocumentsTreeView_FocusedRowChanged" PreviewMouseLeftButtonDown="DocumentsTreeView_folderStructureForSelection_PreviewMouseLeftButtonDown"
|
||||
NodeExpanding="DocumentsTreeView_NodeExpanding" AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True"
|
||||
AllowEditing="False" ShowNodeImages="True" PrintNodeImages="True"
|
||||
KeyFieldName="{Binding DocumentTreeItemVM.DocTreeItemOid}" ParentFieldName="Binding DocumentTreeItemVM.ParentOid">
|
||||
</dxg:TreeListView>
|
||||
</dxg:TreeListControl.View>
|
||||
</dxg:TreeListControl>
|
||||
|
||||
<WrapPanel Grid.Row="4" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0 5 5 5">
|
||||
<Button x:Name="Button_CreateTemplateBasedDocument_OnlyOne" Content="Dokument erstellen" Margin="0 0 5 0" Click="Button_CreateTemplateForSelection_Click" />
|
||||
<WrapPanel Grid.Row="5" Grid.ColumnSpan="2" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0 5 5 5">
|
||||
<Button x:Name="Button_SelectTemplate" Content="Dokument erstellen" Margin="0 0 5 0" Click="Button_CreateTemplateForSelection_Click" />
|
||||
<Button x:Name="Button_SelectFolder" Content="Dokument speichern" Margin="0 0 5 0" Click="Button_SelectFolder_Click" />
|
||||
<Button x:Name="Button_Cancel_OnlyOne" Content="Abbrechen" Click="Button_Cancel_Click" />
|
||||
</WrapPanel>
|
||||
</Grid>
|
||||
|
||||
@@ -32,9 +32,7 @@ namespace BeWo.View.Document
|
||||
{
|
||||
public partial class SingleTemplateSelectionView
|
||||
{
|
||||
public event Action ButtonCreateClicked;
|
||||
public event Action ButtonCreateForSelectionClicked;
|
||||
public event Action ButtonCreateForAllClicked;
|
||||
public event Action ButtonCancelClicked;
|
||||
private VorlagentabelleDC vorlagenTabelle;
|
||||
private List<DokumentvorlageDC> alleVorlagen;
|
||||
@@ -46,11 +44,11 @@ namespace BeWo.View.Document
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public DocumentTreeItemVM SelectedFolder { get; set; }
|
||||
public BeWoFolderDC SelectedFolder { get; set; }
|
||||
|
||||
public DokumentvorlageDC SelectedTemplate { get; set; }
|
||||
|
||||
public void InitView(VorlagentabelleDC vt, List<DokumentvorlageDC> alleVorlagen, List<BeWoFolderDC> allTemplateFolder, List<BeWoFolderDC> allObjectFolder, bool showTemplateTree, bool showDocumentTree)
|
||||
public void InitView(VorlagentabelleDC vt, List<DokumentvorlageDC> alleVorlagen, List<BeWoFolderDC> allTemplateFolder, List<BeWoFolderDC> allObjectFolder, bool showTemplateTree, bool showDocumentTree, String defaultFileName)
|
||||
{
|
||||
//tableId = tid;
|
||||
|
||||
@@ -58,23 +56,33 @@ namespace BeWo.View.Document
|
||||
this.alleVorlagen = alleVorlagen;
|
||||
this.allTemplateFolder = allTemplateFolder;
|
||||
this.allObjectFolder = allObjectFolder;
|
||||
|
||||
DokumentViewHelper.CreateTemplateTreeViewItems(treelistcontrol_template, new List<VorlagentabelleDC>() { vt }, allTemplateFolder, true);
|
||||
DokumentViewHelper.AddTemplatesToTreeView(treelistcontrol_template, alleVorlagen, true);
|
||||
this.txtFileName.Text = defaultFileName;
|
||||
|
||||
|
||||
List<PrintSelectionVM> vms = new List<PrintSelectionVM>();
|
||||
|
||||
if (!showTemplateTree)
|
||||
if (showTemplateTree)
|
||||
{
|
||||
DokumentViewHelper.CreateTemplateTreeViewItems(treelistcontrol_template, new List<VorlagentabelleDC>() { vt }, allTemplateFolder, true);
|
||||
DokumentViewHelper.AddTemplatesToTreeView(treelistcontrol_template, alleVorlagen, true);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Button_SelectTemplate.Visibility = Visibility.Collapsed;
|
||||
lblTemplate.Visibility = Visibility.Collapsed;
|
||||
treelistcontrol_template.Visibility = Visibility.Collapsed;
|
||||
GridRowTemplate.Height = GridLength.Auto;
|
||||
}
|
||||
|
||||
if (!showDocumentTree)
|
||||
if (showDocumentTree)
|
||||
{
|
||||
chkSaveDoc.Visibility = Visibility.Collapsed;
|
||||
DokumentViewHelper.CreateTemplateTreeViewItems(treelistcontrol_folderStructureForSelection, null, allObjectFolder, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
//chkSaveDoc.Visibility = Visibility.Collapsed;
|
||||
lblFileName.Visibility = Visibility.Collapsed;
|
||||
txtFileName.Visibility = Visibility.Collapsed;
|
||||
Button_SelectFolder.Visibility = Visibility.Collapsed;
|
||||
treelistcontrol_folderStructureForSelection.Visibility = Visibility.Collapsed;
|
||||
GridRowFolder.Height = GridLength.Auto;
|
||||
}
|
||||
@@ -112,6 +120,22 @@ namespace BeWo.View.Document
|
||||
ButtonCreateForSelectionClicked?.Invoke();
|
||||
}
|
||||
|
||||
private void Button_SelectFolder_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var selected = treelistcontrol_folderStructureForSelection.SelectedItem as DocumentTreeItemVM;
|
||||
|
||||
if (selected == null || selected.DataContract.BeWoFolderDC == null)
|
||||
{
|
||||
MessageBox.Show("Bitte wählen Sie einen Ordner aus.", "BeWoPlaner", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
return;
|
||||
}
|
||||
SelectedFolder = selected.DataContract.BeWoFolderDC;
|
||||
//Kleiner Hack;-)
|
||||
SelectedFolder.Name = txtFileName.Text;
|
||||
|
||||
ButtonCreateForSelectionClicked?.Invoke();
|
||||
}
|
||||
|
||||
//private void Button_CreateTemplateBasedDocumentForAll_Click(object sender, RoutedEventArgs e)
|
||||
//{
|
||||
// var selected = datagrid_enabled_for_template.ItemsSource as List<PrintSelectionVM>;
|
||||
@@ -135,101 +159,9 @@ namespace BeWo.View.Document
|
||||
treelistcontrol_folderStructureForSelection.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
//private void GenerateFolderStructure(TableID table, TreeListNode node, List<BeWoFolderDC> folderDCs)
|
||||
//{
|
||||
|
||||
// if (node == null)
|
||||
// {
|
||||
// node = new TreeListNode()
|
||||
// {
|
||||
// IsExpandButtonVisible = DefaultBoolean.True,
|
||||
// Tag = false,
|
||||
// Image = LoadFolderImage()
|
||||
// };
|
||||
// }
|
||||
|
||||
// var content = node.Content as DocumentTreeItemVM;
|
||||
|
||||
// foreach (var folder in folderDCs)
|
||||
// {
|
||||
// //Falls kein übergeordneter Knoten exisitert
|
||||
// //if(content == null)
|
||||
// //{
|
||||
// // PrintSelectionVM selected = combobox_elementList.SelectedItem as PrintSelectionVM;
|
||||
// // var dc = new DocumentTreeItemDC()
|
||||
// // {
|
||||
// // DocTreeItemOid = 0,
|
||||
// // ParentOid = null,
|
||||
// // Name = "Alle Ordner",
|
||||
// // Table = table
|
||||
// // };
|
||||
// // content = new DocumentTreeItemVM(dc);
|
||||
// // node.Content = content;
|
||||
// // DocumentsTreeView_folderStructureForSelection.Nodes.Add(node);
|
||||
// //}
|
||||
|
||||
// PrintSelectionVM selected = combobox_elementList.SelectedItem as PrintSelectionVM;
|
||||
// DocumentTreeItemDC folder_dc = new DocumentTreeItemDC()
|
||||
// {
|
||||
// DocTreeItemOid = folder.BeWoFolderOid,
|
||||
// ParentOid = null,
|
||||
// Name = folder.Name,
|
||||
// FilesInFolder = new List<FileAttachmentDC>(),
|
||||
// BeWoFolderDC = folder,
|
||||
// Table = table,
|
||||
// ObjectOid = selected.ObjectOid
|
||||
// };
|
||||
// if (content != null)
|
||||
// folder_dc.ParentOid = content.DocTreeItemOid;
|
||||
// DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(folder_dc);
|
||||
// TreeListNode newNode_folder = new TreeListNode()
|
||||
// {
|
||||
// Content = folder_vm,
|
||||
// IsExpandButtonVisible = DefaultBoolean.True,
|
||||
// Tag = false,
|
||||
// Image = LoadFolderImage()
|
||||
// };
|
||||
// folder_dc.Node = newNode_folder;
|
||||
|
||||
// if(node.Content == null)
|
||||
// DocumentsTreeView_folderStructureForSelection.Nodes.Add(newNode_folder);
|
||||
// else
|
||||
// node.Nodes.Add(newNode_folder);
|
||||
|
||||
// if (folder.SubFolders.Count != 0)
|
||||
// {
|
||||
// GenerateFolderStructure(table, newNode_folder, folder.SubFolders);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
private BitmapImage LoadFolderImage()
|
||||
{
|
||||
return new BitmapImage(new Uri("/Ressources/Icons/Folder.png", UriKind.Relative));
|
||||
}
|
||||
|
||||
private void DocumentsTreeView_FocusedRowChanged(object sender, DevExpress.Xpf.Grid.FocusedRowChangedEventArgs e)
|
||||
{
|
||||
//if(DocumentsTreeView_folderStructureForSelection.SelectedRows.Count != 0)
|
||||
// selectedFolder = DocumentsTreeView_folderStructureForSelection.SelectedRows[0] as DocumentTreeItemVM;
|
||||
}
|
||||
|
||||
private void DocumentsTreeView_NodeExpanding(object sender, DevExpress.Xpf.Grid.TreeList.TreeListNodeAllowEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void DocumentsTreeView_folderStructureForSelection_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (TreeView_template.SelectedRows.Count != 0)
|
||||
SelectedFolder = TreeView_template.SelectedRows[0] as DocumentTreeItemVM;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//public List<PrintSelectionVM> SelectAllElements()
|
||||
//{
|
||||
// return datagrid_enabled_for_template.ItemsSource as List<PrintSelectionVM>;
|
||||
//}
|
||||
}
|
||||
}
|
||||
@@ -67,7 +67,7 @@ namespace BeWo.View.Document
|
||||
ViewModel = pVM;
|
||||
DataContext = pVM;
|
||||
|
||||
if (pVM.Text != null)
|
||||
if (pVM.RTFText != null)
|
||||
{
|
||||
EditorControl.RtfText = pVM.RTFText;
|
||||
}
|
||||
@@ -220,11 +220,24 @@ namespace BeWo.View.Document
|
||||
}
|
||||
private void TemplatesTreeView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
var selection = TreeListControlTemplates.SelectedItem as PlatzhalterVM;
|
||||
|
||||
if (selection.Platzhalter != null)
|
||||
try
|
||||
{
|
||||
EditorControl.Document.InsertText(EditorControl.Document.CaretPosition, "[" + selection.Platzhalter + "]");
|
||||
var selection = TreeListControlTemplates.SelectedItem as PlatzhalterVM;
|
||||
|
||||
if (selection.Platzhalter != null)
|
||||
{
|
||||
var doc = EditorControl.Document as DevExpress.XtraRichEdit.API.Native.Implementation.NativeDocument;
|
||||
//var test = doc.ActiveSubDocument.EndPosition;
|
||||
var sd = doc.ActiveSubDocument;
|
||||
sd.InsertText(EditorControl.Document.CaretPosition, "[" + selection.Platzhalter + "]");
|
||||
|
||||
//EditorControl.Document.InsertText(EditorControl.Document.CaretPosition, "[" + selection.Platzhalter + "]");
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
//Ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@ namespace BeWo.View
|
||||
|
||||
var _login = new Login(kundennummer, "kihqx-PiGka", "cb", "bewo", "0b50c09aff87f20d9ced75340e04e5ccaa11dd3e7bcf25e9c4f94dc20d3cbb97");
|
||||
|
||||
#if DEBUG
|
||||
var ownChatTextFilePath = "C:\\Users\\Lyndon Jetten\\Desktop\\ownchat.txt";
|
||||
if(File.Exists(ownChatTextFilePath))
|
||||
{
|
||||
@@ -506,10 +505,8 @@ namespace BeWo.View
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
//_login = new Login("4368658436", "B7x0b-FhhJA", "jettenl", "", "0000");
|
||||
//_login = new Login("3629696651", "2qsJH-qXBh3", "m59", "test123!", "C4UtAx8itmba2OZ2HKzYuK3F9jV3bEQbkRL6hNxvZGGFtFs1CgWWGRLFKYvEBmo6");
|
||||
#if DEBUG
|
||||
var loginControl = new ChatController.LoginControl();
|
||||
|
||||
loginControl.OnLogin += (c) =>
|
||||
@@ -537,12 +534,7 @@ namespace BeWo.View
|
||||
loginWindow.Content = grid;
|
||||
|
||||
loginWindow.Show();
|
||||
#else
|
||||
var x1 = _login.AnmeldevorgangDurchFuehren();
|
||||
|
||||
ServiceChatView = new ChatView(x1);
|
||||
ServiceChatView.Show();
|
||||
#endif
|
||||
return;
|
||||
#endif
|
||||
|
||||
@@ -578,12 +570,7 @@ namespace BeWo.View
|
||||
string _passwort = BeWoApp.UserPassword;
|
||||
string _apikey;
|
||||
#endif
|
||||
//string _ChatCode = "";
|
||||
//if (xxx.EmployeeCode != null && !xxx.EmployeeCode.Equals(""))
|
||||
//{
|
||||
// _ChatCode = xxx.EmployeeCode;
|
||||
//}
|
||||
|
||||
|
||||
_apikey = BeWoApp.Mandator.Apikey ?? "0000";
|
||||
|
||||
if(!_Code.Equals(""))
|
||||
@@ -609,24 +596,6 @@ namespace BeWo.View
|
||||
MessageBox.Show("Sie benötigen einen gültigen Zugang zum Chat. Bitte wenden Sie sich an den Support.", "Info");
|
||||
}
|
||||
}
|
||||
//else if (ServiceChatView.Visibility == Visibility.Visible)
|
||||
//{
|
||||
// ServiceChatView.Visibility = Visibility.Hidden;
|
||||
//}
|
||||
//else if (ServiceChatView.Visibility == Visibility.Hidden)
|
||||
//{
|
||||
// ServiceChatView.Visibility = Visibility.Visible;
|
||||
|
||||
// if (ServiceChatView.WindowState == WindowState.Minimized)
|
||||
// {
|
||||
// ServiceChatView.WindowState = WindowState.Normal;
|
||||
// ServiceChatView.Height = 700;
|
||||
// ServiceChatView.Width = 900;
|
||||
// }
|
||||
|
||||
// ServiceChatView.Activate();
|
||||
//}
|
||||
//#endif
|
||||
}
|
||||
|
||||
private void ServiceChatViewClosed(object sender, EventArgs e)
|
||||
|
||||
@@ -68,6 +68,11 @@ namespace BeWo.ViewModel
|
||||
|
||||
protected abstract DCType MapToDataContract(DCType pDataContract, bool doCommit);
|
||||
|
||||
public virtual void UpdateByDataContract(DCType pDataContract)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected void StoreDirtyInformation(bool pDirty, string pPropName)
|
||||
{
|
||||
if (_DirtyProps.Contains(pPropName) && !pDirty)
|
||||
@@ -79,5 +84,22 @@ namespace BeWo.ViewModel
|
||||
_DirtyProps.Add(pPropName);
|
||||
}
|
||||
}
|
||||
|
||||
protected bool SetProperty<T>(ref T field, T value, string propertyName, Func<T> originalValueProvider = null)
|
||||
{
|
||||
if (EqualityComparer<T>.Default.Equals(field, value))
|
||||
return false;
|
||||
|
||||
field = value;
|
||||
|
||||
if (originalValueProvider != null)
|
||||
{
|
||||
bool isDirty = !EqualityComparer<T>.Default.Equals(originalValueProvider(), value);
|
||||
StoreDirtyInformation(isDirty, propertyName);
|
||||
}
|
||||
|
||||
FirePropertyChanged(propertyName);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
149
BeWo/ViewModel/AddressVM.cs
Normal file
149
BeWo/ViewModel/AddressVM.cs
Normal file
@@ -0,0 +1,149 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using BS.Shared.DataContracts;
|
||||
|
||||
namespace BeWo.ViewModel
|
||||
{
|
||||
public class AddressVM : AbstractDCMapperVM<AddressDC>
|
||||
{
|
||||
private string _AddressLine1;
|
||||
private string _AddressLine2;
|
||||
private string _Country;
|
||||
private long? _L_Version;
|
||||
private decimal? _Latitude;
|
||||
private decimal? _Longitude;
|
||||
private string _PostalCode;
|
||||
private string _State;
|
||||
private string _Street;
|
||||
private string _Town;
|
||||
|
||||
public AddressVM() : this(new AddressDC()) { }
|
||||
public AddressVM(AddressDC dc) : base(dc, dc.Oid)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public string AddressLine1
|
||||
{
|
||||
get => _AddressLine1;
|
||||
set => SetProperty(ref _AddressLine1, value, nameof(AddressLine1), () => DataContract.AddressLine1);
|
||||
}
|
||||
|
||||
public string AddressLine2
|
||||
{
|
||||
get => _AddressLine2;
|
||||
set => SetProperty(ref _AddressLine2, value, nameof(AddressLine2), () => DataContract.AddressLine2);
|
||||
}
|
||||
|
||||
public string Country
|
||||
{
|
||||
get => _Country;
|
||||
set => SetProperty(ref _Country, value, nameof(Country), () => DataContract.Country);
|
||||
}
|
||||
|
||||
public long? L_Version
|
||||
{
|
||||
get => _L_Version;
|
||||
set => SetProperty(ref _L_Version, value, nameof(L_Version), () => DataContract.L_Version);
|
||||
}
|
||||
|
||||
public decimal? Latitude
|
||||
{
|
||||
get => _Latitude;
|
||||
set => SetProperty(ref _Latitude, value, nameof(Latitude), () => DataContract.Latitude);
|
||||
}
|
||||
|
||||
public decimal? Longitude
|
||||
{
|
||||
get => _Longitude;
|
||||
set => SetProperty(ref _Longitude, value, nameof(Longitude), () => DataContract.Longitude);
|
||||
}
|
||||
|
||||
public string PostalCode
|
||||
{
|
||||
get => _PostalCode;
|
||||
set => SetProperty(ref _PostalCode, value, nameof(PostalCode), () => DataContract.PostalCode);
|
||||
}
|
||||
|
||||
public string State
|
||||
{
|
||||
get => _State;
|
||||
set => SetProperty(ref _State, value, nameof(State), () => DataContract.State);
|
||||
}
|
||||
|
||||
public string Street
|
||||
{
|
||||
get => _Street;
|
||||
set => SetProperty(ref _Street, value, nameof(Street), () => DataContract.Street);
|
||||
}
|
||||
|
||||
public string Town
|
||||
{
|
||||
get => _Town;
|
||||
set => SetProperty(ref _Town, value, nameof(Town), () => DataContract.Town);
|
||||
}
|
||||
|
||||
protected override void InitByDataContract(AddressDC pDataContract)
|
||||
{
|
||||
_AddressLine1 = pDataContract.AddressLine1;
|
||||
_AddressLine2 = pDataContract.AddressLine2;
|
||||
_Country = pDataContract.Country;
|
||||
_L_Version = pDataContract.L_Version;
|
||||
_Latitude = pDataContract.Latitude;
|
||||
_Longitude = pDataContract.Longitude;
|
||||
_PostalCode = pDataContract.PostalCode;
|
||||
_State = pDataContract.State;
|
||||
_Street = pDataContract.Street;
|
||||
_Town = pDataContract.Town;
|
||||
}
|
||||
|
||||
protected override AddressDC MapToDataContract(AddressDC pDataContract, bool doCommit)
|
||||
{
|
||||
pDataContract.AddressLine1 = _AddressLine1;
|
||||
pDataContract.AddressLine2 = _AddressLine2;
|
||||
pDataContract.Country = _Country;
|
||||
pDataContract.L_Version = _L_Version;
|
||||
pDataContract.Latitude = _Latitude;
|
||||
pDataContract.Longitude = _Longitude;
|
||||
pDataContract.PostalCode = _PostalCode;
|
||||
pDataContract.State = _State;
|
||||
pDataContract.Street = _Street;
|
||||
pDataContract.Town = _Town;
|
||||
|
||||
return pDataContract;
|
||||
}
|
||||
|
||||
public string ToSingleLine()
|
||||
{
|
||||
var parts = new List<string>
|
||||
{
|
||||
AddressLine1,
|
||||
AddressLine2,
|
||||
Street,
|
||||
PostalCode,
|
||||
Town,
|
||||
State,
|
||||
Country
|
||||
};
|
||||
|
||||
return string.Join(", ", parts.Where(p => !string.IsNullOrWhiteSpace(p)));
|
||||
}
|
||||
|
||||
public override void UpdateByDataContract(AddressDC pDataContract)
|
||||
{
|
||||
AddressLine1 = pDataContract.AddressLine1;
|
||||
AddressLine2 = pDataContract.AddressLine2;
|
||||
Country = pDataContract.Country;
|
||||
L_Version = pDataContract.L_Version;
|
||||
Latitude = pDataContract.Latitude;
|
||||
Longitude = pDataContract.Longitude;
|
||||
PostalCode = pDataContract.PostalCode;
|
||||
State = pDataContract.State;
|
||||
Street = pDataContract.Street;
|
||||
Town = pDataContract.Town;
|
||||
|
||||
FirePropertyChangedItself();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -98,5 +98,16 @@ namespace BeWo.ViewModel
|
||||
|
||||
return pDataContract;
|
||||
}
|
||||
|
||||
public override void UpdateByDataContract(AiConversationDC pDataContract)
|
||||
{
|
||||
DataContract = pDataContract;
|
||||
|
||||
Displayname = pDataContract.Displayname;
|
||||
Updated = pDataContract.Updated;
|
||||
|
||||
if (pDataContract.Messages is object)
|
||||
Messages = new AiConversationMessageListVM(pDataContract.Messages);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,7 +94,7 @@ namespace BeWo.ViewModel
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_MonthlyTotalHours.HasValue && _MonthlyTotalHours.Value > 0)
|
||||
if (_MonthlyTotalHours.HasValue && !_WeeklyTotalHours.HasValue)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -106,7 +106,7 @@ namespace BeWo.ViewModel
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_WeeklyTotalHours.HasValue && _WeeklyTotalHours.Value > 0)
|
||||
if (_WeeklyTotalHours.HasValue && !_MonthlyTotalHours.HasValue)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -118,7 +118,7 @@ namespace BeWo.ViewModel
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_MonthlyFLS.HasValue && _MonthlyFLS.Value > 0)
|
||||
if (_MonthlyFLS.HasValue && !_WeeklyFLS.HasValue)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -130,7 +130,7 @@ namespace BeWo.ViewModel
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_WeeklyFLS.HasValue && _WeeklyFLS.Value > 0)
|
||||
if (_WeeklyFLS.HasValue && !_MonthlyFLS.HasValue)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace BeWo.ViewModel
|
||||
{
|
||||
public class CustomerVermittlungArbeitVM : AbstractDCMapperVM<CustomerVermittlungArbeitDC>
|
||||
{
|
||||
private string _AktenzeichenGericht;
|
||||
private string _EigenesAktenzeichen;
|
||||
private DateTime? _Auftragseingang;
|
||||
private ValueListEntryDC _Auftragsherkunft;
|
||||
@@ -57,7 +58,21 @@ namespace BeWo.ViewModel
|
||||
|
||||
}
|
||||
|
||||
public string Displayname => $"AZ: {EigenesAktenzeichen}";
|
||||
public string Displayname => $"AZ: {AktenzeichenGericht}";
|
||||
public string AktenzeichenGericht
|
||||
{
|
||||
get { return _AktenzeichenGericht; }
|
||||
set
|
||||
{
|
||||
if (!AreDifferent(_AktenzeichenGericht, value))
|
||||
return;
|
||||
|
||||
_AktenzeichenGericht = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.AktenzeichenGericht, value), nameof(AktenzeichenGericht));
|
||||
FirePropertyChanged(nameof(AktenzeichenGericht));
|
||||
FirePropertyChanged(nameof(Displayname));
|
||||
}
|
||||
}
|
||||
public string EigenesAktenzeichen
|
||||
{
|
||||
get { return _EigenesAktenzeichen; }
|
||||
@@ -69,7 +84,6 @@ namespace BeWo.ViewModel
|
||||
_EigenesAktenzeichen = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.EigenesAktenzeichen, value), nameof(EigenesAktenzeichen));
|
||||
FirePropertyChanged(nameof(EigenesAktenzeichen));
|
||||
FirePropertyChanged(nameof(Displayname));
|
||||
}
|
||||
}
|
||||
public DateTime? Auftragseingang
|
||||
@@ -515,6 +529,7 @@ namespace BeWo.ViewModel
|
||||
|
||||
protected override void InitByDataContract(CustomerVermittlungArbeitDC pDataContract)
|
||||
{
|
||||
_AktenzeichenGericht = pDataContract.AktenzeichenGericht;
|
||||
_EigenesAktenzeichen = pDataContract.EigenesAktenzeichen;
|
||||
_Auftragseingang = pDataContract.Auftragseingang;
|
||||
_Auftragsherkunft = pDataContract.Auftragsherkunft;
|
||||
@@ -559,6 +574,7 @@ namespace BeWo.ViewModel
|
||||
|
||||
protected override CustomerVermittlungArbeitDC MapToDataContract(CustomerVermittlungArbeitDC pDataContract, bool doCommit)
|
||||
{
|
||||
pDataContract.AktenzeichenGericht = _AktenzeichenGericht;
|
||||
pDataContract.EigenesAktenzeichen = _EigenesAktenzeichen;
|
||||
pDataContract.Auftragseingang = _Auftragseingang;
|
||||
pDataContract.Auftragsherkunft = _Auftragsherkunft;
|
||||
|
||||
@@ -50,21 +50,12 @@ namespace BeWo.ViewModel
|
||||
private BindingList<InvoiceBaseVM> _InvoiceBases;
|
||||
private OrganisationDC _Organisation;
|
||||
|
||||
private List<GkvTransferProtokollDC> _TransferProtokolle;
|
||||
private List<GkvTransferProtokollDC> _Protokolle;
|
||||
|
||||
public GkvAbrechnungVM(GkvAbrechnungDC pDC) : base(pDC, !pDC.GkvAbrechnungOid.HasValue)
|
||||
public GkvAbrechnungVM(GkvAbrechnungDC pDC) : base(pDC, !pDC.Oid.HasValue)
|
||||
{
|
||||
_InvoiceBases = new BindingList<InvoiceBaseVM>();
|
||||
|
||||
CheckAllInvoiceBasesCommand = new DelegateCommand(CheckAllInvoiceBases, HasAnyInvoiceBases);
|
||||
UncheckAllInvoiceBasesCommand = new DelegateCommand(UncheckAllInvoicesBases, HasAnyInvoiceBases);
|
||||
PrintSelectedInvoiceBasesCommand = new DelegateCommand(PrintSelectedInvoiceBases, HasAnySelectedInvoiceBases);
|
||||
}
|
||||
|
||||
public DelegateCommand CheckAllInvoiceBasesCommand { get; set; }
|
||||
public DelegateCommand UncheckAllInvoiceBasesCommand { get; set; }
|
||||
public DelegateCommand PrintSelectedInvoiceBasesCommand { get; set; }
|
||||
|
||||
#region
|
||||
|
||||
public string AbrechnungsZeitraum => $"{AbrechnungsZeitraumStart.Value.ToShortDateString()} - {AbrechnungsZeitraumEnde.Value.ToShortDateString()}";
|
||||
@@ -126,7 +117,7 @@ namespace BeWo.ViewModel
|
||||
if (this.AreDifferent(this._GkvAbrechnungOid, value))
|
||||
{
|
||||
this._GkvAbrechnungOid = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GkvAbrechnungOid, value), nameof(GkvAbrechnungOid));
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Oid, value), nameof(GkvAbrechnungOid));
|
||||
this.FirePropertyChanged(nameof(GkvAbrechnungOid));
|
||||
}
|
||||
}
|
||||
@@ -140,7 +131,7 @@ namespace BeWo.ViewModel
|
||||
if (this.AreDifferent(this._GkvAbrechnungVersion, value))
|
||||
{
|
||||
this._GkvAbrechnungVersion = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GkvAbrechnungVersion, value), nameof(GkvAbrechnungVersion));
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Version, value), nameof(GkvAbrechnungVersion));
|
||||
this.FirePropertyChanged(nameof(GkvAbrechnungVersion));
|
||||
}
|
||||
}
|
||||
@@ -233,13 +224,13 @@ namespace BeWo.ViewModel
|
||||
get { return _InvoiceBases; }
|
||||
set { _InvoiceBases = value; }
|
||||
}
|
||||
public List<GkvTransferProtokollDC> TransferProtokolle
|
||||
public List<GkvTransferProtokollDC> Protokolle
|
||||
{
|
||||
get { return _TransferProtokolle; }
|
||||
get { return _Protokolle; }
|
||||
set
|
||||
{
|
||||
_TransferProtokolle = value;
|
||||
FirePropertyChanged(nameof(TransferProtokolle));
|
||||
_Protokolle = value;
|
||||
FirePropertyChanged(nameof(Protokolle));
|
||||
FirePropertyChanged(nameof(GkvState));
|
||||
FirePropertyChanged(nameof(Fehlermeldung));
|
||||
FirePropertyChanged(nameof(LastTransferDateTime));
|
||||
@@ -287,7 +278,6 @@ namespace BeWo.ViewModel
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
public IGkvTransferProtokoll LastTransferProtokoll => TransferProtokolle?.LastOrDefault();
|
||||
|
||||
public string RecipientString
|
||||
{
|
||||
@@ -352,17 +342,20 @@ namespace BeWo.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<IGkvTransferProtokoll> TransferProtokolle => Protokolle;
|
||||
public IGkvTransferProtokoll LastTransferProtokoll => Protokolle?.LastOrDefault();
|
||||
|
||||
public bool IsFormularEnabled => LastTransferProtokoll is object ;
|
||||
public bool IsUrbelegeEditEnabled => LastTransferProtokoll is object;
|
||||
public bool IsBezahltEditEnabled => UrbelegeGesendet;
|
||||
|
||||
public GkvAbrechnungReportRequest ReportRequest
|
||||
=> new GkvAbrechnungReportRequest(DataContract.GkvAbrechnungOid.Value, false);
|
||||
=> new GkvAbrechnungReportRequest(DataContract.Oid.Value, false);
|
||||
public string ReportLink
|
||||
=> BeWoApp.SiteOfOrigin + "/ReportView.aspx" + ReportRequest.GetUrlPathString();
|
||||
|
||||
public GkvAbrechnungReportRequest ReportRequest2
|
||||
=> new GkvAbrechnungReportRequest(DataContract.GkvAbrechnungOid.Value, true);
|
||||
=> new GkvAbrechnungReportRequest(DataContract.Oid.Value, true);
|
||||
public string ReportLink2
|
||||
=> BeWoApp.SiteOfOrigin + "/ReportView.aspx" + ReportRequest2.GetUrlPathString();
|
||||
|
||||
@@ -371,9 +364,9 @@ namespace BeWo.ViewModel
|
||||
public bool IsReady2Create
|
||||
=> InvoiceBases?.Where(x => x.IsChecked).Any() ?? false;
|
||||
|
||||
public void UpdateByDataContract(GkvAbrechnungDC pDataContract)
|
||||
public override void UpdateByDataContract(GkvAbrechnungDC pDataContract)
|
||||
{
|
||||
GkvAbrechnungVersion = pDataContract.GkvAbrechnungVersion;
|
||||
GkvAbrechnungVersion = pDataContract.Version;
|
||||
|
||||
Notice = pDataContract.Notice;
|
||||
|
||||
@@ -393,8 +386,8 @@ namespace BeWo.ViewModel
|
||||
|
||||
_ErstelltAm = pDataContract.ErstelltAm;
|
||||
|
||||
_GkvAbrechnungOid = pDataContract.GkvAbrechnungOid;
|
||||
_GkvAbrechnungVersion = pDataContract.GkvAbrechnungVersion;
|
||||
_GkvAbrechnungOid = pDataContract.Oid;
|
||||
_GkvAbrechnungVersion = pDataContract.Version;
|
||||
|
||||
_Notice = pDataContract.Notice;
|
||||
|
||||
@@ -411,7 +404,7 @@ namespace BeWo.ViewModel
|
||||
|
||||
if (pDataContract.TransferProtokolle != null)
|
||||
{
|
||||
_TransferProtokolle = new List<GkvTransferProtokollDC>(pDataContract.TransferProtokolle);
|
||||
_Protokolle = new List<GkvTransferProtokollDC>(pDataContract.Protokolle);
|
||||
}
|
||||
|
||||
_Organisation = pDataContract.Organisation;
|
||||
@@ -426,8 +419,8 @@ namespace BeWo.ViewModel
|
||||
|
||||
pDataContract.ErstelltAm = _ErstelltAm;
|
||||
|
||||
pDataContract.GkvAbrechnungOid = _GkvAbrechnungOid;
|
||||
pDataContract.GkvAbrechnungVersion = _GkvAbrechnungVersion;
|
||||
pDataContract.Oid = _GkvAbrechnungOid;
|
||||
pDataContract.Version = _GkvAbrechnungVersion;
|
||||
|
||||
pDataContract.Notice = _Notice;
|
||||
pDataContract.Betrag = _Betrag;
|
||||
@@ -441,97 +434,9 @@ namespace BeWo.ViewModel
|
||||
pDataContract.InvoiceBases = _InvoiceBases2.Where(x => x.IsChecked).Select(vm => vm.CommitToDataContract()).ToList();
|
||||
|
||||
pDataContract.Organisation = _Organisation;
|
||||
pDataContract.TransferProtokolle = _TransferProtokolle?.ToList();
|
||||
pDataContract.Protokolle = _Protokolle?.ToList();
|
||||
|
||||
return pDataContract;
|
||||
}
|
||||
|
||||
public void SendGkvAbrechnung()
|
||||
{
|
||||
var req = new GkvAbrechnungSendRequestDC();
|
||||
|
||||
req.GkvAbrechnungOid = GkvAbrechnungOid.Value;
|
||||
|
||||
ServiceFacade.DoGkvAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
|
||||
cb => Application.Current.Dispatch(() => UpdateBySendResponse(cb)), true);
|
||||
}
|
||||
public void UpdateBySendResponse(GkvAbrechnungSendResponseDC cb)
|
||||
{
|
||||
var dc = cb.GkvAbrechnungDC;
|
||||
|
||||
if (dc is null)
|
||||
{
|
||||
MessageBox.Show(Application.Current.MainWindow, cb.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
GkvAbrechnungVersion = dc.GkvAbrechnungVersion;
|
||||
TransferProtokolle = dc.TransferProtokolle.ToList();
|
||||
|
||||
IsReady2Send = dc.IsReady2Send;
|
||||
SendTooltip = dc.SendTooltip;
|
||||
|
||||
var protokoll = cb.TransferProtokoll;
|
||||
|
||||
if (protokoll.ResultType == GkvTransferResultType.FailSoft)
|
||||
{
|
||||
MessageBox.Show(Application.Current.MainWindow, protokoll.Fehlernachricht, protokoll.Fehlertitel);
|
||||
}
|
||||
else if (protokoll.ResultType == GkvTransferResultType.FailFatal)
|
||||
{
|
||||
BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(Application.Current.MainWindow, "Ihre Sendung wurde korrekt übertragen");
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasAnyInvoiceBases()
|
||||
{
|
||||
return InvoiceBases2 is object && InvoiceBases2.Any();
|
||||
}
|
||||
|
||||
public void CheckAllInvoiceBases()
|
||||
{
|
||||
if (!HasAnyInvoiceBases())
|
||||
return;
|
||||
|
||||
foreach (var invoice_base in InvoiceBases2)
|
||||
{
|
||||
invoice_base.IsChecked = true;
|
||||
}
|
||||
}
|
||||
|
||||
internal void UncheckAllInvoicesBases()
|
||||
{
|
||||
if (!HasAnyInvoiceBases())
|
||||
return;
|
||||
|
||||
foreach (var invoice_base in InvoiceBases2)
|
||||
{
|
||||
invoice_base.IsChecked = false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasAnySelectedInvoiceBases()
|
||||
{
|
||||
return HasAnyInvoiceBases() && getSelectedInvoiceBases().Any();
|
||||
}
|
||||
|
||||
internal void PrintSelectedInvoiceBases()
|
||||
{
|
||||
var selected = new List<long>(getSelectedInvoiceBases());
|
||||
|
||||
if (!selected.Any())
|
||||
return;
|
||||
|
||||
ServiceFacade.DoReportServiceAsync(s => s.CreateInvoiceListReport(selected), ms => BeWoApp.MainControl.Dispatch(() => BeWoUtils.ShowReportWindow(ms, "Rechnungen")));
|
||||
}
|
||||
|
||||
private IEnumerable<long> getSelectedInvoiceBases()
|
||||
{
|
||||
return InvoiceBases2.Where(x => x.IsChecked).Select(x => x.DataContract.InvoiceBaseOid.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -921,6 +921,8 @@ namespace BeWo.ViewModel
|
||||
public string SenderTown => DataContract.SenderTown;
|
||||
public string SenderPostCode => DataContract.SenderPostCode;
|
||||
|
||||
public IList<IInvoiceItem> IInvoiceItems => throw new NotImplementedException();
|
||||
|
||||
protected override void InitByDataContract(InvoiceBaseDC pDataContract)
|
||||
{
|
||||
_SupportConceptOid = pDataContract.SupportConceptOid;
|
||||
|
||||
521
BeWo/ViewModel/Light/GkvAbrechnungLightVM.cs
Normal file
521
BeWo/ViewModel/Light/GkvAbrechnungLightVM.cs
Normal file
@@ -0,0 +1,521 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Threading;
|
||||
using BeWo.Core;
|
||||
using BeWo.ServiceProxy;
|
||||
using BeWo.Validation;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.Compact;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using BS.Shared.DataContracts.Light;
|
||||
using BS.Shared.Extensions;
|
||||
using BS.Shared.Interface;
|
||||
using BS.Shared.ReportRequests;
|
||||
using DevExpress.Mvvm;
|
||||
using DevExpress.Xpf.Core;
|
||||
|
||||
namespace BeWo.ViewModel.Light
|
||||
{
|
||||
public class GkvAbrechnungLightVM : AbstractDCMapperVM<GkvAbrechnungLightDC>, IGkvAbrechnung
|
||||
{
|
||||
public static string PropertyName_AbrechnungsZeitraumStart = "AbrechnungsZeitraumStart";
|
||||
public static string PropertyName_AbrechnungsZeitraumEnde = "AbrechnungsZeitraumEnde";
|
||||
|
||||
public static string PropertyName_ErstelltAm = "ErstelltAm";
|
||||
|
||||
private long _Oid;
|
||||
private long _Version;
|
||||
private string _Notice;
|
||||
|
||||
private long _OrganisationOid;
|
||||
private string _OrganisationName;
|
||||
|
||||
private DateTime? _AbrechnungsZeitraumStart;
|
||||
private DateTime? _AbrechnungsZeitraumEnde;
|
||||
|
||||
private DateTime _ErstelltAm;
|
||||
|
||||
private decimal _Betrag;
|
||||
private bool _Bezahlt;
|
||||
private bool _UrbelegeGesendet;
|
||||
private GkvVerfahrensstufe _Verfahrensstufe;
|
||||
|
||||
internal bool _IsChecked;
|
||||
|
||||
private bool _IsReady2Send;
|
||||
private string _SendTooltip;
|
||||
|
||||
private List<GkvTransferProtokollLightDC> _Protokolle;
|
||||
|
||||
public GkvAbrechnungLightVM(GkvAbrechnungLightDC pDC) : base(pDC, false)
|
||||
{
|
||||
InvoiceBases = new BindingList<InvoiceBaseLightVM>();
|
||||
|
||||
CheckAllInvoiceBasesCommand = new DelegateCommand(CheckAllInvoiceBases, HasAnyInvoiceBases);
|
||||
UncheckAllInvoiceBasesCommand = new DelegateCommand(UncheckAllInvoicesBases, HasAnyInvoiceBases);
|
||||
PrintSelectedInvoiceBasesCommand = new DelegateCommand(PrintSelectedInvoiceBases, HasAnySelectedInvoiceBases);
|
||||
}
|
||||
|
||||
public DelegateCommand CheckAllInvoiceBasesCommand { get; set; }
|
||||
public DelegateCommand UncheckAllInvoiceBasesCommand { get; set; }
|
||||
public DelegateCommand PrintSelectedInvoiceBasesCommand { get; set; }
|
||||
|
||||
#region
|
||||
|
||||
public string AbrechnungsZeitraum => $"{AbrechnungsZeitraumStart.Value.ToShortDateString()} - {AbrechnungsZeitraumEnde.Value.ToShortDateString()}";
|
||||
|
||||
public DateTime? AbrechnungsZeitraumStart
|
||||
{
|
||||
get { return this._AbrechnungsZeitraumStart; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._AbrechnungsZeitraumStart, value))
|
||||
{
|
||||
this._AbrechnungsZeitraumStart = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AbrechnungsZeitraumStart, value), PropertyName_AbrechnungsZeitraumStart);
|
||||
this.FirePropertyChanged(PropertyName_AbrechnungsZeitraumStart);
|
||||
|
||||
// RE893748923
|
||||
// var day = value.Value.Day;
|
||||
// AbrechnungsZeitraumEnde = value.Value.AddDays(1 - day).AddMonths(1).AddDays(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
public DateTime? AbrechnungsZeitraumEnde
|
||||
{
|
||||
get { return this._AbrechnungsZeitraumEnde; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._AbrechnungsZeitraumEnde, value))
|
||||
{
|
||||
this._AbrechnungsZeitraumEnde = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AbrechnungsZeitraumEnde, value), PropertyName_AbrechnungsZeitraumEnde);
|
||||
this.FirePropertyChanged(PropertyName_AbrechnungsZeitraumEnde);
|
||||
}
|
||||
}
|
||||
}
|
||||
public DateTime ErstelltAm
|
||||
{
|
||||
get { return this._ErstelltAm; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_ErstelltAm, value))
|
||||
{
|
||||
_ErstelltAm = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.ErstelltAm, value), nameof(ErstelltAm));
|
||||
FirePropertyChanged(nameof(ErstelltAm));
|
||||
FirePropertyChanged(nameof(ErstelltAmDate));
|
||||
}
|
||||
}
|
||||
}
|
||||
public DateTime ErstelltAmDate => ErstelltAm.Date;
|
||||
public long Oid
|
||||
{
|
||||
get { return this._Oid; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._Oid, value))
|
||||
{
|
||||
this._Oid = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Oid, value), nameof(Oid));
|
||||
this.FirePropertyChanged(nameof(Oid));
|
||||
}
|
||||
}
|
||||
}
|
||||
public long Version
|
||||
{
|
||||
get { return this._Oid; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._Version, value))
|
||||
{
|
||||
this._Version = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Version, value), nameof(Version));
|
||||
this.FirePropertyChanged(nameof(Version));
|
||||
}
|
||||
}
|
||||
}
|
||||
public string Notice
|
||||
{
|
||||
get { return this._Notice; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._Notice, value))
|
||||
{
|
||||
this._Notice = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Notice, value), nameof(Notice));
|
||||
this.FirePropertyChanged(nameof(Notice));
|
||||
}
|
||||
}
|
||||
}
|
||||
public decimal Betrag
|
||||
{
|
||||
get { return this._Betrag; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._Betrag, value))
|
||||
{
|
||||
this._Betrag = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Betrag, value), nameof(Betrag));
|
||||
this.FirePropertyChanged(nameof(Betrag));
|
||||
}
|
||||
}
|
||||
}
|
||||
public bool Bezahlt
|
||||
{
|
||||
get { return _Bezahlt; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(this._Bezahlt, value))
|
||||
{
|
||||
_Bezahlt = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.Bezahlt, value), nameof(Bezahlt));
|
||||
FirePropertyChanged(nameof(Bezahlt));
|
||||
FirePropertyChanged(nameof(GkvState));
|
||||
FirePropertyChanged(nameof(Fehlermeldung));
|
||||
}
|
||||
}
|
||||
}
|
||||
public bool UrbelegeGesendet
|
||||
{
|
||||
get { return _UrbelegeGesendet; }
|
||||
|
||||
set
|
||||
{
|
||||
if (!AreDifferent(_UrbelegeGesendet, value))
|
||||
return;
|
||||
_UrbelegeGesendet = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.UrbelegeGesendet, value), nameof(UrbelegeGesendet));
|
||||
FirePropertyChanged(nameof(UrbelegeGesendet));
|
||||
FirePropertyChanged(nameof(GkvState));
|
||||
FirePropertyChanged(nameof(IsBezahltEditEnabled));
|
||||
}
|
||||
}
|
||||
public GkvState GkvState
|
||||
{
|
||||
get { return this.GetState(); }
|
||||
}
|
||||
|
||||
public bool IsChecked
|
||||
{
|
||||
get { return _IsChecked; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_IsChecked, value))
|
||||
{
|
||||
_IsChecked = value;
|
||||
FirePropertyChanged(nameof(IsChecked));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public BindingList<InvoiceBaseLightVM> InvoiceBases { get; set; }
|
||||
|
||||
public List<GkvTransferProtokollLightDC> Protokolle
|
||||
{
|
||||
get { return _Protokolle; }
|
||||
set
|
||||
{
|
||||
_Protokolle = value;
|
||||
FirePropertyChanged(nameof(Protokolle));
|
||||
FirePropertyChanged(nameof(GkvState));
|
||||
FirePropertyChanged(nameof(Fehlermeldung));
|
||||
FirePropertyChanged(nameof(LastTransferDateTime));
|
||||
}
|
||||
}
|
||||
public long OrganisationOid
|
||||
{
|
||||
get { return _OrganisationOid; }
|
||||
|
||||
set
|
||||
{
|
||||
if (!AreDifferent(_OrganisationOid, value))
|
||||
return;
|
||||
|
||||
_OrganisationOid = value;
|
||||
StoreDirtyInformation(this.AreDifferent(this.DataContract.OrganisationOid, value), nameof(OrganisationOid));
|
||||
FirePropertyChanged(nameof(OrganisationOid));
|
||||
}
|
||||
}
|
||||
public string OrganisationName
|
||||
{
|
||||
get { return _OrganisationName; }
|
||||
|
||||
set
|
||||
{
|
||||
if (!AreDifferent(_OrganisationName, value))
|
||||
return;
|
||||
|
||||
_OrganisationName = value;
|
||||
StoreDirtyInformation(this.AreDifferent(this.DataContract.OrganisationName, value), nameof(OrganisationName));
|
||||
FirePropertyChanged(nameof(OrganisationName));
|
||||
}
|
||||
}
|
||||
public GkvVerfahrensstufe Verfahrensstufe
|
||||
{
|
||||
get { return this._Verfahrensstufe; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._Verfahrensstufe, value))
|
||||
{
|
||||
this._Verfahrensstufe = value;
|
||||
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Verfahrensstufe, value), nameof(Verfahrensstufe));
|
||||
this.FirePropertyChanged(nameof(Verfahrensstufe));
|
||||
}
|
||||
}
|
||||
}
|
||||
public int VerfahrensstufeInt
|
||||
{
|
||||
get { return (int)Verfahrensstufe; }
|
||||
|
||||
set
|
||||
{
|
||||
if (!AreDifferent(this.VerfahrensstufeInt, value))
|
||||
return;
|
||||
|
||||
Verfahrensstufe = (GkvVerfahrensstufe)value;
|
||||
//FirePropertyChanged(nameof(VerfahrensstufeInt));
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public string RecipientString
|
||||
{
|
||||
get
|
||||
{
|
||||
if (InvoiceBases != null && InvoiceBases.Any())
|
||||
{
|
||||
return InvoiceBases.First().RecipientOrganisation;
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
public string Fehlermeldung
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!(LastTransferProtokoll is GkvTransferProtokollDC last))
|
||||
return null;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(last.Fehlernachricht))
|
||||
return null;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(last.Fehlertitel))
|
||||
return last.Fehlernachricht;
|
||||
|
||||
return $"{last.Fehlertitel}: {last.Fehlernachricht}";
|
||||
}
|
||||
}
|
||||
public DateTime? LastTransferDateTime
|
||||
{
|
||||
get
|
||||
{
|
||||
if (LastTransferProtokoll is GkvTransferProtokollDC last)
|
||||
return last.ErstelltAm?.Date;
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public bool IsReady2Send
|
||||
{
|
||||
get { return _IsReady2Send; }
|
||||
set
|
||||
{
|
||||
if (!AreDifferent(IsReady2Send, value))
|
||||
return;
|
||||
|
||||
_IsReady2Send = value;
|
||||
FirePropertyChanged(nameof(IsReady2Send));
|
||||
}
|
||||
}
|
||||
public string SendTooltip
|
||||
{
|
||||
get { return _SendTooltip; }
|
||||
set
|
||||
{
|
||||
if (!AreDifferent(SendTooltip, value))
|
||||
return;
|
||||
|
||||
_SendTooltip = value;
|
||||
FirePropertyChanged(nameof(SendTooltip));
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<IGkvTransferProtokoll> TransferProtokolle => Protokolle;
|
||||
public IGkvTransferProtokoll LastTransferProtokoll => Protokolle?.LastOrDefault();
|
||||
|
||||
public bool IsFormularEnabled => LastTransferProtokoll is object ;
|
||||
public bool IsUrbelegeEditEnabled => LastTransferProtokoll is object;
|
||||
public bool IsBezahltEditEnabled => UrbelegeGesendet;
|
||||
|
||||
public GkvAbrechnungReportRequest ReportRequest
|
||||
=> new GkvAbrechnungReportRequest(DataContract.Oid, false);
|
||||
public string ReportLink
|
||||
=> BeWoApp.SiteOfOrigin + "/ReportView.aspx" + ReportRequest.GetUrlPathString();
|
||||
|
||||
public GkvAbrechnungReportRequest ReportRequest2
|
||||
=> new GkvAbrechnungReportRequest(DataContract.Oid, true);
|
||||
public string ReportLink2
|
||||
=> BeWoApp.SiteOfOrigin + "/ReportView.aspx" + ReportRequest2.GetUrlPathString();
|
||||
|
||||
public void FirePropertyIsReady2CreateChanged()
|
||||
=> FirePropertyChanged(nameof(IsReady2Create));
|
||||
public bool IsReady2Create
|
||||
=> InvoiceBases?.Where(x => x.IsChecked).Any() ?? false;
|
||||
|
||||
public override void UpdateByDataContract(GkvAbrechnungLightDC pDataContract)
|
||||
{
|
||||
Version = pDataContract.Version;
|
||||
|
||||
Notice = pDataContract.Notice;
|
||||
|
||||
Betrag = pDataContract.Betrag;
|
||||
Bezahlt = pDataContract.Bezahlt;
|
||||
|
||||
if (pDataContract.InvoiceBases != null)
|
||||
{
|
||||
var l = pDataContract.InvoiceBases.Select(x => new InvoiceBaseLightVM(x, true)).ToList();
|
||||
InvoiceBases = new BindingList<InvoiceBaseLightVM>(l);
|
||||
}
|
||||
}
|
||||
protected override void InitByDataContract(GkvAbrechnungLightDC pDataContract)
|
||||
{
|
||||
_AbrechnungsZeitraumStart = pDataContract.AbrechnungsZeitraumStart;
|
||||
_AbrechnungsZeitraumEnde = pDataContract.AbrechnungsZeitraumEnde;
|
||||
|
||||
_ErstelltAm = pDataContract.ErstelltAm;
|
||||
|
||||
_Oid = pDataContract.Oid;
|
||||
_Version = pDataContract.Version;
|
||||
|
||||
_Notice = pDataContract.Notice;
|
||||
|
||||
_Betrag = pDataContract.Betrag;
|
||||
_Bezahlt = pDataContract.Bezahlt;
|
||||
_UrbelegeGesendet = pDataContract.UrbelegeGesendet;
|
||||
_Verfahrensstufe = pDataContract.Verfahrensstufe;
|
||||
|
||||
if (pDataContract.InvoiceBases != null)
|
||||
{
|
||||
var l = pDataContract.InvoiceBases.Select(x => new InvoiceBaseLightVM(x, true)).ToList();
|
||||
InvoiceBases = new BindingList<InvoiceBaseLightVM>(l);
|
||||
}
|
||||
|
||||
if (pDataContract.Protokolle != null)
|
||||
{
|
||||
_Protokolle = new List<GkvTransferProtokollLightDC>(pDataContract.Protokolle);
|
||||
}
|
||||
|
||||
_OrganisationOid = pDataContract.OrganisationOid;
|
||||
_OrganisationName = pDataContract.OrganisationName;
|
||||
|
||||
_IsReady2Send = pDataContract.IsReady2Send;
|
||||
_SendTooltip = pDataContract.SendTooltip;
|
||||
}
|
||||
protected override GkvAbrechnungLightDC MapToDataContract(GkvAbrechnungLightDC pDataContract, bool doCommit)
|
||||
{
|
||||
pDataContract.Version = _Version;
|
||||
|
||||
pDataContract.Notice = _Notice;
|
||||
pDataContract.Betrag = _Betrag;
|
||||
pDataContract.Bezahlt = _Bezahlt;
|
||||
|
||||
return pDataContract;
|
||||
}
|
||||
|
||||
public void UpdateBySendResponse(GkvAbrechnungSendResponseDC cb)
|
||||
{
|
||||
var dc = cb.GkvAbrechnungDC;
|
||||
|
||||
if (dc is null)
|
||||
{
|
||||
MessageBox.Show(Application.Current.MainWindow, cb.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
Version = dc.Version;
|
||||
Protokolle = dc.Protokolle.ToList();
|
||||
|
||||
IsReady2Send = dc.IsReady2Send;
|
||||
SendTooltip = dc.SendTooltip;
|
||||
|
||||
var protokoll = cb.TransferProtokoll;
|
||||
|
||||
if (protokoll.ResultType == GkvTransferResultType.FailSoft)
|
||||
{
|
||||
MessageBox.Show(Application.Current.MainWindow, protokoll.Fehlernachricht, protokoll.Fehlertitel);
|
||||
}
|
||||
else if (protokoll.ResultType == GkvTransferResultType.FailFatal)
|
||||
{
|
||||
BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(Application.Current.MainWindow, "Ihre Sendung wurde korrekt übertragen");
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasAnyInvoiceBases()
|
||||
{
|
||||
return InvoiceBases is object && InvoiceBases.Any();
|
||||
}
|
||||
|
||||
public void CheckAllInvoiceBases()
|
||||
{
|
||||
if (!HasAnyInvoiceBases())
|
||||
return;
|
||||
|
||||
foreach (var invoice_base in InvoiceBases)
|
||||
{
|
||||
invoice_base.IsChecked = true;
|
||||
}
|
||||
}
|
||||
|
||||
internal void UncheckAllInvoicesBases()
|
||||
{
|
||||
if (!HasAnyInvoiceBases())
|
||||
return;
|
||||
|
||||
foreach (var invoice_base in InvoiceBases)
|
||||
{
|
||||
invoice_base.IsChecked = false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasAnySelectedInvoiceBases()
|
||||
{
|
||||
return HasAnyInvoiceBases() && getSelectedInvoiceBases().Any();
|
||||
}
|
||||
|
||||
internal void PrintSelectedInvoiceBases()
|
||||
{
|
||||
var selected = new List<long>(getSelectedInvoiceBases());
|
||||
|
||||
if (!selected.Any())
|
||||
return;
|
||||
|
||||
ServiceFacade.DoReportServiceAsync(s => s.CreateInvoiceListReport(selected), ms => BeWoApp.MainControl.Dispatch(() => BeWoUtils.ShowReportWindow(ms, "Rechnungen")));
|
||||
}
|
||||
|
||||
private IEnumerable<long> getSelectedInvoiceBases()
|
||||
{
|
||||
return InvoiceBases.Where(x => x.IsChecked).Select(x => x.DataContract.Oid.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
312
BeWo/ViewModel/Light/InvoiceBaseLightVM.cs
Normal file
312
BeWo/ViewModel/Light/InvoiceBaseLightVM.cs
Normal file
@@ -0,0 +1,312 @@
|
||||
using BeWo.Validation;
|
||||
using BeWo.ViewModel.ListViewModel;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared;
|
||||
using BS.Shared.DataContracts.Light;
|
||||
using BS.Shared.Interface;
|
||||
using BS.Shared.Translation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using BS.Shared.Core;
|
||||
|
||||
namespace BeWo.ViewModel.Light
|
||||
{
|
||||
public class InvoiceBaseLightVM : AbstractDCMapperVM<InvoiceBaseLightDC>
|
||||
{
|
||||
private readonly Dictionary<InvoiceType, string> _TypeTranslation = new Dictionary<InvoiceType, string>
|
||||
{
|
||||
{
|
||||
InvoiceType.CustomerEquity, Translator.Translate("Eigenanteil")
|
||||
},
|
||||
{
|
||||
InvoiceType.General, Translator.Translate("Allgemein")
|
||||
},
|
||||
{
|
||||
InvoiceType.Settlement, Translator.Translate("Spitzabrechnung")
|
||||
},
|
||||
{
|
||||
InvoiceType.Service, Translator.Translate("Rechnung")
|
||||
}
|
||||
};
|
||||
|
||||
private DateTime? _AccountingPeriodEnd;
|
||||
private DateTime? _AccountingPeriodStart;
|
||||
private string _CustomerName = string.Empty;
|
||||
private string _RecipientOrganisation = string.Empty;
|
||||
private DateTime? _InvoiceDate;
|
||||
private string _InvoiceNumber = string.Empty;
|
||||
private string _InvoiceTypeText = string.Empty;
|
||||
private decimal? _TotalAmount;
|
||||
internal bool _IsPaid;
|
||||
internal bool _IsChecked;
|
||||
private string _Notice = string.Empty;
|
||||
|
||||
public InvoiceBaseLightVM(InvoiceBaseLightDC pDC, bool isChecked = false)
|
||||
: base(pDC, false)
|
||||
{
|
||||
_IsChecked = isChecked;
|
||||
}
|
||||
|
||||
public bool IsGkvValid { get; private set; }
|
||||
public string IsGkvValidError { get; private set; }
|
||||
public bool? IsAlreadyInActiveGkvAbrechnung { get; private set; }
|
||||
|
||||
public bool IsChecked
|
||||
{
|
||||
get { return _IsChecked; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_IsChecked, value))
|
||||
{
|
||||
_IsChecked = value;
|
||||
FirePropertyChanged("IsChecked");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
|
||||
public DateTime? AccountingPeriodEnd
|
||||
{
|
||||
get { return _AccountingPeriodEnd; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_AccountingPeriodEnd, value))
|
||||
{
|
||||
_AccountingPeriodEnd = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.AccountingPeriodEnd, value), nameof(AccountingPeriodEnd));
|
||||
FirePropertyChanged(nameof(AccountingPeriodEnd));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
|
||||
public DateTime? AccountingPeriodStart
|
||||
{
|
||||
get { return _AccountingPeriodStart; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_AccountingPeriodStart, value))
|
||||
{
|
||||
_AccountingPeriodStart = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.AccountingPeriodStart, value), nameof(AccountingPeriodStart));
|
||||
FirePropertyChanged(nameof(AccountingPeriodStart));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string AccountingPeriodString
|
||||
{
|
||||
get
|
||||
{
|
||||
return _AccountingPeriodEnd.HasValue && _AccountingPeriodStart.HasValue
|
||||
? _AccountingPeriodStart.Value.ToShortDateString() + " - " + _AccountingPeriodEnd.Value.ToShortDateString()
|
||||
: string.Empty;
|
||||
}
|
||||
|
||||
set { }
|
||||
}
|
||||
|
||||
public string CustomerName
|
||||
{
|
||||
get { return _CustomerName; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_CustomerName, value))
|
||||
{
|
||||
_CustomerName = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.CustomerName, value), nameof(CustomerName));
|
||||
FirePropertyChanged(nameof(CustomerName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
|
||||
public DateTime? InvoiceDate
|
||||
{
|
||||
get { return _InvoiceDate; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_InvoiceDate, value))
|
||||
{
|
||||
_InvoiceDate = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.InvoiceDate, value), nameof(InvoiceDate));
|
||||
FirePropertyChanged(nameof(InvoiceDate));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string InvoiceNumber
|
||||
{
|
||||
get { return _InvoiceNumber; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_InvoiceNumber, value))
|
||||
{
|
||||
_InvoiceNumber = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.InvoiceNumber, value), nameof(InvoiceNumber));
|
||||
FirePropertyChanged(nameof(InvoiceNumber));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string InvoiceTypeText
|
||||
{
|
||||
get { return _InvoiceTypeText; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(InvoiceTypeText, value))
|
||||
{
|
||||
_InvoiceTypeText = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.InvoiceTypeText, value), nameof(InvoiceTypeText));
|
||||
FirePropertyChanged(nameof(InvoiceTypeText));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsPaid
|
||||
{
|
||||
get { return _IsPaid; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_IsPaid, value))
|
||||
{
|
||||
_IsPaid = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.IsPaid, value), nameof(IsPaid));
|
||||
FirePropertyChanged(nameof(IsPaid));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string Notice
|
||||
{
|
||||
get { return _Notice; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_Notice, value))
|
||||
{
|
||||
_Notice = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.Notice, value), nameof(Notice));
|
||||
FirePropertyChanged(nameof(Notice));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string RecipientOrganisation
|
||||
{
|
||||
get { return _RecipientOrganisation; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_RecipientOrganisation, value))
|
||||
{
|
||||
_RecipientOrganisation = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.RecipientOrganisation, value), nameof(RecipientOrganisation));
|
||||
FirePropertyChanged(nameof(RecipientOrganisation));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string ReportLink
|
||||
{
|
||||
get
|
||||
{
|
||||
string url = string.Empty;
|
||||
|
||||
switch (DataContract.Type)
|
||||
{
|
||||
case InvoiceType.CustomerEquity:
|
||||
url = BeWoApp.SiteOfOrigin + "/ReportView.aspx?ioid=" + DataContract.Oid + "&type=CustomerInvoice";
|
||||
break;
|
||||
case InvoiceType.General:
|
||||
url = BeWoApp.SiteOfOrigin + "/ReportView.aspx?ioid=" + DataContract.Oid + "&type=CustomerInvoice";
|
||||
break;
|
||||
case InvoiceType.Settlement:
|
||||
url = BeWoApp.SiteOfOrigin + "/ReportView.aspx?ibid=" + DataContract.Oid + "&type=" + Utils.EnumName(ReportTypes.Settlement);
|
||||
break;
|
||||
case InvoiceType.Service:
|
||||
url = BeWoApp.SiteOfOrigin + "/ReportView.aspx?ibid=" + DataContract.Oid + "&type=" + Utils.EnumName(ReportTypes.ServiceInvoice);
|
||||
break;
|
||||
default:
|
||||
url = string.Empty;
|
||||
break;
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
public decimal? TotalAmount
|
||||
{
|
||||
get { return _TotalAmount; }
|
||||
|
||||
set
|
||||
{
|
||||
if (AreDifferent(_TotalAmount, value))
|
||||
{
|
||||
_TotalAmount = value;
|
||||
StoreDirtyInformation(AreDifferent(DataContract.TotalAmount, value), nameof(TotalAmount));
|
||||
FirePropertyChanged(nameof(TotalAmount));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string TypeString
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!String.IsNullOrEmpty(DataContract.InvoiceTypeText))
|
||||
{
|
||||
return DataContract.InvoiceTypeText;
|
||||
}
|
||||
return _TypeTranslation[DataContract.Type];
|
||||
}
|
||||
}
|
||||
|
||||
public String BackgroundColor
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
protected override void InitByDataContract(InvoiceBaseLightDC pDataContract)
|
||||
{
|
||||
// private DateTime? _AccountingPeriodEnd;
|
||||
//private DateTime? _AccountingPeriodStart;
|
||||
//private string _CustomerName = string.Empty;
|
||||
//private string _RecipientOrganisation = string.Empty;
|
||||
//private string InvoiceTypeText = string.Empty;
|
||||
//private DateTime _InvoiceDate;
|
||||
_AccountingPeriodStart = pDataContract.AccountingPeriodStart;
|
||||
_AccountingPeriodEnd = pDataContract.AccountingPeriodEnd;
|
||||
_CustomerName = pDataContract.CustomerName;
|
||||
_RecipientOrganisation = pDataContract.RecipientOrganisation;
|
||||
_IsPaid = pDataContract.IsPaid;
|
||||
_InvoiceTypeText = pDataContract.InvoiceTypeText;
|
||||
_InvoiceNumber = pDataContract.InvoiceNumber;
|
||||
_InvoiceDate = pDataContract.InvoiceDate;
|
||||
_AccountingPeriodEnd = pDataContract.AccountingPeriodEnd;
|
||||
_AccountingPeriodStart = pDataContract.AccountingPeriodStart;
|
||||
_Notice = pDataContract.Notice;
|
||||
_TotalAmount = pDataContract.TotalAmount;
|
||||
}
|
||||
|
||||
protected override InvoiceBaseLightDC MapToDataContract(InvoiceBaseLightDC pDataContract, bool doCommit)
|
||||
{
|
||||
pDataContract.IsPaid = _IsPaid;
|
||||
pDataContract.Notice = _Notice;
|
||||
|
||||
return pDataContract;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -48,8 +48,8 @@ namespace BeWo.ViewModel.ListViewModel
|
||||
Models = new ObservableSortCollection<AiModelDC>();
|
||||
|
||||
SendNewMessageCommand = new DelegateCommand(SendNewMessage, () => SelectedVM is object && !string.IsNullOrWhiteSpace(MessageInput) && !IsSending);
|
||||
RequestNewConversationCommand = new DelegateCommand(RequestNewConversation, () => BeWoApp.HasLoggedOnUserRight(UserRightType.AiModuleChatAdd));
|
||||
//TestCommand = new DelegateCommand(Test);
|
||||
OpenNewConversationCommand = new DelegateCommand(OpenNewConversation, () => BeWoApp.HasLoggedOnUserRight(UserRightType.AiModuleChatAdd));
|
||||
StartConversationWithMessageCommand = new DelegateCommand(StartConversationWithMessage, () => !string.IsNullOrWhiteSpace(MessageInput) && !IsSending);
|
||||
|
||||
ReloadConfigCommand = new DelegateCommand(ReloadConfig);
|
||||
ReloadConversationsCommand = new DelegateCommand(ReloadConversations);
|
||||
@@ -60,11 +60,15 @@ namespace BeWo.ViewModel.ListViewModel
|
||||
CloneCommand = new DelegateCommand(Clone);
|
||||
|
||||
AskDeleteCommand = new DelegateCommand(AskDelete, () => BeWoApp.HasLoggedOnUserRight(UserRightType.AiModuleChatDelete) && SelectedVM is object);
|
||||
|
||||
SelectedVMChanged += (s, e) => FirePropertyChanged(nameof(IsNewConversationVisible));
|
||||
}
|
||||
|
||||
public event EventHandler SendNewMessageSuccess;
|
||||
|
||||
public DelegateCommand SendNewMessageCommand { get; set; }
|
||||
public DelegateCommand OpenNewConversationCommand { get; set; }
|
||||
public DelegateCommand StartConversationWithMessageCommand { get; set; }
|
||||
public DelegateCommand RequestNewConversationCommand { get; set; }
|
||||
public DelegateCommand TestCommand { get; set; }
|
||||
public DelegateCommand AskDeleteCommand { get; set; }
|
||||
@@ -154,26 +158,55 @@ namespace BeWo.ViewModel.ListViewModel
|
||||
FirePropertyChanged(nameof(IsSending));
|
||||
}
|
||||
}
|
||||
public bool IsNewConversationVisible => SelectedVM is null;
|
||||
|
||||
public int UIContext { get; set; }
|
||||
public long? ReferenceObjectOid { get; set; }
|
||||
public Dictionary<TableID, long[]> ContextBeWoObjects { get; set; }
|
||||
|
||||
private void RequestNewConversation()
|
||||
private void StartConversationWithMessage()
|
||||
{
|
||||
var conv = new AiConversationDC();
|
||||
StartSending();
|
||||
|
||||
conv.UIContext = UIContext;
|
||||
conv.ContextBeWoObjects = ContextBeWoObjects;
|
||||
try
|
||||
{
|
||||
var message = MessageInput;
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.CreateAiConversation(conv, Config.SelectedModel.Oid.Value), InsertConverstion);
|
||||
var conv = new AiConversationDC();
|
||||
|
||||
conv.Created = DateTime.Now;
|
||||
conv.Updated = DateTime.Now;
|
||||
conv.UIContext = UIContext;
|
||||
conv.ContextBeWoObjects = ContextBeWoObjects;
|
||||
conv.Messages = new List<AiConversationMessageDC>()
|
||||
{
|
||||
new AiConversationMessageDC()
|
||||
{
|
||||
Message = message,
|
||||
Role = AiConversationMessageRole.User
|
||||
}
|
||||
};
|
||||
|
||||
var vm = InsertConverstion(conv);
|
||||
|
||||
ServiceFacade.DoAiEnhancedServiceAsnyc(
|
||||
x => x.CreateAiConversationWithMessage(conv, Config.SelectedModel.Oid.Value, message),
|
||||
dc => UpdateConverstion(vm, dc),
|
||||
e => EndSending());
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
EndSending();
|
||||
}
|
||||
}
|
||||
private void OpenNewConversation()
|
||||
{
|
||||
SelectedVM = null;
|
||||
}
|
||||
private void SendNewMessage()
|
||||
{
|
||||
if (IsSending)
|
||||
throw new InvalidOperationException("Sendet bereits");
|
||||
StartSending();
|
||||
|
||||
IsSending = true;
|
||||
try
|
||||
{
|
||||
var conv = SelectedVM;
|
||||
@@ -201,7 +234,7 @@ namespace BeWo.ViewModel.ListViewModel
|
||||
|
||||
MessageInput = string.Empty;
|
||||
|
||||
IsSending = false;
|
||||
EndSending();
|
||||
|
||||
SendNewMessageSuccess?.Invoke(this, EventArgs.Empty);
|
||||
},
|
||||
@@ -209,15 +242,27 @@ namespace BeWo.ViewModel.ListViewModel
|
||||
{
|
||||
conv.Messages.VMList.Remove(msg_vm);
|
||||
|
||||
IsSending = false;
|
||||
EndSending();
|
||||
}
|
||||
);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
IsSending = false;
|
||||
EndSending();
|
||||
}
|
||||
}
|
||||
private void StartSending()
|
||||
{
|
||||
if (IsSending)
|
||||
throw new InvalidOperationException("Sendet bereits");
|
||||
|
||||
|
||||
IsSending = true;
|
||||
}
|
||||
private void EndSending()
|
||||
{
|
||||
if (!IsSending)
|
||||
throw new InvalidOperationException("Sendet nicht");
|
||||
|
||||
IsSending = false;
|
||||
}
|
||||
private void Test()
|
||||
{
|
||||
@@ -258,11 +303,24 @@ namespace BeWo.ViewModel.ListViewModel
|
||||
//}
|
||||
}
|
||||
|
||||
private void InsertConverstion(AiConversationDC dc)
|
||||
private AiConversationVM InsertConverstion(AiConversationDC dc)
|
||||
{
|
||||
var vm = new AiConversationVM(dc);
|
||||
VMList.Insert(0, vm);
|
||||
SelectedVM = vm;
|
||||
|
||||
return vm;
|
||||
}
|
||||
|
||||
private void UpdateConverstion(AiConversationVM vm, AiConversationDC dc)
|
||||
{
|
||||
vm.UpdateByDataContract(dc);
|
||||
|
||||
MessageInput = string.Empty;
|
||||
|
||||
EndSending();
|
||||
|
||||
SendNewMessageSuccess?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void ReloadConfig()
|
||||
@@ -431,7 +489,7 @@ namespace BeWo.ViewModel.ListViewModel
|
||||
|
||||
InitDummyConversations(10);
|
||||
|
||||
SelectedVM = conversation_vm;
|
||||
//SelectedVM = conversation_vm;
|
||||
}
|
||||
private void InitDummyConversations(int count)
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace BeWo.ViewModel.ListViewModel
|
||||
{
|
||||
AddVMCommand = new DelegateCommand(() => AddNewVMToListAndSelect(true), CanAddVM);
|
||||
|
||||
DeleteSelectedVMCommand = new DelegateCommand(() => DeleteSelectedVM($"Aktenzeichen '{SelectedVM.EigenesAktenzeichen}'"));
|
||||
DeleteSelectedVMCommand = new DelegateCommand(() => DeleteSelectedVM($"Aktenzeichen '{SelectedVM.AktenzeichenGericht}'"));
|
||||
|
||||
PermissionManageVM = BeWoApp.HasLoggedOnUserRight(BS.Shared.UserRightType.Customer_GemeinnutzigeArbeit_Manage);
|
||||
|
||||
|
||||
@@ -1,60 +1,62 @@
|
||||
using System.Collections.Generic;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
|
||||
namespace BeWo.ViewModel.ListViewModel
|
||||
{
|
||||
public class GkvAbrechnungListVM : AbstractDCListMapperVM<GkvAbrechnungDC, GkvAbrechnungVM>
|
||||
{
|
||||
public static string PropertyName_DateTimeSpanFilter = "DateTimeSpanFilter";
|
||||
|
||||
public static string PropertyName_FilterResultAmountSum = "FilterResultAmountSum";
|
||||
public static string PropertyName_FilterResultAmountNotPaidSum = "FilterResultAmountNotPaidSum";
|
||||
|
||||
private DateTimeSpan _DateTimeSpanFilter;
|
||||
|
||||
public GkvAbrechnungListVM(List<GkvAbrechnungDC> pDCList) : base(pDCList)
|
||||
{
|
||||
this.VMList.ListChanged += (s, e) => this.FirePropertyChanged(PropertyName_FilterResultAmountSum);
|
||||
this.VMList.ListChanged += (s, e) => this.FirePropertyChanged(PropertyName_FilterResultAmountNotPaidSum);
|
||||
}
|
||||
public GkvAbrechnungListVM() : this(null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public DateTimeSpan DateTimeSpanFilter
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._DateTimeSpanFilter;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._DateTimeSpanFilter, value))
|
||||
{
|
||||
this._DateTimeSpanFilter = value;
|
||||
this.FirePropertyChanged(PropertyName_DateTimeSpanFilter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal void UpdateList(IList<GkvAbrechnungDC> dcList)
|
||||
{
|
||||
VMList.Clear();
|
||||
|
||||
if (dcList is object)
|
||||
foreach (var dc in dcList)
|
||||
{
|
||||
VMList.Add(CreateVM(dc));
|
||||
}
|
||||
|
||||
FirePropertyChanged(PropertyName_FilterResultAmountSum);
|
||||
FirePropertyChanged(PropertyName_FilterResultAmountNotPaidSum);
|
||||
}
|
||||
|
||||
internal void ClearList() => UpdateList(null);
|
||||
}
|
||||
using System.Collections.Generic;
|
||||
using BeWo.ViewModel.Light;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
using BS.Shared.DataContracts.Light;
|
||||
|
||||
namespace BeWo.ViewModel.ListViewModel.Light
|
||||
{
|
||||
public class GkvAbrechnungLightListVM : AbstractDCListMapperVM<GkvAbrechnungLightDC, GkvAbrechnungLightVM>
|
||||
{
|
||||
public static string PropertyName_DateTimeSpanFilter = "DateTimeSpanFilter";
|
||||
|
||||
public static string PropertyName_FilterResultAmountSum = "FilterResultAmountSum";
|
||||
public static string PropertyName_FilterResultAmountNotPaidSum = "FilterResultAmountNotPaidSum";
|
||||
|
||||
private DateTimeSpan _DateTimeSpanFilter;
|
||||
|
||||
public GkvAbrechnungLightListVM(List<GkvAbrechnungLightDC> pDCList) : base(pDCList)
|
||||
{
|
||||
this.VMList.ListChanged += (s, e) => this.FirePropertyChanged(PropertyName_FilterResultAmountSum);
|
||||
this.VMList.ListChanged += (s, e) => this.FirePropertyChanged(PropertyName_FilterResultAmountNotPaidSum);
|
||||
}
|
||||
public GkvAbrechnungLightListVM() : this(null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public DateTimeSpan DateTimeSpanFilter
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._DateTimeSpanFilter;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(this._DateTimeSpanFilter, value))
|
||||
{
|
||||
this._DateTimeSpanFilter = value;
|
||||
this.FirePropertyChanged(PropertyName_DateTimeSpanFilter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal void UpdateList(IList<GkvAbrechnungLightDC> dcList)
|
||||
{
|
||||
VMList.Clear();
|
||||
|
||||
if (dcList is object)
|
||||
foreach (var dc in dcList)
|
||||
{
|
||||
VMList.Add(CreateVM(dc));
|
||||
}
|
||||
|
||||
FirePropertyChanged(PropertyName_FilterResultAmountSum);
|
||||
FirePropertyChanged(PropertyName_FilterResultAmountNotPaidSum);
|
||||
}
|
||||
|
||||
internal void ClearList() => UpdateList(null);
|
||||
}
|
||||
}
|
||||
@@ -168,6 +168,20 @@ namespace BeWo.ViewModel
|
||||
}
|
||||
}
|
||||
}
|
||||
public bool ShowServicesOverviewHalfOrWholeMonth
|
||||
{
|
||||
get { return BeWoApp.AppSettings.ShowServicesOverviewHalfOrWholeMonth; }
|
||||
|
||||
set
|
||||
{
|
||||
if (this.AreDifferent(BeWoApp.AppSettings.ShowServicesOverviewHalfOrWholeMonth, value))
|
||||
{
|
||||
BeWoApp.AppSettings.ShowServicesOverviewHalfOrWholeMonth = value;
|
||||
|
||||
this.Settings = UserSettingsUtils.CreateNewSettingValue(this._Settings, "ShowServicesOverviewHalfOrWholeMonth", value ? "1" : "0");
|
||||
}
|
||||
}
|
||||
}
|
||||
public bool FilterGroupServiceCategories
|
||||
{
|
||||
get { return BeWoApp.AppSettings.FilterGroupServiceCategories; }
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
@@ -10,6 +11,7 @@ using BeWo.ViewModel.ListViewModel;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||
|
||||
namespace BeWo.ViewModel
|
||||
{
|
||||
@@ -96,6 +98,17 @@ namespace BeWo.ViewModel
|
||||
private GkvVerfahrensstufe? _Verfahrensstufe;
|
||||
private bool _GkvAusblenden;
|
||||
|
||||
private AddressVM _HausanschriftDatenannahmestelle;
|
||||
private AddressVM _PostfachanschriftDatenannahmestelle;
|
||||
private AddressVM _GroßkundenanschriftDatenannahmestelle;
|
||||
|
||||
public OrganisationVM()
|
||||
{
|
||||
if (!BeWoApp.IsInDesignMode)
|
||||
throw new NotImplementedException();
|
||||
|
||||
Name = "Designername";
|
||||
}
|
||||
public OrganisationVM(OrganisationDC pDataContract, List<ValueListEntryDC> pAllQualifications, List<ValueListEntryDC> pPossibleFunctions, List<ValueListEntryDC> pPossibleRoleInOrganisations)
|
||||
: base(pDataContract, pDataContract.OrganisationOid == null)
|
||||
{
|
||||
@@ -403,10 +416,15 @@ namespace BeWo.ViewModel
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.IsDirty || this._CostRatePeriods.IsDirty || this._VarFields.IsDirty || (_ArbeitszeitListe != null && _ArbeitszeitListe.IsDirty) || (_Feiertage != null && _Feiertage.IsDirty);
|
||||
return base.IsDirty
|
||||
|| this._CostRatePeriods.IsDirty
|
||||
|| this._VarFields.IsDirty
|
||||
|| (_ArbeitszeitListe != null && _ArbeitszeitListe.IsDirty)
|
||||
|| (_Feiertage != null && _Feiertage.IsDirty)
|
||||
|| (HausanschriftDatenannahmestelle?.IsDirty ?? false)
|
||||
|| (PostfachanschriftDatenannahmestelle?.IsDirty ?? false)
|
||||
|| (GroßkundenanschriftDatenannahmestelle?.IsDirty ?? false);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public bool IsSingleInvoicePerCustomer
|
||||
@@ -677,8 +695,6 @@ namespace BeWo.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ValueListEntryDC Function
|
||||
{
|
||||
get { return this._Function; }
|
||||
@@ -836,6 +852,34 @@ namespace BeWo.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
public AddressVM HausanschriftDatenannahmestelle
|
||||
{
|
||||
get => _HausanschriftDatenannahmestelle;
|
||||
set
|
||||
{
|
||||
_HausanschriftDatenannahmestelle = value;
|
||||
FirePropertyChanged(nameof(HausanschriftDatenannahmestelle));
|
||||
}
|
||||
}
|
||||
public AddressVM PostfachanschriftDatenannahmestelle
|
||||
{
|
||||
get => _PostfachanschriftDatenannahmestelle;
|
||||
set
|
||||
{
|
||||
_PostfachanschriftDatenannahmestelle = value;
|
||||
FirePropertyChanged(nameof(PostfachanschriftDatenannahmestelle));
|
||||
}
|
||||
}
|
||||
public AddressVM GroßkundenanschriftDatenannahmestelle
|
||||
{
|
||||
get => _GroßkundenanschriftDatenannahmestelle;
|
||||
set
|
||||
{
|
||||
_GroßkundenanschriftDatenannahmestelle = value;
|
||||
FirePropertyChanged(nameof(GroßkundenanschriftDatenannahmestelle));
|
||||
}
|
||||
}
|
||||
|
||||
protected void CommitContact(string pValue, ContactType pContactType)
|
||||
{
|
||||
List<ContactDC> lOldContactDCs;
|
||||
@@ -875,7 +919,7 @@ namespace BeWo.ViewModel
|
||||
{
|
||||
this._VarFields = new VarFieldListVM(pDataContract.VarFields);
|
||||
|
||||
if (!this.IsNew)
|
||||
if (!IsNew)
|
||||
{
|
||||
_AccountNumber = pDataContract.AccountNumber;
|
||||
_BankCode = pDataContract.BankCode;
|
||||
@@ -952,6 +996,18 @@ namespace BeWo.ViewModel
|
||||
}
|
||||
}
|
||||
|
||||
HausanschriftDatenannahmestelle = pDataContract.HausanschriftDatenannahmestelle is AddressDC dc
|
||||
? new AddressVM(dc)
|
||||
: new AddressVM();
|
||||
|
||||
PostfachanschriftDatenannahmestelle = pDataContract.PostfachanschriftDatenannahmestelle is AddressDC dc2
|
||||
? new AddressVM(dc2)
|
||||
: new AddressVM();
|
||||
|
||||
GroßkundenanschriftDatenannahmestelle = pDataContract.GroßkundenanschriftDatenannahmestelle is AddressDC dc3
|
||||
? new AddressVM(dc3)
|
||||
: new AddressVM();
|
||||
|
||||
VMFactory.CreateOrganisationPersonRelationListVMAsync(
|
||||
pDataContract.RelatedPersons ?? (pDataContract.RelatedPersons = new List<OrganisationPersonRelationDC>()), cb => PersonRelations = cb);
|
||||
|
||||
@@ -1025,7 +1081,6 @@ namespace BeWo.ViewModel
|
||||
CommitContact(_POBox, ContactType.business_POBox);
|
||||
CommitContact(_InvoiceAddressPOBox, ContactType.private_POBox);
|
||||
|
||||
|
||||
pDataContract.CostRatePeriods = this._CostRatePeriods.CopyToDCList(doCommit);
|
||||
|
||||
if (this._VarFields != null)
|
||||
@@ -1043,7 +1098,39 @@ namespace BeWo.ViewModel
|
||||
pDataContract.Feiertage = _Feiertage.CopyToDCList(doCommit);
|
||||
}
|
||||
|
||||
if (HausanschriftDatenannahmestelle is object)
|
||||
pDataContract.HausanschriftDatenannahmestelle = HausanschriftDatenannahmestelle.CommitToDataContract();
|
||||
else
|
||||
pDataContract.HausanschriftDatenannahmestelle = null;
|
||||
|
||||
if (PostfachanschriftDatenannahmestelle is object)
|
||||
pDataContract.PostfachanschriftDatenannahmestelle = PostfachanschriftDatenannahmestelle.CommitToDataContract();
|
||||
else
|
||||
pDataContract.PostfachanschriftDatenannahmestelle = null;
|
||||
|
||||
if (GroßkundenanschriftDatenannahmestelle is object)
|
||||
pDataContract.GroßkundenanschriftDatenannahmestelle = GroßkundenanschriftDatenannahmestelle.CommitToDataContract();
|
||||
else
|
||||
pDataContract.GroßkundenanschriftDatenannahmestelle = null;
|
||||
|
||||
return pDataContract;
|
||||
}
|
||||
|
||||
public override void UpdateByDataContract(OrganisationDC pDataContract)
|
||||
{
|
||||
base.UpdateByDataContract(pDataContract);
|
||||
}
|
||||
|
||||
public void UpdateByGetIKResponse(GkvAbrechnungGetIKResponseDC response)
|
||||
{
|
||||
BezDatenannahmestelle = response.BezDatenannahmestelle;
|
||||
IKKostentrager = response.IKKostentrager;
|
||||
IKDatenannahmestelle = response.IKDatenannahmestelle;
|
||||
|
||||
HausanschriftDatenannahmestelle.UpdateByDataContract(response.Hausanschrift);
|
||||
FirePropertyChanged(nameof(HausanschriftDatenannahmestelle));
|
||||
PostfachanschriftDatenannahmestelle.UpdateByDataContract(response.Postfachanschrift);
|
||||
GroßkundenanschriftDatenannahmestelle.UpdateByDataContract(response.Großkundenanschrift);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -246,8 +246,6 @@ namespace BeWo.ViewModel
|
||||
_Category2Services = pCategory2Services;
|
||||
|
||||
ChangeGoalTree(pAllGoalCategories, pAllGoals);
|
||||
if (_Duration == null)
|
||||
_Duration = 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -284,12 +282,12 @@ namespace BeWo.ViewModel
|
||||
return RoundedDuration;
|
||||
}
|
||||
|
||||
if (_Duration != null)
|
||||
{
|
||||
//if (_Duration != null)
|
||||
//{
|
||||
return Duration;
|
||||
}
|
||||
//}
|
||||
|
||||
return 0;
|
||||
//return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -909,6 +909,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuswegHeikePuetz", "ReportI
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeikePuetz", "ReportImp\HeikePuetzBewoAusweg\HeikePuetz.csproj", "{6CA91C58-23BC-4DA4-823D-B88F3E7CC9EA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "_TemplateNeuKunde", "ReportImp\_TemplateNeuKunde\_TemplateNeuKunde.csproj", "{669D2874-57A2-4811-80DD-EFF78EC079B7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LebenshilfeBadKreuznachFUD", "ReportImp\LebenshilfeBadKreuznachFUD\LebenshilfeBadKreuznachFUD.csproj", "{5A3315F2-4976-4C88-B95E-D897BF61EF1C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LebenshilfeRemscheidFF", "ReportImp\LebenshilfeRemscheidFF\LebenshilfeRemscheidFF.csproj", "{7398111F-8F04-438A-A2A5-AF046C39E3F7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiakoniewerkGelsenkirchenWattenscheid", "ReportImp\DiakoniewerkGelsenkirchenWattenscheid\DiakoniewerkGelsenkirchenWattenscheid.csproj", "{8EE716B0-19BE-4AC0-BC5D-47504195AD30}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoewenzahnBetreutesWohnen", "ReportImp\LoewenzahnBetreutesWohnen\LoewenzahnBetreutesWohnen.csproj", "{6FF7C735-AA4B-4ED9-937D-E573220C05E9}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|.NET = Debug|.NET
|
||||
@@ -11192,6 +11202,126 @@ Global
|
||||
{6CA91C58-23BC-4DA4-823D-B88F3E7CC9EA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{6CA91C58-23BC-4DA4-823D-B88F3E7CC9EA}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6CA91C58-23BC-4DA4-823D-B88F3E7CC9EA}.Release|x86.Build.0 = Release|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Debug|.NET.ActiveCfg = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Debug|.NET.Build.0 = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.DebugRemote|.NET.Build.0 = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.DebugRemote|x86.Build.0 = Debug|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Release|.NET.ActiveCfg = Release|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Release|.NET.Build.0 = Release|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Debug|.NET.ActiveCfg = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Debug|.NET.Build.0 = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.DebugRemote|.NET.Build.0 = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.DebugRemote|x86.Build.0 = Debug|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Release|.NET.ActiveCfg = Release|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Release|.NET.Build.0 = Release|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Debug|.NET.ActiveCfg = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Debug|.NET.Build.0 = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.DebugRemote|.NET.Build.0 = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.DebugRemote|x86.Build.0 = Debug|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Release|.NET.ActiveCfg = Release|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Release|.NET.Build.0 = Release|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Debug|.NET.ActiveCfg = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Debug|.NET.Build.0 = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.DebugRemote|.NET.Build.0 = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.DebugRemote|x86.Build.0 = Debug|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Release|.NET.ActiveCfg = Release|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Release|.NET.Build.0 = Release|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Debug|.NET.ActiveCfg = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Debug|.NET.Build.0 = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.DebugRemote|.NET.Build.0 = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.DebugRemote|x86.Build.0 = Debug|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|.NET.ActiveCfg = Release|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|.NET.Build.0 = Release|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -11644,6 +11774,11 @@ Global
|
||||
{D36B27F2-88E6-41BF-B52C-B4520D506DFA} = {D8A691C5-146D-4613-86CC-438F02FE9106}
|
||||
{1154ACF1-E4B3-4040-AFB3-750A871A8004} = {D8A691C5-146D-4613-86CC-438F02FE9106}
|
||||
{6CA91C58-23BC-4DA4-823D-B88F3E7CC9EA} = {D8A691C5-146D-4613-86CC-438F02FE9106}
|
||||
{669D2874-57A2-4811-80DD-EFF78EC079B7} = {D8A691C5-146D-4613-86CC-438F02FE9106}
|
||||
{5A3315F2-4976-4C88-B95E-D897BF61EF1C} = {D8A691C5-146D-4613-86CC-438F02FE9106}
|
||||
{7398111F-8F04-438A-A2A5-AF046C39E3F7} = {D8A691C5-146D-4613-86CC-438F02FE9106}
|
||||
{8EE716B0-19BE-4AC0-BC5D-47504195AD30} = {D8A691C5-146D-4613-86CC-438F02FE9106}
|
||||
{6FF7C735-AA4B-4ED9-937D-E573220C05E9} = {D8A691C5-146D-4613-86CC-438F02FE9106}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {FBE985BB-9F0F-4DBB-8F94-ABC37A803FF9}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
|
||||
<WebStackScaffolding_ControllerDialogWidth>600</WebStackScaffolding_ControllerDialogWidth>
|
||||
<WebStackScaffolding_IsLayoutPageSelected>False</WebStackScaffolding_IsLayoutPageSelected>
|
||||
<WebStackScaffolding_IsPartialViewSelected>False</WebStackScaffolding_IsPartialViewSelected>
|
||||
<WebStackScaffolding_IsPartialViewSelected>True</WebStackScaffolding_IsPartialViewSelected>
|
||||
<WebStackScaffolding_IsReferencingScriptLibrariesSelected>False</WebStackScaffolding_IsReferencingScriptLibrariesSelected>
|
||||
<WebStackScaffolding_LayoutPageFile>
|
||||
</WebStackScaffolding_LayoutPageFile>
|
||||
|
||||
@@ -124,9 +124,9 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
Log.Info($"LoginController.Index(): Login failed! Tenant = {MobileSessionFacade.Tenant}");
|
||||
|
||||
ViewData[LoginErrorIndex] = Request.Browser.Browser.Equals("InternetExplorer") ?
|
||||
"Dieser Browser ist nicht mit dem mobilen BeWoPlaner kompatibel. Bitte benutzen Sie einen anderen Browser als den Internet Explorer." :
|
||||
"Die Anmeldung ist fehlgeschlagen. Bitte überprüfen Sie Benutzername und Passwort.";
|
||||
//ViewData[LoginErrorIndex] = Request.Browser.Browser.Equals("InternetExplorer") ?
|
||||
// "Dieser Browser ist nicht mit dem mobilen BeWoPlaner kompatibel. Bitte benutzen Sie einen anderen Browser als den Internet Explorer." :
|
||||
// "Die Anmeldung ist fehlgeschlagen. Bitte überprüfen Sie Benutzername und Passwort.";
|
||||
|
||||
return View("Index");
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.Compact;
|
||||
using BS.Shared.Extensions;
|
||||
using BS.Shared.Services;
|
||||
using DevExpress.Mvvm.ModuleInjection.Native;
|
||||
using DevExpress.XtraScheduler;
|
||||
using DevExpress.XtraScheduler.Compatibility;
|
||||
using Newtonsoft.Json;
|
||||
@@ -105,10 +106,10 @@ namespace BeWoPlanerMobil.Controllers
|
||||
switch(MobileSessionFacade.PasswordStrength)
|
||||
{
|
||||
case 0:
|
||||
tempDataValue = "Sie benutzen ein sehr schwaches Passwort.<br/><br/>Bitte ändern Sie Ihr Passwort, indem Sie im Menü auf 'Password ändern' klicken.";
|
||||
tempDataValue = "Sie benutzen ein sehr schwaches Passwort.<br><br>Bitte ändern Sie Ihr Passwort, indem Sie im Menü auf 'Password ändern' klicken.";
|
||||
break;
|
||||
case 1:
|
||||
tempDataValue = "Sie benutzen ein schwaches Passwort.<br/><br/>Bitte ändern Sie Ihr Passwort, indem Sie im Menü auf 'Password ändern' klicken.";
|
||||
tempDataValue = "Sie benutzen ein schwaches Passwort.<br><br>Bitte ändern Sie Ihr Passwort, indem Sie im Menü auf 'Password ändern' klicken.";
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -118,7 +119,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
Model.ShowBetrag = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowBetrag);
|
||||
AbstractModel.ShowBetrag = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowBetrag);
|
||||
|
||||
Model.ShowMarker = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowMarker);
|
||||
}
|
||||
@@ -127,6 +128,11 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
Model.EinheitZeiterfassung = UserSettingsUtils.GetSettingValueAsInteger(mandatorSettings, SettingsKeys.EinheitZeiterfassung);
|
||||
|
||||
/*
|
||||
* Minuten: 0
|
||||
* Stunden: 1
|
||||
* Min & Std: 2
|
||||
*/
|
||||
if(Model.EinheitZeiterfassung == 1)
|
||||
{
|
||||
Model.IsShowingDurationInHours = true;
|
||||
@@ -166,7 +172,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
Model.GroupsOfPeople = EmployeeService.GetAllGroups(GetUser().Employee.EmployeeOid).OrderBy(gop => gop.Name).ToList();
|
||||
|
||||
Model.ShowDistanceField = UserSettingsUtils.GetSettingValueAsBool(mandatorSettings, SettingsKeys.ShowDistanceFields);
|
||||
AbstractModel.ShowDistanceField = UserSettingsUtils.GetSettingValueAsBool(mandatorSettings, SettingsKeys.ShowDistanceFields);
|
||||
|
||||
Model.Dokutypes = ValueListService.GetAllValueListEntrysByType(ValueListEntryType.DocumentType);
|
||||
if(Model.Dokutypes != null)
|
||||
@@ -184,7 +190,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
Model.EmployeesForGroupAndMultiBooking = EmployeeService.GetAllCompactEmployees().Where(e => e.ActivationType == ActivationTypeId.Active).OrderBy(e => e.LastName).ToList();
|
||||
}
|
||||
|
||||
if (MobileSessionFacade.CheckForUserRight(UserRightType.ServiceRecord_AllowCreationForOtherEmployees))
|
||||
if(MobileSessionFacade.CheckForUserRight(UserRightType.ServiceRecord_AllowCreationForOtherEmployees))
|
||||
{
|
||||
Model.Employees = EmployeeService.GetAllActiveEmployeesCompact();
|
||||
}
|
||||
@@ -241,7 +247,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
if(Model.SelectedCostBearer2SupportConceptRelListObject is null || !isInList)
|
||||
{
|
||||
if(!(Model.SelectedCostBearer2SupportConceptRelListObject is null) && !isInList)
|
||||
if(Model.SelectedCostBearer2SupportConceptRelListObject != null && !isInList)
|
||||
{
|
||||
Log.Info($"Model.SelectedSupportConceptListObject.Oid = {Model.SelectedCostBearer2SupportConceptRelListObject.CostBearer2SupportConceptOid} is not in list !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
||||
|
||||
@@ -366,9 +372,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
return;
|
||||
}
|
||||
|
||||
var ratingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position); ;
|
||||
|
||||
Model.GoalRatingTypes = ratingTypes.ToList();
|
||||
Model.GoalRatingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position).ToList();
|
||||
}
|
||||
|
||||
[Authorize]
|
||||
@@ -478,6 +482,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
if(supportConcept is null)
|
||||
{
|
||||
Log.Info($"Hilfeplan von Bewilligung mit Oid {Model.CostBearer2SupportConceptOid} nicht gefunden beim Laden der Ziele (LoadGoals).");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -955,6 +960,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
{
|
||||
if(Model is null)
|
||||
{
|
||||
Log.Info($"Model ist null bei CreateOrUpdateServiceRecord; User: {MobileSessionFacade.LoggedInUser.Oid} {MobileSessionFacade.LoggedInUser.LoginName} ({MobileSessionFacade.LoggedInUser.Employee})");
|
||||
TempData[TempDataConstants.DoLogoutKey] = true;
|
||||
return Logout();
|
||||
}
|
||||
@@ -990,6 +996,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
if(string.IsNullOrEmpty(collection[FormCollectionConstants.DateKey]))
|
||||
{
|
||||
Log.Info($"CreateOrUpdateServiceRecord: Das Startdatum ist null. Breche das {(Model.IsInEditingMode ? "Speichern" : "Anlegen")} ab.");
|
||||
return View("Main", Model);
|
||||
}
|
||||
|
||||
@@ -1077,6 +1084,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
if(Model.NewServiceRecord is null)
|
||||
{
|
||||
Log.Info("CreateOrUpdateServiceRecord: NewServiceRecord ist null. Breche ab.");
|
||||
return RedirectToActionPermanent("Main");
|
||||
}
|
||||
|
||||
@@ -1740,6 +1748,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
{
|
||||
if(Model is null)
|
||||
{
|
||||
Log.Info($"Model ist null in Methode LoadServiceCategoriesToModel({cb2ScOid})");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1754,6 +1763,8 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
if(cb2ScOid is null && (Model.IsInGroupBookingMode || Model.IsInMultiBookingMode))
|
||||
{
|
||||
Log.Info("Oid der Bewilligung ist null und der MoK befindet sich im Gruppen- oder Mehrfachbuchungsmodus");
|
||||
|
||||
var selectedSupportConcepts = Model.IsInGroupBookingMode ?
|
||||
Model.GroupBookingSelectedSupportConcepts :
|
||||
Model.IsInMultiBookingMode ?
|
||||
@@ -1927,7 +1938,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
var serviceRecordDC = Model.ServiceRecords.FirstOrDefault(f => f.ServiceRecordOid != null && f.ServiceRecordOid.Value.Equals(Model.ServiceRecordOidToDelete));
|
||||
var version = serviceRecordDC?.ServiceRecordVersion;
|
||||
|
||||
if(version != null && MainModel.IsAllowedToDeleteServiceRecord(serviceRecordDC))
|
||||
if(version != null && Model.IsAllowedToDeleteServiceRecord(serviceRecordDC))
|
||||
{
|
||||
OperationsService.DeleteServiceRecord(Model.ServiceRecordOidToDelete.Value, version.Value);
|
||||
|
||||
@@ -1935,9 +1946,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
ResetEditingMode();
|
||||
|
||||
return RedirectToActionPermanent("Main");
|
||||
return ResetEditingMode();
|
||||
}
|
||||
|
||||
[Authorize]
|
||||
@@ -2343,8 +2352,6 @@ namespace BeWoPlanerMobil.Controllers
|
||||
var startDt = startDate.AddHours(startHoursDt.Hour).AddMinutes(startHoursDt.Minute);
|
||||
var endDt = endDate.AddHours(endHoursDt.Hour).AddMinutes(endHoursDt.Minute);
|
||||
|
||||
|
||||
|
||||
var dauer = (int) (endDt - startDt).TotalMinutes;
|
||||
|
||||
if(dauer == 0 || start == string.Empty && end == string.Empty)
|
||||
@@ -2804,7 +2811,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
case Custom:
|
||||
newResult.KannTrotzdemGespeichertWerden = true;
|
||||
|
||||
newResult.Message += RemoveConfirmationFromValidationResultMessage(result.Message) + "<br /><br />";
|
||||
newResult.Message += RemoveConfirmationFromValidationResultMessage(result.Message) + "<br><br>";
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2818,7 +2825,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
}
|
||||
|
||||
return serviceRecord.GroupOid != null
|
||||
? SerializeObject(new ValidationResult{KannTrotzdemGespeichertWerden = true, Message = "ACHTUNG, wenn Sie fortfahren, löschen Sie die gesamte Gruppenbuchung.<br/>Wenn Sie nur einzelne Klienten aus der Gruppe entfernen möchten, editieren Sie die Gruppe und entfernen den Klienten aus der Liste der Hilfepläne.<br/>Sind Sie sicher, dass Sie den gesamten Gruppeneintrag löschen möchten?<br/><br/>" })
|
||||
? SerializeObject(new ValidationResult{KannTrotzdemGespeichertWerden = true, Message = "ACHTUNG, wenn Sie fortfahren, löschen Sie die gesamte Gruppenbuchung.<br>Wenn Sie nur einzelne Klienten aus der Gruppe entfernen möchten, editieren Sie die Gruppe und entfernen den Klienten aus der Liste der Hilfepläne.<br/>Sind Sie sicher, dass Sie den gesamten Gruppeneintrag löschen möchten?<br><br>" })
|
||||
: SerializeObject(new ValidationResult {KannTrotzdemGespeichertWerden = true, Message = null});
|
||||
}
|
||||
|
||||
@@ -3063,7 +3070,6 @@ namespace BeWoPlanerMobil.Controllers
|
||||
}
|
||||
|
||||
LoadSupportConceptThings(Model.CostBearer2SupportConceptOid);
|
||||
//LoadGoals();
|
||||
}
|
||||
|
||||
private void ResetMultiBookingMode()
|
||||
@@ -4542,15 +4548,44 @@ namespace BeWoPlanerMobil.Controllers
|
||||
var serviceRecordOids2GoalHeaders = new Dictionary<long, List<string>>();
|
||||
|
||||
var goalOids = new List<long>();
|
||||
var measures = new List<ValueListEntryDC>();
|
||||
//var measures = new List<ValueListEntryDC>();
|
||||
|
||||
serviceRecords.DoForEach(serviceRecord =>
|
||||
{
|
||||
measures.AddRangeIfElementsNotIn(serviceRecord.Goals);
|
||||
//measures.AddRangeIfElementsNotIn(serviceRecord.Goals);
|
||||
goalOids.AddRangeIfElementsNotIn(serviceRecord.Goals.Where(goal => goal.ParentOid.HasValue).Select(goal => goal.ParentOid.Value));
|
||||
});
|
||||
|
||||
var goalCategories = ValueListService.GetGoalCategoriesByOids(goalOids);
|
||||
|
||||
//serviceRecords.DoForEach(serviceRecord =>
|
||||
//{
|
||||
// if(serviceRecord.ServiceRecordOid is null)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// serviceRecord.Goals.OrderBy(vle => $"{vle.Abbreviation}-{vle.TypeDescription}").DoForEach(goal =>
|
||||
// {
|
||||
// var goalCategory = goalCategories.FirstOrDefault(g => g.ValueListEntryOid.HasValue && goal.ValueListEntryOid.HasValue && g.ValueListEntryOid.Value.Equals(goal.ValueListEntryOid.Value) || (g.ValueListEntryOid.HasValue && goal.ParentOid.HasValue && g.ValueListEntryOid.Value.Equals(goal.ParentOid.Value)));
|
||||
|
||||
// if(goalCategory != null)
|
||||
// {
|
||||
// serviceRecordOids2GoalHeaders.AddOrUpdateValueInDictionary(serviceRecord.ServiceRecordOid.Value, new List<string> { goalCategory.DisplayName });
|
||||
// }
|
||||
// });
|
||||
//});
|
||||
|
||||
Model.ServiceRecordOids2GoalHeader = GetServiceRecordOids2GoalHeaders(serviceRecords, goalCategories);
|
||||
|
||||
Model.ServiceRecords = serviceRecords;
|
||||
}
|
||||
|
||||
[Authorize]
|
||||
public static Dictionary<long, List<string>> GetServiceRecordOids2GoalHeaders(List<ServiceRecordDC> serviceRecords, List<ValueListEntryDC> goalCategories)
|
||||
{
|
||||
var serviceRecordOids2GoalHeaders = new Dictionary<long, List<string>>();
|
||||
|
||||
serviceRecords.DoForEach(serviceRecord =>
|
||||
{
|
||||
if(serviceRecord.ServiceRecordOid is null)
|
||||
@@ -4569,9 +4604,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
});
|
||||
});
|
||||
|
||||
Model.ServiceRecordOids2GoalHeader = serviceRecordOids2GoalHeaders;
|
||||
|
||||
Model.ServiceRecords = serviceRecords;
|
||||
return serviceRecordOids2GoalHeaders;
|
||||
}
|
||||
|
||||
[Authorize]
|
||||
@@ -4703,6 +4736,12 @@ namespace BeWoPlanerMobil.Controllers
|
||||
[Authorize]
|
||||
public override string SaveCollapsibleStatus(bool isOpen, string identifier)
|
||||
{
|
||||
if(Model is null)
|
||||
{
|
||||
TempData[TempDataConstants.DoLogoutKey] = true;
|
||||
return LeerzeichenFuerGetMethoden;
|
||||
}
|
||||
|
||||
Model.Collapsibles2IsShown[identifier] = isOpen;
|
||||
|
||||
return LeerzeichenFuerGetMethoden;
|
||||
|
||||
@@ -14,7 +14,6 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web.Mvc;
|
||||
using BeWo.Service.Plugins;
|
||||
using BS.Shared.DataContracts.Compact;
|
||||
|
||||
// Controller des Quittierungsbelegsmoduls
|
||||
|
||||
@@ -113,24 +112,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
Model.Customers.Clear();
|
||||
|
||||
//if(AbstractModel.CheckForAtLeastOneRight(new[] { UserRightType.CustomerView_View, UserRightType.ViewAll }))
|
||||
//{
|
||||
// Model.Customers = CustomerService.GetAllActiveCustomersForEmployee().OrderByDescending(x => x.LastName).ToList();
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// if(AbstractModel.CheckRight(UserRightType.Customer_ViewMyCustomers))
|
||||
// {
|
||||
// Model.Customers = MobileSessionFacade.LoggedInEmployee.RelatedCustomers.OrderByDescending(x => x.Customer.LastName).Select(customerEmployeeRelation => customerEmployeeRelation.Customer).ToList();
|
||||
// }
|
||||
|
||||
// if(AbstractModel.CheckRight(UserRightType.Customer_ViewMyTeams))
|
||||
// {
|
||||
// Model.Customers.AddRangeIfElementsNotIn(EmployeeService.GetActiveCompactCustomersForEmployee());
|
||||
// }
|
||||
//}
|
||||
|
||||
Model.Customers = EmployeeService.GetActiveCompactCustomersForEmployee(Model.Employee.EmployeeOid.Value);
|
||||
Model.Customers = CustomerService.GetAllActiveCustomersForEmployee();
|
||||
|
||||
Model.Employees = EmployeeService.GetActiveCompactEmployeesForEmployee(MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid);
|
||||
|
||||
@@ -140,6 +122,12 @@ namespace BeWoPlanerMobil.Controllers
|
||||
Model.Organisations.Sort((x, y) => string.Compare(x.Name, y.Name, StringComparison.CurrentCulture));
|
||||
|
||||
Model.AllTeams = EmployeeService.GetAllActiveCompactTeamsForEmployee(MobileSessionFacade.LoggedInEmployee.EmployeeOid);
|
||||
|
||||
Model.Dokutypes = ValueListService.GetAllValueListEntrysByType(ValueListEntryType.DocumentType);
|
||||
if(Model.Dokutypes != null)
|
||||
{
|
||||
Model.Dokutypes = Model.Dokutypes.OrderBy(s => s.ValueListEntryOid).ToArray();
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
@@ -1295,6 +1283,11 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
Model.ConfirmationReceiptObject.ConfirmationReceiptResultList.AddRangeIfElementsNotIn(confirmationReceiptResults.OrderBy(o => o.CustomerName));
|
||||
|
||||
if(Model.ConfirmationReceiptObject.ConfirmationReceiptResultList.Any())
|
||||
{
|
||||
Model.GoalRatingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position).ToList();
|
||||
}
|
||||
|
||||
if(Model.ConfirmationReceiptObject.ConfirmationReceiptResultList.All(qbItem => qbItem.Items.Count == 0))
|
||||
{
|
||||
TempData[TempDataConstants.HasWarningMessageKey] = true;
|
||||
@@ -1312,6 +1305,7 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
public class ConfirmationReceiptSignatureObject
|
||||
{
|
||||
public Guid Identifier { get; }
|
||||
public string ImageStr { get; }
|
||||
public string InsTsStr { get; }
|
||||
public string PersonName { get; }
|
||||
@@ -1321,6 +1315,8 @@ namespace BeWoPlanerMobil.Controllers
|
||||
|
||||
public ConfirmationReceiptSignatureObject(string imageStr, string insTsStr, string personName, bool isEmployeeSignature, List<ServiceRecordDC> serviceRecords)
|
||||
{
|
||||
Identifier = Guid.NewGuid();
|
||||
|
||||
ImageStr = imageStr;
|
||||
InsTsStr = insTsStr;
|
||||
PersonName = personName;
|
||||
|
||||
@@ -29,13 +29,7 @@ namespace BeWoPlanerMobil
|
||||
}
|
||||
|
||||
protected void Application_BeginRequest(object sender, EventArgs e)
|
||||
{
|
||||
//Context.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
|
||||
// Context.Response.Cache.SetAllowResponseInBrowserHistory(false);
|
||||
// Context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
|
||||
// Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
|
||||
// Context.Response.Cache.SetNoStore();
|
||||
|
||||
{
|
||||
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
|
||||
}
|
||||
|
||||
|
||||
@@ -248,5 +248,11 @@ namespace BeWoPlanerMobil.Models
|
||||
return "1" == settingsValue;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool ShowDistanceField { get; set; }
|
||||
|
||||
public static bool ShowBetrag { get; set; }
|
||||
|
||||
public static string LocalStorageKey => MobileSessionFacade.LoggedInUser is object ? $"bwp_{MobileSessionFacade.Tenant}_{MobileSessionFacade.LoggedInUser.Oid}" : null;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using BeWo.View.Navigation.Filter;
|
||||
@@ -16,6 +17,10 @@ namespace BeWoPlanerMobil.Models
|
||||
{
|
||||
public class MainModel : AbstractModel
|
||||
{
|
||||
protected static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
||||
|
||||
public long? SelectedCostBearerSupportConceptRelOid { get; set; }
|
||||
|
||||
[Display(Name = "Nur meine Klienten anzeigen")]
|
||||
@@ -94,8 +99,19 @@ namespace BeWoPlanerMobil.Models
|
||||
[Display(Name = "Abgelaufene Hilfepläne anzeigen")]
|
||||
public bool ShowExpiredSupportConcepts { get; set; }
|
||||
|
||||
[Display(Name = "Hilfeplan")]
|
||||
public long? CostBearer2SupportConceptOid { get; set; }
|
||||
private long? _CostBearer2SupportConceptOid;
|
||||
|
||||
[Display(Name = "Hilfeplan")]
|
||||
public long? CostBearer2SupportConceptOid
|
||||
{
|
||||
get => _CostBearer2SupportConceptOid;
|
||||
|
||||
set
|
||||
{
|
||||
Log.Info($"CostBearer2SupportConceptOid ausgewählt: {value}. Vorher: {_CostBearer2SupportConceptOid}; Benutzer: {MobileSessionFacade.LoggedInUser.LoginName} UserOid: {MobileSessionFacade.LoggedInUser.Oid}");
|
||||
_CostBearer2SupportConceptOid = value;
|
||||
}
|
||||
}
|
||||
|
||||
public long? SelectedServiceCategoryOid => SelectedServiceCategory?.ServiceCategoryOid;
|
||||
|
||||
@@ -103,7 +119,7 @@ namespace BeWoPlanerMobil.Models
|
||||
|
||||
public long? SelectedServiceRecordOid { get; set; }
|
||||
|
||||
public static bool IsAllowedToDeleteServiceRecord(ServiceRecordDC serviceRecord)
|
||||
public bool IsAllowedToDeleteServiceRecord(ServiceRecordDC serviceRecord)
|
||||
{
|
||||
var allowed = false;
|
||||
|
||||
@@ -176,8 +192,22 @@ namespace BeWoPlanerMobil.Models
|
||||
}
|
||||
|
||||
public ServiceRecordDC SelectedServiceRecord { get; set; }
|
||||
|
||||
public SupportConceptDC SelectedSupportConcept { get; set; }
|
||||
|
||||
private SupportConceptDC _SelectedSupportConcept;
|
||||
|
||||
public SupportConceptDC SelectedSupportConcept
|
||||
{
|
||||
get => _SelectedSupportConcept;
|
||||
|
||||
set
|
||||
{
|
||||
var stackTrace = new StackTrace();
|
||||
var callingMethodsName = stackTrace.GetFrame(1).GetMethod().Name;
|
||||
Log.Info($"SC mit Oid {value?.SupportConceptOid} ausgewählt. Vorheriger SC: {_SelectedSupportConcept?.SupportConceptOid}. Aufrufende Methode: {callingMethodsName}");
|
||||
|
||||
_SelectedSupportConcept = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int Zeitraum { get; set; }
|
||||
|
||||
@@ -229,8 +259,6 @@ namespace BeWoPlanerMobil.Models
|
||||
|
||||
public long? ServiceRecordOidToDelete { get; set; }
|
||||
|
||||
public bool ShowDistanceField { get; set; }
|
||||
|
||||
public MainModel()
|
||||
{
|
||||
NewServiceRecord = new ServiceRecordDC();
|
||||
@@ -258,8 +286,6 @@ namespace BeWoPlanerMobil.Models
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public CostBearer2SupportConceptRelListObject SelectedCostBearer2SupportConceptRelListObject { get; set; }
|
||||
|
||||
public List<SupportConceptCostBearerRelDC> SelectedConceptCostBearerRelations { get; set; }
|
||||
@@ -388,7 +414,23 @@ namespace BeWoPlanerMobil.Models
|
||||
|
||||
public CompactEmployeeDC PreviouslySelectedEmployee { get; set; }
|
||||
public SupportConceptDC PreviouslySelectedSupportConcept { get; set; }
|
||||
public long? PreviouslySelectedCostbearer2SupportConceptOid { get; set; }
|
||||
private long? _PreviouslySelectedCostbearer2SupportConceptOid;
|
||||
|
||||
public long? PreviouslySelectedCostbearer2SupportConceptOid
|
||||
{
|
||||
get => _PreviouslySelectedCostbearer2SupportConceptOid;
|
||||
set
|
||||
{
|
||||
var stackTrace = new StackTrace();
|
||||
var callingMethodsName = stackTrace.GetFrame(1).GetMethod().Name;
|
||||
|
||||
var alt = _PreviouslySelectedCostbearer2SupportConceptOid;
|
||||
|
||||
Log.Info($"PreviouslySelectedCostbearer2SupportConceptOid-Set von {alt} zu {value} von Methode: {callingMethodsName}");
|
||||
|
||||
_PreviouslySelectedCostbearer2SupportConceptOid = value;
|
||||
}
|
||||
}
|
||||
public bool IsEndDateVisible { get; set; }
|
||||
|
||||
public static string GetServiceRecordTimeHeader(ServiceRecordDC serviceRecord, bool isForServiceRecordsList)
|
||||
@@ -509,6 +551,10 @@ namespace BeWoPlanerMobil.Models
|
||||
|
||||
public int EinheitZeiterfassung { get; set; }
|
||||
|
||||
public string StartDateToEditJSFormat => SelectedServiceRecord?.Start?.ToString("yyyy-MM-dd") ?? DateTime.Today.ToString("yyyy-MM-dd");
|
||||
|
||||
public string EndDateToEditJSFormat => SelectedServiceRecord?.End?.ToString("yyyy-MM-dd") ?? DateTime.Today.ToString("yyyy-MM-dd");
|
||||
|
||||
public string StartDateToEdit => SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
|
||||
|
||||
public string EndDateToEdit => SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
|
||||
@@ -740,7 +786,7 @@ namespace BeWoPlanerMobil.Models
|
||||
|
||||
public ServiceDescriptionDC GetSelectedOrFirstServiceDescription()
|
||||
{
|
||||
if(!(SelectedServiceDescription is null) || Categories2Descriptions is null)
|
||||
if(SelectedServiceDescription != null || Categories2Descriptions is null)
|
||||
{
|
||||
return SelectedServiceDescription;
|
||||
}
|
||||
@@ -755,7 +801,7 @@ namespace BeWoPlanerMobil.Models
|
||||
return SelectedServiceDescription;
|
||||
}
|
||||
|
||||
public bool ShowBetrag { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class CustomSelectListItem
|
||||
|
||||
@@ -260,5 +260,13 @@ namespace BeWoPlanerMobil.Models
|
||||
public int MaxResults { get; set; } = 10;
|
||||
public int QbEntryPageCount { get; set; }
|
||||
public int CurrentQbEntryPage { get; set; }
|
||||
|
||||
public List<RatingTypeDC> GoalRatingTypes { get; set; } = new List<RatingTypeDC>();
|
||||
|
||||
public Dictionary<long, List<string>> ServiceRecordOids2GoalHeader { get; set; }
|
||||
|
||||
public ValueListEntryDC[] Dokutypes { get; set; }
|
||||
|
||||
public int NumberOfDokuTypes => Dokutypes?.Length ?? 0;
|
||||
}
|
||||
}
|
||||
@@ -174,8 +174,8 @@ namespace BeWoPlanerMobil.Models
|
||||
public DateTime? IntervalStartDate { get; set; }
|
||||
public DateTime? IntervalEndDate { get; set; }
|
||||
|
||||
public string IntervalStartDateStr => IntervalStartDate.HasValue ? $"{IntervalStartDate:dd.MM.yyyy}" : string.Empty;
|
||||
public string IntervalEndDateStr => IntervalEndDate.HasValue ? $"{IntervalEndDate:dd.MM.yyyy}" : string.Empty;
|
||||
public string IntervalStartDateStr => IntervalStartDate.HasValue ? IntervalStartDate.Value.ToString("yyyy-MM-ddTHH:mm") : string.Empty;
|
||||
public string IntervalEndDateStr => IntervalEndDate.HasValue ? IntervalEndDate.Value.ToString("yyyy-MM-ddTHH:mm") : string.Empty;
|
||||
public string IntervalStartTimeStr => IntervalStartDate.HasValue ? $"{IntervalStartDate:HH:mm}" : string.Empty;
|
||||
public string IntervalEndTimeStr => IntervalEndDate.HasValue ? $"{IntervalEndDate:HH:mm}" : string.Empty;
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ function hasEmptyRequiredFields(form) {
|
||||
|
||||
function showAboutPopup() {
|
||||
// Auf deutsch?
|
||||
const text = "SignaturePad:<br/>Copyright (c) 2018 Szymon Nowak<br/><br/>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights<br/>to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br/>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br/>THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.";
|
||||
const text = "SignaturePad:<br>Copyright (c) 2018 Szymon Nowak<br><br>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights<br/>to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br/>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br/>THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.";
|
||||
|
||||
$("#message-popup-ok-btn").unbind();
|
||||
$("#message-popup-close-btn").unbind();
|
||||
@@ -190,14 +190,18 @@ function showAlertMessageBox(title, message, callback, executeCallbackByBothButt
|
||||
|
||||
$("#message-popup-ok-btn").off("click");
|
||||
$("#message-popup-ok-btn").on("click", function() {
|
||||
callback();
|
||||
if(typeof callback === "function") {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
|
||||
$("#message-popup-close-btn").off("click");
|
||||
|
||||
if(executeCallbackByBothButtons === true) {
|
||||
$("#message-popup-close-btn").on("click", function() {
|
||||
callback();
|
||||
if (typeof callback === "function") {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,60 @@ function hideSignature() {
|
||||
$("#signature-img-popup").modal("hide");
|
||||
}
|
||||
|
||||
function updateCanvasSize(canvasJQueryElement) {
|
||||
if(canvasJQueryElement.length === 0) {
|
||||
logError("Canvas nicht gefunden!");
|
||||
return;
|
||||
}
|
||||
|
||||
const rowWidth = canvasJQueryElement.parent().parent().innerWidth();
|
||||
|
||||
const sourceCanvas = document.getElementById(canvasJQueryElement.attr("id"));
|
||||
|
||||
const canvasWidth = sourceCanvas.scrollWidth;
|
||||
|
||||
const newWidth = rowWidth;
|
||||
|
||||
var parsedNewWidth = parseInt(newWidth, 10);
|
||||
const parsedCanvasWidth = parseInt(canvasWidth, 10);
|
||||
|
||||
let isMinDifferenceMet = false;
|
||||
|
||||
if (parsedCanvasWidth > parsedNewWidth) {
|
||||
isMinDifferenceMet = parsedCanvasWidth - parsedNewWidth > 4;
|
||||
} else {
|
||||
isMinDifferenceMet = parsedNewWidth - parsedCanvasWidth > 4;
|
||||
}
|
||||
|
||||
if (isMinDifferenceMet) {
|
||||
var trimmedCanvas = trimCanvas(cloneCanvas(sourceCanvas));
|
||||
|
||||
var canvasContext = sourceCanvas.getContext("2d", { willReadFrequently: true });
|
||||
|
||||
canvasJQueryElement.prop("width", newWidth);
|
||||
|
||||
if(trimmedCanvas.width <= 0 || trimmedCanvas.height <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var img = new Image;
|
||||
|
||||
img.onload = function () {
|
||||
if (trimmedCanvas.width > parsedNewWidth) {
|
||||
const factor = trimmedCanvas.height / trimmedCanvas.width;
|
||||
const newHeight = parsedNewWidth * factor;
|
||||
|
||||
canvasContext.drawImage(img, 0, 0, parsedNewWidth - 1, newHeight - 1);
|
||||
} else {
|
||||
canvasContext.drawImage(img, 0, 0);
|
||||
}
|
||||
};
|
||||
|
||||
img.src = trimmedCanvas.toDataURL();
|
||||
}
|
||||
}
|
||||
|
||||
// Veraltet seit 17.04.2025; Neue Funktion: updateCanvasSize(canvasJQueryElement)
|
||||
function resizeCanvas(sketchPadId, canvasRoId) {
|
||||
if($(sketchPadId).length !== 0) {
|
||||
const rowWidth = $(canvasRoId).innerWidth();
|
||||
@@ -38,9 +92,8 @@ function resizeCanvas(sketchPadId, canvasRoId) {
|
||||
|
||||
img.onload = function () {
|
||||
if(trimmedCanvas.width > parsedNewWidth) {
|
||||
var factor = trimmedCanvas.height / trimmedCanvas.width;
|
||||
|
||||
var newHeight = parsedNewWidth * factor;
|
||||
const factor = trimmedCanvas.height / trimmedCanvas.width;
|
||||
const newHeight = parsedNewWidth * factor;
|
||||
|
||||
canvasContext.drawImage(img, 0, 0, parsedNewWidth - 1, newHeight - 1);
|
||||
} else {
|
||||
@@ -53,13 +106,14 @@ function resizeCanvas(sketchPadId, canvasRoId) {
|
||||
}
|
||||
}
|
||||
|
||||
// Das Initialisieren der Einzelunterschrift
|
||||
function initializeSignature(selectedServiceRecordOid) {
|
||||
$("#main-container, #checkbox-container").hide();
|
||||
$("#signature-container").addClass("d-block");
|
||||
|
||||
$.get(getSelectedRecordInformationUrlWithOid(), { oid: selectedServiceRecordOid }).done(function(jsonServiceRecord2Monatsunterschrift) {
|
||||
$.get(window.getSelectedRecordInformationUrlWithOid(), { oid: selectedServiceRecordOid }).done(function(jsonServiceRecord2Monatsunterschrift) {
|
||||
if(jsonServiceRecord2Monatsunterschrift === "SessionTimeout") {
|
||||
window.location.href = getRedirectLink();
|
||||
window.location.href = window.getRedirectLink();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -125,7 +179,7 @@ function initializeSignature(selectedServiceRecordOid) {
|
||||
$("#signature-alert").removeClass("d-none");
|
||||
}
|
||||
|
||||
resizeCanvas("#sketch-pad", "#canvas-row");
|
||||
updateCanvasSize($("#sketch-pad"));
|
||||
|
||||
var canvas = document.getElementById("sketch-pad");
|
||||
|
||||
|
||||
@@ -84,13 +84,13 @@ function onDurationChange(startTimeId, endTimeId, startDateId, endDateId, durati
|
||||
}
|
||||
}
|
||||
|
||||
// ToDo: Erst Dauer, dann Start- oder Endzeit führt dazu, dass die Dauer in Stunden benutzt wird!
|
||||
// ToDo: VERALTET (14.05.2025); Erst Dauer, dann Start- oder Endzeit führt dazu, dass die Dauer in Stunden benutzt wird!
|
||||
function calculateDuration(isInvocatedByHoursMinutesButton, startTimeId, endTimeId, durationId, hoursMinutesDropdownBtnId, startDatePickerId, endDatePickerId, isInvokedByStartElement, isInvokedByEndElement) {
|
||||
var startTime = $(`#${startTimeId}`).val();
|
||||
var endTime = $(`#${endTimeId}`).val();
|
||||
var duration = $(`#${durationId}`).val();
|
||||
|
||||
var hoursMinutesDropdownButton = $("#" + hoursMinutesDropdownBtnId);
|
||||
var hoursMinutesDropdownButton = $(`#${hoursMinutesDropdownBtnId}`);
|
||||
|
||||
var isInMin = window.getIsZeiterfassungseinheitInMinutes();
|
||||
|
||||
@@ -192,6 +192,209 @@ function calculateDuration(isInvocatedByHoursMinutesButton, startTimeId, endTime
|
||||
|
||||
|
||||
|
||||
function calcTimeWithDuration() {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function calcDuration(idPrefix, isFormatChange, isInvokedByStart, isInvokedByEnd) {
|
||||
const endDateInput = $(`#${idPrefix}-end-date-input`);
|
||||
const startDateInput = $(`#${idPrefix}-start-date-input`);
|
||||
const endTimeInput = $(`#${idPrefix}-end-time-input`);
|
||||
const startTimeInput = $(`#${idPrefix}-start-time-input`);
|
||||
const durationInput = $(`#${idPrefix}-duration-input`);
|
||||
const hoursMinutesBtn = $(`#${idPrefix}-hours-minutes-dropdown-btn`);
|
||||
|
||||
const startDateValue = startDateInput.val();
|
||||
const startTimeValue = startTimeInput.val();
|
||||
const endDateValue = endDateInput.val();
|
||||
const endTimeValue = endTimeInput.val();
|
||||
const durationValue = durationInput.val();
|
||||
const isInMin = hoursMinutesBtn.length === 0 || hoursMinutesBtn.length > 0 && hoursMinutesBtn.text().replaceAll(/\s/g, "") !== "Minuten";
|
||||
const hasEndDate = endDateInput.length;
|
||||
|
||||
if (startDateValue.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const isStartTimeValid = startTimeValue !== null && startTimeValue !== undefined && startTimeValue.length > 0;
|
||||
const isEndTimeValid = endTimeValue !== null && endTimeValue !== undefined && endTimeValue.length > 0;
|
||||
const duration = parseFloat(durationValue.replace(",", "."));
|
||||
const isDurationValid = !isNaN(duration);
|
||||
|
||||
let start = new Date(startDateValue);
|
||||
let end = hasEndDate ? new Date(endDateValue) : start;
|
||||
|
||||
if (true === isStartTimeValid && true === isEndTimeValid && false === isFormatChange) {
|
||||
start = combineDateAndTime(start, startTimeValue);
|
||||
end = combineDateAndTime(end, endTimeValue);
|
||||
|
||||
let dauer = (end.getTime() - start.getTime()) / 60000;
|
||||
|
||||
if (duration > 0 && true === isInvokedByStart && start >= end) {
|
||||
end = new Date(start.getTime() + (false === isInMin ? duration * 60 : duration) / 60000);
|
||||
|
||||
endTimeInput.val(getTimeAsString(end));
|
||||
endDateInput.val(getDateAsString(end));
|
||||
|
||||
dauer = (end.getTime() - start.getTime()) * 60000;
|
||||
}
|
||||
|
||||
if (duration > 0 && true === isInvokedByEnd && start >= end) {
|
||||
start = new Date(end.getTime() - (false === isInMin ? duration * 60 : duration) / 60000);
|
||||
|
||||
startTimeInput.val(getTimeAsString(start));
|
||||
startDateInput.val(getDateAsString(start));
|
||||
|
||||
dauer = (end.getTime() - start.getTime()) * 60000;
|
||||
}
|
||||
|
||||
durationInput.val(dauer);
|
||||
} else if(true === isStartTimeValid && true === isDurationValid) {
|
||||
if(true === isFormatChange) {
|
||||
let newDurationValue = true === isInMin ? duration * 60.0 : duration / 60.0;
|
||||
|
||||
if(isNaN(newDurationValue)) {
|
||||
durationInput.val("");
|
||||
} else {
|
||||
durationInput.val(newDurationValue);
|
||||
}
|
||||
}
|
||||
|
||||
calcTimeWithDuration(startTimeValue, endTimeInput, start, duration, isFormatChange, isInMin);
|
||||
} else if(true === isEndTimeValid && true === isDurationValid) {
|
||||
if(true === isFormatChange) {
|
||||
durationInput.val(formatDuration(isInMin, true === isInMin ? duration * 60.0 : duration / 60.0));
|
||||
}
|
||||
|
||||
calcTimeWithDuration(endTimeValue, startTimeInput, start, duration * -1.0, isFormatChange, isInMin);
|
||||
} else if(true === isFormatChange) {
|
||||
if (true === isFormatChange) {
|
||||
durationInput.val(formatDuration(isInMin, true === isInMin ? duration * 60.0 : duration / 60.0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function formatDuration(isInMin, durationAsNumber) {
|
||||
if(true === isNaN(durationAsNumber)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
const roundedValue = Math.round(durationAsNumber * 1000) / 1000;
|
||||
|
||||
if(isInMin) {
|
||||
return roundedValue.toString().includes(".") ? roundedValue.toString().split(".")[0] : roundedValue;
|
||||
} else {
|
||||
if (roundedValue.toString().includes(".")) {
|
||||
const splitRoundedValue = roundedValue.toString().split(".");
|
||||
const [predecimalPlaces, decimalPlaces] = splitRoundedValue;
|
||||
|
||||
const end = decimalPlaces.length === 0 ? "00" : decimalPlaces.length > 2 ? decimalPlaces.substring(0, 2) : `${decimalPlaces}0`;
|
||||
|
||||
return `${predecimalPlaces},${end}`;
|
||||
} else {
|
||||
return `${roundedValue},00`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function calcTimeWithDuration(timeAsString, timeElement, start, duration, isFormatChange, isInMin) {
|
||||
start = combineDateAndTime(start, timeAsString);
|
||||
|
||||
const x = new Date(start.getTime() + duration * 60000);
|
||||
timeElement.val(`${x.getMinutes().toString().padStart(2, "0")}:${x.getMinutes().toString().padStart(2, "0")}`);
|
||||
}
|
||||
|
||||
function beiDaueraenderung(idPrefix) {
|
||||
const hoursMinutesDropdown = $(`#${idPrefix}-hours-minutes-dropdown-btn`);
|
||||
|
||||
const startTimeInput = $(`#${idPrefix}-start-time-input`);
|
||||
const endTimeInput = $(`#${idPrefix}-end-time-input`);
|
||||
const durationInput = $(`#${idPrefix}-duration-input`);
|
||||
const startDateInput = $(`#${idPrefix}-start-date-input`);
|
||||
const endDateInput = $(`#${idPrefix}-end-date-input`);
|
||||
const isInMin = getIsZeiterfassungseinheitInMinutes();//hoursMinutesDropdown.length && hoursMinutesDropdown.text().replaceAll(/\s/g, "") === "Minuten" || 0 === hoursMinutesDropdown.length;
|
||||
|
||||
const startTimeCondition = startTimeInput.val().length > 0;
|
||||
const endTimeCondition = endTimeInput.val().length > 0;
|
||||
let duration = parseFloat(durationInput.val().replace(",", "."));
|
||||
|
||||
const durationCondition = false === isNaN(duration);
|
||||
|
||||
if((false === startTimeCondition && false === endTimeCondition) || false === durationCondition) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(false === isInMin) {
|
||||
duration *= 60;
|
||||
}
|
||||
|
||||
let start = new Date();
|
||||
let end = new Date();
|
||||
|
||||
if(startDateInput.length > 0) {
|
||||
start = new Date(startDateInput.val());
|
||||
end = new Date(start);
|
||||
}
|
||||
|
||||
if(endDateInput.length > 0) {
|
||||
end = new Date(endDateInput.val());
|
||||
}
|
||||
|
||||
if(true === startTimeCondition) {
|
||||
const startDateAndTimeCombined = combineDateAndTime(start, startTimeInput.val());
|
||||
|
||||
end = new Date(startDateAndTimeCombined.getTime() + duration * 60000);
|
||||
|
||||
endTimeInput.val(getTimeAsString(end));
|
||||
endDateInput.val(getDateAsString(end));
|
||||
} else {
|
||||
const endDateAndTimeCombined = combineDateAndTime(end, endTimeInput.val());
|
||||
|
||||
start = new Date(endDateAndTimeCombined.getTime() - duration * 60000);
|
||||
|
||||
startTimeInput.val(getTimeAsString(start));
|
||||
startDateInput.val(getDateAsString(start));
|
||||
}
|
||||
}
|
||||
|
||||
function combineDateAndTime(date, time) {
|
||||
const hours = time.split(":")[0];
|
||||
const minutes = time.split(":")[1];
|
||||
|
||||
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes);
|
||||
}
|
||||
|
||||
function getTimeAsString(date) {
|
||||
const hours = date.getHours().toString().padStart(2, "0");
|
||||
const minutes = date.getMinutes().toString().padStart(2, "0");
|
||||
|
||||
return `${hours}:${minutes}`;
|
||||
}
|
||||
|
||||
function getDateAsString(dateObject) {
|
||||
const year = dateObject.getFullYear();
|
||||
const date = dateObject.getDate().toString().padStart(2, "0");
|
||||
const month = (dateObject.getMonth() + 1).toString().padStart(2, "0");
|
||||
|
||||
return `${year}-${month}-${date}`;
|
||||
}
|
||||
|
||||
function dateToDateMonthFullYearStr(date) {
|
||||
const dayOfMonth = date.getDate();
|
||||
const month = date.getMonth() + 1;
|
||||
const fullYear = date.getFullYear();
|
||||
|
||||
return `${dayOfMonth}.${month}.${fullYear}`;
|
||||
}
|
||||
@@ -44,39 +44,43 @@ function resetCreateForm() {
|
||||
function submitSingleBookingForm() {
|
||||
showSpinner();
|
||||
|
||||
validateForm($("#singleBookingForm"), null);
|
||||
}
|
||||
|
||||
function submitCreateForm() {
|
||||
showSpinner();
|
||||
|
||||
validateForm($("#serviceRecordCreationForm"), null);
|
||||
}
|
||||
|
||||
function submitEditForm() {
|
||||
showSpinner();
|
||||
|
||||
validateForm($("#serviceRecordEditForm"), null);
|
||||
validateForm($("#singleBookingForm"), "sb");
|
||||
}
|
||||
|
||||
function submitGroupBookingEditForm() {
|
||||
showSpinner();
|
||||
|
||||
validateForm($("#groupBookingEditingForm"), null);
|
||||
validateForm($("#groupBookingEditingForm"), "gb");
|
||||
}
|
||||
|
||||
function submitGroupBookingForm() {
|
||||
showSpinner();
|
||||
|
||||
validateForm($("#groupBookingForm"), null);
|
||||
validateForm($("#groupBookingForm"), "gb");
|
||||
}
|
||||
|
||||
function deactivateGroupBookingForm() {
|
||||
$("#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() {
|
||||
$("#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 toggleGroupBookingForm() {
|
||||
const isEnabled = $("#selected-cb2sc-list").children().length > 0;
|
||||
|
||||
$(
|
||||
"#betrag, " +
|
||||
".gb-restore-btn," +
|
||||
"#employees-button, " +
|
||||
"#category-select, " +
|
||||
"#leistung-select, " +
|
||||
"#gb-start-date-input, " +
|
||||
"#gb-end-date-input, " +
|
||||
"#gb-start-time-input, " +
|
||||
"#gb-end-time-input, " +
|
||||
"#db-duration-input, " +
|
||||
"#gb-distance-input, " +
|
||||
"textarea, " +
|
||||
"#reset-button, " +
|
||||
"#create-button, " +
|
||||
"#textbausteine-button, " +
|
||||
"#gb-hours-minutes-dropdown-btn, " +
|
||||
"#marker-cb"
|
||||
).prop("disabled", isEnabled ? false : true);
|
||||
}
|
||||
|
||||
function deleteServiceRecord(serviceRecordOid) {
|
||||
@@ -156,15 +160,23 @@ function validateForm(form, prefix) {
|
||||
var numberOfNoticeTextareas = window.getNumberOfDokutypes();
|
||||
|
||||
var isValid = true;
|
||||
|
||||
|
||||
if(isNoticeMandatory) {
|
||||
if(numberOfNoticeTextareas === 0) {
|
||||
var doku = $(`#${prefix}dokufeld`).val();
|
||||
var doku = $(`#${prefix}-dokufeld-textarea`).val();
|
||||
|
||||
if(doku === undefined || doku === null) {
|
||||
doku = "";
|
||||
}
|
||||
|
||||
isValid = doku.length > 0;
|
||||
} else {
|
||||
for(var i = 0; i < numberOfNoticeTextareas; i++) {
|
||||
var d = $(`#${prefix}doku-textarea-${i}`).val();
|
||||
var d = $(`#${prefix}-doku-textarea-${i}`).val();
|
||||
|
||||
if(d === undefined || d === null) {
|
||||
d = "";
|
||||
}
|
||||
|
||||
isValid = d.length > 0;
|
||||
|
||||
@@ -175,7 +187,7 @@ function validateForm(form, prefix) {
|
||||
}
|
||||
|
||||
if(isValid === false) {
|
||||
errorMessage = `Bitte füllen Sie ${numberOfNoticeTextareas > 1 ? "mindestens ein" : "das"} Dokumentationsfeld aus.<br/>`;
|
||||
errorMessage = `Bitte füllen Sie ${numberOfNoticeTextareas > 1 ? "mindestens ein" : "das"} Dokumentationsfeld aus.<br>`;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,7 +195,7 @@ function validateForm(form, prefix) {
|
||||
|
||||
if(startAndEndDates === null && isValid) {
|
||||
isValid = false;
|
||||
errorMessage += "Die Datums- und / oder Zeitangaben sind nicht korrekt.<br/>";
|
||||
errorMessage += "Die Datums- und / oder Zeitangaben sind nicht korrekt.<br>";
|
||||
}
|
||||
|
||||
if(isValid === false) {
|
||||
@@ -202,17 +214,19 @@ function validateForm(form, prefix) {
|
||||
if(startAndEndDates !== null && isValid) {
|
||||
var [start, end] = startAndEndDates;
|
||||
|
||||
if(end.isBefore(start)) {
|
||||
showAlertMessageBox("Fehler", "Das Ende muss vor dem Start liegen!", null, false);
|
||||
if(end.getTime() < start.getTime()) {
|
||||
showAlertMessageBox("Fehler", "Der Start muss vor dem Ende liegen!", null, false);
|
||||
hideSpinner();
|
||||
return;
|
||||
}
|
||||
|
||||
var [doku1, doku2, doku3, doku4, doku5] = getDokuTexte();
|
||||
var [doku1, doku2, doku3, doku4, doku5] = getDokuTexte(prefix);
|
||||
|
||||
var startTimeInput = $(`#${prefix}start-time`);
|
||||
var endTimeInput = $(`#${prefix}end-time`);
|
||||
|
||||
$("#srv-date").val(start.format("DD.MM.YYYY"));
|
||||
$("#srv-end-date").val(end.format("DD.MM.YYYY"));
|
||||
var startTimeInput = $(`#${prefix}-start-time-input`);
|
||||
var endTimeInput = $(`#${prefix}-end-time-input`);
|
||||
|
||||
$("#srv-date").val(`${getDateAsString(start)}`);
|
||||
$("#srv-end-date").val(`${getDateAsString(end)}`);
|
||||
$("#srv-start").val(startTimeInput.val());
|
||||
$("#srv-end").val(endTimeInput.val());
|
||||
|
||||
@@ -221,11 +235,11 @@ function validateForm(form, prefix) {
|
||||
$("#srv-doku3").val(doku3);
|
||||
$("#srv-doku4").val(doku4);
|
||||
$("#srv-doku5").val(doku5);
|
||||
$("#srv-distance").val($(`#${prefix}distance`).val());
|
||||
$("#srv-distance").val($(`#${prefix}-distance-input`).val());
|
||||
$("#srv-form-id").val(form.attr("id"));
|
||||
$("#srv-marker").val($(`#${prefix}marker-cb`).is(":checked") ? "on" : "off");
|
||||
$("#srv-service-description").val($(`#${prefix}leistung-select`).find(":selected").val());
|
||||
$("#srv-duration").val($(`#${prefix}duration`).val());
|
||||
$("#srv-marker").val($(`#${prefix}-marker-cb`).is(":checked") ? "on" : "off");
|
||||
$("#srv-service-description").val($(`#${prefix}-leistung-select`).find(":selected").val());
|
||||
$("#srv-duration").val($(`#${prefix}-duration-input`).val());
|
||||
$("#srv-betrag").val($("#betrag").val());
|
||||
|
||||
showSpinner();
|
||||
@@ -233,21 +247,17 @@ function validateForm(form, prefix) {
|
||||
}
|
||||
}
|
||||
|
||||
function getDokuTexte() {
|
||||
function getDokuTexte(prefix) {
|
||||
const noticeList = [null, null, null, null, null];
|
||||
|
||||
try {
|
||||
const noticeList = [null, null, null, null, null];
|
||||
|
||||
const isMultiBooking = $("#mb-dokufeld").length > 0 || $("#mb-doku-textarea-0").length > 0;
|
||||
|
||||
const multiBookingPrefix = isMultiBooking ? "mb-" : "";
|
||||
|
||||
const hasMultipleDokufelder = $(`#${multiBookingPrefix}dokufeld`).length === 0;
|
||||
const hasMultipleDokufelder = $(`#${prefix}-dokufeld-textarea`).length === 0;
|
||||
|
||||
let dokufeldCounter = 0;
|
||||
|
||||
if(hasMultipleDokufelder) {
|
||||
for(let i = 0; i < 5; i++) {
|
||||
const dokufeld = $(`#${multiBookingPrefix}doku-textarea-${i}`);
|
||||
const dokufeld = $(`#${prefix}-doku-textarea-${i}`);
|
||||
|
||||
if(dokufeld.length > 0) {
|
||||
noticeList[i] = dokufeld.val();
|
||||
@@ -255,22 +265,22 @@ function getDokuTexte() {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
noticeList[0] = $(`#${multiBookingPrefix}dokufeld`).val();
|
||||
noticeList[0] = $(`#${prefix}-dokufeld-textarea`).val();
|
||||
dokufeldCounter = 1;
|
||||
}
|
||||
|
||||
let x = "";
|
||||
for(let ii = 0; ii < dokufeldCounter; ii++) {
|
||||
x += noticeList[ii];
|
||||
for(let j = 0; j < dokufeldCounter; j++) {
|
||||
x += noticeList[j];
|
||||
|
||||
if(ii < noticeList.length - 1) {
|
||||
if(j < noticeList.length - 1) {
|
||||
x += ", ";
|
||||
}
|
||||
}
|
||||
|
||||
return noticeList;
|
||||
} catch (error) {
|
||||
} catch(error) {
|
||||
window.showErrorPopup(error);
|
||||
} finally {
|
||||
return noticeList;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,91 +338,53 @@ function getStartAndEndDate(prefix) {
|
||||
if(prefix === undefined || prefix === null) {
|
||||
prefix = "";
|
||||
}
|
||||
|
||||
var startTimePicker = $(`#${prefix}start-time-picker`);
|
||||
var endTimePicker = $(`#${prefix}end-time-picker`);
|
||||
var startDatePicker = $(`#${prefix}start-date-picker`);
|
||||
var endDatePicker = $(`#${prefix}end-date-picker`);
|
||||
|
||||
startDatePicker.datetimepicker("show");
|
||||
startDatePicker.datetimepicker("hide");
|
||||
|
||||
endDatePicker.datetimepicker("show");
|
||||
endDatePicker.datetimepicker("hide");
|
||||
|
||||
var startDate = startDatePicker.datetimepicker("date");
|
||||
var endDate = endDatePicker.datetimepicker("date");
|
||||
const startDateInput = $(`#${prefix}-start-date-input`);
|
||||
const endDateInput = $(`#${prefix}-end-date-input`);
|
||||
const startTimeInput = $(`#${prefix}-start-time-input`);
|
||||
const endTimeInput = $(`#${prefix}-end-time-input`);
|
||||
logInfo(`Prefix: ${prefix}`);
|
||||
return validateStartAndEndInputs(startDateInput, startTimeInput, endDateInput, endTimeInput, true);
|
||||
}
|
||||
|
||||
var a = startDate === undefined || startDate === null || !startDate.isValid();
|
||||
var b = endDatePicker.length === 0 ? false : endDate === undefined || endDate === null || !endDate.isValid();
|
||||
|
||||
// Bei leeren Startzeit- und Endzeitfeldern. Muss ein Dummydate zurückgeben,
|
||||
// damit das Speichern ohne Angabe der Start- und Endzeit möglich ist.
|
||||
if(a && $(`#${prefix}start-time`).val().length === 0 || $(`#${prefix}end-time`).val().length === 0) {
|
||||
var dummyStart = startDate;
|
||||
var dummyEnd = endDatePicker.length === 0 ? startDate.clone() : endDate;
|
||||
|
||||
dummyStart.hours(0);
|
||||
dummyStart.minutes(0);
|
||||
dummyStart.seconds(1);
|
||||
|
||||
dummyEnd.hours(0);
|
||||
dummyEnd.minutes(0);
|
||||
dummyEnd.seconds(1);
|
||||
|
||||
if (dummyEnd.isBefore(dummyStart)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [dummyStart, dummyEnd];
|
||||
function validateStartAndEndInputs(startDateInput, startTimeInput, endDateInput, endTimeInput, isServiceRecord) {
|
||||
if(isServiceRecord === undefined || isServiceRecord === null) {
|
||||
isServiceRecord = false;
|
||||
}
|
||||
|
||||
startTimePicker.datetimepicker("show");
|
||||
startTimePicker.datetimepicker("hide");
|
||||
logInfo2(`Startdatum: ${startDateInput.prop("id")}`);
|
||||
|
||||
endTimePicker.datetimepicker("show");
|
||||
endTimePicker.datetimepicker("hide");
|
||||
const startDate = new Date(startDateInput.val());
|
||||
const startTime = startTimeInput.val();
|
||||
|
||||
var startTime = startTimePicker.datetimepicker("date");
|
||||
var endTime = endTimePicker.datetimepicker("date");
|
||||
let endDate = new Date(endDateInput.val());
|
||||
const endTime = endTimeInput.val();
|
||||
|
||||
var c = startTime === undefined || startTime === null || !startTime.isValid();
|
||||
var d = endTime === undefined || endTime === null || !endTime.isValid();
|
||||
|
||||
if(a || b || c || d) {
|
||||
if(endDateInput.length === 0) {
|
||||
endDate = startDate;
|
||||
}
|
||||
|
||||
const isStartDateValid = false === isNaN(startDate.getTime());
|
||||
const isEndDateValid = endDateInput.length ? false === isNaN(endDate.getTime()) : true;
|
||||
|
||||
if(isStartDateValid && startTime.length === 0 || isEndDateValid && endTime.length === 0) {
|
||||
const startValue = `${getDateAsString(startDate)}T00:00:0${(isServiceRecord ? "1" : "0")}`;
|
||||
const endValue = `${getDateAsString(endDate)}T00:00:0${(isServiceRecord ? "1" : "0")}`;
|
||||
|
||||
return [new Date(startValue), new Date(endValue)];
|
||||
}
|
||||
|
||||
const isStartTimeValid = startTime.length > 0;
|
||||
const isEndTimeValid = endTime.length > 0;
|
||||
|
||||
if(false === isStartTimeValid || false === isStartDateValid || false === isEndTimeValid || false === isEndDateValid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if(endDatePicker.length === 0 || endDate.isValid() === false) {
|
||||
endDate = startDate.clone();
|
||||
}
|
||||
|
||||
startDate = startDate.hours(startTime.hours());
|
||||
startDate = startDate.minutes(startTime.minutes());
|
||||
|
||||
endDate = endDate.hours(endTime.hours());
|
||||
endDate = endDate.minutes(endTime.minutes());
|
||||
|
||||
if(endDate.isBefore(startDate)) {
|
||||
// Wenn das Enddatum nicht sichtbar ist und der Termin länger als den Starttag geht, muss das Enddatum neu berechnet werden
|
||||
// Bei Vorhandensein der Minuten/Stunden-Auswahl ist kein (h) im Dauertext!
|
||||
var dropDownbutton = $(`#${prefix}hours-minutes-dropdown-btn`);
|
||||
|
||||
var hasMinHourDropdown = dropDownbutton.length > 0;
|
||||
var duration = $(`#${prefix}duration`).val();
|
||||
var isHour = $(`#${prefix}duration`).prev().text().trim() === "Dauer (h)" || (hasMinHourDropdown && $(`#${prefix}hours-minutes-dropdown-btn`).text() === "Stunden");
|
||||
var minutesToAdd = isHour ? 60 * duration : duration;
|
||||
|
||||
endDate = startDate.clone().add(minutesToAdd, "minutes");
|
||||
|
||||
return endDate.isBefore(startDate) ? null : [startDate, endDate];
|
||||
}
|
||||
|
||||
return [startDate, endDate];
|
||||
return [combineDateAndTime(startDate, startTime), combineDateAndTime(endDate, endTime)];
|
||||
}
|
||||
|
||||
|
||||
|
||||
function supportConceptSearchOnChange() {
|
||||
try {
|
||||
var text = $("#support-concept-search-input").val().toLowerCase();
|
||||
|
||||
@@ -49,13 +49,22 @@ namespace BeWoPlanerMobil.Service
|
||||
|
||||
var serverPath = HttpContext.Current.Server.MapPath(null);
|
||||
|
||||
serverPath = Path.Combine(serverPath, ConfigurationManager.AppSettings.Get("MultitenancyPath"));
|
||||
var multitenancyPath = ConfigurationManager.AppSettings.Get("MultitenancyPath");
|
||||
var configFileName = $"{MobileSessionFacade.Tenant}.config";
|
||||
|
||||
serverPath = Path.Combine(serverPath, MobileSessionFacade.Tenant + ".config");
|
||||
serverPath = Path.Combine(serverPath, multitenancyPath);
|
||||
|
||||
serverPath = Path.Combine(serverPath, configFileName);
|
||||
|
||||
if(!File.Exists(serverPath))
|
||||
{
|
||||
return null;
|
||||
serverPath = HttpContext.Current.Server.MapPath(null);
|
||||
serverPath = Path.Combine(serverPath, Path.Combine("..\\", Path.Combine(multitenancyPath, configFileName)));
|
||||
|
||||
if(!File.Exists(serverPath))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
var config = new Configuration().Configure(serverPath).SetInterceptor(new MobileUpdInsInterceptor()).BuildSessionFactory();
|
||||
|
||||
@@ -76,16 +76,16 @@ namespace BeWoPlanerMobil.Util
|
||||
|
||||
public JsonCustomer(CustomerDC customer, List<BeWoFolderDC> folderTree, Dictionary<string, string> icd10Diagnosen)
|
||||
{
|
||||
Krankenkasse = customer.HealthInsurance;
|
||||
Krankenkasse = customer.HealthInsurance;
|
||||
Versichertennummer = customer.InsuranceNumber;
|
||||
Versichertenstatus = customer.VersichertenStatus;
|
||||
|
||||
HasDisabilities = customer.Disabilities.Any();
|
||||
SchwebiIsUnlimited = customer.AusweisUnbefristetGueltig == true ? "JA" : "NEIN";
|
||||
HasDisabilities = customer.Disabilities.Any();
|
||||
SchwebiIsUnlimited = customer.AusweisUnbefristetGueltig == true ? "JA" : "NEIN";
|
||||
SchwebiGradDerBehinderung = customer.GradDerBehinderung;
|
||||
SchwebiPflegegrad = customer.Pflegegrad?.ToString() ?? string.Empty;
|
||||
SchwebiAktenzeichen = customer.AusweisAktenzeichen;
|
||||
SchwebiMerkzeichen = string.Empty;
|
||||
SchwebiPflegegrad = customer.Pflegegrad?.ToString() ?? string.Empty;
|
||||
SchwebiAktenzeichen = customer.AusweisAktenzeichen;
|
||||
SchwebiMerkzeichen = string.Empty;
|
||||
foreach(var mz in customer.MerkzeichenListe)
|
||||
{
|
||||
SchwebiMerkzeichen += $"{mz}; ";
|
||||
@@ -119,7 +119,7 @@ namespace BeWoPlanerMobil.Util
|
||||
Vorname = customer.FirstName;
|
||||
Nachname = customer.LastName;
|
||||
Alias = customer.CustomerAlias;
|
||||
Geburtstag = customer.DateOfBirth?.ToShortDateString() ?? string.Empty;
|
||||
Geburtstag = customer.DateOfBirth?.ToString("yyyy-MM-dd") ?? string.Empty;
|
||||
|
||||
switch(customer.Sex)
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$(".collapse").on("shown.bs.collapse", function() {
|
||||
$(".collapse").on("shown.bs.collapse", function () {
|
||||
window.saveCollapsibleState($(this).attr("id"), "@Url.Action("SaveCollapsibleStatus")");
|
||||
});
|
||||
|
||||
@@ -168,12 +168,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid mt-3 px-0 lg-max-width" id="customer-container">
|
||||
<div class="container-fluid mt-1 px-0 lg-max-width" id="customer-container">
|
||||
@if(Model?.SelectedJsonCustomer != null)
|
||||
{
|
||||
@* ----- Details ----- *@
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this, resizeCustomerPrependElements)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -191,14 +191,14 @@
|
||||
var inputDisabled = !AbstractModel.HasRightToEditCustomers ? "disabled" : string.Empty;
|
||||
|
||||
<div class="row" id="stammdaten-container">
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3 px-1">
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-2 px-1">
|
||||
<div class="card">
|
||||
<div class="card-body pb-0">
|
||||
<div class="card-title text-bewo-customer-card-header">
|
||||
Eigenschaften
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-eigenschaften">
|
||||
@@ -213,7 +213,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-eigenschaften">
|
||||
@@ -228,7 +228,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-eigenschaften">
|
||||
@@ -240,29 +240,22 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="input-group date" id="date-of-birth-picker" data-target-input="nearest">
|
||||
<div class="form-group w-100 mt-1 my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-eigenschaften">
|
||||
Geburtstag
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" @inputDisabled id="date-of-birth"
|
||||
<input type="date" @inputDisabled id="date-of-birth-input"
|
||||
autocomplete="on"
|
||||
name="geburtstag" class="form-control datetimepicker-input"
|
||||
data-target="#date-of-birth-picker"
|
||||
value="@Model.SelectedJsonCustomer.Geburtstag"
|
||||
data-toggle="datetimepicker" />
|
||||
<div class="input-group-append" data-target="#date-of-birth-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
name="geburtstag" class="form-control"
|
||||
value="@Model.SelectedJsonCustomer.Geburtstag" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-eigenschaften">
|
||||
@@ -286,7 +279,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text">
|
||||
@@ -298,7 +291,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text">
|
||||
@@ -310,7 +303,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 my-1">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text">
|
||||
@@ -324,14 +317,14 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3 px-1">
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-2 px-1">
|
||||
<div class="card">
|
||||
<div class="card-body pb-0">
|
||||
<div class="card-title text-bewo-customer-card-header">
|
||||
<a href="@Model.SelectedJsonCustomer.GoogleMapsLink" target="_blank" class="text-bewo-customer-card-header">Adresse<i class="fas fa-map-marker-alt ml-3"></i></a>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-adresse">
|
||||
@@ -343,7 +336,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-adresse">
|
||||
@@ -355,7 +348,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-adresse">
|
||||
@@ -367,7 +360,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 my-1">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-adresse">
|
||||
@@ -381,14 +374,14 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3 px-1">
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-2 px-1">
|
||||
<div class="card">
|
||||
<div class="card-body pb-0">
|
||||
<div class="card-title text-bewo-customer-card-header">
|
||||
Rechnungsadresse
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-rechnungsadresse">
|
||||
@@ -400,7 +393,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-rechnungsadresse">
|
||||
@@ -412,7 +405,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-rechnungsadresse">
|
||||
@@ -424,7 +417,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mb-1">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-rechnungsadresse">
|
||||
@@ -438,14 +431,14 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-3 px-1">
|
||||
<div class="col-sm-6 col-md-6 col-lg-6 col-xl-3 mt-2 px-1">
|
||||
<div class="card">
|
||||
<div class="card-body pb-0">
|
||||
<div class="card-title text-bewo-customer-card-header">
|
||||
Kontakt
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-kontakt">
|
||||
@@ -462,7 +455,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-kontakt">
|
||||
@@ -479,7 +472,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 mt-1 mb-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-kontakt">
|
||||
@@ -491,7 +484,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group w-100">
|
||||
<div class="form-group w-100 my-1">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-prepend-text-kontakt">
|
||||
@@ -511,7 +504,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-6 col-lg-12 my-3 px-1">
|
||||
<div class="col-sm-12 col-md-6 col-lg-12 mt-2 px-1">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="card-header">
|
||||
<div class="clearfix">
|
||||
@@ -528,7 +521,7 @@
|
||||
|
||||
@if(AbstractModel.HasRightToEditCustomers)
|
||||
{
|
||||
<div class="col-12 my-3 px-1">
|
||||
<div class="col-12 mb-2 px-1 mt-2">
|
||||
<button type="submit" class="btn btn-primary float-right w-100 m-0" onclick="showSpinner()">Speichern</button>
|
||||
</div>
|
||||
}
|
||||
@@ -542,8 +535,8 @@
|
||||
@* ----- Aktenzeichen ----- *@
|
||||
if(Model.SelectedJsonCustomer.ReferenceNumbers.Any())
|
||||
{
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -592,8 +585,8 @@
|
||||
@* ----- Umfeld ----- *@
|
||||
if(Model.SelectedJsonCustomer.Umfeldpersonen.Any())
|
||||
{
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -694,8 +687,8 @@
|
||||
@* ----- Organisationen des Umfelds ----- *@
|
||||
if(Model.SelectedJsonCustomer.Organisations.Any())
|
||||
{
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down text-bewo-customer-card-header h-100"></i>
|
||||
@@ -817,8 +810,8 @@
|
||||
@* ----- Dokumente ----- *@
|
||||
if(AbstractModel.HasRightToViewCustomerDocuments)
|
||||
{
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -844,8 +837,8 @@
|
||||
@* ----- Medikamentenliste ----- *@
|
||||
if(AbstractModel.IsAllowedToSeeMedikamentenliste)
|
||||
{
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -868,8 +861,8 @@
|
||||
@* ----- Diagnosen ----- *@
|
||||
if(AbstractModel.HasRightToViewDiagnosen && (Model.SelectedJsonCustomer.HasDiagnosen || Model.SelectedJsonCustomer.HasDisabilities || Model.SelectedJsonCustomer.HasSchwebi))
|
||||
{
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -1005,7 +998,7 @@
|
||||
if(isAllowedToViewBargeldkassen)
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -1030,8 +1023,8 @@
|
||||
@* ----- Abwesenheiten ----- *@
|
||||
if(AbstractModel.HasRightToViewCustomerAbsenceTimes)
|
||||
{
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -1063,8 +1056,8 @@
|
||||
|
||||
if(AbstractModel.HasRightToViewBetreuung && (hasRelatedEmployees || hasRelatedTeams))
|
||||
{
|
||||
<div class="col-12 my-3">
|
||||
<div class="card w-100 h-100">
|
||||
<div class="col-12">
|
||||
<div class="card w-100 h-100 my-1">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-bewo-customer-card-header"></i>
|
||||
@@ -1099,10 +1092,10 @@
|
||||
<span>×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body" id="customer-absence-time-modal-body">
|
||||
<div class="modal-body p-2" id="customer-absence-time-modal-body">
|
||||
@Html.Partial("CustomerAbsenceTimeFormPartial", Model)
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="modal-footer p-2">
|
||||
<button class="btn btn-primary" type="button" onclick="submitCustomerAbsenceTimesForm()">OK</button>
|
||||
<button class="btn btn-secondary" type="button" data-dismiss="modal" onclick="clearCustomerAbsenceTimesForm()">Abbrechen</button>
|
||||
</div>
|
||||
|
||||
@@ -40,31 +40,30 @@
|
||||
$("#form-validation-result-column").addClass("d-none");
|
||||
$("#form-validation-result-container").html("");
|
||||
|
||||
var validationMessage = "";
|
||||
let validationMessage = "";
|
||||
|
||||
var allDay = $("#customer-absence-time-allday-cb").is(":checked");
|
||||
const allDay = $("#customer-absence-time-allday-cb").is(":checked");
|
||||
|
||||
var startDateString = $("#customer-absence-time-start-date").val();
|
||||
var endDateString = $("#customer-absence-time-end-date").val();
|
||||
var startTimeString = $("#customer-absence-time-start-time").val();
|
||||
var endTimeString = $("#customer-absence-time-end-time").val();
|
||||
const startDateString = $("#customer-absence-time-start-date-input").val();
|
||||
const endDateString = $("#customer-absence-time-end-date-input").val(); // z.B. 2025-05-20
|
||||
const startTimeString = $("#customer-absence-time-start-time-input").val(); // z.B. 09:17
|
||||
const endTimeString = $("#customer-absence-time-end-time-input").val();
|
||||
|
||||
var isInfinite = endDateString.length === 0 && endTimeString.length === 0;
|
||||
const isInfinite = endDateString.length === 0 && endTimeString.length === 0;
|
||||
|
||||
var start = allDay ? moment(startDateString, "DD.MM.YYYY") : moment(startDateString + " " + startTimeString, "DD.MM.YYYY hh:mm");
|
||||
var end = allDay ? moment(endDateString, "DD.MM.YYYY") : moment(endDateString + " " + endTimeString, "DD.MM.YYYY hh:mm");
|
||||
const start = allDay ? new Date(startDateString) : combineDateAndTime(new Date(startDateString), startTimeString);
|
||||
const end = allDay ? new Date(endDateString) : combineDateAndTime(new Date(endDateString), endTimeString);
|
||||
|
||||
|
||||
var isStartValid = start.isValid();
|
||||
var isEndValid = end.isValid() || isInfinite;
|
||||
const isStartValid = false === isNaN(start.getTime());
|
||||
const isEndValid = false === isNaN(end.getTime()) || isInfinite;
|
||||
|
||||
if(!isStartValid || !isEndValid) {
|
||||
return "Die Datumsangaben sind ungültig!";
|
||||
}
|
||||
|
||||
var selectedOption = $("#absence-reason-select option:selected");
|
||||
const selectedOption = $("#absence-reason-select option:selected");
|
||||
|
||||
if(!isInfinite && isStartValid === true && end.isBefore(start)) {
|
||||
if(!isInfinite && end.getTime() > start.getTime()) {
|
||||
validationMessage = "Das Enddatum muss vor dem Startdatum liegen.";
|
||||
}
|
||||
|
||||
@@ -84,13 +83,14 @@
|
||||
|
||||
function toggleAllDay() {
|
||||
try {
|
||||
var isChecked = $("#customer-absence-time-allday-cb").is(":checked");
|
||||
const checkbox = $("#customer-absence-time-allday-cb");
|
||||
const isChecked = checkbox.is(":checked");
|
||||
|
||||
if(isChecked === true) {
|
||||
$("#customer-absence-time-start-time, #customer-absence-time-end-time").val("");
|
||||
$("#customer-absence-time-start-time-input, #customer-absence-time-end-time-input").val(null);
|
||||
}
|
||||
|
||||
$("#customer-absence-time-start-time, #customer-absence-time-end-time").prop("disabled", isChecked);
|
||||
$("#customer-absence-time-start-time-input, #customer-absence-time-end-time-input").prop("disabled", isChecked);
|
||||
} catch(error) {
|
||||
showErrorPopup(error);
|
||||
}
|
||||
@@ -98,10 +98,10 @@
|
||||
|
||||
function submitCustomerAbsenceTimesForm() {
|
||||
try {
|
||||
var validationMessage = validateAbsenceTimeForm();
|
||||
const validationMessage = validateAbsenceTimeForm();
|
||||
|
||||
if(validationMessage !== undefined && validationMessage !== null && validationMessage.length > 0) {
|
||||
$("#form-validation-result-column").removeClass("d-none");
|
||||
$("#form-validation-result-row").removeClass("d-none");
|
||||
$("#form-validation-result-container").html(validationMessage);
|
||||
|
||||
return;
|
||||
@@ -132,8 +132,8 @@
|
||||
var isAllDay = Model.SelectedAbsenceTime?.Start?.IsTimeZero() ?? false;
|
||||
var allDay = isAllDay ? "checked" : "";
|
||||
var isDisabled = isAllDay ? "disabled" : "";
|
||||
var startDate = Model.SelectedAbsenceTime?.Start?.ToString("dd.MM.yyyy");
|
||||
var endDate = Model.SelectedAbsenceTime?.End?.ToString("dd.MM.yyyy");
|
||||
var startDate = Model.SelectedAbsenceTime?.Start?.ToString("yyyy-MM-dd");
|
||||
var endDate = Model.SelectedAbsenceTime?.End?.ToString("yyyy-MM-dd");
|
||||
var startTime = Model.SelectedAbsenceTime?.Start?.ToString("HH:mm");
|
||||
var endTime = Model.SelectedAbsenceTime?.End?.ToString("HH:mm");
|
||||
|
||||
@@ -148,87 +148,63 @@
|
||||
}
|
||||
|
||||
<input type="hidden" name="customer-absence-time-oid" value="@Model.SelectedAbsenceTime?.AbsenceTimeOid" />
|
||||
|
||||
<div class="form-row d-none" id="form-validation-result-row">
|
||||
<div class="col-12">
|
||||
<div class="alert alert-danger mb-0" role="alert" id="form-validation-result-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Neue Datums- und Zeitinputs *@
|
||||
<div class="form-row">
|
||||
<div class="col-12 d-none" id="form-validation-result-column">
|
||||
<div class="alert alert-danger" role="alert" id="form-validation-result-container"></div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg">
|
||||
<div class="form-group my-2">
|
||||
<div class="input-group date" id="customer-absence-time-start-date-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-absence-time-prepend">
|
||||
Startdatum
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" id="customer-absence-time-start-date" name="customer-absence-time-start-date" class="form-control datetimepicker-input" data-target="#customer-absence-time-start-date-picker" data-toggle="datetimepicker" value="@startDate" />
|
||||
<div class="input-group-append" data-target="#customer-absence-time-start-date-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg">
|
||||
<div class="form-group my-2">
|
||||
<div class="input-group date" id="customer-absence-time-end-date-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-absence-time-prepend">
|
||||
Enddatum
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" id="customer-absence-time-end-date" name="customer-absence-time-end-date" class="form-control datetimepicker-input" data-target="#customer-absence-time-end-date-picker" data-toggle="datetimepicker" value="@endDate" />
|
||||
<div class="input-group-append" data-target="#customer-absence-time-end-date-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Startdatum
|
||||
</span>
|
||||
</div>
|
||||
<input type="date" value="@startDate" class="form-control" id="customer-absence-time-start-date-input" name="customer-absence-time-start-date" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Enddatum
|
||||
</span>
|
||||
</div>
|
||||
<input type="date" value="@endDate" class="form-control" id="customer-absence-time-end-date-input" name="customer-absence-time-end-date" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-lg">
|
||||
<div class="form-group my-2">
|
||||
<div class="input-group date" id="customer-absence-time-start-time-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-absence-time-prepend">
|
||||
Von
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" @isDisabled id="customer-absence-time-start-time" name="customer-absence-time-start-time" class="form-control datetimepicker-input" data-target="#customer-absence-time-start-time-picker" value="@startTime" />
|
||||
<div class="input-group-append" data-target="#customer-absence-time-start-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg">
|
||||
<div class="form-group my-2">
|
||||
<div class="input-group date" id="customer-absence-time-end-time-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-absence-time-prepend">
|
||||
Bis
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" @isDisabled id="customer-absence-time-end-time" name="customer-absence-time-end-time" class="form-control datetimepicker-input" data-target="#customer-absence-time-end-time-picker" value="@endTime" />
|
||||
<div class="input-group-append" data-target="#customer-absence-time-end-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Von
|
||||
</span>
|
||||
</div>
|
||||
<input type="time" class="form-control" id="customer-absence-time-start-time-input" name="customer-absence-time-start-time" @isDisabled value="@startTime" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Bis
|
||||
</span>
|
||||
</div>
|
||||
<input type="time" class="form-control" id="customer-absence-time-end-time-input" name="customer-absence-time-end-time" @isDisabled value="@endTime" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@* /Neue Datums- und Zeitinputs *@
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="col-md py-1">
|
||||
<div class="custom-control custom-checkbox custom-control-inline">
|
||||
<input type="checkbox" class="custom-control-input" name="customer-absence-time-allday-cb" id="customer-absence-time-allday-cb" onclick="toggleAllDay()" @allDay />
|
||||
<label class="custom-control-label" for="customer-absence-time-allday-cb">Ganztäglich</label>
|
||||
@@ -238,7 +214,7 @@
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-2">
|
||||
<div class="form-group mb-2 mt-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text customer-absence-time-prepend">
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
$("#transaktionsunterschriftencontainer").addClass("d-block");
|
||||
$("#transaktionsunterschriftencontainer").removeClass("d-none");
|
||||
|
||||
resizeCanvas("#transaktionsunterschriftencanvas", "#transaktionsunterschriften-canvas-row");
|
||||
updateCanvasSize($("#transaktionsunterschriftencanvas"));
|
||||
|
||||
const canvas = document.getElementById("transaktionsunterschriftencanvas");
|
||||
|
||||
|
||||
@@ -28,6 +28,9 @@
|
||||
{
|
||||
var start = relation.StartDate.HasValue ? $"{relation.StartDate.Value:dd.MM.yyyy}" : "";
|
||||
var end = relation.EndDate.HasValue ? $"{relation.EndDate.Value:dd.MM.yyyy}" : "";
|
||||
|
||||
var relationRole = relation.RelationRole?.DisplayName ?? string.Empty;
|
||||
|
||||
<div class="col mb-3">
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
@@ -39,7 +42,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-secondary align-text-top">Rolle:</td>
|
||||
<td class="text-right align-text-top">@relation.RelationRole.DisplayName</td>
|
||||
<td class="text-right align-text-top">@relationRole</td>
|
||||
</tr>
|
||||
@if(!string.IsNullOrWhiteSpace(start))
|
||||
{
|
||||
@@ -93,7 +96,7 @@
|
||||
@foreach(var teamRelation in Model.SelectedCustomer.RelatedTeams)
|
||||
{
|
||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 row-cols-xl-4">
|
||||
<div class="col mb-3">
|
||||
<div class="col mb-0">
|
||||
<div class="card h-100">
|
||||
<div class="card-body">
|
||||
<table class="w-100">
|
||||
|
||||
@@ -24,17 +24,17 @@ else if(Model != null)
|
||||
{
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
resizeCanvas("#sketch-pad", "#canvas-row");
|
||||
resizeCanvas($("#sketch-pad"));
|
||||
|
||||
var canvas = document.getElementById("sketch-pad");
|
||||
const canvas = document.getElementById("sketch-pad");
|
||||
|
||||
var signaturePad = new SignaturePad(canvas, { backgroundColor: "rgba(255, 255, 255, 0)" });
|
||||
|
||||
var saveButton = document.getElementById("save-signature-btn");
|
||||
var clearButton = document.getElementById("clear-canvas-btn");
|
||||
const saveButton = document.getElementById("save-signature-btn");
|
||||
const clearButton = document.getElementById("clear-canvas-btn");
|
||||
|
||||
var saveButtonClone = saveButton.cloneNode(true);
|
||||
var clearButtonClone = clearButton.cloneNode(true);
|
||||
const saveButtonClone = saveButton.cloneNode(true);
|
||||
const clearButtonClone = clearButton.cloneNode(true);
|
||||
|
||||
saveButton.parentNode.replaceChild(saveButtonClone, saveButton);
|
||||
clearButton.parentNode.replaceChild(clearButtonClone, clearButton);
|
||||
@@ -56,18 +56,18 @@ else if(Model != null)
|
||||
try {
|
||||
showSpinner();
|
||||
|
||||
var date = moment(new Date());
|
||||
const date = moment(new Date());
|
||||
|
||||
var clonedCanvas = trimCanvas(cloneCanvas(document.getElementById("sketch-pad")));
|
||||
const clonedCanvas = trimCanvas(cloneCanvas(document.getElementById("sketch-pad")));
|
||||
|
||||
var context = clonedCanvas.getContext("2d", { willReadFrequently: true });
|
||||
const context = clonedCanvas.getContext("2d", { willReadFrequently: true });
|
||||
context.globalCompositeOperation = "destination-over";
|
||||
context.fillStyle = "white";
|
||||
context.fillRect(0, 0, clonedCanvas.width, clonedCanvas.height);
|
||||
|
||||
var dataUrl = clonedCanvas.toDataURL("image/png");
|
||||
const dataUrl = clonedCanvas.toDataURL("image/png");
|
||||
|
||||
var formattedDate = date.format("DD.MM.YYYY HH:mm:ss");
|
||||
const formattedDate = date.format("DD.MM.YYYY HH:mm:ss");
|
||||
|
||||
$.post("@Url.Action("SaveSignature")", {base64Image: dataUrl, creationDate: formattedDate}).done(function (response) {
|
||||
hideSpinner();
|
||||
@@ -86,7 +86,7 @@ else if(Model != null)
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
showErrorPopup(error);
|
||||
window.showErrorPopup(error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +94,12 @@ else if(Model != null)
|
||||
try {
|
||||
signaturePad.clear();
|
||||
} catch(error) {
|
||||
showErrorPopup(error);
|
||||
window.showErrorPopup(error);
|
||||
}
|
||||
}
|
||||
|
||||
$(window).resize(function() {
|
||||
resizeCanvas("#sketch-pad", "#canvas-row");
|
||||
updateCanvasSize($("#sketch-pad"));
|
||||
});
|
||||
</script>
|
||||
<div class="container m-3 mx-auto">
|
||||
|
||||
@@ -8,65 +8,77 @@
|
||||
{
|
||||
<text>
|
||||
<script type="text/javascript">
|
||||
$("#second-logout-form").submit();
|
||||
$("#second-logout-form").submit();
|
||||
</script>
|
||||
</text>
|
||||
}
|
||||
}
|
||||
|
||||
<script type="text/javascript">
|
||||
function addScCbRelsToGroupBooking() {
|
||||
var selectedGroups = [];
|
||||
var selectedSupportConcepts = [];
|
||||
function toggleForm() {
|
||||
const checkedCheckboxes = $(".cb2sc-input:checkbox:checked");
|
||||
|
||||
$("#group-booking-supportconcepts input:checked").each(function () {
|
||||
selectedSupportConcepts.push($(this).attr("value"));
|
||||
});
|
||||
|
||||
$("#group-booking-groups input:checked").each(function () {
|
||||
selectedGroups.push($(this).attr("value"));
|
||||
});
|
||||
|
||||
$("#group-booking-sc-cb-rel-tab-content").load("@Url.Action("AddScCbRelsToGroupBooking")", {relOids: selectedSupportConcepts, groupOids: selectedGroups}, function() {
|
||||
$("#groupbooking-selection-container").load("@Url.Action("ReloadGroupBookingForm")", function () {
|
||||
const checkedCheckboxes = $(".cb2sc-input:checkbox:checked");
|
||||
|
||||
$("#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, #betrag")
|
||||
.prop("disabled", (checkedCheckboxes.length > 0 ? false : true));
|
||||
|
||||
$("#goals-tree").load("@Url.Action("ReloadGoals")", function () {
|
||||
$("#goal-ratings-container").load("@Url.Action("ReloadGoalRatings")", function() {
|
||||
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
$(
|
||||
"#employees-button, " +
|
||||
"#category-select, " +
|
||||
"#leistung-select, " +
|
||||
"#gb-start-date-input, " +
|
||||
"#gb-end-date-input, " +
|
||||
"#gb-start-time-input, " +
|
||||
"#gb-end-time-input, " +
|
||||
"#gb-duration-input, " +
|
||||
"#gb-distance-input, " +
|
||||
"textarea, " +
|
||||
"#reset-button, " +
|
||||
"#create-button, " +
|
||||
"#textbausteine-button, " +
|
||||
"#gb-hours-minutes-dropdown-btn, " +
|
||||
"#marker-cb")
|
||||
.prop("disabled", (checkedCheckboxes.length > 0 ? false : true));
|
||||
}
|
||||
|
||||
function removeSupportConceptCostBearerRel(relOid) {
|
||||
$(`#cb2sc-checkbox-${relOid}`).prop("checked", false);
|
||||
function addScCbRelsToGroupBooking() {
|
||||
var selectedGroups = [];
|
||||
var selectedSupportConcepts = [];
|
||||
|
||||
$("#groupbooking-selection-container").load("@Url.Action("RemoveSupportConceptCostbearerRel")", {relOid: relOid}
|
||||
, function () {
|
||||
$("#goals-tree").load("@Url.Action("ReloadGoals")"
|
||||
, function () {
|
||||
$("#goal-ratings-container").load("@Url.Action("ReloadGoalRatings")", function() {
|
||||
const checkedCheckboxes = $(".cb2sc-input:checkbox:checked");
|
||||
$("#group-booking-supportconcepts input:checked").each(function () {
|
||||
selectedSupportConcepts.push($(this).attr("value"));
|
||||
});
|
||||
|
||||
$("#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", (checkedCheckboxes.length > 0 ? false : true));
|
||||
$("#group-booking-groups input:checked").each(function () {
|
||||
selectedGroups.push($(this).attr("value"));
|
||||
});
|
||||
|
||||
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
$("#group-booking-sc-cb-rel-tab-content").load("@Url.Action("AddScCbRelsToGroupBooking")", {relOids: selectedSupportConcepts, groupOids: selectedGroups}, function() {
|
||||
$("#groupbooking-selection-container").load("@Url.Action("ReloadGroupBookingForm")", function () {
|
||||
toggleForm();
|
||||
|
||||
$("#goals-tree").load("@Url.Action("ReloadGoals")", function () {
|
||||
$("#goal-ratings-container").load("@Url.Action("ReloadGoalRatings")", function() {
|
||||
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function removeSupportConceptCostBearerRel(relOid) {
|
||||
$(`#cb2sc-checkbox-${relOid}`).prop("checked", false);
|
||||
|
||||
$("#groupbooking-selection-container").load("@Url.Action("RemoveSupportConceptCostbearerRel")", {relOid: relOid}
|
||||
, function () {
|
||||
$("#goals-tree").load("@Url.Action("ReloadGoals")"
|
||||
, function () {
|
||||
$("#goal-ratings-container").load("@Url.Action("ReloadGoalRatings")", function() {
|
||||
toggleForm();
|
||||
|
||||
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
</script>
|
||||
|
||||
@if(Model != null)
|
||||
@@ -75,8 +87,8 @@
|
||||
|
||||
using(Html.BeginForm("CreateOrUpdateGroupBooking", "Main", FormMethod.Post, new { id = "groupBookingForm" }))
|
||||
{
|
||||
var startDate = Model.SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
|
||||
var endDate = Model.SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
|
||||
var startDate = Model.SelectedServiceRecord?.Start?.ToString("yyyy-MM-dd") ?? DateTime.Today.ToString("yyyy-MM-dd");
|
||||
var endDate = Model.SelectedServiceRecord?.End?.ToString("yyyy-MM-dd") ?? DateTime.Today.ToString("yyyy-MM-dd");
|
||||
|
||||
var distance = Model.SelectedServiceRecord?.DistanceInMeter?.ToString() ?? string.Empty;
|
||||
|
||||
@@ -113,15 +125,15 @@
|
||||
<div class="form-row mt-2">
|
||||
<div class="col-md">
|
||||
<div class="custom-control custom-checkbox custom-control-inline">
|
||||
<input type="checkbox" class="custom-control-input" name="marker-cb" id="marker-cb" @markerCheckedValue />
|
||||
<label class="custom-control-label" for="marker-cb">Marker</label>
|
||||
<input type="checkbox" class="custom-control-input" name="marker-cb" id="gb-marker-cb" @markerCheckedValue />
|
||||
<label class="custom-control-label" for="gb-marker-cb">Marker</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* ----- Betrag ----- *@
|
||||
@if(Model.ShowBetrag)
|
||||
@if(AbstractModel.ShowBetrag)
|
||||
{
|
||||
var betrag = string.Empty;
|
||||
if(Model.SelectedServiceRecord?.Betrag != null && Model.SelectedServiceRecord.Betrag.Value > 0)
|
||||
@@ -152,109 +164,75 @@
|
||||
<hr class="py-0 mt-2 mb-0" />
|
||||
|
||||
@* Start- und Enddatum *@
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="start-date-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
Startdatum
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="start-date" name="Datum" class="form-control datetimepicker-input" data-target="#start-date-picker" data-toggle="datetimepicker" value="@startDate" />
|
||||
<div class="input-group-append" data-target="#start-date-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@{
|
||||
var columnWidth = Model.IsEndDateVisible ? "col-md-6" : "col";
|
||||
}
|
||||
|
||||
@if(Model.IsEndDateVisible)
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="end-date-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
Enddatum
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="end-date" name="Enddatum" class="form-control datetimepicker-input" data-target="#end-date-picker" data-toggle="datetimepicker" value="@endDate" />
|
||||
<div class="input-group-append" data-target="#end-date-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="@columnWidth mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Startdatum
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="date" name="Datum" id="gb-start-date-input" onchange="calcDuration('gb', false, true, false)" value="@startDate" />
|
||||
</div>
|
||||
</div>
|
||||
@if(Model.IsEndDateVisible)
|
||||
{
|
||||
<div class="col-md-6 mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Enddatum
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="date" name="Enddatum" id="gb-end-date-input" onchange="calcDuration('gb', false, false, true)" value="@endDate"/>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@* Von und Bis *@
|
||||
<div class="form-row">
|
||||
@{
|
||||
var startTimeValue = Model.StartTimeToEdit;
|
||||
var endTimeValue = Model.EndTimeToEdit;
|
||||
var divisor = Model.SelectedDurationUnit == "Stunden" ? 60 : 1;
|
||||
var durationValue = string.Empty;
|
||||
@{
|
||||
var startTimeValue = Model.StartTimeToEdit;
|
||||
var endTimeValue = Model.EndTimeToEdit;
|
||||
var divisor = Model.SelectedDurationUnit == "Stunden" ? 60 : 1;
|
||||
var durationValue = string.Empty;
|
||||
|
||||
if(!(Model.SelectedServiceRecord is null))
|
||||
{
|
||||
durationValue = (Model.SelectedServiceRecord?.RoundedDuration / divisor).ToString();
|
||||
}
|
||||
if(!(Model.SelectedServiceRecord is null))
|
||||
{
|
||||
durationValue = (Model.SelectedServiceRecord?.RoundedDuration / divisor).ToString();
|
||||
}
|
||||
|
||||
var afterValidationState = TempData[TempDataConstants.AfterValidationStateKey];
|
||||
var afterValidationState = TempData[TempDataConstants.AfterValidationStateKey];
|
||||
|
||||
if(Model.SetStartTimeToEndTimeAfterSave && !Model.IsInEditingMode && afterValidationState is bool isAfterValidation && isAfterValidation == false)
|
||||
{
|
||||
startTimeValue = Model.NewStartTime;
|
||||
endTimeValue = Model.NewEndTime;
|
||||
if(Model.NewDuration.HasValue)
|
||||
{
|
||||
durationValue = (Model.NewDuration / divisor).ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
if(Model.SetStartTimeToEndTimeAfterSave && !Model.IsInEditingMode && afterValidationState is bool isAfterValidation && isAfterValidation == false)
|
||||
{
|
||||
startTimeValue = Model.NewStartTime;
|
||||
endTimeValue = Model.NewEndTime;
|
||||
if(Model.NewDuration.HasValue)
|
||||
{
|
||||
durationValue = (Model.NewDuration / divisor).ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@* Von *@
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="start-time-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text sm-prepend-input-group-text">
|
||||
Von
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="start-time" name="Start" class="form-control datetimepicker-input" data-target="#start-time-picker" value="@startTimeValue" />
|
||||
<div class="input-group-append" data-target="#start-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Bis *@
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="end-time-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text sm-prepend-input-group-text">
|
||||
Bis
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="end-time" name="Ende" class="form-control datetimepicker-input" data-target="#end-time-picker" value="@endTimeValue" />
|
||||
<div class="input-group-append" data-target="#end-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Von
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="time" name="Start" id="gb-start-time-input" onchange="calcDuration('gb', false, true, false)" value="@startTimeValue" />
|
||||
<span class="input-group-text rounded-0 border-left-0 border-right-0">
|
||||
Bis
|
||||
</span>
|
||||
<input class="form-control" type="time" name="Ende" id="gb-end-time-input" onchange="calcDuration('gb', false, false, true)" value="@endTimeValue" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -271,11 +249,11 @@
|
||||
@labelText
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" 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="text" autocomplete="on" class="form-control" id="gb-duration-input" name="Dauer" onchange="beiDaueraenderung('gb')" value="@durationValue">
|
||||
@if(Model.IsZeiterfassungInStdMin)
|
||||
{
|
||||
<div class="input-group-append">
|
||||
<button id="hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle" type="button" data-toggle="dropdown">
|
||||
<button id="gb-hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle" type="button" data-toggle="dropdown">
|
||||
@Model.SelectedDurationUnit
|
||||
</button>
|
||||
<div class="dropdown-menu w-100">
|
||||
@@ -290,7 +268,7 @@
|
||||
</div>
|
||||
|
||||
@* Gefahrene Kilometer *@
|
||||
@if(Model.ShowDistanceField)
|
||||
@if(AbstractModel.ShowDistanceField)
|
||||
{
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
@@ -299,7 +277,7 @@
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text">Gefahrene Kilometer</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" class="form-control" id="distance" name="Distanz" onchange="validateDistanceInput()" value="@distance">
|
||||
<input type="text" autocomplete="on" class="form-control" id="gb-distance-input" name="Distanz" onchange="validateDistanceInput()" value="@distance">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -322,8 +300,11 @@
|
||||
@if(Model.NumberOfDokuTypes == 0)
|
||||
{
|
||||
<div class="form-group">
|
||||
<label for="dokufeld">Dokumentation</label>
|
||||
<textarea class="form-control" autocomplete="on" name="Dokumentation6" id="dokufeld">@notice0</textarea>
|
||||
<label for="gb-dokufeld-textarea">Dokumentation</label>
|
||||
<button type="button" class="btn btn-outline-bewo-dev btn-sm bg-restore-btn" onclick="restoreField('gb-dokufeld-textarea')">
|
||||
<i class="fas fa-recycle"></i>
|
||||
</button>
|
||||
<textarea class="form-control" autocomplete="on" name="Dokumentation6" id="gb-dokufeld-textarea">@notice0</textarea>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
@@ -334,8 +315,11 @@
|
||||
var currentDokuType = Model.Dokutypes[i];
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="#doku_@i" id="doku_@i-tab" data-toggle="tab" role="tab" class="nav-link@(i == 0 ? " active" : string.Empty)">
|
||||
<a href="#gb-doku_@i" id="gb-doku_@i-tab" data-toggle="tab" role="tab" class="nav-link@(i == 0 ? " active" : string.Empty)">
|
||||
@currentDokuType.DisplayName
|
||||
<button type="button" class="btn btn-outline-bewo-dev btn-sm gb-restore-btn" onclick="restoreField('gb-doku-textarea-@i')">
|
||||
<i class="fas fa-recycle"></i>
|
||||
</button>
|
||||
</a>
|
||||
</li>
|
||||
}
|
||||
@@ -345,8 +329,8 @@
|
||||
{
|
||||
var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1);
|
||||
|
||||
<div class="tab-pane show@(i == 0 ? " active" : string.Empty)" id="doku_@i" role="tabpanel">
|
||||
<textarea class="form-control doku-form-control" autocomplete="on" id="doku-textarea-@i" name="@textareaName">@noticeList[i]</textarea>
|
||||
<div class="tab-pane show@(i == 0 ? " active" : string.Empty)" id="gb-doku_@i" role="tabpanel">
|
||||
<textarea class="form-control doku-form-control" autocomplete="on" id="gb-doku-textarea-@i" name="@textareaName">@noticeList[i]</textarea>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@@ -13,13 +13,15 @@
|
||||
}
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$("#hours-minutes-dropdown-btn").on("click", function() {
|
||||
$("#hours-minutes-dropdown-btn").data("text", $("#hours-minutes-dropdown-btn").text().replaceAll(/\s/g, ""));
|
||||
$(document).ready(function() {
|
||||
const groupBookingHoursMinutesDropdownButton = $("#gb-hours-minutes-dropdown-btn");
|
||||
|
||||
groupBookingHoursMinutesDropdownButton.on("click", function() {
|
||||
groupBookingHoursMinutesDropdownButton.data("text", groupBookingHoursMinutesDropdownButton.text().replaceAll(/\s/g, ""));
|
||||
});
|
||||
|
||||
$(".hours-minutes-link").on("click", function () {
|
||||
const previousText = $("#hours-minutes-dropdown-btn").data("text");
|
||||
const previousText = groupBookingHoursMinutesDropdownButton.data("text");
|
||||
const currentText = $(this).text().replaceAll(/\s/g, "");
|
||||
|
||||
if(previousText === currentText) {
|
||||
@@ -27,15 +29,17 @@
|
||||
}
|
||||
|
||||
const buttonText = $(this).text();
|
||||
$("#hours-minutes-dropdown-btn").text(buttonText);
|
||||
groupBookingHoursMinutesDropdownButton.text(buttonText);
|
||||
|
||||
window.setInputFilter('duration', 'distance', 'hours-minutes-dropdown-btn');
|
||||
window.setInputFilter('gb-duration-input', 'distance', 'gb-hours-minutes-dropdown-btn');
|
||||
|
||||
$.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);
|
||||
calcDuration("gb", true, false, false);
|
||||
});
|
||||
|
||||
toggleGroupBookingForm();
|
||||
|
||||
window.calcPrependWidth();
|
||||
});
|
||||
|
||||
|
||||
@@ -53,21 +53,21 @@
|
||||
try {
|
||||
(new MoKPasswordSecurity("pw-strength-feedback")).validatePassword($("#new-password").val());
|
||||
} catch (error) {
|
||||
showErrorPopup(error);
|
||||
window.showErrorPopup(error);
|
||||
}
|
||||
}
|
||||
|
||||
function submitChangePasswordForm() {
|
||||
try {
|
||||
showSpinner();
|
||||
var form = $('#change-password-form');
|
||||
const form = $('#change-password-form');
|
||||
|
||||
var isValid = true;
|
||||
|
||||
$.each($(".pw-ch-in-container"),
|
||||
function (index, item) {
|
||||
var input = $(item).find("input");
|
||||
var feedback = $(item).find(".pw-chng-inv-fdb");
|
||||
const input = $(item).find("input");
|
||||
const feedback = $(item).find(".pw-chng-inv-fdb");
|
||||
|
||||
if (isEmptyOrSpaces(input.val())) {
|
||||
feedback.addClass("d-block");
|
||||
@@ -80,77 +80,29 @@
|
||||
feedback.addClass("was-validated");
|
||||
});
|
||||
|
||||
if (true === isValid) {
|
||||
if(true === isValid) {
|
||||
form.submit();
|
||||
} else {
|
||||
hideSpinner();
|
||||
}
|
||||
} catch (error) {
|
||||
showErrorPopup(error);
|
||||
window.showErrorPopup(error);
|
||||
}
|
||||
}
|
||||
|
||||
function getIsZeiterfassungseinheitInMinutes() {
|
||||
function getIsZeiterfassungseinheitInMinutes() {
|
||||
return "@Model.EinheitZeiterfassung" === "0";
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$("#start-date-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "L"
|
||||
});
|
||||
function restoreInputValues() {
|
||||
const beWoStorage = getBeWoStorage();
|
||||
|
||||
$("#end-date-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "L"
|
||||
});
|
||||
for(let i = 0; i < beWoStorage.inputList.length; i++) {
|
||||
const item = beWoStorage.inputList[i];
|
||||
|
||||
$("#start-time-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "LT"
|
||||
});
|
||||
|
||||
if ($("#end-time-picker").length !== 0) {
|
||||
$("#end-time-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "LT"
|
||||
});
|
||||
}
|
||||
|
||||
$("#time-frame-start-date-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "L"
|
||||
});
|
||||
|
||||
$("#time-frame-end-date-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "L"
|
||||
});
|
||||
|
||||
if("@Model.IsInMultiBookingMode".toLocaleLowerCase() === "true") {
|
||||
$("#mb-start-date-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "L"
|
||||
});
|
||||
|
||||
$("#mb-end-date-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "L"
|
||||
});
|
||||
|
||||
$("#mb-start-time-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "LT"
|
||||
});
|
||||
|
||||
if ($("#mb-end-time-picker").length !== 0) {
|
||||
$("#mb-end-time-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "LT"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
$(`#${item.inputId}`).val(item.inputValue);
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
try {
|
||||
@@ -179,17 +131,53 @@
|
||||
|
||||
$("#single-booking-employee-container").find(".dropdown-toggle").prop("disabled", (isSupportConceptSelected ? false : true));
|
||||
|
||||
$("#employeesDropDown, #category-select, #leistung-select, " +
|
||||
"#start-date, #end-date, #start-time, #end-time, #duration, " +
|
||||
"#distance, #textbausteine-button, #goals-button, textarea, #reset-button, " +
|
||||
"#create-button, #statistics-button, #timeFrameSelect, #hours-minutes-dropdown-btn, #marker-cb, #betrag").prop("disabled", (isSupportConceptSelected ? false : true));
|
||||
$(
|
||||
"#employeesDropDown, " +
|
||||
"#category-select, " +
|
||||
"#leistung-select, " +
|
||||
"#sb-start-date-input, #sb-end-date-input, #sb-start-time-input, #sb-end-time-input, " +
|
||||
"#sb-duration-input, #sb-hours-minutes-dropdown-btn, #sb-distance-input, " +
|
||||
|
||||
"#gb-start-date-input, #gb-end-date-input, #gb-start-time-input, #gb-end-time-input, " +
|
||||
"#gb-duration-input, #gb-hours-minutes-dropdown-btn, #gb-distance-input, " +
|
||||
|
||||
"#mb-start-date-input, #mb-end-date-input, #mb-start-time-input, #mb-end-time-input, " +
|
||||
"#mb-duration-input, #mb-hours-minutes-dropdown-btn, #mb-distance-input," +
|
||||
".sb-restore-btn, .gb-restore-btn, .mb-restore-btn" +
|
||||
|
||||
"#textbausteine-button, " +
|
||||
"#goals-button, " +
|
||||
"textarea, " +
|
||||
"#reset-button, " +
|
||||
"#create-button, " +
|
||||
"#statistics-button, " +
|
||||
"#timeFrameSelect, " +
|
||||
"#marker-cb, " +
|
||||
"#betrag"
|
||||
).prop("disabled", (isSupportConceptSelected ? false : true));
|
||||
|
||||
if("@Model.IsInGroupBookingMode".toLowerCase() === "true") {
|
||||
const hasSelectedSupportConcepts = "@Model.SelectedConceptCostBearerRelations.Any()".toLowerCase() === "true";
|
||||
|
||||
$("#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, #betrag").prop("disabled", (hasSelectedSupportConcepts ? false : true));
|
||||
$(
|
||||
"#employees-button, " +
|
||||
"#category-select, " +
|
||||
"#leistung-select, " +
|
||||
"#gb-start-date-input, " +
|
||||
"#gb-end-date-input, " +
|
||||
"#gb-start-time-input, " +
|
||||
"#gb-end-time-input, " +
|
||||
"#gb-duration-input, " +
|
||||
"#distance, " +
|
||||
"textarea, " +
|
||||
"#reset-button, " +
|
||||
"#create-button, " +
|
||||
"#textbausteine-button, " +
|
||||
"#gb-hours-minutes-dropdown-btn, " +
|
||||
"#marker-cb, " +
|
||||
"#betrag," +
|
||||
".gb-restore-btn"
|
||||
).prop("disabled", (hasSelectedSupportConcepts ? false : true));
|
||||
}
|
||||
|
||||
$("#fehlerdetail-textarea").prop("disabled", false);
|
||||
@@ -200,8 +188,6 @@
|
||||
window.toggleMultiBookingForm(isMultiBookingFormDisabled);
|
||||
}
|
||||
|
||||
initializeTimeInputs();
|
||||
|
||||
initializeSignatureImagePopup();
|
||||
|
||||
@if(TempData[TempDataConstants.ShowPwChPopupKey] is string passwordWarning && !string.IsNullOrEmpty(passwordWarning))
|
||||
@@ -211,14 +197,7 @@
|
||||
</text>
|
||||
}
|
||||
|
||||
@if (Model != null && Model.IsInEditingMode)
|
||||
{
|
||||
<text>
|
||||
$("#start-time-picker").trigger("change");
|
||||
</text>
|
||||
}
|
||||
|
||||
setInputFilter('duration', 'distance', 'hours-minutes-dropdown-btn');
|
||||
setInputFilter();
|
||||
|
||||
@if(Model.IsInGroupBookingMode)
|
||||
{
|
||||
@@ -247,109 +226,6 @@
|
||||
}
|
||||
});
|
||||
|
||||
function initializeTimeInputs() {
|
||||
try {
|
||||
var previousStartTime = "";
|
||||
$("#start-time-picker").on("change.datetimepicker",
|
||||
() => {
|
||||
// Von
|
||||
var startTimeValue = $("#start-time").val();
|
||||
|
||||
if(previousStartTime.length === 5 && startTimeValue.length === 0) {
|
||||
$("#duration").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
if(startTimeValue.length === 5 || startTimeValue.length === 0) {
|
||||
previousStartTime = startTimeValue;
|
||||
}
|
||||
|
||||
calculateDuration(false, 'start-time', 'end-time', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker', true, false);
|
||||
}
|
||||
);
|
||||
var previousEndTime = "";
|
||||
$("#end-time-picker").on("change.datetimepicker",
|
||||
() => {
|
||||
// Bis
|
||||
var endTimeValue = $("#end-time").val();
|
||||
|
||||
if(previousEndTime.length === 5 && endTimeValue.length === 0) {
|
||||
$("#duration").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
if(endTimeValue.length === 5 || endTimeValue.length === 0) {
|
||||
previousEndTime = endTimeValue;
|
||||
}
|
||||
|
||||
calculateDuration(false, 'start-time', 'end-time', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker', false, true);
|
||||
}
|
||||
);
|
||||
|
||||
$("#start-date-picker").on("change.datetimepicker", () => {
|
||||
calculateDuration(false, 'start-time', 'end-time', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker', true, false);
|
||||
});
|
||||
|
||||
if($("#end-time-picker").length !== 0) {
|
||||
$("#end-date-picker").on("change.datetimepicker",
|
||||
() => {
|
||||
calculateDuration(false, 'start-time', 'end-time', 'duration', 'hours-minutes-dropdown-btn', 'start-date-picker', 'end-date-picker', false, true);
|
||||
});
|
||||
}
|
||||
|
||||
var previousMultiBookingStartTime = "";
|
||||
$("#mb-start-time-picker").on("change.datetimepicker",
|
||||
() => {
|
||||
// Von
|
||||
var startTimeValue = $("#mb-start-time").val();
|
||||
|
||||
if (previousMultiBookingStartTime.length === 5 && startTimeValue.length === 0) {
|
||||
$("#mb-duration").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
if (startTimeValue.length === 5 || startTimeValue.length === 0) {
|
||||
previousMultiBookingStartTime = startTimeValue;
|
||||
}
|
||||
|
||||
calculateDuration(false, 'mb-start-time', 'mb-end-time', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker', true, false);
|
||||
}
|
||||
);
|
||||
var previousMultiBookingEndTime = "";
|
||||
$("#mb-end-time-picker").on("change.datetimepicker",
|
||||
() => {
|
||||
// Bis
|
||||
var endTimeValue = $("#mb-end-time").val();
|
||||
|
||||
if (previousMultiBookingEndTime.length === 5 && endTimeValue.length === 0) {
|
||||
$("#mb-duration").val("");
|
||||
return;
|
||||
}
|
||||
|
||||
if (endTimeValue.length === 5 || endTimeValue.length === 0) {
|
||||
previousMultiBookingEndTime = endTimeValue;
|
||||
}
|
||||
|
||||
calculateDuration(false, 'mb-start-time', 'mb-end-time', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker', false, true);
|
||||
}
|
||||
);
|
||||
|
||||
$("#mb-start-date-picker").on("change.datetimepicker",
|
||||
() => {
|
||||
calculateDuration(false, 'mb-start-time', 'mb-end-time', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker', true, false);
|
||||
});
|
||||
|
||||
if($("#mb-end-time-picker").length !== 0) {
|
||||
$("#mb-end-date-picker").on("change.datetimepicker",
|
||||
() => {
|
||||
calculateDuration(false, 'mb-start-time', 'mb-end-time', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker', false, true);
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
window.showErrorPopup(error);
|
||||
}
|
||||
}
|
||||
|
||||
function initializeSignatureImagePopup() {
|
||||
$("#signature-img-popup").on("hidden.bs.modal",
|
||||
function() {
|
||||
@@ -359,23 +235,25 @@
|
||||
);
|
||||
}
|
||||
|
||||
function setInputFilter(durationId, distanceId, hoursMinutesDropdownBtnId) {
|
||||
$(`#${durationId}`).inputFilter(function (value) {
|
||||
var result = /^\d*$/;
|
||||
const dropdownButton = $(`#${hoursMinutesDropdownBtnId}`);
|
||||
function setInputFilter() {
|
||||
$(`#sb-duration-input, #gb-duration-input, #mb-duration-input`).inputFilter(function(value, id) {
|
||||
var result = /^\d*$/;
|
||||
|
||||
if(dropdownButton.length && dropdownButton.text() === "Stunden" || getIsZeiterfassungseinheitInMinutes() === false) {
|
||||
const prefix = id.split("-")[0];
|
||||
const dropdownButton = $(`#${prefix}-hours-minutes-dropdown-btn`);
|
||||
|
||||
if(dropdownButton.length && dropdownButton.text().trim() === "Stunden") {
|
||||
result = /^\d*[.,]?\d*$/;
|
||||
}
|
||||
|
||||
return result.test(value);
|
||||
});
|
||||
|
||||
$(`#${distanceId}`).inputFilter(function(value) {
|
||||
$(`#sb-distance-input, #gb-distance-input, #mb-distance-input`).inputFilter(function(value, id) {
|
||||
return /^\d*[.,]?\d*$/.test(value);
|
||||
});
|
||||
|
||||
$(`#betrag`).inputFilter(function (value) {
|
||||
$(`#sb-betrag-input, #gb-betrag-input, #mb-betrag-input`).inputFilter(function(value, id) {
|
||||
return /^\d*([.,]?\d{0,2})?$/.test(value);
|
||||
});
|
||||
}
|
||||
@@ -383,7 +261,7 @@
|
||||
(function($) {
|
||||
$.fn.inputFilter = function(inputFilter) {
|
||||
return this.on("input keydown keyup mouseup select mousedown contextmenu drop", function() {
|
||||
if(inputFilter(this.value)) {
|
||||
if(inputFilter(this.value, this.id)) {
|
||||
this.oldValue = this.value;
|
||||
this.oldSelectionStart = this.selectionStart;
|
||||
this.oldSelectionEnd = this.selectionEnd;
|
||||
@@ -398,7 +276,7 @@
|
||||
}(jQuery));
|
||||
|
||||
$(window).resize(function() {
|
||||
resizeCanvas("#sketch-pad", "#canvas-row");
|
||||
updateCanvasSize($("#sketch-pad"));
|
||||
});
|
||||
|
||||
function getSetServiceRecordEmployeeUrl() {
|
||||
|
||||
@@ -7,57 +7,57 @@
|
||||
{
|
||||
<text>
|
||||
<script type="text/javascript">
|
||||
$("#second-logout-form").submit();
|
||||
$("#second-logout-form").submit();
|
||||
</script>
|
||||
</text>
|
||||
}
|
||||
}
|
||||
|
||||
<script type="text/javascript">
|
||||
function addScCbRelsToMultiBooking() {
|
||||
var selectedGroups = [];
|
||||
var selectedSupportConcepts = [];
|
||||
function addScCbRelsToMultiBooking() {
|
||||
var selectedGroups = [];
|
||||
var selectedSupportConcepts = [];
|
||||
|
||||
$("#multi-booking-supportconcepts input:checked").each(function () {
|
||||
selectedSupportConcepts.push($(this).attr("value"));
|
||||
});
|
||||
$("#multi-booking-supportconcepts input:checked").each(function () {
|
||||
selectedSupportConcepts.push($(this).attr("value"));
|
||||
});
|
||||
|
||||
$("#multi-booking-groups input:checked").each(function () {
|
||||
selectedGroups.push($(this).attr("value"));
|
||||
});
|
||||
$("#multi-booking-groups input:checked").each(function () {
|
||||
selectedGroups.push($(this).attr("value"));
|
||||
});
|
||||
|
||||
$("#multi-booking-sc-cb-rel-tab-content").load("@Url.Action("AddScCbRelsToMultiBooking")", {relOids: selectedSupportConcepts, groupOids: selectedGroups}, function() {
|
||||
$("#multibooking-selection-container").load("@Url.Action("ReloadMultiBookingForm")", function () {
|
||||
window.toggleMultiBookingForm($(".mb-cb2sc-input:checkbox:checked").length > 0 ? false : true);
|
||||
$("#multi-booking-sc-cb-rel-tab-content").load("@Url.Action("AddScCbRelsToMultiBooking")", {relOids: selectedSupportConcepts, groupOids: selectedGroups}, function() {
|
||||
$("#multibooking-selection-container").load("@Url.Action("ReloadMultiBookingForm")", function () {
|
||||
window.toggleMultiBookingForm($(".mb-cb2sc-input:checkbox:checked").length > 0 ? false : true);
|
||||
|
||||
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
||||
});
|
||||
});
|
||||
}
|
||||
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function removeSupportConceptCostBearerRel(relOid) {
|
||||
$(`#mb-cb2sc-checkbox-${relOid}`).prop("checked", false);
|
||||
function removeSupportConceptCostBearerRel(relOid) {
|
||||
$(`#mb-cb2sc-checkbox-${relOid}`).prop("checked", false);
|
||||
|
||||
$("#multibooking-selection-container").load("@Url.Action("RemoveSupportConceptCostbearerRelFromMultiBooking")", {relOid: relOid}
|
||||
, function () {
|
||||
$("#goals-tree").load("@Url.Action("ReloadGoals")"
|
||||
, function () {
|
||||
window.toggleMultiBookingForm($(".mb-cb2sc-input:checkbox:checked").length > 0 ? false : true);
|
||||
$("#multibooking-selection-container").load("@Url.Action("RemoveSupportConceptCostbearerRelFromMultiBooking")", {relOid: relOid}
|
||||
, function () {
|
||||
$("#goals-tree").load("@Url.Action("ReloadGoals")"
|
||||
, function () {
|
||||
window.toggleMultiBookingForm($(".mb-cb2sc-input:checkbox:checked").length > 0 ? false : true);
|
||||
|
||||
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
$("#tree").load("@Url.Action("LoadUpToDateTextModules")");
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
</script>
|
||||
|
||||
@if(Model != null)
|
||||
{
|
||||
using(Html.BeginForm("CreateMultiBooking", "Main", FormMethod.Post, new { id = "multiBookingForm" }))
|
||||
{
|
||||
var startDate = Model.SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
|
||||
var endDate = Model.SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToShortDateString();
|
||||
var startDate = Model.SelectedServiceRecord?.Start?.ToShortDateString() ?? DateTime.Today.ToString("yyyy-MM-dd");
|
||||
var endDate = Model.SelectedServiceRecord?.End?.ToShortDateString() ?? DateTime.Today.ToString("yyyy-MM-dd");
|
||||
|
||||
var distance = Model.SelectedServiceRecord?.DistanceInMeter?.ToString() ?? string.Empty;
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
}
|
||||
|
||||
@* ----- Betrag ----- *@
|
||||
@if(Model.ShowBetrag)
|
||||
@if(AbstractModel.ShowBetrag)
|
||||
{
|
||||
<div class="form-row mt-2">
|
||||
<div class="col-md">
|
||||
@@ -116,45 +116,34 @@
|
||||
<hr class="py-0 mt-2 mb-0" />
|
||||
|
||||
@* Start- und Enddatum *@
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="mb-start-date-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
Startdatum
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="mb-start-date" name="Datum" class="form-control datetimepicker-input" data-target="#mb-start-date-picker" data-toggle="datetimepicker" value="@startDate" />
|
||||
<div class="input-group-append" data-target="#mb-start-date-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@{
|
||||
var columnWidth = Model.IsEndDateVisible ? "col-md-6" : "col";
|
||||
}
|
||||
|
||||
@if(Model.IsEndDateVisible)
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="mb-end-date-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
Enddatum
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="mb-end-date" name="Enddatum" class="form-control datetimepicker-input" data-target="#mb-end-date-picker" data-toggle="datetimepicker" value="@endDate" />
|
||||
<div class="input-group-append" data-target="#mb-end-date-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="form-row">
|
||||
<div class="@columnWidth mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Startdatum
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="date" name="Datum" id="mb-start-date-input" onchange="calcDuration('mb', false, true, false)" value="@startDate" />
|
||||
</div>
|
||||
</div>
|
||||
@if(Model.IsEndDateVisible)
|
||||
{
|
||||
<div class="col-md-6 mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Enddatum
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="date" name="Enddatum" id="mb-end-date-input" onchange="calcDuration('mb', false, false, true)" value="@endDate" />
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@* Start- und Endzeit *@
|
||||
@@ -167,7 +156,7 @@
|
||||
|
||||
var durationValue = string.Empty;
|
||||
|
||||
if(!(Model.SelectedServiceRecord is null))
|
||||
if(Model.SelectedServiceRecord != null)
|
||||
{
|
||||
durationValue = (Model.SelectedServiceRecord?.RoundedDuration / divisor).ToString();
|
||||
}
|
||||
@@ -184,39 +173,19 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="mb-start-time-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text sm-prepend-input-group-text">
|
||||
Von
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="mb-start-time" name="Start" class="form-control datetimepicker-input" data-target="#mb-start-time-picker" value="@startTimeValue" />
|
||||
<div class="input-group-append" data-target="#mb-start-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="mb-end-time-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text sm-prepend-input-group-text">
|
||||
Bis
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="mb-end-time" name="Ende" class="form-control datetimepicker-input" data-target="#mb-end-time-picker" value="@endTimeValue" />
|
||||
<div class="input-group-append" data-target="#mb-end-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Von
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="time" name="Start" id="mb-start-time-input" onchange="calcDuration('mb', false, true, false)" value="@startTimeValue" />
|
||||
<span class="input-group-text rounded-0 border-left-0 border-right-0">
|
||||
Bis
|
||||
</span>
|
||||
<input class="form-control" type="time" name="Ende" id="mb-end-time-input" onchange="calcDuration('mb', false, false, true)" value="@endTimeValue" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -233,7 +202,7 @@
|
||||
@labelText
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" class="form-control" id="mb-duration" name="Dauer" onchange="onDurationChange('mb-start-time', 'mb-end-time', 'mb-start-date', 'mb-end-date', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker')" value="@durationValue">
|
||||
<input type="text" autocomplete="on" class="form-control" id="mb-duration-input" name="Dauer" onchange="beiDaueraenderung('mb')" value="@durationValue">
|
||||
@if(Model.IsZeiterfassungInStdMin)
|
||||
{
|
||||
<div class="input-group-append">
|
||||
@@ -252,7 +221,7 @@
|
||||
</div>
|
||||
|
||||
@* Gefahrene Kilometer *@
|
||||
@if(Model.ShowDistanceField)
|
||||
@if(AbstractModel.ShowDistanceField)
|
||||
{
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
@@ -263,7 +232,7 @@
|
||||
Gefahrene Kilometer
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" class="form-control" id="mb-distance" name="Distanz" onchange="validateDistanceInput()" value="@distance">
|
||||
<input type="text" autocomplete="on" class="form-control" id="mb-distance-input" name="Distanz" onchange="validateDistanceInput()" value="@distance">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -282,12 +251,15 @@
|
||||
|
||||
@* Dokumentationsfelder *@
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="col-md mt-2">
|
||||
@if(Model.NumberOfDokuTypes == 0)
|
||||
{
|
||||
<div class="form-group mt-2">
|
||||
<label for="mb-dokufeld">Dokumentation</label>
|
||||
<textarea class="form-control" autocomplete="on" name="Dokumentation6" id="mb-dokufeld">@notice0</textarea>
|
||||
<label for="mb-dokufeld-textarea">Dokumentation</label>
|
||||
<button type="button" class="btn btn-outline-bewo-dev btn-sm mb-restore-btn" onclick="restoreField('mb-dokufeld-textarea')">
|
||||
<i class="fas fa-recycle"></i>
|
||||
</button>
|
||||
<textarea class="form-control" autocomplete="on" name="Dokumentation6" id="mb-dokufeld-textarea">@notice0</textarea>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
@@ -300,6 +272,9 @@
|
||||
<li class="nav-item">
|
||||
<a href="#mb-doku_@i" id="mb-doku_@i-tab" data-toggle="tab" role="tab" class="nav-link@(i == 0 ? " active" : string.Empty)">
|
||||
@currentDokuType.DisplayName
|
||||
<button type="button" class="btn btn-outline-bewo-dev btn-sm mb-restore-btn" onclick="restoreField('mb-doku-textarea-@i')">
|
||||
<i class="fas fa-recycle"></i>
|
||||
</button>
|
||||
</a>
|
||||
</li>
|
||||
}
|
||||
|
||||
@@ -31,11 +31,11 @@
|
||||
const buttonText = $(this).text();
|
||||
$("#mb-hours-minutes-dropdown-btn").text(buttonText);
|
||||
|
||||
window.setInputFilter('mb-duration', 'mb-distance', 'mb-hours-minutes-dropdown-btn');
|
||||
window.setInputFilter('mb-duration-input', 'mb-distance-input', 'mb-hours-minutes-dropdown-btn');
|
||||
|
||||
$.get('@Url.Action("ToggleDurationUnit")', { isInHoursMode: buttonText === "Stunden" });
|
||||
|
||||
calculateDuration(true, 'mb-start-time', 'mb-end-time', 'mb-duration', 'mb-hours-minutes-dropdown-btn', 'mb-start-date-picker', 'mb-end-date-picker', false, false);
|
||||
calcDuration("mb", true, false, false);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
const hasEmployees = parseJason(result2);
|
||||
|
||||
if (hasSupportConcepts && hasEmployees) {
|
||||
validateForm($("#multiBookingForm"), "mb-");
|
||||
validateForm($("#multiBookingForm"), "mb");
|
||||
} else {
|
||||
hideSpinner();
|
||||
let message = "";
|
||||
|
||||
@@ -49,8 +49,7 @@
|
||||
{
|
||||
<li class="list-group-item">
|
||||
@{
|
||||
long groupOid;
|
||||
var wasSuccessful = long.TryParse(group.Value, out groupOid);
|
||||
var wasSuccessful = long.TryParse(group.Value, out var groupOid);
|
||||
|
||||
var shouldBeChecked = wasSuccessful ? Model.MultiBookingSelectedGroupOfPeopleOids.Contains(groupOid) : wasSuccessful;
|
||||
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
}
|
||||
|
||||
@* Löschen-Button *@
|
||||
@if(MainModel.IsAllowedToDeleteServiceRecord(serviceRecord))
|
||||
@if(Model.IsAllowedToDeleteServiceRecord(serviceRecord))
|
||||
{
|
||||
<button type="button" class="btn btn-outline-danger" onclick="deleteServiceRecord(@serviceRecord.ServiceRecordOid)">
|
||||
<span class="fas fa-trash-alt"></span>
|
||||
@@ -341,7 +341,7 @@
|
||||
</tr>
|
||||
|
||||
@* Gefahrene Kilometer *@
|
||||
@if(Model.ShowDistanceField && serviceRecord.DistanceInMeterDecimal != null && serviceRecord.DistanceInMeterDecimal.Value > 0)
|
||||
@if(AbstractModel.ShowDistanceField && serviceRecord.DistanceInMeterDecimal != null && serviceRecord.DistanceInMeterDecimal.Value > 0)
|
||||
{
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
@@ -407,7 +407,7 @@
|
||||
Angelegt für:
|
||||
</td>
|
||||
<td>
|
||||
@($"{serviceRecord.Employee.FirstName} {serviceRecord.Employee.LastName}")
|
||||
@serviceRecord.Employee.FirstNameLastName
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -433,7 +433,7 @@
|
||||
}
|
||||
|
||||
@* Betrag *@
|
||||
@if(Model.ShowBetrag && serviceRecord.Betrag.HasValue && serviceRecord.Betrag.Value > 0)
|
||||
@if(AbstractModel.ShowBetrag && serviceRecord.Betrag.HasValue && serviceRecord.Betrag.Value > 0)
|
||||
{
|
||||
var betrag = serviceRecord.Betrag.Value.ToString("#.00") + " €";
|
||||
|
||||
|
||||
@@ -16,13 +16,15 @@
|
||||
}
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$("#hours-minutes-dropdown-btn").on("click", function() {
|
||||
$("#hours-minutes-dropdown-btn").data("text", $("#hours-minutes-dropdown-btn").text().replaceAll(/\s/g, ""));
|
||||
$(document).ready(function() {
|
||||
const dropdownBtn = $("#sb-hours-minutes-dropdown-btn");
|
||||
|
||||
dropdownBtn.on("click", function() {
|
||||
dropdownBtn.data("text", dropdownBtn.text().replaceAll(/\s/g, ""));
|
||||
});
|
||||
|
||||
$(".hours-minutes-link").on("click", function () {
|
||||
const previousText = $("#hours-minutes-dropdown-btn").data("text");
|
||||
const previousText = dropdownBtn.data("text");
|
||||
const currentText = $(this).text().replaceAll(/\s/g, "");
|
||||
|
||||
if(previousText === currentText) {
|
||||
@@ -30,13 +32,13 @@
|
||||
}
|
||||
|
||||
const buttonText = $(this).text();
|
||||
$("#hours-minutes-dropdown-btn").text(buttonText);
|
||||
dropdownBtn.text(buttonText);
|
||||
|
||||
window.setInputFilter('duration', 'distance', 'hours-minutes-dropdown-btn');
|
||||
window.setInputFilter();
|
||||
|
||||
$.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);
|
||||
calcDuration("sb", true, false, false);
|
||||
});
|
||||
|
||||
@{
|
||||
@@ -161,6 +163,8 @@
|
||||
? "text-bewo-expires-in-three-months"
|
||||
: "text-light";
|
||||
|
||||
var isFormDisabled = Model.SelectedCostBearerSupportConceptRelOid.HasValue ? string.Empty : "disabled";
|
||||
|
||||
<div>
|
||||
<div class="container p-0">
|
||||
<div class="row">
|
||||
@@ -174,7 +178,7 @@
|
||||
{
|
||||
<div class="dropdown-divider my-0 py-0"></div>
|
||||
}
|
||||
<p class="mb-1 text-left @selectedSuportConceptTimeSpanColorClass" id="selectedSupportConceptInfo">
|
||||
<p class="mb-1 text-left small @selectedSuportConceptTimeSpanColorClass" id="selectedSupportConceptInfo">
|
||||
@Model.SelectedCostBearer2SupportConceptRelListObject.SupportConceptTimeSpan
|
||||
</p>
|
||||
</a>
|
||||
@@ -243,329 +247,289 @@
|
||||
|
||||
if(Model.IsCustomerAbsence)
|
||||
{
|
||||
<div class="container my-1 mb-0 mx-auto p-0 w-100 text-center bg-bewo-dev">
|
||||
<div class="container my-1 mb-0 mx-auto p-0 w-100 text-center">
|
||||
<span>
|
||||
<i class="fas fa-exclamation-triangle text-warning"></i>
|
||||
<div class="text-danger d-inline">Klient ist abwesend</div>
|
||||
<p class="text-danger">@Model.CustomerAbsenceInfo</p>
|
||||
<p class="text-danger mb-0 pb-0">@Model.CustomerAbsenceInfo</p>
|
||||
</span>
|
||||
</div>
|
||||
}
|
||||
|
||||
using(Html.BeginForm("CreateOrUpdateServiceRecord", "Main", FormMethod.Post, new { id = "singleBookingForm" }))
|
||||
{
|
||||
<div>
|
||||
@* ----- Einzelbuchung: Mitarbeiter ----- *@
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="mt-2" id="single-booking-employee-container">
|
||||
@Html.PopupWithSearchForIFilterables(Model.Employees, "setSelectedEmployeeForSingleBooking", null, Model.SelectedEmployee?.DetailDescription, "single-booking-employee-modal-popup", false)
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
@* ----- Einzelbuchung: Mitarbeiter ----- *@
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="mt-2" id="single-booking-employee-container">
|
||||
@Html.PopupWithSearchForIFilterables(Model.Employees, "setSelectedEmployeeForSingleBooking", null, Model.SelectedEmployee?.DetailDescription, "single-booking-employee-modal-popup", false)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* ----- Einzelbuchung: Ziele ----- *@
|
||||
@if(Model.SelectedSupportConcept != null && Model.SelectedSupportConcept.Goals.Any())
|
||||
{
|
||||
<!-- Einzelbuchung: Ziele -->
|
||||
<div class="form-row">
|
||||
<div class="col-md mt-2">
|
||||
<button type="button" class="btn btn-primary form-control" data-toggle="modal" data-target="#goal-popup" id="goals-button">
|
||||
Ziele <span class="badge badge-light text-primary">@Model.SelectedGoals.Count</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="collapse mt-2 w-100 max-vw-50 @Html.GetCollapsibleClass(Model.Collapsibles2IsShown, "goals-container")" id="goals-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* ----- Einzelbuchung: Kategorie & Leistung ----- *@
|
||||
<div id="category-to-description-container">
|
||||
@Html.Partial("Category2ServiceDescriptionPartial", Model)
|
||||
</div>
|
||||
|
||||
@* ----- Marker ----- *@
|
||||
@if(Model.ShowMarker)
|
||||
{
|
||||
var markerCheckedValue = Model.SelectedServiceRecord?.ServiceRecordType == ServiceRecordTypeId.Content ? "checked" : string.Empty;
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-md mt-1">
|
||||
<div class=" custom-control custom-checkbox custom-control-inline my-0">
|
||||
<input type="checkbox" class="custom-control-input" name="@FormCollectionConstants.MarkerKey" id="sb-marker-cb" @markerCheckedValue />
|
||||
<label class="custom-control-label" for="sb-marker-cb">Marker</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* ----- Einzelbuchung: Ziele ----- *@
|
||||
@if(Model.SelectedSupportConcept != null && Model.SelectedSupportConcept.Goals.Any())
|
||||
{
|
||||
<!-- Einzelbuchung: Ziele -->
|
||||
<div class="form-row">
|
||||
<div class="col-md mt-2">
|
||||
<button type="button" class="btn btn-primary form-control" data-toggle="modal" data-target="#goal-popup" id="goals-button">
|
||||
Ziele <span class="badge badge-light text-primary">@Model.SelectedGoals.Count</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="collapse mt-2 w-100 max-vw-50 @Html.GetCollapsibleClass(Model.Collapsibles2IsShown, "goals-container")" id="goals-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@* ----- Betrag ----- *@
|
||||
@if(AbstractModel.ShowBetrag)
|
||||
{
|
||||
var betrag = string.Empty;
|
||||
if(Model.SelectedServiceRecord?.Betrag != null && Model.SelectedServiceRecord.Betrag.Value > 0)
|
||||
{
|
||||
betrag = Model.SelectedServiceRecord.Betrag.Value.ToString("#.00");
|
||||
}
|
||||
|
||||
@* ----- Einzelbuchung: Kategorie & Leistung ----- *@
|
||||
<div id="category-to-description-container">
|
||||
@Html.Partial("Category2ServiceDescriptionPartial", Model)
|
||||
</div>
|
||||
|
||||
@* ----- Marker ----- *@
|
||||
@if(Model.ShowMarker)
|
||||
{
|
||||
var markerCheckedValue = Model.SelectedServiceRecord?.ServiceRecordType == ServiceRecordTypeId.Content ? "checked" : string.Empty;
|
||||
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="mt-1 custom-control custom-checkbox custom-control-inline">
|
||||
<input type="checkbox" class="custom-control-input" name="@FormCollectionConstants.MarkerKey" id="marker-cb" @markerCheckedValue />
|
||||
<label class="custom-control-label" for="marker-cb">Marker</label>
|
||||
<div class="form-row mt-1">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
Betrag
|
||||
</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 mt-2">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<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" autocomplete="on" type="text" id="betrag" name="betrag" value="@betrag" />
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">€</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input class="form-control" autocomplete="on" type="text" id="betrag" name="betrag" value="@betrag" />
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">€</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
<hr class="mt-2 mb-0" />
|
||||
|
||||
@* ----- Einzelbuchung: Startdatum und gegebenenfalls Enddatum ----- *@
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="start-date-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
Startdatum
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="start-date" name="Datum" class="form-control datetimepicker-input" data-target="#start-date-picker" data-toggle="datetimepicker" value="@Model.StartDateToEdit" />
|
||||
<div class="input-group-append" data-target="#start-date-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* ----- Einzelbuchung: Enddatum ----- *@
|
||||
@if (Model.IsEndDateVisible)
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="end-date-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
Enddatum
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="end-date" name="Enddatum" class="form-control datetimepicker-input" data-target="#end-date-picker" data-toggle="datetimepicker" value="@Model.EndDateToEdit" />
|
||||
<div class="input-group-append" data-target="#end-date-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@* ----- Einzelbuchung: Von ----- *@
|
||||
<div class="form-row">
|
||||
@{
|
||||
var startTimeValue = Model.StartTimeToEdit;
|
||||
var endTimeValue = Model.EndTimeToEdit;
|
||||
var divisor = Model.SelectedDurationUnit == "Stunden" ? 60 : 1;
|
||||
var durationValue = Model.DurationToEdit;
|
||||
|
||||
var afterValidationState = TempData[TempDataConstants.AfterValidationStateKey];
|
||||
|
||||
if (Model.SetStartTimeToEndTimeAfterSave && !Model.IsInEditingMode && afterValidationState is bool isAfterValidation && isAfterValidation == false)
|
||||
{
|
||||
startTimeValue = Model.NewStartTime;
|
||||
endTimeValue = Model.NewEndTime;
|
||||
durationValue = Model.NewDuration?.ToString();
|
||||
if (Model.NewDuration.HasValue)
|
||||
{
|
||||
durationValue = (Model.NewDuration / divisor).ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="start-time-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text sm-prepend-input-group-text px-2">
|
||||
Von
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="start-time" name="Start" class="form-control datetimepicker-input" data-target="#start-time-picker" value="@startTimeValue" />
|
||||
<div class="input-group-append" data-target="#start-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* ----- Einzelbuchung: Bis ----- *@
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group date mt-2" id="end-time-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text sm-prepend-input-group-text px-2">
|
||||
Bis
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" autocomplete="on" id="end-time" name="Ende" class="form-control datetimepicker-input" data-target="#end-time-picker" value="@endTimeValue" />
|
||||
<div class="input-group-append" data-target="#end-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* ----- Einzelbuchung: Dauer ----- *@
|
||||
<div class="form-row mt-2">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
@{
|
||||
var labelText = Model.EinheitZeiterfassung == 1 ? "Dauer (h)" : "Dauer";
|
||||
}
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
@labelText
|
||||
</div>
|
||||
</div>
|
||||
<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)
|
||||
{
|
||||
<div class="input-group-append">
|
||||
<button id="hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle w-100" type="button" data-toggle="dropdown">
|
||||
@Model.SelectedDurationUnit
|
||||
</button>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item hours-minutes-link" href="#">Minuten</a>
|
||||
<a class="dropdown-item hours-minutes-link" href="#">Stunden</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* ----- Einzelbuchung: Distanz ----- *@
|
||||
@if(Model.ShowDistanceField)
|
||||
{
|
||||
<div class="form-row mt-2">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text">
|
||||
Gefahrene Kilometer
|
||||
</div>
|
||||
</div>
|
||||
<input class="form-control" autocomplete="on" id="distance" name="Distanz" onchange="validateDistanceInput()" value="@Model.DistanceToEdit">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* ----- Einzelbuchung: Textbausteine ----- *@
|
||||
@if(AbstractModel.HasRightToSeeTextModules)
|
||||
{
|
||||
<script type="text/javascript">
|
||||
function textModuleButtonOnClick() {
|
||||
$('#tree').load('@Url.Action("LoadUpToDateTextModules")');
|
||||
}
|
||||
</script>
|
||||
<div class="form-row mt-2" id="textmodule-container">
|
||||
<div class="col-md">
|
||||
<button type="button" class="btn btn-primary form-control" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button" onclick="textModuleButtonOnClick()">Textbausteine</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* ----- Einzelbuchung: Dokumentation ----- *@
|
||||
<div class="form-row">
|
||||
<div class="col-md mt-3">
|
||||
@if (Model.NumberOfDokuTypes == 0)
|
||||
{
|
||||
<div class="form-group my-0">
|
||||
<label for="dokufeld">Dokumentation</label>
|
||||
<textarea class="form-control" autocomplete="on" style="overflow: scroll;" name="Dokumentation6" id="dokufeld">@Model.NoticeToEdit</textarea>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<ul class="nav nav-tabs" role="tab-list">
|
||||
@for (var i = 0; i < Model.Dokutypes.Length; i++)
|
||||
{
|
||||
var currentDokuType = Model.Dokutypes[i];
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="#doku_@i" id="doku_@i-tab" data-toggle="tab" role="tab" class="nav-link@(i == 0 ? " active" : string.Empty)">
|
||||
@currentDokuType.DisplayName
|
||||
</a>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
<div class="tab-content" id="dokufelderTab">
|
||||
@for (var i = 0; i < Model.Dokutypes.Length; i++)
|
||||
{
|
||||
var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1);
|
||||
|
||||
<div class="tab-pane show@(i == 0 ? " active" : string.Empty)" id="doku_@i" role="tabpanel">
|
||||
<textarea class="form-control doku-form-control" autocomplete="on" style="overflow: scroll;" id="doku-textarea-@i" name="@textareaName">@Model.NoticeListToEdit[i]</textarea>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
<hr class="mt-2 mb-0" />
|
||||
|
||||
@* ----- Einzelbuchung: Startdatum und gegebenenfalls Enddatum ----- *@
|
||||
@{
|
||||
var divisor = Model.SelectedDurationUnit == "Stunden" ? 60 : 1;
|
||||
var durationValue = Model.DurationToEdit;
|
||||
|
||||
var afterValidationState = TempData[TempDataConstants.AfterValidationStateKey];
|
||||
|
||||
if(Model.SetStartTimeToEndTimeAfterSave && !Model.IsInEditingMode && afterValidationState is bool and false)
|
||||
{
|
||||
durationValue = Model.NewDuration?.ToString();
|
||||
if(Model.NewDuration.HasValue)
|
||||
{
|
||||
durationValue = (Model.NewDuration / divisor).ToString();
|
||||
}
|
||||
}
|
||||
|
||||
<div class="d-flex bd-highlight mt-3">
|
||||
<div class="mr-auto bd-highlight"></div>
|
||||
var columnWidth = Model.IsEndDateVisible ? "col-md-6" : "col";
|
||||
}
|
||||
|
||||
@if(Model.IsInEditingMode)
|
||||
<div class="form-row">
|
||||
<div class="@columnWidth mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text prepend-input-group-text">
|
||||
Startdatum
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="date" name="Datum" id="sb-start-date-input" onchange="calcDuration('sb', false, true, false)" value="@Model.StartDateToEditJSFormat" />
|
||||
</div>
|
||||
</div>
|
||||
@if(Model.IsEndDateVisible)
|
||||
{
|
||||
<div class="col-md-6 mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text prepend-input-group-text">
|
||||
Enddatum
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="date" name="Enddatum" id="sb-end-date-input" onchange="calcDuration('sb', false, false, true)" value="@Model.EndDateToEditJSFormat" />
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col mt-2">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">
|
||||
Von
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="time" name="Start" id="sb-start-time-input" onchange="calcDuration('sb', false, true, false)" value="@Model.StartTimeToEdit" />
|
||||
<span class="input-group-text rounded-0 border-left-0 border-right-0">
|
||||
Bis
|
||||
</span>
|
||||
<input class="form-control" type="time" name="Ende" id="sb-end-time-input" onchange="calcDuration('sb', false, false, true)" value="@Model.EndTimeToEdit" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* ----- Einzelbuchung: Dauer ----- *@
|
||||
<div class="form-row mt-2">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
@{
|
||||
var labelText = Model.EinheitZeiterfassung == 1 ? "Dauer (h)" : "Dauer";
|
||||
}
|
||||
<div class="input-group-text prepend-input-group-text">
|
||||
@labelText
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="form-control" id="sb-duration-input" name="Dauer" onchange="beiDaueraenderung('sb')" value="@durationValue">
|
||||
@if(Model.IsZeiterfassungInStdMin)
|
||||
{
|
||||
<div class="input-group-append">
|
||||
<button id="sb-hours-minutes-dropdown-btn" class="btn btn-outline-primary dropdown-toggle w-100" type="button" data-toggle="dropdown">
|
||||
@Model.SelectedDurationUnit
|
||||
</button>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item hours-minutes-link" href="#">Minuten</a>
|
||||
<a class="dropdown-item hours-minutes-link" href="#">Stunden</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* ----- Einzelbuchung: Distanz ----- *@
|
||||
@if(AbstractModel.ShowDistanceField)
|
||||
{
|
||||
<div class="form-row mt-2">
|
||||
<div class="col-md">
|
||||
<div class="form-group my-0">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text">
|
||||
Gefahrene Kilometer
|
||||
</div>
|
||||
</div>
|
||||
<input class="form-control" autocomplete="on" id="sb-distance-input" name="Distanz" onchange="validateDistanceInput()" value="@Model.DistanceToEdit">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* ----- Einzelbuchung: Textbausteine ----- *@
|
||||
@if(AbstractModel.HasRightToSeeTextModules)
|
||||
{
|
||||
<script type="text/javascript">
|
||||
function textModuleButtonOnClick() {
|
||||
$('#tree').load('@Url.Action("LoadUpToDateTextModules")');
|
||||
}
|
||||
</script>
|
||||
<div class="form-row mt-2" id="textmodule-container">
|
||||
<div class="col-md">
|
||||
<button type="button" class="btn btn-primary form-control" data-toggle="modal" data-target="#textbausteine-popup" id="textbausteine-button" onclick="textModuleButtonOnClick()">Textbausteine</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* ----- Einzelbuchung: Dokumentation ----- *@
|
||||
<div class="form-row">
|
||||
<div class="col-md mt-3">
|
||||
@if(Model.NumberOfDokuTypes == 0)
|
||||
{
|
||||
<div class="form-group my-0">
|
||||
<label for="sb-dokufeld-textarea">Dokumentation</label>
|
||||
<button type="button" class="btn btn-outline-bewo-dev btn-sm sb-restore-btn" onclick="restoreField('sb-dokufeld-textarea')">
|
||||
<i class="fas fa-recycle"></i>
|
||||
</button>
|
||||
<textarea class="form-control" autocomplete="on" style="overflow: scroll;" name="Dokumentation6" id="sb-dokufeld-textarea">@Model.NoticeToEdit</textarea>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<ul class="nav nav-tabs" role="tab-list">
|
||||
@for(var i = 0; i < Model.Dokutypes.Length; i++)
|
||||
{
|
||||
var currentDokuType = Model.Dokutypes[i];
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="#sb-doku_@i" id="sb-doku_@i-tab" data-toggle="tab" role="tab" class="nav-link@(i == 0 ? " active" : string.Empty)">
|
||||
@currentDokuType.DisplayName
|
||||
<button type="button" class="btn btn-outline-bewo-dev btn-sm sb-restore-btn" onclick="restoreField('sb-doku-textarea-@i')">
|
||||
<i class="fas fa-recycle"></i>
|
||||
</button>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
<div class="tab-content" id="dokufelderTab">
|
||||
@for(var i = 0; i < Model.Dokutypes.Length; i++)
|
||||
{
|
||||
var textareaName = i + 1 < 1 ? "Dokumentation" : "Dokumentation" + (i + 1);
|
||||
|
||||
<div class="tab-pane show@(i == 0 ? " active" : string.Empty)" id="sb-doku_@i" role="tabpanel">
|
||||
<textarea class="form-control doku-form-control" autocomplete="on" style="overflow: scroll;" id="sb-doku-textarea-@i" name="@textareaName">@Model.NoticeListToEdit[i]</textarea>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
<div class="w-100 mt-2">
|
||||
<button type="button" class="btn btn-primary float-right ml-1" id="create-button" onclick="submitSingleBookingForm()">@Model.SubmitButtonValue</button>
|
||||
|
||||
@if(Model.IsInEditingMode)
|
||||
{
|
||||
using(Html.BeginForm("ResetEditingMode", "Main", FormMethod.Post))
|
||||
{
|
||||
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Abbrechen</button>
|
||||
<button type="submit" class="btn btn-primary float-right" onclick="showSpinner()">Abbrechen</button>
|
||||
}
|
||||
}
|
||||
else if(TempData[TempDataConstants.IsInTransferModeKey] is bool isInTransferMode && isInTransferMode)
|
||||
{
|
||||
using(Html.BeginForm("ResetTransferMode", "Main", FormMethod.Post))
|
||||
{
|
||||
<button type="submit" class="btn btn-primary" onclick="showSpinner()">Abbrechen</button>
|
||||
<button type="submit" class="btn btn-primary float-right" onclick="showSpinner()">Abbrechen</button>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="ml-3 bd-highlight">
|
||||
<button type="button" class="btn btn-primary" id="reset-button" onclick="resetSingleBookingForm()">Abbrechen</button>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary float-right" id="reset-button" onclick="resetSingleBookingForm()">Abbrechen</button>
|
||||
}
|
||||
|
||||
<div class="ml-3 bd-highlight">
|
||||
<button type="button" class="btn btn-primary" id="create-button" onclick="submitSingleBookingForm()">@Model.SubmitButtonValue</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@@ -29,42 +29,55 @@
|
||||
}
|
||||
|
||||
function textModuleOnClick(textModuleOid) {
|
||||
var focusedDokuFeld;
|
||||
let focusedDokuFeld;
|
||||
let prefix = "sb";
|
||||
|
||||
var dokufeldId = "#dokufeld";
|
||||
var dokuTextareaId = "#doku-textarea-";
|
||||
var textareaContainerId = "#doku_";
|
||||
|
||||
if("@Model.IsInMultiBookingMode".toLocaleLowerCase() === "true") {
|
||||
dokufeldId = "#mb-dokufeld";
|
||||
dokuTextareaId = "#mb-doku-textarea-";
|
||||
textareaContainerId = "#mb-doku_";
|
||||
if("@Model.IsInGroupBookingMode".toLocaleLowerCase() === "true") {
|
||||
prefix = "gb";
|
||||
}
|
||||
|
||||
if ("@Model.IsInMultiBookingMode".toLocaleLowerCase() === "true") {
|
||||
prefix = "mb";
|
||||
}
|
||||
|
||||
const dokufeldId = `#${prefix}-dokufeld-textarea`;
|
||||
const dokuTextareaId = `#${prefix}-doku-textarea-`;
|
||||
const textareaContainerId = `#${prefix}-doku_`;
|
||||
|
||||
$.get("@Url.Action("LoadCompleteTextbausteinByOid")", { pTextbausteinOid: textModuleOid }).done(function(textModuleText) {
|
||||
if($(dokufeldId).length > 0) {
|
||||
focusedDokuFeld = $(dokufeldId);
|
||||
} else {
|
||||
const numberOfDokutypes = getNumberOfDokutypes();
|
||||
if($(dokufeldId).length > 0) {
|
||||
focusedDokuFeld = $(dokufeldId);
|
||||
} else {
|
||||
const numberOfDokutypes = getNumberOfDokutypes();
|
||||
|
||||
for(let i = 0; i < numberOfDokutypes; i++) {
|
||||
const currentElement = $(`#doku_${i}`);
|
||||
for(let i = 0; i < numberOfDokutypes; i++) {
|
||||
const currentElement = $(`#${prefix}-doku_${i}`);
|
||||
|
||||
if(currentElement.css("display") !== "none") {
|
||||
focusedDokuFeld = $(dokuTextareaId + i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(currentElement.css("display") !== "none") {
|
||||
focusedDokuFeld = $(dokuTextareaId + i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const cursorPosition = focusedDokuFeld.prop("selectionStart");
|
||||
const v = focusedDokuFeld.val();
|
||||
const textBefore = v.substring(0, cursorPosition);
|
||||
const textAfter = v.substring(cursorPosition, v.length);
|
||||
const cursorPosition = focusedDokuFeld.prop("selectionStart");
|
||||
const v = focusedDokuFeld.val();
|
||||
|
||||
focusedDokuFeld.val(textBefore + textModuleText + textAfter);
|
||||
let wholeText = "";
|
||||
|
||||
$("#textbausteine-popup").modal("hide");
|
||||
if(cursorPosition === undefined || v === undefined) {
|
||||
wholeText = textModuleText;
|
||||
} else {
|
||||
const textBefore = v.substring(0, cursorPosition);
|
||||
const textAfter = v.substring(cursorPosition, v.length);
|
||||
|
||||
wholeText = textBefore + textModuleText + textAfter;
|
||||
}
|
||||
|
||||
focusedDokuFeld.val(wholeText);
|
||||
focusedDokuFeld.trigger("change");
|
||||
|
||||
$("#textbausteine-popup").modal("hide");
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
@using BeWoPlanerMobil.Util
|
||||
@using BeWoPlanerMobil.Models
|
||||
@using BeWoPlanerMobil.Util
|
||||
@using BeWoPlanerMobil.Util.ReportUtils
|
||||
@using BS.Shared
|
||||
@model BeWoPlanerMobil.Models.ReportModel
|
||||
|
||||
@{
|
||||
@@ -23,12 +25,6 @@
|
||||
$(document).ready(function () {
|
||||
$(".left-col").width(window.getMaxWidth("left-col"));
|
||||
});
|
||||
|
||||
$(".signature-card").ready(function () {
|
||||
setTimeout(function () {
|
||||
$(".signature-card").height(window.getMaxElementHeight("signature-card"));
|
||||
}, 100);
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="container-fluid lg-max-width">
|
||||
@@ -84,14 +80,14 @@
|
||||
}
|
||||
@if(message != null)
|
||||
{
|
||||
<div class="alert alert-primary d-block w-100 mt-4" role="alert">
|
||||
<div class="alert alert-primary mt-4 w-auto" role="alert">
|
||||
@Html.Raw(message)
|
||||
</div>
|
||||
}
|
||||
|
||||
@if(message2 != null)
|
||||
{
|
||||
<div class="alert alert-success d-block w-100 mt-4" role="alert">
|
||||
<div class="alert alert-success mt-4 mx-auto" style="width: fit-content;" role="alert">
|
||||
@Html.Raw(message2)
|
||||
</div>
|
||||
}
|
||||
@@ -150,38 +146,312 @@
|
||||
{
|
||||
var blubb = $"{(signature.NumberOfServiceRecords == 1 ? "eine" : signature.NumberOfServiceRecords.ToString())} erbrachte Leistung{(signature.NumberOfServiceRecords != 1 ? "en" : string.Empty)}";
|
||||
|
||||
<div class="@GetColumnClass()">
|
||||
<div class="card signature-card mt-4">
|
||||
<div class="justify-content-center">
|
||||
<img style="display: block; margin-left: auto; margin-right: auto; max-width: 100% !important;" src="@signature.ImageStr" alt="Unterschrift von @signature.PersonName geleistet am @signature.InsTsStr" />
|
||||
</div>
|
||||
<div class="card-body m-0 p-0" style="height: 0 !important;"></div>
|
||||
<div class="card-footer">
|
||||
<div class="row">
|
||||
<div class="col-auto left-col">
|
||||
Unterschrift von:
|
||||
</div>
|
||||
<div class="col">
|
||||
@signature.PersonName
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-auto left-col">
|
||||
Geleistet am:
|
||||
</div>
|
||||
<div class="col">
|
||||
@signature.InsTsStr
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-auto left-col">
|
||||
Geleistet für:
|
||||
</div>
|
||||
<div class="col">
|
||||
@blubb
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card signature-card mt-4 mx-1">
|
||||
<div>
|
||||
@* max-width: 100% !important; *@
|
||||
<img style="display: block; margin-left: auto; margin-right: auto;" src="@signature.ImageStr" alt="Unterschrift von @signature.PersonName geleistet am @signature.InsTsStr" />
|
||||
</div>
|
||||
<div class="card-body p-1 mb-0 pb-0">
|
||||
<table class="table table-sm service-record-table my-0">
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Unterschrift von:
|
||||
</td>
|
||||
<td>
|
||||
@signature.PersonName
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Geleistet am:
|
||||
</td>
|
||||
<td>
|
||||
@signature.InsTsStr
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="card w-100">
|
||||
<div class="card-header" onclick="cardHeaderClick2(this)">
|
||||
<div class="d-inline-flex">
|
||||
<i class="fas fa-chevron-down h-100 text-primary" id="chevron-test-collapsible"></i>
|
||||
</div>
|
||||
<div class="d-inline-flex text-primary h-100">
|
||||
<button type="button" class="btn btn-link">
|
||||
@blubb
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse @Html.GetCollapsibleClass(Model.Collapsibles2IsShown, $"c-qb-{signature.Identifier}")" id="c-qb-@signature.Identifier">
|
||||
<div class="card-body p-1">
|
||||
<div class="container p-0">
|
||||
@foreach(var serviceRecord in signature.ServiceRecords)
|
||||
{
|
||||
if(serviceRecord.Start is null || serviceRecord.End is 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)
|
||||
{
|
||||
massnahmenString += $" <strong style='color: blue;'>({goalRating.DisplayName})</strong>";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if(serviceRecord.Goals.IndexOf(goal) < serviceRecord.Goals.Count - 1)
|
||||
{
|
||||
massnahmenString += ", ";
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
foreach(var ziel in ziele)
|
||||
{
|
||||
if(ziel.Abbreviation != null && ziel.TypeDescription != null)
|
||||
{
|
||||
zieleString += $"{ziel.Abbreviation}: {ziel.TypeDescription} ";
|
||||
}
|
||||
else if(ziel.Abbreviation is null && ziel.TypeDescription != null)
|
||||
{
|
||||
zieleString += ziel.TypeDescription;
|
||||
}
|
||||
else if(ziel.Abbreviation != null && ziel.TypeDescription is null)
|
||||
{
|
||||
zieleString += ziel.Abbreviation;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
if(ziel.RatingTypeOid.HasValue)
|
||||
{
|
||||
var zielbewertung = Model.GoalRatingTypes.FirstOrDefault(goalRatingType => goalRatingType.RatingTypeOid.HasValue && goalRatingType.RatingTypeOid.Equals(ziel.RatingTypeOid.Value));
|
||||
|
||||
if(zielbewertung?.DisplayName != null && zielbewertung.DisplayName.Length > 0)
|
||||
{
|
||||
zieleString += $" <strong style='color: blue;'>({zielbewertung.DisplayName})</strong>";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
zieleString += ", ";
|
||||
}
|
||||
}
|
||||
|
||||
zieleString = zieleString.TrimEnd(' ').TrimEnd(',');
|
||||
}
|
||||
|
||||
<div class="card mt-1">
|
||||
<div class="card-body p-1">
|
||||
<div class="card-title m-1 text-primary">
|
||||
@MainModel.GetServiceRecordTimeHeader(serviceRecord, true)
|
||||
</div>
|
||||
<table class="table table-sm table-striped service-record-table" my-0>
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Minuten (gerundet):
|
||||
</td>
|
||||
<td class="text-info">
|
||||
@durationStr
|
||||
</td>
|
||||
</tr>
|
||||
@if(AbstractModel.ShowDistanceField && serviceRecord.DistanceInMeterDecimal != null && serviceRecord.DistanceInMeterDecimal.Value > 0)
|
||||
{
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Gefahrene Kilometer:
|
||||
</td>
|
||||
<td>
|
||||
@($"{serviceRecord.DistanceInMeterDecimal:0.##}")
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
|
||||
@if(serviceRecord.Goals != null && serviceRecord.Goals.Count > 0)
|
||||
{
|
||||
if(!string.IsNullOrEmpty(zieleString))
|
||||
{
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Ziele:
|
||||
</td>
|
||||
<td>
|
||||
@(new HtmlString(zieleString))
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
|
||||
if(serviceRecord.Goals.Any(goal => goal.Type == ValueListEntryType.SupportConceptGoalType || goal.Type == ValueListEntryType.SupportConceptIndividualGoalType))
|
||||
{
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Maßnahmen:
|
||||
</td>
|
||||
<td>
|
||||
@(new HtmlString(massnahmenString))
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Leistungskategorie:
|
||||
</td>
|
||||
<td>
|
||||
@serviceRecord.ServiceDescription.CategoryName
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Leistung:
|
||||
</td>
|
||||
<td>
|
||||
@serviceRecord.ServiceDescription.Name
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Angelegt für:
|
||||
</td>
|
||||
<td>
|
||||
@serviceRecord.Employee.FirstNameLastName
|
||||
</td>
|
||||
</tr>
|
||||
@if(AbstractModel.ShowServiceRecordInsertedOn)
|
||||
{
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Angelegt von:
|
||||
</td>
|
||||
<td>
|
||||
@serviceRecord.InsUser
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Angelegt am:
|
||||
</td>
|
||||
<td>
|
||||
@serviceRecord.InsertedOn
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
@if(AbstractModel.ShowBetrag && serviceRecord.Betrag.HasValue && serviceRecord.Betrag.Value > 0)
|
||||
{
|
||||
var betrag = serviceRecord.Betrag.Value.ToString("#.00") + " €";
|
||||
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Betrag:
|
||||
</td>
|
||||
<td>
|
||||
@betrag
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
@{
|
||||
var header1 = "Dokumentation";
|
||||
if(Model.NumberOfDokuTypes >= 1)
|
||||
{
|
||||
header1 = Model.Dokutypes[0].TypeDescription;
|
||||
}
|
||||
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
@header1:
|
||||
</td>
|
||||
<td>
|
||||
@Html.Raw(MobileUtils.ToHtml(serviceRecord.Notice, false))
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
for(var i = 1; i < serviceRecord.NoticeList.Count; i++)
|
||||
{
|
||||
var notice = serviceRecord.NoticeList[i];
|
||||
|
||||
if(string.IsNullOrWhiteSpace(notice) || Model.NumberOfDokuTypes <= i)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var header = $"Dokumentation {i + 1}";
|
||||
|
||||
if(Model.NumberOfDokuTypes >= 2)
|
||||
{
|
||||
if(Model.NumberOfDokuTypes <= i)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
header = Model.Dokutypes[i].TypeDescription;
|
||||
}
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
@header:
|
||||
</td>
|
||||
<td>
|
||||
@Html.Raw(MobileUtils.ToHtml(notice, false))
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
<tr>
|
||||
<td class="text-secondary">
|
||||
Unterschrieben:
|
||||
</td>
|
||||
<td>
|
||||
@hasSignatureStr
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@@ -69,15 +69,15 @@
|
||||
$("#qb-sig-canvas-row, #qb-sig-canvas-container, #qb-sig-sketch-pad, #qb-sig-save-btn, #qb-sig-clear-canvas-btn").hide();
|
||||
}
|
||||
|
||||
resizeCanvas("#qb-sig-sketch-pad", "#qb-sig-canvas-row");
|
||||
updateCanvasSize($("#qb-sig-sketch-pad"));
|
||||
|
||||
var canvas = document.getElementById("qb-sig-sketch-pad");
|
||||
const canvas = document.getElementById("qb-sig-sketch-pad");
|
||||
|
||||
var signaturePad = new SignaturePad(canvas, { backgroundColor: "rgba(255, 255, 255, 0)" });
|
||||
|
||||
var cancelButton = document.getElementById("qb-sig-cancel-btn");
|
||||
var saveButton = document.getElementById("qb-sig-save-btn");
|
||||
var clearButton = document.getElementById("qb-sig-clear-canvas-btn");
|
||||
const cancelButton = document.getElementById("qb-sig-cancel-btn");
|
||||
const saveButton = document.getElementById("qb-sig-save-btn");
|
||||
const clearButton = document.getElementById("qb-sig-clear-canvas-btn");
|
||||
|
||||
cancelButton.addEventListener("click",
|
||||
function() {
|
||||
@@ -86,16 +86,15 @@
|
||||
|
||||
saveButton.addEventListener("click",
|
||||
function() {
|
||||
var canvas = document.getElementById("qb-sig-sketch-pad");
|
||||
var clonedCanvas = cloneCanvas(canvas);
|
||||
var trimmedCanvas = trimCanvas(clonedCanvas);
|
||||
const clonedCanvas = cloneCanvas(document.getElementById("qb-sig-sketch-pad"));
|
||||
const trimmedCanvas = trimCanvas(clonedCanvas);
|
||||
|
||||
var context = trimmedCanvas.getContext("2d", {willReadFrequently: true});
|
||||
const context = trimmedCanvas.getContext("2d", {willReadFrequently: true});
|
||||
context.globalCompositeOperation = "destination-over";
|
||||
context.fillStyle = "white";
|
||||
context.fillRect(0, 0, trimmedCanvas.width, trimmedCanvas.height);
|
||||
|
||||
var dataUrl = trimmedCanvas.toDataURL("image/png");
|
||||
const dataUrl = trimmedCanvas.toDataURL("image/png");
|
||||
|
||||
showSpinner();
|
||||
|
||||
@@ -114,13 +113,13 @@
|
||||
$("#report-signature-container").addClass("d-none");
|
||||
$("#report-form-container").show();
|
||||
} catch (error) {
|
||||
showErrorPopup(error);
|
||||
window.showErrorPopup(error);
|
||||
}
|
||||
});
|
||||
},
|
||||
true);
|
||||
} else {
|
||||
showMessagePopup("Fehler", json);
|
||||
window.showMessagePopup("Fehler", json);
|
||||
signaturePad.clear();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -15,28 +15,6 @@
|
||||
}
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$("#scheduler-interval-start-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "L"
|
||||
});
|
||||
|
||||
$("#scheduler-interval-end-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "L"
|
||||
});
|
||||
|
||||
$("#scheduler-interval-start-time-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "LT"
|
||||
});
|
||||
|
||||
$("#scheduler-interval-end-time-picker").datetimepicker({
|
||||
locale: "de",
|
||||
format: "LT"
|
||||
});
|
||||
});
|
||||
|
||||
function resetIntervalFinderForm() {
|
||||
$("#scheduler-interval-start-time, #scheduler-interval-end-time, #duration").val("");
|
||||
$("#scheduler-interval-start, #scheduler-interval-end").val(moment().format("DD.MM.YYYY"));
|
||||
@@ -79,26 +57,29 @@
|
||||
|
||||
const duration = parseInt($("#interval-duration").val());
|
||||
|
||||
const start = getDateTimeFromPicker("scheduler-interval-start", "scheduler-interval-start-time");
|
||||
const end = getDateTimeFromPicker("scheduler-interval-end", "scheduler-interval-end-time");
|
||||
const startStr = $("#scheduler-interval-start").val();
|
||||
const endStr = $("#scheduler-interval-end").val();
|
||||
|
||||
const isStartValid = start !== null && isValidDate(new Date(start));
|
||||
const isEndValid = end !== null && isValidDate(new Date(end));
|
||||
const start = new Date(startStr);
|
||||
const end = new Date(endStr);
|
||||
|
||||
isValid = isStartValid && isEndValid && duration > 0 && (start !== null && start !== undefined && start.isBefore(end));
|
||||
const isStartValid = startStr !== null && false === isNaN(start.getTime());
|
||||
const isEndValid = endStr !== null && false === isNaN(end.getTime());
|
||||
|
||||
isValid = isStartValid && isEndValid && duration > 0 && end > start;
|
||||
|
||||
if(isValid === false) {
|
||||
let validationMessage = "";
|
||||
|
||||
if(isStartValid === false && isEndValid === false) {
|
||||
validationMessage = "Das Start- und Endwerte sind ungültig!";
|
||||
validationMessage = "Das Start- und Enddatum sind ungültig!";
|
||||
} else if(isStartValid === true && isEndValid === false) {
|
||||
validationMessage = "Das Enddatum ist ungültig!";
|
||||
} else if(isStartValid === false && isEndValid === true) {
|
||||
validationMessage = "Das Startdatum ist ungültig!";
|
||||
}
|
||||
|
||||
if(start !== null && start !== undefined && start.isBefore(end) === false) {
|
||||
if(end > start) {
|
||||
if(validationMessage.length === 0) {
|
||||
validationMessage += "Das Enddatum darf nicht vor dem Startdatum liegen!";
|
||||
} else {
|
||||
@@ -124,32 +105,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
function getDateTimeFromPicker(datePickerId, timePickerId) {
|
||||
try {
|
||||
const dateVal = $(`#${datePickerId}`).datetimepicker("viewDate");
|
||||
const timeVal = $(`#${timePickerId}`).val();
|
||||
|
||||
const timeRegEx = new RegExp('^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$');
|
||||
|
||||
if(isValidDate(new Date(dateVal)) && timeRegEx.test(timeVal)) {
|
||||
const hm = timeVal.split(":");
|
||||
|
||||
if(hm.length === 2 && $.isNumeric(hm[0]) && $.isNumeric(hm[1])) {
|
||||
dateVal.hours(parseInt(hm[0]));
|
||||
dateVal.minutes(parseInt(hm[1]));
|
||||
|
||||
return dateVal;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch (error) {
|
||||
window.showErrorPopup(error);
|
||||
}
|
||||
}
|
||||
|
||||
$("#interval-form-container").ready(function() {
|
||||
const width = getMaxWidth("prepend-text");
|
||||
const width = window.getMaxWidth("prepend-text");
|
||||
$(".prepend-text").width(width);
|
||||
});
|
||||
|
||||
@@ -191,222 +148,184 @@
|
||||
<div class="alert alert-danger collapse" role="alert" id="interval-finder-validation-alert"></div>
|
||||
@using(Html.BeginForm("FindFreeIntervals", "Scheduler", FormMethod.Post, new { id = "find-appointment-intervals-form", @class = "needs-validation", novalidate = true }))
|
||||
{
|
||||
<div>
|
||||
<div class="form-row">
|
||||
<div class="col-7 mx-0 pr-1">
|
||||
<div class="form-group mb-1 mr-0 pr-0">
|
||||
<div class="input-group date" id="scheduler-interval-start-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text prepend-text px-2">
|
||||
Von
|
||||
</span>
|
||||
</div>
|
||||
<input value="@Model.IntervalStartDateStr" type="text" autocomplete="on" id="scheduler-interval-start" name="IntervalStart" class="form-control datetimepicker-input" data-target="#scheduler-interval-start-picker" data-toggle="datetimepicker" />
|
||||
<div class="input-group-append" data-target="#scheduler-interval-start-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-5 mx-0 pl-0">
|
||||
<div class="form-group mb-1 ml-0 pl-0">
|
||||
<div class="input-group date" id="scheduler-interval-start-time-picker" data-target-input="nearest">
|
||||
<input value="@Model.IntervalStartTimeStr" type="text" autocomplete="on" id="scheduler-interval-start-time" name="IntervalStartTime" class="form-control datetimepicker-input" data-target="#scheduler-interval-start-time-picker" />
|
||||
<div class="input-group-append" data-target="#scheduler-interval-start-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col-7 mx-0 pr-1">
|
||||
<div class="form-group mb-1 ml-0 pl-0">
|
||||
<div class="input-group date" id="scheduler-interval-end-picker" data-target-input="nearest">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-text px-2">
|
||||
Bis
|
||||
</div>
|
||||
</div>
|
||||
<input value="@Model.IntervalEndDateStr" type="text" autocomplete="on" id="scheduler-interval-end" name="IntervalEnd" class="form-control datetimepicker-input" data-target="#scheduler-interval-end-picker" data-toggle="datetimepicker" />
|
||||
<div class="input-group-append" data-target="#scheduler-interval-end-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-calendar-alt"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-5 mx-0 pl-0">
|
||||
<div class="form-group mb-1 ml-0 pl-0">
|
||||
<div class="input-group date" id="scheduler-interval-end-time-picker" data-target-input="nearest">
|
||||
<input value="@Model.IntervalEndTimeStr" type="text" autocomplete="on" id="scheduler-interval-end-time" name="IntervalEndTime" class="form-control datetimepicker-input" data-target="#scheduler-interval-end-time-picker" />
|
||||
<div class="input-group-append" data-target="#scheduler-interval-end-time-picker" data-toggle="datetimepicker">
|
||||
<div class="input-group-text px-2">
|
||||
<i class="fas fa-clock"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col-md">
|
||||
<div class="form-group mb-1">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-text px-2">
|
||||
Dauer
|
||||
</div>
|
||||
</div>
|
||||
<input value="@Model.IntervalDurationStr" type="number" autocomplete="on" min="10" id="interval-duration" name="Duration" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="form-row mt-1">
|
||||
<div class="col-md">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text prepend-text">
|
||||
Von
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="datetime-local" id="scheduler-interval-start" name="IntervalStart" value="@Model.IntervalStartDateStr"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row mt-1">
|
||||
<div class="col-md">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text prepend-text">
|
||||
Bis
|
||||
</span>
|
||||
</div>
|
||||
<input class="form-control" type="datetime-local" id="scheduler-interval-end" name="IntervalEnd" value="@Model.IntervalEndDateStr"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row mt-1">
|
||||
<div class="col-md">
|
||||
<div class="form-group mb-1">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<div class="input-group-text prepend-text px-2">
|
||||
Dauer
|
||||
</div>
|
||||
</div>
|
||||
<input value="@Model.IntervalDurationStr" type="number" autocomplete="on" min="10" id="interval-duration" name="Duration" class="form-control"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if(Model.HasResourcesEmployeesOrCustomers)
|
||||
{
|
||||
<!-- Hinzufügen-Buttons -->
|
||||
<div class="form-row">
|
||||
@if(AbstractModel.HasRightToViewEmployeeAppointments)
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-1">
|
||||
<button type="button" class="btn btn-bewo-employee w-100" data-toggle="modal" data-target="#employees-interval-finder-popup">Mitarbeiter</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if(AbstractModel.HasRightToViewCustomerAppointments)
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-1">
|
||||
<button type="button" class="btn btn-bewo-customers w-100" data-toggle="modal" data-target="#customers-interval-finder-popup">Klienten</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if(AbstractModel.HasRightToViewAllResourceAppointments && Model.ResourceCategories2Resources.Any())
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-1">
|
||||
<button type="button" class="btn btn-bewo-resource w-100" data-toggle="modal" data-target="#resources-interval-finder-popup">Ressourcen</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
@if(Model.HasResourcesEmployeesOrCustomers)
|
||||
{
|
||||
<!-- Hinzufügen-Buttons -->
|
||||
<div class="form-row">
|
||||
@if(AbstractModel.HasRightToViewEmployeeAppointments)
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-1">
|
||||
<button type="button" class="btn btn-bewo-employee w-100" data-toggle="modal" data-target="#employees-interval-finder-popup">Mitarbeiter</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if(AbstractModel.HasRightToViewCustomerAppointments)
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-1">
|
||||
<button type="button" class="btn btn-bewo-customers w-100" data-toggle="modal" data-target="#customers-interval-finder-popup">Klienten</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if(AbstractModel.HasRightToViewAllResourceAppointments && Model.ResourceCategories2Resources.Any())
|
||||
{
|
||||
<div class="col-md">
|
||||
<div class="form-group my-1">
|
||||
<button type="button" class="btn btn-bewo-resource w-100" data-toggle="modal" data-target="#resources-interval-finder-popup">Ressourcen</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
@if(AbstractModel.HasRightToViewEmployeeAppointments)
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="form-group my-1">
|
||||
<div class="list-group" id="selected-employees-interval-finder-list">
|
||||
@foreach(var selectedEmployee in Model.SelectedEmployeesForIntervalFinder)
|
||||
{
|
||||
<div class="list-group-item my-auto" id="related-employee-interval-finder-@selectedEmployee.EmployeeOid">
|
||||
<div class="row">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<i class="fas fa-user text-bewo-employee h-100"></i>
|
||||
</div>
|
||||
<p class="form-control border-0 bg-transparent text-truncate">
|
||||
@selectedEmployee.DetailDescription
|
||||
</p>
|
||||
<div class="input-group-append">
|
||||
@{
|
||||
var url = Url.Action("SelectEmployeesForIntervalFinder", "Scheduler");
|
||||
var oid = selectedEmployee.EmployeeOid;
|
||||
<div class="form-row">
|
||||
@if(AbstractModel.HasRightToViewEmployeeAppointments)
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="form-group my-1">
|
||||
<div class="list-group" id="selected-employees-interval-finder-list">
|
||||
@foreach(var selectedEmployee in Model.SelectedEmployeesForIntervalFinder)
|
||||
{
|
||||
<div class="list-group-item my-auto" id="related-employee-interval-finder-@selectedEmployee.EmployeeOid">
|
||||
<div class="row">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<i class="fas fa-user text-bewo-employee h-100"></i>
|
||||
</div>
|
||||
<p class="form-control border-0 bg-transparent text-truncate">
|
||||
@selectedEmployee.DetailDescription
|
||||
</p>
|
||||
<div class="input-group-append">
|
||||
@{
|
||||
var url = Url.Action("SelectEmployeesForIntervalFinder", "Scheduler");
|
||||
var oid = selectedEmployee.EmployeeOid;
|
||||
|
||||
var filterAppointmentsUrl = Url.Action("FetchAppointments", "Scheduler");
|
||||
var filterAppointmentsUrl = Url.Action("FetchAppointments", "Scheduler");
|
||||
|
||||
var onClickParams = $"{oid}, '-interval-finder-checkbox', false, '{url}', 'employees-interval-finder-popup', 'employees-interval-finder-popup', 'related-employee-interval-finder-', '{filterAppointmentsUrl}'";
|
||||
}
|
||||
var onClickParams = $"{oid}, '-interval-finder-checkbox', false, '{url}', 'employees-interval-finder-popup', 'employees-interval-finder-popup', 'related-employee-interval-finder-', '{filterAppointmentsUrl}'";
|
||||
}
|
||||
|
||||
<button type="button" class="btn btn-primary" onclick="removeSelectedItem(@onClickParams)">
|
||||
<span class="fas fa-times-circle"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if(AbstractModel.HasRightToViewCustomerAppointments)
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="form-group my-1">
|
||||
<div class="list-group" id="selected-customers-interval-finder-list">
|
||||
@foreach(var selectedCustomer in Model.SelectedCustomersForIntervalFinder)
|
||||
{
|
||||
<div class="list-group-item my-auto" id="related-customer-interval-finder-@selectedCustomer.CustomerOid">
|
||||
<div class="row">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<i class="fas fa-user text-bewo-customers h-100"></i>
|
||||
</div>
|
||||
<p class="form-control border-0 bg-transparent text-truncate">
|
||||
@selectedCustomer.DetailDescription
|
||||
</p>
|
||||
<div class="input-group-append">
|
||||
@{
|
||||
var url = Url.Action("SelectCustomersForIntervalFinder", "Scheduler");
|
||||
var oid = selectedCustomer.CustomerOid;
|
||||
<button type="button" class="btn btn-primary" onclick="removeSelectedItem(@onClickParams)">
|
||||
<span class="fas fa-times-circle"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if(AbstractModel.HasRightToViewCustomerAppointments)
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="form-group my-1">
|
||||
<div class="list-group" id="selected-customers-interval-finder-list">
|
||||
@foreach(var selectedCustomer in Model.SelectedCustomersForIntervalFinder)
|
||||
{
|
||||
<div class="list-group-item my-auto" id="related-customer-interval-finder-@selectedCustomer.CustomerOid">
|
||||
<div class="row">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<i class="fas fa-user text-bewo-customers h-100"></i>
|
||||
</div>
|
||||
<p class="form-control border-0 bg-transparent text-truncate">
|
||||
@selectedCustomer.DetailDescription
|
||||
</p>
|
||||
<div class="input-group-append">
|
||||
@{
|
||||
var url = Url.Action("SelectCustomersForIntervalFinder", "Scheduler");
|
||||
var oid = selectedCustomer.CustomerOid;
|
||||
|
||||
var filterAppointmentsUrl = Url.Action("FetchAppointments", "Scheduler");
|
||||
var filterAppointmentsUrl = Url.Action("FetchAppointments", "Scheduler");
|
||||
|
||||
var onClickParams = $"{oid}, '-interval-finder-checkbox', false, '{url}', 'customers-interval-finder-popup', 'customers-interval-finder-popup', 'related-customer-interval-finder-', '{filterAppointmentsUrl}'";
|
||||
}
|
||||
<button type="button" class="btn btn-primary" onclick="removeSelectedItem(@onClickParams)">
|
||||
<span class="fas fa-times-circle"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if(AbstractModel.HasRightToViewAllResourceAppointments && Model.ResourceCategories2Resources.Any())
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="form-group my-1">
|
||||
<div class="list-group" id="selected-resources-interval-finder-list">
|
||||
@foreach(var selectedResource in Model.SelectedResourcesForIntervalFinder)
|
||||
{
|
||||
<div class="list-group-item my-auto" id="related-resource-interval-finder-item-@selectedResource.ResourceOid">
|
||||
<div class="row">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<i class="fas fa-cubes text-bewo-resource h-100"></i>
|
||||
</div>
|
||||
<p class="form-control border-0 bg-transparent text-truncate">
|
||||
@selectedResource.Name
|
||||
</p>
|
||||
<div class="input-group-append">
|
||||
<button type="button" class="btn btn-primary" onclick="removeSelectedResource('related-resource-interval-finder-item-@selectedResource.ResourceOid', 'resource-@selectedResource.ResourceOid-interval-finder-checkbox', 'resources-interval-finder-popup', '@Url.Action("SelectResourcesForIntervalFinder", "Scheduler")', 'selected-resources-interval-finder-list', '@Url.Action("FetchAppointments", "Scheduler")', 'related-resource-interval-finder-item-', '-interval-finder-checkbox', 'all-resources-for-interval-finder-checkbox')">
|
||||
<span class="fas fa-times-circle"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
var onClickParams = $"{oid}, '-interval-finder-checkbox', false, '{url}', 'customers-interval-finder-popup', 'customers-interval-finder-popup', 'related-customer-interval-finder-', '{filterAppointmentsUrl}'";
|
||||
}
|
||||
<button type="button" class="btn btn-primary" onclick="removeSelectedItem(@onClickParams)">
|
||||
<span class="fas fa-times-circle"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if(AbstractModel.HasRightToViewAllResourceAppointments && Model.ResourceCategories2Resources.Any())
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="form-group my-1">
|
||||
<div class="list-group" id="selected-resources-interval-finder-list">
|
||||
@foreach(var selectedResource in Model.SelectedResourcesForIntervalFinder)
|
||||
{
|
||||
<div class="list-group-item my-auto" id="related-resource-interval-finder-item-@selectedResource.ResourceOid">
|
||||
<div class="row">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend">
|
||||
<i class="fas fa-cubes text-bewo-resource h-100"></i>
|
||||
</div>
|
||||
<p class="form-control border-0 bg-transparent text-truncate">
|
||||
@selectedResource.Name
|
||||
</p>
|
||||
<div class="input-group-append">
|
||||
<button type="button" class="btn btn-primary" onclick="removeSelectedResource('related-resource-interval-finder-item-@selectedResource.ResourceOid', 'resource-@selectedResource.ResourceOid-interval-finder-checkbox', 'resources-interval-finder-popup', '@Url.Action("SelectResourcesForIntervalFinder", "Scheduler")', 'selected-resources-interval-finder-list', '@Url.Action("FetchAppointments", "Scheduler")', 'related-resource-interval-finder-item-', '-interval-finder-checkbox', 'all-resources-for-interval-finder-checkbox')">
|
||||
<span class="fas fa-times-circle"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<button type="submit" class="d-none" id="hidden-submit-btn"></button>
|
||||
}
|
||||
<div class="d-flex bd-highlight mt-3">
|
||||
|
||||
@@ -54,8 +54,8 @@
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/tempusdominus-boostrap-4.min.js")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/mobileUtils.js")"></script>
|
||||
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/main.js")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/signature.js?v=1.1")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/view-scripts/main.js?v=1.2")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/signature.js?v=1.2")"></script>
|
||||
|
||||
<link type="text/css" rel="stylesheet" href="@Url.Content("~/Scripts/bootstrap/bootstrap4-modal-fullscreen.min.css")" />
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/js-helper.js")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/logging.js")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/MoKPasswordSecurity.js")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/bs-custom-file-input.min.js")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/bs-custom-file-input.min.js?v=1.3")"></script>
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/ownSoft-Scripts/utils/dropdown-search.js")"></script>
|
||||
|
||||
<script type="text/javascript" src="@Scripts.Url("~/Scripts/devexpress-dependencies/devextreme/dx.all.js")"></script>
|
||||
@@ -92,11 +92,96 @@
|
||||
new Script { ExtensionSuite = ExtensionSuite.Icons },
|
||||
new Script { ExtensionType = ExtensionType.WebDocumentViewer }
|
||||
)
|
||||
|
||||
<style type="text/css">
|
||||
input::-webkit-date-and-time-value {
|
||||
text-align: left;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
function saveCollapsibleState(id, url) {
|
||||
const isShown = $(`#${id}`).hasClass("show");
|
||||
$.get(url, { isOpen: isShown, identifier: id });
|
||||
<script type="text/javascript">
|
||||
class LocalBeWoStorage {
|
||||
id;
|
||||
inputList;
|
||||
|
||||
constructor(id, inputList) {
|
||||
this.id = id;
|
||||
this.inputList = inputList;
|
||||
}
|
||||
|
||||
removeItemById(id) {
|
||||
const newInputList = [];
|
||||
|
||||
for (let i = 0; i < this.inputList.length; i++) {
|
||||
const input = this.inputList[i];
|
||||
|
||||
if (input.inputId !== id) {
|
||||
newInputList.push(input);
|
||||
}
|
||||
}
|
||||
|
||||
this.inputList = newInputList;
|
||||
|
||||
localStorage.setItem(this.id, JSON.stringify(this));
|
||||
}
|
||||
|
||||
removeItemByName(name) {
|
||||
const newInputList = [];
|
||||
|
||||
for (let i = 0; i < this.inputList.length; i++) {
|
||||
const input = this.inputList[i];
|
||||
|
||||
if (input.inputName !== name) {
|
||||
newInputList.push(input);
|
||||
}
|
||||
}
|
||||
|
||||
this.inputList = newInputList;
|
||||
|
||||
localStorage.setItem(this.id, JSON.stringify(this));
|
||||
}
|
||||
|
||||
addInputValue(inputId, inputName, inputType, inputValue, timeStamp) {
|
||||
if (inputType === "radio") {
|
||||
this.removeItemByName(inputName);
|
||||
}
|
||||
|
||||
const obj = {
|
||||
inputId: inputId,
|
||||
inputName: inputName,
|
||||
inputType: inputType,
|
||||
inputValue: inputValue,
|
||||
timeStamp: timeStamp
|
||||
};
|
||||
|
||||
this.removeItemById(inputId);
|
||||
|
||||
this.inputList.push(obj);
|
||||
|
||||
localStorage.setItem(this.id, JSON.stringify(this));
|
||||
}
|
||||
|
||||
getItemById(id) {
|
||||
return this.inputList.find((element) => element.inputId === id);
|
||||
}
|
||||
|
||||
getItemsByName(name) {
|
||||
const result = [];
|
||||
|
||||
this.inputList.map((item) => {
|
||||
if (item.inputName === name) {
|
||||
result.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function saveCollapsibleState(id, url) {
|
||||
const isShown = $(`#${id}`).hasClass("show");
|
||||
$.get(url, { isOpen: isShown, identifier: id });
|
||||
}
|
||||
|
||||
window.addEventListener("error", (event) => {
|
||||
@@ -172,75 +257,88 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
$("textarea").each(function () {
|
||||
const id = this.getAttribute("id");
|
||||
$.each($("canvas"), function(index, canvasElement) {
|
||||
updateCanvasSize($(canvasElement));
|
||||
});
|
||||
|
||||
if(id === "fehlerdetail-textarea") {
|
||||
return;
|
||||
}
|
||||
$("textarea").each(function () {
|
||||
const id = this.getAttribute("id");
|
||||
|
||||
this.setAttribute("style", `height:${this.scrollHeight}px;overflow-y:scroll;`);
|
||||
}).on("input", function () {
|
||||
this.style.height = 0;
|
||||
this.style.height = (this.scrollHeight) + "px";
|
||||
});
|
||||
if(id === "fehlerdetail-textarea") {
|
||||
return;
|
||||
}
|
||||
|
||||
const timeoutInMilliseconds = parseInt("@AbstractBaseController.TimeoutLimit", 10) * 60 * 1000;
|
||||
this.setAttribute("style", `height:${this.scrollHeight}px;overflow-y:scroll;`);
|
||||
}).on("input", function () {
|
||||
this.style.height = 0;
|
||||
this.style.height = (this.scrollHeight) + "px";
|
||||
});
|
||||
|
||||
const timeOfLogin = "@AbstractModel.TimeOfLastAction";
|
||||
const timeoutInMilliseconds = parseInt("@AbstractBaseController.TimeoutLimit", 10) * 60 * 1000;
|
||||
|
||||
if(timeOfLogin.length > 0) {
|
||||
var countDownDate = new Date().getTime() + timeoutInMilliseconds;
|
||||
const timeOfLogin = "@AbstractModel.TimeOfLastAction";
|
||||
|
||||
var interval = setInterval(function() {
|
||||
const now = new Date().getTime();
|
||||
if(timeOfLogin.length > 0) {
|
||||
var countDownDate = new Date().getTime() + timeoutInMilliseconds;
|
||||
|
||||
const distance = countDownDate - now;
|
||||
var interval = setInterval(function() {
|
||||
const now = new Date().getTime();
|
||||
|
||||
if (distance <= 0) {
|
||||
clearInterval(interval);
|
||||
$("#countdown").html("00:00");
|
||||
const distance = countDownDate - now;
|
||||
|
||||
$("#logout-form").submit();
|
||||
if (distance <= 0) {
|
||||
clearInterval(interval);
|
||||
$("#countdown").html("00:00");
|
||||
|
||||
return;
|
||||
}
|
||||
$("#logout-form").submit();
|
||||
|
||||
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
|
||||
const seconds = Math.floor((distance % (1000 * 60)) / 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
var m = minutes.toString();
|
||||
var s = seconds.toString();
|
||||
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
|
||||
const seconds = Math.floor((distance % (1000 * 60)) / 1000);
|
||||
|
||||
if(minutes < 10) {
|
||||
m = `0${m}`;
|
||||
}
|
||||
var m = minutes.toString();
|
||||
var s = seconds.toString();
|
||||
|
||||
if(seconds < 10) {
|
||||
s = `0${s}`;
|
||||
}
|
||||
if(minutes < 10) {
|
||||
m = `0${m}`;
|
||||
}
|
||||
|
||||
$("#countdown").html(`Abmeldung in ${m}:${s}<span class="fas fa-unlock-alt pl-1"></span>`);
|
||||
}, 1000);
|
||||
}
|
||||
if(seconds < 10) {
|
||||
s = `0${s}`;
|
||||
}
|
||||
|
||||
calcPrependWidth();
|
||||
const timePart = minutes <= 5 ? ` class="text-danger"` : "";
|
||||
|
||||
@{
|
||||
var errorAlertMessage = TempData[TempDataConstants.ErrorAlertPopupMessage]?.ToString();
|
||||
$("#countdown").html(`<span${timePart}>Abmeldung in ${m}:${s}<span class="fas fa-unlock-alt pl-1"></span></span>`);
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
if(!string.IsNullOrWhiteSpace(errorAlertMessage))
|
||||
{
|
||||
<text>
|
||||
$("#error-alert-popup").modal("show");
|
||||
</text>
|
||||
}
|
||||
}
|
||||
calcPrependWidth();
|
||||
|
||||
@{
|
||||
var errorAlertMessage = TempData[TempDataConstants.ErrorAlertPopupMessage]?.ToString();
|
||||
|
||||
if(!string.IsNullOrWhiteSpace(errorAlertMessage))
|
||||
{
|
||||
<text>
|
||||
$("#error-alert-popup").modal("show");
|
||||
</text>
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$(window).resize(function () {
|
||||
$.each($("canvas"), function(index, canvasElement) {
|
||||
updateCanvasSize($(canvasElement));
|
||||
});
|
||||
|
||||
logSize();
|
||||
|
||||
calcPrependWidth();
|
||||
});
|
||||
|
||||
@@ -321,17 +419,92 @@
|
||||
}
|
||||
|
||||
function getMaxWidth(elementClassName) {
|
||||
return Math.max.apply(Math, $(`.${elementClassName}`).map(function() { return $(this).width(); }).get());
|
||||
return Math.max.apply(Math, $(`.${elementClassName}`).map(function() { return $(this).width(); }).get());
|
||||
}
|
||||
|
||||
function getMaxElementHeight(elementClassName) {
|
||||
return Math.max.apply(Math, $(`.${elementClassName}`).map(function () { return $(this).height(); }).get());
|
||||
return Math.max.apply(Math, $(`.${elementClassName}`).map(function () { return $(this).height(); }).get());
|
||||
}
|
||||
|
||||
function toggleMultiBookingForm(shouldDisable) {
|
||||
$("#multi-booking-employees-button, #category-select, #leistung-select, #mb-start-date, #mb-end-date, #mb-start-time, #mb-end-time, #mb-duration, #mb-distance, textarea, #mb-reset-button, #mb-create-button, #mb-textbausteine-button, #mb-hours-minutes-dropdown-btn, #mb-marker-cb").prop("disabled", shouldDisable);
|
||||
$("#multi-booking-employees-button, #category-select, #leistung-select, " +
|
||||
"#mb-start-date-input, #mb-end-date-input, #mb-start-time-input, #mb-end-time-input, #mb-duration-input, " +
|
||||
"#mb-distance-input, textarea, #mb-reset-button, #mb-create-button, " +
|
||||
".mb-restore-btn, " +
|
||||
"#mb-textbausteine-button, #mb-hours-minutes-dropdown-btn, #mb-marker-cb").prop("disabled", shouldDisable);
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
@* Eingabenwiederherstellung *@
|
||||
|
||||
function getLocalStorageKey() {
|
||||
return "@AbstractModel.LocalStorageKey";
|
||||
}
|
||||
|
||||
function getBeWoStorage() {
|
||||
const localStorageKey = getLocalStorageKey();
|
||||
|
||||
const unparsedLocalStorageJson = localStorage.getItem(localStorageKey);
|
||||
|
||||
let beWoStorage = new LocalBeWoStorage(localStorageKey, []);
|
||||
|
||||
if(unparsedLocalStorageJson === null || unparsedLocalStorageJson === undefined || unparsedLocalStorageJson.length === 0) {
|
||||
localStorage.setItem(localStorageKey, JSON.stringify(beWoStorage));
|
||||
} else {
|
||||
const parsedJson = JSON.parse(unparsedLocalStorageJson);
|
||||
|
||||
beWoStorage = new LocalBeWoStorage(localStorageKey, parsedJson.inputList);
|
||||
}
|
||||
|
||||
return beWoStorage;
|
||||
}
|
||||
|
||||
window.addEventListener("load", function() {
|
||||
//$("textarea, select, input").on("change", function() {
|
||||
$("textarea").on("change", function() {
|
||||
const item = $(this);
|
||||
const id = item.attr("id");
|
||||
const type = item.prop("type");
|
||||
const value = type === "checkbox" ? item.is(":checked").toString() : item.val();
|
||||
|
||||
if(value === undefined || value === null || value.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const name = item.prop("name");
|
||||
|
||||
const beWoStorage = getBeWoStorage();
|
||||
|
||||
beWoStorage.addInputValue(id, name, type, value, new Date());
|
||||
});
|
||||
});
|
||||
|
||||
function restoreField(id) {
|
||||
const beWoStorage = getBeWoStorage();
|
||||
|
||||
const inputObj = beWoStorage.getItemById(id);
|
||||
|
||||
if(inputObj === undefined || inputObj === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(`#${id}`).val(inputObj.inputValue);
|
||||
//$(`#${id}`).trigger("change");
|
||||
}
|
||||
|
||||
function restoreAllFields() {
|
||||
const beWoStorage = getBeWoStorage();
|
||||
|
||||
$.each(beWoStorage.inputList, (index, item) => {
|
||||
$(`#${item.inputId}`).val(item.inputValue);
|
||||
//$(`#${id}`).trigger("change");
|
||||
});
|
||||
}
|
||||
|
||||
@* /Eingabenwiederherstellung *@
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -377,6 +550,13 @@
|
||||
|
||||
@if(Html.IsInDebugMode())
|
||||
{
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-link text-light no-underline" type="button" onclick="localStorage.clear(); logInfo2(`Der lokale Speicher wurde geleert`);">
|
||||
<i class="fas fa-trash text-danger"></i>
|
||||
Speicher leeren
|
||||
</button>
|
||||
</li>
|
||||
|
||||
using(Html.BeginForm("RedirectToDebuggingTools", "Main", FormMethod.Post))
|
||||
{
|
||||
<li class="nav-item">
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<NoWarn>CS0168</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
@@ -81,12 +82,14 @@
|
||||
<Compile Include="Models\Daten\Datenelementgruppe.cs" />
|
||||
<Compile Include="Models\Infos\InfoParameterInvoiceItem.cs" />
|
||||
<Compile Include="Models\IRowable.cs" />
|
||||
<Compile Include="Models\KTDSummary.cs" />
|
||||
<Compile Include="Models\Nachrichten\Nachricht.cs" />
|
||||
<Compile Include="Models\Nachrichten\NachrichtKTD.cs" />
|
||||
<Compile Include="Models\Nachrichten\NachrichtSLGA.cs" />
|
||||
<Compile Include="Models\Nachrichten\NachrichtSLLA.cs" />
|
||||
<Compile Include="Models\Schlüssels\Schlüssel.cs" />
|
||||
<Compile Include="Models\Schlüssels\SchlüsselAbrechnungscode.cs" />
|
||||
<Compile Include="Models\Schlüssels\SchlüsselArtDerAnschrift.cs" />
|
||||
<Compile Include="Models\Schlüssels\SchlüsselArtDerGenehmigung.cs" />
|
||||
<Compile Include="Models\Schlüssels\SchlüsselArtDerVerknüpfung.cs" />
|
||||
<Compile Include="Models\Schlüssels\SchlüsselBVG.cs" />
|
||||
@@ -107,6 +110,7 @@
|
||||
<Compile Include="Models\Schlüssels\SchlüsselVerarbeitungskennzeichen.cs" />
|
||||
<Compile Include="Models\Schlüssels\SchlüsselVerordnungsbesonderheiten.cs" />
|
||||
<Compile Include="Models\Schlüssels\SchlüsselZuzahlung.cs" />
|
||||
<Compile Include="Models\Segmente\KTD\SegmentKTDANS.cs" />
|
||||
<Compile Include="Models\Segmente\KTD\SegmentKTD.cs" />
|
||||
<Compile Include="Models\Segmente\KTD\SegmentKTDFKT.cs" />
|
||||
<Compile Include="Models\Segmente\KTD\SegmentKTDIDK.cs" />
|
||||
@@ -155,22 +159,22 @@
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="KTDatei\AO05Q125.ke0.txt">
|
||||
<Content Include="KTDatei\AO.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\BK05Q125.ke3.txt">
|
||||
<Content Include="KTDatei\BK.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\BN05Q424.ke1.txt">
|
||||
<Content Include="KTDatei\BN.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\EK05Q125.ke0.txt">
|
||||
<Content Include="KTDatei\EK.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\IK05Q125.ke1.txt">
|
||||
<Content Include="KTDatei\IK.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="KTDatei\LK05Q223.ke0.txt">
|
||||
<Content Include="KTDatei\LK.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
UNA:+,? '
|
||||
UNB+UNOC:3+109910000+999999999+241210:1038+00390++AO05Q125ke0'
|
||||
UNB+UNOC:3+109910000+999999999+250312:1129+00391++AO05Q225ke0'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+100295017+99+gkv informatik'
|
||||
VDT+19970403'
|
||||
@@ -334,7 +334,7 @@ VKG+09+104212607+5++28++++18'
|
||||
VKG+09+104212538+5++28++++19'
|
||||
NAM+01+AOK Rheinland/Hamburg'
|
||||
ANS+1+40468+Düsseldorf+Wanheimer Str. 72'
|
||||
ANS+2+40004+Düsseldorf+10 13 42'
|
||||
ANS+2+40004+Düsseldorf+10 13 55'
|
||||
ASP+01+02118791/57305++Frau Tanja Koch+TL Hebammen/Reha-Sport'
|
||||
UEM+1+00+I8'
|
||||
DFU+01+070++0000+2400+1+da@dta.aok.de'
|
||||
@@ -1136,8 +1136,9 @@ VDT+19970403'
|
||||
FKT+02'
|
||||
NAM+01+AOK Rheinland/Hamburg+Rechnungsprüfung Heilmittel'
|
||||
ANS+1+40468+Düsseldorf+Wanheimer Str. 72'
|
||||
ANS+2+40004+Düsseldorf+10 13 38'
|
||||
ASP+01+02118791/55743++Frau Jacobs-Lange+Heilmittel'
|
||||
UNT+000008+00080'
|
||||
UNT+000009+00080'
|
||||
UNH+00081+KOTR:02:001:KV'
|
||||
IDK+104212594+99+AOK Rheinland/Hamburg'
|
||||
VDT+20030915'
|
||||
@@ -2527,6 +2528,7 @@ VDT+19970403'
|
||||
FKT+02'
|
||||
NAM+01+AOK Rheinland/Hamburg+Rechnungsprüfung Fahrkosten'
|
||||
ANS+1+40468+Düsseldorf+Wanheimer Str. 72'
|
||||
ANS+2+40004+Düsseldorf+10 13 41'
|
||||
ASP+01+02118791/56515++Frau Kromat+Fahrkosten'
|
||||
UNT+000008+00206'
|
||||
UNZ+000206+00390'
|
||||
UNT+000009+00206'
|
||||
UNZ+000206+00391'
|
||||
@@ -1,5 +1,5 @@
|
||||
UNA:+,? '
|
||||
UNB+UNOC:3+104027544+999999999+250123:1530+00239++BK05Q125KE3'
|
||||
UNB+UNOC:3+104027544+999999999+250325:1445+00241++BK05Q225KE1'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+100820488+99+Brandenburgische BKK'
|
||||
VDT+20100101'
|
||||
@@ -1170,9 +1170,6 @@ IDK+103723896+99+Heimat Krankenkasse/Ost'
|
||||
VDT+20120101'
|
||||
FKT+01'
|
||||
VKG+01+103723896+5++++++00'
|
||||
VKG+03+104027544+5++07++++66'
|
||||
VKG+03+103724238+5++28++++66'
|
||||
VKG+03+103724238+5++29++++66'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+103724238+5++28++++90'
|
||||
VKG+09+103724238+5++29++++90'
|
||||
@@ -1187,15 +1184,15 @@ VKG+09+107436557+5++28++++99'
|
||||
VKG+09+107436557+5++29++++99'
|
||||
NAM+01+Heimat+Krankenkasse+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+33602+Bielefeld+Herforder Str. 23'
|
||||
UNT+000023+00076'
|
||||
UNT+000020+00076'
|
||||
UNH+00077+KOTR:02:001:KV'
|
||||
IDK+103724238+99+Heimat Krankenkasse'
|
||||
VDT+20120101'
|
||||
FKT+01'
|
||||
VKG+01+103724238+5++++++00'
|
||||
VKG+03+104027544+5++07++++66'
|
||||
VKG+03+103724238+5++28++++66'
|
||||
VKG+03+103724238+5++29++++66'
|
||||
VKG+03+107436557+5++07++++66'
|
||||
VKG+03+107436557+5++28++++66'
|
||||
VKG+03+107436557+5++29++++66'
|
||||
VKG+03+104027544+5++07++++90'
|
||||
VKG+09+103724238+5++28++++90'
|
||||
VKG+09+103724238+5++29++++90'
|
||||
@@ -3074,14 +3071,17 @@ VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++75'
|
||||
VKG+03+661430035+5++07++++76'
|
||||
VKG+03+661430035+5++07++++A0'
|
||||
VKG+09+106492393+5++28++++90'
|
||||
VKG+09+106492393+5++29++++90'
|
||||
VKG+09+106492393+5++28++++B1'
|
||||
VKG+09+106492393+5++29++++B1'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
NAM+01+Pronova+Betriebskrankenkasse'
|
||||
ANS+1+67061+Ludwigshafen+Rheinallee 13'
|
||||
ANS+2+67058+Ludwigshafen'
|
||||
UNT+000035+00171'
|
||||
UNT+000038+00171'
|
||||
UNH+00172+KOTR:02:001:KV'
|
||||
IDK+106492406+99+Pronova BKK/Ost'
|
||||
VDT+20110701'
|
||||
@@ -3109,14 +3109,17 @@ VKG+03+661430035+5++07++++73'
|
||||
VKG+03+661430035+5++07++++74'
|
||||
VKG+03+661430035+5++07++++75'
|
||||
VKG+03+661430035+5++07++++76'
|
||||
VKG+03+661430035+5++07++++A0'
|
||||
VKG+09+106492393+5++28++++90'
|
||||
VKG+09+106492393+5++29++++90'
|
||||
VKG+09+106492393+5++28++++B1'
|
||||
VKG+09+106492393+5++29++++B1'
|
||||
VKG+09+661430035+5++28++++99'
|
||||
VKG+09+661430035+5++29++++99'
|
||||
NAM+01+Pronova+Betriebskrankenkasse+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+67061+Ludwigshafen+Rheinallee 13'
|
||||
ANS+2+67058+Ludwigshafen'
|
||||
UNT+000035+00172'
|
||||
UNT+000038+00172'
|
||||
UNH+00173+KOTR:02:001:KV'
|
||||
IDK+106928388+99+Südzucker-BKK/Ost'
|
||||
VDT+20121001'
|
||||
@@ -4325,13 +4328,16 @@ VKG+09+661430035+5++29++++75'
|
||||
VKG+03+661430035+5++07++++76'
|
||||
VKG+09+661430035+5++28++++76'
|
||||
VKG+09+661430035+5++29++++76'
|
||||
VKG+03+104027544+5++07++++A0'
|
||||
VKG+09+108433248+5++28++++A0'
|
||||
VKG+09+108433248+5++29++++A0'
|
||||
VKG+03+104027544+5++07++++B1'
|
||||
VKG+09+108433248+5++28++++B1'
|
||||
VKG+09+108433248+5++29++++B1'
|
||||
NAM+01+SBK+Gesch.Ber.Neue Bundesländer'
|
||||
ANS+1+80339+München+Heimeranstr. 31-33'
|
||||
ANS+2+80017+München+201765'
|
||||
UNT+000078+00245'
|
||||
UNT+000081+00245'
|
||||
UNH+00246+KOTR:02:001:KV'
|
||||
IDK+105830232+99+BANK BKK'
|
||||
VDT+19980701+20100630'
|
||||
@@ -4421,13 +4427,16 @@ VKG+09+661430035+5++29++++75'
|
||||
VKG+03+661430035+5++07++++76'
|
||||
VKG+09+661430035+5++28++++76'
|
||||
VKG+09+661430035+5++29++++76'
|
||||
VKG+03+104027544+5++07++++A0'
|
||||
VKG+09+108433248+5++28++++A0'
|
||||
VKG+09+108433248+5++29++++A0'
|
||||
VKG+03+104027544+5++07++++B1'
|
||||
VKG+09+108433248+5++28++++B1'
|
||||
VKG+09+108433248+5++29++++B1'
|
||||
NAM+01+SBK+Hauptverwaltung'
|
||||
ANS+1+80339+München+Heimeranstr. 31-33'
|
||||
ANS+2+80017+München+201765'
|
||||
UNT+000078+00248'
|
||||
UNT+000081+00248'
|
||||
UNH+00249+KOTR:02:001:KV'
|
||||
IDK+108491751+99+BKK Kassana/Ost'
|
||||
VDT+20110801'
|
||||
@@ -6074,4 +6083,4 @@ NAM+01+Betriebskrankenkasse+futur+Gesch.Ber.Neue Bundesl
|
||||
ANS+1+47803+Krefeld+Girmesgath 5'
|
||||
ANS+3+70426+Stuttgart'
|
||||
UNT+000009+00365'
|
||||
UNZ+000365+00239'
|
||||
UNZ+000365+00241'
|
||||
@@ -1,4 +1,4 @@
|
||||
UNB+UNOC:3+109905003+999999999+240829:1525+00038++BN05Q424KE1'
|
||||
UNB+UNOC:3+109905003+999999999+241209:1525+00039++BN050225KE0'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+101305000+99+Knappschaft Schl.-Holst.+01701'
|
||||
VDT+20120401'
|
||||
@@ -41,7 +41,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -57,7 +57,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -73,7 +73,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -621,7 +621,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -637,7 +637,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -653,7 +653,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -1201,7 +1201,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -1217,7 +1217,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -1233,7 +1233,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -1781,7 +1781,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -1797,7 +1797,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -1813,7 +1813,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -2361,7 +2361,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -2377,7 +2377,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -2393,7 +2393,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -2941,7 +2941,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -2957,7 +2957,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -2973,7 +2973,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -3521,7 +3521,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -3537,7 +3537,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -3553,7 +3553,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -4101,7 +4101,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -4117,7 +4117,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -4133,7 +4133,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -4681,7 +4681,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -4697,7 +4697,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -4713,7 +4713,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -5261,7 +5261,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -5277,7 +5277,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -5293,7 +5293,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -5841,7 +5841,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -5857,7 +5857,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -5873,7 +5873,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -6421,7 +6421,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -6437,7 +6437,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -6453,7 +6453,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -7001,7 +7001,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -7017,7 +7017,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -7033,7 +7033,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -7581,7 +7581,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -7597,7 +7597,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -7613,7 +7613,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -8161,7 +8161,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -8177,7 +8177,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -8193,7 +8193,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -8741,7 +8741,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -8757,7 +8757,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -8773,7 +8773,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -9321,7 +9321,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -9337,7 +9337,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -9353,7 +9353,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -9901,7 +9901,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -9917,7 +9917,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -9933,7 +9933,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -10481,7 +10481,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -10497,7 +10497,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -10513,7 +10513,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -11061,7 +11061,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -11077,7 +11077,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -11093,7 +11093,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -11641,7 +11641,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -11657,7 +11657,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -11673,7 +11673,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -12221,7 +12221,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -12237,7 +12237,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -12253,7 +12253,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -12801,7 +12801,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -12817,7 +12817,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -12833,7 +12833,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -13381,7 +13381,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -13397,7 +13397,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -13413,7 +13413,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -13961,7 +13961,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -13977,7 +13977,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -13993,7 +13993,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -14541,7 +14541,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -14557,7 +14557,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -14573,7 +14573,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -15121,7 +15121,7 @@ VKG+09+109906914+5++21+6+02++10'
|
||||
VKG+09+109906914+5++21+6+03++10'
|
||||
VKG+09+109906914+5++21+6+04++10'
|
||||
VKG+09+109906355+5++21+6+05++10'
|
||||
VKG+09+109906914+5++21+6+06++10'
|
||||
VKG+09+109906355+5++21+6+06++10'
|
||||
VKG+09+109906914+5++21+6+07++10'
|
||||
VKG+09+109906914+5++21+6+08++10'
|
||||
VKG+09+109906914+5++21+6+09++10'
|
||||
@@ -15137,7 +15137,7 @@ VKG+09+109906914+5++24+5+02++10'
|
||||
VKG+09+109906914+5++24+5+03++10'
|
||||
VKG+09+109906914+5++24+5+04++10'
|
||||
VKG+09+109906355+5++24+5+05++10'
|
||||
VKG+09+109906914+5++24+5+06++10'
|
||||
VKG+09+109906355+5++24+5+06++10'
|
||||
VKG+09+109906914+5++24+5+07++10'
|
||||
VKG+09+109906914+5++24+5+08++10'
|
||||
VKG+09+109906914+5++24+5+09++10'
|
||||
@@ -15153,7 +15153,7 @@ VKG+09+109906914+5++26+6+02++10'
|
||||
VKG+09+109906914+5++26+6+03++10'
|
||||
VKG+09+109906914+5++26+6+04++10'
|
||||
VKG+09+109906355+5++26+6+05++10'
|
||||
VKG+09+109906914+5++26+6+06++10'
|
||||
VKG+09+109906355+5++26+6+06++10'
|
||||
VKG+09+109906914+5++26+6+07++10'
|
||||
VKG+09+109906914+5++26+6+08++10'
|
||||
VKG+09+109906914+5++26+6+09++10'
|
||||
@@ -15731,4 +15731,4 @@ FKT+01'
|
||||
NAM+01+KNAPPSCHAFT+Kranken-und Pflegeversicherung'
|
||||
ANS+3+45095+Essen'
|
||||
UNT+000007+00035'
|
||||
UNZ+000035+00038'
|
||||
UNZ+000035+00039'
|
||||
@@ -1,5 +1,5 @@
|
||||
UNA:+,? '
|
||||
UNB+UNOC:3+109979990+999999999+241219:1420+00001++EK05Q125KE0'
|
||||
UNB+UNOC:3+109979990+999999999+250326:0824+00002++EK05Q225KE0'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+100167999+99+DAK+78602'
|
||||
VDT+19951001'
|
||||
@@ -1475,6 +1475,39 @@ VKG+09+101567314+5++28++15++76'
|
||||
VKG+09+101567314+5++29++15++76'
|
||||
VKG+09+101567314+5++28++16++76'
|
||||
VKG+09+101567314+5++29++16++76'
|
||||
VKG+03+104593971+5++07++99++90'
|
||||
VKG+09+101567314+5++28++01++90'
|
||||
VKG+09+101567314+5++29++01++90'
|
||||
VKG+09+101567314+5++28++02++90'
|
||||
VKG+09+101567314+5++29++02++90'
|
||||
VKG+09+101567314+5++28++03++90'
|
||||
VKG+09+101567314+5++29++03++90'
|
||||
VKG+09+101567314+5++28++04++90'
|
||||
VKG+09+101567314+5++29++04++90'
|
||||
VKG+09+101567677+5++28++05++90'
|
||||
VKG+09+101567677+5++29++05++90'
|
||||
VKG+09+101567677+5++28++06++90'
|
||||
VKG+09+101567677+5++29++06++90'
|
||||
VKG+09+101567677+5++28++07++90'
|
||||
VKG+09+101567677+5++29++07++90'
|
||||
VKG+09+101567677+5++28++08++90'
|
||||
VKG+09+101567677+5++29++08++90'
|
||||
VKG+09+101567677+5++28++09++90'
|
||||
VKG+09+101567677+5++29++09++90'
|
||||
VKG+09+101567677+5++28++10++90'
|
||||
VKG+09+101567677+5++29++10++90'
|
||||
VKG+09+101567314+5++28++11++90'
|
||||
VKG+09+101567314+5++29++11++90'
|
||||
VKG+09+101567314+5++28++12++90'
|
||||
VKG+09+101567314+5++29++12++90'
|
||||
VKG+09+101567314+5++28++13++90'
|
||||
VKG+09+101567314+5++29++13++90'
|
||||
VKG+09+101567314+5++28++14++90'
|
||||
VKG+09+101567314+5++29++14++90'
|
||||
VKG+09+101567314+5++28++15++90'
|
||||
VKG+09+101567314+5++29++15++90'
|
||||
VKG+09+101567314+5++28++16++90'
|
||||
VKG+09+101567314+5++29++16++90'
|
||||
VKG+03+661430035+5++07++99++A0'
|
||||
VKG+09+661430035+5++28++99++A0'
|
||||
VKG+09+661430035+5++29++99++A0'
|
||||
@@ -1484,7 +1517,7 @@ ANS+2+20009+Hamburg+Postfach 10 14 44'
|
||||
ASP+01+07641/9201-555++ARZ Service Center+Rechnungsprüfung und -bezahlung Abrechnungscode 4x, 68'
|
||||
ASP+02+0341/25920-37++DAVASO GmbH+Rechnungsprüfung und -bezahlung Abrechnungscode 1x, 3x, 61, 62, 65, Ax'
|
||||
ASP+03+0351/32040-302++GFS+Abrechnungsprüfung für Abrechnungscode 2x, 50, 66, 71 - 74'
|
||||
UNT+000123+00126'
|
||||
UNT+000156+00126'
|
||||
UNH+00127+KOTR:02:001:KV'
|
||||
IDK+105836717+99+DAK'
|
||||
VDT+20171215'
|
||||
@@ -2613,4 +2646,4 @@ DFU+02+016+++++ftam.syntela.de?:9000'
|
||||
UEM+5+00+I8'
|
||||
UEM+6+00+I8'
|
||||
UNT+000013+00261'
|
||||
UNZ+000261+00001'
|
||||
UNZ+000261+00002'
|
||||
@@ -1,5 +1,5 @@
|
||||
UNA:+,? '
|
||||
UNB+UNOC:3+109900019+999999999+241219:1500+00032++IK05Q125KE1'
|
||||
UNB+UNOC:3+109900019+999999999+250220:1000+00033++IK05Q225KE0'
|
||||
UNH+00001+KOTR:02:001:KV'
|
||||
IDK+100202527+99+IKK Nord (vorm. IKK MV)+78301'
|
||||
VDT+19950801'
|
||||
@@ -2300,4 +2300,4 @@ NAM+01+IKK Classic+c/o DAVASO GmbH'
|
||||
ANS+1+04316+Leipzig+Sommerfelder Str. 120'
|
||||
ANS+2+04304+Leipzig+500761'
|
||||
UNT+000008+00227'
|
||||
UNZ+000227+00032'
|
||||
UNZ+000227+00033'
|
||||
@@ -1,4 +1,6 @@
|
||||
using BS.Shared.Exceptions;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.DataContracts.Invoicing.GkvAbrechnung;
|
||||
using BS.Shared.Exceptions;
|
||||
using Dakota.Models;
|
||||
using Dakota.Models.Nachrichten;
|
||||
using Dakota.Models.Segmente.KTD;
|
||||
@@ -12,173 +14,221 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace Dakota.Logic
|
||||
{
|
||||
public class DakotaKTDReader
|
||||
{
|
||||
private static readonly string[] accept = new string[] { "UNH", "IDK", "FKT", "VKG", "UNT"};
|
||||
public class DakotaKTDReader
|
||||
{
|
||||
private static readonly string[] accept = new string[] { "UNH", "IDK", "FKT", "VKG", "UNT", "ANS" };
|
||||
|
||||
internal Dictionary<string, Dictionary<string, NachrichtKTD>> FileDictionary { get; set; }
|
||||
= new Dictionary<string, Dictionary<string, NachrichtKTD>>();
|
||||
internal Dictionary<string, Dictionary<string, NachrichtKTD>> FileDictionary { get; set; }
|
||||
= new Dictionary<string, Dictionary<string, NachrichtKTD>>();
|
||||
|
||||
public DakotaKTDReader(string ktd_folder_path)
|
||||
{
|
||||
var dir = new DirectoryInfo(ktd_folder_path);
|
||||
public DakotaKTDReader(string ktd_folder_path)
|
||||
{
|
||||
var dir = new DirectoryInfo(ktd_folder_path);
|
||||
|
||||
var files = dir.GetFiles();
|
||||
var files = dir.GetFiles();
|
||||
|
||||
foreach (var file in files)
|
||||
{
|
||||
var file_lines = File.ReadAllLines(file.FullName);
|
||||
foreach (var file in files)
|
||||
{
|
||||
var file_lines = File.ReadAllLines(file.FullName);
|
||||
|
||||
foo(file.Name, file_lines);
|
||||
}
|
||||
}
|
||||
foo(file.Name, file_lines);
|
||||
}
|
||||
}
|
||||
|
||||
public int GetFileCount() => FileDictionary.Count();
|
||||
public int GetAllFileEntryCount() => FileDictionary.Sum(x => x.Value.Count);
|
||||
public int GetFileCount() => FileDictionary.Count();
|
||||
public int GetAllFileEntryCount() => FileDictionary.Sum(x => x.Value.Count);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="ikkrankenkasse"></param>
|
||||
/// <param name="abrechnungscode"></param>
|
||||
/// <param name="tarifkennzeichen"></param>
|
||||
/// <returns>Item1:Datenannahmestelle -
|
||||
/// Item2:Kostenträger -
|
||||
/// Item3:Krankenkasse</returns>
|
||||
public Tuple<string, string, string, string> Resolve(string ikkrankenkasse, string abrechnungscode, string tarifkennzeichen)
|
||||
{
|
||||
foreach (var kv in FileDictionary)
|
||||
{
|
||||
var dict = kv.Value;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="ikkrankenkasse"></param>
|
||||
/// <param name="abrechnungscode"></param>
|
||||
/// <param name="tarifkennzeichen"></param>
|
||||
/// <returns>Item1:Datenannahmestelle -
|
||||
/// Item2:Kostenträger -
|
||||
/// Item3:Krankenkasse</returns>
|
||||
public GkvKostentragerdateiSummary Resolve(string ikkrankenkasse, string abrechnungscode, string tarifkennzeichen)
|
||||
{
|
||||
foreach (var kv in FileDictionary)
|
||||
{
|
||||
var dict = kv.Value;
|
||||
|
||||
var search = GetIKNummern(dict, ikkrankenkasse, abrechnungscode, tarifkennzeichen);
|
||||
var search = GetIKNummern(dict, ikkrankenkasse, abrechnungscode, tarifkennzeichen);
|
||||
|
||||
if (search is object)
|
||||
if (search is object)
|
||||
{
|
||||
var datenannahmestelle = search.Item1;
|
||||
var datenannahmestelle = search.Item1;
|
||||
var nachricht = dict[datenannahmestelle];
|
||||
|
||||
var bez = dict[datenannahmestelle].SegmentIDK.Kurzbezeichnung;
|
||||
var bez = nachricht.SegmentIDK.Kurzbezeichnung;
|
||||
|
||||
return new Tuple<string, string, string, string>(datenannahmestelle, search.Item2, search.Item3, bez);
|
||||
}
|
||||
}
|
||||
var sum = new GkvKostentragerdateiSummary()
|
||||
{
|
||||
BezDatenannahmestelle = bez,
|
||||
IKDatenannahmestelle = datenannahmestelle,
|
||||
IKKostentrager = search.Item2,
|
||||
IKKrankenkasse = search.Item3
|
||||
};
|
||||
|
||||
return null;
|
||||
}
|
||||
foreach (var seg_ans in nachricht.SemgenteANS)
|
||||
{
|
||||
var address = GetAddress(seg_ans);
|
||||
|
||||
private Tuple<string, string, string> GetIKNummern(Dictionary<string, NachrichtKTD> dict, string ikkrankenkasse, string abrechnungscode, string tarifkennzeichen, string kostentrager = null)
|
||||
{
|
||||
if (kostentrager is null)
|
||||
kostentrager = ikkrankenkasse;
|
||||
if (seg_ans.ArtDerAnschrift == Models.Schlüssels.SchlüsselArtDerAnschrift.Großkundenanschrift)
|
||||
{
|
||||
sum.Großkundenanschrift = address;
|
||||
}
|
||||
else if(seg_ans.ArtDerAnschrift == Models.Schlüssels.SchlüsselArtDerAnschrift.Postfachanschrift)
|
||||
{
|
||||
sum.Postfachanschrift = address;
|
||||
}
|
||||
else if(seg_ans.ArtDerAnschrift == Models.Schlüssels.SchlüsselArtDerAnschrift.Hausanschrift)
|
||||
{
|
||||
sum.Hausanschrift = address;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
var search = dict.SingleOrDefault(kv => kv.Key == kostentrager).Value;
|
||||
return sum;
|
||||
}
|
||||
}
|
||||
|
||||
// Hat keinen Verweis auf eine KK gefunden
|
||||
if (search is null)
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
|
||||
var verweis = search.SegmentVKG.FirstOrDefault(x => x.ArtDerVerknüpfung == Models.Schlüssels.SchlüsselArtDerVerknüpfung.Kostentrager);
|
||||
private Tuple<string, string, string> GetIKNummern(Dictionary<string, NachrichtKTD> dict, string ikkrankenkasse, string abrechnungscode, string tarifkennzeichen, string kostentrager = null)
|
||||
{
|
||||
if (kostentrager is null)
|
||||
kostentrager = ikkrankenkasse;
|
||||
|
||||
// Hat Verweis auf weiteren Kostenträger gefunden
|
||||
if (verweis is object && verweis.IKVerknüpfungspartners != kostentrager)
|
||||
return GetIKNummern(dict, ikkrankenkasse, abrechnungscode, tarifkennzeichen, verweis.IKVerknüpfungspartners);
|
||||
var search = dict.SingleOrDefault(kv => kv.Key == kostentrager).Value;
|
||||
|
||||
var datenannahmestellen = search.SegmentVKG
|
||||
.Where(x => x.ArtDerVerknüpfung == Models.Schlüssels.SchlüsselArtDerVerknüpfung.DatenannahmestelleMitEntschlusselungsbefugnis)
|
||||
.ToList();
|
||||
// Hat keinen Verweis auf eine KK gefunden
|
||||
if (search is null)
|
||||
return null;
|
||||
|
||||
// Hat keinen Verweis auf Kostenträger oder Datenannahmestelle gefunden
|
||||
if (datenannahmestellen is null || !datenannahmestellen.Any())
|
||||
return null;
|
||||
var verweis = search.SegmentVKG.FirstOrDefault(x => x.ArtDerVerknüpfung == Models.Schlüssels.SchlüsselArtDerVerknüpfung.Kostentrager);
|
||||
|
||||
if (datenannahmestellen.Count() == 1)
|
||||
return GetIKNummern(datenannahmestellen.First(), kostentrager, ikkrankenkasse);
|
||||
// Hat Verweis auf weiteren Kostenträger gefunden
|
||||
if (verweis is object && verweis.IKVerknüpfungspartners != kostentrager)
|
||||
return GetIKNummern(dict, ikkrankenkasse, abrechnungscode, tarifkennzeichen, verweis.IKVerknüpfungspartners);
|
||||
|
||||
// Abrechnungscode "69" <=> Sozio
|
||||
var datenannahmestellen_2 = datenannahmestellen
|
||||
.Where(x => x.Abrechnungscode == abrechnungscode)
|
||||
.ToList();
|
||||
var datenannahmestellen = search.SegmentVKG
|
||||
.Where(x => x.ArtDerVerknüpfung == Models.Schlüssels.SchlüsselArtDerVerknüpfung.DatenannahmestelleMitEntschlusselungsbefugnis)
|
||||
.ToList();
|
||||
|
||||
if (datenannahmestellen_2.Count() == 1)
|
||||
return GetIKNummern(datenannahmestellen_2.First(), kostentrager, ikkrankenkasse);
|
||||
// Hat keinen Verweis auf Kostenträger oder Datenannahmestelle gefunden
|
||||
if (datenannahmestellen is null || !datenannahmestellen.Any())
|
||||
return null;
|
||||
|
||||
// Tarifkennzeichen
|
||||
var datenannahmestellen_3 = datenannahmestellen_2
|
||||
.Where(x => x.Tarifkennzeichen == tarifkennzeichen)
|
||||
.ToList();
|
||||
if (datenannahmestellen.Count() == 1)
|
||||
return GetIKNummern(datenannahmestellen.First(), kostentrager, ikkrankenkasse);
|
||||
|
||||
if (datenannahmestellen_3.Count() == 1)
|
||||
return GetIKNummern(datenannahmestellen_3.First(), kostentrager, ikkrankenkasse);
|
||||
// Abrechnungscode "69" <=> Sozio
|
||||
var datenannahmestellen_2 = datenannahmestellen
|
||||
.Where(x => x.Abrechnungscode == abrechnungscode)
|
||||
.ToList();
|
||||
|
||||
// ArtDesÜbermittlungsmediums "1" <=> Datenfernübertragung
|
||||
var filter_list = datenannahmestellen_3;
|
||||
if (datenannahmestellen_2.Count() == 1)
|
||||
return GetIKNummern(datenannahmestellen_2.First(), kostentrager, ikkrankenkasse);
|
||||
|
||||
if(!filter_list.Any())
|
||||
filter_list = datenannahmestellen_2;
|
||||
// Tarifkennzeichen
|
||||
var datenannahmestellen_3 = datenannahmestellen_2
|
||||
.Where(x => x.Tarifkennzeichen == tarifkennzeichen)
|
||||
.ToList();
|
||||
|
||||
if (!filter_list.Any())
|
||||
filter_list = datenannahmestellen;
|
||||
if (datenannahmestellen_3.Count() == 1)
|
||||
return GetIKNummern(datenannahmestellen_3.First(), kostentrager, ikkrankenkasse);
|
||||
|
||||
filter_list = filter_list
|
||||
.Where(x => x.ArtDesÜbermittlungsmediums == "1")
|
||||
.ToList();
|
||||
// ArtDesÜbermittlungsmediums "1" <=> Datenfernübertragung
|
||||
var filter_list = datenannahmestellen_3;
|
||||
|
||||
if (filter_list.Count() == 1)
|
||||
return GetIKNummern(filter_list.First(), kostentrager, ikkrankenkasse);
|
||||
if (!filter_list.Any())
|
||||
filter_list = datenannahmestellen_2;
|
||||
|
||||
return null;
|
||||
}
|
||||
if (!filter_list.Any())
|
||||
filter_list = datenannahmestellen;
|
||||
|
||||
private Tuple<string, string, string> GetIKNummern(SegmentKTDVKG vkg, string kostentrager, string ikkrankenkasse)
|
||||
{
|
||||
return new Tuple<string, string, string>(vkg.IKVerknüpfungspartners, kostentrager, ikkrankenkasse);
|
||||
}
|
||||
filter_list = filter_list
|
||||
.Where(x => x.ArtDesÜbermittlungsmediums == "1")
|
||||
.ToList();
|
||||
|
||||
private void foo(string filename, string[] lines)
|
||||
{
|
||||
var length = lines.Length;
|
||||
var dict = new Dictionary<string, NachrichtKTD>();
|
||||
if (filter_list.Count() == 1)
|
||||
return GetIKNummern(filter_list.First(), kostentrager, ikkrankenkasse);
|
||||
|
||||
FileDictionary.Add(filename, dict);
|
||||
return null;
|
||||
}
|
||||
|
||||
Queue<string> queue = new Queue<string>();
|
||||
int first_line = 0;
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
var line = lines[i];
|
||||
private Tuple<string, string, string> GetIKNummern(SegmentKTDVKG vkg, string kostentrager, string ikkrankenkasse)
|
||||
{
|
||||
return new Tuple<string, string, string>(vkg.IKVerknüpfungspartners, kostentrager, ikkrankenkasse);
|
||||
}
|
||||
|
||||
var type = GetType(line);
|
||||
private AddressDC GetAddress(SegmentKTDANS segment)
|
||||
{
|
||||
var address = new AddressDC();
|
||||
|
||||
if (type is null)
|
||||
continue;
|
||||
address.Street = clear(segment.StraßeHausnummerOderPostfach);
|
||||
address.Town = clear(segment.Ort);
|
||||
address.PostalCode = clear(segment.Postleitzahl);
|
||||
|
||||
if (type == "UNH")
|
||||
{
|
||||
first_line = i;
|
||||
}
|
||||
else if (type == "UNT")
|
||||
{
|
||||
var nachricht = NachrichtKTD.Parse(queue.ToArray(), filename, first_line);
|
||||
return address;
|
||||
}
|
||||
|
||||
if (dict.ContainsKey(nachricht.IKNummer))
|
||||
throw new Exception($"Beinhaltet Key bereits: {nachricht.IKNummer} in {filename} - l {first_line}");
|
||||
private string clear(string str)
|
||||
{
|
||||
string asciiOnly = new string(str.Where(c => c <= 127).ToArray());
|
||||
return asciiOnly;
|
||||
}
|
||||
|
||||
dict.Add(nachricht.IKNummer, nachricht);
|
||||
private void foo(string filename, string[] lines)
|
||||
{
|
||||
var length = lines.Length;
|
||||
var dict = new Dictionary<string, NachrichtKTD>();
|
||||
|
||||
queue.Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
queue.Enqueue(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
FileDictionary.Add(filename, dict);
|
||||
|
||||
private string GetType(string line)
|
||||
{
|
||||
var type = line.Substring(0, 3);
|
||||
Queue<string> queue = new Queue<string>();
|
||||
int first_line = 0;
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
var line = lines[i];
|
||||
|
||||
return accept.Contains(type) ? type : null;
|
||||
}
|
||||
}
|
||||
var type = GetType(line);
|
||||
|
||||
if (type is null)
|
||||
continue;
|
||||
|
||||
if (type == "UNH")
|
||||
{
|
||||
first_line = i;
|
||||
}
|
||||
else if (type == "UNT")
|
||||
{
|
||||
var nachricht = NachrichtKTD.Parse(queue.ToArray(), filename, first_line);
|
||||
|
||||
if (dict.ContainsKey(nachricht.IKNummer))
|
||||
throw new Exception($"Beinhaltet Key bereits: {nachricht.IKNummer} in {filename} - l {first_line}");
|
||||
|
||||
dict.Add(nachricht.IKNummer, nachricht);
|
||||
|
||||
queue.Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
queue.Enqueue(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string GetType(string line)
|
||||
{
|
||||
var type = line.Substring(0, 3);
|
||||
|
||||
return accept.Contains(type) ? type : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user