Merged PR 1935: fix(remission-list, remission-data-access): add impediment comment and remain...

fix(remission-list, remission-data-access): add impediment comment and remaining quantity handling for return suggestions

Add support for impedimentComment and remainingQuantity fields when adding return suggestion items. When quantity is less than available stock, automatically set impedimentComment to 'Restmenge' and calculate remainingQuantity as the difference between available stock and remitted quantity.

Changes:
- Add impedimentComment and remainingQuantity to AddReturnSuggestionItemSchema
- Update RemissionReturnReceiptService to handle new fields in addReturnSuggestionItem method
- Enhance RemissionListComponent to calculate and pass impediment data when remitting items
- Fix quantity calculation logic to properly handle partial remissions

Ref: #5322
This commit is contained in:
Nino Righi
2025-09-03 13:18:23 +00:00
committed by Andreas Schickinger
parent 4e6204817d
commit e58ec93087
3 changed files with 33 additions and 11 deletions

View File

@@ -6,6 +6,8 @@ export const AddReturnSuggestionItemSchema = z.object({
returnSuggestionId: z.number(), returnSuggestionId: z.number(),
quantity: z.number().optional(), quantity: z.number().optional(),
inStock: z.number(), inStock: z.number(),
impedimentComment: z.string().optional(),
remainingQuantity: z.number().optional(),
}); });
export type AddReturnSuggestionItem = z.infer< export type AddReturnSuggestionItem = z.infer<

View File

@@ -5,7 +5,6 @@ import {
ResponseArgsError, ResponseArgsError,
takeUntilAborted, takeUntilAborted,
} from '@isa/common/data-access'; } from '@isa/common/data-access';
import { subDays } from 'date-fns';
import { firstValueFrom } from 'rxjs'; import { firstValueFrom } from 'rxjs';
import { RemissionStockService } from './remission-stock.service'; import { RemissionStockService } from './remission-stock.service';
import { Return } from '../models/return'; import { Return } from '../models/return';
@@ -770,6 +769,8 @@ export class RemissionReturnReceiptService {
* returnSuggestionId: 789, * returnSuggestionId: 789,
* quantity: 10, * quantity: 10,
* inStock: 5, * inStock: 5,
* impedimentComment: 'Restmenge',
* remainingQuantity: 5
* }); * });
*/ */
async addReturnSuggestionItem( async addReturnSuggestionItem(
@@ -778,8 +779,15 @@ export class RemissionReturnReceiptService {
): Promise<ReceiptReturnSuggestionTuple | undefined> { ): Promise<ReceiptReturnSuggestionTuple | undefined> {
this.#logger.debug('Adding return suggestion item', () => ({ params })); this.#logger.debug('Adding return suggestion item', () => ({ params }));
const { returnId, receiptId, returnSuggestionId, quantity, inStock } = const {
AddReturnSuggestionItemSchema.parse(params); returnId,
receiptId,
returnSuggestionId,
quantity,
inStock,
impedimentComment,
remainingQuantity,
} = AddReturnSuggestionItemSchema.parse(params);
this.#logger.info('Add return suggestion item from API', () => ({ this.#logger.info('Add return suggestion item from API', () => ({
returnId, returnId,
@@ -787,6 +795,8 @@ export class RemissionReturnReceiptService {
returnSuggestionId, returnSuggestionId,
quantity, quantity,
inStock, inStock,
impedimentComment,
remainingQuantity,
})); }));
let req$ = this.#returnService.ReturnAddReturnSuggestion({ let req$ = this.#returnService.ReturnAddReturnSuggestion({
@@ -796,6 +806,8 @@ export class RemissionReturnReceiptService {
returnSuggestionId, returnSuggestionId,
quantity, quantity,
inStock, inStock,
impedimentComment,
remainingQuantity,
}, },
}); });
@@ -921,6 +933,10 @@ export class RemissionReturnReceiptService {
returnSuggestionId: itemId, returnSuggestionId: itemId,
quantity: addItem.quantity, quantity: addItem.quantity,
inStock: addItem.inStock, inStock: addItem.inStock,
impedimentComment: (addItem as AddReturnSuggestionItem)
.impedimentComment,
remainingQuantity: (addItem as AddReturnSuggestionItem)
.remainingQuantity,
}); });
} }

View File

@@ -442,13 +442,12 @@ export class RemissionListComponent {
const remissionItemIdNumber = Number(remissionItemId); const remissionItemIdNumber = Number(remissionItemId);
const quantity = quantities[remissionItemIdNumber]; const quantity = quantities[remissionItemIdNumber];
const inStock = this.getAvailableStockForItem(item); const inStock = this.getAvailableStockForItem(item);
const stockToRemit = const stockToRemit = getStockToRemit({
quantity ?? remissionItem: item,
getStockToRemit({ remissionListType,
remissionItem: item, availableStock: inStock,
remissionListType, });
availableStock: inStock, const quantityToRemit = quantity ?? stockToRemit;
});
if (returnId && receiptId) { if (returnId && receiptId) {
await this.#remissionReturnReceiptService.remitItem({ await this.#remissionReturnReceiptService.remitItem({
@@ -456,8 +455,13 @@ export class RemissionListComponent {
addItem: { addItem: {
returnId, returnId,
receiptId, receiptId,
quantity: stockToRemit, quantity: quantityToRemit,
inStock, inStock,
impedimentComment: stockToRemit > quantity ? 'Restmenge' : '',
remainingQuantity:
isNaN(quantity) || inStock - quantity <= 0
? undefined
: inStock - quantity,
}, },
type: remissionListType, type: remissionListType,
}); });