0
0

Compare commits

...

5 Commits

8 changed files with 137 additions and 6 deletions

View File

@ -49,9 +49,34 @@ public class RautitanFittingsTests : ProductQueryModifierTests
public void ThreadTPieceExternalTest(string query, string modified) public void ThreadTPieceExternalTest(string query, string modified)
=> Execute(productType: "Тройник RAUTITAN резьбовой наружный", query, modified); => Execute(productType: "Тройник RAUTITAN резьбовой наружный", query, modified);
[TestCase("Фиксатор поворота трубы 16/17/90°, без колец (оцинк. сталь)", "Фиксатор поворота без колец 16/17/90°")] [TestCase("Фиксатор поворота трубы 16/17/90°, без колец (оцинк. сталь)", "Фиксатор поворота 16/17/90°")]
[TestCase("Дуга 90° 25", "Фиксатор поворота без колец 25/90°")] [TestCase("Дуга 90° 25", "Фиксатор поворота 25/90°")]
[TestCase("Дуга 90° r/d >= 2.5. Ø25 (767025)", "Фиксатор поворота без колец 25/90°")] [TestCase("Дуга 90° r/d >= 2.5. Ø25 (767025)", "Фиксатор поворота 25/90°")]
public void BendFormerHeatingTest(string query, string modified) public void BendFormerHeatingTest(string query, string modified)
=> Execute(productType: "Фиксатор поворота без колец", query, modified); => Execute(productType: "Фиксатор поворота отопление", query, modified);
[TestCase("Фиксатор поворота с кольцами 90°, 32", "Фиксатор поворота с кольцами 90° 32")]
[TestCase("Фиксатор поворота с кольцами 45°, 16", "Фиксатор поворота с кольцами 45° 16")]
public void BendFormerSanitaryTest(string query, string modified)
=> Execute(productType: "Фиксатор поворота водоснабжение", query, modified);
[TestCase("Угольник настенный с наружной резьбой 16-R 1/2 RX+", "Угольник настенный с наружной резьбой 16-R 1/2")]
public void ThreadElbowWallExternalTest(string query, string modified)
=> Execute(productType: "Угольник настенный наружный", query, modified);
[TestCase("Угольник настенный с внутр. резьбой 16-Rp 1/2 RX+", "Угольник настенный внутр. резьба 16-Rp 1/2")]
[TestCase("Угольник настенный с длинным патрубком, внутр. резьба 16-Rp 1/2 RX+", "Угольник настенный внутр. резьба длинный 16-Rp 1/2")]
[TestCase("Уголок с настенным креплением, удлиненный, 16 х 1/2'', бронза", "Угольник настенный внутр. резьба длинный 16-Rp 1/2")]
public void ThreadElbowWallInternalTest(string query, string modified)
=> Execute(productType: "Угольник настенный внутренний", query, modified);
[TestCase("Трубка из. нерж. стали для подкл. радиатора, Г-образная 16/250", "Трубка Г-образная 16/250")]
[TestCase("Монтажная трубка для радиатора, конечная, 16 х 15 х 300 мм", "Трубка Г-образная 16/250")]
public void ConnectionBendTest(string query, string modified)
=> Execute(productType: "Трубка Г-образная", query, modified);
[TestCase("Трубка из. нерж. стали для подкл. радиатора, Т-образная 16/250", "Трубка Т-образная 16/250")]
[TestCase("Монтажная трубка для радиатора, проходная 20 х 15 х 300 мм", "Трубка Т-образная 20/250")]
public void ConnectionTeeTest(string query, string modified)
=> Execute(productType: "Трубка Т-образная", query, modified);
} }

View File

@ -2,7 +2,7 @@
public class BendFormerHeating : DrinkingWaterHeatingFitting public class BendFormerHeating : DrinkingWaterHeatingFitting
{ {
protected override string _title => "Фиксатор поворота без колец"; protected override string _title => "Фиксатор поворота";
protected override string? BuildRhSolutionsName(string query) protected override string? BuildRhSolutionsName(string query)
{ {
var diameterMatch = _diameter.Match(query); var diameterMatch = _diameter.Match(query);

View File

@ -0,0 +1,18 @@
namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings;
public class BendFormerSanitary : 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;
var angleMatch = _angle.Match(query);
string angle = angleMatch.Success ? angleMatch.Groups["Angle"].Value : "90";
return $"{_title} {angle}° {diameter}";
}
}

View File

@ -0,0 +1,24 @@
using System.Text.RegularExpressions;
namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings;
public class ConnectionBend : DrinkingWaterHeatingFitting
{
private static readonly int[] lengths = new [] { 250, 500, 1000 };
private static readonly Regex _pattern =
new(@"([\b\D]|^)?(?<Diameter>16|20|25)(\D+|.*15.*)(?<Length>\b\d{3,4})([\b\D]|$)");
protected override string _title => "Трубка Г-образная";
protected override string? BuildRhSolutionsName(string query)
{
var match = _pattern.Match(query);
if (!match.Success)
{
return null;
}
string diameter = match.Groups["Diameter"].Value;
int length = int.Parse(match.Groups["Length"].Value);
int nearest = lengths.OrderBy(x => Math.Abs(x - length)).First();
return $"{_title} {diameter}/{nearest}";
}
}

View File

@ -0,0 +1,6 @@
namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings;
public class ConnectionTee : ConnectionBend
{
protected override string _title => "Трубка Т-образная";
}

View File

@ -0,0 +1,22 @@
namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings;
public class ThreadElbowWallExternal : DrinkingWaterHeatingFitting
{
protected override string _title => "Угольник настенный с наружной резьбой";
protected override string? BuildRhSolutionsName(string query)
{
var diameterMatch = _diameter.Match(query);
if (!diameterMatch.Success)
{
return null;
}
var threadMatch = _thread.Match(query);
if (!threadMatch.Success)
{
return null;
}
string diameter = diameterMatch.Groups["Diameter"].Value;
string thread = threadMatch.Groups["Thread"].Value;
return $"{_title} {diameter}-R {thread}";
}
}

View File

@ -0,0 +1,26 @@
using System.Text.RegularExpressions;
namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings;
public class ThreadElbowWallInternal : DrinkingWaterHeatingFitting
{
protected override string _title => "Угольник настенный внутр. резьба";
private Regex _type = new(@"([\b\Wу])(?<Type>длин)([\b\w\.\s])");
protected override string? BuildRhSolutionsName(string query)
{
var diameterMatch = _diameter.Match(query);
if (!diameterMatch.Success)
{
return null;
}
var threadMatch = _thread.Match(query);
if (!threadMatch.Success)
{
return null;
}
var typeMatch = _type.Match(query);
string diameter = diameterMatch.Groups["Diameter"].Value;
string thread = threadMatch.Groups["Thread"].Value;
return $"{_title} {(typeMatch.Success ? "длинный " : string.Empty)}{diameter}-Rp {thread}";
}
}

View File

@ -27,14 +27,24 @@ public class ProductQueryModifierFactory
return new ThreadElbowExternal(); return new ThreadElbowExternal();
case "Угольник с внутренней резьбой": case "Угольник с внутренней резьбой":
return new ThreadElbowInternal(); return new ThreadElbowInternal();
case "Угольник настенный наружный":
return new ThreadElbowWallExternal();
case "Угольник настенный внутренний":
return new ThreadElbowWallInternal();
case "Угольник с накидной гайкой": case "Угольник с накидной гайкой":
return new ScrewcapElbow(); return new ScrewcapElbow();
case "Муфта соединительная": case "Муфта соединительная":
return new Coupling(); return new Coupling();
case "Угольник RAUTITAN": case "Угольник RAUTITAN":
return new ElbowModifier(); return new ElbowModifier();
case "Фиксатор поворота без колец": case "Фиксатор поворота отопление":
return new BendFormerHeating(); return new BendFormerHeating();
case "Фиксатор поворота водоснабжение":
return new BendFormerSanitary();
case "Трубка Г-образная":
return new ConnectionBend();
case "Трубка Т-образная":
return new ConnectionTee();
case "Flex": case "Flex":
return new FlexPipe(); return new FlexPipe();
case "Pink": case "Pink":