diff --git a/server/AyaNova/Controllers/PurchaseOrderController.cs b/server/AyaNova/Controllers/PurchaseOrderController.cs
index 8df8f943..118120f6 100644
--- a/server/AyaNova/Controllers/PurchaseOrderController.cs
+++ b/server/AyaNova/Controllers/PurchaseOrderController.cs
@@ -160,8 +160,8 @@ namespace AyaNova.Api.Controllers
{
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))
+ // PurchaseOrderBiz biz = PurchaseOrderBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.PurchaseOrder))
return StatusCode(403, new ApiNotAuthorizedResponse());
if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState));
@@ -172,6 +172,27 @@ namespace AyaNova.Api.Controllers
}
+///
+ /// Get work order item part request 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("requests-by-vendor/{vendorId}")]
+ public async Task GetRequestsByVendor([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.ViewPartRequestList.ToListAsync()));
+ else
+ return Ok(ApiOkResponse.Response(await ct.ViewPartRequestList.Where(z => z.WholesalerId == vendorId || z.AltWholesalerId == vendorId).ToListAsync()));
+ }
+
//------------
diff --git a/server/AyaNova/models/AyContext.cs b/server/AyaNova/models/AyContext.cs
index fa1585ac..630511ed 100644
--- a/server/AyaNova/models/AyContext.cs
+++ b/server/AyaNova/models/AyContext.cs
@@ -123,6 +123,7 @@ namespace AyaNova.Models
public virtual DbSet ViewRestockRequired { get; set; }
public virtual DbSet ViewPartInventoryList { get; set; }
+ public virtual DbSet ViewPartRequestList { get; set; }
diff --git a/server/AyaNova/models/ViewPartRequestList.cs b/server/AyaNova/models/ViewPartRequestList.cs
new file mode 100644
index 00000000..bcb7ce06
--- /dev/null
+++ b/server/AyaNova/models/ViewPartRequestList.cs
@@ -0,0 +1,32 @@
+namespace AyaNova.Models
+{
+ //Note this is how to define a View backed model with no key (id)
+
+ [Microsoft.EntityFrameworkCore.Keyless]
+ public class ViewPartRequestList
+ {
+ public long RequestId { get; set; }
+ public long PartId { get; set; }
+ public long PartWarehouseId { get; set; }
+ public decimal Quantity { get; set; }
+ public long Serial { get; set; }
+ public string PartNumber { get; set; }
+ public string PartName { get; set; }
+ public string PartWarehouseName { get; set; }
+ public long WholesalerId { get; set; }
+ public string WholesalerName { get; set; }
+ public long AltWholesalerId { get; set; }
+ public string AltWholesalerName { get; set; }
+ }//eoc
+}//eons
+
+/*
+"CREATE VIEW viewpartrequestlist AS SELECT AWORKORDERITEMPARTREQUEST.ID AS REQUESTID, PARTID, PARTWAREHOUSEID, QUANTITY, AWORKORDER.SERIAL, "
++"APART.PARTNUMBER AS PARTNUMBER, APART.NAME AS PARTNAME, APARTWAREHOUSE.NAME AS PARTWAREHOUSENAME, AWHOLESALER.NAME AS WHOLESALERNAME, "
++"AWHOLESALER.ID AS WHOLESALERID, AALTWHOLESALER.ID AS ALTWHOLESALERID, AALTWHOLESALER.NAME AS ALTWHOLESALERNAME FROM AWORKORDERITEMPARTREQUEST "
++"LEFT JOIN AWORKORDERITEM ON AWORKORDERITEM.ID = AWORKORDERITEMPARTREQUEST.WORKORDERITEMID LEFT JOIN AWORKORDER ON AWORKORDERITEM.WORKORDERID = AWORKORDER.ID "
++"LEFT JOIN AWORKORDERSTATUS ON AWORKORDER.LASTSTATUSID = AWORKORDERSTATUS.ID LEFT JOIN APART ON AWORKORDERITEMPARTREQUEST.PARTID = APART.ID "
++"LEFT JOIN APARTWAREHOUSE ON AWORKORDERITEMPARTREQUEST.PARTWAREHOUSEID = APARTWAREHOUSE.ID LEFT JOIN AVENDOR AS AWHOLESALER ON (APART.WHOLESALERID = AWHOLESALER.ID) "
++"LEFT JOIN AVENDOR AS AALTWHOLESALER ON (APART.ALTERNATIVEWHOLESALERID = AALTWHOLESALER.ID) WHERE AWORKORDERITEMPARTREQUEST.PURCHASEORDERITEMID IS NULL AND "
++"AWORKORDERSTATUS.COMPLETED = FALSE ORDER BY AWORKORDERITEMPARTREQUEST.ID;"
+*/
\ No newline at end of file
diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs
index 4856884d..6499622e 100644
--- a/server/AyaNova/util/AySchema.cs
+++ b/server/AyaNova/util/AySchema.cs
@@ -881,7 +881,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
await ExecQueryAsync("CREATE VIEW vpartsonorder AS SELECT partid, partwarehouseid, SUM((COALESCE(apurchaseorderitem.quantityordered,0)-COALESCE(apurchaseorderitem.quantityreceived,0))) AS quantityonorder "
+ "FROM apurchaseorderitem WHERE (COALESCE(apurchaseorderitem.quantityordered,0)-COALESCE(apurchaseorderitem.quantityreceived,0)) > 0 GROUP BY partid, partwarehouseid");
- //VRESTOCKREQUIRED (used by PO indirectly through a keyless model in dbset)
+ //VIEWRESTOCKREQUIRED (used by PO indirectly through a keyless model in dbset)
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,"
@@ -896,11 +896,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
+ "WHERE apartstocklevel.minimumquantity IS NOT NULL AND (apartstocklevel.minimumquantity - (COALESCE(vpartinventorynow.balance, 0) + COALESCE(vpartsonorderuncommitted.quantityonorder, 0))) >0 "
+ "ORDER BY requiredquantity DESC");
- //VPARTINVENTORYLIST
- // await ExecQueryAsync("CREATE VIEW vpartinventorylist AS select vpartinventorynow.*, vpartsonordercommitted.quantityonordercommitted, vpartsonorder.quantityonorder from vpartinventorynow "
- // + "left join vpartsonordercommitted on (vpartinventorynow.partid = vpartsonordercommitted.partid and vpartinventorynow.partwarehouseid = vpartsonordercommitted.partwarehouseid)"
- // + "left join vpartsonorder on (vpartinventorynow.partid = vpartsonorder.partid and vpartinventorynow.partwarehouseid = vpartsonorder.partwarehouseid)");
-
+ //VIEWPARTINVENTORYLIST
await ExecQueryAsync(
"CREATE VIEW viewpartinventorylist AS select apart.id as partid, apart.partnumber, apart.name as partname, apart.active as partactive, apart.cost as partcost, apart.retail as partretail,"
+"apartwarehouse.id as partwarehouseid, apartwarehouse.name as partwarehousename, awholesaler.name as wholesalername, awholesaler.id as wholesalerid, "
@@ -914,10 +910,17 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
+"LEFT JOIN apart ON (vpartinventorynow.partid = apart.id) LEFT JOIN apartwarehouse ON (vpartinventorynow.partwarehouseid = apartwarehouse.id) "
+"left join avendor AS awholesaler on (apart.wholesalerid = awholesaler.id) left join avendor AS aaltwholesaler on (apart.alternativewholesalerid = aaltwholesaler.id) "
+"left join apartstocklevel on (apartstocklevel.partid = apart.id AND apartstocklevel.partwarehouseid = vpartinventorynow.partwarehouseid);");
-/*
-partid, partnumber, partname, partactive, partcost, partretail, partwarehouseid, partwarehousename,wholesalername,wholesalerid,altwholesalername,altwholesalerid,
-onhandqty, onorderqty, onordercommittedqty, restocklevel/minimumqty, reorderqty, vpartinventorynow.description, vpartinventorynow.id
-*/
+
+
+ //VIEWPARTREQUESTLIST
+ await ExecQueryAsync("CREATE VIEW viewpartrequestlist AS SELECT AWORKORDERITEMPARTREQUEST.ID AS REQUESTID, PARTID, PARTWAREHOUSEID, QUANTITY, AWORKORDER.SERIAL, "
+ +"APART.PARTNUMBER AS PARTNUMBER, APART.NAME AS PARTNAME, APARTWAREHOUSE.NAME AS PARTWAREHOUSENAME, AWHOLESALER.NAME AS WHOLESALERNAME, "
+ +"AWHOLESALER.ID AS WHOLESALERID, AALTWHOLESALER.ID AS ALTWHOLESALERID, AALTWHOLESALER.NAME AS ALTWHOLESALERNAME FROM AWORKORDERITEMPARTREQUEST "
+ +"LEFT JOIN AWORKORDERITEM ON AWORKORDERITEM.ID = AWORKORDERITEMPARTREQUEST.WORKORDERITEMID LEFT JOIN AWORKORDER ON AWORKORDERITEM.WORKORDERID = AWORKORDER.ID "
+ +"LEFT JOIN AWORKORDERSTATUS ON AWORKORDER.LASTSTATUSID = AWORKORDERSTATUS.ID LEFT JOIN APART ON AWORKORDERITEMPARTREQUEST.PARTID = APART.ID "
+ +"LEFT JOIN APARTWAREHOUSE ON AWORKORDERITEMPARTREQUEST.PARTWAREHOUSEID = APARTWAREHOUSE.ID LEFT JOIN AVENDOR AS AWHOLESALER ON (APART.WHOLESALERID = AWHOLESALER.ID) "
+ +"LEFT JOIN AVENDOR AS AALTWHOLESALER ON (APART.ALTERNATIVEWHOLESALERID = AALTWHOLESALER.ID) WHERE AWORKORDERITEMPARTREQUEST.PURCHASEORDERITEMID IS NULL AND "
+ +"AWORKORDERSTATUS.COMPLETED = FALSE ORDER BY AWORKORDERITEMPARTREQUEST.ID;");
//----------
diff --git a/server/AyaNova/util/DbUtil.cs b/server/AyaNova/util/DbUtil.cs
index 3c2bee20..a66f9601 100644
--- a/server/AyaNova/util/DbUtil.cs
+++ b/server/AyaNova/util/DbUtil.cs
@@ -326,6 +326,9 @@ namespace AyaNova.Util
cmd.CommandText = "update aglobalbizsettings set taxpartpurchaseid=null,taxpartsaleid=null,taxratesaleid=null;";
await cmd.ExecuteNonQueryAsync();
+ cmd.CommandText = "update aworkorder set fromcsrid=null;";
+ await cmd.ExecuteNonQueryAsync();
+
}
@@ -348,6 +351,7 @@ namespace AyaNova.Util
//REMOVE ALL REMAINING DATA
await EraseTableAsync("aunitmeterreading", conn);
+ await EraseTableAsync("acustomerservicerequest", conn);
//--- WorkOrder
await EraseTableAsync("aworkorderitemexpense", conn);
@@ -395,8 +399,7 @@ namespace AyaNova.Util
await EraseTableAsync("apm", conn);
//---
- await EraseTableAsync("afileattachment", conn);
- await EraseTableAsync("acustomerservicerequest", conn);
+ await EraseTableAsync("afileattachment", conn);
await EraseTableAsync("awidget", conn);
await EraseTableAsync("aevent", conn);
await EraseTableAsync("adatalistsavedfilter", conn);