diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt
index 24636ed5..8cd5ba5f 100644
--- a/ayanova/devdocs/todo.txt
+++ b/ayanova/devdocs/todo.txt
@@ -190,22 +190,32 @@ group by partid, partwarehouseid
--VRESTOCKREQUIRED
-create view vrestockrequired as select
- apart.id as partid, apartwarehouse.id as partwarehouseid, apart.partnumber, apartwarehouse.name as displaywarehouse, apartstocklevel.minimumquantity, vpartinventorynow.balance,
-coalesce(vpartsonorder.quantityonorder,0) as onorderquantity,
-apartstocklevel.minimumquantity - (coalesce(vpartinventorynow.balance, 0) + coalesce(vpartsonorder.quantityonorder, 0)) as requiredquantity
-from
-vpartinventorynow
-left join apart on vpartinventorynow.partid=apart.id
-left join apartwarehouse on vpartinventorynow.partwarehouseid = apartwarehouse.id
-left join apartstocklevel on vpartinventorynow.partid=apartstocklevel.partid and vpartinventorynow.partwarehouseid=apartstocklevel.partwarehouseid
-left join vpartsonorder on vpartinventorynow.partid=vpartsonorder.partid and vpartinventorynow.partwarehouseid=vpartsonorder.partwarehouseid
-where
-apartstocklevel.minimumquantity is not null
-and
-(apartstocklevel.minimumquantity - (coalesce(vpartinventorynow.balance, 0) + coalesce(vpartsonorder.quantityonorder, 0))) >0
-order by
-requiredquantity desc
+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,
+ aalternativewholesaler.id as ayalternativewholesalerid,
+ aalternativewholesaler.name as displayalternativewholesaler,
+
+ apartstocklevel.minimumquantity,
+ vpartinventorynow.balance,
+ COALESCE(vpartsonorder.quantityonorder, (0)::numeric) AS onorderquantity,
+ (apartstocklevel.minimumquantity - (COALESCE(vpartinventorynow.balance, (0)::numeric) + COALESCE(vpartsonorder.quantityonorder, (0)::numeric))) AS requiredquantity
+ FROM ((((vpartinventorynow
+ LEFT JOIN apart ON ((vpartinventorynow.partid = apart.id)))
+ LEFT JOIN apartwarehouse ON ((vpartinventorynow.partwarehouseid = apartwarehouse.id)))
+ left join avendor as amanufacturer on (apart.manufacturerid = amanufacturer.id)
+ left join avendor as awholesaler on (apart.wholesalerid = awholesaler.id)
+ left join avendor as aalternativewholesaler on (apart.alternativewholesalerid = aalternativewholesaler.id)
+ LEFT JOIN apartstocklevel ON (((vpartinventorynow.partid = apartstocklevel.partid) AND (vpartinventorynow.partwarehouseid = apartstocklevel.partwarehouseid))))
+ LEFT JOIN vpartsonorder ON (((vpartinventorynow.partid = vpartsonorder.partid) AND (vpartinventorynow.partwarehouseid = vpartsonorder.partwarehouseid))))
+ WHERE ((apartstocklevel.minimumquantity IS NOT NULL) AND ((apartstocklevel.minimumquantity - (COALESCE(vpartinventorynow.balance, (0)::numeric) + COALESCE(vpartsonorder.quantityonorder, (0)::numeric))) > (0)::numeric))
+ ORDER BY (apartstocklevel.minimumquantity - (COALESCE(vpartinventorynow.balance, (0)::numeric) + COALESCE(vpartsonorder.quantityonorder, (0)::numeric))) DESC;
diff --git a/ayanova/src/api/gzutil.js b/ayanova/src/api/gzutil.js
index 5d7e208d..ab6c7954 100644
--- a/ayanova/src/api/gzutil.js
+++ b/ayanova/src/api/gzutil.js
@@ -416,7 +416,7 @@ export default {
case window.$gz.type.Project:
return "$ayiLayerGroup";
case window.$gz.type.PurchaseOrder:
- return "$ayiDollyFlatbed";
+ return "$ayiTruckLoading";
case window.$gz.type.Quote:
return "$ayiPencilAlt";
case window.$gz.type.QuoteItem:
@@ -444,7 +444,7 @@ export default {
case window.$gz.type.WorkOrderItemPart:
return "$ayiBoxes";
case window.$gz.type.WorkOrderItemPartRequest:
- return "$ayiPaperPlane";
+ return "$ayiParachuteBox";
case window.$gz.type.WorkOrderItemScheduledUser:
return "$ayiUserClock";
case window.$gz.type.WorkOrderItemTask:
diff --git a/ayanova/src/api/initialize.js b/ayanova/src/api/initialize.js
index 88300dcd..8d3af35f 100644
--- a/ayanova/src/api/initialize.js
+++ b/ayanova/src/api/initialize.js
@@ -375,12 +375,12 @@ function initNavPanel() {
});
}
- //PART ASSEMBLIES
- if (window.$gz.role.canOpen(window.$gz.type.PartAssembly)) {
+ //PURCHASE ORDERS
+ if (useInventory && window.$gz.role.canOpen(window.$gz.type.PurchaseOrder)) {
sub.push({
- title: "PartAssemblyList",
- icon: "$ayiObjectGroup",
- route: "/inv-part-assemblies",
+ title: "InventoryPurchaseOrders",
+ icon: "$ayiTruckLoading",
+ route: "/inv-purchase-orders",
key: key++
});
}
@@ -395,6 +395,29 @@ function initNavPanel() {
});
}
+ //INVENTORY TRANSACTIONS
+ if (useInventory && window.$gz.role.canOpen(window.$gz.type.PartInventory)) {
+ sub.push({
+ title: "PartInventoryTransactionList",
+ icon: "$ayiPeopleCarry",
+ route: "/inv-part-inventory-transactions",
+ key: key++
+ });
+ }
+
+ //RESTOCK REQUIRED
+ if (
+ useInventory &&
+ window.$gz.role.canOpen(window.$gz.type.WorkOrderItemPartRequest)
+ ) {
+ sub.push({
+ title: "PurchaseOrderUIRestockList",
+ icon: "$ayiClipboardList",
+ route: "/inv-part-restocks",
+ key: key++
+ });
+ }
+
//PART REQUESTS
if (
useInventory &&
@@ -402,46 +425,30 @@ function initNavPanel() {
) {
sub.push({
title: "WorkOrderItemPartRequestList",
- icon: "$ayiPaperPlane",
+ icon: "$ayiParachuteBox",
route: "/inv-part-requests",
key: key++
});
}
- //PURCHASE ORDERS
- if (useInventory && window.$gz.role.canOpen(window.$gz.type.PurchaseOrder)) {
+ //PART ASSEMBLIES
+ if (window.$gz.role.canOpen(window.$gz.type.PartAssembly)) {
sub.push({
- title: "InventoryPurchaseOrders",
- icon: "$ayiDollyFlatbed",
- route: "/inv-purchase-orders",
+ title: "PartAssemblyList",
+ icon: "$ayiObjectGroup",
+ route: "/inv-part-assemblies",
key: key++
});
+ }
- //ADJUSTMENTS
- if (
- useInventory &&
- window.$gz.role.canOpen(window.$gz.type.PartInventory)
- ) {
- sub.push({
- title: "PartInventoryTransactionList",
- icon: "$ayiDolly",
- route: "/inv-part-inventory-transactions",
- key: key++
- });
- }
-
- //WAREHOUSES
- if (
- useInventory &&
- window.$gz.role.canOpen(window.$gz.type.PartWarehouse)
- ) {
- sub.push({
- title: "PartWarehouseList",
- icon: "$ayiWarehouse",
- route: "/inv-part-warehouses",
- key: key++
- });
- }
+ //WAREHOUSES
+ if (useInventory && window.$gz.role.canOpen(window.$gz.type.PartWarehouse)) {
+ sub.push({
+ title: "PartWarehouseList",
+ icon: "$ayiWarehouse",
+ route: "/inv-part-warehouses",
+ key: key++
+ });
}
//**** INVENTORY (TOP GROUP)
diff --git a/ayanova/src/api/translation.js b/ayanova/src/api/translation.js
index 644e089a..8da1153c 100644
--- a/ayanova/src/api/translation.js
+++ b/ayanova/src/api/translation.js
@@ -157,6 +157,7 @@ export default {
"InventoryPurchaseOrders",
"PartInventoryTransactionList",
"PartWarehouseList",
+ "PurchaseOrderUIRestockList",
"WidgetList",
"VendorList",
"AdministrationGlobalSettings",
diff --git a/ayanova/src/plugins/vuetify.js b/ayanova/src/plugins/vuetify.js
index bcf337f8..20797df6 100644
--- a/ayanova/src/plugins/vuetify.js
+++ b/ayanova/src/plugins/vuetify.js
@@ -49,6 +49,7 @@ import {
faChevronRight,
faCircle,
faClipboard,
+ faClipboardList,
faClock,
faClone,
faCode,
@@ -68,6 +69,7 @@ import {
faEgg,
faEllipsisV,
faEnvelopeOpenText,
+ faExchangeAlt,
faExclamation,
faExclamationCircle,
faExclamationTriangle,
@@ -124,7 +126,8 @@ import {
faObjectGroup,
faPallet,
faPaperclip,
- faPaperPlane,
+ //faPaperPlane,
+ faParachuteBox,
faPencilAlt,
faPencilRuler,
faPeopleCarry,
@@ -176,6 +179,7 @@ import {
faToolbox,
faTools,
faTrashAlt,
+ faTruckLoading,
faTruckMonster,
faUndo,
faUser,
@@ -219,6 +223,7 @@ library.add(
faChevronLeft,
faChevronRight,
faClipboard,
+ faClipboardList,
faCircle,
farCircle,
faClock,
@@ -241,6 +246,7 @@ library.add(
faEgg,
faEllipsisV,
faEnvelopeOpenText,
+ faExchangeAlt,
faExclamation,
faExclamationCircle,
faExclamationTriangle,
@@ -297,7 +303,8 @@ library.add(
faObjectGroup,
faPallet,
faPaperclip,
- faPaperPlane,
+ //faPaperPlane,
+ faParachuteBox,
faPencilAlt,
faPencilRuler,
faPeopleCarry,
@@ -350,6 +357,7 @@ library.add(
faToolbox,
faTools,
faTrashAlt,
+ faTruckLoading,
faTruckMonster,
faUndo,
faUser,
@@ -502,6 +510,12 @@ const CUSTOM_ICONS = {
icon: ["fas", "clipboard"]
}
},
+ ayiClipboardList: {
+ component: FontAwesomeIcon,
+ props: {
+ icon: ["fas", "clipboard-list"]
+ }
+ },
ayiClock: {
component: FontAwesomeIcon,
props: {
@@ -616,6 +630,12 @@ const CUSTOM_ICONS = {
icon: ["fas", "envelope-open-text"]
}
},
+ ayiExchangeAlt: {
+ component: FontAwesomeIcon,
+ props: {
+ icon: ["fas", "exchange-alt"]
+ }
+ },
ayiExclamationCircle: {
component: FontAwesomeIcon,
props: {
@@ -946,10 +966,16 @@ const CUSTOM_ICONS = {
icon: ["fas", "paperclip"]
}
},
- ayiPaperPlane: {
+ // ayiPaperPlane: {
+ // component: FontAwesomeIcon,
+ // props: {
+ // icon: ["fas", "paper-plane"]
+ // }
+ // },
+ ayiParachuteBox: {
component: FontAwesomeIcon,
props: {
- icon: ["fas", "paper-plane"]
+ icon: ["fas", "parachute-box"]
}
},
ayiPencilAlt: {
@@ -1252,6 +1278,12 @@ const CUSTOM_ICONS = {
icon: ["fas", "trash-alt"]
}
},
+ ayiTruckLoading: {
+ component: FontAwesomeIcon,
+ props: {
+ icon: ["fas", "truck-loading"]
+ }
+ },
ayiTruckMonster: {
component: FontAwesomeIcon,
props: {
diff --git a/ayanova/src/views/adm-attachments.vue b/ayanova/src/views/adm-attachments.vue
index 6096dba0..35ea8190 100644
--- a/ayanova/src/views/adm-attachments.vue
+++ b/ayanova/src/views/adm-attachments.vue
@@ -316,7 +316,7 @@ function generateMenu(vm) {
menuOptions.menuItems.push({
title: "MoveSelected",
- icon: "$ayiPeopleCarry",
+ icon: "$ayiExchangeAlt",
surface: false,
key: FORM_KEY + ":MOVE_SELECTED",
vm: vm
diff --git a/ayanova/src/views/inv-part-adjustment.vue b/ayanova/src/views/inv-part-adjustment.vue
index 42cfa0af..491437a4 100644
--- a/ayanova/src/views/inv-part-adjustment.vue
+++ b/ayanova/src/views/inv-part-adjustment.vue
@@ -278,7 +278,7 @@ function generateMenu(vm) {
let menuOptions = {
isMain: false,
readOnly: vm.formState.readOnly,
- icon: "$ayiDolly",
+ icon: "$ayiPeopleCarry",
title: "PartInventoryAdjustment",
helpUrl: "inv-part-inventory-transactions",
formData: {
diff --git a/ayanova/src/views/inv-part-inventory-transactions.vue b/ayanova/src/views/inv-part-inventory-transactions.vue
index 3d8edbfb..508ecfc6 100644
--- a/ayanova/src/views/inv-part-inventory-transactions.vue
+++ b/ayanova/src/views/inv-part-inventory-transactions.vue
@@ -137,7 +137,7 @@ async function clickHandler(menuItem) {
function generateMenu(vm) {
let menuOptions = {
isMain: true,
- icon: "$ayiDolly",
+ icon: "$ayiPeopleCarry",
title: "PartInventoryTransactionList",
helpUrl: "inv-part-inventory-transactions",
menuItems: [],
diff --git a/ayanova/src/views/inv-part-requests.vue b/ayanova/src/views/inv-part-requests.vue
index 95248527..0979a9ef 100644
--- a/ayanova/src/views/inv-part-requests.vue
+++ b/ayanova/src/views/inv-part-requests.vue
@@ -12,7 +12,7 @@ export default {
beforeCreate() {
window.$gz.eventBus.$emit("menu-change", {
isMain: true,
- icon: "$ayiPaperPlane",
+ icon: "$ayiParachuteBox",
title: "WorkOrderItemPartRequestList",
helpUrl: "inv-part-requests"
});
diff --git a/ayanova/src/views/inv-part-restocks.vue b/ayanova/src/views/inv-part-restocks.vue
new file mode 100644
index 00000000..e1083539
--- /dev/null
+++ b/ayanova/src/views/inv-part-restocks.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/ayanova/src/views/inv-part-warehouse.vue b/ayanova/src/views/inv-part-warehouse.vue
index 78565bd2..42365d6a 100644
--- a/ayanova/src/views/inv-part-warehouse.vue
+++ b/ayanova/src/views/inv-part-warehouse.vue
@@ -610,7 +610,7 @@ function generateMenu(vm) {
menuOptions.menuItems.push({
title: "PartInventoryTransactionList",
- icon: "$ayiDolly",
+ icon: "$ayiPeopleCarry",
key: FORM_KEY + ":PartInventoryTransactionList",
vm: vm
});
diff --git a/ayanova/src/views/inv-part.vue b/ayanova/src/views/inv-part.vue
index f91ea808..79ca3259 100644
--- a/ayanova/src/views/inv-part.vue
+++ b/ayanova/src/views/inv-part.vue
@@ -833,7 +833,7 @@ function generateMenu(vm) {
menuOptions.menuItems.push({
title: "PartInventoryTransactionList",
- icon: "$ayiDolly",
+ icon: "$ayiPeopleCarry",
key: FORM_KEY + ":PartInventoryTransactionList",
vm: vm
});
diff --git a/ayanova/src/views/inv-purchase-order.vue b/ayanova/src/views/inv-purchase-order.vue
index c5fbd3fd..8ebc4038 100644
--- a/ayanova/src/views/inv-purchase-order.vue
+++ b/ayanova/src/views/inv-purchase-order.vue
@@ -1399,7 +1399,7 @@ function generateMenu(vm) {
let menuOptions = {
isMain: false,
readOnly: vm.formState.readOnly,
- icon: "$ayiDollyFlatbed",
+ icon: "$ayiTruckLoading",
title: "PurchaseOrder",
helpUrl: "inv-purchase-orders",
formData: {
diff --git a/ayanova/src/views/inv-purchase-orders.vue b/ayanova/src/views/inv-purchase-orders.vue
index 636822cb..68edb426 100644
--- a/ayanova/src/views/inv-purchase-orders.vue
+++ b/ayanova/src/views/inv-purchase-orders.vue
@@ -119,7 +119,7 @@ async function clickHandler(menuItem) {
function generateMenu(vm) {
let menuOptions = {
isMain: true,
- icon: "$ayiDollyFlatbed",
+ icon: "$ayiTruckLoading",
title: "InventoryPurchaseOrders",
helpUrl: "inv-purchase-orders",
menuItems: [],