This commit is contained in:
2025-06-24 10:56:02 +02:00
parent a97df74ef4
commit 10c1435dba
35 changed files with 509 additions and 185 deletions

View File

@@ -350,13 +350,24 @@
if (Filter.ClearFilter)
return activities;
return activities.Where(x =>
(!Filter.Text.IsNullOrEmpty() && x.ActivityDescription != null && x.ActivityDescription.ContainsIgnoreCase(Filter.Text!)) &&
(x.ActivityTypeId != null && !Filter.Type.IsNullOrEmpty() && x.ActivityTypeId.Equals(Filter.Type)) &&
(x.ActivityResultId != null && !Filter.Result.IsNullOrEmpty() && x.ActivityResultId.Equals(Filter.Result)) &&
(x.UserName != null && !Filter.User.IsNullOrEmpty() && Filter.User!.Contains(x.UserName)) &&
(Filter.Category != null && x.Category.Equals(Filter.Category))
).ToList();
var filteredActivity = activities.AsQueryable();
filteredActivity = filteredActivity
.Where(x => Filter.Text.IsNullOrEmpty() || (x.ActivityDescription != null && x.ActivityDescription.ContainsIgnoreCase(Filter.Text!)));
filteredActivity = filteredActivity
.Where(x => Filter.Type.IsNullOrEmpty() || (x.ActivityTypeId != null && x.ActivityTypeId.Equals(Filter.Type)));
filteredActivity = filteredActivity
.Where(x => Filter.Result.IsNullOrEmpty() || (x.ActivityResultId != null && x.ActivityResultId.Equals(Filter.Result)));
filteredActivity = filteredActivity
.Where(x => Filter.User.IsNullOrEmpty() || (x.UserName != null && Filter.User!.Contains(x.UserName)));
filteredActivity = filteredActivity
.Where(x => Filter.Category == null || x.Category.Equals(Filter.Category));
return filteredActivity.ToList();
}
[JSInvokable]
@@ -511,7 +522,7 @@
}
private List<ActivityDTO> GetEventsForDay(DateTime day)
=> _eventsCache.TryGetValue(day.Date, out var events) ? events : new List<ActivityDTO>();
=> _eventsCache.TryGetValue(day.Date, out var events) ? events : [];
public void Dispose()
{

View File

@@ -71,12 +71,12 @@
gap: 0.2rem;
}
.week-day > div:first-child {
font-size: 0.8rem;
color: var(--mud-palette-primary);
margin-bottom: 0.2rem;
font-weight: 500;
}
.week-day > div:first-child {
font-size: 0.8rem;
color: var(--mud-palette-text-primary);
margin-bottom: 0.2rem;
font-weight: 500;
}
.day {
background: var(--mud-palette-surface);
@@ -85,13 +85,14 @@
cursor: pointer;
transition: background 0.3s ease, transform 0.2s ease;
font-size: 0.95rem;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
box-shadow: var(--custom-box-shadow);
width: 38px;
height: 38px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: var(--mud-palette-text-primary);
border: 1px solid var(--mud-palette-surface);
margin: 0 auto;
}
@@ -107,9 +108,9 @@
}
.day.selected {
background: var(--mud-palette-secondary);
border: 1px solid var(--mud-palette-secondary);
color: white;
background: var(--mud-palette-tertiary);
border: 1px solid var(--mud-palette-tertiary);
color: var(--mud-palette-secondary);
}
.day.today { border: 1px solid var(--mud-palette-primary); }
@@ -134,13 +135,13 @@
border-radius: 8px;
padding: 0.8rem;
margin-bottom: 0.5rem;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
box-shadow: var(--custom-box-shadow);
}
.toggle-month {
background: none;
border: none;
color: var(--mud-palette-primary);
color: var(--mud-palette-text-primary);
font-size: 1rem;
cursor: pointer;
}

View File

@@ -12,7 +12,7 @@ else
{
<div class="login-page">
<div class="container container-top-logo">
<span>SalesBook</span>
<img src="_content/Template.Shared/images/salesbook-marchio_vers.positiva.svg" class="logo" alt="sales book">
</div>
<div class="container container-login">
<div class="login-form-container">

View File

@@ -5,10 +5,8 @@
background: var(--mud-palette-surface);
}
.container-top-logo > span {
font-size: x-large;
font-weight: 900;
color: var(--mud-palette-primary)
.container-top-logo > .logo {
width: 50%;
}
.container-login > span {

View File

@@ -72,7 +72,15 @@ else
{
<div class="container-pers-rif">
<Virtualize Items="PersRif" Context="person">
<ContactCard Contact="person"/>
@{
var index = PersRif.IndexOf(person);
var isLast = index == PersRif.Count - 1;
}
<ContactCard Contact="person" />
@if (!isLast)
{
<div class="divider"></div>
}
</Virtualize>
</div>
}

View File

@@ -103,21 +103,19 @@
min-height: 25px;
}
.container-button ::deep .button-settings.infoText {
color: var(--mud-palette-info);
.container-button ::deep .button-settings.infoText { color: var(--mud-palette-info); }
.container-button ::deep .button-settings.green-icon .mud-icon-root {
border: 1px solid var(--mud-palette-success);
background: hsl(from var(--mud-palette-success-lighten) h s 95%);
color: var(--mud-palette-success-darken);
}
.container-button ::deep .button-settings.green-icon .mud-icon-root {
border: 1px solid var(--mud-palette-success);
background: hsl(from var(--mud-palette-success-lighten) h s 95%);
color: var(--mud-palette-success-darken);
}
.container-button ::deep .button-settings.red-icon .mud-icon-root {
border: 1px solid var(--mud-palette-error);
background: hsl(from var(--mud-palette-error-lighten) h s 95%);
color: var(--mud-palette-error-darken);
}
.container-button ::deep .button-settings.red-icon .mud-icon-root {
border: 1px solid var(--mud-palette-error);
background: hsl(from var(--mud-palette-error-lighten) h s 95%);
color: var(--mud-palette-error-darken);
}
.container-button ::deep .button-settings .mud-button-label {
justify-content: flex-start;
@@ -139,4 +137,11 @@
flex-direction: column;
gap: 1rem;
margin-bottom: 1rem;
box-shadow: var(--custom-box-shadow);
border-radius: 16px;
}
.container-pers-rif .divider {
margin: 0 0 0 3.5rem;
width: unset;
}

View File

@@ -7,15 +7,20 @@
<HeaderLayout Title="Contatti"/>
<div class="container search-box">
<div class="input-card clearButton">
<MudTextField T="string?" Placeholder="Cerca..." Variant="Variant.Text" @bind-Value="TextToFilter" OnDebounceIntervalElapsed="FilterUsers" DebounceInterval="500"/>
@if (!TextToFilter.IsNullOrEmpty())
{
<MudIconButton Class="closeIcon" Icon="@Icons.Material.Filled.Close" OnClick="() => FilterUsers(true)"/>
}
</div>
</div>
<div class="container users">
@if (GroupedUserList?.Count > 0)
{
<div class="input-card clearButton">
<MudTextField T="string?" Placeholder="Cerca..." Variant="Variant.Text" @bind-Value="TextToFilter" OnDebounceIntervalElapsed="FilterUsers" DebounceInterval="500"/>
<MudIconButton Class="closeIcon" Icon="@Icons.Material.Filled.Close" OnClick="() => FilterUsers(true)"/>
</div>
<Virtualize Items="FilteredGroupedUserList" Context="item">
@if (item.ShowHeader)
{
@@ -46,7 +51,7 @@
var sortedUsers = users
.Where(u => !string.IsNullOrWhiteSpace(u.RagSoc))
.OrderBy(u =>
.OrderBy(u =>
{
var firstChar = char.ToUpper(u.RagSoc[0]);
return char.IsLetter(firstChar) ? firstChar.ToString() : "ZZZ";
@@ -98,7 +103,14 @@
if (TextToFilter == null) return;
FilteredGroupedUserList = GroupedUserList.FindAll(x => x.User.RagSoc.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase));
FilteredGroupedUserList = GroupedUserList.FindAll(x =>
x.User.RagSoc.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase) ||
x.User.Indirizzo.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase) ||
(x.User.Telefono != null && x.User.Telefono.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase)) ||
(x.User.EMail != null && x.User.EMail.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase)) ||
x.User.PartIva.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase)
);
StateHasChanged();
}

View File

@@ -19,4 +19,15 @@
.letter-header {
border-bottom: 1px solid var(--card-border-color);
font-weight: bolder;
}
.search-box {
position: sticky;
top: 0;
background: var(--mud-palette-surface);
padding-bottom: .5rem;
}
.search-box .input-card {
margin: 0 !important;
}