Improve the sales import

This commit is contained in:
Urtzi Alfaro
2025-10-15 21:09:42 +02:00
parent 8f9e9a7edc
commit dbb48d8e2c
21 changed files with 992 additions and 409 deletions

View File

@@ -753,6 +753,67 @@ class InventoryService:
)
raise
# ===== BATCH OPERATIONS FOR SALES IMPORT =====
async def search_ingredients_by_name(
self,
product_name: str,
tenant_id: UUID,
db
) -> Optional[Ingredient]:
"""Search for an ingredient by name (case-insensitive exact match)"""
try:
repository = IngredientRepository(db)
ingredients = await repository.search_ingredients(
tenant_id=tenant_id,
search_term=product_name,
skip=0,
limit=10
)
product_name_lower = product_name.lower().strip()
for ingredient in ingredients:
if ingredient.name.lower().strip() == product_name_lower:
return ingredient
return None
except Exception as e:
logger.warning("Error searching ingredients by name",
product_name=product_name, error=str(e), tenant_id=tenant_id)
return None
async def create_ingredient_fast(
self,
ingredient_data: Dict[str, Any],
tenant_id: UUID,
db
) -> Ingredient:
"""Create ingredient without full validation for batch operations"""
try:
repository = IngredientRepository(db)
ingredient_create = IngredientCreate(
name=ingredient_data.get('name'),
product_type=ingredient_data.get('type', 'finished_product'),
unit_of_measure=ingredient_data.get('unit', 'units'),
low_stock_threshold=ingredient_data.get('current_stock', 0),
reorder_point=max(ingredient_data.get('reorder_point', 1),
ingredient_data.get('current_stock', 0) + 1),
average_cost=ingredient_data.get('cost_per_unit', 0.0),
ingredient_category=ingredient_data.get('category') if ingredient_data.get('type') == 'ingredient' else None,
product_category=ingredient_data.get('category') if ingredient_data.get('type') == 'finished_product' else None
)
ingredient = await repository.create_ingredient(ingredient_create, tenant_id)
logger.debug("Created ingredient fast", ingredient_id=ingredient.id, name=ingredient.name)
return ingredient
except Exception as e:
logger.error("Failed to create ingredient fast",
error=str(e), ingredient_data=ingredient_data, tenant_id=tenant_id)
raise
# ===== PRIVATE HELPER METHODS =====
async def _validate_ingredient_data(self, ingredient_data: IngredientCreate, tenant_id: UUID):