Primo sviluppo sincronizzazione e migliorie ui

This commit is contained in:
2025-05-19 16:47:21 +02:00
parent 6f08ba87be
commit 626408412b
66 changed files with 1824 additions and 91 deletions

View File

@@ -0,0 +1,15 @@
using Template.Shared.Core.Interface;
namespace Template.Maui.Core.Services;
public class FormFactor : IFormFactor
{
public string GetFormFactor()
{
return DeviceInfo.Idiom.ToString();
}
public string GetPlatform()
{
return DeviceInfo.Platform.ToString() + " - " + DeviceInfo.VersionString;
}
}

View File

@@ -0,0 +1,76 @@
using System.Linq.Expressions;
using SQLite;
using Template.Shared.Core.Entity;
namespace Template.Maui.Core.Services;
public class LocalDbService
{
private const string DB_NAME = "task_db.db3";
private readonly SQLiteAsyncConnection _connection;
public LocalDbService()
{
_connection = new SQLiteAsyncConnection(Path.Combine(FileSystem.AppDataDirectory, DB_NAME));
//Creazione tabelle database
_connection.CreateTableAsync<AnagClie>();
_connection.CreateTableAsync<JtbComt>();
_connection.CreateTableAsync<PtbPros>();
_connection.CreateTableAsync<PtbProsRif>();
_connection.CreateTableAsync<StbActivity>();
_connection.CreateTableAsync<VtbCliePersRif>();
_connection.CreateTableAsync<VtbDest>();
}
public async Task ResetDb()
{
try
{
await _connection.ExecuteAsync("DROP TABLE IF EXISTS anag_clie;");
await _connection.ExecuteAsync("DROP TABLE IF EXISTS jtb_comt;");
await _connection.ExecuteAsync("DROP TABLE IF EXISTS ptb_pros;");
await _connection.ExecuteAsync("DROP TABLE IF EXISTS ptb_pros_rif;");
await _connection.ExecuteAsync("DROP TABLE IF EXISTS stb_activity;");
await _connection.ExecuteAsync("DROP TABLE IF EXISTS vtb_clie_pers_rif;");
await _connection.ExecuteAsync("DROP TABLE IF EXISTS vtb_dest;");
await _connection.CreateTableAsync<AnagClie>();
await _connection.CreateTableAsync<JtbComt>();
await _connection.CreateTableAsync<PtbPros>();
await _connection.CreateTableAsync<PtbProsRif>();
await _connection.CreateTableAsync<StbActivity>();
await _connection.CreateTableAsync<VtbCliePersRif>();
await _connection.CreateTableAsync<VtbDest>();
Console.WriteLine("Database resettato con successo.");
}
catch (Exception ex)
{
Console.WriteLine($"Errore durante il reset del database: {ex.Message}");
throw;
}
}
public Task Insert<T>(List<T> entityList) =>
_connection.InsertAllAsync(entityList, typeof(T));
public async Task InsertOrUpdate<T>(List<T> entityList)
{
foreach (var entity in entityList)
{
var result = await _connection.UpdateAsync(entity);
if (result == 0)
{
await _connection.InsertAsync(entity);
}
}
}
public Task<List<T>> Get<T>(Expression<Func<T, bool>>? whereCond = null) where T : new() =>
whereCond is null
? _connection.Table<T>().ToListAsync()
: _connection.Table<T>().Where(whereCond).ToListAsync();
public List<T> Get<T>(string sql) where T : new() => _connection.QueryAsync<T>(sql).Result;
}

View File

@@ -0,0 +1,72 @@
using AutoMapper;
using System.Linq.Expressions;
using Template.Shared.Core.Dto;
using Template.Shared.Core.Entity;
using Template.Shared.Core.Helpers.Enum;
using Template.Shared.Core.Interface;
namespace Template.Maui.Core.Services;
public class ManageDataService(LocalDbService localDb, IMapper mapper) : IManageDataService
{
public Task<List<AnagClie>> GetAnagClie(Expression<Func<AnagClie, bool>>? whereCond = null) =>
localDb.Get(whereCond);
public Task<List<JtbComt>> GetJtbComt(Expression<Func<JtbComt, bool>>? whereCond = null) =>
localDb.Get(whereCond);
public Task<List<PtbPros>> GetPtbPros(Expression<Func<PtbPros, bool>>? whereCond = null) =>
localDb.Get(whereCond);
public Task<List<PtbProsRif>> GetPtbProsRif(Expression<Func<PtbProsRif, bool>>? whereCond = null) =>
localDb.Get(whereCond);
public Task<List<StbActivity>> GetStbActivity(Expression<Func<StbActivity, bool>>? whereCond = null) =>
localDb.Get(whereCond);
public Task<List<VtbCliePersRif>> GetVtbCliePersRif(Expression<Func<VtbCliePersRif, bool>>? whereCond = null) =>
localDb.Get(whereCond);
public Task<List<VtbDest>> GetVtbDest(Expression<Func<VtbDest, bool>>? whereCond = null) =>
localDb.Get(whereCond);
public async Task<List<ActivityDTO>> GetActivity(Expression<Func<StbActivity, bool>>? whereCond = null)
{
var activities = await localDb.Get(whereCond);
var codJcomList = activities
.Select(x => x.CodJcom)
.Where(x => !string.IsNullOrEmpty(x))
.Distinct()
.ToList();
var jtbComtList = await localDb.Get<JtbComt>(x => codJcomList.Contains(x.CodJcom));
var commesseDict = jtbComtList.ToDictionary(x => x.CodJcom, x => x.Descrizione);
var returnDto = activities
.Select(activity =>
{
var dto = mapper.Map<ActivityDTO>(activity);
if (activity.CodJcom != null)
{
dto.Category = ActivityCategoryEnum.Commessa;
}
else
{
dto.Category = activity.CodAnag != null ? ActivityCategoryEnum.Interna : ActivityCategoryEnum.Memo;
}
dto.Commessa = activity.CodJcom != null && commesseDict.TryGetValue(activity.CodJcom, out var descr)
? descr
: null;
return dto;
})
.ToList();
return returnDto;
}
public async Task ClearDb() =>
await localDb.ResetDb();
}

View File

@@ -0,0 +1,12 @@
using Template.Shared.Core.Interface;
namespace Template.Maui.Core.Services;
public class NetworkService : INetworkService
{
public bool IsNetworkAvailable()
{
return Connectivity.Current.NetworkAccess == NetworkAccess.Internet;
}
}

View File

@@ -0,0 +1,69 @@
using Template.Shared.Core.Interface;
namespace Template.Maui.Core.Services;
public class SyncDbService(IIntegryApiService integryApiService, LocalDbService localDb) : ISyncDbService
{
public async Task GetAndSaveActivity(string? dateFilter)
{
var allActivity = await integryApiService.GetActivity(dateFilter);
if (allActivity is not null)
if (dateFilter is null)
await localDb.Insert(allActivity);
else
await localDb.InsertOrUpdate(allActivity);
}
public async Task GetAndSaveCommesse(string? dateFilter)
{
var allCommesse = await integryApiService.GetAllCommesse(dateFilter);
if (allCommesse is not null)
if (dateFilter is null)
await localDb.Insert(allCommesse);
else
await localDb.InsertOrUpdate(allCommesse);
}
public async Task GetAndSaveProspect(string? dateFilter)
{
var taskSyncResponseDto = await integryApiService.GetProspect(dateFilter);
if (taskSyncResponseDto.PtbPros is not null)
if (dateFilter is null)
await localDb.Insert(taskSyncResponseDto.PtbPros);
else
await localDb.InsertOrUpdate(taskSyncResponseDto.PtbPros);
if (taskSyncResponseDto.PtbProsRif is not null)
if (dateFilter is null)
await localDb.Insert(taskSyncResponseDto.PtbProsRif);
else
await localDb.InsertOrUpdate(taskSyncResponseDto.PtbProsRif);
}
public async Task GetAndSaveClienti(string? dateFilter)
{
var taskSyncResponseDto = await integryApiService.GetAnagClie(dateFilter);
if (taskSyncResponseDto.AnagClie is not null)
if (dateFilter is null)
await localDb.Insert(taskSyncResponseDto.AnagClie);
else
await localDb.InsertOrUpdate(taskSyncResponseDto.AnagClie);
if (taskSyncResponseDto.VtbDest is not null)
if (dateFilter is null)
await localDb.Insert(taskSyncResponseDto.VtbDest);
else
await localDb.InsertOrUpdate(taskSyncResponseDto.VtbDest);
if (taskSyncResponseDto.VtbCliePersRif is not null)
if (dateFilter is null)
await localDb.Insert(taskSyncResponseDto.VtbCliePersRif);
else
await localDb.InsertOrUpdate(taskSyncResponseDto.VtbCliePersRif);
}
}