Supply Chain Supplier

This commit is contained in:
Sedat ÖZTÜRK 2025-11-12 15:59:31 +03:00
parent 7493f5cedf
commit d9d00102a6
108 changed files with 2258 additions and 801 deletions

View file

@ -61,7 +61,7 @@ RUN apk add --no-cache \
libc6-compat \
libc-dev
# OpenSSL default TLSv3 desteklediği için MSSQL 2012'ye bağlanmıyor. Bunu çözmek için gerekli
# OpenSSL default TLSv3 desteklediği için MSSQL 2012'ye bağlanmıyor. Bunu çözmek için gerekli
RUN sed -i 's/\[openssl_init\]/# [openssl_init]/' /etc/ssl/openssl.cnf
RUN printf "\n\n[openssl_init]\nssl_conf = ssl_sect" >> /etc/ssl/openssl.cnf
RUN printf "\n\n[ssl_sect]\nsystem_default = ssl_default_sect" >> /etc/ssl/openssl.cnf

View file

@ -17,13 +17,13 @@
`dotnet ef migrations remove`
`dotnet ef database update "20240822114716_ABP_822"`
- SQL Veritabanını Entity Class oluştur.
- SQL Veritabanını Entity Class oluştur.
`dotnet ef dbcontext scaffold "Server=SERVERNAME;Database=DBNAME;User ID=USERNAME;Password=PASSWORD;TrustServerCertificate=True;" Microsoft.EntityFrameworkCore.SqlServer --context MyDbContext --output-dir Models --data-annotations --force`
# Custom Endpoints
```
Token İsteği Örnek:
Token İsteği Örnek:
POST /connect/token HTTP/1.1
Host: localhost:44344
Content-Type: application/x-www-form-urlencoded
@ -35,28 +35,28 @@ username=system%40sozsoft.com
&scope=offline_access%20Platform
```
## Whatsapp Ayarları
## Whatsapp Ayarları
- Normal facebook üyeliği yapılır.
- https://developers.facebook.com/ sitesinden yeni developer üyeliği oluşturulur. Developer üyeliği seçilir.
- CreateApp butonu ile yeni uygulama oluşturulur. Uygulama adı belirlenir. 'Erp Messenger'
- AppType olarak İşletme seçilir ve App oluşturulur.
- Add Products kısmında WhatsApp seçilir ve Business Account oluşturulur.
- 3 noktadan (menüden) WhatsApp Manager sayfasına gidilir. Manage Templates seçilir, istenirse yeni template oluşturulur. 'hello_world'
- WhatsApp Manager üzerinde menüden Settings -> Users -> System Users eklenir. Kullanıcı adı 'admin' ve Role ise 'Admin' seçilir.
- Eklenen 'admin' kullanıcısında 'Assign Assets' seçilir ve full yetki verilir.
- admin kullanıcısı üzerinden 'Generate Token' seçilir ve aşağıdaki yetkiler verilir.
- Normal facebook üyeliği yapılır.
- https://developers.facebook.com/ sitesinden yeni developer üyeliği oluşturulur. Developer üyeliği seçilir.
- CreateApp butonu ile yeni uygulama oluşturulur. Uygulama adı belirlenir. 'Erp Messenger'
- AppType olarak İşletme seçilir ve App oluşturulur.
- Add Products kısmında WhatsApp seçilir ve Business Account oluşturulur.
- 3 noktadan (menüden) WhatsApp Manager sayfasına gidilir. Manage Templates seçilir, istenirse yeni template oluşturulur. 'hello_world'
- WhatsApp Manager üzerinde menüden Settings -> Users -> System Users eklenir. Kullanıcı adı 'admin' ve Role ise 'Admin' seçilir.
- Eklenen 'admin' kullanıcısında 'Assign Assets' seçilir ve full yetki verilir.
- admin kullanıcısı üzerinden 'Generate Token' seçilir ve aşağıdaki yetkiler verilir.
```
- whatsapp_business_management'
- 'whatsapp_business_messaging'
```
- WhatsApp -> API Setup kısmından "From" kısmında yeni telefon numarası eklenir.
- WhatsApp -> API Setup kısmından Generate Access Token oluşturulur.
- WhatsApp -> API Setup kısmından "From" kısmında yeni telefon numarası eklenir.
- WhatsApp -> API Setup kısmından Generate Access Token oluşturulur.
- token: EAASM83pDJf0BO0ZCYBr3Fx4SES0ox8XiZCgP3FIteprYpwawZCkGYjpMlKk4OZCWgRNZC2Ttofgf8amMf929ZBuDcgYIOsXkPMGBNmVxm2czipzq63LmtbYfyCWsKVy0q1jtay0nRoeDuO2FKhqCfLLtNn9cSWjINVLcz26ptK8a2Oko83cZBzrNsp3cpIECnzqRfEjHdEz1U73y3ZB1MZBOhHilax7yZALf4ZA1Tmk
- WhatsApp telefon numarasını Register etmek için aşağıdaki postman Curl gönderilir.
- WhatsApp telefon numarasını Register etmek için aşağıdaki postman Curl gönderilir.
```
curl --location 'https://graph.facebook.com/v21.0/521106361082067/register' \
@ -68,12 +68,12 @@ username=system%40sozsoft.com
}'
```
- Message göndermek için url : https://graph.facebook.com/v21.0/521106361082067/messages
- Message göndermek için url : https://graph.facebook.com/v21.0/521106361082067/messages
```
{
"messaging_product": "whatsapp",
"to": "{+gönderilecek gsm numarası}",
"to": "{+gönderilecek gsm numarası}",
"type": "template",
"template": {
"name": "{message_template_name}",
@ -86,7 +86,7 @@ username=system%40sozsoft.com
"parameters": [
{
"type": "text",
"text": "Test mesajı"
"text": "Test mesajı"
}
]
}
@ -99,16 +99,16 @@ username=system%40sozsoft.com
- https://abp.io/docs/latest/release-info/upgrading
- https://abp.io/docs/9.0/release-info/migration-guides/abp-9-0
- https://learn.microsoft.com/en-us/aspnet/core/migration/80-90?view=aspnetcore-9.0&tabs=visual-studio-code
- Adımlar:
- abp cli güncellenir dotnet tool update --global Volo.Abp.Cli
- abp update ile sln içindeki referanslar update edilir
- modules/ klasörü *.csproj içinde ara&düzenle ile update edilir (örn. 8.3.4 -> 9.0.2)
- .net sürümü arttıysa Microsoft'un dotnet upgrade dokümanı takip edilir
- Yeni dotnet sdk kurulumu yapılır (örn dotnet 9 sdk)
- ef tools güncellenir (dotnet tool update --global dotnet-ef)
- Dockerfile dosyalarındaki base imajlar yeni dotnet sürümüne güncellenir
- Abp upgrade dokümanı takip edilir
- Proje build olmuyorsa hatalar çözülür
- Yeni migration eklenir (varsa). Migration boş çıkıyorsa kaldırılır. (Örn dotnet ef migrations add Abp902 ve dotnet ef migrations remove)
- Migration boş değilse çalıştırılır (dotnet ef database update)
- Adımlar:
- abp cli güncellenir dotnet tool update --global Volo.Abp.Cli
- abp update ile sln içindeki referanslar update edilir
- modules/ klasörü *.csproj içinde ara&düzenle ile update edilir (örn. 8.3.4 -> 9.0.2)
- .net sürümü arttıysa Microsoft'un dotnet upgrade dokümanı takip edilir
- Yeni dotnet sdk kurulumu yapılır (örn dotnet 9 sdk)
- ef tools güncellenir (dotnet tool update --global dotnet-ef)
- Dockerfile dosyalarındaki base imajlar yeni dotnet sürümüne güncellenir
- Abp upgrade dokümanı takip edilir
- Proje build olmuyorsa hatalar çözülür
- Yeni migration eklenir (varsa). Migration boş çıkıyorsa kaldırılır. (Örn dotnet ef migrations add Abp902 ve dotnet ef migrations remove)
- Migration boş değilse çalıştırılır (dotnet ef database update)

View file

@ -2,10 +2,10 @@
public class ActivityFileDto
{
public string FileName { get; set; } // Dosya adı
public string FileName { get; set; } // Dosya adı
public string FileType { get; set; } // MIME tipi
public long FileSize { get; set; } // Boyut (byte)
public string SavedFileName { get; set; } // Blob üzerinde kaydedilen dosya adı
public string FileBase64 { get; set; } // Dosya içeriği
public string SavedFileName { get; set; } // Blob üzerinde kaydedilen dosya adı
public string FileBase64 { get; set; } // Dosya içeriği
}

View file

@ -4,9 +4,9 @@ namespace Erp.Platform.Branchs;
public class SeedDetailDto
{
public string EntityName { get; set; } = string.Empty; // Örn: "RegistrationType"
public string EntityName { get; set; } = string.Empty; // Örn: "RegistrationType"
public int InsertedCount { get; set; }
public List<string> InsertedItems { get; set; } = new(); // Eklenen kayıtların isimleri
public List<string> Warnings { get; set; } = new(); // Varsa uyarılar
public List<string> InsertedItems { get; set; } = new(); // Eklenen kayıtların isimleri
public List<string> Warnings { get; set; } = new(); // Varsa uyarılar
public List<string> Errors { get; set; } = new(); // Varsa hatalar
}

View file

@ -7,7 +7,7 @@ using Volo.Abp.Application.Dtos;
namespace Erp.Platform.DeveloperKit;
/// <summary>
/// Dynamic AppService tanımı DTO'su
/// Dynamic AppService tanımı DTO'su
/// </summary>
public class DynamicServiceDto : FullAuditedEntityDto<Guid>
{
@ -70,14 +70,14 @@ public class CompileResultDto
public List<string> Warnings { get; set; }
/// <summary>
/// Yüklenen assembly (sadece server-side kullanım için, JSON'a serialize edilmez)
/// Yüklenen assembly (sadece server-side kullanım için, JSON'a serialize edilmez)
/// </summary>
[System.Text.Json.Serialization.JsonIgnore]
public System.Reflection.Assembly LoadedAssembly { get; set; }
}
/// <summary>
/// Tek bir derleme hatası
/// Tek bir derleme hatası
/// </summary>
public class CompilationErrorDto
{
@ -105,7 +105,7 @@ public class TestCompileRequestDto
}
/// <summary>
/// AppService yayınlama DTO'su
/// AppService yayınlama DTO'su
/// </summary>
public class PublishAppServiceRequestDto
{
@ -130,7 +130,7 @@ public class PublishAppServiceRequestDto
}
/// <summary>
/// AppService yayınlama sonucu
/// AppService yayınlama sonucu
/// </summary>
public class PublishResultDto
{

View file

@ -8,7 +8,7 @@ public class CurrencyDto : FullAuditedEntityDto<Guid>
public string Code { get; set; } // TRY, USD, EUR
public string Symbol { get; set; } // ₺, $, etc.
public string Name { get; set; } // Turkish lira, US dollar, ...
public decimal Rate { get; set; } // TRY başına değer
public decimal Rate { get; set; } // TRY başına değer
public bool IsActive { get; set; }
public DateTime? LastUpdated { get; set; }
}

View file

@ -11,14 +11,14 @@ public class OvertimeDto : FullAuditedEntityDto<Guid>
public EmployeeDto Employee { get; set; } // Navigation'dan doldurulabilir
public DateTime Date { get; set; } // Mesai tarihi
public DateTime StartTime { get; set; } // Başlangıç zamanı
public DateTime EndTime { get; set; } // Bitiş zamanı
public decimal TotalHours { get; set; } // Toplam fazla mesai süresi
public DateTime StartTime { get; set; } // Başlangıç zamanı
public DateTime EndTime { get; set; } // Bitiş zamanı
public decimal TotalHours { get; set; } // Toplam fazla mesai süresi
public string Reason { get; set; } // Fazla mesai nedeni
public string Status { get; set; } // Durum: "Bekliyor", "Onaylandı", "Reddedildi"
public Guid? ApprovedById { get; set; } // Onaylayan kiÅŸi ID
public string Status { get; set; } // Durum: "Bekliyor", "Onaylandı", "Reddedildi"
public Guid? ApprovedById { get; set; } // Onaylayan kişi ID
public DateTime? ApprovedDate { get; set; } // Onay tarihi
public string RejectionReason { get; set; } // Reddetme nedeni
public decimal Rate { get; set; } // Fazla mesai oranı (ör. 1.5x)
public decimal? Amount { get; set; } // Hesaplanan ödeme tutarı
public decimal Rate { get; set; } // Fazla mesai oranır. 1.5x)
public decimal? Amount { get; set; } // Hesaplanan ödeme tutarı
}

View file

@ -11,12 +11,12 @@ public class ReservationDto : FullAuditedEntityDto<Guid>
public string ResourceName { get; set; }
public Guid? EmployeeId { get; set; }
public string EmployeeName { get; set; } // Optional: iliÅŸkili personel ismi
public string EmployeeName { get; set; } // Optional: ilişkili personel ismi
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string Purpose { get; set; } // Amaç
public int? Participants { get; set; } // Katılımcı Sayısı
public string Purpose { get; set; } // Amaç
public int? Participants { get; set; } // Katılımcı Sayısı
public string Notes { get; set; }
public string Status { get; set; } // pending | approved | rejected | completed
}

View file

@ -7,11 +7,11 @@ public class ShuttleRouteDto : FullAuditedEntityDto<Guid>
{
public Guid? TenantId { get; set; }
public string Type { get; set; } // Örn: "Servis", "Transfer", "Ring"
public string Name { get; set; } // Hat adı veya açıklaması
public string DepartureTime { get; set; } // Kalkış saati
public string ArrivalTime { get; set; } // Varış saati
public string Type { get; set; } // Örn: "Servis", "Transfer", "Ring"
public string Name { get; set; } // Hat adı veya açıklaması
public string DepartureTime { get; set; } // Kalkış saati
public string ArrivalTime { get; set; } // Varış saati
public int Capacity { get; set; } // Toplam kapasite
public int Available { get; set; } // Mevcut boş koltuk sayısı
public string[] Route { get; set; } // JSON veya metin formatında güzergah bilgisi
public int Available { get; set; } // Mevcut boş koltuk sayısı
public string[] Route { get; set; } // JSON veya metin formatında güzergah bilgisi
}

View file

@ -12,7 +12,7 @@ public class TrainingDto : FullAuditedEntityDto<Guid>
public string Instructor { get; set; }
public string Category { get; set; } // technical | soft-skills | management | compliance | other
public string Type { get; set; } // online | classroom | hybrid
public int Duration { get; set; } // saat veya gün olarak
public int Duration { get; set; } // saat veya gün olarak
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public int MaxParticipants { get; set; }
@ -21,7 +21,7 @@ public class TrainingDto : FullAuditedEntityDto<Guid>
public string Location { get; set; }
public string Thumbnail { get; set; }
// İlişkili veriler
public int CertificateCount { get; set; } // optional: ilişkili sertifika sayısı
// İlişkili veriler
public int CertificateCount { get; set; } // optional: ilişkili sertifika sayısı
}

View file

@ -1,14 +1,14 @@
namespace Erp.Platform.ListForms;
/// <summary> Ãzel bir ölçek sonu koleksiyonu bildirir. Yalnızca eksen tipi "sürekli" veya "logaritmik" ise geçerlidir.
/// <summary> Özel bir ölçek sonu koleksiyonu bildirir. Yalnızca eksen tipi "sürekli" veya "logaritmik" ise geçerlidir.
/// </summary>
public class BreakDto
{
/// <summary> startValue özelliği ile birlikte ölçek kırılmasını sınırlar.
/// <summary> startValue özelliği ile birlikte ölçek kırılmasını sınırlar.
/// </summary>
public int EndValue { get; set; }
/// <summary> endValue özelliği ile birlikte, ölçek kırılmasını sınırlar.
/// <summary> endValue özelliği ile birlikte, ölçek kırılmasını sınırlar.
/// </summary>
public int StartValue { get; set; }
}

View file

@ -3,7 +3,7 @@
public class BreakStyleDto
{
/// <summary> Rengi belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -12,7 +12,7 @@ public class BreakStyleDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "#ababab";
/// <summary> Ãlçek sonlarının çizgi stilini belirtir.
/// <summary> Ölçek sonlarının çizgi stilini belirtir.
/// </summary>
public string Line { get; set; } = "waved";
public int Width { get; set; } = 5;

View file

@ -1,17 +1,17 @@
namespace Erp.Platform.ListForms;
/// <summary> Uyarlanabilir düzen özelliklerini belirtir.
/// Şu sırada gizlenir: Title, Export menu icon, Legend, Axis titles, Axis labels
/// <summary> Uyarlanabilir düzen özelliklerini belirtir.
/// Şu sırada gizlenir: Title, Export menu icon, Legend, Axis titles, Axis labels
/// </summary>
public class ChartAdaptivelayoutDto
{
/// <summary> Düzenin uyum sağlamaya başladığı minimum kap yüksekliğini belirtir.
/// <summary> Düzenin uyum sağlamaya başladığı minimum kap yüksekliğini belirtir.
/// </summary>
public int Height { get; set; } = 80;
/// <summary> Düzenin uyum sağlamaya başladığı minimum kapsayıcı genişliğini belirtir.
/// <summary> Düzenin uyum sağlamaya başladığı minimum kapsayıcı genişliğini belirtir.
/// </summary>
public int Width { get; set; } = 80;
/// <summary> UI bileşeni düzeni uyarladığında nokta etiketlerinin tutulması gerekip gerekmediğini belirtir.
/// <summary> UI bileşeni düzeni uyarladığında nokta etiketlerinin tutulması gerekip gerekmediğini belirtir.
/// </summary>
public bool KeepLabels { get; set; } = true;
}

View file

@ -2,27 +2,27 @@
namespace Erp.Platform.ListForms;
/// <summary> Animasyon özelliklerini belirtir.
/// <summary> Animasyon özelliklerini belirtir.
/// </summary>
public class ChartAnimationDto
{
/// <summary> Animasyonun milisaniye cinsinden ne kadar süreceğini belirtir.
/// <summary> Animasyonun milisaniye cinsinden ne kadar süreceğini belirtir.
/// </summary>
[Range(100, 2500, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
public int Duration { get; set; } = 1000;
/// <summary> Animasyonun kolaylaştırma işlevini belirtir.
/// <summary> Animasyonun kolaylaştırma işlevini belirtir.
/// Accepted Values: 'easeOutCubic' | 'linear'
/// easeOutCubic: Animasyon hızlı başlar ve sona doğru kademeli olarak yavaşlar.
/// linear : Animasyon sabit bir hızda ilerler.
/// easeOutCubic: Animasyon hızlı başlar ve sona doğru kademeli olarak yavaşlar.
/// linear : Animasyon sabit bir hızda ilerler.
/// </summary>
public string Easing { get; set; } = "easeOutCubic";
/// <summary> UI bileÅŸeninde animasyonu etkinleÅŸtirir.
/// <summary> UI bileşeninde animasyonu etkinleştirir.
/// </summary>
public bool Enabled { get; set; } = true;
/// <summary> Animasyon devre dışı bırakılmadan önce UI bileşeninin kaç seri noktasına sahip olması gerektiğini belirtir.
/// Grafiğinizdeki seri noktalarının sayısı zamanla artarsa bunlara animasyon uygulamak, UI bileşen performansını etkileyebilir.
/// Bu durumda, nokta sayısı için bir sınır belirtmek üzere maxPointCountSupported özelliğini kullanın.
/// Bu sınır aşıldığında animasyon devre dışı bırakılır.
/// <summary> Animasyon devre dışı bırakılmadan önce UI bileşeninin kaç seri noktasına sahip olması gerektiğini belirtir.
/// Grafiğinizdeki seri noktalarının sayısı zamanla artarsa bunlara animasyon uygulamak, UI bileşen performansını etkileyebilir.
/// Bu durumda, nokta sayısı için bir sınır belirtmek üzere maxPointCountSupported özelliğini kullanın.
/// Bu sınır aşıldığında animasyon devre dışı bırakılır.
/// </summary>
public int MaxPointCountSupported { get; set; } = 300;
}

View file

@ -10,14 +10,14 @@ public class ChartAnnotationDto
Font = new ChartFontDto();
}
/// <summary> Ek açıklamayı belirli bir bağımsız değişkene göre konumlandırır.
/// <summary> Ek açıklamayı belirli bir bağımsız değişkene göre konumlandırır.
/// </summary>
public string Argument { get; set; }
/// <summary> Ek açıklamanın kenarlığının görünümünü yapılandırır.
/// <summary> Ek açıklamanın kenarlığının görünümünü yapılandırır.
/// </summary>
public ChartBorderDto Border { get; set; }
/// <summary> Ek açıklamayı dolduran rengi belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Ek açıklamayı dolduran rengi belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -26,64 +26,64 @@ public class ChartAnnotationDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "#ffffff";
/// <summary> Annotations'ın açıklamasını araç ipucunda belirtir.
/// <summary> Annotations'ın açıklamasını araç ipucunda belirtir.
/// </summary>
public string Description { get; set; }
public ChartFontDto Font { get; set; }
/// <summary> Ek açıklamanın yüksekliğini piksel cinsinden belirtir.
/// <summary> Ek açıklamanın yüksekliğini piksel cinsinden belirtir.
/// </summary>
public int Height { get; set; } = -1;
/// <summary> Açıklamada görüntülenecek görüntüyü yapılandırır. Yalnızca tür "görüntü" ise geçerlidir.
/// <summary> Açıklamada görüntülenecek görüntüyü yapılandırır. Yalnızca tür "görüntü" ise geçerlidir.
/// </summary>
public string Image { get; set; }
/// <summary> Ek açıklamanın adını belirtir.
/// <summary> Ek açıklamanın adını belirtir.
/// </summary>
public string Name { get; set; }
/// <summary> Ek açıklamayı yatay olarak taşır.
/// Bu özelliğe atanan sayı, piksel cinsinden kaymayı belirtir. Negatif bir sayı notu sola kaydırır ve pozitif bir sayı onu sağa kaydırır.
/// <summary> Ek açıklamayı yatay olarak taşır.
/// Bu özelliğe atanan sayı, piksel cinsinden kaymayı belirtir. Negatif bir sayı notu sola kaydırır ve pozitif bir sayı onu sağa kaydırır.
/// </summary>
public int OffsetX { get; set; } = -1;
/// <summary> Ek açıklamayı dikey olarak taşır.
/// Bu özelliğe atanan sayı, piksel cinsinden kaymayı belirtir. Negatif bir sayı ek açıklamayı yukarı kaydırır ve pozitif bir sayı onu aşağı kaydırır.
/// <summary> Ek açıklamayı dikey olarak taşır.
/// Bu özelliğe atanan sayı, piksel cinsinden kaymayı belirtir. Negatif bir sayı ek açıklamayı yukarı kaydırır ve pozitif bir sayı onu aşağı kaydırır.
/// </summary>
public int OffsetY { get; set; } = -1;
/// <summary> Ek açıklamanın metni veya görüntüsü (piksel olarak belirtilir) çevresinde boş bir alan oluşturmak için paddingTopBottom ile birlikte kullanılır.
/// <summary> Ek açıklamanın metni veya görüntüsü (piksel olarak belirtilir) çevresinde boş bir alan oluşturmak için paddingTopBottom ile birlikte kullanılır.
/// </summary>
public int PaddingLeftRight { get; set; } = 10;
/// <summary> paddingLeftRight ile birlikte, ek açıklama metninin veya görüntüsünün çevresinde boş bir alan oluşturur; piksel cinsinden belirtilir.
/// <summary> paddingLeftRight ile birlikte, ek açıklama metninin veya görüntüsünün çevresinde boş bir alan oluşturur; piksel cinsinden belirtilir.
/// </summary>
public int PaddingTopBottom { get; set; } = 10;
/// <summary> Ek açıklamayı bir seri noktasına tutturur. Nokta dizisinin adını kabul eder.
/// <summary> Ek açıklamayı bir seri noktasına tutturur. Nokta dizisinin adını kabul eder.
/// </summary>
public string Series { get; set; }
/// <summary>Ek açıklamanın metnini belirtir. Yalnızca tür "metin" ise geçerlidir.
/// <summary>Ek açıklamanın metnini belirtir. Yalnızca tür "metin" ise geçerlidir.
/// </summary>
public string Text { get; set; }
/// <summary> Ek açıklama araç ipucunun etkin olup olmadığını belirtir.
/// <summary> Ek açıklama araç ipucunun etkin olup olmadığını belirtir.
/// </summary>
public bool TooltipEnabled { get; set; } = true;
/// <summary> Ek açıklamanın metin mi, resim mi yoksa şablon mu görüntülediğini belirtir. Bu gerekli bir ayardır.
/// <summary> Ek açıklamanın metin mi, resim mi yoksa şablon mu görüntülediğini belirtir. Bu gerekli bir ayardır.
/// Accepted Values: 'text' | 'image' | 'custom'
/// Default Value: undefined
/// </summary>
public string Type { get; set; }
/// <summary> Ek açıklamayı belirtilen değer eksenindeki bir değere göre konumlandırır.
/// <summary> Ek açıklamayı belirtilen değer eksenindeki bir değere göre konumlandırır.
/// </summary>
public string Value { get; set; }
/// <summary> Ek açıklamanın genişliğini piksel cinsinden belirtir.
/// <summary> Ek açıklamanın genişliğini piksel cinsinden belirtir.
/// </summary>
public int Width { get; set; }
/// <summary> Ek açıklama metninin tek bir satıra sığmaması durumunda nasıl kaydırılacağını belirtir.
/// <summary> Ek açıklama metninin tek bir satıra sığmaması durumunda nasıl kaydırılacağını belirtir.
/// Accepted Values: 'normal' | 'breakWord' | 'none'
/// normal : Metin yalnızca izin verilen kesme noktalarında (örneğin, iki kelime arasındaki boşluk) kesiliyor.
/// normal : Metin yalnızca izin verilen kesme noktalarında (örneğin, iki kelime arasındaki boşluk) kesiliyor.
/// breakWord : Words can be broken if there are no available breakpoints in the line.
/// none : Sözcük kaydırma devre dışı.
/// none : Sözcük kaydırma devre dışı.
/// </summary>
public string WordWrap { get; set; } = "normal";
/// <summary> Ek açıklamanın merkezini belirli bir piksel koordinatına konumlandırmak için y ile birlikte kullanılır. (0, 0), UI bileşeninin sol üst köşesidir.
/// <summary> Ek açıklamanın merkezini belirli bir piksel koordinatına konumlandırmak için y ile birlikte kullanılır. (0, 0), UI bileşeninin sol üst köşesidir.
/// </summary>
public int X { get; set; }
/// <summary> Ek açıklamanın merkezini belirli bir piksel koordinatına konumlandırmak için x ile birlikte kullanılır. (0, 0), UI bileşeninin sol üst köşesidir.
/// <summary> Ek açıklamanın merkezini belirli bir piksel koordinatına konumlandırmak için x ile birlikte kullanılır. (0, 0), UI bileşeninin sol üst köşesidir.
/// </summary>
public int Y { get; set; }

View file

@ -8,80 +8,80 @@ public class ChartArgumentAxisDto
Label = new ChartArgumentAxisLabelDto();
}
/// <summary> ArgumentAxis için Label sınıfı
/// <summary> ArgumentAxis için Label sınıfı
/// https://js.devexpress.com/Documentation/ApiReference/UI_Components/dxChart/Configuration/argumentAxis/label/
/// </summary>
public class ChartArgumentAxisLabelDto
{
public ChartArgumentAxisLabelDto() { }
/// <summary> Eksen etiketlerini döndürmenizi veya kademelendirmenizi sağlar. Yalnızca yatay eksen için geçerlidir.
/// <summary> Eksen etiketlerini döndürmenizi veya kademelendirmenizi sağlar. Yalnızca yatay eksen için geçerlidir.
/// Accepted Values: 'rotate' | 'stagger' | 'standard'
/// rotate : Eksen etiketlerini, rotateAngle özelliği tarafından belirtilen açı boyunca döndürür.
/// stagger: Eksen etiketlerini iki sıra halinde düzenler. Satırlar arasında boş bir alan, staggeringSpacing özelliği tarafından belirtilir.
/// standard:Eksen etiketlerinin varsayılan yerleşimini değiştirmez.
/// rotate : Eksen etiketlerini, rotateAngle özelliği tarafından belirtilen açı boyunca döndürür.
/// stagger: Eksen etiketlerini iki sıra halinde düzenler. Satırlar arasında boş bir alan, staggeringSpacing özelliği tarafından belirtilir.
/// standard:Eksen etiketlerinin varsayılan yerleşimini değiştirmez.
/// </summary>
public string DisplayMode { get; set; } = "standard";
/// <summary> Eksen etiketlerinin dönüş açısını belirtir. Yalnızca displayMode veya overppingBehavior "rotate" ise geçerlidir.
/// <summary> Eksen etiketlerinin dönüş açısını belirtir. Yalnızca displayMode veya overppingBehavior "rotate" ise geçerlidir.
/// </summary>
public int RotationAngle { get; set; } = 90;
/// <summary> Tümünü görüntülemek için yeterli alan olmadığında eksen etiketlerinin nasıl düzenleneceğine karar verir.
/// <summary> Tümünü görüntülemek için yeterli alan olmadığında eksen etiketlerinin nasıl düzenleneceğine karar verir.
/// Accepted Values: 'rotate' | 'stagger' | 'none' | 'hide'
/// </summary>
public string OverlappingBehavior { get; set; } = "hide";
}
/// <summary> Bağımsız değişkenleri belirtilen bir veri türüne dönüştürür.
/// <summary> Bağımsız değişkenleri belirtilen bir veri türüne dönüştürür.
/// Accepted Values: 'datetime' | 'numeric' | 'string'
/// Default Value: undefined
/// Veri kaynağınız sayıları veya tarihleri â€â€dizeler olarak saklıyorsa, bu özelliÄŸi kullanarak uygun veri türünü belirtin. Tarihlerin geçerli bir biçimi olduÄŸundan emin olun.
/// Veri kaynağınız sayıları veya tarihleri â€â€dizeler olarak saklıyorsa, bu özelliği kullanarak uygun veri türünü belirtin. Tarihlerin geçerli bir biçimi olduğundan emin olun.
/// </summary>
public string ArgumentType { get; set; }
/// <summary> Toplama aralıklarının uzunluğunu eksen birimleri cinsinden belirtir. Yalnızca sürekli ve logaritmik tipteki eksenler için geçerlidir.
/// <summary> Toplama aralıklarının uzunluğunu eksen birimleri cinsinden belirtir. Yalnızca sürekli ve logaritmik tipteki eksenler için geçerlidir.
/// Accepted Values: 'day' | 'hour' | 'millisecond' | 'minute' | 'month' | 'quarter' | 'second' | 'week' | 'year'
/// Default Value: undefined
/// Veri toplama için bağımsız değişken ekseni aralıklara bölünür. Aynı aralığa düşen seri noktaları bir araya toplanır. aggregationInterval özelliği, her aralığın uzunluğunu tanımlar.
/// nesne olarak da implement edilebilir, ÅŸimdilik yapılmadı. ÃrneÄŸin 'day' seçildiÄŸinde gün sayısı 5 olarak verilebilir
/// Veri toplama için bağımsız değişken ekseni aralıklara bölünür. Aynı aralığa düşen seri noktaları bir araya toplanır. aggregationInterval özelliği, her aralığın uzunluğunu tanımlar.
/// nesne olarak da implement edilebilir, şimdilik yapılmadı. Örneğin 'day' seçildiğinde gün sayısı 5 olarak verilebilir
/// </summary>
public string AggregationInterval { get; set; }
public ChartAxisGridDto Grid { get; set; }
/// <summary> Kullanıcı bir eksen etiketini işaret ettiğinde vurgulanacak grafik öğelerini belirtir.
/// <summary> Kullanıcı bir eksen etiketini işaret ettiğinde vurgulanacak grafik öğelerini belirtir.
/// Accepted Values: 'allArgumentPoints' | 'none'
/// Default Value: 'none'
/// none : Eksen etiketleri, onlara işaret etmeye yanıt vermez.
/// allArgumentPoints : Bir kullanıcı bağımsız değişken ekseninde bir etiketi işaret ettiğinde, karşılık gelen bağımsız değişkenin seri noktaları vurgulanır.
/// none : Eksen etiketleri, onlara işaret etmeye yanıt vermez.
/// allArgumentPoints : Bir kullanıcı bağımsız değişken ekseninde bir etiketi işaret ettiğinde, karşılık gelen bağımsız değişkenin seri noktaları vurgulanır.
/// </summary>
public string HoverMode { get; set; } = "none";
public ChartArgumentAxisLabelDto Label { get; set; }
/// <summary> Bağımsız değişken ekseninin yerini değiştirir.
/// <summary> Bağımsız değişken ekseninin yerini değiştirir.
/// Accepted Values: 'bottom' | 'left' | 'right' | 'top'
/// Default Value: 'bottom'
/// Döndürülen (Rotated) özelliğin değerine bağlı olarak, konum (Position) farklı değerler kabul eder.
/// Döndürülen (Rotated) özelliğin değerine bağlı olarak, konum (Position) farklı değerler kabul eder.
/// If (Rotated = False) => Position = "bottom" or "top"
/// If (Rotated = True) => Position = "left" or "right"
/// </summary>
public string Position { get; set; } = "bottom";
/// <summary> Eksen başlığını yapılandırır.
/// Şimdilik sadece string olaran implemen edildi, ihtiyaç olması durumunda ChartTitleDto benzeri bir nesne ile değiştirilebilir
/// <summary> Eksen başlığını yapılandırır.
/// Şimdilik sadece string olaran implemen edildi, ihtiyaç olması durumunda ChartTitleDto benzeri bir nesne ile değiştirilebilir
/// </summary>
public string Title { get; set; }
/// <summary> Eksen çizgisini görünür yapar.
/// <summary> Eksen çizgisini görünür yapar.
/// </summary>
public bool Visible { get; set; } = true;
/// <summary> Eksen çizgisinin genişliğini piksel cinsinden belirtir.
/// <summary> Eksen çizgisinin genişliğini piksel cinsinden belirtir.
/// </summary>
public int Width { get; set; } = 1;
/// <summary> Eksen üzerinde yalnızca iş günlerini bırakır: çalışma haftası günleri artı tek iş günleri eksi tatiller. Yalnızca eksenin argümanTürü "tarihsaat" ise geçerlidir.
/// <summary> Eksen üzerinde yalnızca iş günlerini bırakır: çalışma haftası günleri artı tek iş günleri eksi tatiller. Yalnızca eksenin argümanTürü "tarihsaat" ise geçerlidir.
/// </summary>
public bool WorkdaysOnly { get; set; }
// ihtiyaç olunca açılacak proptert ler
// ihtiyaç olunca açılacak proptert ler
// aggregateByCategory
// aggregatedPointsPosition
// aggregationGroupWidth
// allowDecimals
// axisDivisionFactor // İki komşu ana çizgi arasındaki minimum mesafeyi piksel cinsinden belirtir. Yalnızca "sürekli" ve "logaritmik" tiplerin eksenleri için geçerlidir.
// axisDivisionFactor // İki komşu ana çizgi arasındaki minimum mesafeyi piksel cinsinden belirtir. Yalnızca "sürekli" ve "logaritmik" tiplerin eksenleri için geçerlidir.
// breaks[]
// breakStyle
// categories

View file

@ -2,8 +2,8 @@
public class ChartAxisGridDto
{
/// <summary> Grid çizgilerinin rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Grid çizgilerinin rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -12,16 +12,16 @@ public class ChartAxisGridDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "#d3d3d3";
/// <summary> Grid çizgilerini görünür yapar.
/// <summary> Grid çizgilerini görünür yapar.
/// </summary>
public bool Visible { get; set; }
/// <summary> Grid çizgilerinin genişliğini piksel cinsinden belirtir.
/// <summary> Grid çizgilerinin genişliğini piksel cinsinden belirtir.
/// </summary>
public int Width { get; set; } = 1;
///// <summary> Grid çizgilerinin saydamlığını belirtir.
///// 0 - 1 aralığındadır
///// <summary> Grid çizgilerinin saydamlığını belirtir.
///// 0 - 1 aralığındadır
///// </summary>
//public double Opacity { get; set; } = 1;
}

View file

@ -4,8 +4,8 @@ namespace Erp.Platform.ListForms;
public class ChartBorderDto
{
/// <summary>Legend in kenarlığını renklendirir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary>Legend in kenarlığını renklendirir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -14,27 +14,27 @@ public class ChartBorderDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "#d3d3d3";
/// <summary> Legend in tüm köşelerini yuvarlatır.
/// <summary> Legend in tüm köşelerini yuvarlatır.
/// </summary>
[Range(0, 100, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
public int CornerRadius { get; set; } = 0;
/// <summary> Açıklamanın kenarlığı için bir tire stili ayarlar
/// <summary> Açıklamanın kenarlığıin bir tire stili ayarlar
/// Accepted Values: 'dash' | 'dot' | 'longDash' | 'solid'
/// Default Value: 'solid'
/// solid : Kenarlık düz, sürekli bir çizgidir
/// longDash : Kenarlık, uzun çizgiler kullanılarak görüntülenir
/// dash : Kenarlık, tireler kullanılarak görüntülenir
/// dot : Kenarlık noktalar kullanılarak görüntülenir
/// Any combination of 'longDash', 'dash' and 'dot : Kenarlık, belirtilen kombinasyon tekrarlanarak görüntülenir. ÃrneÄŸin, 'dashdotdash'.
/// solid : Kenarlık düz, sürekli bir çizgidir
/// longDash : Kenarlık, uzun çizgiler kullanılarak görüntülenir
/// dash : Kenarlık, tireler kullanılarak görüntülenir
/// dot : Kenarlık noktalar kullanılarak görüntülenir
/// Any combination of 'longDash', 'dash' and 'dot : Kenarlık, belirtilen kombinasyon tekrarlanarak görüntülenir. Örneğin, 'dashdotdash'.
/// </summary>
public string DashStyle { get; set; } = "solid";
///// <summary> Açıklamanın kenarlığının saydamlığını belirtir
///// Bu özellik, 0 ile 1 arasında bir değer kabul eder; burada 0, kenarlığı tamamen saydam, 1 ise opak yapar.
///// <summary> Açıklamanın kenarlığının saydamlığını belirtir
///// Bu özellik, 0 ile 1 arasında bir değer kabul eder; burada 0, kenarlığı tamamen saydam, 1 ise opak yapar.
///// </summary>
//[Range(0.1, 1, ErrorMessage = "Value for {0} must be between {1} and {2}.")]
//public double Opacity { get; set; } = 0.5;
public bool Visible { get; set; }
/// <summary> Açıklamanın kenarlığının genişliğini piksel cinsinden belirtir
/// <summary> Açıklamanın kenarlığının genişliğini piksel cinsinden belirtir
/// </summary>
public int Width { get; set; } = 1;
}

View file

@ -8,14 +8,14 @@ public class ChartCommonAnnotationDto
Font = new ChartFontDto();
}
/// <summary> Ek açıklamayı belirli bir bağımsız değişkene göre konumlandırır.
/// <summary> Ek açıklamayı belirli bir bağımsız değişkene göre konumlandırır.
/// </summary>
public string Argument { get; set; }
/// <summary> Ek açıklamanın kenarlığının görünümünü yapılandırır.
/// <summary> Ek açıklamanın kenarlığının görünümünü yapılandırır.
/// </summary>
public ChartBorderDto Border { get; set; }
/// <summary> Ek açıklamayı dolduran rengi belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Ek açıklamayı dolduran rengi belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -24,61 +24,61 @@ public class ChartCommonAnnotationDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "#ffffff";
/// <summary> Annotations'ın açıklamasını araç ipucunda belirtir.
/// <summary> Annotations'ın açıklamasını araç ipucunda belirtir.
/// </summary>
public string Description { get; set; }
public ChartFontDto Font { get; set; }
/// <summary> Ek açıklamanın yüksekliğini piksel cinsinden belirtir.
/// <summary> Ek açıklamanın yüksekliğini piksel cinsinden belirtir.
/// </summary>
public int Height { get; set; } = -1;
/// <summary> Açıklamada görüntülenecek görüntüyü yapılandırır. Yalnızca tür "görüntü" ise geçerlidir.
/// <summary> Açıklamada görüntülenecek görüntüyü yapılandırır. Yalnızca tür "görüntü" ise geçerlidir.
/// </summary>
public string Image { get; set; }
/// <summary> Ek açıklamayı yatay olarak taşır.
/// Bu özelliğe atanan sayı, piksel cinsinden kaymayı belirtir. Negatif bir sayı notu sola kaydırır ve pozitif bir sayı onu sağa kaydırır.
/// <summary> Ek açıklamayı yatay olarak taşır.
/// Bu özelliğe atanan sayı, piksel cinsinden kaymayı belirtir. Negatif bir sayı notu sola kaydırır ve pozitif bir sayı onu sağa kaydırır.
/// </summary>
public int OffsetX { get; set; } = -1;
/// <summary> Ek açıklamayı dikey olarak taşır.
/// Bu özelliğe atanan sayı, piksel cinsinden kaymayı belirtir. Negatif bir sayı ek açıklamayı yukarı kaydırır ve pozitif bir sayı onu aşağı kaydırır.
/// <summary> Ek açıklamayı dikey olarak taşır.
/// Bu özelliğe atanan sayı, piksel cinsinden kaymayı belirtir. Negatif bir sayı ek açıklamayı yukarı kaydırır ve pozitif bir sayı onu aşağı kaydırır.
/// </summary>
public int OffsetY { get; set; } = -1;
/// <summary> Ek açıklamanın metni veya görüntüsü (piksel olarak belirtilir) çevresinde boş bir alan oluşturmak için paddingTopBottom ile birlikte kullanılır.
/// <summary> Ek açıklamanın metni veya görüntüsü (piksel olarak belirtilir) çevresinde boş bir alan oluşturmak için paddingTopBottom ile birlikte kullanılır.
/// </summary>
public int PaddingLeftRight { get; set; } = 10;
/// <summary> paddingLeftRight ile birlikte, ek açıklama metninin veya görüntüsünün çevresinde boş bir alan oluşturur; piksel cinsinden belirtilir.
/// <summary> paddingLeftRight ile birlikte, ek açıklama metninin veya görüntüsünün çevresinde boş bir alan oluşturur; piksel cinsinden belirtilir.
/// </summary>
public int PaddingTopBottom { get; set; } = 10;
/// <summary> Ek açıklamayı bir seri noktasına tutturur. Nokta dizisinin adını kabul eder.
/// <summary> Ek açıklamayı bir seri noktasına tutturur. Nokta dizisinin adını kabul eder.
/// </summary>
public string Series { get; set; }
/// <summary>Ek açıklamanın metnini belirtir. Yalnızca tür "metin" ise geçerlidir.
/// <summary>Ek açıklamanın metnini belirtir. Yalnızca tür "metin" ise geçerlidir.
/// </summary>
public string Text { get; set; }
/// <summary> Ek açıklama araç ipucunun etkin olup olmadığını belirtir.
/// <summary> Ek açıklama araç ipucunun etkin olup olmadığını belirtir.
/// </summary>
public bool TooltipEnabled { get; set; } = true;
/// <summary> Ek açıklamanın metin mi, resim mi yoksa şablon mu görüntülediğini belirtir. Bu gerekli bir ayardır.
/// <summary> Ek açıklamanın metin mi, resim mi yoksa şablon mu görüntülediğini belirtir. Bu gerekli bir ayardır.
/// Accepted Values: 'text' | 'image' | 'custom'
/// Default Value: undefined
/// </summary>
public string Type { get; set; }
/// <summary> Ek açıklamayı belirtilen değer eksenindeki bir değere göre konumlandırır.
/// <summary> Ek açıklamayı belirtilen değer eksenindeki bir değere göre konumlandırır.
/// </summary>
public string Value { get; set; }
/// <summary> Ek açıklamanın genişliğini piksel cinsinden belirtir.
/// <summary> Ek açıklamanın genişliğini piksel cinsinden belirtir.
/// </summary>
public int Width { get; set; }
/// <summary> Ek açıklama metninin tek bir satıra sığmaması durumunda nasıl kaydırılacağını belirtir.
/// <summary> Ek açıklama metninin tek bir satıra sığmaması durumunda nasıl kaydırılacağını belirtir.
/// Accepted Values: 'normal' | 'breakWord' | 'none'
/// normal : Metin yalnızca izin verilen kesme noktalarında (örneğin, iki kelime arasındaki boşluk) kesiliyor.
/// normal : Metin yalnızca izin verilen kesme noktalarında (örneğin, iki kelime arasındaki boşluk) kesiliyor.
/// breakWord : Words can be broken if there are no available breakpoints in the line.
/// none : Sözcük kaydırma devre dışı.
/// none : Sözcük kaydırma devre dışı.
/// </summary>
public string WordWrap { get; set; } = "normal";
/// <summary> Ek açıklamanın merkezini belirli bir piksel koordinatına konumlandırmak için y ile birlikte kullanılır. (0, 0), UI bileşeninin sol üst köşesidir.
/// <summary> Ek açıklamanın merkezini belirli bir piksel koordinatına konumlandırmak için y ile birlikte kullanılır. (0, 0), UI bileşeninin sol üst köşesidir.
/// </summary>
public int X { get; set; }
/// <summary> Ek açıklamanın merkezini belirli bir piksel koordinatına konumlandırmak için x ile birlikte kullanılır. (0, 0), UI bileşeninin sol üst köşesidir.
/// <summary> Ek açıklamanın merkezini belirli bir piksel koordinatına konumlandırmak için x ile birlikte kullanılır. (0, 0), UI bileşeninin sol üst köşesidir.
/// </summary>
public int Y { get; set; }

View file

@ -11,18 +11,18 @@ public class ChartCommonAxisDto
}
public ChartAxisGridDto Grid { get; set; }
/// <summary> Ana eksen işaretlerinin görünümünü yapılandırır.
/// Şimdilik sadece string olaran implemen edildi, ihtiyaç olması durumunda ChartTitleDto benzeri bir nesne ile değiştirilebilir
/// <summary> Ana eksen işaretlerinin görünümünü yapılandırır.
/// Şimdilik sadece string olaran implemen edildi, ihtiyaç olması durumunda ChartTitleDto benzeri bir nesne ile değiştirilebilir
/// </summary>
public string Title { get; set; }
/// <summary> Eksen çizgisini görünür yapar.
/// <summary> Eksen çizgisini görünür yapar.
/// </summary>
public bool Visible { get; set; } = true;
/// <summary> Eksen çizgisinin genişliğini piksel cinsinden belirtir.
/// <summary> Eksen çizgisinin genişliğini piksel cinsinden belirtir.
/// </summary>
public int Width { get; set; } = 1;
// ihtiyaç olunca açılacak proptert ler
// ihtiyaç olunca açılacak proptert ler
// aggregatedPointsPosition
// allowDecimals

View file

@ -2,40 +2,40 @@
public class ChartCommonDto
{
/// <summary> Bağımsız değişken ekseni yakınlaştırılırken veya kaydırılırken değer ekseninin visualRange değerinin ayarlanıp ayarlanmadığını belirtir.
/// <summary> Bağımsız değişken ekseni yakınlaştırılırken veya kaydırılırken değer ekseninin visualRange değerinin ayarlanıp ayarlanmadığını belirtir.
/// </summary>
public bool AdjustOnZoom { get; set; } = true;
/// <summary> Grafik kabının arka planını renklendirir.
/// Not: HiddenInput olarak etiketlenmesinin sebebi renk seçimi için farklı bir editör kullanılmasından dolayıdır
/// <summary> Grafik kabının arka planını renklendirir.
/// Not: HiddenInput olarak etiketlenmesinin sebebi renk seçimi için farklı bir editör kullanılmasından dolayıdır
/// Default Value: '#FFFFFF'
/// </summary>
public string ContainerBackgroundColor { get; set; } = "#FFFFFF";
/// <summary> Serileri ve öğelerini renklendirmek için kullanılacak paleti ayarlar.
/// <summary> Serileri ve öğelerini renklendirmek için kullanılacak paleti ayarlar.
/// Accepted Values: 'Bright' | 'Harmony Light' | 'Ocean' | 'Pastel' | 'Soft' | 'Soft Pastel' | 'Vintage' | 'Violet' | 'Carmine' | 'Dark Moon' | 'Dark Violet' | 'Green Mist' | 'Soft Blue' | 'Material' | 'Office'
/// Default Value: 'Material'
/// </summary>
public string Palette { get; set; } = "Material";
/// <summary> Sayıları seri sayısından (Chart UI bileşeninde) veya bir serideki noktalardan (PieChart UI bileşeninde) az olduğunda, paletteki renklerle ne yapılacağını belirtir.
/// <summary> Sayıları seri sayısından (Chart UI bileşeninde) veya bir serideki noktalardan (PieChart UI bileşeninde) az olduğunda, paletteki renklerle ne yapılacağını belirtir.
/// Accepted Values: 'alternate' | 'blend' | 'extrapolate'
/// Default Value: 'blend'
/// blend : İki komşu rengin bir karışımını oluşturur ve paletteki bu renklerin arasına ekler.
/// alternate : Sırayla normal, açık ve koyu tonlarını değiştirerek tüm palet renklerini tekrarlar.
/// extrapolate : Gölgelerini yavaş yavaş karanlıktan aydınlığa değiştirerek tüm palet renklerini tekrarlar.
/// blend : İki komşu rengin bir karışımını oluşturur ve paletteki bu renklerin arasına ekler.
/// alternate : Sırayla normal, açık ve koyu tonlarını değiştirerek tüm palet renklerini tekrarlar.
/// extrapolate : Gölgelerini yavaş yavaş karanlıktan aydınlığa değiştirerek tüm palet renklerini tekrarlar.
/// </summary>
public string PaletteExtensionMode { get; set; } = "blend";
/// <summary> PanesDto dolu ise hangisinin default olduÄŸunu belirleyen isimdir. PanesDto[0].name ismi
/// <summary> PanesDto dolu ise hangisinin default olduğunu belirleyen isimdir. PanesDto[0].name ismi
/// </summary>
public string DefaultPane { get; set; }
/// <summary> UI bileşeninin kullanıcı etkileşimine yanıt verip vermediğini belirtir.
/// <summary> UI bileşeninin kullanıcı etkileşimine yanıt verip vermediğini belirtir.
/// </summary>
public bool Disabled { get; set; }
/// <summary> UI bileşeninin kullandığı temanın adını ayarlar.
/// <summary> UI bileşeninin kullandığı temanın adını ayarlar.
/// Accepted Values: 'generic.dark' | 'generic.light' | 'generic.contrast' | 'generic.carmine' | 'generic.darkmoon' | 'generic.darkviolet' | 'generic.greenmist' | 'generic.softblue' | 'material.blue.light' | 'material.lime.light' | 'material.orange.light' | 'material.purple.light' | 'material.teal.light'
/// </summary>
public string Theme { get; set; } = "generic.light";
// diÄŸer eklenebilecek property ler
// diğer eklenebilecek property ler
// autoHidePointMarkers
// barGroupPadding

View file

@ -1,11 +1,11 @@
namespace Erp.Platform.ListForms;
/// <summary> Bir grafikteki tüm bölmeler için ortak ayarları tanımlar.
/// <summary> Bir grafikteki tüm bölmeler için ortak ayarları tanımlar.
/// </summary>
public class ChartCommonPaneDto
{
/// <summary> Bölmenin arka planının rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Bölmenin arka planının rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors

View file

@ -1,31 +1,31 @@
namespace Erp.Platform.ListForms;
/// <summary> Grafikteki tüm seriler için ortak olan ayarları belirtir.
/// <summary> Grafikteki tüm seriler için ortak olan ayarları belirtir.
/// </summary>
public class ChartCommonSeriesSettingsDto
{
/// <summary> Hangi veri kaynağı alanının seri noktaları için bağımsız değişkenler sağladığını belirtir
/// <summary> Hangi veri kaynağı alanının seri noktaları için bağımsız değişkenler sağladığını belirtir
/// Default Value: 'arg'
/// Temaler ile kullanılamaz!
/// Temaler ile kullanılamaz!
/// </summary>
public string ArgumentField { get; set; } = "arg";
/// <summary> Seriyi bir deÄŸer eksenine baÄŸlar.
/// <summary> Seriyi bir değer eksenine bağlar.
/// </summary>
public string Axis { get; set; }
/// <summary> Aynı bağımsız değişkene sahip çubukların üst üste binmesi için çubuk serilerini gruplandırmanıza izin verir.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, RangeBarSeries
/// <summary> Aynı bağımsız değişkene sahip çubukların üst üste binmesi için çubuk serilerini gruplandırmanıza izin verir.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, RangeBarSeries
/// </summary>
public string BarOverlapGroup { get; set; }
/// <summary> Göreli birimleri kullanarak bir serideki tüm çubukların dolgusunu ve dolayısıyla genişliğini kontrol eder. barWidth özelliği ayarlanmışsa yoksayılır.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// <summary> Göreli birimleri kullanarak bir serideki tüm çubukların dolgusunu ve dolayısıyla genişliğini kontrol eder. barWidth özelliği ayarlanmışsa yoksayılır.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// </summary>
public int BarPadding { get; set; }
/// <summary> Bir dizideki tüm çubuklar için piksel cinsinden ölçülen sabit bir genişlik belirtir. barPadding özelliğine göre önceliklidir.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// <summary> Bir dizideki tüm çubuklar için piksel cinsinden ölçülen sabit bir genişlik belirtir. barPadding özelliğine göre önceliklidir.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// </summary>
public int BarWidth { get; set; }
/// <summary> Serinin rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -34,67 +34,67 @@ public class ChartCommonSeriesSettingsDto
/// Paint server address
/// </summary>
public string Color { get; set; }
/// <summary> Çubukların yuvarlak görünmesini sağlar. Yalnızca çubuk benzeri seriler için geçerlidir.
/// <summary> Çubukların yuvarlak görünmesini sağlar. Yalnızca çubuk benzeri seriler için geçerlidir.
/// Default Value: 0
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// </summary>
public int CornerRadius { get; set; } = 0;
/// <summary> Açıklamanın kenarlığı için bir tire stili ayarlar
/// <summary> Açıklamanın kenarlığıin bir tire stili ayarlar
/// Accepted Values: 'dash' | 'dot' | 'longDash' | 'solid'
/// Default Value: 'solid'
/// solid : Kenarlık düz, sürekli bir çizgidir
/// longDash : Kenarlık, uzun çizgiler kullanılarak görüntülenir
/// dash : Kenarlık, tireler kullanılarak görüntülenir
/// dot : Kenarlık noktalar kullanılarak görüntülenir
/// Any combination of 'longDash', 'dash' and 'dot : Kenarlık, belirtilen kombinasyon tekrarlanarak görüntülenir. ÃrneÄŸin, 'dashdotdash'.
/// solid : Kenarlık düz, sürekli bir çizgidir
/// longDash : Kenarlık, uzun çizgiler kullanılarak görüntülenir
/// dash : Kenarlık, tireler kullanılarak görüntülenir
/// dot : Kenarlık noktalar kullanılarak görüntülenir
/// Any combination of 'longDash', 'dash' and 'dot : Kenarlık, belirtilen kombinasyon tekrarlanarak görüntülenir. Örneğin, 'dashdotdash'.
/// </summary>
public string DashStyle { get; set; } = "solid";
/// <summary> Serinin boş veri noktalarını göz ardı edip etmeyeceğini belirtir.
/// Boş değere sahip veri noktaları, gerçek seri noktaları üretmez. Bu nedenle eksik olması gereken yerlerde gereksiz boşluklarla seriler çizilebilir. Bu boşlukları kaldırmak için, ignoreEmptyPoints özelliğini true olarak ayarlayın.
/// <summary> Serinin boş veri noktalarını göz ardı edip etmeyeceğini belirtir.
/// Boş değere sahip veri noktaları, gerçek seri noktaları üretmez. Bu nedenle eksik olması gereken yerlerde gereksiz boşluklarla seriler çizilebilir. Bu boşlukları kaldırmak için, ignoreEmptyPoints özelliğini true olarak ayarlayın.
/// </summary>
public bool IgnoreEmptyPoints { get; set; } = false;
/// <summary> Serinin hangi bölmeye ait olması gerektiğini belirtir. Bölmenin adını kabul eder.
/// Bilgilendirme: Pane dolu ise chart ın PanesDto Property si aynı isimde bir elemanı mutlaka içermelidir
/// <summary> Serinin hangi bölmeye ait olması gerektiğini belirtir. Bölmenin adını kabul eder.
/// Bilgilendirme: Pane dolu ise chart ın PanesDto Property si aynı isimde bir elemanı mutlaka içermelidir
/// </summary>
public string Pane { get; set; }
/// <summary> rangeValue2Field özelliğiyle birleştiğinde, hangi veri kaynağı alanının aralık benzeri bir seri için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// <summary> rangeValue2Field özelliğiyle birleştiğinde, hangi veri kaynağı alanının aralık benzeri bir seri için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// RangeBarSeries, RangeAreaSeries
/// </summary>
public string RangeValue1Field { get; set; } = "val1";
/// <summary> rangeValue1Field özelliğiyle birleştiğinde, hangi veri kaynağı alanının aralık benzeri bir seri için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// <summary> rangeValue1Field özelliğiyle birleştiğinde, hangi veri kaynağı alanının aralık benzeri bir seri için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// RangeBarSeries, RangeAreaSeries
/// </summary>
public string RangeValue2Field { get; set; } = "val2";
/// <summary> Kullanıcı bir dizi seçtiğinde vurgulanacak dizi öğelerini belirtir.
/// <summary> Kullanıcı bir dizi seçtiğinde vurgulanacak dizi öğelerini belirtir.
/// Accepted Values: 'allArgumentPoints' | 'allSeriesPoints' | 'excludePoints' | 'includePoints' | 'none' | 'onlyPoint'
/// Seri tipine bağlı olarak bu özellik farklı değerler kabul eder. Bilgi için SeriTipleri bölümünü (https://js.devexpress.com/Documentation/ApiReference/UI_Components/dxChart/Series_Types/) ziyaret edin, kullanılan seri tipini seçin ve onun selectionMode özellik açıklamasına bakın
/// Seri tipine bağlı olarak bu özellik farklı değerler kabul eder. Bilgi için SeriTipleri bölümünü (https://js.devexpress.com/Documentation/ApiReference/UI_Components/dxChart/Series_Types/) ziyaret edin, kullanılan seri tipini seçin ve onun selectionMode özellik açıklamasına bakın
/// </summary>
public string SelectionMode { get; set; } = "none";
/// <summary> Dizinin lejantta gösterilip gösterilmeyeceğini belirtir.
/// <summary> Dizinin lejantta gösterilip gösterilmeyeceğini belirtir.
/// </summary>
public bool ShowInLegend { get; set; } = true;
/// <summary> Seri türünü ayarlar
/// <summary> Seri türünü ayarlar
/// Default Value: 'line'
/// Accepted Values: 'area' | 'bar' | 'bubble' | 'candlestick' | 'fullstackedarea' | 'fullstackedbar' | 'fullstackedline' | 'fullstackedspline' | 'fullstackedsplinearea' | 'line' | 'rangearea' | 'rangebar' | 'scatter' | 'spline' | 'splinearea' | 'stackedarea' | 'stackedbar' | 'stackedline' | 'stackedspline' | 'stackedsplinearea' | 'steparea' | 'stepline' | 'stock'
/// </summary>
public string Type { get; set; }
/// <summary> Hangi veri kaynağı alanının seri noktaları için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// <summary> Hangi veri kaynağı alanının seri noktaları için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// LineSeries, StackedLineSeries,FullStackedLineSeries,StackedSplineSeries,FullStackedSplineSeries,
/// SplineSeries,StepLineSeries,AreaSeries,StackedAreaSeries,Sta,kedSplineAreaSeries,FullStackedAreaSeries,
/// FullStackedSplineAreaSeries,SplineAreaSeries,StepAreaSeries,ScatterSeries,BarSeries,StackedBarSeries,
/// FullStackedBarSeries,BubbleSeries,
/// </summary>
public string ValueField { get; set; }
/// <summary> Serinin görünür olup olmayacağını belirtir.
/// <summary> Serinin görünür olup olmayacağını belirtir.
/// </summary>
public bool Visible { get; set; } = true;
/// <summary> Seri çizgisinin genişliğini piksel cinsinden belirtir. Yalnızca çizgi benzeri seriler için geçerlidir.
/// <summary> Seri çizgisinin genişliğini piksel cinsinden belirtir. Yalnızca çizgi benzeri seriler için geçerlidir.
/// Default Value: 2
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// LineSeries, StackedLineSeries, FullStackedLineSeries, StackedSplineSeries, FullStackedSplineSeries, SplineSeries, StepLineSeries, CandleStickSeries, StockSeries
/// </summary>
public int Width { get; set; } = 2;
@ -125,9 +125,9 @@ public class ChartCommonSeriesSettingsDto
// point {}
// rangearea {}
// rangebar {}
// reduction {} // financial seriler için indirgeme özelliklerini belirtir.
// reduction {} // financial seriler için indirgeme özelliklerini belirtir.
// scatter {}
// slectionStyle // Bir kullanıcı seçtiğinde seri tarafından benimsenen görünümü yapılandırır.
// slectionStyle // Bir kullanıcı seçtiğinde seri tarafından benimsenen görünümü yapılandırır.
// sizeField
// spline {}
// splinearea {}

View file

@ -9,8 +9,8 @@ public class ChartCrosshairDto
VerticalLine = new ChartCrosshairLineDto();
}
/// <summary> Artı işareti çizgilerinin rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Artı işareti çizgilerinin rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -19,34 +19,34 @@ public class ChartCrosshairDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "#f05b41";
/// <summary> Artı işareti çizgilerinin kısa çizgi stilini belirtir.
/// <summary> Artı işareti çizgilerinin kısa çizgi stilini belirtir.
/// Accepted Values: 'dash' | 'dot' | 'longDash' | 'solid'
/// Default Value: 'solid'
/// solid : Kenarlık düz, sürekli bir çizgidir
/// longDash : Kenarlık, uzun çizgiler kullanılarak görüntülenir
/// dash : Kenarlık, tireler kullanılarak görüntülenir
/// dot : Kenarlık noktalar kullanılarak görüntülenir
/// Any combination of 'longDash', 'dash' and 'dot : Kenarlık, belirtilen kombinasyon tekrarlanarak görüntülenir. ÃrneÄŸin, 'dashdotdash'.
/// solid : Kenarlık düz, sürekli bir çizgidir
/// longDash : Kenarlık, uzun çizgiler kullanılarak görüntülenir
/// dash : Kenarlık, tireler kullanılarak görüntülenir
/// dot : Kenarlık noktalar kullanılarak görüntülenir
/// Any combination of 'longDash', 'dash' and 'dot : Kenarlık, belirtilen kombinasyon tekrarlanarak görüntülenir. Örneğin, 'dashdotdash'.
/// </summary>
public string DashStyle { get; set; } = "dot";
/// <summary> Artı işaretini etkinleştirir.
/// <summary> Artı işaretini etkinleştirir.
/// </summary>
public bool Enabled { get; set; }
///// <summary> Sürükleme kutusunun saydamlığını belirtir.
///// 0 - 1 aralığındadır
///// <summary> Sürükleme kutusunun saydamlığını belirtir.
///// 0 - 1 aralığındadır
///// </summary>
//public double Opacity { get; set; } = 1;
/// <summary> Artı işareti çizgilerinin genişliğini belirtir.
/// <summary> Artı işareti çizgilerinin genişliğini belirtir.
/// </summary>
public int Width { get; set; } = 1;
/// <summary> Yatay çapraz çizgiyi ayrı ayrı yapılandırır.
/// <summary> Yatay çapraz çizgiyi ayrı ayrı yapılandırır.
/// </summary>
public ChartCrosshairLineDto HorizontalLine { get; set; }
/// <summary> Artı işareti etiketlerini yapılandırır.
/// <summary> Artı işareti etiketlerini yapılandırır.
/// </summary>
public ChartLabelDto Label { get; set; }
/// <summary> Dikey artı çizgisini ayrı ayrı yapılandırır.
/// <summary> Dikey artı çizgisini ayrı ayrı yapılandırır.
/// </summary>
public ChartCrosshairLineDto VerticalLine { get; set; }
}

View file

@ -2,8 +2,8 @@
public class ChartDragBoxStyle
{
/// <summary> Sürükleme kutusunun rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Sürükleme kutusunun rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -12,8 +12,8 @@ public class ChartDragBoxStyle
/// Paint server address
/// </summary>
public string Color { get; set; }
/// <summary> Sürükleme kutusunun saydamlığını belirtir.
/// 0 - 1 aralığındadır
/// <summary> Sürükleme kutusunun saydamlığını belirtir.
/// 0 - 1 aralığındadır
/// </summary>
public double Opacity { get; set; }
}

View file

@ -2,8 +2,8 @@
public class ChartExportDto
{
/// <summary> Ortaya çıkan dosya veya belgedeki saydam bölgeleri dolduracak rengi belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Ortaya çıkan dosya veya belgedeki saydam bölgeleri dolduracak rengi belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -12,25 +12,25 @@ public class ChartExportDto
/// Paint server address
/// </summary>
public string BackgroundColor { get; set; } = "#ffffff";
/// <summary> UI bileşeninde istemci tarafında dışa aktarmayı etkinleştirir.
/// <summary> UI bileşeninde istemci tarafında dışa aktarmayı etkinleştirir.
/// </summary>
public bool Enabled { get; set; }
/// <summary> UI bileşeninde istemci tarafında dışa aktarmayı etkinleştirir.
/// <summary> UI bileşeninde istemci tarafında dışa aktarmayı etkinleştirir.
/// </summary>
public bool AllowExportSelectedData { get; set; }
///// <summary> Dışa aktarma formatı belirtir.
///// <summary> Dışa aktarma formatı belirtir.
///// Desteklenen formatlar: 'GIF' | 'JPEG' | 'PDF' | 'PNG' | 'SVG'
///// </summary>
//public string Formats { get; set; } = "['PNG', 'PDF', 'JPEG', 'SVG', 'GIF']";
/// <summary> Dışa aktarılan UI bileşeninin etrafına boş bir alan ekler; piksel cinsinden ölçülür.
/// <summary> Dışa aktarılan UI bileşeninin etrafına boş bir alan ekler; piksel cinsinden ölçülür.
/// </summary>
public int Margin { get; set; } = 10;
/// <summary> UI bileşeninde yazdırma özelliğini etkinleştirir. Yalnızca export.enabled özelliği doğruysa geçerlidir. ///
/// <summary> UI bileşeninde yazdırma özelliğini etkinleştirir. Yalnızca export.enabled özelliği doğruysa geçerlidir. ///
/// </summary>
public bool PrintingEnabled { get; set; } = true;
// svgToCanvas // HTML tuvalinde SVG iÅŸaretlemesini iÅŸleyen bir iÅŸlev. Ãzel SVG öğelerini (örneÄŸin, markerTemplate) dışa aktarmak için gereklidir.
// svgToCanvas // HTML tuvalinde SVG işaretlemesini işleyen bir işlev. Özel SVG öğelerini (örneğin, markerTemplate) dışa aktarmak için gereklidir.
}

View file

@ -1,11 +1,11 @@
namespace Erp.Platform.ListForms;
/// <summary> Artı işareti etiketleri için yazı tipi özelliklerini belirtir.
/// <summary> Artı işareti etiketleri için yazı tipi özelliklerini belirtir.
/// </summary>
public class ChartFontDto
{
/// <summary> Yazı tipi rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Yazı tipi rengini belirtir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -14,19 +14,19 @@ public class ChartFontDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "#FFFFFF";
/// <summary> Yazı tipi ailesini belirtir.
/// <summary> Yazı tipi ailesini belirtir.
/// Default Value: '"Segoe UI", "Helvetica Neue", "Trebuchet MS", Verdana, sans-serif'
/// </summary>
public string Family { get; set; } = "\"Segoe UI\", \"Helvetica Neue\", \"Trebuchet MS\", Verdana, sans-serif";
///// <summary> Yazı tipi saydamlığını belirtir.
///// 0 - 1 aralığındadır
///// <summary> Yazı tipi saydamlığını belirtir.
///// 0 - 1 aralığındadır
///// </summary>
//public double Opacity { get; set; } = 1;
/// <summary> Yazı tipi boyutunu belirtir.
/// <summary> Yazı tipi boyutunu belirtir.
/// </summary>
public int Size { get; set; } = 12;
/// <summary>
/// Yazı tipi ağırlığını belirtir. 100'lük artışlarla 100 ile 900 arasındaki değerleri kabul eder. Daha yüksek değerler kalınlığı artırır.
/// Yazı tipi ağırlığını belirtir. 100'lük artışlarla 100 ile 900 arasındaki değerleri kabul eder. Daha yüksek değerler kalınlığı artırır.
/// </summary>
public int Weight { get; set; } = 400;
}

View file

@ -7,8 +7,8 @@ public class ChartLabelDto
Font = new ChartFontDto();
}
/// <summary> Etiketin arka planını boyar.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Etiketin arka planını boyar.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -17,13 +17,13 @@ public class ChartLabelDto
/// Paint server address
/// </summary>
public string BackgroundColor { get; set; } = "#f05b41";
/// <summary> görüntülenen metni özelleştirir.
/// Temalarda kullanılamaz.
/// <summary> görüntülenen metni özelleştirir.
/// Temalarda kullanılamaz.
/// </summary>
public string CustomizeText { get; set; }
public ChartFontDto Font { get; set; }
public bool Visible { get; set; }
/// <summary> Artı işareti etiketinde görüntülenmeden önce bir nokta değerini/bağımsız değişkeni biçimlendirir. ///
/// <summary> Artı işareti etiketinde görüntülenmeden önce bir nokta değerini/bağımsız değişkeni biçimlendirir. ///
/// Accepted Values: 'billions' | 'currency' | 'day' | 'decimal' | 'exponential' | 'fixedPoint' | 'largeNumber' | 'longDate' | 'longTime' | 'millions' | 'millisecond' | 'month' | 'monthAndDay' | 'monthAndYear' | 'percent' | 'quarter' | 'quarterAndYear' | 'shortDate' | 'shortTime' | 'thousands' | 'trillions' | 'year' | 'dayOfWeek' | 'hour' | 'longDateLongTime' | 'minute' | 'second' | 'shortDateShortTime'
/// </summary>
public string Format { get; set; }

View file

@ -7,9 +7,9 @@ public class ChartLegendDto
Border = new ChartBorderDto();
}
/// <summary> Legend in arka planını renklendirir
/// <summary> Legend in arka planını renklendirir
/// Default Value: undefined
/// Bu özellik aşağıdaki renkleri destekler:
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -18,32 +18,32 @@ public class ChartLegendDto
/// Paint server address
/// </summary>
public string BackgroundColor { get; set; }
/// <summary> Legend in kenarlığını yapılandırır
/// <summary> Legend in kenarlığını yapılandırır
/// </summary>
public ChartBorderDto Border { get; set; }
public int ColumnCount { get; set; }
/// <summary>Gösterge öğelerini dikey (bir sütunda) veya yatay (bir satırda) olarak düzenler. legend.horizontalAlignment "center" ise varsayılan değer "horizontal" olur. Aksi takdirde, "dikey" dir
/// <summary>Gösterge öğelerini dikey (bir sütunda) veya yatay (bir satırda) olarak düzenler. legend.horizontalAlignment "center" ise varsayılan değer "horizontal" olur. Aksi takdirde, "dikey" dir
/// Accepted Values: 'horizontal' | 'vertical'
/// </summary>
public string Orientation { get; set; } = "vertical";
/// <summary>Göstergenin grafiğin çiziminin dışında mı yoksa içinde mi bulunduğunu belirtir
/// <summary>Göstergenin grafiğin çiziminin dışında mı yoksa içinde mi bulunduğunu belirtir
/// Accepted Values: 'inside' | 'outside'
/// </summary>
public string Position { get; set; } = "outside";
/// <summary>Gösterge öğelerini birkaç sıra halinde düzenler.
/// <summary>Gösterge öğelerini birkaç sıra halinde düzenler.
/// </summary>
public int RowCount { get; set; } = 0;
/// <summary>Açıklama başlığını yapılandırır
/// ihtiyaç olması durumunda detaylandırmak için TitleDto ile değiştirilebilir
/// <summary>Açıklama başlığını yapılandırır
/// ihtiyaç olması durumunda detaylandırmak için TitleDto ile değiştirilebilir
/// </summary>
public string Title { get; set; }
/// <summary> Göstergenin görünürlüğünü belirtir
/// <summary> Göstergenin görünürlüğünü belirtir
/// </summary>
public bool Visible { get; set; } = true;
////İhtiyaç olması durumunda açılacak diğer property ler
////İhtiyaç olması durumunda açılacak diğer property ler
///// <summary>horizontalAlignment ile birlikte göstergenin konumunu belirtir
///// <summary>horizontalAlignment ile birlikte göstergenin konumunu belirtir
///// Accepted Values: 'bottom' | 'top'
///// </summary>
//public string VerticalAlignment { get; set; } = "top";
@ -62,7 +62,7 @@ public class ChartLegendDto
//public string CustomizeText { get; set; }
//public string CustomizeItems { get; set; }
//public string CustomizeHint { get; set; }
///// <summary> ÃÄŸe sütunları arasında piksel cinsinden boÅŸ bir alan belirtir
///// <summary> Öğe sütunları arasında piksel cinsinden boş bir alan belirtir
///// </summary>
//public int ColumnItemSpacing { get; set; } = 20;

View file

@ -1,16 +1,16 @@
namespace Erp.Platform.ListForms;
/// <summary> Bölme, dizi içeren bir grafik alanıdır. Bir grafikte çok sayıda seri varsa, bunlar birden çok bölme arasında dağıtılabilir.
/// <summary> Bölme, dizi içeren bir grafik alanıdır. Bir grafikte çok sayıda seri varsa, bunlar birden çok bölme arasında dağıtılabilir.
/// </summary>
public class ChartPanesDto
{
/// <summary> Bölmenin arka planının rengini belirtir.
/// <summary> Bölmenin arka planının rengini belirtir.
/// </summary>
public string BackgroundColor { get; set; }
/// <summary>Çok bölmeli bir grafikte bölmenin yüksekliğini (veya grafik döndürüldüğünde genişliğini) belirtir.
/// <summary>Çok bölmeli bir grafikte bölmenin yüksekliğini (veya grafik döndürüldüğünde genişliğini) belirtir.
/// </summary>
public int Height { get; set; } = 250;
/// <summary> Bölmenin adını belirtir.
/// <summary> Bölmenin adını belirtir.
/// </summary>
public string Name { get; set; }

View file

@ -2,8 +2,8 @@
public class ChartScrollBarDto
{
/// <summary> ScrollBar ın kenarlığını renklendirir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> ScrollBar ın kenarlığını renklendirir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -12,25 +12,25 @@ public class ChartScrollBarDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "gray";
/// <summary> Kaydırma çubuğu ile grafiğin çizimi arasındaki boşluğu piksel cinsinden belirtir.
/// <summary> Kaydırma çubuğu ile grafiğin çizimi arasındaki boşluğu piksel cinsinden belirtir.
/// </summary>
public int Offset { get; set; } = 5;
///// <summary> Kaydırma çubuğunun opaklığını belirtir.
///// <summary> Kaydırma çubuğunun opaklığını belirtir.
/////
///// </summary>
//public double Opacity { get; set; }
/// <summary> Grafikteki kaydırma çubuğunun konumunu belirtir.
/// <summary> Grafikteki kaydırma çubuğunun konumunu belirtir.
/// Accepted Values: 'bottom' | 'left' | 'right' | 'top'
/// Default Value: 'top'
/// Grafiğin döndürülüp döndürülmediğine bağlı olarak bu özellik farklı değerler kabul eder. Döndürülmemiş bir grafikte, bu özelliğe 'üst' veya 'alt' atayabilirsiniz. Döndürülmüş bir grafikte, bu özellik ya 'sol' ya da 'sağ'ı kabul eder.
/// Grafiğin döndürülüp döndürülmediğine bağlı olarak bu özellik farklı değerler kabul eder. Döndürülmemiş bir grafikte, bu özelliğe 'üst' veya 'alt' atayabilirsiniz. Döndürülmüş bir grafikte, bu özellik ya 'sol' ya da 'sağ'ı kabul eder.
/// </summary>
public string Position { get; set; } = "top";
/// <summary> Kaydırma çubuğunun görünüp görünmeyeceğini belirtir.
/// <summary> Kaydırma çubuğunun görünüp görünmeyeceğini belirtir.
/// </summary>
public bool Visible { get; set; }
/// <summary> Kaydırma çubuğunun genişliğini piksel cinsinden belirtir.
/// <summary> Kaydırma çubuğunun genişliğini piksel cinsinden belirtir.
/// </summary>
public int Width { get; set; } = 10;
}

View file

@ -2,29 +2,29 @@
public class ChartSeriesDto
{
/// <summary> Hangi veri kaynağı alanının seri noktaları için bağımsız değişkenler sağladığını belirtir
/// <summary> Hangi veri kaynağı alanının seri noktaları için bağımsız değişkenler sağladığını belirtir
/// Default Value: 'arg'
/// Temalar ile kullanılamaz!
/// Temalar ile kullanılamaz!
/// </summary>
public string ArgumentField { get; set; } = "arg";
/// <summary> Seriyi bir deÄŸer eksenine baÄŸlar.
/// <summary> Seriyi bir değer eksenine bağlar.
/// </summary>
public string Axis { get; set; }
/// <summary> Aynı bağımsız değişkene sahip çubukların üst üste binmesi için çubuk serilerini gruplandırmanıza izin verir.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, RangeBarSeries
/// <summary> Aynı bağımsız değişkene sahip çubukların üst üste binmesi için çubuk serilerini gruplandırmanıza izin verir.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, RangeBarSeries
/// </summary>
public string BarOverlapGroup { get; set; }
/// <summary> Göreli birimleri kullanarak bir serideki tüm çubukların dolgusunu ve dolayısıyla genişliğini kontrol eder. barWidth özelliği ayarlanmışsa yoksayılır.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// <summary> Göreli birimleri kullanarak bir serideki tüm çubukların dolgusunu ve dolayısıyla genişliğini kontrol eder. barWidth özelliği ayarlanmışsa yoksayılır.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// </summary>
public int BarPadding { get; set; }
/// <summary> Bir dizideki tüm çubuklar için piksel cinsinden ölçülen sabit bir genişlik belirtir. barPadding özelliğine göre önceliklidir.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// <summary> Bir dizideki tüm çubuklar için piksel cinsinden ölçülen sabit bir genişlik belirtir. barPadding özelliğine göre önceliklidir.
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// </summary>
public int BarWidth { get; set; }
/// <summary> Serinin rengini belirtir.
/// Not: HiddenInput olarak etiketlenmesinin sebebi renk seçimi için farklı bir editör kullanılmasından dolayıdır
/// Bu özellik aşağıdaki renkleri destekler:
/// Not: HiddenInput olarak etiketlenmesinin sebebi renk seçimi için farklı bir editör kullanılmasından dolayıdır
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -33,70 +33,70 @@ public class ChartSeriesDto
/// Paint server address
/// </summary>
public string Color { get; set; }
/// <summary> Çubukların yuvarlak görünmesini sağlar. Yalnızca çubuk benzeri seriler için geçerlidir.
/// <summary> Çubukların yuvarlak görünmesini sağlar. Yalnızca çubuk benzeri seriler için geçerlidir.
/// Default Value: 0
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, RangeBarSeries
/// </summary>
public int CornerRadius { get; set; } = 0;
/// <summary> Açıklamanın kenarlığı için bir tire stili ayarlar
/// <summary> Açıklamanın kenarlığıin bir tire stili ayarlar
/// Accepted Values: 'dash' | 'dot' | 'longDash' | 'solid'
/// Default Value: 'solid'
/// solid : Kenarlık düz, sürekli bir çizgidir
/// longDash : Kenarlık, uzun çizgiler kullanılarak görüntülenir
/// dash : Kenarlık, tireler kullanılarak görüntülenir
/// dot : Kenarlık noktalar kullanılarak görüntülenir
/// Any combination of 'longDash', 'dash' and 'dot : Kenarlık, belirtilen kombinasyon tekrarlanarak görüntülenir. ÃrneÄŸin, 'dashdotdash'.
/// solid : Kenarlık düz, sürekli bir çizgidir
/// longDash : Kenarlık, uzun çizgiler kullanılarak görüntülenir
/// dash : Kenarlık, tireler kullanılarak görüntülenir
/// dot : Kenarlık noktalar kullanılarak görüntülenir
/// Any combination of 'longDash', 'dash' and 'dot : Kenarlık, belirtilen kombinasyon tekrarlanarak görüntülenir. Örneğin, 'dashdotdash'.
/// </summary>
public string DashStyle { get; set; } = "solid";
/// <summary> Serinin boş veri noktalarını göz ardı edip etmeyeceğini belirtir.
/// Boş değere sahip veri noktaları, gerçek seri noktaları üretmez. Bu nedenle eksik olması gereken yerlerde gereksiz boşluklarla seriler çizilebilir. Bu boşlukları kaldırmak için, ignoreEmptyPoints özelliğini true olarak ayarlayın.
/// <summary> Serinin boş veri noktalarını göz ardı edip etmeyeceğini belirtir.
/// Boş değere sahip veri noktaları, gerçek seri noktaları üretmez. Bu nedenle eksik olması gereken yerlerde gereksiz boşluklarla seriler çizilebilir. Bu boşlukları kaldırmak için, ignoreEmptyPoints özelliğini true olarak ayarlayın.
/// </summary>
public bool IgnoreEmptyPoints { get; set; } = false;
/// <summary> Seriyi tanımlayan adı belirtir.
/// <summary> Seriyi tanımlayan adı belirtir.
/// </summary>
public string Name { get; set; }
/// <summary> Serinin hangi bölmeye ait olması gerektiğini belirtir. Bölmenin adını kabul eder.
/// Bilgilendirme: Pane dolu ise chart ın PanesDto Property si aynı isimde bir elemanı mutlaka içermelidir
/// <summary> Serinin hangi bölmeye ait olması gerektiğini belirtir. Bölmenin adını kabul eder.
/// Bilgilendirme: Pane dolu ise chart ın PanesDto Property si aynı isimde bir elemanı mutlaka içermelidir
/// </summary>
public string Pane { get; set; }
/// <summary> rangeValue2Field özelliğiyle birleştiğinde, hangi veri kaynağı alanının aralık benzeri bir seri için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// <summary> rangeValue2Field özelliğiyle birleştiğinde, hangi veri kaynağı alanının aralık benzeri bir seri için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// RangeBarSeries, RangeAreaSeries
/// </summary>
public string RangeValue1Field { get; set; } = "val1";
/// <summary> rangeValue1Field özelliğiyle birleştiğinde, hangi veri kaynağı alanının aralık benzeri bir seri için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// <summary> rangeValue1Field özelliğiyle birleştiğinde, hangi veri kaynağı alanının aralık benzeri bir seri için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// RangeBarSeries, RangeAreaSeries
/// </summary>
public string RangeValue2Field { get; set; } = "val2";
/// <summary> Kullanıcı bir dizi seçtiğinde vurgulanacak dizi öğelerini belirtir.
/// <summary> Kullanıcı bir dizi seçtiğinde vurgulanacak dizi öğelerini belirtir.
/// Accepted Values: 'allArgumentPoints' | 'allSeriesPoints' | 'excludePoints' | 'includePoints' | 'none' | 'onlyPoint'
/// Seri tipine bağlı olarak bu özellik farklı değerler kabul eder. Bilgi için SeriTipleri bölümünü (https://js.devexpress.com/Documentation/ApiReference/UI_Components/dxChart/Series_Types/) ziyaret edin, kullanılan seri tipini seçin ve onun selectionMode özellik açıklamasına bakın
/// Seri tipine bağlı olarak bu özellik farklı değerler kabul eder. Bilgi için SeriTipleri bölümünü (https://js.devexpress.com/Documentation/ApiReference/UI_Components/dxChart/Series_Types/) ziyaret edin, kullanılan seri tipini seçin ve onun selectionMode özellik açıklamasına bakın
/// </summary>
public string SelectionMode { get; set; } = "none";
/// <summary> Dizinin lejantta gösterilip gösterilmeyeceğini belirtir.
/// <summary> Dizinin lejantta gösterilip gösterilmeyeceğini belirtir.
/// </summary>
public bool ShowInLegend { get; set; } = true;
/// <summary> Seri türünü ayarlar
/// <summary> Seri türünü ayarlar
/// Default Value: 'line'
/// Accepted Values: 'area' | 'bar' | 'bubble' | 'candlestick' | 'fullstackedarea' | 'fullstackedbar' | 'fullstackedline' | 'fullstackedspline' | 'fullstackedsplinearea' | 'line' | 'rangearea' | 'rangebar' | 'scatter' | 'spline' | 'splinearea' | 'stackedarea' | 'stackedbar' | 'stackedline' | 'stackedspline' | 'stackedsplinearea' | 'steparea' | 'stepline' | 'stock'
/// </summary>
public string Type { get; set; }
/// <summary> Hangi veri kaynağı alanının seri noktaları için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// <summary> Hangi veri kaynağı alanının seri noktaları için değerler sağladığını belirtir.
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// LineSeries, StackedLineSeries,FullStackedLineSeries,StackedSplineSeries,FullStackedSplineSeries,
/// SplineSeries,StepLineSeries,AreaSeries,StackedAreaSeries,Sta,kedSplineAreaSeries,FullStackedAreaSeries,
/// FullStackedSplineAreaSeries,SplineAreaSeries,StepAreaSeries,ScatterSeries,BarSeries,StackedBarSeries,
/// FullStackedBarSeries,BubbleSeries,
/// </summary>
public string ValueField { get; set; }
/// <summary> Serinin görünür olup olmayacağını belirtir.
/// <summary> Serinin görünür olup olmayacağını belirtir.
/// </summary>
public bool Visible { get; set; } = true;
/// <summary> Seri çizgisinin genişliğini piksel cinsinden belirtir. Yalnızca çizgi benzeri seriler için geçerlidir.
/// <summary> Seri çizgisinin genişliğini piksel cinsinden belirtir. Yalnızca çizgi benzeri seriler için geçerlidir.
/// Default Value: 2
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// Bu üye aşağıdaki seriler tarafından kullanılır:
/// LineSeries, StackedLineSeries, FullStackedLineSeries, StackedSplineSeries, FullStackedSplineSeries, SplineSeries, StepLineSeries, CandleStickSeries, StockSeries
/// </summary>
public int Width { get; set; } = 2;
@ -113,8 +113,8 @@ public class ChartSeriesDto
// minBarSize
// openValueField
// point Dto
// reduction // financial seriler için indirgeme özelliklerini belirtir.
// slectionStyle // Bir kullanıcı seçtiğinde seri tarafından benimsenen görünümü yapılandırır.
// reduction // financial seriler için indirgeme özelliklerini belirtir.
// slectionStyle // Bir kullanıcı seçtiğinde seri tarafından benimsenen görünümü yapılandırır.
// stack
// tag
// tagField
@ -122,11 +122,11 @@ public class ChartSeriesDto
public ChartLabelDto Label { get; set; }
/// <summary> Değer özetleme işlevini belirtir.
/// <summary> Değer özetleme işlevini belirtir.
/// Accepted Values: 'avg' | 'count' | 'custom' | 'max' | 'min' | 'sum'
/// Default Value: 'sum'
/// </summary>
public string SummaryType { get; set; } = "sum";
/// <example>'Kullanıcı Adı'</example>
/// <example>'Kullanıcı Adı'</example>
public string UserId { get; set; }
}

View file

@ -3,10 +3,10 @@
public class ChartSizeDto
{
public bool UseSize { get; set; } = false;
/// <summary> UI bileÅŸeninin geniÅŸliÄŸini piksel cinsinden belirtir
/// <summary> UI bileşeninin genişliğini piksel cinsinden belirtir
/// </summary>
public int Width { get; set; } = 400;
/// <summary> UI bileşeninin yüksekliğini piksel cinsinden belirtir
/// <summary> UI bileşeninin yüksekliğini piksel cinsinden belirtir
/// </summary>
public int Height { get; set; } = 200;
}

View file

@ -2,33 +2,33 @@
public class ChartTitleDto
{
/// <summary> Başlığın metnini belirtir
/// <summary> Başlığın metnini belirtir
/// </summary>
public string Text { get; set; }
/// <summary> Dikey hizalamanın konumunu belirtir
/// <summary> Dikey hizalamanın konumunu belirtir
/// Accepted Values: 'bottom' | 'top'
/// </summary>
public string VerticalAlignment { get; set; } = "top";
/// <summary> Yatay yönde hizalamanın yanaşıklık konumunu belirtir
/// <summary> Yatay yönde hizalamanın yanaşıklık konumunu belirtir
/// Accepted Values: 'center' | 'left' | 'right'
/// </summary>
public string HorizontalAlignment { get; set; } = "center";
/// <summary> UI bileşeninin altyazısını yapılandırır
/// İhtiyaç olması durumunda alt özellikleri ile birlikte Objeye çevrilebilir
/// <summary> UI bileşeninin altyazısını yapılandırır
/// İhtiyaç olması durumunda alt özellikleri ile birlikte Objeye çevrilebilir
/// </summary>
public string Subtitle { get; set; }
/// <summary> WordWrap uygulandıktan sonra başlık ayrılan alandan taştığında başlıkla ne yapılacağını belirtir:
/// gizleme, kısaltma ve bir üç nokta görüntüleme veya hiçbir şey.
/// <summary> WordWrap uygulandıktan sonra başlık ayrılan alandan taştığında başlıkla ne yapılacağını belirtir:
/// gizleme, kısaltma ve bir üç nokta görüntüleme veya hiçbir şey.
/// Accepted Values: 'ellipsis' | 'hide' | 'none'
/// </summary>
public string TextOverflow { get; set; } = "ellipsis";
/// <summary> Tek bir satıra sığmazsa başlığın nasıl kaydırılacağını belirtir.
/// <summary> Tek bir satıra sığmazsa başlığın nasıl kaydırılacağını belirtir.
/// Accepted Values: 'normal' | 'breakWord' | 'none'
/// "normal" Metin yalnızca izin verilen kesme noktalarında (örneğin, iki kelime arasındaki boşluk) kesiliyor.
/// "breakWord" Satırda kullanılabilir kesme noktası yoksa sözcükler bölünebilir.
/// "none" Sözcük kaydırma devre dışı.
/// "normal" Metin yalnızca izin verilen kesme noktalarında (örneğin, iki kelime arasındaki boşluk) kesiliyor.
/// "breakWord" Satırda kullanılabilir kesme noktası yoksa sözcükler bölünebilir.
/// "none" Sözcük kaydırma devre dışı.
/// </summary>
public string WordWrap { get; set; }
//Eklenebilir diÄŸer alanlar: object font, object subtitle, object margin
//Eklenebilir diğer alanlar: object font, object subtitle, object margin
}

View file

@ -1,6 +1,6 @@
namespace Erp.Platform.ListForms;
/// <summary> Araç ipuçlarını yapılandırır.
/// <summary> Araç ipuçlarını yapılandırır.
/// </summary>
public class ChartTooltipDto
{
@ -10,18 +10,18 @@ public class ChartTooltipDto
Font = new ChartFontDto() { Color = "#000000" };
}
/// <summary> Araç ipucunda görüntülenmeden önce nokta bağımsız değişkenini biçimlendirir. Puan değerini biçimlendirmek için format özelliğini kullanın.
/// <summary> Araç ipucunda görüntülenmeden önce nokta bağımsız değişkenini biçimlendirir. Puan değerini biçimlendirmek için format özelliğini kullanın.
/// /// Accepted Values: 'billions' | 'currency' | 'day' | 'decimal' | 'exponential' | 'fixedPoint' | 'largeNumber' | 'longDate' | 'longTime' | 'millions' | 'millisecond' | 'month' | 'monthAndDay' | 'monthAndYear' | 'percent' | 'quarter' | 'quarterAndYear' | 'shortDate' | 'shortTime' | 'thousands' | 'trillions' | 'year' | 'dayOfWeek' | 'hour' | 'longDateLongTime' | 'minute' | 'second' | 'shortDateShortTime'
/// </summary>
public string ArgumentFormat { get; set; }
/// <summary>Bir araç ipucunun okunun uzunluğunu piksel cinsinden belirtir.
/// <summary>Bir araç ipucunun okunun uzunluğunu piksel cinsinden belirtir.
/// </summary>
public int ArrowLength { get; set; } = 10;
/// <summary> Bir araç ipucunun kenarlığını yapılandırır.
/// <summary> Bir araç ipucunun kenarlığını yapılandırır.
/// </summary>
public ChartBorderDto Border { get; set; }
/// <summary> Tüm araç ipuçlarını renklendirir.
/// Bu özellik aşağıdaki renkleri destekler:
/// <summary> Tüm araç ipuçlarını renklendirir.
/// Bu özellik aşağıdaki renkleri destekler:
/// Hexadecimal colors
/// RGB colors
/// RGBA colors
@ -30,30 +30,30 @@ public class ChartTooltipDto
/// Paint server address
/// </summary>
public string Color { get; set; } = "#ffffff";
/// <summary> Araç ipuçlarını etkinleştirir.
/// <summary> Araç ipuçlarını etkinleştirir.
/// </summary>
public bool Enabled { get; set; }
public ChartFontDto Font { get; set; }
/// <summary> Bir değeri araç ipucunda görüntülenmeden önce biçimlendirir.
/// <summary> Bir değeri araç ipucunda görüntülenmeden önce biçimlendirir.
/// /// Accepted Values: 'billions' | 'currency' | 'day' | 'decimal' | 'exponential' | 'fixedPoint' | 'largeNumber' | 'longDate' | 'longTime' | 'millions' | 'millisecond' | 'month' | 'monthAndDay' | 'monthAndYear' | 'percent' | 'quarter' | 'quarterAndYear' | 'shortDate' | 'shortTime' | 'thousands' | 'trillions' | 'year' | 'dayOfWeek' | 'hour' | 'longDateLongTime' | 'minute' | 'second' | 'shortDateShortTime'
/// </summary>
public string Format { get; set; }
/// <summary> Araç ipucunun bir seri noktasının merkezinde mi yoksa kenarında mı bulunacağını belirtir. Yalnızca çubuk benzeri ve kabarcık serileri için geçerlidir.
/// <summary> Araç ipucunun bir seri noktasının merkezinde mi yoksa kenarında mı bulunacağını belirtir. Yalnızca çubuk benzeri ve kabarcık serileri için geçerlidir.
/// Accepted Values: 'center' | 'edge'
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, BubbleSeries, StockSeries, CandleStickSeries
/// Bu üye şu seriler tarafından kullanılır: BarSeries, StackedBarSeries, FullStackedBarSeries, BubbleSeries, StockSeries, CandleStickSeries
/// </summary>
public string Location { get; set; } = "center";
/// <summary> Araç ipucunun sol/sağ kenarlığı ile metni arasında piksel cinsinden ölçülen boş bir alan oluşturur.
/// <summary> Araç ipucunun sol/sağ kenarlığı ile metni arasında piksel cinsinden ölçülen boş bir alan oluşturur.
/// </summary>
public int PaddingLeftRight { get; set; } = 18;
/// <summary> Araç ipucunun üst/alt kenarlığı ile metni arasında piksel cinsinden ölçülen boş bir alan oluşturur.
/// <summary> Araç ipucunun üst/alt kenarlığı ile metni arasında piksel cinsinden ölçülen boş bir alan oluşturur.
/// </summary>
public int PaddingTopBottom { get; set; } = 15;
/// <summary> Araç ipucunun aynı bağımsız değişkenle tüm seri noktalarında paylaşılıp paylaşılmayacağını belirtir.
/// Bu özellik aşağıdaki değerlerden birine sahip olabilir:
/// false: Araç ipucu, yalnızca fare imleciyle üzerine getirilen bir seri noktası hakkındaki bilgileri görüntüler.
/// true : Araç ipucu, üzerine gelinen noktayla aynı bağımsız değişkene sahip tüm seri noktaları hakkında bilgi görüntüler.
/// Bu nokta bir yığına dahilse, araç ipucu yalnızca bu yığındaki noktalar ve herhangi bir yığına (varsa) ait olmayan noktalar hakkında bilgi görüntüler.
/// <summary> Araç ipucunun aynı bağımsız değişkenle tüm seri noktalarında paylaşılıp paylaşılmayacağını belirtir.
/// Bu özellik aşağıdaki değerlerden birine sahip olabilir:
/// false: Araç ipucu, yalnızca fare imleciyle üzerine getirilen bir seri noktası hakkındaki bilgileri görüntüler.
/// true : Araç ipucu, üzerine gelinen noktayla aynı bağımsız değişkene sahip tüm seri noktaları hakkında bilgi görüntüler.
/// Bu nokta bir yığına dahilse, araç ipucu yalnızca bu yığındaki noktalar ve herhangi bir yığına (varsa) ait olmayan noktalar hakkında bilgi görüntüler.
/// </summary>
public bool Shared { get; set; }

View file

@ -2,7 +2,7 @@
namespace Erp.Platform.ListForms;
/// <summary> Değer eksenini yapılandırır.
/// <summary> Değer eksenini yapılandırır.
/// </summary>
public class ChartValueAxisDto
{
@ -16,47 +16,47 @@ public class ChartValueAxisDto
}
public ChartAxisGridDto Grid { get; set; }
/// <summary> Değer ekseninin adını belirtir.
/// <summary> Değer ekseninin adını belirtir.
/// </summary>
public string Name { get; set; }
/// <summary> Bağımsız değişken ekseninin yerini değiştirir.
/// <summary> Bağımsız değişken ekseninin yerini değiştirir.
/// Accepted Values: 'bottom' | 'left' | 'right' | 'top'
/// Default Value: 'left'
/// Döndürülen (Rotated) özelliğin değerine bağlı olarak, konum (Position) farklı değerler kabul eder.
/// Döndürülen (Rotated) özelliğin değerine bağlı olarak, konum (Position) farklı değerler kabul eder.
/// If (Rotated = False) => Position = "left" or "right"
/// If (Rotated = True) => Position = "bottom" or "top"
/// </summary>
public string Position { get; set; } = "left";
/// <summary> Eksen başlığını yapılandırır.
/// Şimdilik sadece string olaran implemen edildi, ihtiyaç olması durumunda ChartTitleDto benzeri bir nesne ile değiştirilebilir
/// <summary> Eksen başlığını yapılandırır.
/// Şimdilik sadece string olaran implemen edildi, ihtiyaç olması durumunda ChartTitleDto benzeri bir nesne ile değiştirilebilir
/// </summary>
public string Title { get; set; }
/// <summary> Değerleri belirtilen bir veri türüne dönüştürür.
/// <summary> Değerleri belirtilen bir veri türüne dönüştürür.
/// Accepted Values: 'datetime' | 'numeric' | 'string'
/// Default Value: undefined
/// Veri kaynağınız sayıları veya tarihleri â€â€dizeler olarak saklıyorsa, bu özelliÄŸi kullanarak uygun veri türünü belirtin. Tarihlerin geçerli bir biçimi olduÄŸundan emin olun.
/// Veri kaynağınız sayıları veya tarihleri â€â€dizeler olarak saklıyorsa, bu özelliği kullanarak uygun veri türünü belirtin. Tarihlerin geçerli bir biçimi olduğundan emin olun.
/// </summary>
public string ValueType { get; set; } = "numeric";
/// <summary> Eksen çizgisini görünür yapar.
/// <summary> Eksen çizgisini görünür yapar.
/// </summary>
public bool Visible { get; set; } = true;
/// <summary> Eksen çizgisinin genişliğini piksel cinsinden belirtir.
/// <summary> Eksen çizgisinin genişliğini piksel cinsinden belirtir.
/// </summary>
public int Width { get; set; } = 1;
public List<BreakDto> Breaks { get; set; }
public BreakStyleDto BreakStyle { get; set; }
/// <summary> Değer ekseninin türünü belirtir.
/// <summary> Değer ekseninin türünü belirtir.
/// Accepted Values: 'continuous' | 'discrete' | 'logarithmic'
/// continuous : Sayısal ve tarih-saat değerlerini görüntüler. Bu ekseni aralıklara bölmek için tickInterval özelliğini kullanın.
/// discrete : "Kategoriler" adı verilen dize değerlerini görüntüler. Bunları sıralamak için, kategoriler dizisini kullanın.
/// logarithmic : Sayısal deÄŸerleri görüntüler. Her deÄŸer, bir kuvvete yükseltilmiÅŸ logaritmaTemel deÄŸeridir. ÃrneÄŸin, 10'a eÅŸit olan logaritmaTemel ÅŸu deÄŸerleri üretir: 10-2, 10-1, 100, 101, 102, vb. Logaritmik eksen, hızla büyüyen deÄŸerlerden oluÅŸan bir veri kümesini görselleÅŸtirdiÄŸinizde kullanışlıdır.
/// continuous : Sayısal ve tarih-saat değerlerini görüntüler. Bu ekseni aralıklara bölmek için tickInterval özelliğini kullanın.
/// discrete : "Kategoriler" adı verilen dize değerlerini görüntüler. Bunları sıralamak için, kategoriler dizisini kullanın.
/// logarithmic : Sayısal değerleri görüntüler. Her değer, bir kuvvete yükseltilmiş logaritmaTemel değeridir. Örneğin, 10'a eşit olan logaritmaTemel şu değerleri üretir: 10-2, 10-1, 100, 101, 102, vb. Logaritmik eksen, hızla büyüyen değerlerden oluşan bir veri kümesini görselleştirdiğinizde kullanışlıdır.
/// </summary>
public string Type { get; set; }
public bool AutoBreaksEnabled { get; set; } = true;
public int MaxAutoBreakCount { get; set; } = 2;
// ihtiyaç olunca açılacak property ler
// ihtiyaç olunca açılacak property ler
// aggregatedPointsPosition
// allowDecimals

View file

@ -1,7 +1,7 @@
namespace Erp.Platform.ListForms;
/// <summary> Yakınlaştırmayı ve kaydırmayı yapılandırır.
/// Bağımsız değişken ve değer eksenleri için yakınlaştırmayı ve kaydırmayı etkinleştirebilirsiniz. Belirli bir eksen için yakınlaştırmayı, kaydırmayı veya her ikisini birden etkinleştirmek için argumentAxis ve valueAxis özelliklerini ayarlayın.
/// <summary> Yakınlaştırmayı ve kaydırmayı yapılandırır.
/// Bağımsız değişken ve değer eksenleri için yakınlaştırmayı ve kaydırmayı etkinleştirebilirsiniz. Belirli bir eksen için yakınlaştırmayı, kaydırmayı veya her ikisini birden etkinleştirmek için argumentAxis ve valueAxis özelliklerini ayarlayın.
/// </summary>
public class ChartZoomAndPanDto
{
@ -10,28 +10,28 @@ public class ChartZoomAndPanDto
DragBoxStyle = new ChartDragBoxStyle();
}
/// <summary> Kullanıcıların grafiği yakınlaştırmak için fare tekerleğini kullanıp kullanamayacağını belirtir. Yalnızca bağımsız değişken veya değer ekseni için yakınlaştırmaya izin veriliyorsa geçerlidir.
/// <summary> Kullanıcıların grafiği yakınlaştırmak için fare tekerleğini kullanıp kullanamayacağını belirtir. Yalnızca bağımsız değişken veya değer ekseni için yakınlaştırmaya izin veriliyorsa geçerlidir.
/// </summary>
public bool AllowMouseWheel { get; set; } = true;
/// <summary> Kullanıcıların grafiği yakınlaştırmak veya kaydırmak için dokunma hareketlerini kullanıp kullanamayacağını belirtir. Yalnızca bağımsız değişken veya değer ekseni için yakınlaştırma ve kaydırmaya izin veriliyorsa geçerlidir.
/// <summary> Kullanıcıların grafiği yakınlaştırmak veya kaydırmak için dokunma hareketlerini kullanıp kullanamayacağını belirtir. Yalnızca bağımsız değişken veya değer ekseni için yakınlaştırma ve kaydırmaya izin veriliyorsa geçerlidir.
/// </summary>
public bool AllowTouchGestures { get; set; } = true;
/// <summary> Kullanıcıların bağımsız değişken eksenini yakınlaştırmasına ve/veya kaydırmasına izin verilip verilmediğini belirtir.
/// <summary> Kullanıcıların bağımsız değişken eksenini yakınlaştırmasına ve/veya kaydırmasına izin verilip verilmediğini belirtir.
/// Accepted Values: 'both' | 'none' | 'pan' | 'zoom'
/// </summary>
public string ArgumentAxis { get; set; } = "none";
/// <summary> Kullanıcıların, sürükleme hareketiyle bir alan seçerek grafiği yakınlaştırmasına olanak tanır. Yalnızca fare kullanan cihazlarda geçerlidir.
/// <summary> Kullanıcıların, sürükleme hareketiyle bir alan seçerek grafiği yakınlaştırmasına olanak tanır. Yalnızca fare kullanan cihazlarda geçerlidir.
/// </summary>
public bool DragToZoom { get; set; } = false;
/// <summary> dragToZoom true olduğunda kaydırmayı etkinleştiren anahtarı belirtir. Yalnızca fare kullanan cihazlarda geçerlidir.
/// <summary> dragToZoom true olduğunda kaydırmayı etkinleştiren anahtarı belirtir. Yalnızca fare kullanan cihazlarda geçerlidir.
/// Accepted Values: 'alt' | 'ctrl' | 'meta' | 'shift'
/// </summary>
public string PanKey { get; set; } = "shift";
/// <summary> Kullanıcıların değer eksenini yakınlaştırmasına ve/veya kaydırmasına izin verilip verilmediğini belirtir.
/// <summary> Kullanıcıların değer eksenini yakınlaştırmasına ve/veya kaydırmasına izin verilip verilmediğini belirtir.
/// Accepted Values: 'both' | 'none' | 'pan' | 'zoom'
/// </summary>
public string ValueAxis { get; set; } = "none";
/// <summary> Kullanıcılar sürükleme hareketiyle bir alan seçerek grafiği yakınlaştırdığında görünen kutuyu yapılandırır. Yalnızca dragToZoom doğruysa geçerlidir.
/// <summary> Kullanıcılar sürükleme hareketiyle bir alan seçerek grafiği yakınlaştırdığında görünen kutuyu yapılandırır. Yalnızca dragToZoom doğruysa geçerlidir.
/// </summary>
public ChartDragBoxStyle DragBoxStyle { get; set; }
}

View file

@ -1,41 +1,41 @@
namespace Erp.Platform.ListForms;
/// <summary>
/// TreeList için özel ayarları içerir
/// TreeList için özel ayarlarıerir
/// </summary>
public class TreeOptionDto
{
/// <summary>
/// Parent kaydı belirten field adı (örn: "Id")
/// Parent kaydı belirten field adırn: "Id")
/// </summary>
public string KeyExpr { get; set; }
/// <summary>
/// Parent kaydı belirten field adı (örn: "parentId")
/// Parent kaydı belirten field adırn: "parentId")
/// </summary>
public string ParentIdExpr { get; set; }
/// <summary>
/// Alt kayıtların olup olmadığını belirten field adı (opsiyonel)
/// Alt kayıtların olup olmadığını belirten field adı (opsiyonel)
/// </summary>
public string HasItemsExpr { get; set; }
/// <summary>
/// Root (en üst) seviyedeki kayıtların parent değeri (genelde null veya 0)
/// Root (en üst) seviyedeki kayıtların parent değeri (genelde null veya 0)
/// </summary>
public object RootValue { get; set; } = null;
/// <summary>
/// Başlangıçta açık olacak node'ların ID'leri
/// Başlangıçta açık olacak node'ların ID'leri
/// </summary>
public object[] ExpandedRowKeys { get; set; } = [];
/// <summary>
/// Tüm node'ları başlangıçta açık göster
/// Tüm node'ları başlangıçta açık göster
/// </summary>
public bool AutoExpandAll { get; set; } = false;
/// <summary>
/// Alt kayıtlar seçildiğinde parent kayıtları da seç (recursive selection)
/// Alt kayıtlar seçildiğinde parent kayıtları da seç (recursive selection)
/// </summary>
public bool RecursiveSelection { get; set; } = false;
}

View file

@ -2,8 +2,8 @@
public class ColumnMappingDto
{
public string SourceColumn { get; set; } // CSV/Excel'deki sütun adı
public string TargetField { get; set; } // Hedef Entity içindeki alan
public string SourceColumn { get; set; } // CSV/Excel'deki sütun adı
public string TargetField { get; set; } // Hedef Entity içindeki alan
public bool IsRequired { get; set; }
public string DataType { get; set; } // "string", "date", "number", "boolean"
}

View file

@ -7,7 +7,7 @@ public class ImportPreviewDataDto
{
public Guid SessionId { get; set; }
public List<string> Headers { get; set; } = new();
public List<List<string>> Rows { get; set; } = new(); // raw string olarak dönen veri hücreleri
public List<List<string>> Rows { get; set; } = new(); // raw string olarak dönen veri hücreleri
public int TotalRows { get; set; }
public int SampleSize { get; set; }

View file

@ -119,12 +119,12 @@ public static class LookupQueryValues
$"\"Name\" AS \"Name\" " +
$"FROM \"{defaultDomain}\".\"dbo\".\"{FullNameTable(TableNameEnum.Branch)}\" " +
$"WHERE " +
$"\"TenantId\" = '@TENANTID' " + // 🔹 Bu form doğru — Replace hedefi bu.
$"\"TenantId\" = '@TENANTID' " + // 🔹 Bu form doğru — Replace hedefi bu.
$"AND \"IsDeleted\" = 'false' " +
$"AND \"Id\" IN ( " +
$"SELECT \"BranchId\" " +
$"FROM \"{FullNameTable(TableNameEnum.BranchUsers)}\" " +
$"WHERE \"UserId\" = '@USERID' " + // 🔹 Bu da doğru.
$"WHERE \"UserId\" = '@USERID' " + // 🔹 Bu da doğru.
$") " +
$"ORDER BY \"Name\";";

View file

@ -12,5 +12,5 @@ public class UomDto : AuditedEntityDto<Guid>
public bool IsActive { get; set; }
public decimal Rounding { get; set; }
public Guid UomCategoryId { get; set; }
public string UomCategoryName { get; set; } // Listelemede gösterim için opsiyonel
public string UomCategoryName { get; set; } // Listelemede gösterim için opsiyonel
}

View file

@ -47,7 +47,7 @@ public class AuditLogAppService
foreach (var item in auditLogList)
{
var dto = await MapToGetListOutputDtoAsync(item);
dto.EntityChangeCount = item.EntityChanges?.Count ?? 0; // null kontrolü artık burada güvenli
dto.EntityChangeCount = item.EntityChanges?.Count ?? 0; // null kontrolü artık burada güvenli
entityDtos.Add(dto);
}

View file

@ -97,7 +97,7 @@ public class BlogAppService : PlatformAppService, IBlogAppService
await _postRepository.UpdateAsync(post);
return await GetPostAsync(post.Id); // ✅ DTO dönülüyor
return await GetPostAsync(post.Id); // ✅ DTO dönülüyor
}
public async Task DeletePostAsync(Guid id)

View file

@ -59,7 +59,7 @@ public class CrudEndpointGenerateAppService : CrudAppService<
throw new Exception($"Entity with ID {entityId} not found");
}
// Migration kontrolü
// Migration kontrolü
var migrationQueryable = await _migrationRepository.GetQueryableAsync();
var migration = await migrationQueryable
.Where(x => x.EntityId == entityId && x.Status == "applied")
@ -70,7 +70,7 @@ public class CrudEndpointGenerateAppService : CrudAppService<
throw new Exception($"No applied migration found for entity {entity.Name}. Please apply migration first.");
}
// CRUD endpointleri oluÅŸtur
// CRUD endpointleri oluştur
var endpoints = new List<CrudEndpoint>();
var entityName = entity.Name;
var entityDisplayName = entity.DisplayName;
@ -130,7 +130,7 @@ public class CrudEndpointGenerateAppService : CrudAppService<
CsharpCode = GenerateDeleteCode(entityName, entityDisplayName)
});
// Var olanları sil
// Var olanları sil
var existingEndpoints = await _endpointRepository
.GetListAsync(x => x.EntityId == entityId);
@ -139,7 +139,7 @@ public class CrudEndpointGenerateAppService : CrudAppService<
// Yeni endpointleri ekle
await _endpointRepository.InsertManyAsync(endpoints, autoSave: true);
// Entity endpoint durumu güncelle
// Entity endpoint durumu güncelle
entity.EndpointStatus = "applied";
await _entityRepository.UpdateAsync(entity, autoSave: true);

View file

@ -189,7 +189,7 @@ public class CustomEntityAppService : CrudAppService<
public override async Task<CustomEntityDto> CreateAsync(CreateUpdateCustomEntityDto input)
{
// Entity oluÅŸtur
// Entity oluştur
var entity = new CustomEntity
{
Menu = input.Menu,
@ -203,7 +203,7 @@ public class CustomEntityAppService : CrudAppService<
MigrationStatus = "pending"
};
// Fields ekle - sıralama ile
// Fields ekle - sıralama ile
for (int i = 0; i < input.Fields.Count; i++)
{
var fieldDto = input.Fields[i];
@ -255,10 +255,10 @@ public class CustomEntityAppService : CrudAppService<
public override async Task DeleteAsync(Guid id)
{
// İlgili entity'nin var olup olmadığını kontrol et
// İlgili entity'nin var olup olmadığını kontrol et
var entity = await _repository.GetAsync(id);
// İlgili ApiMigration kayıtlarını sil
// İlgili ApiMigration kayıtlarını sil
var relatedMigrations = await _migrationRepository.GetListAsync(m => m.EntityId == id);
if (relatedMigrations.Any())
{

View file

@ -36,7 +36,7 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
}
catch (Exception ex)
{
Logger.LogError(ex, "Test compile sırasında hata. Tenant: {TenantId}", CurrentTenant.Id);
Logger.LogError(ex, "Test compile sırasında hata. Tenant: {TenantId}", CurrentTenant.Id);
throw;
}
}
@ -46,7 +46,7 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
{
try
{
// Önce kodu test compile et
// Önce kodu test compile et
var compileResult = await _compiler.CompileAndValidateAsync(request.Code, CurrentTenant.Id);
if (!compileResult.Success)
{
@ -57,7 +57,7 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
};
}
// Aynı isimde AppService var mı kontrol et
// Aynı isimde AppService var mı kontrol et
var existingService = await _dynamicAppServiceRepository
.FirstOrDefaultAsync(x => x.Name == request.Name && x.TenantId == CurrentTenant.Id);
@ -65,7 +65,7 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
if (existingService != null)
{
// Mevcut servisi güncelle
// Mevcut servisi güncelle
existingService.UpdateCode(request.Code);
existingService.DisplayName = request.DisplayName;
existingService.Description = request.Description;
@ -116,7 +116,7 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
}
else
{
// Derleme hatası durumunu kaydet
// Derleme hatası durumunu kaydet
appService.MarkCompilationError(loadResult.ErrorMessage);
await _dynamicAppServiceRepository.UpdateAsync(appService);
@ -130,13 +130,13 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
}
catch (Exception ex)
{
Logger.LogError(ex, "AppService yayınlama sırasında hata. Ad: {Name}, Tenant: {TenantId}",
Logger.LogError(ex, "AppService yayınlama sırasında hata. Ad: {Name}, Tenant: {TenantId}",
request.Name, CurrentTenant.Id);
return new PublishResultDto
{
Success = false,
ErrorMessage = $"Yayınlama sırasında beklenmeyen hata: {ex.Message}"
ErrorMessage = $"Yayınlama sırasında beklenmeyen hata: {ex.Message}"
};
}
}
@ -148,7 +148,7 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
var queryable = await _dynamicAppServiceRepository.GetQueryableAsync();
// Tenant filtresi otomatik uygulanır (IMultiTenant)
// Tenant filtresi otomatik uygulanır (IMultiTenant)
var query = queryable.WhereIf(!string.IsNullOrEmpty(input.Sorting),
x => x.CreationTime.ToString().Contains(input.Sorting ?? ""));
@ -177,8 +177,8 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
{
var appService = await _dynamicAppServiceRepository.GetAsync(id);
// TODO: Runtime'dan assembly'yi kaldırma işlemi
// (AssemblyLoadContext.Unload() çağrısı)
// TODO: Runtime'dan assembly'yi kaldırma işlemi
// (AssemblyLoadContext.Unload() çağrısı)
await _dynamicAppServiceRepository.DeleteAsync(id);
}
@ -205,7 +205,7 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
{
try
{
// Service.Name üzerinden assembly adı oluştur
// Service.Name üzerinden assembly adı oluştur
var assemblyName = $"{service.Name}_{service.Version}";
var result = await _compiler.CompileAndRegisterForTenantAsync(
CurrentTenant.Id ?? Guid.Empty,
@ -226,7 +226,7 @@ public class DynamicAppServiceAppService : PlatformAppService, IDynamicServiceAp
catch (Exception ex)
{
errorCount++;
Logger.LogError(ex, "AppService yeniden yükleme hatası. ID: {Id}", service.Id);
Logger.LogError(ex, "AppService yeniden yükleme hatası. ID: {Id}", service.Id);
service.MarkCompilationError(ex.Message);
await _dynamicAppServiceRepository.UpdateAsync(service);

View file

@ -22,13 +22,13 @@ public class DynamicServiceCompiler : ITransientDependency
{
private readonly ILogger<DynamicServiceCompiler> _logger;
// Tenant bazlı yüklenmiş assembly'leri takip etmek için
// Tenant bazlı yüklenmiş assembly'leri takip etmek için
private static readonly ConcurrentDictionary<Guid, List<Assembly>> _tenantAssemblies = new();
// Assembly kaydı için delegate
// Assembly kaydıin delegate
public static Action<Guid, Assembly, string>? NotifyAssemblyRegistration { get; set; }
// Güvenlik için yasaklı namespace'ler
// Güvenlik için yasaklı namespace'ler
private static readonly string[] ForbiddenNamespaces = {
"System.IO",
"System.Diagnostics",
@ -41,7 +41,7 @@ public class DynamicServiceCompiler : ITransientDependency
"System.Net.NetworkInformation"
};
// Güvenlik için yasaklı sınıflar/metotlar
// Güvenlik için yasaklı sınıflar/metotlar
private static readonly string[] ForbiddenTypes = {
"Process",
"ProcessStartInfo",
@ -65,7 +65,7 @@ public class DynamicServiceCompiler : ITransientDependency
}
/// <summary>
/// Kodu derler ve validate eder, ancak assembly yüklemez
/// Kodu derler ve validate eder, ancak assembly yüklemez
/// </summary>
public async Task<CompileResultDto> CompileAndValidateAsync(string code, Guid? tenantId = null)
{
@ -73,7 +73,7 @@ public class DynamicServiceCompiler : ITransientDependency
try
{
// Güvenlik kontrolü
// Güvenlik kontrolü
var securityCheck = ValidateCodeSecurity(code);
if (!securityCheck.Success)
{
@ -96,7 +96,7 @@ public class DynamicServiceCompiler : ITransientDependency
Warnings = new List<string>()
};
// Hataları ve uyarıları topla
// Hataları ve uyarıları topla
foreach (var diagnostic in emitResult.Diagnostics)
{
var error = new CompilationErrorDto
@ -122,10 +122,10 @@ public class DynamicServiceCompiler : ITransientDependency
if (!result.Success)
{
result.ErrorMessage = $"Derleme {result.Errors.Count} hata ile başarısız oldu.";
result.ErrorMessage = $"Derleme {result.Errors.Count} hata ile başarısız oldu.";
}
_logger.LogInformation("Kod derlemesi tamamlandı. Başarılı: {Success}, Süre: {Time}ms, Hata sayısı: {ErrorCount}",
_logger.LogInformation("Kod derlemesi tamamlandı. Başarılı: {Success}, Süre: {Time}ms, Hata sayısı: {ErrorCount}",
result.Success, stopwatch.ElapsedMilliseconds, result.Errors?.Count ?? 0);
return result;
@ -133,12 +133,12 @@ public class DynamicServiceCompiler : ITransientDependency
catch (Exception ex)
{
stopwatch.Stop();
_logger.LogError(ex, "Kod derlemesi sırasında beklenmeyen hata");
_logger.LogError(ex, "Kod derlemesi sırasında beklenmeyen hata");
return new CompileResultDto
{
Success = false,
ErrorMessage = $"Derleme sırasında hata: {ex.Message}",
ErrorMessage = $"Derleme sırasında hata: {ex.Message}",
CompilationTimeMs = stopwatch.ElapsedMilliseconds,
Errors = new List<CompilationErrorDto>()
};
@ -146,20 +146,20 @@ public class DynamicServiceCompiler : ITransientDependency
}
/// <summary>
/// Kodu derler ve belirtilen tenant için assembly yükler
/// Kodu derler ve belirtilen tenant için assembly yükler
/// </summary>
public async Task<CompileResultDto> CompileAndRegisterForTenantAsync(Guid tenantId, string code, string assemblyName)
{
try
{
// Önce validate et
// Önce validate et
var validateResult = await CompileAndValidateAsync(code, tenantId);
if (!validateResult.Success)
{
return validateResult;
}
// Assembly oluÅŸtur
// Assembly oluştur
var compilation = CreateCompilation(code, assemblyName);
using var ms = new MemoryStream();
@ -172,7 +172,7 @@ public class DynamicServiceCompiler : ITransientDependency
ms.Seek(0, SeekOrigin.Begin);
// Tenant'a özel assembly load context
// Tenant'a özel assembly load context
var contextName = $"Tenant_{tenantId}_Context";
var loadContext = new AssemblyLoadContext(contextName, isCollectible: true);
@ -197,25 +197,25 @@ public class DynamicServiceCompiler : ITransientDependency
}
catch (Exception ex)
{
_logger.LogError(ex, "Assembly yükleme sırasında hata. Tenant: {TenantId}", tenantId);
_logger.LogError(ex, "Assembly yükleme sırasında hata. Tenant: {TenantId}", tenantId);
return new CompileResultDto
{
Success = false,
ErrorMessage = $"Assembly yükleme hatası: {ex.Message}",
ErrorMessage = $"Assembly yükleme hatası: {ex.Message}",
Errors = new List<CompilationErrorDto>()
};
}
}
/// <summary>
/// Kod güvenlik kontrolü
/// Kod güvenlik kontrolü
/// </summary>
private CompileResultDto ValidateCodeSecurity(string code)
{
var errors = new List<CompilationErrorDto>();
// Yasaklı namespace kontrolü
// Yasaklı namespace kontrolü
foreach (var forbiddenNs in ForbiddenNamespaces)
{
if (code.Contains($"using {forbiddenNs}") || code.Contains($"{forbiddenNs}."))
@ -223,7 +223,7 @@ public class DynamicServiceCompiler : ITransientDependency
errors.Add(new CompilationErrorDto
{
Code = "SECURITY001",
Message = $"Güvenlik nedeniyle '{forbiddenNs}' namespace'i kullanılamaz",
Message = $"Güvenlik nedeniyle '{forbiddenNs}' namespace'i kullanılamaz",
Severity = "Error",
Line = GetLineNumber(code, forbiddenNs),
Column = 1
@ -231,7 +231,7 @@ public class DynamicServiceCompiler : ITransientDependency
}
}
// Yasaklı tip kontrolü
// Yasaklı tip kontrolü
foreach (var forbiddenType in ForbiddenTypes)
{
if (code.Contains(forbiddenType))
@ -239,7 +239,7 @@ public class DynamicServiceCompiler : ITransientDependency
errors.Add(new CompilationErrorDto
{
Code = "SECURITY002",
Message = $"Güvenlik nedeniyle '{forbiddenType}' tipi kullanılamaz",
Message = $"Güvenlik nedeniyle '{forbiddenType}' tipi kullanılamaz",
Severity = "Error",
Line = GetLineNumber(code, forbiddenType),
Column = 1
@ -250,13 +250,13 @@ public class DynamicServiceCompiler : ITransientDependency
return new CompileResultDto
{
Success = errors.Count == 0,
ErrorMessage = errors.Count > 0 ? "Güvenlik kontrolü başarısız" : null,
ErrorMessage = errors.Count > 0 ? "Güvenlik kontrolü başarısız" : null,
Errors = errors
};
}
/// <summary>
/// Roslyn compilation oluÅŸturur
/// Roslyn compilation oluşturur
/// </summary>
private CSharpCompilation CreateCompilation(string code, string assemblyName)
{
@ -271,12 +271,12 @@ public class DynamicServiceCompiler : ITransientDependency
new CSharpCompilationOptions(
OutputKind.DynamicallyLinkedLibrary,
optimizationLevel: OptimizationLevel.Debug,
allowUnsafe: false // Güvenlik için unsafe kod yasağı
allowUnsafe: false // Güvenlik için unsafe kod yasağı
));
}
/// <summary>
/// Varsayılan assembly referanslarını döner
/// Varsayılan assembly referanslarınıner
/// </summary>
private List<MetadataReference> GetDefaultReferences()
{
@ -303,11 +303,11 @@ public class DynamicServiceCompiler : ITransientDependency
}
catch (Exception ex)
{
_logger.LogWarning(ex, "Assembly referansı eklenemedi: {Assembly}", assembly.FullName);
_logger.LogWarning(ex, "Assembly referansı eklenemedi: {Assembly}", assembly.FullName);
}
}
// ABP Framework referansları
// ABP Framework referansları
try
{
var abpAssemblies = AppDomain.CurrentDomain.GetAssemblies()
@ -331,7 +331,7 @@ public class DynamicServiceCompiler : ITransientDependency
}
/// <summary>
/// Bir tipin ApplicationService olup olmadığını kontrol eder
/// Bir tipin ApplicationService olup olmadığını kontrol eder
/// </summary>
private bool IsApplicationServiceType(Type type)
{
@ -350,7 +350,7 @@ public class DynamicServiceCompiler : ITransientDependency
}
/// <summary>
/// Tipin ApplicationService base class'ından türediğini kontrol eder
/// Tipin ApplicationService base class'ından türediğini kontrol eder
/// </summary>
private bool HasApplicationServiceBase(Type type)
{
@ -367,7 +367,7 @@ public class DynamicServiceCompiler : ITransientDependency
}
/// <summary>
/// Kod içinde belirli bir string'in satır numarasını bulur
/// Kod içinde belirli bir string'in satır numarasını bulur
/// </summary>
private int GetLineNumber(string code, string searchText)
{
@ -383,7 +383,7 @@ public class DynamicServiceCompiler : ITransientDependency
}
/// <summary>
/// Assembly içindeki ApplicationService'lerden endpoint listesini çıkarır
/// Assembly içindeki ApplicationService'lerden endpoint listesini çıkarır
/// </summary>
public List<string> ExtractEndpointsFromAssembly(Assembly assembly, string serviceName)
{
@ -391,14 +391,14 @@ public class DynamicServiceCompiler : ITransientDependency
try
{
// Assembly içindeki ApplicationService türlerini bul
// Assembly içindeki ApplicationService türlerini bul
var appServiceTypes = assembly.GetTypes()
.Where(t => IsApplicationServiceType(t) && t.Name == serviceName)
.ToList();
foreach (var serviceType in appServiceTypes)
{
// Controller adını oluştur (ABP convention: CustomerAppService -> Customer)
// Controller adını oluştur (ABP convention: CustomerAppService -> Customer)
var controllerName = serviceType.Name;
if (controllerName.EndsWith("AppService"))
{
@ -412,14 +412,14 @@ public class DynamicServiceCompiler : ITransientDependency
// ABP kebab-case convention (DynamicCustomer -> dynamic-customer)
var routePrefix = ToKebabCase(controllerName);
// Public method'ları bul (async method'lar genelde Async suffix'i ile biter)
// Public method'ları bul (async method'lar genelde Async suffix'i ile biter)
var methods = serviceType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
.Where(m => !m.IsSpecialName) // Property getter/setter'ları hariç tut
.Where(m => !m.IsSpecialName) // Property getter/setter'ları hariç tut
.ToList();
foreach (var method in methods)
{
// Method adından Async suffix'ini kaldır ve kebab-case'e çevir
// Method adından Async suffix'ini kaldır ve kebab-case'e çevir
var methodName = method.Name;
if (methodName.EndsWith("Async"))
{
@ -428,10 +428,10 @@ public class DynamicServiceCompiler : ITransientDependency
var methodRoute = ToKebabCase(methodName);
// HTTP verb'ü belirle (basit heuristic)
// HTTP verb'ü belirle (basit heuristic)
var httpVerb = DetermineHttpVerb(method);
// Endpoint'i oluÅŸtur
// Endpoint'i oluştur
var endpoint = $"{httpVerb} /api/app/{routePrefix}/{methodRoute}";
endpoints.Add(endpoint);
}
@ -439,14 +439,14 @@ public class DynamicServiceCompiler : ITransientDependency
}
catch (Exception ex)
{
_logger.LogError(ex, "Endpoint çıkarma sırasında hata");
_logger.LogError(ex, "Endpoint çıkarma sırasında hata");
}
return endpoints;
}
/// <summary>
/// PascalCase'i kebab-case'e çevirir (DynamicCustomer -> dynamic-customer)
/// PascalCase'i kebab-case'e çevirir (DynamicCustomer -> dynamic-customer)
/// </summary>
private string ToKebabCase(string value)
{
@ -461,7 +461,7 @@ public class DynamicServiceCompiler : ITransientDependency
}
/// <summary>
/// Method'un HTTP verb'ünü belirler (ABP convention'a göre)
/// Method'un HTTP verb'ünü belirler (ABP convention'a göre)
/// </summary>
private string DetermineHttpVerb(MethodInfo method)
{

View file

@ -55,13 +55,13 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
private string EncodePathAsId(string path)
{
// Path'deki '/' karakterlerini '|' ile değiştir URL-safe hale getirmek için
// Path'deki '/' karakterlerini '|' ile değiştir URL-safe hale getirmek için
return path.Replace("/", "|");
}
private string DecodeIdAsPath(string id)
{
// ID'deki '|' karakterlerini '/' ile geri deÄŸiÅŸtir
// ID'deki '|' karakterlerini '/' ile geri değiştir
return id.Replace("|", "/");
}
@ -127,14 +127,14 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
return items;
}
// Klasörleri listele
// Klasörleri listele
var directories = Directory.GetDirectories(fullPath);
foreach (var dir in directories)
{
var dirInfo = new DirectoryInfo(dir);
var relativePath = string.IsNullOrEmpty(folderPath) ? dirInfo.Name : $"{folderPath}/{dirInfo.Name}";
// Klasör içindeki öğe sayısını hesapla
// Klasör içindeki öğe sayısını hesapla
var childCount = 0;
try
{
@ -163,7 +163,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
});
}
// Dosyaları listele
// Dosyaları listele
var files = Directory.GetFiles(fullPath);
foreach (var file in files)
{
@ -270,19 +270,19 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
var folderPath = Path.Combine(parentPath, input.Name);
// Klasör zaten var mı kontrol et
// Klasör zaten var mı kontrol et
if (Directory.Exists(folderPath))
{
throw new UserFriendlyException("A folder with this name already exists");
}
// Dosya ile aynı isimde bir şey var mı kontrol et
// Dosya ile aynı isimde bir şey var mı kontrol et
if (File.Exists(folderPath))
{
throw new UserFriendlyException("A file with this name already exists");
}
// Klasörü oluştur
// Klasörü oluştur
Directory.CreateDirectory(folderPath);
var newFolderPath = string.IsNullOrEmpty(decodedParentId) ? input.Name : $"{decodedParentId}/{input.Name}";
@ -350,7 +350,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
fullCdnPath = Path.Combine(fullCdnPath, decodedParentId);
}
// Dizini oluÅŸtur
// Dizini oluştur
Directory.CreateDirectory(fullCdnPath);
var fullFilePath = Path.Combine(fullCdnPath, uniqueFileName);
@ -358,7 +358,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
long fileSize;
if (input.Files != null && input.Files.Length > 0)
{
// İlk dosyayı kullan (tek dosya upload için)
// İlk dosyayı kullan (tek dosya upload için)
var file = input.Files[0];
using var stream = file.GetStream();
using var fileStream = File.Create(fullFilePath);
@ -388,7 +388,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
TenantId = _currentTenant.Id?.ToString()
};
// File system'e kaydedildi, index güncellemeye gerek yok
// File system'e kaydedildi, index güncellemeye gerek yok
return new FileItemDto
{
Id = metadata.Id,
@ -551,7 +551,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
if (Directory.Exists(fullPath))
{
// Klasör sil (içindeki tüm dosyalar ile birlikte)
// Klasör sil (içindeki tüm dosyalar ile birlikte)
Directory.Delete(fullPath, recursive: true);
}
else if (File.Exists(fullPath))
@ -593,7 +593,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
if (Directory.Exists(fullPath))
{
// Klasör sil (içindeki tüm dosyalar ile birlikte)
// Klasör sil (içindeki tüm dosyalar ile birlikte)
Directory.Delete(fullPath, recursive: true);
}
else if (File.Exists(fullPath))

View file

@ -16,5 +16,5 @@ public class FileMetadata
public string ParentId { get; set; } = string.Empty;
public bool IsReadOnly { get; set; }
public string? TenantId { get; set; }
public int? ChildCount { get; set; } // Klasörler için öğe sayısı
public int? ChildCount { get; set; } // Klasörler için öğe sayısı
}

View file

@ -436,7 +436,7 @@ public class ForumAppService : PlatformAppService, IForumAppService
topic.ReplyCount = Math.Max(0, topic.ReplyCount - 1);
category.PostCount = Math.Max(0, category.PostCount ?? 0 - 1);
// 🔁 Last post değişti mi kontrol et
// 🔁 Last post değişti mi kontrol et
var latestPost = await _postRepository
.GetQueryableAsync()
.ContinueWith(q => q.Result
@ -459,7 +459,7 @@ public class ForumAppService : PlatformAppService, IForumAppService
}
else
{
// Tüm postlar silindiyse
// Tüm postlar silindiyse
topic.LastPostId = null;
topic.LastPostDate = null;
topic.LastPostUserId = null;
@ -496,7 +496,7 @@ public class ForumAppService : PlatformAppService, IForumAppService
post.LikeCount = Math.Max(0, post.LikeCount ?? 0 - 1);
await _postRepository.UpdateAsync(post);
// 🔽 Topic'in toplam beğeni sayısını güncelle
// 🔽 Topic'in toplam beğeni sayısınıncelle
var topic = await _topicRepository.GetAsync(post.TopicId);
var postsInTopic = await _postRepository.GetListAsync(p => p.TopicId == topic.Id);

View file

@ -147,14 +147,14 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
private async Task<List<MealDto>> GetMealsAsync()
{
// Bu haftanın başlangıç ve bitiş tarihlerini hesapla
// Bu haftanın başlangıç ve bitiş tarihlerini hesapla
var today = DateTime.Now.Date;
var dayOfWeek = (int)today.DayOfWeek;
// Pazartesi'yi haftanın başı olarak kabul ediyoruz (ISO 8601)
// Pazartesi'yi haftanın başı olarak kabul ediyoruz (ISO 8601)
var weekStart = today.AddDays(-(dayOfWeek == 0 ? 6 : dayOfWeek - 1));
var weekEnd = weekStart.AddDays(6);
// Sadece bu haftanın yemeklerini getir
// Sadece bu haftanın yemeklerini getir
var meals = await _mealRepository.GetListAsync(m =>
m.Date >= weekStart && m.Date <= weekEnd);
@ -192,7 +192,7 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
{
var dto = ObjectMapper.Map<ShuttleRoute, ShuttleRouteDto>(shuttleRoute);
// Route string'ini array'e çevir (pipe ile ayrılmış)
// Route string'ini array'e çevir (pipe ile ayrılmış)
if (!string.IsNullOrEmpty(shuttleRoute.Route))
{
dto.Route = shuttleRoute.Route
@ -219,14 +219,14 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
var announcementDtos = new List<AnnouncementDto>();
// Tüm departmanları bir kez çek (performans için)
// Tüm departmanları bir kez çek (performans için)
var allDepartments = await _departmentRepository.GetListAsync();
foreach (var announcement in announcements)
{
var dto = ObjectMapper.Map<Announcement, AnnouncementDto>(announcement);
// Departments string'ini array'e çevir (pipe ile ayrılmış ID'ler)
// Departments string'ini array'e çevir (pipe ile ayrılmış ID'ler)
if (!string.IsNullOrEmpty(announcement.Departments))
{
var departmentIds = announcement.Departments
@ -234,7 +234,7 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
.Select(d => d.Trim())
.ToArray();
// ID'leri Department Name'lere çevir
// ID'leri Department Name'lere çevir
var departmentNames = new List<string>();
foreach (var deptId in departmentIds)
{
@ -268,28 +268,28 @@ public class IntranetAppService : PlatformAppService, IIntranetAppService
var today = DateTime.Today;
var oneMonthAgo = today.AddMonths(-1);
// Son 1 ay içerisindeki kayıtlar
// Son 1 ay içerisindeki kayıtlar
var lastMonthExpenses = queryable
.Where(a => a.RequestDate >= oneMonthAgo && a.RequestDate <= today);
// Son 1 aydaki toplam talep miktarı
// Son 1 aydaki toplam talep miktarı
var totalRequested = lastMonthExpenses.Sum(a => a.Amount);
// Son 1 aydaki onaylanan harcamaların toplamı
// Son 1 aydaki onaylanan harcamaların toplamı
var totalApproved = lastMonthExpenses
.Where(a => a.Status == "approved")
.Sum(a => a.Amount);
// Son 5 kayıt
// Son 5 kayıt
var last5Expenses = queryable
.OrderByDescending(a => a.RequestDate)
.Take(5)
.ToList();
// Map iÅŸlemleri
// Map işlemleri
var last5Dtos = ObjectMapper.Map<List<Expense>, List<ExpenseDto>>(last5Expenses);
// Dönüş DTO'su
// Dönüş DTO'su
return new ExpensesDto
{
TotalRequested = totalRequested,

View file

@ -52,7 +52,7 @@ public class ListFormImportAppService : PlatformAppService, IImportAppService
if (string.IsNullOrWhiteSpace(file.FileName))
{
throw new UserFriendlyException("Geçersiz dosya adı.");
throw new UserFriendlyException("Geçersiz dosya adı.");
}
// Uygunsuz karakterleri temizle
@ -77,7 +77,7 @@ public class ListFormImportAppService : PlatformAppService, IImportAppService
}
catch (Exception ex)
{
// Upload başarısız olursa status'ı failed yap
// Upload başarısız olursa status'ı failed yap
session.Status = "failed";
Logger.LogError(ex, "File upload failed for session {SessionId}, blob: {BlobName}", session.Id, blobName);
}

View file

@ -170,7 +170,7 @@ public class ListFormWizardAppService(
var langTextEn = await repoLangText.FirstOrDefaultAsync(a => a.ResourceName == res && a.Key == langKey.Key && a.CultureName == cultureNameDefault)
?? await repoLangText.InsertAsync(new LanguageText { ResourceName = res, Key = langKey.Key, CultureName = cultureNameDefault, Value = textEn });
var langTextTitleTr = await repoLangText.FirstOrDefaultAsync(a => a.ResourceName == res && a.Key == langKey.Key && a.CultureName == LanguageCodes.Tr)
?? await repoLangText.InsertAsync(new LanguageText { ResourceName = res, Key = langKey.Key, CultureName = LanguageCodes.Tr, Value = textTr });
?? await repoLangText.InsertAsync(new LanguageText { ResourceName = res, Key = langKey.Key, CultureName = LanguageCodes.En, Value = textTr });
return langKey;
}

View file

@ -13,8 +13,8 @@ namespace Erp.Platform.PermissionManagement;
public class PlatformGetPermissionListResultDto : GetPermissionListResultDto
{
// ABP’nin orijinalinde PermissionGroupDto kullanıyor,
// biz de kendi alt tipimizi yaratıyoruz.
// ABP’nin orijinalinde PermissionGroupDto kullanıyor,
// biz de kendi alt tipimizi yaratıyoruz.
public new List<PlatformPermissionGroupDto> Groups { get; set; } = new();
}

View file

@ -81,8 +81,8 @@ public class PublicAppService : PlatformAppService
bodyBuilder.AppendLine($"E-Posta: {input.Email}");
bodyBuilder.AppendLine($"Telefon: {input.PhoneNumber}");
bodyBuilder.AppendLine($"Adres: {input.Address}");
bodyBuilder.AppendLine($"Şube Sayısı: {input.NumberOfBranches}");
bodyBuilder.AppendLine($"Kullanıcı Sayısı: {input.NumberOfUsers}");
bodyBuilder.AppendLine($"Şube Sayısı: {input.NumberOfBranches}");
bodyBuilder.AppendLine($"Kullanıcı Sayısı: {input.NumberOfUsers}");
bodyBuilder.AppendLine($"Mesaj: {input.Message}");
var SenderName = await _settingProvider.GetOrNullAsync(SeedConsts.AbpSettings.Mailing.Default.DefaultFromDisplayName);
@ -116,17 +116,17 @@ public class PublicAppService : PlatformAppService
postQuery = postQuery.Where(p => p.CategoryId == input.CategoryId.Value);
}
// Toplam adet (sayfalama öncesi)
// Toplam adet (sayfalama öncesi)
var totalCount = await AsyncExecuter.CountAsync(postQuery);
// Sayfalama + sıralama
// Sayfalama + sıralama
var pagedPosts = await AsyncExecuter.ToListAsync(
postQuery
.OrderByDescending(p => p.CreationTime)
.PageBy(input)
);
// Sayfadaki kategori kayıtları
// Sayfadaki kategori kayıtları
var categoryIds = pagedPosts.Select(x => x.CategoryId).Distinct().ToList();
var pageCategories = await _categoryRepository.GetListAsync(x => categoryIds.Contains(x.Id));
var categoryDict = pageCategories.ToDictionary(x => x.Id, x => x);

View file

@ -42,7 +42,7 @@ public class ReportAppService : PlatformAppService, IReportAppService
public async Task<PagedResultDto<ReportTemplateDto>> GetTemplatesAsync(GetReportTemplatesInput input)
{
// IQueryable başlat - Parameters'ı include et
// IQueryable başlat - Parameters'ı include et
var query = await _reportTemplateRepository.GetQueryableAsync();
query = query.Include(x => x.Parameters);
@ -60,10 +60,10 @@ public class ReportAppService : PlatformAppService, IReportAppService
query = query.Where(x => x.CategoryId == input.CategoryId);
}
// Toplam kayıt sayısı
// Toplam kayıt sayısı
var totalCount = await AsyncExecuter.CountAsync(query);
// Sıralama (ABP default olarak sorting null ise Id'ye göre sıralar)
// Sıralama (ABP default olarak sorting null ise Id'ye göre sıralar)
query = query.OrderBy(input.Sorting ?? nameof(ReportTemplate.Name));
// Sayfalama
@ -73,7 +73,7 @@ public class ReportAppService : PlatformAppService, IReportAppService
.Take(input.MaxResultCount)
);
// DTO dönüşümü
// DTO dönüşümü
var templateDtos = templates.Select(MapToReportTemplateDto).ToList();
return new PagedResultDto<ReportTemplateDto>(
@ -134,7 +134,7 @@ public class ReportAppService : PlatformAppService, IReportAppService
public async Task<ReportTemplateDto> UpdateTemplateAsync(Guid id, UpdateReportTemplateDto input)
{
// 1) Şablonu getir ve alanlarını güncelle
// 1) Şablonu getir ve alanlarınıncelle
var template = await _reportTemplateRepository.GetAsync(id);
template.Name = input.Name;
@ -143,27 +143,27 @@ public class ReportAppService : PlatformAppService, IReportAppService
template.CategoryId = input.CategoryId;
template.Tags = JsonSerializer.Serialize(input.Tags ?? []);
// Şablonu hemen persist et (audit alanları için de iyi olur)
// Şablonu hemen persist et (audit alanlarıin de iyi olur)
await _reportTemplateRepository.UpdateAsync(template, autoSave: true);
// 2) Parametrelerde upsert + artıklarını sil
// 2) Parametrelerde upsert + artıklarını sil
var existingParams = await _reportParameterRepository.GetListAsync(p => p.TemplateId == id);
var existingById = existingParams.ToDictionary(p => p.Id, p => p);
var inputParams = input.Parameters ?? new List<UpdateReportParameterDto>();
// Id'si olan/olmayan diye ayır
// Id'si olan/olmayan diye ayır
var withId = inputParams.Where(x => x.Id.HasValue).ToList();
var withoutId = inputParams.Where(x => !x.Id.HasValue).ToList();
// 2.a) Id'si olanları güncelle (varsa) ya da ekle (yoksa)
// 2.a) Id'si olanlarıncelle (varsa) ya da ekle (yoksa)
foreach (var dto in withId)
{
var pid = dto.Id!.Value;
if (existingById.TryGetValue(pid, out var entity))
{
// Güncelle
// Güncelle
entity.Name = dto.Name;
entity.Placeholder = dto.Placeholder;
entity.Type = dto.Type;
@ -172,11 +172,11 @@ public class ReportAppService : PlatformAppService, IReportAppService
entity.Description = dto.Description;
await _reportParameterRepository.UpdateAsync(entity);
existingById.Remove(pid); // kalanlar silinecek listesinde kalmasın
existingById.Remove(pid); // kalanlar silinecek listesinde kalmasın
}
else
{
// DB'de yoksa yeni ekle (istemci Id göndermiş olabilir)
// DB'de yoksa yeni ekle (istemci Id göndermiş olabilir)
var newParam = new ReportParameter(
pid,
template.Id,
@ -217,10 +217,10 @@ public class ReportAppService : PlatformAppService, IReportAppService
await _reportParameterRepository.DeleteAsync(leftover);
}
// 3) DeÄŸiÅŸiklikleri tek seferde kaydet
// 3) Değişiklikleri tek seferde kaydet
await CurrentUnitOfWork.SaveChangesAsync();
// 4) Güncel DTO'yu dön
// 4) Güncel DTO'yu dön
return await GetTemplateAsync(template.Id);
}
@ -234,7 +234,7 @@ public class ReportAppService : PlatformAppService, IReportAppService
{
var query = await _generatedReportRepository.GetQueryableAsync();
// Okuma senaryosu: tracking gerekmiyor + Template'ı eager load edelim
// Okuma senaryosu: tracking gerekmiyor + Template'ı eager load edelim
query = query.AsNoTracking()
.Include(x => x.ReportTemplate);
@ -252,12 +252,12 @@ public class ReportAppService : PlatformAppService, IReportAppService
query = query.Where(x => x.TemplateId == input.TemplateId.Value);
}
// Toplam kayıt
// Toplam kayıt
var totalCount = await AsyncExecuter.CountAsync(query);
// Sıralama
// Sıralama
if (!string.IsNullOrWhiteSpace(input.Sorting))
query = query.OrderBy(input.Sorting); // ör. "generatedAt DESC" veya "templateName"
query = query.OrderBy(input.Sorting); // ör. "generatedAt DESC" veya "templateName"
else
query = query.OrderByDescending(x => x.CreationTime);
@ -287,7 +287,7 @@ public class ReportAppService : PlatformAppService, IReportAppService
throw new ArgumentException("Template not found");
}
// HTML içeriğindeki parametreleri değiştir
// HTML içeriğindeki parametreleri değiştir
var generatedContent = template.HtmlContent;
foreach (var param in input.Parameters)
{

View file

@ -210,7 +210,7 @@ public class HostDataSeeder : IDataSeedContributor, ITransientDependency
{
var dbCtx = await _countryRepository.GetDbContextAsync();
// DB’de mevcut kodları set olarak al
// DB’de mevcut kodları set olarak al
var existingCodes = (await dbCtx.Set<CountryGroup>()
.Select(c => c.Name)
.ToListAsync())
@ -221,14 +221,14 @@ public class HostDataSeeder : IDataSeedContributor, ITransientDependency
using var fs = File.OpenRead(Path.Combine("Seeds", "CountryGroups.json"));
var buffer = new List<CountryGroup>(capacity: 1000);
var seenCodes = new HashSet<string>(); // JSON içindeki duplicate’leri yakalamak için
var seenCodes = new HashSet<string>(); // JSON içindeki duplicate’leri yakalamak için
await foreach (var item in JsonSerializer.DeserializeAsyncEnumerable<CountryGroupDto>(fs, options))
{
if (item == null) continue;
if (string.IsNullOrWhiteSpace(item.Name)) continue; // boş kodları atla
if (string.IsNullOrWhiteSpace(item.Name)) continue; // boş kodları atla
// hem DB’de hem JSON içinde duplicate engelle
// hem DB’de hem JSON içinde duplicate engelle
if (!seenCodes.Add(item.Name) || existingCodes.Contains(item.Name))
continue;
@ -263,7 +263,7 @@ public class HostDataSeeder : IDataSeedContributor, ITransientDependency
{
var dbCtx = await _countryRepository.GetDbContextAsync();
// DB’de mevcut kodları set olarak al
// DB’de mevcut kodları set olarak al
var existingCodes = (await dbCtx.Set<Country>()
.Select(c => c.Code)
.ToListAsync())
@ -274,14 +274,14 @@ public class HostDataSeeder : IDataSeedContributor, ITransientDependency
using var fs = File.OpenRead(Path.Combine("Seeds", "Countries.json"));
var buffer = new List<Country>(capacity: 1000);
var seenCodes = new HashSet<string>(); // JSON içindeki duplicate’leri yakalamak için
var seenCodes = new HashSet<string>(); // JSON içindeki duplicate’leri yakalamak için
await foreach (var item in JsonSerializer.DeserializeAsyncEnumerable<CountryDto>(fs, options))
{
if (item == null) continue;
if (string.IsNullOrWhiteSpace(item.Code)) continue; // boş kodları atla
if (string.IsNullOrWhiteSpace(item.Code)) continue; // boş kodları atla
// hem DB’de hem JSON içinde duplicate engelle
// hem DB’de hem JSON içinde duplicate engelle
if (!seenCodes.Add(item.Code) || existingCodes.Contains(item.Code))
continue;
@ -323,7 +323,7 @@ public class HostDataSeeder : IDataSeedContributor, ITransientDependency
{
var dbCtx = await _cityRepository.GetDbContextAsync();
// 1. Mevcut kayıtları çek (tek sorguda)
// 1. Mevcut kayıtları çek (tek sorguda)
var existingCities = await dbCtx.Set<City>()
.Select(d => new { d.Code })
.ToListAsync();
@ -346,7 +346,7 @@ public class HostDataSeeder : IDataSeedContributor, ITransientDependency
if (item == null) continue;
var key = $"{item.Country}.{item.Code}";
if (existingSet.Contains(key)) continue; // duplicate kontrolü
if (existingSet.Contains(key)) continue; // duplicate kontrolü
buffer.Add(new City(
Guid.NewGuid(),
@ -384,7 +384,7 @@ public class HostDataSeeder : IDataSeedContributor, ITransientDependency
{
var dbCtx = await _districtRepository.GetDbContextAsync();
// 1. Mevcut kayıtları çek (tek sorguda)
// 1. Mevcut kayıtları çek (tek sorguda)
var existingDistricts = await dbCtx.Set<District>()
.Select(d => new { d.Country, d.City, d.Name, d.Township, d.Street, d.ZipCode })
.ToListAsync();

View file

@ -9181,6 +9181,12 @@
"tr": "Sınıf Planlama",
"en": "Class Planning"
},
{
"resourceName": "Platform",
"key": "App.SupplyChain.PaymentTerm",
"tr": "Ödeme Koşulları",
"en": "Payment Terms"
},
{
"resourceName": "Platform",
"key": "App.SupplyChain.MaterialType",
@ -9201,7 +9207,19 @@
},
{
"resourceName": "Platform",
"key": "App.SupplyChain.Supplier",
"key": "App.SupplyChain.SupplyType",
"tr": "Tedarikçi Tipleri",
"en": "Supply Types"
},
{
"resourceName": "Platform",
"key": "App.SupplyChain.SupplyCardType",
"tr": "Tedarikçi Kart Tipleri",
"en": "Supply Card Types"
},
{
"resourceName": "Platform",
"key": "App.SupplyChain.Supply",
"tr": "Tedarikçiler",
"en": "Suppliers"
},

View file

@ -3985,7 +3985,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
PermissionJson = DefaultFieldPermissionJson(AppCodes.Definitions.WorkHour),
PivotSettingsJson = DefaultPivotSettingsJson
},
// Saat alanları
// Saat alanları
new() {
ListFormCode = listFormWorkHour.ListFormCode,
CultureName = LanguageCodes.En,
@ -4016,7 +4016,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
PivotSettingsJson = DefaultPivotSettingsJson,
EditorOptions = EditorOptionValues.TimeSpanOptions
},
// Günlük kolonlar
// Günlük kolonlar
new()
{
ListFormCode = listFormWorkHour.ListFormCode,

View file

@ -523,7 +523,7 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend
PivotSettingsJson = DefaultPivotSettingsJson
},
// ÃÄŸle Arası
// Öğle Arası
new()
{
ListFormCode = listFormSchedule.ListFormCode,
@ -570,7 +570,7 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend
PivotSettingsJson = DefaultPivotSettingsJson
},
// Günler
// Günler
new()
{
ListFormCode = listFormSchedule.ListFormCode,
@ -1524,7 +1524,7 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key="Seviye",Name="Seviye" },
new () { Key="Sınav Eğitimi",Name="Sınav Eğitimi" },
new () { Key="Sınav Eğitimi",Name="Sınav Eğitimi" },
}),
}),
ColumnCustomizationJson = DefaultColumnCustomizationJson,
@ -1915,8 +1915,8 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key="Ana",Name="Ana Öğretmen" },
new () { Key="Ek",Name="Ek Öğretmen" },
new () { Key="Ana",Name="Ana Öğretmen" },
new () { Key="Ek",Name="Ek Öğretmen" },
}),
}),
ColumnCustomizationJson = DefaultColumnCustomizationJson,
@ -1939,8 +1939,8 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key="Ana",Name="Ana Öğretmen" },
new () { Key="Ek",Name="Ek Öğretmen" },
new () { Key="Ana",Name="Ana Öğretmen" },
new () { Key="Ek",Name="Ek Öğretmen" },
}),
}),
ColumnCustomizationJson = DefaultColumnCustomizationJson,
@ -1963,8 +1963,8 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key="Ana",Name="Ana Öğretmen" },
new () { Key="Ek",Name="Ek Öğretmen" },
new () { Key="Ana",Name="Ana Öğretmen" },
new () { Key="Ek",Name="Ek Öğretmen" },
}),
}),
ColumnCustomizationJson = DefaultColumnCustomizationJson,
@ -1987,8 +1987,8 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key="Ana",Name="Ana Öğretmen" },
new () { Key="Ek",Name="Ek Öğretmen" },
new () { Key="Ana",Name="Ana Öğretmen" },
new () { Key="Ek",Name="Ek Öğretmen" },
}),
}),
ColumnCustomizationJson = DefaultColumnCustomizationJson,
@ -2370,13 +2370,13 @@ public class ListFormSeeder_Coordinator : IDataSeedContributor, ITransientDepend
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key= "multiple-choice", Name= "Çoktan Seçmeli" },
new () { Key= "fill-blank", Name= "BoÅŸluk Doldurma" },
new () { Key= "multiple-answer", Name= "Çok Yanıtlı"},
new () { Key= "matching", Name= "EÅŸleÅŸtirme" },
new () { Key= "ordering", Name= "Sıralama" },
new () { Key= "open-ended", Name= "Açık Uçlu" },
new () { Key= "true-false", Name= "Doğru-Yanlış" },
new () { Key= "multiple-choice", Name= "Çoktan Seçmeli" },
new () { Key= "fill-blank", Name= "Boşluk Doldurma" },
new () { Key= "multiple-answer", Name= "Çok Yanıtlı"},
new () { Key= "matching", Name= "Eşleştirme" },
new () { Key= "ordering", Name= "Sıralama" },
new () { Key= "open-ended", Name= "Açık Uçlu" },
new () { Key= "true-false", Name= "Doğru-Yanlış" },
new () { Key= "calculation", Name="Hesaplama" }
}),
}),

View file

@ -986,20 +986,20 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key= "⭐", Name= "⭐ Yıldız" },
new () { Key= "⭐", Name= "⭐ Yıldız" },
new () { Key= "🏆", Name= "🏆 Kupa" },
new () { Key= "🥇", Name= "🥇 Altın Madalya" },
new () { Key= "🥈", Name= "🥈 Gümüş Madalya" },
new () { Key= "🥇", Name= "🥇 Altın Madalya" },
new () { Key= "🥈", Name= "🥈 Gümüş Madalya" },
new () { Key= "🥉", Name= "🥉 Bronz Madalya" },
new () { Key= "👑", Name= "👑 Taç" },
new () { Key= "👑", Name= "👑 Taç" },
new () { Key= "💎", Name= "💎 Elmas" },
new () { Key= "💡", Name= "💡 Ampul" },
new () { Key= "🔥", Name= "🔥 Ateş" },
new () { Key= "⚡", Name= "⚡ Şimşek" },
new () { Key= "🔥", Name= "🔥 Ateş" },
new () { Key= "âš¡", Name= "âš¡ Şimşek" },
new () { Key= "🎯", Name= "🎯 Hedef" },
new () { Key= "📈", Name= "📈 Grafik" },
new () { Key= "🚀", Name= "🚀 Roket" },
new () { Key= "💪", Name= "💪 Güç" },
new () { Key= "💪", Name= "💪 Güç" },
new () { Key= "❤️", Name= "❤️ Kalp" }
}),
}),
@ -3167,8 +3167,8 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency
})
},
new() {
Hint = "Ödeme & Kesinti",
Text ="Ödeme & Kesinti",
Hint = "Ödeme & Kesinti",
Text ="Ödeme & Kesinti",
UrlTarget="_blank",
AuthName = AppCodes.Hr.Payroll + ".Update",
Url="/admin/list/list-employees/@Id"
@ -3263,14 +3263,14 @@ public class ListFormSeeder_Hr : IDataSeedContributor, ITransientDependency
new () { Key= 2, Name= "02-Şubat" },
new () { Key= 3, Name= "03-Mart"},
new () { Key= 4, Name= "04-Nisan" },
new () { Key= 5, Name= "05-Mayıs" },
new () { Key= 5, Name= "05-Mayıs" },
new () { Key= 6, Name= "06-Haziran" },
new () { Key= 7, Name= "07-Temmuz" },
new () { Key= 8, Name= "08-AÄŸustos" },
new () { Key= 9, Name= "09-Eylül" },
new () { Key= 8, Name= "08-Ağustos" },
new () { Key= 9, Name= "09-Eylül" },
new () { Key=10, Name= "10-Ekim" },
new () { Key=11, Name= "11-Kasım" },
new () { Key=12, Name= "12-Aralık" },
new () { Key=11, Name= "11-Kasım" },
new () { Key=12, Name= "12-Aralık" },
}),
}),
ValidationRuleJson = DefaultValidationRuleRequiredJson,

View file

@ -612,28 +612,28 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc
IsDeleted = false,
LookupJson = JsonSerializer.Serialize(new LookupDto
{
//TODO: Materials kısmında Query olarak getirmeli
//TODO: Materials kısmında Query olarak getirmeli
DataSourceType = UiLookupDataSourceTypeEnum.StaticData,
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key="Mercimek Çorbası", Name="Mercimek Çorbası" },
new () { Key="Mercimek Çorbası", Name="Mercimek Çorbası" },
new () { Key="Tavuk Şinitzel", Name="Tavuk Şinitzel" },
new () { Key="Bulgur Pilavı", Name="Bulgur Pilavı" },
new () { Key="Bulgur Pilavı", Name="Bulgur Pilavı" },
new () { Key="Salata", Name="Salata" },
new () { Key="Meyve", Name="Meyve" },
new () { Key="Domates Çorbası", Name="Domates Çorbası" },
new () { Key="Domates Çorbası", Name="Domates Çorbası" },
new () { Key="Etli Kuru Fasulye", Name="Etli Kuru Fasulye" },
new () { Key="Pilav", Name="Pilav" },
new () { Key="TurÅŸu", Name="TurÅŸu" },
new () { Key="Turşu", Name="Turşu" },
new () { Key="Komposto", Name="Komposto" },
new () { Key="Tarator", Name="Tarator" },
new () { Key="Köfte", Name="Köfte" },
new () { Key="Patates Püresi", Name="Patates Püresi" },
new () { Key="Yoğurtlu Kabak Salatası", Name="Yoğurtlu Kabak Salatası" },
new () { Key="Fırında Levrek", Name="Fırında Levrek" },
new () { Key="Köfte", Name="Köfte" },
new () { Key="Patates Püresi", Name="Patates Püresi" },
new () { Key="Yoğurtlu Kabak Salatası", Name="Yoğurtlu Kabak Salatası" },
new () { Key="Fırında Levrek", Name="Fırında Levrek" },
new () { Key="Kuskus", Name="Kuskus" },
new () { Key="Roka Salatası", Name="Roka Salatası" }
new () { Key="Roka Salatası", Name="Roka Salatası" }
}),
}),
ValidationRuleJson = DefaultValidationRuleRequiredJson,
@ -1098,13 +1098,13 @@ public class ListFormSeeder_Intranet : IDataSeedContributor, ITransientDependenc
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key= "Kadıköy İskele", Name= "Kadıköy İskele" },
new () { Key= "Bostancı", Name= "Bostancı" },
new () { Key= "Acıbadem", Name="Acıbadem" },
new () { Key= "Kozyatağı", Name="Kozyatağı" },
new () { Key= "Kadıköy İskele", Name= "Kadıy İskele" },
new () { Key= "Bostancı", Name= "Bostancı" },
new () { Key= "Acıbadem", Name="Acıbadem" },
new () { Key= "Kozyatağı", Name="Kozyatağı" },
new () { Key= "Ofis", Name="Ofis" },
new () { Key= "Üsküdar Meydanı", Name="Üsküdar Meydanı" },
new () { Key= "Kısıklı", Name="Kısıklı" },
new () { Key= "Üsküdar Meydanı", Name="Üsküdar Meydanı" },
new () { Key= "Kısıklı", Name="Kısıklı" },
new () { Key= "Bulgurlu", Name="Bulgurlu" },
new () { Key= "Ümraniye", Name="Ümraniye" },
}),

View file

@ -644,13 +644,13 @@ public class ListFormSeeder_Participant : IDataSeedContributor, ITransientDepend
DisplayExpr = "name",
ValueExpr = "key",
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
new () { Key="KiÅŸisel",Name="KiÅŸisel" },
new () { Key="Fiyat / Bütçe",Name="Fiyat / Bütçe" },
new () { Key="Ürün / Hizmet",Name="Ürün / Hizmet" },
new () { Key="Kişisel",Name="Kişisel" },
new () { Key="Fiyat / Bütçe",Name="Fiyat / Bütçe" },
new () { Key="Ürün / Hizmet",Name="Ürün / Hizmet" },
new () { Key="Rekabet",Name="Rekabet" },
new () { Key="Zamanlama",Name="Zamanlama" },
new () { Key="Lokasyon",Name="Lokasyon" },
new () { Key="İletişim",Name="İletişim" },
new () { Key="İletişim",Name="İletişim" },
}),
}),
ColumnCustomizationJson = DefaultColumnCustomizationJson,

View file

@ -3908,8 +3908,8 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
},
new() {
ButtonPosition= UiCommandButtonPositionTypeEnum.Toolbar,
Hint = "Hangfire Aç",
Text = "Hangfire Aç",
Hint = "Hangfire Aç",
Text = "Hangfire Aç",
AuthName=AppCodes.BackgroundWorkers,
Url= swaggerRootUrl + "/hangfire",
},

View file

@ -512,13 +512,6 @@
"App.Coordinator.Tests"
]
},
{
"key": "admin.supplychain.suppliers",
"path": "/admin/supplychain/suppliers",
"componentPath": "@/views/supplychain/components/SupplierCards",
"routeType": "protected",
"authority": null
},
{
"key": "admin.supplychain.requests",
"path": "/admin/supplychain/requests",
@ -2392,19 +2385,49 @@
},
{
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.Supplier",
"DisplayName": "App.SupplyChain.Supplier",
"Code": "App.SupplyChain.PaymentTerm",
"DisplayName": "App.SupplyChain.PaymentTerm",
"Order": 4,
"Url": "/admin/supplychain/suppliers",
"Url": "/admin/list/list-paymentterm",
"Icon": "FcDebt",
"RequiredPermissionName": "App.SupplyChain.PaymentTerm",
"IsDisabled": false
},
{
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.SupplyType",
"DisplayName": "App.SupplyChain.SupplyType",
"Order": 5,
"Url": "/admin/list/list-supplytype",
"Icon": "FcTreeStructure",
"RequiredPermissionName": "App.SupplyChain.SupplyType",
"IsDisabled": false
},
{
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.SupplyCardType",
"DisplayName": "App.SupplyChain.SupplyCardType",
"Order": 6,
"Url": "/admin/list/list-supplycardtype",
"Icon": "FcComboChart",
"RequiredPermissionName": "App.SupplyChain.SupplyCardType",
"IsDisabled": false
},
{
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.Supply",
"DisplayName": "App.SupplyChain.Supply",
"Order": 7,
"Url": "/admin/list/list-supply",
"Icon": "FcBusiness",
"RequiredPermissionName": "App.SupplyChain.Supplier",
"RequiredPermissionName": "App.SupplyChain.Supply",
"IsDisabled": false
},
{
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.Request",
"DisplayName": "App.SupplyChain.Request",
"Order": 5,
"Order": 8,
"Url": "/admin/supplychain/requests",
"Icon": "FcServices",
"RequiredPermissionName": "App.SupplyChain.Request",
@ -2414,7 +2437,7 @@
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.Quotation",
"DisplayName": "App.SupplyChain.Quotation",
"Order": 7,
"Order": 9,
"Url": "/admin/supplychain/quotations",
"Icon": "FcSurvey",
"RequiredPermissionName": "App.SupplyChain.Quotation",
@ -2424,7 +2447,7 @@
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.Approval",
"DisplayName": "App.SupplyChain.Approval",
"Order": 8,
"Order": 10,
"Url": "/admin/supplychain/approvals",
"Icon": "FcApproval",
"RequiredPermissionName": "App.SupplyChain.Approval",
@ -2434,7 +2457,7 @@
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.Order",
"DisplayName": "App.SupplyChain.Order",
"Order": 9,
"Order": 11,
"Url": "/admin/supplychain/orders",
"Icon": "FcShop",
"RequiredPermissionName": "App.SupplyChain.Order",
@ -2444,7 +2467,7 @@
"ParentCode": "App.SupplyChain",
"Code": "App.SupplyChain.Delivery",
"DisplayName": "App.SupplyChain.Delivery",
"Order": 10,
"Order": 12,
"Url": "/admin/supplychain/delivery",
"Icon": "FcShipped",
"RequiredPermissionName": "App.SupplyChain.Delivery",

View file

@ -5431,6 +5431,195 @@
"MultiTenancySide": 2,
"MenuGroup": "Kurs"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.PaymentTerm",
"ParentName": null,
"DisplayName": "App.SupplyChain.PaymentTerm",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.PaymentTerm.Create",
"ParentName": "App.SupplyChain.PaymentTerm",
"DisplayName": "Create",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.PaymentTerm.Update",
"ParentName": "App.SupplyChain.PaymentTerm",
"DisplayName": "Update",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.PaymentTerm.Delete",
"ParentName": "App.SupplyChain.PaymentTerm",
"DisplayName": "Delete",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.PaymentTerm.Export",
"ParentName": "App.SupplyChain.PaymentTerm",
"DisplayName": "Export",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.PaymentTerm.Import",
"ParentName": "App.SupplyChain.PaymentTerm",
"DisplayName": "Import",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.PaymentTerm.Activity",
"ParentName": "App.SupplyChain.PaymentTerm",
"DisplayName": "Activity",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyType",
"ParentName": null,
"DisplayName": "App.SupplyChain.SupplyType",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyType.Create",
"ParentName": "App.SupplyChain.SupplyType",
"DisplayName": "Create",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyType.Update",
"ParentName": "App.SupplyChain.SupplyType",
"DisplayName": "Update",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyType.Delete",
"ParentName": "App.SupplyChain.SupplyType",
"DisplayName": "Delete",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyType.Export",
"ParentName": "App.SupplyChain.SupplyType",
"DisplayName": "Export",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyType.Import",
"ParentName": "App.SupplyChain.SupplyType",
"DisplayName": "Import",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyType.Activity",
"ParentName": "App.SupplyChain.SupplyType",
"DisplayName": "Activity",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyCardType",
"ParentName": null,
"DisplayName": "App.SupplyChain.SupplyCardType",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyCardType.Create",
"ParentName": "App.SupplyChain.SupplyCardType",
"DisplayName": "Create",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyCardType.Update",
"ParentName": "App.SupplyChain.SupplyCardType",
"DisplayName": "Update",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyCardType.Delete",
"ParentName": "App.SupplyChain.SupplyCardType",
"DisplayName": "Delete",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyCardType.Export",
"ParentName": "App.SupplyChain.SupplyCardType",
"DisplayName": "Export",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyCardType.Import",
"ParentName": "App.SupplyChain.SupplyCardType",
"DisplayName": "Import",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.SupplyCardType.Activity",
"ParentName": "App.SupplyChain.SupplyCardType",
"DisplayName": "Activity",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.MaterialType",
@ -5622,17 +5811,17 @@
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.Supplier",
"Name": "App.SupplyChain.Supply",
"ParentName": null,
"DisplayName": "App.SupplyChain.Supplier",
"DisplayName": "App.SupplyChain.Supply",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp"
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.Supplier.Create",
"ParentName": "App.SupplyChain.Supplier",
"Name": "App.SupplyChain.Supply.Create",
"ParentName": "App.SupplyChain.Supply",
"DisplayName": "Create",
"IsEnabled": true,
"MultiTenancySide": 3,
@ -5640,8 +5829,8 @@
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.Supplier.Update",
"ParentName": "App.SupplyChain.Supplier",
"Name": "App.SupplyChain.Supply.Update",
"ParentName": "App.SupplyChain.Supply",
"DisplayName": "Update",
"IsEnabled": true,
"MultiTenancySide": 3,
@ -5649,8 +5838,8 @@
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.Supplier.Delete",
"ParentName": "App.SupplyChain.Supplier",
"Name": "App.SupplyChain.Supply.Delete",
"ParentName": "App.SupplyChain.Supply",
"DisplayName": "Delete",
"IsEnabled": true,
"MultiTenancySide": 3,
@ -5658,8 +5847,8 @@
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.Supplier.Export",
"ParentName": "App.SupplyChain.Supplier",
"Name": "App.SupplyChain.Supply.Export",
"ParentName": "App.SupplyChain.Supply",
"DisplayName": "Export",
"IsEnabled": true,
"MultiTenancySide": 3,
@ -5667,8 +5856,8 @@
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.Supplier.Import",
"ParentName": "App.SupplyChain.Supplier",
"Name": "App.SupplyChain.Supply.Import",
"ParentName": "App.SupplyChain.Supply",
"DisplayName": "Import",
"IsEnabled": true,
"MultiTenancySide": 3,
@ -5676,8 +5865,8 @@
},
{
"GroupName": "App.SupplyChain",
"Name": "App.SupplyChain.Supplier.Activity",
"ParentName": "App.SupplyChain.Supplier",
"Name": "App.SupplyChain.Supply.Activity",
"ParentName": "App.SupplyChain.Supply",
"DisplayName": "Activity",
"IsEnabled": true,
"MultiTenancySide": 3,
@ -10474,4 +10663,4 @@
"MenuGroup": "Erp"
}
]
}
}

View file

@ -518,10 +518,10 @@ public static class PlatformConsts
public const string MaterialType = "list-materialtype";
public const string MaterialGroup = "list-materialgroup";
public const string Material = "list-material";
// public const string Supplier = "list-supplier";
// public const string PurchaseOrder = "list-purchaseorder";
// public const string Inventory = "list-inventory";
public const string Supply = "list-supply";
public const string PaymentTerm = "list-paymentterm";
public const string SupplyType = "list-supplytype";
public const string SupplyCardType = "list-supplycardtype";
}
}

View file

@ -3,7 +3,7 @@
public class StatDto
{
public string Icon { get; set; }
public string Value { get; set; } // number/string farkını normalize ettik
public string Value { get; set; } // number/string farkını normalize ettik
public string LabelKey { get; set; }
public bool? UseCounter { get; set; }
public int? CounterEnd { get; set; }

View file

@ -7,7 +7,7 @@ public static class TableNameResolver
{
public const string ViewPrefix = "V_";
// Tüm tabloların hangi prefix tipine ve menü grubuna ait olduğunu belirten harita
// Tüm tabloların hangi prefix tipine ve menü grubuna ait olduğunu belirten harita
private static readonly Dictionary<string, (Func<MenuPrefix, TableNameEnum, string> Method, MenuPrefix PrefixGroup)>
_map = new(StringComparer.OrdinalIgnoreCase)
{
@ -185,10 +185,10 @@ public static class TableNameResolver
public static string GetFullTableName(string tableName)
{
if (!Enum.TryParse<TableNameEnum>(tableName, out var tableEnum))
throw new ArgumentException($"'{tableName}' geçerli bir TableNameEnum değil.");
throw new ArgumentException($"'{tableName}' geçerli bir TableNameEnum değil.");
if (!_map.TryGetValue(tableName, out var entry))
throw new KeyNotFoundException($"'{tableName}' için tablo eşlemesi bulunamadı.");
throw new KeyNotFoundException($"'{tableName}' için tablo eşlemesi bulunamadı.");
return entry.Method(entry.PrefixGroup, tableEnum);
}
@ -196,10 +196,10 @@ public static class TableNameResolver
public static string GetFullViewName(string tableName)
{
if (!Enum.TryParse<TableNameEnum>(tableName, out var tableEnum))
throw new ArgumentException($"'{tableName}' geçerli bir TableNameEnum değil.");
throw new ArgumentException($"'{tableName}' geçerli bir TableNameEnum değil.");
if (!_map.TryGetValue(tableName, out var entry))
throw new KeyNotFoundException($"'{tableName}' için tablo eşlemesi bulunamadı.");
throw new KeyNotFoundException($"'{tableName}' için tablo eşlemesi bulunamadı.");
return ViewPrefix + entry.Method(entry.PrefixGroup, tableEnum);
}

View file

@ -20,7 +20,7 @@ public class BlobManager : DomainService
private IBlobContainer GetContainer(string containerName)
{
// containerName bir sınıfa bağlı değil, sadece string
// containerName bir sınıfa bağlı değil, sadece string
return _blobContainerFactory.Create(containerName);
}

View file

@ -65,11 +65,11 @@ public class BranchSeedManager : DomainService
if (items == null)
{
result.Success = false;
result.Message = "BranchData.json okunamadı veya format hatalı.";
result.Message = "BranchData.json okunamadı veya format hatalı.";
return result;
}
// Yardımcı fonksiyon: kolay log ekleme
// Yardımcı fonksiyon: kolay log ekleme
BranchSeedDetail CreateLog(string entity) =>
new()
{
@ -381,7 +381,7 @@ public class BranchSeedManager : DomainService
}
result.Success = true;
result.Message = $"Seed işlemi başarıyla tamamlandı. Toplam {result.TotalInsertedCount} kayıt eklendi.";
result.Message = $"Seed işlemi başarıyla tamamlandı. Toplam {result.TotalInsertedCount} kayıt eklendi.";
return result;
}
catch (Exception ex)

View file

@ -493,6 +493,10 @@ public static class SeedConsts
public const string MaterialType = Default + ".MaterialType";
public const string MaterialGroup = Default + ".MaterialGroup";
public const string Material = Default + ".Material";
public const string Supply = Default + ".Supply";
public const string PaymentTerm = Default + ".PaymentTerm";
public const string SupplyType = Default + ".SupplyType";
public const string SupplyCardType = Default + ".SupplyCardType";
}
public static class Accounting

View file

@ -12,7 +12,7 @@ public class Level : FullAuditedEntity<Guid>, IMultiTenant
public Guid ClassTypeId { get; set; } // SinifTipiID (FK)
public string LevelType { get; set; } // SeviyeTipi
public string Name { get; set; } // SeviyeKodu
public int Order { get; set; } // Sıra Numarası
public int Order { get; set; } // Sıra Numarası
public int LessonCount { get; set; } // DersSayisi
public string Status { get; set; } // Durum
public int? LessonDuration { get; set; } // DersSuresi

View file

@ -20,7 +20,7 @@ public class Schedule : FullAuditedEntity<Guid>, IMultiTenant
public int LessonBreakMinute { get; set; }
public int LessonCount { get; set; }
// ÃÄŸle arası
// Öğle arası
public string LunchTime { get; set; }
public int? LunchMinute { get; set; }
public bool? IncludeLunch { get; set; }

View file

@ -8,7 +8,7 @@ public class Currency : FullAuditedEntity<Guid>
public string Code { get; set; } // TRY, USD, EUR
public string Symbol { get; set; } // ₺, $, etc.
public string Name { get; set; } // Turkish lira, US dollar, ...
public decimal Rate { get; set; } // TRY başına değer
public decimal Rate { get; set; } // TRY başına değer
public bool IsActive { get; set; }
public DateTime? LastUpdated { get; set; }
}

View file

@ -25,7 +25,7 @@ public class CustomEntity : FullAuditedEntity<Guid>, IMultiTenant
public CustomEntity()
{
Id = Guid.NewGuid(); // Burada erişim mümkün çünkü sınıfın içi
Id = Guid.NewGuid(); // Burada erişim mümkün çünkü sınıfın içi
}
}
@ -45,7 +45,7 @@ public class CustomEntityField : FullAuditedEntity<Guid>
public CustomEntityField()
{
Id = Guid.NewGuid(); // Burada erişim mümkün çünkü sınıfın içi
Id = Guid.NewGuid(); // Burada erişim mümkün çünkü sınıfın içi
}
}

View file

@ -7,7 +7,7 @@ using Volo.Abp.MultiTenancy;
namespace Erp.Platform.Entities;
/// <summary>
/// Tenant bazında dinamik olarak tanımlanmış AppService'lerin kod ve meta verilerini saklar
/// Tenant bazında dinamik olarak tanımlanmış AppService'lerin kod ve meta verilerini saklar
/// </summary>
public class DynamicService : FullAuditedEntity<Guid>, IMultiTenant
{
@ -17,26 +17,26 @@ public class DynamicService : FullAuditedEntity<Guid>, IMultiTenant
public Guid? TenantId { get; set; }
/// <summary>
/// AppService'in benzersiz adı (örn: "DynamicCustomerService")
/// AppService'in benzersiz adırn: "DynamicCustomerService")
/// </summary>
[Required]
[StringLength(256)]
public string Name { get; set; }
/// <summary>
/// AppService'in kullanıcı dostu başlığı
/// AppService'in kullanıcı dostu başlığı
/// </summary>
[StringLength(512)]
public string? DisplayName { get; set; }
/// <summary>
/// AppService açıklaması
/// AppService açıklaması
/// </summary>
[StringLength(2000)]
public string? Description { get; set; }
/// <summary>
/// Tam C# sınıf kodu (using'ler ve namespace dahil)
/// Tam C# sınıf kodu (using'ler ve namespace dahil)
/// </summary>
[Required]
public string Code { get; set; }
@ -52,34 +52,34 @@ public class DynamicService : FullAuditedEntity<Guid>, IMultiTenant
public CompilationStatus CompilationStatus { get; set; }
/// <summary>
/// Son derleme hatası (varsa)
/// Son derleme hatası (varsa)
/// </summary>
public string? LastCompilationError { get; set; }
/// <summary>
/// Son başarılı derleme zamanı
/// Son başarılı derleme zamanı
/// </summary>
public DateTime? LastSuccessfulCompilation { get; set; }
/// <summary>
/// Kod versiyonu (her güncelleme ile artan numara)
/// Kod versiyonu (her güncelleme ile artan numara)
/// </summary>
public int Version { get; set; }
/// <summary>
/// Kod hash'i (değişiklik kontrolü için)
/// Kod hash'i (değişiklik kontrolü için)
/// </summary>
[StringLength(64)]
public string? CodeHash { get; set; }
/// <summary>
/// AppService'in kullandığı ana entity türü (opsiyonel)
/// AppService'in kullandığı ana entity türü (opsiyonel)
/// </summary>
[StringLength(256)]
public string? PrimaryEntityType { get; set; }
/// <summary>
/// Swagger'da görünecek controller adı
/// Swagger'da görünecek controller adı
/// </summary>
[StringLength(256)]
public string? ControllerName { get; set; }
@ -104,7 +104,7 @@ public class DynamicService : FullAuditedEntity<Guid>, IMultiTenant
}
/// <summary>
/// Kodu günceller ve versiyonu artırır
/// Kodu günceller ve versiyonu artırır
/// </summary>
public void UpdateCode(string newCode)
{
@ -121,7 +121,7 @@ public class DynamicService : FullAuditedEntity<Guid>, IMultiTenant
}
/// <summary>
/// Derleme başarısını işaretler
/// Derleme başarısınıaretler
/// </summary>
public void MarkCompilationSuccess()
{
@ -131,7 +131,7 @@ public class DynamicService : FullAuditedEntity<Guid>, IMultiTenant
}
/// <summary>
/// Derleme hatasını işaretler
/// Derleme hatasınıaretler
/// </summary>
public void MarkCompilationError(string error)
{
@ -153,22 +153,22 @@ public class DynamicService : FullAuditedEntity<Guid>, IMultiTenant
public enum CompilationStatus
{
/// <summary>
/// Henüz derlenmedi
/// Henüz derlenmedi
/// </summary>
Pending = 0,
/// <summary>
/// Derleme başarılı
/// Derleme başarılı
/// </summary>
Success = 1,
/// <summary>
/// Derleme başarısız
/// Derleme başarısız
/// </summary>
Failed = 2,
/// <summary>
/// Derleme iÅŸlemi devam ediyor
/// Derleme işlemi devam ediyor
/// </summary>
InProgress = 3
}

View file

@ -11,7 +11,7 @@ public class QuestionPool : FullAuditedEntity<Guid>, IMultiTenant
public string Name { get; set; }
public string Description { get; set; }
public string Tags { get; set; } // İstersen JSON veya ayrı tablo da olabilir
public string Tags { get; set; } // İstersen JSON veya ayrı tablo da olabilir
public ICollection<Question> Questions { get; set; } = new List<Question>();

View file

@ -8,10 +8,10 @@ public class QuestionTag : FullAuditedEntity<Guid>, IMultiTenant
{
public Guid? TenantId;
public string Name { get; set; } // Etiket adı (ör: Grammar)
public string Description { get; set; } // Açıklama
public string Color { get; set; } // Renk kodu (ör: #3B82F6)
public int UsageCount { get; set; } // Kullanım sayısı
public string Name { get; set; } // Etiket adır: Grammar)
public string Description { get; set; } // Açıklama
public string Color { get; set; } // Renk kodu (ör: #3B82F6)
public int UsageCount { get; set; } // Kullanım sayısı
Guid? IMultiTenant.TenantId => TenantId;
}

View file

@ -5,16 +5,16 @@ using Volo.Abp.MultiTenancy;
namespace Erp.Platform.Entities
{
// İnsan Kaynakları Fazla Mesai
// İnsan Kaynakları Fazla Mesai
public class Overtime : FullAuditedEntity<Guid>, IMultiTenant
{
public Guid? TenantId { get; set; }
// İlişkisel alanlar
// İlişkisel alanlar
public Guid EmployeeId { get; set; }
public Employee Employee { get; set; }
// Fazla mesai detayları
// Fazla mesai detayları
public DateTime Date { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }

View file

@ -12,14 +12,14 @@ public class Announcement : FullAuditedEntity<Guid>, IMultiTenant
public string Excerpt { get; set; }
public string Content { get; set; }
public string ImageUrl { get; set; }
public string Category { get; set; } // ÃrneÄŸin: "Genel", "Etkinlik", "Duyuru"
public Guid? EmployeeId { get; set; } // Employee referansı metin olarak saklanır
public string Category { get; set; } // Örneğin: "Genel", "Etkinlik", "Duyuru"
public Guid? EmployeeId { get; set; } // Employee referansı metin olarak saklanır
public Employee Employee { get; set; }
public DateTime PublishDate { get; set; }
public DateTime? ExpiryDate { get; set; }
public bool IsPinned { get; set; }
public int ViewCount { get; set; }
public string Departments { get; set; } // ["Yazılım Geliştirme"]
public string Departments { get; set; } // ["Yazılım Geliştirme"]
public string Attachments { get; set; } // [{name,url,size}]
}

View file

@ -17,8 +17,8 @@ public class Reservation : FullAuditedEntity<Guid>, IMultiTenant
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string Purpose { get; set; } //Amaç
public int? Participants { get; set; } //Katılımcı Sayısı
public string Purpose { get; set; } //Amaç
public int? Participants { get; set; } //Katılımcı Sayısı
public string Notes { get; set; }
public string Status { get; set; } // pending | approved | rejected | completed
}

View file

@ -14,7 +14,7 @@ public class Partner : FullAuditedEntity<Guid>, IMultiTenant
public string Code { get; set; }
public string Name { get; set; }
public PartnerType PartyType { get; set; }
public string PartyType { get; set; }
public Guid? SectorId { get; set; }
public Sector? Sector { get; set; }
@ -44,7 +44,7 @@ public class Partner : FullAuditedEntity<Guid>, IMultiTenant
public decimal CreditLimit { get; set; }
public DateTime? LastOrderDate { get; set; }
public PartnerStatus Status { get; set; }
public string Status { get; set; }
public ICollection<PartnerBank> Banks { get; set; }
public ICollection<PartnerCertificate> Certificates { get; set; }
@ -63,8 +63,8 @@ public class Partner : FullAuditedEntity<Guid>, IMultiTenant
public string? TeamCode { get; set; } // Organization Unit Code
public decimal TotalRevenue { get; set; } // Toplam Gelir
public decimal AverageOrderValue { get; set; } // Ortalama SipariÅŸ DeÄŸeri
public decimal LifetimeValue { get; set; } // Müşteri Ãmrü DeÄŸeri
public decimal AverageOrderValue { get; set; } // Ortalama Sipariş Değeri
public decimal LifetimeValue { get; set; } // Müşteri Ömrü Değeri
//Supplier ile ilgili bilgiler
public Guid? SupplierTypeId { get; set; }

View file

@ -11,12 +11,12 @@ public class PartnerBank : FullAuditedEntity<Guid>, IMultiTenant
public Partner Partner { get; set; }
public string BankName { get; set; }
public string AccountNumber { get; set; } //Hesap Numarası
public string AccountNumber { get; set; } //Hesap Numarası
public string Iban { get; set; } //IBAN
public string SwiftCode { get; set; } //BIC
public string AccountOwner { get; set; } //Hesap Sahibi
public string BranchName { get; set; } //Şube Adı
public string AccountType { get; set; } //Hesap Türü
public string BranchName { get; set; } //Şube Adı
public string AccountType { get; set; } //Hesap Türü
public Guid? CurrencyId { get; set; }
public Currency? Currency { get; set; }

View file

@ -1,18 +0,0 @@
using System.Runtime.Serialization;
namespace Erp.Platform.Entities;
public enum PartnerStatus
{
[EnumMember(Value = "Prospect")]
Prospect, // Aday
[EnumMember(Value = "Active")]
Active, // Aktif
[EnumMember(Value = "Inactive")]
Inactive, // Pasif
[EnumMember(Value = "Blocked")]
Blocked, // EngellenmiÅŸ
}

View file

@ -1,12 +0,0 @@
using System.Runtime.Serialization;
namespace Erp.Platform.Entities;
public enum PartnerType
{
[EnumMember(Value = "Customer")]
Customer, // Müşteri
[EnumMember(Value = "Supplier")]
Supplier, // Tedarikçi
}

View file

@ -9,6 +9,9 @@ public class PaymentTerm : FullAuditedEntity<Guid>, IMultiTenant
public Guid? TenantId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsActive { get; set; }
}

View file

@ -5,7 +5,7 @@ using Volo.Abp.Domain.Values;
namespace Erp.Platform.Queries;
/// <summary>
/// Break tanımı
/// Break tanımı
/// </summary>
public class Break : ValueObject
{
@ -17,7 +17,7 @@ public class Break : ValueObject
[JsonPropertyName("EndValue")]
public int EndValue { get; private set; }
public Break() { } // JSON için gerekli
public Break() { } // JSON için gerekli
protected override IEnumerable<object> GetAtomicValues()
{

View file

@ -18,7 +18,7 @@ public class BreakStyle : ValueObject
[JsonPropertyName("Width")]
public int Width { get; private set; }
// JSON deserialization için parametresiz public ctor bırak
// JSON deserialization için parametresiz public ctor bırak
public BreakStyle() { }
protected override IEnumerable<object> GetAtomicValues()

View file

@ -5,7 +5,7 @@ using Volo.Abp.Domain.Values;
namespace Erp.Platform.Queries;
/// <summary>
/// Grid tanımı
/// Grid tanımı
/// </summary>
public class ChartAxisGrid : ValueObject
{
@ -21,7 +21,7 @@ public class ChartAxisGrid : ValueObject
[JsonPropertyName("Width")]
public int Width { get; private set; }
public ChartAxisGrid() { } // JSON için gerekli
public ChartAxisGrid() { } // JSON için gerekli
protected override IEnumerable<object> GetAtomicValues()
{

View file

@ -21,7 +21,7 @@ public class ChartBorder : ValueObject
[JsonInclude]
public int Width { get; private set; } = 1;
public ChartBorder() { } // JSON deserialize için parametresiz public ctor
public ChartBorder() { } // JSON deserialize için parametresiz public ctor
protected override IEnumerable<object> GetAtomicValues()
{

View file

@ -9,7 +9,7 @@ public class ChartPanes : ValueObject
public int Height { get; private set; } = 250;
public string Name { get; private set; }
private ChartPanes() { } // EF Core / JSON için
private ChartPanes() { } // EF Core / JSON için
public ChartPanes(string name, int height, string backgroundColor)
{

View file

@ -39,7 +39,7 @@ public class DefaultValueHelper : ITransientDependency
.Replace(PlatformConsts.DefaultValues.Month, now.Month.ToString(CultureInfo.InvariantCulture))
.Replace(PlatformConsts.DefaultValues.Year, now.Year.ToString(CultureInfo.InvariantCulture));
// 🔹 TenantId özel durumu: NULL => IS NULL, varsa => = 'GUID'
// 🔹 TenantId özel durumu: NULL => IS NULL, varsa => = 'GUID'
if (_currentTenant?.Id.HasValue == true)
{
result = result.Replace(

View file

@ -145,7 +145,7 @@ public class DynamicEntityManager : IDynamicEntityManager
using var command = connection.CreateCommand();
command.CommandText = query;
// ⭐️⭐️⭐️ Kritik satır:
// ⭐️⭐️⭐️ Kritik satır:
command.Transaction = dbContext.Database.CurrentTransaction?.GetDbTransaction();
using var reader = await command.ExecuteReaderAsync();

View file

@ -203,15 +203,15 @@ public class PlatformDbContext :
public DbSet<PaymentTerm> PaymentTerms { get; set; }
public DbSet<Partner> Partners { get; set; }
public DbSet<PartnerBank> PartnerBanks { get; set; }
public DbSet<PartnerCertificate> PartnerCertificates { get; set; }
public DbSet<PartnerContact> PartnerContacts { get; set; }
public DbSet<SupplyType> SupplyTypes { get; set; }
public DbSet<SupplyCardType> SupplyCardTypes { get; set; }
public DbSet<CustomerType> CustomerTypes { get; set; }
public DbSet<CustomerSegment> CustomerSegments { get; set; }
public DbSet<PartnerBank> PartnerBanks { get; set; }
public DbSet<PartnerCertificate> PartnerCertificates { get; set; }
public DbSet<PartnerContact> PartnerContacts { get; set; }
#endregion
#region Accounting
@ -2283,6 +2283,8 @@ public class PlatformDbContext :
b.ConfigureByConvention();
b.Property(x => x.Name).IsRequired().HasMaxLength(100);
b.Property(x => x.Description).IsRequired().HasMaxLength(500);
b.Property(x => x.IsActive).HasDefaultValue(true);
});
builder.Entity<SupplyType>(b =>
@ -2332,8 +2334,12 @@ public class PlatformDbContext :
b.Property(p => p.Code).IsRequired().HasMaxLength(64);
b.Property(p => p.Name).IsRequired().HasMaxLength(256);
b.Property(p => p.PartyType).IsRequired().HasMaxLength(32);
b.Property(p => p.SectorId).IsRequired();
b.Property(p => p.TaxNumber).IsRequired();
b.Property(p => p.TaxOffice).HasMaxLength(128);
b.Property(p => p.CurrencyId).IsRequired();
b.Property(p => p.PaymentTermId).IsRequired();
b.Property(p => p.Country).IsRequired().HasMaxLength(64);
b.Property(p => p.City).IsRequired().HasMaxLength(64);
b.Property(p => p.District).HasMaxLength(64);
@ -2341,13 +2347,13 @@ public class PlatformDbContext :
b.Property(p => p.Address1).HasMaxLength(256);
b.Property(p => p.Address2).HasMaxLength(256);
b.Property(p => p.PostalCode).HasMaxLength(16);
b.Property(p => p.PhoneNumber).HasMaxLength(20);
b.Property(p => p.PhoneNumber).IsRequired().HasMaxLength(20);
b.Property(p => p.MobileNumber).HasMaxLength(20);
b.Property(p => p.FaxNumber).HasMaxLength(20);
b.Property(p => p.Email).HasMaxLength(128);
b.Property(p => p.Email).IsRequired().HasMaxLength(128);
b.Property(p => p.Website).HasMaxLength(128);
b.Property(p => p.Status).IsRequired();
b.Property(p => p.CreditLimit).HasPrecision(18, 2).HasDefaultValue(0);
b.Property(p => p.Status).IsRequired().HasMaxLength(10);
//Supplier configuration
b.Property(x => x.CardNumber).HasMaxLength(64);

View file

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace Erp.Platform.Migrations
{
[DbContext(typeof(PlatformDbContext))]
[Migration("20251111192837_Initial")]
[Migration("20251112124138_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -6615,7 +6615,7 @@ namespace Erp.Platform.Migrations
.HasColumnType("decimal(18,2)")
.HasDefaultValue(0m);
b.Property<Guid?>("CurrencyId")
b.Property<Guid>("CurrencyId")
.HasColumnType("uniqueidentifier");
b.Property<decimal>("CurrentBalance")
@ -6649,6 +6649,7 @@ namespace Erp.Platform.Migrations
.HasColumnType("nvarchar(64)");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
@ -6691,16 +6692,19 @@ namespace Erp.Platform.Migrations
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<int>("PartyType")
.HasColumnType("int");
b.Property<string>("PartyType")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("nvarchar(32)");
b.Property<Guid?>("PaymentTermId")
b.Property<Guid>("PaymentTermId")
.HasColumnType("uniqueidentifier");
b.Property<string>("PerformanceMetricsJson")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
@ -6708,11 +6712,13 @@ namespace Erp.Platform.Migrations
.HasMaxLength(16)
.HasColumnType("nvarchar(16)");
b.Property<Guid?>("SectorId")
b.Property<Guid>("SectorId")
.HasColumnType("uniqueidentifier");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("Street")
.HasMaxLength(128)
@ -7118,6 +7124,16 @@ namespace Erp.Platform.Migrations
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<bool>("IsActive")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(true);
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
@ -13194,7 +13210,9 @@ namespace Erp.Platform.Migrations
b.HasOne("Erp.Platform.Entities.Currency", "Currency")
.WithMany()
.HasForeignKey("CurrencyId");
.HasForeignKey("CurrencyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Erp.Platform.Entities.CustomerSegment", "CustomerSegment")
.WithMany("Partners")
@ -13212,11 +13230,15 @@ namespace Erp.Platform.Migrations
b.HasOne("Erp.Platform.Entities.PaymentTerm", "PaymentTerm")
.WithMany()
.HasForeignKey("PaymentTermId");
.HasForeignKey("PaymentTermId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Erp.Platform.Entities.Sector", "Sector")
.WithMany()
.HasForeignKey("SectorId");
.HasForeignKey("SectorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Erp.Platform.Entities.SupplyType", "SupplierType")
.WithMany("Partners")

View file

@ -2330,6 +2330,8 @@ namespace Erp.Platform.Migrations
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
Name = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
Description = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
IsActive = table.Column<bool>(type: "bit", nullable: false, defaultValue: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
@ -4090,8 +4092,8 @@ namespace Erp.Platform.Migrations
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
Code = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
PartyType = table.Column<int>(type: "int", nullable: false),
SectorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
PartyType = table.Column<string>(type: "nvarchar(32)", maxLength: 32, nullable: false),
SectorId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
TaxNumber = table.Column<long>(type: "bigint", nullable: false),
TaxOffice = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true),
Country = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
@ -4102,15 +4104,15 @@ namespace Erp.Platform.Migrations
Address2 = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
PostalCode = table.Column<string>(type: "nvarchar(16)", maxLength: 16, nullable: true),
MobileNumber = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
PhoneNumber = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
PhoneNumber = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
FaxNumber = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
Email = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true),
Email = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
Website = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true),
CurrencyId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
PaymentTermId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
CurrencyId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
PaymentTermId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
CreditLimit = table.Column<decimal>(type: "decimal(18,2)", precision: 18, scale: 2, nullable: false, defaultValue: 0m),
LastOrderDate = table.Column<DateTime>(type: "datetime2", nullable: true),
Status = table.Column<int>(type: "int", nullable: false),
Status = table.Column<string>(type: "nvarchar(10)", maxLength: 10, nullable: false),
CustomerTypeId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
CustomerSegmentId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
AssignedEmployeeId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
@ -4154,17 +4156,20 @@ namespace Erp.Platform.Migrations
name: "FK_Adm_T_Partner_Sas_H_Currency_CurrencyId",
column: x => x.CurrencyId,
principalTable: "Sas_H_Currency",
principalColumn: "Id");
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Adm_T_Partner_Sas_T_Sector_SectorId",
column: x => x.SectorId,
principalTable: "Sas_T_Sector",
principalColumn: "Id");
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Adm_T_Partner_Scp_T_PaymentTerm_PaymentTermId",
column: x => x.PaymentTermId,
principalTable: "Scp_T_PaymentTerm",
principalColumn: "Id");
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Adm_T_Partner_Scp_T_SupplyCardType_SupplyCardTypeId",
column: x => x.SupplyCardTypeId,

View file

@ -6612,7 +6612,7 @@ namespace Erp.Platform.Migrations
.HasColumnType("decimal(18,2)")
.HasDefaultValue(0m);
b.Property<Guid?>("CurrencyId")
b.Property<Guid>("CurrencyId")
.HasColumnType("uniqueidentifier");
b.Property<decimal>("CurrentBalance")
@ -6646,6 +6646,7 @@ namespace Erp.Platform.Migrations
.HasColumnType("nvarchar(64)");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
@ -6688,16 +6689,19 @@ namespace Erp.Platform.Migrations
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<int>("PartyType")
.HasColumnType("int");
b.Property<string>("PartyType")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("nvarchar(32)");
b.Property<Guid?>("PaymentTermId")
b.Property<Guid>("PaymentTermId")
.HasColumnType("uniqueidentifier");
b.Property<string>("PerformanceMetricsJson")
.HasColumnType("text");
b.Property<string>("PhoneNumber")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("nvarchar(20)");
@ -6705,11 +6709,13 @@ namespace Erp.Platform.Migrations
.HasMaxLength(16)
.HasColumnType("nvarchar(16)");
b.Property<Guid?>("SectorId")
b.Property<Guid>("SectorId")
.HasColumnType("uniqueidentifier");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<string>("Street")
.HasMaxLength(128)
@ -7115,6 +7121,16 @@ namespace Erp.Platform.Migrations
.HasColumnType("datetime2")
.HasColumnName("DeletionTime");
b.Property<string>("Description")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<bool>("IsActive")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(true);
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
@ -13191,7 +13207,9 @@ namespace Erp.Platform.Migrations
b.HasOne("Erp.Platform.Entities.Currency", "Currency")
.WithMany()
.HasForeignKey("CurrencyId");
.HasForeignKey("CurrencyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Erp.Platform.Entities.CustomerSegment", "CustomerSegment")
.WithMany("Partners")
@ -13209,11 +13227,15 @@ namespace Erp.Platform.Migrations
b.HasOne("Erp.Platform.Entities.PaymentTerm", "PaymentTerm")
.WithMany()
.HasForeignKey("PaymentTermId");
.HasForeignKey("PaymentTermId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Erp.Platform.Entities.Sector", "Sector")
.WithMany()
.HasForeignKey("SectorId");
.HasForeignKey("SectorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Erp.Platform.Entities.SupplyType", "SupplierType")
.WithMany("Partners")

Some files were not shown because too many files have changed in this diff Show more