Edit instance connection of order line design

Edit instance connection of order line design

Author

Andrei Makaranka

Author

Andrei Makaranka

JIRA task

https://folio-org.atlassian.net/browse/UXPROD-3619

Business Requirements

https://folio-org.atlassian.net/browse/UXPROD-3619

Architects Review

In Progress

PO review

In Progress

Revision History

Version

Date

Owner

Description

Reason

Version

Date

Owner

Description

Reason

v1.0

04.27.2022

@Andrei Makaranka

Initial version



v2.0

04.28.2022

@@Andrei Makaranka

Model and API definitions added



v3.0

05.01.2022

@Andrei Makaranka 

business PATCH method design added



v3.1

05.04.2022

@Andrei Makaranka 

Diagrams added



v3.2

05.09.2022

@Andrei Makaranka 

storage PATCH method design added



Overview

Current situation or problem: When a purchase orders is connected to the wrong instance there is no way to correct it. Unopening orders to do this is causing issues with receiving workflow.

Use cases

  • Purchase order was connected to the wrong instance (often the electronic rather than physical instance) because of instance matching logic that is invoked for orders created through GOBI integration.

  • Purchase order was connected to the wrong instance because of human error.

  • Purchase order was connected to the wrong instance during order import or migration.

High-Level Requirements:



Constraints

  • Instance update can not be dine for Package purchase order line

Assumptions, dependencies

In scope

Allow user to change the instance connection of a POL
When changing connection FOLIO will update all related order and inventory records

Out of Scope

  • Allow user to Change instance connection but only update some records (Ie. do not move certain items)

Architecturally Significant Requirements

  • No need to support distribution and compensation transactions

Solution Design

Data Model

mod-orders

Define schema for DTO "patch_order_line_request" 

Name

Type

Mandatory

Default

Description

Note

Name

Type

Mandatory

Default

Description

Note

operation

enum

Y

NA

Type of a partial modification

[REPLACE_INSTANCE_REF]

replaceInstanceRef

replace_order_line_instance_ref

N

NA

Replace instance reference



Define schema for DTO "replace_order_line_instance_ref"

Name

Type

Mandatory

Default

Description

Note

Name

Type

Mandatory

Default

Description

Note

newInstanceId

UUID

Y

NA

Reference to new instance



holdingsOperation

enum

N

NA

How to process connected holdings

[MOVE, FIND_OR_CREATE, CREATE]

deleteAbandonedHoldings

boolean

Y

false

If abandoned holdings will be deleted



mod-orders-storage

Define schema for DTO "storage_patch_order_line_request" 

Name

Type

Mandatory

Default

Description

Note

Name

Type

Mandatory

Default

Description

Note

operation

enum

Y

NA

Type of a partial modification

[REPLACE_INSTANCE_REF]

replaceInstanceRef

storage_replace_order_line_instance_ref

N

NA

Replace instance reference



Define schema for DTO "storage_replace_order_line_instance_ref"

Name

Type

Mandatory

Default

Description

Note

Name

Type

Mandatory

Default

Description

Note

newInstanceId

UUID

Y

NA

Reference to new instance



holdings

array of storage_replace_order_line_holding_refs

N

NA

Holding references for replacement in the locations and pieces



Define schema for DTO "storage_replace_order_line_holding_refs"

Name

Type

Mandatory

Default

Description

Note

Name

Type

Mandatory

Default

Description

Note

fromHoldingId

UUID

Y

NA

Reference to previous holding



toHoldingId

UUID

Y

NA

 Reference to new holding



APIs

mod-orders-storage : Add PATCH method into ramls/po-line.raml

Method

Path

Request

Response

Description

Interface

Notes

Method

Path

Request

Response

Description

Interface

Notes

PATCH

/orders-storage/po-lines/{id}

storage_patch_order_line_request

NA : Status 204

Apply partial modifications to a order line

orders-storage.po-lines.item.patch

https://www.rfc-editor.org/rfc/rfc5789

mod-orders : Add PATCH method into ramls/order-lines.raml 

Method

Path

Request

Response

Description

Interface

Notes

Method

Path

Request

Response

Description

Interface

Notes

PATCH

orders/order-lines/{id}

patch_order_line_request

NA : Status 204

Apply partial modifications to a order line

orders.order-lines.item.patch

https://www.rfc-editor.org/rfc/rfc5789

Detailed design

Class diagram

Should be defined in the mod-orders  MODORDERS-683 (DTO : patch_order_line_request) and mod-orders-storage MODORDSTOR-298 (DTO : storage_patch_order_line_request)

Sequence diagrams

Work Breakdown Structure



Work

Comments

Story

~ Estimate



Work

Comments

Story

~ Estimate

1

After updating Instance for opened order all items should be relinked with new instance



https://folio-org.atlassian.net/browse/MODORDERS-618

2

2

Implement PATCH Storage API for updating Instance Reference for Non-package order line



https://folio-org.atlassian.net/browse/MODORDSTOR-299

3

3

Define new business API for updating Instance Reference for Non-package order line



https://folio-org.atlassian.net/browse/MODORDERS-683

2

4

Implement edit instance connection logic of POL - create inventory set to Instance, holding or Instance, holding, item



https://folio-org.atlassian.net/browse/MODORDERS-684

3

5

Implement edit instance connection logic of POL - create inventory set to Instance or none



https://folio-org.atlassian.net/browse/MODORDERS-685

3

6

Define data model for supporting edit instance connection logic of POL



https://folio-org.atlassian.net/browse/MODORDSTOR-297

1

Open Items

Question

Answer

Question

Answer

@Andrei Makaranka Which link should be updated if there are more than one in the line?

@Dennis Bridges Each link should be updated separately. If the POL has more than one location/holdings, after the instance connection is changed the POL should still have more than one location and depending on the settings used a new holdings ID should be added for each “location”. 

If the POL only has Holdings IDs you could use those existing holdings IDs to get a location ID from the “Permanent location” of each holdings. 

@Andrei Makaranka For which pieces is it allowed to change the instance?(Expected, Received)

@Dennis Bridges