Add Cc (Zusatzempfänger) recipient support for invoice emails
Lets an invoice carry an additional Cc recipient alongside the primary SendToEmail, sent via the ProcessWeb mailer API. Honors the Fuchs:Email:OverrideRecipient dev safety net: when the override is active, Cc is dropped entirely (only the single override inbox is ever reached), never leaked to it. - IComService.SendEmailAsync / ProcessWebComService: new optional `cc` parameter, included in the mailer payload only when non-empty. - FdsInvoiceData.RawInvoiceEmailCc + BuildInvoiceParams: reads `new.invoiceemailcc`, posts @SendToEmailCc. - IntranetController.Requests: reads SendToEmailCc from the loaded invoice row and passes it through on send/resend. - Fuchs_Database: SendToEmailCc column on fds__invoices, threaded through fds__createInvoice/fds__setInvoice/fds__getInvoice and the fds__tt__invoice_base/_core table types. - fis.req_txt_de.js: "Zusatzempfänger (CC)" field label. - Tests: ProcessWebComServiceTests (Cc included/omitted/dropped under override); SystemStatusServiceTests mocks updated for the new IComService.SendEmailAsync parameter. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -324,6 +324,7 @@ public partial class IntranetController
|
||||
Security: DbSec, options: SqlOpt(fn, id, code));
|
||||
frdic = dtset.Table("inv").FirstRow.toObjectDictionary();
|
||||
string email = frdic.nz("SendToEmail", "");
|
||||
string emailCc = frdic.nz("SendToEmailCc", "");
|
||||
if (!string.IsNullOrEmpty(email) && filebyte.Length > 0)
|
||||
{
|
||||
var inv = new Dictionary<string, byte[]> { [frdic.nz("DocumentName")] = filebyte };
|
||||
@@ -334,7 +335,7 @@ public partial class IntranetController
|
||||
invId, email.Trim(), UserAccountID);
|
||||
bool sent = await _comService.SendEmailAsync(
|
||||
$"inv_{invId}", $"Sanit\u00e4rFuchs - {frdic.nz("DocumentName")}",
|
||||
body, email.Trim(), "", inv);
|
||||
body, email.Trim(), "", inv, string.IsNullOrEmpty(emailCc) ? null : emailCc.Trim());
|
||||
if (sent)
|
||||
{
|
||||
await _events.InvoiceSentToCustomerAsync(fdInv, email.Trim(), UserAccountID);
|
||||
@@ -425,6 +426,7 @@ public partial class IntranetController
|
||||
var fdInv = await _invoices.LoadInvoiceAsync(invId, UserAccountID, DbSec);
|
||||
byte[] filebyte = await _invoices.RenderInvoicePdfBytesAsync(fdInv, fdInv.IsDraft);
|
||||
string email = frdic.nz("SendToEmail", "");
|
||||
string emailCc = frdic.nz("SendToEmailCc", "");
|
||||
if (!string.IsNullOrEmpty(email) && filebyte.Length > 0)
|
||||
{
|
||||
double bal = Convert.ToDouble(frdic.no("InvoiceBalance", 0));
|
||||
@@ -432,7 +434,8 @@ public partial class IntranetController
|
||||
bool sent = await _comService.SendEmailAsync(
|
||||
$"inv_{invId}", $"Sanit\u00e4rFuchs - {frdic.nz("DocumentName")}",
|
||||
BuildInvoiceBody(bal, terms), email.Trim(), "",
|
||||
new Dictionary<string, byte[]> { [frdic.nz("DocumentName")] = filebyte });
|
||||
new Dictionary<string, byte[]> { [frdic.nz("DocumentName")] = filebyte },
|
||||
string.IsNullOrEmpty(emailCc) ? null : emailCc.Trim());
|
||||
if (sent)
|
||||
await _events.InvoiceSentToCustomerAsync(fdInv, email.Trim(), UserAccountID, resent: true);
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user