aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web/Tango.Portal
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2025-07-20 01:16:18 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2025-07-20 01:16:18 +0300
commit4b737c824ee1b1a347ea63aabe3273f2c16f3ac3 (patch)
treeaaca710d99cb56dba5dcbd9bbf5187ca30c8644b /Software/Visual_Studio/Web/Tango.Portal
parent017a25bec7cbfa3a7d7f058ac2555948f4962a8c (diff)
downloadTango-4b737c824ee1b1a347ea63aabe3273f2c16f3ac3.tar.gz
Tango-4b737c824ee1b1a347ea63aabe3273f2c16f3ac3.zip
Published Portal.
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.Portal')
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Controllers/AccountController.cs44
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Controllers/HomeController.cs15
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Models/Statistics.cs14
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Properties/PublishProfiles/machineservice-gateway-twine-portal - Web Deploy.pubxml30
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Properties/ServiceDependencies/machineservice-gateway-twine-portal - Web Deploy/profile.arm.json113
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Tango.Portal.csproj9
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Utils/StatisticsUtils.cs70
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/ViewModels/IndexVM.cs18
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Views/Home/Docs.cshtml4
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Views/Home/Index.cshtml8
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Views/Home/Utilities.cshtml4
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/Views/Shared/NavigationPartial.cshtml2
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.pngbin0 -> 120295 bytes
-rw-r--r--Software/Visual_Studio/Web/Tango.Portal/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.pngbin0 -> 132465 bytes
14 files changed, 269 insertions, 62 deletions
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Controllers/AccountController.cs b/Software/Visual_Studio/Web/Tango.Portal/Controllers/AccountController.cs
deleted file mode 100644
index 5475966d8..000000000
--- a/Software/Visual_Studio/Web/Tango.Portal/Controllers/AccountController.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Web;
-using System.Web.Mvc;
-using Microsoft.Owin.Security.Cookies;
-using Microsoft.Owin.Security.OpenIdConnect;
-using Microsoft.Owin.Security;
-
-namespace Tango.Portal.Controllers
-{
- public class AccountController : Controller
- {
- public void SignIn()
- {
- // Send an OpenID Connect sign-in request.
- if (!Request.IsAuthenticated)
- {
- HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" },
- OpenIdConnectAuthenticationDefaults.AuthenticationType);
- }
- }
-
- public void SignOut()
- {
- string callbackUrl = Url.Action("SignOutCallback", "Account", routeValues: null, protocol: Request.Url.Scheme);
-
- HttpContext.GetOwinContext().Authentication.SignOut(
- new AuthenticationProperties { RedirectUri = callbackUrl },
- OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);
- }
-
- public ActionResult SignOutCallback()
- {
- if (Request.IsAuthenticated)
- {
- // Redirect to home page if the user is authenticated.
- return RedirectToAction("Index", "Home");
- }
-
- return View();
- }
- }
-}
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Controllers/HomeController.cs b/Software/Visual_Studio/Web/Tango.Portal/Controllers/HomeController.cs
index 58625d768..b913ec6d8 100644
--- a/Software/Visual_Studio/Web/Tango.Portal/Controllers/HomeController.cs
+++ b/Software/Visual_Studio/Web/Tango.Portal/Controllers/HomeController.cs
@@ -48,7 +48,9 @@ namespace Tango.Portal.Controllers
public ActionResult Index()
{
- return View(new ViewModel(SessionUser));
+ var vm = new IndexVM(SessionUser);
+ vm.Stats = StatisticsUtils.Default.GetStats();
+ return View(vm);
}
public ActionResult Product(String key, PortalEnvironment environment = PortalEnvironment.Production)
@@ -242,10 +244,12 @@ namespace Tango.Portal.Controllers
public void SignInMicrosoft()
{
+ string callbackUrl = Url.Action("Index", "Home", routeValues: null, protocol: Request.Url.Scheme);
+
// Send an OpenID Connect sign-in request.
if (!Request.IsAuthenticated)
{
- HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" },
+ HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = callbackUrl },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
@@ -254,16 +258,11 @@ namespace Tango.Portal.Controllers
{
SessionUser = null;
- string callbackUrl = Url.Action("SignOutCallback", "Home", routeValues: null, protocol: Request.Url.Scheme);
+ string callbackUrl = Url.Action("Index", "Home", routeValues: null, protocol: Request.Url.Scheme);
HttpContext.GetOwinContext().Authentication.SignOut(
new AuthenticationProperties { RedirectUri = callbackUrl },
OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);
}
-
- public ActionResult SignOutCallback()
- {
- return RedirectToAction("Index", "Home");
- }
}
} \ No newline at end of file
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Models/Statistics.cs b/Software/Visual_Studio/Web/Tango.Portal/Models/Statistics.cs
new file mode 100644
index 000000000..54e2de9e1
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.Portal/Models/Statistics.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+
+namespace Tango.Portal.Models
+{
+ public class Statistics
+ {
+ public int TotalDyedThread { get; set; }
+ public int JobsCompleted { get; set; }
+ public int SoftwareUpgrades { get; set; }
+ }
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Properties/PublishProfiles/machineservice-gateway-twine-portal - Web Deploy.pubxml b/Software/Visual_Studio/Web/Tango.Portal/Properties/PublishProfiles/machineservice-gateway-twine-portal - Web Deploy.pubxml
new file mode 100644
index 000000000..d85b1631b
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.Portal/Properties/PublishProfiles/machineservice-gateway-twine-portal - Web Deploy.pubxml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This file is used by the publish/package process of your Web project. You can customize the behavior of this process
+by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+ <PropertyGroup>
+ <WebPublishMethod>MSDeploy</WebPublishMethod>
+ <ResourceId>/subscriptions/10c8aa60-3b15-4e0d-b412-6aeef90e5e91/resourceGroups/Tango/providers/Microsoft.Web/sites/machineservice-gateway/slots/twine-portal</ResourceId>
+ <ResourceGroup>Tango</ResourceGroup>
+ <RuntimeIdentifier />
+ <PublishProvider>AzureWebSite</PublishProvider>
+ <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+ <LastUsedPlatform>Any CPU</LastUsedPlatform>
+ <SiteUrlToLaunchAfterPublish>http://machineservice-gateway-twine-portal.azurewebsites.net</SiteUrlToLaunchAfterPublish>
+ <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
+ <ExcludeApp_Data>False</ExcludeApp_Data>
+ <MSDeployServiceURL>machineservice-gateway-twine-portal.scm.azurewebsites.net:443</MSDeployServiceURL>
+ <DeployIisAppPath>machineservice-gateway__twine-portal</DeployIisAppPath>
+ <RemoteSitePhysicalPath />
+ <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
+ <InstallAspNetCoreSiteExtension>False</InstallAspNetCoreSiteExtension>
+ <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
+ <EnableMSDeployBackup>True</EnableMSDeployBackup>
+ <EnableMsDeployAppOffline>false</EnableMsDeployAppOffline>
+ <UserName>$machineservice-gateway__twine-portal</UserName>
+ <_SavePWD>True</_SavePWD>
+ <_DestinationType>AzureWebSite</_DestinationType>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Properties/ServiceDependencies/machineservice-gateway-twine-portal - Web Deploy/profile.arm.json b/Software/Visual_Studio/Web/Tango.Portal/Properties/ServiceDependencies/machineservice-gateway-twine-portal - Web Deploy/profile.arm.json
new file mode 100644
index 000000000..a4b7a71c2
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.Portal/Properties/ServiceDependencies/machineservice-gateway-twine-portal - Web Deploy/profile.arm.json
@@ -0,0 +1,113 @@
+{
+ "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "metadata": {
+ "_dependencyType": "compute.appService.windows"
+ },
+ "parameters": {
+ "resourceGroupName": {
+ "type": "string",
+ "defaultValue": "Tango",
+ "metadata": {
+ "description": "Name of the resource group for the resource. It is recommended to put resources under same resource group for better tracking."
+ }
+ },
+ "resourceGroupLocation": {
+ "type": "string",
+ "defaultValue": "westeurope",
+ "metadata": {
+ "description": "Location of the resource group. Resource groups could have different location than resources, however by default we use API versions from latest hybrid profile which support all locations for resource types we support."
+ }
+ },
+ "resourceName": {
+ "type": "string",
+ "defaultValue": "twine-portal",
+ "metadata": {
+ "description": "Name of the main resource to be created by this template."
+ }
+ },
+ "resourceLocation": {
+ "type": "string",
+ "defaultValue": "[parameters('resourceGroupLocation')]",
+ "metadata": {
+ "description": "Location of the resource. By default use resource group's location, unless the resource provider is not supported there."
+ }
+ }
+ },
+ "variables": {
+ "appServicePlan_name": "[concat('Plan', uniqueString(concat(parameters('resourceName'), subscription().subscriptionId)))]",
+ "appServicePlan_ResourceId": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', parameters('resourceGroupName'), '/providers/Microsoft.Web/serverFarms/', variables('appServicePlan_name'))]"
+ },
+ "resources": [
+ {
+ "type": "Microsoft.Resources/resourceGroups",
+ "name": "[parameters('resourceGroupName')]",
+ "location": "[parameters('resourceGroupLocation')]",
+ "apiVersion": "2019-10-01"
+ },
+ {
+ "type": "Microsoft.Resources/deployments",
+ "name": "[concat(parameters('resourceGroupName'), 'Deployment', uniqueString(concat(parameters('resourceName'), subscription().subscriptionId)))]",
+ "resourceGroup": "[parameters('resourceGroupName')]",
+ "apiVersion": "2019-10-01",
+ "dependsOn": [
+ "[parameters('resourceGroupName')]"
+ ],
+ "properties": {
+ "mode": "Incremental",
+ "template": {
+ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "resources": [
+ {
+ "location": "[parameters('resourceLocation')]",
+ "name": "[parameters('resourceName')]",
+ "type": "Microsoft.Web/sites",
+ "apiVersion": "2015-08-01",
+ "tags": {
+ "[concat('hidden-related:', variables('appServicePlan_ResourceId'))]": "empty"
+ },
+ "dependsOn": [
+ "[variables('appServicePlan_ResourceId')]"
+ ],
+ "kind": "app",
+ "properties": {
+ "name": "[parameters('resourceName')]",
+ "kind": "app",
+ "httpsOnly": true,
+ "reserved": false,
+ "serverFarmId": "[variables('appServicePlan_ResourceId')]",
+ "siteConfig": {
+ "metadata": [
+ {
+ "name": "CURRENT_STACK",
+ "value": "dotnetcore"
+ }
+ ]
+ }
+ },
+ "identity": {
+ "type": "SystemAssigned"
+ }
+ },
+ {
+ "location": "[parameters('resourceLocation')]",
+ "name": "[variables('appServicePlan_name')]",
+ "type": "Microsoft.Web/serverFarms",
+ "apiVersion": "2015-08-01",
+ "sku": {
+ "name": "S1",
+ "tier": "Standard",
+ "family": "S",
+ "size": "S1"
+ },
+ "properties": {
+ "name": "[variables('appServicePlan_name')]"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Tango.Portal.csproj b/Software/Visual_Studio/Web/Tango.Portal/Tango.Portal.csproj
index 4190ca4ee..75cc549e6 100644
--- a/Software/Visual_Studio/Web/Tango.Portal/Tango.Portal.csproj
+++ b/Software/Visual_Studio/Web/Tango.Portal/Tango.Portal.csproj
@@ -175,7 +175,6 @@
<Compile Include="App_Start\FilterConfig.cs" />
<Compile Include="App_Start\RouteConfig.cs" />
<Compile Include="App_Start\Startup.Auth.cs" />
- <Compile Include="Controllers\AccountController.cs" />
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Enumerations\PortalEnvironment.cs" />
<Compile Include="Global.asax.cs">
@@ -185,14 +184,17 @@
<Compile Include="Models\DownloadItem.cs" />
<Compile Include="Models\Product.cs" />
<Compile Include="Models\SessionUser.cs" />
+ <Compile Include="Models\Statistics.cs" />
<Compile Include="PortalConfig.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Startup.cs" />
<Compile Include="Utils\DbUtils.cs" />
+ <Compile Include="Utils\StatisticsUtils.cs" />
<Compile Include="Utils\StorageUtils.cs" />
<Compile Include="ViewModel.cs" />
<Compile Include="ViewModels\DocsVM.cs" />
<Compile Include="ViewModels\FirmwareVM.cs" />
+ <Compile Include="ViewModels\IndexVM.cs" />
<Compile Include="ViewModels\ProductVM.cs" />
<Compile Include="ViewModels\UtilitiesVM.cs" />
</ItemGroup>
@@ -204,7 +206,9 @@
<Content Include="assets\img\g170405755ee26b6bf8566808825c39878f72e2802b0f9acf47185e0417c72269ffa1289f9d26edef8eb01e1e8b6c2ed9_640.png" />
<Content Include="assets\img\g39abdf579324cb157de65665c1d064d25a4a290c88ce3d1b7959d57d635614ada9f79cacc80e0c84a9604e89c81336dbbfd785d52cbd5b90d6c967a8504bdae9_640.png" />
<Content Include="assets\img\g568338dc609136bb4b5d4fa017c3ccb8a8ce2d06ca35943c65cd81015102ecba830f629c1357636ffe54c2a2579f4590e342f8949f07ae37eb914c372f25d223_640.png" />
+ <Content Include="assets\img\g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png" />
<Content Include="assets\img\gb5f2cfb8f205a3b59bafaa501600ddbfa38905254815140a3d2047ed4baf7a66aee7796a4a2a8fbc52fac3738f0d5d0d02f2b91dce5fbe0552ec85c7578639b1_640.png" />
+ <Content Include="assets\img\gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png" />
<Content Include="assets\img\logos\twine_logo_colored.png" />
<Content Include="assets\img\pngtree-firmware-development-png-image_13135343.png" />
<Content Include="assets\img\products\product1.png" />
@@ -228,6 +232,7 @@
<Content Include="Content\Site.css" />
<Content Include="Scripts\bootstrap.js" />
<Content Include="Scripts\bootstrap.min.js" />
+ <None Include="Properties\PublishProfiles\machineservice-gateway-twine-portal - Web Deploy.pubxml" />
<None Include="Scripts\jquery-3.3.1.intellisense.js" />
<Content Include="Scripts\jquery-3.3.1.js" />
<Content Include="Scripts\jquery-3.3.1.min.js" />
@@ -250,8 +255,6 @@
<Content Include="Views\_ViewStart.cshtml" />
<Content Include="Views\Shared\Error.cshtml" />
<Content Include="Views\Shared\_Layout.cshtml" />
- <Content Include="Views\Home\About.cshtml" />
- <Content Include="Views\Home\Contact.cshtml" />
<Content Include="Views\Home\Index.cshtml" />
<Content Include="Views\Shared\_LoginPartial.cshtml" />
<Content Include="Views\Account\SignOutCallback.cshtml" />
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Utils/StatisticsUtils.cs b/Software/Visual_Studio/Web/Tango.Portal/Utils/StatisticsUtils.cs
new file mode 100644
index 000000000..9cf83b717
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.Portal/Utils/StatisticsUtils.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Tango.BL.Entities;
+using Tango.Portal.Models;
+
+namespace Tango.Portal.Utils
+{
+ public class StatisticsUtils
+ {
+ private static readonly Lazy<StatisticsUtils> _default = new Lazy<StatisticsUtils>(() => new StatisticsUtils());
+ public static StatisticsUtils Default => _default.Value;
+
+ private Statistics _stats;
+ private DateTime _fetchDate { get; set; }
+
+ public Statistics GetStats()
+ {
+ if (_stats == null || DateTime.Now > _fetchDate.AddDays(7))
+ {
+ _fetchDate = DateTime.Now;
+ _stats = new Statistics();
+
+ try
+ {
+ using (var db = DbUtils.CreateContext(Enumerations.PortalEnvironment.Test))
+ {
+ var jobRuns = db.JobRuns.Select(x => new { x.ActualStartPosition, x.ActualEndPosition, x.EndPosition, x.Status })
+ .ToList()
+ .Select(x => new JobRun()
+ {
+ ActualStartPosition = x.ActualStartPosition,
+ ActualEndPosition = x.ActualEndPosition,
+ EndPosition = x.EndPosition,
+ Status = x.Status
+ })
+ .ToList();
+
+ int[] arr = (new List<BL.Enumerations.TangoUpdateStatuses>()
+ {
+ BL.Enumerations.TangoUpdateStatuses.DatabaseCompleted,
+ BL.Enumerations.TangoUpdateStatuses.OfflineFirmwareUpgradeCompleted,
+ BL.Enumerations.TangoUpdateStatuses.OfflineUpdateCompleted,
+ BL.Enumerations.TangoUpdateStatuses.SetupCompleted,
+ BL.Enumerations.TangoUpdateStatuses.UpdateCompleted
+ }).Cast<int>().ToArray();
+
+ var upgrades = db.TangoUpdates.Where(x => arr.Contains(x.Status)).Count();
+
+ _stats.TotalDyedThread = (int)jobRuns.Sum(x => x.Distance) / 1000;
+ _stats.JobsCompleted = jobRuns.Count;
+ _stats.SoftwareUpgrades = upgrades;
+ }
+ }
+ catch (Exception)
+ {
+
+ }
+ }
+
+ return _stats;
+ }
+
+ private StatisticsUtils()
+ {
+ _stats = new Statistics();
+ }
+ }
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/Web/Tango.Portal/ViewModels/IndexVM.cs b/Software/Visual_Studio/Web/Tango.Portal/ViewModels/IndexVM.cs
new file mode 100644
index 000000000..81fb5cfc4
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.Portal/ViewModels/IndexVM.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Tango.Portal.Models;
+
+namespace Tango.Portal.ViewModels
+{
+ public class IndexVM : ViewModel
+ {
+ public Statistics Stats { get; set; }
+
+ public IndexVM(SessionUser user) : base(user)
+ {
+ Stats = new Statistics();
+ }
+ }
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Docs.cshtml b/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Docs.cshtml
index 213856cb1..86e2d91df 100644
--- a/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Docs.cshtml
+++ b/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Docs.cshtml
@@ -16,7 +16,9 @@
<p class="lead fs-4 fw-lighter">Explore official guides, technical manuals, and support documents to get the most from your Twine system.</p>
</div>
</div>
- <div class="col d-none d-lg-flex"><img alt="portfolio, folder, arrow, down, download, record, documentation, icon, portfolio, portfolio, portfolio, portfolio, portfolio, documentation" src="/assets/img/g170405755ee26b6bf8566808825c39878f72e2802b0f9acf47185e0417c72269ffa1289f9d26edef8eb01e1e8b6c2ed9_640.png" style="border-radius: 20px;transform: perspective(0px);" width="301" height="440"></div>
+ <div class="col d-none d-lg-flex">
+ <img alt="documents, folder, office, text, file, blue, blue office, blue document, folder, folder, folder, office, file, file, file, file, file" src="/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png" style="border-radius: 20px;transform: perspective(0px);" width="301" height="268" />
+ </div>
</div>
</div>
</header>
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Index.cshtml b/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Index.cshtml
index 02a4ed1d8..1d9a48886 100644
--- a/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Index.cshtml
+++ b/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Index.cshtml
@@ -1,4 +1,4 @@
-@model Tango.Portal.ViewModel
+@model Tango.Portal.ViewModels.IndexVM
<!DOCTYPE html>
<html data-bs-theme="dark" lang="en">
@@ -165,7 +165,7 @@
</div>
<div>
<h5 class="fw-bold mb-0"><strong>Thread&nbsp;</strong>Dyed</h5>
- <p class="text-muted mb-0">100,000 meters</p>
+ <p class="text-muted mb-0">@Model.Stats.TotalDyedThread.ToString("N0") kilometers</p>
</div>
</div>
</div>
@@ -182,7 +182,7 @@
</div>
<div>
<h5 class="fw-bold mb-0">Jobs Completed</h5>
- <p class="text-muted mb-0">5,000 Jobs</p>
+ <p class="text-muted mb-0">@Model.Stats.JobsCompleted.ToString("N0") Jobs</p>
</div>
</div>
</div>
@@ -200,7 +200,7 @@
</div>
<div>
<h5 class="fw-bold mb-0">Software Upgrades</h5>
- <p class="text-muted mb-0">1,000 Successful Upgrades&nbsp;</p>
+ <p class="text-muted mb-0">@Model.Stats.SoftwareUpgrades.ToString("N0") Upgrades&nbsp;</p>
</div>
</div>
</div>
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Utilities.cshtml b/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Utilities.cshtml
index 498bbc5c7..c5193d878 100644
--- a/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Utilities.cshtml
+++ b/Software/Visual_Studio/Web/Tango.Portal/Views/Home/Utilities.cshtml
@@ -16,7 +16,9 @@
<p class="lead fs-4 fw-lighter">Helpful tools and resources to support your system setup and maintenance.</p>
</div>
</div>
- <div class="col d-none d-lg-flex"><img alt="database, backup, update, management, reset to default, database, database, database, backup, backup, backup, backup, backup, update" src="/assets/img/gb5f2cfb8f205a3b59bafaa501600ddbfa38905254815140a3d2047ed4baf7a66aee7796a4a2a8fbc52fac3738f0d5d0d02f2b91dce5fbe0552ec85c7578639b1_640.png" style="border-radius: 20px;transform: perspective(0px);" width="336" height="329"></div>
+ <div class="col d-none d-lg-flex">
+ <img alt="cogwheel, gear, gearwheel, cog, options, settings, machine, tools, preferences, gear, gear, gear, gear, gear, cog, settings, settings, settings, machine, machine, tools, tools, tools" src="/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png" style="border-radius: 20px;transform: perspective(0px);" width="304" height="329" />
+ </div>
</div>
</div>
</header>
diff --git a/Software/Visual_Studio/Web/Tango.Portal/Views/Shared/NavigationPartial.cshtml b/Software/Visual_Studio/Web/Tango.Portal/Views/Shared/NavigationPartial.cshtml
index 999687969..d90438c7d 100644
--- a/Software/Visual_Studio/Web/Tango.Portal/Views/Shared/NavigationPartial.cshtml
+++ b/Software/Visual_Studio/Web/Tango.Portal/Views/Shared/NavigationPartial.cshtml
@@ -5,7 +5,7 @@
<a class="navbar-brand d-flex align-items-center" href="/index"><img src="/assets/img/logos/twine_logo_colored.png" width="283" height="79"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navcol-3"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-3">
<ul class="navbar-nav mb-4 mb-lg-0 mx-auto">
- <li class="nav-item"><a class="nav-link" href="/index.html">Products</a></li>
+ <li class="nav-item"><a class="nav-link" href="/index.html">Home</a></li>
<li class="nav-item"><a class="nav-link" href="/firmware.html">Firmware Upgrades</a></li>
<li class="nav-item"><a class="nav-link" href="/utilities.html">Utilities</a></li>
<li class="nav-item"><a class="nav-link" href="/docs.html">Docs</a></li>
diff --git a/Software/Visual_Studio/Web/Tango.Portal/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png b/Software/Visual_Studio/Web/Tango.Portal/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png
new file mode 100644
index 000000000..ed18c4c62
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.Portal/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png
Binary files differ
diff --git a/Software/Visual_Studio/Web/Tango.Portal/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png b/Software/Visual_Studio/Web/Tango.Portal/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png
new file mode 100644
index 000000000..6279d1807
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.Portal/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png
Binary files differ