diff --git a/src/samples/ERPInventory.Library/ERPInventoryComponent.razor b/src/samples/ERPInventory.Library/ERPInventoryComponent.razor
index 81f9afd..7446325 100644
--- a/src/samples/ERPInventory.Library/ERPInventoryComponent.razor
+++ b/src/samples/ERPInventory.Library/ERPInventoryComponent.razor
@@ -22,22 +22,55 @@
}
else
{
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Inventory
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sales data for the last month
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Data updates every 3 seconds to simulate live inventory data
@@ -49,7 +82,7 @@
@code {
private bool isLoading = true;
private System.Timers.Timer? updateTimer;
- private IgbGrid? grid;
+ private IgbHierarchicalGrid? grid;
protected override async Task OnInitializedAsync()
{
diff --git a/src/samples/ERPInventory.Library/Models/DataPoint.cs b/src/samples/ERPInventory.Library/Models/DataPoint.cs
new file mode 100644
index 0000000..82dbd0a
--- /dev/null
+++ b/src/samples/ERPInventory.Library/Models/DataPoint.cs
@@ -0,0 +1,9 @@
+using System.Text.Json.Serialization;
+
+namespace ERPInventory.Library.Models;
+
+public class DataPoint
+{
+ [JsonPropertyName("unitsSold")]
+ public int UnitsSold { get; set; }
+}
diff --git a/src/samples/ERPInventory.Library/Models/DeliveryDetails.cs b/src/samples/ERPInventory.Library/Models/DeliveryDetails.cs
new file mode 100644
index 0000000..ab716bf
--- /dev/null
+++ b/src/samples/ERPInventory.Library/Models/DeliveryDetails.cs
@@ -0,0 +1,15 @@
+using System.Text.Json.Serialization;
+
+namespace ERPInventory.Library.Models;
+
+public class DeliveryDetails
+{
+ [JsonPropertyName("dateOrdered")]
+ public string? DateOrdered { get; set; }
+
+ [JsonPropertyName("dateShipped")]
+ public string? DateShipped { get; set; }
+
+ [JsonPropertyName("dateDelivered")]
+ public string? DateDelivered { get; set; }
+}
diff --git a/src/samples/ERPInventory.Library/Models/InventoryData.cs b/src/samples/ERPInventory.Library/Models/InventoryData.cs
index 00805dc..4d385b9 100644
--- a/src/samples/ERPInventory.Library/Models/InventoryData.cs
+++ b/src/samples/ERPInventory.Library/Models/InventoryData.cs
@@ -4,36 +4,36 @@ namespace ERPInventory.Library.Models;
public class InventoryData
{
- [JsonPropertyName("id")]
- public string? Id { get; set; }
-
+ [JsonPropertyName("sku")]
+ public string? Sku { get; set; }
+
+ [JsonPropertyName("imageUrl")]
+ public string? ImageUrl { get; set; }
+
[JsonPropertyName("productName")]
public string? ProductName { get; set; }
-
+
[JsonPropertyName("category")]
public string? Category { get; set; }
-
- [JsonPropertyName("sku")]
- public string? Sku { get; set; }
-
- [JsonPropertyName("quantity")]
- public int Quantity { get; set; }
-
- [JsonPropertyName("unitPrice")]
- public double UnitPrice { get; set; }
-
- [JsonPropertyName("totalValue")]
- public double TotalValue { get; set; }
-
- [JsonPropertyName("supplier")]
- public string? Supplier { get; set; }
-
- [JsonPropertyName("warehouse")]
- public string? Warehouse { get; set; }
-
- [JsonPropertyName("status")]
- public string? Status { get; set; }
-
- [JsonPropertyName("lastUpdated")]
- public DateTime LastUpdated { get; set; }
+
+ [JsonPropertyName("rating")]
+ public double Rating { get; set; }
+
+ [JsonPropertyName("unitsSold")]
+ public int UnitsSold { get; set; }
+
+ [JsonPropertyName("grossPrice")]
+ public double GrossPrice { get; set; }
+
+ [JsonPropertyName("netPrice")]
+ public double NetPrice { get; set; }
+
+ [JsonPropertyName("totalNetProfit")]
+ public double TotalNetProfit { get; set; }
+
+ [JsonPropertyName("salesTrendData")]
+ public List SalesTrendData { get; set; } = new();
+
+ [JsonPropertyName("orders")]
+ public List Orders { get; set; } = new();
}
diff --git a/src/samples/ERPInventory.Library/Models/Order.cs b/src/samples/ERPInventory.Library/Models/Order.cs
new file mode 100644
index 0000000..23da2e6
--- /dev/null
+++ b/src/samples/ERPInventory.Library/Models/Order.cs
@@ -0,0 +1,18 @@
+using System.Text.Json.Serialization;
+
+namespace ERPInventory.Library.Models;
+
+public class Order
+{
+ [JsonPropertyName("orderId")]
+ public int OrderId { get; set; }
+
+ [JsonPropertyName("status")]
+ public string? Status { get; set; }
+
+ [JsonPropertyName("delivery")]
+ public DeliveryDetails Delivery { get; set; } = new();
+
+ [JsonPropertyName("orderInformation")]
+ public OrderDetails OrderInformation { get; set; } = new();
+}
diff --git a/src/samples/ERPInventory.Library/Models/OrderDetails.cs b/src/samples/ERPInventory.Library/Models/OrderDetails.cs
new file mode 100644
index 0000000..e560245
--- /dev/null
+++ b/src/samples/ERPInventory.Library/Models/OrderDetails.cs
@@ -0,0 +1,21 @@
+using System.Text.Json.Serialization;
+
+namespace ERPInventory.Library.Models;
+
+public class OrderDetails
+{
+ [JsonPropertyName("country")]
+ public string? Country { get; set; }
+
+ [JsonPropertyName("city")]
+ public string? City { get; set; }
+
+ [JsonPropertyName("zipCode")]
+ public int ZipCode { get; set; }
+
+ [JsonPropertyName("streetName")]
+ public string? StreetName { get; set; }
+
+ [JsonPropertyName("streetNumber")]
+ public string? StreetNumber { get; set; }
+}
diff --git a/src/samples/ERPInventory.Library/Models/OrderStatus.cs b/src/samples/ERPInventory.Library/Models/OrderStatus.cs
new file mode 100644
index 0000000..acddd39
--- /dev/null
+++ b/src/samples/ERPInventory.Library/Models/OrderStatus.cs
@@ -0,0 +1,9 @@
+namespace ERPInventory.Library.Models;
+
+public static class OrderStatus
+{
+ public const string Packed = "Packed";
+ public const string InTransit = "In Transit";
+ public const string Customs = "Customs";
+ public const string Delivered = "Delivered";
+}
diff --git a/src/samples/ERPInventory.Library/Services/InventoryService.cs b/src/samples/ERPInventory.Library/Services/InventoryService.cs
index f58d43b..5d1c9fc 100644
--- a/src/samples/ERPInventory.Library/Services/InventoryService.cs
+++ b/src/samples/ERPInventory.Library/Services/InventoryService.cs
@@ -27,11 +27,18 @@ public async Task LoadDataAsync()
{
var jsonText = await _httpClient.GetStringAsync(DataUrl);
Data = JsonSerializer.Deserialize>(jsonText, options) ?? new();
-
+
// Calculate derived fields
foreach (var record in Data)
{
- record.TotalValue = Math.Round(record.Quantity * record.UnitPrice, 2);
+ // Set unitsSold from last month's sales data
+ if (record.SalesTrendData.Count > 0)
+ {
+ record.UnitsSold = record.SalesTrendData[^1].UnitsSold;
+ }
+
+ // Calculate totalNetProfit
+ record.TotalNetProfit = Math.Round(record.UnitsSold * record.NetPrice, 2);
}
OnDataChanged?.Invoke();
@@ -46,7 +53,7 @@ public void UpdateAllData()
{
foreach (var dataRow in Data)
{
- // Simulate live data updates - randomly adjust quantity
+ // Simulate live data updates - randomly adjust units sold
var volatility = 0.05;
var rnd = Math.Round(Random.Shared.NextDouble(), 2);
var changePercent = 2 * volatility * rnd;
@@ -55,12 +62,11 @@ public void UpdateAllData()
changePercent -= 2 * volatility;
}
- var changeAmount = dataRow.Quantity * changePercent;
- var newQuantity = dataRow.Quantity + (int)Math.Round(changeAmount);
- dataRow.Quantity = Math.Max(0, newQuantity);
-
- dataRow.TotalValue = Math.Round(dataRow.Quantity * dataRow.UnitPrice, 2);
- dataRow.LastUpdated = DateTime.Now;
+ var changeAmount = dataRow.UnitsSold * changePercent;
+ var newUnitsSold = dataRow.UnitsSold + (int)Math.Round(changeAmount);
+ dataRow.UnitsSold = Math.Max(0, newUnitsSold);
+
+ dataRow.TotalNetProfit = Math.Round(dataRow.UnitsSold * dataRow.NetPrice, 2);
}
OnDataChanged?.Invoke();