Compare commits
39 Commits
b19ecf3610
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 21d50e7c20 | |||
| f723661696 | |||
| c795c129e5 | |||
| 30071469bc | |||
| c9a2583f26 | |||
| 0e5b63c557 | |||
| 6388e003d3 | |||
| c5da5dda98 | |||
| 21cddb22c7 | |||
| 3b036308c8 | |||
| 4f6d986dc9 | |||
| 254066c989 | |||
| ce14dd50cb | |||
| dfc767320a | |||
| 5cc088ea6b | |||
| 6797d1e4fd | |||
| c4fc88f7d2 | |||
| 9929d82768 | |||
| 0ded77ce8b | |||
| 8e73d630d5 | |||
| 079f5b1085 | |||
| 97fa90357b | |||
| bf6c4764ed | |||
| ed911a13ba | |||
| c99de55fe1 | |||
| 8b16cbd79f | |||
| cad5ab790a | |||
| f8020549fe | |||
| 66ed19a1ac | |||
| 051b866c6d | |||
| 3d80adbfff | |||
| b7b98d4338 | |||
| ced272d3e3 | |||
| 35b26e673e | |||
| cca569ae81 | |||
| fa36d82285 | |||
| b0c9470bb7 | |||
| 9868df162d | |||
| 6db8ab21f4 |
BIN
.claude/mcp/Azure.Core.dll
Normal file
BIN
.claude/mcp/Azure.Core.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Azure.Identity.dll
Normal file
BIN
.claude/mcp/Azure.Identity.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/CutList.Core.dll
Normal file
BIN
.claude/mcp/CutList.Core.dll
Normal file
Binary file not shown.
1399
.claude/mcp/CutList.Mcp.deps.json
Normal file
1399
.claude/mcp/CutList.Mcp.deps.json
Normal file
File diff suppressed because it is too large
Load Diff
BIN
.claude/mcp/CutList.Mcp.dll
Normal file
BIN
.claude/mcp/CutList.Mcp.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/CutList.Mcp.exe
Normal file
BIN
.claude/mcp/CutList.Mcp.exe
Normal file
Binary file not shown.
20
.claude/mcp/CutList.Mcp.runtimeconfig.json
Normal file
20
.claude/mcp/CutList.Mcp.runtimeconfig.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net8.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "8.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "8.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
|
||||
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
.claude/mcp/CutList.Web.dll
Normal file
BIN
.claude/mcp/CutList.Web.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/CutList.Web.exe
Normal file
BIN
.claude/mcp/CutList.Web.exe
Normal file
Binary file not shown.
21
.claude/mcp/CutList.Web.runtimeconfig.json
Normal file
21
.claude/mcp/CutList.Web.runtimeconfig.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net8.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "8.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "8.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.GC.Server": true,
|
||||
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
|
||||
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
.claude/mcp/Microsoft.Bcl.AsyncInterfaces.dll
Normal file
BIN
.claude/mcp/Microsoft.Bcl.AsyncInterfaces.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Data.SqlClient.dll
Normal file
BIN
.claude/mcp/Microsoft.Data.SqlClient.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.EntityFrameworkCore.Abstractions.dll
Normal file
BIN
.claude/mcp/Microsoft.EntityFrameworkCore.Abstractions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.EntityFrameworkCore.Relational.dll
Normal file
BIN
.claude/mcp/Microsoft.EntityFrameworkCore.Relational.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.EntityFrameworkCore.SqlServer.dll
Normal file
BIN
.claude/mcp/Microsoft.EntityFrameworkCore.SqlServer.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.EntityFrameworkCore.dll
Normal file
BIN
.claude/mcp/Microsoft.EntityFrameworkCore.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.AI.Abstractions.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.AI.Abstractions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Caching.Memory.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Caching.Memory.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Configuration.Abstractions.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Configuration.Abstractions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Configuration.Binder.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Configuration.Binder.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Configuration.CommandLine.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Configuration.CommandLine.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Configuration.Json.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Configuration.Json.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Configuration.UserSecrets.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Configuration.UserSecrets.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Configuration.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Configuration.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.DependencyInjection.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.DependencyInjection.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Diagnostics.Abstractions.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Diagnostics.Abstractions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Diagnostics.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Diagnostics.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.FileProviders.Abstractions.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.FileProviders.Abstractions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.FileProviders.Physical.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.FileProviders.Physical.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.FileSystemGlobbing.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.FileSystemGlobbing.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Hosting.Abstractions.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Hosting.Abstractions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Hosting.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Hosting.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Logging.Abstractions.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Logging.Abstractions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Logging.Configuration.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Logging.Configuration.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Logging.Console.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Logging.Console.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Logging.Debug.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Logging.Debug.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Logging.EventLog.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Logging.EventLog.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Logging.EventSource.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Logging.EventSource.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Logging.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Logging.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Options.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Options.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Extensions.Primitives.dll
Normal file
BIN
.claude/mcp/Microsoft.Extensions.Primitives.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Identity.Client.Extensions.Msal.dll
Normal file
BIN
.claude/mcp/Microsoft.Identity.Client.Extensions.Msal.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Identity.Client.dll
Normal file
BIN
.claude/mcp/Microsoft.Identity.Client.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.IdentityModel.Abstractions.dll
Normal file
BIN
.claude/mcp/Microsoft.IdentityModel.Abstractions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.IdentityModel.JsonWebTokens.dll
Normal file
BIN
.claude/mcp/Microsoft.IdentityModel.JsonWebTokens.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.IdentityModel.Logging.dll
Normal file
BIN
.claude/mcp/Microsoft.IdentityModel.Logging.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
Normal file
BIN
.claude/mcp/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.IdentityModel.Protocols.dll
Normal file
BIN
.claude/mcp/Microsoft.IdentityModel.Protocols.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.IdentityModel.Tokens.dll
Normal file
BIN
.claude/mcp/Microsoft.IdentityModel.Tokens.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.SqlServer.Server.dll
Normal file
BIN
.claude/mcp/Microsoft.SqlServer.Server.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/Microsoft.Win32.SystemEvents.dll
Normal file
BIN
.claude/mcp/Microsoft.Win32.SystemEvents.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/ModelContextProtocol.Core.dll
Normal file
BIN
.claude/mcp/ModelContextProtocol.Core.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/ModelContextProtocol.dll
Normal file
BIN
.claude/mcp/ModelContextProtocol.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.ClientModel.dll
Normal file
BIN
.claude/mcp/System.ClientModel.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Configuration.ConfigurationManager.dll
Normal file
BIN
.claude/mcp/System.Configuration.ConfigurationManager.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Diagnostics.DiagnosticSource.dll
Normal file
BIN
.claude/mcp/System.Diagnostics.DiagnosticSource.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Diagnostics.EventLog.dll
Normal file
BIN
.claude/mcp/System.Diagnostics.EventLog.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Drawing.Common.dll
Normal file
BIN
.claude/mcp/System.Drawing.Common.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.IO.Pipelines.dll
Normal file
BIN
.claude/mcp/System.IO.Pipelines.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.IdentityModel.Tokens.Jwt.dll
Normal file
BIN
.claude/mcp/System.IdentityModel.Tokens.Jwt.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Memory.Data.dll
Normal file
BIN
.claude/mcp/System.Memory.Data.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Net.ServerSentEvents.dll
Normal file
BIN
.claude/mcp/System.Net.ServerSentEvents.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Runtime.Caching.dll
Normal file
BIN
.claude/mcp/System.Runtime.Caching.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Security.Cryptography.ProtectedData.dll
Normal file
BIN
.claude/mcp/System.Security.Cryptography.ProtectedData.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Security.Permissions.dll
Normal file
BIN
.claude/mcp/System.Security.Permissions.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Text.Encodings.Web.dll
Normal file
BIN
.claude/mcp/System.Text.Encodings.Web.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Text.Json.dll
Normal file
BIN
.claude/mcp/System.Text.Json.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/System.Windows.Extensions.dll
Normal file
BIN
.claude/mcp/System.Windows.Extensions.dll
Normal file
Binary file not shown.
8
.claude/mcp/appsettings.Development.json
Normal file
8
.claude/mcp/appsettings.Development.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
13
.claude/mcp/appsettings.json
Normal file
13
.claude/mcp/appsettings.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"Microsoft.EntityFrameworkCore.Database.Command": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=CutListDb;Trusted_Connection=True;MultipleActiveResultSets=true"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
BIN
.claude/mcp/runtimes/unix/lib/net6.0/System.Drawing.Common.dll
Normal file
BIN
.claude/mcp/runtimes/unix/lib/net6.0/System.Drawing.Common.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.claude/mcp/runtimes/win/lib/net6.0/Microsoft.Data.SqlClient.dll
Normal file
BIN
.claude/mcp/runtimes/win/lib/net6.0/Microsoft.Data.SqlClient.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
.claude/mcp/runtimes/win/lib/net6.0/System.Drawing.Common.dll
Normal file
BIN
.claude/mcp/runtimes/win/lib/net6.0/System.Drawing.Common.dll
Normal file
Binary file not shown.
BIN
.claude/mcp/runtimes/win/lib/net6.0/System.Runtime.Caching.dll
Normal file
BIN
.claude/mcp/runtimes/win/lib/net6.0/System.Runtime.Caching.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
28
.claude/settings.local.json
Normal file
28
.claude/settings.local.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Skill(roslyn-bridge)",
|
||||
"Bash(dotnet build:*)",
|
||||
"SlashCommand(/rb)",
|
||||
"mcp__roslyn-bridge__get_projects",
|
||||
"Bash(dotnet tool install:*)",
|
||||
"Bash(dotnet ilspy:*)",
|
||||
"Bash(dotnet add package:*)",
|
||||
"Bash(git -C /c/Users/AJ/Desktop/Projects/CutList add CutList.Core/BinComparer.cs CutList.Core/BinItem.cs CutList.Core/MultiBin.cs CutList/Tool.cs)",
|
||||
"Bash(git -C /c/Users/AJ/Desktop/Projects/CutList commit --amend --no-edit)",
|
||||
"mcp__roslyn-bridge__get_code_smells",
|
||||
"mcp__roslyn-bridge__get_duplicates",
|
||||
"mcp__roslyn-bridge__get_code_smell_summary",
|
||||
"mcp__cutlist__create_cutlist",
|
||||
"Bash(dotnet run:*)",
|
||||
"mcp__roslyn-bridge__get_files",
|
||||
"mcp__roslyn-bridge__refresh_workspace",
|
||||
"mcp__roslyn-bridge__get_diagnostics",
|
||||
"Bash(dotnet ef database update:*)",
|
||||
"mcp__roslyn-bridge__search_symbol",
|
||||
"Bash(dotnet ef migrations add:*)"
|
||||
],
|
||||
"deny": [],
|
||||
"ask": []
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,16 @@ namespace CutList.Core
|
||||
|
||||
public bool OpenFileAfterSave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The cutting method/tool used (e.g., "Miter Saw", "Table Saw").
|
||||
/// </summary>
|
||||
public string? CutMethod { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The material shape (e.g., "Round Tube", "Square Tube", "Flat Bar").
|
||||
/// </summary>
|
||||
public string? MaterialShape { get; set; }
|
||||
|
||||
public BinFileSaver(IEnumerable<Bin> bins)
|
||||
{
|
||||
_bins = bins ?? throw new ArgumentNullException(nameof(bins));
|
||||
@@ -74,10 +84,24 @@ namespace CutList.Core
|
||||
var totalItems = _bins.Sum(b => b.Items.Count);
|
||||
|
||||
writer.WriteLine("CUT LIST");
|
||||
writer.WriteLine($"Date: {DateTime.Now:g}");
|
||||
writer.WriteLine($"Total stock bars needed: {totalBars}");
|
||||
writer.WriteLine($"Total pieces to cut: {totalItems}");
|
||||
WriteSeparator(writer, '=');
|
||||
writer.WriteLine();
|
||||
WriteAlignedLine(writer, "Date", DateTime.Now.ToString("g"));
|
||||
|
||||
if (!string.IsNullOrEmpty(CutMethod))
|
||||
WriteAlignedLine(writer, "Cut Method", CutMethod);
|
||||
|
||||
if (!string.IsNullOrEmpty(MaterialShape))
|
||||
WriteAlignedLine(writer, "Material", MaterialShape);
|
||||
|
||||
WriteAlignedLine(writer, "Stock Bars Needed", totalBars.ToString());
|
||||
WriteAlignedLine(writer, "Total Pieces", totalItems.ToString());
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private static void WriteAlignedLine(TextWriter writer, string label, string value, int labelWidth = 20)
|
||||
{
|
||||
writer.WriteLine($" {label.PadRight(labelWidth)} {value}");
|
||||
}
|
||||
|
||||
private void WriteBinSummary(TextWriter writer, Bin bin, int id)
|
||||
@@ -85,8 +109,9 @@ namespace CutList.Core
|
||||
var stockLength = FormatHelper.ConvertToMixedFraction(bin.Length);
|
||||
var dropLength = FormatHelper.ConvertToMixedFraction(bin.RemainingLength);
|
||||
|
||||
writer.WriteLine(new string('─', 50));
|
||||
writer.WriteLine($"BAR #{id} - Start with {stockLength}\" stock");
|
||||
WriteSeparator(writer);
|
||||
|
||||
writer.WriteLine($"BAR #{id} - Length: {stockLength}\"");
|
||||
writer.WriteLine();
|
||||
writer.WriteLine(" Cut these pieces:");
|
||||
|
||||
@@ -97,6 +122,11 @@ namespace CutList.Core
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
private static void WriteSeparator(TextWriter writer, char c = '─', int length = 50)
|
||||
{
|
||||
writer.WriteLine(new string(c, length));
|
||||
}
|
||||
|
||||
private void WriteBinItems(TextWriter writer, Bin bin)
|
||||
{
|
||||
var groups = bin.Items
|
||||
@@ -128,14 +158,14 @@ namespace CutList.Core
|
||||
|
||||
string fmt(double v) => FormatHelper.ConvertToMixedFraction(v);
|
||||
|
||||
writer.WriteLine(new string('═', 50));
|
||||
WriteSeparator(writer, '=');
|
||||
writer.WriteLine("SUMMARY");
|
||||
writer.WriteLine($" Stock bars needed: {totalBars}");
|
||||
writer.WriteLine($" Total pieces to cut: {totalItems}");
|
||||
writer.WriteLine($" Total material used: {fmt(totalStock)}\"");
|
||||
writer.WriteLine($" Total drop/waste: {fmt(totalDrop)}\"");
|
||||
writer.WriteLine(new string('═', 50));
|
||||
writer.WriteLine();
|
||||
WriteAlignedLine(writer, "Stock Bars Needed", totalBars.ToString());
|
||||
WriteAlignedLine(writer, "Total Pieces", totalItems.ToString());
|
||||
WriteAlignedLine(writer, "Total Material Used", $"{fmt(totalStock)}\"");
|
||||
WriteAlignedLine(writer, "Total Drop/Waste", $"{fmt(totalDrop)}\"");
|
||||
WriteSeparator(writer, '=');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,17 @@ namespace CutList.Core.Formatting
|
||||
var match2 = regex.Match(input);
|
||||
|
||||
if (!match2.Success)
|
||||
{
|
||||
// If no unit symbols, try to parse as plain inches (e.g., "0.5" or "1/2" converted to "0.5")
|
||||
if (!input.Contains("'") && !input.Contains("\""))
|
||||
{
|
||||
if (double.TryParse(input.Trim(), out var plainInches))
|
||||
{
|
||||
return Math.Round(plainInches, 8);
|
||||
}
|
||||
}
|
||||
throw new Exception("Input is not in a valid format.");
|
||||
}
|
||||
|
||||
var feet = match2.Groups["Feet"];
|
||||
var inches = match2.Groups["Inches"];
|
||||
|
||||
@@ -39,6 +39,12 @@ namespace CutList.Core.Formatting
|
||||
return wholeNumber.ToString();
|
||||
}
|
||||
|
||||
// If whole number is 0, just show the fraction
|
||||
if (wholeNumber == 0)
|
||||
{
|
||||
return $"{numerator}/{denominator}";
|
||||
}
|
||||
|
||||
return $"{wholeNumber}-{numerator}/{denominator}";
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CutList.Core\CutList.Core.csproj" />
|
||||
<ProjectReference Include="..\CutList.Web\CutList.Web.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
1102
CutList.Mcp/InventoryTools.cs
Normal file
1102
CutList.Mcp/InventoryTools.cs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,15 @@
|
||||
using CutList.Web.Data;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using ModelContextProtocol.Server;
|
||||
|
||||
var builder = Host.CreateApplicationBuilder(args);
|
||||
|
||||
// Add DbContext for inventory tools
|
||||
builder.Services.AddDbContext<ApplicationDbContext>(options =>
|
||||
options.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=CutListDb;Trusted_Connection=True;MultipleActiveResultSets=true"));
|
||||
|
||||
builder.Services
|
||||
.AddMcpServer()
|
||||
.WithStdioServerTransport()
|
||||
|
||||
35
CutList.Web/Components/App.razor
Normal file
35
CutList.Web/Components/App.razor
Normal file
@@ -0,0 +1,35 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<base href="/" />
|
||||
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="css/app.css" />
|
||||
<link rel="stylesheet" href="css/report.css" />
|
||||
<link rel="stylesheet" href="CutList.Web.styles.css" />
|
||||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
<HeadOutlet @rendermode="InteractiveServer" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<Routes @rendermode="InteractiveServer" />
|
||||
<script src="_framework/blazor.web.js"></script>
|
||||
<script>
|
||||
function printWithTitle(title) {
|
||||
const originalTitle = document.title;
|
||||
document.title = title;
|
||||
|
||||
const restoreTitle = () => {
|
||||
document.title = originalTitle;
|
||||
window.removeEventListener('afterprint', restoreTitle);
|
||||
};
|
||||
|
||||
window.addEventListener('afterprint', restoreTitle);
|
||||
window.print();
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
13
CutList.Web/Components/Layout/MainLayout.razor
Normal file
13
CutList.Web/Components/Layout/MainLayout.razor
Normal file
@@ -0,0 +1,13 @@
|
||||
@inherits LayoutComponentBase
|
||||
|
||||
<div class="page">
|
||||
<div class="sidebar">
|
||||
<NavMenu />
|
||||
</div>
|
||||
|
||||
<main>
|
||||
<article class="content px-4">
|
||||
@Body
|
||||
</article>
|
||||
</main>
|
||||
</div>
|
||||
42
CutList.Web/Components/Layout/NavMenu.razor
Normal file
42
CutList.Web/Components/Layout/NavMenu.razor
Normal file
@@ -0,0 +1,42 @@
|
||||
<div class="top-row ps-3 navbar navbar-dark">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="">CutList</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="checkbox" title="Navigation menu" class="navbar-toggler" />
|
||||
|
||||
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
|
||||
<nav class="flex-column">
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
|
||||
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="jobs">
|
||||
<span class="bi bi-list-check-nav-menu" aria-hidden="true"></span> Jobs
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="materials">
|
||||
<span class="bi bi-box-nav-menu" aria-hidden="true"></span> Materials
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="stock">
|
||||
<span class="bi bi-boxes-nav-menu" aria-hidden="true"></span> Stock Items
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="suppliers">
|
||||
<span class="bi bi-building-nav-menu" aria-hidden="true"></span> Suppliers
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="tools">
|
||||
<span class="bi bi-tools-nav-menu" aria-hidden="true"></span> Cutting Tools
|
||||
</NavLink>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
115
CutList.Web/Components/Layout/NavMenu.razor.css
Normal file
115
CutList.Web/Components/Layout/NavMenu.razor.css
Normal file
@@ -0,0 +1,115 @@
|
||||
.navbar-toggler {
|
||||
appearance: none;
|
||||
cursor: pointer;
|
||||
width: 3.5rem;
|
||||
height: 2.5rem;
|
||||
color: white;
|
||||
position: absolute;
|
||||
top: 0.5rem;
|
||||
right: 1rem;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.navbar-toggler:checked {
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
.top-row {
|
||||
height: 3.5rem;
|
||||
background-color: rgba(0,0,0,0.4);
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.bi {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
margin-right: 0.75rem;
|
||||
top: -1px;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.bi-house-door-fill-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.bi-list-check-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-check' viewBox='0 0 16 16'%3E%3Cpath 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-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zM3.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 0zm0 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 0zm0 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 0z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.bi-box-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-box' viewBox='0 0 16 16'%3E%3Cpath d='M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5 8 5.961 14.154 3.5 8.186 1.113zM15 4.239l-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.bi-boxes-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-boxes' viewBox='0 0 16 16'%3E%3Cpath d='M7.752.066a.5.5 0 0 1 .496 0l3.75 2.143a.5.5 0 0 1 .252.434v3.995l3.498 2A.5.5 0 0 1 16 9.07v4.286a.5.5 0 0 1-.252.434l-3.75 2.143a.5.5 0 0 1-.496 0l-3.502-2-3.502 2.001a.5.5 0 0 1-.496 0l-3.75-2.143A.5.5 0 0 1 0 13.357V9.071a.5.5 0 0 1 .252-.434L3.75 6.638V2.643a.5.5 0 0 1 .252-.434zM4.25 7.504 1.508 9.071l2.742 1.567 2.742-1.567zM7.5 9.933l-2.75 1.571v3.134l2.75-1.571zm1 3.134 2.75 1.571v-3.134L8.5 9.933zm.508-3.996 2.742 1.567 2.742-1.567-2.742-1.567zm2.242-2.433V3.504L8.5 5.076V8.21zM7.5 8.21V5.076L4.75 3.504v3.134zM5.258 2.643 8 4.21l2.742-1.567L8 1.076zM15 9.933l-2.75 1.571v3.134L15 13.067zM3.75 14.638v-3.134L1 9.933v3.134z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.bi-building-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-building' viewBox='0 0 16 16'%3E%3Cpath d='M4 2.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3 0a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1ZM4 5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM7.5 5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1ZM4.5 8a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Zm2.5.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1Zm3.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1Z'/%3E%3Cpath d='M2 1a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V1Zm11 0H3v14h3v-2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5V15h3V1Z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.bi-tools-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-tools' viewBox='0 0 16 16'%3E%3Cpath d='M1 0 0 1l2.2 3.081a1 1 0 0 0 .815.419h.07a1 1 0 0 1 .708.293l2.675 2.675-2.617 2.654A3.003 3.003 0 0 0 0 13a3 3 0 1 0 5.878-.851l2.654-2.617.968.968-.305.914a1 1 0 0 0 .242 1.023l3.27 3.27a.997.997 0 0 0 1.414 0l1.586-1.586a.997.997 0 0 0 0-1.414l-3.27-3.27a1 1 0 0 0-1.023-.242l-.914.305-.968-.968 2.617-2.654A3.003 3.003 0 0 0 13 0a3 3 0 1 0-.851 5.878L9.495 8.53l-2.675-2.675a1 1 0 0 1-.293-.707v-.071a1 1 0 0 0-.419-.814L3.081 2.2 1 0ZM3 13a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm7.5-8.5a2 2 0 1 1 4 0 2 2 0 0 1-4 0Z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
font-size: 0.9rem;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.nav-item:first-of-type {
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.nav-item:last-of-type {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.nav-item ::deep .nav-link {
|
||||
color: #d7d7d7;
|
||||
background: none;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
height: 3rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
line-height: 3rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.nav-item ::deep a.active {
|
||||
background-color: rgba(255,255,255,0.37);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav-item ::deep .nav-link:hover {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav-scrollable {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar-toggler:checked ~ .nav-scrollable {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.navbar-toggler {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-scrollable {
|
||||
display: block;
|
||||
position: relative;
|
||||
overflow-y: auto;
|
||||
flex-grow: 1;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user