This commit is contained in:
2021-12-30 01:01:59 +00:00
parent 1645b7d667
commit f8d47551ee
18 changed files with 320 additions and 128 deletions

View File

@@ -70,7 +70,7 @@ namespace AyaNova.Biz
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null);
await HandlePotentialNotificationEvent(AyaEvent.Created, newObject);
if (populateDisplayFields)
await SetDisplayFields(newObject, false);
await PopulateVizFields(newObject, false);
return newObject;
}
}
@@ -84,7 +84,7 @@ namespace AyaNova.Biz
{
var ret = await ct.PurchaseOrder.Include(z => z.Items).AsNoTracking().SingleOrDefaultAsync(z => z.Id == id);
if (populateDisplayFields)
await SetDisplayFields(ret, false);
await PopulateVizFields(ret, false);
if (logTheGetEvent && ret != null)
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
@@ -94,7 +94,7 @@ namespace AyaNova.Biz
////////////////////////////////////////////////////////////////////////////////////////////////
//DISPLAY FIELDS
//
private async Task SetDisplayFields(PurchaseOrder po, bool forReporting)
private async Task PopulateVizFields(PurchaseOrder po, bool forReporting)
{
//NOTE: This expects to run AFTER bizActions have been performed
if (po == null) return;
@@ -112,63 +112,115 @@ namespace AyaNova.Biz
if (po.DropShipToCustomerId != null)
{
var ds = await ct.Customer.AsNoTracking().Where(x => x.Id == po.DropShipToCustomerId).FirstOrDefaultAsync();
var pid = po.DropShipToCustomerId;
if (!vc.Has("custname", po.DropShipToCustomerId))
{
var ds = await ct.Customer.AsNoTracking().Where(x => x.Id == pid).FirstOrDefaultAsync();
vc.Add(ds.Name, "custname", pid);
vc.Add(ds.Address, "custaddr", pid);
vc.Add(ds.City, "custcity", pid);
vc.Add(ds.Region, "custregion", pid);
vc.Add(ds.Country, "custcountry", pid);
vc.Add(ds.Latitude.ToString(), "custlat", pid);
vc.Add(ds.Longitude.ToString(), "custlong", pid);
vc.Add(ds.PostAddress, "custpostaddr", pid);
vc.Add(ds.PostCity, "custpostcity", pid);
vc.Add(ds.PostRegion, "custpostregion", pid);
vc.Add(ds.PostCountry, "custpostcountry", pid);
vc.Add(ds.PostCode, "custpostcode", pid);
vc.Add(ds.Phone1, "custp1", pid);
vc.Add(ds.Phone2, "custp2", pid);
vc.Add(ds.Phone3, "custp3", pid);
vc.Add(ds.Phone4, "custp4", pid);
vc.Add(ds.Phone5, "custp5", pid);
vc.Add(ds.EmailAddress, "custemail", pid);
}
po.DropShipToCustomerViz = ds.Name;
po.DropShipToCustomerViz = vc.Get("custname", pid);
if (forReporting)
{
po.DropShipToCustomerAddressViz = ds.Address;
po.DropShipToCustomerCityViz = ds.City;
po.DropShipToCustomerRegionViz = ds.Region;
po.DropShipToCustomerCountryViz = ds.Country;
po.DropShipToCustomerLatitudeViz = ds.Latitude;
po.DropShipToCustomerLongitudeViz = ds.Longitude;
po.DropShipToCustomerPostAddressViz = ds.PostAddress;
po.DropShipToCustomerPostCityViz = ds.PostCity;
po.DropShipToCustomerPostRegionViz = ds.PostRegion;
po.DropShipToCustomerPostCountryViz = ds.PostCountry;
po.DropShipToCustomerPostCodeViz = ds.PostCode;
po.DropShipToCustomerPhone1Viz = ds.Phone1;
po.DropShipToCustomerPhone2Viz = ds.Phone2;
po.DropShipToCustomerPhone3Viz = ds.Phone3;
po.DropShipToCustomerPhone4Viz = ds.Phone4;
po.DropShipToCustomerPhone5Viz = ds.Phone5;
po.DropShipToCustomerEmailAddressViz = ds.EmailAddress;
po.DropShipToCustomerAddressViz = vc.Get("custaddr", pid);
po.DropShipToCustomerCityViz = vc.Get("custcity", pid);
po.DropShipToCustomerRegionViz = vc.Get("custregion", pid);
po.DropShipToCustomerCountryViz = vc.Get("custcountry", pid);
po.DropShipToCustomerLatitudeViz = vc.GetAsDecimal("custlat", pid);
po.DropShipToCustomerLongitudeViz = vc.GetAsDecimal("custlong", pid);
po.DropShipToCustomerPostAddressViz = vc.Get("custpostaddr", pid);
po.DropShipToCustomerPostCityViz = vc.Get("custpostcity", pid);
po.DropShipToCustomerPostRegionViz = vc.Get("custpostregion", pid);
po.DropShipToCustomerPostCountryViz = vc.Get("custpostcountry", pid);
po.DropShipToCustomerPostCodeViz = vc.Get("custpostcode", pid);
po.DropShipToCustomerPhone1Viz = vc.Get("custp1", pid);
po.DropShipToCustomerPhone2Viz = vc.Get("custp2", pid);
po.DropShipToCustomerPhone3Viz = vc.Get("custp3", pid);
po.DropShipToCustomerPhone4Viz = vc.Get("custp4", pid);
po.DropShipToCustomerPhone5Viz = vc.Get("custp5", pid);
po.DropShipToCustomerEmailAddressViz = vc.Get("custemail", pid);
}
}
var vnd = await ct.Vendor.AsNoTracking().Where(x => x.Id == po.VendorId).FirstOrDefaultAsync();
po.VendorViz = vnd.Name;
po.VendorAlertNotesViz = vnd.AlertNotes;
var vid = po.VendorId;
if (!vc.Has("vndname", vid))
{
var vnd = await ct.Vendor.AsNoTracking().Where(x => x.Id == vid).FirstOrDefaultAsync();
vc.Add(vnd.Name, "vndname", vid);
vc.Add(vnd.AlertNotes, "vndalert", vid);
if (forReporting)
{
vc.Add(vnd.Address, "vndaddr", vid);
vc.Add(vnd.City, "vndcity", vid);
vc.Add(vnd.Region, "vndregion", vid);
vc.Add(vnd.Country, "vndcountry", vid);
vc.Add(vnd.Latitude.ToString(), "vndlat", vid);
vc.Add(vnd.Longitude.ToString(), "vndlong", vid);
vc.Add(vnd.PostAddress, "vndpostaddr", vid);
vc.Add(vnd.PostCity, "vndpostcity", vid);
vc.Add(vnd.PostRegion, "vndpostregion", vid);
vc.Add(vnd.PostCountry, "vndpostcountry", vid);
vc.Add(vnd.PostCode, "vndpostcode", vid);
vc.Add(vnd.Phone1, "vndp1", vid);
vc.Add(vnd.Phone2, "vndp2", vid);
vc.Add(vnd.Phone3, "vndp3", vid);
vc.Add(vnd.Phone4, "vndp4", vid);
vc.Add(vnd.Phone5, "vndp5", vid);
vc.Add(vnd.EmailAddress, "vndemail", vid);
vc.Add(vnd.Contact, "vndcontact", vid);
vc.Add(vnd.ContactNotes, "vndcontactnotes", vid);
vc.Add(vnd.AccountNumber, "vndacct", vid);
}
}
po.VendorViz = vc.Get("vndname", vid);
po.VendorAlertNotesViz = vc.Get("vndalert", vid);
if (forReporting)
{
po.VendorAddressViz = vnd.Address;
po.VendorCityViz = vnd.City;
po.VendorRegionViz = vnd.Region;
po.VendorCountryViz = vnd.Country;
po.VendorLatitudeViz = vnd.Latitude;
po.VendorLongitudeViz = vnd.Longitude;
po.VendorPostAddressViz = vnd.PostAddress;
po.VendorPostCityViz = vnd.PostCity;
po.VendorPostRegionViz = vnd.PostRegion;
po.VendorPostCountryViz = vnd.PostCountry;
po.VendorPostCodeViz = vnd.PostCode;
po.VendorPhone1Viz = vnd.Phone1;
po.VendorPhone2Viz = vnd.Phone2;
po.VendorPhone3Viz = vnd.Phone3;
po.VendorPhone4Viz = vnd.Phone4;
po.VendorPhone5Viz = vnd.Phone5;
po.VendorEmailAddressViz = vnd.EmailAddress;
po.VendorContactViz = vnd.Contact;
po.VendorContactNotesViz = vnd.ContactNotes;
po.VendorAccountNumberViz = vnd.AccountNumber;
var PoStatusEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList(
StringUtil.TrimTypeName(typeof(PurchaseOrderStatus).ToString()),
UserTranslationId,
CurrentUserRoles);
po.VendorAddressViz = vc.Get("vndaddr", vid);
po.VendorCityViz = vc.Get("vndcity", vid);
po.VendorRegionViz = vc.Get("vndregion", vid);
po.VendorCountryViz = vc.Get("vndcountry", vid);
po.VendorLatitudeViz = vc.GetAsDecimal("vndlat", vid);
po.VendorLongitudeViz = vc.GetAsDecimal("vndlong", vid);
po.VendorPostAddressViz = vc.Get("vndpostaddr", vid);
po.VendorPostCityViz = vc.Get("vndpostcity", vid);
po.VendorPostRegionViz = vc.Get("vndpostregion", vid);
po.VendorPostCountryViz = vc.Get("vndpostcountry", vid);
po.VendorPostCodeViz = vc.Get("vndpostcode", vid);
po.VendorPhone1Viz = vc.Get("vndp1", vid);
po.VendorPhone2Viz = vc.Get("vndp2", vid);
po.VendorPhone3Viz = vc.Get("vndp3", vid);
po.VendorPhone4Viz = vc.Get("vndp4", vid);
po.VendorPhone5Viz = vc.Get("vndp5", vid);
po.VendorEmailAddressViz = vc.Get("vndemail", vid);
po.VendorContactViz = vc.Get("vndcontact", vid);
po.VendorContactNotesViz = vc.Get("vndcontactnotes", vid);
po.VendorAccountNumberViz = vc.Get("vndacct", vid);
if (PoStatusEnumList == null)
PoStatusEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList(
StringUtil.TrimTypeName(typeof(PurchaseOrderStatus).ToString()),
UserTranslationId,
CurrentUserRoles);
po.StatusViz = PoStatusEnumList.Where(x => x.Id == (long)po.Status).Select(x => x.Name).First();
}
@@ -176,33 +228,73 @@ namespace AyaNova.Biz
if (po.ProjectId != null)
po.ProjectViz = await ct.Project.AsNoTracking().Where(x => x.Id == po.ProjectId).Select(x => x.Name).FirstOrDefaultAsync();
if (po.ProjectId != null)
{
if (!vc.Has("projname", po.ProjectId))
vc.Add(await ct.Project.AsNoTracking().Where(x => x.Id == po.ProjectId).Select(x => x.Name).FirstOrDefaultAsync(), "projname", po.ProjectId);
po.ProjectViz = vc.Get("projname", po.ProjectId);
}
foreach (PurchaseOrderItem item in po.Items)
{
if (!vc.Has("partname", item.PartId))
{
var partInfo = await ct.Part.AsNoTracking().Where(x => x.Id == item.PartId).Select(x => new { x.Description, x.Name, x.UPC, x.UnitOfMeasure, x.ManufacturerNumber }).FirstOrDefaultAsync();
vc.Add(partInfo.Name, "partname", item.PartId);
vc.Add(partInfo.Description, "partdescription", item.PartId);
vc.Add(partInfo.UPC, "partupc", item.PartId);
vc.Add(partInfo.UnitOfMeasure, "partuofm", item.PartId);
vc.Add(partInfo.ManufacturerNumber, "partmanunum", item.PartId);
}
item.PartDescriptionViz = vc.Get("partdescription", item.PartId);
item.PartNameViz = vc.Get("partname", item.PartId);
item.UpcViz = vc.Get("partupc", item.PartId);
item.PartUnitOfMeasureViz = vc.Get("partuofm", item.PartId);
item.PartManufacturerNumberViz = vc.Get("partmanunum", item.PartId);
if (item.PartWarehouseId != 0)
{
if (!vc.Has("partwarehouse", item.PartWarehouseId))
vc.Add(await ct.PartWarehouse.AsNoTracking().Where(x => x.Id == item.PartWarehouseId).Select(x => x.Name).FirstOrDefaultAsync(), "partwarehouse", item.PartWarehouseId);
item.WarehouseViz = vc.Get("partwarehouse", item.PartWarehouseId);
}
var partInfo = await ct.Part.AsNoTracking().Where(x => x.Id == item.PartId).Select(x => new { PartDescriptionViz = x.Description, partNameViz = x.Name, partUPCViz=x.UPC, partunitofmeasureviz = x.UnitOfMeasure, partmanufacturernumber = x.ManufacturerNumber }).FirstOrDefaultAsync();
item.PartDescriptionViz = partInfo.PartDescriptionViz;
item.PartNameViz = partInfo.partNameViz;
item.UpcViz=partInfo.partUPCViz;
item.PartUnitOfMeasureViz = partInfo.partunitofmeasureviz;
item.PartManufacturerNumberViz = partInfo.partmanufacturernumber;
item.WarehouseViz = await ct.PartWarehouse.AsNoTracking().Where(x => x.Id == item.PartWarehouseId).Select(x => x.Name).FirstOrDefaultAsync();
if (item.WorkOrderItemPartRequestId != null)
{
po.HasPartRequest = true;
item.WorkOrderItemPartRequestViz = (await WorkOrderBiz.GetWorkOrderSerialFromRelativeAsync(AyaType.WorkOrderItemPartRequest, (long)item.WorkOrderItemPartRequestId, ct)).ToString();
if (!vc.Has("woserial", item.WorkOrderItemPartRequestId))
vc.Add((await WorkOrderBiz.GetWorkOrderSerialFromRelativeAsync(AyaType.WorkOrderItemPartRequest, (long)item.WorkOrderItemPartRequestId, ct)).ToString(), "woserial", item.WorkOrderItemPartRequestId);
item.WorkOrderItemPartRequestViz = vc.Get("woserial", item.WorkOrderItemPartRequestId);
if (item.PartRequestedById != null)
item.PartRequestedByViz = await ct.User.AsNoTracking().Where(x => x.Id == item.PartRequestedById).Select(x => x.Name).FirstOrDefaultAsync();
{
if (!vc.Has("user", item.PartRequestedById))
vc.Add(await ct.User.AsNoTracking().Where(x => x.Id == item.PartRequestedById).Select(x => x.Name).FirstOrDefaultAsync(), "user", item.PartRequestedById);
item.PartRequestedByViz = vc.Get("user", item.PartRequestedById);
}
}
TaxCode tax = null;
if (item.PurchaseTaxCodeId != null)
{
tax = await ct.TaxCode.AsNoTracking().Where(x => x.Id == item.PurchaseTaxCodeId).FirstOrDefaultAsync();
if (!oc.Has("tax", item.PurchaseTaxCodeId))
{
tax = await ct.TaxCode.AsNoTracking().FirstOrDefaultAsync(z => z.Id == item.PurchaseTaxCodeId);
oc.Add(tax, "tax", item.PurchaseTaxCodeId);
}
tax = (TaxCode)oc.Get("tax", item.PurchaseTaxCodeId);
item.PurchaseTaxCodeViz = tax.Name;
po.HasTaxes = true;
}
if (!string.IsNullOrWhiteSpace(item.VendorPartNumber))
po.HasVendorNumber = true;
@@ -237,6 +329,9 @@ namespace AyaNova.Biz
}
}
}
List<NameIdItem> PoStatusEnumList = null;
private VizCache vc = new VizCache();
private ObjectCache oc = new ObjectCache();
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -289,7 +384,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
await SetDisplayFields(putObject, false);
await PopulateVizFields(putObject, false);
return putObject;
}
}
@@ -790,16 +885,20 @@ namespace AyaNova.Biz
var batchResults = await ct.PurchaseOrder.Include(x => x.Items).AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync();
//order the results back into original
var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
batchResults = null;
foreach (PurchaseOrder w in orderedList)
{
if (!ReportRenderManager.KeepGoing(jobId)) return null;
await SetDisplayFields(w, true);
await PopulateVizFields(w, true);
var jo = JObject.FromObject(w);
if (!JsonUtil.JTokenIsNullOrEmpty(jo["CustomFields"]))
jo["CustomFields"] = JObject.Parse((string)jo["CustomFields"]);
ReportData.Add(jo);
}
orderedList = null;
}
vc.Clear();
oc.Clear();
return ReportData;
}