From 8c521dc81ef463b3d604baba62531e267c0f2838 Mon Sep 17 00:00:00 2001 From: MarcoE Date: Thu, 10 Jul 2025 12:40:30 +0200 Subject: [PATCH] Gestito elenco clienti e prospect in lista contatti --- .../Core/Services/ManageDataService.cs | 16 ++ salesbook.Maui/MauiProgram.cs | 1 + salesbook.Shared/Components/Pages/Users.razor | 100 ++++++++++--- .../Components/Pages/Users.razor.css | 6 +- .../BottomSheet/FilterUsers.razor | 140 +++++++++--------- .../SingleElements/Card/ContactCard.razor | 7 +- .../SingleElements/Card/UserCard.razor | 9 +- .../{UserForm.razor => ContactForm.razor} | 33 ++--- ...erForm.razor.css => ContactForm.razor.css} | 0 salesbook.Shared/Core/Dto/ContactDTO.cs | 60 ++++++++ salesbook.Shared/Core/Dto/FilterUserDTO.cs | 8 + salesbook.Shared/Core/Dto/UserDTO.cs | 13 -- salesbook.Shared/Core/Entity/StbUser.cs | 6 + .../Core/Helpers/MappingProfile.cs | 10 ++ salesbook.Shared/Core/Helpers/ModalHelpers.cs | 4 +- .../Core/Interface/IManageDataService.cs | 2 + .../Core/Services/ManageDataService.cs | 5 + 17 files changed, 284 insertions(+), 136 deletions(-) rename salesbook.Shared/Components/SingleElements/Modal/{UserForm.razor => ContactForm.razor} (86%) rename salesbook.Shared/Components/SingleElements/Modal/{UserForm.razor.css => ContactForm.razor.css} (100%) create mode 100644 salesbook.Shared/Core/Dto/ContactDTO.cs delete mode 100644 salesbook.Shared/Core/Dto/UserDTO.cs diff --git a/salesbook.Maui/Core/Services/ManageDataService.cs b/salesbook.Maui/Core/Services/ManageDataService.cs index a0470f6..d993686 100644 --- a/salesbook.Maui/Core/Services/ManageDataService.cs +++ b/salesbook.Maui/Core/Services/ManageDataService.cs @@ -12,6 +12,22 @@ public class ManageDataService(LocalDbService localDb, IMapper mapper) : IManage public Task> GetTable(Expression>? whereCond = null) where T : new() => localDb.Get(whereCond); + public async Task> GetContact() + { + var contactList = await localDb.Get(x => x.FlagStato.Equals("A")); + var prospectList = await localDb.Get(); + + // Mappa i contatti + var contactMapper = mapper.Map>(contactList); + + // Mappa i prospects + var prospectMapper = mapper.Map>(prospectList); + + contactMapper.AddRange(prospectMapper); + + return contactMapper; + } + public async Task> GetActivity(Expression>? whereCond = null) { var activities = await localDb.Get(whereCond); diff --git a/salesbook.Maui/MauiProgram.cs b/salesbook.Maui/MauiProgram.cs index 0c5db24..1ca8a57 100644 --- a/salesbook.Maui/MauiProgram.cs +++ b/salesbook.Maui/MauiProgram.cs @@ -1,3 +1,4 @@ +using AutoMapper; using CommunityToolkit.Maui; using CommunityToolkit.Mvvm.Messaging; using IntegryApiClient.MAUI; diff --git a/salesbook.Shared/Components/Pages/Users.razor b/salesbook.Shared/Components/Pages/Users.razor index fe47f91..1e3c576 100644 --- a/salesbook.Shared/Components/Pages/Users.razor +++ b/salesbook.Shared/Components/Pages/Users.razor @@ -2,26 +2,40 @@ @attribute [Authorize] @using salesbook.Shared.Components.Layout @using salesbook.Shared.Core.Dto -@using salesbook.Shared.Core.Entity @using salesbook.Shared.Core.Interface @using salesbook.Shared.Components.SingleElements.BottomSheet +@using salesbook.Shared.Components.Layout.Spinner +@using salesbook.Shared.Components.SingleElements +@using salesbook.Shared.Core.Entity @inject IManageDataService ManageData - +
- @if (GroupedUserList?.Count > 0) + @if (IsLoading) + { + + } + else if (GroupedUserList?.Count > 0) { @if (item.ShowHeader) @@ -31,31 +45,45 @@ } + else + { + + }
- + @code { private List GroupedUserList { get; set; } = []; private List FilteredGroupedUserList { get; set; } = []; - private string? TextToFilter { get; set; } + + private bool IsLoading { get; set; } //Filtri + private string? TextToFilter { get; set; } private bool OpenFilter { get; set; } private FilterUserDTO Filter { get; set; } = new(); + private string TypeUser { get; set; } = "all"; protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { await LoadData(); - StateHasChanged(); } } private async Task LoadData() { - var users = await ManageData.GetTable(x => x.FlagStato.Equals("A")); + IsLoading = true; + StateHasChanged(); + + var loggedUser = (await ManageData.GetTable(x => x.UserName.Equals(UserSession.User.Username))).Last(); + + if (loggedUser.UserCode != null) + Filter.Agenti = [loggedUser.UserCode]; + + var users = await ManageData.GetContact(); var sortedUsers = users .Where(u => !string.IsNullOrWhiteSpace(u.RagSoc)) @@ -88,11 +116,14 @@ } FilterUsers(); + + IsLoading = false; + StateHasChanged(); } private class UserDisplayItem { - public required AnagClie User { get; set; } + public required ContactDTO User { get; set; } public bool ShowHeader { get; set; } public string? HeaderLetter { get; set; } } @@ -104,23 +135,49 @@ if (clearFilter || string.IsNullOrWhiteSpace(TextToFilter)) { TextToFilter = null; - FilteredGroupedUserList = GroupedUserList; - return; } - var filter = TextToFilter.Trim(); var result = new List(); foreach (var item in GroupedUserList) { var user = item.User; - if ( - (!string.IsNullOrEmpty(user.RagSoc) && user.RagSoc.Contains(filter, StringComparison.OrdinalIgnoreCase)) || - (!string.IsNullOrEmpty(user.Indirizzo) && user.Indirizzo.Contains(filter, StringComparison.OrdinalIgnoreCase)) || - (!string.IsNullOrEmpty(user.Telefono) && user.Telefono.Contains(filter, StringComparison.OrdinalIgnoreCase)) || - (!string.IsNullOrEmpty(user.EMail) && user.EMail.Contains(filter, StringComparison.OrdinalIgnoreCase)) || - (!string.IsNullOrEmpty(user.PartIva) && user.PartIva.Contains(filter, StringComparison.OrdinalIgnoreCase)) - ) + + switch (TypeUser) + { + case "contact" when !user.IsContact: + case "prospect" when user.IsContact: + continue; + } + + var matchesFilter = + (Filter.Prov.IsNullOrEmpty() || user.Prov.Equals(Filter.Prov, StringComparison.OrdinalIgnoreCase)) && + (Filter.Citta.IsNullOrEmpty() || user.Citta.Contains(Filter.Citta!, StringComparison.OrdinalIgnoreCase)) && + (Filter.Nazione.IsNullOrEmpty() || user.Nazione.Contains(Filter.Nazione!, StringComparison.OrdinalIgnoreCase)) && + (Filter.Indirizzo.IsNullOrEmpty() || user.Indirizzo.Contains(Filter.Indirizzo!, StringComparison.OrdinalIgnoreCase)) && + (!Filter.ConAgente || user.CodVage is not null) && + (!Filter.SenzaAgente || user.CodVage is null) && + (Filter.Agenti.IsNullOrEmpty() || (user.CodVage != null && Filter.Agenti!.Contains(user.CodVage))); + + if (!matchesFilter) continue; + + if (!string.IsNullOrWhiteSpace(TextToFilter)) + { + var filter = TextToFilter.Trim(); + + var matchesText = + (!string.IsNullOrEmpty(user.RagSoc) && user.RagSoc.Contains(filter, StringComparison.OrdinalIgnoreCase)) || + (!string.IsNullOrEmpty(user.Indirizzo) && user.Indirizzo.Contains(filter, StringComparison.OrdinalIgnoreCase)) || + (!string.IsNullOrEmpty(user.Telefono) && user.Telefono.Contains(filter, StringComparison.OrdinalIgnoreCase)) || + (!string.IsNullOrEmpty(user.EMail) && user.EMail.Contains(filter, StringComparison.OrdinalIgnoreCase)) || + (!string.IsNullOrEmpty(user.PartIva) && user.PartIva.Contains(filter, StringComparison.OrdinalIgnoreCase)); + + if (matchesText) + { + result.Add(item); + } + } + else { result.Add(item); } @@ -135,9 +192,4 @@ StateHasChanged(); } - private void ApplyFilter() - { - - } - } \ No newline at end of file diff --git a/salesbook.Shared/Components/Pages/Users.razor.css b/salesbook.Shared/Components/Pages/Users.razor.css index b9d2533..06a5b75 100644 --- a/salesbook.Shared/Components/Pages/Users.razor.css +++ b/salesbook.Shared/Components/Pages/Users.razor.css @@ -28,6 +28,6 @@ padding-bottom: .5rem; } -.search-box .input-card { - margin: 0 !important; -} \ No newline at end of file +.search-box .input-card { margin: 0 !important; } + +.search-box .input-card ::deep .rounded-button { border-radius: 50%; } \ No newline at end of file diff --git a/salesbook.Shared/Components/SingleElements/BottomSheet/FilterUsers.razor b/salesbook.Shared/Components/SingleElements/BottomSheet/FilterUsers.razor index c69fd8e..e9792f3 100644 --- a/salesbook.Shared/Components/SingleElements/BottomSheet/FilterUsers.razor +++ b/salesbook.Shared/Components/SingleElements/BottomSheet/FilterUsers.razor @@ -1,6 +1,6 @@ -@using salesbook.Shared.Core.Dto +@using salesbook.Shared.Components.Pages +@using salesbook.Shared.Core.Dto @using salesbook.Shared.Core.Entity -@using salesbook.Shared.Core.Helpers.Enum @using salesbook.Shared.Core.Interface @inject IManageDataService manageData @@ -17,76 +17,74 @@
- Assegnata a - - + Con agente +
- Tipo + Senza agente - - @foreach (var type in ActivityType) - { - @type.ActivityTypeId - } - +
- Esito - - - @foreach (var result in ActivityResult) + Agente + + + @foreach (var user in Users) { - @result.ActivityResultId + @($"{user.UserCode} - {user.FullName}") }
+
+ +
+
+ +
- Categoria + +
- - @foreach (var category in CategoryList) - { - @category.ConvertToHumanReadable() - } - +
+ +
+ +
+ +
+ +
+
@@ -104,12 +102,7 @@ [Parameter] public FilterUserDTO Filter { get; set; } [Parameter] public EventCallback FilterChanged { get; set; } - private FilterActivityDTO FilterActivity { get; set; } = new(); - - private List ActivityResult { get; set; } = []; - private List ActivityType { get; set; } = []; private List Users { get; set; } = []; - private List CategoryList { get; set; } = []; protected override async Task OnParametersSetAsync() { @@ -117,19 +110,14 @@ await LoadData(); } - private string GetMultiSelectionUser(List selectedValues) - { - return $"{selectedValues.Count} Utent{(selectedValues.Count != 1 ? "i selezionati" : "e selezionato")}"; - } - private async Task LoadData() { - Users = await manageData.GetTable(); - ActivityResult = await manageData.GetTable(); - ActivityType = await manageData.GetTable(x => x.FlagTipologia.Equals("A")); - CategoryList = ActivityCategoryHelper.AllActivityCategory; + Users = await manageData.GetTable(x => x.KeyGroup == 5); + } - StateHasChanged(); + private string GetMultiSelectionAgente(List selectedValues) + { + return $"{selectedValues.Count} Agent{(selectedValues.Count != 1 ? "i selezionati" : "e selezionato")}"; } private void CloseBottomSheet() @@ -144,4 +132,24 @@ CloseBottomSheet(); } + private void OnAfterChangeAgenti() + { + if (Filter.Agenti == null || !Filter.Agenti.Any()) return; + + Filter.ConAgente = false; + Filter.SenzaAgente = false; + } + + private void OnAfterChangeAgente() + { + if (Filter.SenzaAgente) + { + Filter.ConAgente = false; + } + else if (Filter.ConAgente) + { + Filter.SenzaAgente = false; + } + } + } \ No newline at end of file diff --git a/salesbook.Shared/Components/SingleElements/Card/ContactCard.razor b/salesbook.Shared/Components/SingleElements/Card/ContactCard.razor index 1b77546..e09194f 100644 --- a/salesbook.Shared/Components/SingleElements/Card/ContactCard.razor +++ b/salesbook.Shared/Components/SingleElements/Card/ContactCard.razor @@ -18,11 +18,12 @@
@if (!Contact.NumCellulare.IsNullOrEmpty()) { - + } - @if (!Contact.EMail.IsNullOrEmpty()){ - + @if (!Contact.EMail.IsNullOrEmpty()) + { + }
diff --git a/salesbook.Shared/Components/SingleElements/Card/UserCard.razor b/salesbook.Shared/Components/SingleElements/Card/UserCard.razor index 561fbe2..6531cb6 100644 --- a/salesbook.Shared/Components/SingleElements/Card/UserCard.razor +++ b/salesbook.Shared/Components/SingleElements/Card/UserCard.razor @@ -1,3 +1,4 @@ +@using salesbook.Shared.Core.Dto @using salesbook.Shared.Core.Entity @using salesbook.Shared.Core.Interface @inject IManageDataService ManageData @@ -6,7 +7,7 @@
- +
@@ -47,14 +48,14 @@
@code { - [Parameter] public AnagClie User { get; set; } = new(); + [Parameter] public ContactDTO User { get; set; } = new(); private List? Commesse { get; set; } private bool IsLoading { get; set; } = true; private bool ShowSectionCommesse { get; set; } private void OpenUser() => - NavigationManager.NavigateTo($"/User/{User.CodAnag}"); + NavigationManager.NavigateTo($"/User/{User.CodContact}"); private async Task ShowCommesse() { @@ -62,7 +63,7 @@ if (ShowSectionCommesse) { - Commesse = await ManageData.GetTable(x => x.CodAnag.Equals(User.CodAnag)); + Commesse = await ManageData.GetTable(x => x.CodAnag.Equals(User.CodContact)); IsLoading = false; StateHasChanged(); return; diff --git a/salesbook.Shared/Components/SingleElements/Modal/UserForm.razor b/salesbook.Shared/Components/SingleElements/Modal/ContactForm.razor similarity index 86% rename from salesbook.Shared/Components/SingleElements/Modal/UserForm.razor rename to salesbook.Shared/Components/SingleElements/Modal/ContactForm.razor index 4a4f9b5..f1487aa 100644 --- a/salesbook.Shared/Components/SingleElements/Modal/UserForm.razor +++ b/salesbook.Shared/Components/SingleElements/Modal/ContactForm.razor @@ -1,7 +1,5 @@ -@using System.Text.RegularExpressions -@using salesbook.Shared.Core.Dto +@using salesbook.Shared.Core.Dto @using salesbook.Shared.Components.Layout -@using salesbook.Shared.Core.Entity @using salesbook.Shared.Core.Interface @using salesbook.Shared.Components.Layout.Overlay @inject IManageDataService ManageData @@ -10,7 +8,7 @@ - +
@@ -19,7 +17,7 @@ Placeholder="Azienda" Variant="Variant.Text" Lines="1" - @bind-Value="UserModel.RagSoc" + @bind-Value="ContactModel.RagSoc" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/> @@ -31,7 +29,7 @@ Placeholder="Partita IVA" Variant="Variant.Text" Lines="1" - @bind-Value="UserModel.PartIva" + @bind-Value="ContactModel.PartIva" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue" /> @@ -44,7 +42,7 @@ Placeholder="Indirizzo" Variant="Variant.Text" Lines="1" - @bind-Value="UserModel.Indirizzo" + @bind-Value="ContactModel.Indirizzo" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue" /> @@ -58,7 +56,7 @@ Placeholder="CAP" Variant="Variant.Text" Lines="1" - @bind-Value="UserModel.Cap" + @bind-Value="ContactModel.Cap" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue" /> @@ -72,7 +70,7 @@ Placeholder="Città" Variant="Variant.Text" Lines="1" - @bind-Value="UserModel.Citta" + @bind-Value="ContactModel.Citta" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue" /> @@ -86,7 +84,7 @@ Placeholder="Provincia" Variant="Variant.Text" Lines="1" - @bind-Value="UserModel.Prov" + @bind-Value="ContactModel.Prov" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue" /> @@ -100,7 +98,7 @@ Placeholder="Nazione" Variant="Variant.Text" Lines="1" - @bind-Value="UserModel.Nazione" + @bind-Value="ContactModel.Nazione" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue" /> @@ -152,15 +150,8 @@ [Parameter] public string? CodAnag { get; set; } [Parameter] public string? UserType { get; set; } - private UserDTO OriginalModel { get; set; } = new(); - private UserDTO UserModel { get; set; } = new(); - - private List ActivityResult { get; set; } = []; - private List ActivityType { get; set; } = []; - private List Users { get; set; } = []; - private List Commesse { get; set; } = []; - private List Clienti { get; set; } = []; - private List Pros { get; set; } = []; + private ContactDTO OriginalModel { get; set; } = new(); + private ContactDTO ContactModel { get; set; } = new(); private bool IsNew => CodAnag.IsNullOrEmpty(); private bool IsView => !NetworkService.IsNetworkAvailable(); @@ -199,7 +190,7 @@ { if (!IsNew) { - LabelSave = !OriginalModel.Equals(UserModel) ? "Aggiorna" : null; + LabelSave = !OriginalModel.Equals(ContactModel) ? "Aggiorna" : null; } } diff --git a/salesbook.Shared/Components/SingleElements/Modal/UserForm.razor.css b/salesbook.Shared/Components/SingleElements/Modal/ContactForm.razor.css similarity index 100% rename from salesbook.Shared/Components/SingleElements/Modal/UserForm.razor.css rename to salesbook.Shared/Components/SingleElements/Modal/ContactForm.razor.css diff --git a/salesbook.Shared/Core/Dto/ContactDTO.cs b/salesbook.Shared/Core/Dto/ContactDTO.cs new file mode 100644 index 0000000..a025ecb --- /dev/null +++ b/salesbook.Shared/Core/Dto/ContactDTO.cs @@ -0,0 +1,60 @@ +using System.Text.Json.Serialization; + +namespace salesbook.Shared.Core.Dto; + +public class ContactDTO +{ + [JsonPropertyName("codContact")] + public string CodContact { get; set; } + + [JsonPropertyName("isContact")] + public bool IsContact { get; set; } + + [JsonPropertyName("codVtip")] + public string? CodVtip { get; set; } + + [JsonPropertyName("codVage")] + public string? CodVage { get; set; } + + [JsonPropertyName("ragSoc")] + public string RagSoc { get; set; } + + [JsonPropertyName("indirizzo")] + public string Indirizzo { get; set; } + + [JsonPropertyName("cap")] + public string Cap { get; set; } + + [JsonPropertyName("citta")] + public string Citta { get; set; } + + [JsonPropertyName("prov")] + public string Prov { get; set; } + + [JsonPropertyName("nazione")] + public string Nazione { get; set; } + + [JsonPropertyName("telefono")] + public string? Telefono { get; set; } + + [JsonPropertyName("fax")] + public string Fax { get; set; } + + [JsonPropertyName("partIva")] + public string PartIva { get; set; } + + [JsonPropertyName("codFisc")] + public string CodFisc { get; set; } + + [JsonPropertyName("note")] + public string Note { get; set; } + + [JsonPropertyName("personaRif")] + public string PersonaRif { get; set; } + + [JsonPropertyName("eMail")] + public string? EMail { get; set; } + + [JsonPropertyName("eMailPec")] + public string EMailPec { get; set; } +} \ No newline at end of file diff --git a/salesbook.Shared/Core/Dto/FilterUserDTO.cs b/salesbook.Shared/Core/Dto/FilterUserDTO.cs index 1567c59..e4a65b8 100644 --- a/salesbook.Shared/Core/Dto/FilterUserDTO.cs +++ b/salesbook.Shared/Core/Dto/FilterUserDTO.cs @@ -2,4 +2,12 @@ public class FilterUserDTO { + public bool ConAgente { get; set; } + public bool SenzaAgente { get; set; } + public IEnumerable? Agenti { get; set; } + + public string? Indirizzo { get; set; } + public string? Citta { get; set; } + public string? Nazione { get; set; } + public string? Prov { get; set; } } diff --git a/salesbook.Shared/Core/Dto/UserDTO.cs b/salesbook.Shared/Core/Dto/UserDTO.cs deleted file mode 100644 index fc6b16e..0000000 --- a/salesbook.Shared/Core/Dto/UserDTO.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace salesbook.Shared.Core.Dto; - -public class UserDTO -{ - public string? CodAnag { get; set; } - public string? RagSoc { get; set; } - public string? Indirizzo { get; set; } - public string? Cap { get; set; } - public string? Citta { get; set; } - public string? Prov { get; set; } - public string? Nazione { get; set; } - public string? PartIva { get; set; } -} \ No newline at end of file diff --git a/salesbook.Shared/Core/Entity/StbUser.cs b/salesbook.Shared/Core/Entity/StbUser.cs index dc9828d..a7f74ff 100644 --- a/salesbook.Shared/Core/Entity/StbUser.cs +++ b/salesbook.Shared/Core/Entity/StbUser.cs @@ -11,4 +11,10 @@ public class StbUser [Column("full_name"), JsonPropertyName("fullName")] public string FullName { get; set; } + + [Column("key_group"), JsonPropertyName("keyGroup")] + public int KeyGroup { get; set; } + + [Column("user_code"), JsonPropertyName("userCode")] + public string? UserCode { get; set; } } \ No newline at end of file diff --git a/salesbook.Shared/Core/Helpers/MappingProfile.cs b/salesbook.Shared/Core/Helpers/MappingProfile.cs index 6d17d5f..ffe14ab 100644 --- a/salesbook.Shared/Core/Helpers/MappingProfile.cs +++ b/salesbook.Shared/Core/Helpers/MappingProfile.cs @@ -9,5 +9,15 @@ public class MappingProfile : Profile public MappingProfile() { CreateMap(); + + // Mapping da AnagClie a ContactDTO + CreateMap() + .ForMember(dest => dest.CodContact, opt => opt.MapFrom(src => src.CodAnag)) + .ForMember(dest => dest.IsContact, opt => opt.MapFrom(src => true)); + + // Mapping da PtbPros a ContactDTO + CreateMap() + .ForMember(dest => dest.CodContact, opt => opt.MapFrom(src => src.CodPpro)) + .ForMember(dest => dest.IsContact, opt => opt.MapFrom(src => false)); } } diff --git a/salesbook.Shared/Core/Helpers/ModalHelpers.cs b/salesbook.Shared/Core/Helpers/ModalHelpers.cs index 62f3a6a..e7be287 100644 --- a/salesbook.Shared/Core/Helpers/ModalHelpers.cs +++ b/salesbook.Shared/Core/Helpers/ModalHelpers.cs @@ -28,9 +28,9 @@ public class ModalHelpers public static async Task OpenUserForm(IDialogService dialog, string? codAnag) { - var modal = await dialog.ShowAsync( + var modal = await dialog.ShowAsync( "User form", - new DialogParameters + new DialogParameters { { x => x.CodAnag, codAnag } }, diff --git a/salesbook.Shared/Core/Interface/IManageDataService.cs b/salesbook.Shared/Core/Interface/IManageDataService.cs index e253d59..90a50ae 100644 --- a/salesbook.Shared/Core/Interface/IManageDataService.cs +++ b/salesbook.Shared/Core/Interface/IManageDataService.cs @@ -7,7 +7,9 @@ namespace salesbook.Shared.Core.Interface; public interface IManageDataService { Task> GetTable(Expression>? whereCond = null) where T : new(); + Task> GetActivity(Expression>? whereCond = null); + Task> GetContact(); Task InsertOrUpdate(T objectToSave); diff --git a/salesbook.Web/Core/Services/ManageDataService.cs b/salesbook.Web/Core/Services/ManageDataService.cs index 23e8adc..f726098 100644 --- a/salesbook.Web/Core/Services/ManageDataService.cs +++ b/salesbook.Web/Core/Services/ManageDataService.cs @@ -17,6 +17,11 @@ public class ManageDataService : IManageDataService throw new NotImplementedException(); } + public Task> GetContact() + { + throw new NotImplementedException(); + } + public Task InsertOrUpdate(T objectToSave) { throw new NotImplementedException();