feat: Add functionality to move inventory items to pantry and enhance pantry management
Test Suite / test (24.15.0) (push) Has been cancelled
Test Suite / test (24.15.0) (push) Has been cancelled
- Implemented moveInventoryItemToPantry method in InventoryRepository to facilitate moving items from inventory to pantry. - Enhanced InventoryScreen with a new header section providing context about the inventory. - Added a button in SwipeableInventoryTile to move items to pantry with appropriate error handling. - Introduced movePantryItemToInventory method in PantryRepository to support moving items back to inventory. - Refactored PantryScreen to rename _addToInventory to _moveToInventory for clarity and updated UI to reflect changes. - Added AdminPantryItem model to represent pantry items in the admin panel. - Created AdminPantryPanel for managing pantry items, including moving items to inventory and listing users. - Developed AdminPrivateProductsPanel for managing private products, allowing promotion to global products.
This commit is contained in:
@@ -348,6 +348,51 @@ export class InventoryService {
|
||||
return this.prisma.inventoryItem.delete({ where: { id } });
|
||||
}
|
||||
|
||||
private async moveInventoryItemToPantryCore(item: {
|
||||
id: number;
|
||||
userId: number;
|
||||
productId: number;
|
||||
location: string | null;
|
||||
}) {
|
||||
const existingPantryItem = await this.prisma.pantryItem.findUnique({
|
||||
where: {
|
||||
userId_productId: {
|
||||
userId: item.userId,
|
||||
productId: item.productId,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (existingPantryItem) {
|
||||
throw new BadRequestException('Produkten finns redan i baslagret');
|
||||
}
|
||||
|
||||
return this.prisma.$transaction(async (tx) => {
|
||||
const pantryItem = await tx.pantryItem.create({
|
||||
data: {
|
||||
userId: item.userId,
|
||||
productId: item.productId,
|
||||
location: item.location?.trim() || null,
|
||||
},
|
||||
include: { product: true },
|
||||
});
|
||||
|
||||
await tx.inventoryItem.delete({ where: { id: item.id } });
|
||||
|
||||
return pantryItem;
|
||||
});
|
||||
}
|
||||
|
||||
async moveToPantry(id: number, userId: number) {
|
||||
const item = await this.findInventoryItemByIdOrThrow(id, userId);
|
||||
return this.moveInventoryItemToPantryCore(item);
|
||||
}
|
||||
|
||||
async moveToPantryAdmin(id: number) {
|
||||
const item = await this.findInventoryItemAnyByIdOrThrow(id);
|
||||
return this.moveInventoryItemToPantryCore(item);
|
||||
}
|
||||
|
||||
async updateAdmin(id: number, data: UpdateInventoryDto) {
|
||||
await this.findInventoryItemAnyByIdOrThrow(id);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user