80 lines
4.4 KiB
C#
80 lines
4.4 KiB
C#
using System.ComponentModel;
|
|
using System.Threading.Tasks;
|
|
using ModelContextProtocol.Server;
|
|
using Sozsoft.Mcp.Dtos;
|
|
|
|
namespace Sozsoft.Mcp.Tools;
|
|
|
|
/// <summary>
|
|
/// Rapor kategorisi ve DynamicReport sablonu araclari. Sablon HTML'dir ve
|
|
/// <c>/admin/reports/DynamicReport/view/{Id}</c> ile basilir; bir ekran kaydiyla acildiginda
|
|
/// <c>{{AlanAdi}}</c> yer tutuculari o kaydin alanlariyla doldurulur.
|
|
/// </summary>
|
|
[McpServerToolType]
|
|
public sealed class McpReportTools(IMcpReportAppService reportAppService)
|
|
{
|
|
[McpServerTool(Name = McpToolNames.ListReportTemplates, ReadOnly = true)]
|
|
[Description("Rapor kategorilerini ve rapor sablonlarini listeler; HTML dondurmez. Sablon kaydederken kategori adi buradan secilir.")]
|
|
public async Task<McpReportCatalogDto> ListReportTemplatesAsync(
|
|
[Description("Sablon adi ya da aciklamasi icinde aranacak metin. Bos birakilabilir.")]
|
|
string? search = null)
|
|
=> await reportAppService.GetReportTemplatesAsync(search);
|
|
|
|
[McpServerTool(Name = McpToolNames.GetReportTemplate, ReadOnly = true)]
|
|
[Description("Bir rapor sablonunun HTML icerigini, yer tutucularini ve goruntuleme adresini dondurur. Degistirmeden once oku.")]
|
|
public async Task<McpReportTemplateDto> GetReportTemplateAsync(
|
|
[Description("Sablonun Id'si ya da adi.")]
|
|
string template)
|
|
=> await reportAppService.GetReportTemplateAsync(template);
|
|
|
|
[McpServerTool(Name = McpToolNames.SaveReportCategory, Destructive = true, Idempotent = true)]
|
|
[Description("Rapor kategorisini ada gore kaydeder: yoksa ekler, varsa gunceller. Kayit bir ekran kaydindan basilan HTML sablonu ise var olan 'Raporlar' kategorisini kullan; yeni kategori yalnizca istenince acilir.")]
|
|
public async Task<McpReportCategoryDto> SaveReportCategoryAsync(
|
|
[Description("Kategorinin adi; kimligidir.")]
|
|
string name,
|
|
[Description("Aciklama.")]
|
|
string? description = null,
|
|
[Description("Ikon adi.")]
|
|
string? icon = null)
|
|
=> await reportAppService.SaveReportCategoryAsync(new McpReportCategorySaveRequestDto
|
|
{
|
|
Name = name,
|
|
Description = description,
|
|
Icon = icon
|
|
});
|
|
|
|
[McpServerTool(Name = McpToolNames.SaveReportTemplate, Destructive = true, Idempotent = true)]
|
|
[Description("DynamicReport sablonunu ada gore kaydeder: yoksa ekler, varsa gunceller; guncellemede verilmeyen alanlar korunur. Sablon A4'e basilan HTML'dir (Standard Taahhutname gibi). listFormCode verilirse HTML icindeki {{AlanAdi}} yer tutuculari o ekranin alanlarina gore dogrulanir ve cevapta rowButton doner: bu butonu ekranin CommandColumnJson listesine ekle (deploy_wizard), VisibleExpression ile kosullandir. Sozlesme icin get_dev_guide 9.12.")]
|
|
public async Task<McpReportTemplateDto> SaveReportTemplateAsync(
|
|
[Description("Sablonun adi; kimligidir.")]
|
|
string name,
|
|
[Description("Kategori adi ya da Id'si. Yeni sablonda zorunlu; kayit HTML'i icin 'Raporlar'.")]
|
|
string? category = null,
|
|
[Description("Basilacak HTML. Kayit alanlari {{AlanAdi}} ile, rapor tarihi @@date ile yazilir. Yeni sablonda zorunlu, guncellemede bos birakilirsa mevcut icerik korunur.")]
|
|
string? htmlContent = null,
|
|
[Description("Aciklama.")]
|
|
string? description = null,
|
|
[Description("'active' ya da 'passive'. Yeni sablonda varsayilan 'active'.")]
|
|
string? status = null,
|
|
[Description("Sablonun basilacagi ekranin kodu (ornegin katilimci listesi). Verilirse yer tutucular dogrulanir ve satir butonu doner.")]
|
|
string? listFormCode = null,
|
|
[Description("Satir butonunun dil anahtari. Verilmezse App.Platform.View.")]
|
|
string? buttonText = null)
|
|
=> await reportAppService.SaveReportTemplateAsync(new McpReportTemplateSaveRequestDto
|
|
{
|
|
Name = name,
|
|
Category = category,
|
|
HtmlContent = htmlContent,
|
|
Description = description,
|
|
Status = status,
|
|
ListFormCode = listFormCode,
|
|
ButtonText = buttonText
|
|
});
|
|
|
|
[McpServerTool(Name = McpToolNames.DeleteReportTemplate, Destructive = true, Idempotent = false)]
|
|
[Description("Rapor sablonunu siler. Sablonu acan satir butonlari ekranlardan ayrica kaldirilir.")]
|
|
public async Task DeleteReportTemplateAsync(
|
|
[Description("Sablonun Id'si ya da adi.")]
|
|
string template)
|
|
=> await reportAppService.DeleteReportTemplateAsync(template);
|
|
}
|