Compare commits
9 Commits
Author | SHA1 | Date |
---|---|---|
Benjamin Arhen | a2cd8cd7c7 | 1 year ago |
Benjamin Arhen | 126b495aaa | 1 year ago |
Benjamin Arhen | bc1b7fd24f | 1 year ago |
barhen | ae0c01f319 | 1 year ago |
Benjamin Arhen | 86ef846545 | 1 year ago |
barhen | 9da3638803 | 1 year ago |
barhen | ad02131d76 | 2 years ago |
barhen | f0555cb977 | 2 years ago |
barhen | bc14a32230 | 2 years ago |
89 changed files with 5091 additions and 130 deletions
@ -1,31 +0,0 @@ |
|||
|
|||
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}" |
|||
EndProject |
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerManager", "ServerManager\ServerManager.csproj", "{7A6AAC33-5ED1-4CAD-AA67-E107245354B3}" |
|||
EndProject |
|||
Global |
|||
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|||
Debug|Any CPU = Debug|Any CPU |
|||
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 |
|||
EndGlobalSection |
|||
GlobalSection(SolutionProperties) = preSolution |
|||
HideSolutionNode = FALSE |
|||
EndGlobalSection |
|||
GlobalSection(ExtensibilityGlobals) = postSolution |
|||
SolutionGuid = {B70A1395-0B43-467D-83F6-552CD8A92A8B} |
|||
EndGlobalSection |
|||
EndGlobal |
@ -0,0 +1,31 @@ |
|||
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00 |
|||
# Visual Studio Version 17 |
|||
VisualStudioVersion = 17.5.33530.505 |
|||
MinimumVisualStudioVersion = 10.0.40219.1 |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerManager", "ServerManager\ServerManager.csproj", "{48786C44-14A8-4510-9DC2-167C431DDE95}" |
|||
EndProject |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Biskilog_ServerManager.Shared", "Shared\Biskilog_ServerManager.Shared.csproj", "{8D3C9816-1976-4CEC-A958-6A6532B8AC14}" |
|||
EndProject |
|||
Global |
|||
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|||
Debug|Any CPU = Debug|Any CPU |
|||
Release|Any CPU = Release|Any CPU |
|||
EndGlobalSection |
|||
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|||
{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 |
|||
{8D3C9816-1976-4CEC-A958-6A6532B8AC14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{8D3C9816-1976-4CEC-A958-6A6532B8AC14}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{8D3C9816-1976-4CEC-A958-6A6532B8AC14}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{8D3C9816-1976-4CEC-A958-6A6532B8AC14}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
EndGlobalSection |
|||
GlobalSection(SolutionProperties) = preSolution |
|||
HideSolutionNode = FALSE |
|||
EndGlobalSection |
|||
GlobalSection(ExtensibilityGlobals) = postSolution |
|||
SolutionGuid = {B70A1395-0B43-467D-83F6-552CD8A92A8B} |
|||
EndGlobalSection |
|||
EndGlobal |
@ -1,13 +0,0 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk.Worker"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net7.0</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<ImplicitUsings>enable</ImplicitUsings> |
|||
<UserSecretsId>dotnet-ClientManager-173f3572-8fd4-498f-addd-d620cda23800</UserSecretsId> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> |
|||
</ItemGroup> |
|||
</Project> |
@ -1,10 +0,0 @@ |
|||
using ClientManager; |
|||
|
|||
IHost host = Host.CreateDefaultBuilder(args) |
|||
.ConfigureServices(services => |
|||
{ |
|||
services.AddHostedService<Worker>(); |
|||
}) |
|||
.Build(); |
|||
|
|||
host.Run(); |
@ -1,11 +0,0 @@ |
|||
{ |
|||
"profiles": { |
|||
"ClientManager": { |
|||
"commandName": "Project", |
|||
"dotnetRunMessages": true, |
|||
"environmentVariables": { |
|||
"DOTNET_ENVIRONMENT": "Development" |
|||
} |
|||
} |
|||
} |
|||
} |
@ -1,21 +0,0 @@ |
|||
namespace ClientManager |
|||
{ |
|||
public class Worker : BackgroundService |
|||
{ |
|||
private readonly ILogger<Worker> _logger; |
|||
|
|||
public Worker(ILogger<Worker> 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); |
|||
} |
|||
} |
|||
} |
|||
} |
@ -1,8 +0,0 @@ |
|||
{ |
|||
"Logging": { |
|||
"LogLevel": { |
|||
"Default": "Information", |
|||
"Microsoft.Hosting.Lifetime": "Information" |
|||
} |
|||
} |
|||
} |
@ -1,8 +0,0 @@ |
|||
{ |
|||
"Logging": { |
|||
"LogLevel": { |
|||
"Default": "Information", |
|||
"Microsoft.Hosting.Lifetime": "Information" |
|||
} |
|||
} |
|||
} |
File diff suppressed because it is too large
@ -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<WeatherForecastController> _logger; |
|||
|
|||
public WeatherForecastController(ILogger<WeatherForecastController> logger) |
|||
{ |
|||
_logger = logger; |
|||
} |
|||
|
|||
[HttpGet(Name = "GetWeatherForecast")] |
|||
public IEnumerable<WeatherForecast> 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(); |
|||
} |
|||
} |
@ -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<Worker>(); |
|||
}) |
|||
.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<BiskPosContext>(options => |
|||
{ |
|||
options.UseSqlServer(builder.Configuration.GetConnectionString("Connection")); |
|||
}); |
|||
|
|||
builder.Services.AddScoped<SalesSync>(); |
|||
builder.Services.AddScoped<CompanySync>(); |
|||
builder.Services.AddScoped<ProductSync>(); |
|||
builder.Services.AddHostedService<Worker>(); |
|||
builder.Services.AddScoped<ISalesInterface, SalesService>(); |
|||
builder.Services.AddScoped<IUser, CompanyService>(); |
|||
builder.Services.AddScoped<ICustomer, CompanyService>(); |
|||
builder.Services.AddScoped<ICompanyInfo, CompanyService>(); |
|||
builder.Services.AddScoped<IProduct, ProductsService>(); |
|||
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(); |
|||
|
@ -1,13 +1,34 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk.Worker"> |
|||
<Project Sdk="Microsoft.NET.Sdk.Web"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net7.0</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<ImplicitUsings>enable</ImplicitUsings> |
|||
<UserSecretsId>dotnet-ServerManager-52a85e73-fd4f-461a-8b7b-99494934c716</UserSecretsId> |
|||
</PropertyGroup> |
|||
<PropertyGroup> |
|||
<TargetFramework>net7.0</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<ImplicitUsings>enable</ImplicitUsings> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> |
|||
</ItemGroup> |
|||
<ItemGroup> |
|||
<PackageReference Include="Dapper" Version="2.0.151" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.5" /> |
|||
<PackageReference Include="BCrypt.Net" Version="0.1.0" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.5" /> |
|||
<PackageReference Include="AutoMapper" Version="12.0.1" /> |
|||
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" /> |
|||
<PackageReference Include="CsvHelper" Version="30.0.1" /> |
|||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.5"> |
|||
<PrivateAssets>all</PrivateAssets> |
|||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |
|||
</PackageReference> |
|||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.5" /> |
|||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.5"> |
|||
<PrivateAssets>all</PrivateAssets> |
|||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |
|||
</PackageReference> |
|||
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="7.0.6" /> |
|||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="7.0.0" /> |
|||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /> |
|||
<PackageReference Include="Microsoft.Diagnostics.Tracing.TraceEvent" Version="3.1.3" /> |
|||
</ItemGroup> |
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Shared\Biskilog_ServerManager.Shared.csproj" /> |
|||
</ItemGroup> |
|||
</Project> |
|||
|
@ -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<TblUser> FetchUsers() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public Task<IEnumerable<TblUser>> GetUsers() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public IEnumerable<CustomerAccounts> FetchCustomers() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public Task<IEnumerable<CustomerAccounts>> GetCustomers() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public Task<IEnumerable<TblBranch>> GetBranches() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public string GetBranchName(string a_branchId) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public Task<TblCompanyDetail> GetCompanyInfoAsync() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public string GetCompanyName() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public IEnumerable<TblBranch> FetchBranches() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
#endregion
|
|||
public async Task<IEnumerable<TblBranch>> 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 = "tblbranches", |
|||
a_branchId = a_branch, |
|||
lastModified = a_dateTime |
|||
}; |
|||
List<TblBranch> result = (await dbConnection.QueryAsync<TblBranch>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblCompanyDetail>> 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<TblCompanyDetail> result = (await dbConnection.QueryAsync<TblCompanyDetail>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblTruckDriverMapping>> 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<TblTruckDriverMapping> result = (await dbConnection.QueryAsync<TblTruckDriverMapping>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblDriver>> 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<TblDriver> result = (await dbConnection.QueryAsync<TblDriver>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<SystemUserRole>> 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<SystemUserRole> result = (await dbConnection.QueryAsync<SystemUserRole>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblTruck>> 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<TblTruck> result = (await dbConnection.QueryAsync<TblTruck>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblTruckInventory>> 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<TblTruckInventory> result = (await dbConnection.QueryAsync<TblTruckInventory>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblCustomer>> 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<TblCustomer> result = (await dbConnection.QueryAsync<TblCustomer>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblTruckAssignment>> 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<TblTruckAssignment> result = (await dbConnection.QueryAsync<TblTruckAssignment>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
public async Task<IEnumerable<TblUser>> 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<TblUser> result = (await dbConnection.QueryAsync<TblUser>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,389 @@ |
|||
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<IEnumerable<TblBrand>> 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<TblBrand> result = (await dbConnection.QueryAsync<TblBrand>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<TblBrand>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblCategory>> 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<TblCategory> result = (await dbConnection.QueryAsync<TblCategory>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<TblCategory>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblInventory>> 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<TblInventory> result = (await dbConnection.QueryAsync<TblInventory>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<TblInventory>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblInventoryEntry>> 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<TblInventoryEntry> result = (await dbConnection.QueryAsync<TblInventoryEntry>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<TblInventoryEntry>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblPriceChange>> 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<TblPriceChange> result = (await dbConnection.QueryAsync<TblPriceChange>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<TblPriceChange>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<ProductAltUnit>> 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 |
|||
{ |
|||
branchID = a_branch, |
|||
lastModified = a_lastSync |
|||
}; |
|||
List<ProductAltUnit> result = (await dbConnection.QueryAsync<ProductAltUnit>( |
|||
"FetchProductAltUnitTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<ProductAltUnit>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblProduct>> 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<TblProduct> result = (await dbConnection.QueryAsync<TblProduct>( |
|||
"FetchProductTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<TblProduct>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<RestockLevel>> 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<RestockLevel> result = (await dbConnection.QueryAsync<RestockLevel>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<RestockLevel>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TbStock>> 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<TbStock> result = (await dbConnection.QueryAsync<TbStock>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<TbStock>(); |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<UnitOfMeasure>> 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<UnitOfMeasure> result = (await dbConnection.QueryAsync<UnitOfMeasure>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.ToString()); |
|||
return new List<UnitOfMeasure>(); |
|||
} |
|||
} |
|||
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<TblBrand> GetBrands(string a_brandKey = "") |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public IEnumerable<TblCategory> GetCategories(string a_categoryKey = "") |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public IEnumerable<ProductItem> GetLowstockItems() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public ProductItem GetProductById(string a_id) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public ProductItem GetProductByName(string name) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public IEnumerable<ProductItem> GetProducts(string a_productKey = "") |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public string GetUnitName(string a_unitCode) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public IEnumerable<UnitOfMeasure> GetUnitofmeasures() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public void RefreshList() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
} |
|||
} |
@ -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<IEnumerable<TblCancelledTransaction>> 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 = "tblcancelledtransactions", |
|||
a_branchId = a_branch, |
|||
lastModified = a_lastSync |
|||
}; |
|||
List<TblCancelledTransaction> result = (await dbConnection.QueryAsync<TblCancelledTransaction>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
|
|||
} |
|||
|
|||
public async Task<IEnumerable<TblCart>> 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<TblCart> result = (await dbConnection.QueryAsync<TblCart>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<CreditPurchase>> 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<CreditPurchase> result = (await dbConnection.QueryAsync<CreditPurchase>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<CustomerAccount>> 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<CustomerAccount> result = (await dbConnection.QueryAsync<CustomerAccount>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblCustomerPurchase>> 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<TblCustomerPurchase> result = (await dbConnection.QueryAsync<TblCustomerPurchase>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblDeliveryDetail>> 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<TblDeliveryDetail> result = (await dbConnection.QueryAsync<TblDeliveryDetail>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblDeliveryHead>> 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<TblDeliveryHead> result = (await dbConnection.QueryAsync<TblDeliveryHead>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblDeliveryRecipient>> 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<TblDeliveryRecipient> result = (await dbConnection.QueryAsync<TblDeliveryRecipient>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblDiscountLog>> 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<TblDiscountLog> result = (await dbConnection.QueryAsync<TblDiscountLog>( |
|||
"FetchTableRows", |
|||
parameters, |
|||
commandType: CommandType.StoredProcedure)).AsList(); |
|||
|
|||
return result; |
|||
} |
|||
} |
|||
|
|||
public async Task<IEnumerable<TblInvoice>> 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 = "TblInvoice", |
|||
a_branchId = a_branch, |
|||
lastModified = a_lastSync |
|||
}; |
|||
List<TblInvoice> result = (await dbConnection.QueryAsync<TblInvoice>( |
|||
"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<SaleItem> GetReceipt(string a_receiptId) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public Task<IEnumerable<TblCart>> GetReceiptDetail(string a_receiptId) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public IEnumerable<SaleItem> GetRecentTransaction() |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public IEnumerable<SaleItem> GetTransactions(DateTime a_start, DateTime a_end) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
} |
|||
} |
@ -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(); |
|||
} |
|||
/// <summary>
|
|||
/// Returns a collection of tasks to perform a sync in the ICompanyInterface
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public IEnumerable<Task> 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<DateTime>(); |
|||
IEnumerable<TblCompanyDetail> 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<TblCompanyDetail> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblcompanydetails", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblBranch> modifiedCart = await m_companyService.FetchBranch(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp |
|||
{ |
|||
TableName = "tblbranches", |
|||
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<TblBranch> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblbranch", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblCustomer> 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<TblCustomer> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblCustomers", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblDriver> 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<TblDriver> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tbldriver", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<SystemUserRole> 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<SystemUserRole> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/SystemRoles", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblTruckAssignment> 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<TblTruckAssignment> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblTruckAssignment", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblTruckDriverMapping> 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<TblTruckDriverMapping> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tbldrivermappings", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblTruckInventory> 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<TblTruckInventory> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tbltruckinventory", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblTruck> 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<TblTruck> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tbltrucks", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblUser> 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<TblUser> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/publish/tblusers", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncCompanyInfo/setsyncdate", syncTimestamp); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,333 @@ |
|||
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(); |
|||
} |
|||
/// <summary>
|
|||
/// Returns a collection of tasks to perform a sync in the SalesInterface
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public IEnumerable<Task> 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<DateTime>(); |
|||
IEnumerable<TblProduct> 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<TblProduct> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblproducts", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblInventory> 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<TblInventory> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblInventory", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblInventoryEntry> 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<TblInventoryEntry> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblInventoryentry", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<RestockLevel> 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<RestockLevel> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblRestock", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblPriceChange> 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<TblPriceChange> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tlpricechanges", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncProductAltUnitAsync() |
|||
{ |
|||
try |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/productaltunit"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<ProductAltUnit> modifiedCart = await m_productService.FetchProductAltUnit(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<ProductAltUnit> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblProductAltUnit", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp); |
|||
}catch (Exception ex) |
|||
{ |
|||
|
|||
} |
|||
} |
|||
private async Task SyncStockAsync() |
|||
{var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/tbstock"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TbStock> 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<TbStock> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblStock", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : 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<DateTime>(); |
|||
IEnumerable<TblBrand> 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<TblBrand> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblbrands", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncCategoriesAsync() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/tblcategory"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblCategory> modifiedCart = await m_productService.FetchCategoriesAsync(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblcategory", 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<TblCategory> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblCategories", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncUnitOfMeasureAsync() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncProducts/lastsyncdate/unitofmeasure"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<UnitOfMeasure> modifiedCart = await m_productService.FetchUnitOfMeasureAsync(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "unitofmeasure", 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<UnitOfMeasure> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncProducts/publish/tblunitofmeasure", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncProducts/setsyncdate", syncTimestamp); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,341 @@ |
|||
using System.Net.Http.Headers; |
|||
using Biskilog_Cloud.Shared.Interfaces; |
|||
using Biskilog_Cloud.Shared.Models; |
|||
using Biskilog_Cloud.Shared.CustomModels; |
|||
|
|||
namespace ServerManager.SyncMethods |
|||
{ |
|||
public class SalesSync |
|||
{ |
|||
private readonly ISalesInterface m_salesService; |
|||
private HttpClient m_httpClient; |
|||
|
|||
public SalesSync(ISalesInterface a_salesService) |
|||
{ |
|||
m_salesService = a_salesService; |
|||
m_httpClient = new HttpClient(); |
|||
} |
|||
/// <summary>
|
|||
/// Returns a collection of tasks to perform a sync in the SalesInterface
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public IEnumerable<Task> GetSalesSyncTask(HttpClient httpClient) |
|||
{ |
|||
m_httpClient = httpClient; |
|||
return new Task[] { |
|||
SyncCartTable(), |
|||
SyncInvoice(), |
|||
SyncDiscountLogs(), |
|||
SyncCancelledTransactionTable(), |
|||
SyncDeliveryRecipient(), |
|||
SyncCreditPurchase(), |
|||
SyncCustomerAccounts(), |
|||
SyncCustomerPurchases(), |
|||
SyncDeliveryDetails(), |
|||
SynctblDeliveryhead(), |
|||
}; |
|||
} |
|||
private async Task SyncCartTable() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/tblcart"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblCart> modifiedCart = await m_salesService.FetchCartTbl(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp |
|||
{ |
|||
TableName = "TblCart", |
|||
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<TblCart> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/tblCart", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncCancelledTransactionTable() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/tblcancelledtransactions"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblCancelledTransaction> modifiedCart = await m_salesService.FetchCancelledTransaction(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp |
|||
{ |
|||
TableName = "tblcancelledtransactions", |
|||
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<TblCancelledTransaction> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/tblcancelledtransaction", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncCreditPurchase() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/CreditPurchases"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<CreditPurchase> modifiedCart = await m_salesService.FetchCreditPurchase(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp |
|||
{ |
|||
TableName = "CreditPurchases", |
|||
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<CreditPurchase> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/tblCreditpurchase", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncCustomerAccounts() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/customeraccounts"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<CustomerAccount> modifiedCart = await m_salesService.FetchCustomerAccount(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "customeraccounts", 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<CustomerAccount> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/tblCustomerAccount", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncCustomerPurchases() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/tblcustomerpurchases"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblCustomerPurchase> modifiedCart = await m_salesService.FetchCustomerPurchase(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblcustomerpurchases", 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<TblCustomerPurchase> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/CustomerPurchase", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncDiscountLogs() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/tbldiscountlogs"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblDiscountLog> modifiedCart = await m_salesService.FetchDiscountLogs(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbldiscountlogs", 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<TblDiscountLog> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/DiscountLogs", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncDeliveryDetails() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/tblDeliverydetails"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblDeliveryDetail> modifiedCart = await m_salesService.FetchDeliveryDetails(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbldeliverydetails", 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<TblDeliveryDetail> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/tblDeliverydetails", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SynctblDeliveryhead() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/tblDeliveryhead"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblDeliveryHead> modifiedCart = await m_salesService.FetchDeliveryHead(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbldeliveryhead", 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<TblDeliveryHead> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/tblDeliveryhead", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncDeliveryRecipient() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/tblDeliveryrecipients"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblDeliveryRecipient> modifiedCart = await m_salesService.FetchDeliveryRecipients(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tbldeliveryrecipients", 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<TblDeliveryRecipient> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/tblDeliveryrecipient", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
private async Task SyncInvoice() |
|||
{ |
|||
var responseMessage = await m_httpClient.GetAsync("/api/SyncSales/lastsyncdate/tblinvoice"); |
|||
if (!responseMessage.IsSuccessStatusCode) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
DateTime date = await responseMessage.Content.ReadFromJsonAsync<DateTime>(); |
|||
IEnumerable<TblInvoice> modifiedCart = await m_salesService.FetchInvoice(date, "BRID0"); |
|||
SyncTimestamp syncTimestamp = new SyncTimestamp { TableName = "tblinvoice", 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<TblInvoice> batch = modifiedCart.Skip(batchIndex * batchSize).Take(batchSize).ToList(); |
|||
|
|||
var response = await m_httpClient.PostAsJsonAsync("/api/SyncSales/publish/tblinvoice", batch); |
|||
if (response.IsSuccessStatusCode) |
|||
{ |
|||
Console.WriteLine($"{syncTimestamp.TableName} : Sent batch {batchIndex + 1}, Count: {batch.Count}"); |
|||
} |
|||
} |
|||
|
|||
//Set last sync date
|
|||
await m_httpClient.PostAsJsonAsync("/api/SyncSales/setsyncdate", syncTimestamp); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
namespace ServerManager; |
|||
|
|||
public class WeatherForecast |
|||
{ |
|||
public DateOnly Date { get; set; } |
|||
|
|||
public int TemperatureC { get; set; } |
|||
|
|||
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); |
|||
|
|||
public string? Summary { get; set; } |
|||
} |
@ -0,0 +1,22 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net7.0</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<ImplicitUsings>enable</ImplicitUsings> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" /> |
|||
<PackageReference Include="Blazored.LocalStorage" Version="4.3.0" /> |
|||
<PackageReference Include="Blazored.SessionStorage" Version="2.3.0" /> |
|||
<PackageReference Include="EntityFramework" Version="6.4.4" /> |
|||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" /> |
|||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" /> |
|||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.30.1" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<SupportedPlatform Include="browser" /> |
|||
</ItemGroup> |
|||
</Project> |
@ -0,0 +1,11 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.ClientContractModels; |
|||
|
|||
public partial class Authtype |
|||
{ |
|||
public int Id { get; set; } |
|||
|
|||
public string? Type { get; set; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.ClientContractModels; |
|||
|
|||
public partial class Clientbusiness |
|||
{ |
|||
/// <summary>
|
|||
/// there could be multiple branches of the same business
|
|||
/// </summary>
|
|||
public int BusinessId { get; set; } |
|||
|
|||
public int ClientId { get; set; } |
|||
|
|||
public string BusinessName { get; set; } = null!; |
|||
|
|||
public string BiskilogVersion { get; set; } = null!; |
|||
|
|||
public DateTime DateJoined { get; set; } |
|||
public string BusinessExternalId { get; set; } = string.Empty!; |
|||
} |
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.ClientContractModels; |
|||
|
|||
public partial class Clientinfo |
|||
{ |
|||
public int ClientId { get; set; } |
|||
|
|||
public string? Fullname { get; set; } |
|||
|
|||
public string? PhoneNumber { get; set; } |
|||
|
|||
public string? Email { get; set; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.ClientContractModels; |
|||
|
|||
public partial class Contract |
|||
{ |
|||
public int ContractId { get; set; } |
|||
|
|||
public int ClientId { get; set; } |
|||
|
|||
public int? BusinessId { get; set; } |
|||
|
|||
public DateTime? StartDate { get; set; } |
|||
|
|||
public DateTime? EndDate { get; set; } |
|||
|
|||
public decimal? Bill { get; set; } |
|||
|
|||
public string Comments { get; set; } = null!; |
|||
} |
@ -0,0 +1,16 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.ClientContractModels; |
|||
|
|||
public partial class Databasemap |
|||
{ |
|||
public int DbNo { get; set; } |
|||
|
|||
public string DbName { get; set; } = null!; |
|||
|
|||
public int ClientId { get; set; } |
|||
public string Domain { get; set; } |
|||
|
|||
public DateTime LastSyncDate { get; set; } |
|||
} |
@ -0,0 +1,16 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.ClientContractModels; |
|||
|
|||
public partial class Siteaccesspermission |
|||
{ |
|||
public int UserId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// businessIds could also been seen as branchID
|
|||
/// </summary>
|
|||
public int BusinessId { get; set; } |
|||
|
|||
public int ClientId { get; set; } |
|||
} |
@ -0,0 +1,27 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.ClientContractModels; |
|||
|
|||
public partial class Userauth |
|||
{ |
|||
public int UserId { get; set; } |
|||
|
|||
public int ClientId { get; set; } |
|||
|
|||
public string? Username { get; set; } |
|||
|
|||
public string? Email { get; set; } |
|||
|
|||
public string? Passsword { get; set; } |
|||
|
|||
public string? PhoneNumber { get; set; } |
|||
|
|||
public int AuthType { get; set; } |
|||
|
|||
public ulong Isactive { get; set; } |
|||
|
|||
public ulong? Isowner { get; set; } |
|||
|
|||
public DateTime? LastLogin { get; set; } |
|||
} |
@ -0,0 +1,16 @@ |
|||
using Biskilog_Cloud.Shared.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class CancelledSales |
|||
{ |
|||
public TblCancelledTransaction? CancelledTransaction { get; set; } |
|||
public string Customer { get; set; } = "WALK-IN Purchase"; |
|||
public decimal? Value { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,15 @@ |
|||
using Biskilog_Cloud.Shared.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class CustomerAccounts |
|||
{ |
|||
public TblCustomer Customer { get; set; } |
|||
public decimal Debt { get; set; } = 0; |
|||
} |
|||
} |
@ -0,0 +1,29 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class MostPurchasedItem |
|||
{ |
|||
/// <summary>
|
|||
/// Specifies the id of the product
|
|||
/// </summary>
|
|||
public string ProductId { get; set; } = string.Empty; |
|||
/// <summary>
|
|||
/// Specifies the name of the product
|
|||
/// </summary>
|
|||
public string ProductName { get; set; } = string.Empty; |
|||
/// <summary>
|
|||
/// The total revenue generated from the sale
|
|||
/// </summary>
|
|||
public decimal? Revenue { get; set; } |
|||
/// <summary>
|
|||
/// This is the number of times the item has been sold
|
|||
/// </summary>
|
|||
public int? NbrTimesSold { get; set; } |
|||
|
|||
} |
|||
} |
@ -0,0 +1,18 @@ |
|||
using Biskilog_Cloud.Shared.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class ProductItem |
|||
{ |
|||
public TblProduct? Product { get; set; } |
|||
public TblInventory? Stock { get; set; } |
|||
public RestockLevel? Restocklevel { get; set; } |
|||
public List<ProductUnits> Units { get; set; } = new List<ProductUnits>(); |
|||
public string BaseUnit { get; set; } = string.Empty; |
|||
} |
|||
} |
@ -0,0 +1,23 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class ProductPriceChange |
|||
{ |
|||
public string? Pcode { get; set; } |
|||
public string? ProductName { get; set; } |
|||
public decimal? PreviousPrice { get; set; } |
|||
|
|||
public decimal? CurrentPrice { get; set; } |
|||
|
|||
public DateTime? ChangeDate { get; set; } |
|||
|
|||
public string BranchId { get; set; } = null!; |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
} |
|||
} |
@ -0,0 +1,26 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class ProductUnits |
|||
{ |
|||
public string? Pcode { get; set; } |
|||
|
|||
public string? UnitCode { get; set; } |
|||
public string? UnitName { get; set; } |
|||
|
|||
public string? UnitBarcode { get; set; } |
|||
|
|||
public decimal? PriceUnit { get; set; } |
|||
|
|||
public int? QuantityUnit { get; set; } |
|||
|
|||
public string DistinctiveCode { get; set; } = null!; |
|||
|
|||
public string BranchId { get; set; } = null!; |
|||
} |
|||
} |
@ -0,0 +1,22 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class SaleItem |
|||
{ |
|||
public string? Transno { get; set; } |
|||
|
|||
public DateTime? Date { get; set; } |
|||
|
|||
public string? Cashier { get; set; } |
|||
public string? Status { get; set; } |
|||
public decimal? Total { get; set; } |
|||
public string BranchId { get; set; } = null!; |
|||
|
|||
public string Customer { get; set; } = "Walk-In Purchase"!; |
|||
} |
|||
} |
@ -0,0 +1,14 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class SyncTimestamp |
|||
{ |
|||
public string TableName { get; set; } |
|||
public DateTime Timestamp { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,16 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class TradeSummary |
|||
{ |
|||
public DateTime CurrentTradeDate { get; set; } = DateTime.Now; |
|||
public DateTime LastTradeDate { get; set; } = DateTime.Now.AddDays(-1); |
|||
public double CurrentTradeSales { get; set; } = 0; |
|||
public double LastTradeSales { get; set; } = 0; |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.CustomModels |
|||
{ |
|||
public class WeeklySaleItem |
|||
{ |
|||
public DateTime Date { get; set; } |
|||
public decimal? Total { get; set; } |
|||
public string BranchId { get; set; } = null!; |
|||
} |
|||
|
|||
public class WeeklyCategorySummary |
|||
{ |
|||
public decimal? Total { get; set; } |
|||
public string Category { get; set; } = string.Empty!; |
|||
} |
|||
} |
@ -0,0 +1,17 @@ |
|||
namespace Biskilog_Cloud.Shared.Enums |
|||
{ |
|||
public enum AuthEnums |
|||
{ |
|||
Registered, |
|||
AleadyLoggedin, |
|||
WrongPassword, |
|||
NotFound, |
|||
Found, |
|||
Expired, |
|||
Invalid, |
|||
Valid, |
|||
Successful, |
|||
Error |
|||
} |
|||
} |
|||
|
@ -0,0 +1,14 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Enums |
|||
{ |
|||
public enum ConnectionEnums |
|||
{ |
|||
ConnectionEstablished, |
|||
ConnectionNotEstablished, |
|||
} |
|||
} |
@ -0,0 +1,86 @@ |
|||
using Biskilog_Cloud.Shared.CustomModels; |
|||
using Biskilog_Cloud.Shared.Models; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface IAnalytics |
|||
{ |
|||
/// <summary>
|
|||
/// Fetches a collection of sales transaction made from the specified start date to the end date
|
|||
/// </summary>
|
|||
/// <param name="a_start">Specified Start Date</param>
|
|||
/// <param name="a_end">Specified end Date</param>
|
|||
/// <returns></returns>
|
|||
IEnumerable<TblCart> GetSalesTransaction(DateTime a_start, DateTime a_end); |
|||
/// <summary>
|
|||
/// Fetches a collection of sales transaction made within a one week period
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
IEnumerable<WeeklySaleItem> GetWeeklySalesTransaction(); |
|||
/// <summary>
|
|||
/// Fetches a collection of in-debt customers
|
|||
/// <returns></returns>
|
|||
IEnumerable<CustomerAccounts> GetInDebtCustomers(); |
|||
/// <summary>
|
|||
/// Fetches a collection of Product Items which are currently out of stock
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
IEnumerable<ProductItem> GetOutOfStockItems(); |
|||
/// <summary>
|
|||
/// Fetches a collection of the most purchased Product Items within a specified date range
|
|||
/// </summary>
|
|||
/// <param name="a_start"></param>
|
|||
/// <param name="a_end"></param>
|
|||
/// <returns></returns>
|
|||
IEnumerable<MostPurchasedItem> GetMostPurchasedItem(DateTime a_start, DateTime a_end); |
|||
/// <summary>
|
|||
/// Fetches a collection of cancelled transaction within a specified date range
|
|||
/// </summary>
|
|||
/// <param name="a_start"></param>
|
|||
/// <param name="a_end"></param>
|
|||
/// <returns></returns>
|
|||
IEnumerable<CancelledSales> GetCancelledSales(DateTime a_start, DateTime a_end); |
|||
/// <summary>
|
|||
/// Fetches a collection of transaction made by employees within a specified date range
|
|||
/// </summary>
|
|||
/// <param name="a_start"></param>
|
|||
/// <param name="a_end"></param>
|
|||
/// <returns>A dictionary of transactions made by employees with employee name as key</returns>
|
|||
Dictionary<string, List<SaleItem>> GetEmployeeSales(DateTime a_start, DateTime a_end); |
|||
/// <summary>
|
|||
/// Fetches a collection of product price changes with a specified date range
|
|||
/// </summary>
|
|||
/// <param name="a_start"></param>
|
|||
/// <param name="a_end"></param>
|
|||
/// <returns></returns>
|
|||
IEnumerable<ProductPriceChange> GetPriceChanges(DateTime a_start, DateTime a_end); |
|||
/// <summary>
|
|||
/// Fetch the trade summary which is made of the total sales made currently and previous trade
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
TradeSummary GetTradeSummary(); |
|||
/// <summary>
|
|||
/// Fetches the most recent sales transactions
|
|||
/// </summary>
|
|||
/// <param name="a_limit">The number of rows to return </param>
|
|||
/// <returns></returns>
|
|||
IEnumerable<SaleItem> GetRecentSales(int a_limit); |
|||
/// <summary>
|
|||
/// Fetches a collection of product price changes recently made
|
|||
/// </summary>
|
|||
/// <param name="a_limit">the number of rows to return</param>
|
|||
/// <returns></returns>
|
|||
IEnumerable<ProductPriceChange> GetRecentPriceChanges(int a_limit); |
|||
/// <summary>
|
|||
/// Fetches a collection of price change history per product
|
|||
/// </summary>
|
|||
/// <param name="a_limit">the number of products to fetch history</param>
|
|||
/// <returns></returns>
|
|||
IEnumerable<ProductPriceChange> GetProductPriceChangeHistory(int a_limit); |
|||
/// <summary>
|
|||
/// Fetches a collection of sales transaction grouped by category made within a one week period
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
IEnumerable<WeeklyCategorySummary> GetWeeklySalesCategoryTransaction(int a_limit); |
|||
} |
|||
} |
@ -0,0 +1,19 @@ |
|||
using Biskilog_Cloud.Shared.ClientContractModels; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface IAuthService |
|||
{ |
|||
/// <summary>
|
|||
/// Authenticates user or client
|
|||
/// </summary>
|
|||
/// <param name="a_username"></param>
|
|||
/// <param name="a_password"></param>
|
|||
/// <returns>A tokenized string with relevant information on the authenticated user</returns>
|
|||
Task<string> AuthenticateClient(string a_username, string a_password); |
|||
Contract? GetContract(int a_clientId, List<int> a_businessId); |
|||
Databasemap GetClientDB(int a_clientId); |
|||
List<Siteaccesspermission> GetSiteaccesspermission(int a_clientId, int a_userId); |
|||
List<Clientbusiness> GetClientbusiness(int a_clientId, int userId); |
|||
} |
|||
} |
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Globalization; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface ICalculator |
|||
{ |
|||
double CalculatePercentage(); |
|||
string FormatMoneyWithCurrency(double a_amount); |
|||
string FormatMoneyWithCurrencyKilo(double a_amount); |
|||
NumberFormatInfo GetCurrencyCode(); |
|||
} |
|||
} |
@ -0,0 +1,26 @@ |
|||
using Biskilog_Cloud.Shared.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface ICompanyInfo |
|||
{ |
|||
IEnumerable<TblBranch> FetchBranches(); |
|||
Task<TblCompanyDetail> GetCompanyInfoAsync(); |
|||
Task<IEnumerable<TblBranch>> GetBranches(); |
|||
string GetCompanyName(); |
|||
string GetBranchName(string a_branchId); |
|||
Task<IEnumerable<TblBranch>> FetchBranch(DateTime a_dateTime, string a_branch); |
|||
Task<IEnumerable<SystemUserRole>> FetchSystemRoles(DateTime a_dateTime, string a_branch); |
|||
Task<IEnumerable<TblCompanyDetail>> FetchCompanyInfoAsync(DateTime a_dateTime, string a_branch); |
|||
Task<IEnumerable<TblDriver>> FetchDriversAsync(DateTime a_syncDate, string a_branchId); |
|||
Task<IEnumerable<TblTruckDriverMapping>> FetchDriverMappingAsync(DateTime a_syncDate, string a_branchId); |
|||
Task<IEnumerable<TblTruck>> FetchTruckAsync(DateTime a_syncDate, string a_branchId); |
|||
Task<IEnumerable<TblTruckInventory>> FetchTruckInventoryAsync(DateTime a_syncDate, string a_branchId); |
|||
Task<IEnumerable<TblTruckAssignment>> FetchTruckAssignmentAsync(DateTime a_syncDate, string a_branchId); |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface IConnectionService |
|||
{ |
|||
/// <summary>
|
|||
/// Prepares and returns the connection string for a client using the specified database id
|
|||
/// </summary>
|
|||
/// <param name="a_databaseId">Specified database id to use</param>
|
|||
/// <returns></returns>
|
|||
string GetClientConnectionString(int a_databaseId); |
|||
/// <summary>
|
|||
/// Prepare the DB context from the specified connection string
|
|||
/// </summary>
|
|||
/// <param name="a_connectionString"></param>
|
|||
/// <returns>A configured BiskAcdbContext</returns>
|
|||
object PrepareDBContext(string a_connectionString); |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
using Biskilog_Cloud.Shared.CustomModels; |
|||
using Biskilog_Cloud.Shared.Models; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface ICustomer |
|||
{ |
|||
IEnumerable<CustomerAccounts> FetchCustomers(); |
|||
Task<IEnumerable<CustomerAccounts>> GetCustomers(); |
|||
Task<IEnumerable<TblCustomer>> FetchCustomers(DateTime a_lastSync, string a_branchId); |
|||
} |
|||
} |
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface IMainInterface |
|||
{ |
|||
void ShowReceipt(string a_receipt); |
|||
DateOnly CurrentTradeDate(); |
|||
DateOnly PreviousTradeDate(); |
|||
} |
|||
} |
@ -0,0 +1,38 @@ |
|||
using Biskilog_Cloud.Shared.CustomModels; |
|||
using Biskilog_Cloud.Shared.Models; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface IProduct |
|||
{ |
|||
IEnumerable<UnitOfMeasure> GetUnitofmeasures(); |
|||
IEnumerable<ProductItem> GetProducts(string a_productKey = ""); |
|||
IEnumerable<TblBrand> GetBrands(string a_brandKey = ""); |
|||
IEnumerable<TblCategory> GetCategories(string a_categoryKey = ""); |
|||
IEnumerable<ProductItem> GetLowstockItems(); |
|||
Task FetchProducts(); |
|||
Task FetchLowStockProducts(); |
|||
Task FetchUnits(); |
|||
Task FetchBrands(); |
|||
Task FetchCategories(); |
|||
void RefreshList(); |
|||
ProductItem GetProductById(string a_id); |
|||
ProductItem GetProductByName(string name); |
|||
string GetUnitName(string a_unitCode); |
|||
event EventHandler ProductsChanged; |
|||
event EventHandler UnitsChanged; |
|||
event EventHandler BrandsChanged; |
|||
event EventHandler CategoriesChanged; |
|||
|
|||
Task<IEnumerable<TblProduct>> FetchProducts(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblInventory>> FetchInventory(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblInventoryEntry>> FetchInventoryEntries(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblPriceChange>> FetchPriceChanges(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<ProductAltUnit>> FetchProductAltUnit(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<RestockLevel>> FetchRestockAsync(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<UnitOfMeasure>> FetchUnitOfMeasureAsync(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TbStock>> FetchStockAsync(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblBrand>> FetchBrandsAsync(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblCategory>> FetchCategoriesAsync(DateTime a_lastSync, string a_branch); |
|||
} |
|||
} |
@ -0,0 +1,35 @@ |
|||
using Biskilog_Cloud.Shared.CustomModels; |
|||
using Biskilog_Cloud.Shared.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface ISalesInterface |
|||
{ |
|||
Task FetchRecentTransaction(int a_limit); |
|||
Task FetchTransaction(DateTime a_start, DateTime a_end); |
|||
IEnumerable<SaleItem> GetTransactions(DateTime a_start, DateTime a_end); |
|||
IEnumerable<SaleItem> GetRecentTransaction(); |
|||
Task FetchReceipt(string a_receiptId); |
|||
IEnumerable<SaleItem> GetReceipt(string a_receiptId); |
|||
Task<IEnumerable<TblCart>> GetReceiptDetail(string a_receiptId); |
|||
event EventHandler TransactionsChanged; |
|||
event EventHandler FetchComplete; |
|||
event EventHandler FetchStart; |
|||
|
|||
Task<IEnumerable<TblCart>> FetchCartTbl(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblCancelledTransaction>> FetchCancelledTransaction(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<CreditPurchase>> FetchCreditPurchase(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<CustomerAccount>> FetchCustomerAccount(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblCustomerPurchase>> FetchCustomerPurchase(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblDiscountLog>> FetchDiscountLogs(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblDeliveryDetail>> FetchDeliveryDetails(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblDeliveryHead>> FetchDeliveryHead(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblDeliveryRecipient>> FetchDeliveryRecipients(DateTime a_lastSync, string a_branch); |
|||
Task<IEnumerable<TblInvoice>> FetchInvoice(DateTime a_lastSync, string a_branch); |
|||
} |
|||
} |
@ -0,0 +1,16 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface ISearchService |
|||
{ |
|||
public event Action<string> SearchValueChanged; |
|||
public event Action ClearTextBox; |
|||
void PerformSearch(string a_searchKey); |
|||
void Clear(); |
|||
} |
|||
} |
@ -0,0 +1,22 @@ |
|||
using Biskilog_Cloud.Shared.ClientContractModels; |
|||
using Biskilog_Cloud.Shared.Enums; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface ITokenService |
|||
{ |
|||
AuthEnums ValidateToken(string a_token); |
|||
string GenerateToken(Userauth a_user, Contract a_clientContract, Databasemap a_database, List<string> a_business, bool a_comparison); |
|||
int? GetDatabaseIdFromToken(string a_token); |
|||
int? GetUserIdFromToken(string a_token); |
|||
string? GetUserNameFromToken(string a_token); |
|||
string? GetBaseBranch(string a_token); |
|||
bool? GetComparison(string a_token); |
|||
IEnumerable<string> BranchIds(string a_token); |
|||
string? GetAllBranch(string a_token); |
|||
Task SetToken(string a_token, bool a_remember); |
|||
Task<string> GetToken(); |
|||
Task ClearToken(); |
|||
Task<bool> IsTokenSet(); |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
|
|||
using Biskilog_Cloud.Shared.Models; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Interfaces |
|||
{ |
|||
public interface IUser |
|||
{ |
|||
IEnumerable<TblUser> FetchUsers(); |
|||
Task<IEnumerable<TblUser>> GetUsers(); |
|||
Task<IEnumerable<TblUser>> FetchUsers(DateTime a_syncDate, string a_branchId); |
|||
} |
|||
} |
@ -0,0 +1,23 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class CreditPurchase |
|||
{ |
|||
public string ReceiptId { get; set; } = null!; |
|||
|
|||
public DateTime? Date { get; set; } |
|||
|
|||
public decimal? Paid { get; set; } |
|||
|
|||
public decimal? TotalBill { get; set; } |
|||
|
|||
public string? CustomerId { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,27 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class CustomerAccount |
|||
{ |
|||
public string? CustomerId { get; set; } |
|||
|
|||
public string? TransactionId { get; set; } |
|||
|
|||
public DateTime? Date { get; set; } |
|||
|
|||
public decimal? Debit { get; set; } |
|||
|
|||
public decimal? Credit { get; set; } |
|||
|
|||
public decimal? Balance { get; set; } |
|||
|
|||
public string? Comments { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,23 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class ProductAltUnit |
|||
{ |
|||
public string? Pcode { get; set; } |
|||
|
|||
public string? UnitCode { get; set; } |
|||
|
|||
public string? UnitBarcode { get; set; } |
|||
|
|||
public decimal? PriceUnit { get; set; } |
|||
|
|||
public int? QuantityUnit { get; set; } |
|||
|
|||
public string DistinctiveCode { get; set; } = null!; |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class RestockLevel |
|||
{ |
|||
public string ProductId { get; set; } = null!; |
|||
|
|||
public int? WarnLevel { get; set; } |
|||
|
|||
public string? Unit { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class SystemUserRole |
|||
{ |
|||
public string? Roles { get; set; } |
|||
|
|||
public bool? Owner { get; set; } |
|||
|
|||
public bool? Manager { get; set; } |
|||
|
|||
public bool? Assist { get; set; } |
|||
|
|||
public bool? Cashier { get; set; } |
|||
|
|||
public int Id { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,24 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TbStock |
|||
{ |
|||
public string? Refno { get; set; } |
|||
|
|||
public string? Pcode { get; set; } |
|||
|
|||
public int? Qty { get; set; } |
|||
|
|||
public DateTime? Sdate { get; set; } |
|||
|
|||
public string? Stockinby { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
|||
; |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblBranch |
|||
{ |
|||
public string? BranchName { get; set; } |
|||
|
|||
public string BranchId { get; set; } = null!; |
|||
|
|||
public string? Address { get; set; } |
|||
|
|||
public string? City { get; set; } |
|||
|
|||
public string? StateOrProvince { get; set; } |
|||
|
|||
public string? BranchTelephone { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblBrand |
|||
{ |
|||
public string Id { get; set; } = null!; |
|||
|
|||
public string? Brand { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,19 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblCancelledTransaction |
|||
{ |
|||
public string? Transno { get; set; } |
|||
|
|||
public DateTime? DateCancelled { get; set; } |
|||
|
|||
public string? CancelledBy { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,39 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblCart |
|||
{ |
|||
public string? Transno { get; set; } |
|||
|
|||
public string? Id { get; set; } |
|||
|
|||
public int? Quantity { get; set; } |
|||
|
|||
public DateTime? Date { get; set; } |
|||
|
|||
public decimal? Price { get; set; } |
|||
|
|||
public string? Cashier { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public decimal? Total { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string? Unit { get; set; } |
|||
|
|||
public decimal? Costprice { get; set; } |
|||
|
|||
public decimal? Tendered { get; set; } |
|||
|
|||
public decimal? Balance { get; set; } |
|||
|
|||
public decimal? ValueAddTax { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblCategory |
|||
{ |
|||
public string Id { get; set; } = null!; |
|||
|
|||
public string? Category { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,23 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblCompanyDetail |
|||
{ |
|||
public string? CompanyName { get; set; } |
|||
|
|||
public string? Address { get; set; } |
|||
|
|||
public string? Website { get; set; } |
|||
|
|||
public string? Email { get; set; } |
|||
|
|||
public string Tin { get; set; } = null!; |
|||
|
|||
public string? MainTelephone { get; set; } |
|||
|
|||
public string? Vatno { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,37 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblCustomer |
|||
{ |
|||
public string CustomerId { get; set; } = null!; |
|||
|
|||
public string? Firstname { get; set; } |
|||
|
|||
public string? Surname { get; set; } |
|||
|
|||
public string? Address { get; set; } |
|||
|
|||
public string? Telephone { get; set; } |
|||
|
|||
public DateTime? DateAdded { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public string? Tin { get; set; } |
|||
|
|||
public DateTime? DateExit { get; set; } = new DateTime(2000, 01, 01); |
|||
|
|||
public string? Email { get; set; } |
|||
|
|||
public string? FinancialStatus { get; set; } |
|||
|
|||
public string? NameKey1 { get; set; } |
|||
|
|||
public string? NameKey2 { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblCustomerPurchase |
|||
{ |
|||
public string? CustomerId { get; set; } |
|||
|
|||
public string? TransactionId { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,22 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblDeliveryDetail |
|||
{ |
|||
public string? DeliveryId { get; set; } |
|||
|
|||
public string? Pcode { get; set; } |
|||
|
|||
public int? Quantity { get; set; } |
|||
|
|||
public string? Unit { get; set; } |
|||
|
|||
public decimal? Cost { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
public string? BranchId { get; set; } |
|||
} |
@ -0,0 +1,27 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblDeliveryHead |
|||
{ |
|||
public string DeliveryId { get; set; } = null!; |
|||
|
|||
public string? GeneratedBy { get; set; } |
|||
|
|||
public DateTime? DateInitiated { get; set; } |
|||
|
|||
public DateTime? DateCompleted { get; set; } |
|||
|
|||
public string? Destination { get; set; } |
|||
|
|||
public string? CustomerId { get; set; } |
|||
|
|||
public decimal? TotalCost { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,26 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblDeliveryRecipient |
|||
{ |
|||
public string DeliveryId { get; set; } = null!; |
|||
|
|||
public string? Fullname { get; set; } |
|||
|
|||
public string? Address { get; set; } |
|||
|
|||
public string? Telephone { get; set; } |
|||
|
|||
public string? Email { get; set; } |
|||
|
|||
public string? CustomerId { get; set; } |
|||
|
|||
public DateTime? FromDate { get; set; } |
|||
|
|||
public DateTime? ToDate { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
public string? BranchId { get; set; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblDiscountLog |
|||
{ |
|||
public string? ReceiptId { get; set; } |
|||
|
|||
public string? Cashier { get; set; } |
|||
|
|||
public DateTime? Date { get; set; } |
|||
|
|||
public decimal? Discount { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,35 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblDriver |
|||
{ |
|||
public string DriverId { get; set; } = null!; |
|||
|
|||
public string? Firstname { get; set; } |
|||
|
|||
public string? Surname { get; set; } |
|||
|
|||
public string? Middlename { get; set; } |
|||
|
|||
public DateTime? DateOfBirth { get; set; } |
|||
|
|||
public string? Address1 { get; set; } |
|||
|
|||
public string? Address2 { get; set; } |
|||
|
|||
public string? Telephone { get; set; } |
|||
|
|||
public string? Email { get; set; } |
|||
|
|||
public string? City { get; set; } |
|||
|
|||
public string? State { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,41 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblHeldTransaction |
|||
{ |
|||
public string? ProductId { get; set; } |
|||
|
|||
public int? Quantity { get; set; } |
|||
|
|||
public DateTime? Date { get; set; } |
|||
|
|||
public decimal? Price { get; set; } |
|||
|
|||
public string? Cashier { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public decimal? Total { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string? Unit { get; set; } |
|||
|
|||
public decimal? Costprice { get; set; } |
|||
|
|||
public decimal? Discount { get; set; } |
|||
|
|||
public string? InvoiceId { get; set; } |
|||
|
|||
public string? CustomerId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public string TransactionId { get; set; } = null!; |
|||
|
|||
public string? Distinctive { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblInventory |
|||
{ |
|||
public string? Pcode { get; set; } |
|||
|
|||
public int? Quantity { get; set; } = 0; |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,19 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblInventoryEntry |
|||
{ |
|||
public string? Pcode { get; set; } |
|||
|
|||
public int? Quantity { get; set; } = 0; |
|||
|
|||
public DateTime? Date { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,31 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblInvoice |
|||
{ |
|||
public string? InvoiceId { get; set; } |
|||
|
|||
public string? Pcode { get; set; } |
|||
|
|||
public int? Quantity { get; set; } = 0; |
|||
|
|||
public decimal? Unitprice { get; set; } = 0; |
|||
|
|||
public string? Unit { get; set; } |
|||
|
|||
public decimal? Totalprice { get; set; } = 0; |
|||
|
|||
public DateTime? DateGenerated { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public string? GeneratedBy { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblPriceChange |
|||
{ |
|||
public string? Pcode { get; set; } |
|||
|
|||
public decimal? PreviousPrice { get; set; } = 0; |
|||
|
|||
public decimal? CurrentPrice { get; set; } = 0; |
|||
|
|||
public DateTime? ChangeDate { get; set; } = new DateTime(2000,01,01); |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,33 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblProduct |
|||
{ |
|||
public string? Pcode { get; set; } |
|||
|
|||
public string? Barcode { get; set; } |
|||
|
|||
public string? Pdesc { get; set; } |
|||
|
|||
public string? Bid { get; set; } |
|||
|
|||
public string? Cid { get; set; } |
|||
|
|||
public decimal? Price { get; set; } = 0; |
|||
|
|||
public decimal? Costprice { get; set; } = 0; |
|||
|
|||
public string? BaseUnit { get; set; } |
|||
public string? ProductName { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblTruck |
|||
{ |
|||
public string TruckId { get; set; } = null!; |
|||
|
|||
public string? LicensePlate { get; set; } |
|||
|
|||
public string? Brand { get; set; } |
|||
|
|||
public string? Driver { get; set; } |
|||
|
|||
public decimal? Weight { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblTruckAssignment |
|||
{ |
|||
public string? OrderId { get; set; } |
|||
|
|||
public decimal? Cost { get; set; } |
|||
|
|||
public string? TruckId { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public DateTime? DateAssigned { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,19 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblTruckDriverMapping |
|||
{ |
|||
public string? TruckId { get; set; } |
|||
|
|||
public string? DriverId { get; set; } |
|||
|
|||
public DateTime? DateEntry { get; set; } |
|||
|
|||
public string? Operation { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,19 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblTruckInventory |
|||
{ |
|||
public string? TruckId { get; set; } |
|||
|
|||
public string? Pcode { get; set; } |
|||
|
|||
public int? Quantity { get; set; } |
|||
|
|||
public string? Unit { get; set; } |
|||
|
|||
public string CountId { get; set; } = null!; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,35 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblUser |
|||
{ |
|||
public string Username { get; set; } = null!; |
|||
|
|||
public string? Password { get; set; } = string.Empty; |
|||
|
|||
public string? Firstname { get; set; } = string.Empty; |
|||
|
|||
public string? Surname { get; set; } = string.Empty; |
|||
|
|||
public string? StreetAddress1 { get; set; } = string.Empty; |
|||
|
|||
public string? StreetAddress2 { get; set; } = string.Empty; |
|||
|
|||
public string? City { get; set; } = string.Empty; |
|||
|
|||
public string? StateOrProvince { get; set; } = string.Empty; |
|||
|
|||
public string? Telephone { get; set; } = string.Empty; |
|||
|
|||
public string? Email { get; set; } = string.Empty; |
|||
|
|||
public string? AccessLevel { get; set; } = string.Empty; |
|||
|
|||
public DateTime? LastLogin { get; set; } = new DateTime(2000, 01, 01); |
|||
|
|||
public string? BranchId { get; set; } = string.Empty; |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class TblUserActivity |
|||
{ |
|||
public string Username { get; set; } = null!; |
|||
|
|||
public DateTime? LastActive { get; set; } |
|||
|
|||
public string? Workstation { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,19 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Biskilog_Cloud.Shared.Models; |
|||
|
|||
public partial class UnitOfMeasure |
|||
{ |
|||
public string UnitCode { get; set; } = null!; |
|||
|
|||
public string? Unitname { get; set; } |
|||
|
|||
public string? Unitshort { get; set; } |
|||
|
|||
public string? Status { get; set; } |
|||
|
|||
public string? BranchId { get; set; } |
|||
|
|||
public DateTime LastModified { get; set; } |
|||
} |
@ -0,0 +1,239 @@ |
|||
using Biskilog_Cloud.Shared.ClientContractModels; |
|||
using Biskilog_Cloud.Shared.Enums; |
|||
using Biskilog_Cloud.Shared.Interfaces; |
|||
using Blazored.LocalStorage; |
|||
using Blazored.SessionStorage; |
|||
using Microsoft.Extensions.Configuration; |
|||
using Microsoft.IdentityModel.Tokens; |
|||
using System.IdentityModel.Tokens.Jwt; |
|||
using System.Security.Claims; |
|||
using System.Text; |
|||
|
|||
namespace Biskilog_Cloud.ServiceRepo |
|||
{ |
|||
public class TokenService : ITokenService |
|||
{ |
|||
private IConfiguration m_configuration { get; } |
|||
private readonly ISessionStorageService m_sessionStorage; |
|||
private readonly ILocalStorageService m_localStorage; |
|||
public TokenService(IConfiguration a_configuration, ISessionStorageService a_sessionStorage = null, ILocalStorageService a_localStorage = null) |
|||
{ |
|||
m_configuration = a_configuration; |
|||
m_sessionStorage = a_sessionStorage; |
|||
m_localStorage = a_localStorage; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Validates a user access token
|
|||
/// </summary>
|
|||
/// <returns>AuthEnums.Valid if token is a valid and unexpired token</returns>
|
|||
public AuthEnums ValidateToken(string a_token) |
|||
{ |
|||
try |
|||
{ |
|||
string token = a_token.Substring(6).Trim(); |
|||
var handler = new JwtSecurityTokenHandler(); |
|||
JwtSecurityToken jwtToken = (JwtSecurityToken)handler.ReadToken(token); |
|||
|
|||
if (jwtToken.ValidFrom <= DateTime.Now && jwtToken.ValidTo > DateTime.Now) |
|||
return AuthEnums.Valid; |
|||
return AuthEnums.Expired; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.Message); |
|||
return AuthEnums.Invalid; |
|||
} |
|||
} |
|||
/// <summary>
|
|||
/// Generates an access token based on the user
|
|||
/// </summary>
|
|||
/// <returns>A tokenized string</returns>
|
|||
public string GenerateToken(Userauth a_user, Contract a_clientContract, Databasemap a_database, List<string> a_business, bool a_comparison) |
|||
{ |
|||
try |
|||
{ |
|||
//create claims details based on the user information
|
|||
var claims = new[] { |
|||
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), |
|||
new Claim(JwtRegisteredClaimNames.Iat, DateTime.UtcNow.ToString()), |
|||
new Claim("ContractStart",a_clientContract.StartDate !.Value.ToString()), |
|||
new Claim("ContractEnd",a_clientContract.EndDate!.Value.ToString()), |
|||
new Claim("UserId", a_user.UserId.ToString()), |
|||
new Claim("Username", a_user.Username.ToString()), |
|||
new Claim("DbId",a_database.DbNo.ToString()), |
|||
new Claim("ComparisonMode",a_comparison.ToString()), |
|||
new Claim("BranchId",a_business[0].ToString()), |
|||
new Claim("BranchAccess",string.Join(", ", a_business.ToArray())), |
|||
new Claim("ClientId", a_user.ClientId.ToString()), |
|||
}; |
|||
|
|||
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(m_configuration["Jwt:Key"]!)); |
|||
|
|||
var signIn = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); |
|||
|
|||
var token = new JwtSecurityToken(m_configuration["Jwt:Issuer"], m_configuration["Jwt:Audience"], claims, expires: DateTime.UtcNow.AddDays(14), signingCredentials: signIn); |
|||
return $"{new JwtSecurityTokenHandler().WriteToken(token)}"; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Console.WriteLine(ex.Message); |
|||
return AuthEnums.Error.ToString(); |
|||
} |
|||
} |
|||
/// <summary>
|
|||
///Deserializes the token string if valid to return the specified user role id in the token string
|
|||
/// </summary>
|
|||
/// <param name="a_token"></param>
|
|||
/// <returns>RoleId</returns>
|
|||
public int? GetDatabaseIdFromToken(string a_token) |
|||
{ |
|||
if (ValidateToken(a_token) == AuthEnums.Valid) |
|||
{ |
|||
string token = a_token.Substring(6).Trim(); |
|||
var handler = new JwtSecurityTokenHandler(); |
|||
JwtSecurityToken jwtToken = (JwtSecurityToken)handler.ReadToken(token); |
|||
return int.Parse(jwtToken.Claims.First(claim => claim.Type == "DbId").Value); |
|||
} |
|||
return null; |
|||
} |
|||
/// <summary>
|
|||
///Deserializes the token string if valid to return the specified user id in the token string
|
|||
/// </summary>
|
|||
/// <param name="a_token"></param>
|
|||
/// <returns>UserId</returns>
|
|||
public int? GetUserIdFromToken(string a_token) |
|||
{ |
|||
if (ValidateToken(a_token) == AuthEnums.Valid) |
|||
{ |
|||
string token = a_token.Substring(6).Trim(); |
|||
var handler = new JwtSecurityTokenHandler(); |
|||
JwtSecurityToken jwtToken = (JwtSecurityToken)handler.ReadToken(token); |
|||
return int.Parse(jwtToken.Claims.First(claim => claim.Type == "UserId").Value); |
|||
} |
|||
return null; |
|||
} |
|||
/// <summary>
|
|||
///Deserializes the token string if valid to return the specified username in the token string
|
|||
/// </summary>
|
|||
/// <param name="a_token"></param>
|
|||
/// <returns>Username</returns>
|
|||
public string? GetUserNameFromToken(string a_token) |
|||
{ |
|||
if (ValidateToken(a_token) == AuthEnums.Valid) |
|||
{ |
|||
string token = a_token.Substring(6).Trim(); |
|||
var handler = new JwtSecurityTokenHandler(); |
|||
JwtSecurityToken jwtToken = (JwtSecurityToken)handler.ReadToken(token); |
|||
return jwtToken.Claims.First(claim => claim.Type == "Username").Value; |
|||
} |
|||
return null; |
|||
} |
|||
/// <summary>
|
|||
///Deserializes the token string if valid to return the specified branchId in the token string
|
|||
/// </summary>
|
|||
/// <param name="a_token"></param>
|
|||
/// <returns>Username</returns>
|
|||
public string? GetBaseBranch(string a_token) |
|||
{ |
|||
if (ValidateToken(a_token) == AuthEnums.Valid) |
|||
{ |
|||
string token = a_token.Substring(6).Trim(); |
|||
var handler = new JwtSecurityTokenHandler(); |
|||
JwtSecurityToken jwtToken = (JwtSecurityToken)handler.ReadToken(token); |
|||
return jwtToken.Claims.First(claim => claim.Type == "BranchId").Value; |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public bool? GetComparison(string a_token) |
|||
{ |
|||
if (ValidateToken(a_token) == AuthEnums.Valid) |
|||
{ |
|||
string token = a_token.Substring(6).Trim(); |
|||
var handler = new JwtSecurityTokenHandler(); |
|||
JwtSecurityToken jwtToken = (JwtSecurityToken)handler.ReadToken(token); |
|||
return bool.Parse(jwtToken.Claims.First(claim => claim.Type == "ComparisonMode").Value); |
|||
} |
|||
return null; |
|||
} |
|||
/// <summary>
|
|||
///Deserializes the token string if valid to return the specified list of branches a user has access to in the token string
|
|||
/// </summary>
|
|||
/// <param name="a_token"></param>
|
|||
/// <returns>Username</returns>
|
|||
public string? GetAllBranch(string a_token) |
|||
{ |
|||
if (ValidateToken(a_token) == AuthEnums.Valid) |
|||
{ |
|||
string token = a_token.Substring(6).Trim(); |
|||
var handler = new JwtSecurityTokenHandler(); |
|||
JwtSecurityToken jwtToken = (JwtSecurityToken)handler.ReadToken(token); |
|||
return jwtToken.Claims.First(claim => claim.Type == "BranchAccess").Value; |
|||
} |
|||
return null; |
|||
} |
|||
/// <summary>
|
|||
/// Return a specified list of branches a user has access if comparison mode is set otherwise returns only the
|
|||
/// active branch on the list
|
|||
/// </summary>
|
|||
/// <param name="a_token"></param>
|
|||
/// <returns></returns>
|
|||
public IEnumerable<string> BranchIds(string a_token) |
|||
{ |
|||
List<string> branchIds = new List<string>(); |
|||
if (ValidateToken(a_token) == AuthEnums.Valid) |
|||
{ |
|||
bool comparison = GetComparison(a_token)!.Value; |
|||
if (comparison) |
|||
{ |
|||
string? branches = GetAllBranch(a_token); |
|||
if (branches != null) |
|||
{ |
|||
string[] branchArray = branches!.Split(); |
|||
branchIds.AddRange(branchArray); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
string? baseBranch = GetBaseBranch(a_token); |
|||
branchIds.Add(baseBranch!); |
|||
} |
|||
} |
|||
return branchIds.AsEnumerable(); |
|||
} |
|||
|
|||
public async Task SetToken(string a_token, bool a_remember) |
|||
{ |
|||
if (a_remember) |
|||
{ |
|||
await m_localStorage.SetItemAsStringAsync("token", $"Bearer {a_token}"); |
|||
} |
|||
else |
|||
{ |
|||
await m_sessionStorage.SetItemAsStringAsync("token", $"Bearer {a_token}"); |
|||
} |
|||
} |
|||
|
|||
public async Task<string> GetToken() |
|||
{ |
|||
string token = await m_localStorage.GetItemAsStringAsync("token"); |
|||
if (String.IsNullOrEmpty(token)) |
|||
{ |
|||
token = await m_sessionStorage.GetItemAsStringAsync("token"); |
|||
} |
|||
return token; |
|||
} |
|||
|
|||
public async Task ClearToken() |
|||
{ |
|||
await m_localStorage.ClearAsync(); |
|||
await m_sessionStorage.ClearAsync(); |
|||
} |
|||
|
|||
public async Task<bool> IsTokenSet() |
|||
{ |
|||
return await m_localStorage.ContainKeyAsync("token") || await m_sessionStorage.ContainKeyAsync("token"); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,4 @@ |
|||
/* Shared classes can be referenced by both the Client and Server */ |
|||
public class Shared |
|||
{ |
|||
} |
Loading…
Reference in new issue