Aggiunta possibilità che dalla commessa viene selezionato il cliente
This commit is contained in:
@@ -20,17 +20,21 @@
|
|||||||
|
|
||||||
<MudDialog Class="customDialog-form">
|
<MudDialog Class="customDialog-form">
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
<HeaderLayout ShowProfile="false" Cancel="true" OnCancel="() => MudDialog.Cancel()" LabelSave="@LabelSave" OnSave="Save" Title="@(IsNew ? "Nuova" : $"{ActivityModel.ActivityId}")"/>
|
<HeaderLayout ShowProfile="false" Cancel="true" OnCancel="() => MudDialog.Cancel()" LabelSave="@LabelSave"
|
||||||
|
OnSave="Save" Title="@(IsNew ? "Nuova" : $"{ActivityModel.ActivityId}")"/>
|
||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="input-card">
|
<div class="input-card">
|
||||||
<MudTextField ReadOnly="IsView" T="string?" Placeholder="Descrizione" Variant="Variant.Text" Lines="3" @bind-Value="ActivityModel.ActivityDescription" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
<MudTextField ReadOnly="IsView" T="string?" Placeholder="Descrizione" Variant="Variant.Text" Lines="3"
|
||||||
|
@bind-Value="ActivityModel.ActivityDescription" @bind-Value:after="OnAfterChangeValue"
|
||||||
|
DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="input-card">
|
<div class="input-card">
|
||||||
<div class="form-container">
|
<div class="form-container">
|
||||||
<MudAutocomplete ReadOnly="IsView" T="string?" Placeholder="Cliente"
|
<MudAutocomplete ReadOnly="IsView" T="string?" Placeholder="Cliente"
|
||||||
SearchFunc="@SearchCliente" @bind-Value="ActivityModel.Cliente" @bind-Value:after="OnClienteChanged"
|
SearchFunc="@SearchCliente" @bind-Value="ActivityModel.Cliente"
|
||||||
|
@bind-Value:after="OnClienteChanged"
|
||||||
CoerceValue="true"/>
|
CoerceValue="true"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -46,7 +50,6 @@
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudAutocomplete
|
<MudAutocomplete
|
||||||
Disabled="ActivityModel.Cliente.IsNullOrEmpty()"
|
|
||||||
T="JtbComt?" ReadOnly="IsView"
|
T="JtbComt?" ReadOnly="IsView"
|
||||||
@bind-Value="SelectedComessa"
|
@bind-Value="SelectedComessa"
|
||||||
@bind-Value:after="OnCommessaSelectedAfter"
|
@bind-Value:after="OnCommessaSelectedAfter"
|
||||||
@@ -66,7 +69,10 @@
|
|||||||
<div class="form-container">
|
<div class="form-container">
|
||||||
<span>Inizio</span>
|
<span>Inizio</span>
|
||||||
|
|
||||||
<MudTextField ReadOnly="IsView" T="DateTime?" Format="s" Culture="CultureInfo.CurrentUICulture" InputType="InputType.DateTimeLocal" @bind-Value="ActivityModel.EstimatedTime" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
<MudTextField ReadOnly="IsView" T="DateTime?" Format="s" Culture="CultureInfo.CurrentUICulture"
|
||||||
|
InputType="InputType.DateTimeLocal" @bind-Value="ActivityModel.EstimatedTime"
|
||||||
|
@bind-Value:after="OnAfterChangeValue" DebounceInterval="500"
|
||||||
|
OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="divider"></div>
|
<div class="divider"></div>
|
||||||
@@ -74,7 +80,10 @@
|
|||||||
<div class="form-container">
|
<div class="form-container">
|
||||||
<span>Fine</span>
|
<span>Fine</span>
|
||||||
|
|
||||||
<MudTextField ReadOnly="IsView" T="DateTime?" Format="s" Culture="CultureInfo.CurrentUICulture" InputType="InputType.DateTimeLocal" @bind-Value="ActivityModel.EstimatedEndtime" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
<MudTextField ReadOnly="IsView" T="DateTime?" Format="s" Culture="CultureInfo.CurrentUICulture"
|
||||||
|
InputType="InputType.DateTimeLocal" @bind-Value="ActivityModel.EstimatedEndtime"
|
||||||
|
@bind-Value:after="OnAfterChangeValue" DebounceInterval="500"
|
||||||
|
OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="divider"></div>
|
<div class="divider"></div>
|
||||||
@@ -82,14 +91,31 @@
|
|||||||
<div class="form-container">
|
<div class="form-container">
|
||||||
<span class="disable-full-width">Avviso</span>
|
<span class="disable-full-width">Avviso</span>
|
||||||
|
|
||||||
<MudSelectExtended FullWidth="true" ReadOnly="@(IsView || ActivityModel.EstimatedTime == null)" T="int" Variant="Variant.Text" @bind-Value="ActivityModel.MinuteBefore" @bind-Value:after="OnAfterChangeTimeBefore" Class="customIcon-select" AdornmentIcon="@Icons.Material.Filled.Code">
|
<MudSelectExtended FullWidth="true" ReadOnly="@(IsView || ActivityModel.EstimatedTime == null)"
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="Nessuno" Value="-1">Nessuno</MudSelectItemExtended>
|
T="int" Variant="Variant.Text" @bind-Value="ActivityModel.MinuteBefore"
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="All'ora pianificata" Value="0">All'ora pianificata</MudSelectItemExtended>
|
@bind-Value:after="OnAfterChangeTimeBefore" Class="customIcon-select"
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="30 minuti prima" Value="30">30 minuti prima</MudSelectItemExtended>
|
AdornmentIcon="@Icons.Material.Filled.Code">
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="1 ora prima" Value="60">1 ora prima</MudSelectItemExtended>
|
<MudSelectItemExtended Class="custom-item-select" Text="Nessuno" Value="-1">
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="2 ore prima" Value="120">2 ore prima</MudSelectItemExtended>
|
Nessuno
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="1 giorno prima" Value="1440">1 giorno prima</MudSelectItemExtended>
|
</MudSelectItemExtended>
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="1 settimana prima" Value="10080">1 settimana prima</MudSelectItemExtended>
|
<MudSelectItemExtended Class="custom-item-select" Text="All'ora pianificata" Value="0">All'ora
|
||||||
|
pianificata
|
||||||
|
</MudSelectItemExtended>
|
||||||
|
<MudSelectItemExtended Class="custom-item-select" Text="30 minuti prima" Value="30">
|
||||||
|
30 minuti prima
|
||||||
|
</MudSelectItemExtended>
|
||||||
|
<MudSelectItemExtended Class="custom-item-select" Text="1 ora prima" Value="60">
|
||||||
|
1 ora prima
|
||||||
|
</MudSelectItemExtended>
|
||||||
|
<MudSelectItemExtended Class="custom-item-select" Text="2 ore prima" Value="120">
|
||||||
|
2 ore prima
|
||||||
|
</MudSelectItemExtended>
|
||||||
|
<MudSelectItemExtended Class="custom-item-select" Text="1 giorno prima" Value="1440">
|
||||||
|
1 giorno prima
|
||||||
|
</MudSelectItemExtended>
|
||||||
|
<MudSelectItemExtended Class="custom-item-select" Text="1 settimana prima" Value="10080">
|
||||||
|
1 settimana prima
|
||||||
|
</MudSelectItemExtended>
|
||||||
</MudSelectExtended>
|
</MudSelectExtended>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -132,10 +158,14 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudSelectExtended ReadOnly="IsView" FullWidth="true" T="string?" Variant="Variant.Text" @bind-Value="ActivityModel.ActivityTypeId" @bind-Value:after="OnAfterChangeValue" Class="customIcon-select" AdornmentIcon="@Icons.Material.Filled.Code">
|
<MudSelectExtended ReadOnly="IsView" FullWidth="true" T="string?" Variant="Variant.Text"
|
||||||
|
@bind-Value="ActivityModel.ActivityTypeId"
|
||||||
|
@bind-Value:after="OnAfterChangeValue" Class="customIcon-select"
|
||||||
|
AdornmentIcon="@Icons.Material.Filled.Code">
|
||||||
@foreach (var type in ActivityType)
|
@foreach (var type in ActivityType)
|
||||||
{
|
{
|
||||||
<MudSelectItemExtended Class="custom-item-select" Value="@type.ActivityTypeId">@type.ActivityTypeId</MudSelectItemExtended>
|
<MudSelectItemExtended Class="custom-item-select"
|
||||||
|
Value="@type.ActivityTypeId">@type.ActivityTypeId</MudSelectItemExtended>
|
||||||
}
|
}
|
||||||
</MudSelectExtended>
|
</MudSelectExtended>
|
||||||
}
|
}
|
||||||
@@ -146,17 +176,23 @@
|
|||||||
<div class="form-container" @onclick="OpenSelectEsito">
|
<div class="form-container" @onclick="OpenSelectEsito">
|
||||||
<span class="disable-full-width">Esito</span>
|
<span class="disable-full-width">Esito</span>
|
||||||
|
|
||||||
<MudSelectExtended ReadOnly="true" FullWidth="true" T="string?" Variant="Variant.Text" @bind-Value="ActivityModel.ActivityResultId" @bind-Value:after="OnAfterChangeValue" Class="customIcon-select" AdornmentIcon="@Icons.Material.Filled.Code">
|
<MudSelectExtended ReadOnly="true" FullWidth="true" T="string?" Variant="Variant.Text"
|
||||||
|
@bind-Value="ActivityModel.ActivityResultId"
|
||||||
|
@bind-Value:after="OnAfterChangeValue" Class="customIcon-select"
|
||||||
|
AdornmentIcon="@Icons.Material.Filled.Code">
|
||||||
@foreach (var result in ActivityResult)
|
@foreach (var result in ActivityResult)
|
||||||
{
|
{
|
||||||
<MudSelectItemExtended Class="custom-item-select" Value="@result.ActivityResultId">@result.ActivityResultId</MudSelectItemExtended>
|
<MudSelectItemExtended Class="custom-item-select"
|
||||||
|
Value="@result.ActivityResultId">@result.ActivityResultId</MudSelectItemExtended>
|
||||||
}
|
}
|
||||||
</MudSelectExtended>
|
</MudSelectExtended>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="input-card">
|
<div class="input-card">
|
||||||
<MudTextField ReadOnly="IsView" T="string?" Placeholder="Note" Variant="Variant.Text" Lines="4" @bind-Value="ActivityModel.Note" @bind-Value:after="OnAfterChangeValue" DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
<MudTextField ReadOnly="IsView" T="string?" Placeholder="Note" Variant="Variant.Text" Lines="4"
|
||||||
|
@bind-Value="ActivityModel.Note" @bind-Value:after="OnAfterChangeValue"
|
||||||
|
DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="container-chip-attached">
|
<div class="container-chip-attached">
|
||||||
@@ -166,13 +202,15 @@
|
|||||||
{
|
{
|
||||||
@if (item.p.Type == AttachedDTO.TypeAttached.Position)
|
@if (item.p.Type == AttachedDTO.TypeAttached.Position)
|
||||||
{
|
{
|
||||||
<MudChip T="string" Icon="@Icons.Material.Rounded.LocationOn" Color="Color.Success" OnClick="() => OpenPosition(item.p)" OnClose="() => OnRemoveAttached(item.index)">
|
<MudChip T="string" Icon="@Icons.Material.Rounded.LocationOn" Color="Color.Success"
|
||||||
|
OnClick="() => OpenPosition(item.p)" OnClose="() => OnRemoveAttached(item.index)">
|
||||||
@item.p.Description
|
@item.p.Description
|
||||||
</MudChip>
|
</MudChip>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudChip T="string" Color="Color.Default" OnClick="() => OpenAttached(item.p)" OnClose="() => OnRemoveAttached(item.index)">
|
<MudChip T="string" Color="Color.Default" OnClick="() => OpenAttached(item.p)"
|
||||||
|
OnClose="() => OnRemoveAttached(item.index)">
|
||||||
@item.p.Name
|
@item.p.Name
|
||||||
</MudChip>
|
</MudChip>
|
||||||
}
|
}
|
||||||
@@ -183,7 +221,7 @@
|
|||||||
{
|
{
|
||||||
foreach (var file in ActivityFileList)
|
foreach (var file in ActivityFileList)
|
||||||
{
|
{
|
||||||
<MudChip T="string" OnClick="() => OpenAttached(file.Id, file.FileName)" OnClose="() => DeleteAttach(file)" Color="Color.Default">
|
<MudChip T="string" OnClick="() => OpenAttached(file.Id, file.FileName)" Color="Color.Default">
|
||||||
@file.FileName
|
@file.FileName
|
||||||
</MudChip>
|
</MudChip>
|
||||||
}
|
}
|
||||||
@@ -246,7 +284,8 @@
|
|||||||
|
|
||||||
<SaveOverlay VisibleOverlay="VisibleOverlay" SuccessAnimation="SuccessAnimation"/>
|
<SaveOverlay VisibleOverlay="VisibleOverlay" SuccessAnimation="SuccessAnimation"/>
|
||||||
|
|
||||||
<SelectEsito @bind-IsSheetVisible="OpenEsito" @bind-ActivityModel="ActivityModel" @bind-ActivityModel:after="OnAfterChangeEsito"/>
|
<SelectEsito @bind-IsSheetVisible="OpenEsito" @bind-ActivityModel="ActivityModel"
|
||||||
|
@bind-ActivityModel:after="OnAfterChangeEsito"/>
|
||||||
|
|
||||||
<AddMemo @bind-IsSheetVisible="OpenAddMemo"/>
|
<AddMemo @bind-IsSheetVisible="OpenAddMemo"/>
|
||||||
|
|
||||||
@@ -400,25 +439,7 @@
|
|||||||
SelectedUser = Users.FindLast(x => x.UserName.Equals(ActivityModel.UserName));
|
SelectedUser = Users.FindLast(x => x.UserName.Equals(ActivityModel.UserName));
|
||||||
|
|
||||||
if (!IsNew && Id != null)
|
if (!IsNew && Id != null)
|
||||||
{
|
|
||||||
ActivityFileList = await IntegryApiService.GetActivityFile(Id);
|
ActivityFileList = await IntegryApiService.GetActivityFile(Id);
|
||||||
if (ActivityModel.IdPosizione != null)
|
|
||||||
{
|
|
||||||
ActivityModel.Position = await IntegryApiService.RetrievePosition(ActivityModel.IdPosizione.Value);
|
|
||||||
CanAddPosition = false;
|
|
||||||
|
|
||||||
AttachedList ??= [];
|
|
||||||
AttachedList.Add(
|
|
||||||
new AttachedDTO
|
|
||||||
{
|
|
||||||
Name = ActivityModel.Position.Description!,
|
|
||||||
Lat = ActivityModel.Position.Lat,
|
|
||||||
Lng = ActivityModel.Position.Lng,
|
|
||||||
Type = AttachedDTO.TypeAttached.Position
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ActivityResult = await ManageData.GetTable<StbActivityResult>();
|
ActivityResult = await ManageData.GetTable<StbActivityResult>();
|
||||||
Clienti = await ManageData.GetClienti(new WhereCondContact { FlagStato = "A" });
|
Clienti = await ManageData.GetClienti(new WhereCondContact { FlagStato = "A" });
|
||||||
@@ -440,18 +461,29 @@
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadCommesse()
|
private async Task LoadCommesse(string searchValue)
|
||||||
{
|
{
|
||||||
if (_lastLoadedCodAnag == ActivityModel.CodAnag) return;
|
if (_lastLoadedCodAnag == ActivityModel.CodAnag && searchValue.IsNullOrEmpty()) return;
|
||||||
|
|
||||||
|
if (ActivityModel.CodAnag == null)
|
||||||
|
{
|
||||||
|
Commesse = await ManageData.GetTable<JtbComt>(x =>
|
||||||
|
x.CodJcom.Contains(searchValue) ||
|
||||||
|
x.Descrizione.Contains(searchValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Commesse = await ManageData.GetTable<JtbComt>(x => x.CodAnag == ActivityModel.CodAnag);
|
||||||
|
}
|
||||||
|
|
||||||
Commesse = await ManageData.GetTable<JtbComt>(x => x.CodAnag == ActivityModel.CodAnag);
|
|
||||||
Commesse = Commesse.OrderByDescending(x => x.CodJcom).ToList();
|
Commesse = Commesse.OrderByDescending(x => x.CodJcom).ToList();
|
||||||
_lastLoadedCodAnag = ActivityModel.CodAnag;
|
_lastLoadedCodAnag = ActivityModel.CodAnag;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IEnumerable<JtbComt>> SearchCommesseAsync(string value, CancellationToken token)
|
private async Task<IEnumerable<JtbComt>> SearchCommesseAsync(string value, CancellationToken token)
|
||||||
{
|
{
|
||||||
await LoadCommesse();
|
await LoadCommesse(value);
|
||||||
if (Commesse.IsNullOrEmpty()) return [];
|
if (Commesse.IsNullOrEmpty()) return [];
|
||||||
|
|
||||||
IEnumerable<JtbComt> list;
|
IEnumerable<JtbComt> list;
|
||||||
@@ -527,18 +559,37 @@
|
|||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OnCommessaSelectedAfter()
|
private void OnCommessaSelectedAfter()
|
||||||
{
|
{
|
||||||
var com = SelectedComessa;
|
var com = SelectedComessa;
|
||||||
if (com != null)
|
if (com != null)
|
||||||
{
|
{
|
||||||
ActivityModel.CodJcom = com.CodJcom;
|
ActivityModel.CodJcom = com.CodJcom;
|
||||||
ActivityModel.Commessa = com;
|
ActivityModel.Commessa = com;
|
||||||
|
|
||||||
|
if (com.CodAnag != null)
|
||||||
|
{
|
||||||
|
ActivityModel.CodAnag = com.CodAnag;
|
||||||
|
ActivityModel.Cliente = Clienti
|
||||||
|
.Where(x => x.CodAnag != null && x.CodAnag.Equals(com.CodAnag))
|
||||||
|
.Select(x => x.RagSoc)
|
||||||
|
.FirstOrDefault() ?? Pros
|
||||||
|
.Where(x => x.CodPpro != null && x.CodPpro.Equals(com.CodAnag))
|
||||||
|
.Select(x => x.RagSoc)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ActivityModel.CodAnag = null;
|
||||||
|
ActivityModel.Cliente = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ActivityModel.CodJcom = null;
|
ActivityModel.CodJcom = null;
|
||||||
ActivityModel.Commessa = null;
|
ActivityModel.Commessa = null;
|
||||||
|
ActivityModel.CodAnag = null;
|
||||||
|
ActivityModel.Cliente = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
OnAfterChangeValue();
|
OnAfterChangeValue();
|
||||||
@@ -700,33 +751,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task DeleteAttach(ActivityFileDto file)
|
|
||||||
{
|
|
||||||
Snackbar.Clear();
|
|
||||||
|
|
||||||
if (ActivityFileList == null) return;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ActivityFileList.Remove(file);
|
|
||||||
StateHasChanged();
|
|
||||||
|
|
||||||
await IntegryApiService.DeleteFile(ActivityModel.ActivityId!, file.FileName);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
ActivityFileList.Add(file);
|
|
||||||
StateHasChanged();
|
|
||||||
|
|
||||||
Snackbar.Add("Impossibile eliminare il file", Severity.Error);
|
|
||||||
Console.WriteLine($"Impossibile eliminare il file: {ex.Message}");
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Snackbar.Add($"{file.FileName} eliminato con successo", Severity.Info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task OpenAttached(AttachedDTO attached)
|
private async Task OpenAttached(AttachedDTO attached)
|
||||||
{
|
{
|
||||||
if (attached is { FileContent: not null, MimeType: not null })
|
if (attached is { FileContent: not null, MimeType: not null })
|
||||||
|
|||||||
18
salesbook.Shared/Core/Entity/StbActivityTyper.cs
Normal file
18
salesbook.Shared/Core/Entity/StbActivityTyper.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace salesbook.Shared.Core.Entity;
|
||||||
|
|
||||||
|
public class StbActivityTyper
|
||||||
|
{
|
||||||
|
[JsonPropertyName("activityTypeId")]
|
||||||
|
public string? ActivityTypeId { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("activityTypeDescription")]
|
||||||
|
public string? ActivityTypeDescription { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("flagTipologia")]
|
||||||
|
public string? FlagTipologia { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("idRiga")]
|
||||||
|
public int IdRiga { get; set; }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user