diff --git a/api/src/Kurs.Platform.Application/Reports/ReportAppService.cs b/api/src/Kurs.Platform.Application/Reports/ReportAppService.cs index 8621e681..bc7246e8 100644 --- a/api/src/Kurs.Platform.Application/Reports/ReportAppService.cs +++ b/api/src/Kurs.Platform.Application/Reports/ReportAppService.cs @@ -16,12 +16,12 @@ namespace Kurs.Platform.Reports; public class ReportAppService : PlatformAppService, IReportAppService { private readonly IRepository _reportTemplateRepository; - private readonly IRepository _generatedReportRepository; + private readonly IRepository _generatedReportRepository; private readonly IRepository _reportParameterRepository; public ReportAppService( IRepository reportTemplateRepository, - IRepository generatedReportRepository, + IRepository generatedReportRepository, IRepository reportParameterRepository) { _reportTemplateRepository = reportTemplateRepository; @@ -222,7 +222,7 @@ public class ReportAppService : PlatformAppService, IReportAppService generatedContent = generatedContent.Replace(pattern, param.Value ?? ""); } - var generatedReport = new GeneratedReport( + var generatedReport = new ReportGenerated( GuidGenerator.Create(), template.Id, template.Name, @@ -297,7 +297,7 @@ public class ReportAppService : PlatformAppService, IReportAppService return dto; } - private GeneratedReportDto MapToGeneratedReportDto(GeneratedReport report) + private GeneratedReportDto MapToGeneratedReportDto(ReportGenerated report) { var dto = new GeneratedReportDto { diff --git a/api/src/Kurs.Platform.Application/Reports/ReportAutoMapperProfile.cs b/api/src/Kurs.Platform.Application/Reports/ReportAutoMapperProfile.cs index f65c44ca..fb6979af 100644 --- a/api/src/Kurs.Platform.Application/Reports/ReportAutoMapperProfile.cs +++ b/api/src/Kurs.Platform.Application/Reports/ReportAutoMapperProfile.cs @@ -34,12 +34,12 @@ namespace Kurs.Platform.Reports .ForMember(dest => dest.Type, opt => opt.MapFrom(src => (Entities.ReportParameterType)src.Type)) .ForMember(dest => dest.ReportTemplateId, opt => opt.Ignore()); - CreateMap() + CreateMap() .ForMember(dest => dest.Parameters, opt => opt.MapFrom(src => ConvertParametersFromJson(src.Parameters))) .ForMember(dest => dest.Template, opt => opt.MapFrom(src => src.Template)); - CreateMap() + CreateMap() .ForMember(dest => dest.Parameters, opt => opt.MapFrom(src => ConvertParametersToJson(src.Parameters))) .ForMember(dest => dest.Id, opt => opt.Ignore()) .ForMember(dest => dest.TemplateId, opt => opt.MapFrom(src => src.TemplateId)) diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json index 9acf2bb5..a1aacff9 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json @@ -25660,7 +25660,7 @@ }, { "key": "admin.reports.view", - "path": "/admin/reports/:id", + "path": "/admin/report/:id", "componentPath": "@/views/report/ReportViewerPage", "routeType": "protected", "authority": ["App.Reports.Update"] diff --git a/api/src/Kurs.Platform.Domain/Entities/GeneratedReport.cs b/api/src/Kurs.Platform.Domain/Entities/ReportGenerated.cs similarity index 89% rename from api/src/Kurs.Platform.Domain/Entities/GeneratedReport.cs rename to api/src/Kurs.Platform.Domain/Entities/ReportGenerated.cs index 8006be72..29bb428a 100644 --- a/api/src/Kurs.Platform.Domain/Entities/GeneratedReport.cs +++ b/api/src/Kurs.Platform.Domain/Entities/ReportGenerated.cs @@ -4,7 +4,7 @@ using Volo.Abp.Domain.Entities.Auditing; namespace Kurs.Platform.Entities { - public class GeneratedReport : FullAuditedAggregateRoot + public class ReportGenerated : FullAuditedAggregateRoot { public Guid? TemplateId { get; set; } @@ -22,12 +22,12 @@ namespace Kurs.Platform.Entities // Navigation property public virtual ReportTemplate Template { get; set; } - public GeneratedReport() + public ReportGenerated() { GeneratedAt = DateTime.UtcNow; } - public GeneratedReport( + public ReportGenerated( Guid id, Guid? templateId, string templateName, diff --git a/api/src/Kurs.Platform.Domain/Repositories/IGeneratedReportRepository.cs b/api/src/Kurs.Platform.Domain/Repositories/IGeneratedReportRepository.cs index 8560a8fb..ebefbd45 100644 --- a/api/src/Kurs.Platform.Domain/Repositories/IGeneratedReportRepository.cs +++ b/api/src/Kurs.Platform.Domain/Repositories/IGeneratedReportRepository.cs @@ -6,9 +6,9 @@ using Volo.Abp.Domain.Repositories; namespace Kurs.Platform.Repositories { - public interface IGeneratedReportRepository : IRepository + public interface IGeneratedReportRepository : IRepository { - Task> GetListAsync( + Task> GetListAsync( int skipCount = 0, int maxResultCount = int.MaxValue, string sorting = null, @@ -18,8 +18,8 @@ namespace Kurs.Platform.Repositories Task GetCountAsync(string filter = null, Guid? templateId = null); - Task> GetByTemplateIdAsync(Guid? templateId); + Task> GetByTemplateIdAsync(Guid? templateId); - Task GetByIdWithTemplateAsync(Guid id); + Task GetByIdWithTemplateAsync(Guid id); } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index e23a6b9d..91279b39 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -84,7 +84,7 @@ public class PlatformDbContext : // Reports Entities public DbSet ReportTemplates { get; set; } public DbSet ReportParameters { get; set; } - public DbSet GeneratedReports { get; set; } + public DbSet GeneratedReports { get; set; } public DbSet ListFormImports { get; set; } public DbSet ListFormImportExecutes { get; set; } @@ -723,9 +723,9 @@ public class PlatformDbContext : b.Property(x => x.Description).HasMaxLength(1000); }); - builder.Entity(b => + builder.Entity(b => { - b.ToTable(PlatformConsts.DbTablePrefix + nameof(GeneratedReport), PlatformConsts.DbSchema); + b.ToTable(PlatformConsts.DbTablePrefix + nameof(ReportGenerated), PlatformConsts.DbSchema); b.ConfigureByConvention(); b.Property(x => x.TemplateId).IsRequired(false); // Nullable yapıyoruz diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815110914_Reports.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815115111_Reports.Designer.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815110914_Reports.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815115111_Reports.Designer.cs index 753c3a52..a70aeddb 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815110914_Reports.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815115111_Reports.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20250815110914_Reports")] + [Migration("20250815115111_Reports")] partial class Reports { /// @@ -2039,79 +2039,6 @@ namespace Kurs.Platform.Migrations b.ToTable("PDataSource", (string)null); }); - modelBuilder.Entity("Kurs.Platform.Entities.GeneratedReport", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("GeneratedAt") - .HasColumnType("datetime2"); - - b.Property("GeneratedContent") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Parameters") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)"); - - b.Property("TemplateId") - .HasColumnType("uniqueidentifier"); - - b.Property("TemplateName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TemplateId"); - - b.ToTable("PGeneratedReport", (string)null); - }); - modelBuilder.Entity("Kurs.Platform.Entities.GlobalSearch", b => { b.Property("Id") @@ -2959,6 +2886,79 @@ namespace Kurs.Platform.Migrations b.ToTable("PProduct", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.ReportGenerated", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GeneratedAt") + .HasColumnType("datetime2"); + + b.Property("GeneratedContent") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Parameters") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)"); + + b.Property("TemplateId") + .HasColumnType("uniqueidentifier"); + + b.Property("TemplateName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TemplateId"); + + b.ToTable("PReportGenerated", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ReportParameter", b => { b.Property("Id") @@ -5959,16 +5959,6 @@ namespace Kurs.Platform.Migrations b.Navigation("Entity"); }); - modelBuilder.Entity("Kurs.Platform.Entities.GeneratedReport", b => - { - b.HasOne("Kurs.Platform.Entities.ReportTemplate", "Template") - .WithMany() - .HasForeignKey("TemplateId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Template"); - }); - modelBuilder.Entity("Kurs.Platform.Entities.ListFormCustomization", b => { b.HasOne("Kurs.Platform.Entities.ListForm", null) @@ -5989,6 +5979,16 @@ namespace Kurs.Platform.Migrations .IsRequired(); }); + modelBuilder.Entity("Kurs.Platform.Entities.ReportGenerated", b => + { + b.HasOne("Kurs.Platform.Entities.ReportTemplate", "Template") + .WithMany() + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("Template"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ReportParameter", b => { b.HasOne("Kurs.Platform.Entities.ReportTemplate", "ReportTemplate") diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815110914_Reports.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815115111_Reports.cs similarity index 95% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815110914_Reports.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815115111_Reports.cs index 0367838b..802eb7a4 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815110914_Reports.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250815115111_Reports.cs @@ -37,7 +37,7 @@ namespace Kurs.Platform.Migrations }); migrationBuilder.CreateTable( - name: "PGeneratedReport", + name: "PReportGenerated", columns: table => new { Id = table.Column(type: "uniqueidentifier", nullable: false), @@ -58,9 +58,9 @@ namespace Kurs.Platform.Migrations }, constraints: table => { - table.PrimaryKey("PK_PGeneratedReport", x => x.Id); + table.PrimaryKey("PK_PReportGenerated", x => x.Id); table.ForeignKey( - name: "FK_PGeneratedReport_PReportTemplate_TemplateId", + name: "FK_PReportGenerated_PReportTemplate_TemplateId", column: x => x.TemplateId, principalTable: "PReportTemplate", principalColumn: "Id", @@ -99,8 +99,8 @@ namespace Kurs.Platform.Migrations }); migrationBuilder.CreateIndex( - name: "IX_PGeneratedReport_TemplateId", - table: "PGeneratedReport", + name: "IX_PReportGenerated_TemplateId", + table: "PReportGenerated", column: "TemplateId"); migrationBuilder.CreateIndex( @@ -113,7 +113,7 @@ namespace Kurs.Platform.Migrations protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( - name: "PGeneratedReport"); + name: "PReportGenerated"); migrationBuilder.DropTable( name: "PReportParameter"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 3caecc2a..f89a72c5 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -2036,79 +2036,6 @@ namespace Kurs.Platform.Migrations b.ToTable("PDataSource", (string)null); }); - modelBuilder.Entity("Kurs.Platform.Entities.GeneratedReport", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("GeneratedAt") - .HasColumnType("datetime2"); - - b.Property("GeneratedContent") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Parameters") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)"); - - b.Property("TemplateId") - .HasColumnType("uniqueidentifier"); - - b.Property("TemplateName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TemplateId"); - - b.ToTable("PGeneratedReport", (string)null); - }); - modelBuilder.Entity("Kurs.Platform.Entities.GlobalSearch", b => { b.Property("Id") @@ -2956,6 +2883,79 @@ namespace Kurs.Platform.Migrations b.ToTable("PProduct", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.ReportGenerated", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GeneratedAt") + .HasColumnType("datetime2"); + + b.Property("GeneratedContent") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Parameters") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)"); + + b.Property("TemplateId") + .HasColumnType("uniqueidentifier"); + + b.Property("TemplateName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TemplateId"); + + b.ToTable("PReportGenerated", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ReportParameter", b => { b.Property("Id") @@ -5956,16 +5956,6 @@ namespace Kurs.Platform.Migrations b.Navigation("Entity"); }); - modelBuilder.Entity("Kurs.Platform.Entities.GeneratedReport", b => - { - b.HasOne("Kurs.Platform.Entities.ReportTemplate", "Template") - .WithMany() - .HasForeignKey("TemplateId") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("Template"); - }); - modelBuilder.Entity("Kurs.Platform.Entities.ListFormCustomization", b => { b.HasOne("Kurs.Platform.Entities.ListForm", null) @@ -5986,6 +5976,16 @@ namespace Kurs.Platform.Migrations .IsRequired(); }); + modelBuilder.Entity("Kurs.Platform.Entities.ReportGenerated", b => + { + b.HasOne("Kurs.Platform.Entities.ReportTemplate", "Template") + .WithMany() + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("Template"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ReportParameter", b => { b.HasOne("Kurs.Platform.Entities.ReportTemplate", "ReportTemplate") diff --git a/ui/src/components/reports/Dashboard.tsx b/ui/src/components/reports/Dashboard.tsx index 710a1e53..5b8af763 100644 --- a/ui/src/components/reports/Dashboard.tsx +++ b/ui/src/components/reports/Dashboard.tsx @@ -28,7 +28,7 @@ export const Dashboard: React.FC = () => { return templates.filter((template) => { const matchesSearch = template.name.toLowerCase().includes(searchQuery.toLowerCase()) || - template.description.toLowerCase().includes(searchQuery.toLowerCase()) || + template.description?.toLowerCase().includes(searchQuery.toLowerCase()) || template.tags.some((tag: any) => tag.toLowerCase().includes(searchQuery.toLowerCase())) const matchesCategory = selectedCategory === 'Tümü' || template.category === selectedCategory diff --git a/ui/src/components/reports/ParameterForm.tsx b/ui/src/components/reports/ParameterForm.tsx deleted file mode 100644 index dd9f1818..00000000 --- a/ui/src/components/reports/ParameterForm.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import React from 'react' -import { Plus, Trash2 } from 'lucide-react' -import { ReportParameterDto } from '@/proxy/reports/models' -import { Button, Input } from '../ui' - -interface ParameterFormProps { - parameters: ReportParameterDto[] - onChange: (parameters: ReportParameterDto[]) => void -} - -export const ParameterForm: React.FC = ({ parameters, onChange }) => { - const addParameter = () => { - const newParameter: ReportParameterDto = { - id: crypto.randomUUID(), - name: '', - placeholder: '', - type: 'text', - required: false, - description: '', - } - onChange([...parameters, newParameter]) - } - - const updateParameter = (id: string, updates: Partial) => { - onChange(parameters.map((param) => (param.id === id ? { ...param, ...updates } : param))) - } - - const removeParameter = (id: string) => { - onChange(parameters.filter((param) => param.id !== id)) - } - - const generatePlaceholder = (name: string) => { - return `@@${name.toUpperCase()}` - } - - return ( -
-
-

Parametre Tanımları

- -
- - {parameters.length === 0 ? ( -
-

Henüz parametre eklenmemiş.

-

Dinamik içerik için parametreler ekleyin.

-
- ) : ( -
- {parameters.map((param, index) => ( -
-
-

Parametre #{index + 1}

- -
- -
- { - const name = e.target.value - updateParameter(param.id, { - name, - placeholder: generatePlaceholder(name), - }) - }} - placeholder="Parametre Adı Örn: SIRKETADI" - /> - -
- - -
- - updateParameter(param.id, { defaultValue: e.target.value })} - /> - -
- updateParameter(param.id, { required: e.target.checked })} - className="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" - /> - -
-
- -
- updateParameter(param.id, { description: e.target.value })} - placeholder="Açıklama" - rows={2} - textArea={true} - /> -
- - {param.name && ( -
-

- Kullanım:{' '} - {param.placeholder} -

-
- )} -
- ))} -
- )} -
- ) -} diff --git a/ui/src/components/reports/ReportViewer.tsx b/ui/src/components/reports/ReportViewer.tsx index a749ea39..309162c2 100644 --- a/ui/src/components/reports/ReportViewer.tsx +++ b/ui/src/components/reports/ReportViewer.tsx @@ -4,14 +4,14 @@ import { Button } from '../ui/Button' import { ArrowLeft, Calendar, FileText, Download, ZoomIn, ZoomOut } from 'lucide-react' import html2canvas from 'html2canvas' import jsPDF from 'jspdf' -import { GeneratedReportDto, ReportTemplateDto } from '@/proxy/reports/models' +import { ReportGeneratedDto, ReportTemplateDto } from '@/proxy/reports/models' import { useReports } from '@/utils/hooks/useReports' export const ReportViewer: React.FC = () => { const { id } = useParams<{ id: string }>() const navigate = useNavigate() const [zoomLevel, setZoomLevel] = useState(100) - const [report, setReport] = useState(null) + const [report, setReport] = useState(null) const [template, setTemplate] = useState(null) const [isLoading, setIsLoading] = useState(true) const [error, setError] = useState(null) diff --git a/ui/src/components/reports/TemplateCard.tsx b/ui/src/components/reports/TemplateCard.tsx index 58a13205..b509775b 100644 --- a/ui/src/components/reports/TemplateCard.tsx +++ b/ui/src/components/reports/TemplateCard.tsx @@ -16,10 +16,6 @@ export const TemplateCard: React.FC = ({ onDelete, onGenerate, }) => { - const formatDate = (date: Date) => { - return new Date(date).toLocaleDateString('tr-TR') - } - return (
@@ -54,7 +50,7 @@ export const TemplateCard: React.FC = ({
-

Güncellenme: {formatDate(template.lastModificationTime)}

+

Güncellenme: {template.lastModificationTime}

diff --git a/ui/src/components/reports/TemplateEditor.tsx b/ui/src/components/reports/TemplateEditor.tsx index c49fc5df..c10763d8 100644 --- a/ui/src/components/reports/TemplateEditor.tsx +++ b/ui/src/components/reports/TemplateEditor.tsx @@ -34,9 +34,9 @@ export const TemplateEditor: React.FC = ({ if (template) { setFormData({ name: template.name, - description: template.description, + description: template.description || '', htmlContent: template.htmlContent, - category: template.category, + category: template.category || 'Genel', tags: template.tags, parameters: template.parameters, }) @@ -70,6 +70,7 @@ export const TemplateEditor: React.FC = ({ // Yeni parametre oluştur return { id: crypto.randomUUID(), + reportTemplateId: template?.id || '', name: paramName, placeholder: `@@${paramName}`, type: 'text', @@ -96,7 +97,7 @@ export const TemplateEditor: React.FC = ({ setIsSaving(true) try { - await onSave(formData) + await onSave(formData as unknown as ReportTemplateDto) onClose() } catch (error) { console.error('Error saving template:', error) @@ -166,6 +167,7 @@ export const TemplateEditor: React.FC = ({
setFormData((prev) => ({ diff --git a/ui/src/proxy/reports/models.ts b/ui/src/proxy/reports/models.ts index 4fe82a9a..7403aeb4 100644 --- a/ui/src/proxy/reports/models.ts +++ b/ui/src/proxy/reports/models.ts @@ -1,23 +1,11 @@ -// reports.models.ts - -/** Enum, backend ile birebir (0..4) */ -export enum ReportParameterType { - Text = 0, - Number = 1, - Date = 2, - Email = 3, - Url = 4, -} - -/** ---- API MODELLERİ (Raw JSON) ---- */ -/** Not: Tarihler API’den ISO string olarak gelir (Date değil) */ +export type ReportParameterType = 'text' | 'number' | 'date' | 'select' | 'checkbox' export interface ReportParameterDto { id: string reportTemplateId: string name: string placeholder?: string - type: ReportParameterType // enum (0..4) + type: ReportParameterType defaultValue?: string required: boolean description?: string @@ -39,7 +27,7 @@ export interface ReportTemplateDto { lastModifierId?: string } -export interface GeneratedReportDto { +export interface ReportGeneratedDto { id: string templateId?: string | null templateName: string @@ -89,7 +77,7 @@ export interface UpdateReportTemplateDto { } /** Generate input’u */ -export interface GenerateReportDto { +export interface ReportGenerateDto { templateId: string parameters: Record } @@ -103,16 +91,10 @@ export interface GetReportTemplatesInput { category?: string } -export interface GetGeneratedReportsInput { +export interface GetReportsGeneratedInput { skipCount?: number maxResultCount?: number sorting?: string filter?: string templateId?: string } - -/** (Opsiyonel) Paged wrapper — projende zaten varsa bunu kullanmana gerek yok */ -export interface PagedResultDto { - items: T[] - totalCount: number -} diff --git a/ui/src/services/reports.service.ts b/ui/src/services/reports.service.ts index ecd27770..aa9d2cbc 100644 --- a/ui/src/services/reports.service.ts +++ b/ui/src/services/reports.service.ts @@ -1,16 +1,16 @@ import { ReportTemplateDto, - GeneratedReportDto, + ReportGeneratedDto, CreateReportTemplateDto, UpdateReportTemplateDto, - GenerateReportDto, // backend'deki GenerateReportDto (templateId + parameters) + ReportGenerateDto, // backend'deki GenerateReportDto (templateId + parameters) } from '@/proxy/reports/models' import apiService from './api.service' import { PagedAndSortedResultRequestDto, PagedResultDto } from '@/proxy' export interface ReportsData { templates: ReportTemplateDto[] - generatedReports: GeneratedReportDto[] + generatedReports: ReportGeneratedDto[] } export class ReportsService { @@ -71,7 +71,7 @@ export class ReportsService { // GENERATED REPORTS getGeneratedReports = (input: PagedAndSortedResultRequestDto) => - apiService.fetchData, PagedAndSortedResultRequestDto>( + apiService.fetchData, PagedAndSortedResultRequestDto>( { method: 'GET', url: '/api/app/report/generated-reports', // ✔ Swagger: GET /api/app/report/generated-reports @@ -85,7 +85,7 @@ export class ReportsService { ) getGeneratedReportById = (id: string) => - apiService.fetchData( + apiService.fetchData( { method: 'GET', url: `/api/app/report/${id}/generated-report`, // ✔ Swagger: GET /api/app/report/{id}/generated-report @@ -93,8 +93,8 @@ export class ReportsService { { apiName: this.apiName }, ) - generateReport = (input: GenerateReportDto) => - apiService.fetchData( + generateReport = (input: ReportGenerateDto) => + apiService.fetchData( { method: 'POST', url: '/api/app/report/generate-report', // ✔ Swagger: POST /api/app/report/generate-report diff --git a/ui/src/utils/hooks/useReports.ts b/ui/src/utils/hooks/useReports.ts index a785f898..02cb952f 100644 --- a/ui/src/utils/hooks/useReports.ts +++ b/ui/src/utils/hooks/useReports.ts @@ -1,4 +1,4 @@ -import { GeneratedReportDto, ReportTemplateDto } from '@/proxy/reports/models' +import { ReportGeneratedDto, ReportTemplateDto } from '@/proxy/reports/models' import ReportsService from '@/services/reports.service' import { useState, useCallback, useEffect } from 'react' @@ -6,7 +6,7 @@ const reportsService = new ReportsService() interface ReportData { templates: ReportTemplateDto[] - generatedReports: GeneratedReportDto[] + generatedReports: ReportGeneratedDto[] } export const useReports = () => { @@ -127,13 +127,13 @@ export const useReports = () => { async (templateId: string, parameterValues: Record) => { setIsLoading(true) try { - const reportData: GeneratedReportDto = { + const reportData: ReportGeneratedDto = { templateId, parameters: parameterValues, - } as GeneratedReportDto + } as ReportGeneratedDto const response = await reportsService.generateReport(reportData) - const report = response.data as GeneratedReportDto + const report = response.data as ReportGeneratedDto if (report) { // Update local state @@ -158,7 +158,7 @@ export const useReports = () => { async (reportId: string) => { try { const response = await reportsService.getGeneratedReportById(reportId) - return response.data as GeneratedReportDto + return response.data as ReportGeneratedDto } catch (error) { console.error('Error getting report by id:', error) // Fallback to local data