diff options
Diffstat (limited to 'RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings')
15 files changed, 264 insertions, 0 deletions
diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Adapter.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Adapter.cs new file mode 100644 index 0000000..4074e97 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Adapter.cs @@ -0,0 +1,21 @@ +using System.Text.RegularExpressions; + +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public abstract class Adapter : DrinkingWaterHeatingFitting +{ + protected override string? BuildRhSolutionsName(string query) + { + Match diameter = _diameter.Match(query); + if (!diameter.Success) + { + return null; + } + Match thread = _thread.Match(query); + if (!thread.Success) + { + return null; + } + return $"{_title} {diameter.Groups["Diameter"]} {thread.Groups["Thread"]}"; + } +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterExternal.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterExternal.cs new file mode 100644 index 0000000..8356c59 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterExternal.cs @@ -0,0 +1,6 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class AdapterExternal : Adapter +{ + protected override string _title => "Переходник с наружной резьбой"; +}
\ No newline at end of file diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterInternal.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterInternal.cs new file mode 100644 index 0000000..56e36f1 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterInternal.cs @@ -0,0 +1,6 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class AdapterInternal : Adapter +{ + protected override string _title => "Переходник с внутренней резьбой -угольник-переходник"; +}
\ No newline at end of file diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterScrewcap.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterScrewcap.cs new file mode 100644 index 0000000..43fa639 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/AdapterScrewcap.cs @@ -0,0 +1,6 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class AdapterScrewcap : Adapter +{ + protected override string _title => "Переходник с накидной гайкой"; +}
\ No newline at end of file diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/BendFormerHeating.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/BendFormerHeating.cs new file mode 100644 index 0000000..9d17519 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/BendFormerHeating.cs @@ -0,0 +1,22 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class BendFormerHeating : DrinkingWaterHeatingFitting +{ + protected override string _title => "Фиксатор поворота без колец"; + protected override string? BuildRhSolutionsName(string query) + { + var diameterMatch = _diameter.Match(query); + if (!diameterMatch.Success) + { + return null; + } + string diameter = diameterMatch.Groups["Diameter"].Value; + if (diameter == "16") + { + diameter += "/17"; + } + var angleMatch = _angle.Match(query); + string angle = angleMatch.Success ? angleMatch.Groups["Angle"].Value : "90"; + return $"{_title} {diameter}/{angle}°"; + } +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Coupling.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Coupling.cs new file mode 100644 index 0000000..4605308 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Coupling.cs @@ -0,0 +1,23 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class Coupling : DrinkingWaterHeatingFitting +{ + protected override string _title => "Муфта соединительная"; + protected override string? BuildRhSolutionsName(string query) + { + var diameters = _diameter.Matches(query); + if (diameters.Count == 0) + { + return null; + } + if (diameters.Count < 2 || + diameters.Count > 1 && diameters[0].Groups["Diameter"].Value == diameters[1].Groups["Diameter"].Value) + { + return $"{_title} равнопроходная {diameters[0].Groups["Diameter"]}"; + } + else + { + return $"{_title} переходная {diameters[0].Groups["Diameter"]}-{diameters[1].Groups["Diameter"]}"; + } + } +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs new file mode 100644 index 0000000..0adfac6 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs @@ -0,0 +1,48 @@ +using System.Text.RegularExpressions; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Extensions; + +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public abstract class DrinkingWaterHeatingFitting : IProductQueryModifier +{ + protected static readonly Regex _diameter = + new(@"([\b\D]|^)?(?<Diameter>16|20|25|32|40|50|63)([\b\D]|$)"); + protected static readonly Regex _angle = + new(@"([\b\D])(?<Angle>45|90)([\b\D]|$)"); + protected static readonly Regex _thread = + new(@"([\b\D])(?<Thread>1\s+1/4|1\s+1/2|1/2|3/4|2|1)([\b\D]|$)"); + + protected virtual string _title { get; } = string.Empty; + + public bool TryQueryModify(IQueryCollection collection, out QueryString queryString) + { + queryString = QueryString.Empty; + string query = collection["query"].ToString(); + if (string.IsNullOrEmpty(query)) + { + return false; + } + string? result = BuildRhSolutionsName(query); + if (result != null) + { + QueryBuilder qb = new() + { + { "query", result } + }; + queryString = qb.ToQueryString(); + return true; + } + return false; + } + + protected virtual string? BuildRhSolutionsName(string query) + { + var match = _diameter.Match(query); + if (match.Success) + { + return $"{_title} {match.Groups["Diameter"]}"; + } + return null; + } +}
\ No newline at end of file diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ElbowModifier.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ElbowModifier.cs new file mode 100644 index 0000000..cccf77b --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ElbowModifier.cs @@ -0,0 +1,18 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class ElbowModifier : DrinkingWaterHeatingFitting +{ + protected override string _title { get; } = "Угольник RAUTITAN -PLATINUM"; + protected override string? BuildRhSolutionsName(string query) + { + var diameterMatch = _diameter.Match(query); + if (!diameterMatch.Success) + { + return null; + } + string diameter = diameterMatch.Groups["Diameter"].Value; + var angleMatch = _angle.Match(query); + string angle = angleMatch.Success ? angleMatch.Groups["Angle"].Value : "90"; + return $"{_title} {angle} {diameter}"; + } +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ScrewcapElbow.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ScrewcapElbow.cs new file mode 100644 index 0000000..97e2fb7 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ScrewcapElbow.cs @@ -0,0 +1,6 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class ScrewcapElbow : Adapter +{ + protected override string _title => "Угольник-переходник с накидной гайкой"; +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Sleeve.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Sleeve.cs new file mode 100644 index 0000000..c546236 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Sleeve.cs @@ -0,0 +1,6 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class Sleeve : DrinkingWaterHeatingFitting +{ + protected override string _title => "Монтажная гильза"; +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/TPiece.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/TPiece.cs new file mode 100644 index 0000000..292da22 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/TPiece.cs @@ -0,0 +1,25 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class TPiece : DrinkingWaterHeatingFitting +{ + protected override string _title => "Тройник RAUTITAN -PLATINUM"; + + protected override string? BuildRhSolutionsName(string query) + { + var diameters = _diameter.Matches(query) + .Select(match => match.Groups["Diameter"].Value) + .ToArray(); + if (diameters.Length == 1) + { + return $"{_title} {diameters[0]}-{diameters[0]}-{diameters[0]}"; + } + else if (diameters.Length >= 3) + { + return $"{_title} {diameters[0]}-{diameters[1]}-{diameters[2]}"; + } + else + { + return null; + } + } +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadElbowExternal.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadElbowExternal.cs new file mode 100644 index 0000000..010fcc2 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadElbowExternal.cs @@ -0,0 +1,6 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class ThreadElbowExternal : Adapter +{ + protected override string _title => "Угольник-переходник с наружной резьбой"; +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadElbowInternal.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadElbowInternal.cs new file mode 100644 index 0000000..187f66d --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadElbowInternal.cs @@ -0,0 +1,6 @@ +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class ThreadElbowInternal : Adapter +{ + protected override string _title => "Угольник-переходник с внутренней резьбой"; +} diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadTPieceExternal.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadTPieceExternal.cs new file mode 100644 index 0000000..af5df72 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadTPieceExternal.cs @@ -0,0 +1,26 @@ +using System.Text.RegularExpressions; + +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class ThreadTPieceExternal : DrinkingWaterHeatingFitting +{ + protected override string _title => "Тройник RAUTITAN с наружной резьбой"; + protected override string? BuildRhSolutionsName(string query) + { + MatchCollection diametersMatches = _diameter.Matches(query); + if (diametersMatches.Count == 0) + { + return null; + } + string thread = _thread.Match(query).Groups["Thread"].Value; + int[] diameters = diametersMatches.Select(match => int.Parse(match.Groups["Diameter"].Value)).ToArray(); + if (diameters.Length == 1) + { + return $"{_title} {diameters[0]}-{diameters[0]}-R {thread}"; + } + else + { + return $"{_title} {diameters[0]}-{diameters[1]}-R {thread}"; + } + } +}
\ No newline at end of file diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadTPieceInternal.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadTPieceInternal.cs new file mode 100644 index 0000000..08afe62 --- /dev/null +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ThreadTPieceInternal.cs @@ -0,0 +1,39 @@ +using System.Text.RegularExpressions; + +namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; + +public class ThreadTPieceInternal : DrinkingWaterHeatingFitting +{ + protected override string? BuildRhSolutionsName(string query) + { + MatchCollection diametersMatches = _diameter.Matches(query); + if (diametersMatches.Count == 0) + { + return null; + } + string thread = _thread.Match(query).Groups["Thread"].Value; + int[] diameters = diametersMatches.Select(match => int.Parse(match.Groups["Diameter"].Value)).ToArray(); + if (diameters.Length == 1) + { + if (diameters[0] < 25) + { + return $"Тройник RAUTITAN настенный с внутренней резьбой {diameters[0]}-Rp{thread}-{diameters[0]}"; + } + else + { + return $"Тройник RAUTITAN с внутр. резьбой на боков. проходе {diameters[0]}-Rp {thread}-{diameters[0]}"; + } + } + else + { + if (diameters[0] < 25) + { + return $"Тройник RAUTITAN настенный с внутренней резьбой {diameters[0]}-Rp{thread}-{diameters[1]}"; + } + else + { + return $"Тройник RAUTITAN с внутр. резьбой на боков. проходе {diameters[0]}-Rp {thread}-{diameters[1]}"; + } + } + } +} |