Add Fuchs_Database SSDT project (schema source of truth)

Adds the SQL Server Data Tools project for the fuchs_fds database — tables,
table types, functions and stored procedures that the backend calls (e.g.
fds__getInvoice, fds__merge_bankingtransactions, fds__tt__bankingtransactions,
fds__admin_getReportCatalog, fis_* auth). Build/model caches (bin, obj,
*.dbmdl, *.jfm, *.user) are git-ignored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-05 14:50:54 +02:00
parent 1376779224
commit 10ecdfa2e4
359 changed files with 22603 additions and 0 deletions
+4
View File
@@ -7,6 +7,10 @@
bin/ bin/
obj/ obj/
# SSDT / SQL database project caches (regenerated)
*.dbmdl
*.jfm
# NuGet # NuGet
packages/ packages/
*.nupkg *.nupkg
+6
View File
@@ -0,0 +1,6 @@
<Solution>
<Project Path="FuchsDatabase.sqlproj" Id="c062672e-866d-4c74-b6de-8d660a42e885">
<Build />
<Deploy />
</Project>
</Solution>
+424
View File
@@ -0,0 +1,424 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<Name>FuchsDatabase</Name>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>4.1</ProjectVersion>
<ProjectGuid>{c062672e-866d-4c74-b6de-8d660a42e885}</ProjectGuid>
<DSP>Microsoft.Data.Tools.Schema.Sql.Sql170DatabaseSchemaProvider</DSP>
<OutputType>Database</OutputType>
<RootPath>
</RootPath>
<RootNamespace>FuchsDatabase</RootNamespace>
<AssemblyName>FuchsDatabase</AssemblyName>
<ModelCollation>1033, CI</ModelCollation>
<DefaultFileStructure>BySchemaAndSchemaType</DefaultFileStructure>
<DeployToDatabase>True</DeployToDatabase>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<TargetLanguage>CS</TargetLanguage>
<AppDesignerFolder>Properties</AppDesignerFolder>
<SqlServerVerification>False</SqlServerVerification>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseSet>True</TargetDatabaseSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
<SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
<VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
</PropertyGroup>
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<ItemGroup>
<Folder Include="Properties" />
<Folder Include="dbo\" />
<Folder Include="dbo\Tables\" />
<Folder Include="dbo\Views\" />
<Folder Include="Security\" />
<Folder Include="dbo\Functions\" />
<Folder Include="dbo\Stored Procedures\" />
<Folder Include="dbo\User Defined Types\" />
</ItemGroup>
<ItemGroup>
<Build Include="dbo\Tables\tmp__fds__invoice_servicerequests.sql" />
<Build Include="dbo\Tables\tmp__fds__bankingtransactions.sql" />
<Build Include="dbo\Tables\mfr__xl__servicerequests.sql" />
<Build Include="dbo\Tables\mfr__users.sql" />
<Build Include="dbo\Tables\mfr__timeevents.sql" />
<Build Include="dbo\Tables\mfr__tags.sql" />
<Build Include="dbo\Tables\mfr__stockmovements.sql" />
<Build Include="dbo\Tables\mfr__steps.sql" />
<Build Include="dbo\Tables\mfr__steplisttemplates.sql" />
<Build Include="dbo\Tables\mfr__steplisttemplateinstances.sql" />
<Build Include="dbo\Tables\mfr__servicerequests.sql" />
<Build Include="dbo\Tables\mfr__serviceobjects.sql" />
<Build Include="dbo\Tables\mfr__reports.sql" />
<Build Include="dbo\Tables\mfr__qualifications.sql" />
<Build Include="dbo\Tables\mfr__products.sql" />
<Build Include="dbo\Tables\mfr__itemunits.sql" />
<Build Include="dbo\Tables\mfr__itemtypes.sql" />
<Build Include="dbo\Tables\mfr__items.sql" />
<Build Include="dbo\Tables\mfr__invoices.sql" />
<Build Include="dbo\Tables\mfr__documents.sql" />
<Build Include="dbo\Tables\mfr__d_timeevents.sql" />
<Build Include="dbo\Tables\mfr__d_stockmovements.sql" />
<Build Include="dbo\Tables\mfr__d_steps.sql" />
<Build Include="dbo\Tables\mfr__d_items.sql" />
<Build Include="dbo\Tables\mfr__d_comments.sql" />
<Build Include="dbo\Tables\mfr__d_appointments.sql" />
<Build Include="dbo\Tables\mfr__d__PartnerSet.sql" />
<Build Include="dbo\Tables\mfr__d_#locations.sql" />
<Build Include="dbo\Tables\mfr__d_#customvalues.sql" />
<Build Include="dbo\Tables\mfr__costcenters.sql" />
<Build Include="dbo\Tables\mfr__contacts.sql" />
<Build Include="dbo\Tables\mfr__companies.sql" />
<Build Include="dbo\Tables\mfr__comments.sql" />
<Build Include="dbo\Tables\mfr__attachments.sql" />
<Build Include="dbo\Tables\mfr__appointments.sql" />
<Build Include="dbo\Tables\mfr___PartnerSet.sql" />
<Build Include="dbo\Tables\mfr__#locations.sql" />
<Build Include="dbo\Tables\mfr__#customvalues.sql" />
<Build Include="dbo\Tables\fuchs_planner_traffic.sql" />
<Build Include="dbo\Tables\fuchs_planner_options.sql" />
<Build Include="dbo\Tables\fuchs_planner_groups.sql" />
<Build Include="dbo\Tables\fuchs_planner.sql" />
<Build Include="dbo\Tables\fuchs_debug.sql" />
<Build Include="dbo\Tables\fis_widgets_cache.sql" />
<Build Include="dbo\Tables\fis_widgets.sql" />
<Build Include="dbo\Tables\fis_widget_subscriptions.sql" />
<Build Include="dbo\Tables\fis_usergroups_members.sql" />
<Build Include="dbo\Tables\fis_usergroups.sql" />
<Build Include="dbo\Tables\fis_useraccounts_settings.sql" />
<Build Include="dbo\Tables\fis_useraccounts.sql" />
<Build Include="dbo\Tables\fis_module_auth.sql" />
<Build Include="dbo\Tables\fis_admin_debuglog.sql" />
<Build Include="dbo\Tables\fds__status.sql" />
<Build Include="dbo\Tables\fds__removed.sql" />
<Build Include="dbo\Tables\fds__reminder.sql" />
<Build Include="dbo\Tables\fds__payments.sql" />
<Build Include="dbo\Tables\fds__mfr_updaterequests.sql" />
<Build Include="dbo\Tables\fds__mfr_invoicefiles.sql" />
<Build Include="dbo\Tables\fds__log.sql" />
<Build Include="dbo\Tables\fds__invoices.sql" />
<Build Include="dbo\Tables\fds__invoice_servicerequests.sql" />
<Build Include="dbo\Tables\fds__invoice_items.sql" />
<Build Include="dbo\Tables\fds__invoice_details.sql" />
<Build Include="dbo\Tables\fds__emaillog.sql" />
<Build Include="dbo\Tables\fds__debuglog.sql" />
<Build Include="dbo\Tables\fds__custom_vat.sql" />
<Build Include="dbo\Tables\fds__custom_servicerequest.sql" />
<Build Include="dbo\Tables\fds__custom_invoiceinfo.sql" />
<Build Include="dbo\Tables\fds__bankingtransactions_settings.sql" />
<Build Include="dbo\Tables\fds__bankingtransactions_assigns.sql" />
<Build Include="dbo\Tables\fds__bankingtransactions.sql" />
<Build Include="dbo\Tables\fds__admin_settings.sql" />
<Build Include="dbo\Tables\fds__admin_reportcatalog.sql" />
<Build Include="dbo\Tables\fds__admin_dberrors.sql" />
<Build Include="dbo\Tables\fds__admin_activity.sql" />
<Build Include="dbo\Views\ocms_fn_rand.sql" />
<Build Include="Security\fuchs_rwe.sql" />
<Build Include="Security\fds_rwe.sql" />
<Build Include="Security\fuchs_web.sql" />
<Build Include="Security\fuchs_fds.sql" />
<Build Include="dbo\Functions\vat_val.sql" />
<Build Include="dbo\Functions\strings_replaceSpecialCharsInHTML.sql" />
<Build Include="dbo\Functions\strings_removeLeading0_255.sql" />
<Build Include="dbo\Functions\strings_removeLeading0.sql" />
<Build Include="dbo\Functions\strings_encodeHTML.sql" />
<Build Include="dbo\Functions\ott_remove_csv.sql" />
<Build Include="dbo\Functions\ott_random_int.sql" />
<Build Include="dbo\Functions\ott_quote_255.sql" />
<Build Include="dbo\Functions\ott_quote.sql" />
<Build Include="dbo\Functions\ott_min_float.sql" />
<Build Include="dbo\Functions\ott_min_date.sql" />
<Build Include="dbo\Functions\ott_min.sql" />
<Build Include="dbo\Functions\ott_merge_csv.sql" />
<Build Include="dbo\Functions\ott_max_float.sql" />
<Build Include="dbo\Functions\ott_max.sql" />
<Build Include="dbo\Functions\ott_jcsv_containskey.sql" />
<Build Include="dbo\Functions\ott_jcsv_contains.sql" />
<Build Include="dbo\Functions\ott_jcontent.sql" />
<Build Include="dbo\Functions\ott_csv_contains.sql" />
<Build Include="dbo\Functions\ott_b26.sql" />
<Build Include="dbo\Functions\ott_b10.sql" />
<Build Include="dbo\Functions\net_val.sql" />
<Build Include="dbo\Functions\ne.sql" />
<Build Include="dbo\Functions\mfr_fn_dateSent_fromNotes.sql" />
<Build Include="dbo\Functions\mfr__schema.sql" />
<Build Include="dbo\Functions\fis_getModuleAuth.sql" />
<Build Include="dbo\Functions\fis_fn_useraccount_id.sql" />
<Build Include="dbo\Functions\fis_fn_id.sql" />
<Build Include="dbo\Functions\fis_admin_testGroupMembership.sql" />
<Build Include="dbo\Functions\fis_admin_getUserSetting.sql" />
<Build Include="dbo\Functions\fis_admin_getUserName_rev_byID.sql" />
<Build Include="dbo\Functions\fis_admin_getUserName_rev.sql" />
<Build Include="dbo\Functions\fis_admin_getUserName_byID.sql" />
<Build Include="dbo\Functions\fis_admin_getUserName.sql" />
<Build Include="dbo\Functions\fis_admin_getUserEmail_byID.sql" />
<Build Include="dbo\Functions\fis_admin_getUserAuth.sql" />
<Build Include="dbo\Functions\fis_admin_getUserAddressForm.sql" />
<Build Include="dbo\Functions\fis_admin_checkUserExists.sql" />
<Build Include="dbo\Functions\fds__updateNeed.sql" />
<Build Include="dbo\Functions\fds__r_getBalanceThisMonth.sql" />
<Build Include="dbo\Functions\fds__newInvoiceId.sql" />
<Build Include="dbo\Functions\fds__getCompanyNameAddress.sql" />
<Build Include="dbo\Functions\fds__getCompanyName.sql" />
<Build Include="dbo\Functions\fds__getCompanyEmail.sql" />
<Build Include="dbo\Functions\fds__getCompanyAddress.sql" />
<Build Include="dbo\Functions\fds__fn_vatfrombalances.sql" />
<Build Include="dbo\Functions\fds__fn_ReminderDocumentName.sql" />
<Build Include="dbo\Functions\fds__fn_reminder_id.sql" />
<Build Include="dbo\Functions\fds__fn_isInvoiceCancelled.sql" />
<Build Include="dbo\Functions\fds__fn_invoice-srq_id.sql" />
<Build Include="dbo\Functions\fds__fn_InvoicePaymentAmount_full.sql" />
<Build Include="dbo\Functions\fds__fn_InvoicePaymentAmount.sql" />
<Build Include="dbo\Functions\fds__fn_InvoiceIDs_mfr.sql" />
<Build Include="dbo\Functions\fds__fn_InvoiceIdByName.sql" />
<Build Include="dbo\Functions\fds__fn_invoice_id.sql" />
<Build Include="dbo\Functions\fds__fn_invoice_customerid.sql" />
<Build Include="dbo\Functions\fds__fn_IntermediateIsAllocatedToOther.sql" />
<Build Include="dbo\Functions\fds__fn_DocumentName.sql" />
<Build Include="dbo\Functions\fds__fn_creanupTransactionInfo.sql" />
<Build Include="dbo\Functions\fds__fn_combineAddress.sql" />
<Build Include="dbo\Functions\fds__fn_bankingtransaction_id.sql" />
<Build Include="dbo\Functions\date_weekfirst.sql" />
<Build Include="dbo\Functions\date_weekend.sql" />
<Build Include="dbo\Functions\date_nextFirst.sql" />
<Build Include="dbo\Functions\date_monthfirst.sql" />
<Build Include="dbo\Functions\date_monthend.sql" />
<Build Include="dbo\Functions\date_addcustom.sql" />
<Build Include="dbo\Functions\date_add.sql" />
<Build Include="dbo\Functions\bo_val.sql" />
<Build Include="dbo\Functions\backup__fds__r_getBalanceThisMonth.sql" />
<Build Include="dbo\Functions\backup__fds__fn_InvoiceIdByName.sql" />
<Build Include="dbo\Functions\backup__fds__fn_invoice_customerid.sql" />
<Build Include="dbo\Functions\AddBusinessDays.sql" />
<Build Include="dbo\Functions\string_SplitString_ordered.sql" />
<Build Include="dbo\Functions\ott_20_randomStrings.sql" />
<Build Include="dbo\Functions\json_diffObjectArrays.sql" />
<Build Include="dbo\Functions\json_compareObjectArrays.sql" />
<Build Include="dbo\Functions\fis_getONEPersonWidgets.sql" />
<Build Include="dbo\Functions\fis_admin_getUserGroupList.sql" />
<Build Include="dbo\Functions\fis_admin_getUserAccountList.sql" />
<Build Include="dbo\Functions\fis_admin_getUserAccount_Namelist.sql" />
<Build Include="dbo\Functions\fis_admin_getUserAccount_byemail.sql" />
<Build Include="dbo\Functions\fis_admin_getUserAccount.sql" />
<Build Include="dbo\Functions\fis_admin_authenticate_byID.sql" />
<Build Include="dbo\Functions\fis_admin_authenticate.sql" />
<Build Include="dbo\Functions\fds__getUpdateableTables.sql" />
<Build Include="dbo\Functions\fds__getUpdateableRequests.sql" />
<Build Include="dbo\Functions\fds__fn_bankingtransactions_perInvoice.sql" />
<Build Include="dbo\Functions\fds__fn_bankingtransactions.sql" />
<Build Include="dbo\Functions\backup__fds__fn_bankingtransactions.sql" />
<Build Include="dbo\Functions\fis_getModuleAuthList.sql" />
<Build Include="dbo\Functions\fds__getRequestTreeIds.sql" />
<Build Include="dbo\Functions\fds__getInvoiceTreeIds.sql" />
<Build Include="dbo\Functions\fds__getInvoiceCredits.sql" />
<Build Include="dbo\Functions\fds__getCompanysContacts.sql" />
<Build Include="dbo\Functions\fds__getCompanyContacts.sql" />
<Build Include="dbo\Functions\fds__fn_unpaidInvoices.sql" />
<Build Include="dbo\Functions\fds__fn_requestsforinvoice.sql" />
<Build Include="dbo\Functions\fds__admin_reminderSettings.sql" />
<Build Include="dbo\Functions\backup__fds__getInvoiceTreeIds.sql" />
<Build Include="dbo\Functions\backup__fds__fn_unpaidInvoices.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__users.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__timeevents.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__tags.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__stockmovements.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__steps.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__steplisttemplates.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__steplisttemplateinstances.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__servicerequests.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__serviceobjects.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__reports.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__qualifications.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__products.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__itemunits.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__itemtypes.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__items.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__invoices.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__documents.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__costcenters.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__contacts.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__companies.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__comments.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__attachments.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__appointments.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt___PartnerSet.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__#locations.sql" />
<Build Include="dbo\Stored Procedures\mfr__updt__#customvalues.sql" />
<Build Include="dbo\Stored Procedures\mfr__getSchema.sql" />
<Build Include="dbo\Stored Procedures\fuchs_planner_submit.sql" />
<Build Include="dbo\Stored Procedures\fuchs_planner_getSummary.sql" />
<Build Include="dbo\Stored Procedures\fuchs_planner_getPrev.sql" />
<Build Include="dbo\Stored Procedures\fuchs_planner_getNext.sql" />
<Build Include="dbo\Stored Procedures\fis_widgets_setCache.sql" />
<Build Include="dbo\Stored Procedures\fis_widgets_getCache.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_setUserGroup.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_setUserAccount_activeStatus.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_setUserAccount.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_setNewPassword.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_resetUserPassword.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_remGroupMember.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_delUserGroup.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_delUserAccount.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_debug.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_createUserAccount.sql" />
<Build Include="dbo\Stored Procedures\fis_admin_addGroupMember.sql" />
<Build Include="dbo\Stored Procedures\fds__toggleRequestHidden.sql" />
<Build Include="dbo\Stored Procedures\fds__setStatus.sql" />
<Build Include="dbo\Stored Procedures\fds__setReportVAT.sql" />
<Build Include="dbo\Stored Procedures\fds__setReminderSent.sql" />
<Build Include="dbo\Stored Procedures\fds__setReminderFinal.sql" />
<Build Include="dbo\Stored Procedures\fds__setReminderFile.sql" />
<Build Include="dbo\Stored Procedures\fds__setMFRInvoiceFile.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoiceUNPayed.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoiceSent.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoicePaymentStatus_auto_single.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoicePaymentStatus_auto.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoicePayed.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoiceFinal.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoiceFile.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoiceCancelled__deprecated.sql" />
<Build Include="dbo\Stored Procedures\fds__setInvoice.sql" />
<Build Include="dbo\Stored Procedures\fds__setBankingtransaction_done.sql" />
<Build Include="dbo\Stored Procedures\fds__setBankingtransaction_autoAssigns.sql" />
<Build Include="dbo\Stored Procedures\fds__setBankingtransaction_assignToIvoice.sql" />
<Build Include="dbo\Stored Procedures\fds__remInvoice_ServiceRequests.sql" />
<Build Include="dbo\Stored Procedures\fds__remInvoice_Items.sql" />
<Build Include="dbo\Stored Procedures\fds__remInvoice.sql" />
<Build Include="dbo\Stored Procedures\fds__r_getBalanceTrendByYear.sql" />
<Build Include="dbo\Stored Procedures\fds__r_getBalanceTrendByMonth.sql" />
<Build Include="dbo\Stored Procedures\fds__r_getBalanceByYearTopMaterial.sql" />
<Build Include="dbo\Stored Procedures\fds__r_getBalanceByYearTopCustomer.sql" />
<Build Include="dbo\Stored Procedures\fds__r_getBalanceByMonth.sql" />
<Build Include="dbo\Stored Procedures\fds__prepStorno_recreate.sql" />
<Build Include="dbo\Stored Procedures\fds__prepReminder.sql" />
<Build Include="dbo\Stored Procedures\fds__prepInvoice.sql" />
<Build Include="dbo\Stored Procedures\fds__merge_bankingtransactions.sql" />
<Build Include="dbo\Stored Procedures\fds__maint__updateCancelledStatus.sql" />
<Build Include="dbo\Stored Procedures\fds__lookupReminders.sql" />
<Build Include="dbo\Stored Procedures\fds__logEmail.sql" />
<Build Include="dbo\Stored Procedures\fds__getRequests_list2.sql" />
<Build Include="dbo\Stored Procedures\fds__getRequests_list.sql" />
<Build Include="dbo\Stored Procedures\fds__getRequest_details.sql" />
<Build Include="dbo\Stored Procedures\fds__getReportDocument.sql" />
<Build Include="dbo\Stored Procedures\fds__getReminder.sql" />
<Build Include="dbo\Stored Procedures\fds__getInvRequestItems.sql" />
<Build Include="dbo\Stored Procedures\fds__getInvPayments.sql" />
<Build Include="dbo\Stored Procedures\fds__getInvoices_list2.sql" />
<Build Include="dbo\Stored Procedures\fds__getInvoices_list_vario.sql" />
<Build Include="dbo\Stored Procedures\fds__getInvoices_list.sql" />
<Build Include="dbo\Stored Procedures\fds__getInvoiceReminder.sql" />
<Build Include="dbo\Stored Procedures\fds__getInvoice.sql" />
<Build Include="dbo\Stored Procedures\fds__getFDSDocument.sql" />
<Build Include="dbo\Stored Procedures\fds__getDatevExports.sql" />
<Build Include="dbo\Stored Procedures\fds__getBankingtransfers_questionable.sql" />
<Build Include="dbo\Stored Procedures\fds__getBankingtransfers_list2.sql" />
<Build Include="dbo\Stored Procedures\fds__getBankingtransfers_list.sql" />
<Build Include="dbo\Stored Procedures\fds__fn_getMFRInvoicesWithoutfiles.sql" />
<Build Include="dbo\Stored Procedures\fds__createStorno_simple.sql" />
<Build Include="dbo\Stored Procedures\fds__createStorno_copy.sql" />
<Build Include="dbo\Stored Procedures\fds__createReminder.sql" />
<Build Include="dbo\Stored Procedures\fds__createInvoice_ServiceRequest.sql" />
<Build Include="dbo\Stored Procedures\fds__createInvoice_Details.sql" />
<Build Include="dbo\Stored Procedures\fds__createInvoice.sql" />
<Build Include="dbo\Stored Procedures\fds__createCredit_simple.sql" />
<Build Include="dbo\Stored Procedures\fds__admin_updateconflicttables.sql" />
<Build Include="dbo\Stored Procedures\fds__admin_removeconflicttables.sql" />
<Build Include="dbo\Stored Procedures\fds__admin_logdebug.sql" />
<Build Include="dbo\Stored Procedures\fds__admin_getReportCatalog.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__setInvoicePayed.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__setBankingtransaction_autoAssigns.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__r_getBalanceTrendByYear.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__r_getBalanceTrendByMonth.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__r_getBalanceByYearTopMaterial.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__r_getBalanceByYearTopCustomer.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__r_getBalanceByMonth.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__prepStorno_recreate.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__prepReminder.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__lookupReminders.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getRequests_list2.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getRequests_list.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getRequest_details.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getReportDocument.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getReminder.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getInvRequestItems.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getInvoices_list2.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getInvoices_list_vario.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getInvoiceReminder.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getDatevExports.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getBankingtransfers_questionable.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__getBankingtransfers.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__createStorno_simple.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__createReminder.sql" />
<Build Include="dbo\Stored Procedures\backup__fds__createCredit_simple.sql" />
<Build Include="dbo\Stored Procedures\_BackupAndClearInvoiceFile.sql" />
<Build Include="dbo\User Defined Types\json_data_maxU.sql" />
<Build Include="dbo\User Defined Types\hash_256.sql" />
<Build Include="dbo\User Defined Types\datetime_utc.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__users.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__timeevents.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__tags.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__stockmovements.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__steps.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__steplisttemplates.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__steplisttemplateinstances.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__servicerequests.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__serviceobjects.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__reports.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__qualifications.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__products.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__itemunits.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__itemtypes.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__items.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__invoices.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__documents.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__costcenters.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__contacts.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__companies.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__comments.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__attachments.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__appointments.sql" />
<Build Include="dbo\User Defined Types\mfr__tt___PartnerSet.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__#locations.sql" />
<Build Include="dbo\User Defined Types\mfr__tt__#customvalues.sql" />
<Build Include="dbo\User Defined Types\fds__tt__reminder_core.sql" />
<Build Include="dbo\User Defined Types\fds__tt__mfr_steps.sql" />
<Build Include="dbo\User Defined Types\fds__tt__mfr_items.sql" />
<Build Include="dbo\User Defined Types\fds__tt__invoice_servicerequests.sql" />
<Build Include="dbo\User Defined Types\fds__tt__invoice_items.sql" />
<Build Include="dbo\User Defined Types\fds__tt__invoice_core.sql" />
<Build Include="dbo\User Defined Types\fds__tt__invoice_base.sql" />
<Build Include="dbo\User Defined Types\fds__tt__idlist_vchar.sql" />
<Build Include="dbo\User Defined Types\fds__tt__idlist.sql" />
<Build Include="dbo\User Defined Types\fds__tt__bankingtransactions.sql" />
<Build Include="dbo\User Defined Types\fds__tt__admin_ReportAdminTable.sql" />
<Build Include="Security\fuchs_enc_1.sql" />
</ItemGroup>
</Project>
+7
View File
@@ -0,0 +1,7 @@
CREATE ROLE [fds_rwe]
AUTHORIZATION [dbo];
GO
ALTER ROLE [fds_rwe] ADD MEMBER [fuchs_fds];
+15
View File
@@ -0,0 +1,15 @@
CREATE SYMMETRIC KEY [fuchs_enc_1]
AUTHORIZATION [dbo]
WITH ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = N'lwppdri?q{jdzus&bkuaheklmsFT7_&#$!~<dhle,zJ,q3th';
GO
GRANT CONTROL
ON SYMMETRIC KEY::[fuchs_enc_1] TO [fds_rwe];
GO
GRANT CONTROL
ON SYMMETRIC KEY::[fuchs_enc_1] TO [fuchs_rwe];
+2
View File
@@ -0,0 +1,2 @@
CREATE USER [fuchs_fds] FOR LOGIN [fuchs_fds];
+7
View File
@@ -0,0 +1,7 @@
CREATE ROLE [fuchs_rwe]
AUTHORIZATION [dbo];
GO
ALTER ROLE [fuchs_rwe] ADD MEMBER [fuchs_web];
+2
View File
@@ -0,0 +1,2 @@
CREATE USER [fuchs_web] FOR LOGIN [fuchs_web];
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,9 @@
CREATE FUNCTION[dbo].[AddBusinessDays](@Date DATE,@n INT)
RETURNS DATE AS
BEGIN
DECLARE @d INT,@f INT,@DW INT;
SET @f=CAST(abs(1^SIGN(DATEPART(DW, @Date)-(7-@@DATEFIRST))) AS BIT)
SET @DW=DATEPART(DW,@Date)-(7-@@DATEFIRST)*(@f^1)+@@DATEFIRST*(@f&1)
SET @d=4-SIGN(@n)*(4-@DW);
RETURN DATEADD(D,@n+((ABS(@n)+(@d%(8+SIGN(@n)))-2)/5)*2*SIGN(@n)-@d/7,@Date);
END
@@ -0,0 +1,27 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[backup__fds__fn_InvoiceIdByName]
(
@nme varchar(255)
)
RETURNS varchar(20)
AS
BEGIN
DECLARE @Id varchar(20);
SET @nme = TRIM((SELECT TOP(1) [value] FROM string_split(@nme, '(')));
SET @Id = ISNULL(
(SELECT TOP(1) [Id] FROM (
SELECT TOP(1) [Id], [fds] = 1 FROM [dbo].[fds__invoices] WHERE [InvoiceId] = @nme
UNION
SELECT TOP(1) try_Cast([Id] as varchar(20)), [fds] = 0 FROM [dbo].[mfr__invoices] WHERE [InvoiceId] = @nme
)z ORDER BY [fds] DESC
),'');
RETURN @id;
END
@@ -0,0 +1,83 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[backup__fds__fn_bankingtransactions]
(
@startdate date = NULL
,@enddate date = NULL
,@invoice_startdate date = NULL
,@invoice_enddate date = NULL
,@invoice_idlist [dbo].[fds__tt__idlist_vchar] READONLY
)
RETURNS @bankingtransactions TABLE
(
[uid] bigint
,[AccountIdentification] varchar(50)
,[ValueDate] date
,[Amount] numeric(9,2)
,[AccountNumberOfPayer] varchar(30)
,[NameOfPayer] nvarchar(60)
,[SepaRemittanceInformation] varchar(150)
,[EndToEndReference] varchar(50)
,[manu] bit
,[InvId] varchar(15)
,[done_manually] bit
,[fds] bit
)
AS
BEGIN
-- Fill the table variable with the rows for your result set
DECLARE @firstever date = '1900-01-01', @tomorrow date = DATEADD(dAy, 1, GETDATE());
SELECT @invoice_startdate = ISNULL(@invoice_startdate, @firstever), @invoice_enddate = ISNULL(@invoice_enddate, @tomorrow);
DECLARE @idlistempty bit = IIF(EXISTS (SELECT 0 FROM @invoice_idlist) ,0,1);
with bt as (
SELECT [uid],[AccountIdentification],[ValueDate],[Amount],AccountNumberOfPayer,NameOfPayer, SepaRemittanceInformation, EndToEndReference
FROM [dbo].[fds__bankingtransactions] as bt_
where (@startdate is null OR bt_.ValueDate >= @startdate)
AND (@enddate is null or bt_.ValueDate <= @enddate)
), bs0manu as (
SELECT bs.[banking_uid], [invid] = spl.[value], [manu] = cast(1 as bit)
FROM [dbo].[fds__bankingtransactions_settings] as bs
CROSS APPLY STRING_SPLIT(bs.assigned_invoice_id, ',') as spl
JOIN bt on bt.[uid] = bs.[banking_uid]
WHERE bs.assigned_invoice_id is not null
), bs1 as (
SELECT * FROM bs0manu
UNION
SELECT bs.[banking_uid], [invid] = spl.[value], [manu] = cast(0 as bit)
FROM [dbo].[fds__bankingtransactions_settings] as bs
CROSS APPLY STRING_SPLIT(bs.auto_invoice_id, ',') as spl
JOIN bt on bt.[uid] = bs.[banking_uid]
WHERE bs.auto_invoice_id is not null
and bt.[uid] NOT IN (SELECT [banking_uid] FROM bs0manu)
), bs as (
SELECT banking_uid, [invid], manu = CAST(MAX(CAST([manu] as int)) as bit)
from bs1
WHERE @idlistempty = 1 OR bs1.[invid] in (SELECT [id] FROM @invoice_idlist)
GROUP BY banking_uid, [invid]
)
INSERT INTO @bankingtransactions
SELECT
bt.[uid]
,[AccountIdentification]
, bt.[ValueDate]
, [Amount]
,bt.AccountNumberOfPayer
,bt.NameOfPayer
,bt.SepaRemittanceInformation
,bt.EndToEndReference
,[manu]
,[invid]
,[done_manually] = IIF(ISNULL(bs2.[done_manually],'') <> '', 1,0)
,[fds] = IIF(mi.id is null, 1, 0)
FROM bt
JOIN bs ON bt.[uid] = bs.[banking_uid]
LEFT JOIN [dbo].[fds__bankingtransactions_settings] as bs2 ON bt.[uid] = bs2.[banking_uid]
LEFT JOIN [dbo].[fds__invoices] as fi on bs.[invid] = fi.[id] AND fi.[DateFinalized] BETWEEN @invoice_startdate AND @invoice_enddate
LEFT JOIN [dbo].[mfr__invoices] as mi on try_cast(bs.[invid] as bigint) = mi.[id] AND mi.[DateOfCreation] BETWEEN @invoice_startdate AND @invoice_enddate;
RETURN
END
@@ -0,0 +1,26 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[backup__fds__fn_invoice_customerid]
(
@InvId varchar(15)
)
RETURNS bigint
AS
BEGIN
DECLARE @ret bigint;
SELECT TOP(1) @ret = [customerid] FROM dbo.[fds__invoices] WHERE [id] = @InvId;
IF @ret is null
SELECT TOP(1) @ret = [customerid] FROM (SELECT TOP(1) [invid] = p.[PartnerId], s.[CustomerId], cy.[supportmail], cy.[Name]
FROM dbo.[mfr__*PartnerSet] as p
JOIN [dbo].[mfr__servicerequests] as s on p.[EntityId] = s.[Id] AND p.[Property] = 'ServiceRequest:Invoices'
JOIN [dbo].[mfr__companies] as cy on s.[CustomerId] = cy.id
WHERE p.PartnerId = TRY_CAST(@invId as bigint))z;
RETURN @ret;
END
@@ -0,0 +1,48 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[backup__fds__fn_unpaidInvoices]
(
)
RETURNS TABLE
AS
RETURN
(
WITH inv as (
SELECT [Id] = cast([id] as varchar(15))
,[Invoiceid]
,[DateFinalized]
,[InvoiceBalance]
,[DocumentName]
,[file]
,[InvoiceTitle]
,[customerid]
,[dateSent]
,[fds] = CAST(1 as bit)
FROM [dbo].[fds__invoices] as iv
WHERE [isfinal] = 1 and CAST(CASE WHEN ISNULL(iv.[IsCanceled],0) = 1 THEN 1 ELSE ISNULL([IsPayed],0) END as bit) = 0
and InvoiceBalance > 0
UNION
SELECT [Id] = cast([id] as varchar(15))
,[Invoiceid]
,[DateFinalized] = [DateOfCreation]
,[InvoiceBalance]
,[DocumentName]
,[file] = NULL
,[InvoiceTitle] = ''
,[customerid] = [dbo].[fds__fn_invoice_customerid](mfri.[id])
,[datesent] = NULL
,[fds] = CAST(0 as bit)
FROM [dbo].[mfr__invoices] as mfri
LEFT JOIN [dbo].[fds__custom_invoiceinfo] as ivi on mfri.[id] = ivi.[invid]
WHERE [invoicestate] in ('eIsSent','eIsOpen')
AND ISNULL(ivi.isPayed,0) = 0
AND not [invoiceId] like 'preview'
and InvoiceBalance > 0
)
SELECT * /*[Rechnung] = [invoiceId], [Name] = [InvoiceTitle] + CHAR(10) + ' (' + (SELECT TOP(1) c.[name] FROM [dbo].[mfr__companies] as c WHERE inv.[customerid] = c.[id]) + ')', [Betrag (net)] = FORMAT([invoicebalance], '#0.00€', 'de'), [Datum] = FORMAT([DateFinalized], 'dd.MM.yy' , 'de'), [Zahlungen] = FORMAT([dbo].[fds__fn_InvoicePaymentAmount]([id]), '#0.00€', 'de'), [order] = ROW_NUMBER() OVER (ORDER BY [DateFinalized], [DateSent]) */
FROM inv
)
@@ -0,0 +1,33 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[backup__fds__getInvoiceTreeIds]
(
@invid varchar(20)
)
RETURNS TABLE
AS
RETURN
(
with mfr_inv as (
SELECT [type] = 'invoice', [id] = [id] FROM [dbo].[mfr__invoices] as _mfri where _mfri.[id] = TRY_CAST(@invid as bigint)
), mfr_srq as (
SELECT DISTINCT [type] = 'servicerequest', [id] = mfrs.[id] FROM mfr_inv
JOIN [dbo].[mfr__*PartnerSet] as ps on Property = 'Invoice:SourceServiceRequest' and ps.EntityId = mfr_inv.[id]
JOIN [dbo].[mfr__servicerequests] as mfrs on ps.[PartnerId] = mfrs.id
), fds_srq as (
SELECT distinct [type] = 'servicerequest', [id] = mfrs.[id]
FROM [dbo].[fds__invoices] as _fi
JOIN [dbo].[fds__invoice_servicerequests] as _fs on _fi.Id = _fs.[InvId] and _fs.[mfr__servicerequest] is not null
JOIN [dbo].[mfr__servicerequests] as mfrs on _fs.[mfr__servicerequest] = mfrs.id
WHERE _fi.[Id] = @invid
)
SELECT * FROM mfr_inv
union
SELECT * FROM mfr_srq
union
SELECT * FROM fds_srq
)
@@ -0,0 +1,42 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[backup__fds__r_getBalanceThisMonth](
@authuser varchar(100)
)
RETURNS varchar(25)
BEGIN
DECLARE @today date = GETDATE();
DECLARE @tomorrow date = DATEADD(DAY,1,@today);
DECLARE @thismonthfirst date = [dbo].[date_monthfirst](@today);
DECLARE @ret varchar(25) = ''
IF [dbo].[fis_getModuleAuth]('fds_reports', @authuser) < 2
SET @ret = '';
ELSE
BEGIN
WITH inv as (
SELECT
i.[Dateofcreation]
,i.[InvoiceBalance]
,i.[InvoiceBalanceNetto]
FROM [dbo].[mfr__invoices] as i
where --i.[invoicestate] in('eIsSent','eIsPaid','eIsOpen') and
i.[FileType] in( 'PdfInvoice','PdfCancelInvoice','PdfPartialInvoice') and ISNULL(InvoiceId,'') not in ('Preview','')
AND [dbo].[date_monthfirst](i.[Dateofcreation]) = @thismonthfirst
UNION
SELECT
[Dateofcreation] = i.[DateFinalized]
,i.[InvoiceBalance]
,[InvoiceBalanceNetto] = i.[InvoiceBalance_net]
FROM [dbo].[fds__invoices] as i
WHERE i.[isFinal] = 1 AND [dbo].[date_monthfirst](i.[DateFinalized]) = @thismonthfirst
)
SELECT TOP(1) @ret = FORMAT( SUM( ISNULL(inv.[InvoiceBalanceNetto],0) ) * 0.001, '#,0 k€', 'de') FROM inv;
END
RETURN @ret;
END
+22
View File
@@ -0,0 +1,22 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[bo_val]
(
@price numeric(10,3)
,@quantityhours numeric(10,3)
,@discount numeric(10,3)
,@VAT numeric(10,3)
)
RETURNS numeric(10,2)
AS
BEGIN
DECLARE @Ret numeric(10,2)
SET @RET = [dbo].[net_val](@price, @quantityhours, @discount) * (1 + (ISNULL(@vat, 19.0) * 0.01));
RETURN @RET;
END
+58
View File
@@ -0,0 +1,58 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[date_add]
(
@date date
,@addition varchar(10)
,@shift_to_first bit = 1
)
RETURNS date
AS
BEGIN
DECLARE @Ret date = @date;
SET @addition = LOWER(ISNULL(@addition,''));
DECLARE @negative bit = 0;
IF LEFT(@addition,1) = '-'
BEGIN
SET @negative = 1;
SET @addition = REPLACE(@addition, '-', '');
END
IF @addition like '[1-9]%[dwmqy]'
BEGIN
DECLARE @num int = TRY_CONVERT(int, LEFT(@addition, patindex('%[^0-9]%', @addition) - 1)) * IIF(@negative = 1, -1, 1), @unit varchar(2) = LOWER(RIGHT(@addition, LEN(@addition) - patindex('%[^0-9]%', @addition) + 1)) ;
if @num is not null
BEGIN
SET @ret = CASE WHEN ISNULL(@shift_to_first,1) = 1 THEN
CASE
WHEN @unit = 'y' THEN DATEADD(YEAR, @num - 1, dbo.date_nextFirst(@date, 'y'))
WHEN @unit = 'q' THEN DATEADD(QUARTER, @num - 1, dbo.date_nextFirst(@date, 'q'))
WHEN @unit = 'm' THEN DATEADD(Month, @num - 1, dbo.date_nextFirst(@date, 'm'))
WHEN @unit = 'w' THEN DATEADD(WEEK, @num - 1, dbo.date_nextFirst(@date, 'w'))
WHEN @unit = 'd' THEN DATEADD(DAY, @num - 1, dbo.date_nextFirst(@date, 'd'))
WHEN @unit in ('bd','wd') THEN [dbo].[AddBusinessDays](@date, @num)
ELSE @date
END
ELSE
CASE
WHEN @unit = 'y' THEN DATEADD(YEAR, @num, @date)
WHEN @unit = 'q' THEN DATEADD(QUARTER, @num, @date)
WHEN @unit = 'm' THEN DATEADD(Month, @num, @date)
WHEN @unit = 'w' THEN DATEADD(WEEK, @num, @date)
WHEN @unit = 'd' THEN DATEADD(DAY, @num, @date)
WHEN @unit in ('bd','wd') THEN [dbo].[AddBusinessDays](@date, @num)
ELSE @date
END
END;
END
END
RETURN @ret;
END
@@ -0,0 +1,27 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[date_addcustom]
(
@date date
,@phrase varchar(10)
)
RETURNS date
AS
BEGIN
DECLARE @returndate date, @numpart integer = TRY_PARSE(left(@phrase, patindex('%[^0-9]%', @phrase + '.') - 1) as integer), @defpart varchar(10) = LOWER(RIGHT(@phrase, LEN(@phrase) - patindex('%[^0-9]%', @phrase + '.') + 1));
SET @returndate = CASE WHEN @numpart is null then null
WHEN @defpart = 'wd' THEN [dbo].[AddBusinessDays](@date, @numpart)
WHEN @defpart = 'd' THEN DATEADD(DAY, @numpart, @date)
WHEN @defpart = 'y' THEN DATEADD(YEAR, @numpart, @date)
WHEN @defpart = 'm' THEN DATEADD(Month, @numpart, @date)
WHEN @defpart = 'wk' THEN DATEADD(WEEK, @numpart, @date)
ELSE @date
END;
RETURN @returndate;
END
@@ -0,0 +1,18 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[date_monthend]
(
@date date
)
RETURNS date
AS
BEGIN
DECLARE @monthend date = CASE WHEN @date is null THEN NULL ELSE DATEADD(DAY, -1, DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@date), MONTH(@date),1))) END;
return @monthend;
END
@@ -0,0 +1,18 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[date_monthfirst]
(
@date date
)
RETURNS date
AS
BEGIN
DECLARE @monthfirst date = CASE WHEN @date is null THEN NULL ELSE DATEFROMPARTS(YEAR(@date), MONTH(@date), 1) END;
return @monthfirst;
END
@@ -0,0 +1,29 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[date_nextFirst]
(
@date date
,@unit varchar(1)
)
RETURNS date
AS
BEGIN
DECLARE @ret date;
SET @unit = LOWER(ISNULL(@unit, ''));
SET @ret = CASE
WHEN @unit = 'y' THEN DATEADD(YEAR, 1, DATEFROMPARTS(YEAR(@date), 1,1))
WHEN @unit = 'q' THEN DATEADD(MONTH, 4 - Month(@date) % 3, DATEFROMPARTS(YEAR(@date),MONTH(@date),1))
WHEN @unit = 'm' THEN DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@date), MONTH(@date),1))
WHEN @unit = 'w' THEN DATEADD(WEEK, 1, [dbo].[date_weekfirst](@date))
WHEN @unit = 'd' THEN DATEADD(DAY, 1, @date)
ELSE NULL
END;
RETURN @ret
END
@@ -0,0 +1,17 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: 31.01.2013
-- Description: first day of week
-- =============================================
CREATE FUNCTION [dbo].[date_weekend]
(
@TargetDate date
)
RETURNS date
AS
BEGIN
DECLARE @Corretor smallint = -((@@DATEFIRST % 7) - 1);
DECLARE @ret date = CASE WHEN @TargetDate is null THEN null ELSE dateadd(d ,-((datepart(weekday,@TargetDate) - 1 - @Corretor)%7), @TargetDate) END;
return DATEADD(DAY, 6, @ret);
END
@@ -0,0 +1,19 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: 31.01.2013
-- Description: first day of week
-- =============================================
CREATE FUNCTION [dbo].[date_weekfirst]
(
@TargetDate date
)
RETURNS date
AS
BEGIN
DECLARE @Corretor smallint = -((@@DATEFIRST % 7) - 1);
DECLARE @ret date = CASE WHEN @TargetDate is null THEN null ELSE dateadd(d ,-((datepart(weekday,@TargetDate) - 1 - @Corretor)%7), @TargetDate) END;
return @ret;
END
@@ -0,0 +1,18 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__admin_reminderSettings]
(
)
RETURNS TABLE
AS
RETURN
(
WITH rs as ( SELECT * FROM [dbo].[fds__admin_settings] WHERE [type] = 'reminder' )
SELECT [stage1] = (SELECT TOP(1) [value] FROM rs WHERE [key] = 1)
, [stage2] = (SELECT TOP(1) [value] FROM rs WHERE [key] = 2)
, [stage3] = (SELECT TOP(1) [value] FROM rs WHERE [key] = 3)
)
@@ -0,0 +1,28 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_DocumentName]
(
@InvoiceId varchar(10)
, @InvoiceType char(1)
, @InvoiceTitle varchar(100)
, @DateFinalized datetime
)
RETURNS varchar(50)
AS
BEGIN
DECLARE @doc varchar(50);
SET @doc = CASE WHEN @DateFinalized is null THEN ''
WHEN ISNULL(@InvoiceTitle,'') <> '' THEN @InvoiceTitle + ' ' + @InvoiceId
WHEN @InvoiceType = 'a' THEN 'Abschlagsrechnung ' + @InvoiceId
WHEN @InvoiceType = 'c' THEN 'Stornorechnung ' + @InvoiceId
WHEN @InvoiceType = 'f' THEN 'Schlussrechnung ' + @InvoiceId
ELSE 'Rechnung ' + @InvoiceId
END;
RETURN @doc + '.pdf';
END
@@ -0,0 +1,22 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_IntermediateIsAllocatedToOther]
(
@Intermediate_InvID varchar(10)
,@Target_InvID varchar(10)
)
RETURNS bit
AS
BEGIN
DECLARE @IsA bit = CASE WHEN EXISTS (SELECT * FROM [dbo].[fds__invoices] as intermediates JOIN [dbo].[fds__invoice_details] as id on intermediates.[Id] = id.[InvId] and id.[AllocatedTo_InvId] is not null
JOIN [dbo].[fds__invoices] as non_intermediates ON id.[AllocatedTo_InvId] = non_intermediates.[Id] and id.[AllocatedTo_InvId] is not null
WHERE intermediates.[Id] = @Intermediate_InvID and (@Target_InvID is null or non_intermediates.[Id] <> @Target_InvID))
THEN 1 ELSE 0 END;
RETURN @isA;
END
@@ -0,0 +1,30 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_InvoiceIDs_mfr]
(
@invoiceid varchar(255),
@other varchar(1000)
)
RETURNS varchar(1000)
AS
BEGIN
DECLARE @RET varchar(1000) = REPLACE(LTRIM(ISNULL(@invoiceid,'')),'Preview','');
IF @RET <> ''
SET @RET = TRIM(REPLACE(@RET, ' ', ' '));
IF @RET <> ''
SET @RET = REPLACE(@RET, ' ',' (mfr)' + CHAR(10)) + ' (mfr)';
IF @RET <> '' AND ISNULL(@other, '') <> ''
SET @RET = @RET + CHAR(10);
SET @RET = @RET + ISNULL(@other, '');
RETURN @RET;
END
@@ -0,0 +1,21 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_InvoiceIdByName]
(
@nme varchar(255)
)
RETURNS varchar(20)
AS
BEGIN
DECLARE @Id varchar(20);
SET @nme = TRIM((SELECT TOP(1) [value] FROM string_split(@nme, '(')));
SET @Id = ISNULL((SELECT TOP(1) [Id] FROM [dbo].[fds__invoices] WHERE [InvoiceId] = @nme),'');
RETURN @id;
END
@@ -0,0 +1,30 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_InvoicePaymentAmount]
(
@InvID varchar(15)
)
RETURNS numeric(9,2)
AS
BEGIN
DECLARE @RES numeric(9,2);
DECLARE @invoice_idlist [dbo].[fds__tt__idlist_vchar];
INSERT INTO @invoice_idlist VALUES(@invid);
With bs as (
SELECT * FROM [dbo].[fds__fn_bankingtransactions](null,null, null, null,@invoice_idlist)
), b as (
SELECT
[InvID] = @InvID
,[amount] = SUM(ISNULL(bs.[amount], 0.0))
FROM bs
WHERE bs.[invid] = @InvID
)
SELECT TOP(1) @RES = [amount] FROM b;
RETURN ISNULL(@RES, 0.0);
END
@@ -0,0 +1,37 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_InvoicePaymentAmount_full]
(
@InvID varchar(15)
)
RETURNS numeric(9,2)
AS
BEGIN
DECLARE @RES numeric(9,2);
DECLARE @invoice_idlist [dbo].[fds__tt__idlist_vchar];
INSERT INTO @invoice_idlist VALUES(@invid);
With bs as (
SELECT * FROM [dbo].[fds__fn_bankingtransactions](null,null, null, null,@invoice_idlist)
), ci as(
SELECT [InvId] = d.[StornoTo_InvId], [amount] = ISNULL(i.[InvoiceBalance],0.0) * -1 FROM [dbo].[fds__invoices] as i JOIN [dbo].[fds__invoice_details] as d on i.[Id] = d.[InvId] where d.[StornoTo_InvId] = @InvID AND i.[IsFinal] = 1
), tp as (
SELECT [InvId], [amount] from bs where [invid] = @InvID
union
SELECT [InvId], [amount] from ci
), b as (
SELECT
[InvID] = @InvID
,[amount] = SUM(ISNULL(tp.[amount], 0.0))
FROM tp
WHERE tp.[invid] = @InvID
)
SELECT TOP(1) @RES = [amount] FROM b;
RETURN ISNULL(@RES, 0.0);
END
@@ -0,0 +1,30 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_ReminderDocumentName]
(
@ReminderType char(1)
, @ReminderTitle varchar(100)
, @DateFinalized datetime
, @InvoiceId varchar(10)
)
RETURNS varchar(50)
AS
BEGIN
DECLARE @doc varchar(50);
SET @doc = CASE WHEN @DateFinalized is null THEN ''
WHEN ISNULL(@ReminderTitle,'') <> '' THEN @ReminderTitle
WHEN @ReminderType = 'f' THEN 'Zahlungserinnerung ' + @InvoiceId
WHEN @ReminderType = 'c' THEN 'Mahnung ' + @InvoiceId
WHEN @ReminderType = 'f' THEN 'Mahnung ' + @InvoiceId
ELSE 'Zahlungserinnerung ' + @InvoiceId
END;
RETURN @doc + '.pdf';
END
@@ -0,0 +1,23 @@
CREATE FUNCTION [dbo].[fds__fn_bankingtransaction_id] (
)
RETURNS varchar(10)
AS
BEGIN
DECLARE @NewAccount varchar(7) = [dbo].[ocms_fn_generatePassword] (8,0,1,0);
WHILE EXISTS( SELECT * FROM [dbo].[fds__bankingtransactions] WITH (SERIALIZABLE) WHERE [taID] = @NewAccount)
BEGIN
SET @NewAccount = [dbo].[ocms_fn_generatePassword] (8,0,1,0);
END
RETURN @NewAccount;
END;
@@ -0,0 +1,88 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_bankingtransactions]
(
@startdate date = NULL
,@enddate date = NULL
,@invoice_startdate date = NULL
,@invoice_enddate date = NULL
,@invoice_idlist [dbo].[fds__tt__idlist_vchar] READONLY
)
RETURNS @bankingtransactions TABLE
(
[taID] varchar(10)
,[AccountIdentification] varchar(50)
,[ValueDate] date
,[Amount] numeric(9,2)
,[AccountNumberOfPayer] varchar(30)
,[NameOfPayer] nvarchar(60)
,[SepaRemittanceInformation] varchar(150)
,[EndToEndReference] varchar(50)
,[manu] bit
,[InvId] varchar(15)
,[done_manually] bit
,[fds] bit
)
AS
BEGIN
-- Fill the table variable with the rows for your result set
DECLARE @firstever date = '1900-01-01', @tomorrow date = DATEADD(dAy, 1, GETDATE());
SELECT @invoice_startdate = ISNULL(@invoice_startdate, @firstever), @invoice_enddate = ISNULL(@invoice_enddate, @tomorrow);
DECLARE @idlistempty bit = IIF(EXISTS (SELECT 0 FROM @invoice_idlist) ,0,1);
with bt as (
SELECT [taID],[AccountIdentification],[ValueDate],[Amount],AccountNumberOfPayer,NameOfPayer, SepaRemittanceInformation, EndToEndReference
FROM [dbo].[fds__bankingtransactions] as bt_
where (@startdate is null OR bt_.ValueDate >= @startdate)
AND (@enddate is null or bt_.ValueDate <= @enddate)
AND (bt_.[DebitCreditMark] in ('C')
AND NOT (ISNULL(bt_.[AccountNumberOfPayer],'') IN ('DE52301502000002091478') AND ISNULL(bt_.[SepaRemittanceInformation],'') like ('%umbuchung%'))
AND NOT (ISNULL(bt_.[AccountNumberOfPayer],'') IN ('DE23501108006161606386') AND ISNULL(bt_.[SepaRemittanceInformation],'') like ('%ebay%'))
AND NOT (ISNULL(bt_.[SepaRemittanceInformation],'') like ('%Umsatzsteuer%'))
AND ISNULL(bt_.AccountNumberOfPayer,'') <> ''
)
), bs0manu as (
SELECT bs.[taID], [invid] = spl.[value], [manu] = cast(1 as bit)
FROM [dbo].[fds__bankingtransactions_settings] as bs
CROSS APPLY STRING_SPLIT(bs.assigned_invoice_id, ',') as spl
JOIN bt on bt.[taID] = bs.[taID]
WHERE bs.assigned_invoice_id is not null
), bs1 as (
SELECT * FROM bs0manu
UNION
SELECT bs.[taID], [invid] = spl.[value], [manu] = cast(0 as bit)
FROM [dbo].[fds__bankingtransactions_settings] as bs
CROSS APPLY STRING_SPLIT(bs.auto_invoice_id, ',') as spl
JOIN bt on bt.[taID] = bs.[taID]
WHERE bs.auto_invoice_id is not null
and bt.[taID] NOT IN (SELECT [taID] FROM bs0manu)
), bs as (
SELECT [taID], [invid], manu = CAST(MAX(CAST([manu] as int)) as bit)
from bs1
WHERE @idlistempty = 1 OR bs1.[invid] in (SELECT [id] FROM @invoice_idlist)
GROUP BY [taID], [invid]
)
INSERT INTO @bankingtransactions
SELECT
bt.[taID]
,[AccountIdentification]
, bt.[ValueDate]
, [Amount]
,bt.AccountNumberOfPayer
,bt.NameOfPayer
,bt.SepaRemittanceInformation
,bt.EndToEndReference
,[manu]
,[invid]
,[done_manually] = IIF(ISNULL(bs2.[done_manually],'') <> '', 1,0)
,[fds] = IIF(fi.isExternal = 0, 1, 0)
FROM bt
JOIN bs ON bt.[taID] = bs.[taID]
LEFT JOIN [dbo].[fds__bankingtransactions_settings] as bs2 ON bt.[taID] = bs2.[taID]
LEFT JOIN [dbo].[fds__invoices] as fi on bs.[invid] = fi.[id] AND fi.[DateFinalized] BETWEEN @invoice_startdate AND @invoice_enddate
RETURN
END
@@ -0,0 +1,35 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_bankingtransactions_perInvoice]
(
@startdate date = NULL
,@enddate date = NULL
)
RETURNS @bankingtransactions TABLE
(
[InvId] varchar(15)
,[Amount] numeric(9,2)
,[manu] bit
)
AS
BEGIN
-- Fill the table variable with the rows for your result set
DECLARE @invoice_idlist [dbo].[fds__tt__idlist_vchar];
INSERT INTO @bankingtransactions
SELECT
[invid]
, [amount] = SUM(ISNULL([amount], 0.0))
, [manu] = CAST(MAX(ISNULL(CAST([manu] as int),0)) as bit)
FROM dbo.fds__fn_bankingtransactions(null, null, @startdate, @enddate, @invoice_idlist) -- start and enddates will filter by invoice date and not by banking transactions' value dates
GROUP BY [invid];
RETURN
END
@@ -0,0 +1,27 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_combineAddress]
(
@AddressString nvarchar(255)
,@AddressString2 nvarchar(255)
,@AddressString3 nvarchar(255)
,@Postal nvarchar(255)
,@City nvarchar(255)
,@State nvarchar(255)
,@Country nvarchar(255)
)
RETURNS nvarchar(1000)
AS
BEGIN
DECLARE @address nvarchar(1000) = STUFF( (SELECT (CHAR(10) + [t]) as [text()] FROM
(SELECT * FROM (VALUES(@AddressString), (@AddressString2), (@AddressString3), (LTRIM(RTRIM(ISNULL(@postal, '') + ' ' + ISNULL(@city, '')))), (@state), (@country)) z ([t]) WHERE ISNULL([t], '') <> '')y
FOR XML PATH
, TYPE).value('.[1]','nvarchar(1000)')
, 1, 1, '');
RETURN @address;
END
@@ -0,0 +1,19 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_creanupTransactionInfo]
(
@info varchar(255)
)
RETURNS varchar(255)
AS
BEGIN
DECLARE @RET varchar(255);
SET @RET = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@info, 'R ', 'R'), 'Rg', 'R'), '2 0', '20'), CHAR(10),''), CHAR(13), ''), '/', ' ')
RETURN ISNULL(@RET, '');
END
@@ -0,0 +1,22 @@
CREATE FUNCTION [dbo].[fds__fn_invoice-srq_id] (
)
RETURNS varchar(10)
AS
BEGIN
DECLARE @NewID varchar(7) = [dbo].[ocms_fn_generatePassword] (7,0,1,0);
WHILE EXISTS( SELECT * FROM [dbo].[fds__invoice_servicerequests] WITH (SERIALIZABLE) WHERE [id] = @NewID)
BEGIN
SET @NewID = [dbo].[ocms_fn_generatePassword] (7,0,1,0);
END
RETURN @NewID;
END;
@@ -0,0 +1,19 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_invoice_customerid]
(
@InvId varchar(15)
)
RETURNS bigint
AS
BEGIN
DECLARE @ret bigint;
SELECT TOP(1) @ret = [customerid] FROM dbo.[fds__invoices] WHERE [id] = @InvId;
RETURN @ret;
END
@@ -0,0 +1,22 @@
CREATE FUNCTION [dbo].[fds__fn_invoice_id] (
)
RETURNS varchar(10)
AS
BEGIN
DECLARE @NewAccount varchar(5) = [dbo].[ocms_fn_generatePassword] (8,0,1,0);
WHILE EXISTS( SELECT * FROM [dbo].[fds__invoices] WITH (SERIALIZABLE) WHERE [id] = @NewAccount)
BEGIN
SET @NewAccount = [dbo].[ocms_fn_generatePassword] (8,0,1,0);
END
RETURN @NewAccount;
END;
@@ -0,0 +1,28 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_isInvoiceCancelled]
(
@InvId varchar(20)
)
RETURNS bit
AS
BEGIN
DECLARE @res bit;
--SET @res = CASE WHEN EXISTS (SELECT 0 FROM [dbo].[fds__invoices] as i2 JOIN [dbo].[fds__invoice_details] as id2 ON i2.[id] = id2.[InvId] where id2.[StornoTo_InvId] = @invId AND i2.[IsFinal] = 1 ) THEN 1 ELSE 0 END;
with storno as(
SELECT [amount] = SUM(ISNULL(ORIG.[invoicebalance],0.0)), [stornoamount] = SUM(ISNULL(i2.[invoicebalance],0.0) * -1.0)
FROM [dbo].[fds__invoices] as ORIG
LEFT JOIN [dbo].[fds__invoice_details] as id2 ON id2.StornoTo_InvId = ORIG.[id] and id2.StornoTo_InvId = @invId
LEFT JOIN [dbo].[fds__invoices] as i2 on i2.[id] = id2.[InvId] AND i2.[IsFinal] = 1
WHERE ORIG.[Id] = @invId
)
SELECT @res = CASE WHEN [amount] = [stornoamount] THEN 1 ELSE 0 END from storno;
RETURN cast(ISNULL(@res,0) as bit);
END
@@ -0,0 +1,22 @@
CREATE FUNCTION [dbo].[fds__fn_reminder_id] (
)
RETURNS varchar(8)
AS
BEGIN
DECLARE @NewAccount varchar(5) = [dbo].[ocms_fn_generatePassword] (8,0,1,0);
WHILE EXISTS( SELECT * FROM [dbo].[fds__reminder] WHERE [id] = @NewAccount)
BEGIN
SET @NewAccount = [dbo].[ocms_fn_generatePassword] (8,0,1,0);
END
RETURN @NewAccount;
END;
@@ -0,0 +1,26 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_requestsforinvoice]
(
)
RETURNS TABLE
AS
RETURN
(
SELECT
[Id]
,sreq.[ExternalId]
,sreq.[Name]
,sreq.[workdoneat]
,sreq.[ReleasedAt]
,sreq.[CustomerId]
FROM [dbo].[mfr__servicerequests] as sreq
WHERE [state] not in ('Closed')
AND [type] in ('IsProject', 'IsMaintenance')
AND EXISTS (SELECT 0 FROM dbo.[mfr__*PartnerSet] as ps WHERE ps.[Property] = 'ServiceRequest:Tags' and ps.[PartnerId] = '16034758659' and sreq.[id] = ps.[EntityId])
AND NOT EXISTS( SELECT 0 FROM [dbo].[fds__invoice_servicerequests] as isr join [dbo].[fds__invoices] as inv on isr.[InvId] = inv.[id] and isr.[mfr__servicerequest] = sreq.[id])
)
@@ -0,0 +1,33 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_unpaidInvoices]
(
)
RETURNS TABLE
AS
RETURN
(
WITH inv as (
SELECT [Id]
,[Invoiceid]
,[DateFinalized]
,[InvoiceBalance]
,[DocumentName]
--,[file]
,[InvoiceTitle]
,[customerid]
,[dateSent]
,[fds] = CAST(IIF(iv.isexternal = 0,1,0) as bit)
FROM [dbo].[fds__invoices] as iv
WHERE [isfinal] = 1
and CAST(CASE WHEN ISNULL(iv.[IsCanceled],0) = 1 THEN 1 ELSE ISNULL([IsPayed],0) END as bit) = 0
and InvoiceBalance > 0
AND NOT exists (SELECT 0 FROM [dbo].[fds__invoice_details] as d where d.[StornoTo_InvId] = iv.[id])
)
SELECT * /*[Rechnung] = [invoiceId], [Name] = [InvoiceTitle] + CHAR(10) + ' (' + (SELECT TOP(1) c.[name] FROM [dbo].[mfr__companies] as c WHERE inv.[customerid] = c.[id]) + ')', [Betrag (net)] = FORMAT([invoicebalance], '#0.00€', 'de'), [Datum] = FORMAT([DateFinalized], 'dd.MM.yy' , 'de'), [Zahlungen] = FORMAT([dbo].[fds__fn_InvoicePaymentAmount]([id]), '#0.00€', 'de'), [order] = ROW_NUMBER() OVER (ORDER BY [DateFinalized], [DateSent]) */
FROM inv
)
@@ -0,0 +1,18 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__fn_vatfrombalances]
(
@brutto numeric(10,3)
,@netto numeric(10,3)
)
RETURNS numeric(5,2)
AS
BEGIN
DECLARE @vat numeric(5,2) = CASE WHEN ISNULL(@netto, 0) > 0 and ISNULL(@brutto, 0) > 0 THEN ROUND(( (@brutto / @netto) -1) * 100, 2) ELSE NULL END
RETURN @vat;
END
@@ -0,0 +1,36 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getCompanyAddress]
(
@companyid bigint
)
RETURNS nvarchar(1000)
AS
BEGIN
DECLARE @locationid bigint, @address nvarchar(1000);
SELECT TOP(1) @locationid = cy.[Location#ID] from [dbo].[mfr__companies] as cy WHERE cy.id = @companyid;
IF @locationid is null
SELECT TOP(1) @locationid = l.[ID], @address = [dbo].[fds__fn_combineAddress] (l.[AddressString], null, null
,l.[Postal]
,l.[City]
,l.[State]
,l.[Country]) FROM [mfr__#locations] as l JOIN [dbo].[mfr__companies] as cy on l.[Property] = 'Company:Location' AND l.[EntityId] = cy.[Id] WHERE cy.[id] = @companyid;
-- Return the result of the function
IF @address is null
SELECT TOP(1) @address = [dbo].[fds__fn_combineAddress] (loc.[AddressString], null, null
,loc.[Postal]
,loc.[City]
,loc.[State]
,loc.[Country])
FROM [dbo].[mfr__#locations] as loc WHERE [id] = @locationid;
RETURN @address;
END
@@ -0,0 +1,31 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getCompanyContacts]
(
@companyid bigint
)
RETURNS TABLE
AS
RETURN
(
WITH ps as (
SELECT [contactid] = p.[EntityId] from [mfr__*PartnerSet] as p WHERE p.property = 'Contact:Company' and p.[partnerId] = @companyid
UNION
SELECT [contactid] = p.[PartnerId] from [mfr__*PartnerSet] as p WHERE p.property = 'Company:Contacts' and p.[EntityId] = @companyid
)
SELECT ct.*
,[isMainContact] = CAST( CASE WHEN cy.[MainContactId] is null then 0 WHEN cy.[MainContactId] = ct.[id] THEN 1 ELSE 0 END as bit)
FROM [dbo].[mfr__contacts] as ct
JOIN [dbo].[mfr__companies] as cy ON ct.[CompanyId] = cy.[id]
WHERE ct.CompanyId = @companyid
UNION
SELECT ct.*
,[isMainContact] = CAST( CASE WHEN cy.[MainContactId] is null then 0 WHEN cy.[MainContactId] = ct.[id] THEN 1 ELSE 0 END as bit)
FROM [dbo].[mfr__contacts] as ct
JOIN ps ON ct.[id] = ps.[contactid]
JOIN [dbo].[mfr__companies] as cy ON cy.[id] = @companyid
)
@@ -0,0 +1,16 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getCompanyEmail]
(
@companyid bigint
)
RETURNS varchar(255)
AS
BEGIN
DECLARE @email varchar(255) = (SELECT [supportmail] FROM [dbo].[mfr__companies] as cy WHERE cy.[id] = @companyid);
RETURN @email;
END
@@ -0,0 +1,20 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getCompanyName]
(
@companyid bigint
)
RETURNS nvarchar(1000)
AS
BEGIN
DECLARE @name nvarchar(255);
SELECT TOP(1) @name = cy.[name] FROM [dbo].[mfr__companies] as cy WHERE cy.id = @companyid;
RETURN @name;
END
@@ -0,0 +1,36 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getCompanyNameAddress]
(
@companyid bigint
)
RETURNS nvarchar(1000)
AS
BEGIN
DECLARE @locationid bigint, @address nvarchar(1000), @name nvarchar(255);
SELECT TOP(1) @locationid = cy.[Location#ID], @name = cy.[name] FROM [dbo].[mfr__companies] as cy WHERE cy.id = @companyid;
IF @locationid is null
SELECT TOP(1) @locationid = l.[ID], @address = [dbo].[fds__fn_combineAddress] (l.[AddressString], null, null
,l.[Postal]
,l.[City]
,l.[State]
,l.[Country]) FROM [mfr__#locations] as l JOIN [dbo].[mfr__companies] as cy on l.[Property] = 'Company:Location' AND l.[EntityId] = cy.[Id] WHERE cy.[id] = @companyid;
-- Return the result of the function
IF @address is null
SELECT TOP(1) @address = [dbo].[fds__fn_combineAddress] (loc.[AddressString], null, null
,loc.[Postal]
,loc.[City]
,loc.[State]
,loc.[Country])
FROM [dbo].[mfr__#locations] as loc WHERE [id] = @locationid;
RETURN @name + CHAR(10) + @address;
END
@@ -0,0 +1,36 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getCompanysContacts]
(
@companyids [dbo].[fds__tt__idlist] READONLY
)
RETURNS TABLE
AS
RETURN
(
WITH ps as (
SELECT [companyid] = p.[partnerId], [contactid] = p.[EntityId] from [mfr__*PartnerSet] as p WHERE p.property = 'Contact:Company' and p.[partnerId] IN (SELECT [Id] FROM @companyids)
UNION
SELECT [companyid] = p.[PartnerId], [contactid] = p.[PartnerId] from [mfr__*PartnerSet] as p WHERE p.property = 'Company:Contacts' and p.[EntityId] = (SELECT [Id] FROM @companyids)
)
SELECT
[CyId] = cyid.[Id]
,ct.*
,[isMainContact] = CAST( CASE WHEN cy.[MainContactId] is null then 0 WHEN cy.[MainContactId] = ct.[id] THEN 1 ELSE 0 END as bit)
FROM [dbo].[mfr__contacts] as ct
JOIN @companyids as cyid ON ct.[CompanyId] = cyid.[id]
JOIN [dbo].[mfr__companies] as cy ON cyid.[id] = cy.[id]
UNION
SELECT
[CyId] = cyid.[Id]
,ct.*
,[isMainContact] = CAST( CASE WHEN cy.[MainContactId] is null then 0 WHEN cy.[MainContactId] = ct.[id] THEN 1 ELSE 0 END as bit)
FROM [dbo].[mfr__contacts] as ct
JOIN ps ON ct.[id] = ps.[contactid]
JOIN @companyids as cyid ON ps.[CompanyId] = cyid.[id]
JOIN [dbo].[mfr__companies] as cy ON cyid.[id] = cy.[id]
)
@@ -0,0 +1,129 @@
CREATE function [dbo].[fds__getInvoiceCredits]
(
@startdate date
,@enddate date
)
RETURNS TABLE
AS
RETURN
(
with b0 as (
SELECT [taID]
--,[AccountIdentification]
,[Amount]
--,[EntryDate]
,[FundsCode]
,[AccountNumberOfPayer]
,[BankCodeOfPayer]
,[EndToEndReference]
--,[JournalNumber]
,[NameOfPayer]
,'info' = [dbo].[fds__fn_creanupTransactionInfo]([SepaRemittanceInformation])
,'e2e' = [dbo].[fds__fn_creanupTransactionInfo]([EndToEndReference])
--,[PayersReferenceParty]
--,[PostingText]
,[SepaRemittanceInformation]
,[TextKeyAddition]
,[TransactionCode]
,[DebitCreditMark]
,[TransactionTypeIdCode]
,[ValueDate]
FROM [dbo].[fds__bankingtransactions]
WHERE [DebitCreditMark] in ('C')
AND (@startdate is null or CAST([valuedate] AS DATE) >= @startdate)
AND (@enddate is null or CAST([valuedate] AS DATE) <= @enddate)
AND NOT (ISNULL([AccountNumberOfPayer],'') IN ('DE52301502000002091478') AND ISNULL([SepaRemittanceInformation],'') like ('%umbuchung%'))
AND NOT (ISNULL([AccountNumberOfPayer],'') IN ('DE23501108006161606386') AND ISNULL([SepaRemittanceInformation],'') like ('%ebay%'))
AND NOT (ISNULL([SepaRemittanceInformation],'') like ('%Umsatzsteuer%'))
)
, b as (
SELECT
*
,'exact' = PATINDEX('%R202[0-9][- ][0-9][0-9][0-9][0-9]%',[info])
,'exact2' = PATINDEX('%R202[0-9][- ][0-9][0-9][0-9][0-9]%',REPLACE([info], ' ', ''))
,'test1' = PATINDEX('%202[0-9]%',[info])
,'E2E_exact' = PATINDEX('%R202[0-9][- ][0-9][0-9][0-9][0-9]%',[e2e])
,'E2E_exact2' = PATINDEX('%R202[0-9][- ][0-9][0-9][0-9][0-9]%',REPLACE([e2e], ' ', ''))
,'E2E_test1' = PATINDEX('%202[0-9]%',[e2e])
from b0
), b2 as (
SELECT
*
,[info2] = REPLACE([info], ' ', '')
,[info3] = CASE WHEN test1 > 0 THEN REPLACE(SUBSTRING([info], [test1] - 1, 10), ' ' , '-') ELSE '' END
,[info4] = REPLACE(REPLACE([info], 'RE ', 'NO '), 'RE-NR. ', 'NO ')
,[e2e_info2] = REPLACE([e2e], ' ', '')
,[e2e_info3] = CASE WHEN [E2E_test1] > 0 THEN REPLACE(SUBSTRING([e2e], [E2E_test1] - 1, 10), ' ' , '-') ELSE '' END
FROM b
), c as (
select
*
, 'lv' = CASE WHEN exact > 0 THEN 0
WHEN exact2 > 0 THEN 1
WHEN [test1] > 0 AND PATINDEX('%202[0-9][- ][0-9][0-9][0-9][0-9]%', [info3]) > 0 THEN 2
WHEN [test1] > 0 AND PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [info3]) > 0 THEN 3
WHEN [e2e_exact] > 0 THEN 10
WHEN [e2e_exact2] > 0 THEN 11
WHEN [e2e_test1] > 0 AND PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [e2e_info3]) > 0 THEN 12
WHEN [e2e_test1] > 0 AND PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [e2e_info3]) > 0 THEN 13
WHEN PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) > 0 AND EXISTS (SELECT * FROM [dbo].[fds__invoices] as i where RIGHT(i.[InvoiceId],4) = SUBSTRING([info4],PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) + 3, 4) )
THEN 21
WHEN PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) > 0 AND EXISTS (SELECT * FROM [dbo].[mfr__invoices] as i where RIGHT(i.[InvoiceId],4) = SUBSTRING([info4],PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) + 3, 4) )
THEN 22
ELSE 99 END
, 'Rg' =
CASe WHEN [exact] > 0 THEN REPLACE(SUBSTRING([info], [exact], 10), ' ' , '-')
WHEN [exact2] > 0 THEN REPLACE(SUBSTRING([info2], [exact2], 10), ' ' , '-')
WHEN [test1] > 0 AND PATINDEX('%202[0-9][- ][0-9][0-9][0-9][0-9]%', [info3]) > 0 THEN 'R' + SUBSTRING([info3], PATINDEX('%202[0-9][- ][0-9][0-9][0-9][0-9]%', [info3]) ,9)
WHEN [test1] > 0 AND PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [info3]) > 0 THEN 'R' + SUBSTRING([info3], PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [info3]) ,4) + '-' + + SUBSTRING([info3], PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [info3]) +4 ,4)
WHEN [e2e_exact] > 0 THEN REPLACE(SUBSTRING([e2e], [e2e_exact], 10), ' ' , '-')
WHEN [e2e_exact2] > 0 THEN REPLACE(SUBSTRING([e2e_info2], [e2e_exact2], 10), ' ' , '-')
WHEN [e2e_test1] > 0 AND PATINDEX('%202[0-9][- ][0-9][0-9][0-9][0-9]%', [e2e_info3]) > 0 THEN 'R' + SUBSTRING([e2e_info3], PATINDEX('%202[0-9][- ][0-9][0-9][0-9][0-9]%', [e2e_info3]) ,9)
WHEN [e2e_test1] > 0 AND PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [e2e_info3]) > 0 THEN 'R' + SUBSTRING([e2e_info3], PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [e2e_info3]) ,4) + '-' + + SUBSTRING([e2e_info3], PATINDEX('%202[0-9][0-9][0-9][0-9][0-9]%', [e2e_info3]) +4 ,4)
WHEN PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) > 0 AND EXISTS (SELECT * FROM [dbo].[fds__invoices] as i where RIGHT(i.[InvoiceId],4) = SUBSTRING([info4],PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) + 3, 4) )
THEN (SELECT TOP(1) [invoiceid] FROM [dbo].[fds__invoices] as i where RIGHT(i.[InvoiceId],4) = SUBSTRING([info4],PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) + 3, 4) )
WHEN PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) > 0 AND EXISTS (SELECT * FROM [dbo].[mfr__invoices] as i where RIGHT(i.[InvoiceId],4) = SUBSTRING([info4],PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) + 3, 4) )
THEN (SELECT TOP(1) [invoiceid] FROM [dbo].[mfr__invoices] as i where RIGHT(i.[InvoiceId],4) = SUBSTRING([info4],PATINDEX('%NO [0-9][0-9][0-9][0-9] %', [info4]) + 3, 4) )
ELSE NULL
END
from b2
)
SELECT
[taID]
, [InvoiceId] = UPPER([rg])
, [info4]
, [Amount]
--,[EntryDate]
, [FundsCode]
, [AccountNumberOfPayer]
, [BankCodeOfPayer]
, [EndToEndReference]
--,[JournalNumber]
, [NameOfPayer]
--,[PayersReferenceParty]
--,[PostingText]
, [SepaRemittanceInformation]
, [TextKeyAddition]
, [TransactionCode]
, [DebitCreditMark]
, [TransactionTypeIdCode]
, [ValueDate]
--,ASCII(LEFT(RIGHT([info], 2),1))
FROM c
--where lv >90--Rg is null
)
@@ -0,0 +1,23 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getInvoiceTreeIds]
(
@invid varchar(20)
)
RETURNS TABLE
AS
RETURN
(
with fds_srq as (
SELECT distinct [type] = 'servicerequest', [id] = mfrs.[id]
FROM [dbo].[fds__invoices] as _fi
JOIN [dbo].[fds__invoice_servicerequests] as _fs on _fi.Id = _fs.[InvId] and _fs.[mfr__servicerequest] is not null
JOIN [dbo].[mfr__servicerequests] as mfrs on _fs.[mfr__servicerequest] = mfrs.id
WHERE _fi.[Id] = @invid
)
SELECT * FROM fds_srq
)
@@ -0,0 +1,18 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getRequestTreeIds]
(
@srqid bigint
)
RETURNS TABLE
AS
RETURN
(
with sp as (
SELECT DISTINCT [parentid] = CASE WHEN ISNULL([parentservicerequestid],0) = 0 THEN [id] ELSE [parentservicerequestid] END FROM [dbo].[mfr__servicerequests] as _s where _s.[Id] = @srqid OR _s.[ParentServiceRequestId] = @srqid
)
SELECT DISTINCT r.[Id] from [dbo].[mfr__servicerequests] as r JOIN sp on r.[Id] = sp.[parentid] OR r.[ParentServiceRequestId] = sp.[parentid] and ISNULL(sp.parentid,0) > 0
)
@@ -0,0 +1,115 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getUpdateableRequests]
(
)
RETURNS @RET TABLE
(
[entity_name] varchar(255)
,[Id] bigint
,[order] bigint
)
AS
BEGIN
DECLARE @threshold_minutes_full int = 60, @threshold_minutes_short int = 8;
DECLARE @utcnow datetime = GETUTCDATE();
DECLARE @UTCTimeInMinutes int = DATEDIFF(MINUTE, CAST(CAST(@utcnow as date) as datetime), @utcnow);
DECLARe @AS XML = [dbo].[mfr__schema]();
DECLARE @EntityTypes TABLE([#] int, [typ] varchar(50), [name] varchar(255), [set] varchar(255), [EntitySet] varchar(255), [tablename] varchar(255), [url] varchar(500), [DateColumn] varchar(25));
WITH XMLNAMESPACES
(
'http://schemas.microsoft.com/ado/2007/06/edmx' as edmx,
'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' as m
), et as (
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
, xD.value('local-name(.)', 'varchar(50)') as [type]
, xD.value('@Name', 'varchar(255)') as [EntityType] --, xD.query('.') as 'q'
, xS.value('@Name', 'varchar(255)') as [Set]
, o.[name] as [tablename]
from @as.nodes('/Schema[1]/EntityType') as xm(xD)
JOIN @as.nodes('/Schema/EntityContainer/EntitySet') as xn(xS) ON (xS.value('@EntityType', 'varchar(255)')) like ('MFR.%[.]' + (xD.value('@Name', 'varchar(255)')))
JOIN sys.objects as o ON o.[name] like ('mfr__' + (LOWER(xS.value('@Name', 'varchar(255)'))))
union
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
, xD.value('local-name(.)', 'varchar(50)') as [type]
, xD.value('@Name', 'varchar(255)') as [EntityType] --, xD.query('.') as 'q'
, '' as [Set]
, o.[name] as [tablename]
from @as.nodes('/Schema[1]/ComplexType') as xm(xD)
JOIN sys.objects as o ON o.[name] like ('mfr__[#]' + (LOWER(xD.value('@Name', 'varchar(255)'))) + 's')
)
INSERT INTO @EntityTypes SELECT [#],[type],[EntityType],[set] = LOWER([set]), [EntitySet] = [set], [tablename], null, null FROM et;
WITH tbl as(
SELECT
--QUOTENAME(SCHEMA_NAME(sOBJ.schema_id)) + '.' + QUOTENAME(sOBJ.[name]) AS [TABLE_NAME]
sOBJ.[name] AS [TABLE_NAME]
, SUM(sPTN.Rows) AS [RowCount]
,sOBJ.[create_date]
FROM
sys.objects AS sOBJ
INNER JOIN sys.partitions AS sPTN
ON sOBJ.object_id = sPTN.object_id
AND sOBJ.[name] like 'mfr__%'
WHERE
sOBJ.[type] = 'U'
AND sOBJ.is_ms_shipped = 0x0
AND index_id < 2 -- 0:Heap, 1:Clustered
GROUP BY
sOBJ.schema_id
, sOBJ.name
, sObj.[create_date]
), pro as (SELECT *
FROM sys.procedures WHERE LEFT([name], 11) = 'mfr__updt__')
, lu as (SELECT [table], MAX([timestamp]) as 'lu' FROM [dbo].[fds__status] WHERE [action] like 'update%' group by [table])
, luf as (SELECT [table], MAX([timestamp]) as 'luf' FROM [dbo].[fds__status] WHERE [action] like 'update_full' group by [table])
, lur as (SELECT [table], MAX([timestamp]) as 'lur' FROM [dbo].[fds__status] WHERE [action] like 'update_reset' group by [table])
, luc as (SELECT lu.[table], [lu], [luf], [lur]
, DATEDIFF(MINUTE, [lu], @utcnow) as [dlu]
, DATEDIFF(MINUTE, [lur], @utcnow) as [dlr]
, DATEDIFF(MINUTE, [luf], @utcnow) as [dluf]
, CASE --WHEN [dbo].[ctm__getUpdateLockStatus] () = Cast(1 as bit) THEN 0
WHEN [lu] is null then 5
--WHEN DATEDIFF(MINUTE, [lu], @utcnow) > @threshold_minutes_full
-- OR DATEDIFF(MINUTE, [luf], @utcnow) > @threshold_minutes_full
-- THEN 2
WHEN DATEDIFF(MINUTE, [lu], @utcnow) > @threshold_minutes_short THEN 1
ELSE 0
END as 'need'
from lu LEFT JOIN luf on lu.[table] = luf.[table] LEFT JOIN lur on lu.[table] = lur.[table]
), cols as (SELECT DISTINCT [TABLE_NAME] FROM INFORMATION_SCHEMA.COLUMNS
WHERE LEFT(TABLE_NAME, 5) = N'mfr__' AND ([column_name] COLLATE Latin1_General_CI_AS in ('DateModified', 'DateCreated', 'DateOfCreation')))
, updateabletables as (
SELECT DISTINCT [entity_name] = et.[name]
, 'table_name' = tbl.[table_name]
, 'temp_table' = pro.[name]
, 'locked' = 0 --ISNULL([dbo].[ctm__getUpdateLockStatus_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')), 0)
, 'locked_reset' = 0 --ISNULL([dbo].[ctm__getUpdateLockStatus_reset_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')), 0)
, 'updateneed' = CASE
--WHEN [dbo].[ctm__getUpdateLockStatus_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')) = Cast(1 as bit) THEN 0
WHEN et.[name] COLLATE Latin1_General_CI_AS IN ('Attachment','Comment','Item','StepListTemplateInstance','Step') THEN 0
WHEN tbl.[RowCount] = 0 THEN 5
WHEN NOT EXISTS (SELECT * FROM cols WHERE tbl.[TABLE_NAME] = cols.[TABLE_NAME]) THEN 0
WHEN luc.need is null then 5
WHEN tbl.[TABLE_NAME] COLLATE Latin1_General_CI_AS in ('') AND ISNULL(luc.[dlr], 1440) >= 720 AND @UTCTimeInMinutes BETWEEN 45 AND 90 THEN 5 -- once every day, between 02:45 and 03:30 in the morning
ELSE luc.[need]--ISNULL(luc.[need], 0)
END
, 'datebased' = CASE WHEN EXISTS (SELECT * FROM cols WHERE tbl.[TABLE_NAME] = cols.[TABLE_NAME]) THEN 1 ELSE 0 END
FROM tbl
JOIN @EntityTypes as et on tbl.[TABLE_NAME] = et.[tablename]
JOIN pro on REPLACE(pro.[name], 'mfr__updt__', 'mfr__') = tbl.[TABLE_NAME]
LEFT JOIN luc on tbl.[table_name] = luc.[table]
)
insert into @RET
SELECT rq.[entity_name], rq.[Id], ROW_NUMBER() OVER (ORDER BY [date_requested])
FROM [dbo].[fds__mfr_updaterequests] as rq JOIN updateabletables ON rq.[entity_name] = updateabletables.[entity_name] AND rq.Id is not null
;
RETURN
END
@@ -0,0 +1,114 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__getUpdateableTables]
(
)
RETURNS @RET TABLE
(
[entity_name] varchar(255)
,[table_name] varchar(255)
,[proc_name] varchar(255)
,[locked] bit
,[locked_reset] bit
,[updateneed] tinyint
,[datebased] bit
)
AS
BEGIN
DECLARE @threshold_minutes_full int = 60, @threshold_minutes_short int = 8;
DECLARE @utcnow datetime = GETUTCDATE();
DECLARE @UTCTimeInMinutes int = DATEDIFF(MINUTE, CAST(CAST(@utcnow as date) as datetime), @utcnow);
DECLARe @AS XML = [dbo].[mfr__schema]();
DECLARE @EntityTypes TABLE([#] int, [typ] varchar(50), [name] varchar(255), [set] varchar(255), [EntitySet] varchar(255), [tablename] varchar(255), [url] varchar(500), [DateColumn] varchar(25));
WITH XMLNAMESPACES
(
'http://schemas.microsoft.com/ado/2007/06/edmx' as edmx,
'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata' as m
), et as (
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
, xD.value('local-name(.)', 'varchar(50)') as [type]
, xD.value('@Name', 'varchar(255)') as [EntityType] --, xD.query('.') as 'q'
, xS.value('@Name', 'varchar(255)') as [Set]
, o.[name] as [tablename]
from @as.nodes('/Schema[1]/EntityType') as xm(xD)
JOIN @as.nodes('/Schema/EntityContainer/EntitySet') as xn(xS) ON (xS.value('@EntityType', 'varchar(255)')) like ('MFR.%[.]' + (xD.value('@Name', 'varchar(255)')))
JOIN sys.objects as o ON o.[name] like ('mfr__' + (LOWER(xS.value('@Name', 'varchar(255)'))))
union
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as '#'
, xD.value('local-name(.)', 'varchar(50)') as [type]
, xD.value('@Name', 'varchar(255)') as [EntityType] --, xD.query('.') as 'q'
, '' as [Set]
, o.[name] as [tablename]
from @as.nodes('/Schema[1]/ComplexType') as xm(xD)
JOIN sys.objects as o ON o.[name] like ('mfr__[#]' + (LOWER(xD.value('@Name', 'varchar(255)'))) + 's')
)
INSERT INTO @EntityTypes SELECT [#],[type],[EntityType],[set] = LOWER([set]), [EntitySet] = [set], [tablename], null, null FROM et;
WITH tbl as(
SELECT
--QUOTENAME(SCHEMA_NAME(sOBJ.schema_id)) + '.' + QUOTENAME(sOBJ.[name]) AS [TABLE_NAME]
sOBJ.[name] AS [TABLE_NAME]
, SUM(sPTN.Rows) AS [RowCount]
,sOBJ.[create_date]
FROM
sys.objects AS sOBJ
INNER JOIN sys.partitions AS sPTN
ON sOBJ.object_id = sPTN.object_id
AND sOBJ.[name] like 'mfr__%'
WHERE
sOBJ.[type] = 'U'
AND sOBJ.is_ms_shipped = 0x0
AND index_id < 2 -- 0:Heap, 1:Clustered
GROUP BY
sOBJ.schema_id
, sOBJ.name
, sObj.[create_date]
), pro as (SELECT *
FROM sys.procedures WHERE LEFT([name], 11) = 'mfr__updt__')
, lu as (SELECT [table], MAX([timestamp]) as 'lu' FROM [dbo].[fds__status] WHERE [action] like 'update%' group by [table])
, luf as (SELECT [table], MAX([timestamp]) as 'luf' FROM [dbo].[fds__status] WHERE [action] like 'update_full' group by [table])
, lur as (SELECT [table], MAX([timestamp]) as 'lur' FROM [dbo].[fds__status] WHERE [action] like 'update_reset' group by [table])
, luc as (SELECT lu.[table], [lu], [luf], [lur]
, DATEDIFF(MINUTE, [lu], @utcnow) as [dlu]
, DATEDIFF(MINUTE, [lur], @utcnow) as [dlr]
, DATEDIFF(MINUTE, [luf], @utcnow) as [dluf]
, CASE --WHEN [dbo].[ctm__getUpdateLockStatus] () = Cast(1 as bit) THEN 0
WHEN [lu] is null then 5
--WHEN DATEDIFF(MINUTE, [lu], @utcnow) > @threshold_minutes_full
-- OR DATEDIFF(MINUTE, [luf], @utcnow) > @threshold_minutes_full
-- THEN 2
WHEN DATEDIFF(MINUTE, [lu], @utcnow) > @threshold_minutes_short THEN 1
ELSE 0
END as 'need'
from lu LEFT JOIN luf on lu.[table] = luf.[table] LEFT JOIN lur on lu.[table] = lur.[table]
), cols as (SELECT DISTINCT [TABLE_NAME] FROM INFORMATION_SCHEMA.COLUMNS
WHERE LEFT(TABLE_NAME, 5) = N'mfr__' AND ([column_name] COLLATE Latin1_General_CI_AS in ('DateModified', 'DateCreated', 'DateOfCreation')))
INSERT INTO @RET
SELECT DISTINCT [entity_name] = et.[name]
, 'table_name' = tbl.[table_name]
, 'temp_table' = pro.[name]
, 'locked' = 0 --ISNULL([dbo].[ctm__getUpdateLockStatus_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')), 0)
, 'locked_reset' = 0 --ISNULL([dbo].[ctm__getUpdateLockStatus_reset_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')), 0)
, 'updateneed' = CASE
--WHEN [dbo].[ctm__getUpdateLockStatus_tbl](REPLACE(tbl.[TABLE_NAME], 'mfr__', '')) = Cast(1 as bit) THEN 0
WHEN et.[name] COLLATE Latin1_General_CI_AS IN ('Attachment','Comment','Item','StepListTemplateInstance','Step') THEN 0
WHEN tbl.[RowCount] = 0 THEN 5
WHEN NOT EXISTS (SELECT * FROM cols WHERE tbl.[TABLE_NAME] = cols.[TABLE_NAME]) THEN 0
WHEN luc.need is null then 5
WHEN tbl.[TABLE_NAME] COLLATE Latin1_General_CI_AS in ('') AND ISNULL(luc.[dlr], 1440) >= 720 AND @UTCTimeInMinutes BETWEEN 45 AND 90 THEN 5 -- once every day, between 02:45 and 03:30 in the morning
ELSE luc.[need]--ISNULL(luc.[need], 0)
END
, 'datebased' = CASE WHEN EXISTS (SELECT * FROM cols WHERE tbl.[TABLE_NAME] = cols.[TABLE_NAME]) THEN 1 ELSE 0 END
FROM tbl
JOIN @EntityTypes as et on tbl.[TABLE_NAME] = et.[tablename]
JOIN pro on REPLACE(pro.[name], 'mfr__updt__', 'mfr__') = tbl.[TABLE_NAME]
LEFT JOIN luc on tbl.[table_name] = luc.[table];
RETURN
END
@@ -0,0 +1,19 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fds__newInvoiceId]
(
@year int
)
RETURNS varchar(25)
AS
BEGIN
DECLARE @lastid_int bigint;
SELECT @lastid_int = MAX( TRY_PARSE(RIGHT([InvoiceId], 4) as integer) ) FROM [dbo].[fds__invoices] WHERE LEFT(ISNULL([InvoiceId],''),5) = ('R' + CAST(@year as varchar(4)));
DECLARE @invoice_id varchar(25) = 'R' + CAST(@year as varchar(4)) + '-' + FORMAT(ISNULL( @lastid_int , CASE WHEN @year = 2021 THEN 1593 ELSE 0 END) + 1, '0000');
RETURN @invoice_id;
END
@@ -0,0 +1,33 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fds__r_getBalanceThisMonth](
@authuser varchar(100)
)
RETURNS varchar(25)
BEGIN
DECLARE @today date = GETDATE();
DECLARE @tomorrow date = DATEADD(DAY,1,@today);
DECLARE @thismonthfirst date = [dbo].[date_monthfirst](@today);
DECLARE @ret varchar(25) = ''
IF [dbo].[fis_getModuleAuth]('fds_reports', @authuser) < 2
SET @ret = '';
ELSE
BEGIN
WITH inv as (
SELECT
[Dateofcreation] = i.[DateFinalized]
,i.[InvoiceBalance]
,[InvoiceBalanceNetto] = i.[InvoiceBalance_net]
FROM [dbo].[fds__invoices] as i
WHERE i.[isFinal] = 1 AND [dbo].[date_monthfirst](i.[DateFinalized]) = @thismonthfirst
)
SELECT TOP(1) @ret = FORMAT( SUM( ISNULL(inv.[InvoiceBalanceNetto],0) ) * 0.001, '#,0 k€', 'de') FROM inv;
END
RETURN @ret;
END
@@ -0,0 +1,25 @@
CREATE FUNCTION [dbo].[fds__updateNeed]
(
@threshold_minutes_full int
,@threshold_minutes_short int
)
RETURNS tinyint
AS
BEGIN
--[Reset] = 5
-- [Full] = 2
-- [Short] = 1
-- [None] = 0
SET @threshold_minutes_full = 60;
SET @threshold_minutes_short = 8;
DECLARE @RET tinyint = 1
DECLARE @UpDate datetime
DECLARE @UpDateFull datetime
RETURN @RET;
END
@@ -0,0 +1,33 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_authenticate]
(
@email varchar(255),
@password nvarchar(20)
)
RETURNS @RET TABLE ( [useraccount_id] varchar(5), [auth] smallint, [name] nvarchar(100) null, [firstname] nvarchar(100) null, [email] varchar(255) NULL, [mobile] varchar(50) null, [functions] varchar(1000), [language] varchar(2), [fullname] nvarchar(255) null, [fullname_rev] nvarchar(255) null)
AS
BEGIN
DECLARE @auth smallint = -1;
DECLARE @useraccount_id varchar(10), @name nvarchar(255), @mobile varchar(50), @functions varchar(1000) = '';
SELECT TOP(1) @useraccount_id = [useraccount_id]
FROM [dbo].[fis_useraccounts] as ua
WHERE ua.[DateDeleted] is null AND ua.[DateDisabled] is null
AND CAST(DECRYPTBYKEY(ua.[email_enc]) as varchar(255)) = @email
AND @email <> ''
AND CAST(DECRYPTBYKEY(ua.[password_enc]) as nvarchar(20)) = @password
AND @password <> ''
AND ua.[password_enc] is not null;
INSERT INTO @RET SELECT * FROM [dbo].[fis_admin_getUserAccount](@useraccount_id);
RETURN;
END
@@ -0,0 +1,34 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_authenticate_byID]
(
@useraccount_id varchar(10),
@password nvarchar(20)
)
RETURNS @RET TABLE ( [useraccount_id] varchar(5), [auth] smallint, [name] nvarchar(100) null, [firstname] nvarchar(100) null, [email] varchar(255) NULL, [mobile] varchar(50) null, [functions] varchar(1000), [language] varchar(2), [fullname] nvarchar(255) null, [fullname_rev] nvarchar(255) null)
AS
BEGIN
DECLARE @auth smallint = -1;
DECLARE @name nvarchar(255), @mobile varchar(50), @functions varchar(1000) = '';
IF EXISTS( SELECT 0
FROM [dbo].[fis_useraccounts] as ua
WHERE ua.[DateDeleted] is null AND ua.[DateDisabled] is null
AND [useraccount_id] = @useraccount_id and ISNULL(@useraccount_id, '') <> ''
AND CAST(DECRYPTBYKEY(ua.[password_enc]) as nvarchar(20)) = @password
AND @password <> ''
AND ua.[password_enc] is not null
)
BEGIN
INSERT INTO @RET SELECT * FROM [dbo].[fis_admin_getUserAccount](@useraccount_id);
END
RETURN;
END
@@ -0,0 +1,20 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_checkUserExists]
(
@useraccount_id varchar(5)
)
RETURNS bit
AS
BEGIN
DECLARE @RET bit;
SET @RET = IIF(EXISTS (SELECT * FROM [dbo].[fis_useraccounts] as ua WHERE [useraccount_id] = @useraccount_id AND ua.[DateDeleted] is null AND ua.[DateDisabled] is null), 1, 0);
RETURN @RET;
END
@@ -0,0 +1,55 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserAccount]
(
@useraccount_id varchar(5)
)
RETURNS @RET TABLE ( [useraccount_id] varchar(5), [auth] smallint, [name] nvarchar(100) null, [firstname] nvarchar(100) null, [email] varchar(255) NULL, [mobile] varchar(50) null, [functions] varchar(1000), [language] varchar(2), [fullname] nvarchar(255) null, [fullname_rev] nvarchar(255) null)
AS
BEGIN
DECLARE @auth smallint = -1;
DECLARE @email varchar(255), @name nvarchar(100), @firstname nvarchar(100), @mobile varchar(50), @functions varchar(1000) = '', @title varchar(50), @gender varchar(1), @password varchar(5), @language varchar(2), @fullname nvarchar(255), @fullname_rev nvarchar(255);
SELECT TOP(1) @useraccount_id = [useraccount_id]
,@auth = CASE WHEN [useraccount_id] is null THEN -1 ELSE 1 END
,@name = CAST(DECRYPTBYKEY(ua.[name_enc]) as nvarchar(100))
,@firstname = CAST(DECRYPTBYKEY(ua.[firstname_enc]) as nvarchar(100))
,@title = CAST(DECRYPTBYKEY(ua.[title_enc]) as varchar(50))
,@gender = CAST(DECRYPTBYKEY(ua.[gender_enc]) as varchar(1))
--,@password = DECRYPTBYKEY(ua.[password_enc])
,@email = CAST(DECRYPTBYKEY(ua.[email_enc]) as varchar(255))
,@mobile = CAST(DECRYPTBYKEY(ua.[mobile_enc]) as varchar(50))
,@language = ua.[language]
,@fullname = [dbo].[fis_admin_getUserName](ua.[name_enc], ua.[firstname_enc], ua.[title_enc])
,@fullname_rev = [dbo].[fis_admin_getUserName_rev](ua.[name_enc], ua.[firstname_enc], ua.[title_enc])
FROM [dbo].[fis_useraccounts] as ua
WHERE ua.[DateDeleted] is null AND ua.[DateDisabled] is null
AND ua.[useraccount_id] = @useraccount_id;
SET @auth = ISNULL(TRY_CAST((SELECT TOP(1) [value] FROM [fis_useraccounts_settings] WHERE [useraccount_id] = @useraccount_id and [key] = 'intranet_admin') as smallint), @auth);
SET @functions = STUFF(
(SELECT ',' + [value] as [text()] FROM [fis_useraccounts_settings] WHERE [useraccount_id] = @useraccount_id and [key] = 'intranet_function' FOR XML PATH(''), TYPE).value('.','nvarchar(max)')
, 1,1,'');
INSERT INTO @RET
VALUES(
@useraccount_id
,IIF(@useraccount_id is null, -1, @auth)
,IIF(@useraccount_id is null, null, @name)
,IIF(@useraccount_id is null, null, @firstname)
,IIF(@useraccount_id is null, null, @email)
,IIF(@useraccount_id is null, null, @mobile)
,IIF(@useraccount_id is null, null, @functions)
,IIF(@useraccount_id is null, null, @language)
,IIF(@useraccount_id is null, null, @fullname)
,IIF(@useraccount_id is null, null, @fullname_rev)
);
RETURN;
END
@@ -0,0 +1,65 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserAccountList]
(
@authaccount varchar(5)
, @useraccount_id varchar(5)
, @usergroup_id varchar(5)
, @include_nonmembers as bit
)
RETURNS @RET TABLE ( [useraccount_id] varchar(5), [auth] smallint, [name] nvarchar(100) null, [firstname] nvarchar(100) null, [title] varchar(50) NULL, [gender] varchar(1), [email] varchar(255) NULL, [mobile] varchar(50) null, [functions] varchar(1000), [language] varchar(2), [disabled] bit, [nologin] bit, [member] bit, [order] int)
AS
BEGIN
DECLARE @auth smallint = [dbo].[fis_admin_getUserAuth](@authaccount);
IF @auth > 1 OR (ISNULL(@useraccount_id, '') <>'' AND @useraccount_id = @authaccount)
BEGIN
DECLARE @ungrouped bit = CASE WHEN @usergroup_id is null THEN 1 ELSE 0 END; /* if no usergroup is selected => ungrouped */
IF @ungrouped = 1 OR EXISTS(SELECT * FROM [dbo].[fis_usergroups] as ug where ug.[usergroup_id] = @usergroup_id AND ug.[DateDeleted] is null) /* Validate selected group, alternatively do not even look for accounts */
BEGIN
WITH SelectedGroupMembers as (
SELECT ug.[usergroup_id], ugm.[useraccount_id]
FROM [dbo].[fis_usergroups_members] as ugm
JOIN [dbo].[fis_usergroups] as ug ON ugm.[usergroup_id] = ug.[usergroup_id]
WHERE ug.[DateDeleted] is null
AND ugm.[DateDeleted] is null
AND ug.[usergroup_id] = @usergroup_id
)
INSERT INTO @RET
SELECT ua.[useraccount_id]
,'auth' = ISNULL(TRY_CAST((SELECT TOP(1) [value] FROM [fis_useraccounts_settings] as s WHERE s.[useraccount_id] = ua.[useraccount_id] and s.[key] = 'intranet_admin') as smallint), CASE WHEN ua.[useraccount_id] is null THEN -1 WHEN [DateDisabled] is not null THEN 0 ELSE 1 END )
,CAST(DECRYPTBYKEY(ua.[name_enc]) as nvarchar(100))
,CAST(DECRYPTBYKEY(ua.[firstname_enc]) as nvarchar(100))
,CAST(DECRYPTBYKEY(ua.[title_enc]) as varchar(50))
,CAST(DECRYPTBYKEY(ua.[gender_enc]) as varchar(1))
,CAST(DECRYPTBYKEY(ua.[email_enc]) as varchar(255))
,CAST(DECRYPTBYKEY(ua.[mobile_enc]) as varchar(50))
,'functions' = STUFF(
(SELECT ',' + [value] as [text()] FROM [fis_useraccounts_settings] as s WHERE s.[useraccount_id] = ua.[useraccount_id] and s.[key] = 'intranet_function' FOR XML PATH(''), TYPE).value('.','nvarchar(max)')
, 1,1,'')
,ua.[language]
,'disabled' = CASE WHEN ua.[DateDisabled] IS NULL THEN 0 ELSE 1 END
,'nologin' = CAST(CASE WHEN ua.[password_enc] is null THEN 1 WHEN ISNULL(CAST(DECRYPTBYKEY(ua.[password_enc]) as varchar(20)),'') = '' THEN 1 ELSE 0 END as bit)
,'member' = CASE WHEN @usergroup_id IS NULL THEN NULL WHEN sgm.[useraccount_id] is not null THEN 1 ELSE 0 END
,'order' = ROW_NUMBER() OVER (ORDER BY CAST(DECRYPTBYKEY(ua.[name_enc]) as nvarchar(255)))
FROM [dbo].[fis_useraccounts] as ua
LEFT JOIN SelectedGroupMembers as sgm on sgm.[useraccount_id] = ua.[useraccount_id]
WHERE ua.[DateDeleted] is null /*never return deleted useraccounts */
AND (@useraccount_id is null OR (ua.[useraccount_id] = @useraccount_id)) /* if single useraccount is selected, return only this selected one */
AND (@ungrouped = 1 -- is no useraccount is selected
OR ISNULL(@include_nonmembers,0) = 1 -- or if useraccount is selected, but non-members should be included also
OR sgm.[useraccount_id] is not null) -- or if accounts are valid members
END
END
RETURN;
END
@@ -0,0 +1,36 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserAccount_Namelist]
(
@authaccount varchar(5)
)
RETURNS @RET TABLE ( [useraccount_id] varchar(5), [name] nvarchar(100) null, [firstname] nvarchar(100) null, [order] int)
AS
BEGIN
DECLARE @auth smallint = [dbo].[fis_admin_getUserAuth](@authaccount);
IF @auth > 1
BEGIN
INSERT INTO @RET
SELECT ua.[useraccount_id]
,CAST(DECRYPTBYKEY(ua.[name_enc]) as nvarchar(100))
,CAST(DECRYPTBYKEY(ua.[firstname_enc]) as nvarchar(100))
,'order' = ROW_NUMBER() OVER (ORDER BY CAST(DECRYPTBYKEY(ua.[name_enc]) as nvarchar(255)))
FROM [dbo].[fis_useraccounts] as ua
WHERE ua.[DateDeleted] is null;
END
RETURN;
END
@@ -0,0 +1,66 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserAccount_byemail]
(
@email varchar(255)
,@include_password bit = 0
)
RETURNS @RET TABLE ( [useraccount_id] varchar(5), [auth] smallint, [name] nvarchar(100) null, [firstname] nvarchar(100) null, [title] varchar(50) null,
[gender] varchar(1) NULL, [email] varchar(255) NULL, [mobile] varchar(50) null,
[password] nvarchar(25) null, [functions] varchar(1000), [language] varchar(2)
, [fullname] nvarchar(255) null, [fullname_rev] nvarchar(255) null
)
AS
BEGIN
DECLARE @auth smallint = -1;
DECLARE @useraccount_id varchar(5), @name nvarchar(100), @firstname nvarchar(100), @mobile varchar(50), @functions varchar(1000) = '', @title varchar(50), @gender varchar(1), @password varchar(25), @language varchar(2), @fullname nvarchar(255), @fullname_rev nvarchar(255);
SELECT TOP(1) @useraccount_id = [useraccount_id]
,@auth = CASE WHEN [useraccount_id] is null THEN -1 ELSE 1 END
,@name = CAST(DECRYPTBYKEY(ua.[name_enc]) as nvarchar(100))
,@firstname = CAST(DECRYPTBYKEY(ua.[firstname_enc]) as nvarchar(100))
,@title = CAST(DECRYPTBYKEY(ua.[title_enc]) as varchar(50))
,@gender = CAST(DECRYPTBYKEY(ua.[gender_enc]) as varchar(1))
,@password = IIF(ISNULL(@include_password,0) = 1, CAST(DECRYPTBYKEY(ua.[password_enc]) as nvarchar(25)) , null)
,@email = CAST(DECRYPTBYKEY(ua.[email_enc]) as varchar(255))
,@mobile = CAST(DECRYPTBYKEY(ua.[mobile_enc]) as varchar(50))
,@language = ua.[language]
,@fullname = [dbo].[fis_admin_getUserName](ua.[name_enc], ua.[firstname_enc], ua.[title_enc])
,@fullname_rev = [dbo].[fis_admin_getUserName_rev](ua.[name_enc], ua.[firstname_enc], ua.[title_enc])
FROM [dbo].[fis_useraccounts] as ua
WHERE ua.[DateDeleted] is null AND ua.[DateDisabled] is null
AND LOWER(RTRIM(CAST(DECRYPTBYKEY(ua.[email_enc]) as varchar(255)))) = LOWER(RTRIM(@email));
SET @auth = ISNULL(TRY_CAST((SELECT TOP(1) [value] FROM [fis_useraccounts_settings] WHERE [useraccount_id] = @useraccount_id and [key] = 'intranet_admin') as smallint), @auth);
SET @functions = STUFF(
(SELECT ',' + [value] as [text()] FROM [fis_useraccounts_settings] WHERE [useraccount_id] = @useraccount_id and [key] = 'intranet_function' FOR XML PATH(''), TYPE).value('.','nvarchar(max)')
, 1,1,'');
INSERT INTO @RET
VALUES(
@useraccount_id
,IIF(@useraccount_id is null, -1, @auth)
,IIF(@useraccount_id is null, null, @name)
,IIF(@useraccount_id is null, null, @firstname)
,IIF(@useraccount_id is null, null, @title)
,IIF(@useraccount_id is null, null, @gender)
,IIF(@useraccount_id is null, null, @email)
,IIF(@useraccount_id is null, null, @mobile)
,IIF(@useraccount_id is null, null, @password)
,IIF(@useraccount_id is null, null, @functions)
,IIF(@useraccount_id is null, null, @language)
,IIF(@useraccount_id is null, null, @fullname)
,IIF(@useraccount_id is null, null, @fullname_rev)
);
RETURN;
END
@@ -0,0 +1,33 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserAddressForm]
(
@name_enc varbinary(260)
,@title_enc varbinary(50)
,@gender_enc varbinary(100)
,@language varchar(2)
)
RETURNS nvarchar(255)
AS
BEGIN
DECLARE @Username nvarchar(255);
DECLARE @l varchar(2) = LOWER(ISNULL(@language, 'de'));
DECLARE @g varchar(1) = LOWER(ISNULL(CAST(DECRYPTBYKEY(@gender_enc) as varchar(1)), 'm'));
SET @Username = CAST( CASE WHEN @l = 'de' THEN 'Sehr geehrte' + CASE WHEN @g = 'm' THEN 'r Herr ' ELSE ' Frau ' END
ELSE 'Dear ' + CASE WHEN @g = 'm' THEN 'Mr ' ELSE ' Ms ' END
END
+ ISNULL(CASE WHEN @title_enc is null THEN '' ELSE CAST(DECRYPTBYKEY(@title_enc) as varchar(50)) + ' ' END,'')
+ ISNULL(CASE WHEN @name_enc is null THEN '' ELSE CAST(DECRYPTBYKEY(@name_enc ) as nvarchar(100)) END, '')
as nvarchar(255)
);
RETURN @username;
END
@@ -0,0 +1,23 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserAuth]
(
@useraccount_id varchar(5)
)
RETURNS smallint
AS
BEGIN
DECLARE @auth smallint = -1;
SET @auth = ISNULL((SELECT TOP(1)
ISNULL(TRY_CAST((SELECT TOP(1) [value] FROM [fis_useraccounts_settings] as s WHERE s.[useraccount_id] = ua.[useraccount_id] and s.[key] = 'intranet_admin') as smallint), CASE WHEN [useraccount_id] is null THEN -1 WHEN [DateDisabled] is not null THEN 0 ELSE 1 END )
FROM [dbo].[fis_useraccounts] as ua
WHERE ua.[DateDeleted] is null
AND ua.[useraccount_id] = @useraccount_id), -1);
RETURN @auth;
END
@@ -0,0 +1,24 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserEmail_byID]
(
@useraccount_id varchar(5)
)
RETURNS nvarchar(255)
AS
BEGIN
DECLARE @UserEmail varchar(255);
SELECT TOP(1) @UserEmail = ISNULL(CASE WHEN [email_enc] is null THEN '' ELSE CAST(DECRYPTBYKEY([email_enc] ) as varchar(255)) END, '')
FROM [dbo].[fis_useraccounts] as ua WHERE [useraccount_id] = @useraccount_id AND [DateDeleted] is null;
RETURN @userEmail;
END
@@ -0,0 +1,33 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserGroupList]
(
@authaccount varchar(5)
, @usergroup_id varchar(5)
)
RETURNS @RET TABLE ( [usergroup_id] varchar(5), [name] nvarchar(255) null, [order] int)
AS
BEGIN
DECLARE @auth smallint = [dbo].[fis_admin_getUserAuth](@authaccount);
IF @auth > 1
BEGIN
INSERT INTO @RET
SELECT [usergroup_id]
,CAST(DECRYPTBYKEY(ug.[name_enc]) as nvarchar(255))
,'order' = ROW_NUMBER() OVER (ORDER BY CAST(DECRYPTBYKEY(ug.[name_enc]) as nvarchar(255)))
FROM [dbo].[fis_usergroups] as ug
WHERE ug.[DateDeleted] is null
AND (@usergroup_id is null OR ug.[usergroup_id] = @usergroup_id);
END
RETURN;
END
@@ -0,0 +1,27 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserName]
(
@name_enc varbinary(260)
,@firstname_enc varbinary(260)
,@title_enc varbinary(50)
)
RETURNS nvarchar(255)
AS
BEGIN
DECLARE @Username nvarchar(255);
SET @Username = CAST(
ISNULL(CASE WHEN @title_enc is null THEN '' ELSE CAST(DECRYPTBYKEY(@title_enc) as varchar(50)) + ' ' END,'')
+ ISNULL(CASE WHEN @firstname_enc is null THEN '' ELSE CAST(DECRYPTBYKEY(@firstname_enc) as nvarchar(100)) + ' ' END,'')
+ ISNULL(CASE WHEN @name_enc is null THEN '' ELSE CAST(DECRYPTBYKEY(@name_enc ) as nvarchar(100)) END, '')
as nvarchar(255))
RETURN @username;
END
@@ -0,0 +1,23 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserName_byID]
(
@useraccount_id varchar(5)
)
RETURNS nvarchar(255)
AS
BEGIN
DECLARE @Username nvarchar(255);
SELECT TOP(1) @Username = [dbo].[fis_admin_getUserName]([name_enc],[firstname_enc],[title_enc])
FROM [dbo].[fis_useraccounts] as ua WHERE [useraccount_id] = @useraccount_id AND [DateDeleted] is null;
RETURN @username;
END
@@ -0,0 +1,28 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserName_rev]
(
@name_enc varbinary(260)
,@firstname_enc varbinary(260)
,@title_enc varbinary(50)
)
RETURNS nvarchar(255)
AS
BEGIN
DECLARE @Username nvarchar(255);
SET @Username = CAST(
ISNULL(CASE WHEN @name_enc is null THEN '' ELSE CAST(DECRYPTBYKEY(@name_enc ) as nvarchar(100)) END, '')
+ N', ' + ISNULL(CASE WHEN @firstname_enc is null THEN '' ELSE CAST(DECRYPTBYKEY(@firstname_enc) as nvarchar(100)) + ' ' END,'')
as nvarchar(255))
RETURN @username;
END
@@ -0,0 +1,24 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserName_rev_byID]
(
@useraccount_id varchar(5)
)
RETURNS nvarchar(255)
AS
BEGIN
DECLARE @Username nvarchar(255);
SELECT TOP(1) @Username = [dbo].[fis_admin_getUserName_rev]([name_enc],[firstname_enc],[title_enc])
FROM [dbo].[fis_useraccounts] as ua WHERE [useraccount_id] = @useraccount_id AND [DateDeleted] is null;
RETURN @username;
END
@@ -0,0 +1,26 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserSetting]
(
@useraccount_id varchar(5)
, @key varchar(25)
)
RETURNS varchar(255)
AS
BEGIN
DECLARE @ret varchar(25);
SET @ret = ISNULL((SELECT TOP(1)
ISNULL((SELECT TOP(1) [value] FROM [fis_useraccounts_settings] as s WHERE s.[useraccount_id] = ua.[useraccount_id] and s.[key] = @key), '')
FROM [dbo].[fis_useraccounts] as ua
WHERE ua.[DateDeleted] is null
AND ua.[useraccount_id] = @useraccount_id), '');
RETURN ISNULL(@ret,'');
END
@@ -0,0 +1,29 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_testGroupMembership]
(
@useraccount_id varchar(5)
,@usergroup_id varchar(1000)
)
RETURNS bit
AS
BEGIN
DECLARE @groups TABLE([usergroup_id] varchar(5));
INSERT INTO @groups SELECT * from STRING_SPLIT(@usergroup_id,',');
DECLARE @isMember bit = CASE WHEN EXISTS (SELECT * FROM [dbo].[fis_usergroups] as g
JOIN @groups as groupstotest On groupstotest.[usergroup_id] = g.[usergroup_id]
JOIN [dbo].[fis_usergroups_members] as gm on g.[usergroup_id] = gm.[usergroup_id] and gm.[DateDeleted] is null AND g.[DateDeleted] is null
JOIN [dbo].[fis_useraccounts] as u on gm.[useraccount_id] = u.[useraccount_id]
WHERE u.[DateDeleted] is null AND u.[DateDisabled] is null
and u.[useraccount_id] = @useraccount_id
and g.[DateDeleted] is null
)
THEN 1 ELSE 0 END;
RETURN @isMember;
END
@@ -0,0 +1,43 @@
CREATE FUNCTION [dbo].[fis_fn_id] (
@table varchar(50)
)
RETURNS varchar(50)
AS
BEGIN
DECLARE @NewAccount varchar(10) = null;
SET @table = ISNULL(@table, '');
IF @table = 'fis_usergroups'
BEGIN
SELECT @NewAccount = [dbo].[ocms_fn_generatePassword] (5,0,1,0);
WHILE EXISTS( SELECT 0 FROM [dbo].[fis_usergroups] WITH (SERIALIZABLE) WHERE [usergroup_id] = @NewAccount)
BEGIN
SET @NewAccount = [dbo].[ocms_fn_generatePassword] (5,0,1,0);
END
END
ELSE IF @table = 'tmp__fds__invoice_servicerequests'
BEGIN
SELECT @NewAccount = [dbo].[ocms_fn_generatePassword] (7,0,1,0);
WHILE EXISTS( SELECT 0 FROM [dbo].[tmp__fds__invoice_servicerequests] WITH (SERIALIZABLE) WHERE [InvRqId] = @NewAccount)
BEGIN
SET @NewAccount = [dbo].[ocms_fn_generatePassword] (7,0,1,0);
END
END
ELSE IF @table = 'tmp__fds__bankingtransactions'
BEGIN
SELECT @NewAccount = [dbo].[ocms_fn_generatePassword] (7,0,1,0);
WHILE EXISTS( SELECT 0 FROM [dbo].[tmp__fds__bankingtransactions] WITH (SERIALIZABLE) WHERE [taID] = @NewAccount)
BEGIN
SET @NewAccount = [dbo].[ocms_fn_generatePassword] (7,0,1,0);
END
END
RETURN ISNULL(@NewAccount, [dbo].[ocms_fn_generatePassword] (10,0,1,0));
END;
@@ -0,0 +1,20 @@
CREATE FUNCTION [dbo].[fis_fn_useraccount_id] (
)
RETURNS varchar(5)
AS
BEGIN
DECLARE @NewAccount varchar(5) = [dbo].[ocms_fn_generatePassword] (5,0,1,0);
WHILE EXISTS( SELECT * FROM [dbo].[fis_useraccounts] WHERE [useraccount_id] = @NewAccount)
BEGIN
SET @NewAccount = [dbo].[ocms_fn_generatePassword] (5,0,1,0);
END
RETURN @NewAccount;
END;
@@ -0,0 +1,64 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_getModuleAuth]
(
@module varchar(50),
@useraccount_id varchar(10) -- length is 5; content would be cut to 5 is variable-length is 5 also
)
RETURNS int
AS
BEGIN
DECLARE @RET int, @TMP int, @module_base varchar(50), @module_qualifier varchar(50);
SET @module = ISNULL(@module,'');
SET @module_base = CASE WHEN CHARINDEX('-', @module) = 0 THEN @module ELSE LEFT(@module, CHARINDEX('-', @module) -1) END;
SET @module_qualifier = CASE WHEN CHARINDEX('-', @module) = 0 THEN '' ELSE RIGHT(@module, LEN(@module) - CHARINDEX('-', @module)) END;
SET @RET = CASE WHEN @module = '' OR LEFT(@module,1) ='-' -- OR ISNULL(@account, '') IN ('','*'))
THEN -3
WHEN @useraccount_id = 'sa'
THEN 10
WHEN NOT EXISTS (SELECT 0 FROM [dbo].[fis_useraccounts] as u WHERE u.[useraccount_id] = @useraccount_id and u.[DateDeleted] is null)
THEN -2
WHEN EXISTS (SELECT 0 FROM [dbo].[fis_useraccounts] as u WHERE u.[useraccount_id] = @useraccount_id and u.[DateDeleted] is null AND u.[DateDisabled] is not null)
THEN -1
WHEN @module <> 'fds-admin' AND NOT EXISTS (SELECT 0 from [dbo].[fis_module_auth] as a WHERE a.[module] = @module)
THEN 0
ELSE NULL END;
IF @RET is null
BEGIN
WITH maCTE as (
SELECT * FROM [dbo].[fis_module_auth] as a_
)
SELECT @RET = Max(a.[auth])
FROM maCTE as a
WHERE (
((@module LIKE (a.[module] + '%') OR @module = a.[module]) AND @module <> '')
OR a.[module] = 'admin'
)
AND (
(a.[isgroup] = 0 AND a.[group_or_user] = @useraccount_id)
OR (a.[isgroup] = 1 AND [dbo].[fis_admin_testGroupMembership](@useraccount_id, a.[group_or_user]) = 1)
);
END
IF @module_qualifier not in ('manage','admin') AND @RET between -1 and 9 AND @RET between -1 and 9
SET @RET = [dbo].[ott_max](@RET, [dbo].[fis_getModuleAuth](@module_base + '-manage', @useraccount_id ));
IF @module <> 'fds-admin' AND ISNULL(@RET, -1) between -1 and 9
SET @RET = [dbo].[ott_max](@RET, [dbo].[fis_getModuleAuth]('fds-admin', @useraccount_id ));
--SET @RET = CASE WHEN @module = 'fds_inv' and @useraccount_id = 'J5KL8' THEN 1 ELSE @RET END;
SET @RET = ISNULL(@RET, -3);
RETURN @RET
END
@@ -0,0 +1,20 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fis_getModuleAuthList]
(
@module varchar(100)
,@authuser varchar(10)
)
RETURNS TABLE
AS
RETURN
(
SELECT
[module] = [value]
, [auth] = [dbo].[fis_getModuleAuth]([value], @authuser)
FROM string_split(ISNULL(@module, ''),',')
WHERE TRIM([value]) <> ''
)
@@ -0,0 +1,49 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fis_getONEPersonWidgets]
(
@useraccount_id varchar(10)
)
RETURNS @RET TABLE
(
[short_name] [varchar](50) NOT NULL,
[account] [varchar](50) NOT NULL,
[type] [nvarchar](50) NOT NULL,
[name] [nvarchar](255) NOT NULL,
[description] [nvarchar](1000) NULL,
[sql] [nvarchar](2000) NULL,
[sql_admin_columns] [nvarchar](500) NULL,
[sql_datatypes] [nvarchar](255) NULL,
[url] [nvarchar](500) NULL,
[html] [nvarchar](max) NULL,
[visible_groups] [varchar](1000) NULL,
[visible] [tinyint] NOT NULL,
[auth_module] [varchar](50) NULL,
[rendering_options] [nvarchar](255) NULL,
[server_options] [nvarchar](2000) NULL,
[daycache] [bit] NOT NULL,
[personalized] [bit] NOT NULL,
[safemode] [bit] NOT NULL,
[variables] [varchar](1000) NULL,
[order] int
)
AS
BEGIN
--DECLARE @account varchar(50) = ''; -- kept in function for reuse purposes
INSERT INTO @RET
SELECT w.*
, ROW_NUMBER() OVER (ORDER BY s.[display_order], s.[DateCreated] DESC, w.[name]) as 'order'
FROM [dbo].[fis_widgets] as w JOIN [dbo].[fis_widget_subscriptions] as s ON w.[short_name] = s.[widget_name]
WHERE --(s.[account] = @account OR s.[account] = '*')
(s.[person_guid] = @useraccount_id OR s.[person_guid] = '*')
AND (ISNULL(w.[visible],0) = 0 OR ([dbo].[fis_getModuleAuth](ISNULL(w.[auth_module], 'fis_widgets'), @useraccount_id) >= w.[visible]))
--UNION
-- SELECT * FROM [dbo].[fis_getONEPersonWidgets_ownevents](@account, @person_guid)
RETURN
END
@@ -0,0 +1,154 @@
CREATE FUNCTION [dbo].[json_compareObjectArrays] (@SourceJSON NVARCHAR(MAX), @TargetJSON NVARCHAR(MAX), @uniquekey varchar(50) )
/**
Summary:
This function 'diffs' a source JSON document with a target JSON document and produces an
analysis of which properties are missing in either the source or target, or the values
of these properties that are different. It reports on the properties and values for
both source and target as well as the path that references that scalar value. The
path reference to the object's parent is exposed in the result to enable a query to
reference the value of any other object in the parent that is needed.
Author: Phil Factor
based on Author: Phil Factor (06/07/2020)
Date: 06/30/2023
Returns: >
equal: 1 = equal, 0 not equal
SideIndicator: ( == equal, <- not in target, -> not in source, <> not equal )
uid:
parent:
path: the JSON path used by the SQL JSON functions
key: the key field without the path
SourceValue: the value IN the SOURCE JSON document
TargetValue: the value IN the TARGET JSON document
**/
RETURNS @returntable TABLE
(
[equal] [bit],
[SideIndicator] CHAR(2), -- == means equal, <- means not in target, -> means not in source, <> means not equal
[UID] varchar(100),
[parent] VARCHAR(2000), -- the parent object
[path] VARCHAR(2000), -- the JSON path used by the SQL JSON functions
[key] VARCHAR(255), -- the key field without the path
[SourceValue] NVARCHAR(max), -- the value IN the SOURCE JSON document
[TargetValue] NVARCHAR(max) -- the value IN the TARGET JSON document
)
AS
BEGIN
IF (IsJson(ISNULL(@SourceJSON, '{}')) = 1 AND IsJson(ISNULL(@TargetJSON, '{}')) = 1) --don't try anything if either json is invalid
BEGIN
DECLARE @map TABLE --these contain all properties or array elements with scalar values
(
iteration INT, --the number of times that more arrays or objects were found
SourceOrTarget CHAR(1), --is this the source 's' OR the target 't'
[UID] varchar(100),
[mparent] VARCHAR(2000), --the parent object
[mPath] VARCHAR(2000), -- the JSON path to the key/value pair or array element
[mOPath] NVARCHAR(2000),
[mKey] VARCHAR(255), --the key to the property
[mValue] NVARCHAR(MAX),-- the value
[mType] INT --the type of value it is
);
DECLARE @objects TABLE --this contains all the properties with arrays and objects
(
iteration INT,
SourceOrTarget CHAR(1),
[UID] varchar(100),
[oParent] VARCHAR(2000),
[oPath] VARCHAR(2000),
[oOPath] VARCHAR(2000),
[oKey] NVARCHAR(2000),
[oValue] NVARCHAR(MAX),
[oType] INT
);
DECLARE @depth INT = 1; --we start in shallow water
DECLARE @HowManyObjectsNext INT = 1, @SourceType INT, @TargetType INT;
SELECT --firstly, we try to work out if the source is an array or object
@SourceType =
CASE IsNumeric((SELECT TOP 1 [key] FROM OpenJson(@SourceJSON)))
WHEN 1 THEN 4 ELSE 5 END,
@TargetType= --and if the target is an array or object
CASE IsNumeric((SELECT TOP 1 [key] FROM OpenJson(@TargetJSON)))
WHEN 1 THEN 4 ELSE 5 END
--now we insert the base objects or arrays into the object table
INSERT INTO @objects (iteration, SourceOrTarget, [oParent], [oPath], [oOPath], [oKey], [oValue], [oType])
SELECT 0, 's' AS SourceOrTarget,'' AS [oParent], [oPath] = '$', [oOPath] = '$', [oKey] = '', @SourceJSON, @SourceType;
INSERT INTO @objects (iteration, SourceOrTarget, [oParent], [oPath], [oOPath], [oKey], [oValue], [oType])
SELECT 0, 't' AS SourceOrTarget, '' AS [oParent], [oPath] = '$', [oOPath] = '$', [oKey] = '', @TargetJSON, @TargetType;
--we now set the depth and how many objects are in the next iteration
SELECT @depth = 0, @HowManyObjectsNext = 2;
WHILE @HowManyObjectsNext > 0 AND @depth < 2
BEGIN
INSERT INTO @map --get the scalar values into the @map table
(iteration, SourceOrTarget, [UID], [mParent], [mPath], [mOPath], [mKey], [mValue], [mType])
SELECT --
[iteration] = o.[iteration] + 1
, SourceOrTarget
, [UID] = [UID]
, [mParent] = [oPath]
, [mPath] = [oPath] + CASE [otype] WHEN 4 THEN '[' + [Key] + ']' ELSE '.' + [key] END
, [mOPath] = [oOPath] + CASE [otype] WHEN 4 THEN '[' + [Key] + ']' ELSE '.' + [key] END
, [mkey] = [key]
, [mvalue] = [value]
, [mtype] = [type]
FROM @objects AS o
CROSS APPLY OpenJson([oValue]) as j
WHERE j.[type] IN (0, 1, 2, 3) AND o.[iteration] = @depth;
--now we do the same for the objects and arrays
INSERT INTO @objects (iteration, SourceOrTarget, [UID], [oParent], [oPath], [oOPath], [oKey], [oValue], [oType])
SELECT
[iteration] = o.[iteration] + 1
, [SourceOrTarget] = SourceOrTarget
, [UID] = JSON_VALUE(j.[Value], '$.' + @uniquekey)
, [oParent] = [oPath]
, [oPath] = [oPath] + CASE [oType] WHEN 4 THEN '[' + JSON_VALUE(j.[Value], '$.' + @uniquekey) + ']' ELSE '.' + [key] END
, [oOPath] = [oOPath] + CASE [oType] WHEN 4 THEN '[' + j.[key] + ']' ELSE '.' + j.[key] END
, [oKey] = [key]
, [oValue] = [value]
, [oType] = [type]
FROM @objects o
CROSS APPLY OpenJson([oValue]) as j
WHERE j.[type] IN (4,5) AND o.[iteration] = @depth;
SELECT @HowManyObjectsNext = @@RowCount --how many objects or arrays?
SELECT @depth = @depth + 1; --and so to the next depth maybe
END; --while
--now we just do a full join on the columns we are comparing and work out the comparison
INSERT INTO @returntable
SELECT
--first we work out the side-indicator that summarises the comparison
[equal] = CASE WHEN src.[UID] is null OR tgt.[UID] is null THEN 0
WHEN src.[mValue] is NULL AND tgt.[mValue] is null THEN 1
WHEN src.[mValue] = tgt.[mValue] THEN 1
ELSE 0
END
, [Sideindicator] = CASE WHEN src.[UID] is null AND tgt.[UID] IS NOT null THEN '->'
WHEN src.[UID] is NOT null AND tgt.[UID] IS null THEN '<-'
WHEN src.[mValue] is NULL AND tgt.[mValue] is null THEN '=='
WHEN src.[mValue] = tgt.[mValue] THEN '=='
ELSE IIF(src.[mPath] IS NULL, '-', '<') + IIF(tgt.[mPath] IS NULL, '-', '>')
END
--these columns could be in either table
, [UID] = Coalesce(src.[UID], tgt.[UID])
, [parent] = Coalesce(src.[mParent], tgt.[mParent])
, [path] = Coalesce(src.[mOPath], tgt.[mOPath])
, [key] = Coalesce(src.[mKey], tgt.[mKey])
, [sourceValue] = src.[mValue]
, [targetValue] = tgt.[mValue]
FROM
(SELECT [UID], [mParent], [mPath], [mOPath], [mKey], [mValue] FROM @map WHERE SourceOrTarget = 's') AS src -- the source scalar literals
FULL OUTER JOIN
(SELECT [UID], [mParent], [mPath], [mOPath], [mKey], [mValue] FROM @map WHERE SourceOrTarget = 't') AS tgt --the target scalar literals
ON src.[mPath] = tgt.[mPath]
ORDER BY [path];
END;
RETURN;
END;
@@ -0,0 +1,112 @@
CREATE FUNCTION [dbo].[json_diffObjectArrays] (@SourceJSON NVARCHAR(MAX), @TargetJSON NVARCHAR(MAX), @uniquekey varchar(50) )
/**
Summary: >
This function 'diffs' a source JSON document with a target JSON document and produces an
analysis of which properties are missing in either the source or target, or the values
of these properties that are different. It reports on the properties and values for
both source and target as well as the path that references that scalar value. The
path reference to the object's parent is exposed in the result to enable a query to
reference the value of any other object in the parent that is needed.
Author: Phil Factor
Date: 06/07/2020
Revised:
- mod: Added the parent reference to the difference report
- Date: 09/07/2020
Database: PhilsRoutines
Examples:
- SELECT * FROM dbo.Compare_JsonObject(@TheSourceJSON, @TheTargetJSON)
WHERE SideIndicator <> '==';
- SELECT *, Json_Value(@TheSourceJSON,TheParent+'.name')
FROM dbo.Compare_JsonObject(@TheSourceJSON, @TheTargetJSON)
WHERE SideIndicator <> '==';
Returns: >
SideIndicator: ( == equal, <- not in target, -> not in source, <> not equal
ThePath: the JSON path used by the SQL JSON functions
TheKey: the key field without the path
TheSourceValue: the value IN the SOURCE JSON document
TheTargetValue: the value IN the TARGET JSON document
**/
RETURNS @returntable TABLE
(
[equal] [bit],
[action] smallint,
[uid] varchar(100),
[diff] nvarchar(max)
)
AS
BEGIN
DECLARE @objects TABLE (
[uid] varchar(100),
[json] NVARCHAR(MAX)
)
INSERT INTO @objects ([uid], [json])
SELECT JSON_VALUE(j.[Value], '$.' + @uniquekey), [value]
FROM OpenJson(@TargetJSON) as j
WHERE type IN (4,5);
DECLARE @intermediate TABLE
(
[equal] [bit],
[SideIndicator] CHAR(2), -- == means equal, <- means not in target, -> means not in source, <> means not equal
[UID] varchar(100),
[parent] VARCHAR(2000), -- the parent object
[path] VARCHAR(2000), -- the JSON path used by the SQL JSON functions
[key] VARCHAR(255), -- the key field without the path
[SourceValue] NVARCHAR(max), -- the value IN the SOURCE JSON document
[TargetValue] NVARCHAR(max) -- the value IN the TARGET JSON document
)
INSERT INTO @intermediate
SELECT * FROM [dbo].[json_compareObjectArrays](@SourceJSON, @TargetJSON, @uniquekey);
WITH d as(
SELECT
[UID]
, [total] = SUM(1)
, [LEFT] = SUM(IIF([sideindicator] = '<-',1,0))
, [RIGHT] = SUM(IIF([sideindicator] = '->',1,0))
, [inequal] = SUM(IIF(i.[equal] = 1,0,1))
FROM @intermediate as i
GROUP BY [UID]
)
INSERT INTO @returntable
SELECT
[equal] = IIF([inequal] = 0, 1 ,0)
, CASE WHEN [total] = [RIGHT] THEN 2
WHEN [total] = [LEFT] THEN -1
WHEN [inequal] > 0 THEN 1
ELSE 0 END
, ISNULL(o.[uid], d.[UID])
, [j] = IIF([inequal] = 0, '{}' , --( SELECT [key] = im.[theKey], [val] = im.[TheTargetValue] FROM @intermediate as im WHERE im.[UID] = d.[UID] AND im.equal = 0 FOR JSON PATH, WITHOUT_ARRAY_WRAPPER )
o.[json]
)
FROM d
FULL OUTER JOIN @objects as o ON d.[UID] = o.[uid]
DECLARE @uid varchar(100), @key varchar(100);
DECLARE im_cursor CURSOR FOR
SELECT [uid], [key]
FROM @intermediate
WHERE [SideIndicator] in ('==');
OPEN im_cursor
FETCH NEXT FROM im_cursor INTO @uid, @key;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE o
SET o.[diff] = JSON_MODIFY(o.[diff], '$.' + @key, null)
FROM @returntable as o
WHERE [uid] = @uid;
FETCH NEXT FROM im_cursor INTO @uid, @key;
END
CLOSE im_cursor ;
DEALLOCATE im_cursor;
RETURN;
END;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[mfr_fn_dateSent_fromNotes]
(
@notes nvarchar(500)
)
RETURNS date
AS
BEGIN
DECLARE @DateSent date = TRY_PARSE((SELECT '20'+STRING_AGG(TRIM([string]), '-') WITHIN GROUP(ORDER BY [rowno] DESC) FROM dbo.string_SplitString_ordered((SELECT REPLACE(REPLACE(TRIM([value]), CHAR(10),''), CHAR(13),'') from string_split(@notes,':') where CHARINDEX('@',[value]) = 0 AND [value] like '%[-]__[-]21'),'-') WHERE ISNULL([string],'') <> '') as date)
RETURN @DateSent
END
+77
View File
@@ -0,0 +1,77 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ne]
(
@value SQL_VARIANT
,@alternative SQL_VARIANT
)
RETURNS SQL_VARIANT
AS
BEGIN
DECLARE @ret SQL_VARIANT;
IF SQL_VARIANT_PROPERTY(@value, 'BaseType') = 'varchar'
BEGIN
If SQL_VARIANT_PROPERTY(@value, 'MaxLength') <= 50
BEGIN
DECLARE @v1 varchar(50) = ISNULL(try_cast(@value as varchar(50)), '');
SET @ret = IIF( @v1 <> '', @v1, try_CAST(@alternative as varchar(50)));
END
ELSE If SQL_VARIANT_PROPERTY(@value, 'MaxLength') <= 255
BEGIN
DECLARE @v2 varchar(255) = ISNULL(try_cast(@value as varchar(255)), '');
SET @ret = IIF( @v2 <> '', @v2, try_CAST(@alternative as varchar(255)));
END
ELSE If SQL_VARIANT_PROPERTY(@value, 'MaxLength') <= 1000
BEGIN
DECLARE @v3 varchar(1000) = ISNULL(try_cast(@value as varchar(1000)), '');
SET @ret = IIF( @v2 <> '', @v2, try_CAST(@alternative as varchar(1000)));
END
ELSE If SQL_VARIANT_PROPERTY(@value, 'MaxLength') <= 4000
BEGIN
DECLARE @v4 varchar(4000) = ISNULL(try_cast(@value as varchar(4000)), '');
SET @ret = IIF( @v4 <> '', @v4, try_CAST(@alternative as varchar(4000)));
END
ELSE
BEGIN
DECLARE @v5 varchar(8000) = ISNULL(try_cast(@value as varchar(8000)), '');
SET @ret = IIF( @v5 <> '', @v4, try_CAST(@alternative as varchar(8000)));
END
END
ELSE IF SQL_VARIANT_PROPERTY(@value, 'BaseType') = 'nvarchar'
BEGIN
If SQL_VARIANT_PROPERTY(@value, 'MaxLength') <= 50
BEGIN
DECLARE @nv1 nvarchar(50) = ISNULL(try_cast(@value as nvarchar(50)), '');
SET @ret = IIF(@nv1 <> '', @nv1, try_CAST(@alternative as nvarchar(50)));
END
ELSE If SQL_VARIANT_PROPERTY(@value, 'MaxLength') <= 255
BEGIN
DECLARE @nv2 nvarchar(255) = ISNULL(try_cast(@value as nvarchar(255)), '');
SET @ret = IIF(@nv2 <> '',@nv2, try_CAST(@alternative as nvarchar(255)));
END
ELSE If SQL_VARIANT_PROPERTY(@value, 'MaxLength') <= 1000
BEGIN
DECLARE @nv3 nvarchar(1000) = ISNULL(try_cast(@value as nvarchar(1000)), '');
SET @ret = IIF(@nv2 <> '',@nv2, try_CAST(@alternative as nvarchar(1000)));
END
ELSE
BEGIN
DECLARE @nv4 nvarchar(4000) = ISNULL(try_cast(@value as nvarchar(4000)), '');
SET @ret = IIF(@nv4 <> '',@nv4, try_CAST(@alternative as nvarchar(4000)));
END
END
RETURN @ret
END
+21
View File
@@ -0,0 +1,21 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[net_val]
(
@price numeric(10,3)
,@quantityhours numeric(10,3)
,@discount numeric(10,3)
)
RETURNS numeric(10,2)
AS
BEGIN
DECLARE @Ret numeric(10,2)
SET @RET = ISNULL(@Price,0) * ISNULL(@quantityhours,1) * (100 - ISNULL(@discount,0)) * 0.01;
RETURN @RET;
END
@@ -0,0 +1,27 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION [dbo].[ott_20_randomStrings]
(
@digits tinyint
)
RETURNS @RET TABLE
(
[s] varchar(5)
)
AS
BEGIN
DECLARE @new_sessionid varchar(36), @trys int, @chars varchar(100), @UPPER int, @LOWER int;
SELECT @chars = '012KLMN34STUVWEFGHIJXYZ567OPQR89ABCD';
SELECT @UPPER = LEN(@chars), @LOWER = 1;
INSERT INTO @RET
SELECT * FROM (SELECT TOP(20) SUBSTRING(SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1) + SUBSTRING(@chars, [dbo].[ott_random_int](@UPPER,@LOWER), 1), 1, @digits) as id FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20)) vl(id))z WHERE LEN(id) = @digits;
RETURN
END
+43
View File
@@ -0,0 +1,43 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_b10]
(
@string varchar(10)
)
RETURNS int
AS
BEGIN
DECLARE @RET int;
DECLARE @str VARCHAR(10) = REVERSE(LOWER(@string));
WITH Split(stpos,endpos) AS(
SELECT 1 AS stpos, 2 AS endpos
UNION ALL
SELECT endpos, endpos+1
FROM Split
WHERE endpos <= LEN(@str)
)
, c as (
SELECT
'character' = SUBSTRING(@str,stpos,COALESCE(NULLIF(endpos,0),LEN(@str)+1)-stpos)
,'charindex' = stpos
FROM Split
)
, s as (
SELECT
*
,'num' = ASCII(character) - ASCII('a') + 1
,'fac' = POWER(26,([charindex] -1))
,'val' = POWER(26,([charindex] -1)) * (ASCII(character) - ASCII('a') + 1)
FROM c
)
select @RET = SUM([val]) FROM s;
RETURN @RET;
END
+38
View File
@@ -0,0 +1,38 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_b26]
(
@number int
)
RETURNS varchar(10)
AS
BEGIN
DECLARE @RET varchar(10)
/*
SELECT
*,
LetterCode =
Coalesce((SELECT Char(65 + (N.Num - 475255) / 456976 % 26) WHERE N.Num >= 475255), '')
+ Coalesce((SELECT Char(65 + (N.Num - 18279) / 17576 % 26) WHERE N.Num >= 18279), '')
+ Coalesce((SELECT Char(65 + (N.Num - 703) / 676 % 26) WHERE N.Num >= 703), '')
+ Coalesce((SELECT Char(65 + (N.Num - 27) / 26 % 26) WHERE N.Num >= 27), '')
+ (SELECT Char(65 + (N.Num - 1) % 26))
FROM (VALUES(18931)) as N(Num)
ORDER BY N.Num
*/
SET @RET = LOWER(
Coalesce((SELECT Char(65 + (@number - 475255) / 456976 % 26) WHERE @number >= 475255), '')
+ Coalesce((SELECT Char(65 + (@number - 18279) / 17576 % 26) WHERE @number >= 18279), '')
+ Coalesce((SELECT Char(65 + (@number - 703) / 676 % 26) WHERE @number >= 703), '')
+ Coalesce((SELECT Char(65 + (@number - 27) / 26 % 26) WHERE @number >= 27), '')
+ (SELECT Char(65 + (@number - 1) % 26))
);
RETURN @RET;
END
@@ -0,0 +1,30 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_csv_contains]
(
@text varchar(500)
,@fragment varchar(500)
)
RETURNS bit
AS
BEGIN
DECLARE @RET bit;
IF ISNULL(@text, '') = '' OR ISNULL(@fragment, '') = ''
SET @REt = 0;
ELSE
BEGIN
-- Will be true
-- if any of the fragments exist in the list of text-items
WITH texts as (SELECT * FROM string_split(ISNULL(@text,''), ','))
,fragments as (SELECT * FROM string_split(ISNULL(@fragment,''), ','))
SELECT @RET = CASE WHEN EXISTS (SELECT * FROM texts JOIN fragments ON texts.[value] = fragments.[value]) THEN 1 ELSE 0 END;
END;
RETURN @RET;
END
@@ -0,0 +1,36 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_jcontent]
(
@groupcode varchar(10)
,@text varchar(4000)
)
RETURNS varchar(4000)
AS
BEGIN
DECLARE @RET varchar(4000);
DECLARE @textinput varchar(4000) = REPLACE(ISNULL(@text, ''), ' ', '');
IF (@textinput = '' OR @textinput = '{}')
BEGIN
SET @RET = 0;
END
ELSE
BEGIN
DECLARE @Pattern varchar(20) = '%"' + @groupcode + '":"%';
DECLARE @P0 int = PATINDEX(@pattern, @textinput);
DECLARE @P1 int = @P0 + LEN(@pattern) -2;
DECLARE @P2 int = CHARINDEX('"',@textinput,@p1);
SELECT @RET = CASE WHEN @P0 = 0 THEN '' ELSE SUBSTRING(@textinput, @P1, @P2 - @P1) END;
END
RETURN @RET;
END
@@ -0,0 +1,52 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_jcsv_contains]
(
@groupcode varchar(10)
,@text varchar(4000)
,@fragment varchar(500)
)
RETURNS bit
AS
BEGIN
DECLARE @RET bit;
DECLARE @textinput varchar(4000) = REPLACE(ISNULL(@text, ''), ' ', '');
IF (@textinput = '' OR @textinput = '{}' OR @fragment = '')
BEGIN
SET @RET = 0;
END
ELSE
BEGIN
-- Will be true
-- if any of the fragments exist in the list of text-items
DECLARE @Pattern varchar(20) = '%"' + @groupcode + '":"%';
DECLARE @P0 int = PATINDEX(@pattern, @textinput);
DECLARE @P1 int = @P0 + LEN(@pattern) -2;
DECLARE @P2 int = CHARINDEX('"',@textinput,@p1);
IF @P0 = 0
BEGIN
SET @RET = 0;
END
ELSE
BEGIN
DECLARE @text2 varchar(4000) = SUBSTRING(@textinput, @P1, @P2 - @P1);
WITH texts as (SELECT * FROM string_split(ISNULL(@text2,''), ','))
,fragments as (SELECT * FROM string_split(ISNULL(@fragment,''), ','))
SELECT @RET = CASE WHEN EXISTS (SELECT * FROM texts JOIN fragments ON texts.[value] = fragments.[value]) THEN 1 ELSE 0 END;
END
END
RETURN @RET;
END
@@ -0,0 +1,38 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_jcsv_containskey]
(
@groupcode varchar(10)
,@text varchar(4000)
)
RETURNS bit
AS
BEGIN
DECLARE @RET bit;
DECLARE @textinput varchar(4000) = REPLACE(ISNULL(@text, ''), ' ', '');
IF (@textinput = '' OR @textinput = '{}')
BEGIN
SET @RET = 0;
END
ELSE
BEGIN
-- Will be true
-- if any of the fragments exist in the list of text-items
DECLARE @Pattern varchar(20) = '%"' + @groupcode + '":"%';
DECLARE @P0 int = PATINDEX(@pattern, @textinput);
SET @RET = Case WHEN @P0 = 0 THEN 0 ELSE 1 END;
END
RETURN @RET;
END
+28
View File
@@ -0,0 +1,28 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_max]
(
@val1 int,
@val2 int
)
RETURNS int
AS
BEGIN
DECLARE @RES int;
IF @val1 is null and @val2 is not null
SET @val1 = @val2
IF @val2 is null and @val1 is not null
SET @val2 = @val1
IF @val1 is null and @val2 is null
SELECT @val1 = 0, @val2 = 0;
SELECT @RES = CASE WHEN @val1 > @val2 THEN @val1 ELSE @val2 END;
RETURN @RES;
END
@@ -0,0 +1,28 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_max_float]
(
@val1 float,
@val2 float
)
RETURNS float
AS
BEGIN
DECLARE @RES float;
IF @val1 is null and @val2 is not null
SET @val1 = @val2
IF @val2 is null and @val1 is not null
SET @val2 = @val1
IF @val1 is null and @val2 is null
SELECT @val1 = 0, @val2 = 0;
SELECT @RES = CASE WHEN @val1 > @val2 THEN @val1 ELSE @val2 END;
RETURN @RES;
END
@@ -0,0 +1,28 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_merge_csv]
(
@inp1 varchar(2000)
,@inp2 varchar(2000)
)
RETURNS varchar(4000)
AS
BEGIN
DECLARE @ret varchar(4000);
with sp as(
SELECT [value] FROM string_split(@inp1,',')
UNION
SELECT [value] FROM string_split(@inp2,',')
), sp2 as (
SELECT DISTINCT [value] FROM sp where ISNULL([value], '') <> ''
)
SELECT @ret = ISNULL(STRING_AGG([value], ','),'')
FROM sp2;
RETURN @ret;
END
+29
View File
@@ -0,0 +1,29 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_min]
(
@val1 int,
@val2 int
)
RETURNS int
AS
BEGIN
DECLARE @RES int;
IF @val1 is null and @val2 is not null
SET @val1 = @val2
IF @val2 is null and @val1 is not null
SET @val2 = @val1
IF @val1 is null and @val2 is null
SELECT @val1 = 0, @val2 = 0;
SELECT @RES = CASE WHEN @val1 < @val2 THEN @val1 ELSE @val2 END;
RETURN @RES;
END
@@ -0,0 +1,28 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_min_date]
(
@val1 date,
@val2 date
)
RETURNS date
AS
BEGIN
DECLARE @RES date;
IF @val1 is null and @val2 is not null
SET @val1 = @val2
IF @val2 is null and @val1 is not null
SET @val2 = @val1;
SELECT @RES = CASE WHEN @val1 is null and @val2 is null THEN NULL WHEN @val1 < @val2 THEN @val1 ELSE @val2 END;
RETURN @RES;
END
@@ -0,0 +1,29 @@
-- =============================================
-- Author: Dr. Stefan Ott
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[ott_min_float]
(
@val1 float,
@val2 float
)
RETURNS float
AS
BEGIN
DECLARE @RES float;
IF @val1 is null and @val2 is not null
SET @val1 = @val2
IF @val2 is null and @val1 is not null
SET @val2 = @val1
IF @val1 is null and @val2 is null
SELECT @val1 = 0, @val2 = 0;
SELECT @RES = CASE WHEN @val1 < @val2 THEN @val1 ELSE @val2 END;
RETURN @RES;
END

Some files were not shown because too many files have changed in this diff Show More