diff --git a/libs/remission/data-access/src/lib/helpers/calc-stock-to-remit.helper.ts b/libs/remission/data-access/src/lib/helpers/calc-stock-to-remit.helper.ts index db2f7641f..8af484973 100644 --- a/libs/remission/data-access/src/lib/helpers/calc-stock-to-remit.helper.ts +++ b/libs/remission/data-access/src/lib/helpers/calc-stock-to-remit.helper.ts @@ -24,11 +24,11 @@ export const getStockToRemit = ({ availableStock: number; }): number => { const remainingQuantityInStock = remissionItem?.remainingQuantityInStock; - let predefinedReturnQuantity: number | undefined = 0; + let predefinedReturnQuantity: number | undefined = undefined; // #5269 Fix - predefinedReturnQuantity 0 soll genauso behandelt werden wie undefined bei Pflichtremission if (remissionListType === RemissionListType.Pflicht) { - predefinedReturnQuantity = - (remissionItem as ReturnItem)?.predefinedReturnQuantity ?? 0; + predefinedReturnQuantity = (remissionItem as ReturnItem) + ?.predefinedReturnQuantity; } if (remissionListType === RemissionListType.Abteilung) { @@ -62,7 +62,7 @@ export const calculateStockToRemit = ({ predefinedReturnQuantity?: number; remainingQuantityInStock?: number; }): number => { - if (predefinedReturnQuantity === undefined) { + if (!predefinedReturnQuantity) { const stockToRemit = availableStock - (remainingQuantityInStock ?? 0); return stockToRemit < 0 ? 0 : stockToRemit; } diff --git a/libs/remission/feature/remission-list/src/lib/remission-list-item/remission-list-item.component.spec.ts b/libs/remission/feature/remission-list/src/lib/remission-list-item/remission-list-item.component.spec.ts index 2b4d0eae3..f746a5fe3 100644 --- a/libs/remission/feature/remission-list/src/lib/remission-list-item/remission-list-item.component.spec.ts +++ b/libs/remission/feature/remission-list/src/lib/remission-list-item/remission-list-item.component.spec.ts @@ -374,9 +374,13 @@ describe('RemissionListItemComponent', () => { }); describe('hasStockToRemit', () => { - it('should return true when stockToRemit > 0', () => { - const { getStockToRemit } = require('@isa/remission/data-access'); + it('should return true when both availableStock > 0 and stockToRemit > 0', () => { + const { + getStockToRemit, + calculateAvailableStock, + } = require('@isa/remission/data-access'); getStockToRemit.mockReturnValue(5); + calculateAvailableStock.mockReturnValue(10); fixture.componentRef.setInput('item', createMockReturnItem()); fixture.componentRef.setInput('stock', createMockStockInfo()); @@ -385,9 +389,13 @@ describe('RemissionListItemComponent', () => { expect(component.hasStockToRemit()).toBe(true); }); - it('should return false when stockToRemit is 0', () => { - const { getStockToRemit } = require('@isa/remission/data-access'); + it('should return false when stockToRemit is 0 even if availableStock > 0', () => { + const { + getStockToRemit, + calculateAvailableStock, + } = require('@isa/remission/data-access'); getStockToRemit.mockReturnValue(0); + calculateAvailableStock.mockReturnValue(10); fixture.componentRef.setInput('item', createMockReturnItem()); fixture.componentRef.setInput('stock', createMockStockInfo()); @@ -396,9 +404,73 @@ describe('RemissionListItemComponent', () => { expect(component.hasStockToRemit()).toBe(false); }); - it('should return false when stockToRemit is negative', () => { - const { getStockToRemit } = require('@isa/remission/data-access'); + it('should return false when stockToRemit is negative even if availableStock > 0', () => { + const { + getStockToRemit, + calculateAvailableStock, + } = require('@isa/remission/data-access'); getStockToRemit.mockReturnValue(-1); + calculateAvailableStock.mockReturnValue(10); + + fixture.componentRef.setInput('item', createMockReturnItem()); + fixture.componentRef.setInput('stock', createMockStockInfo()); + fixture.detectChanges(); + + expect(component.hasStockToRemit()).toBe(false); + }); + + it('should return false when availableStock is 0 even if stockToRemit > 0', () => { + const { + getStockToRemit, + calculateAvailableStock, + } = require('@isa/remission/data-access'); + getStockToRemit.mockReturnValue(5); + calculateAvailableStock.mockReturnValue(0); + + fixture.componentRef.setInput('item', createMockReturnItem()); + fixture.componentRef.setInput('stock', createMockStockInfo()); + fixture.detectChanges(); + + expect(component.hasStockToRemit()).toBe(false); + }); + + it('should return false when availableStock is negative even if stockToRemit > 0', () => { + const { + getStockToRemit, + calculateAvailableStock, + } = require('@isa/remission/data-access'); + getStockToRemit.mockReturnValue(5); + calculateAvailableStock.mockReturnValue(-1); + + fixture.componentRef.setInput('item', createMockReturnItem()); + fixture.componentRef.setInput('stock', createMockStockInfo()); + fixture.detectChanges(); + + expect(component.hasStockToRemit()).toBe(false); + }); + + it('should return false when both availableStock and stockToRemit are 0', () => { + const { + getStockToRemit, + calculateAvailableStock, + } = require('@isa/remission/data-access'); + getStockToRemit.mockReturnValue(0); + calculateAvailableStock.mockReturnValue(0); + + fixture.componentRef.setInput('item', createMockReturnItem()); + fixture.componentRef.setInput('stock', createMockStockInfo()); + fixture.detectChanges(); + + expect(component.hasStockToRemit()).toBe(false); + }); + + it('should return false when both availableStock and stockToRemit are negative', () => { + const { + getStockToRemit, + calculateAvailableStock, + } = require('@isa/remission/data-access'); + getStockToRemit.mockReturnValue(-1); + calculateAvailableStock.mockReturnValue(-2); fixture.componentRef.setInput('item', createMockReturnItem()); fixture.componentRef.setInput('stock', createMockStockInfo()); diff --git a/libs/remission/feature/remission-list/src/lib/remission-list-item/remission-list-item.component.ts b/libs/remission/feature/remission-list/src/lib/remission-list-item/remission-list-item.component.ts index 7fb4be6cf..5b8c16c45 100644 --- a/libs/remission/feature/remission-list/src/lib/remission-list-item/remission-list-item.component.ts +++ b/libs/remission/feature/remission-list/src/lib/remission-list-item/remission-list-item.component.ts @@ -126,9 +126,12 @@ export class RemissionListItemComponent { /** * Computes whether the item has stock to remit. - * Returns true if stockToRemit is greater than 0. + * Returns true if stockToRemit and availableStock are greater than 0. + * #5269 Added availableStock check */ - hasStockToRemit = computed(() => this.stockToRemit() > 0); + hasStockToRemit = computed( + () => this.availableStock() > 0 && this.stockToRemit() > 0, + ); /** * Computes the available stock for the item using stock and removedFromStock.