pricing.py 1.0 KB

123456789101112131415161718192021222324252627
  1. from typing import List
  2. import db
  3. def calculate_estimated_price(material_id: int, file_sizes: List[int], file_quantities: List[int] = None) -> float:
  4. """
  5. Internal logic to estimate price per file based on file size (proxy for volume).
  6. """
  7. material = db.execute_query("SELECT price_per_cm3 FROM materials WHERE id = %s", (material_id,))
  8. if not material:
  9. return 0.0
  10. price_per_cm3 = float(material[0]['price_per_cm3'])
  11. if file_quantities is None or len(file_quantities) != len(file_sizes):
  12. file_quantities = [1] * len(file_sizes)
  13. estimated_total = 0.0
  14. base_fee = 5.0 # Minimum setup fee per file
  15. for size, qty in zip(file_sizes, file_quantities):
  16. total_size_mb = size / (1024 * 1024)
  17. # Empirical conversion: ~8cm3 per 1MB of STL (binary)
  18. estimated_volume = total_size_mb * 8.0
  19. file_cost = base_fee + (estimated_volume * price_per_cm3)
  20. estimated_total += file_cost * qty
  21. return round(estimated_total, 2)