From 628802db19ec7a74449f11c097879ccbc112b150 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sat, 18 Jul 2026 18:01:24 +0200 Subject: [PATCH] Add function to retrieve company address as JSON and update invoice procedures - Created a new function `fds__getCompanyAddressJson` to return a company's postal address as a structured JSON object. - Modified stored procedures `fds__createInvoice`, `fds__setInvoice`, and `fds__prepInvoice` to include a new parameter `@SendToAddressJson` for handling the address data. - Updated the invoice table and user-defined types to accommodate the new `SendToAddressJson` field. - Ensured that the address data is properly retrieved and stored in the invoice records. --- Fuchs.Tests/ERechnungMapperTests.cs | 123 +++++ Fuchs.Tests/InvoiceDraftServiceTests.cs | 31 ++ Fuchs.Tests/InvoiceRecipientAddressTests.cs | 104 ++++ Fuchs/Docs/ARCHITECTURE.md | 7 +- Fuchs/Docs/Concepts/erechnung-output.md | 72 +++ ...2-erechnung-single-pdfa-engine-pipeline.md | 81 +++ Fuchs/Docs/INVOICE_LIFECYCLE.md | 12 +- Fuchs/Docs/Neuerungen_Fuchs_Intranet.html | 489 ++++++++++++++++++ Fuchs/Docs/Neuerungen_Fuchs_Intranet.pptx | Bin 0 -> 270337 bytes Fuchs/Fuchs.csproj | 1 + Fuchs/Program.cs | 3 + Fuchs/Services/ERechnungMapper.cs | 227 ++++++++ Fuchs/Services/ERechnungService.cs | 88 ++++ Fuchs/Services/ERechnungSettings.cs | 50 ++ Fuchs/Services/FuchsPdfService.cs | 23 + Fuchs/Services/IPdfService.cs | 6 + Fuchs/Services/InvoiceDraftEditService.cs | 29 +- Fuchs/Services/InvoiceRecipientAddress.cs | 130 +++++ Fuchs/Services/InvoiceService.cs | 21 +- Fuchs/appsettings.json | 9 + Fuchs/code/FdsInvoiceData.cs | 29 ++ Fuchs/code/FuchsPdf.cs | 16 +- Fuchs/js/intranet/modules/fis.inv_shared.js | 77 +++ Fuchs/js/intranet/modules/fis.inv_shared.scss | 19 + Fuchs/wwwroot/web/fis.inv.css | 18 + Fuchs/wwwroot/web/fis.inv.de.js | 77 +++ Fuchs/wwwroot/web/fis.inv.de.min.js | 2 +- Fuchs/wwwroot/web/fis.inv.min.css | 2 +- Fuchs/wwwroot/web/fis.req.css | 18 + Fuchs/wwwroot/web/fis.req.de.js | 77 +++ Fuchs/wwwroot/web/fis.req.de.min.js | 2 +- Fuchs/wwwroot/web/fis.req.min.css | 2 +- Fuchs/wwwroot/web/tools.js | 5 +- .../Functions/fds__getCompanyAddressJson.sql | 41 ++ .../Stored Procedures/fds__createInvoice.sql | 6 +- .../dbo/Stored Procedures/fds__getInvoice.sql | 1 + .../Stored Procedures/fds__prepInvoice.sql | 1 + .../dbo/Stored Procedures/fds__setInvoice.sql | 7 +- Fuchs_Database/dbo/Tables/fds__invoices.sql | 1 + .../fds__tt__invoice_base.sql | 1 + OCORE | 2 +- OCORE_Charting | 2 +- OCORE_web | 2 +- OCORE_web_pdf | 2 +- eRechnungLib | 2 +- 45 files changed, 1892 insertions(+), 26 deletions(-) create mode 100644 Fuchs.Tests/ERechnungMapperTests.cs create mode 100644 Fuchs.Tests/InvoiceRecipientAddressTests.cs create mode 100644 Fuchs/Docs/Concepts/erechnung-output.md create mode 100644 Fuchs/Docs/Decisions/0012-erechnung-single-pdfa-engine-pipeline.md create mode 100644 Fuchs/Docs/Neuerungen_Fuchs_Intranet.html create mode 100644 Fuchs/Docs/Neuerungen_Fuchs_Intranet.pptx create mode 100644 Fuchs/Services/ERechnungMapper.cs create mode 100644 Fuchs/Services/ERechnungService.cs create mode 100644 Fuchs/Services/ERechnungSettings.cs create mode 100644 Fuchs/Services/InvoiceRecipientAddress.cs create mode 100644 Fuchs_Database/dbo/Functions/fds__getCompanyAddressJson.sql diff --git a/Fuchs.Tests/ERechnungMapperTests.cs b/Fuchs.Tests/ERechnungMapperTests.cs new file mode 100644 index 0000000..ce149ba --- /dev/null +++ b/Fuchs.Tests/ERechnungMapperTests.cs @@ -0,0 +1,123 @@ +using System.Collections.Generic; +using System.Text; +using eRechnungLib.Model.CodeLists; +using eRechnungLib.Profiles; +using Fuchs.intranet; +using Fuchs.Services; +using Newtonsoft.Json.Linq; +using Xunit; +using static OCORE.OCORE_dictionaries; + +namespace Fuchs.Tests; + +/// +/// Verifies the FdsInvoiceData → EN 16931 model mapping and the ZUGFeRD (EN 16931) hybrid +/// production: structured buyer, lines/totals, effortless B2C, and §13b reverse charge. See +/// ADR 0012. +/// +public class ERechnungMapperTests +{ + private static FdsInvoiceData BuildInvoice(string sendToAddressJson, string vat = "19", + string invoiceOptions = "", bool withItem = true) + { + var items = withItem + ? "[{'id':'900','type':'material','title':'Reparatur','desc':'Vor Ort','qty':2,'price_net':50,'total_net':100,'vat':'" + vat + "'}]" + : "[]"; + var jobj = JObject.Parse("{'req':[{'Id':'1','text':'Auftrag','items':" + items + "}]}"); + var inv = new FdsInvoiceData(jobj) + { + InvoiceRegistration = new GenericObjectDictionary(new Dictionary + { + ["Id"] = "42", + ["InvoiceId"] = "R2026-0007", + ["InvoiceTitle"] = "Rechnung", + ["DateCreated"] = "2026-07-17 10:00:00", + ["InvoiceOptions"] = invoiceOptions, + ["InvoiceBalance_net"] = "100", + ["InvoiceVAT_1"] = vat, + ["SendToAddressJson"] = sendToAddressJson, + }) + }; + return inv; + } + + private const string B2BAddress = + "{'name':'Muster GmbH','street':'Hauptstr. 1','postalCode':'40223','city':'Düsseldorf','countryCode':'DE','vatId':'DE123456789'}"; + + [Fact] + public void BuildEInvoice_MapsSellerBuyerAndLines_WithConsistentTotals() + { + var model = ERechnungMapper.BuildEInvoice(BuildInvoice(B2BAddress)).Model; + + Assert.Equal("Sebastian Fuchs GmbH & Co. KG", model.Seller.Name); + Assert.Equal("DE", model.Seller.Address.Country.Value); + Assert.Equal("Muster GmbH", model.Buyer.Name); + Assert.Equal("40223", model.Buyer.Address.PostalCode); + Assert.Equal("DE123456789", model.Buyer.VatId); + Assert.Equal("R2026-0007", model.InvoiceNumber); + + var line = Assert.Single(model.Lines); + Assert.Equal(100m, line.NetAmount); + Assert.Equal(VatCategoryCode.StandardRate, line.VatCategory); + Assert.NotNull(model.Totals); + Assert.Equal(100m, model.Totals!.TaxExclusiveAmount); + Assert.Equal(19m, model.Totals.TaxTotalAmount); + Assert.Equal(119m, model.Totals.TaxInclusiveAmount); + } + + [Fact] + public void ToZugferd_EN16931_ProducesHybridPdfWithEmbeddedCii() + { + var einvoice = ERechnungMapper.BuildEInvoice(BuildInvoice(B2BAddress)); + var result = einvoice.ToZugferd(ZugferdProfile.EN16931); + + Assert.True(result.Success); + Assert.StartsWith("%PDF", Encoding.ASCII.GetString(result.Value!, 0, 4)); + // The CII XML is embedded and carries the invoice number. + string content = Encoding.Latin1.GetString(result.Value!); + Assert.Contains("CrossIndustryInvoice", content); + // No PDFA-ICC warning: the bundled sRGB profile is present, so the output intent is set. + Assert.DoesNotContain(result.Validation.Warnings, m => m.RuleId == "PDFA-ICC"); + } + + [Fact] + public void PrivatePerson_NoVatId_MapsWithoutBuyerTaxRegistration_AndProducesHybrid() + { + var b2c = "{'name':'Max Mustermann','street':'Weg 2','postalCode':'50667','city':'Köln','countryCode':'DE'}"; + var einvoice = ERechnungMapper.BuildEInvoice(BuildInvoice(b2c)); + + Assert.Null(einvoice.Model.Buyer.VatId); + var result = einvoice.ToZugferd(ZugferdProfile.EN16931); + Assert.True(result.Success); + Assert.StartsWith("%PDF", Encoding.ASCII.GetString(result.Value!, 0, 4)); + } + + [Fact] + public void ReverseCharge_13b_SetsCategoryAeAndExemptionReason() + { + var model = ERechnungMapper.BuildEInvoice(BuildInvoice(B2BAddress, vat: "0", invoiceOptions: "§13b")).Model; + + var line = Assert.Single(model.Lines); + Assert.Equal(VatCategoryCode.ReverseCharge, line.VatCategory); + Assert.Equal(0m, line.VatRate); + Assert.True(model.VatExemptionReasons.ContainsKey(VatCategoryCode.ReverseCharge)); + Assert.Equal(0m, model.Totals!.TaxTotalAmount); + } + + [Fact] + public void LumpSumInvoice_NoItems_SynthesisesSingleLineFromTotal() + { + var model = ERechnungMapper.BuildEInvoice(BuildInvoice(B2BAddress, withItem: false)).Model; + var line = Assert.Single(model.Lines); + Assert.Equal(100m, line.NetAmount); + Assert.Equal(119m, model.Totals!.TaxInclusiveAmount); + } + + [Theory] + [InlineData("DE", "DE")] + [InlineData("Deutschland", "DE")] + [InlineData("Österreich", "AT")] + [InlineData("", "DE")] + public void NormalizeCountry_MapsNamesAndCodes(string raw, string expected) + => Assert.Equal(expected, ERechnungMapper.NormalizeCountry(raw).Value); +} diff --git a/Fuchs.Tests/InvoiceDraftServiceTests.cs b/Fuchs.Tests/InvoiceDraftServiceTests.cs index 222836d..c870a82 100644 --- a/Fuchs.Tests/InvoiceDraftServiceTests.cs +++ b/Fuchs.Tests/InvoiceDraftServiceTests.cs @@ -84,6 +84,37 @@ public class InvoiceDraftServiceTests Assert.Equal(1, h.Version); } + [Fact] + public void ApplyPatch_StructuredAddress_ComposesFreeTextAndPersistsJson() + { + var (svc, _, _) = NewService(); + var s = svc.OpenFromPayload(Payload(), "user1"); + + var addr = JObject.Parse(@"{'name':'Muster GmbH','street':'Weg 1','postalCode':'40223','city':'Düsseldorf','countryCode':'DE','vatId':'DE123456789'}"); + var s2 = svc.ApplyPatch(s.Token, new InvoiceDraftDelta { Target = "address", Value = addr }); + + Assert.NotNull(s2); + // Free-text block is composed for the PDF / SendToAddress path. + Assert.Equal("Muster GmbH\nWeg 1\n40223 Düsseldorf", s2!.New["invoiceaddress"]!.Value()); + // Structured JSON rides inside the CustomValues blob (interim persistence). + var parsed = InvoiceRecipientAddress.FromCustomValues(s2.New["CustomValues"]!.Value()); + Assert.NotNull(parsed); + Assert.Equal("DE123456789", parsed!.VatId); + Assert.True(parsed.IsEn16931Conformant); + } + + [Fact] + public void ApplyPatch_Address_PlainString_KeepsLegacyFreeTextBehavior() + { + var (svc, _, _) = NewService(); + var s = svc.OpenFromPayload(Payload(), "user1"); + + var s2 = svc.ApplyPatch(s.Token, new InvoiceDraftDelta { Target = "address", Value = JToken.FromObject("Weg 9\n50667 Köln") }); + + Assert.Equal("Weg 9\n50667 Köln", s2!.New["invoiceaddress"]!.Value()); + Assert.Null(InvoiceRecipientAddress.FromCustomValues(s2.New["CustomValues"]?.Value())); + } + [Fact] public void ApplyPatch_BlockReplace_RecomputesTotals() { diff --git a/Fuchs.Tests/InvoiceRecipientAddressTests.cs b/Fuchs.Tests/InvoiceRecipientAddressTests.cs new file mode 100644 index 0000000..f580057 --- /dev/null +++ b/Fuchs.Tests/InvoiceRecipientAddressTests.cs @@ -0,0 +1,104 @@ +using Fuchs.Services; +using Newtonsoft.Json.Linq; +using Xunit; + +namespace Fuchs.Tests; + +/// +/// Pure-logic tests for the structured invoice recipient address: free-text composition for the +/// PDF, EN 16931 / DATEV conformity detection, effortless B2C (no VAT id), and JSON round-tripping +/// through the CustomValues blob. See ADR 0012. +/// +public class InvoiceRecipientAddressTests +{ + private static InvoiceRecipientAddress FullB2B() => new() + { + Name = "Muster GmbH", + Contact = "Frau Schmidt", + Street = "Hauptstraße 1", + PostalCode = "40223", + City = "Düsseldorf", + CountryCode = "DE", + VatId = "DE123456789", + }; + + [Fact] + public void Compose_DomesticFullAddress_OmitsCountryLineAndVatId() + { + var text = FullB2B().Compose(); + Assert.Equal("Muster GmbH\nz.Hd. Frau Schmidt\nHauptstraße 1\n40223 Düsseldorf", text); + Assert.DoesNotContain("DE123456789", text); // VAT id never in the postal block + Assert.DoesNotContain("\nDE", text); // domestic country code suppressed + } + + [Fact] + public void Compose_ForeignCountry_AppendsCountryCodeLine() + { + var addr = FullB2B(); + addr.CountryCode = "AT"; + addr.City = "Wien"; + addr.PostalCode = "1010"; + Assert.EndsWith("1010 Wien\nAT", addr.Compose()); + } + + [Fact] + public void PrivatePerson_NoVatId_IsB2CAndStillEn16931Conformant() + { + var addr = new InvoiceRecipientAddress + { + Name = "Max Mustermann", + Street = "Weg 2", + PostalCode = "50667", + City = "Köln", + CountryCode = "DE", + // no VatId + }; + Assert.True(addr.IsPrivatePerson); + Assert.True(addr.IsEn16931Conformant); + Assert.Empty(addr.MissingForEn16931()); + } + + [Theory] + [InlineData("", "DE", "Köln", new[] { "Name" })] + [InlineData("Firma", "", "Köln", new[] { "Land" })] + [InlineData("Firma", "DE", "", new[] { "Ort/PLZ" })] + public void MissingForEn16931_FlagsMandatoryGaps(string name, string country, string city, string[] expected) + { + var addr = new InvoiceRecipientAddress { Name = name, CountryCode = country, City = city }; + Assert.Equal(expected, addr.MissingForEn16931()); + Assert.False(addr.IsEn16931Conformant); + } + + [Fact] + public void FromJson_AcceptsAlternateKeys() + { + var addr = InvoiceRecipientAddress.FromJson(JObject.Parse( + @"{'name':'X','plz':'12345','ort':'Ort','country':'de','ustid':'DE9'}")); + Assert.Equal("12345", addr.PostalCode); + Assert.Equal("Ort", addr.City); + Assert.Equal("DE", addr.CountryCode); // uppercased + Assert.Equal("DE9", addr.VatId); + } + + [Fact] + public void FromCustomValues_RoundTripsThroughTheBlob() + { + var cv = new JObject + { + ["contactName"] = "someone", + [InvoiceRecipientAddress.CustomValuesKey] = FullB2B().ToJson(), + }; + var parsed = InvoiceRecipientAddress.FromCustomValues(cv.ToString()); + Assert.NotNull(parsed); + Assert.Equal("Muster GmbH", parsed!.Name); + Assert.Equal("DE123456789", parsed.VatId); + } + + [Fact] + public void FromCustomValues_ReturnsNull_WhenNoStructuredAddressPresent() + { + Assert.Null(InvoiceRecipientAddress.FromCustomValues(@"{'contactName':'x'}")); + Assert.Null(InvoiceRecipientAddress.FromCustomValues("")); + Assert.Null(InvoiceRecipientAddress.FromCustomValues("not json")); + } +} diff --git a/Fuchs/Docs/ARCHITECTURE.md b/Fuchs/Docs/ARCHITECTURE.md index 1116d74..efa71b7 100644 --- a/Fuchs/Docs/ARCHITECTURE.md +++ b/Fuchs/Docs/ARCHITECTURE.md @@ -168,7 +168,12 @@ OCORE_Charting (standalone — referenced by solution but no direct project ref ### 4.3 Service Layer (Dependency Injection) Business logic lives in **DI-registered services** under `Fuchs/Services/` behind interfaces, injected into `IntranetController`: -`IComService`, `IPdfService`, `IInvoiceService`, `IReminderService`, `IReportService`, `IWidgetService`, `IBankingService`, `IMfrClientFactory`, `ISystemStatusService`. +`IComService`, `IPdfService`, `IInvoiceService`, `IReminderService`, `IReportService`, `IWidgetService`, `IBankingService`, `IMfrClientFactory`, `ISystemStatusService`, `IERechnungService`. + +`IERechnungService` (singleton) maps a finalized invoice to the EN 16931 model and embeds the +CII XML into the render-only visual PDF to produce a ZUGFeRD/Factur-X **PDF/A-3** hybrid via the +`eRechnungLib` submodule (gated by `Fuchs:ERechnung:Enabled`; falls back to the plain PDF/A on +disable/failure). See [`Concepts/erechnung-output.md`](Concepts/erechnung-output.md) and ADR 0012. Stateless services (`IPdfService`, `IBankingService`, `IMfrClientFactory`) are singletons; DB/request-scoped services are scoped (see `Program.cs`). The **Admin** module (`Do_Process_Admin`, `ISystemStatusService`) surfaces a live system-status/diagnostics page (host, SQL/Key Vault/blob/MFR connectivity, email config, test-email) restricted to `fds_sys` > 4 — see ADR [0011](Decisions/0011-admin-module-system-status.md) and the [concept doc](Concepts/admin-system-status.md). `FdsInvoiceData` / `FdsReminderData` are now **pure data holders** (parse + properties); loading, persistence and PDF generation live in the services (fully async — no `Task.Run(...).Wait()`). diff --git a/Fuchs/Docs/Concepts/erechnung-output.md b/Fuchs/Docs/Concepts/erechnung-output.md new file mode 100644 index 0000000..92bf4c7 --- /dev/null +++ b/Fuchs/Docs/Concepts/erechnung-output.md @@ -0,0 +1,72 @@ +--- +status: Active +lastUpdated: 2026-07-18 +applyTo: + - "Fuchs/Services/ERechnungMapper.cs" + - "Fuchs/Services/ERechnungService.cs" + - "Fuchs/Services/ERechnungSettings.cs" + - "Fuchs/Services/InvoiceRecipientAddress.cs" + - "Fuchs/Services/InvoiceService.cs" + - "Fuchs/code/FuchsPdf.cs" + - "eRechnungLib/**" +relatedDecisions: + - "0005-pdf-generation-and-erechnung.md" + - "0012-erechnung-single-pdfa-engine-pipeline.md" +--- + +# eRechnung output (ZUGFeRD/Factur-X) + +## Summary +Finalized invoices are emitted as a **ZUGFeRD 2.4 / Factur-X** hybrid: the FuchsPdf visual PDF +with the EN 16931 **CII XML** embedded, in a formally conformant **PDF/A-3**. This makes invoices +DATEV-ingestible and satisfies the B2B/B2G e-invoicing mandate. The library doing the structured +XML + PDF/A-3 work is the `eRechnungLib` submodule; Fuchs supplies the invoice data and the visual +PDF. + +## How it works + +``` +Editor (structured recipient dialog) + → InvoiceDraftEditService (address delta = JSON object, stored in CustomValues.sendToAddress) + → fds__setInvoice/… (persisted; dedicated SendToAddressJson column + composed SendToAddress) + → InvoiceService.RenderInvoicePdfBytesAsync(final) + ├─ FuchsPdf.DocToPdfBytesRaw(doc) → visual PDF (no Spire PDF/A) + └─ IERechnungService.TryBuildHybridPdf + ├─ ERechnungMapper.BuildEInvoice FdsInvoiceData → eRechnungLib.Model.Invoice + └─ EInvoice.ToZugferd(EN16931, raw) → PDF/A-3 + Factur-X hybrid (bundled sRGB ICC) +``` + +- **Single PDF/A engine (ADR 0012).** eRechnungLib owns the one PDF/A-3 layer. For the eRechnung + path the Spire PDF/A step is skipped (`DocToPdfBytesRaw`); Spire stays only for on-screen preview + rasterisation. This avoids a conflicting second output intent / `pdfaid` marker. +- **Structured recipient address.** `InvoiceRecipientAddress` holds the EN 16931 buyer fields + (name, street, post code, city, country BT-55, optional VAT id BT-48). It is edited via a + dialog form (`$inv.eAddress` in `fis.inv_shared.js`), prefilled from `fds__prepInvoice`'s + `invoiceaddressData`, and carried as a JSON object through the draft cache. A private person + (no VAT id) is fully valid — B2C stays effortless. The free-text `SendToAddress` is composed + from it so the PDF layout is unchanged. +- **Mapping.** `ERechnungMapper` maps the Fuchs invoice to the EN 16931 model: seller = Fuchs + (constants mirroring the FuchsPdf letterhead — name, Steuernummer BT-32, IBAN/BIC), buyer = + the structured recipient, lines from the invoice items, §13b → reverse charge (category AE + + exemption reason). VAT breakdown and totals are recomputed by the library. +- **Feature flag & fallback.** Emission is gated by `Fuchs:ERechnung:Enabled` (off until fully + validated). `IERechnungService` returns `null` on disable **or any failure**, so + `RenderInvoicePdfBytesAsync` falls back to the plain Spire PDF/A — invoicing never breaks. +- **Formal verification.** `Fuchs:ERechnung:Validation:ServiceUrl` is the seam for an external + online veraPDF (PDF/A-3) + ZUGFeRD validator; until the URL is provisioned, verification is + reported as not-configured. + +## Key files +- `Fuchs/Services/InvoiceRecipientAddress.cs` — structured buyer address, composition, conformity. +- `Fuchs/Services/ERechnungMapper.cs` — `FdsInvoiceData` → `eRechnungLib.Model.Invoice`. +- `Fuchs/Services/ERechnungService.cs` / `ERechnungSettings.cs` — hybrid production + config. +- `Fuchs/Services/InvoiceService.cs` — wiring in `RenderInvoicePdfBytesAsync`. +- `Fuchs/code/FuchsPdf.cs` — `DocToPdfBytesRaw` (render-only visual PDF). +- `Fuchs/js/intranet/modules/fis.inv_shared.js` — `$inv.eAddress` structured dialog. +- `Fuchs_Database` — `fds__invoices.SendToAddressJson`, `fds__getCompanyAddressJson`, + `fds__prepInvoice.invoiceaddressData`, `fds__createInvoice`/`setInvoice`/`getInvoice`. +- `eRechnungLib/**` — CII/UBL serialization, EN 16931 validation, `FacturXPdfBuilder` (PDF/A-3). + +## Related decisions +- [`0005-pdf-generation-and-erechnung.md`](../Decisions/0005-pdf-generation-and-erechnung.md) +- [`0012-erechnung-single-pdfa-engine-pipeline.md`](../Decisions/0012-erechnung-single-pdfa-engine-pipeline.md) diff --git a/Fuchs/Docs/Decisions/0012-erechnung-single-pdfa-engine-pipeline.md b/Fuchs/Docs/Decisions/0012-erechnung-single-pdfa-engine-pipeline.md new file mode 100644 index 0000000..3ab9ce5 --- /dev/null +++ b/Fuchs/Docs/Decisions/0012-erechnung-single-pdfa-engine-pipeline.md @@ -0,0 +1,81 @@ +--- +status: Accepted +date: 2026-07-17 +applyTo: + - "Fuchs/code/FuchsPdf.cs" + - "Fuchs/Services/FuchsPdfService.cs" + - "Fuchs/Services/InvoiceService.cs" + - "Fuchs/Services/ERechnungSettings.cs" + - "eRechnungLib/**" +supersededBy: "" +--- + +# 0012 — eRechnung uses a single PDF/A engine (eRechnungLib owns PDF/A-3) + +## Context +ADR 0005 established that invoices are emitted as eRechnung by embedding the CII +XML into the FuchsPdf-rendered visual PDF via `eRechnungLib.ToZugferd(...)`. + +Two hard requirements then surfaced: the emitted invoice must (a) satisfy the +**ZUGFeRD 2.4 / Factur-X** standard for **DATEV** ingestion, and (b) be a +**formally verifiable PDF/A-3** (veraPDF-clean). + +A conflict became apparent in the rendering pipeline. `FuchsPdf.DocToPdfBytes` +post-processes its MigraDoc/PdfSharp output to **PDF/A via Spire** +(`OCORE…pdfAFileContent`). `eRechnungLib`'s `FacturXPdfBuilder` **also** produces +a PDF/A layer (raises to PDF 1.7, writes `pdfaid` XMP, adds an sRGB output +intent, embeds `factur-x.xml` in `/AF`). Feeding a Spire-made PDF/A into +eRechnungLib stacks **two** PDF/A conversions → duplicate/*conflicting* output +intents and `pdfaid` markers, which veraPDF rejects. Spire's output is also +PDF/A-1/2 and does **not** carry the `/AF` associated-file structure ZUGFeRD +requires (PDF/A-3). + +Separately, `eRechnungLib` shipped **no** sRGB ICC profile, so its output intent +was silently omitted (`PDFA-ICC` warning) — never formally PDF/A-3 conformant. + +## Decision +- **eRechnungLib is the single PDF/A engine for eRechnung output.** The invoice + visual PDF is rendered by `FuchsPdf` **without** the Spire PDF/A step and handed + to `eRechnungLib.ToZugferd(ZugferdProfile.EN16931, rawPdfBytes)`, which owns the + one PDF/A-3 conversion and embeds the CII XML. The render-only path is + `FuchsPdf.DocToPdfBytesRaw` / `IPdfService.DocToPdfBytesRaw` (fonts still + embedded via `OCOREFontResolver`, no PDF/A post-processing). +- **Spire stays only for on-screen preview rasterisation** (`DocToImageCollection` + / `BytesToImageCollection` for `sprep`/`sedit`). It is **not** part of the + eRechnung file's PDF/A path. `DocToPdfBytes` (render + Spire PDF/A) is unchanged + and remains the path for non-eRechnung documents (e.g. reminders). +- **A bundled sRGB ICC profile is required.** `eRechnungLib` ships + `Resources/Color/sRGB.icc` (sRGB IEC61966-2.1) so the PDF/A output intent is + always attached. A caller may override it per conversion via + `ConversionOptions.IccProfile`. +- **Profile is EN 16931.** MINIMUM / BASIC WL are not offered for real invoices — + DATEV needs at least EN 16931 (COMFORT) for full booking. +- **Formal conformance is verified by an external online service** (veraPDF for + PDF/A-3 + a ZUGFeRD/EN 16931 validator), behind the configurable + `Fuchs:ERechnung:Validation:ServiceUrl` seam. Until the URL is provisioned, + verification reports "not configured / skipped". + +## Consequences +- The eRechnung invoice PDF and a plain Spire PDF/A must never both be produced + for the same document — pick the render-only path when emitting eRechnung. +- The incoming visual PDF must itself be PDF/A-friendly (fonts embedded — + handled; letterhead images must be **RGB, not CMYK**; transparency is allowed + because we target PDF/A-**3**). +- `Fuchs:ERechnung:Enabled` gates emission and stays `false` until the + `FdsInvoiceData` → `eRechnungLib.Model.Invoice` mapping is wired (the ADR 0005 + follow-up). Open item for that mapping: the buyer address is currently a + free-text block (`SendToAddress`); EN 16931 needs **structured** buyer + fields (name/postcode/city/country, VAT id), so structured customer master + data must feed the mapping. Seller data (currently hard-coded in `FuchsPdf`: + name, address, tax number, IBAN/BIC) must be lifted into the seller model. +- `Fuchs.csproj` must add a project reference to `eRechnungLib` when the flow is + wired (not present yet). + +## Alternatives considered +- **Keep Spire PDF/A and have eRechnungLib only embed the XML:** rejected — Spire + produces the wrong PDF/A part (1/2, no `/AF`) and a second conversion collides + with eRechnungLib's own output intent/XMP, failing veraPDF. +- **Drop Spire entirely:** rejected — Spire is still needed to rasterise PDFs to + the on-screen invoice/reminder preview images; PdfSharp/eRechnungLib cannot. +- **Ship no ICC and rely on callers:** rejected — formal PDF/A-3 requires an + output intent; bundling a profile makes conformance the default. diff --git a/Fuchs/Docs/INVOICE_LIFECYCLE.md b/Fuchs/Docs/INVOICE_LIFECYCLE.md index 5b57322..664295f 100644 --- a/Fuchs/Docs/INVOICE_LIFECYCLE.md +++ b/Fuchs/Docs/INVOICE_LIFECYCLE.md @@ -90,8 +90,12 @@ payload; see `EVAL_live_invoice_editing.md` for the rationale. ### 4.1 What the user can change - **Line items** — quantities, prices, notes, combine into one sum (`$inv.rendersrq`, `$inv.quantChange`). -- **Recipient fields** — invoice title, address, email, provision - location/period (inline edit fields, `fm(...)` helper in `fis.inv_shared.js`). +- **Recipient fields** — invoice title, email, provision location/period (inline + edit fields, `fm(...)` helper in `fis.inv_shared.js`). The **recipient address** + is edited via a **structured dialog** (`$inv.eAddress`: name, street, PLZ, city, + country, optional VAT id) prefilled from `fds__prepInvoice`'s `invoiceaddressData`; + it drives the EN 16931 eRechnung and composes the free-text `SendToAddress` for the + PDF (see [`Concepts/erechnung-output.md`](Concepts/erechnung-output.md)). - **§13b reverse-charge** toggle (`$inv.sp13b`) — suppresses VAT lines/columns. - **Set-pricing display mode** (`$inv.ssetmode` / `setSetmode`) — `SetPrice` (default) / `SetOnly`; see `INVOICE_SET_PRICING.md`. Purely presentational @@ -360,6 +364,10 @@ flowchart TD - **Draft vs. final changes the rendered PDF**: draft = watermark overlay, no GiroCode; final = no watermark, GiroCode payment QR added when there's a positive balance. +- **Final invoices can be emitted as eRechnung**: when `Fuchs:ERechnung:Enabled`, + the final PDF is a ZUGFeRD/Factur-X **PDF/A-3 hybrid** (eRechnungLib embeds the + CII XML into the render-only visual PDF; any failure falls back to the plain + PDF/A). Off by default. See [`Concepts/erechnung-output.md`](Concepts/erechnung-output.md). - **Email is best-effort and tracked**: `IsSent` is only set `true` automatically after a *successful* send; a failed send still leaves a correctly finalised, stored invoice that staff can resend or mark sent diff --git a/Fuchs/Docs/Neuerungen_Fuchs_Intranet.html b/Fuchs/Docs/Neuerungen_Fuchs_Intranet.html new file mode 100644 index 0000000..66b3aba --- /dev/null +++ b/Fuchs/Docs/Neuerungen_Fuchs_Intranet.html @@ -0,0 +1,489 @@ + + + + + +Fuchs Intranet — Das ist neu + + + + +
+
+ Release-Übersicht · 2026 +

Ihr Intranet wird
schneller, sicherer, transparenter.

+

Die neue Generation des Fuchs Intranets bringt Live-Vorschau bei der Rechnungserstellung, Echtzeit-Rückmeldungen, gesetzeskonforme E-Rechnung und eine durchgängig geprüfte Datenverarbeitung — ohne dass sich Ihr gewohnter Arbeitsablauf verändert.

+
+
E-RechnungZUGFeRD / XRechnung inklusive
+
EchtzeitLive-Vorschau & Benachrichtigungen
+
.NET 10Moderne, geprüfte Plattform
+
+
+
+ + +
+
+
+ Das Wichtigste auf einen Blick +

Die neuen Funktionen für Ihren Alltag

+

Alle Neuerungen zielen auf dasselbe Ziel: weniger Fehler, mehr Überblick und Rechnungen, die auf Anhieb korrekt sind.

+
+
+ +
+
👁️
+

Live-Vorschau beim Bearbeiten

+

Während Sie eine Rechnung bearbeiten, sehen Sie das fertige PDF sofort in Echtzeit — genau so, wie es der Kunde erhält. Kein Zwischenspeichern, kein Raten mehr.

+ Rechnungen & Zahlungserinnerungen +
+ +
+
🧮
+

Alle Beträge serverseitig berechnet

+

Summen, Mehrwertsteuer, §13b-Umkehr und offene Beträge rechnet ab sofort der Server — geprüft und einheitlich. Der Bildschirm zeigt immer denselben Stand wie das PDF.

+ Keine Rechenfehler mehr +
+ +
+
🔔
+

Benachrichtigungen in Echtzeit

+

„Rechnung R2026-0001 wurde an den Kunden versandt." — Erfolg und Fehler erscheinen sofort als deutlich lesbare Meldung. Kein Nachschauen in Listen mehr.

+ Sofortiges Feedback +
+ +
+
🧾
+

Gesetzeskonforme E-Rechnung

+

Rechnungen werden als strukturierte E-Rechnung (ZUGFeRD 2.4 / Factur-X & XRechnung) in einem formal geprüften PDF/A-3 ausgegeben — DATEV-tauglich und die verpflichtende Form für den B2B- und Behördenversand.

+ ZUGFeRD 2.4 · PDF/A-3 · DATEV +
+ +
+
🕓
+

Änderungshistorie & Verwerfen

+

Jede Änderung an einem Entwurf wird protokolliert. Über „Änderungshistorie" sehen Sie, was passiert ist, und mit „Änderungen verwerfen" kehren Sie jederzeit zum gespeicherten Stand zurück.

+ Volle Nachvollziehbarkeit +
+ +
+
🏦
+

Mehr Bankformate

+

Kontoauszüge werden jetzt auch im modernen ISO-20022-Format (CAMT) automatisch erkannt und eingelesen — zusätzlich zum bewährten MT940. Das Format wird selbstständig erkannt.

+ CAMT + MT940 +
+ +
+
+
+ + +
+
+
+
+ Highlight +

Der Rechnungs-Editor, der mitdenkt

+

Früher rechnete der Browser — heute ist der Server die einzige verbindliche Quelle. Das klingt technisch, bedeutet für Sie aber vor allem: Was Sie sehen, stimmt. Immer.

+

Gilt für alle Rechnungsarten (Regel-, Abschlags-, Schluss- und Stornorechnung) und alle Mahnstufen — das Online-Bild und das PDF sind garantiert identisch, bis hin zur Positionsnummerierung.

+
+
+

Was der Editor jetzt automatisch tut

+
    +
  • Rechnet Netto, MwSt. und Brutto sofort korrekt neu
  • +
  • Prüft E-Mail, Adresse, Positionen und Steuersätze live
  • +
  • Erzeugt die PDF-Vorschau direkt aus dem aktuellen Stand
  • +
  • Nummeriert Positionen auch nach Umsortieren korrekt durch
  • +
  • Warnt rechtzeitig, bevor ein Entwurf abläuft
  • +
  • Speichert erst final, wenn Sie es bestätigen
  • +
+
+
+
+
+ + +
+
+
+ Der Online-Editor im Detail +

Rechnungen direkt im Browser erstellen

+

Der neue Rechnungs-Editor führt Sie Schritt für Schritt zur fertigen Rechnung — komfortabel zu bedienen und dabei jederzeit rechnerisch abgesichert. Er gilt für alle Rechnungsarten (Regel-, Abschlags-, Schluss- und Stornorechnung).

+
+ +
+
BEARBEITEN

Direkt im Feld

Texte und Positionen bearbeiten Sie direkt an Ort und Stelle — ein Klick genügt.

+
EMPFÄNGER

Adresse als Formular

Die Rechnungsadresse erfassen Sie strukturiert (Name, Straße, PLZ, Ort, Land, optional USt-IdNr.) — vorausgefüllt aus den Kundendaten. Ein Hinweis zeigt, ob alles für die DATEV-/E-Rechnung passt; für Privatpersonen bleibt die USt-IdNr. einfach leer.

+
ORDNEN

Blöcke & Reihenfolge

Positionen sind je Auftrag in Abschnitten gebündelt und lassen sich per Ziehen neu sortieren; die Nummerierung passt sich automatisch an.

+
RECHNEN

Summen & Steuer live

Netto, Mehrwertsteuer, Brutto und die §13b-Umkehr werden bei jeder Änderung sofort und geprüft neu berechnet.

+
PRÜFEN

Vorschau auf Knopfdruck

Die PDF-Vorschau entsteht direkt aus dem aktuellen Stand — was Sie sehen, ist exakt das, was der Kunde erhält.

+
+ + +
+
📦

Set-Preis: drei Wege, Positionen zusammenzufassen

+

Oft sollen mehrere Einzelpositionen zu einem Set-Preis zusammengefasst werden — etwa als Pauschale pro Auftrag. Dafür gibt es drei klar getrennte Funktionen. Bei allen bleibt die Rechnungssumme unverändert; die Set-Zeile trägt genau den Wert der zusammengefassten Positionen.

+ +
+ +
+
1
+

Einzelne Set-Position zusammenfassenZeilen-Schaltfläche · direkt an der Position

+

Für eine einzelne Set-Position: Der Set-Kopf übernimmt die Summe seiner zugehörigen Teilpositionen, deren Einzelpreise werden dann leer dargestellt (kein Preis, nicht 0,00 €).

+ Wirkt auf: eine markierte Set-Position + Einmalig — nicht per Klick umkehrbar +
+ +
+
2
+

„Set mit Preis"Menü · ganzer Auftragsblock

+

Für jeden Auftragsblock wird oben eine hervorgehobene Set-Zeile mit dem Gesamtwert des Blocks eingefügt. Die bisherigen Einzelpositionen bleiben sichtbar, jedoch ohne Einzelpreis (leeres Preisfeld). Die eingefügte Set-Zeile ist eine echte, nachträglich editierbare Position.

+ Wirkt auf: jeden Auftragsblock · Positionen bleiben erhalten + Einmalige Umwandlung +
+ +
+
3
+

„Nur Set mit Preis"Menü · ganzer Auftragsblock

+

Wie „Set mit Preis" — aber die Einzelpositionen werden vollständig entfernt. Es bleibt allein die eine Set-Zeile mit dem Gesamtpreis des Blocks stehen. Ideal für eine schlanke Pauschal-Darstellung.

+ Wirkt auf: jeden Auftragsblock · Positionen werden entfernt + Einmalige Umwandlung +
+ +
+ +
+ Gut zu wissen: Die beiden Menü-Varianten (2 & 3) sind bewusste, einmalige Umwandlungen — es gibt keinen Umschalter zurück. Möchten Sie den Ausgangszustand wiederherstellen, verwerfen Sie einfach den Entwurf („Änderungen verwerfen"), oder passen Sie die entstandene Set-Zeile von Hand an. In jedem Fall gilt: die Gesamtsumme ändert sich nicht, und die PDF-Ausgabe zeigt exakt dasselbe wie der Online-Editor. +
+
+
+
+ + +
+
+
+ Alt gegen Neu +

Was sich konkret verbessert hat

+

Ein direkter Vergleich der bisherigen Lösung mit der neuen Implementierung.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BereichBisher (Legacy)Neu
Rechnungs­vorschauKein Live-PDF — Ergebnis erst nach dem Speichern sichtbarEchtzeit-PDF-Vorschau schon während der Bearbeitung
BerechnungBeträge im Browser gerechnet — Abweichungen möglichAlle Werte serverseitig geprüft & einheitlich berechnet
RückmeldungenKeine aktive Meldung — Status nur durch NachschauenSofortige Erfolgs- und Fehlermeldungen in Echtzeit
Fehler im HintergrundNur im Protokoll — für den Nutzer unsichtbarWerden dem Nutzer verständlich angezeigt
RechnungsformatReines PDFZusätzlich gesetzeskonforme E-Rechnung (ZUGFeRD / XRechnung)
ÄnderungsverlaufNicht vorhandenVollständige Historie & gezieltes Verwerfen je Entwurf
KontoauszügeNur MT940MT940 und CAMT (ISO 20022) mit Auto-Erkennung
System-ÜberblickKein Einblick in den SystemzustandAdmin-/Status-Modul mit Live-Prüfungen (für berechtigte Nutzer)
PlattformÄltere VB-CodebasisModernes .NET 10 — schneller, gepflegt, umfangreich getestet
+
+
+
+ + +
+
+
+ Für den Key-User +

Mehr Kontrolle hinter den Kulissen

+

Diese Punkte betreffen vor allem Sie als Key-User — sie sorgen dafür, dass der Betrieb stabil, nachvollziehbar und überprüfbar bleibt.

+
+
+
+

Admin- & Status-Modul

+

Ein eigenes Modul zeigt den Zustand des Systems: Server, Datenbank, Schlüsseltresor, Speicher und die ERP-Anbindung werden live geprüft. Inklusive Test-E-Mail-Funktion — sichtbar nur für berechtigte Nutzer.

+
+
+

Durchgängige Nachvollziehbarkeit

+

Jeder wichtige Geschäftsvorfall — erstellt, versandt, importiert, fehlgeschlagen — wird als Ereignis erfasst und in verständliche Meldungen übersetzt.

+
+
+

Überwachung & Diagnose

+

Moderne Telemetrie (OpenTelemetry) misst Abläufe, Laufzeiten und Fehler. Probleme lassen sich damit früher erkennen und schneller eingrenzen.

+
+
+

Automatischer ERP-Abgleich

+

Der Abgleich mit dem ERP-System (mfr) läuft zuverlässig im Hintergrund direkt in der Anwendung — mit automatischer Wiederholung bei kurzzeitigen Störungen.

+
+
+

Sichere Konfiguration

+

Zugangsdaten liegen im zentralen Azure Key Vault. Eine Test-Schutzfunktion verhindert, dass in Test-Umgebungen versehentlich echte Kunden angeschrieben werden.

+
+
+

Umfassend getestet

+

Die Kernlogik ist durch eine breite, automatisierte Testabdeckung abgesichert — erfolgreiche wie fehlerhafte Abläufe werden geprüft, bevor Änderungen live gehen.

+
+
+
+
+ + +
+
+
+ Vertraut geblieben +

Was sich für Sie nicht ändert

+

Modernisiert wurde die Technik — nicht Ihre Arbeitsweise.

+
+
+
🗂️

Gewohnte Module

Rechnungen, Zahlungserinnerungen, Anfragen, Banking und Berichte finden Sie an denselben Stellen wie bisher.

+
📄

Vertrautes Layout

Briefkopf, Adressfenster und Rechnungslayout wurden 1:1 übernommen — Ihre Dokumente sehen aus wie gewohnt.

+
🔐

Gleiche Anmeldung

Login und Berechtigungen bleiben unverändert. Neue Funktionen erscheinen nur dort, wo Sie dafür berechtigt sind.

+
+
+
+ +
+
+

Fuchs Intranet — Neue Implementierung · Stand Juli 2026
+ Sebastian Fuchs Bad und Heizung GmbH & Co. KG · Bereitgestellt von ProcessWeb

+
+
+ + + diff --git a/Fuchs/Docs/Neuerungen_Fuchs_Intranet.pptx b/Fuchs/Docs/Neuerungen_Fuchs_Intranet.pptx new file mode 100644 index 0000000000000000000000000000000000000000..6af5cc687b24133b6c7f3dc9f5fcd096b58ab968 GIT binary patch literal 270337 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

3e!#?5lRwG)e&mI`XixPl4z=2 z4*D<~g(T5bS-4uMos&)UvT?LX{)|bSJlMu}o6#3|+PFh`b?4d>uYD5!>xG5SkH7N0 z+rRqs-}~jST3DdJD@k7M_d2?H)VD38IWJN)Cp3+ro>TUsF|jL4>|Yj(zVvz3;zSC4Kx~ANY|ae;K@&Fp{OM89WDvcn0C@rT z4{YZ?q8PR;*N<~R_z3&L)M3Ot#D8fEzj)?`%>p7=3_%bGN^dGgQ5$}OTlIm7>M{_iagg9#DNF54_z!qM!byEZW-;Rj{i-B#@+F%u+&bl7D-pN8~ z6IMbAg|Dgv>l}nVN2$Q`xE`F-t_OssvIwE~SBmvw3*{*DrB)e52W@?C3Yg90Fr9K$)#!Z?(2mEG?;x48mbkL?s`M zQa?dZGQyK@*(}BgpAdIq_4PG(gwx=}5zAY{zQ1I73A7-t`6P!|wO(OLJXUNFX}~C` z`$7D?;vw`i3gs^q>QyRoz_`QZQ5veX`R#9_K`dUld7?yYW^MrU8~ zY(?)Hp5h1bdPEkNvMt=`fFer!nHOv+g->Bp&g`e`>Kz-I{-%DQnEpO^&Mv5KG%L-<#)g{Ts1>Rts5bJA;$}79tkl$vjY_k*R&RxZDoX>g#zQ94 zOp#At{m?)9tFM0O7o)>krfbF0wJvd91T$uFKYvVten@V6=1I8>ZhKCehwik$4D?}6 zdrlwnPWwUo565MH8R$bq@r8qU-1Wn8*k1+$F^4^0K(R>Yhvcrm3@bQ&Bt21OWZXdyTlx`7tb|6iEW^41*yTx9y9b0 zJa4qTw8UbsHFwb->DJw$*|VLY=HaW;UqVqNqoZ%y9aaQt2@_sjLSOIQWuy`vj*rdjtRO^`uLs=B)9_@;=Ocmy5C1IBa>wO@|S+?KYt$vOMlU{QwN{^=7k0RP{t!B zZ|wf^fA|;6IP&N(dUv|9_N}o~OdE}o9{cHUd-_lR3m!>-(d^OPpLlER?vCx~Nw@!# zpX^^P9@T0{y)u?1(gni9Nh|oA)p|kjWn2_3%4;lLqDAQ{AX+b z)%z5tlKwD%vHy7*zg;*)V_%pMGD(du{PQ3GN)42tKaypl|Fydb-SN4e>@;z%-%|M8 z8`s~qut0ytz8>q@4`ECk+^0TX`cH8b%czfc{g}{2Y*>+~HTkNGAN$yk#c>d$ z-nt**y~PiK=yT%Gerb8_wQ(G(s5A9rM?2%=o9Hr;YH$C@r+>@oFD%fXNVUxug;!>C zP)u52f1{ZH`DCj7+b6z??O1kiAf`qgB@XC||M;`7Nv7KW{nfm;=(XIX=yT%G?tar3 zKATLnSHA9OXOmQ8T_z6lt-t%vKJ#y$U09$$k!oM~df}DX%a)R;_EUGhb}5-^U%n%B z5nF4lqr?GSd;JGKpG>v?@7+gVG@@GK&>CO&?k^@&?bpBmXlIjDn?A^2`rAMBEl<36 zVS)Zcs(q;~yfUL&If-h&{rzwH_GGGk!z)4;F{-hS5~+6JzW5i(RQvXSdh|sjswEEX zSKj$|UY|_0KmOm2b~Z`1>4SX7pM3Z~ehDWv{fSij^Z#9VWk$7164k!^)s;^qQ|%2` zUNdEfvW^m|_6MK4Q%|Paw=DABB1*+~XyVZR{JR(QWUBpP`Dka8RGU7?zx38W{e$2B zR|^aDCsOVItqQNqs8&s)+VA|_+kQ2fYEQiRi78ZL9VJrj&9C17*<`A{@f&$>$y7@m z+R6uB_?O94`_i`_?QD{2(+Bxy|NgHv?tb^e0{w|p`_pd|UYSv?mPEC``1P-EB~$HV zw$Mdvhq8_msrCa;f7(o@+E2gl=!-@aOdQ$=`rrJyWU9G$k9IamwdsTWsZWl7?^9PH zBH>S@+7I6sUYSvi;S5g73X}NR5qlrJB6Ja>S_CyY+1n%nbJUynPmjK6M76}BO(I}M zovr=G(at8RHhqwjFp5#Xd%qcbE3qB|p(%DLE^vM|GfZtPY%Ki3H!LhP-ay8q F{~w8UM3n#l literal 0 HcmV?d00001 diff --git a/Fuchs/Fuchs.csproj b/Fuchs/Fuchs.csproj index b99da14..b349d76 100644 --- a/Fuchs/Fuchs.csproj +++ b/Fuchs/Fuchs.csproj @@ -22,6 +22,7 @@ + diff --git a/Fuchs/Program.cs b/Fuchs/Program.cs index 94c1cfc..75b35bb 100644 --- a/Fuchs/Program.cs +++ b/Fuchs/Program.cs @@ -121,6 +121,9 @@ public class Program // (see appsettings.Development.json) so real tenant-owners/end-customers are never emailed. builder.Services.Configure(builder.Configuration.GetSection("Fuchs:Email")); builder.Services.Configure(builder.Configuration.GetSection("Fuchs:StartupChecks")); + // eRechnung (ZUGFeRD/Factur-X) output + external formal-conformance validation seam. + builder.Services.Configure(builder.Configuration.GetSection("Fuchs:ERechnung")); + builder.Services.AddSingleton(); // stateless: maps + embeds ZUGFeRD builder.Services.AddHttpClient("ProcessWebMailer"); builder.Services.AddScoped(); // Holds the one-shot startup self-test result for the lifetime of the process so the Admin diff --git a/Fuchs/Services/ERechnungMapper.cs b/Fuchs/Services/ERechnungMapper.cs new file mode 100644 index 0000000..1388ce0 --- /dev/null +++ b/Fuchs/Services/ERechnungMapper.cs @@ -0,0 +1,227 @@ +using System.Globalization; +using eRechnungLib; +using eRechnungLib.Model; +using eRechnungLib.Model.CodeLists; +using Fuchs.intranet; +using static OCORE.OCORE_dictionaries; + +namespace Fuchs.Services; + +///

+/// Maps a Fuchs onto the strongly-typed EN 16931 invoice model of +/// eRechnungLib, so it can be emitted as a ZUGFeRD/Factur-X hybrid (see ADR 0005/0012). +/// +/// +/// The seller (BG-4) is Fuchs itself; its master data currently lives as constants in +/// FuchsPdf (letterhead, Steuernummer, bank) and is mirrored here — a future change should +/// lift both into shared configuration. The buyer (BG-7) comes from the structured +/// ; a private person (no VAT id) maps cleanly with +/// no buyer tax registration. Amounts/VAT are recomputed by the library from the mapped lines. +/// +public static class ERechnungMapper +{ + // Seller master data — mirrors the FuchsPdf letterhead/footer constants (ADR 0005). + private const string SellerName = "Sebastian Fuchs GmbH & Co. KG"; + private const string SellerStreet = "Germaniastraße 15"; + private const string SellerPostalCode = "40223"; + private const string SellerCity = "Düsseldorf"; + private const string SellerTaxNumber = "106/5849/2962"; // Steuernummer (BT-32) + private const string SellerIban = "DE76300501100045014800"; // Stadtsparkasse Düsseldorf (GiroCode account) + private const string SellerBic = "DUSSDEDDXXX"; + + /// Builds an (EN 16931 model) from the Fuchs invoice data. + public static EInvoice BuildEInvoice(FdsInvoiceData invoice) + { + ArgumentNullException.ThrowIfNull(invoice); + var reg = invoice.InvoiceRegistration; + bool reverseCharge = (reg?.getString("InvoiceOptions") ?? "").Contains("§13b", StringComparison.Ordinal); + + var model = new Invoice + { + InvoiceNumber = NonEmpty(reg?.getString("InvoiceId"), invoice.Id, "ENTWURF"), + IssueDate = IssueDate(reg), + CurrencyCode = CurrencyCode.Eur, + Seller = BuildSeller(), + Buyer = BuildBuyer(invoice), + Payment = BuildPayment(invoice), + }; + + string title = reg?.getString("InvoiceTitle") ?? ""; + if (!string.IsNullOrWhiteSpace(title)) + model.Notes.Add(new InvoiceNote(title)); + + AddLines(model, invoice, reverseCharge); + + if (reverseCharge) + model.VatExemptionReasons[VatCategoryCode.ReverseCharge] = + new VatExemptionReason("Steuerschuldnerschaft des Leistungsempfängers (§ 13b UStG)"); + + return EInvoice.CreateInvoice(model).Recalculate(); + } + + private static TradeParty BuildSeller() + { + var seller = new TradeParty + { + Name = SellerName, + Address = new PostalAddress + { + Line1 = SellerStreet, + PostalCode = SellerPostalCode, + City = SellerCity, + Country = CountryCode.Germany, + }, + }; + seller.TaxRegistrations.Add(new TaxRegistration(SellerTaxNumber, TaxRegistrationScheme.LocalTaxNumber)); + return seller; + } + + private static TradeParty BuildBuyer(FdsInvoiceData invoice) + { + var addr = invoice.RecipientAddress; + if (addr is null) + { + // No structured address yet (older draft): best-effort from the free-text block so a + // model can still be produced. The country defaults to DE; refine once structured + // capture is in place. EN 16931 validation will flag any remaining gaps. + var lines = (invoice.InvoiceRegistration?.getString("SendToAddress") ?? "") + .Replace("\r\n", "\n").Split('\n').Select(l => l.Trim()).Where(l => l.Length > 0).ToArray(); + return new TradeParty + { + Name = lines.Length > 0 ? lines[0] : "Rechnungsempfänger", + Address = new PostalAddress { Country = CountryCode.Germany }, + }; + } + + var buyer = new TradeParty + { + Name = NonEmpty(addr.Name, "Rechnungsempfänger"), + Address = new PostalAddress + { + Line1 = NullIfEmpty(addr.Street), + Line2 = NullIfEmpty(addr.AddressLine2), + PostalCode = NullIfEmpty(addr.PostalCode), + City = NullIfEmpty(addr.City), + Country = NormalizeCountry(addr.CountryCode), + }, + }; + if (!string.IsNullOrWhiteSpace(addr.VatId)) + buyer.TaxRegistrations.Add(new TaxRegistration(addr.VatId.Trim(), TaxRegistrationScheme.Vat)); + return buyer; + } + + private static PaymentInstructions BuildPayment(FdsInvoiceData invoice) + { + var payment = new PaymentInstructions + { + MeansCode = PaymentMeansCode.SepaCreditTransfer, + RemittanceInformation = invoice.InvoiceRegistration?.getString("InvoiceId") is { Length: > 0 } inv ? inv : null, + }; + payment.CreditTransfers.Add(new CreditTransferAccount + { + AccountId = SellerIban, + AccountName = SellerName, + BankId = SellerBic, + }); + return payment; + } + + private static void AddLines(Invoice model, FdsInvoiceData invoice, bool reverseCharge) + { + int id = 0; + foreach (var item in invoice.InvoiceItems) + { + string name = FirstNonEmpty(Str(item, "title"), Str(item, "nme"), Str(item, "text"), Str(item, "t")); + string desc = Str(item, "desc"); + if (string.IsNullOrWhiteSpace(name) && string.IsNullOrWhiteSpace(desc)) name = "Position"; + + decimal qty = Dec(item, "qty", "q", "Quantity") ?? 1m; + if (qty == 0m) qty = 1m; + decimal net = Dec(item, "total_net", "value_total", "vt") ?? 0m; + decimal? unit = Dec(item, "price_net", "value", "v"); + decimal rate = Dec(item, "vat") ?? 0m; + + id++; + var line = new InvoiceLine + { + Id = id.ToString(CultureInfo.InvariantCulture), + Quantity = qty, + UnitCode = UnitCode.One, + NetPrice = unit ?? (qty != 0 ? decimal.Round(net / qty, 2, MidpointRounding.AwayFromZero) : net), + NetAmount = net, + VatCategory = reverseCharge ? VatCategoryCode.ReverseCharge + : rate > 0 ? VatCategoryCode.StandardRate : VatCategoryCode.ZeroRatedGoods, + VatRate = reverseCharge ? 0m : rate, + Item = new TradeItem { Name = Truncate(name, 500), Description = NullIfEmpty(desc) }, + }; + model.Lines.Add(line); + } + + // EN 16931 requires at least one line (BR-16); synthesise one from the invoice total when + // the item list is empty (e.g. a lump-sum invoice). + if (model.Lines.Count == 0) + { + decimal net = ParseInvariant(invoice.InvoiceRegistration?.getString("InvoiceBalance_net")) ?? 0m; + decimal rate = ParseInvariant(invoice.InvoiceRegistration?.getString("InvoiceVAT_1")) ?? 0m; + model.Lines.Add(new InvoiceLine + { + Id = "1", + Quantity = 1m, + UnitCode = UnitCode.One, + NetPrice = net, + NetAmount = net, + VatCategory = reverseCharge ? VatCategoryCode.ReverseCharge + : rate > 0 ? VatCategoryCode.StandardRate : VatCategoryCode.ZeroRatedGoods, + VatRate = reverseCharge ? 0m : rate, + Item = new TradeItem { Name = NonEmpty(invoice.InvoiceRegistration?.getString("InvoiceTitle"), "Leistung") }, + }); + } + } + + // ── helpers ──────────────────────────────────────────────────────────────── + private static DateOnly IssueDate(GenericObjectDictionary? reg) + { + foreach (var key in new[] { "DateFinalized", "DateCreated" }) + if (reg?.getString(key) is { Length: > 0 } s && DateTime.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt)) + return DateOnly.FromDateTime(dt); + return DateOnly.FromDateTime(DateTime.Today); + } + + /// Normalises a raw country value (ISO alpha-2, or a German/English name) to a country code. + internal static CountryCode NormalizeCountry(string? raw) + { + string s = (raw ?? "").Trim(); + if (s.Length == 2 && s.All(char.IsLetter)) return new CountryCode(s); + return s.ToLowerInvariant() switch + { + "deutschland" or "germany" => CountryCode.Germany, + "österreich" or "oesterreich" or "austria" => CountryCode.Austria, + "schweiz" or "switzerland" or "suisse" => CountryCode.Switzerland, + "" => CountryCode.Germany, + _ => CountryCode.Germany, + }; + } + + private static string Str(IDictionary d, string key) + => d.TryGetValue(key, out var v) && v != null ? Convert.ToString(v, CultureInfo.InvariantCulture)?.Trim() ?? "" : ""; + + private static decimal? Dec(IDictionary d, params string[] keys) + { + foreach (var k in keys) + if (d.TryGetValue(k, out var v) && v != null) + { + string s = Convert.ToString(v, CultureInfo.InvariantCulture)?.Replace("%", "").Trim() ?? ""; + if (decimal.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out var dec)) return dec; + if (decimal.TryParse(s.Replace(',', '.'), NumberStyles.Any, CultureInfo.InvariantCulture, out dec)) return dec; + } + return null; + } + + private static decimal? ParseInvariant(string? s) + => decimal.TryParse((s ?? "").Replace(',', '.'), NumberStyles.Any, CultureInfo.InvariantCulture, out var d) ? d : null; + + private static string FirstNonEmpty(params string[] values) => values.FirstOrDefault(v => !string.IsNullOrWhiteSpace(v)) ?? ""; + private static string NonEmpty(params string?[] values) => values.FirstOrDefault(v => !string.IsNullOrWhiteSpace(v)) ?? ""; + private static string? NullIfEmpty(string? s) => string.IsNullOrWhiteSpace(s) ? null : s.Trim(); + private static string Truncate(string s, int max) => s.Length <= max ? s : s[..max]; +} diff --git a/Fuchs/Services/ERechnungService.cs b/Fuchs/Services/ERechnungService.cs new file mode 100644 index 0000000..a6798b0 --- /dev/null +++ b/Fuchs/Services/ERechnungService.cs @@ -0,0 +1,88 @@ +using System.Diagnostics; +using eRechnungLib; +using eRechnungLib.Profiles; +using Fuchs.intranet; +using Fuchs.Observability; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace Fuchs.Services; + +/// +/// Produces the ZUGFeRD/Factur-X hybrid PDF for a finalized invoice by mapping +/// to the EN 16931 model and embedding the CII XML into the +/// FuchsPdf-rendered visual PDF (ADR 0012 — eRechnungLib owns the single PDF/A-3 layer). +/// +public interface IERechnungService +{ + /// Whether eRechnung emission is switched on (Fuchs:ERechnung:Enabled). + bool Enabled { get; } + + /// + /// Builds the hybrid PDF from the raw (non-PDF/A) visual PDF, or returns + /// when disabled or on any failure — the caller then falls back to the plain PDF/A so + /// invoicing never breaks because of eRechnung production. + /// + byte[]? TryBuildHybridPdf(FdsInvoiceData invoice, byte[] rawVisualPdf); +} + +/// +public sealed class ERechnungService : IERechnungService +{ + private readonly ERechnungSettings _settings; + private readonly ILogger _logger; + + public ERechnungService(IOptions settings, ILogger logger) + { + _settings = settings.Value; + _logger = logger; + } + + public bool Enabled => _settings.Enabled; + + public byte[]? TryBuildHybridPdf(FdsInvoiceData invoice, byte[] rawVisualPdf) + { + ArgumentNullException.ThrowIfNull(invoice); + if (!_settings.Enabled) return null; + if (rawVisualPdf is null || rawVisualPdf.Length == 0) return null; + + var sw = Stopwatch.StartNew(); + using var act = FuchsTelemetry.StartActivity("invoice.erechnung"); + act?.SetTag("fuchs.invoice.id", invoice.Id); + try + { + var profile = ParseProfile(_settings.Profile); + var einvoice = ERechnungMapper.BuildEInvoice(invoice); + var result = einvoice.ToZugferd(profile, rawVisualPdf); + + if (!result.Success) + { + _logger.LogError("eRechnung: conversion produced no output for invoice {Id}. Findings: {Findings}", + invoice.Id, result.Validation); + return null; + } + if (!result.Validation.IsValid) + _logger.LogWarning("eRechnung: invoice {Id} produced with validation findings: {Findings}", + invoice.Id, result.Validation); + + act?.SetTag("fuchs.erechnung.bytes", result.Value!.Length); + _logger.LogInformation("eRechnung: hybrid PDF/A-3 built for invoice {Id} ({Profile}, {Bytes} bytes, {Ms} ms)", + invoice.Id, profile, result.Value.Length, sw.ElapsedMilliseconds); + return result.Value; + } + catch (Exception ex) + { + act?.SetStatus(ActivityStatusCode.Error, ex.Message); + _logger.LogError(ex, "eRechnung: hybrid build failed for invoice {Id}; falling back to plain PDF/A", invoice.Id); + return null; + } + } + + private static ZugferdProfile ParseProfile(string? profile) => (profile ?? "").Trim().ToUpperInvariant() switch + { + "EXTENDED" => ZugferdProfile.Extended, + "BASIC" => ZugferdProfile.Basic, + "XRECHNUNG" => ZugferdProfile.XRechnung, + _ => ZugferdProfile.EN16931, + }; +} diff --git a/Fuchs/Services/ERechnungSettings.cs b/Fuchs/Services/ERechnungSettings.cs new file mode 100644 index 0000000..a3cbc3d --- /dev/null +++ b/Fuchs/Services/ERechnungSettings.cs @@ -0,0 +1,50 @@ +namespace Fuchs.Services; + +/// +/// eRechnung (ZUGFeRD/Factur-X) output settings, bound from appsettings.json → "Fuchs:ERechnung". +/// +/// +/// Per ADR 0005 the invoice visual PDF is produced by FuchsPdf (render-only, no Spire +/// PDF/A) and handed to eRechnungLib.ToZugferd(...), which owns the single PDF/A-3 layer +/// and embeds the CII XML. This is the gate that turns that emission on and configures it. +/// +public sealed class ERechnungSettings +{ + /// + /// When , finalized invoices are emitted as a ZUGFeRD/Factur-X hybrid + /// PDF/A-3. Kept until the FdsInvoiceData → model mapping is + /// wired, so the app keeps producing the plain PDF/A until then. + /// + public bool Enabled { get; set; } + + /// The ZUGFeRD profile to emit. Defaults to EN16931 (the minimum DATEV accepts + /// for full booking; MINIMUM/BASIC WL are intentionally not offered). + public string Profile { get; set; } = "EN16931"; + + /// Formal-conformance validation settings (PDF/A-3 via veraPDF, ZUGFeRD rules). + public ERechnungValidationSettings Validation { get; set; } = new(); +} + +/// +/// Settings for the external eRechnung validation service (veraPDF for PDF/A-3 and a +/// ZUGFeRD/EN 16931 validator), bound from "Fuchs:ERechnung:Validation". +/// +/// +/// The concrete service URL/contract is provided by an online service that is not yet available; +/// this is the configurable seam so only the URL has to be supplied later. While +/// is empty, verification is reported as "not configured / skipped". +/// +public sealed class ERechnungValidationSettings +{ + /// Whether to call the external validation service after producing a hybrid PDF. + public bool Enabled { get; set; } + + /// Base URL of the online veraPDF/ZUGFeRD validation service (empty until provisioned). + public string ServiceUrl { get; set; } = ""; + + /// + /// When , a validation error withholds the invoice output rather than + /// shipping it with findings. Defaults to (report-only). + /// + public bool FailOnError { get; set; } +} diff --git a/Fuchs/Services/FuchsPdfService.cs b/Fuchs/Services/FuchsPdfService.cs index ba6d1f8..124e2b8 100644 --- a/Fuchs/Services/FuchsPdfService.cs +++ b/Fuchs/Services/FuchsPdfService.cs @@ -143,6 +143,29 @@ public class FuchsPdfService : IPdfService } } + public byte[] DocToPdfBytesRaw(Document doc) + { + var sw = Stopwatch.StartNew(); + using var act = FuchsTelemetry.StartActivity("pdf.render.raw"); + try + { + byte[] bytes = FuchsPdf.DocToPdfBytesRaw(doc); + sw.Stop(); + FuchsTelemetry.PdfRenderDuration.Record(sw.Elapsed.TotalMilliseconds, + new KeyValuePair("operation", "pdf-raw")); + act?.SetTag("fuchs.pdf.bytes", bytes.Length); + _logger.LogDebug("DocToPdfBytesRaw rendered {Bytes} bytes in {Ms} ms", bytes.Length, sw.ElapsedMilliseconds); + return bytes; + } + catch (Exception ex) + { + sw.Stop(); + act?.SetStatus(ActivityStatusCode.Error, ex.Message); + _logger.LogError(ex, "DocToPdfBytesRaw failed after {Ms} ms", sw.ElapsedMilliseconds); + throw; + } + } + public async Task DocToImageCollectionAsync(Document doc) { var sw = Stopwatch.StartNew(); diff --git a/Fuchs/Services/IPdfService.cs b/Fuchs/Services/IPdfService.cs index 6c8ae29..b486933 100644 --- a/Fuchs/Services/IPdfService.cs +++ b/Fuchs/Services/IPdfService.cs @@ -20,6 +20,12 @@ public interface IPdfService /// Renders a MigraDoc Document to a PDF/A byte array. byte[] DocToPdfBytes(Document doc); + /// + /// Renders a MigraDoc Document to a plain (non-PDF/A) PDF byte array — the visual PDF used as + /// input to eRechnung (ZUGFeRD) conversion, which owns the PDF/A-3 layer itself. + /// + byte[] DocToPdfBytesRaw(Document doc); + /// Renders a MigraDoc Document to an image collection for preview. Task DocToImageCollectionAsync(Document doc); diff --git a/Fuchs/Services/InvoiceDraftEditService.cs b/Fuchs/Services/InvoiceDraftEditService.cs index b1be176..293e0ab 100644 --- a/Fuchs/Services/InvoiceDraftEditService.cs +++ b/Fuchs/Services/InvoiceDraftEditService.cs @@ -95,7 +95,12 @@ public sealed class InvoiceDraftEditService : IInvoiceDraftService switch (d.Target) { case "email": return SetNewText(s, "invoiceemail", d, ref oldValue, ref newValue); - case "address": return SetNewText(s, "invoiceaddress", d, ref oldValue, ref newValue); + case "address": + // Structured dialog form posts a JSON object; a plain string keeps the legacy + // free-text path working (backward compatibility). + return d.Value is JObject + ? SetSendToAddress(s, d, ref oldValue, ref newValue) + : SetNewText(s, "invoiceaddress", d, ref oldValue, ref newValue); case "title": return SetNewText(s, "invoicetitle", d, ref oldValue, ref newValue); case "provisionperiod": return SetNewText(s, "provisionperiod", d, ref oldValue, ref newValue); case "provisionlocation": @@ -157,6 +162,26 @@ public sealed class InvoiceDraftEditService : IInvoiceDraftService private static string ContactLabel(string name, string email) => string.IsNullOrEmpty(name) ? email : string.IsNullOrEmpty(email) ? name : $"{name} <{email}>"; + /// + /// Applies a structured recipient address: stores it as JSON inside the CustomValues + /// blob (interim persistence, no schema change) and composes the multi-line free-text block + /// into invoiceaddress so the PDF and the SendToAddress column are unchanged. + /// + private static bool SetSendToAddress(InvoiceDraftSession s, InvoiceDraftDelta d, ref string oldValue, ref string newValue) + { + if (d.Value is not JObject vo) return false; + var addr = InvoiceRecipientAddress.FromJson(vo); + + oldValue = Str(s.New["invoiceaddress"]); + JObject cvo = (JObject)TryParseObject(Str(s.New["CustomValues"])).DeepClone(); + cvo[InvoiceRecipientAddress.CustomValuesKey] = addr.ToJson(); + s.New["CustomValues"] = cvo.ToString(Newtonsoft.Json.Formatting.None); + + newValue = addr.Compose(); + s.New["invoiceaddress"] = newValue; + return true; + } + /// Replaces (or inserts) a whole block — the editor re-emits an edited block's line arrays as one delta. private static bool ReplaceBlock(InvoiceDraftSession s, InvoiceDraftDelta d, ref string oldValue, ref string newValue) { @@ -590,6 +615,8 @@ public sealed class InvoiceDraftEditService : IInvoiceDraftService ["InvoiceBalance"] = session.Sums.TotalGross, ["InvoiceBalance_net"] = session.Sums.TotalNet, ["CustomValues"] = Str(session.New["CustomValues"]), + ["SendToAddressJson"] = InvoiceRecipientAddress.FromCustomValues(Str(session.New["CustomValues"]))? + .ToJson().ToString(Newtonsoft.Json.Formatting.None) ?? "", ["InvoiceOptions"] = BuildInvoiceOptions(session), ["DateCreated"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) }; diff --git a/Fuchs/Services/InvoiceRecipientAddress.cs b/Fuchs/Services/InvoiceRecipientAddress.cs new file mode 100644 index 0000000..523681f --- /dev/null +++ b/Fuchs/Services/InvoiceRecipientAddress.cs @@ -0,0 +1,130 @@ +using System.Text; +using Newtonsoft.Json.Linq; + +namespace Fuchs.Services; + +/// +/// Structured invoice-recipient (buyer) address held in the draft cache and persisted as JSON +/// (interim: inside the CustomValues blob under sendToAddress; a dedicated +/// SendToAddressJson column is planned — see ADR 0012 / the SQL plan). It replaces the +/// former free-text invoiceaddress as the source of truth, while a composed free-text +/// block () keeps the existing PDF/SendToAddress path unchanged. +/// +/// +/// The field set targets EN 16931 / DATEV: (BT-44), +/// (z.Hd.), (BT-51), (BT-50), +/// (BT-53), (BT-52), +/// (BT-55, mandatory), (BT-48, optional — empty for a private person, which +/// must stay effortless: B2C invoices need no VAT id and are still EN 16931-valid). +/// +public sealed class InvoiceRecipientAddress +{ + /// The JSON key under which the structured address rides inside CustomValues. + public const string CustomValuesKey = "sendToAddress"; + + public string Name { get; set; } = ""; + public string Contact { get; set; } = ""; + public string AddressLine2 { get; set; } = ""; + public string Street { get; set; } = ""; + public string PostalCode { get; set; } = ""; + public string City { get; set; } = ""; + + /// ISO 3166-1 alpha-2 country code (BT-55). Defaults to DE. + public string CountryCode { get; set; } = "DE"; + + /// Buyer VAT identifier (BT-48). Empty for a private person (B2C). + public string VatId { get; set; } = ""; + + /// True when no VAT id is set — a private person / B2C recipient. + public bool IsPrivatePerson => string.IsNullOrWhiteSpace(VatId); + + /// Reads a structured address from a JSON object (tolerant of missing keys). + public static InvoiceRecipientAddress FromJson(JObject? o) + { + o ??= new JObject(); + return new InvoiceRecipientAddress + { + Name = S(o, "name"), + Contact = S(o, "contact"), + AddressLine2 = S(o, "line2", "addressLine2"), + Street = S(o, "street"), + PostalCode = S(o, "postalCode", "zip", "plz"), + City = S(o, "city", "ort"), + CountryCode = S(o, "countryCode", "country").ToUpperInvariant() is { Length: > 0 } cc ? cc : "DE", + VatId = S(o, "vatId", "ustid"), + }; + } + + /// Parses the structured address out of a CustomValues JSON blob, if present. + public static InvoiceRecipientAddress? FromCustomValues(string? customValuesJson) + { + if (string.IsNullOrWhiteSpace(customValuesJson)) return null; + try + { + var cv = JObject.Parse(customValuesJson); + return cv[CustomValuesKey] is JObject a ? FromJson(a) : null; + } + catch { return null; } + } + + /// Serialises to a JSON object for the cache / CustomValues blob. + public JObject ToJson() => new() + { + ["name"] = Name, + ["contact"] = Contact, + ["line2"] = AddressLine2, + ["street"] = Street, + ["postalCode"] = PostalCode, + ["city"] = City, + ["countryCode"] = CountryCode, + ["vatId"] = VatId, + }; + + /// + /// Composes the multi-line free-text postal block (for the PDF and the legacy + /// SendToAddress column). The VAT id is intentionally excluded — it is not part of the + /// postal address, only of the structured eRechnung data (BT-48). Foreign countries append + /// the country code line; domestic (DE) omits it, matching the current letter layout. + /// + public string Compose() + { + var sb = new StringBuilder(); + void Line(string? v) { if (!string.IsNullOrWhiteSpace(v)) sb.Append(sb.Length > 0 ? "\n" : "").Append(v!.Trim()); } + + Line(Name); + if (!string.IsNullOrWhiteSpace(Contact)) Line($"z.Hd. {Contact.Trim()}"); + Line(AddressLine2); + Line(Street); + string cityLine = $"{PostalCode} {City}".Trim(); + Line(cityLine); + if (!string.IsNullOrWhiteSpace(CountryCode) && !CountryCode.Equals("DE", StringComparison.OrdinalIgnoreCase)) + Line(CountryCode.ToUpperInvariant()); + return sb.ToString(); + } + + /// + /// The EN 16931 fields still missing for a formally valid buyer (BG-7). Buyer name (BT-44) + /// and country code (BT-55) are mandatory; a postal address needs a city or post code. VAT id + /// is not required (a private person is valid without one). An empty result means the + /// recipient is EN 16931 / DATEV conformant — the editor surfaces this as a hint. + /// + public IReadOnlyList MissingForEn16931() + { + var missing = new List(); + if (string.IsNullOrWhiteSpace(Name)) missing.Add("Name"); + if (string.IsNullOrWhiteSpace(CountryCode)) missing.Add("Land"); + if (string.IsNullOrWhiteSpace(City) && string.IsNullOrWhiteSpace(PostalCode)) missing.Add("Ort/PLZ"); + return missing; + } + + /// True when the recipient satisfies the EN 16931 mandatory buyer fields. + public bool IsEn16931Conformant => MissingForEn16931().Count == 0; + + private static string S(JObject o, params string[] keys) + { + foreach (var k in keys) + if (o[k] is { } t && t.Type != JTokenType.Null) + return t.Type == JTokenType.String ? t.Value()?.Trim() ?? "" : t.ToString().Trim(); + return ""; + } +} diff --git a/Fuchs/Services/InvoiceService.cs b/Fuchs/Services/InvoiceService.cs index a4890e4..818ab4c 100644 --- a/Fuchs/Services/InvoiceService.cs +++ b/Fuchs/Services/InvoiceService.cs @@ -26,15 +26,17 @@ public class InvoiceService : IInvoiceService private readonly IPdfService _pdf; private readonly IBlobStorageService _blobStorage; private readonly IEventService _events; + private readonly IERechnungService _erechnung; private readonly ILogger _logger; public InvoiceService(Fuchs_intranet intranet, IPdfService pdf, IBlobStorageService blobStorage, - IEventService events, ILogger logger) + IEventService events, IERechnungService erechnung, ILogger logger) { _intranet = intranet; _pdf = pdf; _blobStorage = blobStorage; _events = events; + _erechnung = erechnung; _logger = logger; } @@ -133,13 +135,13 @@ public class InvoiceService : IInvoiceService var sqlParts = new List { "DECLARE @Id varchar(10);" }; if (!change) { - sqlParts.Add("EXECUTE [dbo].[fds__createInvoice] @InvoiceType, @InvoiceTitle, @InvoiceBalance, @InvoiceBalance_net, @InvoiceVAT_net1, @InvoiceVAT_1, @PaymentTerm, @CustomerId, @SendToAddress, @SendToEmail, @ProvisionPeriod, @CustomValues, @authuser, @Id OUTPUT;"); + sqlParts.Add("EXECUTE [dbo].[fds__createInvoice] @InvoiceType, @InvoiceTitle, @InvoiceBalance, @InvoiceBalance_net, @InvoiceVAT_net1, @InvoiceVAT_1, @PaymentTerm, @CustomerId, @SendToAddress, @SendToEmail, @ProvisionPeriod, @CustomValues, @authuser, @Id OUTPUT, @SendToAddressJson;"); sqlParts.Add("EXECUTE [dbo].[fds__createInvoice_Details] @Id, @InvoiceService_net, @InvoiceService_VAT, @InvoiceOptions, @authuser;"); } else { pl.Add(SQL_VarChar("@InvId", invId)); - sqlParts.Add("EXECUTE [dbo].[fds__setInvoice] @InvId, @InvoiceType, @InvoiceTitle, @InvoiceBalance, @InvoiceBalance_net, @InvoiceVAT_net1, @InvoiceVAT_1, @PaymentTerm, @CustomerId, @SendToAddress, @SendToEmail, @ProvisionPeriod, @CustomValues, @authuser, @Id OUTPUT;"); + sqlParts.Add("EXECUTE [dbo].[fds__setInvoice] @InvId, @InvoiceType, @InvoiceTitle, @InvoiceBalance, @InvoiceBalance_net, @InvoiceVAT_net1, @InvoiceVAT_1, @PaymentTerm, @CustomerId, @SendToAddress, @SendToEmail, @ProvisionPeriod, @CustomValues, @authuser, @Id OUTPUT, @SendToAddressJson;"); sqlParts.Add("EXECUTE [dbo].[fds__createInvoice_Details] @Id, @InvoiceService_net, @InvoiceService_VAT, @InvoiceOptions, @authuser;"); } if (invoice.RawProvisionLocation.Length > 0) @@ -283,7 +285,18 @@ public class InvoiceService : IInvoiceService } public Task RenderInvoicePdfBytesAsync(FdsInvoiceData invoice, bool draft) - => Task.FromResult(_pdf.DocToPdfBytes(GenerateInvoicePdf(invoice, draft))); + { + var doc = GenerateInvoicePdf(invoice, draft); + // Finalized invoices are emitted as a ZUGFeRD/Factur-X hybrid when eRechnung is enabled: + // eRechnungLib embeds the CII XML into the render-only visual PDF and owns the single + // PDF/A-3 layer (ADR 0012). Drafts/previews keep the plain PDF/A. Any failure falls back. + if (!draft && _erechnung.Enabled) + { + var hybrid = _erechnung.TryBuildHybridPdf(invoice, _pdf.DocToPdfBytesRaw(doc)); + if (hybrid is { Length: > 0 }) return Task.FromResult(hybrid); + } + return Task.FromResult(_pdf.DocToPdfBytes(doc)); + } public async Task StoreInvoiceDocumentFileAsync(FdsInvoiceData invoice, bool draft, string userAccountId, DatabaseSecurity dbSec) diff --git a/Fuchs/appsettings.json b/Fuchs/appsettings.json index 5e6ce0a..13203df 100644 --- a/Fuchs/appsettings.json +++ b/Fuchs/appsettings.json @@ -69,6 +69,15 @@ "Telemetry": { "Enabled": true, "OtlpEndpoint": "" + }, + "ERechnung": { + "Enabled": false, + "Profile": "EN16931", + "Validation": { + "Enabled": false, + "ServiceUrl": "", + "FailOnError": false + } } }, "Fds": { diff --git a/Fuchs/code/FdsInvoiceData.cs b/Fuchs/code/FdsInvoiceData.cs index 30cbc49..96a20b0 100644 --- a/Fuchs/code/FdsInvoiceData.cs +++ b/Fuchs/code/FdsInvoiceData.cs @@ -83,6 +83,34 @@ public class FdsInvoiceData } } + /// + /// Structured recipient (buyer) address for eRechnung (EN 16931) mapping, parsed from the + /// CustomValues JSON (interim persistence — see ADR 0012). Null for invoices that + /// predate structured capture; callers fall back to the free-text SendToAddress block. + /// + public Fuchs.Services.InvoiceRecipientAddress? RecipientAddress + { + get + { + // Prefer the dedicated SendToAddressJson column; fall back to the CustomValues blob + // (interim persistence and rows written before the column existed). + string col = InvoiceRegistration?.getString("SendToAddressJson") ?? ""; + if (col.Length > 0) + { + try { return Fuchs.Services.InvoiceRecipientAddress.FromJson(JObject.Parse(col)); } + catch { /* fall through to CustomValues */ } + } + return Fuchs.Services.InvoiceRecipientAddress.FromCustomValues( + InvoiceRegistration?.getString("CustomValues") is { Length: > 0 } cv ? cv : RawCustomValues); + } + } + + /// The structured recipient address serialised for the SendToAddressJson column + /// (from the posted CustomValues blob), or empty when the invoice has no structured address. + private string SendToAddressJsonForPersist() => + Fuchs.Services.InvoiceRecipientAddress.FromCustomValues(RawCustomValues)?.ToJson() + .ToString(Newtonsoft.Json.Formatting.None) ?? ""; + /// VAT rows keyed by percentage string (e.g. "19"), from InvoiceRegistration. public Dictionary> VatRows { @@ -153,6 +181,7 @@ public class FdsInvoiceData SQL_NVarChar("@SendToEmail", RawInvoiceEmail), SQL_NVarChar("@ProvisionPeriod", RawProvisionPeriod, dbNull_IfEmpty: true), SQL_NVarChar("@CustomValues", RawCustomValues, dbNull_IfEmpty: true), + SQL_NVarChar("@SendToAddressJson", SendToAddressJsonForPersist(), dbNull_IfEmpty: true), SQL_Float("@InvoiceService_net", stringvalue: Sms?.nz("tscn") ?? "0"), SQL_Float("@InvoiceService_VAT", stringvalue: Sms?.nz("tscvat") ?? "0"), SQL_VarChar("@InvoiceOptions", BuildInvoiceOptions(), dbNull_IfEmpty: true) diff --git a/Fuchs/code/FuchsPdf.cs b/Fuchs/code/FuchsPdf.cs index d42d29c..705eef0 100644 --- a/Fuchs/code/FuchsPdf.cs +++ b/Fuchs/code/FuchsPdf.cs @@ -979,18 +979,26 @@ public static class FuchsPdf } } - /// Renders a MigraDoc Document to a PDF/A byte array. - public static byte[] DocToPdfBytes(Document doc) + /// + /// Renders a MigraDoc Document to a plain (non-PDF/A) PDF byte array. Fonts are embedded via + /// the OCOREFontResolver, but no PDF/A post-processing is applied. This is the visual + /// PDF fed into eRechnungLib.ToZugferd(...), which owns the single PDF/A-3 conversion + /// for eRechnung output (avoiding a conflicting second PDF/A layer from Spire). See ADR 0005. + /// + public static byte[] DocToPdfBytesRaw(Document doc) { EnsureFontResolver(); var renderer = new PdfDocumentRenderer() { Document = doc }; renderer.RenderDocument(); using var ms = new MemoryStream(); renderer.PdfDocument.Save(ms, closeStream: false); - ms.Position = 0; - return OCORE.pdf._pdf.pdfAFileContent(ms.ToArray()); + return ms.ToArray(); } + /// Renders a MigraDoc Document to a PDF/A byte array (Spire post-processing). + public static byte[] DocToPdfBytes(Document doc) + => OCORE.pdf._pdf.pdfAFileContent(DocToPdfBytesRaw(doc)); + /// Renders a MigraDoc Document to an ImageCollection for preview. public static async Task DocToImageCollection(Document doc) { diff --git a/Fuchs/js/intranet/modules/fis.inv_shared.js b/Fuchs/js/intranet/modules/fis.inv_shared.js index 5b1e744..405fbe3 100644 --- a/Fuchs/js/intranet/modules/fis.inv_shared.js +++ b/Fuchs/js/intranet/modules/fis.inv_shared.js @@ -980,7 +980,84 @@ $inv.cSt = function (data) { } }); }; +/* Country choices for the structured recipient-address dialog (ISO 3166-1 alpha-2, BT-55). */ +$inv.adrCountries = [['DE', 'Deutschland'], ['AT', 'Österreich'], ['CH', 'Schweiz'], ['FR', 'Frankreich'], + ['NL', 'Niederlande'], ['BE', 'Belgien'], ['LU', 'Luxemburg'], ['IT', 'Italien'], ['ES', 'Spanien'], + ['PL', 'Polen'], ['DK', 'Dänemark'], ['CZ', 'Tschechien'], ['GB', 'Großbritannien'], ['US', 'USA']]; + +/* Compose the free-text postal block (for the inline display) from the structured address — + mirrors the backend InvoiceRecipientAddress.Compose (the VAT id is never part of the block). */ +$inv.composeAddress = function (a) { + a = a || {}; let lines = []; + let push = (v) => { v = ('' + (v || '')).trim(); if (v !== '') lines.push(v); }; + push(a.name); + if (('' + (a.contact || '')).trim() !== '') push('z.Hd. ' + ('' + a.contact).trim()); + push(a.line2 || a.addressLine2); + push(a.street); + push((('' + (a.postalCode || '')) + ' ' + ('' + (a.city || ''))).trim()); + let cc = ('' + (a.countryCode || '')).toUpperCase(); + if (cc !== '' && cc !== 'DE') push(cc); + return lines.join('\n'); +}; + +/* The structured recipient address currently in effect: the backend keeps it in + CustomValues.sendToAddress (survives a draft refresh); new invoices seed it from + fds__prepInvoice's invoiceaddressData; otherwise start empty. */ +$inv.adrCurrent = function (tbl) { + let cv = jObj((tbl.data('new') || {}).CustomValues, 'sendToAddress'); + if (typeof cv === 'string' && cv.trim().charAt(0) === '{') { try { cv = JSON.parse(cv); } catch (e) { cv = null; } } + if (cv && typeof cv === 'object') return cv; + let ad = (tbl.data('admin') || {}).invoiceaddressData; + if (typeof ad === 'string' && ad.trim().charAt(0) === '{') { try { return JSON.parse(ad); } catch (e) { } } + else if (ad && typeof ad === 'object') { return ad; } + return {}; +}; + +/* Structured recipient-address dialog (EN 16931 / DATEV). Posts the address delta as a JSON + object; the backend stores it, composes SendToAddress and keeps the PDF unchanged (ADR 0012). + B2C stays effortless: the USt-IdNr. is optional (empty = private person). */ +$inv.eAddress = function (ev) { + let tbl = $inv.d.tbl(), cur = $inv.adrCurrent(tbl); + let flds = [ + { name: 'name', label: 'Name / Firma', type: 'text', value: cur.name || '', required: true }, + { name: 'contact', label: 'z.Hd. (optional)', type: 'text', value: cur.contact || '' }, + { name: 'street', label: 'Straße + Nr.', type: 'text', value: cur.street || '' }, + { name: 'line2', label: 'Adresszusatz (optional)', type: 'text', value: cur.line2 || cur.addressLine2 || '' }, + { name: 'postalCode', label: 'PLZ', type: 'text', value: cur.postalCode || '' }, + { name: 'city', label: 'Ort', type: 'text', value: cur.city || '' }, + { name: 'countryCode', label: 'Land', type: 'select', url: $inv.adrCountries, value: (cur.countryCode || 'DE') }, + { name: 'vatId', label: 'USt-IdNr. (nur bei Firmen)', type: 'text', value: cur.vatId || '' } + ]; + let hint = $$.dc('adr-conformity').append([ + $$.dc('hd').text('Hinweis zur DATEV-/eRechnungs-Konformität'), + $$.dc('tx').text('Pflicht: Name, Straße, PLZ, Ort und Land. Die USt-IdNr. nur bei Firmen angeben — ' + + 'für eine Rechnung an eine Privatperson einfach leer lassen.') + ]); + $ocms.dlgform(flds, { + title: 'Rechnungsempfänger', + addcontent: hint, + success: function (res) { + let a = { + name: res.name || '', contact: res.contact || '', line2: res.line2 || '', + street: res.street || '', postalCode: res.postalCode || '', city: res.city || '', + countryCode: (res.countryCode || 'DE'), vatId: ('' + (res.vatId || '')).trim() + }; + let txt = $inv.composeAddress(a); + if (ev.data && ev.data.t) { ev.data.t.rwText(txt); } + if (typeof (ev.data || {}).change === 'function') { ev.data.change(txt); } + /* Structured delta — the invoice draft backend accepts a JSON object for 'address'. */ + $inv.d.sync({ Target: 'address', Value: a }); + } + }); +}; + $inv.eHtml = function (ev) { + /* The recipient address is edited through the structured dialog whenever an invoice draft is + active; reminders (no invoice draft token) keep the plain free-text editor. */ + if (ev.data && !(ev.data instanceof jQuery) && ev.data.nme === 'invoiceaddress' + && $inv.d && typeof $inv.d.token === 'function' && $inv.d.token() !== '') { + return $inv.eAddress.call(this, ev); + } let t = $(this), frmct = ev.data instanceof jQuery ? ev.data : ev.data.t; /* Single-line fields must stay plain text — the TinyMCE/html editor wraps the value in

tags, which used to get posted and persisted verbatim (e.g.

18.06.2026

in the diff --git a/Fuchs/js/intranet/modules/fis.inv_shared.scss b/Fuchs/js/intranet/modules/fis.inv_shared.scss index 9809a92..6b44c2a 100644 --- a/Fuchs/js/intranet/modules/fis.inv_shared.scss +++ b/Fuchs/js/intranet/modules/fis.inv_shared.scss @@ -474,3 +474,22 @@ } } + +/* Conformity hint shown inside the structured recipient-address dialog (EN 16931 / DATEV). */ +.adr-conformity { + margin-top: 0.75rem; + padding: 0.6rem 0.75rem; + background: #f3f7fb; + border: 1px solid #cfe0f0; + border-radius: 4px; + font-size: 0.85rem; + line-height: 1.35; + + .hd { + font-weight: 600; + margin-bottom: 0.2rem; + } + .tx { + color: #445; + } +} diff --git a/Fuchs/wwwroot/web/fis.inv.css b/Fuchs/wwwroot/web/fis.inv.css index b31e3cd..9e13147 100644 --- a/Fuchs/wwwroot/web/fis.inv.css +++ b/Fuchs/wwwroot/web/fis.inv.css @@ -492,4 +492,22 @@ table.if td.num { padding: 0.2rem; border-top-left-radius: inherit; border-top-right-radius: inherit; +} + +/* Conformity hint shown inside the structured recipient-address dialog (EN 16931 / DATEV). */ +.adr-conformity { + margin-top: 0.75rem; + padding: 0.6rem 0.75rem; + background: #f3f7fb; + border: 1px solid #cfe0f0; + border-radius: 4px; + font-size: 0.85rem; + line-height: 1.35; +} +.adr-conformity .hd { + font-weight: 600; + margin-bottom: 0.2rem; +} +.adr-conformity .tx { + color: #445; } \ No newline at end of file diff --git a/Fuchs/wwwroot/web/fis.inv.de.js b/Fuchs/wwwroot/web/fis.inv.de.js index 4f5ec23..5dda353 100644 --- a/Fuchs/wwwroot/web/fis.inv.de.js +++ b/Fuchs/wwwroot/web/fis.inv.de.js @@ -1523,7 +1523,84 @@ $inv.cSt = function (data) { } }); }; +/* Country choices for the structured recipient-address dialog (ISO 3166-1 alpha-2, BT-55). */ +$inv.adrCountries = [['DE', 'Deutschland'], ['AT', 'Österreich'], ['CH', 'Schweiz'], ['FR', 'Frankreich'], + ['NL', 'Niederlande'], ['BE', 'Belgien'], ['LU', 'Luxemburg'], ['IT', 'Italien'], ['ES', 'Spanien'], + ['PL', 'Polen'], ['DK', 'Dänemark'], ['CZ', 'Tschechien'], ['GB', 'Großbritannien'], ['US', 'USA']]; + +/* Compose the free-text postal block (for the inline display) from the structured address — + mirrors the backend InvoiceRecipientAddress.Compose (the VAT id is never part of the block). */ +$inv.composeAddress = function (a) { + a = a || {}; let lines = []; + let push = (v) => { v = ('' + (v || '')).trim(); if (v !== '') lines.push(v); }; + push(a.name); + if (('' + (a.contact || '')).trim() !== '') push('z.Hd. ' + ('' + a.contact).trim()); + push(a.line2 || a.addressLine2); + push(a.street); + push((('' + (a.postalCode || '')) + ' ' + ('' + (a.city || ''))).trim()); + let cc = ('' + (a.countryCode || '')).toUpperCase(); + if (cc !== '' && cc !== 'DE') push(cc); + return lines.join('\n'); +}; + +/* The structured recipient address currently in effect: the backend keeps it in + CustomValues.sendToAddress (survives a draft refresh); new invoices seed it from + fds__prepInvoice's invoiceaddressData; otherwise start empty. */ +$inv.adrCurrent = function (tbl) { + let cv = jObj((tbl.data('new') || {}).CustomValues, 'sendToAddress'); + if (typeof cv === 'string' && cv.trim().charAt(0) === '{') { try { cv = JSON.parse(cv); } catch (e) { cv = null; } } + if (cv && typeof cv === 'object') return cv; + let ad = (tbl.data('admin') || {}).invoiceaddressData; + if (typeof ad === 'string' && ad.trim().charAt(0) === '{') { try { return JSON.parse(ad); } catch (e) { } } + else if (ad && typeof ad === 'object') { return ad; } + return {}; +}; + +/* Structured recipient-address dialog (EN 16931 / DATEV). Posts the address delta as a JSON + object; the backend stores it, composes SendToAddress and keeps the PDF unchanged (ADR 0012). + B2C stays effortless: the USt-IdNr. is optional (empty = private person). */ +$inv.eAddress = function (ev) { + let tbl = $inv.d.tbl(), cur = $inv.adrCurrent(tbl); + let flds = [ + { name: 'name', label: 'Name / Firma', type: 'text', value: cur.name || '', required: true }, + { name: 'contact', label: 'z.Hd. (optional)', type: 'text', value: cur.contact || '' }, + { name: 'street', label: 'Straße + Nr.', type: 'text', value: cur.street || '' }, + { name: 'line2', label: 'Adresszusatz (optional)', type: 'text', value: cur.line2 || cur.addressLine2 || '' }, + { name: 'postalCode', label: 'PLZ', type: 'text', value: cur.postalCode || '' }, + { name: 'city', label: 'Ort', type: 'text', value: cur.city || '' }, + { name: 'countryCode', label: 'Land', type: 'select', url: $inv.adrCountries, value: (cur.countryCode || 'DE') }, + { name: 'vatId', label: 'USt-IdNr. (nur bei Firmen)', type: 'text', value: cur.vatId || '' } + ]; + let hint = $$.dc('adr-conformity').append([ + $$.dc('hd').text('Hinweis zur DATEV-/eRechnungs-Konformität'), + $$.dc('tx').text('Pflicht: Name, Straße, PLZ, Ort und Land. Die USt-IdNr. nur bei Firmen angeben — ' + + 'für eine Rechnung an eine Privatperson einfach leer lassen.') + ]); + $ocms.dlgform(flds, { + title: 'Rechnungsempfänger', + addcontent: hint, + success: function (res) { + let a = { + name: res.name || '', contact: res.contact || '', line2: res.line2 || '', + street: res.street || '', postalCode: res.postalCode || '', city: res.city || '', + countryCode: (res.countryCode || 'DE'), vatId: ('' + (res.vatId || '')).trim() + }; + let txt = $inv.composeAddress(a); + if (ev.data && ev.data.t) { ev.data.t.rwText(txt); } + if (typeof (ev.data || {}).change === 'function') { ev.data.change(txt); } + /* Structured delta — the invoice draft backend accepts a JSON object for 'address'. */ + $inv.d.sync({ Target: 'address', Value: a }); + } + }); +}; + $inv.eHtml = function (ev) { + /* The recipient address is edited through the structured dialog whenever an invoice draft is + active; reminders (no invoice draft token) keep the plain free-text editor. */ + if (ev.data && !(ev.data instanceof jQuery) && ev.data.nme === 'invoiceaddress' + && $inv.d && typeof $inv.d.token === 'function' && $inv.d.token() !== '') { + return $inv.eAddress.call(this, ev); + } let t = $(this), frmct = ev.data instanceof jQuery ? ev.data : ev.data.t; /* Single-line fields must stay plain text — the TinyMCE/html editor wraps the value in

tags, which used to get posted and persisted verbatim (e.g.

18.06.2026

in the diff --git a/Fuchs/wwwroot/web/fis.inv.de.min.js b/Fuchs/wwwroot/web/fis.inv.de.min.js index ad06eed..99beb74 100644 --- a/Fuchs/wwwroot/web/fis.inv.de.min.js +++ b/Fuchs/wwwroot/web/fis.inv.de.min.js @@ -1 +1 @@ -let $rct={mdl:"Aufträge",or:"offene Aufträge",orr:"offene Aufträge (4 W)",rn:"Auftragsnummer",iov:{all:"Auftragsübersicht (alle)","":"Auftragsübersicht"},wk:"Woche",nd:"Keine Daten gefunden.",h:"Uhr",rq1:"Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",rq2:"Auftragsdaten werden geladen",rq1f:"Die Auftragsdaten von MFR konnten nicht oder nicht schnell genug abgerufen werde.\nMöchten Sie mit den bestehenden Daten trotzdem weitermachen?",note1:"Im Bruttobetrag sind {0} Lohnkosten enthalten (netto {1}). Die darin enthaltene Umsatzsteuer beträgt {2}.",note2:"Bitte beachten Sie, nach §14 Abs. 1 Umsatzsteuergesetz ist diese Rechnung ein Zahlungsbeleg oder eine andere beweiskräftige Unterlage für 2 Jahre nach Ablauf des Kalenderjahres der Ausstellung dieser Rechnung aufzubewahren, soweit nicht aufgrund anderer gesetzlicher Regelungen andere ggf.längere Aufbewahrungsfristen gelten.",note3:"Privathaushalten erstattet das Finanzamt bis zu {0} des Arbeitslohns mit der nächsten Steuererklärung.",note4:"Für bereits erbrachte Arbeiten, Dienstleistungen, Materiallieferungen und getätigte Bestellvorgänge zum oben genannten Bauvorhaben, die sich aus dem mit Ihnen geschlossenen Vertrag ergeben, stellen wir Ihnen vertragsgemäß unsere Akontozahlung in Rechnung. Eine Endabrechnung erhalten Sie als Schlussrechnung nach Abschluss des gesamten Bauvorhabens. Das Ausführungsdatum entnehmen Sie bitte dem Schlusstext dieser Rechnung. Wir danken Ihnen herzlich für das entgegengebrachte Vertrauen und bitten Sie um kurzfristigen Ausgleich der Akontorechnung.",note13b:"Gem. §13b Umsatzsteuergesetz unterliegen Sie der Steuerschuldnerschaft des Leistungsempfängers zur Umsatzsteuer aus dieser Rechnung mit einem Steuersatz von 19%.",crI:"Rechnung erstellen",crII:"Abschlagsrechnung erstellen",dII:"Für eine Abschlagsrechnung darf nur ein Auftrag gewählt werden.",dnS:"Für eine Rechnung muss mindestens ein Auftrag gewählt werden.",inv:"Rechnung",invs:"Rechnungen",req:"Auftrag",provP:"Leistungszeitraum",provD:"Leistungsdatum",cP:"Position ändern",iRb:"Zeile darunter einfügen",dR:"Zeile löschen",sV:"USt festlegen",cD:"Löschen?",mR:"Zeile verschieben",svcPart:"Service-Anteil",vat:"Umsatzsteuer",combP:"Positionen zusammenfassen",toSetP:"Auf Setpreis umstellen (Positionen ohne Preis)",toSetPc:"Der Set-Preis wird auf die Summe seiner Positionen gesetzt und die Positionen selbst verlieren ihren Preis. Das ist nicht rückgängig zu machen (der Betrag kann danach nur noch manuell geändert werden). Fortfahren?",toSetMc:"Jeder Leistungsauftrag wird zu einer Set-Position mit der Summe als Preis zusammengefasst. Das ist nicht rückgängig zu machen (die Set-Preise können danach nur noch manuell geändert werden). Fortfahren?",iSum:"Zwischensumme",dtRel:"Freigegeben am: ",dtCr:"Erstellt am: ",rqV:"USt des Auftrags?",cthd:"wirklich aus-/einblenden ?",cst:{style:"currency",currency:"EUR"},sts:{IsWorkDone:"Arbeiten erledigt",Closed:"Auftrag geschlossen",SubcontractorPendingConfirmation:"Warten auf Bestätigung (Unterauftrag)",Scheduled:"Geplant",OfferIsRejected:"Angebot abgelehnt",OfferIsSend:"Offen (Angebot versandt)",CollaborationWaitingConfirmation:"Warten auf Bestätigung (Zusammenarbeit)",Released:"Freigegeben",OfferIsConfirmed:"Bestätigt",InProgress:"In Bearbeitung",ReadyForScheduling:"Zur Planung",Created:"Erstellt",Rejected:"Abgebrochen",Invoiced:"Rechnung gestellt","-":"-"},invHR:["Pos.","Menge","Artikelbezeichnung","VK","Summe"],frm:{invoiceaddress:"Adresse",loc:"Leistungsort / Lieferadresse",invoiceemail:"Email"}},$rcol={req:new fields_definition("Auftrag","Aufträge",[{name:"tags",label:"",type:"string",dfnc:function(e,t){""!==(e||"")&&($(this).aC("tags"),e.split(",").forEach((e=>{""!==e&&$(this).append($$.sc("tag "+e.replace(" ","_").replace("/","_").toLowerCase(),e))})))}},{name:"DateOfCreation",label:"Datum",type:"date",title:function(e){$(this).attr("title",$rct.dtCr+fdt(e.DateOfCreation).ne("-")+" \n"+$rct.dtRel+fdt(e.DateReleased).ne("-"))}},{name:"CustomerName",label:"Kunde (Firma)",type:"string"},{name:"Name",label:"Auftragsname",type:"string"},{name:"ExternalId",label:"Auftragsnummer",type:"string"},{name:"ParentExtenalId",label:"PAuftrag",type:"string"},{name:"InvoiceId",label:"RNummer",type:"string",dfnc:function(e,t){$(this).rwText(e," ").find("span").each((function(){$(this).aC("cla").click({id:$(this).text()},$inv.jdbn)}))}},{name:"State",label:"Status",type:"string"},{name:"WorkDoneAt",label:"Erledigt am",type:"date"},{name:"Description",label:"Beschreibung",type:"html"}]),itm:new fields_definition("Auftragsposition","Auftragspositionen",[{name:"NameOrNumber",label:"Bezeichnung",type:"string"},{name:"Type",label:"Typ",type:"select",required:!0,value:"Text",url:[{value:"Text",label:"Text"},{value:"Equipment",label:"Ausrüstung"},{value:"Material",label:"Material"},{value:"Service",label:"Arbeitsleistung"}],change:function(e){$req.quantChange.call(this,e)}},{name:"quantityhours",label:"Anzahl / Menge",type:"number",precision:"0.01",value:1,change:function(e){$inv.quantChange.call(this,e)}},{name:"UnitString",label:"Einheit",type:"select",url:["LFDM","Stck","Std.","QM","AW","Pauschal"],change:function(e){$inv.quantChange.call(this,e)}},{name:"net",label:"EinzelPreis netto",type:"number",precision:"0.01",value:0,change:function(e){$inv.quantChange.call(this,e)}},{name:"net_val",label:"GesamtPreis netto",type:"number",precision:"0.01",value:0},{name:"vat_val",label:"GesamtPreis USt",type:"number",precision:"0.01",value:0},{name:"svcnet_val",label:"Arbeitslohn netto",type:"number",precision:"0.01",value:0},{name:"svcvat_val",label:"Arbeitslohn USt",type:"number",precision:"0.01",value:0},{name:"net_pos",label:"Netto",type:"string"},{name:"bo_pos",label:"Brutto",type:"string"},{name:"vat",label:"USt",type:"string",value:"19,0%",change:function(e){$inv.quantChange.call(this,e)}},{name:"Note",label:"Details",type:"html",tinymce:!0}])},$ict={mdl:"Rechnungen",iov:{all:"Rechnungen (alle)","":"Rechnungen (nur fertige)","#d":"Rechnungen (nur Entwürfe)","#u":"Rechnungen (nur unbezahlt)","#r":"Rechnungen (nur angemahnt)","#a":"Rechnungen (nur Akonto)","#c":"Rechnungen (nur Storno)","#ru":"Rechnungen (nur angemahnt + unbez.)"},uba:", gesamter Zeitraum)",req:"Auftrag",inv:"Rechnung",rem:"Mahnung",in:"Rechnungsnummer",cc:"Kunde",wk:"Woche",nd:"Keine Daten gefunden.",dl:"Herunterladen",ed:"Bearbeiten",ced:"Bearbeitung fortsetzen",sItm:"Einzelheiten anzeigen",sPay:"Zahlungen anzeigen",cdI:"Entwurf der Rechnung löschen?",rel:"Neu Laden",relm:"Bitte laden Sie Liste manuell neu, um die Änderungen zu sehen.",dsp:"Rechnung anzeigen",storno:"Storno-Rechnung erstellen",credit:"Gutschrift erstellen",remd:"Mahnung erstellen",remdt:"Mahnung erstellen zur Rechnung {0}",remlst:"Mahnungen anzeigen",remdsp:"Mahnung anzeigen",remres:"Mahnung erneut senden",remresc:"Mahnung {0} wirklich erneut senden?",remresr:"Mahnung {0} wurde erfolgreich versandt.",setpyd:"Bezahlt markieren",cpyd:"Rechnung wirklich als bezahlt markieren?",setupd:"Bezahlt-Markierung aufheben",cupd:"Bezahlt-Markierung wirklich aufheben?",ivE:"Die Email-Adresse ist vermutlich nicht gültig.",ivEc:"\nMöchten Sie fortfahren?",pna:"Diese Seite ist in der Vorschau nicht verfügbar",tpe:"Die Anzahl von {0} Seiten wird aktuell nicht unterstützt",eis:"Der Rechnungsentwurf konnte nicht gespeichert werden.",iss:"Zwischenstand speichern.",p13b:"USt -> §13b",setm:"Set-Preisanzeige",setmo:{setprice:"Set mit Preis – Positionen ohne Preis",setonly:"Nur Set mit Preis – Positionen ausgeblendet"},ctp:"Ansprechpartner festlegen",mfr:"Von MFR neu abrufen",rq1:"Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",rq2:"Auftragsdaten werden geladen",iq1:"Rechnungsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",iq2:"Rechnungsdaten werden geladen",sis:"Rechnung als versandt markieren",srs:"Mahnung als versandt markieren",sisc:"Rechnung wirklich als versandt markieren?",srsc:"Mahnung wirklich als versandt markieren?",iSt:{dft:"Entwurf",uns:"nicht versandt",pyd:"bezahlt",cc:"storniert",op:"offen",due:"fällig",ovd:"überfällig",rem:"angemahnt"},rSt:["","Überfällig","2. Mahnung","3. Stufe"],pSt:{a:"Vollst.",p:"Teilz."},ivT:{i:"AbschlagsR.",f:"SchlussR",r:"Rechnung",c:"StornoR."},rovlh:"Übersicht der bisherigen Mahnungen",rovl:["Betreff","Betrag","Betrag gezahlt","fertiggestellt am"],remHR:["Rechnung","vom","Rechnungsbetrag","bereits bezahlt","noch offen"],translatePaymentTerm:e=>(e||"").replace("wd"," Werktagen").replace("d"," Tagen").replace("wk"," Wochen")||"10 Tagen",payi:{account:"Konto",name:"Zahler",text:"Verw.Zweck",InvoiceID:"Rechnung",amount:"Betrag",date:"Datum",manual:"Typ"}},$invcol={datev:new fields_definition("Rechnung","Rechnungen",[{name:"Umsatz (ohne Soll/Haben-Kz)",label:"Umsatz (ohne Soll/Haben-Kz)",type:"string"},{name:"vf",label:"vf",type:"string"},{name:"Soll/Haben-Kennzeichen",label:"Soll/Haben-Kennzeichen",type:"string"},{name:"Konto",label:"Konto",type:"string"},{name:"Gegenkonto",label:"Gegenkonto",type:"string"},{name:"BU-Schlüssel",label:"BU-Schlüssel",type:"string"},{name:"Belegdatum",label:"Belegdatum",type:"string"},{name:"Belegfeld 1",label:"Belegfeld 1",type:"string"},{name:"Belegfeld 2",label:"Belegfeld 2",type:"string"},{name:"Buchungstext",label:"Buchungstext",type:"string"}]),inv:new fields_definition("Rechnung","Rechnungen",[{name:"invstatus",label:"Status",type:"select",url:$ict.iSt},{name:"balance",label:"Umsatz",type:"string",dtype:"currency"},{name:"CustomerName",label:"Kunde",type:"string"},{name:"InvoiceId",label:"RNummer",type:"string"},{name:"InvoiceType",label:"Typ",type:"select",url:$ict.ivT},{name:"request",label:"Auftrag",type:"string",dtype:"num"},{name:"vat",label:"MwSt",type:"string",dtype:"num"},{name:"deb_cred",label:"Soll/Haben",type:"string"},{name:"customer",label:"Konto",type:"string",dtype:"num"},{name:"contra_account",label:"Gegenkonto",type:"string",dtype:"num"},{name:"Belegdatum",label:"Belegdatum",type:"date"},{name:"reminderstatus",label:"MahnStatus",type:"select",url:$ict.rSt},{name:"reminder",label:"# Mahnungen",type:"integer"},{name:"Buchungstext",label:"Buchungstext",type:"string"},{name:"Payment",label:"Zahlung",type:"string"}]),rem:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"amount",label:"Rechnungsbetrag",type:"number",precision:"0.01",value:1},{name:"amount_payed",label:"bereits bezahlt",type:"number",precision:"0.01",value:1}]),rem2:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"DocumentName",label:"Name",type:"string"},{name:"subject",label:"Betreff",type:"string"},{name:"DateSent",label:"Versanddatum",type:"date"},{name:"status",label:"Status",type:"string"},{name:"amount_open",label:"offener Betrag",type:"number",precision:"0.01"},{name:"InvoiceId",label:"RNummer",type:"string"}]),rid:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"type",label:"Typ",type:"select",url:[["f","einfache Zahlungserinnerung"],["m","Mahnung"],["l","letzte Mahnung"]],required:!0},{name:"level",label:"Stufe",type:"select",url:[["1","Stufe 1"],["2","Stufe 2"],["3","Stufe 3"],["4","Stufe 4"],["5","Stufe 5"],["6","Stufe 6"]],required:!0}]),ctp:new fields_definition("Ansprechpartner","Ansprechpartner",[{name:"name",label:"Name",type:"string"},{name:"email",label:"Email",type:"string"}])},gi=(e,t)=>$$.sc("glyphicon glyphicon-"+e).aC(t),$inv={init2:function(e,t){e=e||"inv",t=t||{},$ocms.getScript([],(function(){$inv.init3(e,t)}))},init3:async function(e,t){$fis.cf(!0);let n=$fis.lf(!0);$("#topbar").ocmsmenu([]),$("#activemodule").text($ict.mdl);let i=[(async()=>{await $fis.getAuth("fds_inv")>0&&($inv.prepLst(""),n.aC("fix"))})(),new Promise(((e,t)=>{$fis.prepAuth(["fds_reminder"])}))];await Promise.all(i)},prepLst:function(e){let t=new Date,n=$fis.lf(!0).ldng(1),i=new Date("2021-01-01");$fis.frm_list().IN((function(){}));let a=[];$.each($ict.iov,((e,t)=>{a.push({lbl:t,fnc:()=>{$inv.prepLst(e),n.aC("fix")}})})),$fis.lfm().ocmsmenu([{lbl:"Filter",itm:a}]);$$.i({placeholder:$ict.in}).appendTo($$.dc("mth ivn",n)).enterKey((function(e){let t=$(this),n=t.val()||"";e.stopPropagation(),t.parent().siblings().rC("selected"),n.length>3&&(t.parent().aC("selected"),$inv.renderinv("i:"+n,"s","all"),t.val(""))})),$$.i({placeholder:$ict.cc}).appendTo($$.dc("mth ivc",n)).enterKey((function(e){let t=$(this),n=t.val()||"";e.stopPropagation(),t.parent().siblings().rC("selected"),n.length>=3&&(t.parent().aC("selected"),$inv.renderinv("c:"+n,"s","all"),t.val(""))}));"#"===e.substr(0,1)&&$$.dc("mth extra",n).text($ict.iov[e].replace(")",$ict.uba)).click((function(t){let n=$(this);if(t.stopPropagation(),n.siblings().rC("selected"),!0===n.is(".selected")){n.toggleClass("selected");let t=fdt(new Date,"yy-MM-dd");$inv.renderinv(t,"a",e)}n.aC("selected")})),n.append("
");let r=$$.dc("mthl",n),l=t.getFullYear(),d=t.getMonth()+1;for(let t=i.getFullYear();t<=l;t++){let n=$$.dc("yr").prependTo(r).text($ict.iov[e]+" - "+t.toString()).toggleClass("selected",t===l);n.click({yr:t},(function(e){e.stopPropagation(),n.siblings().rC("selected"),n.aC("selected")}));let a=$$.dc("mfrm",n);for(let n=0;n<(t!==l?12:d);n++){i=new Date(t,n,1);let r=$$.dc("mth").prependTo(a).text($ict.iov[e]+" - "+fdt(i,"MMM yyyy"));if(r.click({yr:t,mt:n},(function(t){if(t.stopPropagation(),r.siblings().rC("selected"),!0===r.is(".selected")){r.toggleClass("selected");let n=fdt(new Date(t.data.yr,t.data.mt,1),"yy-MM-dd");$inv.renderinv(n,"m",e)}r.aC("selected")})),""===e){$$.dc("mthdl",r).append(gi("compressed","ico")).click({yr:t,mt:n},(function(e){e.stopPropagation();let t=fdt(new Date(e.data.yr,e.data.mt,1),"yy-MM-dd");$inv.downloadzip(t,"m")}))}let l=getMonday(i),d=new Date(i);d.setMonth(d.getMonth()+1),d.setDate(0),d=getMonday(d);let s=$$.dc("wfrm",r);for(;l<=d;){let t=$$.dc("wk",s).text(($ict.wk||"W")+" "+fdt(l,"dd.MM.yy"));t.click({rd:new Date(l)},(function(n){n.stopPropagation();let i=fdt(n.data.rd,"yy-MM-dd");$inv.renderinv(i,"w",e),r.siblings().rC("selected").find(".wk").rC("selected"),r.aC("selected").find(".wk").rC("selected"),t.aC("selected")})),$$.dc("wkdl",t).append(gi("compressed","ico")).click({rd:new Date(l)},(function(e){e.stopPropagation();let t=fdt(e.data.rd,"yy-MM-dd");$inv.downloadzip(t,"w")})),l.setDate(l.getDate()+7)}}}n.ldng(0)},rerenderinv:function(){let e=$("#contentframe .invfrm:first");if(e.length>0){let t=e.data("sets")||{};t.mode&&$inv.renderinv(t.tgt,t.mode,t.includes)}},renderinv:function(e,t,n){let i=$fis.frm_list(!0,!0).ldng(1),a=$$.dc("invfrm",i).aC("md"+t).data("sets",$.extend({},{tgt:e,mode:t,includes:n})),r=$fis.lf();$ocms.postXT({url:$ocms.url("inv/invl"),data:{mode:t,tgt:e,includes:n},success:i=>{r.rC("fix").aC("hd"),$$.dc("ovhd",a).text(i.admin.title);let l=$$.tblset({},a),d=$invcol.inv,s=$$.tr(l.hd);$$.th(s);$.each(d.fields||[],((e,t)=>{$$.th(s).text(t.label),"vat"===t.name&&$$.th(s)})),$.each(i.invoices||[],((s,c)=>{let o=$$.tr(l.bdy);o.click((function(){r.rC("fix").aC("hd"),o.toggleClass("selected").siblings().rC("selected").find("td.av").rC("av"),o.find("td.av").rC("av"),!0===o.is(".selected")?$inv.iMn(c):$inv.eM()}));let u=$$.td(o,{class:"raux"});c.hasFile?($$.dc("idl ilbtn",u,{title:$ict.dl+"\n"+c.DocumentName}).append(gi("save-file","ico")).click({id:c.Id},$inv.downloadinv),$$.dc("idl ilbtn",u,{title:$ict.dsp+"\n"+c.DocumentName}).append(gi("eye-open","ico")).click({id:c.Id,typ:"inv"},$inv.jdisp)):!1===c.isFinal&&!0===$fis.isAuth("fds_inv",2)&&$$.dc("idl ilbtn",u,{title:$ict.ed}).append(gi("edit","ico")).click({id:c.Id},$inv.doContInv),$$.dc("iitm ilbtn",u,{title:$ict.sItm}).append(gi("list","ico")).click({id:c.Id},$inv.showitm),$$.dc("iitm ilbtn",u,{title:$ict.sPay}).append(gi("euro","ico")).click({id:c.Id},$inv.showpay),$.each(d.fields||[],((r,l)=>{let d,s,u=$$.td(o).aC(l.dtype);switch("select"===(l.type||"")?u.text((l.url||{})[c[l.name]]||""):u.text(c[l.name]),l.name||""){case"vat":d=$$.sel().appendTo($$.td(o,{class:"vsel"})),s=(i.admin.ust_options||"19,0%;16,0%;0,0%").split(";"),$.each(s,((e,t)=>{$$.opt(t,t).appendTo(d)})),d.click((function(e){e.stopPropagation()})).val(c[l.name]).change().change({frm:a,tgt:e,mode:t,id:c.Id,td:u,includes:n},$inv.setvat),u.toggleClass("hl",c[l.name].substr(0,2)!==s[0].substr(0,2)).click((function(e){e.stopPropagation(),$(this).toggleClass("av")}));break;case"balance":u.aC("sh_"+(c.SollHaben||"").toLowerCase());break;case"invstatus":case"reminderstatus":u.aC(("invstatus"===l.name?"is_":"rs_")+c[l.name])}}))}))},complete:()=>{i.ldng(0)}})},setvat:function(e){let t=$(this),n=e.data||{};$ocms.postXT({url:$ocms.url("inv/setvat"),data:{id:n.id,val:t.val()},success:e=>{n.td.rC("av"),$inv.renderinv(n.tgt,n.mode,n.includes)}})},downloadzip:function(e,t){$(this).empty();window.open($ocms.url("inv/datevzip?mode="+t+"&tgt="+encodeURIComponent(e)),"_blank")},showitm:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&$ocms.postXT({url:$ocms.url("inv/rqi"),data:{id:e.data.id},success:e=>{let t=$$.dc("rfrm");(e.requests||[]).length<1?t.text($ict.nd):$.each(e.requests||[],(function(e,n){let i=$$.dc("srq",t);$$.dc("nme",i).text(n.name);let a=$$.tblset({class:"if"},i);$.each(n.items||[],((e,t)=>{let n=$$.tr({id:"itm"+t.Id}).appendTo(a.bdy);$$.td(n).text(t.NameOrNumber),$$.td(n).text(t.Type),$$.td(n).aC("currency").text(t.net_pos),$$.td(n).aC("currency").text(t.bo_pos),$$.td(n).aC("num").text(t.vat)}))})),$ocms.dlg(t,{width:1e3})}})},showpay:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&$ocms.postXT({url:$ocms.url("inv/pyi"),data:{id:e.data.id},success:e=>{let t=$$.dc("rfrm");if((e.payments||[]).length<1)t.text($ict.nd);else{let n=$$.tblset({class:"if"},t),i=$$.tr(n.hd);$.each(["date","account","name","text","InvoiceID","amount","manual"],((e,t)=>{$$.th(i,$ict.payi[t])})),$.each(e.payments,((e,t)=>{let i=$$.tr({id:"itm"+t.banking_uid}).appendTo(n.bdy);$$.td(i).aC("date").text(t.date),$$.td(i).text(t.account),$$.td(i).text(t.name),$$.td(i).text(t.text),$$.td(i).text(t.InvoiceID),$$.td(i).aC("currency").text(t.amount),$$.td(i).text(t.manual)}))}$ocms.dlg(t,{width:1e3,title:"Übersicht der Zahlungen"})}})},downloadinv:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&window.open($ocms.url("inv/rdoc?id="+e.data.id),"_blank")},doContInv:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&$inv.cntInv({id:e.data.id})}},$$inv={init2:$inv.init2,auth:{}};export default $$inv;$inv.cInv=function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&!1!==$fis.isAuth("fds_inv",2)&&$inv.cInv2({id:e.data.id})},$inv.rMn=e=>{let t=[{lbl:$ict.req,itm:[]}];return!0===bool(e,!1)&&!0===$fis.isAuth("fds_inv",2)&&Array.prototype.push.apply(t[0].itm,[{lbl:$rct.crI,fnc:$inv.ccInv,data:{typ:"r"}},{lbl:$rct.crII,fnc:$inv.ccInv,data:{typ:"i"}}]),t.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(t)},$inv.iMnr=e=>{let t=booln(e.isFinal,!0),n=e.Id,i=booln(e.fds,!1),a=[{glyph:"glyphicon-menu-left",fnc:()=>{$fis.frm_edit().remove()}},{lbl:$ict.inv,itm:[]},{lbl:$ict.rem,itm:[]}];return!1===t&&!0===$fis.isAuth("fds_inv",2)?a[1].itm.push({lbl:$ict.ced,fnc:$inv.clCntInv}):!0===$fis.isAuth("fds_inv",1)&&a[1].itm.push({lbl:$ict.dsp,fnc:()=>$inv.disp(n,"inv")}),!0===i&&!0===t&&!0===$fis.isAuth("fds_inv",2)&&(a[1].itm.push({lbl:$ict.storno,fnc:()=>$inv.storno(n,i)}),a[1].itm.push({lbl:$ict.credit,fnc:()=>$inv.credit(n,i)})),!0===t&&!0===$fis.isAuth("fds_reminder",2)&&(a[2].itm.push({lbl:$ict.remd,fnc:()=>$inv.ccRem(n,e.InvoiceId)}),a[2].itm.push({lbl:$ict.remlst,fnc:()=>$inv.dspRem(n)})),!0===t&&!0===$fis.isAuth("fds_reminder",2)&&!1===booln(e.IsSent,!1)&&a[2].itm.push({lbl:$ict.srs,fnc:()=>$inv.srs(n)}),a.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(a)},$inv.iMn=e=>{let t=booln(e.isFinal,!0),n=e.Id,i=booln(e.fds,!1),a=[{glyph:"glyphicon-menu-left",fnc:()=>{$fis.frm_edit().remove()}},{lbl:$ict.inv,itm:[]},{lbl:$ict.rem,itm:[]}];return!1===t&&!0===$fis.isAuth("fds_inv",2)?a[1].itm.push({lbl:$ict.ced,fnc:()=>{$inv.cntInv({id:n})}}):!0===$fis.isAuth("fds_inv",1)&&a[1].itm.push({lbl:$ict.dsp,fnc:()=>$inv.disp(n,"inv")}),!0===$fis.isAuth("fds_inv",2)&&(a[1].itm.push({lbl:$ict.storno,fnc:()=>$inv.storno(n,i)}),a[1].itm.push({lbl:$ict.credit,fnc:()=>$inv.credit(n,i)})),!0===t&&!1===booln(e.IsPayed,!1)?(!0===$fis.isAuth("fds_reminder",2)&&a[2].itm.push({lbl:$ict.remd,fnc:()=>$inv.ccRem(n,e.InvoiceId)}),!0===$fis.isAuth("fds_inv",2)&&a[1].itm.push({lbl:$ict.setpyd,fnc:()=>$inv.setPyd(n)})):!0===t&&!0===booln(e.IsPayed,!1)&&"m"===(e.PaymentStatus||"")&&!0===$fis.isAuth("fds_inv",2)&&a[1].itm.push({lbl:$ict.setupd,fnc:()=>$inv.setUpd(n)}),!0===$fis.isAuth("fds_reminder",2)&&a[2].itm.push({lbl:$ict.remlst,fnc:()=>$inv.dspRem(n)}),!0===t&&!0===$fis.isAuth("fds_inv",2)&&!1===booln(e.IsSent,!1)&&a[1].itm.push({lbl:$ict.sis,fnc:()=>$inv.sis(n)}),!1===i&&a[1].itm.push({lbl:$ict.mfr,fnc:()=>$inv.mfrrel(n)}),$("#topbar").ocmsmenu(a)},$inv.emOpt=e=>"iss,p13b,ctp"+(""===((e||{}).setmode||"")?",setm":""),$inv.eM=(e,t,n)=>{let i=[];return!0!==booln(e,!1)&&!0!==booln(t,!1)||i.push({glyph:"glyphicon-menu-left",fnc:()=>{$fis.lf(!0),$fis.frm_edit().remove()}}),!0===(n||"").split(",").includes("iss")&&i.push({lbl:$ict.iss,fnc:$inv.ssave}),!0===(n||"").split(",").includes("ctp")&&i.push({lbl:$ict.ctp,fnc:$inv.sctp}),!0===(n||"").split(",").includes("p13b")&&i.push({lbl:$ict.p13b,fnc:$inv.sp13b}),!0===(n||"").split(",").includes("setm")&&i.push({lbl:$ict.setm,fnc:$inv.ssetmode}),!0===(n||"").split(",").includes("iss")&&(i.push({lbl:"Änderungshistorie",fnc:()=>$inv.d.history()}),i.push({lbl:"Änderungen verwerfen",fnc:()=>$inv.d.discard()})),!0===booln(e,!1)&&i.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(i)},$inv.d={tbl:()=>$("div.invoice_layout table.invi"),layout:()=>$("div.invoice_layout"),token:function(){return $inv.d.tbl().data("dtoken")||""},hashes:function(){let e=$inv.d.tbl().data("bai")||[],t={};return $.each(e,((e,n)=>{t[(n.Id||"").toString()]=JSON.stringify(n)})),t},seed:function(e){let t=$inv.d.layout();t.aC("freeze");let n=$ocms.postXT({url:$ocms.url("inv/dopen"),data:{payload:JSON.stringify(e)},success:e=>{$inv.d.tbl().data("dtoken",e.token).data("dver",e.version).data("dhashes",$inv.d.hashes()).data("dorder",$inv.d.order()),$fis.draft.bind(e.token,{onReady:()=>$inv.d.refresh(),onExpiring:e=>$inv.d.warnExpiry(e),onClosed:e=>$inv.d.closed(e)}),$inv.d.refresh()},error:()=>{t.rC("freeze")},complete:()=>{$inv.d.tbl().removeData("dseeding").removeData("dseedpromise")}});return $inv.d.tbl().data("dseedpromise",n),n},refresh:function(e){let t=$inv.d.token();""!==t&&$ocms.postXT({url:$ocms.url("inv/dstate"),data:{token:t},success:t=>{$inv.d.applyState(t),"function"==typeof e&&e(t)},error:e=>{e&&410===e.status&&$inv.d.closed("expired")},complete:()=>{$inv.d.layout().rC("freeze")}})},applyState:function(e){let t=$inv.d.tbl();if(t.length<1)return;let n=t.data("dver");"number"==typeof n&&"number"==typeof e.version&&e.version$$.dc("dnote").aC(e.style||"InvoiceNotes").text(e.text)))},applyItems:function(e,t){let n=e=>void 0===e?null:e;(t||[]).forEach((t=>{if(!t)return;let i=(t.Id||"").toString();if(""===i)return;let a=e.children("tbody").filter(((e,t)=>(($(t).data()||{}).Id||"").toString()===i)).first();if(a.length<1)return;let r=t.itm||[],l={},d=a.find("tr.title").first(),s=d.length?d:null;r.forEach((e=>{let t=(e.id||"").toString();if(""===t)return;l[t]=!0;let i=a.find("#itm"+t).first(),r=i.length<1;r&&(i=$$.tr(a,{id:"itm"+t,class:"itm"}));let d=i.data()||{},c=r||(d.Type||"")!==(e.typ||"")||d.net!==n(e.v)||d.net_val!==n(e.vt)||d.vat_val!==n(e.vv)||d.svcnet_val!==n(e.vs)||d.svcvat_val!==n(e.vsv)||(d.position||"")!==(null!=e.p?e.p:"");$.extend(d,{Id:t,Type:e.typ,net:n(e.v),net_val:n(e.vt),vat_val:n(e.vv),svcnet_val:n(e.vs),svcvat_val:n(e.vsv),vat:e.vat,position:null!=e.p?e.p:"",SetItmId:null!=e.SetItmId?e.SetItmId:null}),r&&$.extend(d,{htmltext:e.t,quantity:e.q}),i.data(d),s?i.prev()[0]!==s[0]&&i.insertAfter(s):a.children().first()[0]!==i[0]&&a.prepend(i),s=i,c&&$inv.rrw.call(i)})),a.find("tr.itm").each(((e,t)=>{let n=(($(t).data()||{}).Id||"").toString();""===n||l[n]||$(t).remove()}))}))},applySetDisplay:function(e,t){e.find("tr.itm").each(((e,n)=>{let i=$(n),a=((i.data()||{}).Id||"").toString();if(""===a||!Object.prototype.hasOwnProperty.call(t,a))return;let r=t[a]||{};i.tC("sethdr",bool(r.h,!1)),!1===bool(r.p,!0)&&i.find("td.currency").text("")}))},sync:function(e){let t=$inv.d.token();if(""===t){let t=$inv.d.tbl().data("dseedpromise");return t?$.when(t).then((()=>$inv.d.sync(e))):$.when()}return $inv.d.layout().aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dpatch"),data:{token:t,delta:JSON.stringify(e)},success:()=>{$inv.d.refresh()},error:e=>{$inv.d.layout().rC("freeze"),e&&410===e.status&&$inv.d.closed("expired")}})},order:function(){return($inv.d.tbl().data("bai")||[]).map((e=>(e.Id||"").toString()))},syncChanged:function(e){let t=e.data("bai")||[],n=e.data("dhashes")||{},i={},a=[],r=[],l=[];$.each(t,((e,t)=>{let r=(t.Id||"").toString(),l=JSON.stringify(t);i[r]=l,n[r]!==l&&a.push(t)})),$.each(n,(e=>{void 0===i[e]&&r.push(e)}));let d=$inv.d.order(),s=e.data("dorder")||[];return e.data("dhashes",i).data("dorder",d),a.forEach((e=>l.push($inv.d.sync({Target:"block.replace",Ref:(e.Id||"").toString(),Value:e})))),r.forEach((e=>l.push($inv.d.sync({Target:"block.remove",Ref:e})))),s.length===d.length&&s.slice().sort().join(",")===d.slice().sort().join(",")&&s.join(",")!==d.join(",")&&l.push($inv.d.sync({Target:"block.order",Value:d})),$.when.apply($,l).promise()},syncField:function(e,t){let n={invoicetitle:"title",invoiceaddress:"address",invoiceemail:"email",loc:"provisionlocation",provisionlocation:"provisionlocation",provisionperiod:"provisionperiod"}[e];n&&$inv.d.sync({Target:n,Value:t})},footer:function(e,t,n){let i=e.children("tfoot").empty();e.nextAll(".fnote").remove();let a=bool(n.p13b,!1),r=(e,t,n)=>$$.tdc("currency",$$.tr(i,{class:n||"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text(e)]),fnum(t,$rct.cst)),l=t=>$$.dc("fnote").insertAfter(e).rwText(t);r("Netto",t.total_net||0),!1===a&&$.each(t.vat||{},((e,t)=>r($rct.vat+" "+e+"%",t,"tvat"))),r("Summe",t.total_gross||0);let d=n.type||"";"i"===d?(l($rct.note2),l($rct.note4)):"c"===d?l($rct.note2):(l(string($rct.note3,[fnum(((t.service_net||0)+(t.service_vat||0))*(n.tax_servicerefund||0),$rct.cst)])).aC("ntax"),l($rct.note2),l(string($rct.note1,[fnum((t.service_net||0)+(t.service_vat||0),$rct.cst),fnum(t.service_net||0,$rct.cst),fnum(t.service_vat||0,$rct.cst)]))),!0===a&&l($rct.note13b)},validation:function(e){let t=$("div.invoice_layout");if(t.length<1)return;let n=t.children(".dvalidation");n.length<1&&(n=$$.dc("dvalidation"),t.prepend(n)),n.empty().tC("hidden",(e||[]).length<1),$.each(e||[],((e,t)=>$$.dc("dvmsg",n).aC(t.severity).text(t.message)))},preview:function(){let e=$inv.d.token();if(""===e)return;let t=$inv.d.layout(),n=($inv.d.tbl().data("new")||{}).invoiceemail||"";!1===$fis.ValidateEmail(n)&&!1===bool(confirm($ict.ivE+$ict.ivEc),!1)||(t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dpreview"),data:{token:e},success:n=>{t.rC("freeze");let i=$$.dc("imagecollection pdfpreview"),a=Math.round(.88*vh()),r=n.total;r>10&&$$.dc("note warn",i).text($ict.tpe),$.each(n.img||[],((e,t)=>{$$.dc("pdfp",i).append($$.img(t).css("max-height",(a-rpx(6)).toString()+"px"))}));for(let e=(n.img||[]).length+1;e<=r;e++)$$.dc("pdfp ph",i).append($$.dc("note",$ict.pna));$ocms.dlg(i,{size:[a,Math.round(.88*vw())],zindex:50,form:!1,button:$rct.crI,confirm:function(n){let i=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dsave"),data:{token:e},success:e=>{$ocms.postXT({url:$ocms.url("req/sconf"),data:{id:e.invid},success:t=>{i.trigger("modal_close"),!0===t.hasFile&&window.open($ocms.url("req/idoc")+"?id="+e.invid,"_blank"),$inv.d.close(),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),i.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},error:()=>{t.rC("freeze"),alert($ict.eis)}})},cancel:function(e){confirm($ict.cdI)&&($inv.d.close(),$inv.rReload())}})},error:()=>{t.rC("freeze"),alert($ict.eis)}}))},save:function(){let e=$inv.d.token();if(""===e)return;let t=$inv.d.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dsave"),data:{token:e},success:e=>{$inv.d.tbl().data("invid",e.invid)},error:()=>{alert($ict.eis)},complete:()=>{t.rC("freeze")}})},history:function(){let e=$inv.d.token();""!==e&&$ocms.postXT({url:$ocms.url("inv/dhistory"),data:{token:e},success:e=>{let t=$$.dc("dhist");if((e.history||[]).length<1)$$.dc("note",t).text("Noch keine Änderungen erfasst.");else{let n=$$.tblset({class:"invtbl fullwidth"},t);$$.tr(n.hd).append([$$.th().text("Zeit"),$$.th().text("Feld"),$$.th().text("Alt"),$$.th().text("Neu")]),$.each(e.history,((e,t)=>$$.tr(n.bdy).append([$$.tdc("keep",fdt(t.timestamp)),$$.td().text(t.target),$$.td().text(t.oldValue),$$.td().text(t.newValue)])))}$ocms.dlg(t,{width:800,form:!1})}})},discard:function(){let e=$inv.d.tbl().data("invid")||"";""!==e?!1!==confirm("Alle Änderungen verwerfen und den zuletzt gespeicherten Stand neu laden?")&&($inv.d.close(),$inv.cntInv({id:e})):alert("Es wurde noch kein Zwischenstand gespeichert, der wiederhergestellt werden könnte.")},warnExpiry:function(e){let t=Math.max(1,Math.round((e||0)/60));$fis.notifications.push({severity:"info",title:"Entwurf läuft ab",message:"Der Rechnungsentwurf läuft in etwa "+t+" Minute(n) ab. Bitte zwischenspeichern, sonst gehen die Änderungen verloren."})},closed:function(e){let t=$inv.d.token();$inv.d.tbl().removeData("dtoken"),""!==t&&$fis.draft.release(t),$fis.frm_edit().remove(),$fis.lf(!0),$fis.notifications.push({severity:"error",title:"Entwurf geschlossen",message:"expired"===e?"Der Rechnungsentwurf ist wegen Inaktivität abgelaufen. Nicht gespeicherte Änderungen sind verloren.":"Der Rechnungsentwurf wurde geschlossen."});try{$inv.rReload()}catch(e){}},close:function(){let e=$inv.d.token();""!==e&&($ocms.postXT({url:$ocms.url("inv/dclose"),data:{token:e}}),$fis.draft.release(e)),$inv.d.tbl().removeData("dtoken")}},$inv.rd={tbl:()=>$("div.invoice_layout table.invi"),layout:()=>$("div.invoice_layout"),token:function(){return $inv.rd.tbl().data("rdtoken")||""},seed:function(e){let t=$inv.rd.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dopen"),data:{payload:JSON.stringify(e)},success:e=>{$inv.rd.tbl().data("rdtoken",e.token).data("rdver",e.version),$fis.draft.bind(e.token,{onReady:()=>$inv.rd.refresh(),onExpiring:e=>$inv.rd.warnExpiry(e),onClosed:e=>$inv.rd.closed(e)}),$inv.rd.refresh()},error:()=>{t.rC("freeze")}})},refresh:function(e){let t=$inv.rd.token();""!==t&&$ocms.postXT({url:$ocms.url("rem/dstate"),data:{token:t},success:t=>{$inv.rd.applyState(t),"function"==typeof e&&e(t)},error:e=>{e&&410===e.status&&$inv.rd.closed("expired")},complete:()=>{$inv.rd.layout().rC("freeze")}})},applyState:function(e){let t=$inv.rd.tbl();if(t.length<1)return;let n=t.data("rdver");"number"==typeof n&&"number"==typeof e.version&&e.version{let t=$$[0]("p").aC("dnote intro").rwText(e);a.length?t.insertBefore(a):t.appendTo(n)})),((e||{}).closing||[]).forEach((e=>$$[0]("p").aC("dnote closing").rwText(e).appendTo(n)))},sync:function(e){let t=$inv.rd.token();""!==t&&($inv.rd.layout().aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dpatch"),data:{token:t,delta:JSON.stringify(e)},success:()=>{$inv.rd.refresh()},error:e=>{$inv.rd.layout().rC("freeze"),e&&410===e.status&&$inv.rd.closed("expired")}}))},syncField:function(e,t){if(""===$inv.rd.token())return;let n={subject:"subject",invoiceaddress:"address",invoiceemail:"email",text:"text"}[e];n&&$inv.rd.sync({Target:n,Value:t})},syncAmount:function(e,t){""!==$inv.rd.token()&&($inv.rd.sync({Target:"amount",Value:(null!=e?e:0).toString()}),$inv.rd.sync({Target:"amount_payed",Value:(null!=t?t:0).toString()}))},footer:function(e,t){let n=e.children("tfoot").empty(),i=$$.tr(n,{class:"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text("Offener Betrag")]);$$.tdc("currency",i,fnum(t.amount_open||0,$rct.cst))},validation:function(e){let t=$inv.rd.layout();if(t.length<1)return;let n=t.children(".dvalidation");n.length<1&&(n=$$.dc("dvalidation"),t.prepend(n)),n.empty().tC("hidden",(e||[]).length<1),$.each(e||[],((e,t)=>$$.dc("dvmsg",n).aC(t.severity).text(t.message)))},preview:function(){let e=$inv.rd.token();if(""===e)return;let t=$inv.rd.layout(),n=($inv.rd.tbl().data("new")||{}).invoiceemail||"";!1===$fis.ValidateEmail(n)&&!1===bool(confirm($ict.ivE+$ict.ivEc),!1)||(t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dpreview"),data:{token:e},success:n=>{t.rC("freeze");let i=$$.dc("imagecollection pdfpreview"),a=Math.round(.88*vh());$.each(n.img||[],((e,t)=>{$$.dc("pdfp",i).append($$.img(t).css("max-height",(a-rpx(6)).toString()+"px"))})),$ocms.dlg(i,{size:[a,Math.round(.88*vw())],zindex:50,form:!1,button:$ict.remd,confirm:function(n){let i=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dsave"),data:{token:e},success:e=>{$ocms.postXT({url:$ocms.url("rem/conf"),data:{id:e.remid},success:()=>{i.trigger("modal_close"),window.open($ocms.url("rem/idoc")+"?id="+e.remid,"_blank"),$inv.rd.close(),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),i.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},error:()=>{t.rC("freeze"),alert($t.f1)}})},cancel:function(e){confirm($ict.cdI)&&($inv.rd.close(),$inv.rReload())}})},error:()=>{t.rC("freeze"),alert($t.f1)}}))},save:function(){let e=$inv.rd.token();if(""===e)return;let t=$inv.rd.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dsave"),data:{token:e},success:e=>{$inv.rd.tbl().data("remid",e.remid)},error:()=>{alert($t.f1)},complete:()=>{t.rC("freeze")}})},history:function(){let e=$inv.rd.token();""!==e&&$ocms.postXT({url:$ocms.url("rem/dhistory"),data:{token:e},success:e=>{let t=$$.dc("dhist");if((e.history||[]).length<1)$$.dc("note",t).text("Noch keine Änderungen erfasst.");else{let n=$$.tblset({class:"invtbl fullwidth"},t);$$.tr(n.hd).append([$$.th().text("Zeit"),$$.th().text("Feld"),$$.th().text("Alt"),$$.th().text("Neu")]),$.each(e.history,((e,t)=>$$.tr(n.bdy).append([$$.tdc("keep",fdt(t.timestamp)),$$.td().text(t.target),$$.td().text(t.oldValue),$$.td().text(t.newValue)])))}$ocms.dlg(t,{width:800,form:!1})}})},warnExpiry:function(e){let t=Math.max(1,Math.round((e||0)/60));$fis.notifications.push({severity:"info",title:"Entwurf läuft ab",message:"Der Mahnentwurf läuft in etwa "+t+" Minute(n) ab. Bitte zwischenspeichern, sonst gehen die Änderungen verloren."})},closed:function(e){let t=$inv.rd.token();$inv.rd.tbl().removeData("rdtoken"),""!==t&&$fis.draft.release(t),$fis.frm_edit().remove(),$fis.lf(!0),$fis.notifications.push({severity:"error",title:"Entwurf geschlossen",message:"expired"===e?"Der Mahnentwurf ist wegen Inaktivität abgelaufen. Nicht gespeicherte Änderungen sind verloren.":"Der Mahnentwurf wurde geschlossen."});try{$inv.rReload()}catch(e){}},close:function(){let e=$inv.rd.token();""!==e&&($ocms.postXT({url:$ocms.url("rem/dclose"),data:{token:e}}),$fis.draft.release(e)),$inv.rd.tbl().removeData("rdtoken")}},$inv.cInv2=function(e){let t=$$.dc("rfrm").ldng(1),n=$ocms.dlg(t,{width:1e3});n&&n.ft.rwText($rct.rq1);let i=()=>{$ocms.postXT({url:$ocms.url("req/get"),timeout:60,data:{id:e.id,mode:"r"},success:t=>{t.admin=t.admin||{};let n=$fis.lf(!0).aC("fix").rC("hd");if($fis.frm_edit().IN(),$inv.eM(!0,!0),(t.requests||[]).length<1)n.aC("fix").text($rct.nd);else{$$.dc("lh",n,$rct.mdl);let i=$$.d(),a=$$.ul({class:"rql"}).data({search:e.id,parent:t.admin.parent}).appendTo(n),r={},l=$rcol.req.lbl();$.each(t.requests||[],(function(e,t){let n=$$.li({class:"cli rli"}).data($.extend({},t)).appendTo(a),d=$$.dc("lihd",n).addClass(t.state);!0===booln(t.open,!1)&&d.append($$.sc("cbox").click((()=>{n.tC("checked"),i.find("li").rC("checked"),!0===n.is(".checked")?$inv.rMn(t.open):$inv.eM(!0)}))),d.append([$$.sc("eid",t.ExternalId),$$.sc("nme",t.Name)]),$$.dc("lidt",n).append([$$.dc("rqs").append([$$.s(l.State+": "),$$.s($rct.sts[t.State||"-"])]),$$.dc("ivn").append([$$.s(l.InvoiceId+": "),$$.s(t.InvoiceId||"- -")]),$$.dc("wda").append([$$.s(l.WorkDoneAt+": "),$$.s(fdt(t.WorkDoneAt,"dd.MM.yyyy"))])]),r[t.Id]=n})),(t.inv||[]).length>0&&($$.dc("lh",n,$rct.invs),i=$$.ul({class:"ivl"}).appendTo(n),$.each(t.inv||[],((e,t)=>{let n=$$.li({class:"cli ili"}).data($.extend({},t)).appendTo(i),r=$$.dc("lihd",n).addClass(t.invstatus);!1===booln(t.isFinal,!0)?r.append($$.sc("cbox").click((()=>{""!==(t.Id||"")&&(n.tC("checked").siblings().rC("checked"),a.find("li").rC("checked"),!0===n.is(".checked")?$inv.iMnr(t):$inv.eM(!0))}))):["","dft"].indexOf(t.invstatus)<0&&r.append($$.sc("dli").click((function(){$inv.disp(t.Id,"inv")}))),r.append($$.sc("nme",t.DocumentName||t.Id)),$$.dc("lidt",n).append([$$.dc("wda").append([$$.s(fdt(t.DateCreated,"dd.MM.yyyy"))]),$$.d().text($ict.iSt[t.invstatus]||t.invstatus)])})))}},complete:()=>{n&&n.c.trigger("modal_close")}})};$ocms.postXT({url:$ocms.url("req/pget"),timeout:90,data:{id:e.id},success:e=>{n&&n.ft.rwText($rct.rq2),i()},error:()=>{confirm($rct.rq1f)?(n&&n.ft.rwText($rct.rq2),i()):n&&n.c.trigger("modal_close")}})},$inv.ccInv=function(e){let t=(e.data||{}).typ||"r",n=$fis.lf(),i=n.children("ul.rql"),a=i.data("parent"),r=[];if(i.find("li.rli.checked").each((function(){r.push($(this).data("Id"))})),r.length<1)return void alert($rct.dnS);if("i"===t&&r.length>1)return void alert($rct.dII);let l=$fis.frm_edit(),d=$$.dc("invoice_layout",l).append($$.dc("btn sprev").click($inv.sprev)),s=$fis.cf().width()>d.width()+n.width()+20;n.tC("fix",s).tC("hd",!s),$inv.eM(!1,!0);let c=$$.dc("rfrm").ldng(1),o=$ocms.dlg(c,{width:1e3});o.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("req/iget"),timeout:60,data:{id:a,mode:"ful",typ:t,sel:r.join(",")},success:e=>{let t=$$.dc("srq",d),n=$$.tblset({class:"invi"},t);n.bdy.remove(),n.ft=$$[0]("tfoot"),e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b")),n.tbl.data($.extend({new:{},sms:{},itm:{}},{admin:e.admin,companies:e.companies,locations:e.locations}));let i=$$.tr(n.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(i,e))),n.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.requests||[],(function(t,i){if(0!==(i.Id||0)){let t=$inv.worknotes(i);i.text="i"===e.admin.type?$rct.req+jine([i.ExternalId,i.Name],": ").eine(" ",""):jine([jine([fdt(i.WorkDoneAt,"dd.MM.yy"),i.ExternalId]," - "+$rct.req+" "),t.ne(i.Name)],": \n");let a=$$.tbody(n.tbl).data($.extend({},i));$inv.rendersrq.call(a)}}));let a=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(a),n.ft.appendTo(n.tbl);let r,l,s=e.admin||{},c=(e,t,i,a,r)=>{let l=$$.dc("inpfrm",d).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{n.tbl.data("new")[i]=e}},r),$inv.eHtml)),n.tbl.data("new")[i]=t};c("tfrm",s.invoicetitle,"invoicetitle",0,null),c("adrfrm",s.invoiceaddress,"invoiceaddress",0,null),c("locfrm","","loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),c("emailfrm",s.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",d).append($$.dc("content").text(s.sender)),s.provisionend&&(l=s.provisionstart?$rct.provP:$rct.provD,r=s.provisionstart?fdt(s.provisionstart,"dd.MM.yyyy")+" - "+fdt(s.provisionend,"dd.MM.yyyy"):fdt(s.provisionend,"dd.MM.yyyy")),c("admfrm",r,"provisionperiod",l,1),n.tbl.data("new").CustomValues=s.CustomValues||"",$$.dc("inpfrm ctpfrm",d).text(jObj(s.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv"),$inv.eM(!1,!0,$inv.emOpt(s))},complete:()=>{o.c.trigger("modal_close")}})},$inv.ccStInv=function(e){let t=e.data||{},n=$fis.lf(),i=t.id,a=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sprev)),r=$fis.cf().width()>a.width()+n.width()+20;n.tC("fix",r).tC("hd",!r),$inv.eM(!1,!0);let l=$$.dc("rfrm").ldng(1),d=$ocms.dlg(l,{width:1e3});d.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),timeout:90,data:{id:t.id},success:e=>{d&&d.ft.rwText($ict.iq2),$ocms.postXT({url:$ocms.url("inv/icget"),timeout:60,data:{id:i},success:e=>{let t=$$.dc("srq",a),n=$$.tblset({class:"invi"},t);n.bdy.remove(),n.ft=$$[0]("tfoot"),e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b")),n.tbl.data($.extend({new:{},sms:{},itm:{}},{admin:e.admin,companies:e.companies,locations:e.locations}));let i=$$.tr(n.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(i,e))),n.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.requests||[],(function(t,i){if(0!==(i.Id||0)){let t=$inv.worknotes(i);i.text="i"===e.admin.type?$rct.req+jine([i.ExternalId,i.Name],": ").eine(" ",""):jine([fdt(i.WorkDoneAt,"dd.MM.yy")+t.ne(i.Name)],": ");let a=$$.tbody(n.tbl).data($.extend({},i));$inv.rendersrq.call(a)}}));let r=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(r),n.ft.appendTo(n.tbl);let l,d,s=e.admin||{},c=(e,t,i,r,l)=>{let d=$$.dc("inpfrm",a).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(t);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{n.tbl.data("new")[i]=e}},l),$inv.eHtml)),n.tbl.data("new")[i]=t};c("tfrm",s.invoicetitle,"invoicetitle",0,null),c("adrfrm",s.invoiceaddress,"invoiceaddress",0,null),c("locfrm",s.provisionlocation,"loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),c("emailfrm",s.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",a).append($$.dc("content").text(s.sender)),s.provisionend&&(d=s.provisionstart?$rct.provP:$rct.provD,l=s.provisionstart?fdt(s.provisionstart,"dd.MM.yyyy")+" - "+fdt(s.provisionend,"dd.MM.yyyy"):fdt(s.provisionend,"dd.MM.yyyy")),c("admfrm",l,"provisionperiod",d,1),n.tbl.data("new").CustomValues=s.CustomValues||"",$$.dc("inpfrm ctpfrm",a).text(jObj(s.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv")},complete:()=>{d.c.trigger("modal_close")}})},error:()=>{d&&d.c.trigger("modal_close")}})},$inv.clCntInv=function(e){let t=$fis.lf(!1),n=[];t.find("li.ili.checked").each((function(){n.push($(this).data("Id"))})),1===n.length&&$inv.cntInv({id:n[0]})},$inv.cntInv=function(e){e=e||{};$fis.lf(!1).rC("fix").aC("hd");let t=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sedit));$inv.eM(!1,!0);let n=$$.dc("rfrm").ldng(1),i=$ocms.dlg(n,{width:1e3});i.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("inv/get"),timeout:60,data:{id:e.id},success:e=>{e.admin=e.admin||{};let n=e.inv||{},i=$$.dc("srq",t),a=$$.tblset({class:"invi"},i);a.bdy.remove(),a.ft=$$[0]("tfoot"),a.tbl.data($.extend({invid:n.Id,new:{},sms:{},itm:{},bai:[]},e));let r=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(r,e))),a.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.req||[],(function(e,t){let n=$$.tbody(a.tbl).data($.extend({},t));$inv.rendersrq.call(n)}));let l=$$.tr($$.tbody(a.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(l),a.ft.appendTo(a.tbl);let d=(e,n,i,r,l)=>{let d=$$.dc("inpfrm",t).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(n);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=n};d("tfrm",n.InvoiceTitle,"invoicetitle",0,null),d("adrfrm",n.SendToAddress,"invoiceaddress",0,null),d("locfrm",n.ProvisionLocation,"loc",1,null),d("emailfrm",n.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",t).append($$.dc("content").text(e.admin.sender)),d("admfrm",n.ProvisionPeriod,"provisionperiod",!0===(n.ProvisionPeriod||"").includes("-")?$rct.provP:$rct.provD,1),a.tbl.data("new").CustomValues=n.CustomValues||"",$$.dc("inpfrm ctpfrm",t).text(jObj(n.CustomValues,"contactName")),a.tbl.children("tbody").each($inv.bdysort),a.tbl.trigger("fds.inv"),$inv.eM(!1,!0,$inv.emOpt(e.admin))},complete:()=>{i.c.trigger("modal_close")}})},$inv.cSt=function(e){e=e||{};let t=$fis.lf(),n=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sedit)),i=$fis.cf().width()>n.width()+t.width()+20;t.tC("fix",i).tC("hd",!i),$inv.eM(!1,!0);let a=$$.dc("rfrm").ldng(1),r=$ocms.dlg(a,{width:1e3});r.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),data:{id:e.id},success:t=>{r&&r.ft.rwText($ict.iq2),$ocms.postXT({url:$ocms.url("inv/storno"),data:{id:e.id,mode:e.mode},success:e=>{e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b"));let t=e.inv||{},i=$$.dc("srq",n),a=$$.tblset({class:"invi"},i);a.bdy.remove(),a.ft=$$[0]("tfoot"),a.tbl.data($.extend({invid:t.Id,new:{},sms:{},itm:{},bai:[]},e));let r=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(r,e))),a.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.req||[],(function(e,t){let n=$$.tbody(a.tbl).data($.extend({},t));$inv.rendersrq.call(n)}));let l=$$.tr($$.tbody(a.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(l),a.ft.appendTo(a.tbl);let d=(e,t,i,r,l)=>{let d=$$.dc("inpfrm",n).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(t);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=t};d("tfrm",t.InvoiceTitle,"invoicetitle",0,null),d("adrfrm",t.SendToAddress,"invoiceaddress",0,null),d("locfrm",t.ProvisionLocation,"loc",1,null),d("emailfrm",t.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(e.admin.sender)),d("admfrm",t.ProvisionPeriod,"provisionperiod",!0===(t.ProvisionPeriod||"").includes("-")?$rct.provP:$rct.provD,1),a.tbl.data("new").CustomValues=t.CustomValues||"",$$.dc("inpfrm ctpfrm",n).text(jObj(t.CustomValues,"contactName")),a.tbl.children("tbody").each($inv.bdysort),a.tbl.trigger("fds.inv")},complete:()=>{r.c.trigger("modal_close")}})},error:()=>{r&&r.c.trigger("modal_close")}})},$inv.eHtml=function(e){let t=$(this),n=e.data instanceof jQuery?e.data:e.data.t,i=["invoiceemail","provisionperiod","invoicetitle"].includes(e.data.nme),a=i?[{name:"txt",label:"Text",type:"text",value:n.text()}]:[{name:"txt",label:"Text",type:"html",value:n.html(),tinymce:!0,attr:{style:"height: 300px"}}],r=e.data.change||null,l={title:t.data("dialog")||"",success:function(t){i?n.text(t.txt||""):n.html(t.txt),"function"==typeof r&&r(t.txt),$inv.d.syncField(e.data.nme,i?t.txt||"":t.txt),$inv.rd.syncField(e.data.nme,i?t.txt||"":t.txt)},tinymce:{valid_elements:"br",hidemenu:!0,hidetoolbar:!0}};if(Array.isArray(e.data.list)){let t=$$.dc("lstfrm");$.each(e.data.list,((n,i)=>{let a=$$.dc("li",t).append(""!==(e.data.lbl||"")?$$.dc("lbl").rwText(i[e.data.lbl]):null);$$.dc("adr",a).rwText(i[e.data.property]).data("val",i[e.data.property]).click((function(){let e=$(this),t=e.closest(".modal-body").find(':input[name="txt"]');t.is(".tinymce")?tinymce.get(t.attr("id")).setContent($$.s().rwText(e.data("val")).html()):"TEXTAREA"===t.prop("tagName")?t.val(e.data("val")).change():t.rwText(e.data("val"))}))})),l.addcontent=t}$ocms.dlgform(a,l)},$inv.setVat=function(e){$(this);let t=e.data,n=prompt($rct.rqV);n&&(n=parseFloat(n.replace("%","")),n>1&&(n*=.01),!1===isNaN(n)&&(t.siblings(".itm").each((function(){$(this).data().vat=fnum(n,{style:"percent"}).replace(" ","")})),$inv.t_fds_inv()))},$inv.inRow=function(e){let t=$(this),n=e.data,i={},a=$rcol.itm.clone(["SortOrder","NameOrNumber","Type","quantityhours","UnitString","net","svcnet_val","svcvat_val","net_val","vat_val","vat","Note"]),r="N"+(65536*(1+Math.random())||0).toString(16).substr(6),l=$$.tr({id:"itm_"+r.toString(),class:"itm"});$ocms.dlgform(a,{title:t.data("dialog")||"",success:function(e){l.data($.extend({Id:r},i,e)),$inv.rrw.call(l),l.insertAfter(n),$inv.t_fds_inv()},typedvalues:!0})},$inv.eRow=function(e){let t=$(this),n=e.data,i=n.data()||{},a=["SortOrder","NameOrNumber","Type","quantityhours","UnitString","net","svcnet_val","svcvat_val","net_val","vat_val","vat","Note"];i.id||""!==(i.Type||"")||a.unshift("Type");let r=$rcol.itm.clone(a).applyValues(i);r.set("Type","hidden","type"),$inv.eRw.call(t,n,i,r)},$inv.eRw=function(e,t,n){let i=$(this);$ocms.dlgform(n,{title:i.data("dialog")||"",success:function(n){let i={};""===(t.Id||"")&&(i.Id="N"+(65536*(1+Math.random())||0).toString(16).substr(6),e.attr("id","itm_"+i.Id.toString())),i.quantity=((n.quantityhours||"").toString()+" "+(n.UnitString||"").toString()).trimEnd(),e.data($.extend({},t,n,i)),console.debug("eRw success %o",e.data()),$inv.rrw.call(e),$inv.t_fds_inv()},typedvalues:!0})},$inv.bdysort=(e,t)=>{$(t).Sortable({dragItem:!1,dragHandleClass:"ico",parentident:"tr",onend:()=>{$inv.t_fds_inv()}})},$inv.rrw=function(){let e=$(this),t=e.data(),n={},i=e.is(".placeholder"),a=e.is(".hidenote"),r=e=>$$.d().append(e).html(),l=[$$.dc("ibtn insb",{title:$rct.iRb}).append(gi("indent-left")).click(e,$inv.inRow)];!1===i&&(l.unshift($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(e,$inv.eRow)),l.push($$.dc("ibtn del",{title:$rct.dR}).append(gi("trash")).click((function(t){confirm($rct.cD)&&(e.remove(),$inv.t_fds_inv())}))),"set"===(t.Type||"").toLowerCase()&&0===(t.net_val||0)&&l.push($$.dc("ibtn tosetp",{title:$rct.toSetP}).append(gi("scale")).click(e,$inv.toSetPrice)));let d=$$.dc("axf").append(l);!0===i?n={id:"",typ:"placeholder"}:!0===e.is(".itm.osum")?n={invrqid:t.InvRqId,id:"osum"+e.index(),typ:"osum",p:"",q:null,t:r(t.tbl.tbl),tt:null,v:null,vt:t.net_val,vs:t.svcnet_val,vat:t.vat,vv:t.vat_val,vsv:t.svcvat_val,det:!1}:(n={invrqid:t.InvRqId,id:t.Id||"",typ:t.Type||"other",p:"",q:null,t:"",tt:null,v:null,vt:t.net_val,vs:t.svcnet_val,vat:t.vat,vv:t.vat_val,vsv:t.svcvat_val,det:""!==(t.Note||"")&&!1===a,SetItmId:t.SetItmId||null},$$.dc("ibtn ico move",d,{title:$rct.mR}),n.p=t.position||t.SortOrder||"",""===n.id?n.t="":["Text","Title"].includes(n.typ)&&0===(t.net_val||0)?n.t=t.htmltext||("#"!==(t.NameOrNumber||"").substr(0,1)?r($$[0]("p").text(t.NameOrNumber)):"")+(t.Note||""):(n.tt=n.det?"":$$.s(t.Note||"").text(),n.q=t.quantity||(0!==(t.quantityhours||0)?fnum(t.quantityhours)+" "+(t.UnitString||""):""),n.t=t.htmltext||(n.det?r($$.s(t.NameOrNumber||""))+r($$.dc("desc").html(t.Note)):r($$.s(t.NameOrNumber||""))),n.v=t.net,n.vt=t.net_val)),""!==(t.Note||"")&&$$.dc("ibtn add",d).append(gi("object-align-left")).click((function(t){$inv.rrw.call(e.tC("hidenote"))}));let s=[$$.tdc("aux").append(d),$$.tdc("keep").text(n.p)];if(""===n.id)s.push($$.td(e,{colspan:4}).append(n.t));else{Array.prototype.push.apply(s,n.q?[$$.tdc("keep").text(n.q)]:[]);let e=e=>null==e?"":fnum(e,$rct.cst);Array.prototype.push.apply(s,[$$.tdc("txt",{colspan:n.q?1:2,title:n.tt}).append(n.t),$$.tdc("currency").text(e(n.v)),$$.tdc("currency inetval").text(e(n.vt)).attr("title",$rct.svcPart+": "+e(n.vs))])}e.empty().attr("class",i?"placeholder":"itm").aC(n.Typ).tC("sethdr","set"===(n.typ||"").toString().toLowerCase()).tC("hidenote",a).append(s),t.co=n},$inv.toSetPrice=function(e){let t=(e.data.data().Id||"").toString();""!==t&&!1!==confirm($rct.toSetPc)&&$.when($inv.t_fds_inv()).done((()=>{$inv.d.sync({Target:"item.setprice",Ref:t})}))},$inv.invSumUpdate=function(){let e=$(this),t=[],n=e.children("tbody");n.each(((e,n)=>{let i=$(n),a=i.data()||{},r=[],l=[],d=i.find("tr.itm"),s=0;i.tC("empty",d.length<1),d.each(((e,t)=>{let n=$(t).data()||{};r.push(n.co);let i=$inv.itemToContract(n),a=(n.SetItmId||"").toString();"set"!==i.type&&""!==a&&a!==i.id&&(i.setId=a),l.push(i),(void 0===n.SortOrder||null===n.SortOrder?-1:n.SortOrder)>-1&&(!1===["text","title"].includes((n.Type||"other").toLowerCase())&&s++,n.SortOrder=0,n.position=s,$inv.rrw.call(t))})),t.push({Id:a.Id,nme:a.Name,text:a.text,itm:r,items:l})}));let i=e.find("tbody:not(.empty)").length;n.find("tr.isum").tC("hidden",i<2),e.data("bai",t),""===(e.data("dtoken")||"")&&!1===bool(e.data("dseeding"),!1)&&null!=(e.data("admin")||{}).type&&(e.data("dseeding",!0),$inv.d.seed($.extend($inv.invcPayload(e.data()),{invid:e.data("invid")||""})))},$inv.worknotes=function(e){let t="";return e.steps.forEach(((e,n)=>{let i;try{i=JSON.parse(e.Data||{}).fields||[]}catch(e){console.debug(e),i=[]}!0!==Array.isArray(i||"")&&(i="object"==typeof i&&!0===Array.isArray(i.field||"")?i.field:[]),i.forEach(((e,n)=>{"Ausgeführte Arbeiten"===e.name&&(t=e.result||"")}))})),t},$inv.rendersrq=function(){let e=$(this).empty(),t=e.is(".onesum"),n=e.data(),i=$$.tr(e,{id:"srq"+n.Id}).aC("title nosort"),a=($rcol.itm.lbl(),$$.dc("axf").appendTo($$.tdc("aux",i)));$$.dc("ibtn osum",a,{title:$rct.combP}).append(gi("euro")).click((function(t){e.tC("onesum"),$inv.rendersrq.call(e),$inv.t_fds_inv()})),$$.dc("ibtn setvat",a,{title:$rct.sV}).append(gi("gbp")).click(i,$inv.setVat),$$.dc("ibtn insb",a,{title:$rct.iRb}).append(gi("indent-left")).click(i,$inv.inRow);let r,l=$$.sc("text",n.text),d=($$.td(i,{colspan:t?4:5}).append(l),["net_val","vat_val","svcnet_val","svcvat_val","net"]);if($$.dc("ibtn edit",a).data("dialog",$rcol.req.lbl().Name).append(gi("pencil")).click({t:l,change:e=>{n.text=e,$inv.t_fds_inv()}},$inv.eHtml),t&&($$.tdc("currency isumval",i),r={Id:n.Id.toString()+"_osum",net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0},r.tbl=$$.tblset({class:"stbl"})),$.each(n.items||[],((n,i)=>{let a,l={Id:i.Id,net_val:i.net_val||0,vat_val:i.vat_val||0,svcnet_val:0,svcvat_val:0,net:i.net||0,Note:i.Note||""};if("service"===i.Type.toLowerCase())l.svcnet_val=i.net_val||0,l.svcvat_val=i.vat_val||0;t?(a=$$.tr(r.tbl.bdy,{id:"itm"+i.Id,class:"sitm"}).aC(i.Type),"Text"===i.Type||"Title"===i.Type?$$.td(a,{colspan:2}).html(i.htmltext||i.Note):($$.tdc("keep",a).text(i.quantity||((i.quantityhours||0)>0?fnum(i.quantityhours)+(i.UnitString||"").eine(" ",""):"")),i.htmltext?$$.tdc("txt",a).html(i.htmltext):$$.tdc("txt",a).text(i.NameOrNumber).attr("title",i.Note)),$.each(d,((e,t)=>{r[t]+=l[t]})),a.data(l)):($.extend(l,i),a=$$.tr(e,{id:"itm"+i.Id,class:"itm"}),a.data(l),$inv.rrw.call(a))})),t){let t=$$.tr(e,{id:"itmsq"+n.Id,class:"itm osum"}).data(r);$inv.rrw.call(t)}else{let t=$$.tr(e).aC("isum nosort");$$.tdc("aux",t),$$.td(t,{colspan:4}).text($rct.iSum),$$.tdc("currency isumval",t)}},$inv.t_fds_inv=()=>{let e=$("div.invoice_layout table.invi");if(e.trigger("fds.inv"),""!==(e.data("dtoken")||""))return $inv.d.syncChanged(e);let t=e.data("dseedpromise");return t?$.when(t).then((()=>$inv.d.syncChanged(e))):$.when()},$inv.sedit=()=>{$inv.sprev(!0)},$inv.jdisp=function(e){e.stopPropagation(),e.data.id&&$inv.disp(e.data.id,e.data.typ||"")},$inv.disp=(e,t)=>{let n="";switch(t){case"inv":n="inv/rdoc";break;case"rem":n="rem/rdoc"}""!==n&&$ocms.postXT({url:$ocms.url(n),data:{id:e||"",typ:"img"},success:e=>{let t=$$.dc("imagecollection pdfpreview"),n=Math.round(.88*vh());e.id;$.each(e.img||[],(function(e,i){$$.dc("pdfp",t).append($$.img(i).css("max-height",(n-rpx(6)).toString()+"px"))})),$ocms.dlg(t,{size:[n,Math.round(.88*vw())],zindex_min:50,form:!1,exclusive:!1})}})},$inv.jdbn=function(e){$ocms.postXT({url:$ocms.url("inv/rdocn"),data:{name:e.data.id||"",typ:"img"},success:e=>{let t=$$.dc("imagecollection pdfpreview"),n=Math.round(.88*vh());e.id;$.each(e.img||[],(function(e,i){$$.dc("pdfp",t).append($$.img(i).css("max-height",(n-rpx(6)).toString()+"px"))})),$ocms.dlg(t,{size:[n,Math.round(.88*vw())],zindex:50,form:!1})}})},$inv.sp13b=()=>{var e=$("div.invoice_layout").find("table.invi"),t=e.data();t.admin.p13b=!0,!1===(t.inv.InvoiceOptions||"").split(",").includes("§13b")&&(t.inv.InvoiceOptions+=",§13b"),e.trigger("fds.inv"),$inv.d.sync({Target:"p13b",Value:t.admin.p13b})},$inv.itemToContract=function(e){let t=((e=e||{}).Type||"").toString().toLowerCase(),n=e=>e??null,i={id:(e.Id||"").toString(),type:t,title:"",desc:"",qty:"",price_net:"",total_net:n(e.net_val),vat:e.vat||""};var a;return e.co&&"osum"===e.co.typ?(i.desc=e.co.t||"",i.total_net=e.net_val||0):["text","title"].includes(t)&&0===(e.net_val||0)?(i.desc=e.htmltext||("#"!==(e.NameOrNumber||"").substr(0,1)?(a=$$[0]("p").text(e.NameOrNumber||""),$$.d().append(a).html()):"")+(e.Note||""),i.total_net=""):(e.htmltext?i.desc=e.htmltext:(i.title=e.NameOrNumber||"",i.desc=e.Note||""),i.qty=e.quantity||(0!==(e.quantityhours||0)?fnum(e.quantityhours)+(e.UnitString?" "+e.UnitString:""):""),i.price_net=n(e.net),i.total_net=n(e.net_val)),i},$inv.ssetmode=()=>{let e=$("div.invoice_layout").find("table.invi").data();e.admin=e.admin||{};let t,n=e.admin.setmode||"setprice",i=e=>$$.dc("btn",$ict.setmo[e]).tC("selected",n===e).click((()=>{t.c.trigger("modal_close"),$inv.setSetmode(e)})),a=$$.dc("choicefrm").append([i("setprice"),i("setonly")]);t=$ocms.dlg(a,{width:800})},$inv.setSetmode=e=>{if(!1===confirm($rct.toSetMc||$rct.toSetPc))return;let t="setonly"===e?"block.setonly":"block.setprice";$.when($inv.t_fds_inv()).done((()=>{$inv.d.sync({Target:t})}))},$inv.sctp=()=>{let e=$invcol.ctp;$ocms.dlgform(e,{title:$ict.ctp,success:function(e){var t=$("div.invoice_layout"),n=t.find("table.invi").data();let i={};void 0!==n.new&&"{"===(n.new.CustomValues||"").substr(0,1)&&(i=JSON.parse(n.inv.CustomValues)),i.contactName=e.name,i.contactEmail=e.email,n.new.CustomValues=JSON.stringify(i),t.find(".ctpfrm").text(ne(e.name,e.email)),$inv.d.sync({Target:"contact",Value:{name:e.name,email:e.email}})},typedvalues:!0})},$inv.invcPayload=function(e){e=e||{};let t=$.extend({},e.new),n=$.extend({},e.admin);return t.title=null!=t.invoicetitle?t.invoicetitle:t.title||"",t.provisionlocation=null!=t.loc?t.loc:t.provisionlocation||"",t.paymentterm=null!=n.paymentterms?n.paymentterms:t.paymentterm||"",n.customerid=null!=n.customerid?n.customerid:n.CustomerId,{admin:n,req:e.bai,new:t}},$inv.ssave=()=>{$inv.d.save()},$inv.sprev=e=>{$inv.d.preview()},$inv.rReload=()=>{try{let e=$("#listframe ul.rql:first").data();$inv.cInv2({id:e.search})}catch(e){}},$inv.quantChange=function(e){},$inv.storno=function(e,t){let n,i=$$.dc("choicefrm").append([$$.dc("btn","Storno ohne Details").click({id:e,mode:"simple"},(e=>{n.c.trigger("modal_close"),$inv.cSt(e.data)})),$$.dc("btn","Storno mit neuer Rechnung").click({id:e},(e=>{n.c.trigger("modal_close"),$inv.ccStInv(e)})),$$.dc("btn","Storno mit best. Rechnung").tC("inactive",!1===bool(t,!1)).click({id:e,mode:"copy"},(e=>{!0===bool(t,!1)&&(n.c.trigger("modal_close"),$inv.cSt(e.data))}))]);n=$ocms.dlg(i,{width:1e3})},$inv.credit=function(e,t){let n,i=$$.dc("choicefrm").append([$$.dc("btn","Gutschrift").click({id:e,mode:"credit"},(e=>{n.c.trigger("modal_close"),$inv.cSt(e.data)}))]);n=$ocms.dlg(i,{width:1e3})},$inv.setPyd=function(e){confirm($ict.cpyd)&&$ocms.postXT({url:$ocms.url("inv/setpyd"),timeout:60,data:{id:e},success:e=>{alert($ict.relm)},error:()=>{alert($t.f1)}})},$inv.setUpd=function(e){confirm($ict.cupd)&&$ocms.postXT({url:$ocms.url("inv/setupd"),timeout:60,data:{id:e},success:e=>{alert($ict.relm)},error:()=>{alert($t.f1)}})},$inv.resendRem=function(e){e.stopPropagation(),e.data.id&&confirm(string($ict.remresc,[e.data.name]))&&$ocms.postXT({url:$ocms.url("rem/resend"),timeout:60,data:{id:e.data.id},success:t=>{alert(string($ict.remresr,[e.data.name]))},error:()=>{alert($t.f1)}})},$inv.dspRem=function(e){let t=$$.dc("rfrm").ldng(1),n=$ocms.dlg(t,{width:1e3});n.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("inv/getrem"),timeout:60,data:{id:e,drafts:!1},success:e=>{n.ft.empty();let i=$$.tblset({class:"invtbl"},t.empty()),a=$invcol.rem2,r=$$.tr(i.hd);$$.th(r);$.each(a.fields||[],((e,t)=>{$$.th(r).text(t.label)}));let l=!1;$.each(e,((e,t)=>{l=!l;let n=$$.tr(i.bdy).tC("alt",l),r=$$.td(n);n.click((function(){n.tC("selected").siblings().rC("selected")})),!0===bool(t.hasFile,!1)&&($$.dc("idl ilbtn",r,{title:$ict.dl+"\n"+t.DocumentName}).append(gi("save-file","ico")).click({id:t.Id},$inv.downloadrem),$$.dc("idl ilbtn",r,{title:$ict.remdsp+"\n"+t.DocumentName}).append(gi("eye-open","ico")).click({id:t.Id,typ:"rem"},$inv.jdisp),$$.dc("idl ilbtn",r,{title:$ict.remres+"\n"+t.DocumentName}).append(gi("refresh","ico")).click({id:t.Id,typ:"rem",name:t.DocumentName},$inv.resendRem)),$.each(a.fields||[],((e,i)=>{let a=$$.td(n).aC(i.dtype),r=t[i.name];if("function"==typeof i.dfnc)i.dfnc.call(a,r,t);else switch(i.type||""){case"date":a.text(fdt(t[i.name],"dd.MM.yy"));break;case"datetime":a.text(fdt(t[i.name]));break;case"html":a.append($$.dc("ctw").html(r)),a.append($$.dc("ttip").html(r));break;default:a.text(t[i.name])}if("InvoiceId"===(i.name||""))a.aC("keep");switch(typeof i.title){case"function":i.title.call(a,t);break;case"string":a.attr("title",cs.title)}}))}))},error:()=>{t.empty(),n.ft.rwText($t.f1)},complete:()=>{t.ldng(0)}})},$inv.ccRem=function(e,t){$(this);$ocms.postXT({url:$ocms.url("rem/lrem"),timeout:60,data:{id:e},success:n=>{let i=$invcol.rid.clone();i.applyValues(n.ov);let a=$$.dc("ac"),r=$$.tblset({class:"fullgrid fullwidth"},a);if((n.lst||[]).length>0){$$.d({style:"margin: 1.5rem 0 1rem 0;font-size: 110%;text-decoration: underline;"}).prependTo(a).text($ict.rovlh);let e=$$.tr(r.hd);$ict.rovl.forEach(((t,n)=>$$.th(e,t))),$.each(n.lst,((e,t)=>{$$.tr(r.bdy).append([$$.tdc("keep",t.subject),$$.tdc("currency",fnum(t.amount,$rct.cst)),$$.tdc("currency",fnum(t.amount_payed,$rct.cst)),$$.tdc("keep",fdt(t.DateFinalized,"dd.MM.yy"))])}))}else $$.td($$.tr(r.bdy),$ict.nd);$ocms.dlgform(i,{addcontent:a,title:string($ict.remdt,[t||"?"]),success:function(t){$inv.ccRem_s2(e,t)},typedvalues:!0})}})},$inv.rRemRw=function(e){let t=$(this),n=e.rm||{};t.empty().data({invoiceid:n.invoiceid,invoicedate:n.invoicedate,amount:n.amount,amount_payed:n.amount_payed});let i=$$.dc("axf").append($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(t,$inv.eRowR));t.append([$$.tdc("aux").append(i),$$.tdc("keep",n.invoiceid),$$.tdc("keep",fdt(n.invoicedate,"dd.MM.yy")),$$.tdc("currency",fnum(n.amount,$rct.cst)),$$.tdc("currency",fnum(n.amount_payed,$rct.cst)),$$.tdc("currency",fnum(n.amount-n.amount_payed,$rct.cst))])},$inv.eRowR=function(e){let t=$(this),n=e.data,i=n.data()||{},a=$invcol.rem.clone().applyValues(i);$ocms.dlgform(a,{title:t.data("dialog")||"",success:function(e){let i=t.closest("table"),a=i.data();$.extend(a.rm,e),i.data(a),$inv.rRemRw.call(n,a),$inv.rd.syncAmount(a.rm.amount,a.rm.amount_payed)},typedvalues:!0})},$inv.ccRem_s2=function(e,t){$fis.lf(!1).rC("fix").aC("hd");let n=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.rprev));$inv.eM(!1,!0);$$.dc("rfrm").ldng(1);$ocms.postXT({url:$ocms.url("rem/get"),timeout:60,data:$.extend({id:e},t),success:e=>{let t=e.rm||{},i=$$.dc("srq",n),a=$$.tblset({class:"invi"},i);a.ft=$$[0]("tfoot"),a.tbl.data($.extend({invid:t.invid,new:{}},e));let r=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$ict.remHR.forEach((e=>$$.th(r,e))),$inv.rRemRw.call($$.tr(a.bdy),a.tbl.data()),a.ft.appendTo(a.tbl);let l=(e,t,i,r,l)=>{let d=$$.dc("inpfrm",n).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(t);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=t};l("tfrm",t.subject,"subject",0,null),l("adrfrm",t.invoiceaddress,"invoiceaddress",0,null),l("emailfrm",t.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(t.sender)),a.tbl.children("tbody").each($inv.bdysort),a.tbl.trigger("fds.inv");let d=a.tbl.data("new");d.amount=t.amount,d.amount_payed=t.amount_payed,$inv.rd.seed({rem:{invid:t.invid,type:t.type,invoiceid:t.invoiceid,invoicedate:t.invoicedate},new:d})},complete:()=>{}})},$inv.rprev=()=>{$inv.rd.preview()},$inv.sis=e=>{confirm($ict.sisc)&&$ocms.postXT({url:$ocms.url("inv/sis"),data:{id:e||""},success:e=>{}})},$inv.srs=e=>{confirm($ict.srsc)&&$ocms.postXT({url:$ocms.url("rem/srs"),data:{id:e||""},success:e=>{}})},$inv.mfrrel=e=>{$("#contentframe").ldng(),$ocms.postXT({url:$ocms.url("inv/mfrrel"),data:{id:e||""},success:e=>{$inv.rerenderinv()},complete:()=>{$("#contentframe").ldng(0)}})}; \ No newline at end of file +let $rct={mdl:"Aufträge",or:"offene Aufträge",orr:"offene Aufträge (4 W)",rn:"Auftragsnummer",iov:{all:"Auftragsübersicht (alle)","":"Auftragsübersicht"},wk:"Woche",nd:"Keine Daten gefunden.",h:"Uhr",rq1:"Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",rq2:"Auftragsdaten werden geladen",rq1f:"Die Auftragsdaten von MFR konnten nicht oder nicht schnell genug abgerufen werde.\nMöchten Sie mit den bestehenden Daten trotzdem weitermachen?",note1:"Im Bruttobetrag sind {0} Lohnkosten enthalten (netto {1}). Die darin enthaltene Umsatzsteuer beträgt {2}.",note2:"Bitte beachten Sie, nach §14 Abs. 1 Umsatzsteuergesetz ist diese Rechnung ein Zahlungsbeleg oder eine andere beweiskräftige Unterlage für 2 Jahre nach Ablauf des Kalenderjahres der Ausstellung dieser Rechnung aufzubewahren, soweit nicht aufgrund anderer gesetzlicher Regelungen andere ggf.längere Aufbewahrungsfristen gelten.",note3:"Privathaushalten erstattet das Finanzamt bis zu {0} des Arbeitslohns mit der nächsten Steuererklärung.",note4:"Für bereits erbrachte Arbeiten, Dienstleistungen, Materiallieferungen und getätigte Bestellvorgänge zum oben genannten Bauvorhaben, die sich aus dem mit Ihnen geschlossenen Vertrag ergeben, stellen wir Ihnen vertragsgemäß unsere Akontozahlung in Rechnung. Eine Endabrechnung erhalten Sie als Schlussrechnung nach Abschluss des gesamten Bauvorhabens. Das Ausführungsdatum entnehmen Sie bitte dem Schlusstext dieser Rechnung. Wir danken Ihnen herzlich für das entgegengebrachte Vertrauen und bitten Sie um kurzfristigen Ausgleich der Akontorechnung.",note13b:"Gem. §13b Umsatzsteuergesetz unterliegen Sie der Steuerschuldnerschaft des Leistungsempfängers zur Umsatzsteuer aus dieser Rechnung mit einem Steuersatz von 19%.",crI:"Rechnung erstellen",crII:"Abschlagsrechnung erstellen",dII:"Für eine Abschlagsrechnung darf nur ein Auftrag gewählt werden.",dnS:"Für eine Rechnung muss mindestens ein Auftrag gewählt werden.",inv:"Rechnung",invs:"Rechnungen",req:"Auftrag",provP:"Leistungszeitraum",provD:"Leistungsdatum",cP:"Position ändern",iRb:"Zeile darunter einfügen",dR:"Zeile löschen",sV:"USt festlegen",cD:"Löschen?",mR:"Zeile verschieben",svcPart:"Service-Anteil",vat:"Umsatzsteuer",combP:"Positionen zusammenfassen",toSetP:"Auf Setpreis umstellen (Positionen ohne Preis)",toSetPc:"Der Set-Preis wird auf die Summe seiner Positionen gesetzt und die Positionen selbst verlieren ihren Preis. Das ist nicht rückgängig zu machen (der Betrag kann danach nur noch manuell geändert werden). Fortfahren?",toSetMc:"Jeder Leistungsauftrag wird zu einer Set-Position mit der Summe als Preis zusammengefasst. Das ist nicht rückgängig zu machen (die Set-Preise können danach nur noch manuell geändert werden). Fortfahren?",iSum:"Zwischensumme",dtRel:"Freigegeben am: ",dtCr:"Erstellt am: ",rqV:"USt des Auftrags?",cthd:"wirklich aus-/einblenden ?",cst:{style:"currency",currency:"EUR"},sts:{IsWorkDone:"Arbeiten erledigt",Closed:"Auftrag geschlossen",SubcontractorPendingConfirmation:"Warten auf Bestätigung (Unterauftrag)",Scheduled:"Geplant",OfferIsRejected:"Angebot abgelehnt",OfferIsSend:"Offen (Angebot versandt)",CollaborationWaitingConfirmation:"Warten auf Bestätigung (Zusammenarbeit)",Released:"Freigegeben",OfferIsConfirmed:"Bestätigt",InProgress:"In Bearbeitung",ReadyForScheduling:"Zur Planung",Created:"Erstellt",Rejected:"Abgebrochen",Invoiced:"Rechnung gestellt","-":"-"},invHR:["Pos.","Menge","Artikelbezeichnung","VK","Summe"],frm:{invoiceaddress:"Adresse",loc:"Leistungsort / Lieferadresse",invoiceemail:"Email"}},$rcol={req:new fields_definition("Auftrag","Aufträge",[{name:"tags",label:"",type:"string",dfnc:function(e,t){""!==(e||"")&&($(this).aC("tags"),e.split(",").forEach((e=>{""!==e&&$(this).append($$.sc("tag "+e.replace(" ","_").replace("/","_").toLowerCase(),e))})))}},{name:"DateOfCreation",label:"Datum",type:"date",title:function(e){$(this).attr("title",$rct.dtCr+fdt(e.DateOfCreation).ne("-")+" \n"+$rct.dtRel+fdt(e.DateReleased).ne("-"))}},{name:"CustomerName",label:"Kunde (Firma)",type:"string"},{name:"Name",label:"Auftragsname",type:"string"},{name:"ExternalId",label:"Auftragsnummer",type:"string"},{name:"ParentExtenalId",label:"PAuftrag",type:"string"},{name:"InvoiceId",label:"RNummer",type:"string",dfnc:function(e,t){$(this).rwText(e," ").find("span").each((function(){$(this).aC("cla").click({id:$(this).text()},$inv.jdbn)}))}},{name:"State",label:"Status",type:"string"},{name:"WorkDoneAt",label:"Erledigt am",type:"date"},{name:"Description",label:"Beschreibung",type:"html"}]),itm:new fields_definition("Auftragsposition","Auftragspositionen",[{name:"NameOrNumber",label:"Bezeichnung",type:"string"},{name:"Type",label:"Typ",type:"select",required:!0,value:"Text",url:[{value:"Text",label:"Text"},{value:"Equipment",label:"Ausrüstung"},{value:"Material",label:"Material"},{value:"Service",label:"Arbeitsleistung"}],change:function(e){$req.quantChange.call(this,e)}},{name:"quantityhours",label:"Anzahl / Menge",type:"number",precision:"0.01",value:1,change:function(e){$inv.quantChange.call(this,e)}},{name:"UnitString",label:"Einheit",type:"select",url:["LFDM","Stck","Std.","QM","AW","Pauschal"],change:function(e){$inv.quantChange.call(this,e)}},{name:"net",label:"EinzelPreis netto",type:"number",precision:"0.01",value:0,change:function(e){$inv.quantChange.call(this,e)}},{name:"net_val",label:"GesamtPreis netto",type:"number",precision:"0.01",value:0},{name:"vat_val",label:"GesamtPreis USt",type:"number",precision:"0.01",value:0},{name:"svcnet_val",label:"Arbeitslohn netto",type:"number",precision:"0.01",value:0},{name:"svcvat_val",label:"Arbeitslohn USt",type:"number",precision:"0.01",value:0},{name:"net_pos",label:"Netto",type:"string"},{name:"bo_pos",label:"Brutto",type:"string"},{name:"vat",label:"USt",type:"string",value:"19,0%",change:function(e){$inv.quantChange.call(this,e)}},{name:"Note",label:"Details",type:"html",tinymce:!0}])},$ict={mdl:"Rechnungen",iov:{all:"Rechnungen (alle)","":"Rechnungen (nur fertige)","#d":"Rechnungen (nur Entwürfe)","#u":"Rechnungen (nur unbezahlt)","#r":"Rechnungen (nur angemahnt)","#a":"Rechnungen (nur Akonto)","#c":"Rechnungen (nur Storno)","#ru":"Rechnungen (nur angemahnt + unbez.)"},uba:", gesamter Zeitraum)",req:"Auftrag",inv:"Rechnung",rem:"Mahnung",in:"Rechnungsnummer",cc:"Kunde",wk:"Woche",nd:"Keine Daten gefunden.",dl:"Herunterladen",ed:"Bearbeiten",ced:"Bearbeitung fortsetzen",sItm:"Einzelheiten anzeigen",sPay:"Zahlungen anzeigen",cdI:"Entwurf der Rechnung löschen?",rel:"Neu Laden",relm:"Bitte laden Sie Liste manuell neu, um die Änderungen zu sehen.",dsp:"Rechnung anzeigen",storno:"Storno-Rechnung erstellen",credit:"Gutschrift erstellen",remd:"Mahnung erstellen",remdt:"Mahnung erstellen zur Rechnung {0}",remlst:"Mahnungen anzeigen",remdsp:"Mahnung anzeigen",remres:"Mahnung erneut senden",remresc:"Mahnung {0} wirklich erneut senden?",remresr:"Mahnung {0} wurde erfolgreich versandt.",setpyd:"Bezahlt markieren",cpyd:"Rechnung wirklich als bezahlt markieren?",setupd:"Bezahlt-Markierung aufheben",cupd:"Bezahlt-Markierung wirklich aufheben?",ivE:"Die Email-Adresse ist vermutlich nicht gültig.",ivEc:"\nMöchten Sie fortfahren?",pna:"Diese Seite ist in der Vorschau nicht verfügbar",tpe:"Die Anzahl von {0} Seiten wird aktuell nicht unterstützt",eis:"Der Rechnungsentwurf konnte nicht gespeichert werden.",iss:"Zwischenstand speichern.",p13b:"USt -> §13b",setm:"Set-Preisanzeige",setmo:{setprice:"Set mit Preis – Positionen ohne Preis",setonly:"Nur Set mit Preis – Positionen ausgeblendet"},ctp:"Ansprechpartner festlegen",mfr:"Von MFR neu abrufen",rq1:"Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",rq2:"Auftragsdaten werden geladen",iq1:"Rechnungsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",iq2:"Rechnungsdaten werden geladen",sis:"Rechnung als versandt markieren",srs:"Mahnung als versandt markieren",sisc:"Rechnung wirklich als versandt markieren?",srsc:"Mahnung wirklich als versandt markieren?",iSt:{dft:"Entwurf",uns:"nicht versandt",pyd:"bezahlt",cc:"storniert",op:"offen",due:"fällig",ovd:"überfällig",rem:"angemahnt"},rSt:["","Überfällig","2. Mahnung","3. Stufe"],pSt:{a:"Vollst.",p:"Teilz."},ivT:{i:"AbschlagsR.",f:"SchlussR",r:"Rechnung",c:"StornoR."},rovlh:"Übersicht der bisherigen Mahnungen",rovl:["Betreff","Betrag","Betrag gezahlt","fertiggestellt am"],remHR:["Rechnung","vom","Rechnungsbetrag","bereits bezahlt","noch offen"],translatePaymentTerm:e=>(e||"").replace("wd"," Werktagen").replace("d"," Tagen").replace("wk"," Wochen")||"10 Tagen",payi:{account:"Konto",name:"Zahler",text:"Verw.Zweck",InvoiceID:"Rechnung",amount:"Betrag",date:"Datum",manual:"Typ"}},$invcol={datev:new fields_definition("Rechnung","Rechnungen",[{name:"Umsatz (ohne Soll/Haben-Kz)",label:"Umsatz (ohne Soll/Haben-Kz)",type:"string"},{name:"vf",label:"vf",type:"string"},{name:"Soll/Haben-Kennzeichen",label:"Soll/Haben-Kennzeichen",type:"string"},{name:"Konto",label:"Konto",type:"string"},{name:"Gegenkonto",label:"Gegenkonto",type:"string"},{name:"BU-Schlüssel",label:"BU-Schlüssel",type:"string"},{name:"Belegdatum",label:"Belegdatum",type:"string"},{name:"Belegfeld 1",label:"Belegfeld 1",type:"string"},{name:"Belegfeld 2",label:"Belegfeld 2",type:"string"},{name:"Buchungstext",label:"Buchungstext",type:"string"}]),inv:new fields_definition("Rechnung","Rechnungen",[{name:"invstatus",label:"Status",type:"select",url:$ict.iSt},{name:"balance",label:"Umsatz",type:"string",dtype:"currency"},{name:"CustomerName",label:"Kunde",type:"string"},{name:"InvoiceId",label:"RNummer",type:"string"},{name:"InvoiceType",label:"Typ",type:"select",url:$ict.ivT},{name:"request",label:"Auftrag",type:"string",dtype:"num"},{name:"vat",label:"MwSt",type:"string",dtype:"num"},{name:"deb_cred",label:"Soll/Haben",type:"string"},{name:"customer",label:"Konto",type:"string",dtype:"num"},{name:"contra_account",label:"Gegenkonto",type:"string",dtype:"num"},{name:"Belegdatum",label:"Belegdatum",type:"date"},{name:"reminderstatus",label:"MahnStatus",type:"select",url:$ict.rSt},{name:"reminder",label:"# Mahnungen",type:"integer"},{name:"Buchungstext",label:"Buchungstext",type:"string"},{name:"Payment",label:"Zahlung",type:"string"}]),rem:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"amount",label:"Rechnungsbetrag",type:"number",precision:"0.01",value:1},{name:"amount_payed",label:"bereits bezahlt",type:"number",precision:"0.01",value:1}]),rem2:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"DocumentName",label:"Name",type:"string"},{name:"subject",label:"Betreff",type:"string"},{name:"DateSent",label:"Versanddatum",type:"date"},{name:"status",label:"Status",type:"string"},{name:"amount_open",label:"offener Betrag",type:"number",precision:"0.01"},{name:"InvoiceId",label:"RNummer",type:"string"}]),rid:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"type",label:"Typ",type:"select",url:[["f","einfache Zahlungserinnerung"],["m","Mahnung"],["l","letzte Mahnung"]],required:!0},{name:"level",label:"Stufe",type:"select",url:[["1","Stufe 1"],["2","Stufe 2"],["3","Stufe 3"],["4","Stufe 4"],["5","Stufe 5"],["6","Stufe 6"]],required:!0}]),ctp:new fields_definition("Ansprechpartner","Ansprechpartner",[{name:"name",label:"Name",type:"string"},{name:"email",label:"Email",type:"string"}])},gi=(e,t)=>$$.sc("glyphicon glyphicon-"+e).aC(t),$inv={init2:function(e,t){e=e||"inv",t=t||{},$ocms.getScript([],(function(){$inv.init3(e,t)}))},init3:async function(e,t){$fis.cf(!0);let n=$fis.lf(!0);$("#topbar").ocmsmenu([]),$("#activemodule").text($ict.mdl);let i=[(async()=>{await $fis.getAuth("fds_inv")>0&&($inv.prepLst(""),n.aC("fix"))})(),new Promise(((e,t)=>{$fis.prepAuth(["fds_reminder"])}))];await Promise.all(i)},prepLst:function(e){let t=new Date,n=$fis.lf(!0).ldng(1),i=new Date("2021-01-01");$fis.frm_list().IN((function(){}));let a=[];$.each($ict.iov,((e,t)=>{a.push({lbl:t,fnc:()=>{$inv.prepLst(e),n.aC("fix")}})})),$fis.lfm().ocmsmenu([{lbl:"Filter",itm:a}]);$$.i({placeholder:$ict.in}).appendTo($$.dc("mth ivn",n)).enterKey((function(e){let t=$(this),n=t.val()||"";e.stopPropagation(),t.parent().siblings().rC("selected"),n.length>3&&(t.parent().aC("selected"),$inv.renderinv("i:"+n,"s","all"),t.val(""))})),$$.i({placeholder:$ict.cc}).appendTo($$.dc("mth ivc",n)).enterKey((function(e){let t=$(this),n=t.val()||"";e.stopPropagation(),t.parent().siblings().rC("selected"),n.length>=3&&(t.parent().aC("selected"),$inv.renderinv("c:"+n,"s","all"),t.val(""))}));"#"===e.substr(0,1)&&$$.dc("mth extra",n).text($ict.iov[e].replace(")",$ict.uba)).click((function(t){let n=$(this);if(t.stopPropagation(),n.siblings().rC("selected"),!0===n.is(".selected")){n.toggleClass("selected");let t=fdt(new Date,"yy-MM-dd");$inv.renderinv(t,"a",e)}n.aC("selected")})),n.append("
");let r=$$.dc("mthl",n),l=t.getFullYear(),d=t.getMonth()+1;for(let t=i.getFullYear();t<=l;t++){let n=$$.dc("yr").prependTo(r).text($ict.iov[e]+" - "+t.toString()).toggleClass("selected",t===l);n.click({yr:t},(function(e){e.stopPropagation(),n.siblings().rC("selected"),n.aC("selected")}));let a=$$.dc("mfrm",n);for(let n=0;n<(t!==l?12:d);n++){i=new Date(t,n,1);let r=$$.dc("mth").prependTo(a).text($ict.iov[e]+" - "+fdt(i,"MMM yyyy"));if(r.click({yr:t,mt:n},(function(t){if(t.stopPropagation(),r.siblings().rC("selected"),!0===r.is(".selected")){r.toggleClass("selected");let n=fdt(new Date(t.data.yr,t.data.mt,1),"yy-MM-dd");$inv.renderinv(n,"m",e)}r.aC("selected")})),""===e){$$.dc("mthdl",r).append(gi("compressed","ico")).click({yr:t,mt:n},(function(e){e.stopPropagation();let t=fdt(new Date(e.data.yr,e.data.mt,1),"yy-MM-dd");$inv.downloadzip(t,"m")}))}let l=getMonday(i),d=new Date(i);d.setMonth(d.getMonth()+1),d.setDate(0),d=getMonday(d);let s=$$.dc("wfrm",r);for(;l<=d;){let t=$$.dc("wk",s).text(($ict.wk||"W")+" "+fdt(l,"dd.MM.yy"));t.click({rd:new Date(l)},(function(n){n.stopPropagation();let i=fdt(n.data.rd,"yy-MM-dd");$inv.renderinv(i,"w",e),r.siblings().rC("selected").find(".wk").rC("selected"),r.aC("selected").find(".wk").rC("selected"),t.aC("selected")})),$$.dc("wkdl",t).append(gi("compressed","ico")).click({rd:new Date(l)},(function(e){e.stopPropagation();let t=fdt(e.data.rd,"yy-MM-dd");$inv.downloadzip(t,"w")})),l.setDate(l.getDate()+7)}}}n.ldng(0)},rerenderinv:function(){let e=$("#contentframe .invfrm:first");if(e.length>0){let t=e.data("sets")||{};t.mode&&$inv.renderinv(t.tgt,t.mode,t.includes)}},renderinv:function(e,t,n){let i=$fis.frm_list(!0,!0).ldng(1),a=$$.dc("invfrm",i).aC("md"+t).data("sets",$.extend({},{tgt:e,mode:t,includes:n})),r=$fis.lf();$ocms.postXT({url:$ocms.url("inv/invl"),data:{mode:t,tgt:e,includes:n},success:i=>{r.rC("fix").aC("hd"),$$.dc("ovhd",a).text(i.admin.title);let l=$$.tblset({},a),d=$invcol.inv,s=$$.tr(l.hd);$$.th(s);$.each(d.fields||[],((e,t)=>{$$.th(s).text(t.label),"vat"===t.name&&$$.th(s)})),$.each(i.invoices||[],((s,c)=>{let o=$$.tr(l.bdy);o.click((function(){r.rC("fix").aC("hd"),o.toggleClass("selected").siblings().rC("selected").find("td.av").rC("av"),o.find("td.av").rC("av"),!0===o.is(".selected")?$inv.iMn(c):$inv.eM()}));let u=$$.td(o,{class:"raux"});c.hasFile?($$.dc("idl ilbtn",u,{title:$ict.dl+"\n"+c.DocumentName}).append(gi("save-file","ico")).click({id:c.Id},$inv.downloadinv),$$.dc("idl ilbtn",u,{title:$ict.dsp+"\n"+c.DocumentName}).append(gi("eye-open","ico")).click({id:c.Id,typ:"inv"},$inv.jdisp)):!1===c.isFinal&&!0===$fis.isAuth("fds_inv",2)&&$$.dc("idl ilbtn",u,{title:$ict.ed}).append(gi("edit","ico")).click({id:c.Id},$inv.doContInv),$$.dc("iitm ilbtn",u,{title:$ict.sItm}).append(gi("list","ico")).click({id:c.Id},$inv.showitm),$$.dc("iitm ilbtn",u,{title:$ict.sPay}).append(gi("euro","ico")).click({id:c.Id},$inv.showpay),$.each(d.fields||[],((r,l)=>{let d,s,u=$$.td(o).aC(l.dtype);switch("select"===(l.type||"")?u.text((l.url||{})[c[l.name]]||""):u.text(c[l.name]),l.name||""){case"vat":d=$$.sel().appendTo($$.td(o,{class:"vsel"})),s=(i.admin.ust_options||"19,0%;16,0%;0,0%").split(";"),$.each(s,((e,t)=>{$$.opt(t,t).appendTo(d)})),d.click((function(e){e.stopPropagation()})).val(c[l.name]).change().change({frm:a,tgt:e,mode:t,id:c.Id,td:u,includes:n},$inv.setvat),u.toggleClass("hl",c[l.name].substr(0,2)!==s[0].substr(0,2)).click((function(e){e.stopPropagation(),$(this).toggleClass("av")}));break;case"balance":u.aC("sh_"+(c.SollHaben||"").toLowerCase());break;case"invstatus":case"reminderstatus":u.aC(("invstatus"===l.name?"is_":"rs_")+c[l.name])}}))}))},complete:()=>{i.ldng(0)}})},setvat:function(e){let t=$(this),n=e.data||{};$ocms.postXT({url:$ocms.url("inv/setvat"),data:{id:n.id,val:t.val()},success:e=>{n.td.rC("av"),$inv.renderinv(n.tgt,n.mode,n.includes)}})},downloadzip:function(e,t){$(this).empty();window.open($ocms.url("inv/datevzip?mode="+t+"&tgt="+encodeURIComponent(e)),"_blank")},showitm:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&$ocms.postXT({url:$ocms.url("inv/rqi"),data:{id:e.data.id},success:e=>{let t=$$.dc("rfrm");(e.requests||[]).length<1?t.text($ict.nd):$.each(e.requests||[],(function(e,n){let i=$$.dc("srq",t);$$.dc("nme",i).text(n.name);let a=$$.tblset({class:"if"},i);$.each(n.items||[],((e,t)=>{let n=$$.tr({id:"itm"+t.Id}).appendTo(a.bdy);$$.td(n).text(t.NameOrNumber),$$.td(n).text(t.Type),$$.td(n).aC("currency").text(t.net_pos),$$.td(n).aC("currency").text(t.bo_pos),$$.td(n).aC("num").text(t.vat)}))})),$ocms.dlg(t,{width:1e3})}})},showpay:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&$ocms.postXT({url:$ocms.url("inv/pyi"),data:{id:e.data.id},success:e=>{let t=$$.dc("rfrm");if((e.payments||[]).length<1)t.text($ict.nd);else{let n=$$.tblset({class:"if"},t),i=$$.tr(n.hd);$.each(["date","account","name","text","InvoiceID","amount","manual"],((e,t)=>{$$.th(i,$ict.payi[t])})),$.each(e.payments,((e,t)=>{let i=$$.tr({id:"itm"+t.banking_uid}).appendTo(n.bdy);$$.td(i).aC("date").text(t.date),$$.td(i).text(t.account),$$.td(i).text(t.name),$$.td(i).text(t.text),$$.td(i).text(t.InvoiceID),$$.td(i).aC("currency").text(t.amount),$$.td(i).text(t.manual)}))}$ocms.dlg(t,{width:1e3,title:"Übersicht der Zahlungen"})}})},downloadinv:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&window.open($ocms.url("inv/rdoc?id="+e.data.id),"_blank")},doContInv:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&$inv.cntInv({id:e.data.id})}},$$inv={init2:$inv.init2,auth:{}};export default $$inv;$inv.cInv=function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&!1!==$fis.isAuth("fds_inv",2)&&$inv.cInv2({id:e.data.id})},$inv.rMn=e=>{let t=[{lbl:$ict.req,itm:[]}];return!0===bool(e,!1)&&!0===$fis.isAuth("fds_inv",2)&&Array.prototype.push.apply(t[0].itm,[{lbl:$rct.crI,fnc:$inv.ccInv,data:{typ:"r"}},{lbl:$rct.crII,fnc:$inv.ccInv,data:{typ:"i"}}]),t.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(t)},$inv.iMnr=e=>{let t=booln(e.isFinal,!0),n=e.Id,i=booln(e.fds,!1),a=[{glyph:"glyphicon-menu-left",fnc:()=>{$fis.frm_edit().remove()}},{lbl:$ict.inv,itm:[]},{lbl:$ict.rem,itm:[]}];return!1===t&&!0===$fis.isAuth("fds_inv",2)?a[1].itm.push({lbl:$ict.ced,fnc:$inv.clCntInv}):!0===$fis.isAuth("fds_inv",1)&&a[1].itm.push({lbl:$ict.dsp,fnc:()=>$inv.disp(n,"inv")}),!0===i&&!0===t&&!0===$fis.isAuth("fds_inv",2)&&(a[1].itm.push({lbl:$ict.storno,fnc:()=>$inv.storno(n,i)}),a[1].itm.push({lbl:$ict.credit,fnc:()=>$inv.credit(n,i)})),!0===t&&!0===$fis.isAuth("fds_reminder",2)&&(a[2].itm.push({lbl:$ict.remd,fnc:()=>$inv.ccRem(n,e.InvoiceId)}),a[2].itm.push({lbl:$ict.remlst,fnc:()=>$inv.dspRem(n)})),!0===t&&!0===$fis.isAuth("fds_reminder",2)&&!1===booln(e.IsSent,!1)&&a[2].itm.push({lbl:$ict.srs,fnc:()=>$inv.srs(n)}),a.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(a)},$inv.iMn=e=>{let t=booln(e.isFinal,!0),n=e.Id,i=booln(e.fds,!1),a=[{glyph:"glyphicon-menu-left",fnc:()=>{$fis.frm_edit().remove()}},{lbl:$ict.inv,itm:[]},{lbl:$ict.rem,itm:[]}];return!1===t&&!0===$fis.isAuth("fds_inv",2)?a[1].itm.push({lbl:$ict.ced,fnc:()=>{$inv.cntInv({id:n})}}):!0===$fis.isAuth("fds_inv",1)&&a[1].itm.push({lbl:$ict.dsp,fnc:()=>$inv.disp(n,"inv")}),!0===$fis.isAuth("fds_inv",2)&&(a[1].itm.push({lbl:$ict.storno,fnc:()=>$inv.storno(n,i)}),a[1].itm.push({lbl:$ict.credit,fnc:()=>$inv.credit(n,i)})),!0===t&&!1===booln(e.IsPayed,!1)?(!0===$fis.isAuth("fds_reminder",2)&&a[2].itm.push({lbl:$ict.remd,fnc:()=>$inv.ccRem(n,e.InvoiceId)}),!0===$fis.isAuth("fds_inv",2)&&a[1].itm.push({lbl:$ict.setpyd,fnc:()=>$inv.setPyd(n)})):!0===t&&!0===booln(e.IsPayed,!1)&&"m"===(e.PaymentStatus||"")&&!0===$fis.isAuth("fds_inv",2)&&a[1].itm.push({lbl:$ict.setupd,fnc:()=>$inv.setUpd(n)}),!0===$fis.isAuth("fds_reminder",2)&&a[2].itm.push({lbl:$ict.remlst,fnc:()=>$inv.dspRem(n)}),!0===t&&!0===$fis.isAuth("fds_inv",2)&&!1===booln(e.IsSent,!1)&&a[1].itm.push({lbl:$ict.sis,fnc:()=>$inv.sis(n)}),!1===i&&a[1].itm.push({lbl:$ict.mfr,fnc:()=>$inv.mfrrel(n)}),$("#topbar").ocmsmenu(a)},$inv.emOpt=e=>"iss,p13b,ctp"+(""===((e||{}).setmode||"")?",setm":""),$inv.eM=(e,t,n)=>{let i=[];return!0!==booln(e,!1)&&!0!==booln(t,!1)||i.push({glyph:"glyphicon-menu-left",fnc:()=>{$fis.lf(!0),$fis.frm_edit().remove()}}),!0===(n||"").split(",").includes("iss")&&i.push({lbl:$ict.iss,fnc:$inv.ssave}),!0===(n||"").split(",").includes("ctp")&&i.push({lbl:$ict.ctp,fnc:$inv.sctp}),!0===(n||"").split(",").includes("p13b")&&i.push({lbl:$ict.p13b,fnc:$inv.sp13b}),!0===(n||"").split(",").includes("setm")&&i.push({lbl:$ict.setm,fnc:$inv.ssetmode}),!0===(n||"").split(",").includes("iss")&&(i.push({lbl:"Änderungshistorie",fnc:()=>$inv.d.history()}),i.push({lbl:"Änderungen verwerfen",fnc:()=>$inv.d.discard()})),!0===booln(e,!1)&&i.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(i)},$inv.d={tbl:()=>$("div.invoice_layout table.invi"),layout:()=>$("div.invoice_layout"),token:function(){return $inv.d.tbl().data("dtoken")||""},hashes:function(){let e=$inv.d.tbl().data("bai")||[],t={};return $.each(e,((e,n)=>{t[(n.Id||"").toString()]=JSON.stringify(n)})),t},seed:function(e){let t=$inv.d.layout();t.aC("freeze");let n=$ocms.postXT({url:$ocms.url("inv/dopen"),data:{payload:JSON.stringify(e)},success:e=>{$inv.d.tbl().data("dtoken",e.token).data("dver",e.version).data("dhashes",$inv.d.hashes()).data("dorder",$inv.d.order()),$fis.draft.bind(e.token,{onReady:()=>$inv.d.refresh(),onExpiring:e=>$inv.d.warnExpiry(e),onClosed:e=>$inv.d.closed(e)}),$inv.d.refresh()},error:()=>{t.rC("freeze")},complete:()=>{$inv.d.tbl().removeData("dseeding").removeData("dseedpromise")}});return $inv.d.tbl().data("dseedpromise",n),n},refresh:function(e){let t=$inv.d.token();""!==t&&$ocms.postXT({url:$ocms.url("inv/dstate"),data:{token:t},success:t=>{$inv.d.applyState(t),"function"==typeof e&&e(t)},error:e=>{e&&410===e.status&&$inv.d.closed("expired")},complete:()=>{$inv.d.layout().rC("freeze")}})},applyState:function(e){let t=$inv.d.tbl();if(t.length<1)return;let n=t.data("dver");"number"==typeof n&&"number"==typeof e.version&&e.version$$.dc("dnote").aC(e.style||"InvoiceNotes").text(e.text)))},applyItems:function(e,t){let n=e=>void 0===e?null:e;(t||[]).forEach((t=>{if(!t)return;let i=(t.Id||"").toString();if(""===i)return;let a=e.children("tbody").filter(((e,t)=>(($(t).data()||{}).Id||"").toString()===i)).first();if(a.length<1)return;let r=t.itm||[],l={},d=a.find("tr.title").first(),s=d.length?d:null;r.forEach((e=>{let t=(e.id||"").toString();if(""===t)return;l[t]=!0;let i=a.find("#itm"+t).first(),r=i.length<1;r&&(i=$$.tr(a,{id:"itm"+t,class:"itm"}));let d=i.data()||{},c=r||(d.Type||"")!==(e.typ||"")||d.net!==n(e.v)||d.net_val!==n(e.vt)||d.vat_val!==n(e.vv)||d.svcnet_val!==n(e.vs)||d.svcvat_val!==n(e.vsv)||(d.position||"")!==(null!=e.p?e.p:"");$.extend(d,{Id:t,Type:e.typ,net:n(e.v),net_val:n(e.vt),vat_val:n(e.vv),svcnet_val:n(e.vs),svcvat_val:n(e.vsv),vat:e.vat,position:null!=e.p?e.p:"",SetItmId:null!=e.SetItmId?e.SetItmId:null}),r&&$.extend(d,{htmltext:e.t,quantity:e.q}),i.data(d),s?i.prev()[0]!==s[0]&&i.insertAfter(s):a.children().first()[0]!==i[0]&&a.prepend(i),s=i,c&&$inv.rrw.call(i)})),a.find("tr.itm").each(((e,t)=>{let n=(($(t).data()||{}).Id||"").toString();""===n||l[n]||$(t).remove()}))}))},applySetDisplay:function(e,t){e.find("tr.itm").each(((e,n)=>{let i=$(n),a=((i.data()||{}).Id||"").toString();if(""===a||!Object.prototype.hasOwnProperty.call(t,a))return;let r=t[a]||{};i.tC("sethdr",bool(r.h,!1)),!1===bool(r.p,!0)&&i.find("td.currency").text("")}))},sync:function(e){let t=$inv.d.token();if(""===t){let t=$inv.d.tbl().data("dseedpromise");return t?$.when(t).then((()=>$inv.d.sync(e))):$.when()}return $inv.d.layout().aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dpatch"),data:{token:t,delta:JSON.stringify(e)},success:()=>{$inv.d.refresh()},error:e=>{$inv.d.layout().rC("freeze"),e&&410===e.status&&$inv.d.closed("expired")}})},order:function(){return($inv.d.tbl().data("bai")||[]).map((e=>(e.Id||"").toString()))},syncChanged:function(e){let t=e.data("bai")||[],n=e.data("dhashes")||{},i={},a=[],r=[],l=[];$.each(t,((e,t)=>{let r=(t.Id||"").toString(),l=JSON.stringify(t);i[r]=l,n[r]!==l&&a.push(t)})),$.each(n,(e=>{void 0===i[e]&&r.push(e)}));let d=$inv.d.order(),s=e.data("dorder")||[];return e.data("dhashes",i).data("dorder",d),a.forEach((e=>l.push($inv.d.sync({Target:"block.replace",Ref:(e.Id||"").toString(),Value:e})))),r.forEach((e=>l.push($inv.d.sync({Target:"block.remove",Ref:e})))),s.length===d.length&&s.slice().sort().join(",")===d.slice().sort().join(",")&&s.join(",")!==d.join(",")&&l.push($inv.d.sync({Target:"block.order",Value:d})),$.when.apply($,l).promise()},syncField:function(e,t){let n={invoicetitle:"title",invoiceaddress:"address",invoiceemail:"email",loc:"provisionlocation",provisionlocation:"provisionlocation",provisionperiod:"provisionperiod"}[e];n&&$inv.d.sync({Target:n,Value:t})},footer:function(e,t,n){let i=e.children("tfoot").empty();e.nextAll(".fnote").remove();let a=bool(n.p13b,!1),r=(e,t,n)=>$$.tdc("currency",$$.tr(i,{class:n||"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text(e)]),fnum(t,$rct.cst)),l=t=>$$.dc("fnote").insertAfter(e).rwText(t);r("Netto",t.total_net||0),!1===a&&$.each(t.vat||{},((e,t)=>r($rct.vat+" "+e+"%",t,"tvat"))),r("Summe",t.total_gross||0);let d=n.type||"";"i"===d?(l($rct.note2),l($rct.note4)):"c"===d?l($rct.note2):(l(string($rct.note3,[fnum(((t.service_net||0)+(t.service_vat||0))*(n.tax_servicerefund||0),$rct.cst)])).aC("ntax"),l($rct.note2),l(string($rct.note1,[fnum((t.service_net||0)+(t.service_vat||0),$rct.cst),fnum(t.service_net||0,$rct.cst),fnum(t.service_vat||0,$rct.cst)]))),!0===a&&l($rct.note13b)},validation:function(e){let t=$("div.invoice_layout");if(t.length<1)return;let n=t.children(".dvalidation");n.length<1&&(n=$$.dc("dvalidation"),t.prepend(n)),n.empty().tC("hidden",(e||[]).length<1),$.each(e||[],((e,t)=>$$.dc("dvmsg",n).aC(t.severity).text(t.message)))},preview:function(){let e=$inv.d.token();if(""===e)return;let t=$inv.d.layout(),n=($inv.d.tbl().data("new")||{}).invoiceemail||"";!1===$fis.ValidateEmail(n)&&!1===bool(confirm($ict.ivE+$ict.ivEc),!1)||(t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dpreview"),data:{token:e},success:n=>{t.rC("freeze");let i=$$.dc("imagecollection pdfpreview"),a=Math.round(.88*vh()),r=n.total;r>10&&$$.dc("note warn",i).text($ict.tpe),$.each(n.img||[],((e,t)=>{$$.dc("pdfp",i).append($$.img(t).css("max-height",(a-rpx(6)).toString()+"px"))}));for(let e=(n.img||[]).length+1;e<=r;e++)$$.dc("pdfp ph",i).append($$.dc("note",$ict.pna));$ocms.dlg(i,{size:[a,Math.round(.88*vw())],zindex:50,form:!1,button:$rct.crI,confirm:function(n){let i=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dsave"),data:{token:e},success:e=>{$ocms.postXT({url:$ocms.url("req/sconf"),data:{id:e.invid},success:t=>{i.trigger("modal_close"),!0===t.hasFile&&window.open($ocms.url("req/idoc")+"?id="+e.invid,"_blank"),$inv.d.close(),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),i.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},error:()=>{t.rC("freeze"),alert($ict.eis)}})},cancel:function(e){confirm($ict.cdI)&&($inv.d.close(),$inv.rReload())}})},error:()=>{t.rC("freeze"),alert($ict.eis)}}))},save:function(){let e=$inv.d.token();if(""===e)return;let t=$inv.d.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dsave"),data:{token:e},success:e=>{$inv.d.tbl().data("invid",e.invid)},error:()=>{alert($ict.eis)},complete:()=>{t.rC("freeze")}})},history:function(){let e=$inv.d.token();""!==e&&$ocms.postXT({url:$ocms.url("inv/dhistory"),data:{token:e},success:e=>{let t=$$.dc("dhist");if((e.history||[]).length<1)$$.dc("note",t).text("Noch keine Änderungen erfasst.");else{let n=$$.tblset({class:"invtbl fullwidth"},t);$$.tr(n.hd).append([$$.th().text("Zeit"),$$.th().text("Feld"),$$.th().text("Alt"),$$.th().text("Neu")]),$.each(e.history,((e,t)=>$$.tr(n.bdy).append([$$.tdc("keep",fdt(t.timestamp)),$$.td().text(t.target),$$.td().text(t.oldValue),$$.td().text(t.newValue)])))}$ocms.dlg(t,{width:800,form:!1})}})},discard:function(){let e=$inv.d.tbl().data("invid")||"";""!==e?!1!==confirm("Alle Änderungen verwerfen und den zuletzt gespeicherten Stand neu laden?")&&($inv.d.close(),$inv.cntInv({id:e})):alert("Es wurde noch kein Zwischenstand gespeichert, der wiederhergestellt werden könnte.")},warnExpiry:function(e){let t=Math.max(1,Math.round((e||0)/60));$fis.notifications.push({severity:"info",title:"Entwurf läuft ab",message:"Der Rechnungsentwurf läuft in etwa "+t+" Minute(n) ab. Bitte zwischenspeichern, sonst gehen die Änderungen verloren."})},closed:function(e){let t=$inv.d.token();$inv.d.tbl().removeData("dtoken"),""!==t&&$fis.draft.release(t),$fis.frm_edit().remove(),$fis.lf(!0),$fis.notifications.push({severity:"error",title:"Entwurf geschlossen",message:"expired"===e?"Der Rechnungsentwurf ist wegen Inaktivität abgelaufen. Nicht gespeicherte Änderungen sind verloren.":"Der Rechnungsentwurf wurde geschlossen."});try{$inv.rReload()}catch(e){}},close:function(){let e=$inv.d.token();""!==e&&($ocms.postXT({url:$ocms.url("inv/dclose"),data:{token:e}}),$fis.draft.release(e)),$inv.d.tbl().removeData("dtoken")}},$inv.rd={tbl:()=>$("div.invoice_layout table.invi"),layout:()=>$("div.invoice_layout"),token:function(){return $inv.rd.tbl().data("rdtoken")||""},seed:function(e){let t=$inv.rd.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dopen"),data:{payload:JSON.stringify(e)},success:e=>{$inv.rd.tbl().data("rdtoken",e.token).data("rdver",e.version),$fis.draft.bind(e.token,{onReady:()=>$inv.rd.refresh(),onExpiring:e=>$inv.rd.warnExpiry(e),onClosed:e=>$inv.rd.closed(e)}),$inv.rd.refresh()},error:()=>{t.rC("freeze")}})},refresh:function(e){let t=$inv.rd.token();""!==t&&$ocms.postXT({url:$ocms.url("rem/dstate"),data:{token:t},success:t=>{$inv.rd.applyState(t),"function"==typeof e&&e(t)},error:e=>{e&&410===e.status&&$inv.rd.closed("expired")},complete:()=>{$inv.rd.layout().rC("freeze")}})},applyState:function(e){let t=$inv.rd.tbl();if(t.length<1)return;let n=t.data("rdver");"number"==typeof n&&"number"==typeof e.version&&e.version{let t=$$[0]("p").aC("dnote intro").rwText(e);a.length?t.insertBefore(a):t.appendTo(n)})),((e||{}).closing||[]).forEach((e=>$$[0]("p").aC("dnote closing").rwText(e).appendTo(n)))},sync:function(e){let t=$inv.rd.token();""!==t&&($inv.rd.layout().aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dpatch"),data:{token:t,delta:JSON.stringify(e)},success:()=>{$inv.rd.refresh()},error:e=>{$inv.rd.layout().rC("freeze"),e&&410===e.status&&$inv.rd.closed("expired")}}))},syncField:function(e,t){if(""===$inv.rd.token())return;let n={subject:"subject",invoiceaddress:"address",invoiceemail:"email",text:"text"}[e];n&&$inv.rd.sync({Target:n,Value:t})},syncAmount:function(e,t){""!==$inv.rd.token()&&($inv.rd.sync({Target:"amount",Value:(null!=e?e:0).toString()}),$inv.rd.sync({Target:"amount_payed",Value:(null!=t?t:0).toString()}))},footer:function(e,t){let n=e.children("tfoot").empty(),i=$$.tr(n,{class:"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text("Offener Betrag")]);$$.tdc("currency",i,fnum(t.amount_open||0,$rct.cst))},validation:function(e){let t=$inv.rd.layout();if(t.length<1)return;let n=t.children(".dvalidation");n.length<1&&(n=$$.dc("dvalidation"),t.prepend(n)),n.empty().tC("hidden",(e||[]).length<1),$.each(e||[],((e,t)=>$$.dc("dvmsg",n).aC(t.severity).text(t.message)))},preview:function(){let e=$inv.rd.token();if(""===e)return;let t=$inv.rd.layout(),n=($inv.rd.tbl().data("new")||{}).invoiceemail||"";!1===$fis.ValidateEmail(n)&&!1===bool(confirm($ict.ivE+$ict.ivEc),!1)||(t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dpreview"),data:{token:e},success:n=>{t.rC("freeze");let i=$$.dc("imagecollection pdfpreview"),a=Math.round(.88*vh());$.each(n.img||[],((e,t)=>{$$.dc("pdfp",i).append($$.img(t).css("max-height",(a-rpx(6)).toString()+"px"))})),$ocms.dlg(i,{size:[a,Math.round(.88*vw())],zindex:50,form:!1,button:$ict.remd,confirm:function(n){let i=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dsave"),data:{token:e},success:e=>{$ocms.postXT({url:$ocms.url("rem/conf"),data:{id:e.remid},success:()=>{i.trigger("modal_close"),window.open($ocms.url("rem/idoc")+"?id="+e.remid,"_blank"),$inv.rd.close(),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),i.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},error:()=>{t.rC("freeze"),alert($t.f1)}})},cancel:function(e){confirm($ict.cdI)&&($inv.rd.close(),$inv.rReload())}})},error:()=>{t.rC("freeze"),alert($t.f1)}}))},save:function(){let e=$inv.rd.token();if(""===e)return;let t=$inv.rd.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dsave"),data:{token:e},success:e=>{$inv.rd.tbl().data("remid",e.remid)},error:()=>{alert($t.f1)},complete:()=>{t.rC("freeze")}})},history:function(){let e=$inv.rd.token();""!==e&&$ocms.postXT({url:$ocms.url("rem/dhistory"),data:{token:e},success:e=>{let t=$$.dc("dhist");if((e.history||[]).length<1)$$.dc("note",t).text("Noch keine Änderungen erfasst.");else{let n=$$.tblset({class:"invtbl fullwidth"},t);$$.tr(n.hd).append([$$.th().text("Zeit"),$$.th().text("Feld"),$$.th().text("Alt"),$$.th().text("Neu")]),$.each(e.history,((e,t)=>$$.tr(n.bdy).append([$$.tdc("keep",fdt(t.timestamp)),$$.td().text(t.target),$$.td().text(t.oldValue),$$.td().text(t.newValue)])))}$ocms.dlg(t,{width:800,form:!1})}})},warnExpiry:function(e){let t=Math.max(1,Math.round((e||0)/60));$fis.notifications.push({severity:"info",title:"Entwurf läuft ab",message:"Der Mahnentwurf läuft in etwa "+t+" Minute(n) ab. Bitte zwischenspeichern, sonst gehen die Änderungen verloren."})},closed:function(e){let t=$inv.rd.token();$inv.rd.tbl().removeData("rdtoken"),""!==t&&$fis.draft.release(t),$fis.frm_edit().remove(),$fis.lf(!0),$fis.notifications.push({severity:"error",title:"Entwurf geschlossen",message:"expired"===e?"Der Mahnentwurf ist wegen Inaktivität abgelaufen. Nicht gespeicherte Änderungen sind verloren.":"Der Mahnentwurf wurde geschlossen."});try{$inv.rReload()}catch(e){}},close:function(){let e=$inv.rd.token();""!==e&&($ocms.postXT({url:$ocms.url("rem/dclose"),data:{token:e}}),$fis.draft.release(e)),$inv.rd.tbl().removeData("rdtoken")}},$inv.cInv2=function(e){let t=$$.dc("rfrm").ldng(1),n=$ocms.dlg(t,{width:1e3});n&&n.ft.rwText($rct.rq1);let i=()=>{$ocms.postXT({url:$ocms.url("req/get"),timeout:60,data:{id:e.id,mode:"r"},success:t=>{t.admin=t.admin||{};let n=$fis.lf(!0).aC("fix").rC("hd");if($fis.frm_edit().IN(),$inv.eM(!0,!0),(t.requests||[]).length<1)n.aC("fix").text($rct.nd);else{$$.dc("lh",n,$rct.mdl);let i=$$.d(),a=$$.ul({class:"rql"}).data({search:e.id,parent:t.admin.parent}).appendTo(n),r={},l=$rcol.req.lbl();$.each(t.requests||[],(function(e,t){let n=$$.li({class:"cli rli"}).data($.extend({},t)).appendTo(a),d=$$.dc("lihd",n).addClass(t.state);!0===booln(t.open,!1)&&d.append($$.sc("cbox").click((()=>{n.tC("checked"),i.find("li").rC("checked"),!0===n.is(".checked")?$inv.rMn(t.open):$inv.eM(!0)}))),d.append([$$.sc("eid",t.ExternalId),$$.sc("nme",t.Name)]),$$.dc("lidt",n).append([$$.dc("rqs").append([$$.s(l.State+": "),$$.s($rct.sts[t.State||"-"])]),$$.dc("ivn").append([$$.s(l.InvoiceId+": "),$$.s(t.InvoiceId||"- -")]),$$.dc("wda").append([$$.s(l.WorkDoneAt+": "),$$.s(fdt(t.WorkDoneAt,"dd.MM.yyyy"))])]),r[t.Id]=n})),(t.inv||[]).length>0&&($$.dc("lh",n,$rct.invs),i=$$.ul({class:"ivl"}).appendTo(n),$.each(t.inv||[],((e,t)=>{let n=$$.li({class:"cli ili"}).data($.extend({},t)).appendTo(i),r=$$.dc("lihd",n).addClass(t.invstatus);!1===booln(t.isFinal,!0)?r.append($$.sc("cbox").click((()=>{""!==(t.Id||"")&&(n.tC("checked").siblings().rC("checked"),a.find("li").rC("checked"),!0===n.is(".checked")?$inv.iMnr(t):$inv.eM(!0))}))):["","dft"].indexOf(t.invstatus)<0&&r.append($$.sc("dli").click((function(){$inv.disp(t.Id,"inv")}))),r.append($$.sc("nme",t.DocumentName||t.Id)),$$.dc("lidt",n).append([$$.dc("wda").append([$$.s(fdt(t.DateCreated,"dd.MM.yyyy"))]),$$.d().text($ict.iSt[t.invstatus]||t.invstatus)])})))}},complete:()=>{n&&n.c.trigger("modal_close")}})};$ocms.postXT({url:$ocms.url("req/pget"),timeout:90,data:{id:e.id},success:e=>{n&&n.ft.rwText($rct.rq2),i()},error:()=>{confirm($rct.rq1f)?(n&&n.ft.rwText($rct.rq2),i()):n&&n.c.trigger("modal_close")}})},$inv.ccInv=function(e){let t=(e.data||{}).typ||"r",n=$fis.lf(),i=n.children("ul.rql"),a=i.data("parent"),r=[];if(i.find("li.rli.checked").each((function(){r.push($(this).data("Id"))})),r.length<1)return void alert($rct.dnS);if("i"===t&&r.length>1)return void alert($rct.dII);let l=$fis.frm_edit(),d=$$.dc("invoice_layout",l).append($$.dc("btn sprev").click($inv.sprev)),s=$fis.cf().width()>d.width()+n.width()+20;n.tC("fix",s).tC("hd",!s),$inv.eM(!1,!0);let c=$$.dc("rfrm").ldng(1),o=$ocms.dlg(c,{width:1e3});o.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("req/iget"),timeout:60,data:{id:a,mode:"ful",typ:t,sel:r.join(",")},success:e=>{let t=$$.dc("srq",d),n=$$.tblset({class:"invi"},t);n.bdy.remove(),n.ft=$$[0]("tfoot"),e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b")),n.tbl.data($.extend({new:{},sms:{},itm:{}},{admin:e.admin,companies:e.companies,locations:e.locations}));let i=$$.tr(n.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(i,e))),n.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.requests||[],(function(t,i){if(0!==(i.Id||0)){let t=$inv.worknotes(i);i.text="i"===e.admin.type?$rct.req+jine([i.ExternalId,i.Name],": ").eine(" ",""):jine([jine([fdt(i.WorkDoneAt,"dd.MM.yy"),i.ExternalId]," - "+$rct.req+" "),t.ne(i.Name)],": \n");let a=$$.tbody(n.tbl).data($.extend({},i));$inv.rendersrq.call(a)}}));let a=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(a),n.ft.appendTo(n.tbl);let r,l,s=e.admin||{},c=(e,t,i,a,r)=>{let l=$$.dc("inpfrm",d).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{n.tbl.data("new")[i]=e}},r),$inv.eHtml)),n.tbl.data("new")[i]=t};c("tfrm",s.invoicetitle,"invoicetitle",0,null),c("adrfrm",s.invoiceaddress,"invoiceaddress",0,null),c("locfrm","","loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),c("emailfrm",s.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",d).append($$.dc("content").text(s.sender)),s.provisionend&&(l=s.provisionstart?$rct.provP:$rct.provD,r=s.provisionstart?fdt(s.provisionstart,"dd.MM.yyyy")+" - "+fdt(s.provisionend,"dd.MM.yyyy"):fdt(s.provisionend,"dd.MM.yyyy")),c("admfrm",r,"provisionperiod",l,1),n.tbl.data("new").CustomValues=s.CustomValues||"",$$.dc("inpfrm ctpfrm",d).text(jObj(s.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv"),$inv.eM(!1,!0,$inv.emOpt(s))},complete:()=>{o.c.trigger("modal_close")}})},$inv.ccStInv=function(e){let t=e.data||{},n=$fis.lf(),i=t.id,a=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sprev)),r=$fis.cf().width()>a.width()+n.width()+20;n.tC("fix",r).tC("hd",!r),$inv.eM(!1,!0);let l=$$.dc("rfrm").ldng(1),d=$ocms.dlg(l,{width:1e3});d.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),timeout:90,data:{id:t.id},success:e=>{d&&d.ft.rwText($ict.iq2),$ocms.postXT({url:$ocms.url("inv/icget"),timeout:60,data:{id:i},success:e=>{let t=$$.dc("srq",a),n=$$.tblset({class:"invi"},t);n.bdy.remove(),n.ft=$$[0]("tfoot"),e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b")),n.tbl.data($.extend({new:{},sms:{},itm:{}},{admin:e.admin,companies:e.companies,locations:e.locations}));let i=$$.tr(n.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(i,e))),n.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.requests||[],(function(t,i){if(0!==(i.Id||0)){let t=$inv.worknotes(i);i.text="i"===e.admin.type?$rct.req+jine([i.ExternalId,i.Name],": ").eine(" ",""):jine([fdt(i.WorkDoneAt,"dd.MM.yy")+t.ne(i.Name)],": ");let a=$$.tbody(n.tbl).data($.extend({},i));$inv.rendersrq.call(a)}}));let r=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(r),n.ft.appendTo(n.tbl);let l,d,s=e.admin||{},c=(e,t,i,r,l)=>{let d=$$.dc("inpfrm",a).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(t);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{n.tbl.data("new")[i]=e}},l),$inv.eHtml)),n.tbl.data("new")[i]=t};c("tfrm",s.invoicetitle,"invoicetitle",0,null),c("adrfrm",s.invoiceaddress,"invoiceaddress",0,null),c("locfrm",s.provisionlocation,"loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),c("emailfrm",s.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",a).append($$.dc("content").text(s.sender)),s.provisionend&&(d=s.provisionstart?$rct.provP:$rct.provD,l=s.provisionstart?fdt(s.provisionstart,"dd.MM.yyyy")+" - "+fdt(s.provisionend,"dd.MM.yyyy"):fdt(s.provisionend,"dd.MM.yyyy")),c("admfrm",l,"provisionperiod",d,1),n.tbl.data("new").CustomValues=s.CustomValues||"",$$.dc("inpfrm ctpfrm",a).text(jObj(s.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv")},complete:()=>{d.c.trigger("modal_close")}})},error:()=>{d&&d.c.trigger("modal_close")}})},$inv.clCntInv=function(e){let t=$fis.lf(!1),n=[];t.find("li.ili.checked").each((function(){n.push($(this).data("Id"))})),1===n.length&&$inv.cntInv({id:n[0]})},$inv.cntInv=function(e){e=e||{};$fis.lf(!1).rC("fix").aC("hd");let t=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sedit));$inv.eM(!1,!0);let n=$$.dc("rfrm").ldng(1),i=$ocms.dlg(n,{width:1e3});i.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("inv/get"),timeout:60,data:{id:e.id},success:e=>{e.admin=e.admin||{};let n=e.inv||{},i=$$.dc("srq",t),a=$$.tblset({class:"invi"},i);a.bdy.remove(),a.ft=$$[0]("tfoot"),a.tbl.data($.extend({invid:n.Id,new:{},sms:{},itm:{},bai:[]},e));let r=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(r,e))),a.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.req||[],(function(e,t){let n=$$.tbody(a.tbl).data($.extend({},t));$inv.rendersrq.call(n)}));let l=$$.tr($$.tbody(a.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(l),a.ft.appendTo(a.tbl);let d=(e,n,i,r,l)=>{let d=$$.dc("inpfrm",t).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(n);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=n};d("tfrm",n.InvoiceTitle,"invoicetitle",0,null),d("adrfrm",n.SendToAddress,"invoiceaddress",0,null),d("locfrm",n.ProvisionLocation,"loc",1,null),d("emailfrm",n.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",t).append($$.dc("content").text(e.admin.sender)),d("admfrm",n.ProvisionPeriod,"provisionperiod",!0===(n.ProvisionPeriod||"").includes("-")?$rct.provP:$rct.provD,1),a.tbl.data("new").CustomValues=n.CustomValues||"",$$.dc("inpfrm ctpfrm",t).text(jObj(n.CustomValues,"contactName")),a.tbl.children("tbody").each($inv.bdysort),a.tbl.trigger("fds.inv"),$inv.eM(!1,!0,$inv.emOpt(e.admin))},complete:()=>{i.c.trigger("modal_close")}})},$inv.cSt=function(e){e=e||{};let t=$fis.lf(),n=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sedit)),i=$fis.cf().width()>n.width()+t.width()+20;t.tC("fix",i).tC("hd",!i),$inv.eM(!1,!0);let a=$$.dc("rfrm").ldng(1),r=$ocms.dlg(a,{width:1e3});r.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),data:{id:e.id},success:t=>{r&&r.ft.rwText($ict.iq2),$ocms.postXT({url:$ocms.url("inv/storno"),data:{id:e.id,mode:e.mode},success:e=>{e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b"));let t=e.inv||{},i=$$.dc("srq",n),a=$$.tblset({class:"invi"},i);a.bdy.remove(),a.ft=$$[0]("tfoot"),a.tbl.data($.extend({invid:t.Id,new:{},sms:{},itm:{},bai:[]},e));let r=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(r,e))),a.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.req||[],(function(e,t){let n=$$.tbody(a.tbl).data($.extend({},t));$inv.rendersrq.call(n)}));let l=$$.tr($$.tbody(a.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(l),a.ft.appendTo(a.tbl);let d=(e,t,i,r,l)=>{let d=$$.dc("inpfrm",n).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(t);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=t};d("tfrm",t.InvoiceTitle,"invoicetitle",0,null),d("adrfrm",t.SendToAddress,"invoiceaddress",0,null),d("locfrm",t.ProvisionLocation,"loc",1,null),d("emailfrm",t.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(e.admin.sender)),d("admfrm",t.ProvisionPeriod,"provisionperiod",!0===(t.ProvisionPeriod||"").includes("-")?$rct.provP:$rct.provD,1),a.tbl.data("new").CustomValues=t.CustomValues||"",$$.dc("inpfrm ctpfrm",n).text(jObj(t.CustomValues,"contactName")),a.tbl.children("tbody").each($inv.bdysort),a.tbl.trigger("fds.inv")},complete:()=>{r.c.trigger("modal_close")}})},error:()=>{r&&r.c.trigger("modal_close")}})},$inv.adrCountries=[["DE","Deutschland"],["AT","Österreich"],["CH","Schweiz"],["FR","Frankreich"],["NL","Niederlande"],["BE","Belgien"],["LU","Luxemburg"],["IT","Italien"],["ES","Spanien"],["PL","Polen"],["DK","Dänemark"],["CZ","Tschechien"],["GB","Großbritannien"],["US","USA"]],$inv.composeAddress=function(e){let t=[],n=e=>{""!==(e=(""+(e||"")).trim())&&t.push(e)};n((e=e||{}).name),""!==(""+(e.contact||"")).trim()&&n("z.Hd. "+(""+e.contact).trim()),n(e.line2||e.addressLine2),n(e.street),n(((e.postalCode||"")+" "+(e.city||"")).trim());let i=(""+(e.countryCode||"")).toUpperCase();return""!==i&&"DE"!==i&&n(i),t.join("\n")},$inv.adrCurrent=function(e){let t=jObj((e.data("new")||{}).CustomValues,"sendToAddress");if("string"==typeof t&&"{"===t.trim().charAt(0))try{t=JSON.parse(t)}catch(e){t=null}if(t&&"object"==typeof t)return t;let n=(e.data("admin")||{}).invoiceaddressData;if("string"==typeof n&&"{"===n.trim().charAt(0))try{return JSON.parse(n)}catch(e){}else if(n&&"object"==typeof n)return n;return{}},$inv.eAddress=function(e){let t=$inv.d.tbl(),n=$inv.adrCurrent(t),i=[{name:"name",label:"Name / Firma",type:"text",value:n.name||"",required:!0},{name:"contact",label:"z.Hd. (optional)",type:"text",value:n.contact||""},{name:"street",label:"Straße + Nr.",type:"text",value:n.street||""},{name:"line2",label:"Adresszusatz (optional)",type:"text",value:n.line2||n.addressLine2||""},{name:"postalCode",label:"PLZ",type:"text",value:n.postalCode||""},{name:"city",label:"Ort",type:"text",value:n.city||""},{name:"countryCode",label:"Land",type:"select",url:$inv.adrCountries,value:n.countryCode||"DE"},{name:"vatId",label:"USt-IdNr. (nur bei Firmen)",type:"text",value:n.vatId||""}],a=$$.dc("adr-conformity").append([$$.dc("hd").text("Hinweis zur DATEV-/eRechnungs-Konformität"),$$.dc("tx").text("Pflicht: Name, Straße, PLZ, Ort und Land. Die USt-IdNr. nur bei Firmen angeben — für eine Rechnung an eine Privatperson einfach leer lassen.")]);$ocms.dlgform(i,{title:"Rechnungsempfänger",addcontent:a,success:function(t){let n={name:t.name||"",contact:t.contact||"",line2:t.line2||"",street:t.street||"",postalCode:t.postalCode||"",city:t.city||"",countryCode:t.countryCode||"DE",vatId:(""+(t.vatId||"")).trim()},i=$inv.composeAddress(n);e.data&&e.data.t&&e.data.t.rwText(i),"function"==typeof(e.data||{}).change&&e.data.change(i),$inv.d.sync({Target:"address",Value:n})}})},$inv.eHtml=function(e){if(e.data&&!(e.data instanceof jQuery)&&"invoiceaddress"===e.data.nme&&$inv.d&&"function"==typeof $inv.d.token&&""!==$inv.d.token())return $inv.eAddress.call(this,e);let t=$(this),n=e.data instanceof jQuery?e.data:e.data.t,i=["invoiceemail","provisionperiod","invoicetitle"].includes(e.data.nme),a=i?[{name:"txt",label:"Text",type:"text",value:n.text()}]:[{name:"txt",label:"Text",type:"html",value:n.html(),tinymce:!0,attr:{style:"height: 300px"}}],r=e.data.change||null,l={title:t.data("dialog")||"",success:function(t){i?n.text(t.txt||""):n.html(t.txt),"function"==typeof r&&r(t.txt),$inv.d.syncField(e.data.nme,i?t.txt||"":t.txt),$inv.rd.syncField(e.data.nme,i?t.txt||"":t.txt)},tinymce:{valid_elements:"br",hidemenu:!0,hidetoolbar:!0}};if(Array.isArray(e.data.list)){let t=$$.dc("lstfrm");$.each(e.data.list,((n,i)=>{let a=$$.dc("li",t).append(""!==(e.data.lbl||"")?$$.dc("lbl").rwText(i[e.data.lbl]):null);$$.dc("adr",a).rwText(i[e.data.property]).data("val",i[e.data.property]).click((function(){let e=$(this),t=e.closest(".modal-body").find(':input[name="txt"]');t.is(".tinymce")?tinymce.get(t.attr("id")).setContent($$.s().rwText(e.data("val")).html()):"TEXTAREA"===t.prop("tagName")?t.val(e.data("val")).change():t.rwText(e.data("val"))}))})),l.addcontent=t}$ocms.dlgform(a,l)},$inv.setVat=function(e){$(this);let t=e.data,n=prompt($rct.rqV);n&&(n=parseFloat(n.replace("%","")),n>1&&(n*=.01),!1===isNaN(n)&&(t.siblings(".itm").each((function(){$(this).data().vat=fnum(n,{style:"percent"}).replace(" ","")})),$inv.t_fds_inv()))},$inv.inRow=function(e){let t=$(this),n=e.data,i={},a=$rcol.itm.clone(["SortOrder","NameOrNumber","Type","quantityhours","UnitString","net","svcnet_val","svcvat_val","net_val","vat_val","vat","Note"]),r="N"+(65536*(1+Math.random())||0).toString(16).substr(6),l=$$.tr({id:"itm_"+r.toString(),class:"itm"});$ocms.dlgform(a,{title:t.data("dialog")||"",success:function(e){l.data($.extend({Id:r},i,e)),$inv.rrw.call(l),l.insertAfter(n),$inv.t_fds_inv()},typedvalues:!0})},$inv.eRow=function(e){let t=$(this),n=e.data,i=n.data()||{},a=["SortOrder","NameOrNumber","Type","quantityhours","UnitString","net","svcnet_val","svcvat_val","net_val","vat_val","vat","Note"];i.id||""!==(i.Type||"")||a.unshift("Type");let r=$rcol.itm.clone(a).applyValues(i);r.set("Type","hidden","type"),$inv.eRw.call(t,n,i,r)},$inv.eRw=function(e,t,n){let i=$(this);$ocms.dlgform(n,{title:i.data("dialog")||"",success:function(n){let i={};""===(t.Id||"")&&(i.Id="N"+(65536*(1+Math.random())||0).toString(16).substr(6),e.attr("id","itm_"+i.Id.toString())),i.quantity=((n.quantityhours||"").toString()+" "+(n.UnitString||"").toString()).trimEnd(),e.data($.extend({},t,n,i)),console.debug("eRw success %o",e.data()),$inv.rrw.call(e),$inv.t_fds_inv()},typedvalues:!0})},$inv.bdysort=(e,t)=>{$(t).Sortable({dragItem:!1,dragHandleClass:"ico",parentident:"tr",onend:()=>{$inv.t_fds_inv()}})},$inv.rrw=function(){let e=$(this),t=e.data(),n={},i=e.is(".placeholder"),a=e.is(".hidenote"),r=e=>$$.d().append(e).html(),l=[$$.dc("ibtn insb",{title:$rct.iRb}).append(gi("indent-left")).click(e,$inv.inRow)];!1===i&&(l.unshift($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(e,$inv.eRow)),l.push($$.dc("ibtn del",{title:$rct.dR}).append(gi("trash")).click((function(t){confirm($rct.cD)&&(e.remove(),$inv.t_fds_inv())}))),"set"===(t.Type||"").toLowerCase()&&0===(t.net_val||0)&&l.push($$.dc("ibtn tosetp",{title:$rct.toSetP}).append(gi("scale")).click(e,$inv.toSetPrice)));let d=$$.dc("axf").append(l);!0===i?n={id:"",typ:"placeholder"}:!0===e.is(".itm.osum")?n={invrqid:t.InvRqId,id:"osum"+e.index(),typ:"osum",p:"",q:null,t:r(t.tbl.tbl),tt:null,v:null,vt:t.net_val,vs:t.svcnet_val,vat:t.vat,vv:t.vat_val,vsv:t.svcvat_val,det:!1}:(n={invrqid:t.InvRqId,id:t.Id||"",typ:t.Type||"other",p:"",q:null,t:"",tt:null,v:null,vt:t.net_val,vs:t.svcnet_val,vat:t.vat,vv:t.vat_val,vsv:t.svcvat_val,det:""!==(t.Note||"")&&!1===a,SetItmId:t.SetItmId||null},$$.dc("ibtn ico move",d,{title:$rct.mR}),n.p=t.position||t.SortOrder||"",""===n.id?n.t="":["Text","Title"].includes(n.typ)&&0===(t.net_val||0)?n.t=t.htmltext||("#"!==(t.NameOrNumber||"").substr(0,1)?r($$[0]("p").text(t.NameOrNumber)):"")+(t.Note||""):(n.tt=n.det?"":$$.s(t.Note||"").text(),n.q=t.quantity||(0!==(t.quantityhours||0)?fnum(t.quantityhours)+" "+(t.UnitString||""):""),n.t=t.htmltext||(n.det?r($$.s(t.NameOrNumber||""))+r($$.dc("desc").html(t.Note)):r($$.s(t.NameOrNumber||""))),n.v=t.net,n.vt=t.net_val)),""!==(t.Note||"")&&$$.dc("ibtn add",d).append(gi("object-align-left")).click((function(t){$inv.rrw.call(e.tC("hidenote"))}));let s=[$$.tdc("aux").append(d),$$.tdc("keep").text(n.p)];if(""===n.id)s.push($$.td(e,{colspan:4}).append(n.t));else{Array.prototype.push.apply(s,n.q?[$$.tdc("keep").text(n.q)]:[]);let e=e=>null==e?"":fnum(e,$rct.cst);Array.prototype.push.apply(s,[$$.tdc("txt",{colspan:n.q?1:2,title:n.tt}).append(n.t),$$.tdc("currency").text(e(n.v)),$$.tdc("currency inetval").text(e(n.vt)).attr("title",$rct.svcPart+": "+e(n.vs))])}e.empty().attr("class",i?"placeholder":"itm").aC(n.Typ).tC("sethdr","set"===(n.typ||"").toString().toLowerCase()).tC("hidenote",a).append(s),t.co=n},$inv.toSetPrice=function(e){let t=(e.data.data().Id||"").toString();""!==t&&!1!==confirm($rct.toSetPc)&&$.when($inv.t_fds_inv()).done((()=>{$inv.d.sync({Target:"item.setprice",Ref:t})}))},$inv.invSumUpdate=function(){let e=$(this),t=[],n=e.children("tbody");n.each(((e,n)=>{let i=$(n),a=i.data()||{},r=[],l=[],d=i.find("tr.itm"),s=0;i.tC("empty",d.length<1),d.each(((e,t)=>{let n=$(t).data()||{};r.push(n.co);let i=$inv.itemToContract(n),a=(n.SetItmId||"").toString();"set"!==i.type&&""!==a&&a!==i.id&&(i.setId=a),l.push(i),(void 0===n.SortOrder||null===n.SortOrder?-1:n.SortOrder)>-1&&(!1===["text","title"].includes((n.Type||"other").toLowerCase())&&s++,n.SortOrder=0,n.position=s,$inv.rrw.call(t))})),t.push({Id:a.Id,nme:a.Name,text:a.text,itm:r,items:l})}));let i=e.find("tbody:not(.empty)").length;n.find("tr.isum").tC("hidden",i<2),e.data("bai",t),""===(e.data("dtoken")||"")&&!1===bool(e.data("dseeding"),!1)&&null!=(e.data("admin")||{}).type&&(e.data("dseeding",!0),$inv.d.seed($.extend($inv.invcPayload(e.data()),{invid:e.data("invid")||""})))},$inv.worknotes=function(e){let t="";return e.steps.forEach(((e,n)=>{let i;try{i=JSON.parse(e.Data||{}).fields||[]}catch(e){console.debug(e),i=[]}!0!==Array.isArray(i||"")&&(i="object"==typeof i&&!0===Array.isArray(i.field||"")?i.field:[]),i.forEach(((e,n)=>{"Ausgeführte Arbeiten"===e.name&&(t=e.result||"")}))})),t},$inv.rendersrq=function(){let e=$(this).empty(),t=e.is(".onesum"),n=e.data(),i=$$.tr(e,{id:"srq"+n.Id}).aC("title nosort"),a=($rcol.itm.lbl(),$$.dc("axf").appendTo($$.tdc("aux",i)));$$.dc("ibtn osum",a,{title:$rct.combP}).append(gi("euro")).click((function(t){e.tC("onesum"),$inv.rendersrq.call(e),$inv.t_fds_inv()})),$$.dc("ibtn setvat",a,{title:$rct.sV}).append(gi("gbp")).click(i,$inv.setVat),$$.dc("ibtn insb",a,{title:$rct.iRb}).append(gi("indent-left")).click(i,$inv.inRow);let r,l=$$.sc("text",n.text),d=($$.td(i,{colspan:t?4:5}).append(l),["net_val","vat_val","svcnet_val","svcvat_val","net"]);if($$.dc("ibtn edit",a).data("dialog",$rcol.req.lbl().Name).append(gi("pencil")).click({t:l,change:e=>{n.text=e,$inv.t_fds_inv()}},$inv.eHtml),t&&($$.tdc("currency isumval",i),r={Id:n.Id.toString()+"_osum",net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0},r.tbl=$$.tblset({class:"stbl"})),$.each(n.items||[],((n,i)=>{let a,l={Id:i.Id,net_val:i.net_val||0,vat_val:i.vat_val||0,svcnet_val:0,svcvat_val:0,net:i.net||0,Note:i.Note||""};if("service"===i.Type.toLowerCase())l.svcnet_val=i.net_val||0,l.svcvat_val=i.vat_val||0;t?(a=$$.tr(r.tbl.bdy,{id:"itm"+i.Id,class:"sitm"}).aC(i.Type),"Text"===i.Type||"Title"===i.Type?$$.td(a,{colspan:2}).html(i.htmltext||i.Note):($$.tdc("keep",a).text(i.quantity||((i.quantityhours||0)>0?fnum(i.quantityhours)+(i.UnitString||"").eine(" ",""):"")),i.htmltext?$$.tdc("txt",a).html(i.htmltext):$$.tdc("txt",a).text(i.NameOrNumber).attr("title",i.Note)),$.each(d,((e,t)=>{r[t]+=l[t]})),a.data(l)):($.extend(l,i),a=$$.tr(e,{id:"itm"+i.Id,class:"itm"}),a.data(l),$inv.rrw.call(a))})),t){let t=$$.tr(e,{id:"itmsq"+n.Id,class:"itm osum"}).data(r);$inv.rrw.call(t)}else{let t=$$.tr(e).aC("isum nosort");$$.tdc("aux",t),$$.td(t,{colspan:4}).text($rct.iSum),$$.tdc("currency isumval",t)}},$inv.t_fds_inv=()=>{let e=$("div.invoice_layout table.invi");if(e.trigger("fds.inv"),""!==(e.data("dtoken")||""))return $inv.d.syncChanged(e);let t=e.data("dseedpromise");return t?$.when(t).then((()=>$inv.d.syncChanged(e))):$.when()},$inv.sedit=()=>{$inv.sprev(!0)},$inv.jdisp=function(e){e.stopPropagation(),e.data.id&&$inv.disp(e.data.id,e.data.typ||"")},$inv.disp=(e,t)=>{let n="";switch(t){case"inv":n="inv/rdoc";break;case"rem":n="rem/rdoc"}""!==n&&$ocms.postXT({url:$ocms.url(n),data:{id:e||"",typ:"img"},success:e=>{let t=$$.dc("imagecollection pdfpreview"),n=Math.round(.88*vh());e.id;$.each(e.img||[],(function(e,i){$$.dc("pdfp",t).append($$.img(i).css("max-height",(n-rpx(6)).toString()+"px"))})),$ocms.dlg(t,{size:[n,Math.round(.88*vw())],zindex_min:50,form:!1,exclusive:!1})}})},$inv.jdbn=function(e){$ocms.postXT({url:$ocms.url("inv/rdocn"),data:{name:e.data.id||"",typ:"img"},success:e=>{let t=$$.dc("imagecollection pdfpreview"),n=Math.round(.88*vh());e.id;$.each(e.img||[],(function(e,i){$$.dc("pdfp",t).append($$.img(i).css("max-height",(n-rpx(6)).toString()+"px"))})),$ocms.dlg(t,{size:[n,Math.round(.88*vw())],zindex:50,form:!1})}})},$inv.sp13b=()=>{var e=$("div.invoice_layout").find("table.invi"),t=e.data();t.admin.p13b=!0,!1===(t.inv.InvoiceOptions||"").split(",").includes("§13b")&&(t.inv.InvoiceOptions+=",§13b"),e.trigger("fds.inv"),$inv.d.sync({Target:"p13b",Value:t.admin.p13b})},$inv.itemToContract=function(e){let t=((e=e||{}).Type||"").toString().toLowerCase(),n=e=>e??null,i={id:(e.Id||"").toString(),type:t,title:"",desc:"",qty:"",price_net:"",total_net:n(e.net_val),vat:e.vat||""};var a;return e.co&&"osum"===e.co.typ?(i.desc=e.co.t||"",i.total_net=e.net_val||0):["text","title"].includes(t)&&0===(e.net_val||0)?(i.desc=e.htmltext||("#"!==(e.NameOrNumber||"").substr(0,1)?(a=$$[0]("p").text(e.NameOrNumber||""),$$.d().append(a).html()):"")+(e.Note||""),i.total_net=""):(e.htmltext?i.desc=e.htmltext:(i.title=e.NameOrNumber||"",i.desc=e.Note||""),i.qty=e.quantity||(0!==(e.quantityhours||0)?fnum(e.quantityhours)+(e.UnitString?" "+e.UnitString:""):""),i.price_net=n(e.net),i.total_net=n(e.net_val)),i},$inv.ssetmode=()=>{let e=$("div.invoice_layout").find("table.invi").data();e.admin=e.admin||{};let t,n=e.admin.setmode||"setprice",i=e=>$$.dc("btn",$ict.setmo[e]).tC("selected",n===e).click((()=>{t.c.trigger("modal_close"),$inv.setSetmode(e)})),a=$$.dc("choicefrm").append([i("setprice"),i("setonly")]);t=$ocms.dlg(a,{width:800})},$inv.setSetmode=e=>{if(!1===confirm($rct.toSetMc||$rct.toSetPc))return;let t="setonly"===e?"block.setonly":"block.setprice";$.when($inv.t_fds_inv()).done((()=>{$inv.d.sync({Target:t})}))},$inv.sctp=()=>{let e=$invcol.ctp;$ocms.dlgform(e,{title:$ict.ctp,success:function(e){var t=$("div.invoice_layout"),n=t.find("table.invi").data();let i={};void 0!==n.new&&"{"===(n.new.CustomValues||"").substr(0,1)&&(i=JSON.parse(n.inv.CustomValues)),i.contactName=e.name,i.contactEmail=e.email,n.new.CustomValues=JSON.stringify(i),t.find(".ctpfrm").text(ne(e.name,e.email)),$inv.d.sync({Target:"contact",Value:{name:e.name,email:e.email}})},typedvalues:!0})},$inv.invcPayload=function(e){e=e||{};let t=$.extend({},e.new),n=$.extend({},e.admin);return t.title=null!=t.invoicetitle?t.invoicetitle:t.title||"",t.provisionlocation=null!=t.loc?t.loc:t.provisionlocation||"",t.paymentterm=null!=n.paymentterms?n.paymentterms:t.paymentterm||"",n.customerid=null!=n.customerid?n.customerid:n.CustomerId,{admin:n,req:e.bai,new:t}},$inv.ssave=()=>{$inv.d.save()},$inv.sprev=e=>{$inv.d.preview()},$inv.rReload=()=>{try{let e=$("#listframe ul.rql:first").data();$inv.cInv2({id:e.search})}catch(e){}},$inv.quantChange=function(e){},$inv.storno=function(e,t){let n,i=$$.dc("choicefrm").append([$$.dc("btn","Storno ohne Details").click({id:e,mode:"simple"},(e=>{n.c.trigger("modal_close"),$inv.cSt(e.data)})),$$.dc("btn","Storno mit neuer Rechnung").click({id:e},(e=>{n.c.trigger("modal_close"),$inv.ccStInv(e)})),$$.dc("btn","Storno mit best. Rechnung").tC("inactive",!1===bool(t,!1)).click({id:e,mode:"copy"},(e=>{!0===bool(t,!1)&&(n.c.trigger("modal_close"),$inv.cSt(e.data))}))]);n=$ocms.dlg(i,{width:1e3})},$inv.credit=function(e,t){let n,i=$$.dc("choicefrm").append([$$.dc("btn","Gutschrift").click({id:e,mode:"credit"},(e=>{n.c.trigger("modal_close"),$inv.cSt(e.data)}))]);n=$ocms.dlg(i,{width:1e3})},$inv.setPyd=function(e){confirm($ict.cpyd)&&$ocms.postXT({url:$ocms.url("inv/setpyd"),timeout:60,data:{id:e},success:e=>{alert($ict.relm)},error:()=>{alert($t.f1)}})},$inv.setUpd=function(e){confirm($ict.cupd)&&$ocms.postXT({url:$ocms.url("inv/setupd"),timeout:60,data:{id:e},success:e=>{alert($ict.relm)},error:()=>{alert($t.f1)}})},$inv.resendRem=function(e){e.stopPropagation(),e.data.id&&confirm(string($ict.remresc,[e.data.name]))&&$ocms.postXT({url:$ocms.url("rem/resend"),timeout:60,data:{id:e.data.id},success:t=>{alert(string($ict.remresr,[e.data.name]))},error:()=>{alert($t.f1)}})},$inv.dspRem=function(e){let t=$$.dc("rfrm").ldng(1),n=$ocms.dlg(t,{width:1e3});n.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("inv/getrem"),timeout:60,data:{id:e,drafts:!1},success:e=>{n.ft.empty();let i=$$.tblset({class:"invtbl"},t.empty()),a=$invcol.rem2,r=$$.tr(i.hd);$$.th(r);$.each(a.fields||[],((e,t)=>{$$.th(r).text(t.label)}));let l=!1;$.each(e,((e,t)=>{l=!l;let n=$$.tr(i.bdy).tC("alt",l),r=$$.td(n);n.click((function(){n.tC("selected").siblings().rC("selected")})),!0===bool(t.hasFile,!1)&&($$.dc("idl ilbtn",r,{title:$ict.dl+"\n"+t.DocumentName}).append(gi("save-file","ico")).click({id:t.Id},$inv.downloadrem),$$.dc("idl ilbtn",r,{title:$ict.remdsp+"\n"+t.DocumentName}).append(gi("eye-open","ico")).click({id:t.Id,typ:"rem"},$inv.jdisp),$$.dc("idl ilbtn",r,{title:$ict.remres+"\n"+t.DocumentName}).append(gi("refresh","ico")).click({id:t.Id,typ:"rem",name:t.DocumentName},$inv.resendRem)),$.each(a.fields||[],((e,i)=>{let a=$$.td(n).aC(i.dtype),r=t[i.name];if("function"==typeof i.dfnc)i.dfnc.call(a,r,t);else switch(i.type||""){case"date":a.text(fdt(t[i.name],"dd.MM.yy"));break;case"datetime":a.text(fdt(t[i.name]));break;case"html":a.append($$.dc("ctw").html(r)),a.append($$.dc("ttip").html(r));break;default:a.text(t[i.name])}if("InvoiceId"===(i.name||""))a.aC("keep");switch(typeof i.title){case"function":i.title.call(a,t);break;case"string":a.attr("title",cs.title)}}))}))},error:()=>{t.empty(),n.ft.rwText($t.f1)},complete:()=>{t.ldng(0)}})},$inv.ccRem=function(e,t){$(this);$ocms.postXT({url:$ocms.url("rem/lrem"),timeout:60,data:{id:e},success:n=>{let i=$invcol.rid.clone();i.applyValues(n.ov);let a=$$.dc("ac"),r=$$.tblset({class:"fullgrid fullwidth"},a);if((n.lst||[]).length>0){$$.d({style:"margin: 1.5rem 0 1rem 0;font-size: 110%;text-decoration: underline;"}).prependTo(a).text($ict.rovlh);let e=$$.tr(r.hd);$ict.rovl.forEach(((t,n)=>$$.th(e,t))),$.each(n.lst,((e,t)=>{$$.tr(r.bdy).append([$$.tdc("keep",t.subject),$$.tdc("currency",fnum(t.amount,$rct.cst)),$$.tdc("currency",fnum(t.amount_payed,$rct.cst)),$$.tdc("keep",fdt(t.DateFinalized,"dd.MM.yy"))])}))}else $$.td($$.tr(r.bdy),$ict.nd);$ocms.dlgform(i,{addcontent:a,title:string($ict.remdt,[t||"?"]),success:function(t){$inv.ccRem_s2(e,t)},typedvalues:!0})}})},$inv.rRemRw=function(e){let t=$(this),n=e.rm||{};t.empty().data({invoiceid:n.invoiceid,invoicedate:n.invoicedate,amount:n.amount,amount_payed:n.amount_payed});let i=$$.dc("axf").append($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(t,$inv.eRowR));t.append([$$.tdc("aux").append(i),$$.tdc("keep",n.invoiceid),$$.tdc("keep",fdt(n.invoicedate,"dd.MM.yy")),$$.tdc("currency",fnum(n.amount,$rct.cst)),$$.tdc("currency",fnum(n.amount_payed,$rct.cst)),$$.tdc("currency",fnum(n.amount-n.amount_payed,$rct.cst))])},$inv.eRowR=function(e){let t=$(this),n=e.data,i=n.data()||{},a=$invcol.rem.clone().applyValues(i);$ocms.dlgform(a,{title:t.data("dialog")||"",success:function(e){let i=t.closest("table"),a=i.data();$.extend(a.rm,e),i.data(a),$inv.rRemRw.call(n,a),$inv.rd.syncAmount(a.rm.amount,a.rm.amount_payed)},typedvalues:!0})},$inv.ccRem_s2=function(e,t){$fis.lf(!1).rC("fix").aC("hd");let n=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.rprev));$inv.eM(!1,!0);$$.dc("rfrm").ldng(1);$ocms.postXT({url:$ocms.url("rem/get"),timeout:60,data:$.extend({id:e},t),success:e=>{let t=e.rm||{},i=$$.dc("srq",n),a=$$.tblset({class:"invi"},i);a.ft=$$[0]("tfoot"),a.tbl.data($.extend({invid:t.invid,new:{}},e));let r=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$ict.remHR.forEach((e=>$$.th(r,e))),$inv.rRemRw.call($$.tr(a.bdy),a.tbl.data()),a.ft.appendTo(a.tbl);let l=(e,t,i,r,l)=>{let d=$$.dc("inpfrm",n).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(t);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=t};l("tfrm",t.subject,"subject",0,null),l("adrfrm",t.invoiceaddress,"invoiceaddress",0,null),l("emailfrm",t.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(t.sender)),a.tbl.children("tbody").each($inv.bdysort),a.tbl.trigger("fds.inv");let d=a.tbl.data("new");d.amount=t.amount,d.amount_payed=t.amount_payed,$inv.rd.seed({rem:{invid:t.invid,type:t.type,invoiceid:t.invoiceid,invoicedate:t.invoicedate},new:d})},complete:()=>{}})},$inv.rprev=()=>{$inv.rd.preview()},$inv.sis=e=>{confirm($ict.sisc)&&$ocms.postXT({url:$ocms.url("inv/sis"),data:{id:e||""},success:e=>{}})},$inv.srs=e=>{confirm($ict.srsc)&&$ocms.postXT({url:$ocms.url("rem/srs"),data:{id:e||""},success:e=>{}})},$inv.mfrrel=e=>{$("#contentframe").ldng(),$ocms.postXT({url:$ocms.url("inv/mfrrel"),data:{id:e||""},success:e=>{$inv.rerenderinv()},complete:()=>{$("#contentframe").ldng(0)}})}; \ No newline at end of file diff --git a/Fuchs/wwwroot/web/fis.inv.min.css b/Fuchs/wwwroot/web/fis.inv.min.css index dbcbcb5..1829908 100644 --- a/Fuchs/wwwroot/web/fis.inv.min.css +++ b/Fuchs/wwwroot/web/fis.inv.min.css @@ -1 +1 @@ -.invfrm>table td.sh_s,table.invtbl td.sh_s{color:#bf4b06}.invfrm>table td.is_cc,table.invtbl td.is_cc{background-color:#777!important;color:#fff!important}.invfrm>table td.is_pyd,table.invtbl td.is_pyd{color:#60cc08}.invfrm>table td.is_due,table.invtbl td.is_due{background-color:#f2f23f!important}.invfrm>table td.is_ovd,table.invtbl td.is_ovd{background-color:#de4e09!important}.invfrm>table td.is_rem,table.invtbl td.is_rem{background-color:#ce1900!important}.invfrm>table td.av,table.invtbl td.av{border:2px solid red}.invfrm>table td.av+td.vsel select,table.invtbl td.av+td.vsel select{display:block}.rfrm{min-width:200px;min-height:200px}table.if{border-collapse:collapse;margin:1rem 0;background:#fff}table.if tr:nth-child(2n+1) td{background-color:#f9f9f9}table.if tr.title td{background-color:#56a532;color:#fff}table.if tr.title td .eid{font-weight:700;margin:0 1rem 0 .5rem;font-size:140%}table.if tr.title td .nme{font-size:110%}table.if tr.shd td{font-style:italic;color:#bbb;background-color:#fff!important;font-size:90%}table.if td,table.if th{padding:.2rem .35rem;border:1px solid #ddd}table.if td.currency{text-align:right;white-space:nowrap}table.if td.num{white-space:nowrap}.pdfpreview .pdfp.ph>.note{background:#fff;display:inline-block;padding:3rem;margin:.2rem 0}@keyframes fis_spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}.edit_frm .invoice_layout{margin:2rem 2rem 2rem auto;width:50rem;border:1px solid #eee;padding:25.5rem 3rem 3rem;box-shadow:4px 4px 9px rgba(50,50,50,.3);position:relative}.edit_frm .invoice_layout .axf{font-size:1rem;display:none;position:absolute;right:100%;height:100%;min-height:1.5rem;min-width:2rem;background:#f0ffe2;border:1px solid #ccc;border-top-left-radius:.2rem;border-bottom-left-radius:.2rem;top:0;width:auto;max-height:1.5rem;overflow:hidden;padding:.1rem}.edit_frm .invoice_layout .axf>.ibtn{cursor:pointer;height:100%;width:1.5rem;display:inline-block;position:relative}.edit_frm .invoice_layout .sndfrm{position:absolute;font-size:.7rem;color:#727272;top:4.7rem;left:3rem;width:auto;height:auto;user-select:none}.edit_frm .invoice_layout .emailfrm{position:absolute;font-size:.7rem;top:.5rem;left:.5rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .emailfrm .content{color:#000}.edit_frm .invoice_layout .emailfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .emailfrm:hover div.axf{display:block}.edit_frm .invoice_layout .admfrm{position:absolute;right:3rem;top:9rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .admfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .admfrm .content{color:#000}.edit_frm .invoice_layout .admfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .admfrm:hover div.axf{display:block}.edit_frm .invoice_layout .ctpfrm{position:absolute;right:3rem;top:14rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .ctpfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .ctpfrm .content{color:#000}.edit_frm .invoice_layout .ctpfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .ctpfrm:hover div.axf{display:block}.edit_frm .invoice_layout .adrfrm{position:absolute;left:3rem;top:6rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .adrfrm:hover div.axf{display:block}.edit_frm .invoice_layout .locfrm{position:absolute;left:3rem;top:18.5rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .locfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .locfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .locfrm:hover div.axf{display:block}.edit_frm .invoice_layout .tfrm,.edit_frm .invoice_layout>div.title{position:absolute;left:3rem;top:15rem;font-size:2rem;cursor:pointer}.edit_frm .invoice_layout .tfrm:hover div.axf,.edit_frm .invoice_layout>div.title:hover div.axf{display:block}.edit_frm .invoice_layout div.fnote{margin:1rem 0}.edit_frm .invoice_layout p+table.invi,.edit_frm .invoice_layout table.invi+p{margin-top:2.5rem}.edit_frm .invoice_layout table.invi{border-collapse:separate;border-spacing:0;border-color:#fff;width:100%;max-width:100%}.edit_frm .invoice_layout table.invi>tbody>tr.hidden{display:none}.edit_frm .invoice_layout table.invi>tbody>tr:nth-child(2n+1) td{background-color:#fbfbfb;border-color:#fbfbfb}.edit_frm .invoice_layout table.invi>tbody>tr.title>td{background:#fff;border-color:#fff;border-top:1.5px solid #000}.edit_frm .invoice_layout table.invi>tbody>tr.sethdr td.txt{font-weight:700}.edit_frm .invoice_layout table.invi td.currency,.edit_frm .invoice_layout table.invi td.num,.edit_frm .invoice_layout table.invi th.currency,.edit_frm .invoice_layout table.invi th.num{text-align:right;white-space:nowrap}.edit_frm .invoice_layout table.invi td.keep,.edit_frm .invoice_layout table.invi th.keep{white-space:nowrap}.edit_frm .invoice_layout table.invi table.stbl td,.edit_frm .invoice_layout table.invi table.stbl th{padding:.3rem .5rem}.edit_frm .invoice_layout table.invi table.stbl td:first-child,.edit_frm .invoice_layout table.invi table.stbl th:first-child{padding-left:0}.edit_frm .invoice_layout table.invi table.stbl td:last-child,.edit_frm .invoice_layout table.invi table.stbl th:last-child{padding-right:0}.edit_frm .invoice_layout table.invi>tbody>tr>td,.edit_frm .invoice_layout table.invi>tbody>tr>th,.edit_frm .invoice_layout table.invi>tfoot>tr>td,.edit_frm .invoice_layout table.invi>tfoot>tr>th,.edit_frm .invoice_layout table.invi>thead>tr>td,.edit_frm .invoice_layout table.invi>thead>tr>th,.edit_frm .invoice_layout table.invi>tr>td,.edit_frm .invoice_layout table.invi>tr>th{border-width:1px;padding:.3rem .5rem;border-left:none!important;border-right:none!important}.edit_frm .invoice_layout table.invi>tbody>tr>td.aux,.edit_frm .invoice_layout table.invi>tbody>tr>th.aux,.edit_frm .invoice_layout table.invi>tfoot>tr>td.aux,.edit_frm .invoice_layout table.invi>tfoot>tr>th.aux,.edit_frm .invoice_layout table.invi>thead>tr>td.aux,.edit_frm .invoice_layout table.invi>thead>tr>th.aux,.edit_frm .invoice_layout table.invi>tr>td.aux,.edit_frm .invoice_layout table.invi>tr>th.aux{width:0;max-width:0;min-width:0;position:relative;padding:0}.edit_frm .invoice_layout table.invi>tbody>tr>th,.edit_frm .invoice_layout table.invi>tfoot>tr>th,.edit_frm .invoice_layout table.invi>thead>tr>th,.edit_frm .invoice_layout table.invi>tr>th{text-align:left;font-weight:300;background-color:#fff;border-color:#fff;font-size:.8rem;font-style:italic;border-top-style:none;border-bottom-style:none}.edit_frm .invoice_layout table.invi>tbody>tr>td,.edit_frm .invoice_layout table.invi>tfoot>tr>td,.edit_frm .invoice_layout table.invi>thead>tr>td,.edit_frm .invoice_layout table.invi>tr>td{vertical-align:top;font-weight:400;background-color:#f8f8f8;border-color:#f8f8f8;border-top-style:solid;border-bottom-style:solid;user-select:none}.edit_frm .invoice_layout table.invi>tbody>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>tfoot>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>thead>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>tr:hover>td.aux>.axf{display:inline-flex}.edit_frm .invoice_layout table.invi>tbody>tr.isum>td,.edit_frm .invoice_layout table.invi>tfoot>tr.isum>td,.edit_frm .invoice_layout table.invi>thead>tr.isum>td,.edit_frm .invoice_layout table.invi>tr.isum>td{border-top:1px solid #000;background:#fff}.edit_frm .invoice_layout table.invi>tbody>tr.sep>td,.edit_frm .invoice_layout table.invi>tfoot>tr.sep>td,.edit_frm .invoice_layout table.invi>thead>tr.sep>td,.edit_frm .invoice_layout table.invi>tr.sep>td{background:#fff}.edit_frm .invoice_layout table.invi>tbody>tr.tsum td,.edit_frm .invoice_layout table.invi>tfoot>tr.tsum td,.edit_frm .invoice_layout table.invi>thead>tr.tsum td,.edit_frm .invoice_layout table.invi>tr.tsum td{font-weight:600;border-top:1px solid #000;border-bottom:1px solid #000}.edit_frm .invoice_layout table.invi .sortable>tr>td.aux .ico.move{background:url(data:image/svg+xml;base64,PHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMiAzMiIgaWQ9IkxheWVyXzQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48cG9seWdvbiBmaWxsPSJub25lIiBwb2ludHM9IjE2LDMxIDgsMTggMjQsMTggICAgICIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iI0RERERERCIvPjxwb2x5Z29uIGZpbGw9Im5vbmUiIHBvaW50cz0iMTYsMSA4LDE0IDI0LDE0ICAgICAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiNEREREREQiLz48L2c+PC9zdmc+) center center/contain no-repeat border-box}.edit_frm .invoice_layout table.invi .sortable>tr>td.aux .ico.move:hover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzIgMzIiIGlkPSJMYXllcl80IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGc+PHBvbHlnb24gZmlsbD0ibm9uZSIgcG9pbnRzPSIxNiwzMSA4LDE4IDI0LDE4ICAgICAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiLz48cG9seWdvbiBmaWxsPSJub25lIiBwb2ludHM9IjE2LDEgOCwxNCAyNCwxNCAgICAgIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9nPjwvc3ZnPg==)}.edit_frm .invoice_layout table.invi .sortable>tr.sortactive>td.ico{cursor:move}.edit_frm .invoice_layout .btn{background:url("") center center/contain no-repeat content-box #fff;position:absolute;top:.2rem;right:.2rem;height:3rem;width:3rem;padding:.1rem;z-index:11}.edit_frm .invoice_layout .btn.sprev{background-image:url(data:image/png;base64,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)}.edit_frm .invoice_layout .btn.sdoc{background-image:url(data:image/png;base64,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)}.edit_frm .invoice_layout.freeze::before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(50,50,50,.3);user-select:none;cursor:wait;z-index:10;pointer-events:none}.edit_frm .invoice_layout.freeze::before tr:hover>td.aux>.axf{display:inline-flex}.edit_frm .invoice_layout.freeze::after{content:"";position:absolute;top:50%;left:50%;width:3rem;height:3rem;margin:-1.5rem 0 0 -1.5rem;border:.4rem solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;z-index:11;pointer-events:none;animation:.8s linear infinite fis_spin}.edit_frm .invoice_layout .dvalidation{margin:0 0 1rem}.edit_frm .invoice_layout .dvalidation.hidden{display:none}.edit_frm .invoice_layout .dvalidation .dvmsg{padding:.4rem .7rem;margin:.25rem 0;border-radius:.2rem;font-size:.9rem;border-left:4px solid #999;background:#f5f5f5}.edit_frm .invoice_layout .dvalidation .dvmsg.error{border-left-color:#c0392b;background:#fdecea;color:#922}.edit_frm .invoice_layout .dvalidation .dvmsg.warning{border-left-color:#e0a800;background:#fff8e1;color:#7a5c00}.edit_frm .invoice_layout .dvalidation .dvmsg.info{border-left-color:#3498db;background:#eaf4fb;color:#1c5a82}.dhist .invtbl{width:100%}.dhist td,.dhist th{padding:.3rem .6rem;text-align:left;vertical-align:top}.dhist tbody tr:nth-child(even){background:#fafafa}.modal-body .lstfrm{display:block;position:relative}.modal-body .lstfrm .li{display:inline-block;background-color:#fff;border:1px solid #e0e0e0;padding:1.7rem .5rem .5rem;border-radius:.2rem;cursor:pointer;position:relative;margin:0 .5rem .5rem 0;box-shadow:1px 1px 3px rgba(50,50,50,.1)}.modal-body .lstfrm .li .lbl{position:absolute;background:#727272;color:#fff;font-size:.8rem;left:0;top:0;right:0;padding:.2rem;border-top-left-radius:inherit;border-top-right-radius:inherit} \ No newline at end of file +.invfrm>table td.sh_s,table.invtbl td.sh_s{color:#bf4b06}.invfrm>table td.is_cc,table.invtbl td.is_cc{background-color:#777!important;color:#fff!important}.invfrm>table td.is_pyd,table.invtbl td.is_pyd{color:#60cc08}.invfrm>table td.is_due,table.invtbl td.is_due{background-color:#f2f23f!important}.invfrm>table td.is_ovd,table.invtbl td.is_ovd{background-color:#de4e09!important}.invfrm>table td.is_rem,table.invtbl td.is_rem{background-color:#ce1900!important}.invfrm>table td.av,table.invtbl td.av{border:2px solid red}.invfrm>table td.av+td.vsel select,table.invtbl td.av+td.vsel select{display:block}.rfrm{min-width:200px;min-height:200px}table.if{border-collapse:collapse;margin:1rem 0;background:#fff}table.if tr:nth-child(2n+1) td{background-color:#f9f9f9}table.if tr.title td{background-color:#56a532;color:#fff}table.if tr.title td .eid{font-weight:700;margin:0 1rem 0 .5rem;font-size:140%}table.if tr.title td .nme{font-size:110%}table.if tr.shd td{font-style:italic;color:#bbb;background-color:#fff!important;font-size:90%}table.if td,table.if th{padding:.2rem .35rem;border:1px solid #ddd}table.if td.currency{text-align:right;white-space:nowrap}table.if td.num{white-space:nowrap}.pdfpreview .pdfp.ph>.note{background:#fff;display:inline-block;padding:3rem;margin:.2rem 0}@keyframes fis_spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}.edit_frm .invoice_layout{margin:2rem 2rem 2rem auto;width:50rem;border:1px solid #eee;padding:25.5rem 3rem 3rem;box-shadow:4px 4px 9px rgba(50,50,50,.3);position:relative}.edit_frm .invoice_layout .axf{font-size:1rem;display:none;position:absolute;right:100%;height:100%;min-height:1.5rem;min-width:2rem;background:#f0ffe2;border:1px solid #ccc;border-top-left-radius:.2rem;border-bottom-left-radius:.2rem;top:0;width:auto;max-height:1.5rem;overflow:hidden;padding:.1rem}.edit_frm .invoice_layout .axf>.ibtn{cursor:pointer;height:100%;width:1.5rem;display:inline-block;position:relative}.edit_frm .invoice_layout .sndfrm{position:absolute;font-size:.7rem;color:#727272;top:4.7rem;left:3rem;width:auto;height:auto;user-select:none}.edit_frm .invoice_layout .emailfrm{position:absolute;font-size:.7rem;top:.5rem;left:.5rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .emailfrm .content{color:#000}.edit_frm .invoice_layout .emailfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .emailfrm:hover div.axf{display:block}.edit_frm .invoice_layout .admfrm{position:absolute;right:3rem;top:9rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .admfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .admfrm .content{color:#000}.edit_frm .invoice_layout .admfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .admfrm:hover div.axf{display:block}.edit_frm .invoice_layout .ctpfrm{position:absolute;right:3rem;top:14rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .ctpfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .ctpfrm .content{color:#000}.edit_frm .invoice_layout .ctpfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .ctpfrm:hover div.axf{display:block}.edit_frm .invoice_layout .adrfrm{position:absolute;left:3rem;top:6rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .adrfrm:hover div.axf{display:block}.edit_frm .invoice_layout .locfrm{position:absolute;left:3rem;top:18.5rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .locfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .locfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .locfrm:hover div.axf{display:block}.edit_frm .invoice_layout .tfrm,.edit_frm .invoice_layout>div.title{position:absolute;left:3rem;top:15rem;font-size:2rem;cursor:pointer}.edit_frm .invoice_layout .tfrm:hover div.axf,.edit_frm .invoice_layout>div.title:hover div.axf{display:block}.edit_frm .invoice_layout div.fnote{margin:1rem 0}.edit_frm .invoice_layout p+table.invi,.edit_frm .invoice_layout table.invi+p{margin-top:2.5rem}.edit_frm .invoice_layout table.invi{border-collapse:separate;border-spacing:0;border-color:#fff;width:100%;max-width:100%}.edit_frm .invoice_layout table.invi>tbody>tr.hidden{display:none}.edit_frm .invoice_layout table.invi>tbody>tr:nth-child(2n+1) td{background-color:#fbfbfb;border-color:#fbfbfb}.edit_frm .invoice_layout table.invi>tbody>tr.title>td{background:#fff;border-color:#fff;border-top:1.5px solid #000}.edit_frm .invoice_layout table.invi>tbody>tr.sethdr td.txt{font-weight:700}.edit_frm .invoice_layout table.invi td.currency,.edit_frm .invoice_layout table.invi td.num,.edit_frm .invoice_layout table.invi th.currency,.edit_frm .invoice_layout table.invi th.num{text-align:right;white-space:nowrap}.edit_frm .invoice_layout table.invi td.keep,.edit_frm .invoice_layout table.invi th.keep{white-space:nowrap}.edit_frm .invoice_layout table.invi table.stbl td,.edit_frm .invoice_layout table.invi table.stbl th{padding:.3rem .5rem}.edit_frm .invoice_layout table.invi table.stbl td:first-child,.edit_frm .invoice_layout table.invi table.stbl th:first-child{padding-left:0}.edit_frm .invoice_layout table.invi table.stbl td:last-child,.edit_frm .invoice_layout table.invi table.stbl th:last-child{padding-right:0}.edit_frm .invoice_layout table.invi>tbody>tr>td,.edit_frm .invoice_layout table.invi>tbody>tr>th,.edit_frm .invoice_layout table.invi>tfoot>tr>td,.edit_frm .invoice_layout table.invi>tfoot>tr>th,.edit_frm .invoice_layout table.invi>thead>tr>td,.edit_frm .invoice_layout table.invi>thead>tr>th,.edit_frm .invoice_layout table.invi>tr>td,.edit_frm .invoice_layout table.invi>tr>th{border-width:1px;padding:.3rem .5rem;border-left:none!important;border-right:none!important}.edit_frm .invoice_layout table.invi>tbody>tr>td.aux,.edit_frm .invoice_layout table.invi>tbody>tr>th.aux,.edit_frm .invoice_layout table.invi>tfoot>tr>td.aux,.edit_frm .invoice_layout table.invi>tfoot>tr>th.aux,.edit_frm .invoice_layout table.invi>thead>tr>td.aux,.edit_frm .invoice_layout table.invi>thead>tr>th.aux,.edit_frm .invoice_layout table.invi>tr>td.aux,.edit_frm .invoice_layout table.invi>tr>th.aux{width:0;max-width:0;min-width:0;position:relative;padding:0}.edit_frm .invoice_layout table.invi>tbody>tr>th,.edit_frm .invoice_layout table.invi>tfoot>tr>th,.edit_frm .invoice_layout table.invi>thead>tr>th,.edit_frm .invoice_layout table.invi>tr>th{text-align:left;font-weight:300;background-color:#fff;border-color:#fff;font-size:.8rem;font-style:italic;border-top-style:none;border-bottom-style:none}.edit_frm .invoice_layout table.invi>tbody>tr>td,.edit_frm .invoice_layout table.invi>tfoot>tr>td,.edit_frm .invoice_layout table.invi>thead>tr>td,.edit_frm .invoice_layout table.invi>tr>td{vertical-align:top;font-weight:400;background-color:#f8f8f8;border-color:#f8f8f8;border-top-style:solid;border-bottom-style:solid;user-select:none}.edit_frm .invoice_layout table.invi>tbody>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>tfoot>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>thead>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>tr:hover>td.aux>.axf{display:inline-flex}.edit_frm .invoice_layout table.invi>tbody>tr.isum>td,.edit_frm .invoice_layout table.invi>tfoot>tr.isum>td,.edit_frm .invoice_layout table.invi>thead>tr.isum>td,.edit_frm .invoice_layout table.invi>tr.isum>td{border-top:1px solid #000;background:#fff}.edit_frm .invoice_layout table.invi>tbody>tr.sep>td,.edit_frm .invoice_layout table.invi>tfoot>tr.sep>td,.edit_frm .invoice_layout table.invi>thead>tr.sep>td,.edit_frm .invoice_layout table.invi>tr.sep>td{background:#fff}.edit_frm .invoice_layout table.invi>tbody>tr.tsum td,.edit_frm .invoice_layout table.invi>tfoot>tr.tsum td,.edit_frm .invoice_layout table.invi>thead>tr.tsum td,.edit_frm .invoice_layout table.invi>tr.tsum td{font-weight:600;border-top:1px solid #000;border-bottom:1px solid #000}.edit_frm .invoice_layout table.invi .sortable>tr>td.aux .ico.move{background:url(data:image/svg+xml;base64,PHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMiAzMiIgaWQ9IkxheWVyXzQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48cG9seWdvbiBmaWxsPSJub25lIiBwb2ludHM9IjE2LDMxIDgsMTggMjQsMTggICAgICIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iI0RERERERCIvPjxwb2x5Z29uIGZpbGw9Im5vbmUiIHBvaW50cz0iMTYsMSA4LDE0IDI0LDE0ICAgICAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiNEREREREQiLz48L2c+PC9zdmc+) center center/contain no-repeat border-box}.edit_frm .invoice_layout table.invi .sortable>tr>td.aux .ico.move:hover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzIgMzIiIGlkPSJMYXllcl80IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGc+PHBvbHlnb24gZmlsbD0ibm9uZSIgcG9pbnRzPSIxNiwzMSA4LDE4IDI0LDE4ICAgICAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiLz48cG9seWdvbiBmaWxsPSJub25lIiBwb2ludHM9IjE2LDEgOCwxNCAyNCwxNCAgICAgIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9nPjwvc3ZnPg==)}.edit_frm .invoice_layout table.invi .sortable>tr.sortactive>td.ico{cursor:move}.edit_frm .invoice_layout .btn{background:url("") center center/contain no-repeat content-box #fff;position:absolute;top:.2rem;right:.2rem;height:3rem;width:3rem;padding:.1rem;z-index:11}.edit_frm .invoice_layout .btn.sprev{background-image:url(data:image/png;base64,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)}.edit_frm .invoice_layout .btn.sdoc{background-image:url(data:image/png;base64,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)}.edit_frm .invoice_layout.freeze::before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(50,50,50,.3);user-select:none;cursor:wait;z-index:10;pointer-events:none}.edit_frm .invoice_layout.freeze::before tr:hover>td.aux>.axf{display:inline-flex}.edit_frm .invoice_layout.freeze::after{content:"";position:absolute;top:50%;left:50%;width:3rem;height:3rem;margin:-1.5rem 0 0 -1.5rem;border:.4rem solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;z-index:11;pointer-events:none;animation:.8s linear infinite fis_spin}.edit_frm .invoice_layout .dvalidation{margin:0 0 1rem}.edit_frm .invoice_layout .dvalidation.hidden{display:none}.edit_frm .invoice_layout .dvalidation .dvmsg{padding:.4rem .7rem;margin:.25rem 0;border-radius:.2rem;font-size:.9rem;border-left:4px solid #999;background:#f5f5f5}.edit_frm .invoice_layout .dvalidation .dvmsg.error{border-left-color:#c0392b;background:#fdecea;color:#922}.edit_frm .invoice_layout .dvalidation .dvmsg.warning{border-left-color:#e0a800;background:#fff8e1;color:#7a5c00}.edit_frm .invoice_layout .dvalidation .dvmsg.info{border-left-color:#3498db;background:#eaf4fb;color:#1c5a82}.dhist .invtbl{width:100%}.dhist td,.dhist th{padding:.3rem .6rem;text-align:left;vertical-align:top}.dhist tbody tr:nth-child(even){background:#fafafa}.modal-body .lstfrm{display:block;position:relative}.modal-body .lstfrm .li{display:inline-block;background-color:#fff;border:1px solid #e0e0e0;padding:1.7rem .5rem .5rem;border-radius:.2rem;cursor:pointer;position:relative;margin:0 .5rem .5rem 0;box-shadow:1px 1px 3px rgba(50,50,50,.1)}.modal-body .lstfrm .li .lbl{position:absolute;background:#727272;color:#fff;font-size:.8rem;left:0;top:0;right:0;padding:.2rem;border-top-left-radius:inherit;border-top-right-radius:inherit}.adr-conformity{margin-top:.75rem;padding:.6rem .75rem;background:#f3f7fb;border:1px solid #cfe0f0;border-radius:4px;font-size:.85rem;line-height:1.35}.adr-conformity .hd{font-weight:600;margin-bottom:.2rem}.adr-conformity .tx{color:#445} \ No newline at end of file diff --git a/Fuchs/wwwroot/web/fis.req.css b/Fuchs/wwwroot/web/fis.req.css index bd008c8..3abe707 100644 --- a/Fuchs/wwwroot/web/fis.req.css +++ b/Fuchs/wwwroot/web/fis.req.css @@ -629,4 +629,22 @@ table.if th.keep, table.if td.keep { padding: 0.2rem; border-top-left-radius: inherit; border-top-right-radius: inherit; +} + +/* Conformity hint shown inside the structured recipient-address dialog (EN 16931 / DATEV). */ +.adr-conformity { + margin-top: 0.75rem; + padding: 0.6rem 0.75rem; + background: #f3f7fb; + border: 1px solid #cfe0f0; + border-radius: 4px; + font-size: 0.85rem; + line-height: 1.35; +} +.adr-conformity .hd { + font-weight: 600; + margin-bottom: 0.2rem; +} +.adr-conformity .tx { + color: #445; } \ No newline at end of file diff --git a/Fuchs/wwwroot/web/fis.req.de.js b/Fuchs/wwwroot/web/fis.req.de.js index 5fbd85d..ae3c3f6 100644 --- a/Fuchs/wwwroot/web/fis.req.de.js +++ b/Fuchs/wwwroot/web/fis.req.de.js @@ -1504,7 +1504,84 @@ $inv.cSt = function (data) { } }); }; +/* Country choices for the structured recipient-address dialog (ISO 3166-1 alpha-2, BT-55). */ +$inv.adrCountries = [['DE', 'Deutschland'], ['AT', 'Österreich'], ['CH', 'Schweiz'], ['FR', 'Frankreich'], + ['NL', 'Niederlande'], ['BE', 'Belgien'], ['LU', 'Luxemburg'], ['IT', 'Italien'], ['ES', 'Spanien'], + ['PL', 'Polen'], ['DK', 'Dänemark'], ['CZ', 'Tschechien'], ['GB', 'Großbritannien'], ['US', 'USA']]; + +/* Compose the free-text postal block (for the inline display) from the structured address — + mirrors the backend InvoiceRecipientAddress.Compose (the VAT id is never part of the block). */ +$inv.composeAddress = function (a) { + a = a || {}; let lines = []; + let push = (v) => { v = ('' + (v || '')).trim(); if (v !== '') lines.push(v); }; + push(a.name); + if (('' + (a.contact || '')).trim() !== '') push('z.Hd. ' + ('' + a.contact).trim()); + push(a.line2 || a.addressLine2); + push(a.street); + push((('' + (a.postalCode || '')) + ' ' + ('' + (a.city || ''))).trim()); + let cc = ('' + (a.countryCode || '')).toUpperCase(); + if (cc !== '' && cc !== 'DE') push(cc); + return lines.join('\n'); +}; + +/* The structured recipient address currently in effect: the backend keeps it in + CustomValues.sendToAddress (survives a draft refresh); new invoices seed it from + fds__prepInvoice's invoiceaddressData; otherwise start empty. */ +$inv.adrCurrent = function (tbl) { + let cv = jObj((tbl.data('new') || {}).CustomValues, 'sendToAddress'); + if (typeof cv === 'string' && cv.trim().charAt(0) === '{') { try { cv = JSON.parse(cv); } catch (e) { cv = null; } } + if (cv && typeof cv === 'object') return cv; + let ad = (tbl.data('admin') || {}).invoiceaddressData; + if (typeof ad === 'string' && ad.trim().charAt(0) === '{') { try { return JSON.parse(ad); } catch (e) { } } + else if (ad && typeof ad === 'object') { return ad; } + return {}; +}; + +/* Structured recipient-address dialog (EN 16931 / DATEV). Posts the address delta as a JSON + object; the backend stores it, composes SendToAddress and keeps the PDF unchanged (ADR 0012). + B2C stays effortless: the USt-IdNr. is optional (empty = private person). */ +$inv.eAddress = function (ev) { + let tbl = $inv.d.tbl(), cur = $inv.adrCurrent(tbl); + let flds = [ + { name: 'name', label: 'Name / Firma', type: 'text', value: cur.name || '', required: true }, + { name: 'contact', label: 'z.Hd. (optional)', type: 'text', value: cur.contact || '' }, + { name: 'street', label: 'Straße + Nr.', type: 'text', value: cur.street || '' }, + { name: 'line2', label: 'Adresszusatz (optional)', type: 'text', value: cur.line2 || cur.addressLine2 || '' }, + { name: 'postalCode', label: 'PLZ', type: 'text', value: cur.postalCode || '' }, + { name: 'city', label: 'Ort', type: 'text', value: cur.city || '' }, + { name: 'countryCode', label: 'Land', type: 'select', url: $inv.adrCountries, value: (cur.countryCode || 'DE') }, + { name: 'vatId', label: 'USt-IdNr. (nur bei Firmen)', type: 'text', value: cur.vatId || '' } + ]; + let hint = $$.dc('adr-conformity').append([ + $$.dc('hd').text('Hinweis zur DATEV-/eRechnungs-Konformität'), + $$.dc('tx').text('Pflicht: Name, Straße, PLZ, Ort und Land. Die USt-IdNr. nur bei Firmen angeben — ' + + 'für eine Rechnung an eine Privatperson einfach leer lassen.') + ]); + $ocms.dlgform(flds, { + title: 'Rechnungsempfänger', + addcontent: hint, + success: function (res) { + let a = { + name: res.name || '', contact: res.contact || '', line2: res.line2 || '', + street: res.street || '', postalCode: res.postalCode || '', city: res.city || '', + countryCode: (res.countryCode || 'DE'), vatId: ('' + (res.vatId || '')).trim() + }; + let txt = $inv.composeAddress(a); + if (ev.data && ev.data.t) { ev.data.t.rwText(txt); } + if (typeof (ev.data || {}).change === 'function') { ev.data.change(txt); } + /* Structured delta — the invoice draft backend accepts a JSON object for 'address'. */ + $inv.d.sync({ Target: 'address', Value: a }); + } + }); +}; + $inv.eHtml = function (ev) { + /* The recipient address is edited through the structured dialog whenever an invoice draft is + active; reminders (no invoice draft token) keep the plain free-text editor. */ + if (ev.data && !(ev.data instanceof jQuery) && ev.data.nme === 'invoiceaddress' + && $inv.d && typeof $inv.d.token === 'function' && $inv.d.token() !== '') { + return $inv.eAddress.call(this, ev); + } let t = $(this), frmct = ev.data instanceof jQuery ? ev.data : ev.data.t; /* Single-line fields must stay plain text — the TinyMCE/html editor wraps the value in

tags, which used to get posted and persisted verbatim (e.g.

18.06.2026

in the diff --git a/Fuchs/wwwroot/web/fis.req.de.min.js b/Fuchs/wwwroot/web/fis.req.de.min.js index dfcc360..993a4a1 100644 --- a/Fuchs/wwwroot/web/fis.req.de.min.js +++ b/Fuchs/wwwroot/web/fis.req.de.min.js @@ -1 +1 @@ -let $rct={mdl:"Aufträge",or:"offene Aufträge",orr:"offene Aufträge (4 W)",rn:"Auftragsnummer",iov:{all:"Auftragsübersicht (alle)","":"Auftragsübersicht"},wk:"Woche",nd:"Keine Daten gefunden.",h:"Uhr",rq1:"Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",rq2:"Auftragsdaten werden geladen",rq1f:"Die Auftragsdaten von MFR konnten nicht oder nicht schnell genug abgerufen werde.\nMöchten Sie mit den bestehenden Daten trotzdem weitermachen?",note1:"Im Bruttobetrag sind {0} Lohnkosten enthalten (netto {1}). Die darin enthaltene Umsatzsteuer beträgt {2}.",note2:"Bitte beachten Sie, nach §14 Abs. 1 Umsatzsteuergesetz ist diese Rechnung ein Zahlungsbeleg oder eine andere beweiskräftige Unterlage für 2 Jahre nach Ablauf des Kalenderjahres der Ausstellung dieser Rechnung aufzubewahren, soweit nicht aufgrund anderer gesetzlicher Regelungen andere ggf.längere Aufbewahrungsfristen gelten.",note3:"Privathaushalten erstattet das Finanzamt bis zu {0} des Arbeitslohns mit der nächsten Steuererklärung.",note4:"Für bereits erbrachte Arbeiten, Dienstleistungen, Materiallieferungen und getätigte Bestellvorgänge zum oben genannten Bauvorhaben, die sich aus dem mit Ihnen geschlossenen Vertrag ergeben, stellen wir Ihnen vertragsgemäß unsere Akontozahlung in Rechnung. Eine Endabrechnung erhalten Sie als Schlussrechnung nach Abschluss des gesamten Bauvorhabens. Das Ausführungsdatum entnehmen Sie bitte dem Schlusstext dieser Rechnung. Wir danken Ihnen herzlich für das entgegengebrachte Vertrauen und bitten Sie um kurzfristigen Ausgleich der Akontorechnung.",note13b:"Gem. §13b Umsatzsteuergesetz unterliegen Sie der Steuerschuldnerschaft des Leistungsempfängers zur Umsatzsteuer aus dieser Rechnung mit einem Steuersatz von 19%.",crI:"Rechnung erstellen",crII:"Abschlagsrechnung erstellen",dII:"Für eine Abschlagsrechnung darf nur ein Auftrag gewählt werden.",dnS:"Für eine Rechnung muss mindestens ein Auftrag gewählt werden.",inv:"Rechnung",invs:"Rechnungen",req:"Auftrag",provP:"Leistungszeitraum",provD:"Leistungsdatum",cP:"Position ändern",iRb:"Zeile darunter einfügen",dR:"Zeile löschen",sV:"USt festlegen",cD:"Löschen?",mR:"Zeile verschieben",svcPart:"Service-Anteil",vat:"Umsatzsteuer",combP:"Positionen zusammenfassen",toSetP:"Auf Setpreis umstellen (Positionen ohne Preis)",toSetPc:"Der Set-Preis wird auf die Summe seiner Positionen gesetzt und die Positionen selbst verlieren ihren Preis. Das ist nicht rückgängig zu machen (der Betrag kann danach nur noch manuell geändert werden). Fortfahren?",toSetMc:"Jeder Leistungsauftrag wird zu einer Set-Position mit der Summe als Preis zusammengefasst. Das ist nicht rückgängig zu machen (die Set-Preise können danach nur noch manuell geändert werden). Fortfahren?",iSum:"Zwischensumme",dtRel:"Freigegeben am: ",dtCr:"Erstellt am: ",rqV:"USt des Auftrags?",cthd:"wirklich aus-/einblenden ?",cst:{style:"currency",currency:"EUR"},sts:{IsWorkDone:"Arbeiten erledigt",Closed:"Auftrag geschlossen",SubcontractorPendingConfirmation:"Warten auf Bestätigung (Unterauftrag)",Scheduled:"Geplant",OfferIsRejected:"Angebot abgelehnt",OfferIsSend:"Offen (Angebot versandt)",CollaborationWaitingConfirmation:"Warten auf Bestätigung (Zusammenarbeit)",Released:"Freigegeben",OfferIsConfirmed:"Bestätigt",InProgress:"In Bearbeitung",ReadyForScheduling:"Zur Planung",Created:"Erstellt",Rejected:"Abgebrochen",Invoiced:"Rechnung gestellt","-":"-"},invHR:["Pos.","Menge","Artikelbezeichnung","VK","Summe"],frm:{invoiceaddress:"Adresse",loc:"Leistungsort / Lieferadresse",invoiceemail:"Email"}},$rcol={req:new fields_definition("Auftrag","Aufträge",[{name:"tags",label:"",type:"string",dfnc:function(e,t){""!==(e||"")&&($(this).aC("tags"),e.split(",").forEach((e=>{""!==e&&$(this).append($$.sc("tag "+e.replace(" ","_").replace("/","_").toLowerCase(),e))})))}},{name:"DateOfCreation",label:"Datum",type:"date",title:function(e){$(this).attr("title",$rct.dtCr+fdt(e.DateOfCreation).ne("-")+" \n"+$rct.dtRel+fdt(e.DateReleased).ne("-"))}},{name:"CustomerName",label:"Kunde (Firma)",type:"string"},{name:"Name",label:"Auftragsname",type:"string"},{name:"ExternalId",label:"Auftragsnummer",type:"string"},{name:"ParentExtenalId",label:"PAuftrag",type:"string"},{name:"InvoiceId",label:"RNummer",type:"string",dfnc:function(e,t){$(this).rwText(e," ").find("span").each((function(){$(this).aC("cla").click({id:$(this).text()},$inv.jdbn)}))}},{name:"State",label:"Status",type:"string"},{name:"WorkDoneAt",label:"Erledigt am",type:"date"},{name:"Description",label:"Beschreibung",type:"html"}]),itm:new fields_definition("Auftragsposition","Auftragspositionen",[{name:"NameOrNumber",label:"Bezeichnung",type:"string"},{name:"Type",label:"Typ",type:"select",required:!0,value:"Text",url:[{value:"Text",label:"Text"},{value:"Equipment",label:"Ausrüstung"},{value:"Material",label:"Material"},{value:"Service",label:"Arbeitsleistung"}],change:function(e){$req.quantChange.call(this,e)}},{name:"quantityhours",label:"Anzahl / Menge",type:"number",precision:"0.01",value:1,change:function(e){$inv.quantChange.call(this,e)}},{name:"UnitString",label:"Einheit",type:"select",url:["LFDM","Stck","Std.","QM","AW","Pauschal"],change:function(e){$inv.quantChange.call(this,e)}},{name:"net",label:"EinzelPreis netto",type:"number",precision:"0.01",value:0,change:function(e){$inv.quantChange.call(this,e)}},{name:"net_val",label:"GesamtPreis netto",type:"number",precision:"0.01",value:0},{name:"vat_val",label:"GesamtPreis USt",type:"number",precision:"0.01",value:0},{name:"svcnet_val",label:"Arbeitslohn netto",type:"number",precision:"0.01",value:0},{name:"svcvat_val",label:"Arbeitslohn USt",type:"number",precision:"0.01",value:0},{name:"net_pos",label:"Netto",type:"string"},{name:"bo_pos",label:"Brutto",type:"string"},{name:"vat",label:"USt",type:"string",value:"19,0%",change:function(e){$inv.quantChange.call(this,e)}},{name:"Note",label:"Details",type:"html",tinymce:!0}])},$ict={mdl:"Rechnungen",iov:{all:"Rechnungen (alle)","":"Rechnungen (nur fertige)","#d":"Rechnungen (nur Entwürfe)","#u":"Rechnungen (nur unbezahlt)","#r":"Rechnungen (nur angemahnt)","#a":"Rechnungen (nur Akonto)","#c":"Rechnungen (nur Storno)","#ru":"Rechnungen (nur angemahnt + unbez.)"},uba:", gesamter Zeitraum)",req:"Auftrag",inv:"Rechnung",rem:"Mahnung",in:"Rechnungsnummer",cc:"Kunde",wk:"Woche",nd:"Keine Daten gefunden.",dl:"Herunterladen",ed:"Bearbeiten",ced:"Bearbeitung fortsetzen",sItm:"Einzelheiten anzeigen",sPay:"Zahlungen anzeigen",cdI:"Entwurf der Rechnung löschen?",rel:"Neu Laden",relm:"Bitte laden Sie Liste manuell neu, um die Änderungen zu sehen.",dsp:"Rechnung anzeigen",storno:"Storno-Rechnung erstellen",credit:"Gutschrift erstellen",remd:"Mahnung erstellen",remdt:"Mahnung erstellen zur Rechnung {0}",remlst:"Mahnungen anzeigen",remdsp:"Mahnung anzeigen",remres:"Mahnung erneut senden",remresc:"Mahnung {0} wirklich erneut senden?",remresr:"Mahnung {0} wurde erfolgreich versandt.",setpyd:"Bezahlt markieren",cpyd:"Rechnung wirklich als bezahlt markieren?",setupd:"Bezahlt-Markierung aufheben",cupd:"Bezahlt-Markierung wirklich aufheben?",ivE:"Die Email-Adresse ist vermutlich nicht gültig.",ivEc:"\nMöchten Sie fortfahren?",pna:"Diese Seite ist in der Vorschau nicht verfügbar",tpe:"Die Anzahl von {0} Seiten wird aktuell nicht unterstützt",eis:"Der Rechnungsentwurf konnte nicht gespeichert werden.",iss:"Zwischenstand speichern.",p13b:"USt -> §13b",setm:"Set-Preisanzeige",setmo:{setprice:"Set mit Preis – Positionen ohne Preis",setonly:"Nur Set mit Preis – Positionen ausgeblendet"},ctp:"Ansprechpartner festlegen",mfr:"Von MFR neu abrufen",rq1:"Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",rq2:"Auftragsdaten werden geladen",iq1:"Rechnungsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",iq2:"Rechnungsdaten werden geladen",sis:"Rechnung als versandt markieren",srs:"Mahnung als versandt markieren",sisc:"Rechnung wirklich als versandt markieren?",srsc:"Mahnung wirklich als versandt markieren?",iSt:{dft:"Entwurf",uns:"nicht versandt",pyd:"bezahlt",cc:"storniert",op:"offen",due:"fällig",ovd:"überfällig",rem:"angemahnt"},rSt:["","Überfällig","2. Mahnung","3. Stufe"],pSt:{a:"Vollst.",p:"Teilz."},ivT:{i:"AbschlagsR.",f:"SchlussR",r:"Rechnung",c:"StornoR."},rovlh:"Übersicht der bisherigen Mahnungen",rovl:["Betreff","Betrag","Betrag gezahlt","fertiggestellt am"],remHR:["Rechnung","vom","Rechnungsbetrag","bereits bezahlt","noch offen"],translatePaymentTerm:e=>(e||"").replace("wd"," Werktagen").replace("d"," Tagen").replace("wk"," Wochen")||"10 Tagen",payi:{account:"Konto",name:"Zahler",text:"Verw.Zweck",InvoiceID:"Rechnung",amount:"Betrag",date:"Datum",manual:"Typ"}},$invcol={datev:new fields_definition("Rechnung","Rechnungen",[{name:"Umsatz (ohne Soll/Haben-Kz)",label:"Umsatz (ohne Soll/Haben-Kz)",type:"string"},{name:"vf",label:"vf",type:"string"},{name:"Soll/Haben-Kennzeichen",label:"Soll/Haben-Kennzeichen",type:"string"},{name:"Konto",label:"Konto",type:"string"},{name:"Gegenkonto",label:"Gegenkonto",type:"string"},{name:"BU-Schlüssel",label:"BU-Schlüssel",type:"string"},{name:"Belegdatum",label:"Belegdatum",type:"string"},{name:"Belegfeld 1",label:"Belegfeld 1",type:"string"},{name:"Belegfeld 2",label:"Belegfeld 2",type:"string"},{name:"Buchungstext",label:"Buchungstext",type:"string"}]),inv:new fields_definition("Rechnung","Rechnungen",[{name:"invstatus",label:"Status",type:"select",url:$ict.iSt},{name:"balance",label:"Umsatz",type:"string",dtype:"currency"},{name:"CustomerName",label:"Kunde",type:"string"},{name:"InvoiceId",label:"RNummer",type:"string"},{name:"InvoiceType",label:"Typ",type:"select",url:$ict.ivT},{name:"request",label:"Auftrag",type:"string",dtype:"num"},{name:"vat",label:"MwSt",type:"string",dtype:"num"},{name:"deb_cred",label:"Soll/Haben",type:"string"},{name:"customer",label:"Konto",type:"string",dtype:"num"},{name:"contra_account",label:"Gegenkonto",type:"string",dtype:"num"},{name:"Belegdatum",label:"Belegdatum",type:"date"},{name:"reminderstatus",label:"MahnStatus",type:"select",url:$ict.rSt},{name:"reminder",label:"# Mahnungen",type:"integer"},{name:"Buchungstext",label:"Buchungstext",type:"string"},{name:"Payment",label:"Zahlung",type:"string"}]),rem:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"amount",label:"Rechnungsbetrag",type:"number",precision:"0.01",value:1},{name:"amount_payed",label:"bereits bezahlt",type:"number",precision:"0.01",value:1}]),rem2:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"DocumentName",label:"Name",type:"string"},{name:"subject",label:"Betreff",type:"string"},{name:"DateSent",label:"Versanddatum",type:"date"},{name:"status",label:"Status",type:"string"},{name:"amount_open",label:"offener Betrag",type:"number",precision:"0.01"},{name:"InvoiceId",label:"RNummer",type:"string"}]),rid:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"type",label:"Typ",type:"select",url:[["f","einfache Zahlungserinnerung"],["m","Mahnung"],["l","letzte Mahnung"]],required:!0},{name:"level",label:"Stufe",type:"select",url:[["1","Stufe 1"],["2","Stufe 2"],["3","Stufe 3"],["4","Stufe 4"],["5","Stufe 5"],["6","Stufe 6"]],required:!0}]),ctp:new fields_definition("Ansprechpartner","Ansprechpartner",[{name:"name",label:"Name",type:"string"},{name:"email",label:"Email",type:"string"}])},gi=(e,t)=>$$.sc("glyphicon glyphicon-"+e).aC(t),$inv={},$req={init2:function(e,t){e=e||"inv",t=t||{},$ocms.getScript([],(function(){$req.init3(e,t)}))},init3:async function(e,t){$fis.cf(!0);let n=$fis.lf(!0);$("#topbar").ocmsmenu([]),$("#activemodule").text($rct.mdl),await $fis.prepAuth("fds_req,fds_inv,fds_reminder");let i=[(async()=>{!0===$fis.isAuth("fds_req",1)&&($req.prepLst(""),n.aC("fix"))})(),new Promise(((e,t)=>{n.find("div.oreq2").aC("selected"),$req.renderreq(fdt(new Date,"yy-MM-dd"),"r"),e()}))];await Promise.all(i)},prepLst:function(e){let t=new Date,n=$fis.lf(!0).ldng(1),i=new Date("2021-01-01");$fis.frm_list().IN((function(){}));$$.dc("mth oreq",n).text($rct.or).click((function(e){let t=$(this);e.stopPropagation(),t.siblings().rC("selected"),!0===t.is(".selected")&&(t.tC("selected"),$req.renderreq(fdt(new Date,"yy-MM-dd"),"o")),t.aC("selected")})),$$.dc("mth oreq2",n).text($rct.orr).click((function(e){let t=$(this);e.stopPropagation(),t.siblings().rC("selected"),!0===t.is(".selected")&&(t.tC("selected"),$req.renderreq(fdt(new Date,"yy-MM-dd"),"r")),t.aC("selected")})),$$.i({placeholder:$rct.rn}).appendTo($$.dc("mth oreqn",n)).enterKey((function(e){let t=$(this),n=t.val()||"";e.stopPropagation(),t.parent().siblings().rC("selected"),n.length>3&&(t.parent().aC("selected"),$req.renderreq("n:"+n,"s"),t.val(""))}));n.append("
");let r=$$.dc("mthl",n),a=t.getFullYear(),d=t.getMonth()+1;for(let t=i.getFullYear();t<=a;t++){let n=$$.dc("yr").prependTo(r).text($rct.iov[e]+" - "+t.toString()).toggleClass("selected",t===a);n.click({yr:t},(function(e){e.stopPropagation(),n.siblings().rC("selected"),n.aC("selected")}));let l=$$.dc("mfrm",n);for(let n=0;n<(t!==a?12:d);n++){i=new Date(t,n,1);let r=$$.dc("mth").prependTo(l).text($rct.iov[e]+" - "+fdt(i,"MMM yyyy"));r.click({yr:t,mt:n},(function(e){if(e.stopPropagation(),r.siblings().rC("selected"),!0===r.is(".selected")){r.tC("selected");let t=fdt(new Date(e.data.yr,e.data.mt,1),"yy-MM-dd");$req.renderreq(t,"m")}r.aC("selected")}));let a=getMonday(i),d=new Date(i);d.setMonth(d.getMonth()+1),d.setDate(0),d=getMonday(d);let s=$$.dc("wfrm",r);for(;a<=d;){let e=$$.dc("wk",s).text(($rct.wk||"W")+" "+fdt(a,"dd.MM.yy"));e.click({rd:new Date(a)},(function(t){t.stopPropagation();let n=fdt(t.data.rd,"yy-MM-dd");$req.renderreq(n,"w"),r.siblings().rC("selected").find(".wk").rC("selected"),r.aC("selected").find(".wk").rC("selected"),e.aC("selected")}));let t=$$.dc("wkdl",e).append($$.sc("ico glyphicon glyphicon-compressed"));!0===$fis.isAuth("fds_inv",2)&&t.click({rd:new Date(a)},(function(e){e.stopPropagation();let t=fdt(e.data.rd,"yy-MM-dd");$req.downloadzip.call(t,"w")})),a.setDate(a.getDate()+7)}}}n.ldng(0)},renderreq:function(e,t){let n=$fis.frm_list().ldng(1),i=$$.dc("invfrm",n).aC("md"+t),r=$fis.lf();$ocms.postXT({url:$ocms.url("req/reql"),data:{mode:t,tgt:e},success:n=>{r.rC("fix").aC("hd"),$$.dc("ovhd",i).append($$.s(n.admin.title)).appendIf($$.sc("note",n.admin.note),""!==ne(n.admin.note,""));let a=$$.tblset({},i),d=$rcol.req,l=$$.tr(a.hd);$$.th(l);$.each(d.fields||[],((e,t)=>{$$.th(l).text(t.label),"vat"===t.name&&$$.th(l)}));let s=0,c=!1;$.each(n.requests||[],((n,l)=>{s>0&&s!==l.ParentServiceRequestId&&(c=!c);let o=$$.tr(a.bdy).tC("alt",c);s=l.ParentServiceRequestId,o.click((function(){r.rC("fix").aC("hd"),o.tC("selected").siblings().rC("selected").find("td.av").rC("av"),o.find("td.av").rC("av")})),o.tC("child",l.isChild);let u=$$.td(o,{class:"raux"});!0===bool(l.open,!1)&&$$.dc("ihd ilbtn",u).append(gi("eye-close","ico")).click({id:l.Id},$req.tHd),$$.dc("iitm ilbtn",u).append(gi("list","ico")).click({id:l.Id},$req.showitm),!0===$fis.isAuth("fds_inv",2)&&$$.dc("invc ilbtn",u).append(gi("edit","ico")).click({id:l.Id},$inv.cInv),$.each(d.fields||[],((n,r)=>{let a=$$.td(o).aC(r.dtype),d=l[r.name];if("function"==typeof r.dfnc)r.dfnc.call(a,d,l);else switch(r.type||""){case"date":a.text(fdt(l[r.name],"dd.MM.yy"));break;case"datetime":a.text(fdt(l[r.name]));break;case"html":a.append($$.dc("ctw").html(d)),a.append($$.dc("ttip").html(d));break;default:a.text(l[r.name])}switch(r.name||""){case"State":a.text($rct.sts[d||"-"]);break;case"Name":a.aC(r.name.toLowerCase());break;case"vat":$$.sel().appendTo($$.td(o,{class:"vsel"})).click((function(e){e.stopPropagation()})).append([$$.opt("19,0 %","19,0 %"),$$.opt("16,0 %","16,0 %"),$$.opt("0,0 %","0,0 %")]).val(l[r.name]).change().change({frm:i,tgt:e,mode:t,id:l.Id,td:a},$req.setvat),a.tC("hl","19"!==l[r.name].substr(0,2)).click((function(e){e.stopPropagation(),$(this).tC("av")}));break;case"balance":a.aC("sh_"+(l.SollHaben||"").toLowerCase());break;case"InvoiceId":a.aC("keep")}switch(typeof r.title){case"function":r.title.call(a,l);break;case"string":a.attr("title",cs.title)}}))}))},complete:()=>{n.ldng(0)}})},tHd:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&confirm($rct.cthd)&&$ocms.postXT({url:$ocms.url("req/rthd"),data:{id:e.data.id},success:n=>{n.id===e.data.id&&!1===bool(n.visible,!0)?(!1===t.is(".tbhd")&&setTimeout((()=>{t.filter(".tbhd").remove()}),15e3),t.aC("tbhd")):n.id===e.data.id&&t.rC("tbhd")}})},showitm:function(e){let t=$(this).closest("tr");if(e.stopPropagation(),!1===t.is(".selected"))return;let n=$$.dc("rfrm").ldng(1);$ocms.postXT({url:$ocms.url("req/pget"),data:{id:e.data.id},success:t=>{$ocms.postXT({url:$ocms.url("req/get"),data:{id:e.data.id,mode:"ful"},success:e=>{if((e.requests||[]).length<1)n.text($rct.nd);else{let t=$$.dc("srq",n),i=$$.tblset({class:"if"},t);$.each(e.requests||[],(function(e,t){e>0&&$$.tr(i.bdy).aC("sep").append($$.td({colspan:6}));let n=$$.tr(i.bdy).aC("title"),r=$rcol.itm.lbl(),a=$inv.worknotes(t);$$.td(n,{colspan:6}).append([$$.s($rcol.req.label_sng),$$.sc("eid",t.ExternalId),$$.sc("nme",fdt(t.WorkDoneAt,"dd.MM.yy")+": "+a.ne(t.Name))]);$$.tr(i.bdy).aC("shd").append([$$.td(),$$.td(r.NameOrNumber),$$.td(r.Type),$$.td(r.net_pos),$$.td(r.bo_pos),$$.td(r.vat)]);$.each(t.items||[],((e,t)=>{t.ServiceRequestId;let n=$$.tr(i.bdy,{id:"itm"+t.Id}).aC(t.Type);$$.td(n).aC("ico"),$$.td(n).text(t.NameOrNumber),$$.td(n).text(t.Type),$$.td(n).aC("currency").text(t.net_pos),$$.td(n).aC("currency").text(t.bo_pos),$$.td(n).aC("num").text(t.vat)}))}))}},error:()=>{n.text($t.t12)},complete:()=>{n.ldng(0)}})},error:()=>{n.text($t.t12),n.ldng(0)}}),$ocms.dlg(n,{width:1e3})}},$$req={init2:$req.init2,auth:{}};export default $$req;$inv.cInv=function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&!1!==$fis.isAuth("fds_inv",2)&&$inv.cInv2({id:e.data.id})},$inv.rMn=e=>{let t=[{lbl:$ict.req,itm:[]}];return!0===bool(e,!1)&&!0===$fis.isAuth("fds_inv",2)&&Array.prototype.push.apply(t[0].itm,[{lbl:$rct.crI,fnc:$inv.ccInv,data:{typ:"r"}},{lbl:$rct.crII,fnc:$inv.ccInv,data:{typ:"i"}}]),t.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(t)},$inv.iMnr=e=>{let t=booln(e.isFinal,!0),n=e.Id,i=booln(e.fds,!1),r=[{glyph:"glyphicon-menu-left",fnc:()=>{$fis.frm_edit().remove()}},{lbl:$ict.inv,itm:[]},{lbl:$ict.rem,itm:[]}];return!1===t&&!0===$fis.isAuth("fds_inv",2)?r[1].itm.push({lbl:$ict.ced,fnc:$inv.clCntInv}):!0===$fis.isAuth("fds_inv",1)&&r[1].itm.push({lbl:$ict.dsp,fnc:()=>$inv.disp(n,"inv")}),!0===i&&!0===t&&!0===$fis.isAuth("fds_inv",2)&&(r[1].itm.push({lbl:$ict.storno,fnc:()=>$inv.storno(n,i)}),r[1].itm.push({lbl:$ict.credit,fnc:()=>$inv.credit(n,i)})),!0===t&&!0===$fis.isAuth("fds_reminder",2)&&(r[2].itm.push({lbl:$ict.remd,fnc:()=>$inv.ccRem(n,e.InvoiceId)}),r[2].itm.push({lbl:$ict.remlst,fnc:()=>$inv.dspRem(n)})),!0===t&&!0===$fis.isAuth("fds_reminder",2)&&!1===booln(e.IsSent,!1)&&r[2].itm.push({lbl:$ict.srs,fnc:()=>$inv.srs(n)}),r.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(r)},$inv.iMn=e=>{let t=booln(e.isFinal,!0),n=e.Id,i=booln(e.fds,!1),r=[{glyph:"glyphicon-menu-left",fnc:()=>{$fis.frm_edit().remove()}},{lbl:$ict.inv,itm:[]},{lbl:$ict.rem,itm:[]}];return!1===t&&!0===$fis.isAuth("fds_inv",2)?r[1].itm.push({lbl:$ict.ced,fnc:()=>{$inv.cntInv({id:n})}}):!0===$fis.isAuth("fds_inv",1)&&r[1].itm.push({lbl:$ict.dsp,fnc:()=>$inv.disp(n,"inv")}),!0===$fis.isAuth("fds_inv",2)&&(r[1].itm.push({lbl:$ict.storno,fnc:()=>$inv.storno(n,i)}),r[1].itm.push({lbl:$ict.credit,fnc:()=>$inv.credit(n,i)})),!0===t&&!1===booln(e.IsPayed,!1)?(!0===$fis.isAuth("fds_reminder",2)&&r[2].itm.push({lbl:$ict.remd,fnc:()=>$inv.ccRem(n,e.InvoiceId)}),!0===$fis.isAuth("fds_inv",2)&&r[1].itm.push({lbl:$ict.setpyd,fnc:()=>$inv.setPyd(n)})):!0===t&&!0===booln(e.IsPayed,!1)&&"m"===(e.PaymentStatus||"")&&!0===$fis.isAuth("fds_inv",2)&&r[1].itm.push({lbl:$ict.setupd,fnc:()=>$inv.setUpd(n)}),!0===$fis.isAuth("fds_reminder",2)&&r[2].itm.push({lbl:$ict.remlst,fnc:()=>$inv.dspRem(n)}),!0===t&&!0===$fis.isAuth("fds_inv",2)&&!1===booln(e.IsSent,!1)&&r[1].itm.push({lbl:$ict.sis,fnc:()=>$inv.sis(n)}),!1===i&&r[1].itm.push({lbl:$ict.mfr,fnc:()=>$inv.mfrrel(n)}),$("#topbar").ocmsmenu(r)},$inv.emOpt=e=>"iss,p13b,ctp"+(""===((e||{}).setmode||"")?",setm":""),$inv.eM=(e,t,n)=>{let i=[];return!0!==booln(e,!1)&&!0!==booln(t,!1)||i.push({glyph:"glyphicon-menu-left",fnc:()=>{$fis.lf(!0),$fis.frm_edit().remove()}}),!0===(n||"").split(",").includes("iss")&&i.push({lbl:$ict.iss,fnc:$inv.ssave}),!0===(n||"").split(",").includes("ctp")&&i.push({lbl:$ict.ctp,fnc:$inv.sctp}),!0===(n||"").split(",").includes("p13b")&&i.push({lbl:$ict.p13b,fnc:$inv.sp13b}),!0===(n||"").split(",").includes("setm")&&i.push({lbl:$ict.setm,fnc:$inv.ssetmode}),!0===(n||"").split(",").includes("iss")&&(i.push({lbl:"Änderungshistorie",fnc:()=>$inv.d.history()}),i.push({lbl:"Änderungen verwerfen",fnc:()=>$inv.d.discard()})),!0===booln(e,!1)&&i.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(i)},$inv.d={tbl:()=>$("div.invoice_layout table.invi"),layout:()=>$("div.invoice_layout"),token:function(){return $inv.d.tbl().data("dtoken")||""},hashes:function(){let e=$inv.d.tbl().data("bai")||[],t={};return $.each(e,((e,n)=>{t[(n.Id||"").toString()]=JSON.stringify(n)})),t},seed:function(e){let t=$inv.d.layout();t.aC("freeze");let n=$ocms.postXT({url:$ocms.url("inv/dopen"),data:{payload:JSON.stringify(e)},success:e=>{$inv.d.tbl().data("dtoken",e.token).data("dver",e.version).data("dhashes",$inv.d.hashes()).data("dorder",$inv.d.order()),$fis.draft.bind(e.token,{onReady:()=>$inv.d.refresh(),onExpiring:e=>$inv.d.warnExpiry(e),onClosed:e=>$inv.d.closed(e)}),$inv.d.refresh()},error:()=>{t.rC("freeze")},complete:()=>{$inv.d.tbl().removeData("dseeding").removeData("dseedpromise")}});return $inv.d.tbl().data("dseedpromise",n),n},refresh:function(e){let t=$inv.d.token();""!==t&&$ocms.postXT({url:$ocms.url("inv/dstate"),data:{token:t},success:t=>{$inv.d.applyState(t),"function"==typeof e&&e(t)},error:e=>{e&&410===e.status&&$inv.d.closed("expired")},complete:()=>{$inv.d.layout().rC("freeze")}})},applyState:function(e){let t=$inv.d.tbl();if(t.length<1)return;let n=t.data("dver");"number"==typeof n&&"number"==typeof e.version&&e.version$$.dc("dnote").aC(e.style||"InvoiceNotes").text(e.text)))},applyItems:function(e,t){let n=e=>void 0===e?null:e;(t||[]).forEach((t=>{if(!t)return;let i=(t.Id||"").toString();if(""===i)return;let r=e.children("tbody").filter(((e,t)=>(($(t).data()||{}).Id||"").toString()===i)).first();if(r.length<1)return;let a=t.itm||[],d={},l=r.find("tr.title").first(),s=l.length?l:null;a.forEach((e=>{let t=(e.id||"").toString();if(""===t)return;d[t]=!0;let i=r.find("#itm"+t).first(),a=i.length<1;a&&(i=$$.tr(r,{id:"itm"+t,class:"itm"}));let l=i.data()||{},c=a||(l.Type||"")!==(e.typ||"")||l.net!==n(e.v)||l.net_val!==n(e.vt)||l.vat_val!==n(e.vv)||l.svcnet_val!==n(e.vs)||l.svcvat_val!==n(e.vsv)||(l.position||"")!==(null!=e.p?e.p:"");$.extend(l,{Id:t,Type:e.typ,net:n(e.v),net_val:n(e.vt),vat_val:n(e.vv),svcnet_val:n(e.vs),svcvat_val:n(e.vsv),vat:e.vat,position:null!=e.p?e.p:"",SetItmId:null!=e.SetItmId?e.SetItmId:null}),a&&$.extend(l,{htmltext:e.t,quantity:e.q}),i.data(l),s?i.prev()[0]!==s[0]&&i.insertAfter(s):r.children().first()[0]!==i[0]&&r.prepend(i),s=i,c&&$inv.rrw.call(i)})),r.find("tr.itm").each(((e,t)=>{let n=(($(t).data()||{}).Id||"").toString();""===n||d[n]||$(t).remove()}))}))},applySetDisplay:function(e,t){e.find("tr.itm").each(((e,n)=>{let i=$(n),r=((i.data()||{}).Id||"").toString();if(""===r||!Object.prototype.hasOwnProperty.call(t,r))return;let a=t[r]||{};i.tC("sethdr",bool(a.h,!1)),!1===bool(a.p,!0)&&i.find("td.currency").text("")}))},sync:function(e){let t=$inv.d.token();if(""===t){let t=$inv.d.tbl().data("dseedpromise");return t?$.when(t).then((()=>$inv.d.sync(e))):$.when()}return $inv.d.layout().aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dpatch"),data:{token:t,delta:JSON.stringify(e)},success:()=>{$inv.d.refresh()},error:e=>{$inv.d.layout().rC("freeze"),e&&410===e.status&&$inv.d.closed("expired")}})},order:function(){return($inv.d.tbl().data("bai")||[]).map((e=>(e.Id||"").toString()))},syncChanged:function(e){let t=e.data("bai")||[],n=e.data("dhashes")||{},i={},r=[],a=[],d=[];$.each(t,((e,t)=>{let a=(t.Id||"").toString(),d=JSON.stringify(t);i[a]=d,n[a]!==d&&r.push(t)})),$.each(n,(e=>{void 0===i[e]&&a.push(e)}));let l=$inv.d.order(),s=e.data("dorder")||[];return e.data("dhashes",i).data("dorder",l),r.forEach((e=>d.push($inv.d.sync({Target:"block.replace",Ref:(e.Id||"").toString(),Value:e})))),a.forEach((e=>d.push($inv.d.sync({Target:"block.remove",Ref:e})))),s.length===l.length&&s.slice().sort().join(",")===l.slice().sort().join(",")&&s.join(",")!==l.join(",")&&d.push($inv.d.sync({Target:"block.order",Value:l})),$.when.apply($,d).promise()},syncField:function(e,t){let n={invoicetitle:"title",invoiceaddress:"address",invoiceemail:"email",loc:"provisionlocation",provisionlocation:"provisionlocation",provisionperiod:"provisionperiod"}[e];n&&$inv.d.sync({Target:n,Value:t})},footer:function(e,t,n){let i=e.children("tfoot").empty();e.nextAll(".fnote").remove();let r=bool(n.p13b,!1),a=(e,t,n)=>$$.tdc("currency",$$.tr(i,{class:n||"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text(e)]),fnum(t,$rct.cst)),d=t=>$$.dc("fnote").insertAfter(e).rwText(t);a("Netto",t.total_net||0),!1===r&&$.each(t.vat||{},((e,t)=>a($rct.vat+" "+e+"%",t,"tvat"))),a("Summe",t.total_gross||0);let l=n.type||"";"i"===l?(d($rct.note2),d($rct.note4)):"c"===l?d($rct.note2):(d(string($rct.note3,[fnum(((t.service_net||0)+(t.service_vat||0))*(n.tax_servicerefund||0),$rct.cst)])).aC("ntax"),d($rct.note2),d(string($rct.note1,[fnum((t.service_net||0)+(t.service_vat||0),$rct.cst),fnum(t.service_net||0,$rct.cst),fnum(t.service_vat||0,$rct.cst)]))),!0===r&&d($rct.note13b)},validation:function(e){let t=$("div.invoice_layout");if(t.length<1)return;let n=t.children(".dvalidation");n.length<1&&(n=$$.dc("dvalidation"),t.prepend(n)),n.empty().tC("hidden",(e||[]).length<1),$.each(e||[],((e,t)=>$$.dc("dvmsg",n).aC(t.severity).text(t.message)))},preview:function(){let e=$inv.d.token();if(""===e)return;let t=$inv.d.layout(),n=($inv.d.tbl().data("new")||{}).invoiceemail||"";!1===$fis.ValidateEmail(n)&&!1===bool(confirm($ict.ivE+$ict.ivEc),!1)||(t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dpreview"),data:{token:e},success:n=>{t.rC("freeze");let i=$$.dc("imagecollection pdfpreview"),r=Math.round(.88*vh()),a=n.total;a>10&&$$.dc("note warn",i).text($ict.tpe),$.each(n.img||[],((e,t)=>{$$.dc("pdfp",i).append($$.img(t).css("max-height",(r-rpx(6)).toString()+"px"))}));for(let e=(n.img||[]).length+1;e<=a;e++)$$.dc("pdfp ph",i).append($$.dc("note",$ict.pna));$ocms.dlg(i,{size:[r,Math.round(.88*vw())],zindex:50,form:!1,button:$rct.crI,confirm:function(n){let i=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dsave"),data:{token:e},success:e=>{$ocms.postXT({url:$ocms.url("req/sconf"),data:{id:e.invid},success:t=>{i.trigger("modal_close"),!0===t.hasFile&&window.open($ocms.url("req/idoc")+"?id="+e.invid,"_blank"),$inv.d.close(),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),i.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},error:()=>{t.rC("freeze"),alert($ict.eis)}})},cancel:function(e){confirm($ict.cdI)&&($inv.d.close(),$inv.rReload())}})},error:()=>{t.rC("freeze"),alert($ict.eis)}}))},save:function(){let e=$inv.d.token();if(""===e)return;let t=$inv.d.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dsave"),data:{token:e},success:e=>{$inv.d.tbl().data("invid",e.invid)},error:()=>{alert($ict.eis)},complete:()=>{t.rC("freeze")}})},history:function(){let e=$inv.d.token();""!==e&&$ocms.postXT({url:$ocms.url("inv/dhistory"),data:{token:e},success:e=>{let t=$$.dc("dhist");if((e.history||[]).length<1)$$.dc("note",t).text("Noch keine Änderungen erfasst.");else{let n=$$.tblset({class:"invtbl fullwidth"},t);$$.tr(n.hd).append([$$.th().text("Zeit"),$$.th().text("Feld"),$$.th().text("Alt"),$$.th().text("Neu")]),$.each(e.history,((e,t)=>$$.tr(n.bdy).append([$$.tdc("keep",fdt(t.timestamp)),$$.td().text(t.target),$$.td().text(t.oldValue),$$.td().text(t.newValue)])))}$ocms.dlg(t,{width:800,form:!1})}})},discard:function(){let e=$inv.d.tbl().data("invid")||"";""!==e?!1!==confirm("Alle Änderungen verwerfen und den zuletzt gespeicherten Stand neu laden?")&&($inv.d.close(),$inv.cntInv({id:e})):alert("Es wurde noch kein Zwischenstand gespeichert, der wiederhergestellt werden könnte.")},warnExpiry:function(e){let t=Math.max(1,Math.round((e||0)/60));$fis.notifications.push({severity:"info",title:"Entwurf läuft ab",message:"Der Rechnungsentwurf läuft in etwa "+t+" Minute(n) ab. Bitte zwischenspeichern, sonst gehen die Änderungen verloren."})},closed:function(e){let t=$inv.d.token();$inv.d.tbl().removeData("dtoken"),""!==t&&$fis.draft.release(t),$fis.frm_edit().remove(),$fis.lf(!0),$fis.notifications.push({severity:"error",title:"Entwurf geschlossen",message:"expired"===e?"Der Rechnungsentwurf ist wegen Inaktivität abgelaufen. Nicht gespeicherte Änderungen sind verloren.":"Der Rechnungsentwurf wurde geschlossen."});try{$inv.rReload()}catch(e){}},close:function(){let e=$inv.d.token();""!==e&&($ocms.postXT({url:$ocms.url("inv/dclose"),data:{token:e}}),$fis.draft.release(e)),$inv.d.tbl().removeData("dtoken")}},$inv.rd={tbl:()=>$("div.invoice_layout table.invi"),layout:()=>$("div.invoice_layout"),token:function(){return $inv.rd.tbl().data("rdtoken")||""},seed:function(e){let t=$inv.rd.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dopen"),data:{payload:JSON.stringify(e)},success:e=>{$inv.rd.tbl().data("rdtoken",e.token).data("rdver",e.version),$fis.draft.bind(e.token,{onReady:()=>$inv.rd.refresh(),onExpiring:e=>$inv.rd.warnExpiry(e),onClosed:e=>$inv.rd.closed(e)}),$inv.rd.refresh()},error:()=>{t.rC("freeze")}})},refresh:function(e){let t=$inv.rd.token();""!==t&&$ocms.postXT({url:$ocms.url("rem/dstate"),data:{token:t},success:t=>{$inv.rd.applyState(t),"function"==typeof e&&e(t)},error:e=>{e&&410===e.status&&$inv.rd.closed("expired")},complete:()=>{$inv.rd.layout().rC("freeze")}})},applyState:function(e){let t=$inv.rd.tbl();if(t.length<1)return;let n=t.data("rdver");"number"==typeof n&&"number"==typeof e.version&&e.version{let t=$$[0]("p").aC("dnote intro").rwText(e);r.length?t.insertBefore(r):t.appendTo(n)})),((e||{}).closing||[]).forEach((e=>$$[0]("p").aC("dnote closing").rwText(e).appendTo(n)))},sync:function(e){let t=$inv.rd.token();""!==t&&($inv.rd.layout().aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dpatch"),data:{token:t,delta:JSON.stringify(e)},success:()=>{$inv.rd.refresh()},error:e=>{$inv.rd.layout().rC("freeze"),e&&410===e.status&&$inv.rd.closed("expired")}}))},syncField:function(e,t){if(""===$inv.rd.token())return;let n={subject:"subject",invoiceaddress:"address",invoiceemail:"email",text:"text"}[e];n&&$inv.rd.sync({Target:n,Value:t})},syncAmount:function(e,t){""!==$inv.rd.token()&&($inv.rd.sync({Target:"amount",Value:(null!=e?e:0).toString()}),$inv.rd.sync({Target:"amount_payed",Value:(null!=t?t:0).toString()}))},footer:function(e,t){let n=e.children("tfoot").empty(),i=$$.tr(n,{class:"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text("Offener Betrag")]);$$.tdc("currency",i,fnum(t.amount_open||0,$rct.cst))},validation:function(e){let t=$inv.rd.layout();if(t.length<1)return;let n=t.children(".dvalidation");n.length<1&&(n=$$.dc("dvalidation"),t.prepend(n)),n.empty().tC("hidden",(e||[]).length<1),$.each(e||[],((e,t)=>$$.dc("dvmsg",n).aC(t.severity).text(t.message)))},preview:function(){let e=$inv.rd.token();if(""===e)return;let t=$inv.rd.layout(),n=($inv.rd.tbl().data("new")||{}).invoiceemail||"";!1===$fis.ValidateEmail(n)&&!1===bool(confirm($ict.ivE+$ict.ivEc),!1)||(t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dpreview"),data:{token:e},success:n=>{t.rC("freeze");let i=$$.dc("imagecollection pdfpreview"),r=Math.round(.88*vh());$.each(n.img||[],((e,t)=>{$$.dc("pdfp",i).append($$.img(t).css("max-height",(r-rpx(6)).toString()+"px"))})),$ocms.dlg(i,{size:[r,Math.round(.88*vw())],zindex:50,form:!1,button:$ict.remd,confirm:function(n){let i=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dsave"),data:{token:e},success:e=>{$ocms.postXT({url:$ocms.url("rem/conf"),data:{id:e.remid},success:()=>{i.trigger("modal_close"),window.open($ocms.url("rem/idoc")+"?id="+e.remid,"_blank"),$inv.rd.close(),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),i.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},error:()=>{t.rC("freeze"),alert($t.f1)}})},cancel:function(e){confirm($ict.cdI)&&($inv.rd.close(),$inv.rReload())}})},error:()=>{t.rC("freeze"),alert($t.f1)}}))},save:function(){let e=$inv.rd.token();if(""===e)return;let t=$inv.rd.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dsave"),data:{token:e},success:e=>{$inv.rd.tbl().data("remid",e.remid)},error:()=>{alert($t.f1)},complete:()=>{t.rC("freeze")}})},history:function(){let e=$inv.rd.token();""!==e&&$ocms.postXT({url:$ocms.url("rem/dhistory"),data:{token:e},success:e=>{let t=$$.dc("dhist");if((e.history||[]).length<1)$$.dc("note",t).text("Noch keine Änderungen erfasst.");else{let n=$$.tblset({class:"invtbl fullwidth"},t);$$.tr(n.hd).append([$$.th().text("Zeit"),$$.th().text("Feld"),$$.th().text("Alt"),$$.th().text("Neu")]),$.each(e.history,((e,t)=>$$.tr(n.bdy).append([$$.tdc("keep",fdt(t.timestamp)),$$.td().text(t.target),$$.td().text(t.oldValue),$$.td().text(t.newValue)])))}$ocms.dlg(t,{width:800,form:!1})}})},warnExpiry:function(e){let t=Math.max(1,Math.round((e||0)/60));$fis.notifications.push({severity:"info",title:"Entwurf läuft ab",message:"Der Mahnentwurf läuft in etwa "+t+" Minute(n) ab. Bitte zwischenspeichern, sonst gehen die Änderungen verloren."})},closed:function(e){let t=$inv.rd.token();$inv.rd.tbl().removeData("rdtoken"),""!==t&&$fis.draft.release(t),$fis.frm_edit().remove(),$fis.lf(!0),$fis.notifications.push({severity:"error",title:"Entwurf geschlossen",message:"expired"===e?"Der Mahnentwurf ist wegen Inaktivität abgelaufen. Nicht gespeicherte Änderungen sind verloren.":"Der Mahnentwurf wurde geschlossen."});try{$inv.rReload()}catch(e){}},close:function(){let e=$inv.rd.token();""!==e&&($ocms.postXT({url:$ocms.url("rem/dclose"),data:{token:e}}),$fis.draft.release(e)),$inv.rd.tbl().removeData("rdtoken")}},$inv.cInv2=function(e){let t=$$.dc("rfrm").ldng(1),n=$ocms.dlg(t,{width:1e3});n&&n.ft.rwText($rct.rq1);let i=()=>{$ocms.postXT({url:$ocms.url("req/get"),timeout:60,data:{id:e.id,mode:"r"},success:t=>{t.admin=t.admin||{};let n=$fis.lf(!0).aC("fix").rC("hd");if($fis.frm_edit().IN(),$inv.eM(!0,!0),(t.requests||[]).length<1)n.aC("fix").text($rct.nd);else{$$.dc("lh",n,$rct.mdl);let i=$$.d(),r=$$.ul({class:"rql"}).data({search:e.id,parent:t.admin.parent}).appendTo(n),a={},d=$rcol.req.lbl();$.each(t.requests||[],(function(e,t){let n=$$.li({class:"cli rli"}).data($.extend({},t)).appendTo(r),l=$$.dc("lihd",n).addClass(t.state);!0===booln(t.open,!1)&&l.append($$.sc("cbox").click((()=>{n.tC("checked"),i.find("li").rC("checked"),!0===n.is(".checked")?$inv.rMn(t.open):$inv.eM(!0)}))),l.append([$$.sc("eid",t.ExternalId),$$.sc("nme",t.Name)]),$$.dc("lidt",n).append([$$.dc("rqs").append([$$.s(d.State+": "),$$.s($rct.sts[t.State||"-"])]),$$.dc("ivn").append([$$.s(d.InvoiceId+": "),$$.s(t.InvoiceId||"- -")]),$$.dc("wda").append([$$.s(d.WorkDoneAt+": "),$$.s(fdt(t.WorkDoneAt,"dd.MM.yyyy"))])]),a[t.Id]=n})),(t.inv||[]).length>0&&($$.dc("lh",n,$rct.invs),i=$$.ul({class:"ivl"}).appendTo(n),$.each(t.inv||[],((e,t)=>{let n=$$.li({class:"cli ili"}).data($.extend({},t)).appendTo(i),a=$$.dc("lihd",n).addClass(t.invstatus);!1===booln(t.isFinal,!0)?a.append($$.sc("cbox").click((()=>{""!==(t.Id||"")&&(n.tC("checked").siblings().rC("checked"),r.find("li").rC("checked"),!0===n.is(".checked")?$inv.iMnr(t):$inv.eM(!0))}))):["","dft"].indexOf(t.invstatus)<0&&a.append($$.sc("dli").click((function(){$inv.disp(t.Id,"inv")}))),a.append($$.sc("nme",t.DocumentName||t.Id)),$$.dc("lidt",n).append([$$.dc("wda").append([$$.s(fdt(t.DateCreated,"dd.MM.yyyy"))]),$$.d().text($ict.iSt[t.invstatus]||t.invstatus)])})))}},complete:()=>{n&&n.c.trigger("modal_close")}})};$ocms.postXT({url:$ocms.url("req/pget"),timeout:90,data:{id:e.id},success:e=>{n&&n.ft.rwText($rct.rq2),i()},error:()=>{confirm($rct.rq1f)?(n&&n.ft.rwText($rct.rq2),i()):n&&n.c.trigger("modal_close")}})},$inv.ccInv=function(e){let t=(e.data||{}).typ||"r",n=$fis.lf(),i=n.children("ul.rql"),r=i.data("parent"),a=[];if(i.find("li.rli.checked").each((function(){a.push($(this).data("Id"))})),a.length<1)return void alert($rct.dnS);if("i"===t&&a.length>1)return void alert($rct.dII);let d=$fis.frm_edit(),l=$$.dc("invoice_layout",d).append($$.dc("btn sprev").click($inv.sprev)),s=$fis.cf().width()>l.width()+n.width()+20;n.tC("fix",s).tC("hd",!s),$inv.eM(!1,!0);let c=$$.dc("rfrm").ldng(1),o=$ocms.dlg(c,{width:1e3});o.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("req/iget"),timeout:60,data:{id:r,mode:"ful",typ:t,sel:a.join(",")},success:e=>{let t=$$.dc("srq",l),n=$$.tblset({class:"invi"},t);n.bdy.remove(),n.ft=$$[0]("tfoot"),e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b")),n.tbl.data($.extend({new:{},sms:{},itm:{}},{admin:e.admin,companies:e.companies,locations:e.locations}));let i=$$.tr(n.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(i,e))),n.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.requests||[],(function(t,i){if(0!==(i.Id||0)){let t=$inv.worknotes(i);i.text="i"===e.admin.type?$rct.req+jine([i.ExternalId,i.Name],": ").eine(" ",""):jine([jine([fdt(i.WorkDoneAt,"dd.MM.yy"),i.ExternalId]," - "+$rct.req+" "),t.ne(i.Name)],": \n");let r=$$.tbody(n.tbl).data($.extend({},i));$inv.rendersrq.call(r)}}));let r=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(r),n.ft.appendTo(n.tbl);let a,d,s=e.admin||{},c=(e,t,i,r,a)=>{let d=$$.dc("inpfrm",l).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(t);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{n.tbl.data("new")[i]=e}},a),$inv.eHtml)),n.tbl.data("new")[i]=t};c("tfrm",s.invoicetitle,"invoicetitle",0,null),c("adrfrm",s.invoiceaddress,"invoiceaddress",0,null),c("locfrm","","loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),c("emailfrm",s.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",l).append($$.dc("content").text(s.sender)),s.provisionend&&(d=s.provisionstart?$rct.provP:$rct.provD,a=s.provisionstart?fdt(s.provisionstart,"dd.MM.yyyy")+" - "+fdt(s.provisionend,"dd.MM.yyyy"):fdt(s.provisionend,"dd.MM.yyyy")),c("admfrm",a,"provisionperiod",d,1),n.tbl.data("new").CustomValues=s.CustomValues||"",$$.dc("inpfrm ctpfrm",l).text(jObj(s.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv"),$inv.eM(!1,!0,$inv.emOpt(s))},complete:()=>{o.c.trigger("modal_close")}})},$inv.ccStInv=function(e){let t=e.data||{},n=$fis.lf(),i=t.id,r=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sprev)),a=$fis.cf().width()>r.width()+n.width()+20;n.tC("fix",a).tC("hd",!a),$inv.eM(!1,!0);let d=$$.dc("rfrm").ldng(1),l=$ocms.dlg(d,{width:1e3});l.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),timeout:90,data:{id:t.id},success:e=>{l&&l.ft.rwText($ict.iq2),$ocms.postXT({url:$ocms.url("inv/icget"),timeout:60,data:{id:i},success:e=>{let t=$$.dc("srq",r),n=$$.tblset({class:"invi"},t);n.bdy.remove(),n.ft=$$[0]("tfoot"),e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b")),n.tbl.data($.extend({new:{},sms:{},itm:{}},{admin:e.admin,companies:e.companies,locations:e.locations}));let i=$$.tr(n.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(i,e))),n.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.requests||[],(function(t,i){if(0!==(i.Id||0)){let t=$inv.worknotes(i);i.text="i"===e.admin.type?$rct.req+jine([i.ExternalId,i.Name],": ").eine(" ",""):jine([fdt(i.WorkDoneAt,"dd.MM.yy")+t.ne(i.Name)],": ");let r=$$.tbody(n.tbl).data($.extend({},i));$inv.rendersrq.call(r)}}));let a=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(a),n.ft.appendTo(n.tbl);let d,l,s=e.admin||{},c=(e,t,i,a,d)=>{let l=$$.dc("inpfrm",r).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{n.tbl.data("new")[i]=e}},d),$inv.eHtml)),n.tbl.data("new")[i]=t};c("tfrm",s.invoicetitle,"invoicetitle",0,null),c("adrfrm",s.invoiceaddress,"invoiceaddress",0,null),c("locfrm",s.provisionlocation,"loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),c("emailfrm",s.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",r).append($$.dc("content").text(s.sender)),s.provisionend&&(l=s.provisionstart?$rct.provP:$rct.provD,d=s.provisionstart?fdt(s.provisionstart,"dd.MM.yyyy")+" - "+fdt(s.provisionend,"dd.MM.yyyy"):fdt(s.provisionend,"dd.MM.yyyy")),c("admfrm",d,"provisionperiod",l,1),n.tbl.data("new").CustomValues=s.CustomValues||"",$$.dc("inpfrm ctpfrm",r).text(jObj(s.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv")},complete:()=>{l.c.trigger("modal_close")}})},error:()=>{l&&l.c.trigger("modal_close")}})},$inv.clCntInv=function(e){let t=$fis.lf(!1),n=[];t.find("li.ili.checked").each((function(){n.push($(this).data("Id"))})),1===n.length&&$inv.cntInv({id:n[0]})},$inv.cntInv=function(e){e=e||{};$fis.lf(!1).rC("fix").aC("hd");let t=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sedit));$inv.eM(!1,!0);let n=$$.dc("rfrm").ldng(1),i=$ocms.dlg(n,{width:1e3});i.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("inv/get"),timeout:60,data:{id:e.id},success:e=>{e.admin=e.admin||{};let n=e.inv||{},i=$$.dc("srq",t),r=$$.tblset({class:"invi"},i);r.bdy.remove(),r.ft=$$[0]("tfoot"),r.tbl.data($.extend({invid:n.Id,new:{},sms:{},itm:{},bai:[]},e));let a=$$.tr(r.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(a,e))),r.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.req||[],(function(e,t){let n=$$.tbody(r.tbl).data($.extend({},t));$inv.rendersrq.call(n)}));let d=$$.tr($$.tbody(r.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(d),r.ft.appendTo(r.tbl);let l=(e,n,i,a,d)=>{let l=$$.dc("inpfrm",t).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(n);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{r.tbl.data("new")[i]=e}},d),$inv.eHtml)),r.tbl.data("new")[i]=n};l("tfrm",n.InvoiceTitle,"invoicetitle",0,null),l("adrfrm",n.SendToAddress,"invoiceaddress",0,null),l("locfrm",n.ProvisionLocation,"loc",1,null),l("emailfrm",n.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",t).append($$.dc("content").text(e.admin.sender)),l("admfrm",n.ProvisionPeriod,"provisionperiod",!0===(n.ProvisionPeriod||"").includes("-")?$rct.provP:$rct.provD,1),r.tbl.data("new").CustomValues=n.CustomValues||"",$$.dc("inpfrm ctpfrm",t).text(jObj(n.CustomValues,"contactName")),r.tbl.children("tbody").each($inv.bdysort),r.tbl.trigger("fds.inv"),$inv.eM(!1,!0,$inv.emOpt(e.admin))},complete:()=>{i.c.trigger("modal_close")}})},$inv.cSt=function(e){e=e||{};let t=$fis.lf(),n=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sedit)),i=$fis.cf().width()>n.width()+t.width()+20;t.tC("fix",i).tC("hd",!i),$inv.eM(!1,!0);let r=$$.dc("rfrm").ldng(1),a=$ocms.dlg(r,{width:1e3});a.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),data:{id:e.id},success:t=>{a&&a.ft.rwText($ict.iq2),$ocms.postXT({url:$ocms.url("inv/storno"),data:{id:e.id,mode:e.mode},success:e=>{e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b"));let t=e.inv||{},i=$$.dc("srq",n),r=$$.tblset({class:"invi"},i);r.bdy.remove(),r.ft=$$[0]("tfoot"),r.tbl.data($.extend({invid:t.Id,new:{},sms:{},itm:{},bai:[]},e));let a=$$.tr(r.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(a,e))),r.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.req||[],(function(e,t){let n=$$.tbody(r.tbl).data($.extend({},t));$inv.rendersrq.call(n)}));let d=$$.tr($$.tbody(r.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(d),r.ft.appendTo(r.tbl);let l=(e,t,i,a,d)=>{let l=$$.dc("inpfrm",n).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{r.tbl.data("new")[i]=e}},d),$inv.eHtml)),r.tbl.data("new")[i]=t};l("tfrm",t.InvoiceTitle,"invoicetitle",0,null),l("adrfrm",t.SendToAddress,"invoiceaddress",0,null),l("locfrm",t.ProvisionLocation,"loc",1,null),l("emailfrm",t.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(e.admin.sender)),l("admfrm",t.ProvisionPeriod,"provisionperiod",!0===(t.ProvisionPeriod||"").includes("-")?$rct.provP:$rct.provD,1),r.tbl.data("new").CustomValues=t.CustomValues||"",$$.dc("inpfrm ctpfrm",n).text(jObj(t.CustomValues,"contactName")),r.tbl.children("tbody").each($inv.bdysort),r.tbl.trigger("fds.inv")},complete:()=>{a.c.trigger("modal_close")}})},error:()=>{a&&a.c.trigger("modal_close")}})},$inv.eHtml=function(e){let t=$(this),n=e.data instanceof jQuery?e.data:e.data.t,i=["invoiceemail","provisionperiod","invoicetitle"].includes(e.data.nme),r=i?[{name:"txt",label:"Text",type:"text",value:n.text()}]:[{name:"txt",label:"Text",type:"html",value:n.html(),tinymce:!0,attr:{style:"height: 300px"}}],a=e.data.change||null,d={title:t.data("dialog")||"",success:function(t){i?n.text(t.txt||""):n.html(t.txt),"function"==typeof a&&a(t.txt),$inv.d.syncField(e.data.nme,i?t.txt||"":t.txt),$inv.rd.syncField(e.data.nme,i?t.txt||"":t.txt)},tinymce:{valid_elements:"br",hidemenu:!0,hidetoolbar:!0}};if(Array.isArray(e.data.list)){let t=$$.dc("lstfrm");$.each(e.data.list,((n,i)=>{let r=$$.dc("li",t).append(""!==(e.data.lbl||"")?$$.dc("lbl").rwText(i[e.data.lbl]):null);$$.dc("adr",r).rwText(i[e.data.property]).data("val",i[e.data.property]).click((function(){let e=$(this),t=e.closest(".modal-body").find(':input[name="txt"]');t.is(".tinymce")?tinymce.get(t.attr("id")).setContent($$.s().rwText(e.data("val")).html()):"TEXTAREA"===t.prop("tagName")?t.val(e.data("val")).change():t.rwText(e.data("val"))}))})),d.addcontent=t}$ocms.dlgform(r,d)},$inv.setVat=function(e){$(this);let t=e.data,n=prompt($rct.rqV);n&&(n=parseFloat(n.replace("%","")),n>1&&(n*=.01),!1===isNaN(n)&&(t.siblings(".itm").each((function(){$(this).data().vat=fnum(n,{style:"percent"}).replace(" ","")})),$inv.t_fds_inv()))},$inv.inRow=function(e){let t=$(this),n=e.data,i={},r=$rcol.itm.clone(["SortOrder","NameOrNumber","Type","quantityhours","UnitString","net","svcnet_val","svcvat_val","net_val","vat_val","vat","Note"]),a="N"+(65536*(1+Math.random())||0).toString(16).substr(6),d=$$.tr({id:"itm_"+a.toString(),class:"itm"});$ocms.dlgform(r,{title:t.data("dialog")||"",success:function(e){d.data($.extend({Id:a},i,e)),$inv.rrw.call(d),d.insertAfter(n),$inv.t_fds_inv()},typedvalues:!0})},$inv.eRow=function(e){let t=$(this),n=e.data,i=n.data()||{},r=["SortOrder","NameOrNumber","Type","quantityhours","UnitString","net","svcnet_val","svcvat_val","net_val","vat_val","vat","Note"];i.id||""!==(i.Type||"")||r.unshift("Type");let a=$rcol.itm.clone(r).applyValues(i);a.set("Type","hidden","type"),$inv.eRw.call(t,n,i,a)},$inv.eRw=function(e,t,n){let i=$(this);$ocms.dlgform(n,{title:i.data("dialog")||"",success:function(n){let i={};""===(t.Id||"")&&(i.Id="N"+(65536*(1+Math.random())||0).toString(16).substr(6),e.attr("id","itm_"+i.Id.toString())),i.quantity=((n.quantityhours||"").toString()+" "+(n.UnitString||"").toString()).trimEnd(),e.data($.extend({},t,n,i)),console.debug("eRw success %o",e.data()),$inv.rrw.call(e),$inv.t_fds_inv()},typedvalues:!0})},$inv.bdysort=(e,t)=>{$(t).Sortable({dragItem:!1,dragHandleClass:"ico",parentident:"tr",onend:()=>{$inv.t_fds_inv()}})},$inv.rrw=function(){let e=$(this),t=e.data(),n={},i=e.is(".placeholder"),r=e.is(".hidenote"),a=e=>$$.d().append(e).html(),d=[$$.dc("ibtn insb",{title:$rct.iRb}).append(gi("indent-left")).click(e,$inv.inRow)];!1===i&&(d.unshift($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(e,$inv.eRow)),d.push($$.dc("ibtn del",{title:$rct.dR}).append(gi("trash")).click((function(t){confirm($rct.cD)&&(e.remove(),$inv.t_fds_inv())}))),"set"===(t.Type||"").toLowerCase()&&0===(t.net_val||0)&&d.push($$.dc("ibtn tosetp",{title:$rct.toSetP}).append(gi("scale")).click(e,$inv.toSetPrice)));let l=$$.dc("axf").append(d);!0===i?n={id:"",typ:"placeholder"}:!0===e.is(".itm.osum")?n={invrqid:t.InvRqId,id:"osum"+e.index(),typ:"osum",p:"",q:null,t:a(t.tbl.tbl),tt:null,v:null,vt:t.net_val,vs:t.svcnet_val,vat:t.vat,vv:t.vat_val,vsv:t.svcvat_val,det:!1}:(n={invrqid:t.InvRqId,id:t.Id||"",typ:t.Type||"other",p:"",q:null,t:"",tt:null,v:null,vt:t.net_val,vs:t.svcnet_val,vat:t.vat,vv:t.vat_val,vsv:t.svcvat_val,det:""!==(t.Note||"")&&!1===r,SetItmId:t.SetItmId||null},$$.dc("ibtn ico move",l,{title:$rct.mR}),n.p=t.position||t.SortOrder||"",""===n.id?n.t="":["Text","Title"].includes(n.typ)&&0===(t.net_val||0)?n.t=t.htmltext||("#"!==(t.NameOrNumber||"").substr(0,1)?a($$[0]("p").text(t.NameOrNumber)):"")+(t.Note||""):(n.tt=n.det?"":$$.s(t.Note||"").text(),n.q=t.quantity||(0!==(t.quantityhours||0)?fnum(t.quantityhours)+" "+(t.UnitString||""):""),n.t=t.htmltext||(n.det?a($$.s(t.NameOrNumber||""))+a($$.dc("desc").html(t.Note)):a($$.s(t.NameOrNumber||""))),n.v=t.net,n.vt=t.net_val)),""!==(t.Note||"")&&$$.dc("ibtn add",l).append(gi("object-align-left")).click((function(t){$inv.rrw.call(e.tC("hidenote"))}));let s=[$$.tdc("aux").append(l),$$.tdc("keep").text(n.p)];if(""===n.id)s.push($$.td(e,{colspan:4}).append(n.t));else{Array.prototype.push.apply(s,n.q?[$$.tdc("keep").text(n.q)]:[]);let e=e=>null==e?"":fnum(e,$rct.cst);Array.prototype.push.apply(s,[$$.tdc("txt",{colspan:n.q?1:2,title:n.tt}).append(n.t),$$.tdc("currency").text(e(n.v)),$$.tdc("currency inetval").text(e(n.vt)).attr("title",$rct.svcPart+": "+e(n.vs))])}e.empty().attr("class",i?"placeholder":"itm").aC(n.Typ).tC("sethdr","set"===(n.typ||"").toString().toLowerCase()).tC("hidenote",r).append(s),t.co=n},$inv.toSetPrice=function(e){let t=(e.data.data().Id||"").toString();""!==t&&!1!==confirm($rct.toSetPc)&&$.when($inv.t_fds_inv()).done((()=>{$inv.d.sync({Target:"item.setprice",Ref:t})}))},$inv.invSumUpdate=function(){let e=$(this),t=[],n=e.children("tbody");n.each(((e,n)=>{let i=$(n),r=i.data()||{},a=[],d=[],l=i.find("tr.itm"),s=0;i.tC("empty",l.length<1),l.each(((e,t)=>{let n=$(t).data()||{};a.push(n.co);let i=$inv.itemToContract(n),r=(n.SetItmId||"").toString();"set"!==i.type&&""!==r&&r!==i.id&&(i.setId=r),d.push(i),(void 0===n.SortOrder||null===n.SortOrder?-1:n.SortOrder)>-1&&(!1===["text","title"].includes((n.Type||"other").toLowerCase())&&s++,n.SortOrder=0,n.position=s,$inv.rrw.call(t))})),t.push({Id:r.Id,nme:r.Name,text:r.text,itm:a,items:d})}));let i=e.find("tbody:not(.empty)").length;n.find("tr.isum").tC("hidden",i<2),e.data("bai",t),""===(e.data("dtoken")||"")&&!1===bool(e.data("dseeding"),!1)&&null!=(e.data("admin")||{}).type&&(e.data("dseeding",!0),$inv.d.seed($.extend($inv.invcPayload(e.data()),{invid:e.data("invid")||""})))},$inv.worknotes=function(e){let t="";return e.steps.forEach(((e,n)=>{let i;try{i=JSON.parse(e.Data||{}).fields||[]}catch(e){console.debug(e),i=[]}!0!==Array.isArray(i||"")&&(i="object"==typeof i&&!0===Array.isArray(i.field||"")?i.field:[]),i.forEach(((e,n)=>{"Ausgeführte Arbeiten"===e.name&&(t=e.result||"")}))})),t},$inv.rendersrq=function(){let e=$(this).empty(),t=e.is(".onesum"),n=e.data(),i=$$.tr(e,{id:"srq"+n.Id}).aC("title nosort"),r=($rcol.itm.lbl(),$$.dc("axf").appendTo($$.tdc("aux",i)));$$.dc("ibtn osum",r,{title:$rct.combP}).append(gi("euro")).click((function(t){e.tC("onesum"),$inv.rendersrq.call(e),$inv.t_fds_inv()})),$$.dc("ibtn setvat",r,{title:$rct.sV}).append(gi("gbp")).click(i,$inv.setVat),$$.dc("ibtn insb",r,{title:$rct.iRb}).append(gi("indent-left")).click(i,$inv.inRow);let a,d=$$.sc("text",n.text),l=($$.td(i,{colspan:t?4:5}).append(d),["net_val","vat_val","svcnet_val","svcvat_val","net"]);if($$.dc("ibtn edit",r).data("dialog",$rcol.req.lbl().Name).append(gi("pencil")).click({t:d,change:e=>{n.text=e,$inv.t_fds_inv()}},$inv.eHtml),t&&($$.tdc("currency isumval",i),a={Id:n.Id.toString()+"_osum",net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0},a.tbl=$$.tblset({class:"stbl"})),$.each(n.items||[],((n,i)=>{let r,d={Id:i.Id,net_val:i.net_val||0,vat_val:i.vat_val||0,svcnet_val:0,svcvat_val:0,net:i.net||0,Note:i.Note||""};if("service"===i.Type.toLowerCase())d.svcnet_val=i.net_val||0,d.svcvat_val=i.vat_val||0;t?(r=$$.tr(a.tbl.bdy,{id:"itm"+i.Id,class:"sitm"}).aC(i.Type),"Text"===i.Type||"Title"===i.Type?$$.td(r,{colspan:2}).html(i.htmltext||i.Note):($$.tdc("keep",r).text(i.quantity||((i.quantityhours||0)>0?fnum(i.quantityhours)+(i.UnitString||"").eine(" ",""):"")),i.htmltext?$$.tdc("txt",r).html(i.htmltext):$$.tdc("txt",r).text(i.NameOrNumber).attr("title",i.Note)),$.each(l,((e,t)=>{a[t]+=d[t]})),r.data(d)):($.extend(d,i),r=$$.tr(e,{id:"itm"+i.Id,class:"itm"}),r.data(d),$inv.rrw.call(r))})),t){let t=$$.tr(e,{id:"itmsq"+n.Id,class:"itm osum"}).data(a);$inv.rrw.call(t)}else{let t=$$.tr(e).aC("isum nosort");$$.tdc("aux",t),$$.td(t,{colspan:4}).text($rct.iSum),$$.tdc("currency isumval",t)}},$inv.t_fds_inv=()=>{let e=$("div.invoice_layout table.invi");if(e.trigger("fds.inv"),""!==(e.data("dtoken")||""))return $inv.d.syncChanged(e);let t=e.data("dseedpromise");return t?$.when(t).then((()=>$inv.d.syncChanged(e))):$.when()},$inv.sedit=()=>{$inv.sprev(!0)},$inv.jdisp=function(e){e.stopPropagation(),e.data.id&&$inv.disp(e.data.id,e.data.typ||"")},$inv.disp=(e,t)=>{let n="";switch(t){case"inv":n="inv/rdoc";break;case"rem":n="rem/rdoc"}""!==n&&$ocms.postXT({url:$ocms.url(n),data:{id:e||"",typ:"img"},success:e=>{let t=$$.dc("imagecollection pdfpreview"),n=Math.round(.88*vh());e.id;$.each(e.img||[],(function(e,i){$$.dc("pdfp",t).append($$.img(i).css("max-height",(n-rpx(6)).toString()+"px"))})),$ocms.dlg(t,{size:[n,Math.round(.88*vw())],zindex_min:50,form:!1,exclusive:!1})}})},$inv.jdbn=function(e){$ocms.postXT({url:$ocms.url("inv/rdocn"),data:{name:e.data.id||"",typ:"img"},success:e=>{let t=$$.dc("imagecollection pdfpreview"),n=Math.round(.88*vh());e.id;$.each(e.img||[],(function(e,i){$$.dc("pdfp",t).append($$.img(i).css("max-height",(n-rpx(6)).toString()+"px"))})),$ocms.dlg(t,{size:[n,Math.round(.88*vw())],zindex:50,form:!1})}})},$inv.sp13b=()=>{var e=$("div.invoice_layout").find("table.invi"),t=e.data();t.admin.p13b=!0,!1===(t.inv.InvoiceOptions||"").split(",").includes("§13b")&&(t.inv.InvoiceOptions+=",§13b"),e.trigger("fds.inv"),$inv.d.sync({Target:"p13b",Value:t.admin.p13b})},$inv.itemToContract=function(e){let t=((e=e||{}).Type||"").toString().toLowerCase(),n=e=>e??null,i={id:(e.Id||"").toString(),type:t,title:"",desc:"",qty:"",price_net:"",total_net:n(e.net_val),vat:e.vat||""};var r;return e.co&&"osum"===e.co.typ?(i.desc=e.co.t||"",i.total_net=e.net_val||0):["text","title"].includes(t)&&0===(e.net_val||0)?(i.desc=e.htmltext||("#"!==(e.NameOrNumber||"").substr(0,1)?(r=$$[0]("p").text(e.NameOrNumber||""),$$.d().append(r).html()):"")+(e.Note||""),i.total_net=""):(e.htmltext?i.desc=e.htmltext:(i.title=e.NameOrNumber||"",i.desc=e.Note||""),i.qty=e.quantity||(0!==(e.quantityhours||0)?fnum(e.quantityhours)+(e.UnitString?" "+e.UnitString:""):""),i.price_net=n(e.net),i.total_net=n(e.net_val)),i},$inv.ssetmode=()=>{let e=$("div.invoice_layout").find("table.invi").data();e.admin=e.admin||{};let t,n=e.admin.setmode||"setprice",i=e=>$$.dc("btn",$ict.setmo[e]).tC("selected",n===e).click((()=>{t.c.trigger("modal_close"),$inv.setSetmode(e)})),r=$$.dc("choicefrm").append([i("setprice"),i("setonly")]);t=$ocms.dlg(r,{width:800})},$inv.setSetmode=e=>{if(!1===confirm($rct.toSetMc||$rct.toSetPc))return;let t="setonly"===e?"block.setonly":"block.setprice";$.when($inv.t_fds_inv()).done((()=>{$inv.d.sync({Target:t})}))},$inv.sctp=()=>{let e=$invcol.ctp;$ocms.dlgform(e,{title:$ict.ctp,success:function(e){var t=$("div.invoice_layout"),n=t.find("table.invi").data();let i={};void 0!==n.new&&"{"===(n.new.CustomValues||"").substr(0,1)&&(i=JSON.parse(n.inv.CustomValues)),i.contactName=e.name,i.contactEmail=e.email,n.new.CustomValues=JSON.stringify(i),t.find(".ctpfrm").text(ne(e.name,e.email)),$inv.d.sync({Target:"contact",Value:{name:e.name,email:e.email}})},typedvalues:!0})},$inv.invcPayload=function(e){e=e||{};let t=$.extend({},e.new),n=$.extend({},e.admin);return t.title=null!=t.invoicetitle?t.invoicetitle:t.title||"",t.provisionlocation=null!=t.loc?t.loc:t.provisionlocation||"",t.paymentterm=null!=n.paymentterms?n.paymentterms:t.paymentterm||"",n.customerid=null!=n.customerid?n.customerid:n.CustomerId,{admin:n,req:e.bai,new:t}},$inv.ssave=()=>{$inv.d.save()},$inv.sprev=e=>{$inv.d.preview()},$inv.rReload=()=>{try{let e=$("#listframe ul.rql:first").data();$inv.cInv2({id:e.search})}catch(e){}},$inv.quantChange=function(e){},$inv.storno=function(e,t){let n,i=$$.dc("choicefrm").append([$$.dc("btn","Storno ohne Details").click({id:e,mode:"simple"},(e=>{n.c.trigger("modal_close"),$inv.cSt(e.data)})),$$.dc("btn","Storno mit neuer Rechnung").click({id:e},(e=>{n.c.trigger("modal_close"),$inv.ccStInv(e)})),$$.dc("btn","Storno mit best. Rechnung").tC("inactive",!1===bool(t,!1)).click({id:e,mode:"copy"},(e=>{!0===bool(t,!1)&&(n.c.trigger("modal_close"),$inv.cSt(e.data))}))]);n=$ocms.dlg(i,{width:1e3})},$inv.credit=function(e,t){let n,i=$$.dc("choicefrm").append([$$.dc("btn","Gutschrift").click({id:e,mode:"credit"},(e=>{n.c.trigger("modal_close"),$inv.cSt(e.data)}))]);n=$ocms.dlg(i,{width:1e3})},$inv.setPyd=function(e){confirm($ict.cpyd)&&$ocms.postXT({url:$ocms.url("inv/setpyd"),timeout:60,data:{id:e},success:e=>{alert($ict.relm)},error:()=>{alert($t.f1)}})},$inv.setUpd=function(e){confirm($ict.cupd)&&$ocms.postXT({url:$ocms.url("inv/setupd"),timeout:60,data:{id:e},success:e=>{alert($ict.relm)},error:()=>{alert($t.f1)}})},$inv.resendRem=function(e){e.stopPropagation(),e.data.id&&confirm(string($ict.remresc,[e.data.name]))&&$ocms.postXT({url:$ocms.url("rem/resend"),timeout:60,data:{id:e.data.id},success:t=>{alert(string($ict.remresr,[e.data.name]))},error:()=>{alert($t.f1)}})},$inv.dspRem=function(e){let t=$$.dc("rfrm").ldng(1),n=$ocms.dlg(t,{width:1e3});n.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("inv/getrem"),timeout:60,data:{id:e,drafts:!1},success:e=>{n.ft.empty();let i=$$.tblset({class:"invtbl"},t.empty()),r=$invcol.rem2,a=$$.tr(i.hd);$$.th(a);$.each(r.fields||[],((e,t)=>{$$.th(a).text(t.label)}));let d=!1;$.each(e,((e,t)=>{d=!d;let n=$$.tr(i.bdy).tC("alt",d),a=$$.td(n);n.click((function(){n.tC("selected").siblings().rC("selected")})),!0===bool(t.hasFile,!1)&&($$.dc("idl ilbtn",a,{title:$ict.dl+"\n"+t.DocumentName}).append(gi("save-file","ico")).click({id:t.Id},$inv.downloadrem),$$.dc("idl ilbtn",a,{title:$ict.remdsp+"\n"+t.DocumentName}).append(gi("eye-open","ico")).click({id:t.Id,typ:"rem"},$inv.jdisp),$$.dc("idl ilbtn",a,{title:$ict.remres+"\n"+t.DocumentName}).append(gi("refresh","ico")).click({id:t.Id,typ:"rem",name:t.DocumentName},$inv.resendRem)),$.each(r.fields||[],((e,i)=>{let r=$$.td(n).aC(i.dtype),a=t[i.name];if("function"==typeof i.dfnc)i.dfnc.call(r,a,t);else switch(i.type||""){case"date":r.text(fdt(t[i.name],"dd.MM.yy"));break;case"datetime":r.text(fdt(t[i.name]));break;case"html":r.append($$.dc("ctw").html(a)),r.append($$.dc("ttip").html(a));break;default:r.text(t[i.name])}if("InvoiceId"===(i.name||""))r.aC("keep");switch(typeof i.title){case"function":i.title.call(r,t);break;case"string":r.attr("title",cs.title)}}))}))},error:()=>{t.empty(),n.ft.rwText($t.f1)},complete:()=>{t.ldng(0)}})},$inv.ccRem=function(e,t){$(this);$ocms.postXT({url:$ocms.url("rem/lrem"),timeout:60,data:{id:e},success:n=>{let i=$invcol.rid.clone();i.applyValues(n.ov);let r=$$.dc("ac"),a=$$.tblset({class:"fullgrid fullwidth"},r);if((n.lst||[]).length>0){$$.d({style:"margin: 1.5rem 0 1rem 0;font-size: 110%;text-decoration: underline;"}).prependTo(r).text($ict.rovlh);let e=$$.tr(a.hd);$ict.rovl.forEach(((t,n)=>$$.th(e,t))),$.each(n.lst,((e,t)=>{$$.tr(a.bdy).append([$$.tdc("keep",t.subject),$$.tdc("currency",fnum(t.amount,$rct.cst)),$$.tdc("currency",fnum(t.amount_payed,$rct.cst)),$$.tdc("keep",fdt(t.DateFinalized,"dd.MM.yy"))])}))}else $$.td($$.tr(a.bdy),$ict.nd);$ocms.dlgform(i,{addcontent:r,title:string($ict.remdt,[t||"?"]),success:function(t){$inv.ccRem_s2(e,t)},typedvalues:!0})}})},$inv.rRemRw=function(e){let t=$(this),n=e.rm||{};t.empty().data({invoiceid:n.invoiceid,invoicedate:n.invoicedate,amount:n.amount,amount_payed:n.amount_payed});let i=$$.dc("axf").append($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(t,$inv.eRowR));t.append([$$.tdc("aux").append(i),$$.tdc("keep",n.invoiceid),$$.tdc("keep",fdt(n.invoicedate,"dd.MM.yy")),$$.tdc("currency",fnum(n.amount,$rct.cst)),$$.tdc("currency",fnum(n.amount_payed,$rct.cst)),$$.tdc("currency",fnum(n.amount-n.amount_payed,$rct.cst))])},$inv.eRowR=function(e){let t=$(this),n=e.data,i=n.data()||{},r=$invcol.rem.clone().applyValues(i);$ocms.dlgform(r,{title:t.data("dialog")||"",success:function(e){let i=t.closest("table"),r=i.data();$.extend(r.rm,e),i.data(r),$inv.rRemRw.call(n,r),$inv.rd.syncAmount(r.rm.amount,r.rm.amount_payed)},typedvalues:!0})},$inv.ccRem_s2=function(e,t){$fis.lf(!1).rC("fix").aC("hd");let n=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.rprev));$inv.eM(!1,!0);$$.dc("rfrm").ldng(1);$ocms.postXT({url:$ocms.url("rem/get"),timeout:60,data:$.extend({id:e},t),success:e=>{let t=e.rm||{},i=$$.dc("srq",n),r=$$.tblset({class:"invi"},i);r.ft=$$[0]("tfoot"),r.tbl.data($.extend({invid:t.invid,new:{}},e));let a=$$.tr(r.hd).aC("shd").append([$$.th().aC("aux")]);$ict.remHR.forEach((e=>$$.th(a,e))),$inv.rRemRw.call($$.tr(r.bdy),r.tbl.data()),r.ft.appendTo(r.tbl);let d=(e,t,i,a,d)=>{let l=$$.dc("inpfrm",n).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{r.tbl.data("new")[i]=e}},d),$inv.eHtml)),r.tbl.data("new")[i]=t};d("tfrm",t.subject,"subject",0,null),d("adrfrm",t.invoiceaddress,"invoiceaddress",0,null),d("emailfrm",t.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(t.sender)),r.tbl.children("tbody").each($inv.bdysort),r.tbl.trigger("fds.inv");let l=r.tbl.data("new");l.amount=t.amount,l.amount_payed=t.amount_payed,$inv.rd.seed({rem:{invid:t.invid,type:t.type,invoiceid:t.invoiceid,invoicedate:t.invoicedate},new:l})},complete:()=>{}})},$inv.rprev=()=>{$inv.rd.preview()},$inv.sis=e=>{confirm($ict.sisc)&&$ocms.postXT({url:$ocms.url("inv/sis"),data:{id:e||""},success:e=>{}})},$inv.srs=e=>{confirm($ict.srsc)&&$ocms.postXT({url:$ocms.url("rem/srs"),data:{id:e||""},success:e=>{}})},$inv.mfrrel=e=>{$("#contentframe").ldng(),$ocms.postXT({url:$ocms.url("inv/mfrrel"),data:{id:e||""},success:e=>{$inv.rerenderinv()},complete:()=>{$("#contentframe").ldng(0)}})}; \ No newline at end of file +let $rct={mdl:"Aufträge",or:"offene Aufträge",orr:"offene Aufträge (4 W)",rn:"Auftragsnummer",iov:{all:"Auftragsübersicht (alle)","":"Auftragsübersicht"},wk:"Woche",nd:"Keine Daten gefunden.",h:"Uhr",rq1:"Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",rq2:"Auftragsdaten werden geladen",rq1f:"Die Auftragsdaten von MFR konnten nicht oder nicht schnell genug abgerufen werde.\nMöchten Sie mit den bestehenden Daten trotzdem weitermachen?",note1:"Im Bruttobetrag sind {0} Lohnkosten enthalten (netto {1}). Die darin enthaltene Umsatzsteuer beträgt {2}.",note2:"Bitte beachten Sie, nach §14 Abs. 1 Umsatzsteuergesetz ist diese Rechnung ein Zahlungsbeleg oder eine andere beweiskräftige Unterlage für 2 Jahre nach Ablauf des Kalenderjahres der Ausstellung dieser Rechnung aufzubewahren, soweit nicht aufgrund anderer gesetzlicher Regelungen andere ggf.längere Aufbewahrungsfristen gelten.",note3:"Privathaushalten erstattet das Finanzamt bis zu {0} des Arbeitslohns mit der nächsten Steuererklärung.",note4:"Für bereits erbrachte Arbeiten, Dienstleistungen, Materiallieferungen und getätigte Bestellvorgänge zum oben genannten Bauvorhaben, die sich aus dem mit Ihnen geschlossenen Vertrag ergeben, stellen wir Ihnen vertragsgemäß unsere Akontozahlung in Rechnung. Eine Endabrechnung erhalten Sie als Schlussrechnung nach Abschluss des gesamten Bauvorhabens. Das Ausführungsdatum entnehmen Sie bitte dem Schlusstext dieser Rechnung. Wir danken Ihnen herzlich für das entgegengebrachte Vertrauen und bitten Sie um kurzfristigen Ausgleich der Akontorechnung.",note13b:"Gem. §13b Umsatzsteuergesetz unterliegen Sie der Steuerschuldnerschaft des Leistungsempfängers zur Umsatzsteuer aus dieser Rechnung mit einem Steuersatz von 19%.",crI:"Rechnung erstellen",crII:"Abschlagsrechnung erstellen",dII:"Für eine Abschlagsrechnung darf nur ein Auftrag gewählt werden.",dnS:"Für eine Rechnung muss mindestens ein Auftrag gewählt werden.",inv:"Rechnung",invs:"Rechnungen",req:"Auftrag",provP:"Leistungszeitraum",provD:"Leistungsdatum",cP:"Position ändern",iRb:"Zeile darunter einfügen",dR:"Zeile löschen",sV:"USt festlegen",cD:"Löschen?",mR:"Zeile verschieben",svcPart:"Service-Anteil",vat:"Umsatzsteuer",combP:"Positionen zusammenfassen",toSetP:"Auf Setpreis umstellen (Positionen ohne Preis)",toSetPc:"Der Set-Preis wird auf die Summe seiner Positionen gesetzt und die Positionen selbst verlieren ihren Preis. Das ist nicht rückgängig zu machen (der Betrag kann danach nur noch manuell geändert werden). Fortfahren?",toSetMc:"Jeder Leistungsauftrag wird zu einer Set-Position mit der Summe als Preis zusammengefasst. Das ist nicht rückgängig zu machen (die Set-Preise können danach nur noch manuell geändert werden). Fortfahren?",iSum:"Zwischensumme",dtRel:"Freigegeben am: ",dtCr:"Erstellt am: ",rqV:"USt des Auftrags?",cthd:"wirklich aus-/einblenden ?",cst:{style:"currency",currency:"EUR"},sts:{IsWorkDone:"Arbeiten erledigt",Closed:"Auftrag geschlossen",SubcontractorPendingConfirmation:"Warten auf Bestätigung (Unterauftrag)",Scheduled:"Geplant",OfferIsRejected:"Angebot abgelehnt",OfferIsSend:"Offen (Angebot versandt)",CollaborationWaitingConfirmation:"Warten auf Bestätigung (Zusammenarbeit)",Released:"Freigegeben",OfferIsConfirmed:"Bestätigt",InProgress:"In Bearbeitung",ReadyForScheduling:"Zur Planung",Created:"Erstellt",Rejected:"Abgebrochen",Invoiced:"Rechnung gestellt","-":"-"},invHR:["Pos.","Menge","Artikelbezeichnung","VK","Summe"],frm:{invoiceaddress:"Adresse",loc:"Leistungsort / Lieferadresse",invoiceemail:"Email"}},$rcol={req:new fields_definition("Auftrag","Aufträge",[{name:"tags",label:"",type:"string",dfnc:function(e,t){""!==(e||"")&&($(this).aC("tags"),e.split(",").forEach((e=>{""!==e&&$(this).append($$.sc("tag "+e.replace(" ","_").replace("/","_").toLowerCase(),e))})))}},{name:"DateOfCreation",label:"Datum",type:"date",title:function(e){$(this).attr("title",$rct.dtCr+fdt(e.DateOfCreation).ne("-")+" \n"+$rct.dtRel+fdt(e.DateReleased).ne("-"))}},{name:"CustomerName",label:"Kunde (Firma)",type:"string"},{name:"Name",label:"Auftragsname",type:"string"},{name:"ExternalId",label:"Auftragsnummer",type:"string"},{name:"ParentExtenalId",label:"PAuftrag",type:"string"},{name:"InvoiceId",label:"RNummer",type:"string",dfnc:function(e,t){$(this).rwText(e," ").find("span").each((function(){$(this).aC("cla").click({id:$(this).text()},$inv.jdbn)}))}},{name:"State",label:"Status",type:"string"},{name:"WorkDoneAt",label:"Erledigt am",type:"date"},{name:"Description",label:"Beschreibung",type:"html"}]),itm:new fields_definition("Auftragsposition","Auftragspositionen",[{name:"NameOrNumber",label:"Bezeichnung",type:"string"},{name:"Type",label:"Typ",type:"select",required:!0,value:"Text",url:[{value:"Text",label:"Text"},{value:"Equipment",label:"Ausrüstung"},{value:"Material",label:"Material"},{value:"Service",label:"Arbeitsleistung"}],change:function(e){$req.quantChange.call(this,e)}},{name:"quantityhours",label:"Anzahl / Menge",type:"number",precision:"0.01",value:1,change:function(e){$inv.quantChange.call(this,e)}},{name:"UnitString",label:"Einheit",type:"select",url:["LFDM","Stck","Std.","QM","AW","Pauschal"],change:function(e){$inv.quantChange.call(this,e)}},{name:"net",label:"EinzelPreis netto",type:"number",precision:"0.01",value:0,change:function(e){$inv.quantChange.call(this,e)}},{name:"net_val",label:"GesamtPreis netto",type:"number",precision:"0.01",value:0},{name:"vat_val",label:"GesamtPreis USt",type:"number",precision:"0.01",value:0},{name:"svcnet_val",label:"Arbeitslohn netto",type:"number",precision:"0.01",value:0},{name:"svcvat_val",label:"Arbeitslohn USt",type:"number",precision:"0.01",value:0},{name:"net_pos",label:"Netto",type:"string"},{name:"bo_pos",label:"Brutto",type:"string"},{name:"vat",label:"USt",type:"string",value:"19,0%",change:function(e){$inv.quantChange.call(this,e)}},{name:"Note",label:"Details",type:"html",tinymce:!0}])},$ict={mdl:"Rechnungen",iov:{all:"Rechnungen (alle)","":"Rechnungen (nur fertige)","#d":"Rechnungen (nur Entwürfe)","#u":"Rechnungen (nur unbezahlt)","#r":"Rechnungen (nur angemahnt)","#a":"Rechnungen (nur Akonto)","#c":"Rechnungen (nur Storno)","#ru":"Rechnungen (nur angemahnt + unbez.)"},uba:", gesamter Zeitraum)",req:"Auftrag",inv:"Rechnung",rem:"Mahnung",in:"Rechnungsnummer",cc:"Kunde",wk:"Woche",nd:"Keine Daten gefunden.",dl:"Herunterladen",ed:"Bearbeiten",ced:"Bearbeitung fortsetzen",sItm:"Einzelheiten anzeigen",sPay:"Zahlungen anzeigen",cdI:"Entwurf der Rechnung löschen?",rel:"Neu Laden",relm:"Bitte laden Sie Liste manuell neu, um die Änderungen zu sehen.",dsp:"Rechnung anzeigen",storno:"Storno-Rechnung erstellen",credit:"Gutschrift erstellen",remd:"Mahnung erstellen",remdt:"Mahnung erstellen zur Rechnung {0}",remlst:"Mahnungen anzeigen",remdsp:"Mahnung anzeigen",remres:"Mahnung erneut senden",remresc:"Mahnung {0} wirklich erneut senden?",remresr:"Mahnung {0} wurde erfolgreich versandt.",setpyd:"Bezahlt markieren",cpyd:"Rechnung wirklich als bezahlt markieren?",setupd:"Bezahlt-Markierung aufheben",cupd:"Bezahlt-Markierung wirklich aufheben?",ivE:"Die Email-Adresse ist vermutlich nicht gültig.",ivEc:"\nMöchten Sie fortfahren?",pna:"Diese Seite ist in der Vorschau nicht verfügbar",tpe:"Die Anzahl von {0} Seiten wird aktuell nicht unterstützt",eis:"Der Rechnungsentwurf konnte nicht gespeichert werden.",iss:"Zwischenstand speichern.",p13b:"USt -> §13b",setm:"Set-Preisanzeige",setmo:{setprice:"Set mit Preis – Positionen ohne Preis",setonly:"Nur Set mit Preis – Positionen ausgeblendet"},ctp:"Ansprechpartner festlegen",mfr:"Von MFR neu abrufen",rq1:"Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",rq2:"Auftragsdaten werden geladen",iq1:"Rechnungsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.",iq2:"Rechnungsdaten werden geladen",sis:"Rechnung als versandt markieren",srs:"Mahnung als versandt markieren",sisc:"Rechnung wirklich als versandt markieren?",srsc:"Mahnung wirklich als versandt markieren?",iSt:{dft:"Entwurf",uns:"nicht versandt",pyd:"bezahlt",cc:"storniert",op:"offen",due:"fällig",ovd:"überfällig",rem:"angemahnt"},rSt:["","Überfällig","2. Mahnung","3. Stufe"],pSt:{a:"Vollst.",p:"Teilz."},ivT:{i:"AbschlagsR.",f:"SchlussR",r:"Rechnung",c:"StornoR."},rovlh:"Übersicht der bisherigen Mahnungen",rovl:["Betreff","Betrag","Betrag gezahlt","fertiggestellt am"],remHR:["Rechnung","vom","Rechnungsbetrag","bereits bezahlt","noch offen"],translatePaymentTerm:e=>(e||"").replace("wd"," Werktagen").replace("d"," Tagen").replace("wk"," Wochen")||"10 Tagen",payi:{account:"Konto",name:"Zahler",text:"Verw.Zweck",InvoiceID:"Rechnung",amount:"Betrag",date:"Datum",manual:"Typ"}},$invcol={datev:new fields_definition("Rechnung","Rechnungen",[{name:"Umsatz (ohne Soll/Haben-Kz)",label:"Umsatz (ohne Soll/Haben-Kz)",type:"string"},{name:"vf",label:"vf",type:"string"},{name:"Soll/Haben-Kennzeichen",label:"Soll/Haben-Kennzeichen",type:"string"},{name:"Konto",label:"Konto",type:"string"},{name:"Gegenkonto",label:"Gegenkonto",type:"string"},{name:"BU-Schlüssel",label:"BU-Schlüssel",type:"string"},{name:"Belegdatum",label:"Belegdatum",type:"string"},{name:"Belegfeld 1",label:"Belegfeld 1",type:"string"},{name:"Belegfeld 2",label:"Belegfeld 2",type:"string"},{name:"Buchungstext",label:"Buchungstext",type:"string"}]),inv:new fields_definition("Rechnung","Rechnungen",[{name:"invstatus",label:"Status",type:"select",url:$ict.iSt},{name:"balance",label:"Umsatz",type:"string",dtype:"currency"},{name:"CustomerName",label:"Kunde",type:"string"},{name:"InvoiceId",label:"RNummer",type:"string"},{name:"InvoiceType",label:"Typ",type:"select",url:$ict.ivT},{name:"request",label:"Auftrag",type:"string",dtype:"num"},{name:"vat",label:"MwSt",type:"string",dtype:"num"},{name:"deb_cred",label:"Soll/Haben",type:"string"},{name:"customer",label:"Konto",type:"string",dtype:"num"},{name:"contra_account",label:"Gegenkonto",type:"string",dtype:"num"},{name:"Belegdatum",label:"Belegdatum",type:"date"},{name:"reminderstatus",label:"MahnStatus",type:"select",url:$ict.rSt},{name:"reminder",label:"# Mahnungen",type:"integer"},{name:"Buchungstext",label:"Buchungstext",type:"string"},{name:"Payment",label:"Zahlung",type:"string"}]),rem:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"amount",label:"Rechnungsbetrag",type:"number",precision:"0.01",value:1},{name:"amount_payed",label:"bereits bezahlt",type:"number",precision:"0.01",value:1}]),rem2:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"DocumentName",label:"Name",type:"string"},{name:"subject",label:"Betreff",type:"string"},{name:"DateSent",label:"Versanddatum",type:"date"},{name:"status",label:"Status",type:"string"},{name:"amount_open",label:"offener Betrag",type:"number",precision:"0.01"},{name:"InvoiceId",label:"RNummer",type:"string"}]),rid:new fields_definition("Zahlungserinnerung","Zahlungserinnerung",[{name:"type",label:"Typ",type:"select",url:[["f","einfache Zahlungserinnerung"],["m","Mahnung"],["l","letzte Mahnung"]],required:!0},{name:"level",label:"Stufe",type:"select",url:[["1","Stufe 1"],["2","Stufe 2"],["3","Stufe 3"],["4","Stufe 4"],["5","Stufe 5"],["6","Stufe 6"]],required:!0}]),ctp:new fields_definition("Ansprechpartner","Ansprechpartner",[{name:"name",label:"Name",type:"string"},{name:"email",label:"Email",type:"string"}])},gi=(e,t)=>$$.sc("glyphicon glyphicon-"+e).aC(t),$inv={},$req={init2:function(e,t){e=e||"inv",t=t||{},$ocms.getScript([],(function(){$req.init3(e,t)}))},init3:async function(e,t){$fis.cf(!0);let n=$fis.lf(!0);$("#topbar").ocmsmenu([]),$("#activemodule").text($rct.mdl),await $fis.prepAuth("fds_req,fds_inv,fds_reminder");let i=[(async()=>{!0===$fis.isAuth("fds_req",1)&&($req.prepLst(""),n.aC("fix"))})(),new Promise(((e,t)=>{n.find("div.oreq2").aC("selected"),$req.renderreq(fdt(new Date,"yy-MM-dd"),"r"),e()}))];await Promise.all(i)},prepLst:function(e){let t=new Date,n=$fis.lf(!0).ldng(1),i=new Date("2021-01-01");$fis.frm_list().IN((function(){}));$$.dc("mth oreq",n).text($rct.or).click((function(e){let t=$(this);e.stopPropagation(),t.siblings().rC("selected"),!0===t.is(".selected")&&(t.tC("selected"),$req.renderreq(fdt(new Date,"yy-MM-dd"),"o")),t.aC("selected")})),$$.dc("mth oreq2",n).text($rct.orr).click((function(e){let t=$(this);e.stopPropagation(),t.siblings().rC("selected"),!0===t.is(".selected")&&(t.tC("selected"),$req.renderreq(fdt(new Date,"yy-MM-dd"),"r")),t.aC("selected")})),$$.i({placeholder:$rct.rn}).appendTo($$.dc("mth oreqn",n)).enterKey((function(e){let t=$(this),n=t.val()||"";e.stopPropagation(),t.parent().siblings().rC("selected"),n.length>3&&(t.parent().aC("selected"),$req.renderreq("n:"+n,"s"),t.val(""))}));n.append("
");let r=$$.dc("mthl",n),a=t.getFullYear(),d=t.getMonth()+1;for(let t=i.getFullYear();t<=a;t++){let n=$$.dc("yr").prependTo(r).text($rct.iov[e]+" - "+t.toString()).toggleClass("selected",t===a);n.click({yr:t},(function(e){e.stopPropagation(),n.siblings().rC("selected"),n.aC("selected")}));let l=$$.dc("mfrm",n);for(let n=0;n<(t!==a?12:d);n++){i=new Date(t,n,1);let r=$$.dc("mth").prependTo(l).text($rct.iov[e]+" - "+fdt(i,"MMM yyyy"));r.click({yr:t,mt:n},(function(e){if(e.stopPropagation(),r.siblings().rC("selected"),!0===r.is(".selected")){r.tC("selected");let t=fdt(new Date(e.data.yr,e.data.mt,1),"yy-MM-dd");$req.renderreq(t,"m")}r.aC("selected")}));let a=getMonday(i),d=new Date(i);d.setMonth(d.getMonth()+1),d.setDate(0),d=getMonday(d);let s=$$.dc("wfrm",r);for(;a<=d;){let e=$$.dc("wk",s).text(($rct.wk||"W")+" "+fdt(a,"dd.MM.yy"));e.click({rd:new Date(a)},(function(t){t.stopPropagation();let n=fdt(t.data.rd,"yy-MM-dd");$req.renderreq(n,"w"),r.siblings().rC("selected").find(".wk").rC("selected"),r.aC("selected").find(".wk").rC("selected"),e.aC("selected")}));let t=$$.dc("wkdl",e).append($$.sc("ico glyphicon glyphicon-compressed"));!0===$fis.isAuth("fds_inv",2)&&t.click({rd:new Date(a)},(function(e){e.stopPropagation();let t=fdt(e.data.rd,"yy-MM-dd");$req.downloadzip.call(t,"w")})),a.setDate(a.getDate()+7)}}}n.ldng(0)},renderreq:function(e,t){let n=$fis.frm_list().ldng(1),i=$$.dc("invfrm",n).aC("md"+t),r=$fis.lf();$ocms.postXT({url:$ocms.url("req/reql"),data:{mode:t,tgt:e},success:n=>{r.rC("fix").aC("hd"),$$.dc("ovhd",i).append($$.s(n.admin.title)).appendIf($$.sc("note",n.admin.note),""!==ne(n.admin.note,""));let a=$$.tblset({},i),d=$rcol.req,l=$$.tr(a.hd);$$.th(l);$.each(d.fields||[],((e,t)=>{$$.th(l).text(t.label),"vat"===t.name&&$$.th(l)}));let s=0,c=!1;$.each(n.requests||[],((n,l)=>{s>0&&s!==l.ParentServiceRequestId&&(c=!c);let o=$$.tr(a.bdy).tC("alt",c);s=l.ParentServiceRequestId,o.click((function(){r.rC("fix").aC("hd"),o.tC("selected").siblings().rC("selected").find("td.av").rC("av"),o.find("td.av").rC("av")})),o.tC("child",l.isChild);let u=$$.td(o,{class:"raux"});!0===bool(l.open,!1)&&$$.dc("ihd ilbtn",u).append(gi("eye-close","ico")).click({id:l.Id},$req.tHd),$$.dc("iitm ilbtn",u).append(gi("list","ico")).click({id:l.Id},$req.showitm),!0===$fis.isAuth("fds_inv",2)&&$$.dc("invc ilbtn",u).append(gi("edit","ico")).click({id:l.Id},$inv.cInv),$.each(d.fields||[],((n,r)=>{let a=$$.td(o).aC(r.dtype),d=l[r.name];if("function"==typeof r.dfnc)r.dfnc.call(a,d,l);else switch(r.type||""){case"date":a.text(fdt(l[r.name],"dd.MM.yy"));break;case"datetime":a.text(fdt(l[r.name]));break;case"html":a.append($$.dc("ctw").html(d)),a.append($$.dc("ttip").html(d));break;default:a.text(l[r.name])}switch(r.name||""){case"State":a.text($rct.sts[d||"-"]);break;case"Name":a.aC(r.name.toLowerCase());break;case"vat":$$.sel().appendTo($$.td(o,{class:"vsel"})).click((function(e){e.stopPropagation()})).append([$$.opt("19,0 %","19,0 %"),$$.opt("16,0 %","16,0 %"),$$.opt("0,0 %","0,0 %")]).val(l[r.name]).change().change({frm:i,tgt:e,mode:t,id:l.Id,td:a},$req.setvat),a.tC("hl","19"!==l[r.name].substr(0,2)).click((function(e){e.stopPropagation(),$(this).tC("av")}));break;case"balance":a.aC("sh_"+(l.SollHaben||"").toLowerCase());break;case"InvoiceId":a.aC("keep")}switch(typeof r.title){case"function":r.title.call(a,l);break;case"string":a.attr("title",cs.title)}}))}))},complete:()=>{n.ldng(0)}})},tHd:function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&confirm($rct.cthd)&&$ocms.postXT({url:$ocms.url("req/rthd"),data:{id:e.data.id},success:n=>{n.id===e.data.id&&!1===bool(n.visible,!0)?(!1===t.is(".tbhd")&&setTimeout((()=>{t.filter(".tbhd").remove()}),15e3),t.aC("tbhd")):n.id===e.data.id&&t.rC("tbhd")}})},showitm:function(e){let t=$(this).closest("tr");if(e.stopPropagation(),!1===t.is(".selected"))return;let n=$$.dc("rfrm").ldng(1);$ocms.postXT({url:$ocms.url("req/pget"),data:{id:e.data.id},success:t=>{$ocms.postXT({url:$ocms.url("req/get"),data:{id:e.data.id,mode:"ful"},success:e=>{if((e.requests||[]).length<1)n.text($rct.nd);else{let t=$$.dc("srq",n),i=$$.tblset({class:"if"},t);$.each(e.requests||[],(function(e,t){e>0&&$$.tr(i.bdy).aC("sep").append($$.td({colspan:6}));let n=$$.tr(i.bdy).aC("title"),r=$rcol.itm.lbl(),a=$inv.worknotes(t);$$.td(n,{colspan:6}).append([$$.s($rcol.req.label_sng),$$.sc("eid",t.ExternalId),$$.sc("nme",fdt(t.WorkDoneAt,"dd.MM.yy")+": "+a.ne(t.Name))]);$$.tr(i.bdy).aC("shd").append([$$.td(),$$.td(r.NameOrNumber),$$.td(r.Type),$$.td(r.net_pos),$$.td(r.bo_pos),$$.td(r.vat)]);$.each(t.items||[],((e,t)=>{t.ServiceRequestId;let n=$$.tr(i.bdy,{id:"itm"+t.Id}).aC(t.Type);$$.td(n).aC("ico"),$$.td(n).text(t.NameOrNumber),$$.td(n).text(t.Type),$$.td(n).aC("currency").text(t.net_pos),$$.td(n).aC("currency").text(t.bo_pos),$$.td(n).aC("num").text(t.vat)}))}))}},error:()=>{n.text($t.t12)},complete:()=>{n.ldng(0)}})},error:()=>{n.text($t.t12),n.ldng(0)}}),$ocms.dlg(n,{width:1e3})}},$$req={init2:$req.init2,auth:{}};export default $$req;$inv.cInv=function(e){let t=$(this).closest("tr");e.stopPropagation(),!1!==t.is(".selected")&&!1!==$fis.isAuth("fds_inv",2)&&$inv.cInv2({id:e.data.id})},$inv.rMn=e=>{let t=[{lbl:$ict.req,itm:[]}];return!0===bool(e,!1)&&!0===$fis.isAuth("fds_inv",2)&&Array.prototype.push.apply(t[0].itm,[{lbl:$rct.crI,fnc:$inv.ccInv,data:{typ:"r"}},{lbl:$rct.crII,fnc:$inv.ccInv,data:{typ:"i"}}]),t.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(t)},$inv.iMnr=e=>{let t=booln(e.isFinal,!0),n=e.Id,i=booln(e.fds,!1),r=[{glyph:"glyphicon-menu-left",fnc:()=>{$fis.frm_edit().remove()}},{lbl:$ict.inv,itm:[]},{lbl:$ict.rem,itm:[]}];return!1===t&&!0===$fis.isAuth("fds_inv",2)?r[1].itm.push({lbl:$ict.ced,fnc:$inv.clCntInv}):!0===$fis.isAuth("fds_inv",1)&&r[1].itm.push({lbl:$ict.dsp,fnc:()=>$inv.disp(n,"inv")}),!0===i&&!0===t&&!0===$fis.isAuth("fds_inv",2)&&(r[1].itm.push({lbl:$ict.storno,fnc:()=>$inv.storno(n,i)}),r[1].itm.push({lbl:$ict.credit,fnc:()=>$inv.credit(n,i)})),!0===t&&!0===$fis.isAuth("fds_reminder",2)&&(r[2].itm.push({lbl:$ict.remd,fnc:()=>$inv.ccRem(n,e.InvoiceId)}),r[2].itm.push({lbl:$ict.remlst,fnc:()=>$inv.dspRem(n)})),!0===t&&!0===$fis.isAuth("fds_reminder",2)&&!1===booln(e.IsSent,!1)&&r[2].itm.push({lbl:$ict.srs,fnc:()=>$inv.srs(n)}),r.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(r)},$inv.iMn=e=>{let t=booln(e.isFinal,!0),n=e.Id,i=booln(e.fds,!1),r=[{glyph:"glyphicon-menu-left",fnc:()=>{$fis.frm_edit().remove()}},{lbl:$ict.inv,itm:[]},{lbl:$ict.rem,itm:[]}];return!1===t&&!0===$fis.isAuth("fds_inv",2)?r[1].itm.push({lbl:$ict.ced,fnc:()=>{$inv.cntInv({id:n})}}):!0===$fis.isAuth("fds_inv",1)&&r[1].itm.push({lbl:$ict.dsp,fnc:()=>$inv.disp(n,"inv")}),!0===$fis.isAuth("fds_inv",2)&&(r[1].itm.push({lbl:$ict.storno,fnc:()=>$inv.storno(n,i)}),r[1].itm.push({lbl:$ict.credit,fnc:()=>$inv.credit(n,i)})),!0===t&&!1===booln(e.IsPayed,!1)?(!0===$fis.isAuth("fds_reminder",2)&&r[2].itm.push({lbl:$ict.remd,fnc:()=>$inv.ccRem(n,e.InvoiceId)}),!0===$fis.isAuth("fds_inv",2)&&r[1].itm.push({lbl:$ict.setpyd,fnc:()=>$inv.setPyd(n)})):!0===t&&!0===booln(e.IsPayed,!1)&&"m"===(e.PaymentStatus||"")&&!0===$fis.isAuth("fds_inv",2)&&r[1].itm.push({lbl:$ict.setupd,fnc:()=>$inv.setUpd(n)}),!0===$fis.isAuth("fds_reminder",2)&&r[2].itm.push({lbl:$ict.remlst,fnc:()=>$inv.dspRem(n)}),!0===t&&!0===$fis.isAuth("fds_inv",2)&&!1===booln(e.IsSent,!1)&&r[1].itm.push({lbl:$ict.sis,fnc:()=>$inv.sis(n)}),!1===i&&r[1].itm.push({lbl:$ict.mfr,fnc:()=>$inv.mfrrel(n)}),$("#topbar").ocmsmenu(r)},$inv.emOpt=e=>"iss,p13b,ctp"+(""===((e||{}).setmode||"")?",setm":""),$inv.eM=(e,t,n)=>{let i=[];return!0!==booln(e,!1)&&!0!==booln(t,!1)||i.push({glyph:"glyphicon-menu-left",fnc:()=>{$fis.lf(!0),$fis.frm_edit().remove()}}),!0===(n||"").split(",").includes("iss")&&i.push({lbl:$ict.iss,fnc:$inv.ssave}),!0===(n||"").split(",").includes("ctp")&&i.push({lbl:$ict.ctp,fnc:$inv.sctp}),!0===(n||"").split(",").includes("p13b")&&i.push({lbl:$ict.p13b,fnc:$inv.sp13b}),!0===(n||"").split(",").includes("setm")&&i.push({lbl:$ict.setm,fnc:$inv.ssetmode}),!0===(n||"").split(",").includes("iss")&&(i.push({lbl:"Änderungshistorie",fnc:()=>$inv.d.history()}),i.push({lbl:"Änderungen verwerfen",fnc:()=>$inv.d.discard()})),!0===booln(e,!1)&&i.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(i)},$inv.d={tbl:()=>$("div.invoice_layout table.invi"),layout:()=>$("div.invoice_layout"),token:function(){return $inv.d.tbl().data("dtoken")||""},hashes:function(){let e=$inv.d.tbl().data("bai")||[],t={};return $.each(e,((e,n)=>{t[(n.Id||"").toString()]=JSON.stringify(n)})),t},seed:function(e){let t=$inv.d.layout();t.aC("freeze");let n=$ocms.postXT({url:$ocms.url("inv/dopen"),data:{payload:JSON.stringify(e)},success:e=>{$inv.d.tbl().data("dtoken",e.token).data("dver",e.version).data("dhashes",$inv.d.hashes()).data("dorder",$inv.d.order()),$fis.draft.bind(e.token,{onReady:()=>$inv.d.refresh(),onExpiring:e=>$inv.d.warnExpiry(e),onClosed:e=>$inv.d.closed(e)}),$inv.d.refresh()},error:()=>{t.rC("freeze")},complete:()=>{$inv.d.tbl().removeData("dseeding").removeData("dseedpromise")}});return $inv.d.tbl().data("dseedpromise",n),n},refresh:function(e){let t=$inv.d.token();""!==t&&$ocms.postXT({url:$ocms.url("inv/dstate"),data:{token:t},success:t=>{$inv.d.applyState(t),"function"==typeof e&&e(t)},error:e=>{e&&410===e.status&&$inv.d.closed("expired")},complete:()=>{$inv.d.layout().rC("freeze")}})},applyState:function(e){let t=$inv.d.tbl();if(t.length<1)return;let n=t.data("dver");"number"==typeof n&&"number"==typeof e.version&&e.version$$.dc("dnote").aC(e.style||"InvoiceNotes").text(e.text)))},applyItems:function(e,t){let n=e=>void 0===e?null:e;(t||[]).forEach((t=>{if(!t)return;let i=(t.Id||"").toString();if(""===i)return;let r=e.children("tbody").filter(((e,t)=>(($(t).data()||{}).Id||"").toString()===i)).first();if(r.length<1)return;let a=t.itm||[],d={},l=r.find("tr.title").first(),s=l.length?l:null;a.forEach((e=>{let t=(e.id||"").toString();if(""===t)return;d[t]=!0;let i=r.find("#itm"+t).first(),a=i.length<1;a&&(i=$$.tr(r,{id:"itm"+t,class:"itm"}));let l=i.data()||{},c=a||(l.Type||"")!==(e.typ||"")||l.net!==n(e.v)||l.net_val!==n(e.vt)||l.vat_val!==n(e.vv)||l.svcnet_val!==n(e.vs)||l.svcvat_val!==n(e.vsv)||(l.position||"")!==(null!=e.p?e.p:"");$.extend(l,{Id:t,Type:e.typ,net:n(e.v),net_val:n(e.vt),vat_val:n(e.vv),svcnet_val:n(e.vs),svcvat_val:n(e.vsv),vat:e.vat,position:null!=e.p?e.p:"",SetItmId:null!=e.SetItmId?e.SetItmId:null}),a&&$.extend(l,{htmltext:e.t,quantity:e.q}),i.data(l),s?i.prev()[0]!==s[0]&&i.insertAfter(s):r.children().first()[0]!==i[0]&&r.prepend(i),s=i,c&&$inv.rrw.call(i)})),r.find("tr.itm").each(((e,t)=>{let n=(($(t).data()||{}).Id||"").toString();""===n||d[n]||$(t).remove()}))}))},applySetDisplay:function(e,t){e.find("tr.itm").each(((e,n)=>{let i=$(n),r=((i.data()||{}).Id||"").toString();if(""===r||!Object.prototype.hasOwnProperty.call(t,r))return;let a=t[r]||{};i.tC("sethdr",bool(a.h,!1)),!1===bool(a.p,!0)&&i.find("td.currency").text("")}))},sync:function(e){let t=$inv.d.token();if(""===t){let t=$inv.d.tbl().data("dseedpromise");return t?$.when(t).then((()=>$inv.d.sync(e))):$.when()}return $inv.d.layout().aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dpatch"),data:{token:t,delta:JSON.stringify(e)},success:()=>{$inv.d.refresh()},error:e=>{$inv.d.layout().rC("freeze"),e&&410===e.status&&$inv.d.closed("expired")}})},order:function(){return($inv.d.tbl().data("bai")||[]).map((e=>(e.Id||"").toString()))},syncChanged:function(e){let t=e.data("bai")||[],n=e.data("dhashes")||{},i={},r=[],a=[],d=[];$.each(t,((e,t)=>{let a=(t.Id||"").toString(),d=JSON.stringify(t);i[a]=d,n[a]!==d&&r.push(t)})),$.each(n,(e=>{void 0===i[e]&&a.push(e)}));let l=$inv.d.order(),s=e.data("dorder")||[];return e.data("dhashes",i).data("dorder",l),r.forEach((e=>d.push($inv.d.sync({Target:"block.replace",Ref:(e.Id||"").toString(),Value:e})))),a.forEach((e=>d.push($inv.d.sync({Target:"block.remove",Ref:e})))),s.length===l.length&&s.slice().sort().join(",")===l.slice().sort().join(",")&&s.join(",")!==l.join(",")&&d.push($inv.d.sync({Target:"block.order",Value:l})),$.when.apply($,d).promise()},syncField:function(e,t){let n={invoicetitle:"title",invoiceaddress:"address",invoiceemail:"email",loc:"provisionlocation",provisionlocation:"provisionlocation",provisionperiod:"provisionperiod"}[e];n&&$inv.d.sync({Target:n,Value:t})},footer:function(e,t,n){let i=e.children("tfoot").empty();e.nextAll(".fnote").remove();let r=bool(n.p13b,!1),a=(e,t,n)=>$$.tdc("currency",$$.tr(i,{class:n||"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text(e)]),fnum(t,$rct.cst)),d=t=>$$.dc("fnote").insertAfter(e).rwText(t);a("Netto",t.total_net||0),!1===r&&$.each(t.vat||{},((e,t)=>a($rct.vat+" "+e+"%",t,"tvat"))),a("Summe",t.total_gross||0);let l=n.type||"";"i"===l?(d($rct.note2),d($rct.note4)):"c"===l?d($rct.note2):(d(string($rct.note3,[fnum(((t.service_net||0)+(t.service_vat||0))*(n.tax_servicerefund||0),$rct.cst)])).aC("ntax"),d($rct.note2),d(string($rct.note1,[fnum((t.service_net||0)+(t.service_vat||0),$rct.cst),fnum(t.service_net||0,$rct.cst),fnum(t.service_vat||0,$rct.cst)]))),!0===r&&d($rct.note13b)},validation:function(e){let t=$("div.invoice_layout");if(t.length<1)return;let n=t.children(".dvalidation");n.length<1&&(n=$$.dc("dvalidation"),t.prepend(n)),n.empty().tC("hidden",(e||[]).length<1),$.each(e||[],((e,t)=>$$.dc("dvmsg",n).aC(t.severity).text(t.message)))},preview:function(){let e=$inv.d.token();if(""===e)return;let t=$inv.d.layout(),n=($inv.d.tbl().data("new")||{}).invoiceemail||"";!1===$fis.ValidateEmail(n)&&!1===bool(confirm($ict.ivE+$ict.ivEc),!1)||(t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dpreview"),data:{token:e},success:n=>{t.rC("freeze");let i=$$.dc("imagecollection pdfpreview"),r=Math.round(.88*vh()),a=n.total;a>10&&$$.dc("note warn",i).text($ict.tpe),$.each(n.img||[],((e,t)=>{$$.dc("pdfp",i).append($$.img(t).css("max-height",(r-rpx(6)).toString()+"px"))}));for(let e=(n.img||[]).length+1;e<=a;e++)$$.dc("pdfp ph",i).append($$.dc("note",$ict.pna));$ocms.dlg(i,{size:[r,Math.round(.88*vw())],zindex:50,form:!1,button:$rct.crI,confirm:function(n){let i=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dsave"),data:{token:e},success:e=>{$ocms.postXT({url:$ocms.url("req/sconf"),data:{id:e.invid},success:t=>{i.trigger("modal_close"),!0===t.hasFile&&window.open($ocms.url("req/idoc")+"?id="+e.invid,"_blank"),$inv.d.close(),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),i.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},error:()=>{t.rC("freeze"),alert($ict.eis)}})},cancel:function(e){confirm($ict.cdI)&&($inv.d.close(),$inv.rReload())}})},error:()=>{t.rC("freeze"),alert($ict.eis)}}))},save:function(){let e=$inv.d.token();if(""===e)return;let t=$inv.d.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("inv/dsave"),data:{token:e},success:e=>{$inv.d.tbl().data("invid",e.invid)},error:()=>{alert($ict.eis)},complete:()=>{t.rC("freeze")}})},history:function(){let e=$inv.d.token();""!==e&&$ocms.postXT({url:$ocms.url("inv/dhistory"),data:{token:e},success:e=>{let t=$$.dc("dhist");if((e.history||[]).length<1)$$.dc("note",t).text("Noch keine Änderungen erfasst.");else{let n=$$.tblset({class:"invtbl fullwidth"},t);$$.tr(n.hd).append([$$.th().text("Zeit"),$$.th().text("Feld"),$$.th().text("Alt"),$$.th().text("Neu")]),$.each(e.history,((e,t)=>$$.tr(n.bdy).append([$$.tdc("keep",fdt(t.timestamp)),$$.td().text(t.target),$$.td().text(t.oldValue),$$.td().text(t.newValue)])))}$ocms.dlg(t,{width:800,form:!1})}})},discard:function(){let e=$inv.d.tbl().data("invid")||"";""!==e?!1!==confirm("Alle Änderungen verwerfen und den zuletzt gespeicherten Stand neu laden?")&&($inv.d.close(),$inv.cntInv({id:e})):alert("Es wurde noch kein Zwischenstand gespeichert, der wiederhergestellt werden könnte.")},warnExpiry:function(e){let t=Math.max(1,Math.round((e||0)/60));$fis.notifications.push({severity:"info",title:"Entwurf läuft ab",message:"Der Rechnungsentwurf läuft in etwa "+t+" Minute(n) ab. Bitte zwischenspeichern, sonst gehen die Änderungen verloren."})},closed:function(e){let t=$inv.d.token();$inv.d.tbl().removeData("dtoken"),""!==t&&$fis.draft.release(t),$fis.frm_edit().remove(),$fis.lf(!0),$fis.notifications.push({severity:"error",title:"Entwurf geschlossen",message:"expired"===e?"Der Rechnungsentwurf ist wegen Inaktivität abgelaufen. Nicht gespeicherte Änderungen sind verloren.":"Der Rechnungsentwurf wurde geschlossen."});try{$inv.rReload()}catch(e){}},close:function(){let e=$inv.d.token();""!==e&&($ocms.postXT({url:$ocms.url("inv/dclose"),data:{token:e}}),$fis.draft.release(e)),$inv.d.tbl().removeData("dtoken")}},$inv.rd={tbl:()=>$("div.invoice_layout table.invi"),layout:()=>$("div.invoice_layout"),token:function(){return $inv.rd.tbl().data("rdtoken")||""},seed:function(e){let t=$inv.rd.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dopen"),data:{payload:JSON.stringify(e)},success:e=>{$inv.rd.tbl().data("rdtoken",e.token).data("rdver",e.version),$fis.draft.bind(e.token,{onReady:()=>$inv.rd.refresh(),onExpiring:e=>$inv.rd.warnExpiry(e),onClosed:e=>$inv.rd.closed(e)}),$inv.rd.refresh()},error:()=>{t.rC("freeze")}})},refresh:function(e){let t=$inv.rd.token();""!==t&&$ocms.postXT({url:$ocms.url("rem/dstate"),data:{token:t},success:t=>{$inv.rd.applyState(t),"function"==typeof e&&e(t)},error:e=>{e&&410===e.status&&$inv.rd.closed("expired")},complete:()=>{$inv.rd.layout().rC("freeze")}})},applyState:function(e){let t=$inv.rd.tbl();if(t.length<1)return;let n=t.data("rdver");"number"==typeof n&&"number"==typeof e.version&&e.version{let t=$$[0]("p").aC("dnote intro").rwText(e);r.length?t.insertBefore(r):t.appendTo(n)})),((e||{}).closing||[]).forEach((e=>$$[0]("p").aC("dnote closing").rwText(e).appendTo(n)))},sync:function(e){let t=$inv.rd.token();""!==t&&($inv.rd.layout().aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dpatch"),data:{token:t,delta:JSON.stringify(e)},success:()=>{$inv.rd.refresh()},error:e=>{$inv.rd.layout().rC("freeze"),e&&410===e.status&&$inv.rd.closed("expired")}}))},syncField:function(e,t){if(""===$inv.rd.token())return;let n={subject:"subject",invoiceaddress:"address",invoiceemail:"email",text:"text"}[e];n&&$inv.rd.sync({Target:n,Value:t})},syncAmount:function(e,t){""!==$inv.rd.token()&&($inv.rd.sync({Target:"amount",Value:(null!=e?e:0).toString()}),$inv.rd.sync({Target:"amount_payed",Value:(null!=t?t:0).toString()}))},footer:function(e,t){let n=e.children("tfoot").empty(),i=$$.tr(n,{class:"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text("Offener Betrag")]);$$.tdc("currency",i,fnum(t.amount_open||0,$rct.cst))},validation:function(e){let t=$inv.rd.layout();if(t.length<1)return;let n=t.children(".dvalidation");n.length<1&&(n=$$.dc("dvalidation"),t.prepend(n)),n.empty().tC("hidden",(e||[]).length<1),$.each(e||[],((e,t)=>$$.dc("dvmsg",n).aC(t.severity).text(t.message)))},preview:function(){let e=$inv.rd.token();if(""===e)return;let t=$inv.rd.layout(),n=($inv.rd.tbl().data("new")||{}).invoiceemail||"";!1===$fis.ValidateEmail(n)&&!1===bool(confirm($ict.ivE+$ict.ivEc),!1)||(t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dpreview"),data:{token:e},success:n=>{t.rC("freeze");let i=$$.dc("imagecollection pdfpreview"),r=Math.round(.88*vh());$.each(n.img||[],((e,t)=>{$$.dc("pdfp",i).append($$.img(t).css("max-height",(r-rpx(6)).toString()+"px"))})),$ocms.dlg(i,{size:[r,Math.round(.88*vw())],zindex:50,form:!1,button:$ict.remd,confirm:function(n){let i=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dsave"),data:{token:e},success:e=>{$ocms.postXT({url:$ocms.url("rem/conf"),data:{id:e.remid},success:()=>{i.trigger("modal_close"),window.open($ocms.url("rem/idoc")+"?id="+e.remid,"_blank"),$inv.rd.close(),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),i.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},error:()=>{t.rC("freeze"),alert($t.f1)}})},cancel:function(e){confirm($ict.cdI)&&($inv.rd.close(),$inv.rReload())}})},error:()=>{t.rC("freeze"),alert($t.f1)}}))},save:function(){let e=$inv.rd.token();if(""===e)return;let t=$inv.rd.layout();t.aC("freeze"),$ocms.postXT({url:$ocms.url("rem/dsave"),data:{token:e},success:e=>{$inv.rd.tbl().data("remid",e.remid)},error:()=>{alert($t.f1)},complete:()=>{t.rC("freeze")}})},history:function(){let e=$inv.rd.token();""!==e&&$ocms.postXT({url:$ocms.url("rem/dhistory"),data:{token:e},success:e=>{let t=$$.dc("dhist");if((e.history||[]).length<1)$$.dc("note",t).text("Noch keine Änderungen erfasst.");else{let n=$$.tblset({class:"invtbl fullwidth"},t);$$.tr(n.hd).append([$$.th().text("Zeit"),$$.th().text("Feld"),$$.th().text("Alt"),$$.th().text("Neu")]),$.each(e.history,((e,t)=>$$.tr(n.bdy).append([$$.tdc("keep",fdt(t.timestamp)),$$.td().text(t.target),$$.td().text(t.oldValue),$$.td().text(t.newValue)])))}$ocms.dlg(t,{width:800,form:!1})}})},warnExpiry:function(e){let t=Math.max(1,Math.round((e||0)/60));$fis.notifications.push({severity:"info",title:"Entwurf läuft ab",message:"Der Mahnentwurf läuft in etwa "+t+" Minute(n) ab. Bitte zwischenspeichern, sonst gehen die Änderungen verloren."})},closed:function(e){let t=$inv.rd.token();$inv.rd.tbl().removeData("rdtoken"),""!==t&&$fis.draft.release(t),$fis.frm_edit().remove(),$fis.lf(!0),$fis.notifications.push({severity:"error",title:"Entwurf geschlossen",message:"expired"===e?"Der Mahnentwurf ist wegen Inaktivität abgelaufen. Nicht gespeicherte Änderungen sind verloren.":"Der Mahnentwurf wurde geschlossen."});try{$inv.rReload()}catch(e){}},close:function(){let e=$inv.rd.token();""!==e&&($ocms.postXT({url:$ocms.url("rem/dclose"),data:{token:e}}),$fis.draft.release(e)),$inv.rd.tbl().removeData("rdtoken")}},$inv.cInv2=function(e){let t=$$.dc("rfrm").ldng(1),n=$ocms.dlg(t,{width:1e3});n&&n.ft.rwText($rct.rq1);let i=()=>{$ocms.postXT({url:$ocms.url("req/get"),timeout:60,data:{id:e.id,mode:"r"},success:t=>{t.admin=t.admin||{};let n=$fis.lf(!0).aC("fix").rC("hd");if($fis.frm_edit().IN(),$inv.eM(!0,!0),(t.requests||[]).length<1)n.aC("fix").text($rct.nd);else{$$.dc("lh",n,$rct.mdl);let i=$$.d(),r=$$.ul({class:"rql"}).data({search:e.id,parent:t.admin.parent}).appendTo(n),a={},d=$rcol.req.lbl();$.each(t.requests||[],(function(e,t){let n=$$.li({class:"cli rli"}).data($.extend({},t)).appendTo(r),l=$$.dc("lihd",n).addClass(t.state);!0===booln(t.open,!1)&&l.append($$.sc("cbox").click((()=>{n.tC("checked"),i.find("li").rC("checked"),!0===n.is(".checked")?$inv.rMn(t.open):$inv.eM(!0)}))),l.append([$$.sc("eid",t.ExternalId),$$.sc("nme",t.Name)]),$$.dc("lidt",n).append([$$.dc("rqs").append([$$.s(d.State+": "),$$.s($rct.sts[t.State||"-"])]),$$.dc("ivn").append([$$.s(d.InvoiceId+": "),$$.s(t.InvoiceId||"- -")]),$$.dc("wda").append([$$.s(d.WorkDoneAt+": "),$$.s(fdt(t.WorkDoneAt,"dd.MM.yyyy"))])]),a[t.Id]=n})),(t.inv||[]).length>0&&($$.dc("lh",n,$rct.invs),i=$$.ul({class:"ivl"}).appendTo(n),$.each(t.inv||[],((e,t)=>{let n=$$.li({class:"cli ili"}).data($.extend({},t)).appendTo(i),a=$$.dc("lihd",n).addClass(t.invstatus);!1===booln(t.isFinal,!0)?a.append($$.sc("cbox").click((()=>{""!==(t.Id||"")&&(n.tC("checked").siblings().rC("checked"),r.find("li").rC("checked"),!0===n.is(".checked")?$inv.iMnr(t):$inv.eM(!0))}))):["","dft"].indexOf(t.invstatus)<0&&a.append($$.sc("dli").click((function(){$inv.disp(t.Id,"inv")}))),a.append($$.sc("nme",t.DocumentName||t.Id)),$$.dc("lidt",n).append([$$.dc("wda").append([$$.s(fdt(t.DateCreated,"dd.MM.yyyy"))]),$$.d().text($ict.iSt[t.invstatus]||t.invstatus)])})))}},complete:()=>{n&&n.c.trigger("modal_close")}})};$ocms.postXT({url:$ocms.url("req/pget"),timeout:90,data:{id:e.id},success:e=>{n&&n.ft.rwText($rct.rq2),i()},error:()=>{confirm($rct.rq1f)?(n&&n.ft.rwText($rct.rq2),i()):n&&n.c.trigger("modal_close")}})},$inv.ccInv=function(e){let t=(e.data||{}).typ||"r",n=$fis.lf(),i=n.children("ul.rql"),r=i.data("parent"),a=[];if(i.find("li.rli.checked").each((function(){a.push($(this).data("Id"))})),a.length<1)return void alert($rct.dnS);if("i"===t&&a.length>1)return void alert($rct.dII);let d=$fis.frm_edit(),l=$$.dc("invoice_layout",d).append($$.dc("btn sprev").click($inv.sprev)),s=$fis.cf().width()>l.width()+n.width()+20;n.tC("fix",s).tC("hd",!s),$inv.eM(!1,!0);let c=$$.dc("rfrm").ldng(1),o=$ocms.dlg(c,{width:1e3});o.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("req/iget"),timeout:60,data:{id:r,mode:"ful",typ:t,sel:a.join(",")},success:e=>{let t=$$.dc("srq",l),n=$$.tblset({class:"invi"},t);n.bdy.remove(),n.ft=$$[0]("tfoot"),e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b")),n.tbl.data($.extend({new:{},sms:{},itm:{}},{admin:e.admin,companies:e.companies,locations:e.locations}));let i=$$.tr(n.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(i,e))),n.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.requests||[],(function(t,i){if(0!==(i.Id||0)){let t=$inv.worknotes(i);i.text="i"===e.admin.type?$rct.req+jine([i.ExternalId,i.Name],": ").eine(" ",""):jine([jine([fdt(i.WorkDoneAt,"dd.MM.yy"),i.ExternalId]," - "+$rct.req+" "),t.ne(i.Name)],": \n");let r=$$.tbody(n.tbl).data($.extend({},i));$inv.rendersrq.call(r)}}));let r=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(r),n.ft.appendTo(n.tbl);let a,d,s=e.admin||{},c=(e,t,i,r,a)=>{let d=$$.dc("inpfrm",l).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",d).rwText(t);$$.dc("axf",d).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{n.tbl.data("new")[i]=e}},a),$inv.eHtml)),n.tbl.data("new")[i]=t};c("tfrm",s.invoicetitle,"invoicetitle",0,null),c("adrfrm",s.invoiceaddress,"invoiceaddress",0,null),c("locfrm","","loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),c("emailfrm",s.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",l).append($$.dc("content").text(s.sender)),s.provisionend&&(d=s.provisionstart?$rct.provP:$rct.provD,a=s.provisionstart?fdt(s.provisionstart,"dd.MM.yyyy")+" - "+fdt(s.provisionend,"dd.MM.yyyy"):fdt(s.provisionend,"dd.MM.yyyy")),c("admfrm",a,"provisionperiod",d,1),n.tbl.data("new").CustomValues=s.CustomValues||"",$$.dc("inpfrm ctpfrm",l).text(jObj(s.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv"),$inv.eM(!1,!0,$inv.emOpt(s))},complete:()=>{o.c.trigger("modal_close")}})},$inv.ccStInv=function(e){let t=e.data||{},n=$fis.lf(),i=t.id,r=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sprev)),a=$fis.cf().width()>r.width()+n.width()+20;n.tC("fix",a).tC("hd",!a),$inv.eM(!1,!0);let d=$$.dc("rfrm").ldng(1),l=$ocms.dlg(d,{width:1e3});l.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),timeout:90,data:{id:t.id},success:e=>{l&&l.ft.rwText($ict.iq2),$ocms.postXT({url:$ocms.url("inv/icget"),timeout:60,data:{id:i},success:e=>{let t=$$.dc("srq",r),n=$$.tblset({class:"invi"},t);n.bdy.remove(),n.ft=$$[0]("tfoot"),e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b")),n.tbl.data($.extend({new:{},sms:{},itm:{}},{admin:e.admin,companies:e.companies,locations:e.locations}));let i=$$.tr(n.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(i,e))),n.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.requests||[],(function(t,i){if(0!==(i.Id||0)){let t=$inv.worknotes(i);i.text="i"===e.admin.type?$rct.req+jine([i.ExternalId,i.Name],": ").eine(" ",""):jine([fdt(i.WorkDoneAt,"dd.MM.yy")+t.ne(i.Name)],": ");let r=$$.tbody(n.tbl).data($.extend({},i));$inv.rendersrq.call(r)}}));let a=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(a),n.ft.appendTo(n.tbl);let d,l,s=e.admin||{},c=(e,t,i,a,d)=>{let l=$$.dc("inpfrm",r).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{n.tbl.data("new")[i]=e}},d),$inv.eHtml)),n.tbl.data("new")[i]=t};c("tfrm",s.invoicetitle,"invoicetitle",0,null),c("adrfrm",s.invoiceaddress,"invoiceaddress",0,null),c("locfrm",s.provisionlocation,"loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),c("emailfrm",s.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",r).append($$.dc("content").text(s.sender)),s.provisionend&&(l=s.provisionstart?$rct.provP:$rct.provD,d=s.provisionstart?fdt(s.provisionstart,"dd.MM.yyyy")+" - "+fdt(s.provisionend,"dd.MM.yyyy"):fdt(s.provisionend,"dd.MM.yyyy")),c("admfrm",d,"provisionperiod",l,1),n.tbl.data("new").CustomValues=s.CustomValues||"",$$.dc("inpfrm ctpfrm",r).text(jObj(s.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv")},complete:()=>{l.c.trigger("modal_close")}})},error:()=>{l&&l.c.trigger("modal_close")}})},$inv.clCntInv=function(e){let t=$fis.lf(!1),n=[];t.find("li.ili.checked").each((function(){n.push($(this).data("Id"))})),1===n.length&&$inv.cntInv({id:n[0]})},$inv.cntInv=function(e){e=e||{};$fis.lf(!1).rC("fix").aC("hd");let t=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sedit));$inv.eM(!1,!0);let n=$$.dc("rfrm").ldng(1),i=$ocms.dlg(n,{width:1e3});i.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("inv/get"),timeout:60,data:{id:e.id},success:e=>{e.admin=e.admin||{};let n=e.inv||{},i=$$.dc("srq",t),r=$$.tblset({class:"invi"},i);r.bdy.remove(),r.ft=$$[0]("tfoot"),r.tbl.data($.extend({invid:n.Id,new:{},sms:{},itm:{},bai:[]},e));let a=$$.tr(r.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(a,e))),r.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.req||[],(function(e,t){let n=$$.tbody(r.tbl).data($.extend({},t));$inv.rendersrq.call(n)}));let d=$$.tr($$.tbody(r.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(d),r.ft.appendTo(r.tbl);let l=(e,n,i,a,d)=>{let l=$$.dc("inpfrm",t).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(n);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{r.tbl.data("new")[i]=e}},d),$inv.eHtml)),r.tbl.data("new")[i]=n};l("tfrm",n.InvoiceTitle,"invoicetitle",0,null),l("adrfrm",n.SendToAddress,"invoiceaddress",0,null),l("locfrm",n.ProvisionLocation,"loc",1,null),l("emailfrm",n.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",t).append($$.dc("content").text(e.admin.sender)),l("admfrm",n.ProvisionPeriod,"provisionperiod",!0===(n.ProvisionPeriod||"").includes("-")?$rct.provP:$rct.provD,1),r.tbl.data("new").CustomValues=n.CustomValues||"",$$.dc("inpfrm ctpfrm",t).text(jObj(n.CustomValues,"contactName")),r.tbl.children("tbody").each($inv.bdysort),r.tbl.trigger("fds.inv"),$inv.eM(!1,!0,$inv.emOpt(e.admin))},complete:()=>{i.c.trigger("modal_close")}})},$inv.cSt=function(e){e=e||{};let t=$fis.lf(),n=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.sedit)),i=$fis.cf().width()>n.width()+t.width()+20;t.tC("fix",i).tC("hd",!i),$inv.eM(!1,!0);let r=$$.dc("rfrm").ldng(1),a=$ocms.dlg(r,{width:1e3});a.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),data:{id:e.id},success:t=>{a&&a.ft.rwText($ict.iq2),$ocms.postXT({url:$ocms.url("inv/storno"),data:{id:e.id,mode:e.mode},success:e=>{e.admin=e.admin||{},e.admin.p13b=bool(e.admin.p13b||"",!0===((e.inv||{}).InvoiceOptions||"").split(",").includes("§13b"));let t=e.inv||{},i=$$.dc("srq",n),r=$$.tblset({class:"invi"},i);r.bdy.remove(),r.ft=$$[0]("tfoot"),r.tbl.data($.extend({invid:t.Id,new:{},sms:{},itm:{},bai:[]},e));let a=$$.tr(r.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(a,e))),r.tbl.on("fds.inv",$inv.invSumUpdate),$.each(e.req||[],(function(e,t){let n=$$.tbody(r.tbl).data($.extend({},t));$inv.rendersrq.call(n)}));let d=$$.tr($$.tbody(r.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(d),r.ft.appendTo(r.tbl);let l=(e,t,i,a,d)=>{let l=$$.dc("inpfrm",n).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{r.tbl.data("new")[i]=e}},d),$inv.eHtml)),r.tbl.data("new")[i]=t};l("tfrm",t.InvoiceTitle,"invoicetitle",0,null),l("adrfrm",t.SendToAddress,"invoiceaddress",0,null),l("locfrm",t.ProvisionLocation,"loc",1,null),l("emailfrm",t.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(e.admin.sender)),l("admfrm",t.ProvisionPeriod,"provisionperiod",!0===(t.ProvisionPeriod||"").includes("-")?$rct.provP:$rct.provD,1),r.tbl.data("new").CustomValues=t.CustomValues||"",$$.dc("inpfrm ctpfrm",n).text(jObj(t.CustomValues,"contactName")),r.tbl.children("tbody").each($inv.bdysort),r.tbl.trigger("fds.inv")},complete:()=>{a.c.trigger("modal_close")}})},error:()=>{a&&a.c.trigger("modal_close")}})},$inv.adrCountries=[["DE","Deutschland"],["AT","Österreich"],["CH","Schweiz"],["FR","Frankreich"],["NL","Niederlande"],["BE","Belgien"],["LU","Luxemburg"],["IT","Italien"],["ES","Spanien"],["PL","Polen"],["DK","Dänemark"],["CZ","Tschechien"],["GB","Großbritannien"],["US","USA"]],$inv.composeAddress=function(e){let t=[],n=e=>{""!==(e=(""+(e||"")).trim())&&t.push(e)};n((e=e||{}).name),""!==(""+(e.contact||"")).trim()&&n("z.Hd. "+(""+e.contact).trim()),n(e.line2||e.addressLine2),n(e.street),n(((e.postalCode||"")+" "+(e.city||"")).trim());let i=(""+(e.countryCode||"")).toUpperCase();return""!==i&&"DE"!==i&&n(i),t.join("\n")},$inv.adrCurrent=function(e){let t=jObj((e.data("new")||{}).CustomValues,"sendToAddress");if("string"==typeof t&&"{"===t.trim().charAt(0))try{t=JSON.parse(t)}catch(e){t=null}if(t&&"object"==typeof t)return t;let n=(e.data("admin")||{}).invoiceaddressData;if("string"==typeof n&&"{"===n.trim().charAt(0))try{return JSON.parse(n)}catch(e){}else if(n&&"object"==typeof n)return n;return{}},$inv.eAddress=function(e){let t=$inv.d.tbl(),n=$inv.adrCurrent(t),i=[{name:"name",label:"Name / Firma",type:"text",value:n.name||"",required:!0},{name:"contact",label:"z.Hd. (optional)",type:"text",value:n.contact||""},{name:"street",label:"Straße + Nr.",type:"text",value:n.street||""},{name:"line2",label:"Adresszusatz (optional)",type:"text",value:n.line2||n.addressLine2||""},{name:"postalCode",label:"PLZ",type:"text",value:n.postalCode||""},{name:"city",label:"Ort",type:"text",value:n.city||""},{name:"countryCode",label:"Land",type:"select",url:$inv.adrCountries,value:n.countryCode||"DE"},{name:"vatId",label:"USt-IdNr. (nur bei Firmen)",type:"text",value:n.vatId||""}],r=$$.dc("adr-conformity").append([$$.dc("hd").text("Hinweis zur DATEV-/eRechnungs-Konformität"),$$.dc("tx").text("Pflicht: Name, Straße, PLZ, Ort und Land. Die USt-IdNr. nur bei Firmen angeben — für eine Rechnung an eine Privatperson einfach leer lassen.")]);$ocms.dlgform(i,{title:"Rechnungsempfänger",addcontent:r,success:function(t){let n={name:t.name||"",contact:t.contact||"",line2:t.line2||"",street:t.street||"",postalCode:t.postalCode||"",city:t.city||"",countryCode:t.countryCode||"DE",vatId:(""+(t.vatId||"")).trim()},i=$inv.composeAddress(n);e.data&&e.data.t&&e.data.t.rwText(i),"function"==typeof(e.data||{}).change&&e.data.change(i),$inv.d.sync({Target:"address",Value:n})}})},$inv.eHtml=function(e){if(e.data&&!(e.data instanceof jQuery)&&"invoiceaddress"===e.data.nme&&$inv.d&&"function"==typeof $inv.d.token&&""!==$inv.d.token())return $inv.eAddress.call(this,e);let t=$(this),n=e.data instanceof jQuery?e.data:e.data.t,i=["invoiceemail","provisionperiod","invoicetitle"].includes(e.data.nme),r=i?[{name:"txt",label:"Text",type:"text",value:n.text()}]:[{name:"txt",label:"Text",type:"html",value:n.html(),tinymce:!0,attr:{style:"height: 300px"}}],a=e.data.change||null,d={title:t.data("dialog")||"",success:function(t){i?n.text(t.txt||""):n.html(t.txt),"function"==typeof a&&a(t.txt),$inv.d.syncField(e.data.nme,i?t.txt||"":t.txt),$inv.rd.syncField(e.data.nme,i?t.txt||"":t.txt)},tinymce:{valid_elements:"br",hidemenu:!0,hidetoolbar:!0}};if(Array.isArray(e.data.list)){let t=$$.dc("lstfrm");$.each(e.data.list,((n,i)=>{let r=$$.dc("li",t).append(""!==(e.data.lbl||"")?$$.dc("lbl").rwText(i[e.data.lbl]):null);$$.dc("adr",r).rwText(i[e.data.property]).data("val",i[e.data.property]).click((function(){let e=$(this),t=e.closest(".modal-body").find(':input[name="txt"]');t.is(".tinymce")?tinymce.get(t.attr("id")).setContent($$.s().rwText(e.data("val")).html()):"TEXTAREA"===t.prop("tagName")?t.val(e.data("val")).change():t.rwText(e.data("val"))}))})),d.addcontent=t}$ocms.dlgform(r,d)},$inv.setVat=function(e){$(this);let t=e.data,n=prompt($rct.rqV);n&&(n=parseFloat(n.replace("%","")),n>1&&(n*=.01),!1===isNaN(n)&&(t.siblings(".itm").each((function(){$(this).data().vat=fnum(n,{style:"percent"}).replace(" ","")})),$inv.t_fds_inv()))},$inv.inRow=function(e){let t=$(this),n=e.data,i={},r=$rcol.itm.clone(["SortOrder","NameOrNumber","Type","quantityhours","UnitString","net","svcnet_val","svcvat_val","net_val","vat_val","vat","Note"]),a="N"+(65536*(1+Math.random())||0).toString(16).substr(6),d=$$.tr({id:"itm_"+a.toString(),class:"itm"});$ocms.dlgform(r,{title:t.data("dialog")||"",success:function(e){d.data($.extend({Id:a},i,e)),$inv.rrw.call(d),d.insertAfter(n),$inv.t_fds_inv()},typedvalues:!0})},$inv.eRow=function(e){let t=$(this),n=e.data,i=n.data()||{},r=["SortOrder","NameOrNumber","Type","quantityhours","UnitString","net","svcnet_val","svcvat_val","net_val","vat_val","vat","Note"];i.id||""!==(i.Type||"")||r.unshift("Type");let a=$rcol.itm.clone(r).applyValues(i);a.set("Type","hidden","type"),$inv.eRw.call(t,n,i,a)},$inv.eRw=function(e,t,n){let i=$(this);$ocms.dlgform(n,{title:i.data("dialog")||"",success:function(n){let i={};""===(t.Id||"")&&(i.Id="N"+(65536*(1+Math.random())||0).toString(16).substr(6),e.attr("id","itm_"+i.Id.toString())),i.quantity=((n.quantityhours||"").toString()+" "+(n.UnitString||"").toString()).trimEnd(),e.data($.extend({},t,n,i)),console.debug("eRw success %o",e.data()),$inv.rrw.call(e),$inv.t_fds_inv()},typedvalues:!0})},$inv.bdysort=(e,t)=>{$(t).Sortable({dragItem:!1,dragHandleClass:"ico",parentident:"tr",onend:()=>{$inv.t_fds_inv()}})},$inv.rrw=function(){let e=$(this),t=e.data(),n={},i=e.is(".placeholder"),r=e.is(".hidenote"),a=e=>$$.d().append(e).html(),d=[$$.dc("ibtn insb",{title:$rct.iRb}).append(gi("indent-left")).click(e,$inv.inRow)];!1===i&&(d.unshift($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(e,$inv.eRow)),d.push($$.dc("ibtn del",{title:$rct.dR}).append(gi("trash")).click((function(t){confirm($rct.cD)&&(e.remove(),$inv.t_fds_inv())}))),"set"===(t.Type||"").toLowerCase()&&0===(t.net_val||0)&&d.push($$.dc("ibtn tosetp",{title:$rct.toSetP}).append(gi("scale")).click(e,$inv.toSetPrice)));let l=$$.dc("axf").append(d);!0===i?n={id:"",typ:"placeholder"}:!0===e.is(".itm.osum")?n={invrqid:t.InvRqId,id:"osum"+e.index(),typ:"osum",p:"",q:null,t:a(t.tbl.tbl),tt:null,v:null,vt:t.net_val,vs:t.svcnet_val,vat:t.vat,vv:t.vat_val,vsv:t.svcvat_val,det:!1}:(n={invrqid:t.InvRqId,id:t.Id||"",typ:t.Type||"other",p:"",q:null,t:"",tt:null,v:null,vt:t.net_val,vs:t.svcnet_val,vat:t.vat,vv:t.vat_val,vsv:t.svcvat_val,det:""!==(t.Note||"")&&!1===r,SetItmId:t.SetItmId||null},$$.dc("ibtn ico move",l,{title:$rct.mR}),n.p=t.position||t.SortOrder||"",""===n.id?n.t="":["Text","Title"].includes(n.typ)&&0===(t.net_val||0)?n.t=t.htmltext||("#"!==(t.NameOrNumber||"").substr(0,1)?a($$[0]("p").text(t.NameOrNumber)):"")+(t.Note||""):(n.tt=n.det?"":$$.s(t.Note||"").text(),n.q=t.quantity||(0!==(t.quantityhours||0)?fnum(t.quantityhours)+" "+(t.UnitString||""):""),n.t=t.htmltext||(n.det?a($$.s(t.NameOrNumber||""))+a($$.dc("desc").html(t.Note)):a($$.s(t.NameOrNumber||""))),n.v=t.net,n.vt=t.net_val)),""!==(t.Note||"")&&$$.dc("ibtn add",l).append(gi("object-align-left")).click((function(t){$inv.rrw.call(e.tC("hidenote"))}));let s=[$$.tdc("aux").append(l),$$.tdc("keep").text(n.p)];if(""===n.id)s.push($$.td(e,{colspan:4}).append(n.t));else{Array.prototype.push.apply(s,n.q?[$$.tdc("keep").text(n.q)]:[]);let e=e=>null==e?"":fnum(e,$rct.cst);Array.prototype.push.apply(s,[$$.tdc("txt",{colspan:n.q?1:2,title:n.tt}).append(n.t),$$.tdc("currency").text(e(n.v)),$$.tdc("currency inetval").text(e(n.vt)).attr("title",$rct.svcPart+": "+e(n.vs))])}e.empty().attr("class",i?"placeholder":"itm").aC(n.Typ).tC("sethdr","set"===(n.typ||"").toString().toLowerCase()).tC("hidenote",r).append(s),t.co=n},$inv.toSetPrice=function(e){let t=(e.data.data().Id||"").toString();""!==t&&!1!==confirm($rct.toSetPc)&&$.when($inv.t_fds_inv()).done((()=>{$inv.d.sync({Target:"item.setprice",Ref:t})}))},$inv.invSumUpdate=function(){let e=$(this),t=[],n=e.children("tbody");n.each(((e,n)=>{let i=$(n),r=i.data()||{},a=[],d=[],l=i.find("tr.itm"),s=0;i.tC("empty",l.length<1),l.each(((e,t)=>{let n=$(t).data()||{};a.push(n.co);let i=$inv.itemToContract(n),r=(n.SetItmId||"").toString();"set"!==i.type&&""!==r&&r!==i.id&&(i.setId=r),d.push(i),(void 0===n.SortOrder||null===n.SortOrder?-1:n.SortOrder)>-1&&(!1===["text","title"].includes((n.Type||"other").toLowerCase())&&s++,n.SortOrder=0,n.position=s,$inv.rrw.call(t))})),t.push({Id:r.Id,nme:r.Name,text:r.text,itm:a,items:d})}));let i=e.find("tbody:not(.empty)").length;n.find("tr.isum").tC("hidden",i<2),e.data("bai",t),""===(e.data("dtoken")||"")&&!1===bool(e.data("dseeding"),!1)&&null!=(e.data("admin")||{}).type&&(e.data("dseeding",!0),$inv.d.seed($.extend($inv.invcPayload(e.data()),{invid:e.data("invid")||""})))},$inv.worknotes=function(e){let t="";return e.steps.forEach(((e,n)=>{let i;try{i=JSON.parse(e.Data||{}).fields||[]}catch(e){console.debug(e),i=[]}!0!==Array.isArray(i||"")&&(i="object"==typeof i&&!0===Array.isArray(i.field||"")?i.field:[]),i.forEach(((e,n)=>{"Ausgeführte Arbeiten"===e.name&&(t=e.result||"")}))})),t},$inv.rendersrq=function(){let e=$(this).empty(),t=e.is(".onesum"),n=e.data(),i=$$.tr(e,{id:"srq"+n.Id}).aC("title nosort"),r=($rcol.itm.lbl(),$$.dc("axf").appendTo($$.tdc("aux",i)));$$.dc("ibtn osum",r,{title:$rct.combP}).append(gi("euro")).click((function(t){e.tC("onesum"),$inv.rendersrq.call(e),$inv.t_fds_inv()})),$$.dc("ibtn setvat",r,{title:$rct.sV}).append(gi("gbp")).click(i,$inv.setVat),$$.dc("ibtn insb",r,{title:$rct.iRb}).append(gi("indent-left")).click(i,$inv.inRow);let a,d=$$.sc("text",n.text),l=($$.td(i,{colspan:t?4:5}).append(d),["net_val","vat_val","svcnet_val","svcvat_val","net"]);if($$.dc("ibtn edit",r).data("dialog",$rcol.req.lbl().Name).append(gi("pencil")).click({t:d,change:e=>{n.text=e,$inv.t_fds_inv()}},$inv.eHtml),t&&($$.tdc("currency isumval",i),a={Id:n.Id.toString()+"_osum",net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0},a.tbl=$$.tblset({class:"stbl"})),$.each(n.items||[],((n,i)=>{let r,d={Id:i.Id,net_val:i.net_val||0,vat_val:i.vat_val||0,svcnet_val:0,svcvat_val:0,net:i.net||0,Note:i.Note||""};if("service"===i.Type.toLowerCase())d.svcnet_val=i.net_val||0,d.svcvat_val=i.vat_val||0;t?(r=$$.tr(a.tbl.bdy,{id:"itm"+i.Id,class:"sitm"}).aC(i.Type),"Text"===i.Type||"Title"===i.Type?$$.td(r,{colspan:2}).html(i.htmltext||i.Note):($$.tdc("keep",r).text(i.quantity||((i.quantityhours||0)>0?fnum(i.quantityhours)+(i.UnitString||"").eine(" ",""):"")),i.htmltext?$$.tdc("txt",r).html(i.htmltext):$$.tdc("txt",r).text(i.NameOrNumber).attr("title",i.Note)),$.each(l,((e,t)=>{a[t]+=d[t]})),r.data(d)):($.extend(d,i),r=$$.tr(e,{id:"itm"+i.Id,class:"itm"}),r.data(d),$inv.rrw.call(r))})),t){let t=$$.tr(e,{id:"itmsq"+n.Id,class:"itm osum"}).data(a);$inv.rrw.call(t)}else{let t=$$.tr(e).aC("isum nosort");$$.tdc("aux",t),$$.td(t,{colspan:4}).text($rct.iSum),$$.tdc("currency isumval",t)}},$inv.t_fds_inv=()=>{let e=$("div.invoice_layout table.invi");if(e.trigger("fds.inv"),""!==(e.data("dtoken")||""))return $inv.d.syncChanged(e);let t=e.data("dseedpromise");return t?$.when(t).then((()=>$inv.d.syncChanged(e))):$.when()},$inv.sedit=()=>{$inv.sprev(!0)},$inv.jdisp=function(e){e.stopPropagation(),e.data.id&&$inv.disp(e.data.id,e.data.typ||"")},$inv.disp=(e,t)=>{let n="";switch(t){case"inv":n="inv/rdoc";break;case"rem":n="rem/rdoc"}""!==n&&$ocms.postXT({url:$ocms.url(n),data:{id:e||"",typ:"img"},success:e=>{let t=$$.dc("imagecollection pdfpreview"),n=Math.round(.88*vh());e.id;$.each(e.img||[],(function(e,i){$$.dc("pdfp",t).append($$.img(i).css("max-height",(n-rpx(6)).toString()+"px"))})),$ocms.dlg(t,{size:[n,Math.round(.88*vw())],zindex_min:50,form:!1,exclusive:!1})}})},$inv.jdbn=function(e){$ocms.postXT({url:$ocms.url("inv/rdocn"),data:{name:e.data.id||"",typ:"img"},success:e=>{let t=$$.dc("imagecollection pdfpreview"),n=Math.round(.88*vh());e.id;$.each(e.img||[],(function(e,i){$$.dc("pdfp",t).append($$.img(i).css("max-height",(n-rpx(6)).toString()+"px"))})),$ocms.dlg(t,{size:[n,Math.round(.88*vw())],zindex:50,form:!1})}})},$inv.sp13b=()=>{var e=$("div.invoice_layout").find("table.invi"),t=e.data();t.admin.p13b=!0,!1===(t.inv.InvoiceOptions||"").split(",").includes("§13b")&&(t.inv.InvoiceOptions+=",§13b"),e.trigger("fds.inv"),$inv.d.sync({Target:"p13b",Value:t.admin.p13b})},$inv.itemToContract=function(e){let t=((e=e||{}).Type||"").toString().toLowerCase(),n=e=>e??null,i={id:(e.Id||"").toString(),type:t,title:"",desc:"",qty:"",price_net:"",total_net:n(e.net_val),vat:e.vat||""};var r;return e.co&&"osum"===e.co.typ?(i.desc=e.co.t||"",i.total_net=e.net_val||0):["text","title"].includes(t)&&0===(e.net_val||0)?(i.desc=e.htmltext||("#"!==(e.NameOrNumber||"").substr(0,1)?(r=$$[0]("p").text(e.NameOrNumber||""),$$.d().append(r).html()):"")+(e.Note||""),i.total_net=""):(e.htmltext?i.desc=e.htmltext:(i.title=e.NameOrNumber||"",i.desc=e.Note||""),i.qty=e.quantity||(0!==(e.quantityhours||0)?fnum(e.quantityhours)+(e.UnitString?" "+e.UnitString:""):""),i.price_net=n(e.net),i.total_net=n(e.net_val)),i},$inv.ssetmode=()=>{let e=$("div.invoice_layout").find("table.invi").data();e.admin=e.admin||{};let t,n=e.admin.setmode||"setprice",i=e=>$$.dc("btn",$ict.setmo[e]).tC("selected",n===e).click((()=>{t.c.trigger("modal_close"),$inv.setSetmode(e)})),r=$$.dc("choicefrm").append([i("setprice"),i("setonly")]);t=$ocms.dlg(r,{width:800})},$inv.setSetmode=e=>{if(!1===confirm($rct.toSetMc||$rct.toSetPc))return;let t="setonly"===e?"block.setonly":"block.setprice";$.when($inv.t_fds_inv()).done((()=>{$inv.d.sync({Target:t})}))},$inv.sctp=()=>{let e=$invcol.ctp;$ocms.dlgform(e,{title:$ict.ctp,success:function(e){var t=$("div.invoice_layout"),n=t.find("table.invi").data();let i={};void 0!==n.new&&"{"===(n.new.CustomValues||"").substr(0,1)&&(i=JSON.parse(n.inv.CustomValues)),i.contactName=e.name,i.contactEmail=e.email,n.new.CustomValues=JSON.stringify(i),t.find(".ctpfrm").text(ne(e.name,e.email)),$inv.d.sync({Target:"contact",Value:{name:e.name,email:e.email}})},typedvalues:!0})},$inv.invcPayload=function(e){e=e||{};let t=$.extend({},e.new),n=$.extend({},e.admin);return t.title=null!=t.invoicetitle?t.invoicetitle:t.title||"",t.provisionlocation=null!=t.loc?t.loc:t.provisionlocation||"",t.paymentterm=null!=n.paymentterms?n.paymentterms:t.paymentterm||"",n.customerid=null!=n.customerid?n.customerid:n.CustomerId,{admin:n,req:e.bai,new:t}},$inv.ssave=()=>{$inv.d.save()},$inv.sprev=e=>{$inv.d.preview()},$inv.rReload=()=>{try{let e=$("#listframe ul.rql:first").data();$inv.cInv2({id:e.search})}catch(e){}},$inv.quantChange=function(e){},$inv.storno=function(e,t){let n,i=$$.dc("choicefrm").append([$$.dc("btn","Storno ohne Details").click({id:e,mode:"simple"},(e=>{n.c.trigger("modal_close"),$inv.cSt(e.data)})),$$.dc("btn","Storno mit neuer Rechnung").click({id:e},(e=>{n.c.trigger("modal_close"),$inv.ccStInv(e)})),$$.dc("btn","Storno mit best. Rechnung").tC("inactive",!1===bool(t,!1)).click({id:e,mode:"copy"},(e=>{!0===bool(t,!1)&&(n.c.trigger("modal_close"),$inv.cSt(e.data))}))]);n=$ocms.dlg(i,{width:1e3})},$inv.credit=function(e,t){let n,i=$$.dc("choicefrm").append([$$.dc("btn","Gutschrift").click({id:e,mode:"credit"},(e=>{n.c.trigger("modal_close"),$inv.cSt(e.data)}))]);n=$ocms.dlg(i,{width:1e3})},$inv.setPyd=function(e){confirm($ict.cpyd)&&$ocms.postXT({url:$ocms.url("inv/setpyd"),timeout:60,data:{id:e},success:e=>{alert($ict.relm)},error:()=>{alert($t.f1)}})},$inv.setUpd=function(e){confirm($ict.cupd)&&$ocms.postXT({url:$ocms.url("inv/setupd"),timeout:60,data:{id:e},success:e=>{alert($ict.relm)},error:()=>{alert($t.f1)}})},$inv.resendRem=function(e){e.stopPropagation(),e.data.id&&confirm(string($ict.remresc,[e.data.name]))&&$ocms.postXT({url:$ocms.url("rem/resend"),timeout:60,data:{id:e.data.id},success:t=>{alert(string($ict.remresr,[e.data.name]))},error:()=>{alert($t.f1)}})},$inv.dspRem=function(e){let t=$$.dc("rfrm").ldng(1),n=$ocms.dlg(t,{width:1e3});n.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("inv/getrem"),timeout:60,data:{id:e,drafts:!1},success:e=>{n.ft.empty();let i=$$.tblset({class:"invtbl"},t.empty()),r=$invcol.rem2,a=$$.tr(i.hd);$$.th(a);$.each(r.fields||[],((e,t)=>{$$.th(a).text(t.label)}));let d=!1;$.each(e,((e,t)=>{d=!d;let n=$$.tr(i.bdy).tC("alt",d),a=$$.td(n);n.click((function(){n.tC("selected").siblings().rC("selected")})),!0===bool(t.hasFile,!1)&&($$.dc("idl ilbtn",a,{title:$ict.dl+"\n"+t.DocumentName}).append(gi("save-file","ico")).click({id:t.Id},$inv.downloadrem),$$.dc("idl ilbtn",a,{title:$ict.remdsp+"\n"+t.DocumentName}).append(gi("eye-open","ico")).click({id:t.Id,typ:"rem"},$inv.jdisp),$$.dc("idl ilbtn",a,{title:$ict.remres+"\n"+t.DocumentName}).append(gi("refresh","ico")).click({id:t.Id,typ:"rem",name:t.DocumentName},$inv.resendRem)),$.each(r.fields||[],((e,i)=>{let r=$$.td(n).aC(i.dtype),a=t[i.name];if("function"==typeof i.dfnc)i.dfnc.call(r,a,t);else switch(i.type||""){case"date":r.text(fdt(t[i.name],"dd.MM.yy"));break;case"datetime":r.text(fdt(t[i.name]));break;case"html":r.append($$.dc("ctw").html(a)),r.append($$.dc("ttip").html(a));break;default:r.text(t[i.name])}if("InvoiceId"===(i.name||""))r.aC("keep");switch(typeof i.title){case"function":i.title.call(r,t);break;case"string":r.attr("title",cs.title)}}))}))},error:()=>{t.empty(),n.ft.rwText($t.f1)},complete:()=>{t.ldng(0)}})},$inv.ccRem=function(e,t){$(this);$ocms.postXT({url:$ocms.url("rem/lrem"),timeout:60,data:{id:e},success:n=>{let i=$invcol.rid.clone();i.applyValues(n.ov);let r=$$.dc("ac"),a=$$.tblset({class:"fullgrid fullwidth"},r);if((n.lst||[]).length>0){$$.d({style:"margin: 1.5rem 0 1rem 0;font-size: 110%;text-decoration: underline;"}).prependTo(r).text($ict.rovlh);let e=$$.tr(a.hd);$ict.rovl.forEach(((t,n)=>$$.th(e,t))),$.each(n.lst,((e,t)=>{$$.tr(a.bdy).append([$$.tdc("keep",t.subject),$$.tdc("currency",fnum(t.amount,$rct.cst)),$$.tdc("currency",fnum(t.amount_payed,$rct.cst)),$$.tdc("keep",fdt(t.DateFinalized,"dd.MM.yy"))])}))}else $$.td($$.tr(a.bdy),$ict.nd);$ocms.dlgform(i,{addcontent:r,title:string($ict.remdt,[t||"?"]),success:function(t){$inv.ccRem_s2(e,t)},typedvalues:!0})}})},$inv.rRemRw=function(e){let t=$(this),n=e.rm||{};t.empty().data({invoiceid:n.invoiceid,invoicedate:n.invoicedate,amount:n.amount,amount_payed:n.amount_payed});let i=$$.dc("axf").append($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(t,$inv.eRowR));t.append([$$.tdc("aux").append(i),$$.tdc("keep",n.invoiceid),$$.tdc("keep",fdt(n.invoicedate,"dd.MM.yy")),$$.tdc("currency",fnum(n.amount,$rct.cst)),$$.tdc("currency",fnum(n.amount_payed,$rct.cst)),$$.tdc("currency",fnum(n.amount-n.amount_payed,$rct.cst))])},$inv.eRowR=function(e){let t=$(this),n=e.data,i=n.data()||{},r=$invcol.rem.clone().applyValues(i);$ocms.dlgform(r,{title:t.data("dialog")||"",success:function(e){let i=t.closest("table"),r=i.data();$.extend(r.rm,e),i.data(r),$inv.rRemRw.call(n,r),$inv.rd.syncAmount(r.rm.amount,r.rm.amount_payed)},typedvalues:!0})},$inv.ccRem_s2=function(e,t){$fis.lf(!1).rC("fix").aC("hd");let n=$$.dc("invoice_layout",$fis.frm_edit()).append($$.dc("btn sprev").click($inv.rprev));$inv.eM(!1,!0);$$.dc("rfrm").ldng(1);$ocms.postXT({url:$ocms.url("rem/get"),timeout:60,data:$.extend({id:e},t),success:e=>{let t=e.rm||{},i=$$.dc("srq",n),r=$$.tblset({class:"invi"},i);r.ft=$$[0]("tfoot"),r.tbl.data($.extend({invid:t.invid,new:{}},e));let a=$$.tr(r.hd).aC("shd").append([$$.th().aC("aux")]);$ict.remHR.forEach((e=>$$.th(a,e))),$inv.rRemRw.call($$.tr(r.bdy),r.tbl.data()),r.ft.appendTo(r.tbl);let d=(e,t,i,a,d)=>{let l=$$.dc("inpfrm",n).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),s=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:s,nme:i,change:e=>{r.tbl.data("new")[i]=e}},d),$inv.eHtml)),r.tbl.data("new")[i]=t};d("tfrm",t.subject,"subject",0,null),d("adrfrm",t.invoiceaddress,"invoiceaddress",0,null),d("emailfrm",t.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(t.sender)),r.tbl.children("tbody").each($inv.bdysort),r.tbl.trigger("fds.inv");let l=r.tbl.data("new");l.amount=t.amount,l.amount_payed=t.amount_payed,$inv.rd.seed({rem:{invid:t.invid,type:t.type,invoiceid:t.invoiceid,invoicedate:t.invoicedate},new:l})},complete:()=>{}})},$inv.rprev=()=>{$inv.rd.preview()},$inv.sis=e=>{confirm($ict.sisc)&&$ocms.postXT({url:$ocms.url("inv/sis"),data:{id:e||""},success:e=>{}})},$inv.srs=e=>{confirm($ict.srsc)&&$ocms.postXT({url:$ocms.url("rem/srs"),data:{id:e||""},success:e=>{}})},$inv.mfrrel=e=>{$("#contentframe").ldng(),$ocms.postXT({url:$ocms.url("inv/mfrrel"),data:{id:e||""},success:e=>{$inv.rerenderinv()},complete:()=>{$("#contentframe").ldng(0)}})}; \ No newline at end of file diff --git a/Fuchs/wwwroot/web/fis.req.min.css b/Fuchs/wwwroot/web/fis.req.min.css index 0acb743..d02dbaf 100644 --- a/Fuchs/wwwroot/web/fis.req.min.css +++ b/Fuchs/wwwroot/web/fis.req.min.css @@ -1 +1 @@ -span.cla,td.cla{cursor:pointer}.invfrm>table td{max-height:2.5rem;background-color:#f4f4f4}.invfrm>table td.sh_s{color:#bf4b06}.invfrm>table td.av{border:2px solid red}.invfrm>table td.av+td.vsel select{display:block}.invfrm>table td.tags .tag{display:inline-block;padding:.1rem .3rem;background:#fff;margin-top:.2rem;border:1px solid #ccc;border-radius:.3rem;font-weight:300;font-size:.8rem;text-rendering:geometricprecision}.invfrm>table td.tags .tag.abrechnung_projekt,.invfrm>table td.tags .tag.angebot_erstellt{background-color:#1a237e;color:#fff}.invfrm>table td.tags .tag.auftrag_erhalten{background-color:#427323}.invfrm>table td.tags .tag.folgeauftrag{background-color:#00acc1;color:#fff}.invfrm>table td.tags .tag.gutschrift,.invfrm>table td.tags .tag.korrektur{background-color:#d81b60}.invfrm>table td.tags .tag.rechnung_erledigt{background-color:#427323;color:#fff}.invfrm>table td.tags .tag.topkunde__vip_kunde{background-color:#000;color:#fff}.invfrm>table td.tags .tag.zur_rechnungsstellung{background-color:#ffd600}.invfrm>table td.tags .tag.fibu_bitte_mit_doris_abstimmen{background-color:#d81b60;font-size:1rem;padding:.15rem .5rem}.invfrm>table td>.ctw{display:block;position:relative;max-height:2.5rem;overflow:hidden;text-overflow:ellipsis}.invfrm>table tr.tbhd td{opacity:.3}.invfrm>table tr.alt+tr:not(.alt) td,.invfrm>table tr:not(.alt)+tr.alt td{border-top:1px solid #727272}.invfrm>table tr th{background-color:rgba(27,67,121,.6);color:#fff;text-align:left}.invfrm>table tr:hover td{border-top-color:#ff4500!important;border-top-width:2px}.invfrm>table tr.alt td{background-color:#e5e5e5;border-color:#ccc}.invfrm>table tr.alt td.hl{background-color:#ffffe0}.invfrm>table tr.child td.name{color:#56a532;position:relative;padding-left:1.8rem}.invfrm>table tr.child td.name::after{content:"";background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmcgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZS8+PGcgZGF0YS1uYW1lPSIxNS1BcnJvdy1kaXJlY3Rpb24tcG9pbnRlciIgaWQ9Il8xNS1BcnJvdy1kaXJlY3Rpb24tcG9pbnRlciI+PHBvbHlsaW5lIHBvaW50cz0iMjEgMzEgMjcgMjQgMjEgMTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDoycHgiLz48cG9seWxpbmUgcG9pbnRzPSIyNiAyNCA1IDI0IDUgMSIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjJweCIvPjwvZz48L3N2Zz4=) center center no-repeat;position:absolute;left:.3rem;width:1rem;height:1rem;top:.7rem}.rfrm{min-width:200px;min-height:200px}table.if{border-collapse:collapse;margin:1rem 0;background:#fff}table.if tr:nth-child(2n+1) td{background-color:#f9f9f9}table.if tr.title td{background-color:#56a532;color:#fff}table.if tr.title td .eid{font-weight:700;margin:0 1rem 0 .5rem;font-size:140%}table.if tr.title td .nme{font-size:110%}table.if tr.shd td{font-style:italic;color:#bbb;background-color:#fff!important;font-size:90%}table.if td{padding:.2rem .35rem;border:1px solid #ddd}table.if td.currency,table.if td.num,table.if th.currency,table.if th.num{text-align:right;white-space:nowrap}table.if td.keep,table.if th.keep{white-space:nowrap}#listframe .lh{margin:1.5rem 0 1.25rem 1.5rem;text-decoration:underline;font-size:1rem;font-weight:bolder}#listframe li.cli{border-bottom:1px solid #ccc;margin-bottom:1rem;list-style:none}#listframe li.cli .lidt,#listframe li.cli .lihd{padding:0 .5rem .5rem 3rem;position:relative;display:block}#listframe li.cli .lidt .nme,#listframe li.cli .lihd .nme{display:block;margin-top:.5rem}#listframe li.cli .lidt>div{display:block}#listframe li.cli .lidt>div.ivn{max-width:30rem}#listframe li.cli .cbox{height:.85rem;width:.85rem;display:inline-block;position:absolute;left:0;top:0}#listframe li.cli .cbox::before{content:"\e157";font-family:"Glyphicons Halflings";font-size:24px;font-style:normal;font-weight:400;line-height:1;cursor:pointer}#listframe li.cli .dli{height:.85rem;width:.85rem;display:inline-block;position:absolute;left:0;top:0}#listframe li.cli .dli::before{content:"\e166";font-family:"Glyphicons Halflings";font-size:24px;font-style:normal;font-weight:400;line-height:1;cursor:pointer}#listframe li.cli.checked .cbox::before{content:"\e067"}@keyframes fis_spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}.edit_frm .invoice_layout{margin:2rem 2rem 2rem auto;width:50rem;border:1px solid #eee;padding:25.5rem 3rem 3rem;box-shadow:4px 4px 9px rgba(50,50,50,.3);position:relative}.edit_frm .invoice_layout .axf{font-size:1rem;display:none;position:absolute;right:100%;height:100%;min-height:1.5rem;min-width:2rem;background:#f0ffe2;border:1px solid #ccc;border-top-left-radius:.2rem;border-bottom-left-radius:.2rem;top:0;width:auto;max-height:1.5rem;overflow:hidden;padding:.1rem}.edit_frm .invoice_layout .axf>.ibtn{cursor:pointer;height:100%;width:1.5rem;display:inline-block;position:relative}.edit_frm .invoice_layout .sndfrm{position:absolute;font-size:.7rem;color:#727272;top:4.7rem;left:3rem;width:auto;height:auto;user-select:none}.edit_frm .invoice_layout .emailfrm{position:absolute;font-size:.7rem;top:.5rem;left:.5rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .emailfrm .content{color:#000}.edit_frm .invoice_layout .emailfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .emailfrm:hover div.axf{display:block}.edit_frm .invoice_layout .admfrm{position:absolute;right:3rem;top:9rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .admfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .admfrm .content{color:#000}.edit_frm .invoice_layout .admfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .admfrm:hover div.axf{display:block}.edit_frm .invoice_layout .ctpfrm{position:absolute;right:3rem;top:14rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .ctpfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .ctpfrm .content{color:#000}.edit_frm .invoice_layout .ctpfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .ctpfrm:hover div.axf{display:block}.edit_frm .invoice_layout .adrfrm{position:absolute;left:3rem;top:6rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .adrfrm:hover div.axf{display:block}.edit_frm .invoice_layout .locfrm{position:absolute;left:3rem;top:18.5rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .locfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .locfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .locfrm:hover div.axf{display:block}.edit_frm .invoice_layout .tfrm,.edit_frm .invoice_layout>div.title{position:absolute;left:3rem;top:15rem;font-size:2rem;cursor:pointer}.edit_frm .invoice_layout .tfrm:hover div.axf,.edit_frm .invoice_layout>div.title:hover div.axf{display:block}.edit_frm .invoice_layout div.fnote{margin:1rem 0}.edit_frm .invoice_layout p+table.invi,.edit_frm .invoice_layout table.invi+p{margin-top:2.5rem}.edit_frm .invoice_layout table.invi{border-collapse:separate;border-spacing:0;border-color:#fff;width:100%;max-width:100%}.edit_frm .invoice_layout table.invi>tbody>tr.hidden{display:none}.edit_frm .invoice_layout table.invi>tbody>tr:nth-child(2n+1) td{background-color:#fbfbfb;border-color:#fbfbfb}.edit_frm .invoice_layout table.invi>tbody>tr.title>td{background:#fff;border-color:#fff;border-top:1.5px solid #000}.edit_frm .invoice_layout table.invi>tbody>tr.sethdr td.txt{font-weight:700}.edit_frm .invoice_layout table.invi td.currency,.edit_frm .invoice_layout table.invi td.num,.edit_frm .invoice_layout table.invi th.currency,.edit_frm .invoice_layout table.invi th.num{text-align:right;white-space:nowrap}.edit_frm .invoice_layout table.invi td.keep,.edit_frm .invoice_layout table.invi th.keep{white-space:nowrap}.edit_frm .invoice_layout table.invi table.stbl td,.edit_frm .invoice_layout table.invi table.stbl th{padding:.3rem .5rem}.edit_frm .invoice_layout table.invi table.stbl td:first-child,.edit_frm .invoice_layout table.invi table.stbl th:first-child{padding-left:0}.edit_frm .invoice_layout table.invi table.stbl td:last-child,.edit_frm .invoice_layout table.invi table.stbl th:last-child{padding-right:0}.edit_frm .invoice_layout table.invi>tbody>tr>td,.edit_frm .invoice_layout table.invi>tbody>tr>th,.edit_frm .invoice_layout table.invi>tfoot>tr>td,.edit_frm .invoice_layout table.invi>tfoot>tr>th,.edit_frm .invoice_layout table.invi>thead>tr>td,.edit_frm .invoice_layout table.invi>thead>tr>th,.edit_frm .invoice_layout table.invi>tr>td,.edit_frm .invoice_layout table.invi>tr>th{border-width:1px;padding:.3rem .5rem;border-left:none!important;border-right:none!important}.edit_frm .invoice_layout table.invi>tbody>tr>td.aux,.edit_frm .invoice_layout table.invi>tbody>tr>th.aux,.edit_frm .invoice_layout table.invi>tfoot>tr>td.aux,.edit_frm .invoice_layout table.invi>tfoot>tr>th.aux,.edit_frm .invoice_layout table.invi>thead>tr>td.aux,.edit_frm .invoice_layout table.invi>thead>tr>th.aux,.edit_frm .invoice_layout table.invi>tr>td.aux,.edit_frm .invoice_layout table.invi>tr>th.aux{width:0;max-width:0;min-width:0;position:relative;padding:0}.edit_frm .invoice_layout table.invi>tbody>tr>th,.edit_frm .invoice_layout table.invi>tfoot>tr>th,.edit_frm .invoice_layout table.invi>thead>tr>th,.edit_frm .invoice_layout table.invi>tr>th{text-align:left;font-weight:300;background-color:#fff;border-color:#fff;font-size:.8rem;font-style:italic;border-top-style:none;border-bottom-style:none}.edit_frm .invoice_layout table.invi>tbody>tr>td,.edit_frm .invoice_layout table.invi>tfoot>tr>td,.edit_frm .invoice_layout table.invi>thead>tr>td,.edit_frm .invoice_layout table.invi>tr>td{vertical-align:top;font-weight:400;background-color:#f8f8f8;border-color:#f8f8f8;border-top-style:solid;border-bottom-style:solid;user-select:none}.edit_frm .invoice_layout table.invi>tbody>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>tfoot>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>thead>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>tr:hover>td.aux>.axf{display:inline-flex}.edit_frm .invoice_layout table.invi>tbody>tr.isum>td,.edit_frm .invoice_layout table.invi>tfoot>tr.isum>td,.edit_frm .invoice_layout table.invi>thead>tr.isum>td,.edit_frm .invoice_layout table.invi>tr.isum>td{border-top:1px solid #000;background:#fff}.edit_frm .invoice_layout table.invi>tbody>tr.sep>td,.edit_frm .invoice_layout table.invi>tfoot>tr.sep>td,.edit_frm .invoice_layout table.invi>thead>tr.sep>td,.edit_frm .invoice_layout table.invi>tr.sep>td{background:#fff}.edit_frm .invoice_layout table.invi>tbody>tr.tsum td,.edit_frm .invoice_layout table.invi>tfoot>tr.tsum td,.edit_frm .invoice_layout table.invi>thead>tr.tsum td,.edit_frm .invoice_layout table.invi>tr.tsum td{font-weight:600;border-top:1px solid #000;border-bottom:1px solid #000}.edit_frm .invoice_layout table.invi .sortable>tr>td.aux .ico.move{background:url(data:image/svg+xml;base64,PHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMiAzMiIgaWQ9IkxheWVyXzQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48cG9seWdvbiBmaWxsPSJub25lIiBwb2ludHM9IjE2LDMxIDgsMTggMjQsMTggICAgICIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iI0RERERERCIvPjxwb2x5Z29uIGZpbGw9Im5vbmUiIHBvaW50cz0iMTYsMSA4LDE0IDI0LDE0ICAgICAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiNEREREREQiLz48L2c+PC9zdmc+) center center/contain no-repeat border-box}.edit_frm .invoice_layout table.invi .sortable>tr>td.aux .ico.move:hover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzIgMzIiIGlkPSJMYXllcl80IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGc+PHBvbHlnb24gZmlsbD0ibm9uZSIgcG9pbnRzPSIxNiwzMSA4LDE4IDI0LDE4ICAgICAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiLz48cG9seWdvbiBmaWxsPSJub25lIiBwb2ludHM9IjE2LDEgOCwxNCAyNCwxNCAgICAgIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9nPjwvc3ZnPg==)}.edit_frm .invoice_layout table.invi .sortable>tr.sortactive>td.ico{cursor:move}.edit_frm .invoice_layout .btn{background:url("") center center/contain no-repeat content-box #fff;position:absolute;top:.2rem;right:.2rem;height:3rem;width:3rem;padding:.1rem;z-index:11}.edit_frm .invoice_layout .btn.sprev{background-image:url(data:image/png;base64,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)}.edit_frm .invoice_layout .btn.sdoc{background-image:url(data:image/png;base64,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)}.edit_frm .invoice_layout.freeze::before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(50,50,50,.3);user-select:none;cursor:wait;z-index:10;pointer-events:none}.edit_frm .invoice_layout.freeze::before tr:hover>td.aux>.axf{display:inline-flex}.edit_frm .invoice_layout.freeze::after{content:"";position:absolute;top:50%;left:50%;width:3rem;height:3rem;margin:-1.5rem 0 0 -1.5rem;border:.4rem solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;z-index:11;pointer-events:none;animation:.8s linear infinite fis_spin}.edit_frm .invoice_layout .dvalidation{margin:0 0 1rem}.edit_frm .invoice_layout .dvalidation.hidden{display:none}.edit_frm .invoice_layout .dvalidation .dvmsg{padding:.4rem .7rem;margin:.25rem 0;border-radius:.2rem;font-size:.9rem;border-left:4px solid #999;background:#f5f5f5}.edit_frm .invoice_layout .dvalidation .dvmsg.error{border-left-color:#c0392b;background:#fdecea;color:#922}.edit_frm .invoice_layout .dvalidation .dvmsg.warning{border-left-color:#e0a800;background:#fff8e1;color:#7a5c00}.edit_frm .invoice_layout .dvalidation .dvmsg.info{border-left-color:#3498db;background:#eaf4fb;color:#1c5a82}.dhist .invtbl{width:100%}.dhist td,.dhist th{padding:.3rem .6rem;text-align:left;vertical-align:top}.dhist tbody tr:nth-child(even){background:#fafafa}.modal-body .lstfrm{display:block;position:relative}.modal-body .lstfrm .li{display:inline-block;background-color:#fff;border:1px solid #e0e0e0;padding:1.7rem .5rem .5rem;border-radius:.2rem;cursor:pointer;position:relative;margin:0 .5rem .5rem 0;box-shadow:1px 1px 3px rgba(50,50,50,.1)}.modal-body .lstfrm .li .lbl{position:absolute;background:#727272;color:#fff;font-size:.8rem;left:0;top:0;right:0;padding:.2rem;border-top-left-radius:inherit;border-top-right-radius:inherit} \ No newline at end of file +span.cla,td.cla{cursor:pointer}.invfrm>table td{max-height:2.5rem;background-color:#f4f4f4}.invfrm>table td.sh_s{color:#bf4b06}.invfrm>table td.av{border:2px solid red}.invfrm>table td.av+td.vsel select{display:block}.invfrm>table td.tags .tag{display:inline-block;padding:.1rem .3rem;background:#fff;margin-top:.2rem;border:1px solid #ccc;border-radius:.3rem;font-weight:300;font-size:.8rem;text-rendering:geometricprecision}.invfrm>table td.tags .tag.abrechnung_projekt,.invfrm>table td.tags .tag.angebot_erstellt{background-color:#1a237e;color:#fff}.invfrm>table td.tags .tag.auftrag_erhalten{background-color:#427323}.invfrm>table td.tags .tag.folgeauftrag{background-color:#00acc1;color:#fff}.invfrm>table td.tags .tag.gutschrift,.invfrm>table td.tags .tag.korrektur{background-color:#d81b60}.invfrm>table td.tags .tag.rechnung_erledigt{background-color:#427323;color:#fff}.invfrm>table td.tags .tag.topkunde__vip_kunde{background-color:#000;color:#fff}.invfrm>table td.tags .tag.zur_rechnungsstellung{background-color:#ffd600}.invfrm>table td.tags .tag.fibu_bitte_mit_doris_abstimmen{background-color:#d81b60;font-size:1rem;padding:.15rem .5rem}.invfrm>table td>.ctw{display:block;position:relative;max-height:2.5rem;overflow:hidden;text-overflow:ellipsis}.invfrm>table tr.tbhd td{opacity:.3}.invfrm>table tr.alt+tr:not(.alt) td,.invfrm>table tr:not(.alt)+tr.alt td{border-top:1px solid #727272}.invfrm>table tr th{background-color:rgba(27,67,121,.6);color:#fff;text-align:left}.invfrm>table tr:hover td{border-top-color:#ff4500!important;border-top-width:2px}.invfrm>table tr.alt td{background-color:#e5e5e5;border-color:#ccc}.invfrm>table tr.alt td.hl{background-color:#ffffe0}.invfrm>table tr.child td.name{color:#56a532;position:relative;padding-left:1.8rem}.invfrm>table tr.child td.name::after{content:"";background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmcgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZS8+PGcgZGF0YS1uYW1lPSIxNS1BcnJvdy1kaXJlY3Rpb24tcG9pbnRlciIgaWQ9Il8xNS1BcnJvdy1kaXJlY3Rpb24tcG9pbnRlciI+PHBvbHlsaW5lIHBvaW50cz0iMjEgMzEgMjcgMjQgMjEgMTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDoycHgiLz48cG9seWxpbmUgcG9pbnRzPSIyNiAyNCA1IDI0IDUgMSIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjJweCIvPjwvZz48L3N2Zz4=) center center no-repeat;position:absolute;left:.3rem;width:1rem;height:1rem;top:.7rem}.rfrm{min-width:200px;min-height:200px}table.if{border-collapse:collapse;margin:1rem 0;background:#fff}table.if tr:nth-child(2n+1) td{background-color:#f9f9f9}table.if tr.title td{background-color:#56a532;color:#fff}table.if tr.title td .eid{font-weight:700;margin:0 1rem 0 .5rem;font-size:140%}table.if tr.title td .nme{font-size:110%}table.if tr.shd td{font-style:italic;color:#bbb;background-color:#fff!important;font-size:90%}table.if td{padding:.2rem .35rem;border:1px solid #ddd}table.if td.currency,table.if td.num,table.if th.currency,table.if th.num{text-align:right;white-space:nowrap}table.if td.keep,table.if th.keep{white-space:nowrap}#listframe .lh{margin:1.5rem 0 1.25rem 1.5rem;text-decoration:underline;font-size:1rem;font-weight:bolder}#listframe li.cli{border-bottom:1px solid #ccc;margin-bottom:1rem;list-style:none}#listframe li.cli .lidt,#listframe li.cli .lihd{padding:0 .5rem .5rem 3rem;position:relative;display:block}#listframe li.cli .lidt .nme,#listframe li.cli .lihd .nme{display:block;margin-top:.5rem}#listframe li.cli .lidt>div{display:block}#listframe li.cli .lidt>div.ivn{max-width:30rem}#listframe li.cli .cbox{height:.85rem;width:.85rem;display:inline-block;position:absolute;left:0;top:0}#listframe li.cli .cbox::before{content:"\e157";font-family:"Glyphicons Halflings";font-size:24px;font-style:normal;font-weight:400;line-height:1;cursor:pointer}#listframe li.cli .dli{height:.85rem;width:.85rem;display:inline-block;position:absolute;left:0;top:0}#listframe li.cli .dli::before{content:"\e166";font-family:"Glyphicons Halflings";font-size:24px;font-style:normal;font-weight:400;line-height:1;cursor:pointer}#listframe li.cli.checked .cbox::before{content:"\e067"}@keyframes fis_spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}.edit_frm .invoice_layout{margin:2rem 2rem 2rem auto;width:50rem;border:1px solid #eee;padding:25.5rem 3rem 3rem;box-shadow:4px 4px 9px rgba(50,50,50,.3);position:relative}.edit_frm .invoice_layout .axf{font-size:1rem;display:none;position:absolute;right:100%;height:100%;min-height:1.5rem;min-width:2rem;background:#f0ffe2;border:1px solid #ccc;border-top-left-radius:.2rem;border-bottom-left-radius:.2rem;top:0;width:auto;max-height:1.5rem;overflow:hidden;padding:.1rem}.edit_frm .invoice_layout .axf>.ibtn{cursor:pointer;height:100%;width:1.5rem;display:inline-block;position:relative}.edit_frm .invoice_layout .sndfrm{position:absolute;font-size:.7rem;color:#727272;top:4.7rem;left:3rem;width:auto;height:auto;user-select:none}.edit_frm .invoice_layout .emailfrm{position:absolute;font-size:.7rem;top:.5rem;left:.5rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .emailfrm .content{color:#000}.edit_frm .invoice_layout .emailfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .emailfrm:hover div.axf{display:block}.edit_frm .invoice_layout .admfrm{position:absolute;right:3rem;top:9rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .admfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .admfrm .content{color:#000}.edit_frm .invoice_layout .admfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .admfrm:hover div.axf{display:block}.edit_frm .invoice_layout .ctpfrm{position:absolute;right:3rem;top:14rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .ctpfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .ctpfrm .content{color:#000}.edit_frm .invoice_layout .ctpfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .ctpfrm:hover div.axf{display:block}.edit_frm .invoice_layout .adrfrm{position:absolute;left:3rem;top:6rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .adrfrm:hover div.axf{display:block}.edit_frm .invoice_layout .locfrm{position:absolute;left:3rem;top:18.5rem;width:auto;height:auto;cursor:pointer}.edit_frm .invoice_layout .locfrm .ahd{display:block;color:#727272;margin:0 0 .2rem}.edit_frm .invoice_layout .locfrm .content:empty::before{content:"-";min-width:5rem;height:1rem;display:block;position:absolute}.edit_frm .invoice_layout .locfrm:hover div.axf{display:block}.edit_frm .invoice_layout .tfrm,.edit_frm .invoice_layout>div.title{position:absolute;left:3rem;top:15rem;font-size:2rem;cursor:pointer}.edit_frm .invoice_layout .tfrm:hover div.axf,.edit_frm .invoice_layout>div.title:hover div.axf{display:block}.edit_frm .invoice_layout div.fnote{margin:1rem 0}.edit_frm .invoice_layout p+table.invi,.edit_frm .invoice_layout table.invi+p{margin-top:2.5rem}.edit_frm .invoice_layout table.invi{border-collapse:separate;border-spacing:0;border-color:#fff;width:100%;max-width:100%}.edit_frm .invoice_layout table.invi>tbody>tr.hidden{display:none}.edit_frm .invoice_layout table.invi>tbody>tr:nth-child(2n+1) td{background-color:#fbfbfb;border-color:#fbfbfb}.edit_frm .invoice_layout table.invi>tbody>tr.title>td{background:#fff;border-color:#fff;border-top:1.5px solid #000}.edit_frm .invoice_layout table.invi>tbody>tr.sethdr td.txt{font-weight:700}.edit_frm .invoice_layout table.invi td.currency,.edit_frm .invoice_layout table.invi td.num,.edit_frm .invoice_layout table.invi th.currency,.edit_frm .invoice_layout table.invi th.num{text-align:right;white-space:nowrap}.edit_frm .invoice_layout table.invi td.keep,.edit_frm .invoice_layout table.invi th.keep{white-space:nowrap}.edit_frm .invoice_layout table.invi table.stbl td,.edit_frm .invoice_layout table.invi table.stbl th{padding:.3rem .5rem}.edit_frm .invoice_layout table.invi table.stbl td:first-child,.edit_frm .invoice_layout table.invi table.stbl th:first-child{padding-left:0}.edit_frm .invoice_layout table.invi table.stbl td:last-child,.edit_frm .invoice_layout table.invi table.stbl th:last-child{padding-right:0}.edit_frm .invoice_layout table.invi>tbody>tr>td,.edit_frm .invoice_layout table.invi>tbody>tr>th,.edit_frm .invoice_layout table.invi>tfoot>tr>td,.edit_frm .invoice_layout table.invi>tfoot>tr>th,.edit_frm .invoice_layout table.invi>thead>tr>td,.edit_frm .invoice_layout table.invi>thead>tr>th,.edit_frm .invoice_layout table.invi>tr>td,.edit_frm .invoice_layout table.invi>tr>th{border-width:1px;padding:.3rem .5rem;border-left:none!important;border-right:none!important}.edit_frm .invoice_layout table.invi>tbody>tr>td.aux,.edit_frm .invoice_layout table.invi>tbody>tr>th.aux,.edit_frm .invoice_layout table.invi>tfoot>tr>td.aux,.edit_frm .invoice_layout table.invi>tfoot>tr>th.aux,.edit_frm .invoice_layout table.invi>thead>tr>td.aux,.edit_frm .invoice_layout table.invi>thead>tr>th.aux,.edit_frm .invoice_layout table.invi>tr>td.aux,.edit_frm .invoice_layout table.invi>tr>th.aux{width:0;max-width:0;min-width:0;position:relative;padding:0}.edit_frm .invoice_layout table.invi>tbody>tr>th,.edit_frm .invoice_layout table.invi>tfoot>tr>th,.edit_frm .invoice_layout table.invi>thead>tr>th,.edit_frm .invoice_layout table.invi>tr>th{text-align:left;font-weight:300;background-color:#fff;border-color:#fff;font-size:.8rem;font-style:italic;border-top-style:none;border-bottom-style:none}.edit_frm .invoice_layout table.invi>tbody>tr>td,.edit_frm .invoice_layout table.invi>tfoot>tr>td,.edit_frm .invoice_layout table.invi>thead>tr>td,.edit_frm .invoice_layout table.invi>tr>td{vertical-align:top;font-weight:400;background-color:#f8f8f8;border-color:#f8f8f8;border-top-style:solid;border-bottom-style:solid;user-select:none}.edit_frm .invoice_layout table.invi>tbody>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>tfoot>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>thead>tr:hover>td.aux>.axf,.edit_frm .invoice_layout table.invi>tr:hover>td.aux>.axf{display:inline-flex}.edit_frm .invoice_layout table.invi>tbody>tr.isum>td,.edit_frm .invoice_layout table.invi>tfoot>tr.isum>td,.edit_frm .invoice_layout table.invi>thead>tr.isum>td,.edit_frm .invoice_layout table.invi>tr.isum>td{border-top:1px solid #000;background:#fff}.edit_frm .invoice_layout table.invi>tbody>tr.sep>td,.edit_frm .invoice_layout table.invi>tfoot>tr.sep>td,.edit_frm .invoice_layout table.invi>thead>tr.sep>td,.edit_frm .invoice_layout table.invi>tr.sep>td{background:#fff}.edit_frm .invoice_layout table.invi>tbody>tr.tsum td,.edit_frm .invoice_layout table.invi>tfoot>tr.tsum td,.edit_frm .invoice_layout table.invi>thead>tr.tsum td,.edit_frm .invoice_layout table.invi>tr.tsum td{font-weight:600;border-top:1px solid #000;border-bottom:1px solid #000}.edit_frm .invoice_layout table.invi .sortable>tr>td.aux .ico.move{background:url(data:image/svg+xml;base64,PHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMiAzMiIgaWQ9IkxheWVyXzQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48cG9seWdvbiBmaWxsPSJub25lIiBwb2ludHM9IjE2LDMxIDgsMTggMjQsMTggICAgICIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iI0RERERERCIvPjxwb2x5Z29uIGZpbGw9Im5vbmUiIHBvaW50cz0iMTYsMSA4LDE0IDI0LDE0ICAgICAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiNEREREREQiLz48L2c+PC9zdmc+) center center/contain no-repeat border-box}.edit_frm .invoice_layout table.invi .sortable>tr>td.aux .ico.move:hover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMzIgMzIiIGlkPSJMYXllcl80IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGc+PHBvbHlnb24gZmlsbD0ibm9uZSIgcG9pbnRzPSIxNiwzMSA4LDE4IDI0LDE4ICAgICAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBzdHJva2Utd2lkdGg9IjIiLz48cG9seWdvbiBmaWxsPSJub25lIiBwb2ludHM9IjE2LDEgOCwxNCAyNCwxNCAgICAgIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9nPjwvc3ZnPg==)}.edit_frm .invoice_layout table.invi .sortable>tr.sortactive>td.ico{cursor:move}.edit_frm .invoice_layout .btn{background:url("") center center/contain no-repeat content-box #fff;position:absolute;top:.2rem;right:.2rem;height:3rem;width:3rem;padding:.1rem;z-index:11}.edit_frm .invoice_layout .btn.sprev{background-image:url(data:image/png;base64,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)}.edit_frm .invoice_layout .btn.sdoc{background-image:url(data:image/png;base64,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)}.edit_frm .invoice_layout.freeze::before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(50,50,50,.3);user-select:none;cursor:wait;z-index:10;pointer-events:none}.edit_frm .invoice_layout.freeze::before tr:hover>td.aux>.axf{display:inline-flex}.edit_frm .invoice_layout.freeze::after{content:"";position:absolute;top:50%;left:50%;width:3rem;height:3rem;margin:-1.5rem 0 0 -1.5rem;border:.4rem solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;z-index:11;pointer-events:none;animation:.8s linear infinite fis_spin}.edit_frm .invoice_layout .dvalidation{margin:0 0 1rem}.edit_frm .invoice_layout .dvalidation.hidden{display:none}.edit_frm .invoice_layout .dvalidation .dvmsg{padding:.4rem .7rem;margin:.25rem 0;border-radius:.2rem;font-size:.9rem;border-left:4px solid #999;background:#f5f5f5}.edit_frm .invoice_layout .dvalidation .dvmsg.error{border-left-color:#c0392b;background:#fdecea;color:#922}.edit_frm .invoice_layout .dvalidation .dvmsg.warning{border-left-color:#e0a800;background:#fff8e1;color:#7a5c00}.edit_frm .invoice_layout .dvalidation .dvmsg.info{border-left-color:#3498db;background:#eaf4fb;color:#1c5a82}.dhist .invtbl{width:100%}.dhist td,.dhist th{padding:.3rem .6rem;text-align:left;vertical-align:top}.dhist tbody tr:nth-child(even){background:#fafafa}.modal-body .lstfrm{display:block;position:relative}.modal-body .lstfrm .li{display:inline-block;background-color:#fff;border:1px solid #e0e0e0;padding:1.7rem .5rem .5rem;border-radius:.2rem;cursor:pointer;position:relative;margin:0 .5rem .5rem 0;box-shadow:1px 1px 3px rgba(50,50,50,.1)}.modal-body .lstfrm .li .lbl{position:absolute;background:#727272;color:#fff;font-size:.8rem;left:0;top:0;right:0;padding:.2rem;border-top-left-radius:inherit;border-top-right-radius:inherit}.adr-conformity{margin-top:.75rem;padding:.6rem .75rem;background:#f3f7fb;border:1px solid #cfe0f0;border-radius:4px;font-size:.85rem;line-height:1.35}.adr-conformity .hd{font-weight:600;margin-bottom:.2rem}.adr-conformity .tx{color:#445} \ No newline at end of file diff --git a/Fuchs/wwwroot/web/tools.js b/Fuchs/wwwroot/web/tools.js index f36c9c0..ceb47a5 100644 --- a/Fuchs/wwwroot/web/tools.js +++ b/Fuchs/wwwroot/web/tools.js @@ -1,5 +1,4 @@ +/*! js-cookie v3.0.1 | MIT */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){"use strict";function e(e){for(var t=1;t+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 ,0 -- ,@CustomValues + ,@SendToAddressJson , NULL --[DateSent] , NULL --[UserSent] ,NULL -- diff --git a/Fuchs_Database/dbo/Stored Procedures/fds__getInvoice.sql b/Fuchs_Database/dbo/Stored Procedures/fds__getInvoice.sql index 68b0bc3..9d3bd22 100644 --- a/Fuchs_Database/dbo/Stored Procedures/fds__getInvoice.sql +++ b/Fuchs_Database/dbo/Stored Procedures/fds__getInvoice.sql @@ -45,6 +45,7 @@ BEGIN ,[IsCanceled] ,[Replaces_InvId] ,[CustomValues] + ,[SendToAddressJson] ,[DateSent] ,[UserSent] ,[DateFinalized] diff --git a/Fuchs_Database/dbo/Stored Procedures/fds__prepInvoice.sql b/Fuchs_Database/dbo/Stored Procedures/fds__prepInvoice.sql index 7ce1154..e2e8948 100644 --- a/Fuchs_Database/dbo/Stored Procedures/fds__prepInvoice.sql +++ b/Fuchs_Database/dbo/Stored Procedures/fds__prepInvoice.sql @@ -356,6 +356,7 @@ BEGIN , [paymentterms] = N'10wd' , [invoiceemail] = (SELECT TOP(1) [SupportMail] FROM @company where IsEmailInvoicingActive = 1) , [invoiceaddress] = (SELECT TOP(1) CONCAT([name], CHAR(10), [address]) FROM @company ORDER BY IsEmailInvoicingActive DESC) + , [invoiceaddressData] = [dbo].[fds__getCompanyAddressJson]((SELECT TOP(1) [id] FROM @company ORDER BY IsEmailInvoicingActive DESC)) , [tax_servicerefund] = 0.2 , [CustomerId] = [CustomerId] , [invoicetitle] = CASE WHEN @type = 'i' THEN (CASE WHEN @NUM_of_int_Invoices > 0 THEN CAST((@NUM_of_int_Invoices + 1) as varchar(3)) + '. ' ELSE '' END) + 'Abschlagsrechnung' diff --git a/Fuchs_Database/dbo/Stored Procedures/fds__setInvoice.sql b/Fuchs_Database/dbo/Stored Procedures/fds__setInvoice.sql index e979248..6cab404 100644 --- a/Fuchs_Database/dbo/Stored Procedures/fds__setInvoice.sql +++ b/Fuchs_Database/dbo/Stored Procedures/fds__setInvoice.sql @@ -18,7 +18,8 @@ CREATE PROCEDURE [dbo].[fds__setInvoice] @ProvisionPeriod varchar(50), @CustomValues nvarchar(max), @authuser varchar(25), - @Id varchar(10) OUT + @Id varchar(10) OUT, + @SendToAddressJson nvarchar(max) = NULL AS BEGIN SET NOCOUNT ON; @@ -65,6 +66,7 @@ BEGIN [IsCanceled] [bit] NULL, [Replaces_InvId] [varchar](50) NULL, [CustomValues] [nvarchar](max) NULL, + [SendToAddressJson] [nvarchar](max) NULL, [DateSent] [datetime] NULL, [UserSent] [varchar](25) NULL, [DateFinalized] [datetime] NULL, @@ -102,6 +104,7 @@ BEGIN ,0 -- ,0 -- ,@CustomValues + ,@SendToAddressJson , NULL --[DateSent] , NULL --[UserSent] [varchar](25) NULL, ,NULL -- @@ -133,6 +136,7 @@ BEGIN ,[IsPayed] ,[IsSent] ,[CustomValues] + ,[SendToAddressJson] ,[DateSent] ,[UserSent] ,[DateFinalized] @@ -163,6 +167,7 @@ BEGIN ,[ProvisionPeriod] = SOURCE.[ProvisionPeriod] ,[ProvisionLocation] = SOURCE.[ProvisionLocation] ,[CustomValues] = SOURCE.[CustomValues] + ,[SendToAddressJson] = SOURCE.[SendToAddressJson] ,[DateModified] = SOURCE.[DateModified] ,[UserModified] = SOURCE.[UserModified] OUTPUT inserted.* diff --git a/Fuchs_Database/dbo/Tables/fds__invoices.sql b/Fuchs_Database/dbo/Tables/fds__invoices.sql index 26fefab..6fa09c9 100644 --- a/Fuchs_Database/dbo/Tables/fds__invoices.sql +++ b/Fuchs_Database/dbo/Tables/fds__invoices.sql @@ -25,6 +25,7 @@ [IsCanceled] AS (CONVERT([bit],case when [DateCancelled] IS NULL then (0) else (1) end)), [Replaces_InvId] VARCHAR (50) NULL, [CustomValues] NVARCHAR (MAX) NULL, + [SendToAddressJson] NVARCHAR (MAX) NULL, [DateSent] DATETIME NULL, [UserSent] VARCHAR (25) NULL, [DateFinalized] DATETIME NULL, diff --git a/Fuchs_Database/dbo/User Defined Types/fds__tt__invoice_base.sql b/Fuchs_Database/dbo/User Defined Types/fds__tt__invoice_base.sql index 56bfcf7..9472413 100644 --- a/Fuchs_Database/dbo/User Defined Types/fds__tt__invoice_base.sql +++ b/Fuchs_Database/dbo/User Defined Types/fds__tt__invoice_base.sql @@ -25,6 +25,7 @@ [IsCanceled] BIT NULL, [Replaces_InvId] VARCHAR (50) NULL, [CustomValues] NVARCHAR (MAX) NULL, + [SendToAddressJson] NVARCHAR (MAX) NULL, [DateSent] DATETIME NULL, [UserSent] VARCHAR (25) NULL, [DateFinalized] DATETIME NULL, diff --git a/OCORE b/OCORE index 91eb660..d760efc 160000 --- a/OCORE +++ b/OCORE @@ -1 +1 @@ -Subproject commit 91eb660610a0d05b2dad48c1e9051013e52d678a +Subproject commit d760efc077c7a941c7906f1bfab9075dbf0a4c56 diff --git a/OCORE_Charting b/OCORE_Charting index 69e7157..fcb8f09 160000 --- a/OCORE_Charting +++ b/OCORE_Charting @@ -1 +1 @@ -Subproject commit 69e71570a49d06249f4185aa75edcb5bb7d1f90e +Subproject commit fcb8f090d4e4147ca7b79c20c65099dd589e3b85 diff --git a/OCORE_web b/OCORE_web index 552ceca..6ee60c8 160000 --- a/OCORE_web +++ b/OCORE_web @@ -1 +1 @@ -Subproject commit 552ceca7bf58ac5b120eeff253288cfd54296b0a +Subproject commit 6ee60c848c33652a51fc0f41ac3ba7b6285bad03 diff --git a/OCORE_web_pdf b/OCORE_web_pdf index cd8214e..926f6e1 160000 --- a/OCORE_web_pdf +++ b/OCORE_web_pdf @@ -1 +1 @@ -Subproject commit cd8214ed7b2f2d755303c51af61858d0b31c2301 +Subproject commit 926f6e1f3ede61aa6a9fdc4674fcc65408df8d83 diff --git a/eRechnungLib b/eRechnungLib index 3f0bd93..3d37d8b 160000 --- a/eRechnungLib +++ b/eRechnungLib @@ -1 +1 @@ -Subproject commit 3f0bd93a62b7c9038971c56122ce246cc4eada8f +Subproject commit 3d37d8b08242c29900178a469823715cb14677b0