From 05560df8aa0df3dbeaeb11c268c9df8a2fbfc80b Mon Sep 17 00:00:00 2001 From: coni2k Date: Tue, 14 Jun 2016 20:49:46 +0200 Subject: [PATCH] 0.58.0 This closes #67 and closes #68 --- BusinessObjects/Models/ElementItem.cs | 2 +- BusinessObjects/Models/ResourcePool.cs | 5 +- CHANGELOG.md | 14 + DataObjects/DataObjects.csproj | 20 +- .../Migrations/201603261149374_Initial.resx | 126 ------ ...cs => 201606141949102_Initial.Designer.cs} | 2 +- ..._Initial.cs => 201606141949102_Initial.cs} | 5 +- .../Migrations/201606141949102_Initial.resx | 126 ++++++ ...201606141949205_Initial_Manual.Designer.cs | 29 ++ .../201606141949205_Initial_Manual.cs | 267 +++++++++++ .../201606141949205_Initial_Manual.resx | 126 ++++++ .../Migrations/DbMigrationsConfiguration.cs | 7 +- SolutionItems/Documents/Content Notes.txt | 134 ------ SolutionItems/Documents/Design.md | 6 - SolutionItems/Documents/General Notes.txt | 3 - SolutionItems/Documents/Possible Indexes.txt | 4 - SolutionItems/Documents/Remarks.md | 18 - SolutionItems/Documents/Social.txt | 109 ----- SolutionItems/Documents/Todo.md | 238 ---------- SolutionItems/Documents/Troubleshoot.txt | 29 -- SolutionItems/Properties/AssemblyInfo.cs | 2 +- SolutionItems/SolutionItems.csproj | 8 - ngClient/_system/css/main.css | 202 +++++---- ngClient/_system/js/app/config/route.js | 10 +- .../controllers/content/DefaultController.js | 7 +- .../ResourcePoolManageController.js | 3 +- .../resourcePoolEditor/resourcePoolEditor.css | 55 ++- .../resourcePoolEditor.html | 398 +++++++++-------- .../resourcePoolEditor/resourcePoolEditor.js | 12 +- ngClient/_system/js/app/entities/Element.js | 2 +- .../_system/js/app/factories/dataContext.js | 3 - .../js/app/factories/resourcePoolFactory.js | 1 + .../adapters/breeze.dataService.odata.js | 420 ------------------ .../views/account/guestAccountInfo.html | 2 +- ngClient/_system/views/account/login.html | 2 +- ngClient/_system/views/account/register.html | 2 +- .../_system/views/account/socialLogins.html | 8 +- ngClient/_system/views/content/home.html | 2 +- ngClient/_system/views/content/reason.html | 2 +- .../resourcePool/resourcePoolManage.html | 96 ++-- ngClient/bower.json | 29 +- ngClient/default.aspx | 22 +- ngClient/gulpfile.js | 3 +- ngClient/package.json | 2 +- 44 files changed, 1066 insertions(+), 1497 deletions(-) delete mode 100644 DataObjects/Migrations/201603261149374_Initial.resx rename DataObjects/Migrations/{201603261149374_Initial.Designer.cs => 201606141949102_Initial.Designer.cs} (93%) rename DataObjects/Migrations/{201603261149374_Initial.cs => 201606141949102_Initial.cs} (99%) create mode 100644 DataObjects/Migrations/201606141949102_Initial.resx create mode 100644 DataObjects/Migrations/201606141949205_Initial_Manual.Designer.cs create mode 100644 DataObjects/Migrations/201606141949205_Initial_Manual.cs create mode 100644 DataObjects/Migrations/201606141949205_Initial_Manual.resx delete mode 100644 SolutionItems/Documents/Content Notes.txt delete mode 100644 SolutionItems/Documents/Design.md delete mode 100644 SolutionItems/Documents/General Notes.txt delete mode 100644 SolutionItems/Documents/Possible Indexes.txt delete mode 100644 SolutionItems/Documents/Remarks.md delete mode 100644 SolutionItems/Documents/Social.txt delete mode 100644 SolutionItems/Documents/Todo.md delete mode 100644 SolutionItems/Documents/Troubleshoot.txt delete mode 100644 ngClient/_system/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js diff --git a/BusinessObjects/Models/ElementItem.cs b/BusinessObjects/Models/ElementItem.cs index af89db6e2..a0cdebc7e 100644 --- a/BusinessObjects/Models/ElementItem.cs +++ b/BusinessObjects/Models/ElementItem.cs @@ -31,7 +31,7 @@ public ElementItem(Element element, string name) : this() public int ElementId { get; set; } [Required] - [StringLength(250)] + [StringLength(150)] public string Name { get; set; } public virtual Element Element { get; set; } diff --git a/BusinessObjects/Models/ResourcePool.cs b/BusinessObjects/Models/ResourcePool.cs index ad57a83bb..2b17c5ed5 100644 --- a/BusinessObjects/Models/ResourcePool.cs +++ b/BusinessObjects/Models/ResourcePool.cs @@ -50,9 +50,12 @@ public string Key } [Required] - [StringLength(250)] + [StringLength(50)] public string Name { get; set; } + [StringLength(5000)] + public string Description { get; set; } + public decimal InitialValue { get; set; } public bool UseFixedResourcePoolRate { get; set; } diff --git a/CHANGELOG.md b/CHANGELOG.md index 7498485d4..85d551fc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ ### Changelog +**0.58.0** + +* Description field for resource pool +https://github.com/forCrowd/WealthEconomy/issues/68 +* Is Main Element bug fix +https://github.com/forCrowd/WealthEconomy/issues/67 +* Project notes were moved to wiki page +https://github.com/forCrowd/WealthEconomy/wiki +* package updates + * breezejs was updated to 1.5.7 and odata adapter's manually fixed version was removed + * angular was replaced with fixed 1.5.4: there is a problem with 1.5.5+ packages, it installs 1.5.7 instead + * jquery was replaced with fixed 2.2.2: there is a problem with 2.2.3+ packages, it installs 3.0.0 instead + * bootstrap-social package was removed + **0.57.0** * Search page instead of list diff --git a/DataObjects/DataObjects.csproj b/DataObjects/DataObjects.csproj index 7cc646890..8b9e5903c 100644 --- a/DataObjects/DataObjects.csproj +++ b/DataObjects/DataObjects.csproj @@ -98,13 +98,13 @@ Repository.tt - - - 201603261149374_Initial.cs + + + 201606141949102_Initial.cs - - - 201603261149481_Initial_Manual.cs + + + 201606141949205_Initial_Manual.cs @@ -162,11 +162,11 @@ - - 201603261149374_Initial.cs + + 201606141949102_Initial.cs - - 201603261149481_Initial_Manual.cs + + 201606141949205_Initial_Manual.cs diff --git a/DataObjects/Migrations/201603261149374_Initial.resx b/DataObjects/Migrations/201603261149374_Initial.resx deleted file mode 100644 index debe35231..000000000 --- a/DataObjects/Migrations/201603261149374_Initial.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - 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 - - - dbo - - \ No newline at end of file diff --git a/DataObjects/Migrations/201603261149374_Initial.Designer.cs b/DataObjects/Migrations/201606141949102_Initial.Designer.cs similarity index 93% rename from DataObjects/Migrations/201603261149374_Initial.Designer.cs rename to DataObjects/Migrations/201606141949102_Initial.Designer.cs index fe3ec29f8..b7b1c049d 100644 --- a/DataObjects/Migrations/201603261149374_Initial.Designer.cs +++ b/DataObjects/Migrations/201606141949102_Initial.Designer.cs @@ -13,7 +13,7 @@ public sealed partial class Initial : IMigrationMetadata string IMigrationMetadata.Id { - get { return "201603261149374_Initial"; } + get { return "201606141949102_Initial"; } } string IMigrationMetadata.Source diff --git a/DataObjects/Migrations/201603261149374_Initial.cs b/DataObjects/Migrations/201606141949102_Initial.cs similarity index 99% rename from DataObjects/Migrations/201603261149374_Initial.cs rename to DataObjects/Migrations/201606141949102_Initial.cs index a02c755b5..620cd7bbc 100644 --- a/DataObjects/Migrations/201603261149374_Initial.cs +++ b/DataObjects/Migrations/201606141949102_Initial.cs @@ -82,7 +82,7 @@ public override void Up() { Id = c.Int(nullable: false, identity: true), ElementId = c.Int(nullable: false), - Name = c.String(nullable: false, maxLength: 250), + Name = c.String(nullable: false, maxLength: 150), CreatedOn = c.DateTime(nullable: false), ModifiedOn = c.DateTime(nullable: false), DeletedOn = c.DateTime(), @@ -189,7 +189,8 @@ public override void Up() Id = c.Int(nullable: false, identity: true), UserId = c.Int(nullable: false), Key = c.String(nullable: false, maxLength: 250), - Name = c.String(nullable: false, maxLength: 250), + Name = c.String(nullable: false, maxLength: 50), + Description = c.String(), InitialValue = c.Decimal(nullable: false, precision: 18, scale: 2), UseFixedResourcePoolRate = c.Boolean(nullable: false), ResourcePoolRateTotal = c.Decimal(precision: 18, scale: 2), diff --git a/DataObjects/Migrations/201606141949102_Initial.resx b/DataObjects/Migrations/201606141949102_Initial.resx new file mode 100644 index 000000000..b7f76f6d0 --- /dev/null +++ b/DataObjects/Migrations/201606141949102_Initial.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 + + + 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 + + + dbo + + \ No newline at end of file diff --git a/DataObjects/Migrations/201606141949205_Initial_Manual.Designer.cs b/DataObjects/Migrations/201606141949205_Initial_Manual.Designer.cs new file mode 100644 index 000000000..e6f877267 --- /dev/null +++ b/DataObjects/Migrations/201606141949205_Initial_Manual.Designer.cs @@ -0,0 +1,29 @@ +// +namespace forCrowd.WealthEconomy.DataObjects.Migrations +{ + using System.CodeDom.Compiler; + using System.Data.Entity.Migrations; + using System.Data.Entity.Migrations.Infrastructure; + using System.Resources; + + [GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")] + public sealed partial class Initial_Manual : IMigrationMetadata + { + private readonly ResourceManager Resources = new ResourceManager(typeof(Initial_Manual)); + + string IMigrationMetadata.Id + { + get { return "201606141949205_Initial_Manual"; } + } + + string IMigrationMetadata.Source + { + get { return null; } + } + + string IMigrationMetadata.Target + { + get { return Resources.GetString("Target"); } + } + } +} diff --git a/DataObjects/Migrations/201606141949205_Initial_Manual.cs b/DataObjects/Migrations/201606141949205_Initial_Manual.cs new file mode 100644 index 000000000..df21d43e8 --- /dev/null +++ b/DataObjects/Migrations/201606141949205_Initial_Manual.cs @@ -0,0 +1,267 @@ +namespace forCrowd.WealthEconomy.DataObjects.Migrations +{ + using System.Data.Entity.Migrations; + using System.Text; + + public partial class Initial_Manual : DbMigration + { + public override void Up() + { + // ResourcePool ResourcePoolRateTotal + Sql(PrepareDropFunctionBlock("ResourcePool", "ResourcePoolRateTotal", "getResourcePoolRateTotal")); + Sql(PrepareGetResourcePoolRateTotalFunctionBlock()); + Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN ResourcePoolRateTotal;"); + Sql("ALTER TABLE dbo.ResourcePool ADD ResourcePoolRateTotal AS dbo.getResourcePoolRateTotal(Id);"); + + // ResourcePool ResourcePoolRateCount + Sql(PrepareDropFunctionBlock("ResourcePool", "ResourcePoolRateCount", "getResourcePoolRateCount")); + Sql(PrepareGetResourcePoolRateCountFunctionBlock()); + Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN ResourcePoolRateCount;"); + Sql("ALTER TABLE dbo.ResourcePool ADD ResourcePoolRateCount AS dbo.getResourcePoolRateCount(Id);"); + + // ResourcePool RatingCount + Sql(PrepareDropFunctionBlock("ResourcePool", "RatingCount", "getResourcePoolRatingCount")); + Sql(PrepareGetResourcePoolRatingCountFunctionBlock()); + Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN RatingCount;"); + Sql("ALTER TABLE dbo.ResourcePool ADD RatingCount AS dbo.getResourcePoolRatingCount(Id);"); + + // ElementField IndexRatingTotal + Sql(PrepareDropFunctionBlock("ElementField", "IndexRatingTotal", "getElementFieldIndexRatingTotal")); + Sql(PrepareGetElementFieldIndexRatingTotalFunctionBlock()); + Sql("ALTER TABLE dbo.ElementField DROP COLUMN IndexRatingTotal;"); + Sql("ALTER TABLE dbo.ElementField ADD IndexRatingTotal AS dbo.getElementFieldIndexRatingTotal(Id);"); + + // ElementField IndexRatingCount + Sql(PrepareDropFunctionBlock("ElementField", "IndexRatingCount", "getElementFieldIndexRatingCount")); + Sql(PrepareGetElementFieldIndexRatingCountFunctionBlock()); + Sql("ALTER TABLE dbo.ElementField DROP COLUMN IndexRatingCount;"); + Sql("ALTER TABLE dbo.ElementField ADD IndexRatingCount AS dbo.getElementFieldIndexRatingCount(Id);"); + + // ElementCell StringValue + Sql(PrepareDropFunctionBlock("ElementCell", "StringValue", "getElementCellStringValue")); + Sql(PrepareGetElementCellStringValueFunctionBlock()); + Sql("ALTER TABLE dbo.ElementCell DROP COLUMN StringValue;"); + Sql("ALTER TABLE dbo.ElementCell ADD StringValue AS dbo.getElementCellStringValue(Id);"); + + // ElementCell NumericValueTotal + Sql(PrepareDropFunctionBlock("ElementCell", "NumericValueTotal", "getElementCellNumericValueTotal")); + Sql(PrepareGetElementCellNumericValueTotalFunctionBlock()); + Sql("ALTER TABLE dbo.ElementCell DROP COLUMN NumericValueTotal;"); + Sql("ALTER TABLE dbo.ElementCell ADD NumericValueTotal AS dbo.getElementCellNumericValueTotal(Id);"); + + // ElementCell NumericValueCount + Sql(PrepareDropFunctionBlock("ElementCell", "NumericValueCount", "getElementCellNumericValueCount")); + Sql(PrepareGetElementCellNumericValueCountFunctionBlock()); + Sql("ALTER TABLE dbo.ElementCell DROP COLUMN NumericValueCount;"); + Sql("ALTER TABLE dbo.ElementCell ADD NumericValueCount AS dbo.getElementCellNumericValueCount(Id);"); + } + + public override void Down() + { + // ResourcePool ResourcePoolRateTotal + Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN ResourcePoolRateTotal;"); + Sql("ALTER TABLE dbo.ResourcePool ADD ResourcePoolRateTotal [decimal](18,2);"); + Sql("DROP FUNCTION dbo.getResourcePoolRateTotal;"); + + // ResourcePool ResourcePoolRateCount + Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN ResourcePoolRateCount;"); + Sql("ALTER TABLE dbo.ResourcePool ADD ResourcePoolRateCount int;"); + Sql("DROP FUNCTION dbo.getResourcePoolRateCount;"); + + // ResourcePool RatingCount + Sql("ALTER TABLE dbo.ResourcePool DROP COLUMN RatingCount;"); + Sql("ALTER TABLE dbo.ResourcePool ADD RatingCount int;"); + Sql("DROP FUNCTION dbo.getResourcePoolRatingCount;"); + + // ElementField IndexRatingTotal + Sql("ALTER TABLE dbo.ElementField DROP COLUMN IndexRatingTotal;"); + Sql("ALTER TABLE dbo.ElementField ADD IndexRatingTotal [decimal](18,2);"); + Sql("DROP FUNCTION dbo.getElementFieldIndexRatingTotal;"); + + // ElementField IndexRatingCount + Sql("ALTER TABLE dbo.ElementField DROP COLUMN IndexRatingCount;"); + Sql("ALTER TABLE dbo.ElementField ADD IndexRatingCount int;"); + Sql("DROP FUNCTION dbo.getElementFieldIndexRatingCount;"); + + // ElementCell StringValue + Sql("ALTER TABLE dbo.ElementCell DROP COLUMN StringValue;"); + Sql("ALTER TABLE dbo.ElementCell ADD StringValue [nvarchar](MAX);"); + Sql("DROP FUNCTION dbo.getElementCellStringValue;"); + + // ElementCell NumericValueTotal + Sql("ALTER TABLE dbo.ElementCell DROP COLUMN NumericValueTotal;"); + Sql("ALTER TABLE dbo.ElementCell ADD NumericValueTotal [decimal](18,2);"); + Sql("DROP FUNCTION dbo.getElementCellNumericValueTotal;"); + + // ElementCell NumericValueCount + Sql("ALTER TABLE dbo.ElementCell DROP COLUMN NumericValueCount;"); + Sql("ALTER TABLE dbo.ElementCell ADD NumericValueCount int;"); + Sql("DROP FUNCTION dbo.getElementCellNumericValueCount;"); + } + + string PrepareGetResourcePoolRateTotalFunctionBlock() + { + var sbOutput = new StringBuilder(); + sbOutput.AppendLine("CREATE FUNCTION dbo.getResourcePoolRateTotal(@resourcePoolId int)"); + sbOutput.AppendLine("RETURNS decimal"); + sbOutput.AppendLine("AS"); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendLine(" DECLARE @result decimal"); + sbOutput.AppendLine(" SELECT @result = ISNULL(SUM(ResourcePoolRate), 0) FROM UserResourcePool WHERE ResourcePoolId = @resourcePoolId AND DeletedOn IS NULL"); + sbOutput.AppendLine(" RETURN @result"); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + + string PrepareGetResourcePoolRateCountFunctionBlock() + { + var sbOutput = new StringBuilder(); + sbOutput.AppendLine("CREATE FUNCTION dbo.getResourcePoolRateCount(@resourcePoolId int)"); + sbOutput.AppendLine("RETURNS int"); + sbOutput.AppendLine("AS"); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendLine(" DECLARE @result int"); + sbOutput.AppendLine(" SELECT @result = COUNT(ResourcePoolRate) FROM UserResourcePool WHERE ResourcePoolId = @resourcePoolId AND DeletedOn IS NULL"); + sbOutput.AppendLine(" RETURN @result"); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + + string PrepareGetResourcePoolRatingCountFunctionBlock() + { + var sbOutput = new StringBuilder(); + sbOutput.AppendLine("CREATE FUNCTION dbo.getResourcePoolRatingCount(@resourcePoolId int)"); + sbOutput.AppendLine("RETURNS int"); + sbOutput.AppendLine("AS"); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendLine(" DECLARE @result int"); + sbOutput.AppendLine(" SELECT @result = COUNT(Id) FROM [User] WHERE DeletedOn IS NULL AND Id IN ("); + sbOutput.AppendLine(" SELECT T1.UserId"); + sbOutput.AppendLine(" FROM UserElementCell T1"); + sbOutput.AppendLine(" JOIN ElementCell T2 ON T1.ElementCellId = T2.Id"); + sbOutput.AppendLine(" JOIN ElementField T3 ON T2.ElementFieldId = T3.Id"); + sbOutput.AppendLine(" JOIN Element T4 ON T3.ElementId = T4.Id"); + sbOutput.AppendLine(" WHERE T4.ResourcePoolId = @ResourcePoolId"); + sbOutput.AppendLine(" AND T3.IndexEnabled = 1"); + sbOutput.AppendLine(" AND T1.DeletedOn IS NULL"); + sbOutput.AppendLine(" UNION ALL"); + sbOutput.AppendLine(" SELECT T1.UserId"); + sbOutput.AppendLine(" FROM UserElementField T1"); + sbOutput.AppendLine(" JOIN ElementField T2 ON T1.ElementFieldId = T2.Id"); + sbOutput.AppendLine(" JOIN Element T3 ON T2.ElementId = T3.Id"); + sbOutput.AppendLine(" WHERE T3.ResourcePoolId = @ResourcePoolId"); + sbOutput.AppendLine(" AND T1.DeletedOn IS NULL"); + sbOutput.AppendLine(" UNION ALL"); + sbOutput.AppendLine(" SELECT T1.UserId"); + sbOutput.AppendLine(" FROM UserResourcePool T1"); + sbOutput.AppendLine(" JOIN ResourcePool T2 ON T1.ResourcePoolId = T2.Id"); + sbOutput.AppendLine(" WHERE T1.ResourcePoolId = @ResourcePoolId"); + sbOutput.AppendLine(" AND T2.UseFixedResourcePoolRate = 0"); + sbOutput.AppendLine(" AND T1.DeletedOn IS NULL"); + sbOutput.AppendLine(" )"); + sbOutput.AppendLine(" RETURN @result"); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + + string PrepareGetElementFieldIndexRatingTotalFunctionBlock() + { + var sbOutput = new StringBuilder(); + sbOutput.AppendLine("CREATE FUNCTION dbo.getElementFieldIndexRatingTotal(@elementFieldId int)"); + sbOutput.AppendLine("RETURNS decimal"); + sbOutput.AppendLine("AS"); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendLine(" DECLARE @result decimal"); + sbOutput.AppendLine(" SELECT @result = ISNULL(SUM(Rating), 0) FROM UserElementField WHERE ElementFieldId = @elementFieldId AND DeletedOn IS NULL"); + sbOutput.AppendLine(" RETURN @result"); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + + string PrepareGetElementFieldIndexRatingCountFunctionBlock() + { + var sbOutput = new StringBuilder(); + sbOutput.AppendLine("CREATE FUNCTION dbo.getElementFieldIndexRatingCount(@elementFieldId int)"); + sbOutput.AppendLine("RETURNS int"); + sbOutput.AppendLine("AS"); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendLine(" DECLARE @result int"); + sbOutput.AppendLine(" SELECT @result = COUNT(Rating) FROM UserElementField WHERE ElementFieldId = @elementFieldId AND DeletedOn IS NULL"); + sbOutput.AppendLine(" RETURN @result"); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + + string PrepareGetElementCellStringValueFunctionBlock() + { + var sbOutput = new StringBuilder(); + sbOutput.AppendLine("CREATE FUNCTION dbo.getElementCellStringValue(@elementCellId int)"); + sbOutput.AppendLine("RETURNS nvarchar(MAX)"); + sbOutput.AppendLine("AS"); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendLine(" DECLARE @result nvarchar(MAX)"); + sbOutput.AppendLine(" SELECT @result = StringValue FROM UserElementCell WHERE ElementCellId = @elementCellId AND NOT StringValue IS NULL AND DeletedOn IS NULL"); + sbOutput.AppendLine(" RETURN @result"); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + + string PrepareGetElementCellNumericValueTotalFunctionBlock() + { + var sbOutput = new StringBuilder(); + sbOutput.AppendLine("CREATE FUNCTION dbo.getElementCellNumericValueTotal(@elementCellId int)"); + sbOutput.AppendLine("RETURNS decimal"); + sbOutput.AppendLine("AS"); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendLine(" DECLARE @result decimal"); + sbOutput.AppendLine(" SELECT @result = "); + sbOutput.AppendLine(" CASE T3.DataType"); + sbOutput.AppendLine(" WHEN 1 THEN NULL -- String"); + sbOutput.AppendLine(" WHEN 2 THEN ISNULL(SUM(CAST(T1.BooleanValue AS decimal)), 0) -- Boolean"); + sbOutput.AppendLine(" WHEN 3 THEN ISNULL(SUM(CAST(T1.IntegerValue AS decimal)), 0) -- Integer"); + sbOutput.AppendLine(" WHEN 4 THEN ISNULL(SUM(T1.DecimalValue), 0) -- Decimal"); + sbOutput.AppendLine(" WHEN 5 THEN ISNULL(SUM(CAST(T1.DateTimeValue AS decimal)), 0) -- DateTime"); + sbOutput.AppendLine(" WHEN 6 THEN NULL -- Element"); + sbOutput.AppendLine(" WHEN 11 THEN ISNULL(SUM(T1.DecimalValue), 0) -- DirectIncome"); + sbOutput.AppendLine(" WHEN 12 THEN NULL -- Multiplier"); + sbOutput.AppendLine(" END"); + sbOutput.AppendLine(" FROM UserElementCell T1"); + sbOutput.AppendLine(" JOIN ElementCell T2 ON T1.ElementCellId = T2.Id"); + sbOutput.AppendLine(" JOIN ElementField T3 ON T2.ElementFieldId = T3.Id"); + sbOutput.AppendLine(" WHERE T1.ElementCellId = @elementCellId AND T1.DeletedOn IS NULL"); + sbOutput.AppendLine(" GROUP By T3.DataType"); + sbOutput.AppendLine(" RETURN @result"); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + + string PrepareGetElementCellNumericValueCountFunctionBlock() + { + var sbOutput = new StringBuilder(); + sbOutput.AppendLine("CREATE FUNCTION dbo.getElementCellNumericValueCount(@elementCellId int)"); + sbOutput.AppendLine("RETURNS int"); + sbOutput.AppendLine("AS"); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendLine(" DECLARE @result int"); + sbOutput.AppendLine(" SELECT @result = COUNT(DecimalValue) FROM UserElementCell WHERE ElementCellId = @elementCellId AND NOT DecimalValue IS NULL AND DeletedOn IS NULL"); + sbOutput.AppendLine(" RETURN @result"); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + + string PrepareDropFunctionBlock(string tableName, string columnName, string functionName) + { + var sbOutput = new StringBuilder(); + sbOutput.AppendFormat("IF object_id(N'{0}', N'FN') IS NOT NULL", functionName).AppendLine(); + sbOutput.AppendLine("BEGIN"); + sbOutput.AppendFormat(" IF COLUMNPROPERTY(object_id('{0}'), '{1}', 'IsComputed') = 1", tableName, columnName).AppendLine(); + sbOutput.AppendLine(" BEGIN"); + sbOutput.AppendFormat(" ALTER TABLE dbo.{0} DROP COLUMN {1};", tableName, columnName).AppendLine(); + sbOutput.AppendFormat(" ALTER TABLE dbo.{0} ADD {1} [decimal](18,2);", tableName, columnName).AppendLine(); + sbOutput.AppendLine(" END"); + sbOutput.AppendFormat(" DROP FUNCTION {0}", functionName).AppendLine(); + sbOutput.AppendLine("END"); + return sbOutput.ToString(); + } + } +} diff --git a/DataObjects/Migrations/201606141949205_Initial_Manual.resx b/DataObjects/Migrations/201606141949205_Initial_Manual.resx new file mode 100644 index 000000000..b7f76f6d0 --- /dev/null +++ b/DataObjects/Migrations/201606141949205_Initial_Manual.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 + + + 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 + + + dbo + + \ No newline at end of file diff --git a/DataObjects/Migrations/DbMigrationsConfiguration.cs b/DataObjects/Migrations/DbMigrationsConfiguration.cs index 0c462d97e..891bffa66 100644 --- a/DataObjects/Migrations/DbMigrationsConfiguration.cs +++ b/DataObjects/Migrations/DbMigrationsConfiguration.cs @@ -1,7 +1,8 @@ namespace forCrowd.WealthEconomy.DataObjects.Migrations { - using forCrowd.WealthEconomy.BusinessObjects; - using forCrowd.WealthEconomy.DataObjects; + using BusinessObjects; + using DataObjects; + using Framework; using Microsoft.AspNet.Identity; using System; using System.Collections.Generic; @@ -108,7 +109,7 @@ static void CreateSampleUser(WealthEconomyContext context) context.SaveChanges(); // Login as (required in order to save the rest of the items) - forCrowd.WealthEconomy.Framework.Security.LoginAs(sampleUser.Id); + Security.LoginAs(sampleUser.Id); // Sample resource pools var billionDollarQuestion = resourcePoolRepository.CreateBillionDollarQuestion(sampleUser); diff --git a/SolutionItems/Documents/Content Notes.txt b/SolutionItems/Documents/Content Notes.txt deleted file mode 100644 index 1024653fc..000000000 --- a/SolutionItems/Documents/Content Notes.txt +++ /dev/null @@ -1,134 +0,0 @@ -# forCrowd.org -For the first time in history, individuals from various places get in touch in an instant. This will affect everything.. -It was never been this easier for individuals - -crowd: individuals that work on a certain subject.. - ---- -# Articles -. formula calculation -. capitalism is dead but why can't we get rid of it? -. Antidote of capitalism? -. Machine readable licenses -. organization.json -. Difficulty of lying - Blue polar bear -. Utopia: Students pick a github 'up-for-grabs' issue of facebook for in their lessons - link that goes to ... and donation message -. TEDs -http://www.ted.com/talks/audrey_choi_how_to_make_a_profit_while_making_a_difference - not very strong but.. -. Review google docs -. Candy crush revenue -. Non profit ironing (and many others) service -. non profit example - http://john.onolan.org/what-it-means-to-be-non-profit/ -. junk food - http://www.brandsynario.com/12-awesome-junk-foods-their-shocking-calories-count/ - -# Description -Alt: Measuring the goodness -New: An experimental, open source crowd investment platform -Old: An experimental resource management system that aims to provide a more sustainable and productive economic model -Alt: An oss app based on experimental thoughts about how could we improve how the economy works - -# Header - -Benefit | Utility? - -"Maximizing the benefit | potential" - cheesy? -Crowd Managed Fund? -"Maximizing the benefit" - -Wealth Economy is a project that aims to calculate (measure) the organizations' total (social) benefit (utility?) to the society, -and create a model that the organizations with more benefits can get more income, based on the results. - -# Footer -gratipay - is it possible to use? apply for a new team? -flattr icon is missing? -http://www.paywithatweet.com/campaigns/new - ---- -differences between current & new -. short term - big picture -. dependency - independency -. profits - benefits -. owner oriented, contribution oriented - ---- -* sales price is actually not correct in CMRP samples? -should it show sales price including cmrp tax instead? it's not clear where the money comes from..? -or it doesn't matter at the moment? at least mention it in CMRP Rate: The Fountain section? - -* should samples details need to be mentioned? all organizations are equal except the indexes, they all have to have same number of sales etc. - -* dynamic pricing - low price is good but can't be zero because then it's not sustainable as well? -Answer to this question: It's not just zero but any income lower than the cost wouldn't be sustainable (income >= cost). The question is how to ensure that the organization is going to get more income in case if they're making their products accessible to all by not asking any money (which we would like to encourage). Probably the organization should say we're going to get our income from the pool, not by selling it. Which means it will be totally controlled and funded by the pool. - -* wealth is interested in the following questions; -. how the society allocates its resources? -. what type of organizations get more resources? -. room for improvement? - yes -. what would happen if the people could control and allocate the resources directly? - -* software licenses; -https://www.blackducksoftware.com/resources/data/top-20-open-source-licenses -http://opensource.org/licenses/category -http://products.office.com/en-us/microsoft-software-license-agreement -http://www.microsoft.com/en-us/legal/intellectualproperty/useterms/default.aspx -http://download.microsoft.com/Documents/UseTerms/Windows_8.1_English_468d3103-64a4-44fa-8f73-23490ee17ea5.pdf - ---- -. wording; -facebook log in sign up -twitter log in sign up for Twitter -google sign in create a new account (sign up) -linkedin sign in join now -microsoft sign in sign up - ---- -* check old sample org names - ---- -Additional Indexes -. Employee Satisfaction -This index aims to put more responsibility to the organizations towards to their employees and increase employee satisfaction. The organizations could be rated about various items; complying with safety standards of that sector, having proper insurance coverage. -Under the right circumstances, even the employee could rate their organization whether they're happy with the organization or working conditions are good enough. -As a result, the organizations that have a higher rating will get more resources from the system. -. Customer Satisfaction -Does the organization please its customers enough? How good are the previous customers experience with the organization / product? Does the organization have a proper customer services? How long does it take to solve the customer's issues in case of an error? -Customer Satisfaction Index aims to rate the organization based on these questions and distribute the resources between the organizations according to their performances. -. Quality -Although 'Quality' subject has lot of measurable parameters under it, none of them has a direct impact on the income of the organizations. If the organization has a better quality product, this might increase their sales, therefore they can have more resources. However, the connection between high quality - more resources is not that tight. -Quality Index allows us the rate quality of the products / services as a separate parameter in the system and distributes the resources based on the outcome. -. Distance -. Environment friendliness? - -# Profit Oriented Economy -Current Formula: Lower the cost, Maximize the Sales Price, Multiply it with Number of Sales -try to make the visual of the formula (lowering cost - maximizing sales price * number of sales) and it needs to be extended - -# Burden of the Consumer -[A game that the user tries to find the correct organization - Shows the benefits of the organizations for a limited time, hide them and ask the user to find the best one?] - -# Quality? -The consumers will vote for the importance of the parameter(s). The experts should measure the parameters and enter their results to the system. The system should make the distribution based on these inputs. - -Check Overview page + Wealth Economy docs in google docs - ---- -Useful links -Wealth Inequality in America http://www.youtube.com/watch?v=QPKKQnijnsM#t=3 -Left wing book publishers; https://www.google.com.tr/search?q=left+wing+book+publisher&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:official&client=firefox-a&gws_rd=cr&ei=dtCmUqPOJ4mR4ASM5IHQAw -Infographic sample; http://well-spent.com/wp-content/uploads/2012/01/Everlane_IG_1.jpg -Price Theory - David Friedman http://www.daviddfriedman.com/Academic/Price_Theory/PThy_ToC.html -Animated gif zen; http://robindavey.co.uk/?utm_source=WeTransfer&utm_medium=Wallpaper&utm_campaign=WeTransfer - ---- -Articles - Young lady; -- young lady, forgot your purse! -She was excited because... -A sensitive comp science teach -Inexp but ent about app - got into prog -Younglady@... -Medium.com -Something like "for the ppl" - -Thinks for reading our story -Wish we had but we don't any rival -We are like the young lady inexp but ent diff --git a/SolutionItems/Documents/Design.md b/SolutionItems/Documents/Design.md deleted file mode 100644 index 20cddf6db..000000000 --- a/SolutionItems/Documents/Design.md +++ /dev/null @@ -1,6 +0,0 @@ -ng2 admin -http://akveo.com/ng2-admin/ - -http://foundry.mediumra.re/variant/builder.html - -Gitter - ExhibitArts 19:47 If anyone needs a good logo for their non-profit project let me know. diff --git a/SolutionItems/Documents/General Notes.txt b/SolutionItems/Documents/General Notes.txt deleted file mode 100644 index 51773334d..000000000 --- a/SolutionItems/Documents/General Notes.txt +++ /dev/null @@ -1,3 +0,0 @@ -git rebase -i HEAD~3 -git push origin --force -doesnt work with notepad++ ? diff --git a/SolutionItems/Documents/Possible Indexes.txt b/SolutionItems/Documents/Possible Indexes.txt deleted file mode 100644 index 2ec927084..000000000 --- a/SolutionItems/Documents/Possible Indexes.txt +++ /dev/null @@ -1,4 +0,0 @@ -Distance Index? - -Flexibility (under Quality?): -phoneblocks vs. normal phones diff --git a/SolutionItems/Documents/Remarks.md b/SolutionItems/Documents/Remarks.md deleted file mode 100644 index 0ad202b20..000000000 --- a/SolutionItems/Documents/Remarks.md +++ /dev/null @@ -1,18 +0,0 @@ -Remarks about the projects, external libraries etc. - -* ng-show / if: if it will be on/off frequently (and takes time to render), use show -if it will be drawn once based on a certain condition and probably it will not change its state, use if? -* aspnet 5: It seems it's not ready or at least not easy to publish at the moment / coni2k - 28 Jan. '16 -* webApi auth: Cookieauth was necessary to use browser to reach auth pages - elmah.axd for instance and /api/.. -* google analytics: Apparently ignoring localhost + test filters only works for future visits? -* source-map: original position name & column props are null -* server-side controller: return Ok(string.Empty); With just Ok(), it return the response with no content-type. Apparetnly Firefox default for no content-type is xml and logs 'no element found' message on console. -* client-side entities: set initial values (userElementSet[] etc.) to prevent !== 'undefined' checks! - breeze doens't allow this -* breeze: dataContext.js - Don't forget to update these lines batches.push(manager.getEntities(['Element'], [breeze.EntityState.Deleted])); -* breeze: fetchEntityByKey 'User' - EntityQuery.from 'Users' -* breeze save queuing for concurrent saves http://www.getbreezenow.com/documentation/concurrent-saves - tried this but should be improved. Before calling saveChanges function, we set each modified entities' - RowVersion property in prepareSaveBatches function in dataContext.js. And this function is getting - called before queuing operation, which means it stores outdated (invalid RowVersion) entities - (normally after save operation it was updating local entity with RowVersion that comes from the server) - and in the second call it returns 'Conflict' error message. diff --git a/SolutionItems/Documents/Social.txt b/SolutionItems/Documents/Social.txt deleted file mode 100644 index c1c0a9126..000000000 --- a/SolutionItems/Documents/Social.txt +++ /dev/null @@ -1,109 +0,0 @@ -alpha team -gitter -personal dev network https://www.facebook.com/lists/10151319136553665 -social network - Emin Pamucak -stackoverflow? -yourfirstpr (pull request) -https://webchat.freenode.net/ -https://news.ycombinator.com/ -https://www.reddit.com/ -reply to twitter -https://twitter.com/sethjuarez/status/692784256670498816 -https://twitter.com/martinwoodward/status/692832558447353857 -globalsign makale -https://www.globalsign.com/en/blog/open-source-ssl-pinittome/?utm_source=twitter&utm_medium=social%20media&utm_campaign=blog -https://opensource.com/how-submit-article -https://opensource.com/participate?sc_cid=701600000011jJVAAY -https://appear.in/ - -opensourceway, freecodecamp, nadia eghbal. microsoft open source. - -upforgrabs - first timer only http://up-for-grabs.net/#/ - -contributing -https://github.com/formly-js/angular-formly/blob/master/CONTRIBUTING.md -https://github.com/nayafia/contributing-template/blob/master/CONTRIBUTING-template.md -https://github.com/blog/1184-contributing-guidelines -http://www.defmacro.org/2013/04/03/issue-etiquette.html -https://github.com/mdn/webextensions-examples/commit/ab55344cfca2334c40c89f08b01447f23a8ed467 - -code of conduct -http://contributor-covenant.org/ -http://www.ashedryden.com/blog/codes-of-conduct-101-faq - -My perfect README contains the following: - Project Title - Short description of project, including link to Code of Conduct - How to install the project - Link to tutorials and code examples - Frequently asked questions - Where to ask questions, i.e file an issue - Link to any issues that the project needs help on, like upcoming features. - How to get in touch with project maintainers, including more private communication - ---- -https://www.patreon.com/ -https://gratipay.com/new -https://www.braintreepayments.com/features/marketplace -https://www.citizensbank.com/ -live broadcast? younow? haai? https://www.livecoding.tv/ -https://opencollective.com/yeoman - ---- -grants -https://www.coreinfrastructure.org/programs/census-project -https://wiki.mozilla.org/MOSS -http://www.numfocus.org/ -https://www.google.com.tr/search?q=eu+grants+open+source&ie=utf-8&oe=utf-8&gws_rd=cr&ei=f6X2Vt-iK-rB6AS8x7PwBQ -https://stripe.com/blog/open-source-retreat-2016-grantees -Mozilla Grant https://blog.mozilla.org/blog/2016/05/11/mozilla-open-source-support-moss-now-open-to-all-projects/ -https://jeremy.linuxquestions.org/2016/05/25/are-you-involved-with-an-open-source-project-thats-in-need-of-funding-i-may-be-able-to-help/ - ---- -Hello everyone! -I've been working on a open source project for a while. -There is still a lot to do but would be great if I could get some feedback for the current state, both for content and/or if possible technical. -https://github.com/forCrowd/WealthEconomy -https://wealth.forcrowd.org -Quick summary: Aims to measure organizations benefit to society and then create an income model based on their overall score; -like what type of license they are using (open source, proprietary etc.), how important their products/services are for us, or how much they are profit oriented etc. -At the moment, sort of a simulation tool for a crowd (public) fund. - ---- -Elevator Pitch - EN - -Hi, -This is Serkan Holat, I'm a software developer. -For more than a year, I'm working on an open source and a non-profit project called Wealth Economy. - -Wealth Economy is a project that aims to measure the organizations' total benefit to society, -and create a model that the organizations with more benefits can get more income, based on the results. - -We are trying to get to Beta stage at the moment. -We would be appreciated if you could give us your feedback (technical and/or content). - ---- -v2 - -I'm working on a open source project for almost a year (not a python one though); -https://github.com/forCrowd/WealthEconomy - -At the moment, it's a sort of a simulation tool for a crowd (public) fund. -It's an attempt to measure organizations benefit to society and then create an income model based on this; -like what type of license they're using (open source, proprietary etc.), how important their products/services for us, or how much are the profit oriented etc. - -Actually would be great if I could get some feedback, both for content and/or technical. - ---- -TR - -Merhaba, -İsmim Serkan Holat, yazılım uzmanıyım. -Yaklaşık 1 yıldır kar amacı gütmeyen ve açık kaynak bir proje olan Wealth Economy üzerinde çalışıyorum. - -Wealth Economy, firmaların topluma sağladıkları faydayı (ya da toplam / sosyal faydayı) ölçmeye çalışan -ve ortaya çıkan sonuçlara göre gelir elde edilmesini hedefleyen, -yani ne kadar fayda, o kadar gelir modelini oluşturmaya çalışan bir projedir. - -Şu anda Beta aşamasına geçmeye çalışıyoruz. -İçerik ve teknik anlamda görüşlerinizi paylaşabilirseniz sevinirim. diff --git a/SolutionItems/Documents/Todo.md b/SolutionItems/Documents/Todo.md deleted file mode 100644 index 02e5c989e..000000000 --- a/SolutionItems/Documents/Todo.md +++ /dev/null @@ -1,238 +0,0 @@ -*** HOT *** - -* short description for cmrp -* content for editor? new content or new resourcepool - content in a content? or page as a new entity? -* route update (_system/) -* application manager - allows admin to update appSettings & restarts the app? -* 360 reasons to destroy - https://t.co/BHdHwjfSfR - -* expand('User' - brings all user info ?!?!? -http://stackoverflow.com/questions/10781309/asp-net-mvc-4-webapi-manually-handle-odata-queries -http://stackoverflow.com/questions/33126251/webapi-odata-pre-filtering-expand-queries - -* UseFixedValue doesn't work at all! fix it! also check resourcePool.UseFixedResourcePoolRate case! - -* number of sales fix - item.numberOfSales / element.numberOfSales - Total Cost Index - -Low sales vs high sale case - is this correct? -Org1 price 100 sales 5 -Org2 price 150 sales 100 -Org3 price 200 sales 100 -Org4 price 300 sales 5 -still Org1 gets the most? - ---- -After Therion -get backup of pubxml files (app.min.js addition to publish) and other files in gitignore + unsynced -gpg keys? https://help.github.com/articles/checking-for-existing-gpg-keys/ - ---- -* Busines Rules - * possible error; if one child element will have 2 indexes, UI is not going to work correctly? - * directincome type must use fixed value - * multiplier cannot use fixed value - * one element can't be selected by multiple fields? - * elementfield - selectedelement validations + test? - * ElementField SortOrder field validations - Check various scenarios, it shouldn't contain duplicate values for instance, what should happen then? Create test cases - * field restrictions, one multiplier, one incomefield - server side validation? -Currently direct income & multiplier field types can only be added once per element (or resource pool)? If this is true, apply validations & tests - -* ngClient - Entities & Factories - * elementField.js - DataType prop uses 'broadcast' and dataContext handles this event to create the actual event -seems nice, and it could be used in other cases. -however it doesn't return the newly created entity to the caller, which probably is not suitable for most cases? -how about using $injector.get('dataContext') in these cases, instead of broadcast? - * use createEntity in addX cases! - * // TODO Most of these functions are related with userService.js - updateX functions -// Try to merge these two - Actually try to handle these actions within the related entity / SH - 27 Nov. '15 -function updateCache() { - * move saveElementField fixes under elementfield.js datatype prop! - * try to use enums + js entities in add functions + tests - * angularjs 404 case? https://prerender.io/documentation/best-practices - * IMPORTANT BUT LATER! -do we correctly update RatingCount (probably yes..)? -but do we update other computed values (resourcepooltotal, count, numericvaluetotal, count, fieldratingtotal, count) correctly? -in case the owner edits them? -after save it only calls update cache.. shouldn't be enough? -* complete Index Enabled property - try to use IndexEnabled to prevent unnecessary calculations - -* ngClient - Testing - * celltests.js is okay, apply the same approach to others - * create a generic cmrp function in commons.js to replace most of the test preparation code? - * Check and try to remove these; // TODO Manually update?! -In most cases, it should only call cell.numericValue() etc. (most basic one) and then the rest should be done like a domino - -* WebApi - * review odatacontroller; -userId check, rowVersion check, try catch blocks, unique key checks - before or after, validation or exception, 400 or 409? -resourcepoolcontroller patch (and others?) is missing userId check? -put methdods need to be updated based on 'post' & 'patch' - * Controller Put & Patch returns Ok, instead of Updated? Because Updated() doesn't return the server-side updates, why? - * check return conflict() blocks, there's something wrong with them! - * enum data type didnt work with odata? or api? - * Odata - Find a better way for readonly props (edmbuilder)? - * Merge OData & WebApi? So WebApi can go forever? - * validateantiforgerytoken + bind attributes in odata controller? AntiForgery.GetTokens - * Controller validation - unified approach? -SequenceEqual check is only in Patch method, in on Post & Put -DbUpdateConcurrencyException is only in Post & Put, in on Patch -Delete doesn't have any Concurrency check? - * odata - paging (also filters?) -X-InlineCount - X-Pagination -querayable vs enablequerysupport -[Queryable(PageSize=10)] -var queryAttribute = new QueryableAttribute() { AllowedQueryOptions = AllowedQueryOptions.Top | AllowedQueryOptions.Skip, MaxTop = 100 }; -config.EnableQuerySupport(queryAttribute); -* Admin auth. - Only for admins didnt work - resourcepool etc.? -any user should be able to access them but only the owners and admins can update them? -according to this, normal user may not use post action for instance? check these rules later on - -* BL / DAL - * resourcepool - resourcepoolratetotal, count, ratingcount never null -elementfiel - indexratingtotal, count never null -elementcell - numericvaluecount never null - ONLY numericvaluetotal CAN BE NULL? which can be changed to NOT NULL! -elementfield - indexcalculationtype + indexsortype should have null value? - * move enums to their related class? - * complete security.permissions on business objects - * implement soft delete - * find vs deleted records? - findlive? or don't retrieve dead records at all? - * IAuditableEntity - entity createdby, modifiedby, deletedby properties - * extend dbcontext validation errors - check spaanjaars sample and use them in webapp with modelstate blocks? - * how about disabling proxy classes? what will be the difference exactly? - * Learn when and how to use IDisposable. Currently are there any object that should implement and/or call Dispose, repository + unitofwork + context + controllers? - * calling saveChanges in dispose of unitofwork? - * template pattern for elementfield + fieldtype classes! - * Find method -public IEnumerable[t] FindBy(System.Linq.Expressions.Expression[func[T, bool]] predicate) -{ IEnumerable[T] query = _dbset.Where(predicate).AsEnumerable(); return query; } - * check whether unit of work classes (and also Controllers) need merging -however, in the current structure, every entity will have a unitofwork + controller by default? -be careful about different contexts entities - license.resourcepool = sampleResourcePool was creating new resource pools! -either work with Ids, or try to work on merging unitofwork classes -* UserAware remark: ResourcePool has UserId but doesn't use UserAware attribute, so any user can retrieve someone else's CMRP -But is this correct approach? And how about updating it, does it allow other users to update? -With UserAware, should we also mention which actions are allowed? -* In case you need to set UserId explicitly, do these actions under methods that can only be called by Admins! -* When the user logs out, how to clear existing related data from context? Or is this an issue? - -* Identity / Account: - * client side user session expire case - expires property to calculate?! - * refresh tokens - * Invalidating tokens http://stackoverflow.com/questions/22755700/revoke-token-generated-by-usertokenprovider-in-asp-net-identity-2-0/22767286#22767286 - * before sending any email to user, check whether it's confirmed? - * Two factor auth. - * Account lockout - * rememberMe - register user auto login: false - external login vm.rememberMe? - -* Glimpse - * find a way to log sql queries! glimpse? - * glimpse webapi (trace for instance) doesn't work for the moment - check it again later - * elmah for glimpse. necessary? - * Remote server? http://blog.getglimpse.com/2013/12/09/protect-glimpse-axd-with-your-custom-runtime-policy/ - -* ngClient - UI - * my ratings / show all users' ratings should be applied each section separately (cmrp rate, field rating, element cell value) - * angular material - https://material.angularjs.org/latest/ - * blur admin https://github.com/akveo/blur-admin?utm_content=buffera7574&utm_medium=twitter&utm_source=changelog&utm_campaign=buffer - * Better ratings UI https://angular-ui.github.io/bootstrap/#/getting_started - * improve password validation https://docs.angularjs.org/guide/forms - * copy from an existing cmrp / template? how to handle user level data - only copy computed ones? - * html form novalidate attribute? - * toastr has a jquery dependency - without it, jquery can be removed? - * Rating UI: Current ratings are from 0 to 100, could to 5, 10 or 1000 as well? - * HighCharts - using texbox to update chart data didn't work, it breaks the chart? - * moving menu (fixed to top of the screen) - * update editor size accordingly (with menu, it doesn't fit to screen) - * info tooltips hover, won't work on mobiles? - * cmrp rate visibility or resourcepool has it? - * (total) resource pool field incl. CMRP Add. field visibility? - * scroll directive (scrollToItem - requires jQuery); http://stackoverflow.com/questions/17284005/scrollto-function-in-angularjs - * selecting the current item in the menu / updating url? - * navigating to the current item on initial load? - * Handling concurrency can be improved; -Load the new record from the server and let the user update it's record accordingly -Or in some cases, it should do it automatically (like in resourcePoolEditor samples?) - * Auto retry for certain (concurrency etc.) when it fails to read or write to server? - -* Server Side Testing - * enable auto test for appveyor - currently it fails probably because it can't create the db? - * http://www.asp.net/web-api/overview/testing-and-debugging/mocking-entity-framework-when-unit-testing-aspnet-web-api-2 - * dependecy injection necessary? - Autofac, Ninject, Unity or ? Check their websites - Check Asp.Net Identity as a sample - -* New Features - -* Misc - * isAnonymous -> add as a guest role - * permissions - instead of enableresourcepooladdition field to control whether user can enter userresourcepoolrate, handle it with permissions - if the user has a right to enter or not? same goes for FieldIndex ratings - * Database performance: Suggests to create a separate username field with index http://blogs.msdn.com/b/webdev/archive/2015/02/11/improve-performance-by-optimizing-queries-for-asp-net-identity-and-other-membership-providers.aspx - * __migrationhistory createdon field error - it seems there is not much to do, it also might be about glimpse? - * Convert batch files to PowerShell scripts - to get used to Powershell - - * blank project (User / Environment Ignorant) -Try to remove static configurations from the application, so the users can use the application with their own settings. - - * The list of projects & files that have static connectionStrings; -All .tt files - Facade.Tests - Dataobjects.Tests - Dataobjects - Local_db command scripts - - * naming updates -referenceRatingMultiplied -> aggressiveRatingBase ? -Repository -> Store - UnitOfWork -> Manager - Db table names -> [Table]Set? - So using "User" table wouldn't be a problem? - - * check the routes again! -/_system/account -/_system/about | /_system/content/about ? -/_system/articles/? -/_system/register -/_system/login -/_system/search -_sys|_|~|.|-|.sys|.s|.i|_int| -ALPHA / DIGIT / "-" / "." / "_" / "~" - - * MAP - Update this list! -most of 'updateRelated' blocks & IndexEnabled check on ElementCell.js became obsolete! -cell.numericValueAverage | cell.currentUserNumericValue -cell.numericValue | item.multiplier -cell.numericValueMultiplied -field.numericValueMultiplied -. cell.passiveRatingPercentage -. field.referenceRatingMultiplied -. cell.aggressiveRating -. field.aggressiveRating -. cell.aggressiveRatingPercentage -. cell.indexIncome - - * FieldType notes -string - n/a -bool - indexable (fixed / user (only current - rating average)) -int - indexable (fixed / user (only current - rating average)) -decimal - indexable (fixed / user (only current - rating average)) - resource pool (fixed) - multiplier (user - only current) -datetime - indexable (fixed / user (only current - rating average)) -element - n/a -resource - ~decimal -multiplier - n/a -result of datetime (ticks) index is bit useless? need reference a start or end date as a reference? - -* 3rd party - Check & Review Later - * google search console - sitemap - * breeze save error extension http://breeze.github.io/doc-breeze-labs/save-error-extensions.html - * breeze metadata helper http://breeze.github.io/doc-breeze-labs/metadata-helper.html - * angularjs conventions; https://github.com/mgechev/angularjs-style-guide - * chutzpah - https://github.com/mmanela/chutzpah/wiki/Chutzpah.json-Settings-File - * web api throttling! - * automapper - useful library, do we need it? - * html minifier: https://github.com/deanhume/html-minifier | https://www.npmjs.com/package/gulp-minify-html - * creative commons? - * Token binding protocol? HTTP/2 Support? - * http://namevine.com/#/forcrowd - * shields.io for badges - * Nice tool: http://www.mail-tester.com/ - * request validation -> html agility pack? - * coded ui test or canopy or ..? web iu testers? - * http://www.postsharp.net/aspects#examples - * elastic search? - * https://github.com/hazzik/DelegateDecompiler - * datasets endpoints? https://github.com/datasets/gdp/blob/master/data/gdp.csv - * code contracts? - * Install-Package DynamicQuery? - * http://www.hanselman.com/blog/crossbrowserdebuggingintegratedintovisualstudiowithbrowserstack.aspx - * https://www.runscope.com/signup diff --git a/SolutionItems/Documents/Troubleshoot.txt b/SolutionItems/Documents/Troubleshoot.txt deleted file mode 100644 index cbac2a082..000000000 --- a/SolutionItems/Documents/Troubleshoot.txt +++ /dev/null @@ -1,29 +0,0 @@ -09 May '14 - -ERROR -T4 file - Could not load type 'System.ComponentModel.DataAnnotations.Schema.IndexAttribute' from assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. - -SOLUTION -Visual Studio has its own Entity Framework 6.0 under the following folder; -C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE - -Since the application is now using 6.1, it needs to be updated manually. -Take a backup of the original files and replace them with the latest Entity Framework library. - -Files -EntityFramework.dll -EntityFramework.SqlServer.dll -EntityFramework.SqlServerCompact.6.0 -> This file is not used by this application, can be better to take a backup and just change its name. - ---- -ERROR - -During Build operation, in Output - Build window; -File (SolutionDir)\SolutionItems\Scripts\Build\WarmUp.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170. - + CategoryInfo : SecurityError: (:) [], ParentContainsErrorRecord - Exception - + FullyQualifiedErrorId : UnauthorizedAccess - -SOLUTION -Run "Windows Powershell" and set the execution policy by typing this into the window: -Set-ExecutionPolicy RemoteSigned -Scope CurrentUser diff --git a/SolutionItems/Properties/AssemblyInfo.cs b/SolutionItems/Properties/AssemblyInfo.cs index f9dbfdafc..fe716ca86 100644 --- a/SolutionItems/Properties/AssemblyInfo.cs +++ b/SolutionItems/Properties/AssemblyInfo.cs @@ -30,5 +30,5 @@ // // AssemblyFileVersion is not in use for the moment // -[assembly: AssemblyVersion("0.57.0")] +[assembly: AssemblyVersion("0.58.0")] [assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SolutionItems/SolutionItems.csproj b/SolutionItems/SolutionItems.csproj index 31e9f6970..0b6acca87 100644 --- a/SolutionItems/SolutionItems.csproj +++ b/SolutionItems/SolutionItems.csproj @@ -36,14 +36,10 @@ - - - - @@ -55,14 +51,10 @@ Documents\CHANGELOG.md - - - - diff --git a/ngClient/_system/css/main.css b/ngClient/_system/css/main.css index 54c4379df..c26f5015f 100644 --- a/ngClient/_system/css/main.css +++ b/ngClient/_system/css/main.css @@ -11,6 +11,49 @@ textarea { max-width: 280px; } +.btn-link:hover, +.btn-link:focus { + text-decoration: none; +} +/* #region - Social Logins - */ + +.btn-social > i { + float: left; + padding: 3px 0 0; +} + +.btn-facebook { + color: #fff; + background-color: #3b5998; +} + + .btn-facebook:focus, .btn-facebook.focus, .btn-facebook:hover, .btn-facebook:active, .btn-facebook.active { + color: #fff; + background-color: #2d4373; + } + +.btn-microsoft { + color: #fff; + background-color: #2672ec; +} + + .btn-microsoft:focus, .btn-microsoft.focus, .btn-microsoft:hover, .btn-microsoft:active, .btn-microsoft.active { + color: #fff; + background-color: #125acd; + } + +.btn-google { + color: #fff; + background-color: #dd4b39; +} + + .btn-google:focus, .btn-google.focus, .btn-google:hover, .btn-google:active, .btn-google.active { + color: #fff; + background-color: #c23321; + } + +/* #endregion */ + .versionText { border-top: 1px solid #333; font-size: 90%; @@ -68,7 +111,7 @@ ul.bg-info { width: 18px; } -/* Callout Begin */ +/* #region - Callout Begin - */ .bs-callout { padding: 20px; @@ -119,7 +162,7 @@ ul.bg-info { color: #5bc0de; } -/* Callout End */ +/* #endregion */ /* styles for validation helpers */ .field-validation-error { @@ -148,12 +191,13 @@ input[type="checkbox"].input-validation-error { /* Project level custom helpers / SH 24 Jan. '14 */ -/* Spaces -------------------------------------*/ +/* #region - Spaces - */ + .g-no-mb { margin-bottom: 0; } + .g-no-padding { padding: 0; } @@ -609,7 +653,9 @@ input[type="checkbox"].input-validation-error { margin-right: 100px; } -/* Misc */ +/*#endregion */ + +/* #region - Misc - */ .vcenter { display: inline-block; @@ -617,95 +663,99 @@ input[type="checkbox"].input-validation-error { float: none; } -/*Table Search -------------------------------------*/ +/* #endregion */ + +/* #region - Table Search - */ + .table-search { - border-left: none; + border-left: none; } -.table-search .btn-group .btn-u { - top: 4px; - padding: 0 6px; - position: relative; -} + .table-search .btn-group .btn-u { + top: 4px; + padding: 0 6px; + position: relative; + } -.table-search .btn-u.dropdown-toggle { - border-left: none; -} + .table-search .btn-u.dropdown-toggle { + border-left: none; + } -.table-search thead { - border-bottom: solid 1px #ddd; -} + .table-search thead { + border-bottom: solid 1px #ddd; + } -.table-search td { - vertical-align: middle !important; -} + .table-search td { + vertical-align: middle !important; + } -.table-search td img { - width: 70px; - height: 70px; - margin: 0 auto; - display: block; -} + .table-search td img { + width: 70px; + height: 70px; + margin: 0 auto; + display: block; + } + + .table-search .user-names span, + .table-search .user-names small { + display: block; + text-align: center; + } -.table-search .user-names span, -.table-search .user-names small { - display: block; - text-align: center; -} + .table-search .user-names span { + color: #555; + font-size: 16px; + position: relative; + } -.table-search .user-names span { - color: #555; - font-size: 16px; - position: relative; -} + .table-search .user-names small { + color: #999; + font-size: 13px; + } -.table-search .user-names small { - color: #999; - font-size: 13px; -} + .table-search td h3 { + font-size: 16px; + margin: 0 0 2px; + } -.table-search td h3 { - font-size: 16px; - margin: 0 0 2px; -} + .table-search td a { + color: #555; + } -.table-search td a { - color: #555; -} + .table-search td p { + margin-bottom: 0; + } -.table-search td p { - margin-bottom: 0; -} + .table-search td span { + display: block; + } -.table-search td span { - display: block; -} + .table-search td small { + font-style: italic; + } -.table-search td small { - font-style: italic; -} + .table-search .s-icons { + margin-bottom: 0; + } -.table-search .s-icons { - margin-bottom: 0; -} + .table-search .s-icons li { + padding: 2px; + } -.table-search .s-icons li { - padding: 2px; -} + .table-search .table-buttons { + margin: 0; + } -.table-search .table-buttons { - margin: 0; -} + .table-search .table-buttons li { + padding: 0; + } -.table-search .table-buttons li { - padding: 0; -} + .table-search .table-buttons .btn-u-sm { + padding: 3px 6px; + } -.table-search .table-buttons .btn-u-sm { - padding: 3px 6px; -} + .table-search .td-width { + width: 55%; + } -.table-search .td-width { - width: 55%; -} +/* #endregion */ diff --git a/ngClient/_system/js/app/config/route.js b/ngClient/_system/js/app/config/route.js index d091399c1..7208f85f4 100644 --- a/ngClient/_system/js/app/config/route.js +++ b/ngClient/_system/js/app/config/route.js @@ -25,7 +25,7 @@ .when('/_system/content/knowledgeIndex', { title: 'Knowledge Index', templateUrl: '/_system/views/content/knowledgeIndex.html?v=0.51.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/_system/content/priorityIndex', { title: 'Priority Index', templateUrl: '/_system/views/content/priorityIndex.html?v=0.49.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/_system/content/prologue', { title: 'Prologue', templateUrl: '/_system/views/content/prologue.html?v=0.51.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) - .when('/_system/content/reason', { title: 'Reason', templateUrl: '/_system/views/content/reason.html?v=0.49.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) + .when('/_system/content/reason', { title: 'Reason', templateUrl: '/_system/views/content/reason.html?v=0.58.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/_system/content/totalCostIndex', { title: 'Total Cost Index', templateUrl: '/_system/views/content/totalCostIndex.html?v=0.49.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) /* Account */ @@ -36,8 +36,8 @@ .when('/_system/account/changePassword', { title: 'Change Password', templateUrl: '/_system/views/account/changePassword.html?v=0.55.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/_system/account/changeUserName', { title: 'Change Username', templateUrl: '/_system/views/account/changeUsername.html?v=0.55.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/_system/account/confirmEmail', { title: 'Confirm Email', templateUrl: '/_system/views/account/confirmEmail.html?v=0.51.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) - .when('/_system/account/login', { title: 'Login', templateUrl: '/_system/views/account/login.html?v=0.55.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) - .when('/_system/account/register', { title: 'Register', templateUrl: '/_system/views/account/register.html?v=0.55.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) + .when('/_system/account/login', { title: 'Login', templateUrl: '/_system/views/account/login.html?v=0.58.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) + .when('/_system/account/register', { title: 'Register', templateUrl: '/_system/views/account/register.html?v=0.58.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/_system/account/resetPassword', { title: 'Reset Password', templateUrl: '/_system/views/account/resetPassword.html?v=0.55.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) /* CMRP Search */ @@ -45,8 +45,8 @@ /* User */ .when('/:userName', { title: 'Profile', templateUrl: '/_system/views/account/profile.html?v=0.57.0', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) - .when('/:userName/new', { title: 'New CMRP', templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.57.0', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) - .when('/:userName/:resourcePoolKey/edit', { title: 'Edit CMRP', templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.57.0', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) + .when('/:userName/new', { title: 'New CMRP', templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.58.0', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) + .when('/:userName/:resourcePoolKey/edit', { title: 'Edit CMRP', templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.58.0', resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) .when('/:userName/:resourcePoolKey', { title: 'View CMRP', templateUrl: '/_system/views/resourcePool/resourcePoolView.html?v=0.57.0', enableDisqus: true, resolve: { validateAccess: ['dataContext', 'locationHistory', 'logger', '$location', '$q', '$route', validateAccess] } }) /* Otherwise */ diff --git a/ngClient/_system/js/app/controllers/content/DefaultController.js b/ngClient/_system/js/app/controllers/content/DefaultController.js index 40d028da2..9c4fcbee1 100644 --- a/ngClient/_system/js/app/controllers/content/DefaultController.js +++ b/ngClient/_system/js/app/controllers/content/DefaultController.js @@ -110,7 +110,7 @@ dataContext.rejectChanges(); $location.path(newUrl.substring($location.absUrl().length - $location.url().length)); - }); + }, function () { }); // Always cancel route changes event.preventDefault(); @@ -133,8 +133,11 @@ } }], controllerAs: 'vm', - templateUrl: '/_system/views/account/guestAccountInfo.html?v=0.57.0' + templateUrl: '/_system/views/account/guestAccountInfo.html?v=0.58.0' }); + + modalInstance.result.then(function () { }, + function () { }); } function routeChangeSuccess(event, current, previous) { diff --git a/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolManageController.js b/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolManageController.js index 0b92c1788..7de3349df 100644 --- a/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolManageController.js +++ b/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolManageController.js @@ -326,12 +326,13 @@ var modalInstance = $uibModal.open({ controller: ['$scope', '$uibModalInstance', ResourcePoolRemoveController], controllerAs: 'vm', + keyboard: false, templateUrl: '/_system/views/resourcePool/resourcePoolRemove.html?v=0.53.0' }); modalInstance.result.then(function () { removeResourcePool(); - }); + }, function () { }); } function removeElement(element) { diff --git a/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.css b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.css index 82d7a29e6..fb3ed82b1 100644 --- a/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.css +++ b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.css @@ -1,17 +1,46 @@ .resourcePoolEditor { font-family: Tahoma; /*font-family: Verdana, Geneva, Tahoma, sans-serif;*/ - font-size: 10px; + font-size: 11px; padding: 1.5em 0; } -.resourcePoolEditor .panel-title { - font-size: 18px; - line-height: 2em; -} + .resourcePoolEditor .heading { + padding: 15px; + } + + .resourcePoolEditor .title { + font-size: 18px; + line-height: 2em; + } + + .resourcePoolEditor hr { + margin: 10px 0 20px 0; + border-color: #ddd; + } + + .resourcePoolEditor .description { + padding: 30px 15px; + font-size: 14px; + line-height: 1.5em; + border-bottom: 1px solid #ddd; + } + + .resourcePoolEditor .settings, + .resourcePoolEditor .details { + min-height: 3em; + } + + .resourcePoolEditor .details label, .resourcePoolEditor .details span { + border-bottom: 1px solid #ddd; + display: inline-block; + line-height: 2em; + margin-bottom: 0; + min-width: 125px; + padding: 5px; + } .resourcePoolTable { - /*table-layout: fixed;*/ } .resourcePoolTable > thead > tr > th { @@ -28,16 +57,6 @@ padding: 3px; } - .resourcePoolTable .fixedWidth35Cell { - display: inline-block; - width: 35px; - } - - .resourcePoolTable .fixedWidth45Cell { - display: inline-block; - width: 45px; - } - .resourcePoolTable .infoText { margin-left: 2px; } @@ -54,6 +73,10 @@ color: #3c763d; } + .resourcePoolTable .noborder { + border: 0; + } + .label-as-on-badge { border-radius: 1em; background-color: #3c763d; diff --git a/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html index 362c4ae8c..748e61600 100644 --- a/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html +++ b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html @@ -1,24 +1,46 @@ 
-
+
-
+

- + -
+ +
+
+
+
+
+
+
+
+
+
+
+
+
-
- +
+
+
+
+
+ +
@@ -39,200 +61,196 @@
+
+
+
+
+ + +
+ + + +
+
+
+
+
+
+
+ + +
+
+
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + +
- CMRP Rate - - - - -
- - - -
-
- CMRP Amount - - -
 
 
- - -
- (I) -
- - - -
- - - - - - CMRP Income - - - - Total Income -
- - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - -
+ + +
+ (I) +
+ + + +
+ + + + + + CMRP Income + + + + Total Income +
+ + + +
- - + + + +
+ + + +
+
+
+ +
+
+ +
+
+ +
+
+ + + +
+
+
+
+ + + + + + + +
+   + + + + + + -
- - - +
+ + + + + + + +
+   + +
+  
- -
- -
-
- -
-
- -
+
- - - + + +
-
-
- - - - - - - -
-   - - - - - - - - - - - - - - - -
-   - -
+
  - -
+
- - - + + +
- -
-   - -
- - - -
-
-   - -   -
+
+   + +   +
+
diff --git a/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js index 2b4f832e0..9fb952fb3 100644 --- a/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js +++ b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js @@ -13,10 +13,10 @@ function link(scope, elm, attrs) { - // Local variables + // Scope variables scope.currentUser = null; + scope.displayDescription = true; scope.displayIndexDetails = false; - scope.editResourcePool = editResourcePool; scope.errorMessage = ''; scope.isSaving = false; scope.resourcePool = { Name: 'Loading...' }; @@ -30,6 +30,7 @@ scope.decreaseElementCellMultiplier = decreaseElementCellMultiplier; scope.decreaseIndexRating = decreaseIndexRating; scope.decreaseResourcePoolRate = decreaseResourcePoolRate; + scope.editResourcePool = editResourcePool; scope.increaseElementCellNumericValue = increaseElementCellNumericValue; scope.increaseElementMultiplier = increaseElementMultiplier; scope.increaseElementCellMultiplier = increaseElementCellMultiplier; @@ -40,6 +41,7 @@ scope.resetElementCellMultiplier = resetElementCellMultiplier; scope.resetIndexRating = resetIndexRating; scope.resetResourcePoolRate = resetResourcePoolRate; + scope.toggleDescription = toggleDescription; scope.toggleIndexDetails = toggleIndexDetails; // Event handlers @@ -307,6 +309,10 @@ scope.isSaving = false; } + function toggleDescription() { + scope.displayDescription = !scope.displayDescription; + } + // Index Details function toggleIndexDetails() { scope.displayIndexDetails = !scope.displayIndexDetails; @@ -386,7 +392,7 @@ return { restrict: 'E', - templateUrl: '/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.55.0', + templateUrl: '/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.58.0b', scope: { config: '=' }, diff --git a/ngClient/_system/js/app/entities/Element.js b/ngClient/_system/js/app/entities/Element.js index e388308c0..a8053534a 100644 --- a/ngClient/_system/js/app/entities/Element.js +++ b/ngClient/_system/js/app/entities/Element.js @@ -24,7 +24,7 @@ // TODO When this prop set in constructor, ResourcePool is null, in such case, ignore // However, it would be better to always have a ResourcePool? / SH - 29 Nov. '15 - if (typeof self.ResoucePool === 'undefined') { + if (typeof self.ResourcePool === 'undefined' || self.ResourcePool === null) { return; } diff --git a/ngClient/_system/js/app/factories/dataContext.js b/ngClient/_system/js/app/factories/dataContext.js index 2c273dfe6..03faaff81 100644 --- a/ngClient/_system/js/app/factories/dataContext.js +++ b/ngClient/_system/js/app/factories/dataContext.js @@ -628,8 +628,6 @@ return ensureAuthenticatedUser() .then(function () { - - var promise = null; var count = getChangesCount(); var saveBatches = prepareSaveBatches(); @@ -753,7 +751,6 @@ * arbitrarily, causing the database failure we're trying to avoid. */ } - }); } diff --git a/ngClient/_system/js/app/factories/resourcePoolFactory.js b/ngClient/_system/js/app/factories/resourcePoolFactory.js index 9a8b49e1c..198adf80c 100644 --- a/ngClient/_system/js/app/factories/resourcePoolFactory.js +++ b/ngClient/_system/js/app/factories/resourcePoolFactory.js @@ -112,6 +112,7 @@ User: currentUser, Name: 'New CMRP', Key: 'New-CMRP', + Description: 'Description for CMRP', InitialValue: 100, UseFixedResourcePoolRate: true }); diff --git a/ngClient/_system/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js b/ngClient/_system/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js deleted file mode 100644 index 10b6cd7fb..000000000 --- a/ngClient/_system/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js +++ /dev/null @@ -1,420 +0,0 @@ -/* Fixed version of breeze.dataService.odata.js (1.5.4) adapter -https://github.com/Breeze/breeze.js/pull/128 -SH - 24 Jan. '16 -*/ - -(function (factory) { - if (typeof breeze === "object") { - factory(breeze); - } else if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { - // CommonJS or Node: hard-coded dependency on "breeze" - factory(require("breeze")); - } else if (typeof define === "function" && define["amd"]) { - // AMD anonymous module with hard-coded dependency on "breeze" - define(["breeze"], factory); - } -}(function (breeze) { - "use strict"; - var core = breeze.core; - - var MetadataStore = breeze.MetadataStore; - var JsonResultsAdapter = breeze.JsonResultsAdapter; - var DataProperty = breeze.DataProperty; - var DataType = breeze.DataType; - var AutoGeneratedKeyType = breeze.AutoGeneratedKeyType; - - var OData; - - var ctor = function DataServiceODataAdapter() { - this.name = "OData"; - }; - - var proto = ctor.prototype; // minifies better (as seen in jQuery) - - proto.initialize = function () { - OData = core.requireLib("OData", "Needed to support remote OData services"); - OData.jsonHandler.recognizeDates = true; - }; - // borrow from AbstractDataServiceAdapter - var abstractDsaProto = breeze.AbstractDataServiceAdapter.prototype; - proto._catchNoConnectionError = abstractDsaProto._catchNoConnectionError; - proto.changeRequestInterceptor = abstractDsaProto.changeRequestInterceptor; - proto._createChangeRequestInterceptor = abstractDsaProto._createChangeRequestInterceptor; - proto.headers = { "DataServiceVersion": "2.0" }; - proto.executeQuery = function (mappingContext) { - - var deferred = breeze.Q.defer(); - var url = mappingContext.getUrl(); - - OData.read({ - requestUri: url, - headers: this.headers - }, - function (data, response) { - var inlineCount; - if (data.__count) { - // OData can return data.__count as a string - inlineCount = parseInt(data.__count, 10); - } - return deferred.resolve({ results: data.results, inlineCount: inlineCount, httpResponse: response }); - }, - function (error) { - return deferred.reject(createError(error, url)); - } - ); - return deferred.promise; - }; - - - proto.fetchMetadata = function (metadataStore, dataService) { - - var deferred = breeze.Q.defer(); - - var serviceName = dataService.serviceName; - var url = dataService.qualifyUrl('$metadata'); - // OData.read(url, - OData.read({ - requestUri: url, - // headers: { "Accept": "application/json"} - headers: { Accept: 'application/json;odata.metadata=full' } - }, - function (data) { - // data.dataServices.schema is an array of schemas. with properties of - // entityContainer[], association[], entityType[], and namespace. - if (!data || !data.dataServices) { - var error = new Error("Metadata query failed for: " + url); - return deferred.reject(error); - } - var csdlMetadata = data.dataServices; - - // might have been fetched by another query - if (!metadataStore.hasMetadataFor(serviceName)) { - try { - metadataStore.importMetadata(csdlMetadata); - } catch (e) { - return deferred.reject(new Error("Metadata query failed for " + url + "; Unable to process returned metadata: " + e.message)); - } - - metadataStore.addDataService(dataService); - } - - return deferred.resolve(csdlMetadata); - - }, function (error) { - var err = createError(error, url); - err.message = "Metadata query failed for: " + url + "; " + (err.message || ""); - return deferred.reject(err); - }, - OData.metadataHandler - ); - - return deferred.promise; - - }; - - proto.getRoutePrefix = function (/*dataService*/) { - return ''; - } // see webApiODataCtor - - proto.saveChanges = function (saveContext, saveBundle) { - var adapter = saveContext.adapter = this; - var deferred = breeze.Q.defer(); - saveContext.routePrefix = adapter.getRoutePrefix(saveContext.dataService); - var url = saveContext.dataService.qualifyUrl("$batch"); - - var requestData = createChangeRequests(saveContext, saveBundle); - var tempKeys = saveContext.tempKeys; - var contentKeys = saveContext.contentKeys; - - OData.request({ - headers: { "DataServiceVersion": "2.0" }, - requestUri: url, - method: "POST", - data: requestData - }, function (data, response) { - var entities = []; - var keyMappings = []; - var saveResult = { entities: entities, keyMappings: keyMappings }; - data.__batchResponses.forEach(function (br) { - br.__changeResponses.forEach(function (cr) { - var response = cr.response || cr; - var statusCode = response.statusCode; - if ((!statusCode) || statusCode >= 400) { - deferred.reject(createError(cr, url)); - return; - } - - var contentId = cr.headers["Content-ID"]; - - var rawEntity = cr.data; - if (rawEntity) { - var tempKey = tempKeys[contentId]; - if (tempKey) { - var entityType = tempKey.entityType; - if (entityType.autoGeneratedKeyType !== AutoGeneratedKeyType.None) { - var tempValue = tempKey.values[0]; - var realKey = entityType.getEntityKeyFromRawEntity(rawEntity, DataProperty.getRawValueFromServer); - var keyMapping = { entityTypeName: entityType.name, tempValue: tempValue, realValue: realKey.values[0] }; - keyMappings.push(keyMapping); - } - } - entities.push(rawEntity); - } else { - var origEntity = contentKeys[contentId]; - entities.push(origEntity); - } - }); - }); - return deferred.resolve(saveResult); - }, function (err) { - return deferred.reject(createError(err, url)); - }, OData.batchHandler); - - return deferred.promise; - - }; - - proto.jsonResultsAdapter = new JsonResultsAdapter({ - name: "OData_default", - - visitNode: function (node, mappingContext, nodeContext) { - var result = {}; - if (node == null) return result; - var metadata = node.__metadata; - if (metadata != null) { - // TODO: may be able to make this more efficient by caching of the previous value. - var entityTypeName = MetadataStore.normalizeTypeName(metadata.type); - var et = entityTypeName && mappingContext.entityManager.metadataStore.getEntityType(entityTypeName, true); - // OData response doesn't distinguish a projection from a whole entity. - // We'll assume that whole-entity data would have at least as many properties (<=) - // as the EntityType has mapped properties on the basis that - // most projections remove properties rather than add them. - // If not, assume it's a projection and do NOT treat as an entity - if (et && et._mappedPropertiesCount <= Object.keys(node).length - 1) { - // if (et && et._mappedPropertiesCount === Object.keys(node).length - 1) { // OLD - result.entityType = et; - var uriKey = metadata.uri || metadata.id; - if (uriKey) { - // Strip baseUri to make uriKey a relative uri - // Todo: why is this necessary when absolute works for every OData source tested? - var re = new RegExp('^' + mappingContext.dataService.serviceName, 'i'); - uriKey = uriKey.replace(re, ''); - } - result.extraMetadata = { - uriKey: uriKey, - etag: metadata.etag - } - } - } - // OData v3 - projection arrays will be enclosed in a results array - if (node.results) { - result.node = node.results; - } - - var propertyName = nodeContext.propertyName; - result.ignore = node.__deferred != null || propertyName === "__metadata" || - // EntityKey properties can be produced by EDMX models - (propertyName === "EntityKey" && node.$type && core.stringStartsWith(node.$type, "System.Data")); - return result; - } - - }); - - function transformValue(prop, val) { - if (prop.isUnmapped) return undefined; - if (prop.dataType === DataType.DateTimeOffset) { - // The datajs lib tries to treat client dateTimes that are defined as DateTimeOffset on the server differently - // from other dateTimes. This fix compensates before the save. - val = val && new Date(val.getTime() - (val.getTimezoneOffset() * 60000)); - } else if (prop.dataType.quoteJsonOData) { - val = val != null ? val.toString() : val; - } - return val; - } - - function createChangeRequests(saveContext, saveBundle) { - var changeRequestInterceptor = saveContext.adapter._createChangeRequestInterceptor(saveContext, saveBundle); - var changeRequests = []; - var tempKeys = []; - var contentKeys = []; - var entityManager = saveContext.entityManager; - var helper = entityManager.helper; - var id = 0; - var routePrefix = saveContext.routePrefix; - - saveBundle.entities.forEach(function (entity, index) { - var aspect = entity.entityAspect; - id = id + 1; // we are deliberately skipping id=0 because Content-ID = 0 seems to be ignored. - var request = { headers: { "Content-ID": id, "DataServiceVersion": "2.0" } }; - contentKeys[id] = entity; - if (aspect.entityState.isAdded()) { - request.requestUri = routePrefix + entity.entityType.defaultResourceName; - request.method = "POST"; - request.data = helper.unwrapInstance(entity, transformValue); - tempKeys[id] = aspect.getKey(); - } else if (aspect.entityState.isModified()) { - updateDeleteMergeRequest(request, aspect, routePrefix); - request.method = "MERGE"; - request.data = helper.unwrapChangedValues(entity, entityManager.metadataStore, transformValue); - // should be a PATCH/MERGE - } else if (aspect.entityState.isDeleted()) { - updateDeleteMergeRequest(request, aspect, routePrefix); - request.method = "DELETE"; - } else { - return; - } - request = changeRequestInterceptor.getRequest(request, entity, index); - changeRequests.push(request); - }); - saveContext.contentKeys = contentKeys; - saveContext.tempKeys = tempKeys; - changeRequestInterceptor.done(changeRequests); - return { - __batchRequests: [ - { - __changeRequests: changeRequests - } - ] - }; - - } - - function updateDeleteMergeRequest(request, aspect, routePrefix) { - var uriKey; - var extraMetadata = aspect.extraMetadata; - if (extraMetadata == null) { - uriKey = getUriKey(aspect); - aspect.extraMetadata = { - uriKey: uriKey - } - } else { - uriKey = extraMetadata.uriKey; - if (extraMetadata.etag) { - request.headers["If-Match"] = extraMetadata.etag; - } - } - request.requestUri = - // use routePrefix if uriKey lacks protocol (i.e., relative uri) - uriKey.indexOf('//') > 0 ? uriKey : routePrefix + uriKey; - } - - function getUriKey(aspect) { - var entityType = aspect.entity.entityType; - var resourceName = entityType.defaultResourceName; - var kps = entityType.keyProperties; - var uriKey = resourceName + "("; - if (kps.length === 1) { - uriKey = uriKey + fmtProperty(kps[0], aspect) + ")"; - } else { - var delim = ""; - kps.forEach(function (kp) { - uriKey = uriKey + delim + kp.nameOnServer + "=" + fmtProperty(kp, aspect); - delim = ","; - }); - uriKey = uriKey + ")"; - } - return uriKey; - } - - function fmtProperty(prop, aspect) { - return prop.dataType.fmtOData(aspect.getPropertyValue(prop.name)); - } - - function createError(error, url) { - // OData errors can have the message buried very deeply - and nonobviously - // this code is tricky so be careful changing the response.body parsing. - var result = new Error(); - var response = error && error.response; - if (!response) { - // in case DataJS returns "No handler for this data" - result.message = error; - result.statusText = error; - return result; - } - result.message = response.statusText; - result.statusText = response.statusText; - result.status = response.statusCode; - // non std - if (url) result.url = url; - result.body = response.body; - if (response.body) { - var nextErr; - try { - var body = JSON.parse(response.body); - result.body = body; - // OData v3 logic - if (body['odata.error']) { - body = body['odata.error']; - } - var msg = ""; - do { - nextErr = body.error || body.innererror; - if (!nextErr) msg = msg + getMessage(body); - nextErr = nextErr || body.internalexception; - body = nextErr || body; - } while (nextErr); - if (msg.length > 0) { - result.message = msg; - } - } catch (e) { - - } - } - proto._catchNoConnectionError(result); - return result; - } - - function getMessage(body) { - var msg = body.message || ""; - return ((typeof (msg) === "string") ? msg : msg.value) + "; "; - } - - breeze.config.registerAdapter("dataService", ctor); - - - var webApiODataCtor = function () { - this.name = "webApiOData"; - } - - breeze.core.extend(webApiODataCtor.prototype, proto); - - webApiODataCtor.prototype.getRoutePrefix = function (dataService) { - // Get the routePrefix from a Web API OData service name. - // The routePrefix is presumed to be the pathname within the dataService.serviceName - // Examples of servicename -> routePrefix: - // 'http://localhost:55802/odata/' -> 'odata/' - // 'http://198.154.121.75/service/odata/' -> 'service/odata/' - var parser; - if (typeof document === 'object') { // browser - parser = document.createElement('a'); - parser.href = dataService.serviceName; - } else { // node - parser = url.parse(dataService.serviceName); - } - var prefix = parser.pathname; - if (prefix[0] === '/') { - prefix = prefix.substr(1); - } // drop leading '/' (all but IE) - if (prefix.substr(-1) !== '/') { - prefix += '/'; - } // ensure trailing '/' - return prefix; - }; - - breeze.config.registerAdapter("dataService", webApiODataCtor); - // OData 4 adapter - var webApiOData4Ctor = function () { - this.name = "webApiOData4"; - } - breeze.core.extend(webApiOData4Ctor.prototype, webApiODataCtor.prototype); - webApiOData4Ctor.prototype.initialize = function () { - // Aargh... they moved the cheese. - var datajs = core.requireLib("datajs", "Needed to support remote OData v4 services"); - OData = datajs.V4.oData; - OData.json.jsonHandler.recognizeDates = true; - }; - webApiOData4Ctor.prototype.headers = { "OData-Version": "4.0" }; - breeze.config.registerAdapter("dataService", webApiOData4Ctor); - - -})); \ No newline at end of file diff --git a/ngClient/_system/views/account/guestAccountInfo.html b/ngClient/_system/views/account/guestAccountInfo.html index 865d9fdf8..bb30a0658 100644 --- a/ngClient/_system/views/account/guestAccountInfo.html +++ b/ngClient/_system/views/account/guestAccountInfo.html @@ -30,6 +30,6 @@
diff --git a/ngClient/_system/views/account/login.html b/ngClient/_system/views/account/login.html index a4f5e20bf..cea4ba956 100644 --- a/ngClient/_system/views/account/login.html +++ b/ngClient/_system/views/account/login.html @@ -42,6 +42,6 @@

Use a local account to log in

-
+
diff --git a/ngClient/_system/views/account/register.html b/ngClient/_system/views/account/register.html index 5bccc50bd..82d090061 100644 --- a/ngClient/_system/views/account/register.html +++ b/ngClient/_system/views/account/register.html @@ -55,6 +55,6 @@

Create a new local account

-
+
diff --git a/ngClient/_system/views/account/socialLogins.html b/ngClient/_system/views/account/socialLogins.html index 06db3672d..7b38bbf73 100644 --- a/ngClient/_system/views/account/socialLogins.html +++ b/ngClient/_system/views/account/socialLogins.html @@ -4,17 +4,17 @@

Or use an external service


diff --git a/ngClient/_system/views/content/home.html b/ngClient/_system/views/content/home.html index a14f40186..b933a95a4 100644 --- a/ngClient/_system/views/content/home.html +++ b/ngClient/_system/views/content/home.html @@ -20,6 +20,6 @@

Wealth Economy



-
+
diff --git a/ngClient/_system/views/content/reason.html b/ngClient/_system/views/content/reason.html index 53f134987..46ce9fbf6 100644 --- a/ngClient/_system/views/content/reason.html +++ b/ngClient/_system/views/content/reason.html @@ -30,7 +30,7 @@

The main issue in the current system is that it leaves the whole responsibility to the consumers; - every consumer must know every detail about the products and their organizations before making any single purchase, therefore allocating the resources. + every consumer must know every detail about the products and their organizations before making any single purchase, therefore allocating the resources. The amount of information has to be collected and processed by each consumer is simply massive and expecting consumers to fulfill this task is an impractical one.

diff --git a/ngClient/_system/views/resourcePool/resourcePoolManage.html b/ngClient/_system/views/resourcePool/resourcePoolManage.html index 6702d42b9..a4aae2edf 100644 --- a/ngClient/_system/views/resourcePool/resourcePoolManage.html +++ b/ngClient/_system/views/resourcePool/resourcePoolManage.html @@ -20,6 +20,13 @@

+
+ +
+ + +
+
@@ -66,19 +73,6 @@

-
- -
-

- - Set as main element -

- - Determines whether CMRP Editor will start with this item or not. - Only one element can be 'Main Element' and it cannot be deleted. - -
-
@@ -100,10 +94,10 @@

-

- - Create New - +

+

@@ -123,12 +117,16 @@

- - Edit - - - Remove - + + +
@@ -255,10 +253,10 @@

-

- - Create New - +

+

@@ -290,12 +288,12 @@

- - Edit - - - Remove - + +
@@ -344,10 +342,10 @@

-

- - Create New - +

+

@@ -367,12 +365,12 @@

- - Edit - - - Remove - + +
@@ -452,8 +450,10 @@

-

-   +

+

@@ -485,9 +485,9 @@

- - Edit - +
diff --git a/ngClient/bower.json b/ngClient/bower.json index b4cc507c5..784e6a14a 100644 --- a/ngClient/bower.json +++ b/ngClient/bower.json @@ -19,27 +19,26 @@ "bower_components" ], "dependencies": { - "jquery": "^2.2.1", - "moment": "^2.12.0", - "angular": "^1.5.0", - "angular-route": "^1.5.0", - "angular-sanitize": "^1.5.0", + "angular": "1.5.4", + "angular-bootstrap": "^1.2.1", + "angular-google-analytics": "^1.1.6", "angular-mocks": "^1.5.0", "angular-moment": "*", - "datajs": "^1.1.3", - "breeze-client": "^1.5.4", - "breeze-client-labs": "^1.5.8", - "angular-google-analytics": "^1.1.6", + "angular-route": "^1.5.0", + "angular-sanitize": "^1.5.0", "angular-utils-disqus": "^1.0.0", - "respond": "^1.4.2", - "angular-bootstrap": "^1.2.1", + "bootstrap": "^3.3.6", + "breeze-client": "^1.5.7", + "breeze-client-labs": "^1.5.8", + "datajs": "^1.1.3", + "font-awesome": "^4.5.0", "highcharts": "^4.2.3", "highcharts-ng": "^0.0.11", - "toastr": "^2.1.2", + "jquery": "2.2.2", + "moment": "^2.12.0", + "respond": "^1.4.2", "source-map": "^0.5.2", - "bootstrap": "^3.3.6", - "font-awesome": "^4.5.0", - "bootstrap-social": "^4.12.0" + "toastr": "^2.1.2" }, "resolutions": { "angular": ">=1.4.0", diff --git a/ngClient/default.aspx b/ngClient/default.aspx index 21cf5383d..363ff2f59 100644 --- a/ngClient/default.aspx +++ b/ngClient/default.aspx @@ -8,9 +8,9 @@ - + - +
  • - +