Update gestione edit/clona/add/rem durata

This commit is contained in:
Samuele Locatelli
2022-01-04 17:15:55 +01:00
parent bb5d8271a1
commit f24dcb85a3
8 changed files with 144 additions and 42 deletions
+2 -2
View File
@@ -27,13 +27,13 @@
{
@if (@noData)
{
<AddRA NewItemCreated="ReportSelect" InizioPer="@DayDTO.DtRif.AddHours(StartHour)" IdxDip="@IdxDipSel"></AddRA>
<AddRA NewItemCreated="ReportSelected" InizioPer="@DayDTO.DtRif.AddHours(StartHour)" IdxDip="@IdxDipSel"></AddRA>
}
else if (@DayDTO != null && @DayDTO.ListRA != null)
{
@foreach (var item in ListRegAtt())
{
<RegAtt CurrData="item" Periodo="periodo" ListFasi="@ListFasi" ItemSelected="ReportSelect" IdxDipSel="@IdxDipSel"></RegAtt>
<RegAtt CurrData="item" Periodo="periodo" ListFasi="@ListFasi" IdxDipSel="@IdxDipSel" ItemCloned="ReportCloned" ItemSelected="ReportSelected" ItemUpdated="ReportUpdated"></RegAtt>
}
}
}
+20 -2
View File
@@ -42,6 +42,9 @@ namespace GPW.CORE.UI.Components
[Parameter]
public EventCallback<RegAttivitaModel> ItemSelected { get; set; }
[Parameter]
public EventCallback<RegAttivitaModel> ItemUpdated { get; set; }
private bool noData { get => DayDTO == null || DayDTO.ListRA == null || DayDTO.ListRA.Count == 0; }
private string TotLav
@@ -138,10 +141,25 @@ namespace GPW.CORE.UI.Components
/// <summary>
/// Indico item selezionato
/// </summary>
protected async void ReportSelect(RegAttivitaModel selRecord)
protected async void ReportSelected(RegAttivitaModel selRecord)
{
await ItemSelected.InvokeAsync(selRecord);
}
/// <summary>
/// Indico item selezionato
/// </summary>
protected async void ReportCloned()
{
await ItemSelected.InvokeAsync(null);
}
/// <summary>
/// Indico item aggiornato
/// </summary>
protected async void ReportUpdated()
{
await ItemUpdated.InvokeAsync(null);
}
}
}
+60 -18
View File
@@ -1,6 +1,7 @@
@using CORE.Data.DbModels
@using UI.Data
@inject GpwDataService GDataServ
@inject MessageService AppMServ
<div class="py-0 small flex-fill @blockCss" style="width: @widthPerc">
<div class="d-flex">
@@ -8,20 +9,38 @@
@if (@CurrData.IdxFase > 0)
{
@*<div class="px-1 text-left border border-secondary border-top-0 border-bottom-0 border-left-0 table-info" style="font-size: 0.7rem;">*@
<button @onclick="() => Edit()" class="px-1 text-center border border-secondary border-top-0 border-bottom-0 border-left-0 btn btn-info btn-sm" style="font-size: 0.72rem;">
@if (@CurrData.OreTot > 1)
{
<div>@CurrData.Inizio.ToString("HH:mm")</div>
<div>@CurrData.Fine.ToString("HH:mm")</div>
<div class="badge badge-dark">@($"{@CurrData.Durata.Hours}h {@CurrData.Durata.Minutes:00}'")</div>
}
else
{
<div>@CurrData.Inizio.ToString("HH")</div>
<div>@CurrData.Inizio.ToString("mm")</div>
<div class="badge badge-dark">@($"{CurrData.OreTot*60:N0}'")</div>
}
</button>
<div class="dropdown">
<button @onclick="() => Edit()" class="dropbtn px-1 text-center border border-secondary border-top-0 border-bottom-0 border-left-0 btn btn-info btn-sm" style="font-size: 0.72rem;">
@if (@CurrData.OreTot > 1)
{
<div>@CurrData.Inizio.ToString("HH:mm")</div>
<div>@CurrData.Fine.ToString("HH:mm")</div>
<div class="badge badge-dark">@($"{@CurrData.Durata.Hours}h {@CurrData.Durata.Minutes:00}'")</div>
}
else
{
<div>@CurrData.Inizio.ToString("HH")</div>
<div>@CurrData.Inizio.ToString("mm")</div>
<div class="badge badge-dark">@($"{CurrData.OreTot*60:N0}'")</div>
}
</button>
<div class="dropdown-content p-2">
<button @onclick="() => Edit()" class="btn btn-block btn-sm btn-info"><i class="fas fa-pencil-alt"></i> Edit</button>
<button @onclick="() => Clone()" class="btn btn-block btn-sm btn-info"><i class="far fa-clone"></i> Clone</button>
<div class="btn-group btn-group-sm w-100 py-2">
<button @onclick="() => AddTime(15)" class="btn btn-sm btn-success">+15'</button>
<button @onclick="() => AddTime(30)" class="btn btn-sm btn-success">+30'</button>
<button @onclick="() => AddTime(60)" class="btn btn-sm btn-success">+1h</button>
<button @onclick="() => AddTime(120)" class="btn btn-sm btn-success">+2h</button>
</div>
<div class="btn-group btn-group-sm w-100">
<button @onclick="() => AddTime(-15)" class="btn btn-sm btn-danger">-15'</button>
<button @onclick="() => AddTime(-30)" class="btn btn-sm btn-danger">-30'</button>
<button @onclick="() => AddTime(-60)" class="btn btn-sm btn-danger">-1h</button>
<button @onclick="() => AddTime(-120)" class="btn btn-sm btn-danger">-2h</button>
</div>
</div>
</div>
<div class="px-1 text-left textTrim flex-fill">
<div class="text-dark" title="@CurrData.FasiNav?.ProgettoNav?.ClienteNav?.RagSociale - @CurrData.FasiNav?.ProgettoNav?.NomeProj"><b>@(trimLine($"{CurrData.FasiNav?.ProgettoNav?.ClienteNav?.RagSociale}",65))</b> - @(trimLine($"{CurrData.FasiNav?.ProgettoNav?.NomeProj}",75))</div>
<div class="text-secondary" title="@CurrData.FasiNav?.DescrizioneFase">@(trimLine($"{CurrData.FasiNav?.DescrizioneFase}",130))</div>
@@ -29,12 +48,12 @@
</div>
@*<div class="pl-1 text-right">
<div>
<button class="btn btn-sm btn-outline-info" @onclick="() => Edit()"><i class="fas fa-edit"></i></button>
<button class="btn btn-sm btn-outline-info" @onclick="() => Edit()"><i class="fas fa-plus"></i></button>
</div>
<div>
<button class="btn btn-sm btn-outline-success" @onclick="() => Edit()"><i class="fas fa-magic"></i></button>
<button class="btn btn-sm btn-outline-success" @onclick="() => Edit()"><i class="fas fa-minus"></i></button>
</div>
</div>*@
</div>*@
}
else
{
@@ -60,9 +79,14 @@
[Parameter]
public List<AnagFasiModel> ListFasi { get; set; } = null!;
[Parameter]
public EventCallback<RegAttivitaModel> ItemCloned { get; set; }
[Parameter]
public EventCallback<RegAttivitaModel> ItemSelected { get; set; }
[Parameter]
public EventCallback<RegAttivitaModel> ItemUpdated { get; set; }
private int deltaTime = 0;
/// <summary>
/// Trim linea di testo secondo regole
@@ -133,6 +157,15 @@
await ItemSelected.InvokeAsync(CurrData);
}
/// <summary>
/// Indico item selezionato
/// </summary>
protected async void Clone()
{
AppMServ.clonedRA = CurrData;
await ItemCloned.InvokeAsync(CurrData);
}
/// <summary>
/// Indico item selezionato
/// </summary>
@@ -140,4 +173,13 @@
{
await ItemSelected.InvokeAsync(selRecord);
}
protected async void AddTime(int deltaMin)
{
// Aggiungo durata e salvo...
CurrData.Fine = CurrData.Fine.AddMinutes(deltaMin);
// salvo
await GDataServ.RegAttUpdate(CurrData);
await ItemUpdated.InvokeAsync(CurrData);
}
}
-18
View File
@@ -88,24 +88,6 @@
<button class="btn btn-primary" type="button"><i class="fas fa-angle-down"></i></button>
</div>
</div>
@*<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="far fa-clock"></i>
</span>
</div>
<div type="text" class="form-control" placeholder="durata..">@currRecord.Durata.TotalMinutes min</div>
<div class="input-group-append">
<button class="btn btn-primary" type="button">15'</button>
<button class="btn btn-danger" type="button">30'</button>
<button class="btn btn-danger" type="button">45'</button>
<button class="btn btn-primary" type="button"><i class="fas fa-redo-alt"></i></button>
<button class="btn btn-danger" type="button">1h</button>
<button class="btn btn-danger" type="button">2h</button>
<button class="btn btn-danger" type="button">4h</button>
<button class="btn btn-danger" type="button">8h</button>
</div>
</div>*@
<label class="small">Descrizione</label>
<div class="input-group">
<div class="input-group-prepend">
+1 -1
View File
@@ -55,7 +55,7 @@
@foreach (var currItem in ListRecords)
{
<div class="col-12">
<DayHoriz DayDTO="@currItem" StartHour="@startHour" EndHour="@endHour" ListFasi="@ListFasi" ItemSelected="ReportSelect" IdxDipSel="@IdxDipendente"></DayHoriz>
<DayHoriz DayDTO="@currItem" StartHour="@startHour" EndHour="@endHour" ListFasi="@ListFasi" ItemSelected="ReportSelect" ItemUpdated="ResetData" IdxDipSel="@IdxDipendente"></DayHoriz>
</div>
}
</div>
+27
View File
@@ -33,6 +33,33 @@ a,
.regionclicked {
fill: red;
}
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f1f1f1;
min-width: 16em;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content a:hover {
background-color: #ddd;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown:hover .dropbtn {
background-color: #3e8e41;
}
.textTrim {
white-space: nowrap;
overflow: hidden;
+33
View File
@@ -43,6 +43,39 @@ a, .btn-link {
}
.dropdown {
position: relative;
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f1f1f1;
min-width: 16em;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content a:hover {
background-color: #ddd;
}
.dropdown:hover .dropdown-content {
display: block;
}
.dropdown:hover .dropbtn {
background-color: #3e8e41;
}
.textTrim {
white-space: nowrap;
overflow: hidden;
+1 -1
View File
@@ -1 +1 @@
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');html,body{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;}h1:focus{outline:none;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rem;}.valid.modified:not([type=checkbox]){outline:1px solid #26b050;}.invalid{outline:1px solid #f00;}.validation-message{color:#f00;}.regionnotclicked{fill:white;}.regionclicked{fill:red;}.textTrim{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.max5Char{white-space:nowrap;width:10rem;overflow:hidden;text-overflow:ellipsis;}.max10Char{white-space:nowrap;width:10rem;overflow:hidden;text-overflow:ellipsis;}.max20Char{white-space:nowrap;width:20rem;overflow:hidden;text-overflow:ellipsis;}#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');html,body{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;}h1:focus{outline:none;}a,.btn-link{color:#0071c1;}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac;}.content{padding-top:1.1rem;}.valid.modified:not([type=checkbox]){outline:1px solid #26b050;}.invalid{outline:1px solid #f00;}.validation-message{color:#f00;}.regionnotclicked{fill:white;}.regionclicked{fill:red;}.dropdown{position:relative;display:inline-block;}.dropdown-content{display:none;position:absolute;background-color:#f1f1f1;min-width:16em;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);z-index:1;}.dropdown-content a{color:#000;padding:12px 16px;text-decoration:none;display:block;}.dropdown-content a:hover{background-color:#ddd;}.dropdown:hover .dropdown-content{display:block;}.dropdown:hover .dropbtn{background-color:#3e8e41;}.textTrim{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.max5Char{white-space:nowrap;width:10rem;overflow:hidden;text-overflow:ellipsis;}.max10Char{white-space:nowrap;width:10rem;overflow:hidden;text-overflow:ellipsis;}.max20Char{white-space:nowrap;width:20rem;overflow:hidden;text-overflow:ellipsis;}#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000;}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem;}.blazor-error-boundary{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem,#b32121;padding:1rem 1rem 1rem 3.7rem;color:#fff;}.blazor-error-boundary::after{content:"An error has occurred.";}