From cacb6db7a4da7d245c47ee40df68acb6b007ea63 Mon Sep 17 00:00:00 2001 From: Eugeny Tatarincev Date: Wed, 19 Sep 2018 15:40:23 +0200 Subject: [PATCH 01/45] 2.23.0 --- CommonAssemblyInfo.cs | 4 ++-- VirtoCommerce.CatalogModule.Web/module.manifest | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CommonAssemblyInfo.cs b/CommonAssemblyInfo.cs index 76989aaae..11fb1dad8 100644 --- a/CommonAssemblyInfo.cs +++ b/CommonAssemblyInfo.cs @@ -15,8 +15,8 @@ [assembly: AssemblyProduct("Virto Commerce Catalog Module")] [assembly: AssemblyCopyright("Copyright © VirtoCommerce 2011-2018")] -[assembly: AssemblyFileVersion("2.22.2.0")] -[assembly: AssemblyVersion("2.22.2.0")] +[assembly: AssemblyFileVersion("2.23.0.0")] +[assembly: AssemblyVersion("2.23.0.0")] #if DEBUG [assembly: AssemblyConfiguration("Debug")] diff --git a/VirtoCommerce.CatalogModule.Web/module.manifest b/VirtoCommerce.CatalogModule.Web/module.manifest index 7690713dc..9d6db6ba0 100644 --- a/VirtoCommerce.CatalogModule.Web/module.manifest +++ b/VirtoCommerce.CatalogModule.Web/module.manifest @@ -1,7 +1,7 @@ VirtoCommerce.Catalog - 2.22.2 + 2.23.0 2.13.26 From cec086e99cec8907e1ed64fe97a7ab49d62750b1 Mon Sep 17 00:00:00 2001 From: Eugeny Tatarincev Date: Thu, 20 Sep 2018 11:31:00 +0200 Subject: [PATCH 02/45] Removed duplicate values from PropertyDictionaryValue (db cleanup) Fixed bug DB command timeout --- ...emoveDuplicatedDitionaryValues.Designer.cs | 29 ++++ ...0853133_RemoveDuplicatedDitionaryValues.cs | 25 ++++ ...53133_RemoveDuplicatedDitionaryValues.resx | 126 ++++++++++++++++++ .../VirtoCommerce.CatalogModule.Data.csproj | 7 + VirtoCommerce.CatalogModule.Web/Module.cs | 5 +- 5 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.Designer.cs create mode 100644 VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.cs create mode 100644 VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.resx diff --git a/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.Designer.cs b/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.Designer.cs new file mode 100644 index 000000000..583ca022a --- /dev/null +++ b/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.Designer.cs @@ -0,0 +1,29 @@ +// +namespace VirtoCommerce.CatalogModule.Data.Migrations +{ + using System.CodeDom.Compiler; + using System.Data.Entity.Migrations; + using System.Data.Entity.Migrations.Infrastructure; + using System.Resources; + + [GeneratedCode("EntityFramework.Migrations", "6.2.0-61023")] + public sealed partial class RemoveDuplicatedDitionaryValues : IMigrationMetadata + { + private readonly ResourceManager Resources = new ResourceManager(typeof(RemoveDuplicatedDitionaryValues)); + + string IMigrationMetadata.Id + { + get { return "201809200853133_RemoveDuplicatedDitionaryValues"; } + } + + string IMigrationMetadata.Source + { + get { return null; } + } + + string IMigrationMetadata.Target + { + get { return Resources.GetString("Target"); } + } + } +} diff --git a/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.cs b/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.cs new file mode 100644 index 000000000..ca5de9bc5 --- /dev/null +++ b/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.cs @@ -0,0 +1,25 @@ +namespace VirtoCommerce.CatalogModule.Data.Migrations +{ + using System; + using System.Data.Entity.Migrations; + + public partial class RemoveDuplicatedDitionaryValues : DbMigration + { + public override void Up() + { + Sql(@" + WITH cte AS( + SELECT *, + row_number() OVER(PARTITION BY Value, Locale, DictionaryItemId ORDER BY DictionaryItemId) AS[rn] + + FROM [dbo].[PropertyDictionaryValue] + + ) + Delete from cte WHERE[rn] > 1"); + } + + public override void Down() + { + } + } +} diff --git a/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.resx b/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.resx new file mode 100644 index 000000000..21864369b --- /dev/null +++ b/VirtoCommerce.CatalogModule.Data/Migrations/201809200853133_RemoveDuplicatedDitionaryValues.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + H4sIAAAAAAAEAO1dzXLjOJK+b8S+g0Kn3Ykey3Z1T/RU2DPhst3dji6XayxX994maAmWGc0fNUm57JnYJ9vDPtK+woK/Iv4TIEBSGl2qLBJIJBKJBJDI/Ph///O/Z399DYPJC0pSP47OpydHx9MJihbx0o9W59NN9vTH76d//cu//9vZ9TJ8nfxSl3uXl8M1o/R8+pxl6/ezWbp4RqGXHoX+IonT+Ck7WsThzFvGs9Pj4z/PTk5mCJOYYlqTydn9Jsr8EBU/8M/LOFqgdbbxgtt4iYK0eo7fzAuqk09eiNK1t0Dn01/8JIsv4zBEyQIdXXqZF8QrXG0ToKMr/OvoHq3j1M/ixEfpdHIR+B5mco6Cp+nEi6I48zLchfdfUjTPkjhazdf4gRc8vK0RLvfkBSmquvZ+Wxzay+PTvJezbcWa1GKTZnGoSfDkXSW2GV3dSPjTRqxYsNd4ALK3vNeFcM+nlSTL59MJ3eL7yyDJSwMGoBjDI4LeNxNVrW8a5To9OsXqdXT8zeRyE2SbBJ1HaJMlXvDN5PPmMfAXP6O3h/g3FJ1HmyBodwp3C78jHuBHn5N4jZLs7R49VV29WU4nM7LejK7YVGvVKfuP1QZPjunk1nv9iKJV9oynzen308kP/ita1k8qPfoS+Xgu4UpZssE/P2GGvccANe9n0jZzmeE5UTf8IY4D5EXaZPJ/+2f+Cj15ePw+etFq461kDPzpWxft332NUGJl1OTtXCbIy9AS63DTx/zvBz/U5xnPB//JFxED8fHhrbukYUw6aOmT9+KvCnNDd660F7UyYbt+j4KiYPrsr0vzfkQVKi3P36unmJ0kDu/jgKVGFvz7g5esUIb7FkNKz+MNNmjaPamf/uIFG0F3iCLizkiKMV2RldXtyA3eJYQhHvePfvSbcEDQKk7e6ldViyVX/HFRlucNj7qSbueqn75iaNSjAhwQwFiczbZLNmQhJ/XV3oJO0j0s7CZrk71FUbEmlKPRSxdVFs+lya7nC8xk15PQaHZxTKiFucWhephZJjNLsde1MquKQcqbqBu6ibJ3p9qszp/jJHtAr1lBT8L0dyenFrj+iM+6kNbwnxZau0ILP/QCorHq2XTyOcF/VQ4HrAXzhZcLTV+CWO5ohRKiEbOxqI5WBCXT41a9YSf7DtzFf4xzYbjW4JsMhX0cjSwuP8qWik1gD01d+YvcxHu4sZ6keDhg9nbAdHUQozcokEObJuu5NuqyX9YBdSEvqtONorxBV4pprNOPqoKyE0U5aA/Kwrrsk6YB3Am6mrwrZGlQh6gqnfa/OQVr294tscNu18Fu9+T41IlrdZ55SWZlPbqOjJaim/QCa/RL563aTfph85aX70ro4sXzcXk/wKp8v9nSM9uN3vrR3zZeNckc7Z2xmjhv4yHxFr/dRC8oygob3U3GnzExfJhvH7zc7blwyd5vLG69aPPkLXKLlnzGM+zTJnxEifO+/pj5kestHf653CwyxdhZaepX5K+eM1wlk7T0zsaJumwJPnsUo4+8FI98H4z/ZJXxkhNb1H71l/aIXUf59LtHLz76ypgfpX0s59/d01X8NQpib0kZdcUxsap0/br2k+rOXm+Rqyn0MWl+8tIvKUouVglCITbXmsKa4w3uGjPWB6sP3msfzfyComXs3vh+Tvw4aa3BZhuGPv38w3le8JqIVfPgcdkPj8tFmqKMf71avJJ7KgRFmAtWUTndC2FMJ174JaMinusCVXMcljkleBzzihnGGXB53R67eX4s9i3jZOAUserqIekzHh7OawWLZv6cuqI6wiFvjQpAECgurIYwykFRTVtLnv1gia0qv3ctGZa2VzAI5UuGZ7aELnvXyyKO0wvKLRyfS6qQXPzKwkwv1DW0I2dCYQhT8UreA0ERVvqCctrc4krdopV0vcwaUUtGPap1ubvGS4wONSegvN2jJ4QrLtDSYMWpn6Cleu0hywJWIapCpxCl1qpswYvconZwI5vs4b8kgaTR0+Pv343Zea3ypYb9uAzn/j/abt98t2wYFaZwPn43pgAA3dPi4WTV21228A6yw/GKXvBUxzDT1YFce+ysESTNw0phMn9bYrRkVHUvgaz4y+ibL5BH98Fbpe7Xq6EsM7m968HJtm2wRxfiYf3px7NHjaz2+YXn9YGU5y1Q6kq6hzT6nOX6cKbTKaO4K41uAL2aapa77xPq8bOZ4dIieNghGO3wh4icsBUPZGd3oTrYuhH84EFZPV3MDnjXWfr0DtuV/dquKPLTWiuCIDGNU4KXkcYrZnojZe6Q1wuXBrriyb2X/XsQ9gaQ8151A2LIZPc0Z4Z7UAXtRGez/t1tslVs0r2yIY3ukRWg3aNqmd31SM8h1NSkawinOllQNeOp0roTv/oJT0gXznPoFIdMHHjWQGgzE71F7bBJP1z4DHaL8mMSb9aut0TzOMnukuU2ENzsUNJfyudhc7x/m2Ohg6hDwAoTPKEIbLETWWaysVRwKl7RtV1Z5ObHokuLJHxYNY08LMRWdAgOCFCjHkwsebZw0aBwFtPHi/4OJqKNPOw4A+0fBYLVF3oWsHN8yC3tvmmPXdczs273LJhu8rxkEQvoYKrdHTVcmudeos1uUiz27unPc6977vNNeh1twu5UbqL1hk080yZzj37f+Aladqd0iyeRbwUS6CYtcX2u0BpFS4+TX6cbrREE8dcC2rj7lVfLo9tW3eEz0Q4nzX/Bk6ZdvE0ROorL5KUOvlg1uzaAaeQuZLJs7b2uXvI6Ia0gdC/La+m6+a/8dB14b/kPVe+agqCuiUpL+iWsYghC+3aR4cn3uMkUXWuKATomKivslrCCbqfwOuMvixc5Tory6rJVFtAtaQXZZaakVqd7D5m2Wzwq8MgfDg5GYbDtPVUHLE7DXdiwSL2kGgFiC7YV9PDMIPUAKwcAFk3X1va5NIpWe9iCaskeucEx5tI/WCSjj4D0hA7cB+6sA+xUS8ZuODOntgKuoByFW1arhoCifTACRh8M6GV6KrymdizNOLY6wPXe0mFRPMeV58tOM5s6tVmc1xTlw6zusutvhDnMtQXDhmrLMerczl7ty8FR3L+jGGS6rTjDRGZb6T3rZLR57ii7n5hhyB/Mt1nWGa7/e/fbwctnL7mMN1F2uwXiBWWkbyvm32zRqHiPVtevssjV0+Nv7aBb7sxez7KvWQLLD/BQd4ohZCHiLMYRssQPtmO4vc5gMD493r3vwCfsFMiMevCPwhg2SRXbn4xRN2kIa6nfN/sh4PI2hYGHkuKa3bIQdMgFpbRg5rl0DxZ+OAvfaJZjKxtHGdqGpTn7LGCpVvOsdaY1jDPLlTHKZFe1djjesQ/yHRwW43NYqFZbywDG9GIEhzyGLEUtIB+ye4Jv+JIyuo6WE60P+pZDJPxUMB62PEh3jRcW/Ot8+gdmVKAtNtEGTIv8lk6m9FJ1F12hAGVoclFc0eUNpgtvySoKluySfFKh/mZ4kLAlTvF66UcZuxT60cJfe4FOfygiwBU1Z7Jpjn5TBjFjbnVGEsJHa6vPstO0SslSJbqzWUtj5YrcOqMz33kUKZWkDk+JOcV1VFjWmq4CHx8dnTBNGSkigKse1BAwErughCJwVpFKKJFat+pAoG7DlU75qY1tC+3gxrGZS0U3etBQxVCBOKj2iYOoJoVoAljhpchIhJ0igPy01nQZrNJOLeaSjvSziktGaxcspwiKQKQ7SlyCll0LjXacyk91QCynvXVawU4PSqYQ+egtIBc9Ajj6lKfQtnJRYE5Q4+pMuwh++lctQtpA69VcaQy6usrRDFQLIRDagFUP+sZQfw0Gwr1BNdOSWmpx1+M6CxooCD8sKsmY1JdEq9BUIQF0RQ/Ky8e/6P9orcPecMrLHScIOwyezShV18jyioBJ+lTewfcEWgyOQH+1jS8LkDSGkzkFYQo8PIvwTB2c0wVgqANqqJSx/o/f/LGA8MFilA/qS9d0o8M96ObO89H5zQd3me+uz4ftgdzkCcq7VrTBzZyCpUF0bfeO6Fr5oCrt0EsOZfVSkMKtr6Z6yfgyRsZ8/WPS2x6nhY42QNhiM61HMmN4yAlwDZXCKJippt4UkUIcQRePMc4GSccGmQaSkQZtg1uZJwNrvjCHWK116oRins4z2fwmCq8GvtpFbVf1qldVV43uTum5MOFSpWrq7EtW0Zi8dn0NVyOg7Z5+q/rUo3arRnWndFueG6jSNGCiIDdIkJMIbBQtCEHF2z19B3WsR6UHjfROaD7o27wivdP7UC8Rn0h/910rShH+od8BPDA6/PWgsjpjBGGH/zXv0emuKpQW+B3mHnR2yEAxKF8D66muT4T9xP1I9FNTK3vSRZMgb0fqN7jS7VaU4tZ1orp3Y4tyIxSNnGcc2vpx2XZCE4Wc9KBMYhED7zyGDaomuFcEvLJlXWnT4Ns5CTu969TuXaQ1DIgxM0R6oK4qi1zhYePoR7EAkDh6tnBwznrQTvgQ7YIFVPdGun2DVR9SZwfb5+mxNgrF3al9oLw7sNhAEOpNvzo7+Nqvwd7gSrt7ewM1GoZIbTSgMbZKI0BSgisrHF5jRxKlwR3qQbnBQzp6Y9yOZyhCdCHHqLKkk0NURXqoVFQRI/0enkj5gm5mihpjuJGkQS5AQYeCev1ClQzp2gay1YMaAodk9IZN0A9YHDavUn/KOPhOEsLXcKq4e3tHXkc0w7LNgrEt6qXdwGu3ujp42PQOB0uXXOfAm7gGSkhv1z1ax2m+9X27CdcBB9j1S4oqbNe0giOkdSynPkcZSbd47Odf9SsLiN2UjM5y6RGgb1K6NG6fgj47wHzq3AmooN3MFj7J9mRSUNoiOvFJEYhbalrEpaOQIn3Hqx6p7VomHCJiuVPJL5SPOAFoAuSO8FzIuaT9SkBNAiiRJkWO/ZXT5xts7dagc0KQIQRuj4xPVrXFRJ0D2yEjReWtMHG/cCtCB+YpzQkn9BKoy4wnTq7PPF+poiWeW4TfiMC9RdFvWRW5iW9h2rfqyCw9/0KPdvcCoGAbGUgWH2bZhjZS77LYRkTEiXUdVwAIVHLi44lTVlzcT0ktnigF66xEkLIGehGjCCGTI0IQmCbROxWcZqtn1OIvEZkKQbNFlFxJOsuKghWQT14luCP3kgY0XakdiHyeyhAdnWqWCEGQIy4Q2CDpe1XADbaVIIRaNRXCoDvN4kLhqQXFcQvJOkQ6hGyIiPT5aGhph9knh3STTEYNLDjuJIKhwXGEwG5fAFMWBgA3iMhJGDK4xCXwZRAR8AHMHMmbj1nm1GCqONFVcBnklpYIelFwAc5WPwpe8UBBPakXdhk2lGwhFqBDWVrmBYBQbkVJHvshW3HtXTh8A6619x7y9AJY80VFdTomVLOOAhtCwUB4MRI56uPNcIWghTjDkbjQAwUYAC2QGWnblvexMt9c6/ufkMFRQpsoJCMDNzEWiUGbkmFwInghQIZU6jBYDUH3lcAaXHlzHKIgYSuxNPqRtPib2GI5w2AduP1WAjtwes1xBgMkrMRy6Ee+ik8ISz18UHwBkSsOgDDA9/px/eIw9x8AVMCt4EFZ6ny3oGZ2O+3Og+e3kw5D9oZP7jaEp7S73ckoc6o1paz2wsIysR1JtycfmiATGCRLbQm6k1tfHkc2rZXnb1Qkv5K+QXH6K7AfKnL9+K05SZpK0Sg9sZJszu7CGcJlIsk2lPhNoDmKXPcGIEuR03f+BTLAmwJITOzFH6jIlTOStsLgwQj0LPWeb/lkiV7aMof6ByEZYu6l3ac9AXyvlxW2ZloT0XV4YlOr48IYEYmM4blMvSzzVaKMfCnjZdOIFh4qn6bjMkal0LgTiSrrQy94BOgtVKWK8I+T3YNIelIzadoCXKBQx7Y00cGFKIfwc5t5tzv5tM082d2k26PXuv4KexMm3rw7m80Xzyj0qgdnM1xkgdbZxgtu4yUK0vrFrbde+9Eq3dasnkzma2+RL6x/nE8nr2EQpefT5yxbv5/N0oJ0ehT6iyRO46fsaBGHM28Zz06Pj/88OzmZhSWN2SJtDxId1N60hFeVJgqjeYubxpz+4CdpdoXn/qOX4tG6XIZsMW5QvCBEsm6TH/fOjnReLQ+YrOvlf5d1f/GTLL6MwxBhPaqjG7FwNwE6yhk+ahjClKn4eaqdrdR/wIII8bJRyAQJduOc+pjCfOEFXlLrViuR4jIONmEkTqwQ1867iDWGJNE8hNPJ/yWJlE/gFK7Qk7cJsjo+kyTGvITTvfuKVYgWUvMQTucyQblnCI87xRvxAk4P65H/5PMIkm+0OfzwxuXvAxP1C+GOJtZ+zlI7m1FKTs+2GTPdKENIz2KdOc6EAzuf61ROi/GcV9FxM/f5U81kjtU7N4qd1uPR6Ap/B+BOU3j5Sfp6AqLiRku6W/aC6Vx+1CqzfQynNX+Ok+wBvWZFbZIg/U5jJsTRSkCUeqWzni380As4JMk3cIo3Ed64o4RDkXwDp/ghxntcL+JQJN9o9BovNQ9+iHjdJl/pjA5+ygxL+UxDelVmJyE3QbanmIqJpZPQarKlKWLCLGqJ5JkcVkL4ygxXCZ+Hnc9Ydz7EqdLdItbKVtRfu2SVx7pkzTMvyVj9bD2G07qOOJrePNQwYGmO//RCm/7mqQ6lD5s375G2qa3HcFoXL54feI9+gMc3DwQhSbJvNSaiH/1t45WKQ87E9gsNet6rgF77BZzeQ+ItfruJXrDOFy7DNkn6HZzqZ1wR777Z7RLxQsM0xkvaascsdJhcbtHmyVtkmwQln7H+f9qEjyihRcgvA2/lx8yPSJrlEw3JJdh8LTKO5Nov4PR+Rf7qOfsS+RlJrv1clxqPktZYIC/FMmaZIl7A6f3E4eonba4+omiVPVMbtOqZhoT8JU2keqRja3P7VV5e0Qa3/UbLapTKfPd0FX+NgthbMtaDLaCxbavqXL+u/aRwAFMbN857ferspCDfaGiMl35JUXKxShAKi8s5QneYtzpHO7/YSLC8km80LLT3yhJrHmocYFG0jCmLVz/TsU8+3k3Ri8/26T4cQrboeOTSJcLMk/B1OHSM9dBB5r27O3W0wXP0jx3S2m7OHV8S6iKleNDnueXWDzlbx+1TDWvs/4O2wsUTffcyuwMl3/TuwjlYlhFbFiYU2al9oaC0jKyMioYbW9NqmJ3wzMshdin8w7bRSdtbpfQmbsUJ25DI2orlIPMDaHrsWxPKov0Yv8TB6u2B1WMCspzeW7eB/owurKUE3Bi77k4se85Teway+3ZvjG5qW4dum4dcEl2Cfzw9mFU4dzthVkmEKIeXY2GXCCBp7X09pto/Gv6YxJs1dX9QPtKwpnGS3SVL+m6j9XiAaAOLzrmDrRqtrRKiUrnfClLIs+ZbQhUhN8aMBJmjabFvdTYyLTg1mjDz0oAul2P27WiUtO5Hj1GTnQMmdy3wpBx+3gZ6+1zn1PMzeqOPPMUjHRpzJvqufqZD5TrahDSV8pkOlZtovcloMtVDHTr36PeNnyB6tFvPdagVn9zgxWUSb3QolvGN5TcnPPqWlfNaw9UUBPHXi8D3KJda+7lW0MU2MJkbekG/3odrzsNOarQ7qZp3Qead+yWL+40H8wUMRs7RHQPPShgaCMbp0no+YuXpO02E/8kOG+ozQOoIZ0UcKPi/e3D84BrJYg/2oY30R126aKKSlhsttKNB3bf2O2kJWTxG91pHf+THXOeUlNxoHNM8qzyCIh3a4BhbUZkhLrvMtP+wAd/ZDbgAWtS9+eB+usvchsDIuTEkN+mXyP+d9SrUTzXU8dlLLuNNlN3SaRbkGxOK3quIYv4GTvEera5fqUuc+tmeLrNSMDT3vn/Ol+fM/f8QYq7WW1ur1Civ7XYHXEEEOedOk/mfN9RXYiCdsetvDXnF3oHphVtFGaKdzs1DHYOey3KeMZsq4oUOX2E+eCnNWP207zPhIR59L/ayDMYaXaRpvXrS/G4w1ip8MwJ4rZBADqNW9DytsNZowLOyyHSCxfTiL3Ows/lbinWotHXz34PLwC+mXV3g1ov8J5RmD/FvKDqfnh6fnE4nhVu2hNWroNze018MB2G7nbzLsd3QMpzR1fUR4nIqabokcNpalp9c3SqDy37n/CZaotfz6T8n/03hvf2M3mglqFVN9pX5sxld8Yxjy8sP6EYvXrLAm9npBO9ky4TW8+nJ6ffTyadNEOT5pOfTJy9ImclEk2wA1Uq6j3mSriaJ0j9gmS8GVk1C/0/fapNvUNbgbBdfsleQJexiSRof0FDm5xLSZJE0iWJiGnzlFgwsRwjdtmnsQLhtIyFTkgIl29OpaaD7IF3Y7s5pumI55lXfT27+q0HCXX4zKSIP30+OsZD1ugoebuKOfr8HW2lE9Qe6FdlQ0vUjfeNOI5dJOPwuX+71WKQgzEji/xF6r/+pS5FEMKusZvks36jgv9Jix3GChyjfBeLXp9pCIUHNzIVLQpmZr8AUflm3taI+bFjVxfrsYWBxyqpQczNCCwhkqfG/mPFUVbfJFHv5bMAaTcSq1A7bLafbrVZcz7/qsntyfKp/umhluXXUyibLrZtCbrMJzReZFgabOREWdc189STA1hyt9AQAm6M2aEQ2c+kSQGyWT7ZF1hPc/tc3ge8nD5g6ZeoNDuwiGDe7vSyB3aza7M9tiDerlNtobxLC77R35TX4m76+gxaxNh6cVb5/csp3DRvnhnqFJ+eGOIkwx7UvoJHj4clx7Tdod8mBj+u2ypHAcVbnGoseZyxFEjLOKpdNLrtdP0KFJ2fX1G7vEM13AB0Ock3Vi2hZg8A1R5MTbZfWjpzotnB3VuV1ejjKjf0o18ac29OzXIEVIKF5evz9O/cHRNDgN6h3dm1qiYNXr0wrE5NKohzIvL2jdQHCzPPB3ri2NxT63J5aHQbQzjJ9G/sk2oVhsFsvYe0s28FxmQQWJc+AL5qIzd0bH2ivE5NutpkH4+o8DKINdbenllW5BTFwI9pwhNuwyE5ipkZ37eDGHzF8AIvoYN3RLNNEDiZ5d0xyGyxvT+3x7pyv3R1iK+Q+q6raQvEzX1DGFmAzPt/nwQL2symlEu321Biy8H0Gik4TsbolYXAADRikaNicjiyaYBf+OtsL7Zjk/VZvJ+eTNlKgXcd3BR3YJbhp7nWLbKohA7tQqNACu5DYogR2odLGBuxChwED7BA51gIB7HJ2L39aiY0/xBEfdl4yHvvaedXNcwH59nSBIiyBnvM7r5lHMVQE23Ef38jjFqkMFy2LY+qqF3N7quDWQSIWH7NvT1XMUcaTg+yaQRM17OgVjcC3pzrlZPiVm3UDPe1otjjmqgc1okH19lSJmO46Oa0xrajt4VDxDWNQ1sO2d6htLxcGb0+n/hZgz/wMTMLqGUcEkVh6xmRqGD3pxdK3BuHlw5sEbdc5B6duT/XYhtUfV/TYOD0vg4dKgOcAH+buoP5CGjV4nl1PeoOlR5I1wuIgsPQ6uFkbFD0LPO02usVh3ynh0dG+sxXgTVpVEoWqtpaUVbqOlpP7ONjWqg1byWkOi3dEvSkuX9aBv8C/sAYwEKV30RUKUIYmF4sSPe/SSxce+1HKvENLBTc0khbLFV2C5O4PTKPY1qI8jA1bcmxL0izxfBYTEdu/aOGvvYArG6o00JDnHW7o0m/KK6gcXlXWfUjDEnDbs1nTDDUQKqGczVpaJlc+4gbLreodHx2dMOO7pcrhhKDNfb8f6sPr2i4oTysLsNnd4QVIqDjte6TWyLYf92KtiOzFFiPEcyeqJf1SlnW9avcH1JwA0rcXZSKzEHZv/SNSKEh2iFf7YbKoXu2CtWrFVLuxVooFjojpbhMMXe+H+rU68s/Ej8zqUEpR6LTM5pjN8tFqhsE07lk7ZJ+S6HVdIj2pVLCtfZWR6YsoNppDnC6yJ1oE/qY727L6S+lDqhURIt3zCWyEajXMpsZAq5jw+FEq1TDL2wj1anfMFZvYMIbTGZlbOphGlZXLj4EMcOQaSItavYa0yiYTD+ppHIWTUeJf3K8ljerVLpzTWUUZxsiMQFd6NjBmyjIOs8KNJaeikIUqJE954Aw8v2AvrkZF8LyUWfd3J1IB9ajC/D5DGGCj30ei11tBNvFkSoXWtl29Ka2FCWZZZYdUUs1J0g5HHFg7qUyLXVZNJmmEq5dMqb1TSrqHO6WRVNLG7uojk33CYYwps2e6SPdvpzSRl0iwu+rIT4vgx+dwCu6ZYnI7uRPaySDpcuA7ez9qc+B9ybAc+u2eHLjZnkEa5QO3jk6beg2uGIcG9R7e1Ul7Bj3fsppjO3TwoCzdlWXY2Jytw8NZNKAkKEdX43b1ikBTD4e+HiC1YqCAreF0o+9wLW3lGMc9NZv7OoQNkWXicnSRV2w/bIykh7tgc9Ra1d/mZaw61e92pqNCjSLTga9Nw0bUjE2rhouyMTdVw66A3Mz3nUrPEuTut1gSlNgDu8bv2ehNWvtuugg36y+rpqnIhAE63473nFdD9hTkbW4+0Dn0TQidXNyrc3A8qcXDBMPohsCMIvCFUpphYwCH15zhogENstLHERI4lkDAndGxsQTv7UTIXslfDnCEa6CkQRdaoh/8JM0/nOY9eiliVK1cwDPSs1EPa/m/2PU0Xzyj0DufLh9jrCMl9kzt12I1jNsUjcAiapIuJ2m6LqpkgavKDAPcUrzmiYLKxtsTlGmz/ZLXVGE1VC0Q+BFME8RbiTSLcpC26FsqXot0GV67rWIQJSJWU572EAUEHS2Xc+WQhTJFJd5KBFqUA/eMdmsIe0gXlPW0LgueIcrJAZkX4Nb4q5iwbX5xGSfU8qvPF8xiCMrDOINZEUkgqIQtpqycpaY4mB0mElDIDFNSxkpTWMe0c8K/ZDaeU1xh7Fs1wNOa57EUTm1eYdn0bpdXciRwXjHMCMrx+KCKMiy0LLxiP9Dckk1adWQbA/61muxirZEH84bZtSkB5lhadAna70iKAiAmiRODJyRZcbcikmyuCkrc953FI8IA44gGBBcmdAS1etJ+LBEIZztWVCeedxYAlRktnz9KhCsXE4ezYauJEK86i0KEsMSRBQiMyaIucHaSZfXQpq3gogmpe8/xbdkZwwFEIICgoOByJLNDA2fHgZDkpwCCGl3ElehISBi45CRQMs6szBjFpqtxMrSUPdW4qucUqod6CZPBgDgUVV07v+9zuZ6xSASqXd8gGz7JXs+hKIQ6IirqWjuGEAcIdUAiI33UAo3rCo4A+AUBQpV6YgRN2D1owBLiQbJWZtLb0Sv3Q9VJjMLMbakMYfneTgUocLxR0mNKWROdMMVYIjhYWrJDsQkchAQ5poxN54kkF1buRoEm0ToUnsypSftWOAVtOFnUSZt8j4tmsqeDdVl4U1U7Y+i3TsUlcU5pZDLa9VINLh64UPZMFJwUM567RpGIZn1nry3Gzl0Xu6pU6VYuPFU9dB+QKCQ5/0LTi5w5WsTXWYSwecV6EJ3Inpjk0Vi0L+MXntLxAs4Zceh+GVJ86uwGjvA0UyIsapz0rrcgJChh07xXEfly484L27d5/0KF6bsy66qQc70bW6e6Mcx9rTS8Gi6dfl16w4sI7tIbuSPPjSjrrx024bDNu7NZGbBSPcA/sbnzVug2XqIgLZ6eze43Uf4JyPLXFUr91ZbEGaYZoaK3W6J1mZvoKa45pziqi9Svq8G9RZmHT+jeRZL5T94iw68XKE39CO/3ir5jkxw+4jNfdLfJ1pssDxYIHwNCGHk0saz9sxnD89ndOv+V2uhC5WRAd9GHjR8sG75/4HwvV0AiD1P+EeHn5VhmST4n3xpKn+IISKgSXxNd/YDCNV7yUXoXzb0XZMLblxR9RCtv8Yafv/hLlIiJqAeCFPvZle+tEi9MKxrb+vgn1uFl+PqX/wc4LXwQKxICAA== + + + dbo + + \ No newline at end of file diff --git a/VirtoCommerce.CatalogModule.Data/VirtoCommerce.CatalogModule.Data.csproj b/VirtoCommerce.CatalogModule.Data/VirtoCommerce.CatalogModule.Data.csproj index e7c39bbc2..2e06c58dd 100644 --- a/VirtoCommerce.CatalogModule.Data/VirtoCommerce.CatalogModule.Data.csproj +++ b/VirtoCommerce.CatalogModule.Data/VirtoCommerce.CatalogModule.Data.csproj @@ -195,6 +195,10 @@ 201809190617321_DictionaryShemaRedesign.cs + + + 201809200853133_RemoveDuplicatedDitionaryValues.cs + @@ -345,6 +349,9 @@ 201809190617321_DictionaryShemaRedesign.cs + + 201809200853133_RemoveDuplicatedDitionaryValues.cs + diff --git a/VirtoCommerce.CatalogModule.Web/Module.cs b/VirtoCommerce.CatalogModule.Web/Module.cs index 902061950..d68de56e5 100644 --- a/VirtoCommerce.CatalogModule.Web/Module.cs +++ b/VirtoCommerce.CatalogModule.Web/Module.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Web.Http; using FluentValidation; @@ -50,7 +50,8 @@ public override void SetupDatabase() using (var db = new CatalogRepositoryImpl(_connectionString, _container.Resolve())) { var initializer = new SetupDatabaseInitializer(); - + //The workaround of a known bug with specifying default command timeout within the EF connection string. https://stackoverflow.com/questions/6232633/entity-framework-timeouts/6234593#6234593 + db.Database.CommandTimeout = db.Database.Connection.ConnectionTimeout; initializer.InitializeDatabase(db); } } From 2e20f61bc5e84665ae8b319ecc010e3cf621baaf Mon Sep 17 00:00:00 2001 From: Eugeny Tatarincev Date: Thu, 20 Sep 2018 11:35:36 +0200 Subject: [PATCH 03/45] 2.23.1 --- CommonAssemblyInfo.cs | 4 ++-- .../Scripts/blades/property-dictionary-list.tpl.html | 2 +- VirtoCommerce.CatalogModule.Web/module.manifest | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CommonAssemblyInfo.cs b/CommonAssemblyInfo.cs index 11fb1dad8..02fa1a6ec 100644 --- a/CommonAssemblyInfo.cs +++ b/CommonAssemblyInfo.cs @@ -15,8 +15,8 @@ [assembly: AssemblyProduct("Virto Commerce Catalog Module")] [assembly: AssemblyCopyright("Copyright © VirtoCommerce 2011-2018")] -[assembly: AssemblyFileVersion("2.23.0.0")] -[assembly: AssemblyVersion("2.23.0.0")] +[assembly: AssemblyFileVersion("2.23.1.0")] +[assembly: AssemblyVersion("2.23.1.0")] #if DEBUG [assembly: AssemblyConfiguration("Debug")] diff --git a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.tpl.html b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.tpl.html index 7573c9156..66b6697b3 100644 --- a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.tpl.html +++ b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.tpl.html @@ -21,7 +21,7 @@ ]})">
- \ No newline at end of file + diff --git a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-details.js b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-details.js index 48bbcb195..732f1610e 100644 --- a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-details.js +++ b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-details.js @@ -1,6 +1,6 @@ angular.module('virtoCommerce.catalogModule') .controller('virtoCommerce.catalogModule.propertyDictionaryDetailsController', - ['$scope', 'platformWebApp.dialogService', 'platformWebApp.bladeNavigationService', function ($scope, dialogService, bladeNavigationService) { + ['$scope', 'platformWebApp.dialogService', 'platformWebApp.bladeNavigationService', 'virtoCommerce.catalogModule.propDictItems', function ($scope, dialogService, bladeNavigationService, propDictItems) { var blade = $scope.blade; blade.headIcon = 'fa-book'; @@ -8,12 +8,19 @@ angular.module('virtoCommerce.catalogModule') $scope.blade.isLoading = false; $scope.validationRules = blade.property.validationRule; - + $scope.setForm = function (form) { blade.formScope = form; } + blade.toolbarCommands = [ + { + name: "platform.commands.save", icon: 'fa fa-save', + executeMethod: saveChanges, + canExecuteMethod: canSave + } + ]; function initializeBlade() { blade.currentEntity = angular.copy(blade.dictionaryItem); - blade.origEntity = blade.dictionaryItem; + blade.origEntity = blade.dictionaryItem; blade.isLoading = false; }; @@ -21,18 +28,27 @@ angular.module('virtoCommerce.catalogModule') return !angular.equals(blade.currentEntity, blade.origEntity) && blade.hasUpdatePermission(); } - $scope.$watch("blade.currentEntity", function () { - $scope.isValid = isDirty() && blade.formScope && blade.formScope.$valid; - }, true); - + function canSave() { + return isDirty() && blade.formScope && blade.formScope.$valid; + } + blade.onClose = function (closeCallback) { bladeNavigationService.showConfirmationIfNeeded(isDirty(), $scope.isValid, blade, $scope.saveChanges, closeCallback, "catalog.dialogs.property-save.title", "catalog.dialogs.property-save.message"); }; - $scope.saveChanges = function () { - blade.onSaveChanges(blade.currentEntity); - angular.copy(blade.currentEntity, blade.origEntity); - $scope.bladeClose(); - }; + function saveChanges () { + blade.currentEntity.localizedValues = []; + blade.languages.forEach(function (lang) { + let dictValue = {}; + dictValue.languageCode = blade.property.multilanguage ? lang : undefined; + dictValue.value = blade.currentEntity[lang]; + blade.currentEntity.localizedValues.push(dictValue); + }); + propDictItems.save([blade.currentEntity], function (response) { + // call parent onSave + blade.onSaveChanges(); + angular.copy(blade.currentEntity, blade.origEntity); + }); + }; initializeBlade(); }]); diff --git a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-details.tpl.html b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-details.tpl.html index 886b238b8..f83e87a4c 100644 --- a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-details.tpl.html +++ b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-details.tpl.html @@ -9,8 +9,7 @@
-
-
+ diff --git a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.js b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.js index fdf5ad33c..440129f43 100644 --- a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.js +++ b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.js @@ -1,140 +1,124 @@ angular.module('virtoCommerce.catalogModule') - .controller('virtoCommerce.catalogModule.propertyDictionaryListController', - ['$scope', '$filter', 'platformWebApp.dialogService', 'platformWebApp.settings', 'platformWebApp.bladeNavigationService', 'platformWebApp.uiGridHelper', function ($scope, $filter, dialogService, settings, bladeNavigationService, uiGridHelper) { - var blade = $scope.blade; - $scope.blade.isLoading = false; - blade.headIcon = 'fa-book'; - $scope.currentEntities = []; - $scope.searchPhrase = ''; + .controller('virtoCommerce.catalogModule.propertyDictionaryListController', ['$scope', '$filter', 'platformWebApp.dialogService', 'platformWebApp.settings', 'platformWebApp.bladeNavigationService', 'platformWebApp.uiGridHelper', 'virtoCommerce.catalogModule.propDictItems', 'platformWebApp.bladeUtils', function ($scope, $filter, dialogService, settings, bladeNavigationService, uiGridHelper, propDictItems, bladeUtils) { + var blade = $scope.blade; + $scope.blade.isLoading = false; + blade.headIcon = 'fa-book'; + $scope.currentEntities = []; - blade.toolbarCommands = [ - { - name: "platform.commands.add", icon: 'fa fa-plus', - executeMethod: function () { - $scope.selectNode({ values: [], isNew: true }) - }, - canExecuteMethod: function () { - return true; - } + $scope.uiGridConstants = uiGridHelper.uiGridConstants; + + // simple and advanced filtering + var filter = blade.filter = $scope.filter = {}; + + filter.criteriaChanged = function () { + if ($scope.pageSettings.currentPage > 1) { + $scope.pageSettings.currentPage = 1; + } else { + blade.refresh(); + } + }; + + blade.toolbarCommands = [ + { + name: "platform.commands.add", icon: 'fa fa-plus', + executeMethod: function () { + $scope.selectNode({ values: [], isNew: true, propertyId : blade.property.id }) }, - { - name: "platform.commands.delete", icon: 'fa fa-trash-o', - executeMethod: function () { - $scope.deleteList($scope.gridApi.selection.getSelectedRows()); - }, - canExecuteMethod: function () { - return $scope.gridApi && _.any($scope.gridApi.selection.getSelectedRows()); - }, + canExecuteMethod: function () { + return true; } - - ]; + }, + { + name: "platform.commands.delete", icon: 'fa fa-trash-o', + executeMethod: function () { + $scope.deleteList($scope.gridApi.selection.getSelectedRows()); + }, + canExecuteMethod: function () { + return $scope.gridApi && _.any($scope.gridApi.selection.getSelectedRows()); + }, + } - blade.refresh = function () { + ]; - blade.languages = blade.property.multilanguage ? blade.languages : []; - $scope.search(); + blade.refresh = function () { + blade.languages = blade.property.multilanguage ? blade.languages : []; + var criteria = { + searchPhrase: filter.keyword, + propertyIds: [blade.property.id], + sort: uiGridHelper.getSortExpression($scope), + skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount, + take: $scope.pageSettings.itemsPerPageCount }; - - $scope.search = function (searchPhrase) { - - $scope.currentEntities = _.map(_.groupBy(blade.property.dictionaryValues, 'alias'), function (values, key) { - var dictItem = { alias: key, valueId: values[0].valueId }; + + propDictItems.search(criteria, function (result) { + $scope.pageSettings.totalItems = result.totalCount; + $scope.currentEntities = result.results; + $scope.currentEntities.forEach(function (dictItem) { blade.languages.forEach(function (lang) { - var dictValue = _.find(values, function (x) { return x.languageCode === lang || (!x.languageCode && lang === blade.defaultLanguage) }); + var dictValue = _.find(dictItem.localizedValues, function (x) { return x.languageCode === lang || (!x.languageCode && lang === blade.defaultLanguage) }); dictItem[lang] = dictValue ? dictValue.value : undefined; }); - return dictItem; }); + }); + }; - if (searchPhrase) { - $scope.currentEntities = _.filter($scope.currentEntities, function (x) { - return _.some(blade.languages, function (lang) { - return x[lang] && x[lang].toLowerCase().indexOf(searchPhrase.toLowerCase()) !== -1; - }); - }); + + // ui-grid + $scope.setGridOptions = function (gridOptions) { + uiGridHelper.initialize($scope, gridOptions, function (gridApi) { + if ($scope.gridApi.core) { + uiGridHelper.bindRefreshOnSortChanged($scope); } - }; + }); + bladeUtils.initializePagination($scope); + }; - // ui-grid - $scope.setGridOptions = function (gridOptions) { - uiGridHelper.initialize($scope, gridOptions, function (gridApi) { - uiGridHelper.bindRefreshOnSortChanged($scope); - }); - }; - - $scope.deleteList = function (selection) { - var dialog = { - id: "confirmDeletePropertyValue", - title: "catalog.dialogs.dictionary-values-delete.title", - message: "catalog.dialogs.dictionary-values-delete.message", - callback: function (remove) { - if (remove) { - bladeNavigationService.closeChildrenBlades(blade, function () { - selection.forEach(function (x) { - const index = $scope.currentEntities.indexOf(x); - $scope.currentEntities.splice(index, 1); - }); - $scope.saveChanges(); + $scope.deleteList = function (selection) { + var dialog = { + id: "confirmDeletePropertyValue", + title: "catalog.dialogs.dictionary-values-delete.title", + message: "catalog.dialogs.dictionary-values-delete.message", + callback: function (remove) { + if (remove) { + bladeNavigationService.closeChildrenBlades(blade, function () { + var dictItemsIds = _.pluck(selection, 'id'); + propDictItems.remove({ ids: dictItemsIds }, function (data) { + blade.refresh(); }); - } + }); } - }; - dialogService.showConfirmationDialog(dialog); + } }; + dialogService.showConfirmationDialog(dialog); + }; - $scope.deleteDictItem = function (selectedDictItem) { - $scope.deleteList([selectedDictItem]); - } + $scope.deleteDictItem = function (selectedDictItem) { + $scope.deleteList([selectedDictItem]); + } - $scope.saveChanges = function () { - blade.property.dictionaryValues = []; - $scope.currentEntities.forEach(function (x) { - if (blade.property.multilanguage) { - var dictPropValuePrototype = { alias: x.alias, valueId: x.valueId }; - blade.languages.forEach(function (lang) { - var dictPropValue = angular.extend({}, dictPropValuePrototype); - dictPropValue.languageCode = blade.property.multilanguage ? lang : undefined; - dictPropValue.value = x[lang]; - blade.property.dictionaryValues.push(dictPropValue); - }); - } - else { - x.value = x.alias; - blade.property.dictionaryValues.push(x); - } - }); - }; - $scope.selectNode = function (selectedDictItem) { + $scope.selectNode = function (selectedDictItem) { - if (selectedDictItem.alias) { - $scope.selectedNodeId = selectedDictItem.alias; - } - var newBlade = { - id: 'propertyDictionaryDetails', - title: 'catalog.blades.property-dictionary.labels.dictionary-edit', - controller: 'virtoCommerce.catalogModule.propertyDictionaryDetailsController', - template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/property-dictionary-details.tpl.html', - dictionaryItem: selectedDictItem, - property: blade.property, - languages: blade.languages, - defaultLanguage: blade.defaultLanguage, + if (selectedDictItem.alias) { + $scope.selectedNodeId = selectedDictItem.alias; + } + var newBlade = { + id: 'propertyDictionaryDetails', + title: 'catalog.blades.property-dictionary.labels.dictionary-edit', + controller: 'virtoCommerce.catalogModule.propertyDictionaryDetailsController', + template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/property-dictionary-details.tpl.html', + dictionaryItem: selectedDictItem, + property: blade.property, + languages: blade.languages, + defaultLanguage: blade.defaultLanguage, - onSaveChanges: function (dictItem) { - angular.extend(selectedDictItem, dictItem); - if (dictItem.isNew) { - $scope.currentEntities.push(dictItem); - $scope.selectedNodeId = dictItem.alias; - } - else { - angular.copy(dictItem, selectedDictItem); - } - $scope.saveChanges(); - }, - }; - bladeNavigationService.showBlade(newBlade, blade); + onSaveChanges: function (dictItem) { + blade.refresh(); + }, }; + bladeNavigationService.showBlade(newBlade, blade); + }; + + //blade.refresh(); - blade.refresh(); - - }]); + }]); diff --git a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.tpl.html b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.tpl.html index 66b6697b3..5bfa8a412 100644 --- a/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.tpl.html +++ b/VirtoCommerce.CatalogModule.Web/Scripts/blades/property-dictionary-list.tpl.html @@ -1,35 +1,38 @@
-
- -
+

{{'platform.list.count' | translate}}: {{pageSettings.totalItems}}

+
-
-
- +
+
+ +
+
{{ 'platform.list.no-data' | translate }}
-
{{ 'platform.list.no-data' | translate }}