diff --git a/Directory.Packages.props b/Directory.Packages.props
index c4c8c8f41..feceb7871 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -6,7 +6,7 @@
- 3.0.0-preview-18960
+ 3.0.0-preview-18991
@@ -14,10 +14,10 @@
-
-
-
-
+
+
+
+
diff --git a/OrchardCore.Commerce.sln b/OrchardCore.Commerce.sln
deleted file mode 100644
index cf438ae35..000000000
--- a/OrchardCore.Commerce.sln
+++ /dev/null
@@ -1,217 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.2.32630.192
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D15D472D-A6EF-441F-8278-6350D89E90D2}"
- ProjectSection(SolutionItems) = preProject
- .codespellrc = .codespellrc
- .gitattributes = .gitattributes
- .gitignore = .gitignore
- .github\workflows\build-and-test.yml = .github\workflows\build-and-test.yml
- Directory.Build.props = Directory.Build.props
- Directory.Packages.props = Directory.Packages.props
- License.md = License.md
- mkdocs.yml = mkdocs.yml
- NuGet.config = NuGet.config
- Readme.md = Readme.md
- Reset-Local.ps1 = Reset-Local.ps1
- renovate.json5 = renovate.json5
- .config\dotnet-tools.json = .config\dotnet-tools.json
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B2D057AA-E3F7-404D-A713-C3C59F9DE562}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.Web", "src\OrchardCore.Commerce.Web\OrchardCore.Commerce.Web.csproj", "{3E93C123-B953-4EA4-9573-CB63019F0F9F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{772AFE42-DF1F-49B1-9F64-7C901E588C00}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.Tests.UI", "test\OrchardCore.Commerce.Tests.UI\OrchardCore.Commerce.Tests.UI.csproj", "{2F8C30AF-0337-427D-A08C-AF7D5658D3BD}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce", "src\Modules\OrchardCore.Commerce\OrchardCore.Commerce.csproj", "{1BA22A56-B180-40F7-8BCA-A978F2CF01B5}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.Tests", "test\OrchardCore.Commerce.Tests\OrchardCore.Commerce.Tests.csproj", "{845CCF2D-EC38-4A4D-AE05-0D3CE6D1CF49}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{90913510-3D7F-4BCC-B55E-56343128F049}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.AddressDataType", "src\Libraries\OrchardCore.Commerce.AddressDataType\OrchardCore.Commerce.AddressDataType.csproj", "{251C019B-180B-431A-9D1A-0319316A67FB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.MoneyDataType", "src\Libraries\OrchardCore.Commerce.MoneyDataType\OrchardCore.Commerce.MoneyDataType.csproj", "{885A0D49-EDF9-4F61-8768-E789D59E68B4}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{4561F321-6E57-484B-950C-AC46798B1F40}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{A4CAB4D8-DD0C-4689-868E-DF45106E2DD1}"
- ProjectSection(SolutionItems) = preProject
- .github\workflows\build-and-test.yml = .github\workflows\build-and-test.yml
- .github\workflows\publish-cloudsmith-tag.yml = .github\workflows\publish-cloudsmith-tag.yml
- .github\workflows\publish-cloudsmith.yml = .github\workflows\publish-cloudsmith.yml
- .github\workflows\publish-nuget.yml = .github\workflows\publish-nuget.yml
- .github\workflows\validate-pull-request.yml = .github\workflows\validate-pull-request.yml
- .github\workflows\renovate.yml = .github\workflows\renovate.yml
- .github\workflows\crowdin.yml = .github\workflows\crowdin.yml
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.ContentFields", "src\Modules\OrchardCore.Commerce.ContentFields\OrchardCore.Commerce.ContentFields.csproj", "{8027FB33-B110-48A2-9B71-89F1EA96EB67}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.Tax", "src\Modules\OrchardCore.Commerce.Tax\OrchardCore.Commerce.Tax.csproj", "{608F7404-4879-43EE-9B20-4A019682BF20}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.Promotion", "src\Modules\OrchardCore.Commerce.Promotion\OrchardCore.Commerce.Promotion.csproj", "{87C422CA-C6F2-408F-987B-C8418995A331}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.Inventory", "src\Modules\OrchardCore.Commerce.Inventory\OrchardCore.Commerce.Inventory.csproj", "{93871E12-0083-4323-BB7B-3CDA6E332D87}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{BEBA1764-178A-4722-A193-4DEF26DCE8D1}"
- ProjectSection(SolutionItems) = preProject
- docs\index.md = docs\index.md
- docs\requirements.txt = docs\requirements.txt
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "features", "features", "{9B2DB1CD-2B4A-4823-9762-CF4E90661404}"
- ProjectSection(SolutionItems) = preProject
- docs\features\boolean-product-attribute-field.md = docs\features\boolean-product-attribute-field.md
- docs\features\exactly-payment.md = docs\features\exactly-payment.md
- docs\features\inventory-part.md = docs\features\inventory-part.md
- docs\features\inventory.md = docs\features\inventory.md
- docs\features\numeric-product-attribute-field.md = docs\features\numeric-product-attribute-field.md
- docs\features\payment-providers.md = docs\features\payment-providers.md
- docs\features\price-part.md = docs\features\price-part.md
- docs\features\price-variants-part.md = docs\features\price-variants-part.md
- docs\features\product-part.md = docs\features\product-part.md
- docs\features\products-and-prices.md = docs\features\products-and-prices.md
- docs\features\promotions.md = docs\features\promotions.md
- docs\features\stripe-payment.md = docs\features\stripe-payment.md
- docs\features\taxation.md = docs\features\taxation.md
- docs\features\text-product-attribute-field.md = docs\features\text-product-attribute-field.md
- docs\features\tiered-price-part.md = docs\features\tiered-price-part.md
- docs\features\user-features.md = docs\features\user-features.md
- docs\features\workflows.md = docs\features\workflows.md
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Commerce.Tests.UI.Shortcuts", "test\OrchardCore.Commerce.Tests.UI.Shortcuts\OrchardCore.Commerce.Tests.UI.Shortcuts.csproj", "{3DB5D0DD-1509-40B8-AD1A-47D5672BF484}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "resources", "resources", "{62DF9FF9-D2B3-4333-948D-2E405699B47B}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libraries", "libraries", "{C788AFFF-F440-4259-9102-5B4C1B91FAFA}"
- ProjectSection(SolutionItems) = preProject
- docs\resources\libraries\README.md = docs\resources\libraries\README.md
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCore.Commerce.Payment", "src\Modules\OrchardCore.Commerce.Payment\OrchardCore.Commerce.Payment.csproj", "{58DD682C-DA5C-4B51-BCB8-C65D690AAC67}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCore.Commerce.Payment.Stripe", "src\Modules\OrchardCore.Commerce.Payment.Stripe\OrchardCore.Commerce.Payment.Stripe.csproj", "{A4D69733-CDC0-46AE-B46A-163CCC6F77F9}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCore.Commerce.Abstractions", "src\Libraries\OrchardCore.Commerce.Abstractions\OrchardCore.Commerce.Abstractions.csproj", "{28DB6CBB-1527-42A1-8EFE-3D95BF185884}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCore.Commerce.Payment.Exactly", "src\Modules\OrchardCore.Commerce.Payment.Exactly\OrchardCore.Commerce.Payment.Exactly.csproj", "{73925C09-BF96-4727-91D8-57A88AD1601F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "guides", "guides", "{EF8008F1-64F5-4053-A639-6285084AFA52}"
- ProjectSection(SolutionItems) = preProject
- docs\guides\create-webshop.md = docs\guides\create-webshop.md
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "releases", "releases", "{0A8AB166-9C4F-4161-BD69-362DBC73A11E}"
- ProjectSection(SolutionItems) = preProject
- docs\releases\3.0.0.md = docs\releases\3.0.0.md
- 4.0.0.md = 4.0.0.md
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {3E93C123-B953-4EA4-9573-CB63019F0F9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3E93C123-B953-4EA4-9573-CB63019F0F9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3E93C123-B953-4EA4-9573-CB63019F0F9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3E93C123-B953-4EA4-9573-CB63019F0F9F}.Release|Any CPU.Build.0 = Release|Any CPU
- {2F8C30AF-0337-427D-A08C-AF7D5658D3BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2F8C30AF-0337-427D-A08C-AF7D5658D3BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2F8C30AF-0337-427D-A08C-AF7D5658D3BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2F8C30AF-0337-427D-A08C-AF7D5658D3BD}.Release|Any CPU.Build.0 = Release|Any CPU
- {1BA22A56-B180-40F7-8BCA-A978F2CF01B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1BA22A56-B180-40F7-8BCA-A978F2CF01B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1BA22A56-B180-40F7-8BCA-A978F2CF01B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1BA22A56-B180-40F7-8BCA-A978F2CF01B5}.Release|Any CPU.Build.0 = Release|Any CPU
- {845CCF2D-EC38-4A4D-AE05-0D3CE6D1CF49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {845CCF2D-EC38-4A4D-AE05-0D3CE6D1CF49}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {845CCF2D-EC38-4A4D-AE05-0D3CE6D1CF49}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {845CCF2D-EC38-4A4D-AE05-0D3CE6D1CF49}.Release|Any CPU.Build.0 = Release|Any CPU
- {251C019B-180B-431A-9D1A-0319316A67FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {251C019B-180B-431A-9D1A-0319316A67FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {251C019B-180B-431A-9D1A-0319316A67FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {251C019B-180B-431A-9D1A-0319316A67FB}.Release|Any CPU.Build.0 = Release|Any CPU
- {885A0D49-EDF9-4F61-8768-E789D59E68B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {885A0D49-EDF9-4F61-8768-E789D59E68B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {885A0D49-EDF9-4F61-8768-E789D59E68B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {885A0D49-EDF9-4F61-8768-E789D59E68B4}.Release|Any CPU.Build.0 = Release|Any CPU
- {8027FB33-B110-48A2-9B71-89F1EA96EB67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8027FB33-B110-48A2-9B71-89F1EA96EB67}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8027FB33-B110-48A2-9B71-89F1EA96EB67}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8027FB33-B110-48A2-9B71-89F1EA96EB67}.Release|Any CPU.Build.0 = Release|Any CPU
- {608F7404-4879-43EE-9B20-4A019682BF20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {608F7404-4879-43EE-9B20-4A019682BF20}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {608F7404-4879-43EE-9B20-4A019682BF20}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {608F7404-4879-43EE-9B20-4A019682BF20}.Release|Any CPU.Build.0 = Release|Any CPU
- {87C422CA-C6F2-408F-987B-C8418995A331}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {87C422CA-C6F2-408F-987B-C8418995A331}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {87C422CA-C6F2-408F-987B-C8418995A331}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {87C422CA-C6F2-408F-987B-C8418995A331}.Release|Any CPU.Build.0 = Release|Any CPU
- {93871E12-0083-4323-BB7B-3CDA6E332D87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {93871E12-0083-4323-BB7B-3CDA6E332D87}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {93871E12-0083-4323-BB7B-3CDA6E332D87}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {93871E12-0083-4323-BB7B-3CDA6E332D87}.Release|Any CPU.Build.0 = Release|Any CPU
- {3DB5D0DD-1509-40B8-AD1A-47D5672BF484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3DB5D0DD-1509-40B8-AD1A-47D5672BF484}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3DB5D0DD-1509-40B8-AD1A-47D5672BF484}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3DB5D0DD-1509-40B8-AD1A-47D5672BF484}.Release|Any CPU.Build.0 = Release|Any CPU
- {58DD682C-DA5C-4B51-BCB8-C65D690AAC67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {58DD682C-DA5C-4B51-BCB8-C65D690AAC67}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {58DD682C-DA5C-4B51-BCB8-C65D690AAC67}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {58DD682C-DA5C-4B51-BCB8-C65D690AAC67}.Release|Any CPU.Build.0 = Release|Any CPU
- {A4D69733-CDC0-46AE-B46A-163CCC6F77F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A4D69733-CDC0-46AE-B46A-163CCC6F77F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A4D69733-CDC0-46AE-B46A-163CCC6F77F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A4D69733-CDC0-46AE-B46A-163CCC6F77F9}.Release|Any CPU.Build.0 = Release|Any CPU
- {28DB6CBB-1527-42A1-8EFE-3D95BF185884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {28DB6CBB-1527-42A1-8EFE-3D95BF185884}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {28DB6CBB-1527-42A1-8EFE-3D95BF185884}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {28DB6CBB-1527-42A1-8EFE-3D95BF185884}.Release|Any CPU.Build.0 = Release|Any CPU
- {73925C09-BF96-4727-91D8-57A88AD1601F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {73925C09-BF96-4727-91D8-57A88AD1601F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {73925C09-BF96-4727-91D8-57A88AD1601F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {73925C09-BF96-4727-91D8-57A88AD1601F}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {3E93C123-B953-4EA4-9573-CB63019F0F9F} = {B2D057AA-E3F7-404D-A713-C3C59F9DE562}
- {2F8C30AF-0337-427D-A08C-AF7D5658D3BD} = {772AFE42-DF1F-49B1-9F64-7C901E588C00}
- {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE} = {B2D057AA-E3F7-404D-A713-C3C59F9DE562}
- {1BA22A56-B180-40F7-8BCA-A978F2CF01B5} = {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}
- {845CCF2D-EC38-4A4D-AE05-0D3CE6D1CF49} = {772AFE42-DF1F-49B1-9F64-7C901E588C00}
- {90913510-3D7F-4BCC-B55E-56343128F049} = {B2D057AA-E3F7-404D-A713-C3C59F9DE562}
- {251C019B-180B-431A-9D1A-0319316A67FB} = {90913510-3D7F-4BCC-B55E-56343128F049}
- {885A0D49-EDF9-4F61-8768-E789D59E68B4} = {90913510-3D7F-4BCC-B55E-56343128F049}
- {A4CAB4D8-DD0C-4689-868E-DF45106E2DD1} = {4561F321-6E57-484B-950C-AC46798B1F40}
- {8027FB33-B110-48A2-9B71-89F1EA96EB67} = {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}
- {608F7404-4879-43EE-9B20-4A019682BF20} = {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}
- {87C422CA-C6F2-408F-987B-C8418995A331} = {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}
- {93871E12-0083-4323-BB7B-3CDA6E332D87} = {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}
- {9B2DB1CD-2B4A-4823-9762-CF4E90661404} = {BEBA1764-178A-4722-A193-4DEF26DCE8D1}
- {3DB5D0DD-1509-40B8-AD1A-47D5672BF484} = {772AFE42-DF1F-49B1-9F64-7C901E588C00}
- {62DF9FF9-D2B3-4333-948D-2E405699B47B} = {BEBA1764-178A-4722-A193-4DEF26DCE8D1}
- {C788AFFF-F440-4259-9102-5B4C1B91FAFA} = {62DF9FF9-D2B3-4333-948D-2E405699B47B}
- {58DD682C-DA5C-4B51-BCB8-C65D690AAC67} = {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}
- {A4D69733-CDC0-46AE-B46A-163CCC6F77F9} = {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}
- {28DB6CBB-1527-42A1-8EFE-3D95BF185884} = {90913510-3D7F-4BCC-B55E-56343128F049}
- {73925C09-BF96-4727-91D8-57A88AD1601F} = {E6C02BDF-EEB0-4ABD-ADEC-9932F60923AE}
- {EF8008F1-64F5-4053-A639-6285084AFA52} = {BEBA1764-178A-4722-A193-4DEF26DCE8D1}
- {0A8AB166-9C4F-4161-BD69-362DBC73A11E} = {BEBA1764-178A-4722-A193-4DEF26DCE8D1}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {456CBC78-579D-483F-A4C3-AF5C12AB3324}
- EndGlobalSection
-EndGlobal
diff --git a/OrchardCore.Commerce.slnx b/OrchardCore.Commerce.slnx
new file mode 100644
index 000000000..ef524eacf
--- /dev/null
+++ b/OrchardCore.Commerce.slnx
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IShoppingCartHelpers.cs b/src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IShoppingCartHelpers.cs
index 3c27a69ee..2b58c6ad9 100644
--- a/src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IShoppingCartHelpers.cs
+++ b/src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IShoppingCartHelpers.cs
@@ -84,7 +84,7 @@ public static Task CreateShoppingCartViewModelAsync(
string shoppingCartId,
IContent order)
{
- var orderPart = order as OrderPart ?? order.As();
+ var orderPart = order as OrderPart ?? order.GetOrCreate();
return service.CreateShoppingCartViewModelAsync(
shoppingCartId,
diff --git a/src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IUserService.cs b/src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IUserService.cs
index 10235b1fc..820d756f6 100644
--- a/src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IUserService.cs
+++ b/src/Libraries/OrchardCore.Commerce.Abstractions/Abstractions/IUserService.cs
@@ -38,9 +38,9 @@ public static Task GetCurrentFullUserAsync(this IUserService service, IHtt
: Task.FromResult(null);
public static TPart GetUserSetting(this IUserService service, User user, string contentType = null)
- where TPart : ContentPart
+ where TPart : ContentPart, new()
{
contentType ??= typeof(TPart).Name.RegexReplace("Part$", string.Empty);
- return service.GetUserSetting(user, contentType)?.As();
+ return service.GetUserSetting(user, contentType)?.GetMaybe();
}
}
diff --git a/src/Modules/OrchardCore.Commerce.Payment.Exactly/Controllers/ExactlyController.cs b/src/Modules/OrchardCore.Commerce.Payment.Exactly/Controllers/ExactlyController.cs
index f11bdc5d7..ff7c3e779 100644
--- a/src/Modules/OrchardCore.Commerce.Payment.Exactly/Controllers/ExactlyController.cs
+++ b/src/Modules/OrchardCore.Commerce.Payment.Exactly/Controllers/ExactlyController.cs
@@ -58,7 +58,7 @@ await this.SafeJsonAsync(async () =>
shoppingCartId,
notifyOnError: false,
throwOnError: true);
- return await _exactlyService.CreateTransactionAsync(order.As());
+ return await _exactlyService.CreateTransactionAsync(order.GetOrCreate());
});
public async Task GetRedirectUrl(string transactionId) =>
@@ -84,7 +84,7 @@ public async Task VerifyApi()
order.DisplayText = S["Exactly API test order"];
await _contentManager.CreateAsync(order);
- var result = await _exactlyService.CreateTransactionAsync(order.As(), testAmount);
+ var result = await _exactlyService.CreateTransactionAsync(order.GetOrCreate(), testAmount);
var action = await GetActionRedirectRequestedAsync(result.Id);
await _notifier.SuccessAsync(
diff --git a/src/Modules/OrchardCore.Commerce.Payment.Exactly/Services/ExactlyPaymentProvider.cs b/src/Modules/OrchardCore.Commerce.Payment.Exactly/Services/ExactlyPaymentProvider.cs
index 6118d4c74..ed539593e 100644
--- a/src/Modules/OrchardCore.Commerce.Payment.Exactly/Services/ExactlyPaymentProvider.cs
+++ b/src/Modules/OrchardCore.Commerce.Payment.Exactly/Services/ExactlyPaymentProvider.cs
@@ -63,8 +63,8 @@ public ExactlyPaymentProvider(
public async Task