diff --git a/Biskilog_Cloud.sln b/Biskilog_Cloud.sln
index 63b5b11..860b22f 100644
--- a/Biskilog_Cloud.sln
+++ b/Biskilog_Cloud.sln
@@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33530.505
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientManager", "ClientManager\ClientManager.csproj", "{AD0879FE-FBA8-4CD1-B95A-93E0277FD40F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerManager", "ServerManager\ServerManager.csproj", "{48786C44-14A8-4510-9DC2-167C431DDE95}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerManager", "ServerManager\ServerManager.csproj", "{7A6AAC33-5ED1-4CAD-AA67-E107245354B3}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Biskilog_Cloud.Shared", "Shared\Biskilog_Cloud.Shared.csproj", "{1D368EE7-D1D3-4D50-83ED-57B0EB9CC6F4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {AD0879FE-FBA8-4CD1-B95A-93E0277FD40F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AD0879FE-FBA8-4CD1-B95A-93E0277FD40F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AD0879FE-FBA8-4CD1-B95A-93E0277FD40F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AD0879FE-FBA8-4CD1-B95A-93E0277FD40F}.Release|Any CPU.Build.0 = Release|Any CPU
- {7A6AAC33-5ED1-4CAD-AA67-E107245354B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7A6AAC33-5ED1-4CAD-AA67-E107245354B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7A6AAC33-5ED1-4CAD-AA67-E107245354B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7A6AAC33-5ED1-4CAD-AA67-E107245354B3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {48786C44-14A8-4510-9DC2-167C431DDE95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {48786C44-14A8-4510-9DC2-167C431DDE95}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {48786C44-14A8-4510-9DC2-167C431DDE95}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {48786C44-14A8-4510-9DC2-167C431DDE95}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1D368EE7-D1D3-4D50-83ED-57B0EB9CC6F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1D368EE7-D1D3-4D50-83ED-57B0EB9CC6F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1D368EE7-D1D3-4D50-83ED-57B0EB9CC6F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1D368EE7-D1D3-4D50-83ED-57B0EB9CC6F4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/ClientManager/ClientManager.csproj b/ClientManager/ClientManager.csproj
deleted file mode 100644
index 2299ab1..0000000
--- a/ClientManager/ClientManager.csproj
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- net7.0
- enable
- enable
- dotnet-ClientManager-173f3572-8fd4-498f-addd-d620cda23800
-
-
-
-
-
-
diff --git a/ClientManager/Program.cs b/ClientManager/Program.cs
deleted file mode 100644
index e0525fe..0000000
--- a/ClientManager/Program.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using ClientManager;
-
-IHost host = Host.CreateDefaultBuilder(args)
- .ConfigureServices(services =>
- {
- services.AddHostedService();
- })
- .Build();
-
-host.Run();
diff --git a/ClientManager/Properties/launchSettings.json b/ClientManager/Properties/launchSettings.json
deleted file mode 100644
index 45d6b52..0000000
--- a/ClientManager/Properties/launchSettings.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "profiles": {
- "ClientManager": {
- "commandName": "Project",
- "dotnetRunMessages": true,
- "environmentVariables": {
- "DOTNET_ENVIRONMENT": "Development"
- }
- }
- }
-}
diff --git a/ClientManager/Worker.cs b/ClientManager/Worker.cs
deleted file mode 100644
index c26a964..0000000
--- a/ClientManager/Worker.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace ClientManager
-{
- public class Worker : BackgroundService
- {
- private readonly ILogger _logger;
-
- public Worker(ILogger logger)
- {
- _logger = logger;
- }
-
- protected override async Task ExecuteAsync(CancellationToken stoppingToken)
- {
- while (!stoppingToken.IsCancellationRequested)
- {
- _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
- await Task.Delay(1000, stoppingToken);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/ClientManager/appsettings.Development.json b/ClientManager/appsettings.Development.json
deleted file mode 100644
index b2dcdb6..0000000
--- a/ClientManager/appsettings.Development.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft.Hosting.Lifetime": "Information"
- }
- }
-}
diff --git a/ClientManager/appsettings.json b/ClientManager/appsettings.json
deleted file mode 100644
index b2dcdb6..0000000
--- a/ClientManager/appsettings.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft.Hosting.Lifetime": "Information"
- }
- }
-}
diff --git a/ServerManager/BiskPosContext.cs b/ServerManager/BiskPosContext.cs
new file mode 100644
index 0000000..8dcde20
--- /dev/null
+++ b/ServerManager/BiskPosContext.cs
@@ -0,0 +1,1175 @@
+using System;
+using System.Collections.Generic;
+using Biskilog_Cloud.Shared.Models;
+using Microsoft.EntityFrameworkCore;
+
+namespace ServerManager;
+
+public partial class BiskPosContext : DbContext
+{
+ public BiskPosContext()
+ {
+ }
+
+ public BiskPosContext(DbContextOptions options)
+ : base(options)
+ {
+ }
+
+ public virtual DbSet CreditPurchases { get; set; }
+
+ public virtual DbSet CustomerAccounts { get; set; }
+
+ public virtual DbSet ProductAltUnits { get; set; }
+
+ public virtual DbSet RestockLevels { get; set; }
+
+ public virtual DbSet SystemUserRoles { get; set; }
+
+ public virtual DbSet TbStocks { get; set; }
+
+ public virtual DbSet TblBranches { get; set; }
+
+ public virtual DbSet TblBrands { get; set; }
+
+ public virtual DbSet TblCancelledTransactions { get; set; }
+
+ public virtual DbSet TblCarts { get; set; }
+
+ public virtual DbSet TblCategories { get; set; }
+
+ public virtual DbSet TblCompanyDetails { get; set; }
+
+ public virtual DbSet TblCustomers { get; set; }
+
+ public virtual DbSet TblCustomerPurchases { get; set; }
+
+ public virtual DbSet TblDeliveryDetails { get; set; }
+
+ public virtual DbSet TblDeliveryHeads { get; set; }
+
+ public virtual DbSet TblDeliveryRecipients { get; set; }
+
+ public virtual DbSet TblDiscountLogs { get; set; }
+
+ public virtual DbSet TblDrivers { get; set; }
+
+ public virtual DbSet TblHeldTransactions { get; set; }
+
+ public virtual DbSet TblInventories { get; set; }
+
+ public virtual DbSet TblInventoryEntries { get; set; }
+
+ public virtual DbSet TblInvoices { get; set; }
+
+ public virtual DbSet TblPriceChanges { get; set; }
+
+ public virtual DbSet TblProducts { get; set; }
+
+ public virtual DbSet TblTrucks { get; set; }
+
+ public virtual DbSet TblTruckAssignments { get; set; }
+
+ public virtual DbSet TblTruckDriverMappings { get; set; }
+
+ public virtual DbSet TblTruckInventories { get; set; }
+
+ public virtual DbSet TblUsers { get; set; }
+
+ public virtual DbSet TblUserActivities { get; set; }
+
+ public virtual DbSet UnitOfMeasures { get; set; }
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.ReceiptId);
+
+ entity.ToTable(tb => tb.HasTrigger("trg_UpdateLastModifiedOnCreditPurchases"));
+
+ entity.Property(e => e.ReceiptId)
+ .HasMaxLength(120)
+ .HasColumnName("receiptID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(10)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ entity.Property(e => e.CustomerId)
+ .HasMaxLength(120)
+ .HasColumnName("customerID");
+ entity.Property(e => e.Date).HasColumnName("date");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Paid)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("paid");
+ entity.Property(e => e.Status)
+ .HasMaxLength(10)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.TotalBill)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("totalBill");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable(tb => tb.HasTrigger("trg_UpdateLastModifiedOnCustomerAccounts"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(120)
+ .HasColumnName("countID");
+ entity.Property(e => e.Balance)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("balance");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(10)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Comments)
+ .IsUnicode(false)
+ .HasColumnName("comments");
+ entity.Property(e => e.Credit)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("credit");
+ entity.Property(e => e.CustomerId)
+ .HasMaxLength(120)
+ .HasColumnName("customerID");
+ entity.Property(e => e.Date).HasColumnName("date");
+ entity.Property(e => e.Debit)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("debit");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.TransactionId)
+ .HasMaxLength(120)
+ .HasColumnName("transactionID");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.DistinctiveCode).HasName("PK_ProductUnitPricing");
+
+ entity.ToTable("ProductAltUnit", tb => tb.HasTrigger("trg_UpdateLastModifiedOnProductAltUnit"));
+
+ entity.Property(e => e.DistinctiveCode)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("distinctiveCode");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("pcode");
+ entity.Property(e => e.PriceUnit)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("price/unit");
+ entity.Property(e => e.QuantityUnit).HasColumnName("quantity/unit");
+ entity.Property(e => e.UnitBarcode)
+ .HasMaxLength(20)
+ .IsUnicode(false)
+ .HasColumnName("unitBarcode");
+ entity.Property(e => e.UnitCode)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("unitCode");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.ProductId).HasName("PK_ProductRestockLevels");
+
+ entity.ToTable(tb => tb.HasTrigger("trg_UpdateLastModifiedOnRestockLevels"));
+
+ entity.Property(e => e.ProductId)
+ .HasMaxLength(150)
+ .IsUnicode(false)
+ .HasColumnName("productID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(20)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Unit)
+ .HasMaxLength(150)
+ .IsUnicode(false)
+ .HasColumnName("unit");
+ entity.Property(e => e.WarnLevel).HasColumnName("warnLevel");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.ToTable("systemUserRoles", tb => tb.HasTrigger("trg_UpdateLastModifiedOnsystemUserRoles"));
+
+ entity.Property(e => e.Id)
+ .ValueGeneratedNever()
+ .HasColumnName("id");
+ entity.Property(e => e.Assist).HasColumnName("assist");
+ entity.Property(e => e.Cashier).HasColumnName("cashier");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Manager).HasColumnName("manager");
+ entity.Property(e => e.Owner).HasColumnName("owner");
+ entity.Property(e => e.Roles)
+ .IsUnicode(false)
+ .HasColumnName("roles");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tbStock", tb => tb.HasTrigger("trg_UpdateLastModifiedOntbStock"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(50)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(12)
+ .HasColumnName("branchID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(50)
+ .HasColumnName("pcode");
+ entity.Property(e => e.Qty).HasColumnName("qty");
+ entity.Property(e => e.Refno)
+ .HasMaxLength(50)
+ .HasColumnName("refno");
+ entity.Property(e => e.Sdate)
+ .HasColumnType("date")
+ .HasColumnName("sdate");
+ entity.Property(e => e.Stockinby)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("stockinby");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.BranchId);
+
+ entity.ToTable("tblBranches", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblBranches"));
+
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(12)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Address)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("address");
+ entity.Property(e => e.BranchName)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("branchName");
+ entity.Property(e => e.BranchTelephone)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("branch_telephone");
+ entity.Property(e => e.City)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("city");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.StateOrProvince)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("state_or_province");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.ToTable("tblBrand", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblBrand"));
+
+ entity.Property(e => e.Id)
+ .HasMaxLength(50)
+ .HasColumnName("id");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(12)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Brand)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("brand");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblCancelledTransactions", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblCancelledTransactions"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(50)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .HasColumnName("branchID");
+ entity.Property(e => e.CancelledBy)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("cancelledBy");
+ entity.Property(e => e.DateCancelled)
+ .HasColumnType("datetime")
+ .HasColumnName("dateCancelled");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Transno)
+ .IsUnicode(false)
+ .HasColumnName("transno");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblCart", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblCart"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(200)
+ .IsUnicode(false)
+ .HasColumnName("countID");
+ entity.Property(e => e.Balance)
+ .HasDefaultValueSql("((0))")
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("balance");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(12)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Cashier)
+ .HasMaxLength(50)
+ .HasColumnName("cashier");
+ entity.Property(e => e.Costprice)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("costprice");
+ entity.Property(e => e.Date).HasColumnName("date");
+ entity.Property(e => e.Id)
+ .HasMaxLength(50)
+ .HasColumnName("id");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Price)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("price");
+ entity.Property(e => e.Quantity).HasColumnName("quantity");
+ entity.Property(e => e.Status)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.Tendered)
+ .HasDefaultValueSql("((0))")
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("tendered");
+ entity.Property(e => e.Total)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("total");
+ entity.Property(e => e.Transno).HasColumnName("transno");
+ entity.Property(e => e.Unit)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("unit");
+ entity.Property(e => e.ValueAddTax)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("valueAddTax");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.ToTable("tblCategory", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblCategory"));
+
+ entity.Property(e => e.Id)
+ .HasMaxLength(50)
+ .HasColumnName("id");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(12)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Category)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("category");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Tin);
+
+ entity.ToTable("tblCompanyDetails", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblCompanyDetails"));
+
+ entity.Property(e => e.Tin)
+ .HasMaxLength(60)
+ .HasColumnName("tin");
+ entity.Property(e => e.Address)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("address");
+ entity.Property(e => e.CompanyName)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("company_name");
+ entity.Property(e => e.Email)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("email");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.MainTelephone)
+ .HasMaxLength(50)
+ .HasColumnName("main_telephone");
+ entity.Property(e => e.Vatno)
+ .HasMaxLength(60)
+ .HasColumnName("vatno");
+ entity.Property(e => e.Website)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("website");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CustomerId);
+
+ entity.ToTable("tblCustomers", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblCustomers"));
+
+ entity.Property(e => e.CustomerId)
+ .HasMaxLength(30)
+ .HasColumnName("customerID");
+ entity.Property(e => e.Address)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("address");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .HasColumnName("branchID");
+ entity.Property(e => e.DateAdded)
+ .HasColumnType("date")
+ .HasColumnName("dateAdded");
+ entity.Property(e => e.DateExit)
+ .HasColumnType("date")
+ .HasColumnName("dateExit");
+ entity.Property(e => e.Email)
+ .HasMaxLength(50)
+ .HasColumnName("email");
+ entity.Property(e => e.FinancialStatus)
+ .HasMaxLength(20)
+ .IsUnicode(false)
+ .HasColumnName("financialStatus");
+ entity.Property(e => e.Firstname)
+ .HasMaxLength(50)
+ .IsUnicode(false);
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.NameKey1)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("name_key1");
+ entity.Property(e => e.NameKey2)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("name_key2");
+ entity.Property(e => e.Status)
+ .HasMaxLength(20)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.Surname)
+ .HasMaxLength(50)
+ .IsUnicode(false);
+ entity.Property(e => e.Telephone)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("telephone");
+ entity.Property(e => e.Tin)
+ .HasMaxLength(50)
+ .HasColumnName("tin");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblCustomerPurchases", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblCustomerPurchases"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(50)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ entity.Property(e => e.CustomerId)
+ .HasMaxLength(50)
+ .HasColumnName("customerID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.TransactionId)
+ .HasMaxLength(50)
+ .HasColumnName("transactionID");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblDeliveryDetails", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblDeliveryDetails"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(100)
+ .HasColumnName("countID");
+ entity.Property(e => e.Cost)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("cost");
+ entity.Property(e => e.DeliveryId)
+ .HasMaxLength(60)
+ .HasColumnName("deliveryID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(60)
+ .HasColumnName("pcode");
+ entity.Property(e => e.Quantity).HasColumnName("quantity");
+ entity.Property(e => e.Unit)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("unit");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.DeliveryId);
+
+ entity.ToTable("tblDeliveryHead", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblDeliveryHead"));
+
+ entity.Property(e => e.DeliveryId)
+ .HasMaxLength(60)
+ .HasColumnName("deliveryID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(20)
+ .HasColumnName("branchID");
+ entity.Property(e => e.CustomerId)
+ .HasMaxLength(60)
+ .HasColumnName("customerID");
+ entity.Property(e => e.DateCompleted).HasColumnName("dateCompleted");
+ entity.Property(e => e.DateInitiated).HasColumnName("dateInitiated");
+ entity.Property(e => e.Destination)
+ .HasMaxLength(60)
+ .HasColumnName("destination");
+ entity.Property(e => e.GeneratedBy)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("generatedBy");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Status)
+ .HasMaxLength(20)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.TotalCost)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("totalCost");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.DeliveryId);
+
+ entity.ToTable("tblDeliveryRecipients", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblDeliveryRecipients"));
+
+ entity.Property(e => e.DeliveryId)
+ .HasMaxLength(60)
+ .HasColumnName("deliveryID");
+ entity.Property(e => e.Address)
+ .HasMaxLength(60)
+ .HasColumnName("address");
+ entity.Property(e => e.CustomerId)
+ .HasMaxLength(60)
+ .HasColumnName("customerID");
+ entity.Property(e => e.Email)
+ .HasMaxLength(60)
+ .HasColumnName("email");
+ entity.Property(e => e.FromDate)
+ .HasColumnType("date")
+ .HasColumnName("fromDate");
+ entity.Property(e => e.Fullname)
+ .IsUnicode(false)
+ .HasColumnName("fullname");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Telephone)
+ .HasMaxLength(15)
+ .IsUnicode(false)
+ .HasColumnName("telephone");
+ entity.Property(e => e.ToDate)
+ .HasColumnType("date")
+ .HasColumnName("toDate");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblDiscountLogs", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblDiscountLogs"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Cashier)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("cashier");
+ entity.Property(e => e.Date).HasColumnName("date");
+ entity.Property(e => e.Discount)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("discount");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.ReceiptId)
+ .HasMaxLength(50)
+ .HasColumnName("receiptID");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.DriverId);
+
+ entity.ToTable("tblDrivers", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblDrivers"));
+
+ entity.Property(e => e.DriverId)
+ .HasMaxLength(50)
+ .HasColumnName("driverID");
+ entity.Property(e => e.Address1)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("address1");
+ entity.Property(e => e.Address2)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("address2");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .HasColumnName("branchID");
+ entity.Property(e => e.City)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("city");
+ entity.Property(e => e.DateOfBirth)
+ .HasColumnType("date")
+ .HasColumnName("dateOfBirth");
+ entity.Property(e => e.Email)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("email");
+ entity.Property(e => e.Firstname)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("firstname");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Middlename)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("middlename");
+ entity.Property(e => e.State)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("state");
+ entity.Property(e => e.Status)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.Surname)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("surname");
+ entity.Property(e => e.Telephone)
+ .HasMaxLength(20)
+ .IsUnicode(false)
+ .HasColumnName("telephone");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblHeldTransaction", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblHeldTransaction"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(200)
+ .IsUnicode(false)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(12)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Cashier)
+ .HasMaxLength(50)
+ .HasColumnName("cashier");
+ entity.Property(e => e.Costprice)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("costprice");
+ entity.Property(e => e.CustomerId)
+ .HasMaxLength(200)
+ .IsUnicode(false)
+ .HasColumnName("customerID");
+ entity.Property(e => e.Date).HasColumnName("date");
+ entity.Property(e => e.Discount)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("discount");
+ entity.Property(e => e.Distinctive)
+ .HasMaxLength(200)
+ .IsUnicode(false)
+ .HasColumnName("distinctive");
+ entity.Property(e => e.InvoiceId)
+ .HasMaxLength(200)
+ .IsUnicode(false)
+ .HasColumnName("invoiceID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Price)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("price");
+ entity.Property(e => e.ProductId)
+ .HasMaxLength(50)
+ .HasColumnName("productId");
+ entity.Property(e => e.Quantity).HasColumnName("quantity");
+ entity.Property(e => e.Status)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.Total)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("total");
+ entity.Property(e => e.TransactionId)
+ .HasMaxLength(200)
+ .IsUnicode(false)
+ .HasColumnName("transactionID");
+ entity.Property(e => e.Unit)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("unit");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblInventory", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblInventory"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(50)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .HasColumnName("branchID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(50)
+ .HasColumnName("pcode");
+ entity.Property(e => e.Quantity).HasColumnName("quantity");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblInventoryEntries", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblInventoryEntries"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(120)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(60)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Date).HasColumnName("date");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(50)
+ .HasColumnName("pcode");
+ entity.Property(e => e.Quantity).HasColumnName("quantity");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId).HasName("PK_tblinvoice");
+
+ entity.ToTable("tblInvoice", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblInvoice"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(50)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .HasColumnName("branchID");
+ entity.Property(e => e.DateGenerated)
+ .HasColumnType("date")
+ .HasColumnName("dateGenerated");
+ entity.Property(e => e.GeneratedBy)
+ .HasMaxLength(50)
+ .HasColumnName("generatedBy");
+ entity.Property(e => e.InvoiceId)
+ .HasMaxLength(60)
+ .HasColumnName("invoiceID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(50)
+ .HasColumnName("pcode");
+ entity.Property(e => e.Quantity).HasColumnName("quantity");
+ entity.Property(e => e.Status)
+ .HasMaxLength(16)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.Totalprice)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("totalprice");
+ entity.Property(e => e.Unit)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("unit");
+ entity.Property(e => e.Unitprice)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("unitprice");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblPriceChanges", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblPriceChanges"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(70)
+ .HasColumnName("countID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .HasColumnName("branchID");
+ entity.Property(e => e.ChangeDate).HasColumnName("change_date");
+ entity.Property(e => e.CurrentPrice)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("current_price");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(120)
+ .HasColumnName("pcode");
+ entity.Property(e => e.PreviousPrice)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("previous_price");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblProduct", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblProduct"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(50)
+ .HasColumnName("countID");
+ entity.Property(e => e.Barcode)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("barcode");
+ entity.Property(e => e.BaseUnit)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("baseUnit");
+ entity.Property(e => e.Bid)
+ .HasMaxLength(50)
+ .HasColumnName("bid");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(12)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Cid)
+ .HasMaxLength(50)
+ .HasColumnName("cid");
+ entity.Property(e => e.Costprice)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("costprice");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(50)
+ .HasColumnName("pcode");
+ entity.Property(e => e.Pdesc).HasColumnName("pdesc");
+ entity.Property(e => e.Price)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("price");
+ entity.Property(e => e.ProductName)
+ .IsUnicode(false)
+ .HasColumnName("product_name");
+ entity.Property(e => e.Status)
+ .HasMaxLength(20)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.TruckId);
+
+ entity.ToTable("tblTrucks", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblTrucks"));
+
+ entity.Property(e => e.TruckId)
+ .HasMaxLength(60)
+ .HasColumnName("truckID");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .HasColumnName("branchID");
+ entity.Property(e => e.Brand)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("brand");
+ entity.Property(e => e.Driver)
+ .HasMaxLength(50)
+ .HasColumnName("driver");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.LicensePlate)
+ .HasMaxLength(60)
+ .HasColumnName("licensePlate");
+ entity.Property(e => e.Weight)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("weight");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblTruckAssignments", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblTruckAssignments"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(100)
+ .IsUnicode(false)
+ .HasColumnName("countID");
+ entity.Property(e => e.Cost)
+ .HasColumnType("decimal(19, 2)")
+ .HasColumnName("cost");
+ entity.Property(e => e.DateAssigned).HasColumnName("dateAssigned");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.OrderId)
+ .HasMaxLength(50)
+ .HasColumnName("orderID");
+ entity.Property(e => e.Status)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.TruckId)
+ .HasMaxLength(50)
+ .HasColumnName("truckID");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblTruck_DriverMapping", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblTruck_DriverMapping"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(60)
+ .HasColumnName("countID");
+ entity.Property(e => e.DateEntry).HasColumnName("dateEntry");
+ entity.Property(e => e.DriverId)
+ .HasMaxLength(50)
+ .HasColumnName("driverID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Operation)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("operation");
+ entity.Property(e => e.TruckId)
+ .HasMaxLength(50)
+ .HasColumnName("truckID");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.CountId);
+
+ entity.ToTable("tblTruckInventory", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblTruckInventory"));
+
+ entity.Property(e => e.CountId)
+ .HasMaxLength(50)
+ .HasColumnName("countID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Pcode)
+ .HasMaxLength(50)
+ .HasColumnName("pcode");
+ entity.Property(e => e.Quantity).HasColumnName("quantity");
+ entity.Property(e => e.TruckId)
+ .HasMaxLength(50)
+ .HasColumnName("truckID");
+ entity.Property(e => e.Unit)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("unit");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Username);
+
+ entity.ToTable("tblUsers", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblUsers"));
+
+ entity.Property(e => e.Username)
+ .HasMaxLength(50)
+ .HasColumnName("username");
+ entity.Property(e => e.AccessLevel)
+ .HasMaxLength(10)
+ .IsUnicode(false)
+ .HasColumnName("access_level");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(50)
+ .HasColumnName("branchID");
+ entity.Property(e => e.City)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("city");
+ entity.Property(e => e.Email)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("email");
+ entity.Property(e => e.Firstname)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("firstname");
+ entity.Property(e => e.LastLogin).HasColumnName("last_login");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Password)
+ .IsUnicode(false)
+ .HasColumnName("password");
+ entity.Property(e => e.StateOrProvince)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("state_or_province");
+ entity.Property(e => e.StreetAddress1)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("street_address1");
+ entity.Property(e => e.StreetAddress2)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("street_address2");
+ entity.Property(e => e.Surname)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("surname");
+ entity.Property(e => e.Telephone)
+ .HasMaxLength(15)
+ .IsUnicode(false)
+ .HasColumnName("telephone");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Username);
+
+ entity.ToTable("tblUser_activity", tb => tb.HasTrigger("trg_UpdateLastModifiedOntblUser_activity"));
+
+ entity.Property(e => e.Username)
+ .HasMaxLength(50)
+ .HasColumnName("username");
+ entity.Property(e => e.LastActive).HasColumnName("last_active");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Workstation)
+ .HasMaxLength(100)
+ .HasColumnName("workstation");
+ });
+
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.UnitCode);
+
+ entity.ToTable("UnitOfMeasure", tb => tb.HasTrigger("trg_UpdateLastModifiedOnUnitOfMeasure"));
+
+ entity.Property(e => e.UnitCode)
+ .HasMaxLength(120)
+ .HasColumnName("unitCode");
+ entity.Property(e => e.BranchId)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("branchID");
+ entity.Property(e => e.LastModified)
+ .HasDefaultValueSql("(getdate())")
+ .HasColumnName("lastmodified");
+ entity.Property(e => e.Status)
+ .HasMaxLength(50)
+ .IsUnicode(false)
+ .HasColumnName("status");
+ entity.Property(e => e.Unitname)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("unitname");
+ entity.Property(e => e.Unitshort)
+ .HasMaxLength(120)
+ .IsUnicode(false)
+ .HasColumnName("unitshort");
+ });
+
+ OnModelCreatingPartial(modelBuilder);
+ }
+
+ partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
+}
diff --git a/ServerManager/Controllers/WeatherForecastController.cs b/ServerManager/Controllers/WeatherForecastController.cs
new file mode 100644
index 0000000..f720c70
--- /dev/null
+++ b/ServerManager/Controllers/WeatherForecastController.cs
@@ -0,0 +1,32 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace ServerManager.Controllers;
+
+[ApiController]
+[Route("[controller]")]
+public class WeatherForecastController : ControllerBase
+{
+ private static readonly string[] Summaries = new[]
+ {
+ "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
+ };
+
+ private readonly ILogger _logger;
+
+ public WeatherForecastController(ILogger logger)
+ {
+ _logger = logger;
+ }
+
+ [HttpGet(Name = "GetWeatherForecast")]
+ public IEnumerable Get()
+ {
+ return Enumerable.Range(1, 5).Select(index => new WeatherForecast
+ {
+ Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
+ TemperatureC = Random.Shared.Next(-20, 55),
+ Summary = Summaries[Random.Shared.Next(Summaries.Length)]
+ })
+ .ToArray();
+ }
+}
diff --git a/ServerManager/Program.cs b/ServerManager/Program.cs
index 15b1d11..05fe14b 100644
--- a/ServerManager/Program.cs
+++ b/ServerManager/Program.cs
@@ -1,10 +1,44 @@
+using Biskilog_Cloud.Shared.Interfaces;
+using Microsoft.EntityFrameworkCore;
using ServerManager;
+using ServerManager.ServiceRepo;
+using ServerManager.SyncMethods;
-IHost host = Host.CreateDefaultBuilder(args)
- .ConfigureServices(services =>
- {
- services.AddHostedService();
- })
- .Build();
+var builder = WebApplication.CreateBuilder(args);
-host.Run();
+// Add services to the container.
+builder.Services.AddSignalR();
+builder.Services.AddControllers();
+// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
+builder.Services.AddEndpointsApiExplorer();
+builder.Services.AddSwaggerGen();
+builder.Services.AddEntityFrameworkMySql().AddDbContext(options =>
+{
+ options.UseSqlServer(builder.Configuration.GetConnectionString("Connection"));
+});
+
+builder.Services.AddScoped();
+builder.Services.AddScoped();
+builder.Services.AddScoped();
+builder.Services.AddHostedService();
+builder.Services.AddScoped();
+builder.Services.AddScoped();
+builder.Services.AddScoped();
+builder.Services.AddScoped();
+builder.Services.AddScoped();
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (app.Environment.IsDevelopment())
+{
+ app.UseSwagger();
+ app.UseSwaggerUI();
+}
+
+app.UseHttpsRedirection();
+
+app.UseAuthorization();
+
+app.MapControllers();
+
+app.Run();
diff --git a/ServerManager/Properties/launchSettings.json b/ServerManager/Properties/launchSettings.json
index 5699968..e3833aa 100644
--- a/ServerManager/Properties/launchSettings.json
+++ b/ServerManager/Properties/launchSettings.json
@@ -1,10 +1,40 @@
{
+ "$schema": "https://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:21664",
+ "sslPort": 44321
+ }
+ },
"profiles": {
- "ServerManager": {
+ "http": {
"commandName": "Project",
"dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "http://localhost:5110",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "https": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "https://localhost:7022;http://localhost:5110",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
"environmentVariables": {
- "DOTNET_ENVIRONMENT": "Development"
+ "ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
diff --git a/ServerManager/ServerManager.csproj b/ServerManager/ServerManager.csproj
index 3095783..cacdde6 100644
--- a/ServerManager/ServerManager.csproj
+++ b/ServerManager/ServerManager.csproj
@@ -1,13 +1,34 @@
-
+
-
- net7.0
- enable
- enable
- dotnet-ServerManager-52a85e73-fd4f-461a-8b7b-99494934c716
-
+
+ net7.0
+ enable
+ enable
+
-
-
-
+
+
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
diff --git a/ServerManager/ServiceRepo/CompanyService.cs b/ServerManager/ServiceRepo/CompanyService.cs
new file mode 100644
index 0000000..11dfa26
--- /dev/null
+++ b/ServerManager/ServiceRepo/CompanyService.cs
@@ -0,0 +1,287 @@
+using Biskilog_Cloud.Shared.CustomModels;
+using Biskilog_Cloud.Shared.Interfaces;
+using Biskilog_Cloud.Shared.Models;
+using Dapper;
+using Microsoft.Diagnostics.Tracing.Parsers.Kernel;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Data;
+using System.Data.SqlClient;
+
+namespace ServerManager.ServiceRepo
+{
+ public class CompanyService : ICompanyInfo, ICustomer, IUser
+ {
+ private readonly BiskPosContext m_context;
+ public CompanyService(BiskPosContext a_context)
+ {
+ m_context = a_context;
+ }
+
+ #region Unimplemented
+ public IEnumerable FetchUsers()
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task> GetUsers()
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable FetchCustomers()
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task> GetCustomers()
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task> GetBranches()
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetBranchName(string a_branchId)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task GetCompanyInfoAsync()
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetCompanyName()
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable FetchBranches()
+ {
+ throw new NotImplementedException();
+ }
+ #endregion
+ public async Task> FetchBranch(DateTime a_dateTime, string a_branch)
+ {
+ string connection = m_context.Database.GetConnectionString();
+ using (IDbConnection dbConnection = new SqlConnection(connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblbranch",
+ a_branchId = a_branch,
+ lastModified = a_dateTime
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchCompanyInfoAsync(DateTime a_dateTime, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblcompanydetails",
+ a_branchId = a_branch,
+ lastModified = a_dateTime
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchDriverMappingAsync(DateTime a_syncDate, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tbltruck_drivermapping",
+ a_branchId = a_branch,
+ lastModified = a_syncDate
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchDriversAsync(DateTime a_syncDate, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tbldrivers",
+ a_branchId = a_branch,
+ lastModified = a_syncDate
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchSystemRoles(DateTime a_dateTime, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "systemuserroles",
+ a_branchId = a_branch,
+ lastModified = a_dateTime
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchTruckAsync(DateTime a_syncDate, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tbltruck",
+ a_branchId = a_branch,
+ lastModified = a_syncDate
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchTruckInventoryAsync(DateTime a_syncDate, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tbltruckinventory",
+ a_branchId = a_branch,
+ lastModified = a_syncDate
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchCustomers(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblcustomers",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchTruckAssignmentAsync(DateTime a_syncDate, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tbltruckassignments",
+ a_branchId = a_branch,
+ lastModified = a_syncDate
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ public async Task> FetchUsers(DateTime a_syncDate, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_context.Database.GetConnectionString()))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblusers",
+ a_branchId = a_branch,
+ lastModified = a_syncDate
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ }
+}
diff --git a/ServerManager/ServiceRepo/ProductsService.cs b/ServerManager/ServiceRepo/ProductsService.cs
new file mode 100644
index 0000000..2b3d0ab
--- /dev/null
+++ b/ServerManager/ServiceRepo/ProductsService.cs
@@ -0,0 +1,390 @@
+using Biskilog_Cloud.Shared.CustomModels;
+using Biskilog_Cloud.Shared.Interfaces;
+using Biskilog_Cloud.Shared.Models;
+using Dapper;
+using Microsoft.EntityFrameworkCore;
+using System.Data;
+using System.Data.SqlClient;
+
+namespace ServerManager.ServiceRepo
+{
+ public class ProductsService : IProduct
+ {
+ private readonly BiskPosContext m_context;
+ private string m_connection;
+ public ProductsService(BiskPosContext a_context, IConfiguration configuration)
+ {
+ m_context = a_context;
+ m_connection = configuration.GetConnectionString("connection")!.ToString();
+ }
+
+ public event EventHandler ProductsChanged;
+ public event EventHandler UnitsChanged;
+ public event EventHandler BrandsChanged;
+ public event EventHandler CategoriesChanged;
+
+ public async Task> FetchBrandsAsync(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "TblBrand",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchCategoriesAsync(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblcategory",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchInventory(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "TblInventory",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchInventoryEntries(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "TblInventoryentries",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchPriceChanges(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblpricechanges",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchProductAltUnit(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "productaltunit",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchProducts(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ branchID = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchProductTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchRestockAsync(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "Restocklevels",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchStockAsync(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "Tbstock",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+
+ public async Task> FetchUnitOfMeasureAsync(DateTime a_lastSync, string a_branch)
+ {
+ try
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "unitofmeasure",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ return new List();
+ }
+ }
+ public Task FetchBrands()
+ {
+ throw new NotImplementedException();
+ }
+ public Task FetchLowStockProducts()
+ {
+ throw new NotImplementedException();
+ }
+ public Task FetchCategories()
+ {
+ throw new NotImplementedException();
+ }
+ public Task FetchProducts()
+ {
+ throw new NotImplementedException();
+ }
+ public Task FetchUnits()
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetBrands(string a_brandKey = "")
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetCategories(string a_categoryKey = "")
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetLowstockItems()
+ {
+ throw new NotImplementedException();
+ }
+
+ public ProductItem GetProductById(string a_id)
+ {
+ throw new NotImplementedException();
+ }
+
+ public ProductItem GetProductByName(string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetProducts(string a_productKey = "")
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetUnitName(string a_unitCode)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetUnitofmeasures()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void RefreshList()
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/ServerManager/ServiceRepo/SalesService.cs b/ServerManager/ServiceRepo/SalesService.cs
new file mode 100644
index 0000000..f93a88d
--- /dev/null
+++ b/ServerManager/ServiceRepo/SalesService.cs
@@ -0,0 +1,282 @@
+using Biskilog_Cloud.Shared.CustomModels;
+using Biskilog_Cloud.Shared.Interfaces;
+using Biskilog_Cloud.Shared.Models;
+using Dapper;
+using Microsoft.EntityFrameworkCore;
+using System.Data;
+using System.Data.SqlClient;
+
+namespace ServerManager.ServiceRepo
+{
+ public class SalesService : ISalesInterface
+ {
+ private readonly BiskPosContext m_context;
+ private readonly string m_connection;
+
+ public SalesService(BiskPosContext a_context, IConfiguration configuration)
+ {
+ m_context = a_context;
+ m_connection = configuration.GetConnectionString("connection")!.ToString();
+ }
+
+ public event EventHandler TransactionsChanged;
+ public event EventHandler FetchComplete;
+ public event EventHandler FetchStart;
+
+ public async Task> FetchCancelledTransaction(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblcancelledtransaction",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+
+ }
+
+ public async Task> FetchCartTbl(DateTime a_lastSync,string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblcart",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchCreditPurchase(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "CreditPurchases",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchCustomerAccount(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "customeraccounts",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchCustomerPurchase(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tblcustomerpurchases",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchDeliveryDetails(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "tbldeliverydetails",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchDeliveryHead(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "TblDeliveryHeads",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchDeliveryRecipients(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "TblDeliveryRecipients",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchDiscountLogs(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "TblDiscountLogs",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public async Task> FetchInvoice(DateTime a_lastSync, string a_branch)
+ {
+ using (IDbConnection dbConnection = new SqlConnection(m_connection))
+ {
+ dbConnection.Open();
+
+ // Using Dapper to call a stored procedure with parameters
+ var parameters = new
+ {
+ a_tableName = "TblInvoices",
+ a_branchId = a_branch,
+ lastModified = a_lastSync
+ };
+ List result = (await dbConnection.QueryAsync(
+ "FetchTableRows",
+ parameters,
+ commandType: CommandType.StoredProcedure)).AsList();
+
+ return result;
+ }
+ }
+
+ public Task FetchReceipt(string a_receiptId)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task FetchRecentTransaction(int a_limit)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task FetchTransaction(DateTime a_start, DateTime a_end)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetReceipt(string a_receiptId)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task> GetReceiptDetail(string a_receiptId)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetRecentTransaction()
+ {
+ throw new NotImplementedException();
+ }
+
+ public IEnumerable GetTransactions(DateTime a_start, DateTime a_end)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/ServerManager/SyncMethods/CompanySync.cs b/ServerManager/SyncMethods/CompanySync.cs
new file mode 100644
index 0000000..a81c20e
--- /dev/null
+++ b/ServerManager/SyncMethods/CompanySync.cs
@@ -0,0 +1,346 @@
+using Biskilog_Cloud.Shared.CustomModels;
+using Biskilog_Cloud.Shared.Interfaces;
+using Biskilog_Cloud.Shared.Models;
+using System.Net.Http;
+using System.Net.Http.Headers;
+
+namespace ServerManager.SyncMethods
+{
+ public class CompanySync
+ {
+
+ private readonly ICompanyInfo m_companyService;
+ private readonly IUser m_userService;
+ private readonly ICustomer m_customerService;
+ private HttpClient m_httpClient;
+ public CompanySync(ICompanyInfo companyService, IUser userService, ICustomer customerService)
+ {
+ m_companyService = companyService;
+ m_userService = userService;
+ m_customerService = customerService;
+ m_httpClient = new HttpClient();
+ }
+ ///
+ /// Returns a collection of tasks to perform a sync in the ICompanyInterface
+ ///
+ ///
+ public IEnumerable GetCompanySyncTask(HttpClient httpClient)
+ {
+ m_httpClient = httpClient;
+ return new Task[] {
+ SyncCompanyTable(),
+ SyncBranchTable(),
+ SyncCustomer(),
+ SyncDrivers(),
+ SyncTruckAssignments(),
+ SyncTruckDriverMappingSync(),
+ SyncTruckInventorySync(),
+ SyncUsersSync(),
+ SyncTruckSync(),
+ SyncSystemUserRoles()
+ };
+ }
+ private async Task SyncCompanyTable()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tblcompanydetails");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_companyService.FetchCompanyInfoAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp
+ {
+ TableName = "tblcompanydetails",
+ Timestamp = DateTime.Now.AddSeconds(-10),
+ };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblcompanydetails", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncBranchTable()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tblbranch");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_companyService.FetchBranch(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp
+ {
+ TableName = "tblbranch",
+ Timestamp = DateTime.Now.AddSeconds(-10),
+ };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblbranch", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncCustomer()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tblCustomers");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_customerService.FetchCustomers(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp
+ {
+ TableName = "tblCustomers",
+ Timestamp = DateTime.Now.AddSeconds(-10),
+ };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblCustomers", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncDrivers()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tbldrivers");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_companyService.FetchDriversAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbldrivers", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tbldriver", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncSystemUserRoles()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/systemuserroles");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_companyService.FetchSystemRoles(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "systemuserroles", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/SystemRoles", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncTruckAssignments()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tbltruckassignments");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_companyService.FetchTruckAssignmentAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbltruckassignments", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblTruckAssignment", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncTruckDriverMappingSync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tbltruck_drivermapping");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_companyService.FetchDriverMappingAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbltruck_drivermapping", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tbldrivermappings", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncTruckInventorySync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tbltruckinventory");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_companyService.FetchTruckInventoryAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbltruckinventory", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tbltruckinventory", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncTruckSync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tbltrucks");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_companyService.FetchTruckAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbltrucks", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tbltrucks", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncUsersSync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncCompanyInfo/lastsyncdate/tblusers");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_userService.FetchUsers(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblusers", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblusers", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ServerManager/SyncMethods/ProductSync.cs b/ServerManager/SyncMethods/ProductSync.cs
new file mode 100644
index 0000000..5275867
--- /dev/null
+++ b/ServerManager/SyncMethods/ProductSync.cs
@@ -0,0 +1,327 @@
+using Biskilog_Cloud.Shared.CustomModels;
+using Biskilog_Cloud.Shared.Interfaces;
+using Biskilog_Cloud.Shared.Models;
+using System.Net.Http.Headers;
+
+namespace ServerManager.SyncMethods
+{
+ public class ProductSync
+ {
+ private readonly IProduct m_productService;
+ private HttpClient m_httpClient;
+ public ProductSync(IProduct a_produtService)
+ {
+ m_productService = a_produtService;
+ m_httpClient = new HttpClient();
+ }
+ ///
+ /// Returns a collection of tasks to perform a sync in the SalesInterface
+ ///
+ ///
+ public IEnumerable GetProductSyncTask(HttpClient httpClient)
+ {
+ m_httpClient = httpClient;
+ return new Task[] {
+ SyncProductsAsync(),
+ SyncInventoryAsync(),
+ SyncInventoryEntriesAsync(),
+ SyncRestockAsync(),
+ SyncPriceChangesAsync(),
+ SyncProductAltUnitAsync(),
+ SyncStockAsync(),
+ SyncBrandsAsync(),
+ SyncCategoriesAsync(),
+ SyncUnitOfMeasureAsync(),
+ };
+ }
+ private async Task SyncProductsAsync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/tblproduct");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_productService.FetchProducts(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblproduct", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblproducts", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncInventoryAsync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/tblInventory");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_productService.FetchInventory(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblInventory", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblInventory", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncInventoryEntriesAsync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/tblInventoryentries");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_productService.FetchInventoryEntries(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblInventoryentries", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblInventoryentry", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncRestockAsync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/restocklevels");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_productService.FetchRestockAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "restocklevels", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblRestock", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncPriceChangesAsync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/tblpricechanges");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_productService.FetchPriceChanges(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblpricechanges", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tlpricechanges", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncProductAltUnitAsync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/productaltunit");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_productService.FetchRestockAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "productaltunit", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblProductAltUnit", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncStockAsync()
+ {var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/tbstock");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_productService.FetchStockAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbstock", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList();
+
+ var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblStock", batch);
+ if (response.IsSuccessStatusCode)
+ {
+ Console.WriteLine($"Sent batch {batchIndex + 1}, Count: {batch.Count}");
+ }
+ }
+
+ //Set last sync date
+ await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp);
+ }
+ private async Task SyncBrandsAsync()
+ {
+ var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/tblbrands");
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ return;
+ }
+
+ DateTime date = await responseMessage.Content.ReadFromJsonAsync();
+ IEnumerable modifiedCart = await m_productService.FetchBrandsAsync(date, "BRID0");
+ SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblbrands", Timestamp = DateTime.Now.AddSeconds(-10) };
+ int batchSize = 200;
+ int totalItems = modifiedCart.Count();
+ int batches = (totalItems + batchSize - 1) / batchSize; // Calculate total batches
+
+ for (int batchIndex = 0; batchIndex < batches; batchIndex++)
+ {
+ List