From 312f784e3eb2f7ebffa90383845b10160d9ffbd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96zt=C3=BCrk?= Date: Sun, 24 May 2026 00:54:36 +0300 Subject: [PATCH] =?UTF-8?q?ListFormWorkflow=20daki=20Information=20d=C3=BC?= =?UTF-8?q?=C4=9F=C3=BCm=C3=BC=20=C3=A7al=C4=B1=C5=9Ft=C4=B1r=C4=B1ld?= =?UTF-8?q?=C4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ListForms/ListFormWorkflowAppService.cs | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/api/src/Sozsoft.Platform.Application/ListForms/ListFormWorkflowAppService.cs b/api/src/Sozsoft.Platform.Application/ListForms/ListFormWorkflowAppService.cs index 5fa5a26..33d4edf 100644 --- a/api/src/Sozsoft.Platform.Application/ListForms/ListFormWorkflowAppService.cs +++ b/api/src/Sozsoft.Platform.Application/ListForms/ListFormWorkflowAppService.cs @@ -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 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? sender = null; + if (!senderEmail.IsNullOrWhiteSpace()) + { + sender = new KeyValuePair(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 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 $""" +

Workflow bilgilendirme adimina ulasildi.

+ + + + +
Liste Formu{listFormCode}
Adim{nodeTitle}
Kayit{keyText}
+ """; } private async Task UpdateRowAsync(WorkflowRunContext context, Dictionary data)