Update preliminare nuova gest ordini rev

This commit is contained in:
Samuele Locatelli
2023-09-04 08:12:26 +02:00
parent 4b0695ee9a
commit c0ce2a7449
15 changed files with 345 additions and 30 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>2.0.2309.0211</Version>
<Version>2.0.2309.0408</Version>
<Copyright>Egalware 2021+</Copyright>
</PropertyGroup>
+52 -8
View File
@@ -25,6 +25,50 @@ namespace SHERPA.BBM.CORE.Controllers
#region Public Methods
/// <summary>
/// Elenco movimenti x ordine dato suo ID
/// </summary>
/// <param name="OrdId"></param>
public List<AccMovModel> AccMovByOrd(int OrdId)
{
List<AccMovModel> dbResult = new List<AccMovModel>();
using (SHERPABBMContext dbCtx = new SHERPABBMContext(_configuration))
{
dbResult = dbCtx
.DbSetAccMov
.Where(x => (x.OrdId == OrdId))
//.Include(e => e.OrderNav)
//.Include(e => e.BillNav)
.OrderBy(x => x.AccMovId)
.ToList();
}
return dbResult;
}
/// <summary>
/// Elimina movimento associazione (Ord/Fatt) dato suo ID
/// </summary>
/// <param name="AccMovId"></param>
/// <returns></returns>
public bool AccMovDelete(int AccMovId)
{
bool done = false;
using (SHERPABBMContext dbCtx = new SHERPABBMContext(_configuration))
{
var item2del = dbCtx
.DbSetAccMov
.Where(x => x.AccMovId == AccMovId)
.FirstOrDefault();
if (item2del != null)
{
dbCtx.DbSetAccMov.Remove(item2del);
dbCtx.SaveChanges();
done = true;
}
}
return done;
}
/// <summary>
/// Aggiunge un nuovo item Basket
/// </summary>
@@ -209,7 +253,7 @@ namespace SHERPA.BBM.CORE.Controllers
using (SHERPABBMContext dbCtx = new SHERPABBMContext(_configuration))
{
dbResult = dbCtx
.DbSetBill2Ord
.DbSetAccMov
.Where(x => (x.IdxBillExt == IdxBillExt))
.OrderByDescending(x => x.AccMovId)
.ToList();
@@ -228,7 +272,7 @@ namespace SHERPA.BBM.CORE.Controllers
using (SHERPABBMContext dbCtx = new SHERPABBMContext(_configuration))
{
dbResult = dbCtx
.DbSetBill2Ord
.DbSetAccMov
.Where(x => (x.OrdId == OrdId))
.OrderByDescending(x => x.AccMovId)
.ToList();
@@ -249,13 +293,13 @@ namespace SHERPA.BBM.CORE.Controllers
try
{
var item2del = dbCtx
.DbSetBill2Ord
.DbSetAccMov
.Where(x => x.IdxBillExt == IdxBillExt)
.ToList();
// se trovato --> elimino
if (item2del != null)
{
dbCtx.DbSetBill2Ord.RemoveRange(item2del);
dbCtx.DbSetAccMov.RemoveRange(item2del);
dbCtx.SaveChanges();
}
done = true;
@@ -281,13 +325,13 @@ namespace SHERPA.BBM.CORE.Controllers
try
{
var item2del = dbCtx
.DbSetBill2Ord
.DbSetAccMov
.Where(x => x.OrdId == OrdId)
.ToList();
// se trovato --> elimino
if (item2del != null)
{
dbCtx.DbSetBill2Ord.RemoveRange(item2del);
dbCtx.DbSetAccMov.RemoveRange(item2del);
dbCtx.SaveChanges();
}
done = true;
@@ -2293,7 +2337,7 @@ namespace SHERPA.BBM.CORE.Controllers
//.Where(x => (x.DataIns.Year == anno || anno == 0))
//.Select(x => x.Importo)
//.Sum();
.DbSetBill2Ord
.DbSetAccMov
.Include(o => o.BillNav)
.Where(x => (x.BillNav.YearRef == anno || anno == 0))
.Sum(x => x.Amount);
@@ -2316,7 +2360,7 @@ namespace SHERPA.BBM.CORE.Controllers
//.Where(x => (x.DataIns.Year == anno || anno == 0))
//.Select(x => x.Incassato)
//.Sum();
.DbSetBill2Ord
.DbSetAccMov
.Include(o => o.BillNav)
.Where(x => (x.BillNav.YearRef == anno || anno == 0))
.Sum(x => x.Paid);
@@ -36,6 +36,7 @@ namespace SHERPA.BBM.CORE.DbModels
[Column("QtyOff")]
public double QtyOff { get; set; } = 1;
[NotMapped]
public double StdPrice
{
+1 -1
View File
@@ -55,7 +55,7 @@ namespace SHERPA.BBM.CORE
public virtual DbSet<BillingModel> DbSetBilling { get; set; }
public virtual DbSet<BillingExtModel> DbSetBillingExt { get; set; }
public virtual DbSet<CustDecodModel> DbSetCustDecod { get; set; }
public virtual DbSet<AccMovModel> DbSetBill2Ord { get; set; }
public virtual DbSet<AccMovModel> DbSetAccMov { get; set; }
public virtual DbSet<NegotTypeModel> DbSetNegotType { get; set; }
public virtual DbSet<vBasketsDataModel> DbSetBasketData { get; set; } = null!;
public virtual DbSet<vNegotiationsDataModel> DbSetNegotData { get; set; } = null!;
+91
View File
@@ -0,0 +1,91 @@
<div class="card shadow">
<div class="card-header bg-primary text-light">
<b>Dettaglio Movimenti</b>
</div>
<div class="card-body py-0">
<div class="row">
@if (CurrOrd == null)
{
<div class="col-12">
<LoadingData></LoadingData>
</div>
}
else
{
@if (ListRecords == null || ListRecords.Count == 0)
{
<div class="col-12">
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
</div>
}
else
{
<table class="table table-sm table-striped ">
<thead>
<tr>
@if (EnableEdit)
{
<th></th>
}
<th class="text-nowrap text-center">Ord</th>
<th class="text-nowrap text-center">Fatt</th>
<th class="text-right">Importo</th>
<th class="text-right">Pagato</th>
@if (EnableEdit)
{
<th></th>
}
</tr>
</thead>
<tbody>
@foreach (var record in ListRecords)
{
<tr class="@CheckSelect(record.AccMovId)">
@if (EnableEdit)
{
<td class="text-nowrap">
<button class="btn btn-sm btn-info disabled" @onclick="() => Edit(record)"><span class="fas fa-pen"></span></button>
</td>
}
<td class="text-nowrap text-center">
@if (record.IsOrdOk)
{
<i class="fas fa-certificate text-success" title="Ord OK"></i>
}
else
{
<i class="fas fa-certificate text-success" title="Manca Ord"></i>
}
</td>
<td class="text-nowrap text-center">
@if(record.IsBillOk)
{
<i class="fas fa-certificate text-success" title="Fatt OK"></i>
}
else
{
<i class="fas fa-certificate text-success" title="Manca Fatt"></i>
}
</td>
<td class="text-nowrap text-right">
<b>@record.Amount.ToString("C2")</b>
</td>
<td class="text-nowrap text-right">
@record.Paid.ToString("C2")
</td>
@if (EnableEdit)
{
<td class="text-right">
<button class="btn btn-sm btn-danger" @onclick="() => Delete(record)"><span class="oi oi-trash"></span></button>
</td>
}
</tr>
}
</tbody>
</table>
}
}
</div>
</div>
</div>
+107
View File
@@ -0,0 +1,107 @@
using global::Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using SHERPA.BBM.CORE.DbModels;
using SHERPA.BBM.UI.Data;
namespace SHERPA.BBM.UI.Components
{
public partial class AccMov
{
#region Public Properties
[Parameter]
public OrderModel? CurrOrd { get; set; } = null;
[Parameter]
public bool EnableEdit { get; set; } = true;
#endregion Public Properties
#region Public Methods
public string CheckSelect(int AccMovId)
{
string answ = "";
if (currItem != null)
{
try
{
answ = (currItem.AccMovId == AccMovId) ? "table-info" : "";
}
catch
{ }
}
return answ;
}
#endregion Public Methods
#region Protected Properties
protected bool IsLoading { get; set; } = false;
protected List<AccMovModel>? ListRecords { get; set; } = null;
#endregion Protected Properties
#region Protected Methods
protected async Task Delete(AccMovModel currRecord)
{
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler eliminare il record? ORD {currRecord.OrdId} | BILL {currRecord.IdxBillExt}' di {currRecord.Amount:C2}?"))
return;
await BBMService.AccMovDelete(currRecord.AccMovId);
await ReloadData();
}
protected void Edit(AccMovModel currRecord)
{
currItem = currRecord;
}
protected override async Task OnParametersSetAsync()
{
await ReloadData();
}
#endregion Protected Methods
#region Private Fields
private AccMovModel? currItem = null;
#endregion Private Fields
#region Private Properties
[Inject]
private BBM_EFService BBMService { get; set; } = null!;
[Inject]
private IJSRuntime JSRuntime { get; set; } = null!;
#endregion Private Properties
#region Private Methods
private async Task ReloadData()
{
IsLoading = true;
await Task.Delay(1);
if (CurrOrd != null)
{
ListRecords = await BBMService.AccMovByOrd(CurrOrd.OrdId);
}
else
{
ListRecords = new List<AccMovModel>();
}
IsLoading = false;
await Task.Delay(1);
}
#endregion Private Methods
}
}
+5 -4
View File
@@ -14,7 +14,9 @@
{
@if (ListRecords == null || ListRecords.Count == 0)
{
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
<div class="col-12">
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
</div>
}
else
{
@@ -45,12 +47,11 @@
{
<td class="text-nowrap">
<button class="btn btn-sm btn-info disabled" @onclick="() => Edit(record)"><span class="fas fa-pen"></span></button>
@* <button class="btn btn-sm btn-outline-info" @onclick="() => Move(record, 1)"><span class="oi oi-arrow-top"></span></button>&nbsp;<button class="btn btn-sm btn-outline-info" @onclick="() => Move(record, -1)"><span class="oi oi-arrow-bottom"></span></button> *@
</td>
}
<td>
<div>
@record.ItemNav.UM x <b>@record.QtyOff</b>
@record.ItemNav?.UM x <b>@record.QtyOff</b>
</div>
<div class="small">
prev: <b>@record.QtyPrev</b>
@@ -58,7 +59,7 @@
</td>
<td>
<div class="font-weight-bold">@record.Note</div>
<div class="small">@record.ItemNav.Descript</div>
<div class="small">@record.ItemNav?.Descript</div>
</td>
<td class="text-nowrap text-right">
<div>
-8
View File
@@ -60,14 +60,6 @@ namespace SHERPA.BBM.UI.Components
currItem = currRecord;
}
protected void Move(OrderResModel currRecord, int move)
{
#if false
BBMService.ResourceUpdateOrder(currRecord.ResourceId, move);
updateTable().ConfigureAwait(false);
#endif
}
protected override async Task OnParametersSetAsync()
{
await ReloadData();
+10 -3
View File
@@ -152,11 +152,18 @@ else
</td>
}
</tr>
@if (currItem != null && record.Equals(currItem))
@if (currItem != null && record.OrdId == currItem.OrdId)
{
<tr class="table-info">
<td colspan="10">
<OrdRes CurrOrd="currItem" EnableEdit="EnableRowEdit"></OrdRes>
<td colspan="9">
<div class="row">
<div class="col-6">
<OrdRes CurrOrd="currItem" EnableEdit="EnableRowEdit"></OrdRes>
</div>
<div class="col-6">
<AccMov CurrOrd="currItem" EnableEdit="EnableAccMovEdit"></AccMov>
</div>
</div>
</td>
</tr>
}
@@ -34,6 +34,8 @@ namespace SHERPA.BBM.UI.Components
[Parameter]
public bool EnableRowEdit { get; set; } = false;
[Parameter]
public bool EnableAccMovEdit { get; set; } = false;
[Parameter]
public bool ShowAll { get; set; } = true;
+1 -1
View File
@@ -48,7 +48,7 @@
</div>
</div>
<div class="card-body p-1">
<OrderList CurrFilter="CurrFilter" CurrPagInfo="CurrPagInfo" E_UpdateCount="SetCount" ShowAll="@ShowAll" EnableRowEdit="@EnableRowEdit" ShowDetails="@ShowDet" E_SelCustomerId="SetCustomer" E_SelBasketId="SetBasket" E_OrdId="SetOrd" E_DictSel="SaveDictSel"></OrderList>
<OrderList CurrFilter="CurrFilter" CurrPagInfo="CurrPagInfo" E_UpdateCount="SetCount" ShowAll="@ShowAll" EnableRowEdit="@EnableRowEdit" EnableAccMovEdit="@EnableAccMovEdit" ShowDetails="@ShowDet" E_SelCustomerId="SetCustomer" E_SelBasketId="SetBasket" E_OrdId="SetOrd" E_DictSel="SaveDictSel"></OrderList>
</div>
<div class="card-footer py-1">
<DataPager PageSize="numRecord" currPage="currPage" numRecordChanged="SetNumRec" numPageChanged="SetCurrPage" totalCount="totalCount" showLoading="isLoading" />
@@ -32,6 +32,8 @@ namespace SHERPA.BBM.UI.Components
[Parameter]
public bool EnableRowEdit { get; set; } = false;
[Parameter]
public bool EnableAccMovEdit { get; set; } = false;
[Parameter]
public bool ShowAll { get; set; } = true;
+70 -2
View File
@@ -52,6 +52,50 @@ namespace SHERPA.BBM.UI.Data
#region Public Methods
/// <summary>
/// Elenco movimenti x ordine dato suo ID
/// </summary>
/// <param name="OrdId"></param>
public Task<List<AccMovModel>> AccMovByOrd(int OrdId)
{
string source = "DB";
List<AccMovModel>? dbResult = new List<AccMovModel>();
string currKey = $"{rKeyOrderDet}:AccMov:{OrdId}";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
string? rawData = redisDb.StringGet(currKey);
if (!string.IsNullOrEmpty(rawData))
{
source = "REDIS";
dbResult = JsonConvert.DeserializeObject<List<AccMovModel>>(rawData);
}
else
{
dbResult = dbController.AccMovByOrd(OrdId);
rawData = JsonConvert.SerializeObject(dbResult, JSSettings);
redisDb.StringSet(currKey, rawData, LongCache);
}
if (dbResult == null)
{
dbResult = new List<AccMovModel>();
}
stopWatch.Stop();
LogDebug($"AccMovByOrd | {source} ", stopWatch.Elapsed);
return Task.FromResult(dbResult);
}
/// <summary>
/// Elimina movimento associazione (Ord/Fatt) dato suo ID
/// </summary>
/// <param name="AccMovId"></param>
/// <returns></returns>
public async Task<bool> AccMovDelete(int AccMovId)
{
bool answ = dbController.AccMovDelete(AccMovId);
await FlushRedisCache();
return answ;
}
public async Task BasketsAdd(BasketsModel newItem)
{
try
@@ -1519,7 +1563,31 @@ namespace SHERPA.BBM.UI.Data
/// <param name="OrdId"></param>
public Task<List<OrderResModel>> OrdResourcesByOrd(int OrdId)
{
return Task.FromResult(dbController.OrdResourcesByOrd(OrdId));
string source = "DB";
List<OrderResModel>? dbResult = new List<OrderResModel>();
string currKey = $"{rKeyOrderDet}:OrdRes:{OrdId}";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
//string? rawData = await redisDb.StringGetAsync(currKey);
string? rawData = redisDb.StringGet(currKey);
if (!string.IsNullOrEmpty(rawData))
{
source = "REDIS";
dbResult = JsonConvert.DeserializeObject<List<OrderResModel>>(rawData);
}
else
{
dbResult = dbController.OrdResourcesByOrd(OrdId);
rawData = JsonConvert.SerializeObject(dbResult, JSSettings);
redisDb.StringSet(currKey, rawData, LongCache);
}
if (dbResult == null)
{
dbResult = new List<OrderResModel>();
}
stopWatch.Stop();
LogDebug($"OrdResourcesByOrd | {source} ", stopWatch.Elapsed);
return Task.FromResult(dbResult);
}
/// <summary>
@@ -2006,8 +2074,8 @@ namespace SHERPA.BBM.UI.Data
private const string rKeyListSel = $"{redisBaseAddr}:Cache:ListSel";
private const string rKeyOrderDet = $"{redisBaseAddr}:Cache:OrderDet";
private const string rKeyOrders = $"{redisBaseAddr}:Cache:Orders";
private const string rKeyResoconti = $"{redisBaseAddr}:Cache:Resoconti";
private static IConfiguration _configuration = null!;
+1 -1
View File
@@ -13,7 +13,7 @@ else
<OrderFilt FilterUpdated="SetFilter" Title="Gestione Ordini" ShowMultiSel="false" SelCustId="SelCustId" SelBaskId="SelBaskId" SelYearRef="SelYear" SelDocId="SelDocId"></OrderFilt>
</div>
<div class="card-body p-1">
<OrdersCard CurrFilter="SelectData" ShowAll="true" EnableRowEdit="true" E_SelCustomerId="SetCustomer" E_SelBasketId="SetBasket"></OrdersCard>
<OrdersCard CurrFilter="SelectData" ShowAll="true" EnableRowEdit="true" EnableAccMovEdit="true" E_SelCustomerId="SetCustomer" E_SelBasketId="SetBasket"></OrdersCard>
</div>
</div>
}
+1 -1
View File
@@ -4,7 +4,7 @@
<TargetFramework>net6.0</TargetFramework>
<UserSecretsId>60fcdaab-6c1e-4bec-9d88-f7727ef1c12c</UserSecretsId>
<ApplicationIcon>wwwroot\favicon.ico</ApplicationIcon>
<Version>2.0.2309.0211</Version>
<Version>2.0.2309.0408</Version>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Copyright>Egalware 2021+</Copyright>