diff --git a/server/AyaNova/Controllers/PurchaseOrderController.cs b/server/AyaNova/Controllers/PurchaseOrderController.cs
index 61175c4d..0d555764 100644
--- a/server/AyaNova/Controllers/PurchaseOrderController.cs
+++ b/server/AyaNova/Controllers/PurchaseOrderController.cs
@@ -7,6 +7,8 @@ using Microsoft.Extensions.Logging;
using AyaNova.Models;
using AyaNova.Api.ControllerHelpers;
using AyaNova.Biz;
+using Microsoft.EntityFrameworkCore;
+using System.Linq;
namespace AyaNova.Api.Controllers
@@ -148,7 +150,26 @@ namespace AyaNova.Api.Controllers
return NoContent();
}
-
+ ///
+ /// Get restock required list for vendor specified or any vendor if no vendor specified
+ ///
+ /// optional vendor id will return matches to Part objects manufacturer, wholesaler or alternative wholesaler
+ /// PurchaseOrder
+ [HttpGet("restock-by-vendor/{vendorId}")]
+ public async Task GetPurchaseOrder([FromRoute] long? vendorId)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ PurchaseOrderBiz biz = PurchaseOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ if (null == vendorId)
+ return Ok(ApiOkResponse.Response(await ct.ViewRestockRequired.OrderBy(z => z.RequiredQuantity).ToListAsync()));
+ else
+ return Ok(ApiOkResponse.Response(await ct.ViewRestockRequired.Where(z => z.ManufacturerId == vendorId || z.WholesalerId == vendorId || z.AlternativeWholesalerId == vendorId).OrderBy(z => z.RequiredQuantity).ToListAsync()));
+ }
diff --git a/server/AyaNova/models/AyContext.cs b/server/AyaNova/models/AyContext.cs
index c8397b82..2c6a5560 100644
--- a/server/AyaNova/models/AyContext.cs
+++ b/server/AyaNova/models/AyContext.cs
@@ -89,6 +89,8 @@ namespace AyaNova.Models
public virtual DbSet DashboardView { get; set; }
public virtual DbSet ServiceBank { get; set; }
+ public virtual DbSet ViewRestockRequired { get; set; }
+
//Note: had to add this constructor to work with the code in startup.cs that gets the connection string from the appsettings.json file
@@ -111,7 +113,12 @@ namespace AyaNova.Models
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
// Replace table names
- entity.SetTableName("a" + entity.GetTableName().ToLowerInvariant());
+ var entityName = entity.GetTableName().ToLowerInvariant();
+ if (!entityName.StartsWith("view"))
+ entity.SetTableName("a" + entityName);
+ else
+ entity.SetTableName(entityName);
+
// Replace column names
foreach (var property in entity.GetProperties())
diff --git a/server/AyaNova/models/ViewRestockRequired.cs b/server/AyaNova/models/ViewRestockRequired.cs
new file mode 100644
index 00000000..37c3e096
--- /dev/null
+++ b/server/AyaNova/models/ViewRestockRequired.cs
@@ -0,0 +1,34 @@
+namespace AyaNova.Models
+{
+ //Note this is how to define a View backed model with no key (id)
+
+ [Microsoft.EntityFrameworkCore.Keyless]
+ public class ViewRestockRequired
+ {
+ public long PartId { get; set; }
+ public long PartWarehouseId { get; set; }
+ public string PartNumber { get; set; }
+ public string DisplayWarehouse { get; set; }
+ public long ManufacturerId { get; set; }
+ public string DisplayManufacturer { get; set; }
+ public long WholesalerId { get; set; }
+ public string DisplayWholesaler { get; set; }
+ public long AlternativeWholesalerId { get; set; }
+ public string DisplayAlternativeWholesaler { get; set; }
+ public decimal MinimumQuantity { get; set; }
+ public decimal Balance { get; set; }
+ public decimal OnOrderQuantity { get; set; }
+ public decimal RequiredQuantity { get; set; }
+
+ }//eoc
+
+}//eons
+
+/*
+SELECT apart.id AS partid, apartwarehouse.id AS partwarehouseid, apart.partnumber, apartwarehouse.name AS displaywarehouse, "
+ + "amanufacturer.id AS manufacturerid, amanufacturer.name AS displaymanufacturer, awholesaler.id AS wholesalerid, awholesaler.name AS displaywholesaler, "
+ + "aalternativewholesaler.id AS alternativewholesalerid, aalternativewholesaler.name AS displayalternativewholesaler,"
+ + "apartstocklevel.minimumquantity, vpartinventorynow.balance, COALESCE(vpartsonorderuncommitted.quantityonorder,0) AS onorderquantity, "
+ + "apartstocklevel.minimumquantity - (COALESCE(vpartinventorynow.balance, 0) + COALESCE(vpartsonorderuncommitted.quantityonorder, 0)) AS requiredquantity "
+
+*/
\ No newline at end of file
diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs
index 47cdcdaa..6ec7bdb2 100644
--- a/server/AyaNova/util/AySchema.cs
+++ b/server/AyaNova/util/AySchema.cs
@@ -810,8 +810,8 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
+ "FROM apurchaseorderitem WHERE workorderitempartrequestid IS NULL AND (COALESCE(apurchaseorderitem.quantityordered,0)-COALESCE(apurchaseorderitem.quantityreceived,0)) > 0 GROUP BY partid, partwarehouseid");
//VRESTOCKREQUIRED
- await ExecQueryAsync("CREATE VIEW vrestockrequired AS SELECT apart.id AS partid, apartwarehouse.id AS partwarehouseid, apart.partnumber, apartwarehouse.name AS displaywarehouse, "
- + "amanufacturer.id AS manufactureid, amanufacturer.name AS displaymanufacturer, awholesaler.id AS wholesalerid, awholesaler.name AS displaywholesaler, "
+ await ExecQueryAsync("CREATE VIEW viewrestockrequired AS SELECT apart.id AS partid, apartwarehouse.id AS partwarehouseid, apart.partnumber, apartwarehouse.name AS displaywarehouse, "
+ + "amanufacturer.id AS manufacturerid, amanufacturer.name AS displaymanufacturer, awholesaler.id AS wholesalerid, awholesaler.name AS displaywholesaler, "
+ "aalternativewholesaler.id AS alternativewholesalerid, aalternativewholesaler.name AS displayalternativewholesaler,"
+ "apartstocklevel.minimumquantity, vpartinventorynow.balance, COALESCE(vpartsonorderuncommitted.quantityonorder,0) AS onorderquantity, "
+ "apartstocklevel.minimumquantity - (COALESCE(vpartinventorynow.balance, 0) + COALESCE(vpartsonorderuncommitted.quantityonorder, 0)) AS requiredquantity "