Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit655e4c1

Browse files
authored
OBPIH-7184 fix1. only remove 0 quantity lines on SMs when proceeding (#5601)
1 parentc6cd91b commit655e4c1

File tree

5 files changed

+79
-80
lines changed

5 files changed

+79
-80
lines changed

‎grails-app/controllers/org/pih/warehouse/api/StockMovementApiController.groovy‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,9 +297,11 @@ class StockMovementApiController {
297297
*@deprecated FIXME refactor to avoid using RPC-style endpoints
298298
*/
299299
defupdateItems() {
300+
JSONObject requestBody= request.JSONasJSONObject
301+
300302
StockMovement stockMovement= stockMovementService.getStockMovement(params.id)
301-
bindStockMovement(stockMovement,request.JSON)
302-
stockMovement= stockMovementService.updateItems(stockMovement)
303+
bindStockMovement(stockMovement,requestBody)
304+
stockMovement= stockMovementService.updateItems(stockMovement, requestBody.optBoolean('removeEmptyItems'))
303305
render([data: stockMovement]asJSON)
304306
}
305307

‎grails-app/services/org/pih/warehouse/inventory/StockMovementService.groovy‎

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2365,9 +2365,9 @@ class StockMovementService {
23652365
}
23662366
}
23672367

2368-
StockMovementupdateItems(StockMovementstockMovement) {
2368+
StockMovementupdateItems(StockMovementstockMovement,booleanremoveEmptyItems=false) {
23692369
if (stockMovement.requisition) {
2370-
return updateRequisitionBasedStockMovementItems(stockMovement)
2370+
return updateRequisitionBasedStockMovementItems(stockMovement, removeEmptyItems)
23712371
}
23722372
else {
23732373
return updateShipmentBasedStockMovementItems(stockMovement)
@@ -2458,14 +2458,14 @@ class StockMovementService {
24582458
return shipmentItem
24592459
}
24602460

2461-
2462-
StockMovementupdateRequisitionBasedStockMovementItems(StockMovementstockMovement) {
2461+
privateStockMovementupdateRequisitionBasedStockMovementItems(StockMovementstockMovement,
2462+
booleanremoveEmptyItems) {
24632463
Requisition requisition=Requisition.get(stockMovement.id)
24642464

24652465
if (stockMovement.lineItems) {
24662466
stockMovement.lineItems.each {StockMovementItemstockMovementItem->
24672467
RequisitionItem requisitionItem
2468-
// Try to find a matching stock movement item
2468+
// Try to find arequisition itemmatching the stock movement item
24692469
if (stockMovementItem.id) {
24702470
requisitionItem= requisition.requisitionItems.find {
24712471
it.id== stockMovementItem.id
@@ -2481,23 +2481,33 @@ class StockMovementService {
24812481
requisitionItem.quantityCounted= stockMovementItem.quantityCounted
24822482
removeShipmentAndPicklistItemsForModifiedRequisitionItem(requisitionItem)
24832483

2484-
if (stockMovementItem.quantityRequested!= requisitionItem.quantity) {
2484+
// If the item has 0 or null quantity requested, remove it. We add the ability to conditionally not
2485+
// remove empty items because often the update is a part of a "save as draft" feature. We only want
2486+
// to remove empty rows when we're actually proceeding to the next step of the requisition flow.
2487+
if (removeEmptyItems&&!stockMovementItem.quantityRequested) {
2488+
log.info"Item deleted"+ requisitionItem.id
24852489
requisitionItem.undoChanges()
2486-
}
2490+
requisition.removeFromRequisitionItems(requisitionItem)
2491+
requisitionItem.delete(flush:true)
2492+
}else {
2493+
if (stockMovementItem.quantityRequested!= requisitionItem.quantity) {
2494+
requisitionItem.undoChanges()
2495+
}
24872496

2488-
requisitionItem.quantity= stockMovementItem.quantityRequested
2489-
requisitionItem.quantityApproved= stockMovementItem.quantityRequested
2497+
requisitionItem.quantity= stockMovementItem.quantityRequested
2498+
requisitionItem.quantityApproved= stockMovementItem.quantityRequested
24902499

2491-
if (stockMovementItem.product) requisitionItem.product= stockMovementItem.product
2492-
if (stockMovementItem.inventoryItem) requisitionItem.inventoryItem= stockMovementItem.inventoryItem
2493-
if (stockMovementItem.sortOrder) requisitionItem.orderIndex= stockMovementItem.sortOrder
2500+
if (stockMovementItem.product) requisitionItem.product= stockMovementItem.product
2501+
if (stockMovementItem.inventoryItem) requisitionItem.inventoryItem= stockMovementItem.inventoryItem
2502+
if (stockMovementItem.sortOrder) requisitionItem.orderIndex= stockMovementItem.sortOrder
24942503

2495-
requisitionItem.recipient= stockMovementItem.recipient
2496-
requisitionItem.palletName= stockMovementItem.palletName
2497-
requisitionItem.boxName= stockMovementItem.boxName
2498-
requisitionItem.lotNumber= stockMovementItem.lotNumber
2499-
requisitionItem.expirationDate= stockMovementItem.expirationDate
2500-
requisitionItem.comment= stockMovementItem.comments
2504+
requisitionItem.recipient= stockMovementItem.recipient
2505+
requisitionItem.palletName= stockMovementItem.palletName
2506+
requisitionItem.boxName= stockMovementItem.boxName
2507+
requisitionItem.lotNumber= stockMovementItem.lotNumber
2508+
requisitionItem.expirationDate= stockMovementItem.expirationDate
2509+
requisitionItem.comment= stockMovementItem.comments
2510+
}
25012511
}
25022512
// Otherwise we create a new one
25032513
else {

‎src/js/components/stock-movement-wizard/inbound/AddItemsPage.jsx‎

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { connect } from 'react-redux';
1313
importAlertfrom'react-s-alert';
1414

1515
import{fetchUsers,hideSpinner,showSpinner}from'actions';
16+
import{STOCK_MOVEMENT_STATUS,STOCK_MOVEMENT_UPDATE_ITEMS}from'api/urls';
1617
importArrayFieldfrom'components/form-elements/ArrayField';
1718
importButtonFieldfrom'components/form-elements/ButtonField';
1819
importDateFieldfrom'components/form-elements/DateField';
@@ -649,10 +650,12 @@ class AddItemsPage extends Component {
649650
*/
650651
updateInventoryItemsAndTransitionToNextStep(formValues,lineItems){
651652
constitemsToSave=this.getLineItemsToBeSaved(lineItems);
652-
constupdateItemsUrl=`/api/stockMovements/${this.state.values.stockMovementId}/updateInventoryItems`;
653+
constupdateItemsUrl=STOCK_MOVEMENT_UPDATE_ITEMS(this.state.values.stockMovementId);
653654
constpayload={
654655
id:this.state.values.stockMovementId,
655656
lineItems:itemsToSave,
657+
// We're proceeding to the next step so should not have any zero quantity items at this point.
658+
removeEmptyItems:true,
656659
};
657660

658661
this.props.showSpinner();
@@ -669,10 +672,12 @@ class AddItemsPage extends Component {
669672
*/
670673
saveRequisitionItemsInCurrentStep(itemCandidatesToSave){
671674
constitemsToSave=this.getLineItemsToBeSaved(itemCandidatesToSave);
672-
constupdateItemsUrl=`/api/stockMovements/${this.state.values.stockMovementId}/updateItems`;
675+
constupdateItemsUrl=STOCK_MOVEMENT_UPDATE_ITEMS(this.state.values.stockMovementId);
673676
constpayload={
674677
id:this.state.values.stockMovementId,
675678
lineItems:itemsToSave,
679+
// We're saving without proceeding so it's fine to have items with no quantity at this point.
680+
removeEmptyItems:false,
676681
};
677682

678683
if(payload.lineItems.length){
@@ -709,12 +714,7 @@ class AddItemsPage extends Component {
709714
*/
710715
save(formValues){
711716
constlineItems=_.filter(formValues.lineItems,(item)=>!_.isEmpty(item));
712-
713-
if(_.some(lineItems,(item)=>!item.quantityRequested||item.quantityRequested==='0')){
714-
this.confirmSave(()=>this.saveItems(lineItems));
715-
}else{
716-
this.saveItems(lineItems);
717-
}
717+
this.saveItems(lineItems);
718718
}
719719

720720
/**
@@ -830,13 +830,11 @@ class AddItemsPage extends Component {
830830
}
831831

832832
/**
833-
* Transition to next stock movement status:
834-
* - 'CHECKING' if origin type is supplier.
835-
* - 'VERIFYING' if origin type is other than supplier.
833+
* Transition to next stock movement status: CHECKING
836834
*@public
837835
*/
838836
transitionToNextStep(){
839-
consturl=`/api/stockMovements/${this.state.values.stockMovementId}/status`;
837+
consturl=STOCK_MOVEMENT_STATUS(this.state.values.stockMovementId);
840838
constpayload={status:'CHECKING'};
841839

842840
if(this.state.values.statusCode==='CREATED'){

‎src/js/components/stock-movement-wizard/outbound/AddItemsPage.jsx‎

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
showInfoBar,
2424
showSpinner,
2525
}from'actions';
26+
import{STOCK_MOVEMENT_STATUS,STOCK_MOVEMENT_UPDATE_ITEMS}from'api/urls';
2627
importArrayFieldfrom'components/form-elements/ArrayField';
2728
importButtonFieldfrom'components/form-elements/ButtonField';
2829
importLabelFieldfrom'components/form-elements/LabelField';
@@ -868,10 +869,12 @@ class AddItemsPage extends Component {
868869
*/
869870
saveRequisitionItems(lineItems){
870871
constitemsToSave=this.getLineItemsToBeSaved(lineItems);
871-
constupdateItemsUrl=`/api/stockMovements/${this.state.values.stockMovementId}/updateItems`;
872+
constupdateItemsUrl=STOCK_MOVEMENT_UPDATE_ITEMS(this.state.values.stockMovementId);
872873
constpayload={
873874
id:this.state.values.stockMovementId,
874875
lineItems:itemsToSave,
876+
// We're proceeding to the next step so should not have any zero quantity items at this point.
877+
removeEmptyItems:true,
875878
};
876879

877880
if(payload.lineItems.length){
@@ -893,10 +896,12 @@ class AddItemsPage extends Component {
893896
constfilteredCandidates=itemCandidatesToSave
894897
.filter((item)=>item.rowSaveStatus!==RowSaveStatus.SAVING);
895898
constitemsToSave=this.getLineItemsToBeSaved(filteredCandidates);
896-
constupdateItemsUrl=`/api/stockMovements/${this.state.values.stockMovementId}/updateItems`;
899+
constupdateItemsUrl=STOCK_MOVEMENT_UPDATE_ITEMS(this.state.values.stockMovementId);
897900
constpayload={
898901
id:this.state.values.stockMovementId,
899902
lineItems:itemsToSave,
903+
// We're saving without proceeding so it's fine to have items with no quantity at this point.
904+
removeEmptyItems:false,
900905
};
901906

902907
if(payload.lineItems.length){
@@ -1104,14 +1109,7 @@ class AddItemsPage extends Component {
11041109
save(formValues){
11051110
actionInProgress=true;
11061111
constlineItems=_.filter(formValues.lineItems,(item)=>!_.isEmpty(item));
1107-
1108-
if(_.some(lineItems,(item)=>!item.quantityRequested||item.quantityRequested==='0')){
1109-
this.confirmSave(()=>{
1110-
this.saveItems(lineItems);
1111-
});
1112-
}else{
1113-
this.saveItems(lineItems);
1114-
}
1112+
this.saveItems(lineItems);
11151113
}
11161114

11171115
/**
@@ -1248,13 +1246,11 @@ class AddItemsPage extends Component {
12481246
}
12491247

12501248
/**
1251-
* Transition to next stock movement status:
1252-
* - 'CHECKING' if origin type is supplier.
1253-
* - 'VERIFYING' if origin type is other than supplier.
1249+
* Transition to next stock movement status: REQUESTED
12541250
*@public
12551251
*/
12561252
transitionToNextStep({ values}){
1257-
consturl=`/api/stockMovements/${this.state.values.stockMovementId}/status`;
1253+
consturl=STOCK_MOVEMENT_STATUS(this.state.values.stockMovementId);
12581254
constpayload={status:'REQUESTED'};
12591255

12601256
this.props.showSpinner();

‎src/js/components/stock-movement-wizard/request/AddItemsPage.jsx‎

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { withRouter } from 'react-router-dom';
1414
importAlertfrom'react-s-alert';
1515

1616
import{fetchUsers,hideSpinner,showSpinner}from'actions';
17+
import{STOCK_MOVEMENT_STATUS,STOCK_MOVEMENT_UPDATE_ITEMS}from'api/urls';
1718
importArrayFieldfrom'components/form-elements/ArrayField';
1819
importButtonFieldfrom'components/form-elements/ButtonField';
1920
importLabelFieldfrom'components/form-elements/LabelField';
@@ -1175,35 +1176,24 @@ class AddItemsPage extends Component {
11751176
saveAndTransitionToNextStep(formValues,lineItems){
11761177
this.props.showSpinner();
11771178

1178-
if(formValues.origin.type==='SUPPLIER'||!formValues.hasManageInventory){
1179-
this.saveRequisitionItems(lineItems)
1180-
.then((resp)=>{
1181-
letvalues=formValues;
1182-
if(resp){
1183-
values={ ...formValues,lineItems:resp.data.data.lineItems};
1184-
}
1185-
this.transitionToNextStep('CHECKING')
1186-
.then(()=>{
1187-
this.props.nextPage(values);
1188-
})
1189-
.catch(()=>this.props.hideSpinner());
1190-
})
1191-
.catch(()=>this.props.hideSpinner());
1192-
}else{
1193-
this.saveRequisitionItems(lineItems)
1194-
.then((resp)=>{
1195-
letvalues=formValues;
1196-
if(resp){
1197-
values={ ...formValues,lineItems:resp.data.data.lineItems};
1198-
}
1199-
this.transitionToNextStep('VERIFYING')
1200-
.then(()=>{
1201-
this.props.nextPage(values);
1202-
})
1203-
.catch(()=>this.props.hideSpinner());
1204-
})
1205-
.catch(()=>this.props.hideSpinner());
1206-
}
1179+
// TODO: This is pre-existing code but why are we using 'VERIFYING' here for non-suppliers?
1180+
// It's not a valid StockMovementStatusCode value. Should this be 'VALIDATED'??
1181+
conststatus=(formValues.origin.type==='SUPPLIER'||!formValues.hasManageInventory)
1182+
?'CHECKING' :'VERIFYING';
1183+
1184+
this.saveRequisitionItems(lineItems)
1185+
.then((resp)=>{
1186+
letvalues=formValues;
1187+
if(resp){
1188+
values={ ...formValues,lineItems:resp.data.data.lineItems};
1189+
}
1190+
this.transitionToNextStep(status)
1191+
.then(()=>{
1192+
this.props.nextPage(values);
1193+
})
1194+
.catch(()=>this.props.hideSpinner());
1195+
})
1196+
.catch(()=>this.props.hideSpinner());
12071197
}
12081198

12091199
/**
@@ -1213,10 +1203,12 @@ class AddItemsPage extends Component {
12131203
*/
12141204
saveRequisitionItems(lineItems){
12151205
constitemsToSave=this.getLineItemsToBeSaved(lineItems);
1216-
constupdateItemsUrl=`/api/stockMovements/${this.state.values.stockMovementId}/updateItems`;
1206+
constupdateItemsUrl=STOCK_MOVEMENT_UPDATE_ITEMS(this.state.values.stockMovementId);
12171207
constpayload={
12181208
id:this.state.values.stockMovementId,
12191209
lineItems:itemsToSave,
1210+
// We're proceeding to the next step so should not have any zero quantity items at this point.
1211+
removeEmptyItems:true,
12201212
};
12211213

12221214
if(payload.lineItems.length){
@@ -1247,10 +1239,12 @@ class AddItemsPage extends Component {
12471239
*/
12481240
saveRequisitionItemsInCurrentStep(itemCandidatesToSave){
12491241
constitemsToSave=this.getLineItemsToBeSaved(itemCandidatesToSave);
1250-
constupdateItemsUrl=`/api/stockMovements/${this.state.values.stockMovementId}/updateItems`;
1242+
constupdateItemsUrl=STOCK_MOVEMENT_UPDATE_ITEMS(this.state.values.stockMovementId);
12511243
constpayload={
12521244
id:this.state.values.stockMovementId,
12531245
lineItems:itemsToSave,
1246+
// We're saving without proceeding so it's fine to have items with no quantity at this point.
1247+
removeEmptyItems:false,
12541248
};
12551249
if(payload.lineItems.length){
12561250
returnapiClient.post(updateItemsUrl,payload)
@@ -1344,8 +1338,7 @@ class AddItemsPage extends Component {
13441338
consterrors=this.validate(formValues).lineItems;
13451339
if(!errors.length){
13461340
constlineItems=_.filter(formValues.lineItems,(item)=>!_.isEmpty(item));
1347-
constzeroedLines=_.some(lineItems,(item)=>!item.quantityRequested||item.quantityRequested==='0');
1348-
if(zeroedLines||this.state.isRequestFromWard){
1341+
if(this.state.isRequestFromWard){
13491342
this.confirmSave(()=>{
13501343
saveAndRedirect(lineItems);
13511344
});
@@ -1465,7 +1458,7 @@ class AddItemsPage extends Component {
14651458
*@public
14661459
*/
14671460
asynctransitionToNextStep(status){
1468-
consturl=`/api/stockMovements/${this.state.values.stockMovementId}/status`;
1461+
consturl=STOCK_MOVEMENT_STATUS(this.state.values.stockMovementId);
14691462
constpayload={ status};
14701463
const{ movementNumber}=this.state.values;
14711464
if(this.state.values.statusCode==='CREATED'){

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp