Files
TaskHybrid/salesbook.Shared/Components/Pages/Commessa.razor
2025-09-09 11:43:07 +02:00

175 lines
6.3 KiB
Plaintext

@page "/commessa/{CodJcom}"
@page "/commessa/{CodJcom}/{RagSoc}"
@attribute [Authorize]
@using AutoMapper
@using salesbook.Shared.Components.Layout
@using salesbook.Shared.Components.Layout.Spinner
@using salesbook.Shared.Components.SingleElements
@using salesbook.Shared.Core.Dto
@using salesbook.Shared.Core.Dto.Activity
@using salesbook.Shared.Core.Dto.JobProgress
@using salesbook.Shared.Core.Dto.PageState
@using salesbook.Shared.Core.Entity
@using salesbook.Shared.Core.Interface
@using salesbook.Shared.Core.Interface.IntegryApi
@inject JobSteps JobSteps
@inject IManageDataService ManageData
@inject IIntegryApiService IntegryApiService
@inject IMapper Mapper
<HeaderLayout Title="@CodJcom" ShowProfile="false" Back="true" BackTo="Indietro"/>
@if (IsLoading)
{
<SpinnerLayout FullScreen="true"/>
}
else
{
<div class="container content">
@if (CommessaModel == null)
{
<NoDataAvailable Text="Nessuna commessa trovata"/>
}
else
{
<input type="radio" class="tab-toggle" name="tab-toggle" id="tab1" checked>
<input type="radio" class="tab-toggle" name="tab-toggle" id="tab2">
<input type="radio" class="tab-toggle" name="tab-toggle" id="tab3">
<div class="box">
<ul class="tab-list">
<li class="tab-item"><label class="tab-trigger" for="tab1">Avanzamento</label></li>
<li class="tab-item"><label class="tab-trigger" for="tab2">Attività</label></li>
<li class="tab-item"><label class="tab-trigger" for="tab3">Allegati</label></li>
</ul>
</div>
<!-- contenuti -->
<div class="tab-container">
<div class="tab-content">
@if (Steps != null)
{
<div class="timeline-container">
<div class="timeline">
@foreach (var step in Steps)
{
<div class="step">
<div class="@(step.Status!.Skip ? "circle skipped" : step.Status!.Progress ? "in-progress" : "circle completed")"></div>
<div class="label">
<div class="titleStep">@step.StepName</div>
@if (step.Date is not null)
{
<div class="subtitleStep">@($"{step.Date.Value:D}") @(step.Status!.Progress ? "(In corso...)" : "")</div>
}
</div>
</div>
}
</div>
</div>
}
</div>
<div class="tab-content">
@if (ActivityIsLoading)
{
<MudProgressLinear Color="Color.Primary" Indeterminate="true" Class="my-7" />
}
else
{
@if (ActivityList is { Count: > 0 })
{
<div class="contentFlex">
<Virtualize Items="ActivityList" Context="activity">
<ActivityCard ShowDate="true" Activity="activity" />
</Virtualize>
</div>
}
else
{
<NoDataAvailable Text="Nessuna attività trovata" />
}
}
</div>
<div class="tab-content">
@if (AttachedIsLoading)
{
<MudProgressLinear Color="Color.Primary" Indeterminate="true" Class="my-7" />
}
else
{
@if (ListAttached != null)
{
<div class="contentFlex">
<Virtualize Items="ListAttached" Context="attached">
<AttachCard Attached="attached" />
</Virtualize>
</div>
}
else
{
<NoDataAvailable Text="Nessun allegato presente" />
}
}
</div>
</div>
}
</div>
}
@code {
[Parameter] public string CodJcom { get; set; } = "";
[Parameter] public string RagSoc { get; set; } = "";
private List<CRMJobStepDTO>? Steps { get; set; }
private List<ActivityDTO> ActivityList { get; set; } = [];
private List<CRMAttachedResponseDTO>? ListAttached { get; set; }
private JtbComt? CommessaModel { get; set; }
private bool IsLoading { get; set; } = true;
private bool ActivityIsLoading { get; set; } = true;
private bool AttachedIsLoading { get; set; } = true;
protected override async Task OnInitializedAsync()
{
await LoadData();
}
private async Task LoadData()
{
CommessaModel = (await ManageData.GetTable<JtbComt>(x => x.CodJcom.Equals(CodJcom))).LastOrDefault();
Steps = JobSteps.Steps;
_ = LoadActivity();
_ = LoadAttached();
IsLoading = false;
}
private async Task LoadActivity()
{
await Task.Run(async () =>
{
var activities = await IntegryApiService.RetrieveActivity(new CRMRetrieveActivityRequestDTO { CodJcom = CodJcom });
ActivityList = Mapper.Map<List<ActivityDTO>>(activities)
.OrderBy(x =>
(x.EffectiveTime ?? x.EstimatedTime) ?? x.DataInsAct
).ToList();
});
ActivityIsLoading = false;
StateHasChanged();
}
private async Task LoadAttached()
{
await Task.Run(async () =>
{
ListAttached = await IntegryApiService.RetrieveAttached(CodJcom);
});
AttachedIsLoading = false;
StateHasChanged();
}
}