Improve the sales import
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user