diff --git a/src/AcademicTitles/AcademicTitles.cs b/src/AcademicTitles/AcademicTitles.cs new file mode 100644 index 0000000..0a0ef37 --- /dev/null +++ b/src/AcademicTitles/AcademicTitles.cs @@ -0,0 +1,14 @@ +using Avolutions.Baf.Core.Lookups.Extensions; +using Avolutions.Baf.Core.Module.Abstractions; +using Avolutions.Baf.Domain.AcademicTitles.Models; +using Microsoft.Extensions.DependencyInjection; + +namespace Avolutions.Baf.Domain.AcademicTitles; + +public class AcademicTitles : IFeatureModule +{ + public void Register(IServiceCollection services) + { + services.AddLookup(); + } +} \ No newline at end of file diff --git a/src/AcademicTitles/Models/AcademicTitle.cs b/src/AcademicTitles/Models/AcademicTitle.cs index aed3489..b3d34e6 100644 --- a/src/AcademicTitles/Models/AcademicTitle.cs +++ b/src/AcademicTitles/Models/AcademicTitle.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.AcademicTitles.Models; -public class AcademicTitle : TranslatableEntity +public class AcademicTitle : Lookup { public AcademicTitle() : base() { } public AcademicTitle(bool createMissingTranslations) : base(createMissingTranslations) { } diff --git a/src/AcademicTitles/Models/AcademicTitleTranslation.cs b/src/AcademicTitles/Models/AcademicTitleTranslation.cs index 2a340f4..366e29a 100644 --- a/src/AcademicTitles/Models/AcademicTitleTranslation.cs +++ b/src/AcademicTitles/Models/AcademicTitleTranslation.cs @@ -1,7 +1,7 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.AcademicTitles.Models; -public class AcademicTitleTranslation : TranslationEntity +public class AcademicTitleTranslation : LookupTranslation { } \ No newline at end of file diff --git a/src/AcademicTitles/Services/AcademicTitleService.cs b/src/AcademicTitles/Services/AcademicTitleService.cs deleted file mode 100644 index 126db66..0000000 --- a/src/AcademicTitles/Services/AcademicTitleService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Avolutions.Baf.Core.Entity.Services; -using Avolutions.Baf.Domain.AcademicTitles.Models; -using FluentValidation; -using Microsoft.EntityFrameworkCore; - -namespace Avolutions.Baf.Domain.AcademicTitles.Services; - -public class AcademicTitleService : TranslatableEntityService -{ - public AcademicTitleService(DbContext context) : base(context) - { - } - - public AcademicTitleService(DbContext context, IValidator? validator) : base(context, validator) - { - } -} \ No newline at end of file diff --git a/src/Articles/Configurations/ArticleConfiguration.cs b/src/Articles/Configurations/ArticleConfiguration.cs index a293d21..65aedb8 100644 --- a/src/Articles/Configurations/ArticleConfiguration.cs +++ b/src/Articles/Configurations/ArticleConfiguration.cs @@ -16,5 +16,11 @@ public void Configure(EntityTypeBuilder
builder) builder.Property(a => a.Type) .HasConversion(); + + builder.Property(e => e.Price) + .HasPrecision(18, 2); + + builder.Property(e => e.TaxRate) + .HasPrecision(5, 2); } } \ No newline at end of file diff --git a/src/Articles/Models/Article.cs b/src/Articles/Models/Article.cs index fef1e5f..3ce1375 100644 --- a/src/Articles/Models/Article.cs +++ b/src/Articles/Models/Article.cs @@ -1,20 +1,19 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations.Schema; +using Avolutions.Baf.Core.Entity.Abstractions; +using Avolutions.Baf.Core.Entity.Attributes; using Avolutions.Baf.Core.Entity.Models; using Avolutions.Baf.Domain.QuantityUnits.Models; -using Microsoft.EntityFrameworkCore; namespace Avolutions.Baf.Domain.Articles.Models; -public class Article : EntityBase +public class Article : EntityBase, INavigable { public ArticleType Type { get; set; } = ArticleType.Product; + [EntityNavigationKey] public string ArticleNo { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? Description { get; set; } public decimal Price { get; set; } - [Range(0, 100)] - [Precision(5, 2)] public decimal TaxRate { get; set; } public Guid QuantityUnitId { get; set; } public QuantityUnit QuantityUnit { get; set; } = null!; diff --git a/src/Articles/Services/ArticleService.cs b/src/Articles/Services/ArticleService.cs index a5cb0ab..468ffc4 100644 --- a/src/Articles/Services/ArticleService.cs +++ b/src/Articles/Services/ArticleService.cs @@ -1,8 +1,6 @@ -using Avolutions.Baf.Core.Entity.Abstractions; -using Avolutions.Baf.Core.Entity.Services; +using Avolutions.Baf.Core.Entity.Services; using Avolutions.Baf.Core.NumberSequences.Services; using Avolutions.Baf.Domain.Articles.Models; -using Avolutions.Baf.Domain.QuantityUnits.Models; using FluentValidation; using Microsoft.EntityFrameworkCore; @@ -11,16 +9,13 @@ namespace Avolutions.Baf.Domain.Articles.Services; public class ArticleService : EntityService
{ private readonly INumberSequenceService _numberSequence; - private readonly ITranslatableEntityService _quantityUnitService; public ArticleService( DbContext context, IValidator
? validator, - INumberSequenceService numberSequence, - ITranslatableEntityService quantityUnitService) : base(context, validator) + INumberSequenceService numberSequence) : base(context, validator) { _numberSequence = numberSequence; - _quantityUnitService = quantityUnitService; } public override async Task
CreateAsync(Article article, CancellationToken cancellationToken = default) @@ -30,16 +25,10 @@ public override async Task
CreateAsync(Article article, CancellationTok article.ArticleNo = await _numberSequence.GetNextAsync(); } - if (article.QuantityUnitId == Guid.Empty) - { - var defaultQuantityUnit = await _quantityUnitService.GetDefaultAsync(cancellationToken); - article.QuantityUnitId = defaultQuantityUnit.Id; - } - return await base.CreateAsync(article, cancellationToken); } - public async Task
GetByArticleNo(string articleNo, CancellationToken cancellationToken = default) + public async Task
GetByArticleNoAsync(string articleNo, CancellationToken cancellationToken = default) { var article = await DbSet.AsNoTracking().SingleOrDefaultAsync(l => l.ArticleNo == articleNo, cancellationToken); if (article == null) diff --git a/src/Avolutions.Baf.Domain.csproj b/src/Avolutions.Baf.Domain.csproj index fdef718..be13797 100644 --- a/src/Avolutions.Baf.Domain.csproj +++ b/src/Avolutions.Baf.Domain.csproj @@ -6,7 +6,7 @@ enable Avolutions.Baf.Domain - 0.16.0 + 0.17.0 Avolutions BAF Domain Avolutions @@ -29,7 +29,7 @@ - + diff --git a/src/Countries/CountriesModule.cs b/src/Countries/CountriesModule.cs index 7e584fa..74567af 100644 --- a/src/Countries/CountriesModule.cs +++ b/src/Countries/CountriesModule.cs @@ -1,7 +1,6 @@ -using Avolutions.Baf.Core.Entity.Abstractions; +using Avolutions.Baf.Core.Lookups.Extensions; using Avolutions.Baf.Core.Module.Abstractions; using Avolutions.Baf.Domain.Countries.Models; -using Avolutions.Baf.Domain.Countries.Services; using Microsoft.Extensions.DependencyInjection; namespace Avolutions.Baf.Domain.Countries; @@ -10,8 +9,6 @@ public class CountriesModule : IFeatureModule { public void Register(IServiceCollection services) { - services.AddScoped(); - services.AddScoped, CountryService>(); - services.AddScoped, CountryService>(); + services.AddLookup(); } } \ No newline at end of file diff --git a/src/Countries/Models/Country.cs b/src/Countries/Models/Country.cs index 5b849f4..fc51800 100644 --- a/src/Countries/Models/Country.cs +++ b/src/Countries/Models/Country.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.Countries.Models; -public class Country : TranslatableEntity +public class Country : Lookup { public Country() : base() { } public Country(bool createMissingTranslations) : base(createMissingTranslations) { } diff --git a/src/Countries/Models/CountryTranslation.cs b/src/Countries/Models/CountryTranslation.cs index c406495..f9a5086 100644 --- a/src/Countries/Models/CountryTranslation.cs +++ b/src/Countries/Models/CountryTranslation.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.Countries.Models; -public class CountryTranslation : TranslationEntity +public class CountryTranslation : LookupTranslation { } \ No newline at end of file diff --git a/src/Countries/Services/CountryService.cs b/src/Countries/Services/CountryService.cs deleted file mode 100644 index 72b3a3b..0000000 --- a/src/Countries/Services/CountryService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Avolutions.Baf.Core.Entity.Services; -using Avolutions.Baf.Domain.Countries.Models; -using FluentValidation; -using Microsoft.EntityFrameworkCore; - -namespace Avolutions.Baf.Domain.Countries.Services; - -public class CountryService : TranslatableEntityService -{ - public CountryService(DbContext context) : base(context) - { - } - - public CountryService(DbContext context, IValidator? validator) : base(context, validator) - { - } -} \ No newline at end of file diff --git a/src/Persons/Extensions/PersonExtensions.cs b/src/Persons/Extensions/PersonExtensions.cs index fea1df3..a0bd446 100644 --- a/src/Persons/Extensions/PersonExtensions.cs +++ b/src/Persons/Extensions/PersonExtensions.cs @@ -8,4 +8,13 @@ public static string FullName(this IPerson person) { return $"{person.AcademicTitle?.Value} {person.FirstName} {person.LastName}".Trim(); } + + public static string LetterSalutation(this IPerson person) + { + var salutation = person.Salutation?.LetterSalutation; + var title = person.AcademicTitle?.Value; + var lastName = person.LastName; + + return !string.IsNullOrWhiteSpace(title) ? $"{salutation} {title} {lastName}".Trim() : $"{salutation} {lastName}".Trim(); + } } \ No newline at end of file diff --git a/src/QuantityUnits/Models/QuantityUnit.cs b/src/QuantityUnits/Models/QuantityUnit.cs index c82449f..3f5f96d 100644 --- a/src/QuantityUnits/Models/QuantityUnit.cs +++ b/src/QuantityUnits/Models/QuantityUnit.cs @@ -1,10 +1,10 @@ using System.ComponentModel.DataAnnotations.Schema; -using Avolutions.Baf.Core.Entity.Extensions; -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Extensions; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.QuantityUnits.Models; -public class QuantityUnit : TranslatableEntity +public class QuantityUnit : Lookup { public QuantityUnit() : base() { } diff --git a/src/QuantityUnits/Models/QuantityUnitTranslation.cs b/src/QuantityUnits/Models/QuantityUnitTranslation.cs index c537f55..63fbd61 100644 --- a/src/QuantityUnits/Models/QuantityUnitTranslation.cs +++ b/src/QuantityUnits/Models/QuantityUnitTranslation.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.QuantityUnits.Models; -public class QuantityUnitTranslation : TranslationEntity +public class QuantityUnitTranslation : LookupTranslation { public string Abbreviation { get; set; } = string.Empty; } \ No newline at end of file diff --git a/src/QuantityUnits/QuantityUnitsModule.cs b/src/QuantityUnits/QuantityUnitsModule.cs index c72c0fc..748d296 100644 --- a/src/QuantityUnits/QuantityUnitsModule.cs +++ b/src/QuantityUnits/QuantityUnitsModule.cs @@ -1,7 +1,6 @@ -using Avolutions.Baf.Core.Entity.Abstractions; +using Avolutions.Baf.Core.Lookups.Extensions; using Avolutions.Baf.Core.Module.Abstractions; using Avolutions.Baf.Domain.QuantityUnits.Models; -using Avolutions.Baf.Domain.QuantityUnits.Services; using Microsoft.Extensions.DependencyInjection; namespace Avolutions.Baf.Domain.QuantityUnits; @@ -10,8 +9,6 @@ public class QuantityUnitsModule : IFeatureModule { public void Register(IServiceCollection services) { - services.AddScoped(); - services.AddScoped, QuantityUnitService>(); - services.AddScoped, QuantityUnitService>(); + services.AddLookup(); } } \ No newline at end of file diff --git a/src/QuantityUnits/Services/QuantityUnitService.cs b/src/QuantityUnits/Services/QuantityUnitService.cs deleted file mode 100644 index 7ac2c68..0000000 --- a/src/QuantityUnits/Services/QuantityUnitService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Avolutions.Baf.Core.Entity.Services; -using Avolutions.Baf.Domain.QuantityUnits.Models; -using FluentValidation; -using Microsoft.EntityFrameworkCore; - -namespace Avolutions.Baf.Domain.QuantityUnits.Services; - -public class QuantityUnitService : TranslatableEntityService -{ - public QuantityUnitService(DbContext context) : base(context) - { - } - - public QuantityUnitService(DbContext context, IValidator? validator) : base(context, validator) - { - } -} \ No newline at end of file diff --git a/src/Salutations/Models/Salutation.cs b/src/Salutations/Models/Salutation.cs index 130ed61..e1fff18 100644 --- a/src/Salutations/Models/Salutation.cs +++ b/src/Salutations/Models/Salutation.cs @@ -1,10 +1,10 @@ using System.ComponentModel.DataAnnotations.Schema; -using Avolutions.Baf.Core.Entity.Extensions; -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Extensions; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.Salutations.Models; -public class Salutation : TranslatableEntity +public class Salutation : Lookup { public Salutation() : base() { } public Salutation(bool createMissingTranslations) : base(createMissingTranslations) { } diff --git a/src/Salutations/Models/SalutationTranslation.cs b/src/Salutations/Models/SalutationTranslation.cs index 168a89f..06875a6 100644 --- a/src/Salutations/Models/SalutationTranslation.cs +++ b/src/Salutations/Models/SalutationTranslation.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.Salutations.Models; -public class SalutationTranslation : TranslationEntity +public class SalutationTranslation : LookupTranslation { public string LetterSalutation { get; set; } = string.Empty; } \ No newline at end of file diff --git a/src/Salutations/SalutationModule.cs b/src/Salutations/SalutationModule.cs new file mode 100644 index 0000000..87cd260 --- /dev/null +++ b/src/Salutations/SalutationModule.cs @@ -0,0 +1,14 @@ +using Avolutions.Baf.Core.Lookups.Extensions; +using Avolutions.Baf.Core.Module.Abstractions; +using Avolutions.Baf.Domain.Salutations.Models; +using Microsoft.Extensions.DependencyInjection; + +namespace Avolutions.Baf.Domain.Salutations; + +public class SalutationModule : IFeatureModule +{ + public void Register(IServiceCollection services) + { + services.AddLookup(); + } +} \ No newline at end of file diff --git a/src/Salutations/Services/SalutationService.cs b/src/Salutations/Services/SalutationService.cs deleted file mode 100644 index 7206838..0000000 --- a/src/Salutations/Services/SalutationService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Avolutions.Baf.Core.Entity.Services; -using Avolutions.Baf.Domain.Salutations.Models; -using FluentValidation; -using Microsoft.EntityFrameworkCore; - -namespace Avolutions.Baf.Domain.Salutations.Services; - -public class SalutationService : TranslatableEntityService -{ - public SalutationService(DbContext context) : base(context) - { - } - - public SalutationService(DbContext context, IValidator? validator) : base(context, validator) - { - } -} \ No newline at end of file