From 59a2b86c09a38530cb024748f4e3bdf00ada7c78 Mon Sep 17 00:00:00 2001 From: Stefan Date: Wed, 8 Jul 2026 19:33:23 +0200 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- .vscode/settings.json | 3 +- Fuchs.Tests/EventServiceTests.cs | 121 ++++++++++++++++++ Fuchs.Tests/RequestValueHelperTests.cs | 93 ++++++++++++++ .../Controllers/IntranetController.Banking.cs | 15 ++- .../IntranetController.Invoices2.cs | 29 ++++- .../IntranetController.Reminder.cs | 47 +++++-- .../IntranetController.Requests.cs | 71 +++++++--- Fuchs/Controllers/IntranetController.cs | 13 ++ Fuchs/Controllers/RequestValueHelper.cs | 21 +++ ...interrupting-exceptions-notify-the-user.md | 72 +++++++++++ Fuchs/Services/InvoiceService.cs | 108 +++++++++++++++- Fuchs/Services/StartupSelfTestService.cs | 3 +- Fuchs/appsettings.Development.json | 8 +- Fuchs/js/intranet/modules/fis.inv_shared.js | 30 ++++- Fuchs/js/intranet/modules/fis.inv_shared.scss | 20 +++ Fuchs/wwwroot/web/fis.inv.css | 23 ++++ Fuchs/wwwroot/web/fis.inv.de.js | 14 +- Fuchs/wwwroot/web/fis.inv.de.min.js | 2 +- Fuchs/wwwroot/web/fis.inv.min.css | 2 +- Fuchs/wwwroot/web/fis.req.css | 23 ++++ Fuchs/wwwroot/web/fis.req.de.js | 14 +- Fuchs/wwwroot/web/fis.req.de.min.js | 2 +- Fuchs/wwwroot/web/fis.req.min.css | 2 +- 23 files changed, 676 insertions(+), 60 deletions(-) create mode 100644 Fuchs.Tests/EventServiceTests.cs create mode 100644 Fuchs.Tests/RequestValueHelperTests.cs create mode 100644 Fuchs/Controllers/RequestValueHelper.cs create mode 100644 Fuchs/Docs/Decisions/0003-interrupting-exceptions-notify-the-user.md diff --git a/.vscode/settings.json b/.vscode/settings.json index 5e4f082..ba932d4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,7 @@ "dotnet run": true, "dotnet test": true, "dotnet build": true, - "npx gulp": true + "npx gulp": true, + "ForEach-Object": true } } \ No newline at end of file diff --git a/Fuchs.Tests/EventServiceTests.cs b/Fuchs.Tests/EventServiceTests.cs new file mode 100644 index 0000000..0bf4d5e --- /dev/null +++ b/Fuchs.Tests/EventServiceTests.cs @@ -0,0 +1,121 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Fuchs.Notifications; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.Logging.Abstractions; +using Xunit; + +namespace Fuchs.Tests; + +/// +/// Tests for , the single point every server-side +/// operation goes through to notify the user. Covers the two failure methods the +/// exception safety nets rely on (UserIssueAsync from +/// IntranetController.Do's catch-all, and InvoiceIssueAsync from +/// HandleInvoiceGet) rendering as "error" notifications, plus a +/// contrasting success path rendering as "info" — see ADR 0003. +/// +public class EventServiceTests +{ + // ── Test doubles: capture the GuiNotification pushed to Clients.All ───────── + private sealed class CapturingClientProxy : IClientProxy + { + public string? Method { get; private set; } + public object?[]? Args { get; private set; } + + public Task SendCoreAsync(string method, object?[] args, CancellationToken cancellationToken = default) + { + Method = method; + Args = args; + return Task.CompletedTask; + } + } + + private sealed class StubHubClients : IHubClients + { + private readonly IClientProxy _all; + public StubHubClients(IClientProxy all) => _all = all; + public IClientProxy All => _all; + public IClientProxy AllExcept(IReadOnlyList excludedConnectionIds) => throw new System.NotImplementedException(); + public IClientProxy Client(string connectionId) => throw new System.NotImplementedException(); + public IClientProxy Clients(IReadOnlyList connectionIds) => throw new System.NotImplementedException(); + public IClientProxy Group(string groupName) => throw new System.NotImplementedException(); + public IClientProxy Groups(IReadOnlyList groupNames) => throw new System.NotImplementedException(); + public IClientProxy GroupExcept(string groupName, IReadOnlyList excludedConnectionIds) => throw new System.NotImplementedException(); + public IClientProxy User(string userId) => throw new System.NotImplementedException(); + public IClientProxy Users(IReadOnlyList userIds) => throw new System.NotImplementedException(); + } + + private sealed class StubHubContext : IHubContext + { + public StubHubContext(IHubClients clients) => Clients = clients; + public IHubClients Clients { get; } + public IGroupManager Groups => throw new System.NotImplementedException(); + } + + private static (EventService svc, CapturingClientProxy proxy) CreateService() + { + var proxy = new CapturingClientProxy(); + var hub = new StubHubContext(new StubHubClients(proxy)); + return (new EventService(hub, NullLogger.Instance), proxy); + } + + private static GuiNotification Captured(CapturingClientProxy proxy) + { + Assert.Equal("notification", proxy.Method); + Assert.NotNull(proxy.Args); + var arg = Assert.Single(proxy.Args!); + return Assert.IsType(arg); + } + + // ── Failure paths the exception safety nets use ───────────────────────────── + [Fact] + public async Task UserIssueAsync_PublishesErrorNotificationWithMessage() + { + var (svc, proxy) = CreateService(); + + await svc.UserIssueAsync( + "Aktion fehlgeschlagen", + "Die Aktion konnte aufgrund eines unerwarteten Fehlers nicht abgeschlossen werden. Bitte versuchen Sie es erneut.", + "user-42", + new Dictionary { ["fn"] = "inv" }); + + var n = Captured(proxy); + Assert.Equal("error", n.Severity); + Assert.Equal("Aktion fehlgeschlagen", n.Title); + Assert.Equal(DomainEventType.UserIssue.ToString(), n.Type); + Assert.Contains("nicht abgeschlossen werden", n.Message); + Assert.Equal("inv", n.Context["fn"]); + } + + [Fact] + public async Task InvoiceIssueAsync_PublishesErrorNotificationCarryingInvoiceId() + { + var (svc, proxy) = CreateService(); + + await svc.InvoiceIssueAsync( + "Die Rechnung konnte aufgrund eines Fehlers nicht geladen werden.", + "user-42", + "INV-1001"); + + var n = Captured(proxy); + Assert.Equal("error", n.Severity); + Assert.Equal(DomainEventType.InvoiceCreationFailed.ToString(), n.Type); + Assert.Equal("Die Rechnung konnte aufgrund eines Fehlers nicht geladen werden.", n.Message); + Assert.Equal("INV-1001", n.Context["id"]); + } + + // ── Contrasting success path renders as info, not error ───────────────────── + [Fact] + public async Task InvoiceMarkedSentAsync_PublishesInfoNotification() + { + var (svc, proxy) = CreateService(); + + await svc.InvoiceMarkedSentAsync("INV-1001", "R2026-0001", "user-42"); + + var n = Captured(proxy); + Assert.Equal("info", n.Severity); + Assert.Contains("R2026-0001", n.Message); + } +} diff --git a/Fuchs.Tests/RequestValueHelperTests.cs b/Fuchs.Tests/RequestValueHelperTests.cs new file mode 100644 index 0000000..ca40c47 --- /dev/null +++ b/Fuchs.Tests/RequestValueHelperTests.cs @@ -0,0 +1,93 @@ +using System.Collections.Generic; +using Fuchs.Controllers; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Primitives; +using Xunit; + +namespace Fuchs.Tests; + +/// +/// Covers , which backs IntranetController's +/// Form()/HasForm() helpers. Endpoints in _allowedGet (e.g. req/idoc, rem/idoc) are invoked via +/// a plain GET (window.open with '?id=...'), so this must resolve from the query string without +/// ever touching an IFormCollection built from a non-form request (that would previously throw +/// InvalidOperationException in production - see Do() unhandled-exception log for fn=req id=idoc). +/// +public class RequestValueHelperTests +{ + private static IFormCollection Form(params (string Key, string Value)[] pairs) + { + var dict = new Dictionary(); + foreach (var (key, value) in pairs) dict[key] = value; + return new FormCollection(dict); + } + + private static IQueryCollection Query(params (string Key, string Value)[] pairs) + { + var dict = new Dictionary(); + foreach (var (key, value) in pairs) dict[key] = value; + return new QueryCollection(dict); + } + + [Fact] + public void Resolve_FormContentTypeWithKey_ReturnsFormValue() + { + string? result = RequestValueHelper.Resolve( + hasFormContentType: true, + form: Form(("id", "abc123")), + query: Query(("id", "from-query")), + key: "id"); + + Assert.Equal("abc123", result); + } + + [Fact] + public void Resolve_NoFormContentType_FallsBackToQuery() + { + // Simulates a GET request opened via window.open('?id=...'): no Content-Type header, + // so the (empty) form collection must not be consulted - only the query string. + string? result = RequestValueHelper.Resolve( + hasFormContentType: false, + form: FormCollection.Empty, + query: Query(("id", "7O32P")), + key: "id"); + + Assert.Equal("7O32P", result); + } + + [Fact] + public void Resolve_FormContentTypeButKeyMissingFromForm_FallsBackToQuery() + { + string? result = RequestValueHelper.Resolve( + hasFormContentType: true, + form: Form(("other", "value")), + query: Query(("id", "7O32P")), + key: "id"); + + Assert.Equal("7O32P", result); + } + + [Fact] + public void Resolve_KeyMissingFromBoth_ReturnsNull() + { + string? result = RequestValueHelper.Resolve( + hasFormContentType: true, + form: Form(("other", "value")), + query: Query(("other", "value")), + key: "id"); + + Assert.Null(result); + } + + [Fact] + public void Resolve_NoFormContentTypeAndQueryEmpty_ReturnsNull() + { + string? result = RequestValueHelper.Resolve( + hasFormContentType: false, + form: FormCollection.Empty, + query: QueryCollection.Empty, + key: "id"); + + Assert.Null(result); + } +} diff --git a/Fuchs/Controllers/IntranetController.Banking.cs b/Fuchs/Controllers/IntranetController.Banking.cs index efbb431..f979740 100644 --- a/Fuchs/Controllers/IntranetController.Banking.cs +++ b/Fuchs/Controllers/IntranetController.Banking.cs @@ -240,11 +240,22 @@ public partial class IntranetController } // ── Form helpers ───────────────────────────────────────────────────────── + // Reads from the posted form when available, falling back to the query string. This + // supports endpoints in _allowedGet (e.g. req/idoc, rem/idoc) that are invoked via a + // plain GET (window.open with '?id=...'), where Request.Form has no Content-Type and + // would otherwise throw InvalidOperationException. protected bool HasForm(params string[] keys) => - keys.All(k => Request.Form.ContainsKey(k) && !string.IsNullOrWhiteSpace(Request.Form[k])); + keys.All(k => !string.IsNullOrWhiteSpace(FormValue(k))); protected string Form(string key, string fallback = "") => - Request.Form.TryGetValue(key, out var v) ? v.ToString() : fallback; + FormValue(key) ?? fallback; + + private string? FormValue(string key) => + RequestValueHelper.Resolve( + Request.HasFormContentType, + Request.HasFormContentType ? Request.Form : Microsoft.AspNetCore.Http.FormCollection.Empty, + Request.Query, + key); private static (DateTime? From, DateTime? To) BankingDateRange(System.Data.DataTable tbl) { diff --git a/Fuchs/Controllers/IntranetController.Invoices2.cs b/Fuchs/Controllers/IntranetController.Invoices2.cs index 319dcfc..041e34c 100644 --- a/Fuchs/Controllers/IntranetController.Invoices2.cs +++ b/Fuchs/Controllers/IntranetController.Invoices2.cs @@ -87,7 +87,13 @@ public partial class IntranetController } catch (Exception ex) { - _logger.LogError(ex, "HandleInvoiceGet failed for id={InvoiceId} user={User}", Form("id"), UserAccountID); + string invoiceId = Form("id"); + _logger.LogError(ex, "HandleInvoiceGet failed for id={InvoiceId} user={User}", invoiceId, UserAccountID); + // This handler has its own catch (returns 500) and so never reaches the Do safety net; + // notify the user here so a failed invoice load is not silently swallowed. + await _events.InvoiceIssueAsync( + "Die Rechnung konnte aufgrund eines Fehlers nicht geladen werden.", + UserAccountID, invoiceId); return StatusCode(500); } } @@ -388,8 +394,22 @@ public partial class IntranetController sqldset.Tables("itm").Columns.Contains("order") ? "order" : "")) { var d = sitm.toObjectDictionary(); - double net = Convert.ToDouble(d.no("value_total", 0)); - double vat = Convert.ToDouble(d.no("vat", 0)); + double net = Convert.ToDouble(d.no("value_total", 0)); + double vat = Convert.ToDouble(d.no("vat", 0)); + double value = Convert.ToDouble(d.no("value", 0)); + string quantityStr = d.nz("Quantity"); + // quantityhours/UnitString reconstruct the hour-based quantity editor's raw + // fields (e.g. "5 Std" -> quantityhours=5, UnitString="Std") from the persisted + // "Quantity" string, mirroring the legacy fds__invoice_data ndic mapping — without + // this, re-editing a reloaded hour-based item showed an empty quantity field. + object quantityHours = ""; + if (value != 0 && !string.IsNullOrEmpty(quantityStr)) + { + long qh = (long)(net / value); + if (quantityStr.StartsWith(qh.ToString(CultureInfo.InvariantCulture) + " ", StringComparison.Ordinal)) + quantityHours = qh; + } + string unitString = !string.IsNullOrEmpty(quantityStr) ? quantityStr.RightFromFirst(" ") : ""; itm.Add(new Dictionary { ["Id"] = d["Id"], @@ -399,8 +419,11 @@ public partial class IntranetController ["svcnet_val"] = d.no("value_service", 0), ["net"] = d.no("value", 0), ["quantity"] = d["Quantity"], + ["quantityhours"] = quantityHours, + ["UnitString"] = unitString, ["Type"] = d["Type"], ["Note"] = null, + ["NameOrNumber"] = "", ["htmltext"] = d["Text"], ["position"] = d["Position"], ["SortOrder"] = d["SortOrder"] diff --git a/Fuchs/Controllers/IntranetController.Reminder.cs b/Fuchs/Controllers/IntranetController.Reminder.cs index 3c57213..18b5eed 100644 --- a/Fuchs/Controllers/IntranetController.Reminder.cs +++ b/Fuchs/Controllers/IntranetController.Reminder.cs @@ -22,7 +22,9 @@ public partial class IntranetController { case "get": { - if (!HasForm("id")) return BadRequest400(); + if (!HasForm("id")) { _logger.LogWarning("Reminder get: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogDebug("Reminder get: preparing reminder for invoice {InvId} type={Type} level={Level} user={User}", + Form("id"), Form("type"), Form("level"), UserAccountID); var pl = StdParamlist( SQL_VarChar("@InvId", Form("id")), SQL_VarChar("@type", Form("type")), @@ -32,17 +34,21 @@ public partial class IntranetController _intranet.Intranet__SQLConnectionString, pl, tablenames: new[] { "rem" }, Security: DbSec, options: SqlOpt(fn, id, code)); + if (!string.IsNullOrEmpty(dset.Exception)) + _logger.LogError("Reminder get: SQL error for invoice {InvId}: {SqlError}, user={User}", Form("id"), dset.Exception, UserAccountID); return await JSONAsync(new { rm = dset.Table("rem").FirstRow.toObjectDictionary() }); } case "prep": { - if (!HasForm("remc")) return BadRequest400(); + if (!HasForm("remc")) { _logger.LogWarning("Reminder prep: missing form field 'remc', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogInformation("Reminder prep: creating draft reminder, user={User}", UserAccountID); var ctd = JsonConvert.DeserializeObject(Form("remc"))!; var fdRem = await _reminders.RegisterReminderAsync( new FdsReminderData(ctd), change: false, remId: "", UserAccountID, DbSec); if (!string.IsNullOrEmpty(fdRem.Id)) { + _logger.LogInformation("Reminder prep: draft reminder {RemId} created, user={User}", fdRem.Id, UserAccountID); await _events.ReminderDraftCreatedAsync(fdRem, UserAccountID); var imgcol = await _pdf.DocToImageCollectionAsync(_reminders.GenerateReminderPdf(fdRem, fdRem.IsDraft)); return await JSONAsync(new { id = fdRem.Id, img = imgcol.ImgB64Array, total = imgcol.TotalPages }); @@ -54,7 +60,8 @@ public partial class IntranetController case "srs": { - if (!HasForm("id")) return BadRequest400(); + if (!HasForm("id")) { _logger.LogWarning("Reminder srs: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogInformation("Reminder srs: marking reminder {RemId} as sent, user={User}", Form("id"), UserAccountID); var pl = StdParamlist(SQL_VarChar("@Id", Form("id")), SQL_Bit("@auto", false)); var dt2 = await getSQLDataSet_async( "EXECUTE [dbo].[fds__setReminderSent] @Id, @auto, @authuser;", @@ -63,17 +70,25 @@ public partial class IntranetController if (string.IsNullOrEmpty(dt2.Exception)) await _events.ReminderMarkedSentAsync(Form("id"), Form("id"), UserAccountID); else + { + _logger.LogError("Reminder srs: SQL error marking reminder {RemId} sent: {SqlError}, user={User}", Form("id"), dt2.Exception, UserAccountID); await _events.ReminderIssueAsync( $"Mahnung {Form("id")} konnte nicht als versandt markiert werden.", UserAccountID, Form("id")); + } return string.IsNullOrEmpty(dt2.Exception) ? await JSONAsync(new { ok = true }) : StatusCode(500); } case "rdoc": { - if (!HasForm("id")) return BadRequest400(); + if (!HasForm("id")) { _logger.LogWarning("Reminder rdoc: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogDebug("Reminder rdoc: fetching stored reminder document {RemId} typ={Typ} user={User}", Form("id"), Form("typ"), UserAccountID); var (file, fc) = await _reminders.GetStoredFileAsync(Form("id"), UserAccountID, DbSec); - if (file == null || fc == null) return StatusCode(404, new { error = "Dokument wurde nicht gefunden" }); + if (file == null || fc == null) + { + _logger.LogWarning("Reminder rdoc: document not found for reminder {RemId} user={User}", Form("id"), UserAccountID); + return StatusCode(404, new { error = "Dokument wurde nicht gefunden" }); + } return Form("typ") != "img" ? await FileContentResultAsync(fc, file.MimeType(), file.Name) : await JSONAsync(new { id = Form("id"), img = await BuildPdfImageArray(fc) }); @@ -84,13 +99,16 @@ public partial class IntranetController case "lrem": { - if (!HasForm("id")) return BadRequest400(); + if (!HasForm("id")) { _logger.LogWarning("Reminder lrem: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogDebug("Reminder lrem: listing reminders for invoice {InvId} user={User}", Form("id"), UserAccountID); var dset = await getSQLDataSet_async( "EXECUTE [dbo].[fds__lookupReminders] @InvId, @authuser;", _intranet.Intranet__SQLConnectionString, StdParamlist(SQL_VarChar("@InvId", Form("id"))), tablenames: new[] { "ov", "rem" }, Security: DbSec, options: SqlOpt(fn, id, code)); + if (!string.IsNullOrEmpty(dset.Exception)) + _logger.LogError("Reminder lrem: SQL error for invoice {InvId}: {SqlError}, user={User}", Form("id"), dset.Exception, UserAccountID); return await JSONAsync(new { ov = dset.Table("ov").FirstRow.toStringDictionary(), @@ -98,18 +116,23 @@ public partial class IntranetController }); } - default: return await JSONAsync(new { ok = true }); + default: + _logger.LogWarning("Do_Process_Reminder: unhandled action id={Id}, user={User}", id, UserAccountID); + return await JSONAsync(new { ok = true }); } } private async Task HandleReminderConf(string fn, string id, string code) { - if (!HasForm("id")) return BadRequest400(); + if (!HasForm("id")) { _logger.LogWarning("HandleReminderConf: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogInformation("HandleReminderConf: finalizing reminder {RemId} user={User}", Form("id"), UserAccountID); var dt = await getSQLDatatable_async( "EXECUTE [dbo].[fds__setReminderFinal] @Id, @authuser;", _intranet.Intranet__SQLConnectionString, StdParamlist(SQL_VarChar("@Id", Form("id"))), Security: DbSec, options: SqlOpt(fn, id, code)); + if (!string.IsNullOrEmpty(dt.Exception)) + _logger.LogError("HandleReminderConf: SQL error finalizing reminder {RemId}: {SqlError}, user={User}", Form("id"), dt.Exception, UserAccountID); var frdic = dt.FirstRow.toObjectDictionary(); if (frdic.TryGetValue("IsFinal", out var isFinal) && isFinal is true) { @@ -167,9 +190,10 @@ public partial class IntranetController private async Task HandleReminderIdoc(string fn, string id, string code) { - if (!HasForm("id") || string.IsNullOrEmpty(Form("id"))) return StatusCode(404); + if (!HasForm("id") || string.IsNullOrEmpty(Form("id"))) { _logger.LogWarning("HandleReminderIdoc: missing/empty form field 'id', user={User}", UserAccountID); return StatusCode(404); } + _logger.LogDebug("HandleReminderIdoc: reminderId={RemId} typ={Typ} create={Create} user={User}", Form("id"), Form("typ"), Form("create", "0"), UserAccountID); var fdRem = await _reminders.LoadReminderAsync(Form("id"), UserAccountID, DbSec); - if (string.IsNullOrEmpty(fdRem.Id)) return StatusCode(404, new { error = "Erinnerung wurde nicht gefunden" }); + if (string.IsNullOrEmpty(fdRem.Id)) { _logger.LogWarning("HandleReminderIdoc: reminder not found id={RemId} user={User}", Form("id"), UserAccountID); return StatusCode(404, new { error = "Erinnerung wurde nicht gefunden" }); } string filename = fdRem.ReminderRegistration!.nz("DocumentName").ne($"Zahlungserinnerung_{fdRem.Id}.pdf"); if (Form("typ") != "img") { @@ -184,7 +208,8 @@ public partial class IntranetController private async Task HandleReminderResend(string fn, string id, string code) { - if (!HasForm("id") || string.IsNullOrEmpty(Form("id"))) return StatusCode(404); + if (!HasForm("id") || string.IsNullOrEmpty(Form("id"))) { _logger.LogWarning("HandleReminderResend: missing/empty form field 'id', user={User}", UserAccountID); return StatusCode(404); } + _logger.LogInformation("HandleReminderResend: resending reminder {RemId} user={User}", Form("id"), UserAccountID); var pl = StdParamlist(SQL_VarChar("@Id", Form("id")), new SqlParameter("@includefile", true)); var dset = await getSQLDataSet_async( "EXECUTE [dbo].[fds__getReminder] @Id, @includefile, @authuser;", diff --git a/Fuchs/Controllers/IntranetController.Requests.cs b/Fuchs/Controllers/IntranetController.Requests.cs index 2ec8e1f..1d1af0b 100644 --- a/Fuchs/Controllers/IntranetController.Requests.cs +++ b/Fuchs/Controllers/IntranetController.Requests.cs @@ -27,13 +27,16 @@ public partial class IntranetController case "rthd": { - if (!HasForm("id")) return BadRequest400(); + if (!HasForm("id")) { _logger.LogWarning("Requests rthd: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogInformation("Requests rthd: toggling hidden state for request {ReqId}, user={User}", Form("id"), UserAccountID); var sqldt = await getSQLDatatable_async( "EXECUTE [dbo].[fds__toggleRequestHidden] @Id, @authuser;", _intranet.Intranet__SQLConnectionString, StdParamlist(SQL_BigInt("@Id", Form("id"))), Security: DbSec, options: SqlOpt(fn, id, code)); - if (sqldt.Count == 0) return StatusCode(404, new { error = "not found" }); + if (!string.IsNullOrEmpty(sqldt.Exception)) + _logger.LogError("Requests rthd: SQL error for request {ReqId}: {SqlError}, user={User}", Form("id"), sqldt.Exception, UserAccountID); + if (sqldt.Count == 0) { _logger.LogWarning("Requests rthd: request {ReqId} not found, user={User}", Form("id"), UserAccountID); return StatusCode(404, new { error = "not found" }); } var dic = sqldt.FirstRow.toObjectDictionary(); return await JSONAsync(new { id = dic["EntityId"], visible = dic.no("hidden", false) is not true }); } @@ -45,12 +48,17 @@ public partial class IntranetController case "save": { - if (!HasForm("invc")) return BadRequest400(); + if (!HasForm("invc")) { _logger.LogWarning("Requests save: missing form field 'invc', user={User}", UserAccountID); return BadRequest400(); } + bool saveChange = !string.IsNullOrEmpty(Form("id")); + _logger.LogInformation("Requests save: saving invoice draft change={Change} invId={InvId} user={User}", saveChange, Form("id"), UserAccountID); var fdInv = await _invoices.RegisterInvoiceAsync( new FdsInvoiceData(JsonConvert.DeserializeObject(Form("invc"))!), - change: !string.IsNullOrEmpty(Form("id")), invId: Form("id"), UserAccountID, DbSec); + change: saveChange, invId: Form("id"), UserAccountID, DbSec); if (!string.IsNullOrEmpty(fdInv.Id)) - await _events.InvoiceDraftRegisteredAsync(fdInv, !string.IsNullOrEmpty(Form("id")), UserAccountID); + { + _logger.LogInformation("Requests save: invoice draft {InvId} saved, user={User}", fdInv.Id, UserAccountID); + await _events.InvoiceDraftRegisteredAsync(fdInv, saveChange, UserAccountID); + } return !string.IsNullOrEmpty(fdInv.Id) ? await JSONAsync(new { id = fdInv.Id }) : await InvoiceIssueResult("Die Rechnung konnte aufgrund eines Fehlers nicht gespeichert werden."); @@ -58,12 +66,14 @@ public partial class IntranetController case "sprep": { - if (!HasForm("invc")) return BadRequest400(); + if (!HasForm("invc")) { _logger.LogWarning("Requests sprep: missing form field 'invc', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogInformation("Requests sprep: preparing new invoice draft, user={User}", UserAccountID); var fdInv = await _invoices.RegisterInvoiceAsync( new FdsInvoiceData(JsonConvert.DeserializeObject(Form("invc"))!), change: false, invId: "", UserAccountID, DbSec); if (!string.IsNullOrEmpty(fdInv.Id)) { + _logger.LogInformation("Requests sprep: invoice draft {InvId} created, user={User}", fdInv.Id, UserAccountID); await _events.InvoiceDraftRegisteredAsync(fdInv, changed: false, userAccountId: UserAccountID); var imgcol = await _pdf.DocToImageCollectionAsync(_invoices.GenerateInvoicePdf(fdInv, fdInv.IsDraft)); return await JSONAsync(new { id = fdInv.Id, img = imgcol.ImgB64Array, total = imgcol.TotalPages }); @@ -73,12 +83,14 @@ public partial class IntranetController case "sedit": { - if (!HasForm("id", "invc")) return BadRequest400(); + if (!HasForm("id", "invc")) { _logger.LogWarning("Requests sedit: missing form field 'id'/'invc', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogInformation("Requests sedit: updating invoice draft {InvId}, user={User}", Form("id"), UserAccountID); var fdInv = await _invoices.RegisterInvoiceAsync( new FdsInvoiceData(JsonConvert.DeserializeObject(Form("invc"))!), change: true, invId: Form("id"), UserAccountID, DbSec); if (!string.IsNullOrEmpty(fdInv.Id)) { + _logger.LogInformation("Requests sedit: invoice draft {InvId} updated, user={User}", fdInv.Id, UserAccountID); await _events.InvoiceDraftRegisteredAsync(fdInv, changed: true, userAccountId: UserAccountID); var imgcol = await _pdf.DocToImageCollectionAsync(_invoices.GenerateInvoicePdf(fdInv, fdInv.IsDraft)); return await JSONAsync(new { id = fdInv.Id, img = imgcol.ImgB64Array, total = imgcol.TotalPages }); @@ -87,25 +99,36 @@ public partial class IntranetController } case "sdel": - if (!HasForm("id")) return BadRequest400(); - await setSQLValue_async("EXECUTE [dbo].[fds__remInvoice] @Id, @authuser;", + { + if (!HasForm("id")) { _logger.LogWarning("Requests sdel: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogInformation("Requests sdel: deleting invoice draft {InvId}, user={User}", Form("id"), UserAccountID); + var ok = await setSQLValue_async("EXECUTE [dbo].[fds__remInvoice] @Id, @authuser;", _intranet.Intranet__SQLConnectionString, StdParamlist(SQL_VarChar("@Id", Form("id"))), Security: DbSec, options: SqlOpt(fn, id, code)); + if (!ok) + { + _logger.LogError("Requests sdel: SQL failed deleting invoice draft {InvId}, user={User}", Form("id"), UserAccountID); + return await InvoiceIssueResult("Die Rechnung konnte aufgrund eines Fehlers nicht gelöscht werden.", Form("id")); + } return await JSONAsync(new { ok = true }); + } case "sconf": return await HandleRequestSconf(fn, id, code); case "idoc": return await HandleRequestIdoc(fn, id, code); case "resend": return await HandleRequestResend(fn, id, code); - default: return await JSONAsync(new { ok = true }); + default: + _logger.LogWarning("Do_Process_Requests: unhandled action id={Id}, user={User}", id, UserAccountID); + return await JSONAsync(new { ok = true }); } } private async Task HandleRequestList(string fn, string id, string code) { - if (!HasForm("mode")) return BadRequest400(); + if (!HasForm("mode")) { _logger.LogWarning("HandleRequestList: missing form field 'mode', user={User}", UserAccountID); return BadRequest400(); } string mode = Form("mode").ToLower(); + _logger.LogDebug("HandleRequestList mode={Mode} tgt={Tgt} user={User}", mode, Form("tgt"), UserAccountID); if (mode == "s" && Form("tgt").Contains(':')) { var pl = StdParamlist( @@ -126,7 +149,10 @@ public partial class IntranetController } if (!DateTime.TryParseExact(Form("tgt"), "yy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out var tgtdate)) + { + _logger.LogWarning("HandleRequestList: invalid date format tgt='{Tgt}' user={User}", Form("tgt"), UserAccountID); return BadRequest400(); + } { var pl = StdParamlist( SQL_Date("@tgtdate", tgtdate), @@ -204,7 +230,8 @@ public partial class IntranetController private async Task HandleRequestGet(string fn, string id, string code) { - if (!HasForm("id")) return BadRequest400(); + if (!HasForm("id")) { _logger.LogWarning("HandleRequestGet: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogDebug("HandleRequestGet requestId={ReqId} mode={Mode} user={User}", Form("id"), Form("mode"), UserAccountID); string modeVal = Form("mode").ne("ov"); string[] tn = modeVal switch { @@ -231,7 +258,8 @@ public partial class IntranetController private async Task HandleRequestIget(string fn, string id, string code) { - if (!HasForm("id", "typ")) return BadRequest400(); + if (!HasForm("id", "typ")) { _logger.LogWarning("HandleRequestIget: missing form field 'id'/'typ', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogDebug("HandleRequestIget requestId={ReqId} typ={Typ} mode={Mode} user={User}", Form("id"), Form("typ"), Form("mode"), UserAccountID); var pl = StdParamlist( SQL_BigInt("@servicerequestid", Form("id")), SQL_VarChar("@mode", Form("mode").ne("ov")), @@ -273,12 +301,15 @@ public partial class IntranetController private async Task HandleRequestSconf(string fn, string id, string code) { - if (!HasForm("id")) return BadRequest400(); + if (!HasForm("id")) { _logger.LogWarning("HandleRequestSconf: missing form field 'id', user={User}", UserAccountID); return BadRequest400(); } + _logger.LogInformation("HandleRequestSconf: finalizing invoice {InvId} user={User}", Form("id"), UserAccountID); var dt = await getSQLDatatable_async( "EXECUTE [dbo].[fds__setInvoiceFinal] @Id, @authuser;", _intranet.Intranet__SQLConnectionString, StdParamlist(SQL_VarChar("@Id", Form("id"))), Security: DbSec, options: SqlOpt(fn, id, code)); + if (!string.IsNullOrEmpty(dt.Exception)) + _logger.LogError("HandleRequestSconf: SQL error finalizing invoice {InvId}: {SqlError}, user={User}", Form("id"), dt.Exception, UserAccountID); var frdic = dt.FirstRow.toObjectDictionary(); if (frdic.TryGetValue("IsFinal", out var isFinal) && isFinal is true) { @@ -331,16 +362,19 @@ public partial class IntranetController $"Die Rechnungs-PDF {frdic.nz("DocumentName").ne($"Rechnung_{invId}.pdf")} konnte nicht erstellt werden.", UserAccountID, invId); } - return await JSONAsync(new { ok = true }); + // hasFile tells the frontend whether the PDF was actually stored, so it only opens the + // idoc preview popup when there is something to show (never on a failed render/store). + return await JSONAsync(new { ok = true, hasFile = filebyte.Length > 0 }); } return await InvoiceIssueResult("Die Rechnung konnte aufgrund eines Fehlers nicht erstellt werden."); } private async Task HandleRequestIdoc(string fn, string id, string code) { - if (!HasForm("id") || string.IsNullOrEmpty(Form("id"))) return StatusCode(404); + if (!HasForm("id") || string.IsNullOrEmpty(Form("id"))) { _logger.LogWarning("HandleRequestIdoc: missing/empty form field 'id', user={User}", UserAccountID); return StatusCode(404); } + _logger.LogDebug("HandleRequestIdoc: invoiceId={InvId} typ={Typ} create={Create} user={User}", Form("id"), Form("typ"), Form("create", "0"), UserAccountID); var fdInv = await _invoices.LoadInvoiceAsync(Form("id"), UserAccountID, DbSec); - if (string.IsNullOrEmpty(fdInv.Id)) return StatusCode(404, new { error = "Rechnung wurde nicht gefunden" }); + if (string.IsNullOrEmpty(fdInv.Id)) { _logger.LogWarning("HandleRequestIdoc: invoice not found id={InvId} user={User}", Form("id"), UserAccountID); return StatusCode(404, new { error = "Rechnung wurde nicht gefunden" }); } string filename = fdInv.InvoiceRegistration!.nz("DocumentName").ne($"Rechnung_{fdInv.Id}.pdf"); if (Form("typ") != "img") { @@ -357,7 +391,8 @@ public partial class IntranetController private async Task HandleRequestResend(string fn, string id, string code) { - if (!HasForm("id") || string.IsNullOrEmpty(Form("id"))) return StatusCode(404); + if (!HasForm("id") || string.IsNullOrEmpty(Form("id"))) { _logger.LogWarning("HandleRequestResend: missing/empty form field 'id', user={User}", UserAccountID); return StatusCode(404); } + _logger.LogInformation("HandleRequestResend: resending invoice {InvId} user={User}", Form("id"), UserAccountID); var dtset = await getSQLDataSet_async( "EXECUTE [dbo].[fds__getInvoice] @Id, @authuser;", _intranet.Intranet__SQLConnectionString, diff --git a/Fuchs/Controllers/IntranetController.cs b/Fuchs/Controllers/IntranetController.cs index 2342e6a..7a088b2 100644 --- a/Fuchs/Controllers/IntranetController.cs +++ b/Fuchs/Controllers/IntranetController.cs @@ -174,6 +174,19 @@ public partial class IntranetController : Microsoft.AspNetCore.Mvc.Controller { _logger.LogError(ex, "Unhandled exception in Do fn={Fn} id={Id} code={Code} user={User}", fn, id, code, UserAccountID); + // Standing rule: an exception that interrupts a user-initiated action must reach the + // user as a notification, not only the log. This is the catch-all safety net for any + // Do_Process_* action that throws without first publishing its own (more specific) + // issue event. Pre-auth flows (login/logout, unauthenticated GETs) are skipped — there + // is no user session to notify and the HTTP status already conveys the failure. + if (UserIdent.IsAuthenticated) + { + await _events.UserIssueAsync( + "Aktion fehlgeschlagen", + "Die Aktion konnte aufgrund eines unerwarteten Fehlers nicht abgeschlossen werden. Bitte versuchen Sie es erneut.", + UserAccountID, + new Dictionary { ["fn"] = fn }); + } return ServerError(); } } diff --git a/Fuchs/Controllers/RequestValueHelper.cs b/Fuchs/Controllers/RequestValueHelper.cs new file mode 100644 index 0000000..35d6221 --- /dev/null +++ b/Fuchs/Controllers/RequestValueHelper.cs @@ -0,0 +1,21 @@ +using Microsoft.AspNetCore.Http; + +namespace Fuchs.Controllers; + +/// +/// Resolves a request value from the posted form, falling back to the query string. +/// Extracted as pure/testable logic: endpoints in _allowedGet (e.g. req/idoc, rem/idoc) +/// are invoked via a plain GET (window.open with '?id=...'), where +/// has no Content-Type and throws if read directly. +/// +internal static class RequestValueHelper +{ + internal static string? Resolve(bool hasFormContentType, IFormCollection form, IQueryCollection query, string key) + { + if (hasFormContentType && form.TryGetValue(key, out var formValue)) + return formValue.ToString(); + if (query.TryGetValue(key, out var queryValue)) + return queryValue.ToString(); + return null; + } +} diff --git a/Fuchs/Docs/Decisions/0003-interrupting-exceptions-notify-the-user.md b/Fuchs/Docs/Decisions/0003-interrupting-exceptions-notify-the-user.md new file mode 100644 index 0000000..cef17e9 --- /dev/null +++ b/Fuchs/Docs/Decisions/0003-interrupting-exceptions-notify-the-user.md @@ -0,0 +1,72 @@ +--- +status: Accepted +date: 2026-07-08 +applyTo: + - "Fuchs/Controllers/**" + - "Fuchs/Services/**" + - "Fuchs/Notifications/**" +supersededBy: "" +--- + +# 0003 — Any exception that interrupts a user action notifies the user (not just the log) + +## Context +[0001](0001-domain-events-and-notification-triggers.md) requires the *modeled* +failure paths (invoice/reminder/banking create, send, import) to publish a +`*IssueAsync`/`*Failed` event. But an action can also fail through an +**unexpected/unmodeled** exception — a bug, a transient dependency error, an +edge case nobody wrote a specific failure event for. Those were only landing in +the log (`_logger.LogError` + an HTTP 500), so the user saw the action stop with +no explanation and no notification. The user asked that *whenever* an exception +interrupts a process they initiated, they be told via the notification system. + +## Decision +Every exception that **interrupts a user-initiated action** must surface to the +user through `IEventService`, in addition to being logged. Concretely: + +- **Catch-all safety net at the dispatcher.** `IntranetController.Do`'s + top-level `catch` publishes a generic `UserIssueAsync("Aktion fehlgeschlagen", + …)` for any `Do_Process_*` action that throws without having already published + its own (more specific) issue event. It is guarded by + `UserIdent.IsAuthenticated` — pre-auth flows (login/logout, anonymous GETs) + have no session to notify and the HTTP status already conveys the failure. +- **Handlers with their own `catch` must notify locally.** A handler that + swallows its exception (returns a 500/error result instead of rethrowing) + never reaches the `Do` net, so it must call the matching issue event itself — + e.g. `HandleInvoiceGet` calls `InvoiceIssueAsync` before returning 500. Prefer + the domain-specific method (`InvoiceIssueAsync`/`ReminderIssueAsync`/ + `BankingImportIssueAsync`); fall back to `UserIssueAsync` when none fits. +- **Message stays user-readable and broadcast-safe.** Per + [0002](0002-gui-notification-delivery-signalr.md) notifications are broadcast + to every logged-in session, so the German `Message`/`Context` must never carry + the raw exception text or anything sensitive — diagnostics go to the log; the + user gets a plain "could not be completed" message. + +This deliberately **excludes** operations that do not interrupt a discrete user +action: background/best-effort work (blob archiving, startup self-tests, +per-entry parse skips) stays log-only, and auto-refreshing read views (dashboard +widgets, report reloads) return their error status without a toast, because +notifying on every poll cycle would spam the user rather than inform them. + +## Consequences +- New `catch` blocks on a request-handling path must be classified: does the + exception interrupt a user action? If yes → publish an issue event (specific + if one exists, else `UserIssueAsync`). If it is background/best-effort or an + auto-poll read → log only, and say so in a comment. +- The `Do` net is a backstop, not a replacement for specific events: modeled + failures should still publish their contextful `*IssueAsync` at the point of + failure so the message names the invoice/reminder/file involved. +- Because the net only fires on *unhandled* exceptions (handled flows return + rather than rethrow), it does not double-notify the flows that already report + their own failures. + +## Alternatives considered +- **Rely solely on 0001's per-flow issue events**: rejected — it leaves every + unmodeled/unexpected exception silent, which is exactly the gap the user + reported. +- **Notify on every failing read/poll too (widgets, reports)**: rejected — + auto-refresh would turn a transient backend hiccup into a stream of toasts; + those paths surface failure via HTTP status instead. +- **Surface the raw exception message to the GUI**: rejected for the same + reason as 0001 — not user-understandable, leaks internals, and (per 0002) is + visible to every logged-in session. diff --git a/Fuchs/Services/InvoiceService.cs b/Fuchs/Services/InvoiceService.cs index d2901fa..593be5c 100644 --- a/Fuchs/Services/InvoiceService.cs +++ b/Fuchs/Services/InvoiceService.cs @@ -6,6 +6,7 @@ using Fuchs.Observability; using Microsoft.Data.SqlClient; using Microsoft.Extensions.Logging; using MigraDoc.DocumentObjectModel; +using Newtonsoft.Json.Linq; using OCORE.security; using OCORE.SQL; using static OCORE.commons; @@ -48,11 +49,13 @@ public class InvoiceService : IInvoiceService var pl = new List { SQL_VarChar("@authuser", userAccountId), - SQL_VarChar("@Id", id), - SQL_Bit("@includefile", false) + SQL_VarChar("@Id", id) }; + // fds__getInvoice only takes @Id and @authuser (no @includefile) - passing an extra + // parameter makes SQL Server throw "too many arguments", which previously left + // InvoiceRegistration empty (Id "") and silently broke downstream file storage/emailing. var dset = await getSQLDataSet_async( - "EXECUTE [dbo].[fds__getInvoice] @Id, @includefile, @authuser;", + "EXECUTE [dbo].[fds__getInvoice] @Id, @authuser;", Conn, pl, tablenames: new[] { "admin", "inv", "req", "itm" }, Security: dbSec, options: new FIS_SQLOptions()); if (!string.IsNullOrEmpty(dset.Exception)) @@ -93,16 +96,113 @@ public class InvoiceService : IInvoiceService } var invdset = await getSQLDataSet_async(string.Join("\n", sqlParts), - Conn, pl, tablenames: new[] { "inv", "det", "req", "itm" }, + Conn, pl, tablenames: new[] { "inv", "det" }, Security: dbSec, options: new FIS_SQLOptions()); if (!string.IsNullOrEmpty(invdset.Exception)) _logger.LogError("RegisterInvoiceAsync sql exception: {Ex}", invdset.Exception); invoice.InvoiceRegistration = new GenericObjectDictionary(invdset.Table("inv").FirstRow.toObjectDictionary()); _logger.LogInformation("RegisterInvoiceAsync registered id={Id} (change={Change})", invoice.Id, change); + + if (!string.IsNullOrEmpty(invoice.Id) && invoice.Req != null) + await PersistInvoiceLineItemsAsync(invoice, userAccountId, dbSec); + return invoice; } + /// + /// Persists the invoice's service-request groupings and their line items + /// (fds__invoice_servicerequests / fds__invoice_items). These are what + /// fds__getInvoice reads back when a draft is reloaded (e.g. after "Zwischenstand + /// speichern" or reopening a draft from the invoice list) — the preview/PDF itself renders + /// straight from the posted JSON, so without this the preview looked fine right after + /// posting but a reloaded draft showed no steps/positions at all (nothing had ever been + /// written for the service requests/items, only the invoice header row). + /// The whole set is cleared and rewritten on every call — simpler and safer than diffing — + /// mirroring the legacy fds__invoice_data.RegisterInvoice_V1 (VB) behaviour. + /// + private async Task PersistInvoiceLineItemsAsync(FdsInvoiceData invoice, string userAccountId, DatabaseSecurity dbSec) + { + string invoiceId = invoice.Id; + var clearReqPl = new List { SQL_VarChar("@authuser", userAccountId), SQL_VarChar("@Id", invoiceId) }; + await setSQLValue_async("EXECUTE [dbo].[fds__remInvoice_ServiceRequests] @Id, @authuser;", + Conn, clearReqPl, Security: dbSec, options: new FIS_SQLOptions()); + + var itemsTable = (await getSQLDatatable_async( + "SELECT TOP(0) * FROM [dbo].[fds__invoice_items];", + Conn, Security: dbSec, options: new FIS_SQLOptions())).DataTable; + + int sortOrder = -1; + foreach (var reqEntry in invoice.Req!) + { + sortOrder++; // 0-based, matching legacy fds__invoice_data.RegisterInvoice_V1 (VB)'s "ri" loop index + var rdic = new GenericObjectDictionary(reqEntry); + + float vnet = 0; + var valueNetParam = TryCastSingle(rdic.getItem("netval"), ref vnet) + ? SQL_Float("@value_net", vnet) + : SQL_Float("@value_net", stringvalue: rdic.nz("netval")); + var reqPl = new List + { + SQL_VarChar("@authuser", userAccountId), + SQL_VarChar("@InvId", invoiceId), + SQL_BigInt("@mfr__servicerequest", rdic.nz("Id")), + SQL_NVarChar("@title", rdic.nz("text").ne(rdic.nz("nme"))), + valueNetParam, + SQL_Int("@SortOrder", sortOrder) + }; + var reqDt = await getSQLDatatable_async( + "EXECUTE [dbo].[fds__createInvoice_ServiceRequest] @InvId, @mfr__servicerequest, @title, @value_net, @SortOrder;", + Conn, reqPl, Security: dbSec, options: new FIS_SQLOptions()); + if (!string.IsNullOrEmpty(reqDt.Exception)) + _logger.LogError("PersistInvoiceLineItemsAsync: fds__createInvoice_ServiceRequest failed for invoice {Id}: {Ex}", invoiceId, reqDt.Exception); + string invRqId = reqDt.FirstRow.nz("Id"); + if (string.IsNullOrEmpty(invRqId)) continue; + + if (!rdic.TryGetValue("itm", out var itmObj) || itmObj is not JArray itmArray) continue; + int itemSort = 0; + foreach (var tok in itmArray) + { + itemSort++; + if (tok is not JObject itmJson) continue; + var itmDic = new GenericObjectDictionary(itmJson.ToObject>()!); + if ((itmDic.nz("id") ?? "") == "" && (itmDic.nz("typ") ?? "") == "" && (itmDic.nz("t") ?? "") == "") continue; + + var row = itemsTable.NewRow(); + row["InvId"] = invoiceId; + row["InvRqId"] = invRqId; + if (long.TryParse(itmDic.nz("id"), out long mfrItem)) row["mfr__item"] = mfrItem; + row["Type"] = itmDic.nz("typ"); + row["Position"] = itmDic.nz("p"); + row["Quantity"] = itmDic.nz("q"); + row["Text"] = itmDic.nz("t"); + float v = 0; + if (TryCastSingle(itmDic.getItem("v"), ref v)) row["value"] = (decimal)v; + float vt = 0; + if (TryCastSingle(itmDic.getItem("vt"), ref vt)) row["value_total"] = (decimal)vt; + float vat = 0; + if (TryCastSingle(itmDic.nz("vat").Replace("%", ""), ref vat)) row["vat"] = (decimal)vat; + float vs = 0; + if (TryCastSingle(itmDic.getItem("vs"), ref vs)) row["value_service"] = (decimal)vs; + row["det"] = itmDic.no("det", false) is true; + row["SortOrder"] = (byte)Math.Clamp(itemSort, 0, 255); + itemsTable.Rows.Add(row); + } + } + + await setSQLValue_async("EXECUTE [dbo].[fds__remInvoice_Items] @Id, @authuser;", + Conn, new List { SQL_VarChar("@authuser", userAccountId), SQL_VarChar("@Id", invoiceId) }, + Security: dbSec, options: new FIS_SQLOptions()); + + if (itemsTable.Rows.Count > 0) + { + var dtw = new DatatableWriterAsync(itemsTable, Conn, "[dbo].[fds__invoice_items]"); + dtw.DoSubmit(); + if (dtw.SubmitException != null) + _logger.LogError(dtw.SubmitException, "PersistInvoiceLineItemsAsync: bulk-copy of invoice items failed for invoice {Id}", invoiceId); + } + } + public Document GenerateInvoicePdf(FdsInvoiceData invoice, bool draft) { using var act = FuchsTelemetry.StartActivity("invoice.render"); diff --git a/Fuchs/Services/StartupSelfTestService.cs b/Fuchs/Services/StartupSelfTestService.cs index 91bb1a4..3669015 100644 --- a/Fuchs/Services/StartupSelfTestService.cs +++ b/Fuchs/Services/StartupSelfTestService.cs @@ -253,7 +253,8 @@ public class StartupSelfTestService : BackgroundService using var check = new Spire.Pdf.PdfDocument(); check.LoadFromStream(ms); - string text = check.Pages[0].ExtractText(); + var extractor = new Spire.Pdf.Texts.PdfTextExtractor(check.Pages[0]); + string text = extractor.ExtractText(new Spire.Pdf.Texts.PdfTextExtractOptions()); return !text.Contains("Evaluation Warning", StringComparison.OrdinalIgnoreCase) && !text.Contains("created with Spire.PDF", StringComparison.OrdinalIgnoreCase); diff --git a/Fuchs/appsettings.Development.json b/Fuchs/appsettings.Development.json index 5cf9ec1..56b599e 100644 --- a/Fuchs/appsettings.Development.json +++ b/Fuchs/appsettings.Development.json @@ -6,9 +6,11 @@ }, "Logging": { "LogLevel": { - "Default": "Debug", - "Microsoft.AspNetCore": "Debug", - "Microsoft.Hosting.Lifetime": "Debug", + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.AspNetCore": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "System": "Warning", "fds": "Debug", "Fuchs.Controllers": "Debug" } diff --git a/Fuchs/js/intranet/modules/fis.inv_shared.js b/Fuchs/js/intranet/modules/fis.inv_shared.js index ac6b4a2..562f13f 100644 --- a/Fuchs/js/intranet/modules/fis.inv_shared.js +++ b/Fuchs/js/intranet/modules/fis.inv_shared.js @@ -480,14 +480,22 @@ $inv.cSt = function (data) { }); }; $inv.eHtml = function (ev) { - let t = $(this), frmct = ev.data instanceof jQuery ? ev.data : ev.data.t, flds = [ - { name: 'txt', label: 'Text', type: 'html', value: frmct.html(), tinymce: true, attr: { style: 'height: 300px' } } - ]; + let t = $(this), frmct = ev.data instanceof jQuery ? ev.data : ev.data.t; + /* invoiceemail must stay plain text — using the TinyMCE/html editor here used to wrap the + address in

tags, which then got posted and persisted verbatim into SendToEmail. */ + let isPlainText = ev.data.nme === 'invoiceemail'; + let flds = isPlainText + ? [{ name: 'txt', label: 'Text', type: 'text', value: frmct.text() }] + : [{ name: 'txt', label: 'Text', type: 'html', value: frmct.html(), tinymce: true, attr: { style: 'height: 300px' } }]; let change = ev.data.change || null; let sets = { title: t.data('dialog') || '', success: function (response) { - frmct.html(response.txt); + if (isPlainText) { + frmct.text(response.txt || ''); + } else { + frmct.html(response.txt); + } if (typeof change === 'function') { change(response.txt); } @@ -962,7 +970,6 @@ $inv.sprev = (change) => { } $ocms.postXT({ url: $ocms.url('req/' + (change === true ?'sedit':'sprep')), data: { invc: JSON.stringify($inv.invcPayload(d)), id: d.invid ||'' }, success: (response) => { - l.rC('freeze'); let c = $$.dc('imagecollection pdfpreview'), vhr = Math.round(vh() * 0.88), invid = response.id, invtp = response.total; if (invtp > 10) { $$.dc('note warn', c).text($ict.tpe); @@ -976,15 +983,20 @@ $inv.sprev = (change) => { $ocms.dlg(c, { size: [vhr, Math.round(vw() * 0.88)], zindex: 50, form: false, button: $rct.crI, confirm: function (e) { let ct = $(this); + l.aC('freeze'); /* spinner while the invoice is finalized/emailed on the backend */ $ocms.postXT({ - url: $ocms.url('req/sconf'), data: { id: invid }, success: () => { + url: $ocms.url('req/sconf'), data: { id: invid }, success: (cresp) => { ct.trigger('modal_close'); - window.open($ocms.url('req/idoc') + '?id=' + invid, '_blank'); /* open pdf in new tab */ + if (cresp.hasFile === true) { + window.open($ocms.url('req/idoc') + '?id=' + invid, '_blank'); /* open pdf in new tab, only if a file was actually created */ + } $ocms.init('req'); /* go back to request list */ $inv.rReload(); }, error: () => { alert($t.f1); ct.trigger('modal_close'); + }, complete: () => { + l.rC('freeze'); } }); }, cancel: function (e) { @@ -999,6 +1011,10 @@ $inv.sprev = (change) => { $inv.rReload(); } }); + }, error: () => { + alert($ict.eis); + }, complete: () => { + l.rC('freeze'); } }); }; diff --git a/Fuchs/js/intranet/modules/fis.inv_shared.scss b/Fuchs/js/intranet/modules/fis.inv_shared.scss index d77e879..707d506 100644 --- a/Fuchs/js/intranet/modules/fis.inv_shared.scss +++ b/Fuchs/js/intranet/modules/fis.inv_shared.scss @@ -1,4 +1,8 @@  +@keyframes fis_spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} .edit_frm { @@ -376,6 +380,22 @@ } } } + + &.freeze::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 3rem; + height: 3rem; + margin: -1.5rem 0 0 -1.5rem; + border: 0.4rem solid rgba(255, 255, 255, .35); + border-top-color: #FFF; + border-radius: 50%; + z-index: 11; + pointer-events: none; + animation: fis_spin 0.8s linear infinite; + } } } diff --git a/Fuchs/wwwroot/web/fis.inv.css b/Fuchs/wwwroot/web/fis.inv.css index 5f15960..bbd98a4 100644 --- a/Fuchs/wwwroot/web/fis.inv.css +++ b/Fuchs/wwwroot/web/fis.inv.css @@ -96,6 +96,14 @@ table.if td.num { margin: 0.2rem 0; } +@keyframes fis_spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} .edit_frm .invoice_layout { margin: 2rem 2rem 2rem auto; /* align right */ width: 50rem; @@ -381,6 +389,21 @@ table.if td.num { .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: 0.4rem solid rgba(255, 255, 255, 0.35); + border-top-color: #FFF; + border-radius: 50%; + z-index: 11; + pointer-events: none; + animation: fis_spin 0.8s linear infinite; +} .modal-body .lstfrm { display: block; diff --git a/Fuchs/wwwroot/web/fis.inv.de.js b/Fuchs/wwwroot/web/fis.inv.de.js index fff11c0..06e4359 100644 --- a/Fuchs/wwwroot/web/fis.inv.de.js +++ b/Fuchs/wwwroot/web/fis.inv.de.js @@ -1509,7 +1509,6 @@ $inv.sprev = (change) => { } $ocms.postXT({ url: $ocms.url('req/' + (change === true ?'sedit':'sprep')), data: { invc: JSON.stringify($inv.invcPayload(d)), id: d.invid ||'' }, success: (response) => { - l.rC('freeze'); let c = $$.dc('imagecollection pdfpreview'), vhr = Math.round(vh() * 0.88), invid = response.id, invtp = response.total; if (invtp > 10) { $$.dc('note warn', c).text($ict.tpe); @@ -1523,15 +1522,20 @@ $inv.sprev = (change) => { $ocms.dlg(c, { size: [vhr, Math.round(vw() * 0.88)], zindex: 50, form: false, button: $rct.crI, confirm: function (e) { let ct = $(this); + l.aC('freeze'); /* spinner while the invoice is finalized/emailed on the backend */ $ocms.postXT({ - url: $ocms.url('req/sconf'), data: { id: invid }, success: () => { + url: $ocms.url('req/sconf'), data: { id: invid }, success: (cresp) => { ct.trigger('modal_close'); - window.open($ocms.url('req/idoc') + '?id=' + invid, '_blank'); /* open pdf in new tab */ + if (cresp.hasFile === true) { + window.open($ocms.url('req/idoc') + '?id=' + invid, '_blank'); /* open pdf in new tab, only if a file was actually created */ + } $ocms.init('req'); /* go back to request list */ $inv.rReload(); }, error: () => { alert($t.f1); ct.trigger('modal_close'); + }, complete: () => { + l.rC('freeze'); } }); }, cancel: function (e) { @@ -1546,6 +1550,10 @@ $inv.sprev = (change) => { $inv.rReload(); } }); + }, error: () => { + alert($ict.eis); + }, complete: () => { + l.rC('freeze'); } }); }; diff --git a/Fuchs/wwwroot/web/fis.inv.de.min.js b/Fuchs/wwwroot/web/fis.inv.de.min.js index 23e06a8..2eb2f0d 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",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",itemprices:"Positionen mit Preis – Set als Überschrift",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"],remt:{f:["Sehr geehrte Damen und Herren,","ein Mahnschreiben sollte kurz, freundlich und erfolgreich sein. Kurz ist es, freundlich sowieso; ob es auch erfolgreich ist, hängt von Ihnen ab."],m:["Sehr geehrte Damen und Herren,","nun müssen wir Sie noch einmal anschreiben.","Wahrscheinlich haben Sie triftige Gründe dafür, warum Sie die Zahlung unserer Forderung nicht vornehmen und auch nicht auf unsere Mahnung reagieren. Sollten wir darüber nicht einmal sprechen?","Bitte nehmen Sie umgehend in dieser Sache mit uns Kontakt auf."],l:["Sehr geehrte Damen und Herren,",'Eine DRITTE MAHNUNG zu erhalten bereitet Ihnen bestimmt ebenso wenig Freude wie uns, sie zu verschicken. Leider haben wir auf unsere zweite Mahnung noch keine Antwort von Ihnen erhalten.", "Wir bitten Sie, den offenen Betrag innerhalb der nächsten 7 Werktage nach Erhalt dieses Schreibens zu begleichen. Nach Ablauf dieser Frist erfolgt keine weitere Mahnung mehr.',"Sollte die Forderung bis dahin nicht beglichen sein, eröffnen wir das gerichtliche Mahnverfahren. Sollten Sie die Rechnung inzwischen beglichen haben, so betrachten Sie bitte dieses Schreiben als gegenstandslos."]},remt2:{f:["Wir bitten Sie, den noch offenen Rechnungsbetrag innerhalb einer Woche auf unser Konto zu überweisen.","Sollten Sie den Betrag bereits überwiesen haben, so bitten wir Sie, diese Zahlungserinnerung als gegenstandslos zu betrachten."],m:["Um Ihnen zusätzliche Kosten für weitere Mahnungen zu ersparen, bitten wir Sie nunmehr um die Überweisung des noch zu zahlenden Gesamtbetrages inklusive der ggf. bereits fälligen Mahnzinsen und Mahngebühren innerhalb von einer Woche."],l:[]},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 l=$$.dc("mthl",n),r=t.getFullYear(),s=t.getMonth()+1;for(let t=i.getFullYear();t<=r;t++){let n=$$.dc("yr").prependTo(l).text($ict.iov[e]+" - "+t.toString()).toggleClass("selected",t===r);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!==r?12:s);n++){i=new Date(t,n,1);let l=$$.dc("mth").prependTo(a).text($ict.iov[e]+" - "+fdt(i,"MMM yyyy"));if(l.click({yr:t,mt:n},(function(t){if(t.stopPropagation(),l.siblings().rC("selected"),!0===l.is(".selected")){l.toggleClass("selected");let n=fdt(new Date(t.data.yr,t.data.mt,1),"yy-MM-dd");$inv.renderinv(n,"m",e)}l.aC("selected")})),""===e){$$.dc("mthdl",l).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 r=getMonday(i),s=new Date(i);s.setMonth(s.getMonth()+1),s.setDate(0),s=getMonday(s);let c=$$.dc("wfrm",l);for(;r<=s;){let t=$$.dc("wk",c).text(($ict.wk||"W")+" "+fdt(r,"dd.MM.yy"));t.click({rd:new Date(r)},(function(n){n.stopPropagation();let i=fdt(n.data.rd,"yy-MM-dd");$inv.renderinv(i,"w",e),l.siblings().rC("selected").find(".wk").rC("selected"),l.aC("selected").find(".wk").rC("selected"),t.aC("selected")})),$$.dc("wkdl",t).append(gi("compressed","ico")).click({rd:new Date(r)},(function(e){e.stopPropagation();let t=fdt(e.data.rd,"yy-MM-dd");$inv.downloadzip(t,"w")})),r.setDate(r.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})),l=$fis.lf();$ocms.postXT({url:$ocms.url("inv/invl"),data:{mode:t,tgt:e,includes:n},success:i=>{l.rC("fix").aC("hd"),$$.dc("ovhd",a).text(i.admin.title);let r=$$.tblset({},a),s=$invcol.inv,c=$$.tr(r.hd);$$.th(c);$.each(s.fields||[],((e,t)=>{$$.th(c).text(t.label),"vat"===t.name&&$$.th(c)})),$.each(i.invoices||[],((c,d)=>{let o=$$.tr(r.bdy);o.click((function(){l.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(d):$inv.eM()}));let m=$$.td(o,{class:"raux"});d.hasFile?($$.dc("idl ilbtn",m,{title:$ict.dl+"\n"+d.DocumentName}).append(gi("save-file","ico")).click({id:d.Id},$inv.downloadinv),$$.dc("idl ilbtn",m,{title:$ict.dsp+"\n"+d.DocumentName}).append(gi("eye-open","ico")).click({id:d.Id,typ:"inv"},$inv.jdisp)):!1===d.isFinal&&!0===$fis.isAuth("fds_inv",2)&&$$.dc("idl ilbtn",m,{title:$ict.ed}).append(gi("edit","ico")).click({id:d.Id},$inv.doContInv),$$.dc("iitm ilbtn",m,{title:$ict.sItm}).append(gi("list","ico")).click({id:d.Id},$inv.showitm),$$.dc("iitm ilbtn",m,{title:$ict.sPay}).append(gi("euro","ico")).click({id:d.Id},$inv.showpay),$.each(s.fields||[],((l,r)=>{let s,c,m=$$.td(o).aC(r.dtype);switch("select"===(r.type||"")?m.text((r.url||{})[d[r.name]]||""):m.text(d[r.name]),r.name||""){case"vat":s=$$.sel().appendTo($$.td(o,{class:"vsel"})),c=(i.admin.ust_options||"19,0%;16,0%;0,0%").split(";"),$.each(c,((e,t)=>{$$.opt(t,t).appendTo(s)})),s.click((function(e){e.stopPropagation()})).val(d[r.name]).change().change({frm:a,tgt:e,mode:t,id:d.Id,td:m,includes:n},$inv.setvat),m.toggleClass("hl",d[r.name].substr(0,2)!==c[0].substr(0,2)).click((function(e){e.stopPropagation(),$(this).toggleClass("av")}));break;case"balance":m.aC("sh_"+(d.SollHaben||"").toLowerCase());break;case"invstatus":case"reminderstatus":m.aC(("invstatus"===r.name?"is_":"rs_")+d[r.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.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===booln(e,!1)&&i.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(i)},$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),l={},r=$rcol.req.lbl();$.each(t.requests||[],(function(e,t){let n=$$.li({class:"cli rli"}).data($.extend({},t)).appendTo(a),s=$$.dc("lihd",n).addClass(t.state);!0===booln(t.open,!1)&&s.append($$.sc("cbox").click((()=>{n.tC("checked"),i.find("li").rC("checked"),!0===n.is(".checked")?$inv.rMn(t.open):$inv.eM(!0)}))),s.append([$$.sc("eid",t.ExternalId),$$.sc("nme",t.Name)]),$$.dc("lidt",n).append([$$.dc("rqs").append([$$.s(r.State+": "),$$.s($rct.sts[t.State||"-"])]),$$.dc("ivn").append([$$.s(r.InvoiceId+": "),$$.s(t.InvoiceId||"- -")]),$$.dc("wda").append([$$.s(r.WorkDoneAt+": "),$$.s(fdt(t.WorkDoneAt,"dd.MM.yyyy"))])]),l[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),l=$$.dc("lihd",n).addClass(t.invstatus);!1===booln(t.isFinal,!0)?l.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&&l.append($$.sc("dli").click((function(){$inv.disp(t.Id,"inv")}))),l.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"),l=[];if(i.find("li.rli.checked").each((function(){l.push($(this).data("Id"))})),l.length<1)return void alert($rct.dnS);if("i"===t&&l.length>1)return void alert($rct.dII);let r=$fis.frm_edit(),s=$$.dc("invoice_layout",r).append($$.dc("btn sprev").click($inv.sprev)),c=$fis.cf().width()>s.width()+n.width()+20;n.tC("fix",c).tC("hd",!c),$inv.eM(!1,!0);let d=$$.dc("rfrm").ldng(1),o=$ocms.dlg(d,{width:1e3});o.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("req/iget"),timeout:60,data:{id:a,mode:"ful",typ:t,sel:l.join(",")},success:e=>{let t=$$.dc("srq",s),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 l,r,c=e.admin||{},d=(e,t,i,a,l)=>{let r=$$.dc("inpfrm",s).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",r).rwText(t);$$.dc("axf",r).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{n.tbl.data("new")[i]=e}},l),$inv.eHtml)),n.tbl.data("new")[i]=t};d("tfrm",c.invoicetitle,"invoicetitle",0,null),d("adrfrm",c.invoiceaddress,"invoiceaddress",0,null),d("locfrm","","loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),d("emailfrm",c.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",s).append($$.dc("content").text(c.sender)),c.provisionend&&(r=c.provisionstart?$rct.provP:$rct.provD,l=c.provisionstart?fdt(c.provisionstart,"dd.MM.yyyy")+" - "+fdt(c.provisionend,"dd.MM.yyyy"):fdt(c.provisionend,"dd.MM.yyyy")),d("admfrm",l,"provisionperiod",r,1),n.tbl.data("new").CustomValues=c.CustomValues||"",$$.dc("inpfrm ctpfrm",s).text(jObj(c.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv"),$inv.eM(!1,!0,"iss,p13b,setm,ctp")},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)),l=$fis.cf().width()>a.width()+n.width()+20;n.tC("fix",l).tC("hd",!l),$inv.eM(!1,!0);let r=$$.dc("rfrm").ldng(1),s=$ocms.dlg(r,{width:1e3});s.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),timeout:90,data:{id:t.id},success:e=>{s&&s.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 l=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(l),n.ft.appendTo(n.tbl);let r,s,c=e.admin||{},d=(e,t,i,l,r)=>{let s=$$.dc("inpfrm",a).aC(e).append("string"==typeof l?$$.dc("ahd",l):l>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{n.tbl.data("new")[i]=e}},r),$inv.eHtml)),n.tbl.data("new")[i]=t};d("tfrm",c.invoicetitle,"invoicetitle",0,null),d("adrfrm",c.invoiceaddress,"invoiceaddress",0,null),d("locfrm",c.provisionlocation,"loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),d("emailfrm",c.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",a).append($$.dc("content").text(c.sender)),c.provisionend&&(s=c.provisionstart?$rct.provP:$rct.provD,r=c.provisionstart?fdt(c.provisionstart,"dd.MM.yyyy")+" - "+fdt(c.provisionend,"dd.MM.yyyy"):fdt(c.provisionend,"dd.MM.yyyy")),d("admfrm",r,"provisionperiod",s,1),n.tbl.data("new").CustomValues=c.CustomValues||"",$$.dc("inpfrm ctpfrm",a).text(jObj(c.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv")},complete:()=>{s.c.trigger("modal_close")}})},error:()=>{s&&s.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 l=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(l,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 r=$$.tr($$.tbody(a.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(r),a.ft.appendTo(a.tbl);let s=(e,n,i,l,r)=>{let s=$$.dc("inpfrm",t).aC(e).append("string"==typeof l?$$.dc("ahd",l):l>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(n);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},r),$inv.eHtml)),a.tbl.data("new")[i]=n};s("tfrm",n.InvoiceTitle,"invoicetitle",0,null),s("adrfrm",n.SendToAddress,"invoiceaddress",0,null),s("locfrm",n.ProvisionLocation,"loc",1,null),s("emailfrm",n.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",t).append($$.dc("content").text(e.admin.sender)),s("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,"iss,p13b,setm,ctp")},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),l=$ocms.dlg(a,{width:1e3});l.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),data:{id:e.id},success:t=>{l&&l.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 l=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(l,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 r=$$.tr($$.tbody(a.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(r),a.ft.appendTo(a.tbl);let s=(e,t,i,l,r)=>{let s=$$.dc("inpfrm",n).aC(e).append("string"==typeof l?$$.dc("ahd",l):l>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},r),$inv.eHtml)),a.tbl.data("new")[i]=t};s("tfrm",t.InvoiceTitle,"invoicetitle",0,null),s("adrfrm",t.SendToAddress,"invoiceaddress",0,null),s("locfrm",t.ProvisionLocation,"loc",1,null),s("emailfrm",t.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(e.admin.sender)),s("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:()=>{l.c.trigger("modal_close")}})},error:()=>{l&&l.c.trigger("modal_close")}})},$inv.eHtml=function(e){let t=$(this),n=e.data instanceof jQuery?e.data:e.data.t,i=[{name:"txt",label:"Text",type:"html",value:n.html(),tinymce:!0,attr:{style:"height: 300px"}}],a=e.data.change||null,l={title:t.data("dialog")||"",success:function(e){n.html(e.txt),"function"==typeof a&&a(e.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(i,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(){let e=$(this).data();e.vat=fnum(n,{style:"percent"}).replace(" ",""),(e.net_val||0)>0&&(e.vat_val=e.net_val*n),(e.svcnet_val||0)>0&&(e.svcvat_val=e.svcnet_val*n)})),$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"]),l="N"+(65536*(1+Math.random())||0).toString(16).substr(6),r=$$.tr({id:"itm_"+l.toString(),class:"itm"});$ocms.dlgform(a,{title:t.data("dialog")||"",success:function(e){r.data($.extend({Id:l},i,e)),$inv.rrw.call(r),r.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 l=$rcol.itm.clone(a).applyValues(i);l.set("Type","hidden","type"),$inv.eRw.call(t,n,i,l)},$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",swapdone:(e,t,n,i)=>{$inv.t_fds_inv()}})},$inv.rrw=function(){let e=$(this),t=e.data(),n={},i=e.is(".placeholder"),a=e.is(".hidenote"),l=e=>$$.d().append(e).html(),r=[$$.dc("ibtn insb",{title:$rct.iRb}).append(gi("indent-left")).click(e,$inv.inRow)];!1===i&&(r.unshift($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(e,$inv.eRow)),r.push($$.dc("ibtn del",{title:$rct.dR}).append(gi("trash")).click((function(t){confirm($rct.cD)&&(e.remove(),$inv.t_fds_inv())}))));let s=$$.dc("axf").append(r);!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:l(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},$$.dc("ibtn ico move",s,{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)?l($$[0]("p").text(t.NameOrNumber)):"")+(t.Note||""):(n.tt=n.det?"":$$.s(t.Note||"").text(),n.q=t.quantity||fnum(t.quantityhours)+" "+(t.UnitString||""),n.t=t.htmltext||(n.det?l($$.s(t.NameOrNumber||""))+l($$.dc("desc").html(t.Note)):l($$.s(t.NameOrNumber||""))),n.v=t.net,n.vt=t.net_val)),""!==(t.Note||"")&&$$.dc("ibtn add",s).append(gi("object-align-left")).click((function(t){$inv.rrw.call(e.tC("hidenote"))}));let c=[$$.tdc("aux").append(s),$$.tdc("keep").text(n.p)];""===n.id?c.push($$.td(e,{colspan:4}).append(n.t)):(Array.prototype.push.apply(c,n.q?[$$.tdc("keep").text(n.q)]:[]),Array.prototype.push.apply(c,[$$.tdc("txt",{colspan:n.q?1:2,title:n.tt}).append(n.t),$$.tdc("currency").text(fnum(n.v,$rct.cst)),$$.tdc("currency inetval").text(fnum(n.vt,$rct.cst)).attr("title",$rct.svcPart+": "+fnum(n.vs,$rct.cst))])),e.empty().attr("class",i?"placeholder":"itm").aC(n.Typ).tC("hidenote",a).append(c),t.co=n},$inv.invSumUpdate=function(){let e=$(this),t=e.children("tfoot").empty(),n=bool((e.data().admin||{}).p13b||"",!1);e.nextAll(".fnote").remove();let i={ttn:0,ttb:0,ttvat:0,tscn:0,tscvat:0,vat:{},itmnet:{}},a=[],l=(e,n,i)=>$$.tdc("currency",$$.tr(t,{class:i||"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text(e)]),fnum(n,$rct.cst)),r=t=>$$.dc("fnote").insertAfter(e).rwText(t),s=e.children("tbody");s.each(((e,t)=>{let n=$(t),l=n.data()||{},r=[],s=[],c=null,d=0,o=n.find("tr.itm"),m=0;n.tC("empty",o.length<1),o.each(((e,t)=>{let n=$(t).data()||{};!function(e,t,n){t.tscn+=e.svcnet_val||0,t.tscvat+=e.svcvat_val||0,t.ttn+=e.net_val||0,t.ttvat+=e.vat_val||0,t.ttb+=(e.net_val||0)+(e.vat_val||0),""!==(e.vat||"")&&(t.vat[e.vat]=(t.vat[e.vat]||0)+(e.vat_val||0))}(n,i,l.Id),d+=n.net_val||0,r.push(n.co);let a=$inv.itemToContract(n);"set"===a.type&&""!==a.id?c=a.id:null!==c&&""!==(a.id||"")&&(a.setId=c),s.push(a),(void 0===n.SortOrder||null===n.SortOrder?-1:n.SortOrder)>-1&&(!1===["text","title"].includes((n.Type||"other").toLowerCase())&&m++,n.SortOrder=0,n.position=m,$inv.rrw.call(t))})),n.find("tr.isum > td.isumval").text(fnum(d,$rct.cst)),a.push({Id:l.Id,nme:l.Name,text:l.text,itm:r,items:s,netval:d})}));let c=e.find("tbody:not(.empty)").length;s.find("tr.isum").tC("hidden",c<2),l("Netto",i.ttn),!1===n?$.each(i.vat,((e,t)=>{l($rct.vat+" "+e,t,"tvat")})):i.ttb=i.ttn,l("Summe",i.ttb);let d=e.data().admin.type;"i"===d?(r($rct.note2),r($rct.note4)):"c"===d?r($rct.note2):(r(string($rct.note3,[fnum((i.tscn+i.tscvat)*(e.data().admin.tax_servicerefund||0),$rct.cst)])).aC("ntax"),r($rct.note2),r(string($rct.note1,[fnum(i.tscn+i.tscvat,$rct.cst),fnum(i.tscn,$rct.cst),fnum(i.tscvat,$rct.cst)]))),!0===n&&r($rct.note13b),e.data("sms",i),e.data("bai",a)},$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 l,r=$$.sc("text",n.text),s=($$.td(i,{colspan:t?4:5}).append(r),["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:r,change:e=>{n.text=e,$inv.t_fds_inv()}},$inv.eHtml),t&&($$.tdc("currency isumval",i),l={Id:n.Id.toString()+"_osum",net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0},l.tbl=$$.tblset({class:"stbl"})),$.each(n.items||[],((n,i)=>{let a,r={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())r.svcnet_val=i.net_val||0,r.svcvat_val=i.vat_val||0;t?(a=$$.tr(l.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(s,((e,t)=>{l[t]+=r[t]})),a.data(r)):($.extend(r,i),a=$$.tr(e,{id:"itm"+i.Id,class:"itm"}),a.data(r),$inv.rrw.call(a))})),t){let t=$$.tr(e,{id:"itmsq"+n.Id,class:"itm osum"}).data(l);$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=()=>{$("div.invoice_layout table.invi").trigger("fds.inv")},$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.itemToContract=function(e){let t=((e=e||{}).Type||"").toString().toLowerCase(),n={id:(e.Id||"").toString(),type:t,title:"",desc:"",qty:"",price_net:"",total_net:e.net_val||0,vat:e.vat||""};var i;return e.co&&"osum"===e.co.typ?(n.desc=e.co.t||"",n.total_net=e.net_val||0):["text","title"].includes(t)&&0===(e.net_val||0)?(n.desc=e.htmltext||("#"!==(e.NameOrNumber||"").substr(0,1)?(i=$$[0]("p").text(e.NameOrNumber||""),$$.d().append(i).html()):"")+(e.Note||""),n.total_net=""):(n.title=e.NameOrNumber||"",n.desc=e.Note||"",n.qty=e.quantity||(0!==(e.quantityhours||0)?fnum(e.quantityhours)+(e.UnitString?" "+e.UnitString:""):""),n.price_net=e.net||0,n.total_net=e.net_val||0),n},$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("itemprices"),i("setonly")]);t=$ocms.dlg(a,{width:800})},$inv.setSetmode=e=>{let t=$("div.invoice_layout").find("table.invi").data();t.admin=t.admin||{},t.admin.setmode=e,t.inv=t.inv||{};let n=(t.inv.InvoiceOptions||"").split(",").filter((e=>""!==e&&0!==e.indexOf("setmode:")));e&&"setprice"!==e&&n.push("setmode:"+e),t.inv.InvoiceOptions=n.join(",")},$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))},typedvalues:!0})},$inv.invcPayload=function(e){let t=(e=e||{}).sms||{},n=$.extend({},e.new),i=$.extend({},e.admin);return n.total_net=t.ttn||0,n.total_gross=t.ttb||0,n.title=null!=n.invoicetitle?n.invoicetitle:n.title||"",n.provisionlocation=null!=n.loc?n.loc:n.provisionlocation||"",n.paymentterm=null!=i.paymentterms?i.paymentterms:n.paymentterm||"",i.customerid=null!=i.customerid?i.customerid:i.CustomerId,{admin:i,req:e.bai,sms:e.sms,new:n}},$inv.ssave=()=>{var e=$("div.invoice_layout"),t=e.find("table.invi").data();$inv.t_fds_inv(),e.aC("freeze"),$ocms.postXT({url:$ocms.url("req/save"),data:{invc:JSON.stringify($inv.invcPayload(t)),id:t.invid||""},success:e=>{$inv.cntInv({id:e.id})},error:()=>{alert($ict.eis)},complete:()=>{e.rC("freeze")}})},$inv.sprev=e=>{var t=$("div.invoice_layout"),n=t.find("table.invi").data();e=bool(e,!1),$inv.t_fds_inv(),t.aC("freeze"),!1!==$fis.ValidateEmail(n.new.invoiceemail||"")||!1!==bool(confirm($ict.ivE+$ict.ivEc),!1)?$ocms.postXT({url:$ocms.url("req/"+(!0===e?"sedit":"sprep")),data:{invc:JSON.stringify($inv.invcPayload(n)),id:n.invid||""},success:e=>{t.rC("freeze");let n=$$.dc("imagecollection pdfpreview"),i=Math.round(.88*vh()),a=e.id,l=e.total;l>10&&$$.dc("note warn",n).text($ict.tpe),$.each(e.img||[],(function(e,t){$$.dc("pdfp",n).append($$.img(t).css("max-height",(i-rpx(6)).toString()+"px"))}));for(let t=(e.img||[]).length+1;t<=l;t++)$$.dc("pdfp ph",n).append($$.dc("note",$ict.pna));$ocms.dlg(n,{size:[i,Math.round(.88*vw())],zindex:50,form:!1,button:$rct.crI,confirm:function(e){let t=$(this);$ocms.postXT({url:$ocms.url("req/sconf"),data:{id:a},success:()=>{t.trigger("modal_close"),window.open($ocms.url("req/idoc")+"?id="+a,"_blank"),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),t.trigger("modal_close")}})},cancel:function(e){$(this);confirm($ict.cdI)&&$ocms.postXT({url:$ocms.url("req/sdel"),data:{id:a}}),$inv.rReload()}})}}):t.rC("freeze")},$inv.rReload=()=>{try{let e=$("#listframe ul.rql:first").data();$inv.cInv2({id:e.search})}catch(e){}},$inv.quantChange=function(e){let t=$(this).closest("form"),n={},i=e=>parseFloat(e.toString().replace("%","").replace(",",".")),a=e=>e.toFixed(2);t.find(":input").each(((e,t)=>{n[$(t).attr("name")]=$(t)}));let l=parseInt(n.quantityhours.val()||"0"),r=i(n.net.val()||"0"),s=.01*i(n.vat.val());l>0&&r>0&&(n.net_val.val(a(l*r)),n.vat_val.val(a(l*r*s)),["Service"].includes(n.Type.val())&&(n.svcnet_val.val(a(l*r)),n.svcvat_val.val(a(l*r*s))))},$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,l=$$.tr(i.hd);$$.th(l);$.each(a.fields||[],((e,t)=>{$$.th(l).text(t.label)}));let r=!1;$.each(e,((e,t)=>{r=!r;let n=$$.tr(i.bdy).tC("alt",r),l=$$.td(n);n.click((function(){n.tC("selected").siblings().rC("selected")})),!0===bool(t.hasFile,!1)&&($$.dc("idl ilbtn",l,{title:$ict.dl+"\n"+t.DocumentName}).append(gi("save-file","ico")).click({id:t.Id},$inv.downloadrem),$$.dc("idl ilbtn",l,{title:$ict.remdsp+"\n"+t.DocumentName}).append(gi("eye-open","ico")).click({id:t.Id,typ:"rem"},$inv.jdisp),$$.dc("idl ilbtn",l,{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),l=t[i.name];if("function"==typeof i.dfnc)i.dfnc.call(a,l,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(l)),a.append($$.dc("ttip").html(l));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"),l=$$.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(l.hd);$ict.rovl.forEach(((t,n)=>$$.th(e,t))),$.each(n.lst,((e,t)=>{$$.tr(l.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(l.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)},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);$ict.remt[t.type].forEach((e=>$$[0]("p").rwText(e).appendTo(i)));let a=$$.tblset({class:"invi"},i);a.ft=$$[0]("tfoot"),a.tbl.data($.extend({invid:t.invid,new:{}},e));let l=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$ict.remHR.forEach((e=>$$.th(l,e))),$inv.rRemRw.call($$.tr(a.bdy),a.tbl.data()),a.ft.appendTo(a.tbl),$ict.remt2[t.type].forEach((e=>$$[0]("p").rwText(e).appendTo(i)));let r=(e,t,i,l,r)=>{let s=$$.dc("inpfrm",n).aC(e).append("string"==typeof l?$$.dc("ahd",l):l>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},r),$inv.eHtml)),a.tbl.data("new")[i]=t};r("tfrm",t.subject,"subject",0,null),r("adrfrm",t.invoiceaddress,"invoiceaddress",0,null),r("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")},complete:()=>{}})},$inv.rprev=()=>{var e=$("div.invoice_layout"),t=e.find("table.invi"),n=t.data();$.extend(n.new,t.find("tbody > tr:first").data()),e.aC("freeze"),!1!==$fis.ValidateEmail(n.new.invoiceemail||"")||!1!==bool(confirm($ict.ivE+$ict.ivEc),!1)?$ocms.postXT({url:$ocms.url("rem/prep"),data:{remc:JSON.stringify({rem:n.rm,new:n.new}),id:n.invid||""},success:t=>{e.rC("freeze");let n=$$.dc("imagecollection pdfpreview"),i=Math.round(.88*vh()),a=t.id;$.each(t.img||[],(function(e,t){$$.dc("pdfp",n).append($$.img(t).css("max-height",(i-rpx(6)).toString()+"px"))})),$ocms.dlg(n,{size:[i,Math.round(.88*vw())],zindex:50,form:!1,button:$ict.remd,confirm:function(e){let t=$(this);$ocms.postXT({url:$ocms.url("rem/conf"),data:{id:a},success:()=>{t.trigger("modal_close"),window.open($ocms.url("rem/idoc")+"?id="+a,"_blank"),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),t.trigger("modal_close")}})},cancel:function(e){$(this);confirm($ict.cdI)&&$ocms.postXT({url:$ocms.url("rem/del"),data:{id:a}}),$inv.rReload()}})}}):e.rC("freeze")},$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",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",itemprices:"Positionen mit Preis – Set als Überschrift",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"],remt:{f:["Sehr geehrte Damen und Herren,","ein Mahnschreiben sollte kurz, freundlich und erfolgreich sein. Kurz ist es, freundlich sowieso; ob es auch erfolgreich ist, hängt von Ihnen ab."],m:["Sehr geehrte Damen und Herren,","nun müssen wir Sie noch einmal anschreiben.","Wahrscheinlich haben Sie triftige Gründe dafür, warum Sie die Zahlung unserer Forderung nicht vornehmen und auch nicht auf unsere Mahnung reagieren. Sollten wir darüber nicht einmal sprechen?","Bitte nehmen Sie umgehend in dieser Sache mit uns Kontakt auf."],l:["Sehr geehrte Damen und Herren,",'Eine DRITTE MAHNUNG zu erhalten bereitet Ihnen bestimmt ebenso wenig Freude wie uns, sie zu verschicken. Leider haben wir auf unsere zweite Mahnung noch keine Antwort von Ihnen erhalten.", "Wir bitten Sie, den offenen Betrag innerhalb der nächsten 7 Werktage nach Erhalt dieses Schreibens zu begleichen. Nach Ablauf dieser Frist erfolgt keine weitere Mahnung mehr.',"Sollte die Forderung bis dahin nicht beglichen sein, eröffnen wir das gerichtliche Mahnverfahren. Sollten Sie die Rechnung inzwischen beglichen haben, so betrachten Sie bitte dieses Schreiben als gegenstandslos."]},remt2:{f:["Wir bitten Sie, den noch offenen Rechnungsbetrag innerhalb einer Woche auf unser Konto zu überweisen.","Sollten Sie den Betrag bereits überwiesen haben, so bitten wir Sie, diese Zahlungserinnerung als gegenstandslos zu betrachten."],m:["Um Ihnen zusätzliche Kosten für weitere Mahnungen zu ersparen, bitten wir Sie nunmehr um die Überweisung des noch zu zahlenden Gesamtbetrages inklusive der ggf. bereits fälligen Mahnzinsen und Mahngebühren innerhalb von einer Woche."],l:[]},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 l=$$.dc("mthl",n),r=t.getFullYear(),s=t.getMonth()+1;for(let t=i.getFullYear();t<=r;t++){let n=$$.dc("yr").prependTo(l).text($ict.iov[e]+" - "+t.toString()).toggleClass("selected",t===r);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!==r?12:s);n++){i=new Date(t,n,1);let l=$$.dc("mth").prependTo(a).text($ict.iov[e]+" - "+fdt(i,"MMM yyyy"));if(l.click({yr:t,mt:n},(function(t){if(t.stopPropagation(),l.siblings().rC("selected"),!0===l.is(".selected")){l.toggleClass("selected");let n=fdt(new Date(t.data.yr,t.data.mt,1),"yy-MM-dd");$inv.renderinv(n,"m",e)}l.aC("selected")})),""===e){$$.dc("mthdl",l).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 r=getMonday(i),s=new Date(i);s.setMonth(s.getMonth()+1),s.setDate(0),s=getMonday(s);let c=$$.dc("wfrm",l);for(;r<=s;){let t=$$.dc("wk",c).text(($ict.wk||"W")+" "+fdt(r,"dd.MM.yy"));t.click({rd:new Date(r)},(function(n){n.stopPropagation();let i=fdt(n.data.rd,"yy-MM-dd");$inv.renderinv(i,"w",e),l.siblings().rC("selected").find(".wk").rC("selected"),l.aC("selected").find(".wk").rC("selected"),t.aC("selected")})),$$.dc("wkdl",t).append(gi("compressed","ico")).click({rd:new Date(r)},(function(e){e.stopPropagation();let t=fdt(e.data.rd,"yy-MM-dd");$inv.downloadzip(t,"w")})),r.setDate(r.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})),l=$fis.lf();$ocms.postXT({url:$ocms.url("inv/invl"),data:{mode:t,tgt:e,includes:n},success:i=>{l.rC("fix").aC("hd"),$$.dc("ovhd",a).text(i.admin.title);let r=$$.tblset({},a),s=$invcol.inv,c=$$.tr(r.hd);$$.th(c);$.each(s.fields||[],((e,t)=>{$$.th(c).text(t.label),"vat"===t.name&&$$.th(c)})),$.each(i.invoices||[],((c,d)=>{let o=$$.tr(r.bdy);o.click((function(){l.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(d):$inv.eM()}));let m=$$.td(o,{class:"raux"});d.hasFile?($$.dc("idl ilbtn",m,{title:$ict.dl+"\n"+d.DocumentName}).append(gi("save-file","ico")).click({id:d.Id},$inv.downloadinv),$$.dc("idl ilbtn",m,{title:$ict.dsp+"\n"+d.DocumentName}).append(gi("eye-open","ico")).click({id:d.Id,typ:"inv"},$inv.jdisp)):!1===d.isFinal&&!0===$fis.isAuth("fds_inv",2)&&$$.dc("idl ilbtn",m,{title:$ict.ed}).append(gi("edit","ico")).click({id:d.Id},$inv.doContInv),$$.dc("iitm ilbtn",m,{title:$ict.sItm}).append(gi("list","ico")).click({id:d.Id},$inv.showitm),$$.dc("iitm ilbtn",m,{title:$ict.sPay}).append(gi("euro","ico")).click({id:d.Id},$inv.showpay),$.each(s.fields||[],((l,r)=>{let s,c,m=$$.td(o).aC(r.dtype);switch("select"===(r.type||"")?m.text((r.url||{})[d[r.name]]||""):m.text(d[r.name]),r.name||""){case"vat":s=$$.sel().appendTo($$.td(o,{class:"vsel"})),c=(i.admin.ust_options||"19,0%;16,0%;0,0%").split(";"),$.each(c,((e,t)=>{$$.opt(t,t).appendTo(s)})),s.click((function(e){e.stopPropagation()})).val(d[r.name]).change().change({frm:a,tgt:e,mode:t,id:d.Id,td:m,includes:n},$inv.setvat),m.toggleClass("hl",d[r.name].substr(0,2)!==c[0].substr(0,2)).click((function(e){e.stopPropagation(),$(this).toggleClass("av")}));break;case"balance":m.aC("sh_"+(d.SollHaben||"").toLowerCase());break;case"invstatus":case"reminderstatus":m.aC(("invstatus"===r.name?"is_":"rs_")+d[r.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.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===booln(e,!1)&&i.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(i)},$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),l={},r=$rcol.req.lbl();$.each(t.requests||[],(function(e,t){let n=$$.li({class:"cli rli"}).data($.extend({},t)).appendTo(a),s=$$.dc("lihd",n).addClass(t.state);!0===booln(t.open,!1)&&s.append($$.sc("cbox").click((()=>{n.tC("checked"),i.find("li").rC("checked"),!0===n.is(".checked")?$inv.rMn(t.open):$inv.eM(!0)}))),s.append([$$.sc("eid",t.ExternalId),$$.sc("nme",t.Name)]),$$.dc("lidt",n).append([$$.dc("rqs").append([$$.s(r.State+": "),$$.s($rct.sts[t.State||"-"])]),$$.dc("ivn").append([$$.s(r.InvoiceId+": "),$$.s(t.InvoiceId||"- -")]),$$.dc("wda").append([$$.s(r.WorkDoneAt+": "),$$.s(fdt(t.WorkDoneAt,"dd.MM.yyyy"))])]),l[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),l=$$.dc("lihd",n).addClass(t.invstatus);!1===booln(t.isFinal,!0)?l.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&&l.append($$.sc("dli").click((function(){$inv.disp(t.Id,"inv")}))),l.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"),l=[];if(i.find("li.rli.checked").each((function(){l.push($(this).data("Id"))})),l.length<1)return void alert($rct.dnS);if("i"===t&&l.length>1)return void alert($rct.dII);let r=$fis.frm_edit(),s=$$.dc("invoice_layout",r).append($$.dc("btn sprev").click($inv.sprev)),c=$fis.cf().width()>s.width()+n.width()+20;n.tC("fix",c).tC("hd",!c),$inv.eM(!1,!0);let d=$$.dc("rfrm").ldng(1),o=$ocms.dlg(d,{width:1e3});o.ft.rwText($rct.rq2),$ocms.postXT({url:$ocms.url("req/iget"),timeout:60,data:{id:a,mode:"ful",typ:t,sel:l.join(",")},success:e=>{let t=$$.dc("srq",s),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 l,r,c=e.admin||{},d=(e,t,i,a,l)=>{let r=$$.dc("inpfrm",s).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",r).rwText(t);$$.dc("axf",r).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{n.tbl.data("new")[i]=e}},l),$inv.eHtml)),n.tbl.data("new")[i]=t};d("tfrm",c.invoicetitle,"invoicetitle",0,null),d("adrfrm",c.invoiceaddress,"invoiceaddress",0,null),d("locfrm","","loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),d("emailfrm",c.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",s).append($$.dc("content").text(c.sender)),c.provisionend&&(r=c.provisionstart?$rct.provP:$rct.provD,l=c.provisionstart?fdt(c.provisionstart,"dd.MM.yyyy")+" - "+fdt(c.provisionend,"dd.MM.yyyy"):fdt(c.provisionend,"dd.MM.yyyy")),d("admfrm",l,"provisionperiod",r,1),n.tbl.data("new").CustomValues=c.CustomValues||"",$$.dc("inpfrm ctpfrm",s).text(jObj(c.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv"),$inv.eM(!1,!0,"iss,p13b,setm,ctp")},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)),l=$fis.cf().width()>a.width()+n.width()+20;n.tC("fix",l).tC("hd",!l),$inv.eM(!1,!0);let r=$$.dc("rfrm").ldng(1),s=$ocms.dlg(r,{width:1e3});s.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),timeout:90,data:{id:t.id},success:e=>{s&&s.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 l=$$.tr($$.tbody(n.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(l),n.ft.appendTo(n.tbl);let r,s,c=e.admin||{},d=(e,t,i,l,r)=>{let s=$$.dc("inpfrm",a).aC(e).append("string"==typeof l?$$.dc("ahd",l):l>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{n.tbl.data("new")[i]=e}},r),$inv.eHtml)),n.tbl.data("new")[i]=t};d("tfrm",c.invoicetitle,"invoicetitle",0,null),d("adrfrm",c.invoiceaddress,"invoiceaddress",0,null),d("locfrm",c.provisionlocation,"loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),d("emailfrm",c.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",a).append($$.dc("content").text(c.sender)),c.provisionend&&(s=c.provisionstart?$rct.provP:$rct.provD,r=c.provisionstart?fdt(c.provisionstart,"dd.MM.yyyy")+" - "+fdt(c.provisionend,"dd.MM.yyyy"):fdt(c.provisionend,"dd.MM.yyyy")),d("admfrm",r,"provisionperiod",s,1),n.tbl.data("new").CustomValues=c.CustomValues||"",$$.dc("inpfrm ctpfrm",a).text(jObj(c.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv")},complete:()=>{s.c.trigger("modal_close")}})},error:()=>{s&&s.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 l=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(l,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 r=$$.tr($$.tbody(a.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(r),a.ft.appendTo(a.tbl);let s=(e,n,i,l,r)=>{let s=$$.dc("inpfrm",t).aC(e).append("string"==typeof l?$$.dc("ahd",l):l>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(n);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},r),$inv.eHtml)),a.tbl.data("new")[i]=n};s("tfrm",n.InvoiceTitle,"invoicetitle",0,null),s("adrfrm",n.SendToAddress,"invoiceaddress",0,null),s("locfrm",n.ProvisionLocation,"loc",1,null),s("emailfrm",n.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",t).append($$.dc("content").text(e.admin.sender)),s("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,"iss,p13b,setm,ctp")},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),l=$ocms.dlg(a,{width:1e3});l.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),data:{id:e.id},success:t=>{l&&l.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 l=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$rct.invHR.forEach((e=>$$.th(l,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 r=$$.tr($$.tbody(a.tbl),{class:"placeholder"}).data({net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0});$inv.rrw.call(r),a.ft.appendTo(a.tbl);let s=(e,t,i,l,r)=>{let s=$$.dc("inpfrm",n).aC(e).append("string"==typeof l?$$.dc("ahd",l):l>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},r),$inv.eHtml)),a.tbl.data("new")[i]=t};s("tfrm",t.InvoiceTitle,"invoicetitle",0,null),s("adrfrm",t.SendToAddress,"invoiceaddress",0,null),s("locfrm",t.ProvisionLocation,"loc",1,null),s("emailfrm",t.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(e.admin.sender)),s("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:()=>{l.c.trigger("modal_close")}})},error:()=>{l&&l.c.trigger("modal_close")}})},$inv.eHtml=function(e){let t=$(this),n=e.data instanceof jQuery?e.data:e.data.t,i=[{name:"txt",label:"Text",type:"html",value:n.html(),tinymce:!0,attr:{style:"height: 300px"}}],a=e.data.change||null,l={title:t.data("dialog")||"",success:function(e){n.html(e.txt),"function"==typeof a&&a(e.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(i,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(){let e=$(this).data();e.vat=fnum(n,{style:"percent"}).replace(" ",""),(e.net_val||0)>0&&(e.vat_val=e.net_val*n),(e.svcnet_val||0)>0&&(e.svcvat_val=e.svcnet_val*n)})),$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"]),l="N"+(65536*(1+Math.random())||0).toString(16).substr(6),r=$$.tr({id:"itm_"+l.toString(),class:"itm"});$ocms.dlgform(a,{title:t.data("dialog")||"",success:function(e){r.data($.extend({Id:l},i,e)),$inv.rrw.call(r),r.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 l=$rcol.itm.clone(a).applyValues(i);l.set("Type","hidden","type"),$inv.eRw.call(t,n,i,l)},$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",swapdone:(e,t,n,i)=>{$inv.t_fds_inv()}})},$inv.rrw=function(){let e=$(this),t=e.data(),n={},i=e.is(".placeholder"),a=e.is(".hidenote"),l=e=>$$.d().append(e).html(),r=[$$.dc("ibtn insb",{title:$rct.iRb}).append(gi("indent-left")).click(e,$inv.inRow)];!1===i&&(r.unshift($$.dc("ibtn edit",{title:$rct.cP}).append(gi("pencil")).click(e,$inv.eRow)),r.push($$.dc("ibtn del",{title:$rct.dR}).append(gi("trash")).click((function(t){confirm($rct.cD)&&(e.remove(),$inv.t_fds_inv())}))));let s=$$.dc("axf").append(r);!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:l(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},$$.dc("ibtn ico move",s,{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)?l($$[0]("p").text(t.NameOrNumber)):"")+(t.Note||""):(n.tt=n.det?"":$$.s(t.Note||"").text(),n.q=t.quantity||fnum(t.quantityhours)+" "+(t.UnitString||""),n.t=t.htmltext||(n.det?l($$.s(t.NameOrNumber||""))+l($$.dc("desc").html(t.Note)):l($$.s(t.NameOrNumber||""))),n.v=t.net,n.vt=t.net_val)),""!==(t.Note||"")&&$$.dc("ibtn add",s).append(gi("object-align-left")).click((function(t){$inv.rrw.call(e.tC("hidenote"))}));let c=[$$.tdc("aux").append(s),$$.tdc("keep").text(n.p)];""===n.id?c.push($$.td(e,{colspan:4}).append(n.t)):(Array.prototype.push.apply(c,n.q?[$$.tdc("keep").text(n.q)]:[]),Array.prototype.push.apply(c,[$$.tdc("txt",{colspan:n.q?1:2,title:n.tt}).append(n.t),$$.tdc("currency").text(fnum(n.v,$rct.cst)),$$.tdc("currency inetval").text(fnum(n.vt,$rct.cst)).attr("title",$rct.svcPart+": "+fnum(n.vs,$rct.cst))])),e.empty().attr("class",i?"placeholder":"itm").aC(n.Typ).tC("hidenote",a).append(c),t.co=n},$inv.invSumUpdate=function(){let e=$(this),t=e.children("tfoot").empty(),n=bool((e.data().admin||{}).p13b||"",!1);e.nextAll(".fnote").remove();let i={ttn:0,ttb:0,ttvat:0,tscn:0,tscvat:0,vat:{},itmnet:{}},a=[],l=(e,n,i)=>$$.tdc("currency",$$.tr(t,{class:i||"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text(e)]),fnum(n,$rct.cst)),r=t=>$$.dc("fnote").insertAfter(e).rwText(t),s=e.children("tbody");s.each(((e,t)=>{let n=$(t),l=n.data()||{},r=[],s=[],c=null,d=0,o=n.find("tr.itm"),m=0;n.tC("empty",o.length<1),o.each(((e,t)=>{let n=$(t).data()||{};!function(e,t,n){t.tscn+=e.svcnet_val||0,t.tscvat+=e.svcvat_val||0,t.ttn+=e.net_val||0,t.ttvat+=e.vat_val||0,t.ttb+=(e.net_val||0)+(e.vat_val||0),""!==(e.vat||"")&&(t.vat[e.vat]=(t.vat[e.vat]||0)+(e.vat_val||0))}(n,i,l.Id),d+=n.net_val||0,r.push(n.co);let a=$inv.itemToContract(n);"set"===a.type&&""!==a.id?c=a.id:null!==c&&""!==(a.id||"")&&(a.setId=c),s.push(a),(void 0===n.SortOrder||null===n.SortOrder?-1:n.SortOrder)>-1&&(!1===["text","title"].includes((n.Type||"other").toLowerCase())&&m++,n.SortOrder=0,n.position=m,$inv.rrw.call(t))})),n.find("tr.isum > td.isumval").text(fnum(d,$rct.cst)),a.push({Id:l.Id,nme:l.Name,text:l.text,itm:r,items:s,netval:d})}));let c=e.find("tbody:not(.empty)").length;s.find("tr.isum").tC("hidden",c<2),l("Netto",i.ttn),!1===n?$.each(i.vat,((e,t)=>{l($rct.vat+" "+e,t,"tvat")})):i.ttb=i.ttn,l("Summe",i.ttb);let d=e.data().admin.type;"i"===d?(r($rct.note2),r($rct.note4)):"c"===d?r($rct.note2):(r(string($rct.note3,[fnum((i.tscn+i.tscvat)*(e.data().admin.tax_servicerefund||0),$rct.cst)])).aC("ntax"),r($rct.note2),r(string($rct.note1,[fnum(i.tscn+i.tscvat,$rct.cst),fnum(i.tscn,$rct.cst),fnum(i.tscvat,$rct.cst)]))),!0===n&&r($rct.note13b),e.data("sms",i),e.data("bai",a)},$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 l,r=$$.sc("text",n.text),s=($$.td(i,{colspan:t?4:5}).append(r),["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:r,change:e=>{n.text=e,$inv.t_fds_inv()}},$inv.eHtml),t&&($$.tdc("currency isumval",i),l={Id:n.Id.toString()+"_osum",net_val:0,vat_val:0,svcnet_val:0,svcvat_val:0,net:0},l.tbl=$$.tblset({class:"stbl"})),$.each(n.items||[],((n,i)=>{let a,r={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())r.svcnet_val=i.net_val||0,r.svcvat_val=i.vat_val||0;t?(a=$$.tr(l.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(s,((e,t)=>{l[t]+=r[t]})),a.data(r)):($.extend(r,i),a=$$.tr(e,{id:"itm"+i.Id,class:"itm"}),a.data(r),$inv.rrw.call(a))})),t){let t=$$.tr(e,{id:"itmsq"+n.Id,class:"itm osum"}).data(l);$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=()=>{$("div.invoice_layout table.invi").trigger("fds.inv")},$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.itemToContract=function(e){let t=((e=e||{}).Type||"").toString().toLowerCase(),n={id:(e.Id||"").toString(),type:t,title:"",desc:"",qty:"",price_net:"",total_net:e.net_val||0,vat:e.vat||""};var i;return e.co&&"osum"===e.co.typ?(n.desc=e.co.t||"",n.total_net=e.net_val||0):["text","title"].includes(t)&&0===(e.net_val||0)?(n.desc=e.htmltext||("#"!==(e.NameOrNumber||"").substr(0,1)?(i=$$[0]("p").text(e.NameOrNumber||""),$$.d().append(i).html()):"")+(e.Note||""),n.total_net=""):(n.title=e.NameOrNumber||"",n.desc=e.Note||"",n.qty=e.quantity||(0!==(e.quantityhours||0)?fnum(e.quantityhours)+(e.UnitString?" "+e.UnitString:""):""),n.price_net=e.net||0,n.total_net=e.net_val||0),n},$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("itemprices"),i("setonly")]);t=$ocms.dlg(a,{width:800})},$inv.setSetmode=e=>{let t=$("div.invoice_layout").find("table.invi").data();t.admin=t.admin||{},t.admin.setmode=e,t.inv=t.inv||{};let n=(t.inv.InvoiceOptions||"").split(",").filter((e=>""!==e&&0!==e.indexOf("setmode:")));e&&"setprice"!==e&&n.push("setmode:"+e),t.inv.InvoiceOptions=n.join(",")},$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))},typedvalues:!0})},$inv.invcPayload=function(e){let t=(e=e||{}).sms||{},n=$.extend({},e.new),i=$.extend({},e.admin);return n.total_net=t.ttn||0,n.total_gross=t.ttb||0,n.title=null!=n.invoicetitle?n.invoicetitle:n.title||"",n.provisionlocation=null!=n.loc?n.loc:n.provisionlocation||"",n.paymentterm=null!=i.paymentterms?i.paymentterms:n.paymentterm||"",i.customerid=null!=i.customerid?i.customerid:i.CustomerId,{admin:i,req:e.bai,sms:e.sms,new:n}},$inv.ssave=()=>{var e=$("div.invoice_layout"),t=e.find("table.invi").data();$inv.t_fds_inv(),e.aC("freeze"),$ocms.postXT({url:$ocms.url("req/save"),data:{invc:JSON.stringify($inv.invcPayload(t)),id:t.invid||""},success:e=>{$inv.cntInv({id:e.id})},error:()=>{alert($ict.eis)},complete:()=>{e.rC("freeze")}})},$inv.sprev=e=>{var t=$("div.invoice_layout"),n=t.find("table.invi").data();e=bool(e,!1),$inv.t_fds_inv(),t.aC("freeze"),!1!==$fis.ValidateEmail(n.new.invoiceemail||"")||!1!==bool(confirm($ict.ivE+$ict.ivEc),!1)?$ocms.postXT({url:$ocms.url("req/"+(!0===e?"sedit":"sprep")),data:{invc:JSON.stringify($inv.invcPayload(n)),id:n.invid||""},success:e=>{let n=$$.dc("imagecollection pdfpreview"),i=Math.round(.88*vh()),a=e.id,l=e.total;l>10&&$$.dc("note warn",n).text($ict.tpe),$.each(e.img||[],(function(e,t){$$.dc("pdfp",n).append($$.img(t).css("max-height",(i-rpx(6)).toString()+"px"))}));for(let t=(e.img||[]).length+1;t<=l;t++)$$.dc("pdfp ph",n).append($$.dc("note",$ict.pna));$ocms.dlg(n,{size:[i,Math.round(.88*vw())],zindex:50,form:!1,button:$rct.crI,confirm:function(e){let n=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("req/sconf"),data:{id:a},success:e=>{n.trigger("modal_close"),!0===e.hasFile&&window.open($ocms.url("req/idoc")+"?id="+a,"_blank"),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),n.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},cancel:function(e){$(this);confirm($ict.cdI)&&$ocms.postXT({url:$ocms.url("req/sdel"),data:{id:a}}),$inv.rReload()}})},error:()=>{alert($ict.eis)},complete:()=>{t.rC("freeze")}}):t.rC("freeze")},$inv.rReload=()=>{try{let e=$("#listframe ul.rql:first").data();$inv.cInv2({id:e.search})}catch(e){}},$inv.quantChange=function(e){let t=$(this).closest("form"),n={},i=e=>parseFloat(e.toString().replace("%","").replace(",",".")),a=e=>e.toFixed(2);t.find(":input").each(((e,t)=>{n[$(t).attr("name")]=$(t)}));let l=parseInt(n.quantityhours.val()||"0"),r=i(n.net.val()||"0"),s=.01*i(n.vat.val());l>0&&r>0&&(n.net_val.val(a(l*r)),n.vat_val.val(a(l*r*s)),["Service"].includes(n.Type.val())&&(n.svcnet_val.val(a(l*r)),n.svcvat_val.val(a(l*r*s))))},$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,l=$$.tr(i.hd);$$.th(l);$.each(a.fields||[],((e,t)=>{$$.th(l).text(t.label)}));let r=!1;$.each(e,((e,t)=>{r=!r;let n=$$.tr(i.bdy).tC("alt",r),l=$$.td(n);n.click((function(){n.tC("selected").siblings().rC("selected")})),!0===bool(t.hasFile,!1)&&($$.dc("idl ilbtn",l,{title:$ict.dl+"\n"+t.DocumentName}).append(gi("save-file","ico")).click({id:t.Id},$inv.downloadrem),$$.dc("idl ilbtn",l,{title:$ict.remdsp+"\n"+t.DocumentName}).append(gi("eye-open","ico")).click({id:t.Id,typ:"rem"},$inv.jdisp),$$.dc("idl ilbtn",l,{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),l=t[i.name];if("function"==typeof i.dfnc)i.dfnc.call(a,l,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(l)),a.append($$.dc("ttip").html(l));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"),l=$$.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(l.hd);$ict.rovl.forEach(((t,n)=>$$.th(e,t))),$.each(n.lst,((e,t)=>{$$.tr(l.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(l.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)},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);$ict.remt[t.type].forEach((e=>$$[0]("p").rwText(e).appendTo(i)));let a=$$.tblset({class:"invi"},i);a.ft=$$[0]("tfoot"),a.tbl.data($.extend({invid:t.invid,new:{}},e));let l=$$.tr(a.hd).aC("shd").append([$$.th().aC("aux")]);$ict.remHR.forEach((e=>$$.th(l,e))),$inv.rRemRw.call($$.tr(a.bdy),a.tbl.data()),a.ft.appendTo(a.tbl),$ict.remt2[t.type].forEach((e=>$$[0]("p").rwText(e).appendTo(i)));let r=(e,t,i,l,r)=>{let s=$$.dc("inpfrm",n).aC(e).append("string"==typeof l?$$.dc("ahd",l):l>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},r),$inv.eHtml)),a.tbl.data("new")[i]=t};r("tfrm",t.subject,"subject",0,null),r("adrfrm",t.invoiceaddress,"invoiceaddress",0,null),r("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")},complete:()=>{}})},$inv.rprev=()=>{var e=$("div.invoice_layout"),t=e.find("table.invi"),n=t.data();$.extend(n.new,t.find("tbody > tr:first").data()),e.aC("freeze"),!1!==$fis.ValidateEmail(n.new.invoiceemail||"")||!1!==bool(confirm($ict.ivE+$ict.ivEc),!1)?$ocms.postXT({url:$ocms.url("rem/prep"),data:{remc:JSON.stringify({rem:n.rm,new:n.new}),id:n.invid||""},success:t=>{e.rC("freeze");let n=$$.dc("imagecollection pdfpreview"),i=Math.round(.88*vh()),a=t.id;$.each(t.img||[],(function(e,t){$$.dc("pdfp",n).append($$.img(t).css("max-height",(i-rpx(6)).toString()+"px"))})),$ocms.dlg(n,{size:[i,Math.round(.88*vw())],zindex:50,form:!1,button:$ict.remd,confirm:function(e){let t=$(this);$ocms.postXT({url:$ocms.url("rem/conf"),data:{id:a},success:()=>{t.trigger("modal_close"),window.open($ocms.url("rem/idoc")+"?id="+a,"_blank"),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),t.trigger("modal_close")}})},cancel:function(e){$(this);confirm($ict.cdI)&&$ocms.postXT({url:$ocms.url("rem/del"),data:{id:a}}),$inv.rReload()}})}}):e.rC("freeze")},$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 cc82883..5964b5a 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}.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: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 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}.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: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 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,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAaz0lEQVR4nO2caVAbd97neSbObPJs7VE7z4vU82Krdp+t2qmt3apnNhObIzanwfjKZBJPJpXJU45rbGcSH4mvCZM4g08yPjC2s/gCJjG2sfEB2BhkA+ISoPtAal3dUnerW/fRkgAnYbLz3RfQHQHCHHby7Ivpqk9JdLcE+vh//H6//1/OyPjb8bfj/6sDwI8IgnjBarX+T4fD8dKpU6fyPv744w379+//zYEDB0pVKlUWSZI/M5vN/8Rx3PP/2n/vEx2NjY3PbNmy5dny8vIls9HY2PjMnj17/u1HH330X48dO/bazp07q3ft2jV05MgR75kzZ5I1NTXfNDQ0/OXmzZvf1tfXj1+4cOHRsWPHIp988ol9+/btt0+cOLH74MGDL77//vs/aWxsfKa8vPxHjY2Nz8yH8vLyH80HAH83F4sStGHDhv+QkZHxv5977rmCFPJElixZkveTn/zkX4qKii7v2LGDOnfu3JhMJvvr8PAwSJIETdNgWRYcx8HL8+A4DgzDgKIo2O12qFQq3Lhx4y+HDx8Ov/HGG50//elPy5577rmC559/PnvJkiXzISuVZ599NvPZZ59dloalc/DSCy+88D8UCsW/W5CgjRs3/seXXnrps9raWu+1a9f4a9eu8Q0NDXx9fT1/5MgRfvPmzd7y8vJke3v7XwmCAMuy8PI8PCwLN02DpChYHU6YrHYYrXZYbA44nE5QLhcYhgHn8YDnOFAUBbVajbq6um/ef//9wIcffshdunTJc+3aNe7q1avctWvXZtDQ0OARuX79uuf69eue1HOp5+fixo0bnhMnTpgbGhoKF9yCiouLz/M8j5GREYyOjsLn8+HGjRs4c+YMWlpaYLPZwHMcPCwLu5OE0mhBm9KAqz1q1HWqcKlThfMdKpx7qMLFDhVqOlX4Uq5C84AOfToTjIQVbrcbnMcDhmGgVCpRV1eH6upq6PV66feOjIzMyujo6JyMjY3NyqNHj6BUKhPt7e3rFyxo5cqV5zweD5LJJBwOB86fP4+LFy/CaDRKXcZIWNGmNOBytwb/54ESle1KnBRpG5ok9fkQKtuVOC1ToqZLjdsKHYYMZjicTng8LCiKQltbGyorK9HR0YFYLIZEIoF4PI5EIjHjeTKZTEvqtbkEDwwMLE5QUVFRtcfjgU6nw6lTp3Dz5k2QJAmWZWGx2fFQbcSfuzU481CN0w/VOJvCmVlId8/5Tg2aBvRQmyygXC6wLIuBgQFUVVWhsbERwWBQEpMqZzZB85EjXlu0oLfeeuvfFxcXV3d2duLYsWNoa2sDTdOg3W6ojGY09OlQ3alBdZcWF7t1qOnRozaFuh496npTmHZdpKZHjwvyifeq69aiQ22EzWYHwzDQ6/U4c+YM6uvrEQ6H5916Unlc6xkZGcHY2NjiBS1duvTc4cOHIZPJpBmoTzeMy706nOvSobbXgKsDw7g2aEHDkAWNSgJ31Fbc1dpwX2+HzODAA6MDMoMD7QYHWnV2NGtsuK22olFJoGHIgoZBC64NmnFZYcLFbj0uyXVoVRpgJqxgGAYGgwEnTpxAU1OTJGexYsTzqa1n0YLefvvt/1JaWtpz69Yt0DQNJ0miS2vCF716XOox4OqgGXc0NjRr7WjVO9BpptBvdWPQTkNpp6F0MLMyaKfRb3Wj2+KCzOhEi86BJq0dt9RWfNlvQk2PHk2DBhgtBGiaxtDQED777DPcv38fLpcLFEU9FpfLNYNAIDBFzhMJArBk06ZNn50/f/5bp9MJl8s10XL6DKjrM+KW2op2E4WHwy7022joKA+MLk7C4OKgpzhoSA+UDhYDdgb9Nhr9NhoDdgZDDgZqJwsd5YHexUHpZNFhdkFmonDf6MTVQTPqeg1oVRphnpT08OFD7N+/H83NzdBoNFCr1fNGo9GApum0s9+iBNXU1OTs37/fZzabpTHn+oAJX/SbcEdjg5yg0WdnoHfxIFgfrJ4JCNYHE+2FhuIw6PCgz8agZ5Ju6wTiz702Bv12FirSAy3FQWFn0W2l0WNj0GF24YaSwNWBYXRohmGz20GSJGpra1FdXQ2/349IJJKWaDSalng8/nQE0TT93AcffHD53r17oGkaJosVzcph1CuGcUdjQ5+dhYriQHj8IL1BUN4gSG8AVo8fetoLJcVh0PmEkBy6CDduqgg0Dpmh0JtBkiRUKhUOHDiApqYmGI1G6PX6eWEwGMCybNrYacGC6uvr1xw6dEiw2WxwOp2Q68xoGDLjhpKYaDWMDw5vEGwgDDYQhtsfAsEFoKd90Lq9TxWZiUSjisA9tRkmswUkSaKhoQFHjhyByWSCw+GYN36/f4qYRY1BPp/v73fu3NnU3t4OmqahNxNoURNoVBF4MEzByAZA+sLgQ1Hw4SjoQAQEF4SJDXwvaNw+tOqduKu1oV9vhsPhgF6vx8GDByGXyxEMBuH3++ckEAggFovNGmXPW9DVq1f/+Y9//KPXarXC4XCgW29Bi9aGFp0dGrcXpD8CX0RAICrAE4rB5g2D4EPfK312Fvf1Dsh0VhjNFjgcDtTU1KCiogKDg4MYGhqaF263e0rLWZSgo0eP7rh06dK3brcbJgsBmd6Ge3oHHppdsPsi8EXjCAsJeKMCqEAUDn8Uzu8ZAxtAu9EJmcGBIeOEoLa2Nhw4cEDqOj6f77H4/f4pLWj6YK1QKOYW5PP5/v63v/3t9a6uLrhcLqhNFjw0OdFqcGKI5OEJC4jGkwgKCdAhAa5g7AeBDEQhJ2jIzRT6jDYQhBVGowGHDh1Ca2srSJJ87NjjdDrhdDqlMShdADkvQfX19f9tx44drMFggMPhwMCwDXILBdkwBYIPIRRPIpZMgo/GwYSfgEgc7CRMWIArFAM1KcIVjIEOC99dj0y8RkXx6LG40D3shMlsAUEQOHv2LM6cOTOvGcxgMMDj8cwQJOZtfX19idbW1scLOnbs2PKKioqE3W6HxWpFn9mJbsKNDsINdygGITmKUDwJLppYPLEEmEgcTn8URjYAJcWj3+FBn51Fr51Bv4PFIMlBz/jh8EfBROLgY0mYPEHICRf6rS5ohwnYbDbcvHkTp0+fRiAQmDX2iUajiMViUkVgerohXuvt7Z2XoNc+//zzMRdFwWQhoCAo9Fpp9NpZ8NE4hJFR+IQReIXkgvAJSfiEEXDRBOy+CIYoHnIrjU6LGw8n6Zgk9We5lcYQycPChWDhQ+i10hiy01CZrbDbbWhtbUVZWRkUCgW0Wi00Go2EVqudAcMwU1pOLBaTAst5CTp+/PiOCxcujLvdbhjNBFR2N/psNAZJDt5YApHECPzxhRGIj8AbS8Lpj0Lt8qLHxkyMJ9b50UXQ6LbS6LOz6LczUDsZqC12WK1WyGQyfPTRRzCbzXC73VPyLrfbLTE9F0skEpKccDiMSCSCnp6euQVVVVVV1NbWwu1ywWAmoHVOpAJ9DhYGxg9XMAY+lkAgPoJgYpL4NFLO+4QkqEAUWtqHfodHSi967ezCsLHosTFQOFhoSQ80hBMEYYFcLkdZWRmsViu8Xu8UxNkr9VwkEpkhZ6GCTtfV1YEiSRgsVugpDwacHigcEww4OWjcPli4INyhGPhoAt6Y2IWS8MaS4KMJuEMxWL0h6Bk/Bp0c+h3fvceTMOicSGy1VhLDw8OQy+XYs2cPZDIZVCoVlEollEolVCqVhHhOqVTC5XJNkRMKhRAKhRAOhyGXy+cWdPLkyfJLly79lSRJGC1WmFweqCgOQ+R3DE4+KikeapcXOtoHA+uHgfFDR/ugcXuhpPgp9z4pqsn3U1McTG4OehsJo9EImUyGffv2gSRJhEIhBINB6UMHg8Ep+P1+BIPBGXLE18xL0Geffba1srLyG5J0wmQhMOzyQOf2Qu16PKpJ5rpvMejcPti5ANQuL/RuLyw0D4PNCZPJhLa2NuzZswdqtRoWiwUWy8T0Lz4XMZvNMJlMcLvdM+SIgrq6uuYW9Kc//ekX+/fvHyMIAsMWAmYXCxPjg47+18PJB0H7Q9DSPpgYHwiGh9Fqh8lkQmtrKz755BNotVqYzWaJ4eFhidSM3+VySYJEOYFAAMFgcH6Cjh49mvXee+/F9Xo9LAQBC0WD8PhgYPww/sAYGD8ILoBAOArKF4KB8cPK+mBlvDBaCCiVStTX16OyslKqDYmDrighEAhIAzXP8/D7/TPkiIlsZ2fn3IIUCsV/3rhxo62npwdWqxUWBwkH54fZE8TwD4yFC4IPRRCJxmDjQxj2BEFyfhBuDwxGI/r7+nD48GFUVVVNqS6Kg/PQ0BAGBwcxODiIgYEBDAwMwG63S4JEOQsSBODHb731Vm19fT3sdhvMVhtIzgcbHwLBh2H9ASD4EKx8GEwgglgsBl84Cisfho0PwsX7QZBuqFQq9PX14dNPP4VcLgfHcWBZFgzDwO12g6IokCQpIeZiHo9nhhwxke3o6JhbUEZGRsapU6c2lZWVfW02m2G2EHAyHpC+EBz+yA8GG4wiGoshGouBDkZg90fg8gVB8X6YbXb09/fj9u3bKC8vRygUkoI/QRAQjUal0mtqd0vXclIz/XkLam9v/+8bN26ku7q6YLFYYHNSoL0BUIEoyGDse4UKxsCFJ8QIggB/ZOIcFYiA8QXgZDlotFp0dnbi+PHjqKurW5CY6XJSg8qHDx/OTxCAH7/99tu1Z8+ehdiKXB4OTDACd0j43qBDArwRAdGYAEEQEI4KYMMT15hACIzXD8LugFwuR3NzM3bu3AmlUol4PP5Ecnieh9frxYMHD+YnKCMjI+P48eNZv/nNb7w9PT0wm82wOUl4fAGwKWWIpwkfERCKxhCLCRCEGKIxAd7oxDVPKArOHwTFclCr1ZDJZKiqqsLJkycRCoVmyJke48wlR2RBggA888Ybb5yqqKiASqXCsNkMimbBB8PgownwseRTwRdLIBiLT7aamCQnEJsocfDROPhAEKwvgGELgQcPHuDWrVvYu3cvtFpt2q71OEHp5HAcB57nIZPJ5i8oIyMjo6Oj43+9/vrr5JUrV6DVakEQVjAeD3zhKPzC1Iw9JCQQEuIICAn4heTs2b2QRECYqEhGhDhiwndiYrEYooKAkJCQ7vUGQ+D9AdgcTnR1dqKpqQn79u3D5s2bYTQawfM8WJaVYBhmYu8ATc/I5F2TGyKmy/F4POA4buGCMjIyMt55550dW7ZsGb1//z50Oh1sdjs8Xi/8kRhCiVGEkmMIJUYRiScREwTEBAFRQUBUiCMixBEREojEExOPQhzRyXtiQgxC7Dtik68JJ0YQSo5NVAJCYXj9AZAuN/r6+tDS0oJTp06huLgYmZmZeO+99yCTyTA0NCTFOQqFQqK/v38GFotFEiTKeSJBb7755j/87Gc/ay4rK8Pdu3ehVqthdzjg4XgEIlFEkmOIjjyaIDmKWCKJWFxsGYJUrROmEZuUEhMExOIJxBIj0vuEEyPwB0Pw+vwgXW4oFAq0tLSgrq4Or7/+OnJycpCVlYVly5Zhx44d0Ol0UvyT2mLENfrUWIimaXAcN0UOy7LweDxob29fuKCNGzc+l52dfXrXrl0oKytDU1MTlEolrDYbWJZFMBxBNDGC+NhXUxkdQ3xkFEJyBEIiCSGRSCE5QXJ04r7J1wijjxCOxeEPBuH1+WB3ONDd3Y2mpiZcunQJb775JpYvXy6RlZWFzMxM7N27F0NDQ7BYLFNyMJPJBJPJBKPRCKPRCIPBAKfTOUOOyKIFlZaWVg0NDWHv3r345JNPcPv2bfT392N4eBhuNw2vz4dwNIb46BhGHn2Nka++mcbXE+dFpl1Pjn2FWGIEwVAYPr8fHo6H2WJBR0cH7ty5g3PnzuHXv/41cnNzsWLFiilkZ2dj2bJl2Lp1K2QyGZRKZdoUQ8RisUwRwzAMGIZ5MkElJSVVPM/D4XDg8OHD2LVrF2pra9He3g6VSgWbzQaGYeD3BxCORBBPjmBk7CuMfvUNHn09jkffTGXs63GMPPoaidExRIU4gsEQ/P4AOI6HzW6HQqHA3bt3cfPmTVRWVuK1115Dbm5uWkRJmZmZ2LVrF4xGI1iWTTtIUxQFmqYlQaIcmqbBMMyTCRL3KHIch88//xybNm3CyZMncefOHXR2dkKlUoEgCKmP+/2BiUpdJCKlDNFYDJFoFKFweFKKHzzPg2EYWK1WDA4OorW1Fbdv30ZtbS127tyJ0tJS5OXlzYooKicnB8uWLcO2bdsgk8kwODiYdrAeHh6eIUekra1t0YJOeTweaWdXKBRCc3MzPvzwQ+zduxfV1dVobGzE/fv30dPTA41GAwtBwD65XUX8VxM3fJIkCbvDAYKYKFl0dHSgpaUFt27dwtWrV1FRUYFNmzahsLAQmZmZyMvLQ35+flpSZeXk5GDp0qV499130dPTI41D4hhkNBpht9vThgM0TeP+/fsLF7R9+/Z/U1xcXCkKSt0b6HK5UFdXh61bt2Lnzp2orKxEQ0MDbt26hZaWFrS1taGjowNdXV3o7u5Gd3c35HI5ZDIZ7t27h+bmZty+fRs3b97ExYsX8fHHH+Odd97Bvn37cPfuXZw9exZ5eXnIyspCXl4eCgoKJGYTlpOTg8zMTKnKaLdPrH5YrVYQBAGSJGfIEVdAnrqgZDKJSCQCo9GImpoa/P73v8f777+P3bt3o6KiAlVVVfjiiy/Q0NCAhoYGXL9+HY2Njbhy5Qqqq6tRWVmJAwcO4He/+x3effdd7NmzB3V1dejp6YFSqYRCocCxY8eQn5+PrKws5Ofno7CwcIqo6eTn5+Pll1+WBu579+6ht7cXPT096O7uhtFonCFHFNTa2vpkgqbvLk0kEgiHw4hGoxgbG4PP54NGo8GVK1fw0UcfYdu2bdi9ezf27NmDbdu2SfLEn7dt24bKykrIZDKYzWbwPA+fzycFcWKX/POf/4yioiJkZWWhoKAARUVFKCwsnJWCggJJ0vbt26FSqeB0OqUun27wdrlcTyaI47gpYlIFRSIRqR4jrnuLO8G6urrQ0tKCq1ev4vLly7h16xZkMhkUCgV0Oh1MJtOUovr02MVoNEKr1eL48eNSdxMlzYYoavny5cjMzMTu3bthNBpnBJOpgSRFUd+voNHRUanbJRIJUBQFg8EAo9EIk8k0I3gzGAxSIV2n00mkLhOnLiOrVCqcPn0aBQUFyMrKQmFhIVauXJmWVFmpkvR6PWiaThtlUxSFe/fu/XCCxCx7Nmar28xWnvD5fPB4PKipqZEkFRUVobi4GMXFxY+VJUratWsXdDrdjJKs0+kESZI/rCBxQE9FmJafLUYWx3Gora1FYWGhJKmkpEQSlY6VK1dKkj788ENotVq4XK4pteonErRq1ap5C3pacmZrRWJLEiVlZ2dj5cqVKCkpmRVR1IoVK7Bs2TJ88MEH0Gg0UzZdkSSJ1tbW+N27d9c+FUHibCYWqqYLSlcCTbdgl07C9HpNuuTS7XbjwoULKCgoQHZ2NoqLi7Fq1aq0pMrKzc2VWpJOp5PSDJZlceHChcHr16//04IEbdiw4cfTBaVO9dMFia3FbrdLA2zqbvfZNhWkbrQUE83pyWZqrUehUKC3txdHjx5Fbm6uJKm0tFRiNlmipH379sFmsyEUCuHu3bu2o0ePLl+QnMe1oNRAMZ0glmWl5mu322G322Gz2SRSo1uR1HX01OXjdFO/uKVOp9Ph7NmzKCwsRE5ODkpKSrB69eopoqazatWqKZIaGxvZEydOlCxYTroWFI/HEQ6HEY/HZwhKHW/8fn/assJs5dB0xS2n0zmnZJvNBrPZjKqqKikfW7VqFdasWYPVq1fPipgEZ2VlITc3t6+lpeUfn0TQSY7jkEwmQVEUHjx4AJvNNqWLjYyMTBFksVigUCjmVQbt6+uT6O3tlVIDETGPE3O5dHR0dKCiokLKx0RJsyGKys/Px7Jly74tLS29olarX3hiQWazGXK5HBRFIR6PTxGUOlMFg8G0qwfTB9uFtKy5WpXFYkF1dTUKCgqQk5OD0tJSrF27dgpr1qyRHkVR+fn5WLp06berV6+uX7Ck6YKi0Si8Xi8EQZC6WDgcnrJbNBqNStPxdBmp9ZfpKw6zraen7ncWZx3xvaYLdTgcOHfunCRp9erVWLduHdatWzdDVqo0UVJpaenFBX01XBTE83zab/RNFyTGNxaLZday52zdLl1XS+1y/f39cDgcaeWkfpHO6XSirq4ORUVFkqT169dLotKxdu1a5Ofn48UXX0weOHBgw7wFbdmy5dmSkpIT0wWJM5m4vy+RSEwJ/rxe76zdZ64uJLYasQuldiOXyzWrHPE9KIqC3+/HlStXJElr1qzB+vXrH8vq1auxdOlSHDp06PC8BZWXly9JFZQaCwmCIEW/oqDHrY/Pdxl4trEqXddMN/uJ+xXD4TC+/PJLFBYW4uWXX8batWvxyiuvpGX9+vVYu3Ytli5dOn7o0KHtixY0PXUQ9/elDtjzWf6dTYwoJ90gPp/QQEwbxM2afr8fNTU1/zcvL+/b5cuXY+3atfjFL34h8corr0iPRUVFWLFihaqpqWn+0bQoiOO4tDlVqqD5tJp0ckQxC5UzfTAXBVEUJe07DAQCuHz5cn92dvbhl156KbRixQqsW7cOr7766hRRxcXFyM/PtzQ2NubOW85sglJnK/EPEQThieQ8bvqfjxzxGz2iIHFbXXNzs2nPnj3LADzzq1/96t2f//znkqRf/vKXePXVV7Fy5Urk5eWZFywnnaDp2XiqoPlk43PJmU9cNJsc8bnL5YLf70d7ezv1hz/8YaX4WQAs2bBhw5YXX3zRl52djfz8fKxYsQK5ubmmRclJFcTzvFQIm08XW2zG/rgAcraxZzo0TUMul/Offvrpa9P/XyAAS44cOVJaXFx8tbi4uKukpORsY2PjPy9KzuQb/l1BQcHh7u7uvyiVyvGhoaHxwcFBiYGBgXGtVjuu0WjG+/v7Jfr6+sb7+vrGe3t7x3t7e8d7enokuru7x7u7u8flcvm4XC4f7+rqGu/q6hrv7Owc7+zsHO/o6Bjv6OgYf/jwocSDBw/GHzx4MC6TycZlMtl4e3t7WmQy2V+uX78eOHjw4L8A+NFsn4vjuOc5jvtPAH68aDnisXHjxp++995769Kxfft2idnueVps3bp1TjZv3ry+rKwsB8CzT/zB/3b87Xgqx/8D2eEtvSevT9MAAAAASUVORK5CYII=)}.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}.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 diff --git a/Fuchs/wwwroot/web/fis.req.css b/Fuchs/wwwroot/web/fis.req.css index fda2a1b..adea418 100644 --- a/Fuchs/wwwroot/web/fis.req.css +++ b/Fuchs/wwwroot/web/fis.req.css @@ -233,6 +233,14 @@ table.if th.keep, table.if td.keep { content: "\e067"; } +@keyframes fis_spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} .edit_frm .invoice_layout { margin: 2rem 2rem 2rem auto; /* align right */ width: 50rem; @@ -518,6 +526,21 @@ table.if th.keep, table.if td.keep { .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: 0.4rem solid rgba(255, 255, 255, 0.35); + border-top-color: #FFF; + border-radius: 50%; + z-index: 11; + pointer-events: none; + animation: fis_spin 0.8s linear infinite; +} .modal-body .lstfrm { display: block; diff --git a/Fuchs/wwwroot/web/fis.req.de.js b/Fuchs/wwwroot/web/fis.req.de.js index 6050c7f..eda85f7 100644 --- a/Fuchs/wwwroot/web/fis.req.de.js +++ b/Fuchs/wwwroot/web/fis.req.de.js @@ -1490,7 +1490,6 @@ $inv.sprev = (change) => { } $ocms.postXT({ url: $ocms.url('req/' + (change === true ?'sedit':'sprep')), data: { invc: JSON.stringify($inv.invcPayload(d)), id: d.invid ||'' }, success: (response) => { - l.rC('freeze'); let c = $$.dc('imagecollection pdfpreview'), vhr = Math.round(vh() * 0.88), invid = response.id, invtp = response.total; if (invtp > 10) { $$.dc('note warn', c).text($ict.tpe); @@ -1504,15 +1503,20 @@ $inv.sprev = (change) => { $ocms.dlg(c, { size: [vhr, Math.round(vw() * 0.88)], zindex: 50, form: false, button: $rct.crI, confirm: function (e) { let ct = $(this); + l.aC('freeze'); /* spinner while the invoice is finalized/emailed on the backend */ $ocms.postXT({ - url: $ocms.url('req/sconf'), data: { id: invid }, success: () => { + url: $ocms.url('req/sconf'), data: { id: invid }, success: (cresp) => { ct.trigger('modal_close'); - window.open($ocms.url('req/idoc') + '?id=' + invid, '_blank'); /* open pdf in new tab */ + if (cresp.hasFile === true) { + window.open($ocms.url('req/idoc') + '?id=' + invid, '_blank'); /* open pdf in new tab, only if a file was actually created */ + } $ocms.init('req'); /* go back to request list */ $inv.rReload(); }, error: () => { alert($t.f1); ct.trigger('modal_close'); + }, complete: () => { + l.rC('freeze'); } }); }, cancel: function (e) { @@ -1527,6 +1531,10 @@ $inv.sprev = (change) => { $inv.rReload(); } }); + }, error: () => { + alert($ict.eis); + }, complete: () => { + l.rC('freeze'); } }); }; diff --git a/Fuchs/wwwroot/web/fis.req.de.min.js b/Fuchs/wwwroot/web/fis.req.de.min.js index 7c97770..0f68681 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",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",itemprices:"Positionen mit Preis – Set als Überschrift",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"],remt:{f:["Sehr geehrte Damen und Herren,","ein Mahnschreiben sollte kurz, freundlich und erfolgreich sein. Kurz ist es, freundlich sowieso; ob es auch erfolgreich ist, hängt von Ihnen ab."],m:["Sehr geehrte Damen und Herren,","nun müssen wir Sie noch einmal anschreiben.","Wahrscheinlich haben Sie triftige Gründe dafür, warum Sie die Zahlung unserer Forderung nicht vornehmen und auch nicht auf unsere Mahnung reagieren. Sollten wir darüber nicht einmal sprechen?","Bitte nehmen Sie umgehend in dieser Sache mit uns Kontakt auf."],l:["Sehr geehrte Damen und Herren,",'Eine DRITTE MAHNUNG zu erhalten bereitet Ihnen bestimmt ebenso wenig Freude wie uns, sie zu verschicken. Leider haben wir auf unsere zweite Mahnung noch keine Antwort von Ihnen erhalten.", "Wir bitten Sie, den offenen Betrag innerhalb der nächsten 7 Werktage nach Erhalt dieses Schreibens zu begleichen. Nach Ablauf dieser Frist erfolgt keine weitere Mahnung mehr.',"Sollte die Forderung bis dahin nicht beglichen sein, eröffnen wir das gerichtliche Mahnverfahren. Sollten Sie die Rechnung inzwischen beglichen haben, so betrachten Sie bitte dieses Schreiben als gegenstandslos."]},remt2:{f:["Wir bitten Sie, den noch offenen Rechnungsbetrag innerhalb einer Woche auf unser Konto zu überweisen.","Sollten Sie den Betrag bereits überwiesen haben, so bitten wir Sie, diese Zahlungserinnerung als gegenstandslos zu betrachten."],m:["Um Ihnen zusätzliche Kosten für weitere Mahnungen zu ersparen, bitten wir Sie nunmehr um die Überweisung des noch zu zahlenden Gesamtbetrages inklusive der ggf. bereits fälligen Mahnzinsen und Mahngebühren innerhalb von einer Woche."],l:[]},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 a=$$.dc("mthl",n),r=t.getFullYear(),l=t.getMonth()+1;for(let t=i.getFullYear();t<=r;t++){let n=$$.dc("yr").prependTo(a).text($rct.iov[e]+" - "+t.toString()).toggleClass("selected",t===r);n.click({yr:t},(function(e){e.stopPropagation(),n.siblings().rC("selected"),n.aC("selected")}));let s=$$.dc("mfrm",n);for(let n=0;n<(t!==r?12:l);n++){i=new Date(t,n,1);let a=$$.dc("mth").prependTo(s).text($rct.iov[e]+" - "+fdt(i,"MMM yyyy"));a.click({yr:t,mt:n},(function(e){if(e.stopPropagation(),a.siblings().rC("selected"),!0===a.is(".selected")){a.tC("selected");let t=fdt(new Date(e.data.yr,e.data.mt,1),"yy-MM-dd");$req.renderreq(t,"m")}a.aC("selected")}));let r=getMonday(i),l=new Date(i);l.setMonth(l.getMonth()+1),l.setDate(0),l=getMonday(l);let c=$$.dc("wfrm",a);for(;r<=l;){let e=$$.dc("wk",c).text(($rct.wk||"W")+" "+fdt(r,"dd.MM.yy"));e.click({rd:new Date(r)},(function(t){t.stopPropagation();let n=fdt(t.data.rd,"yy-MM-dd");$req.renderreq(n,"w"),a.siblings().rC("selected").find(".wk").rC("selected"),a.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(r)},(function(e){e.stopPropagation();let t=fdt(e.data.rd,"yy-MM-dd");$req.downloadzip.call(t,"w")})),r.setDate(r.getDate()+7)}}}n.ldng(0)},renderreq:function(e,t){let n=$fis.frm_list().ldng(1),i=$$.dc("invfrm",n).aC("md"+t),a=$fis.lf();$ocms.postXT({url:$ocms.url("req/reql"),data:{mode:t,tgt:e},success:n=>{a.rC("fix").aC("hd"),$$.dc("ovhd",i).append($$.s(n.admin.title)).appendIf($$.sc("note",n.admin.note),""!==ne(n.admin.note,""));let r=$$.tblset({},i),l=$rcol.req,s=$$.tr(r.hd);$$.th(s);$.each(l.fields||[],((e,t)=>{$$.th(s).text(t.label),"vat"===t.name&&$$.th(s)}));let c=0,d=!1;$.each(n.requests||[],((n,s)=>{c>0&&c!==s.ParentServiceRequestId&&(d=!d);let o=$$.tr(r.bdy).tC("alt",d);c=s.ParentServiceRequestId,o.click((function(){a.rC("fix").aC("hd"),o.tC("selected").siblings().rC("selected").find("td.av").rC("av"),o.find("td.av").rC("av")})),o.tC("child",s.isChild);let m=$$.td(o,{class:"raux"});!0===bool(s.open,!1)&&$$.dc("ihd ilbtn",m).append(gi("eye-close","ico")).click({id:s.Id},$req.tHd),$$.dc("iitm ilbtn",m).append(gi("list","ico")).click({id:s.Id},$req.showitm),!0===$fis.isAuth("fds_inv",2)&&$$.dc("invc ilbtn",m).append(gi("edit","ico")).click({id:s.Id},$inv.cInv),$.each(l.fields||[],((n,a)=>{let r=$$.td(o).aC(a.dtype),l=s[a.name];if("function"==typeof a.dfnc)a.dfnc.call(r,l,s);else switch(a.type||""){case"date":r.text(fdt(s[a.name],"dd.MM.yy"));break;case"datetime":r.text(fdt(s[a.name]));break;case"html":r.append($$.dc("ctw").html(l)),r.append($$.dc("ttip").html(l));break;default:r.text(s[a.name])}switch(a.name||""){case"State":r.text($rct.sts[l||"-"]);break;case"Name":r.aC(a.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(s[a.name]).change().change({frm:i,tgt:e,mode:t,id:s.Id,td:r},$req.setvat),r.tC("hl","19"!==s[a.name].substr(0,2)).click((function(e){e.stopPropagation(),$(this).tC("av")}));break;case"balance":r.aC("sh_"+(s.SollHaben||"").toLowerCase());break;case"InvoiceId":r.aC("keep")}switch(typeof a.title){case"function":a.title.call(r,s);break;case"string":r.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"),a=$rcol.itm.lbl(),r=$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")+": "+r.ne(t.Name))]);$$.tr(i.bdy).aC("shd").append([$$.td(),$$.td(a.NameOrNumber),$$.td(a.Type),$$.td(a.net_pos),$$.td(a.bo_pos),$$.td(a.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),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.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===booln(e,!1)&&i.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(i)},$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),s=$$.dc("lihd",n).addClass(t.state);!0===booln(t.open,!1)&&s.append($$.sc("cbox").click((()=>{n.tC("checked"),i.find("li").rC("checked"),!0===n.is(".checked")?$inv.rMn(t.open):$inv.eM(!0)}))),s.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(),s=$$.dc("invoice_layout",l).append($$.dc("btn sprev").click($inv.sprev)),c=$fis.cf().width()>s.width()+n.width()+20;n.tC("fix",c).tC("hd",!c),$inv.eM(!1,!0);let d=$$.dc("rfrm").ldng(1),o=$ocms.dlg(d,{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",s),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,c=e.admin||{},d=(e,t,i,a,r)=>{let l=$$.dc("inpfrm",s).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{n.tbl.data("new")[i]=e}},r),$inv.eHtml)),n.tbl.data("new")[i]=t};d("tfrm",c.invoicetitle,"invoicetitle",0,null),d("adrfrm",c.invoiceaddress,"invoiceaddress",0,null),d("locfrm","","loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),d("emailfrm",c.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",s).append($$.dc("content").text(c.sender)),c.provisionend&&(l=c.provisionstart?$rct.provP:$rct.provD,r=c.provisionstart?fdt(c.provisionstart,"dd.MM.yyyy")+" - "+fdt(c.provisionend,"dd.MM.yyyy"):fdt(c.provisionend,"dd.MM.yyyy")),d("admfrm",r,"provisionperiod",l,1),n.tbl.data("new").CustomValues=c.CustomValues||"",$$.dc("inpfrm ctpfrm",s).text(jObj(c.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv"),$inv.eM(!1,!0,"iss,p13b,setm,ctp")},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),s=$ocms.dlg(l,{width:1e3});s.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),timeout:90,data:{id:t.id},success:e=>{s&&s.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,s,c=e.admin||{},d=(e,t,i,r,l)=>{let s=$$.dc("inpfrm",a).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{n.tbl.data("new")[i]=e}},l),$inv.eHtml)),n.tbl.data("new")[i]=t};d("tfrm",c.invoicetitle,"invoicetitle",0,null),d("adrfrm",c.invoiceaddress,"invoiceaddress",0,null),d("locfrm",c.provisionlocation,"loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),d("emailfrm",c.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",a).append($$.dc("content").text(c.sender)),c.provisionend&&(s=c.provisionstart?$rct.provP:$rct.provD,l=c.provisionstart?fdt(c.provisionstart,"dd.MM.yyyy")+" - "+fdt(c.provisionend,"dd.MM.yyyy"):fdt(c.provisionend,"dd.MM.yyyy")),d("admfrm",l,"provisionperiod",s,1),n.tbl.data("new").CustomValues=c.CustomValues||"",$$.dc("inpfrm ctpfrm",a).text(jObj(c.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv")},complete:()=>{s.c.trigger("modal_close")}})},error:()=>{s&&s.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 s=(e,n,i,r,l)=>{let s=$$.dc("inpfrm",t).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(n);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=n};s("tfrm",n.InvoiceTitle,"invoicetitle",0,null),s("adrfrm",n.SendToAddress,"invoiceaddress",0,null),s("locfrm",n.ProvisionLocation,"loc",1,null),s("emailfrm",n.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",t).append($$.dc("content").text(e.admin.sender)),s("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,"iss,p13b,setm,ctp")},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 s=(e,t,i,r,l)=>{let s=$$.dc("inpfrm",n).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=t};s("tfrm",t.InvoiceTitle,"invoicetitle",0,null),s("adrfrm",t.SendToAddress,"invoiceaddress",0,null),s("locfrm",t.ProvisionLocation,"loc",1,null),s("emailfrm",t.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(e.admin.sender)),s("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=[{name:"txt",label:"Text",type:"html",value:n.html(),tinymce:!0,attr:{style:"height: 300px"}}],a=e.data.change||null,r={title:t.data("dialog")||"",success:function(e){n.html(e.txt),"function"==typeof a&&a(e.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"))}))})),r.addcontent=t}$ocms.dlgform(i,r)},$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(){let e=$(this).data();e.vat=fnum(n,{style:"percent"}).replace(" ",""),(e.net_val||0)>0&&(e.vat_val=e.net_val*n),(e.svcnet_val||0)>0&&(e.svcvat_val=e.svcnet_val*n)})),$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",swapdone:(e,t,n,i)=>{$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())}))));let s=$$.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},$$.dc("ibtn ico move",s,{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||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",s).append(gi("object-align-left")).click((function(t){$inv.rrw.call(e.tC("hidenote"))}));let c=[$$.tdc("aux").append(s),$$.tdc("keep").text(n.p)];""===n.id?c.push($$.td(e,{colspan:4}).append(n.t)):(Array.prototype.push.apply(c,n.q?[$$.tdc("keep").text(n.q)]:[]),Array.prototype.push.apply(c,[$$.tdc("txt",{colspan:n.q?1:2,title:n.tt}).append(n.t),$$.tdc("currency").text(fnum(n.v,$rct.cst)),$$.tdc("currency inetval").text(fnum(n.vt,$rct.cst)).attr("title",$rct.svcPart+": "+fnum(n.vs,$rct.cst))])),e.empty().attr("class",i?"placeholder":"itm").aC(n.Typ).tC("hidenote",a).append(c),t.co=n},$inv.invSumUpdate=function(){let e=$(this),t=e.children("tfoot").empty(),n=bool((e.data().admin||{}).p13b||"",!1);e.nextAll(".fnote").remove();let i={ttn:0,ttb:0,ttvat:0,tscn:0,tscvat:0,vat:{},itmnet:{}},a=[],r=(e,n,i)=>$$.tdc("currency",$$.tr(t,{class:i||"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text(e)]),fnum(n,$rct.cst)),l=t=>$$.dc("fnote").insertAfter(e).rwText(t),s=e.children("tbody");s.each(((e,t)=>{let n=$(t),r=n.data()||{},l=[],s=[],c=null,d=0,o=n.find("tr.itm"),m=0;n.tC("empty",o.length<1),o.each(((e,t)=>{let n=$(t).data()||{};!function(e,t,n){t.tscn+=e.svcnet_val||0,t.tscvat+=e.svcvat_val||0,t.ttn+=e.net_val||0,t.ttvat+=e.vat_val||0,t.ttb+=(e.net_val||0)+(e.vat_val||0),""!==(e.vat||"")&&(t.vat[e.vat]=(t.vat[e.vat]||0)+(e.vat_val||0))}(n,i,r.Id),d+=n.net_val||0,l.push(n.co);let a=$inv.itemToContract(n);"set"===a.type&&""!==a.id?c=a.id:null!==c&&""!==(a.id||"")&&(a.setId=c),s.push(a),(void 0===n.SortOrder||null===n.SortOrder?-1:n.SortOrder)>-1&&(!1===["text","title"].includes((n.Type||"other").toLowerCase())&&m++,n.SortOrder=0,n.position=m,$inv.rrw.call(t))})),n.find("tr.isum > td.isumval").text(fnum(d,$rct.cst)),a.push({Id:r.Id,nme:r.Name,text:r.text,itm:l,items:s,netval:d})}));let c=e.find("tbody:not(.empty)").length;s.find("tr.isum").tC("hidden",c<2),r("Netto",i.ttn),!1===n?$.each(i.vat,((e,t)=>{r($rct.vat+" "+e,t,"tvat")})):i.ttb=i.ttn,r("Summe",i.ttb);let d=e.data().admin.type;"i"===d?(l($rct.note2),l($rct.note4)):"c"===d?l($rct.note2):(l(string($rct.note3,[fnum((i.tscn+i.tscvat)*(e.data().admin.tax_servicerefund||0),$rct.cst)])).aC("ntax"),l($rct.note2),l(string($rct.note1,[fnum(i.tscn+i.tscvat,$rct.cst),fnum(i.tscn,$rct.cst),fnum(i.tscvat,$rct.cst)]))),!0===n&&l($rct.note13b),e.data("sms",i),e.data("bai",a)},$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),s=($$.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(s,((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=()=>{$("div.invoice_layout table.invi").trigger("fds.inv")},$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.itemToContract=function(e){let t=((e=e||{}).Type||"").toString().toLowerCase(),n={id:(e.Id||"").toString(),type:t,title:"",desc:"",qty:"",price_net:"",total_net:e.net_val||0,vat:e.vat||""};var i;return e.co&&"osum"===e.co.typ?(n.desc=e.co.t||"",n.total_net=e.net_val||0):["text","title"].includes(t)&&0===(e.net_val||0)?(n.desc=e.htmltext||("#"!==(e.NameOrNumber||"").substr(0,1)?(i=$$[0]("p").text(e.NameOrNumber||""),$$.d().append(i).html()):"")+(e.Note||""),n.total_net=""):(n.title=e.NameOrNumber||"",n.desc=e.Note||"",n.qty=e.quantity||(0!==(e.quantityhours||0)?fnum(e.quantityhours)+(e.UnitString?" "+e.UnitString:""):""),n.price_net=e.net||0,n.total_net=e.net_val||0),n},$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("itemprices"),i("setonly")]);t=$ocms.dlg(a,{width:800})},$inv.setSetmode=e=>{let t=$("div.invoice_layout").find("table.invi").data();t.admin=t.admin||{},t.admin.setmode=e,t.inv=t.inv||{};let n=(t.inv.InvoiceOptions||"").split(",").filter((e=>""!==e&&0!==e.indexOf("setmode:")));e&&"setprice"!==e&&n.push("setmode:"+e),t.inv.InvoiceOptions=n.join(",")},$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))},typedvalues:!0})},$inv.invcPayload=function(e){let t=(e=e||{}).sms||{},n=$.extend({},e.new),i=$.extend({},e.admin);return n.total_net=t.ttn||0,n.total_gross=t.ttb||0,n.title=null!=n.invoicetitle?n.invoicetitle:n.title||"",n.provisionlocation=null!=n.loc?n.loc:n.provisionlocation||"",n.paymentterm=null!=i.paymentterms?i.paymentterms:n.paymentterm||"",i.customerid=null!=i.customerid?i.customerid:i.CustomerId,{admin:i,req:e.bai,sms:e.sms,new:n}},$inv.ssave=()=>{var e=$("div.invoice_layout"),t=e.find("table.invi").data();$inv.t_fds_inv(),e.aC("freeze"),$ocms.postXT({url:$ocms.url("req/save"),data:{invc:JSON.stringify($inv.invcPayload(t)),id:t.invid||""},success:e=>{$inv.cntInv({id:e.id})},error:()=>{alert($ict.eis)},complete:()=>{e.rC("freeze")}})},$inv.sprev=e=>{var t=$("div.invoice_layout"),n=t.find("table.invi").data();e=bool(e,!1),$inv.t_fds_inv(),t.aC("freeze"),!1!==$fis.ValidateEmail(n.new.invoiceemail||"")||!1!==bool(confirm($ict.ivE+$ict.ivEc),!1)?$ocms.postXT({url:$ocms.url("req/"+(!0===e?"sedit":"sprep")),data:{invc:JSON.stringify($inv.invcPayload(n)),id:n.invid||""},success:e=>{t.rC("freeze");let n=$$.dc("imagecollection pdfpreview"),i=Math.round(.88*vh()),a=e.id,r=e.total;r>10&&$$.dc("note warn",n).text($ict.tpe),$.each(e.img||[],(function(e,t){$$.dc("pdfp",n).append($$.img(t).css("max-height",(i-rpx(6)).toString()+"px"))}));for(let t=(e.img||[]).length+1;t<=r;t++)$$.dc("pdfp ph",n).append($$.dc("note",$ict.pna));$ocms.dlg(n,{size:[i,Math.round(.88*vw())],zindex:50,form:!1,button:$rct.crI,confirm:function(e){let t=$(this);$ocms.postXT({url:$ocms.url("req/sconf"),data:{id:a},success:()=>{t.trigger("modal_close"),window.open($ocms.url("req/idoc")+"?id="+a,"_blank"),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),t.trigger("modal_close")}})},cancel:function(e){$(this);confirm($ict.cdI)&&$ocms.postXT({url:$ocms.url("req/sdel"),data:{id:a}}),$inv.rReload()}})}}):t.rC("freeze")},$inv.rReload=()=>{try{let e=$("#listframe ul.rql:first").data();$inv.cInv2({id:e.search})}catch(e){}},$inv.quantChange=function(e){let t=$(this).closest("form"),n={},i=e=>parseFloat(e.toString().replace("%","").replace(",",".")),a=e=>e.toFixed(2);t.find(":input").each(((e,t)=>{n[$(t).attr("name")]=$(t)}));let r=parseInt(n.quantityhours.val()||"0"),l=i(n.net.val()||"0"),s=.01*i(n.vat.val());r>0&&l>0&&(n.net_val.val(a(r*l)),n.vat_val.val(a(r*l*s)),["Service"].includes(n.Type.val())&&(n.svcnet_val.val(a(r*l)),n.svcvat_val.val(a(r*l*s))))},$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)},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);$ict.remt[t.type].forEach((e=>$$[0]("p").rwText(e).appendTo(i)));let 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),$ict.remt2[t.type].forEach((e=>$$[0]("p").rwText(e).appendTo(i)));let l=(e,t,i,r,l)=>{let s=$$.dc("inpfrm",n).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,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")},complete:()=>{}})},$inv.rprev=()=>{var e=$("div.invoice_layout"),t=e.find("table.invi"),n=t.data();$.extend(n.new,t.find("tbody > tr:first").data()),e.aC("freeze"),!1!==$fis.ValidateEmail(n.new.invoiceemail||"")||!1!==bool(confirm($ict.ivE+$ict.ivEc),!1)?$ocms.postXT({url:$ocms.url("rem/prep"),data:{remc:JSON.stringify({rem:n.rm,new:n.new}),id:n.invid||""},success:t=>{e.rC("freeze");let n=$$.dc("imagecollection pdfpreview"),i=Math.round(.88*vh()),a=t.id;$.each(t.img||[],(function(e,t){$$.dc("pdfp",n).append($$.img(t).css("max-height",(i-rpx(6)).toString()+"px"))})),$ocms.dlg(n,{size:[i,Math.round(.88*vw())],zindex:50,form:!1,button:$ict.remd,confirm:function(e){let t=$(this);$ocms.postXT({url:$ocms.url("rem/conf"),data:{id:a},success:()=>{t.trigger("modal_close"),window.open($ocms.url("rem/idoc")+"?id="+a,"_blank"),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),t.trigger("modal_close")}})},cancel:function(e){$(this);confirm($ict.cdI)&&$ocms.postXT({url:$ocms.url("rem/del"),data:{id:a}}),$inv.rReload()}})}}):e.rC("freeze")},$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",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",itemprices:"Positionen mit Preis – Set als Überschrift",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"],remt:{f:["Sehr geehrte Damen und Herren,","ein Mahnschreiben sollte kurz, freundlich und erfolgreich sein. Kurz ist es, freundlich sowieso; ob es auch erfolgreich ist, hängt von Ihnen ab."],m:["Sehr geehrte Damen und Herren,","nun müssen wir Sie noch einmal anschreiben.","Wahrscheinlich haben Sie triftige Gründe dafür, warum Sie die Zahlung unserer Forderung nicht vornehmen und auch nicht auf unsere Mahnung reagieren. Sollten wir darüber nicht einmal sprechen?","Bitte nehmen Sie umgehend in dieser Sache mit uns Kontakt auf."],l:["Sehr geehrte Damen und Herren,",'Eine DRITTE MAHNUNG zu erhalten bereitet Ihnen bestimmt ebenso wenig Freude wie uns, sie zu verschicken. Leider haben wir auf unsere zweite Mahnung noch keine Antwort von Ihnen erhalten.", "Wir bitten Sie, den offenen Betrag innerhalb der nächsten 7 Werktage nach Erhalt dieses Schreibens zu begleichen. Nach Ablauf dieser Frist erfolgt keine weitere Mahnung mehr.',"Sollte die Forderung bis dahin nicht beglichen sein, eröffnen wir das gerichtliche Mahnverfahren. Sollten Sie die Rechnung inzwischen beglichen haben, so betrachten Sie bitte dieses Schreiben als gegenstandslos."]},remt2:{f:["Wir bitten Sie, den noch offenen Rechnungsbetrag innerhalb einer Woche auf unser Konto zu überweisen.","Sollten Sie den Betrag bereits überwiesen haben, so bitten wir Sie, diese Zahlungserinnerung als gegenstandslos zu betrachten."],m:["Um Ihnen zusätzliche Kosten für weitere Mahnungen zu ersparen, bitten wir Sie nunmehr um die Überweisung des noch zu zahlenden Gesamtbetrages inklusive der ggf. bereits fälligen Mahnzinsen und Mahngebühren innerhalb von einer Woche."],l:[]},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 a=$$.dc("mthl",n),r=t.getFullYear(),l=t.getMonth()+1;for(let t=i.getFullYear();t<=r;t++){let n=$$.dc("yr").prependTo(a).text($rct.iov[e]+" - "+t.toString()).toggleClass("selected",t===r);n.click({yr:t},(function(e){e.stopPropagation(),n.siblings().rC("selected"),n.aC("selected")}));let s=$$.dc("mfrm",n);for(let n=0;n<(t!==r?12:l);n++){i=new Date(t,n,1);let a=$$.dc("mth").prependTo(s).text($rct.iov[e]+" - "+fdt(i,"MMM yyyy"));a.click({yr:t,mt:n},(function(e){if(e.stopPropagation(),a.siblings().rC("selected"),!0===a.is(".selected")){a.tC("selected");let t=fdt(new Date(e.data.yr,e.data.mt,1),"yy-MM-dd");$req.renderreq(t,"m")}a.aC("selected")}));let r=getMonday(i),l=new Date(i);l.setMonth(l.getMonth()+1),l.setDate(0),l=getMonday(l);let c=$$.dc("wfrm",a);for(;r<=l;){let e=$$.dc("wk",c).text(($rct.wk||"W")+" "+fdt(r,"dd.MM.yy"));e.click({rd:new Date(r)},(function(t){t.stopPropagation();let n=fdt(t.data.rd,"yy-MM-dd");$req.renderreq(n,"w"),a.siblings().rC("selected").find(".wk").rC("selected"),a.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(r)},(function(e){e.stopPropagation();let t=fdt(e.data.rd,"yy-MM-dd");$req.downloadzip.call(t,"w")})),r.setDate(r.getDate()+7)}}}n.ldng(0)},renderreq:function(e,t){let n=$fis.frm_list().ldng(1),i=$$.dc("invfrm",n).aC("md"+t),a=$fis.lf();$ocms.postXT({url:$ocms.url("req/reql"),data:{mode:t,tgt:e},success:n=>{a.rC("fix").aC("hd"),$$.dc("ovhd",i).append($$.s(n.admin.title)).appendIf($$.sc("note",n.admin.note),""!==ne(n.admin.note,""));let r=$$.tblset({},i),l=$rcol.req,s=$$.tr(r.hd);$$.th(s);$.each(l.fields||[],((e,t)=>{$$.th(s).text(t.label),"vat"===t.name&&$$.th(s)}));let c=0,d=!1;$.each(n.requests||[],((n,s)=>{c>0&&c!==s.ParentServiceRequestId&&(d=!d);let o=$$.tr(r.bdy).tC("alt",d);c=s.ParentServiceRequestId,o.click((function(){a.rC("fix").aC("hd"),o.tC("selected").siblings().rC("selected").find("td.av").rC("av"),o.find("td.av").rC("av")})),o.tC("child",s.isChild);let m=$$.td(o,{class:"raux"});!0===bool(s.open,!1)&&$$.dc("ihd ilbtn",m).append(gi("eye-close","ico")).click({id:s.Id},$req.tHd),$$.dc("iitm ilbtn",m).append(gi("list","ico")).click({id:s.Id},$req.showitm),!0===$fis.isAuth("fds_inv",2)&&$$.dc("invc ilbtn",m).append(gi("edit","ico")).click({id:s.Id},$inv.cInv),$.each(l.fields||[],((n,a)=>{let r=$$.td(o).aC(a.dtype),l=s[a.name];if("function"==typeof a.dfnc)a.dfnc.call(r,l,s);else switch(a.type||""){case"date":r.text(fdt(s[a.name],"dd.MM.yy"));break;case"datetime":r.text(fdt(s[a.name]));break;case"html":r.append($$.dc("ctw").html(l)),r.append($$.dc("ttip").html(l));break;default:r.text(s[a.name])}switch(a.name||""){case"State":r.text($rct.sts[l||"-"]);break;case"Name":r.aC(a.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(s[a.name]).change().change({frm:i,tgt:e,mode:t,id:s.Id,td:r},$req.setvat),r.tC("hl","19"!==s[a.name].substr(0,2)).click((function(e){e.stopPropagation(),$(this).tC("av")}));break;case"balance":r.aC("sh_"+(s.SollHaben||"").toLowerCase());break;case"InvoiceId":r.aC("keep")}switch(typeof a.title){case"function":a.title.call(r,s);break;case"string":r.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"),a=$rcol.itm.lbl(),r=$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")+": "+r.ne(t.Name))]);$$.tr(i.bdy).aC("shd").append([$$.td(),$$.td(a.NameOrNumber),$$.td(a.Type),$$.td(a.net_pos),$$.td(a.bo_pos),$$.td(a.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),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.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===booln(e,!1)&&i.push({lbl:$ict.rel,fnc:$inv.rReload}),$("#topbar").ocmsmenu(i)},$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),s=$$.dc("lihd",n).addClass(t.state);!0===booln(t.open,!1)&&s.append($$.sc("cbox").click((()=>{n.tC("checked"),i.find("li").rC("checked"),!0===n.is(".checked")?$inv.rMn(t.open):$inv.eM(!0)}))),s.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(),s=$$.dc("invoice_layout",l).append($$.dc("btn sprev").click($inv.sprev)),c=$fis.cf().width()>s.width()+n.width()+20;n.tC("fix",c).tC("hd",!c),$inv.eM(!1,!0);let d=$$.dc("rfrm").ldng(1),o=$ocms.dlg(d,{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",s),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,c=e.admin||{},d=(e,t,i,a,r)=>{let l=$$.dc("inpfrm",s).aC(e).append("string"==typeof a?$$.dc("ahd",a):a>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",l).rwText(t);$$.dc("axf",l).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{n.tbl.data("new")[i]=e}},r),$inv.eHtml)),n.tbl.data("new")[i]=t};d("tfrm",c.invoicetitle,"invoicetitle",0,null),d("adrfrm",c.invoiceaddress,"invoiceaddress",0,null),d("locfrm","","loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),d("emailfrm",c.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",s).append($$.dc("content").text(c.sender)),c.provisionend&&(l=c.provisionstart?$rct.provP:$rct.provD,r=c.provisionstart?fdt(c.provisionstart,"dd.MM.yyyy")+" - "+fdt(c.provisionend,"dd.MM.yyyy"):fdt(c.provisionend,"dd.MM.yyyy")),d("admfrm",r,"provisionperiod",l,1),n.tbl.data("new").CustomValues=c.CustomValues||"",$$.dc("inpfrm ctpfrm",s).text(jObj(c.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv"),$inv.eM(!1,!0,"iss,p13b,setm,ctp")},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),s=$ocms.dlg(l,{width:1e3});s.ft.rwText($ict.iq1),$ocms.postXT({url:$ocms.url("inv/pget"),timeout:90,data:{id:t.id},success:e=>{s&&s.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,s,c=e.admin||{},d=(e,t,i,r,l)=>{let s=$$.dc("inpfrm",a).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{n.tbl.data("new")[i]=e}},l),$inv.eHtml)),n.tbl.data("new")[i]=t};d("tfrm",c.invoicetitle,"invoicetitle",0,null),d("adrfrm",c.invoiceaddress,"invoiceaddress",0,null),d("locfrm",c.provisionlocation,"loc",1,{list:deepCopy(e.locations),lbl:"ref",property:"address"}),d("emailfrm",c.invoiceemail,"invoiceemail",0,null),$$.dc("sndfrm",a).append($$.dc("content").text(c.sender)),c.provisionend&&(s=c.provisionstart?$rct.provP:$rct.provD,l=c.provisionstart?fdt(c.provisionstart,"dd.MM.yyyy")+" - "+fdt(c.provisionend,"dd.MM.yyyy"):fdt(c.provisionend,"dd.MM.yyyy")),d("admfrm",l,"provisionperiod",s,1),n.tbl.data("new").CustomValues=c.CustomValues||"",$$.dc("inpfrm ctpfrm",a).text(jObj(c.CustomValues,"contactName")),n.tbl.children("tbody").each($inv.bdysort),n.tbl.trigger("fds.inv")},complete:()=>{s.c.trigger("modal_close")}})},error:()=>{s&&s.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 s=(e,n,i,r,l)=>{let s=$$.dc("inpfrm",t).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(n);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=n};s("tfrm",n.InvoiceTitle,"invoicetitle",0,null),s("adrfrm",n.SendToAddress,"invoiceaddress",0,null),s("locfrm",n.ProvisionLocation,"loc",1,null),s("emailfrm",n.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",t).append($$.dc("content").text(e.admin.sender)),s("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,"iss,p13b,setm,ctp")},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 s=(e,t,i,r,l)=>{let s=$$.dc("inpfrm",n).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,nme:i,change:e=>{a.tbl.data("new")[i]=e}},l),$inv.eHtml)),a.tbl.data("new")[i]=t};s("tfrm",t.InvoiceTitle,"invoicetitle",0,null),s("adrfrm",t.SendToAddress,"invoiceaddress",0,null),s("locfrm",t.ProvisionLocation,"loc",1,null),s("emailfrm",t.SendToEmail,"invoiceemail",0,null),$$.dc("sndfrm",n).append($$.dc("content").text(e.admin.sender)),s("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=[{name:"txt",label:"Text",type:"html",value:n.html(),tinymce:!0,attr:{style:"height: 300px"}}],a=e.data.change||null,r={title:t.data("dialog")||"",success:function(e){n.html(e.txt),"function"==typeof a&&a(e.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"))}))})),r.addcontent=t}$ocms.dlgform(i,r)},$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(){let e=$(this).data();e.vat=fnum(n,{style:"percent"}).replace(" ",""),(e.net_val||0)>0&&(e.vat_val=e.net_val*n),(e.svcnet_val||0)>0&&(e.svcvat_val=e.svcnet_val*n)})),$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",swapdone:(e,t,n,i)=>{$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())}))));let s=$$.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},$$.dc("ibtn ico move",s,{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||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",s).append(gi("object-align-left")).click((function(t){$inv.rrw.call(e.tC("hidenote"))}));let c=[$$.tdc("aux").append(s),$$.tdc("keep").text(n.p)];""===n.id?c.push($$.td(e,{colspan:4}).append(n.t)):(Array.prototype.push.apply(c,n.q?[$$.tdc("keep").text(n.q)]:[]),Array.prototype.push.apply(c,[$$.tdc("txt",{colspan:n.q?1:2,title:n.tt}).append(n.t),$$.tdc("currency").text(fnum(n.v,$rct.cst)),$$.tdc("currency inetval").text(fnum(n.vt,$rct.cst)).attr("title",$rct.svcPart+": "+fnum(n.vs,$rct.cst))])),e.empty().attr("class",i?"placeholder":"itm").aC(n.Typ).tC("hidenote",a).append(c),t.co=n},$inv.invSumUpdate=function(){let e=$(this),t=e.children("tfoot").empty(),n=bool((e.data().admin||{}).p13b||"",!1);e.nextAll(".fnote").remove();let i={ttn:0,ttb:0,ttvat:0,tscn:0,tscvat:0,vat:{},itmnet:{}},a=[],r=(e,n,i)=>$$.tdc("currency",$$.tr(t,{class:i||"tsum"}).append([$$.tdc("aux"),$$.td({colspan:4}).text(e)]),fnum(n,$rct.cst)),l=t=>$$.dc("fnote").insertAfter(e).rwText(t),s=e.children("tbody");s.each(((e,t)=>{let n=$(t),r=n.data()||{},l=[],s=[],c=null,d=0,o=n.find("tr.itm"),m=0;n.tC("empty",o.length<1),o.each(((e,t)=>{let n=$(t).data()||{};!function(e,t,n){t.tscn+=e.svcnet_val||0,t.tscvat+=e.svcvat_val||0,t.ttn+=e.net_val||0,t.ttvat+=e.vat_val||0,t.ttb+=(e.net_val||0)+(e.vat_val||0),""!==(e.vat||"")&&(t.vat[e.vat]=(t.vat[e.vat]||0)+(e.vat_val||0))}(n,i,r.Id),d+=n.net_val||0,l.push(n.co);let a=$inv.itemToContract(n);"set"===a.type&&""!==a.id?c=a.id:null!==c&&""!==(a.id||"")&&(a.setId=c),s.push(a),(void 0===n.SortOrder||null===n.SortOrder?-1:n.SortOrder)>-1&&(!1===["text","title"].includes((n.Type||"other").toLowerCase())&&m++,n.SortOrder=0,n.position=m,$inv.rrw.call(t))})),n.find("tr.isum > td.isumval").text(fnum(d,$rct.cst)),a.push({Id:r.Id,nme:r.Name,text:r.text,itm:l,items:s,netval:d})}));let c=e.find("tbody:not(.empty)").length;s.find("tr.isum").tC("hidden",c<2),r("Netto",i.ttn),!1===n?$.each(i.vat,((e,t)=>{r($rct.vat+" "+e,t,"tvat")})):i.ttb=i.ttn,r("Summe",i.ttb);let d=e.data().admin.type;"i"===d?(l($rct.note2),l($rct.note4)):"c"===d?l($rct.note2):(l(string($rct.note3,[fnum((i.tscn+i.tscvat)*(e.data().admin.tax_servicerefund||0),$rct.cst)])).aC("ntax"),l($rct.note2),l(string($rct.note1,[fnum(i.tscn+i.tscvat,$rct.cst),fnum(i.tscn,$rct.cst),fnum(i.tscvat,$rct.cst)]))),!0===n&&l($rct.note13b),e.data("sms",i),e.data("bai",a)},$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),s=($$.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(s,((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=()=>{$("div.invoice_layout table.invi").trigger("fds.inv")},$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.itemToContract=function(e){let t=((e=e||{}).Type||"").toString().toLowerCase(),n={id:(e.Id||"").toString(),type:t,title:"",desc:"",qty:"",price_net:"",total_net:e.net_val||0,vat:e.vat||""};var i;return e.co&&"osum"===e.co.typ?(n.desc=e.co.t||"",n.total_net=e.net_val||0):["text","title"].includes(t)&&0===(e.net_val||0)?(n.desc=e.htmltext||("#"!==(e.NameOrNumber||"").substr(0,1)?(i=$$[0]("p").text(e.NameOrNumber||""),$$.d().append(i).html()):"")+(e.Note||""),n.total_net=""):(n.title=e.NameOrNumber||"",n.desc=e.Note||"",n.qty=e.quantity||(0!==(e.quantityhours||0)?fnum(e.quantityhours)+(e.UnitString?" "+e.UnitString:""):""),n.price_net=e.net||0,n.total_net=e.net_val||0),n},$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("itemprices"),i("setonly")]);t=$ocms.dlg(a,{width:800})},$inv.setSetmode=e=>{let t=$("div.invoice_layout").find("table.invi").data();t.admin=t.admin||{},t.admin.setmode=e,t.inv=t.inv||{};let n=(t.inv.InvoiceOptions||"").split(",").filter((e=>""!==e&&0!==e.indexOf("setmode:")));e&&"setprice"!==e&&n.push("setmode:"+e),t.inv.InvoiceOptions=n.join(",")},$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))},typedvalues:!0})},$inv.invcPayload=function(e){let t=(e=e||{}).sms||{},n=$.extend({},e.new),i=$.extend({},e.admin);return n.total_net=t.ttn||0,n.total_gross=t.ttb||0,n.title=null!=n.invoicetitle?n.invoicetitle:n.title||"",n.provisionlocation=null!=n.loc?n.loc:n.provisionlocation||"",n.paymentterm=null!=i.paymentterms?i.paymentterms:n.paymentterm||"",i.customerid=null!=i.customerid?i.customerid:i.CustomerId,{admin:i,req:e.bai,sms:e.sms,new:n}},$inv.ssave=()=>{var e=$("div.invoice_layout"),t=e.find("table.invi").data();$inv.t_fds_inv(),e.aC("freeze"),$ocms.postXT({url:$ocms.url("req/save"),data:{invc:JSON.stringify($inv.invcPayload(t)),id:t.invid||""},success:e=>{$inv.cntInv({id:e.id})},error:()=>{alert($ict.eis)},complete:()=>{e.rC("freeze")}})},$inv.sprev=e=>{var t=$("div.invoice_layout"),n=t.find("table.invi").data();e=bool(e,!1),$inv.t_fds_inv(),t.aC("freeze"),!1!==$fis.ValidateEmail(n.new.invoiceemail||"")||!1!==bool(confirm($ict.ivE+$ict.ivEc),!1)?$ocms.postXT({url:$ocms.url("req/"+(!0===e?"sedit":"sprep")),data:{invc:JSON.stringify($inv.invcPayload(n)),id:n.invid||""},success:e=>{let n=$$.dc("imagecollection pdfpreview"),i=Math.round(.88*vh()),a=e.id,r=e.total;r>10&&$$.dc("note warn",n).text($ict.tpe),$.each(e.img||[],(function(e,t){$$.dc("pdfp",n).append($$.img(t).css("max-height",(i-rpx(6)).toString()+"px"))}));for(let t=(e.img||[]).length+1;t<=r;t++)$$.dc("pdfp ph",n).append($$.dc("note",$ict.pna));$ocms.dlg(n,{size:[i,Math.round(.88*vw())],zindex:50,form:!1,button:$rct.crI,confirm:function(e){let n=$(this);t.aC("freeze"),$ocms.postXT({url:$ocms.url("req/sconf"),data:{id:a},success:e=>{n.trigger("modal_close"),!0===e.hasFile&&window.open($ocms.url("req/idoc")+"?id="+a,"_blank"),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),n.trigger("modal_close")},complete:()=>{t.rC("freeze")}})},cancel:function(e){$(this);confirm($ict.cdI)&&$ocms.postXT({url:$ocms.url("req/sdel"),data:{id:a}}),$inv.rReload()}})},error:()=>{alert($ict.eis)},complete:()=>{t.rC("freeze")}}):t.rC("freeze")},$inv.rReload=()=>{try{let e=$("#listframe ul.rql:first").data();$inv.cInv2({id:e.search})}catch(e){}},$inv.quantChange=function(e){let t=$(this).closest("form"),n={},i=e=>parseFloat(e.toString().replace("%","").replace(",",".")),a=e=>e.toFixed(2);t.find(":input").each(((e,t)=>{n[$(t).attr("name")]=$(t)}));let r=parseInt(n.quantityhours.val()||"0"),l=i(n.net.val()||"0"),s=.01*i(n.vat.val());r>0&&l>0&&(n.net_val.val(a(r*l)),n.vat_val.val(a(r*l*s)),["Service"].includes(n.Type.val())&&(n.svcnet_val.val(a(r*l)),n.svcvat_val.val(a(r*l*s))))},$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)},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);$ict.remt[t.type].forEach((e=>$$[0]("p").rwText(e).appendTo(i)));let 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),$ict.remt2[t.type].forEach((e=>$$[0]("p").rwText(e).appendTo(i)));let l=(e,t,i,r,l)=>{let s=$$.dc("inpfrm",n).aC(e).append("string"==typeof r?$$.dc("ahd",r):r>0?$$.dc("ahd",$rct.frm[i]):null),c=$$.dc("content",s).rwText(t);$$.dc("axf",s).append($$.dc("ibtn edit").data("dialog",$rct.frm[i]).append(gi("pencil")).click($.extend({t:c,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")},complete:()=>{}})},$inv.rprev=()=>{var e=$("div.invoice_layout"),t=e.find("table.invi"),n=t.data();$.extend(n.new,t.find("tbody > tr:first").data()),e.aC("freeze"),!1!==$fis.ValidateEmail(n.new.invoiceemail||"")||!1!==bool(confirm($ict.ivE+$ict.ivEc),!1)?$ocms.postXT({url:$ocms.url("rem/prep"),data:{remc:JSON.stringify({rem:n.rm,new:n.new}),id:n.invid||""},success:t=>{e.rC("freeze");let n=$$.dc("imagecollection pdfpreview"),i=Math.round(.88*vh()),a=t.id;$.each(t.img||[],(function(e,t){$$.dc("pdfp",n).append($$.img(t).css("max-height",(i-rpx(6)).toString()+"px"))})),$ocms.dlg(n,{size:[i,Math.round(.88*vw())],zindex:50,form:!1,button:$ict.remd,confirm:function(e){let t=$(this);$ocms.postXT({url:$ocms.url("rem/conf"),data:{id:a},success:()=>{t.trigger("modal_close"),window.open($ocms.url("rem/idoc")+"?id="+a,"_blank"),$ocms.init("req"),$inv.rReload()},error:()=>{alert($t.f1),t.trigger("modal_close")}})},cancel:function(e){$(this);confirm($ict.cdI)&&$ocms.postXT({url:$ocms.url("rem/del"),data:{id:a}}),$inv.rReload()}})}}):e.rC("freeze")},$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 da00e19..eade1ff 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"}.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: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 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}.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: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 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}.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