Adds comprehensive service detail views and localization

Implements new service detail tabs for prices, duration, and rules

Extends localization support for Danish and English translations
Adds dynamic view components for managing service-specific configurations
Introduces flexible pricing, duration, and booking rule management

Enhances service management with granular configuration options
This commit is contained in:
Janus C. H. Knudsen 2026-01-17 01:21:00 +01:00
parent e9f3639c7c
commit 5e3811347c
11 changed files with 1018 additions and 13 deletions

View file

@ -25,7 +25,44 @@ public static class ServiceDetailCatalog
CanBookAsAddon = false,
ShowInOnlineBooking = true,
IsFeatured = false,
Description = "Forkæl dig selv med en komplet forvandling! Vores Klip & Farve behandling inkluderer professionel farverådgivning, farvning tilpasset din hudtone, præcisionsklip og styling. Perfekt til dig der ønsker et helt nyt look."
Description = "Forkæl dig selv med en komplet forvandling! Vores Klip & Farve behandling inkluderer professionel farverådgivning, farvning tilpasset din hudtone, præcisionsklip og styling. Perfekt til dig der ønsker et helt nyt look.",
// Priser
PriceMode = PriceMode.Matrix,
PriceMatrix = new()
{
new("Junior", "795", "895", "995", "1.095"),
new("Senior", "895", "995", "1.095", "1.195"),
new("Master", "995", "1.095", "1.195", "1.295")
},
VatRate = "25",
ProductCost = "85 kr",
Commission = "standard",
MemberDiscount = true,
GiftCardPayment = true,
LoyaltyPoints = true,
// Varighed
DurationVariants = new()
{
new("Kort hår", 60),
new("Mellem hår", 90),
new("Langt hår", 120),
new("Ekstra langt hår", 150)
},
BufferBefore = "15",
BufferAfter = "10",
CleanupTime = "5",
// Regler
MinNotice = "24",
MaxAdvanceBooking = "3",
CancellationDeadline = "24",
NoShowFee = "50",
RequiresConsultation = false,
RequiresPatchTest = true,
AgeRestriction = false,
ShowInOnlineBookingRules = true,
AllowEmployeeSelection = true,
ShowPrice = true,
ShowDuration = true
},
["service-2"] = new ServiceDetailRecord
{
@ -166,6 +203,42 @@ public record ServiceDetailRecord
public required bool ShowInOnlineBooking { get; init; }
public required bool IsFeatured { get; init; }
public required string Description { get; init; }
// Priser tab
public PriceMode PriceMode { get; init; } = PriceMode.Simple;
public string SimplePrice { get; init; } = "995 kr";
public List<PriceMatrixRow> PriceMatrix { get; init; } = new();
public string VatRate { get; init; } = "25";
public string ProductCost { get; init; } = "85 kr";
public string Commission { get; init; } = "standard";
public bool MemberDiscount { get; init; } = true;
public bool GiftCardPayment { get; init; } = true;
public bool LoyaltyPoints { get; init; } = true;
// Varighed tab
public List<DurationVariant> DurationVariants { get; init; } = new();
public string BufferBefore { get; init; } = "15";
public string BufferAfter { get; init; } = "10";
public string CleanupTime { get; init; } = "5";
// Regler tab
public string MinNotice { get; init; } = "24";
public string MaxAdvanceBooking { get; init; } = "3";
public string CancellationDeadline { get; init; } = "24";
public string NoShowFee { get; init; } = "50";
public bool RequiresConsultation { get; init; } = false;
public bool RequiresPatchTest { get; init; } = false;
public bool AgeRestriction { get; init; } = false;
public bool ShowInOnlineBookingRules { get; init; } = true;
public bool AllowEmployeeSelection { get; init; } = true;
public bool ShowPrice { get; init; } = true;
public bool ShowDuration { get; init; } = true;
}
public enum PriceMode { Simple, Matrix }
public record PriceMatrixRow(string Level, string ShortHair, string MediumHair, string LongHair, string ExtraLongHair);
public record DurationVariant(string Name, int Minutes);
public record ServiceTag(string Text, string CssClass);