ListFormWorkflow daki Information düğümü çalıştırıldı

This commit is contained in:
Sedat Öztürk 2026-05-24 00:54:36 +03:00
parent 6ed1c2dabc
commit 312f784e3e

View file

@ -2,16 +2,21 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Sozsoft.Platform.Data.Seeds;
using Sozsoft.Platform.Entities;
using Sozsoft.Platform.Enums;
using Sozsoft.Platform.ListForms.Select;
using Sozsoft.Platform.Queries;
using Sozsoft.Sender.Mail;
using Volo.Abp;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Identity;
using Volo.Abp.Settings;
namespace Sozsoft.Platform.ListForms.Workflow;
@ -28,19 +33,28 @@ public class ListFormWorkflowAppService : PlatformAppService, IListFormWorkflowA
private readonly IListFormAuthorizationManager authManager;
private readonly IListFormSelectAppService listFormSelectAppService;
private readonly IQueryManager queryManager;
private readonly IdentityUserManager identityUserManager;
private readonly ISozsoftEmailSender erpEmailSender;
private readonly ISettingProvider settingProvider;
public ListFormWorkflowAppService(
IRepository<ListFormWorkflow, string> criteriaRepository,
IListFormManager listFormManager,
IListFormAuthorizationManager authManager,
IListFormSelectAppService listFormSelectAppService,
IQueryManager queryManager)
IQueryManager queryManager,
IdentityUserManager identityUserManager,
ISozsoftEmailSender erpEmailSender,
ISettingProvider settingProvider)
{
this.criteriaRepository = criteriaRepository;
this.listFormManager = listFormManager;
this.authManager = authManager;
this.listFormSelectAppService = listFormSelectAppService;
this.queryManager = queryManager;
this.identityUserManager = identityUserManager;
this.erpEmailSender = erpEmailSender;
this.settingProvider = settingProvider;
}
[HttpGet("criteria")]
@ -497,6 +511,74 @@ public class ListFormWorkflowAppService : PlatformAppService, IListFormWorkflowA
await UpdateRowAsync(context, update);
MergeRowValues(context.Row, update);
if (node.Kind == "Inform")
{
await SendInformEmailAsync(context, node);
}
}
private async Task SendInformEmailAsync(WorkflowRunContext context, ListFormWorkflow node)
{
var recipientEmail = await ResolveApproverEmailAsync(node.Approver);
var senderName = await settingProvider.GetOrNullAsync(SeedConsts.AbpSettings.Mailing.Default.DefaultFromDisplayName);
var senderEmail = await settingProvider.GetOrNullAsync(SeedConsts.AbpSettings.Mailing.Default.DefaultFromAddress);
KeyValuePair<string, string>? sender = null;
if (!senderEmail.IsNullOrWhiteSpace())
{
sender = new KeyValuePair<string, string>(senderName, senderEmail);
}
var result = await erpEmailSender.SendEmailAsync(
recipientEmail,
sender,
new { },
BuildInformEmailBody(context, node),
$"Workflow Bilgilendirme: {node.Title}",
null,
true);
if (!result.Success)
{
throw new UserFriendlyException($"Bilgilendirme maili gonderilemedi: {result.ErrorMessage}");
}
}
private async Task<string> ResolveApproverEmailAsync(string approver)
{
if (approver.IsNullOrWhiteSpace())
{
throw new UserFriendlyException("Bilgilendirme dugumu icin approver tanimli degil.");
}
if (approver.Contains('@'))
{
return approver.Trim();
}
var user = await identityUserManager.FindByNameAsync(approver.Trim());
if (user == null || user.Email.IsNullOrWhiteSpace())
{
throw new UserFriendlyException($"Bilgilendirme kullanicisinin mail adresi bulunamadi: {approver}");
}
return user.Email;
}
private static string BuildInformEmailBody(WorkflowRunContext context, ListFormWorkflow node)
{
var keyText = string.Join(", ", context.Keys.Select(key => WebUtility.HtmlEncode(key?.ToString() ?? string.Empty)));
var listFormCode = WebUtility.HtmlEncode(context.ListFormCode ?? string.Empty);
var nodeTitle = WebUtility.HtmlEncode(node.Title ?? string.Empty);
return $"""
<p>Workflow bilgilendirme adimina ulasildi.</p>
<table>
<tr><td><strong>Liste Formu</strong></td><td>{listFormCode}</td></tr>
<tr><td><strong>Adim</strong></td><td>{nodeTitle}</td></tr>
<tr><td><strong>Kayit</strong></td><td>{keyText}</td></tr>
</table>
""";
}
private async Task UpdateRowAsync(WorkflowRunContext context, Dictionary<string, object> data)