Skip to content

OBGM-570 Fix replenishment not being saved on next step of replenishment workflow#4167

Merged
awalkowiak merged 3 commits intofeature/upgrade-to-grails-3.3.10from
OBGM-570-unable-to-create-bin-replenishment
Jul 17, 2023
Merged

OBGM-570 Fix replenishment not being saved on next step of replenishment workflow#4167
awalkowiak merged 3 commits intofeature/upgrade-to-grails-3.3.10from
OBGM-570-unable-to-create-bin-replenishment

Conversation

@drodzewicz
Copy link
Collaborator

No description provided.

@drodzewicz drodzewicz self-assigned this Jul 13, 2023
@drodzewicz drodzewicz changed the title OBGM-570 Fix replenishment not beeing saved on next step of replenishment workflow OBGM-570 Fix replenishment not being saved on next step of replenishment workflow Jul 13, 2023
"/api/replenishments/$id/"(parseRequest: true) {
controller = { "replenishmentApi" }
action = [GET: "read", POST: "create", PUT: "update"]
action = [GET: "read", POST: "update"]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather change on the frontend side, that update method is called with PUT, instead of changing the mapping for not correct one regarding REST standards

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure, I guess PUT for an update makes much more sense than a POST.
I didn't want to do it since it does change the API a little bit and it seems that previously the POST method was used for update

if (jsonObject.status) {
replenishment.status = ReplenishmentStatus.valueOf(jsonObject.status)
}

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

out of curiosity - what problem did it cause? Is it binded correctly without that?


order.save(failOnError: true)
if (order.hasErrors() || !order.save(failOnError: true)) {
throw new grails.validation.ValidationException("Invalid order", order.errors)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's import the exception on top of the file, and call it throw new ValidationException for better visibility ;)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

makes sense, will do

@drodzewicz
Copy link
Collaborator Author

This was an interesting case that I have never come across before.
I had to compare both develop and migration branches of what exactly was the difference and so I was able to figure out one thing.

So in terms of code and URL mapping, there weren't any differences but there was one interesting behavior that I noticed on grails1 that caused this error to surface on grails 3.

Below is a URLMapping for the replenishmentAPI.
image
You can see that both create and update is defined under the endpoint /api/replenishments/$id/.

So after debugging the develop branch I placed two endpoints on create and update of the replenishmentAPIController and opened a networks tab in browser and I noticed that even thought a request was made to the enpoint POST /api/replenishments/ it still hit the breakpoint on the create method, and later when we click Next button an enpoint of POST /api/replenishments/:id is sent to the API which hits the update method.
If you look at the URLMapping, it doesn't't make sense since these methods are mapped differently so I assume that the named mthods like delete create update list must have overwritten the URLMapping specified in the file.
In grails 3 this issue must have been fixed so now when we were making a request POST /api/replenishments/:id it hit the create method (because that's how it is specified in the mapping file) and not the expected update

@jmiranda
Copy link
Member

@drodzewicz don't forget about these mappings

// Standard REST APIs

"/api/${resource}s"(parseRequest: true) {
    controller = { "${params.resource}Api" }
    action = [GET: "list", POST: "create"]
}

"/api/${resource}s/$id/status"(parseRequest: true) {
    controller = { "${params.resource}Api" }
    action = [GET: "status", DELETE: "deleteStatus", POST: "updateStatus"]
}

"/api/${resource}s/$id"(parseRequest: true) {
    controller = { "${params.resource}Api" }
    action = [GET: "read", POST: "update", PUT: "update", DELETE: "delete"]
}

"/api/replenishments/$id/"(parseRequest: true) {
controller = { "replenishmentApi" }
action = [GET: "read", POST: "create", PUT: "update"]
action = [GET: "read", PUT: "update"]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change POST to link to "update" action. It's not REST-compliant but it's what a developer would expect if they posted to an endpoint for a resource with an ID.

const url = `/api/replenishments/${this.props.match.params.replenishmentId}`;
const payload = { status: 'COMPLETED' };
apiClient.post(url, flattenRequest(payload))
apiClient.put(url, flattenRequest(payload))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm ok with either post or put here, but we can tech-huddle this if necessary. Lazy developers like myself will exclusively use GET and POST when testing an API so I don't mind supporting that.

https://stackoverflow.com/questions/33452765/what-to-do-when-rest-post-provides-an-id

However, there are some resources where this would be confusing and unexpected so we should definitely be conscious of what we're doing and explicit / restrictive where possible.

Here's another long-winded argument for supporting either approach.

https://stackoverflow.com/questions/630453/what-is-the-difference-between-post-and-put-in-http

I don't yet know where I stand.

@jmiranda
Copy link
Member

@drodzewicz @awalkowiak @kchelstowski @alannadolny

FWIW, you can regenerate a report of all URL mappings. However, I don't think this is any more helpful than the UrlMappings.groovy class.

$ grails url-mappings-report

...

2023-07-13 13:42:07,602  INFO [main      ] grails.boot.GrailsApp                   : Application starting in environment: development
Dynamic Mappings
 |    *     | /${controller}/${action}?/${id}?                         | Action: (default action)                                                                            |

Controller: api
 |    *     | /api/${action}/${id}?                                    | Action: (default action)                                                                            |

Controller: dashboard
 |    *     | /                                                        | Action: index                                                                                       |

Controller: errors
 |    *     | ERROR: 500                                               | Action: handleUnauthorized                                                                          |
 |    *     | ERROR: 500                                               | Action: handleValidationErrors                                                                      |
 |    *     | ERROR: 500                                               | Action: handleNotFound                                                                              |
 |    *     | ERROR: 500                                               | Action: handleException                                                                             |
 |    *     | ERROR: 405                                               | Action: handleMethodNotAllowed                                                                      |
 |    *     | ERROR: 404                                               | Action: handleNotFound                                                                              |
 |    *     | ERROR: 401                                               | Action: handleUnauthorized                                                                          |

Controller: genericApi
 |    *     | /api/generic/${resource}/search                          | Action: [GET:search, POST:search]                                                                   |
 |    *     | /api/generic/${resource}                                 | Action: [GET:list, POST:create]                                                                     |
 |    *     | /api/generic/${resource}/${id}                           | Action: [GET:read, POST:update, PUT:update, DELETE:delete]                                          |

Controller: internalLocationApi
 |    *     | /api/internalLocations/search                            | Action: [GET:search]                                                                                |
 |    *     | /api/internalLocations/receiving                         | Action: [GET:listReceiving]                                                                         |

Controller: inventoryItem
 |    *     | /inventoryItem/delete/${id}**?                           | Action: delete                                                                                      |

Controller: inventorySnapshot
 |    *     | /snapshot/${action}?                                     | Action: (default action)                                                                            |

Controller: partialReceivingApi
 |    *     | /api/partialReceiving/exportCsv/${id}                    | Action: [POST:exportCsv]                                                                            |
 |    *     | /api/partialReceiving/importCsv/${id}                    | Action: [POST:importCsv]                                                                            |
 |    *     | /api/partialReceiving                                    | Action: [GET:list, POST:create]                                                                     |
 |    *     | /api/partialReceiving/${id}                              | Action: [GET:read, POST:update]                                                                     |

Controller: replenishmentApi
 |    *     | /api/replenishments/statusOptions                        | Action: [GET:statusOptions]                                                                         |

Controller: stockMovement
 |    *     | /stockRequest/${action}/${id}**?                         | Action: (default action)                                                                            |
 |    *     | /stockMovement/${action}/${id}**?                        | Action: (default action)                                                                            |

Controller: stockMovementApi
 |    *     | /api/stockMovements/requisitionsStatusCodes              | Action: [GET:requisitionStatusCodes]                                                                |
 |    *     | /api/stockMovements/shipmentStatusCodes                  | Action: [GET:shipmentStatusCodes]                                                                   |
 |    *     | /api/stockMovements/createCombinedShipments              | Action: [POST:createCombinedShipments]                                                              |
 |    *     | /api/stockMovements/pendingRequisitionItems              | Action: [GET:pendingRequisitionItems]                                                               |
 |    *     | /api/stockMovements/shippedItems                         | Action: [GET:shippedItems]                                                                          |
 |    *     | /api/stockMovements/pendingRequisitionDetails            | Action: [GET:getPendingRequisitionDetails]                                                          |
 |    *     | /api/stockMovements/createPickList/${id}                 | Action: [GET:createPickList]                                                                        |
 |    *     | /api/stockMovements/exportPickListItems/${id}            | Action: [GET:exportPickListItems]                                                                   |
 |    *     | /api/stockMovements/importPickListItems/${id}            | Action: [POST:importPickListItems]                                                                  |
 |    *     | /api/stockMovements/${id}/updateAdjustedItems            | Action: [POST:updateAdjustedItems]                                                                  |
 |    *     | /api/stockMovements/${id}/validatePicklist               | Action: [GET:validatePicklist]                                                                      |
 |    *     | /api/stockMovements/${id}/updateShipment                 | Action: [POST:updateShipment]                                                                       |
 |    *     | /api/stockMovements/${id}/updateRequisition              | Action: [POST:updateRequisition]                                                                    |
 |    *     | /api/stockMovements/${id}/updateShipmentItems            | Action: [POST:updateShipmentItems]                                                                  |
 |    *     | /api/stockMovements/${id}/updateInventoryItems           | Action: [POST:updateInventoryItems]                                                                 |
 |    *     | /api/stockMovements/${id}/updateItems                    | Action: [POST:updateItems]                                                                          |
 |    *     | /api/stockMovements/${id}/reviseItems                    | Action: [POST:reviseItems]                                                                          |
 |    *     | /api/stockMovements/${id}/removeAllItems                 | Action: [DELETE:removeAllItems]                                                                     |
 |    *     | /api/stockMovements                                      | Action: [GET:list, POST:create]                                                                     |

Controller: stocklistApi
 |    *     | /api/stocklists/sendMail/${id}                           | Action: [POST:sendMail]                                                                             |
 |    *     | /api/stocklists/${id}/clear                              | Action: [POST:clear]                                                                                |
 |    *     | /api/stocklists/${id}/unpublish                          | Action: [POST:unpublish]                                                                            |
 |    *     | /api/stocklists/${id}/publish                            | Action: [POST:publish]                                                                              |
 |    *     | /api/stocklists/${id}/clone                              | Action: [POST:clone]                                                                                |
 |    *     | /api/stocklists/${id}/export                             | Action: [GET:export]                                                                                |

Controller: stocklistItemApi
 |    *     | /api/stocklistItems/availableStocklists                  | Action: [GET:availableStocklists]                                                                   |
 |    *     | /api/stocklistItems/${id}                                | Action: [GET:read, PUT:update, DELETE:remove, POST:save]                                            |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure15$_closure164@134b038
 |    *     | /api/products                                            | Action: [GET:list]                                                                                  |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure6$_closure155@41efbbb
 |    *     | /api/categories                                          | Action: [GET:list, POST:save]                                                                       |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure12$_closure161@421364e
 |    *     | /api/glAccountOptions                                    | Action: [GET:glAccountOptions]                                                                      |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure26$_closure174@4ce89f5
 |    *     | /api/helpscout/configuration                             | Action: [GET:configuration]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure99$_closure185@5256811
 |    *     | /api/replenishments/${id}/removeItem                     | Action: [DELETE:removeItem]                                                                         |

Controller: unitOfMeasureApi
 |    *     | /api/unitOfMeasure/currencies                            | Action: [GET:currencies]                                                                            |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure93$_closure180@64cfbbb
 |    *     | /api/stockTransfers/${id}/sendShipment                   | Action: [POST:sendShipment]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure117$_closure203@95c5d95
 |    *     | /api/dashboard/requisitionsByYear                        | Action: [GET:getRequisitionsByYear]                                                                 |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure114$_closure200@a570ddf
 |    *     | /api/dashboard/fillRateSnapshot                          | Action: [GET:getFillRateSnapshot]                                                                   |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure121$_closure207@adf4564
 |    *     | /api/dashboard/incomingStock                             | Action: [GET:getIncomingStock]                                                                      |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure142$_closure228@d3453c4
 |    *     | /api/productsConfiguration/categoriesCount               | Action: [GET:getCategoriesCount]                                                                    |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure133$_closure219@df42133
 |    *     | /api/purchaseOrders/${id}/rollback                       | Action: [POST:rollback]                                                                             |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure145$_closure231@1322962b
 |    *     | /api/${resource}s                                        | Action: [GET:list, POST:create]                                                                     |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure18$_closure167@15400543
 |    *     | /api/locations/locationTypes                             | Action: [GET:locationTypes]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure10$_closure159@15680541
 |    *     | /api/productGroupOptions                                 | Action: [GET:productGroupOptions]                                                                   |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure126$_closure212@15b9bed1
 |    *     | /api/dashboard/productsInventoried                       | Action: [GET:getProductsInventoried]                                                                |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure13$_closure162@16a5afb2
 |    *     | /api/paymentTermOptions                                  | Action: [GET:paymentTermOptions]                                                                    |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure104$_closure190@188b57d3
 |    *     | /api/dashboard/${id}/subdashboardKeys                    | Action: [GET:getSubdashboardKeys]                                                                   |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure146$_closure232@188d1652
 |    *     | /api/${resource}s/${id}/status                           | Action: [GET:status, DELETE:deleteStatus, POST:updateStatus]                                        |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure120$_closure206@1a94dd7a
 |    *     | /api/dashboard/outgoingStock                             | Action: [GET:getOutgoingStock]                                                                      |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure11$_closure160@20b0f382
 |    *     | /api/tagOptions                                          | Action: [GET:tagOptions]                                                                            |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure98$_closure184@20f05edc
 |    *     | /api/replenishments/${id}                                | Action: [GET:read, POST:create, PUT:update]                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure95$_closure182@20f472e5
 |    *     | /api/stockTransfers/${id}/removeAllItems                 | Action: [DELETE:removeAllItems]                                                                     |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure108$_closure194@2123d4e4
 |    *     | /api/dashboard/receivingBin                              | Action: [GET:getReceivingBin]                                                                       |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure8$_closure157@239520a8
 |    *     | /api/categoryOptions                                     | Action: [GET:categoryOptions]                                                                       |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure129$_closure215@26402187
 |    *     | /api/dashboard/openStockRequests                         | Action: [GET:getOpenStockRequests]                                                                  |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure149$_closure234@28077e83
 |    *     | /api/supportLinks                                        | Action: [GET:getSupportLinks]                                                                       |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure16$_closure165@2853bd89
 |    *     | /api/products/search                                     | Action: [GET:search]                                                                                |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure132$_closure218@28cc5133
 |    *     | /api/orderSummaryStatus                                  | Action: [GET:statusOptions]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure92$_closure179@2a6aba0a
 |    *     | /api/stockTransferItems/${id}                            | Action: [DELETE:removeItem]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure134$_closure220@2be7423c
 |    *     | /api/purchaseOrders                                      | Action: [GET:list]                                                                                  |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure103$_closure189@2d011ebe
 |    *     | /api/dashboard/${id}/config                              | Action: [GET:config]                                                                                |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure112$_closure198@2d295a7b
 |    *     | /api/dashboard/expirationSummary                         | Action: [GET:getExpirationSummary]                                                                  |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure9$_closure158@2e0be061
 |    *     | /api/catalogOptions                                      | Action: [GET:catalogOptions]                                                                        |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure14$_closure163@2f934fca
 |    *     | /api/users                                               | Action: [GET:usersOptions]                                                                          |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure122$_closure208@2fe7e459
 |    *     | /api/dashboard/discrepancy                               | Action: [GET:getDiscrepancy]                                                                        |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure147$_closure233@3138f681
 |    *     | /api/${resource}s/${id}                                  | Action: [GET:read, POST:update, PUT:update, DELETE:delete]                                          |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure125$_closure211@3252f9f8
 |    *     | /api/dashboard/lossCausedByExpiry                        | Action: [GET:getLossCausedByExpiry]                                                                 |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure22$_closure171@32cfe6ba
 |    *     | /api/locations/template                                  | Action: [GET:downloadTemplate]                                                                      |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure150$_closure235@34185c5a
 |    *     | /api/resettingInstance/command                           | Action: [GET:getResettingInstanceCommand]                                                           |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure90$_closure177@34ac70a2
 |    *     | /api/stockTransfers/statusOptions                        | Action: [GET:statusOptions]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure115$_closure201@352df57e
 |    *     | /api/dashboard/fillRateDestinations                      | Action: [GET:getFillRateDestinations]                                                               |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure116$_closure202@359f3ec9
 |    *     | /api/dashboard/inventorySummary                          | Action: [GET:getInventorySummary]                                                                   |

Controller: console
 |    *     | /console/${action}?                                      | Action: (default action)                                                                            |

Controller: loadDataApi
 |    *     | /api/config/data/demo                                    | Action: [GET:load]                                                                                  |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure128$_closure214@39a89194
 |    *     | /api/dashboard/stockOutLastMonth                         | Action: [GET:getStockOutLastMonth]                                                                  |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure143$_closure229@4046b148
 |    *     | /api/productsConfiguration/downloadCategories            | Action: [GET:downloadCategories]                                                                    |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure139$_closure225@413fab81
 |    *     | /api/productsConfiguration/categoryOptions               | Action: [GET:categoryOptions]                                                                       |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure102$_closure188@4142baa0
 |    *     | /api/dashboard/config                                    | Action: [POST:updateConfig]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure110$_closure196@457e0e61
 |    *     | /api/dashboard/defaultBin                                | Action: [GET:getDefaultBin]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure130$_closure216@45c682ad
 |    *     | /api/dashboard/inventoryValue                            | Action: [GET:getInventoryValue]                                                                     |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure24$_closure173@45ecfa94
 |    *     | /api/locations/${id}/${action}                           | Action: (default action)                                                                            |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure109$_closure195@46bea4ca
 |    *     | /api/dashboard/itemsInventoried                          | Action: [GET:getItemsInventoried]                                                                   |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure100$_closure186@47529ae7
 |    *     | /api/replenishments/${id}/picklists                      | Action: [GET:getPicklist, POST:createPicklist, PUT:updatePicklist, DELETE:deletePicklist]           |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure136$_closure222@476b1388
 |    *     | /api/productsConfiguration/importCategories              | Action: [POST:importCategories]                                                                     |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure20$_closure169@47d14dc1
 |    *     | /api/locations/binLocations/template                     | Action: [GET:downloadBinLocationTemplate]                                                           |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure96$_closure183@493cf6b2
 |    *     | /api/requirements                                        | Action: [GET:requirements]                                                                          |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure88$_closure175@4bbb35b5
 |    *     | /api/invoiceStatuses                                     | Action: [GET:statusOptions]                                                                         |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure144$_closure230@4bd571ca
 |    *     | /api/loadData/listOfDemoData                             | Action: [GET:listOfDemoData]                                                                        |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure106$_closure192@4dd2b0eb
 |    *     | /api/dashboard/inProgressShipments                       | Action: [GET:getInProgressShipments]                                                                |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure124$_closure210@4f8bea17
 |    *     | /api/dashboard/productWithNegativeInventory              | Action: [GET:getProductWithNegativeInventory]                                                       |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure23$_closure172@508da476
 |    *     | /api/locations/importCsv                                 | Action: [POST:importCsv]                                                                            |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure135$_closure221@5109b474
 |    *     | /api/purchaseOrders/${id}                                | Action: [GET:read, DELETE:delete]                                                                   |

Controller: combinedShipmentItemApi
 |    *     | /api/combinedShipmentItems/exportTemplate                | Action: [GET:exportTemplate]                                                                        |
 |    *     | /api/combinedShipmentItems/getProductsInOrders           | Action: [GET:getProductsInOrders]                                                                   |
 |    *     | /api/combinedShipmentItems/findOrderItems                | Action: [POST:findOrderItems]                                                                       |
 |    *     | /api/combinedShipmentItems/importTemplate/${id}          | Action: [POST:importTemplate]                                                                       |
 |    *     | /api/combinedShipmentItems/addToShipment/${id}           | Action: [POST:addItemsToShipment]                                                                   |
 |    *     | /api/orderNumberOptions                                  | Action: [GET:getOrderOptions]                                                                       |

Controller: stockMovementItemApi
 |    *     | /api/stockMovements/${id}/substitutionItems              | Action: [GET:getSubstitutionItems]                                                                  |
 |    *     | /api/stockMovements/${id}/stockMovementItems             | Action: [GET:getStockMovementItems]                                                                 |
 |    *     | /api/stockMovementItems/${id}/removeItem                 | Action: [DELETE:eraseItem]                                                                          |
 |    *     | /api/stockMovementItems/${id}/cancelItem                 | Action: [POST:cancelItem]                                                                           |
 |    *     | /api/stockMovementItems/${id}/revertItem                 | Action: [POST:revertItem]                                                                           |
 |    *     | /api/stockMovementItems/${id}/substituteItem             | Action: [POST:substituteItem]                                                                       |
 |    *     | /api/stockMovementItems/${id}/clearPicklist              | Action: [POST:clearPicklist]                                                                        |
 |    *     | /api/stockMovementItems/${id}/createPicklist             | Action: [POST:createPicklist]                                                                       |
 |    *     | /api/stockMovementItems/${id}/updatePicklist             | Action: [POST:updatePicklist]                                                                       |
 |    *     | /api/stockMovementItems/${id}/details                    | Action: [GET:details]                                                                               |
 |    *     | /api/stockMovementItems                                  | Action: [GET:list]                                                                                  |
 |    *     | /api/stockMovementItems/${id}                            | Action: [GET:read]                                                                                  |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure94$_closure181@551ac65d
 |    *     | /api/stockTransfers/${id}/rollback                       | Action: [POST:rollback]                                                                             |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure7$_closure156@595a4fdf
 |    *     | /api/categories/${id}                                    | Action: [GET:read, POST:save, PUT:save, DELETE:delete]                                              |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure89$_closure176@5adc7a70
 |    *     | /api/invoiceTypeCodes                                    | Action: [GET:invoiceTypeCodes]                                                                      |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure113$_closure199@618c59f5
 |    *     | /api/dashboard/fillRate                                  | Action: [GET:getFillRate]                                                                           |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure127$_closure213@649b8b05
 |    *     | /api/dashboard/percentageAdHoc                           | Action: [GET:getPercentageAdHoc]                                                                    |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure19$_closure168@65b1a921
 |    *     | /api/locations/supportedActivities                       | Action: [GET:supportedActivities]                                                                   |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure21$_closure170@65e4640f
 |    *     | /api/locations/${id}/binLocations/import                 | Action: [POST:importBinLocations]                                                                   |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure17$_closure166@67c84a4b
 |    *     | /api/products/${id}/${action}                            | Action: (default action)                                                                            |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure119$_closure205@690d27fb
 |    *     | /api/dashboard/receivedStockMovements                    | Action: [GET:getReceivedStockMovements]                                                             |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure101$_closure187@6b03c30d
 |    *     | /api/replenishments/${id}/picklistItem                   | Action: [POST:createPicklistItem]                                                                   |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure91$_closure178@6c21d025
 |    *     | /api/stockTransfers/candidates                           | Action: [GET:stockTransferCandidates, POST:returnCandidates]                                        |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure140$_closure226@6e3a7ff1
 |    *     | /api/productsConfiguration/productOptions                | Action: [GET:productOptions]                                                                        |

Controller: invoiceApi
 |    *     | /api/invoices/${id}/prepaymentItems                      | Action: [GET:getPrepaymentItems]                                                                    |
 |    *     | /api/invoices/${id}/post                                 | Action: [POST:postInvoice]                                                                          |
 |    *     | /api/invoices/${id}/submit                               | Action: [POST:submitInvoice]                                                                        |
 |    *     | /api/invoices/${id}/removeItem                           | Action: [DELETE:removeItem]                                                                         |
 |    *     | /api/invoices/${id}/shipments                            | Action: [GET:getShipmentNumbers]                                                                    |
 |    *     | /api/invoices/${id}/orders                               | Action: [GET:getOrderNumbers]                                                                       |
 |    *     | /api/invoices/${id}/invoiceItemCandidates                | Action: [POST:getInvoiceItemCandidates]                                                             |
 |    *     | /api/invoices/${id}/items                                | Action: [POST:updateItems, GET:getInvoiceItems]                                                     |

Controller: putawayItemApi
 |    *     | /api/putawayItems/${id}                                  | Action: [DELETE:removingItem]                                                                       |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure111$_closure197@7775dca5
 |    *     | /api/dashboard/expiredProductsInStock                    | Action: [GET:getExpiredProductsInStock]                                                             |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure123$_closure209@77f09340
 |    *     | /api/dashboard/delayedShipments                          | Action: [GET:getDelayedShipments]                                                                   |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure107$_closure193@78eab491
 |    *     | /api/dashboard/inProgressPutaways                        | Action: [GET:getInProgressPutaways]                                                                 |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure118$_closure204@79d8d3af
 |    *     | /api/dashboard/sentStockMovements                        | Action: [GET:getSentStockMovements]                                                                 |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure137$_closure223@7a133ecc
 |    *     | /api/productsConfiguration/importCategoryCsv             | Action: [POST:importCategoryCsv]                                                                    |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure138$_closure224@7b18aa96
 |    *     | /api/productsConfiguration/downloadCategoryTemplate      | Action: [GET:downloadCategoryTemplate]                                                              |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure131$_closure217@7b34db47
 |    *     | /api/dashboard/openPurchaseOrdersCount                   | Action: [GET:getOpenPurchaseOrdersCount]                                                            |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure141$_closure227@7bb824b4
 |    *     | /api/productsConfiguration/importProducts                | Action: [POST:importProducts]                                                                       |

Controller: org.pih.warehouse.UrlMappings$__clinit__closure1$_closure105$_closure191@7ef9d56f
 |    *     | /api/dashboard/inventoryByLotAndBin                      | Action: [GET:getInventoryByLotAndBin]                                                               |

@awalkowiak awalkowiak merged commit 85e7b33 into feature/upgrade-to-grails-3.3.10 Jul 17, 2023
@awalkowiak awalkowiak deleted the OBGM-570-unable-to-create-bin-replenishment branch July 17, 2023 08:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants