diff options
Diffstat (limited to 'Software/Visual_Studio/Web')
28 files changed, 594 insertions, 67 deletions
diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/404.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/404.html index 12add999b..014de5bfa 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/404.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/404.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Page Not Found - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/favicon.png b/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/favicon.png Binary files differnew file mode 100644 index 000000000..cd18a8beb --- /dev/null +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/favicon.png diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png b/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png Binary files differnew file mode 100644 index 000000000..74a30c597 --- /dev/null +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png b/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png Binary files differnew file mode 100644 index 000000000..2fefca25a --- /dev/null +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/docs.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/docs.html index 99aa74597..131432f0d 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/docs.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/docs.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Home - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> @@ -48,7 +49,7 @@ document.addEventListener('DOMContentLoaded', function() { <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/Bootstrap Studio/Build/firmware.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/firmware.html index 6642bd064..d888b6175 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/firmware.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/firmware.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Home - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/forgotten-password.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/forgotten-password.html index 678df7240..f5fe6093e 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/forgotten-password.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/forgotten-password.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Forgotten Password - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/index.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/index.html index 0c0cc0892..582ba0a34 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/index.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/index.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Home - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> @@ -240,7 +241,7 @@ document.addEventListener('DOMContentLoaded', function() { <div class="card bg-gradient-dark" style="background: linear-gradient(-78deg, #313ea3 0%, #050310 14%, #050310 37%, #1a102a 100%);border-style: none;box-shadow: 0px 0px 13px 2px rgb(0,0,0);"> <div class="card-body" style="height: 499px;"><img class="img-fluid img-machine" width="899" height="624" src="/assets/img/products/ts-1800.png" style="margin: 0px;padding: 31px;"> <h3 class="text-uppercase fw-bold heading" style="margin-top: 14px;">TS-1800</h3> - <p>Robust control software powering the original TS-1800—reliable, efficient, and production-proven dyeing performance.</p><a class="btn btn-light" role="button" href="/product.html">Download</a> + <p>Robust control software powering the original TS-1800—reliable, efficient, and production-proven dyeing performance.</p><a class="btn btn-light" role="button" href="/product?key=ts1800">Download</a> </div> </div> </div> @@ -248,7 +249,7 @@ document.addEventListener('DOMContentLoaded', function() { <div class="card bg-gradient-dark" style="background: linear-gradient(-122deg, #050310 74%, var(--bs-indigo));border-style: none;box-shadow: 0px 0px 13px 2px rgb(0,0,0);"> <div class="card-body" style="height: 499px;"><img class="img-fluid img-machine" width="478" height="411" src="/assets/img/products/x4.png"> <h3 class="text-uppercase fw-bold heading" style="margin-top: -22px;">Twine X4</h3> - <p>High-throughput controller for four-spool machines—maximize productivity with synchronized multi-thread dyeing.</p><a class="btn btn-light" role="button" href="/product.html">Download</a> + <p>High-throughput controller for four-spool machines—maximize productivity with synchronized multi-thread dyeing.</p><a class="btn btn-light" role="button" href="/product?key=x4">Download</a> </div> </div> </div> @@ -256,7 +257,7 @@ document.addEventListener('DOMContentLoaded', function() { <div class="card bg-gradient-dark" style="background: linear-gradient(165deg, #313ea3 0%, #050310 14%, #050310 37%, #1a102a 100%);border-style: none;box-shadow: 0px 0px 13px 2px rgb(0,0,0);"> <div class="card-body" style="height: 499px;"><img class="img-fluid img-machine" width="478" height="271" src="/assets/img/products/x1.png" style="backdrop-filter: opacity(0) blur(0px) hue-rotate(0deg) saturate(0%) sepia(0%);-webkit-backdrop-filter: opacity(0) blur(0px) hue-rotate(0deg) saturate(0%) sepia(0%);padding: 16px;"> <h3 class="text-uppercase fw-bold heading" style="margin-top: 45px;">Twine X1</h3> - <p>Next-gen application delivering fast, intelligent control of advanced single-spool thread dyeing operations.</p><a class="btn btn-light" role="button" href="/product.html">Download</a> + <p>Next-gen application delivering fast, intelligent control of advanced single-spool thread dyeing operations.</p><a class="btn btn-light" role="button" href="/product?key=x1">Download</a> </div> </div> </div> diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/logged-in.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/logged-in.html new file mode 100644 index 000000000..f268c1d05 --- /dev/null +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/logged-in.html @@ -0,0 +1,311 @@ +<!DOCTYPE html> +<html data-bs-theme="dark" lang="en"> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> + <title>Home - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> + <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> + <link rel="stylesheet" href="/assets/css/bss-overrides.css"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css"> + <link rel="stylesheet" href="/assets/css/template.css"> +<script> +document.addEventListener('DOMContentLoaded', function() { + $('a[href$=".html"]').each(function () { + var href = $(this).attr('href'); + + // Only modify relative paths (not external URLs) + if (!href.startsWith("http") && href.endsWith(".html")) { + var newHref = href.replace(/\.html$/, ''); + $(this).attr('href', newHref); + } + }); +}); +</script> +</head> + +<body class="bg-gradient-body"> + <nav class="navbar navbar-expand-lg py-3" data-bs-theme="dark"> + <div class="container"><a class="navbar-brand d-flex align-items-center" href="#"><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="/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> + </ul><a class="btn bg-white bg-opacity-10 bg-gradient me-2" role="button" data-bss-hover-animate="pulse" href="/login.html" id="btn-login">Login</a> + </div> + </div> + </nav> + <header class="pt-5"></header> + <section> + <div class="container py-4 py-lg-5"> + <div class="row row-cols-1 row-cols-sm-1 row-cols-md-1 row-cols-lg-1 row-cols-xl-1 row-cols-xxl-1"> + <div class="col-md-8 col-xl-6 text-start" style="width: auto;"> + <div style="margin-left: 21px;"> + <h1 class="fw-bold mb-3 heading" id="title" style="font-size: 54px;">Official Twine Downloads & Support Portal</h1> + <p>Find everything you need to install, operate, and optimize your Twine systems—all in one place.</p> + </div> + </div> + </div> + </div> + </section> + <section> + <div class="container py-5"> + <div class="row"> + <div class="col col-xl-11 mx-auto"> + <div class="row gy-3 mb-4 mb-lg-5 mx-auto"> + <div class="col-12 col-md-6 col-lg-7"><img class="rounded img-fluid aspect-ratio-4x3 object-fit-cover shadow w-100 img-shadow" width="512" height="512" src="/assets/img/products/product6.png" style="filter: brightness(97%) hue-rotate(0deg) invert(0%) saturate(100%) sepia(0%);backdrop-filter: hue-rotate(0deg);-webkit-backdrop-filter: hue-rotate(0deg);transform: perspective(0px);"></div> + <div class="col offset-sm-0 d-flex align-items-md-center"> + <div class="ps-lg-5"> + <h3 class="text-uppercase fw-bold heading">Twine Studio</h3> + <p class="text-muted mb-4">Powerful end-user tool for remote diagnostics, machine insights and statistics. intuitive, secure, and fast.</p><a class="btn btn-primary shadow" role="button" href="/product?key=twine-studio">Download</a> + </div> + </div> + </div> + <div class="row gy-3 mx-auto" style="margin-bottom: 72px;"> + <div class="col-12 col-md-6 col-lg-7 order-md-last"><img class="rounded img-fluid aspect-ratio-4x3 object-fit-cover shadow w-100 img-shadow" width="512" height="512" src="/assets/img/products/product1.png" style="filter: brightness(69%) hue-rotate(0deg);"></div> + <div class="col d-flex align-items-md-center"> + <div class="pe-lg-4"> + <h3 class="text-uppercase fw-bold heading">FSE</h3> + <p class="text-muted mb-4">Comprehensive tool for Field Service Engineers to diagnose, control, and upgrade machines locally or remotely.</p><a class="btn btn-primary shadow" role="button" href="/product?key=fse">Download</a> + </div> + </div> + </div> + <div class="row gy-3 mb-4 mb-lg-5 mx-auto"> + <div class="col-12 col-md-6 col-lg-7"><img class="rounded img-fluid aspect-ratio-4x3 object-fit-cover shadow w-100" width="512" height="512" src="/assets/img/products/product3.png" style="filter: brightness(74%);"></div> + <div class="col d-flex align-items-md-center"> + <div class="ps-lg-5"> + <h3 class="text-uppercase fw-bold heading">Machine Studio</h3> + <p class="text-muted mb-4">Advanced platform for researchers and engineers to design, analyze, and control thread dyeing machines in detail.</p><a class="btn btn-primary shadow" role="button" href="/product?key=ms">Download</a> + </div> + </div> + </div> + </div> + </div> + </div> + </section> + <section> + <div class="container py-4"> + <div class="row mb-4"> + <div class="col-md-8 col-xl-6 text-center mx-auto"> + <h3 class="text-uppercase fw-bold heading">Power Your Twine Experience</h3> + </div> + </div> + <div class="row"> + <div class="col col-xl-11 mx-auto"> + <div class="row gy-4 row-cols-1 row-cols-md-2 mx-auto"> + <div> + <div class="card bg-white bg-opacity-10 bg-gradient"> + <div class="card-body text-center text-lg-start d-flex flex-column align-items-center gap-3 flex-lg-row p-4"> + <div> + <div class="bs-icon-xl bs-icon-circle bg-white bg-opacity-10 bs-icon"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-wifi"> + <path d="M15.384 6.115a.485.485 0 0 0-.047-.736A12.444 12.444 0 0 0 8 3C5.259 3 2.723 3.882.663 5.379a.485.485 0 0 0-.048.736.518.518 0 0 0 .668.05A11.448 11.448 0 0 1 8 4c2.507 0 4.827.802 6.716 2.164.205.148.49.13.668-.049z"></path> + <path d="M13.229 8.271a.482.482 0 0 0-.063-.745A9.455 9.455 0 0 0 8 6c-1.905 0-3.68.56-5.166 1.526a.48.48 0 0 0-.063.745.525.525 0 0 0 .652.065A8.46 8.46 0 0 1 8 7a8.46 8.46 0 0 1 4.576 1.336c.206.132.48.108.653-.065zm-2.183 2.183c.226-.226.185-.605-.1-.75A6.473 6.473 0 0 0 8 9c-1.06 0-2.062.254-2.946.704-.285.145-.326.524-.1.75l.015.015c.16.16.407.19.611.09A5.478 5.478 0 0 1 8 10c.868 0 1.69.201 2.42.56.203.1.45.07.61-.091zM9.06 12.44c.196-.196.198-.52-.04-.66A1.99 1.99 0 0 0 8 11.5a1.99 1.99 0 0 0-1.02.28c-.238.14-.236.464-.04.66l.706.706a.5.5 0 0 0 .707 0l.707-.707z"></path> + </svg></div> + </div> + <div> + <h5 class="fw-bold">Seamless Remote Connectivity</h5> + <p class="text-muted mb-0">Access, monitor, and control machines from anywhere with lightning-fast connections and secure real-time data sync.</p> + </div> + </div> + </div> + </div> + <div> + <div class="card bg-white bg-opacity-10 bg-gradient"> + <div class="card-body text-center text-lg-start d-flex flex-column align-items-center gap-3 flex-lg-row p-4"> + <div> + <div class="bs-icon-xl bs-icon-circle bg-white bg-opacity-10 bs-icon"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-person-workspace"> + <path d="M4 16s-1 0-1-1 1-4 5-4 5 3 5 4-1 1-1 1zm4-5.95a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5"></path> + <path d="M2 1a2 2 0 0 0-2 2v9.5A1.5 1.5 0 0 0 1.5 14h.653a5.373 5.373 0 0 1 1.066-2H1V3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v9h-2.219c.554.654.89 1.373 1.066 2h.653a1.5 1.5 0 0 0 1.5-1.5V3a2 2 0 0 0-2-2z"></path> + </svg></div> + </div> + <div> + <h5 class="fw-bold">Intelligent Diagnostics Engine</h5> + <p class="text-muted mb-0">Pinpoint issues instantly with smart analytics, live telemetry, and guided troubleshooting for optimal machine performance.</p> + </div> + </div> + </div> + </div> + <div> + <div class="card bg-white bg-opacity-10 bg-gradient"> + <div class="card-body text-center text-lg-start d-flex flex-column align-items-center gap-3 flex-lg-row p-4"> + <div> + <div class="bs-icon-xl bs-icon-circle bg-white bg-opacity-10 bs-icon"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-rocket-takeoff"> + <path d="M9.752 6.193c.599.6 1.73.437 2.528-.362.798-.799.96-1.932.362-2.531-.599-.6-1.73-.438-2.528.361-.798.8-.96 1.933-.362 2.532"></path> + <path d="M15.811 3.312c-.363 1.534-1.334 3.626-3.64 6.218l-.24 2.408a2.56 2.56 0 0 1-.732 1.526L8.817 15.85a.51.51 0 0 1-.867-.434l.27-1.899c.04-.28-.013-.593-.131-.956a9.42 9.42 0 0 0-.249-.657l-.082-.202c-.815-.197-1.578-.662-2.191-1.277-.614-.615-1.079-1.379-1.275-2.195l-.203-.083a9.556 9.556 0 0 0-.655-.248c-.363-.119-.675-.172-.955-.132l-1.896.27A.51.51 0 0 1 .15 7.17l2.382-2.386c.41-.41.947-.67 1.524-.734h.006l2.4-.238C9.005 1.55 11.087.582 12.623.208c.89-.217 1.59-.232 2.08-.188.244.023.435.06.57.093.067.017.12.033.16.045.184.06.279.13.351.295l.029.073a3.475 3.475 0 0 1 .157.721c.055.485.051 1.178-.159 2.065Zm-4.828 7.475.04-.04-.107 1.081a1.536 1.536 0 0 1-.44.913l-1.298 1.3.054-.38c.072-.506-.034-.993-.172-1.418a8.548 8.548 0 0 0-.164-.45c.738-.065 1.462-.38 2.087-1.006ZM5.205 5c-.625.626-.94 1.351-1.004 2.09a8.497 8.497 0 0 0-.45-.164c-.424-.138-.91-.244-1.416-.172l-.38.054 1.3-1.3c.245-.246.566-.401.91-.44l1.08-.107-.04.039Zm9.406-3.961c-.38-.034-.967-.027-1.746.163-1.558.38-3.917 1.496-6.937 4.521-.62.62-.799 1.34-.687 2.051.107.676.483 1.362 1.048 1.928.564.565 1.25.941 1.924 1.049.71.112 1.429-.067 2.048-.688 3.079-3.083 4.192-5.444 4.556-6.987.183-.771.18-1.345.138-1.713a2.835 2.835 0 0 0-.045-.283 3.078 3.078 0 0 0-.3-.041Z"></path> + <path d="M7.009 12.139a7.632 7.632 0 0 1-1.804-1.352A7.568 7.568 0 0 1 3.794 8.86c-1.102.992-1.965 5.054-1.839 5.18.125.126 3.936-.896 5.054-1.902Z"></path> + </svg></div> + </div> + <div> + <h5 class="fw-bold">Effortless Version Management</h5> + <p class="text-muted mb-0">Upgrade firmware, databases, and applications with just a few clicks—reliable, consistent, and traceable.</p> + </div> + </div> + </div> + </div> + <div> + <div class="card bg-white bg-opacity-10 bg-gradient"> + <div class="card-body text-center text-lg-start d-flex flex-column align-items-center gap-3 flex-lg-row p-4"> + <div> + <div class="bs-icon-xl bs-icon-circle bg-white bg-opacity-10 bs-icon"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-pie-chart"> + <path d="M7.5 1.018a7 7 0 0 0-4.79 11.566L7.5 7.793V1.018zm1 0V7.5h6.482A7.001 7.001 0 0 0 8.5 1.018zM14.982 8.5H8.207l-4.79 4.79A7 7 0 0 0 14.982 8.5M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8"></path> + </svg></div> + </div> + <div> + <h5 class="fw-bold">System Insights & Statistics</h5> + <p class="text-muted mb-0">Gain full visibility across the entire ecosystem with interactive dashboards, logs, and real-time health indicators.</p> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </section> + <section> + <div class="container py-4 py-lg-5"> + <div class="row"> + <div class="col-md-8 col-xl-6 text-center mx-auto"> + <h3 class="text-uppercase fw-bold mb-3 heading">Stats</h3> + </div> + </div> + <div class="row"> + <div class="col col-xl-11 mx-auto"> + <div class="row gx-4 gy-4 row-cols-1 row-cols-md-2 row-cols-lg-3 mx-auto"> + <div class="col col-sm-5"> + <div class="card bg-transparent border-0"> + <div class="card-body d-flex justify-content-center align-items-center justify-content-md-start p-0"> + <div class="me-3"> + <div class="bs-icon-lg bs-icon-circle bg-white bg-opacity-10 bs-icon"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-sort-numeric-down-alt"> + <path fill-rule="evenodd" d="M11.36 7.098c-1.137 0-1.708-.657-1.762-1.278h1.004c.058.223.343.45.773.45.824 0 1.164-.829 1.133-1.856h-.059c-.148.39-.57.742-1.261.742-.91 0-1.72-.613-1.72-1.758 0-1.148.848-1.836 1.973-1.836 1.09 0 2.063.637 2.063 2.688 0 1.867-.723 2.848-2.145 2.848zm.062-2.735c.504 0 .933-.336.933-.972 0-.633-.398-1.008-.94-1.008-.52 0-.927.375-.927 1 0 .64.418.98.934.98"></path> + <path d="M12.438 8.668V14H11.39V9.684h-.051l-1.211.859v-.969l1.262-.906h1.046zM4.5 2.5a.5.5 0 0 0-1 0v9.793l-1.146-1.147a.5.5 0 0 0-.708.708l2 1.999.007.007a.497.497 0 0 0 .7-.006l2-2a.5.5 0 0 0-.707-.708L4.5 12.293z"></path> + </svg></div> + </div> + <div> + <h5 class="fw-bold mb-0"><strong>Thread </strong>Dyed</h5> + <p class="text-muted mb-0">100,000 meters</p> + </div> + </div> + </div> + </div> + <div class="col-sm-7 offset-md-0"> + <div class="card bg-transparent border-0"> + <div class="card-body d-flex justify-content-center align-items-center justify-content-md-start p-0"> + <div class="me-3"> + <div class="bs-icon-lg bs-icon-circle bg-white bg-opacity-10 bs-icon"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-list-check"> + <path fill-rule="evenodd" d="M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5M3.854 2.146a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0l-.5-.5a.5.5 0 1 1 .708-.708L2 3.293l1.146-1.147a.5.5 0 0 1 .708 0m0 4a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0l-.5-.5a.5.5 0 1 1 .708-.708L2 7.293l1.146-1.147a.5.5 0 0 1 .708 0m0 4a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0l-.5-.5a.5.5 0 0 1 .708-.708l.146.147 1.146-1.147a.5.5 0 0 1 .708 0"></path> + </svg></div> + </div> + <div> + <h5 class="fw-bold mb-0">Jobs Completed</h5> + <p class="text-muted mb-0">5,000 Jobs</p> + </div> + </div> + </div> + </div> + <div class="offset-md-3 offset-lg-0 offset-xl-0 offset-xxl-0"> + <div class="card bg-transparent border-0"> + <div class="card-body d-flex justify-content-center align-items-center justify-content-md-start p-0"> + <div class="me-3"> + <div class="bs-icon-lg bs-icon-circle bg-white bg-opacity-10 bs-icon"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-shuffle"> + <path fill-rule="evenodd" d="M0 3.5A.5.5 0 0 1 .5 3H1c2.202 0 3.827 1.24 4.874 2.418.49.552.865 1.102 1.126 1.532.26-.43.636-.98 1.126-1.532C9.173 4.24 10.798 3 13 3v1c-1.798 0-3.173 1.01-4.126 2.082A9.624 9.624 0 0 0 7.556 8a9.624 9.624 0 0 0 1.317 1.918C9.828 10.99 11.204 12 13 12v1c-2.202 0-3.827-1.24-4.874-2.418A10.595 10.595 0 0 1 7 9.05c-.26.43-.636.98-1.126 1.532C4.827 11.76 3.202 13 1 13H.5a.5.5 0 0 1 0-1H1c1.798 0 3.173-1.01 4.126-2.082A9.624 9.624 0 0 0 6.444 8a9.624 9.624 0 0 0-1.317-1.918C4.172 5.01 2.796 4 1 4H.5a.5.5 0 0 1-.5-.5"></path> + <path d="M13 5.466V1.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384l-2.36 1.966a.25.25 0 0 1-.41-.192zm0 9v-3.932a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384l-2.36 1.966a.25.25 0 0 1-.41-.192z"></path> + </svg></div> + </div> + <div> + <h5 class="fw-bold mb-0">Software Upgrades</h5> + <p class="text-muted mb-0">1,000 Successful Upgrades </p> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </section> + <section style="margin-top: 57px;"> + <div class="container"> + <div class="row"> + <div class="col"> + <h3 class="text-uppercase fw-bold text-center mb-3 heading" style="padding-bottom: 24px;">Machine Application Interfaces</h3> + </div> + </div> + <div class="row gy-4 row-cols-3 row-cols-sm-1 row-cols-md-1 row-cols-lg-3 row-cols-xl-3 row-cols-xxl-3"> + <div class="col-12 col-md-12"> + <div class="card bg-gradient-dark" style="background: linear-gradient(-78deg, #313ea3 0%, #050310 14%, #050310 37%, #1a102a 100%);border-style: none;box-shadow: 0px 0px 13px 2px rgb(0,0,0);"> + <div class="card-body" style="height: 499px;"><img class="img-fluid img-machine" width="899" height="624" src="/assets/img/products/ts-1800.png" style="margin: 0px;padding: 31px;"> + <h3 class="text-uppercase fw-bold heading" style="margin-top: 14px;">TS-1800</h3> + <p>Robust control software powering the original TS-1800—reliable, efficient, and production-proven dyeing performance.</p><a class="btn btn-light" role="button" href="/product?key=ts1800">Download</a> + </div> + </div> + </div> + <div class="col-12 col-md-12"> + <div class="card bg-gradient-dark" style="background: linear-gradient(-122deg, #050310 74%, var(--bs-indigo));border-style: none;box-shadow: 0px 0px 13px 2px rgb(0,0,0);"> + <div class="card-body" style="height: 499px;"><img class="img-fluid img-machine" width="478" height="411" src="/assets/img/products/x4.png"> + <h3 class="text-uppercase fw-bold heading" style="margin-top: -22px;">Twine X4</h3> + <p>High-throughput controller for four-spool machines—maximize productivity with synchronized multi-thread dyeing.</p><a class="btn btn-light" role="button" href="/product?key=x4">Download</a> + </div> + </div> + </div> + <div class="col-12 col-md-12"> + <div class="card bg-gradient-dark" style="background: linear-gradient(165deg, #313ea3 0%, #050310 14%, #050310 37%, #1a102a 100%);border-style: none;box-shadow: 0px 0px 13px 2px rgb(0,0,0);"> + <div class="card-body" style="height: 499px;"><img class="img-fluid img-machine" width="478" height="271" src="/assets/img/products/x1.png" style="backdrop-filter: opacity(0) blur(0px) hue-rotate(0deg) saturate(0%) sepia(0%);-webkit-backdrop-filter: opacity(0) blur(0px) hue-rotate(0deg) saturate(0%) sepia(0%);padding: 16px;"> + <h3 class="text-uppercase fw-bold heading" style="margin-top: 45px;">Twine X1</h3> + <p>Next-gen application delivering fast, intelligent control of advanced single-spool thread dyeing operations.</p><a class="btn btn-light" role="button" href="/product?key=x1">Download</a> + </div> + </div> + </div> + </div> + </div> + </section> + <section class="py-4" style="margin-top: 75px;"> + <div class="container"> + <div class="row"> + <div class="col col-lg-10 mx-auto"> + <div class="card bg-gradient-dark" style="background: linear-gradient(#050310, #050310);"> + <div class="card-body"> + <div class="d-flex flex-column align-items-center py-3 py-lg-4"> + <div class="d-flex align-items-center mb-4"><img class="rounded-circle object-fit-cover border border-5 border-white border-opacity-25 flex-shrink-0 me-3" alt="book, read, reading, notebook, pages, open book, icon, book icon, read icon, education, knowledge, book, open book, open book, open book, open book, open book, book icon, book icon" width="75" height="75" src="/assets/img/g568338dc609136bb4b5d4fa017c3ccb8a8ce2d06ca35943c65cd81015102ecba830f629c1357636ffe54c2a2579f4590e342f8949f07ae37eb914c372f25d223_640.png"> + <div> + <p class="fs-5 fw-bold mb-0">Documentation & Manuals</p> + </div> + </div> + <p class="fs-4 text-center"><strong>Download official guides, technical manuals, and support documents to get the most from your Twine system.</strong></p><a class="btn btn-success shadow ms-2" role="button" href="/docs.html">Learn More</a> + </div> + </div> + </div> + </div> + </div> + </div> + </section> + <footer class="mt-5 py-5" style="background: rgba(14,14,14,0);"> + <div class="container d-flex flex-column justify-content-between align-items-center flex-lg-row"> + <div class="text-center text-lg-start mb-5 mb-lg-0"><a class="fs-4 fw-bold link-light" href="/"><span><a href="/"><strong><span style="color: RGBA(247, 248, 249, var(--bs-link-opacity, 1));">Twine Solutions</span></strong></a></span></a> + <p class="mt-1 mb-4" style="margin-right: 0px;">Twine Solutions offers the textile industry sustainable,<br>on-demand thread dyeing tech for yarn or twine with precision color matching technology</p><a class="btn btn-success border-0" role="button" href="https://twine-s.com">Visit Official Website</a> + </div> + <div class="text-center text-lg-end"> + <div class="mb-lg-2"><a class="link-light me-2" href="#"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-facebook fs-5"> + <path d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951"></path> + </svg></a><a class="link-light" href="#"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin fs-5 me-2"> + <path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path> + </svg></a><a class="link-light" href="#"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-twitter-x fs-5"> + <path d="M12.6.75h2.454l-5.36 6.142L16 15.25h-4.937l-3.867-5.07-4.425 5.07H.316l5.733-6.57L0 .75h5.063l3.495 4.633L12.601.75Zm-.86 13.028h1.36L4.323 2.145H2.865l8.875 11.633Z"></path> + </svg></a></div> + <ul class="nav d-flex justify-content-center mb-1"></ul> + <p class="text-muted mb-2">Copyright © Twine Solutions</p> + </div> + </div> + </footer> + <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script> + <script src="/assets/js/bs-init.js"></script> + <script src="/assets/js/product.js"></script> +</body> + +</html>
\ No newline at end of file diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/login-1.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/login-1.html index 43bbc6c31..539d6b4d5 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/login-1.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/login-1.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Login - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/login.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/login.html index c62c0dcb1..fb5da155b 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/login.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/login.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Login - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/product.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/product.html index 7c9ab810c..60b98c2d5 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/product.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/product.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Home - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> diff --git a/Software/Visual_Studio/Web/Bootstrap Studio/Build/utilities.html b/Software/Visual_Studio/Web/Bootstrap Studio/Build/utilities.html index dd637d164..398557416 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Build/utilities.html +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Build/utilities.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"> <title>Home - Twine Solutions</title> + <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.png"> <link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:200,300,400,500,600,700,800&display=swap"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Outfit:200,300,400,500,600,700,800,900&display=swap"> @@ -48,7 +49,7 @@ document.addEventListener('DOMContentLoaded', function() { <p class="lead fs-4 fw-lighter">Explore utilities designed for specific tasks</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/Bootstrap Studio/Twine Solutions.bsdesign b/Software/Visual_Studio/Web/Bootstrap Studio/Twine Solutions.bsdesign Binary files differindex 4791a43ac..927a974c3 100644 --- a/Software/Visual_Studio/Web/Bootstrap Studio/Twine Solutions.bsdesign +++ b/Software/Visual_Studio/Web/Bootstrap Studio/Twine Solutions.bsdesign 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 </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 </p> + <p class="text-muted mb-0">@Model.Stats.SoftwareUpgrades.ToString("N0") Upgrades </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 Binary files differnew file mode 100644 index 000000000..ed18c4c62 --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.Portal/assets/img/g65f952e1b2e0f109a3571a03f13f6724105af4a300162e6ed887109c32dff81b4d94d97a9ee7dbb180fdbd0d786dc101_640.png 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 Binary files differnew file mode 100644 index 000000000..6279d1807 --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.Portal/assets/img/gf5bb90117e2f7cbfd9b66ed78a2ba37c32a6a124c5f4f3246dfe63f7ee68e9d7d1fbca9b6f059cad6d603c065902cb83_640.png |
