6c0d5a4e63
- Flask-based mold cost calculation application - PostgreSQL database with SQLAlchemy ORM - Docker/Podman containerization - Comprehensive documentation in docs/ - Clean, organized codebase without obsolete files - Production-ready deployment configuration - Enhanced pytest configuration with coverage reporting - Master/Development branch structure
56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
from ..utils.cost_factor_loader import get_cost_factors
|
|
|
|
def calculate_base_price(mold_main_type, mold_sub_type, mold_specific_type, sliders_count, cavity_count, digital_texture_type, complexity_high_sidewall=False):
|
|
"""
|
|
Calculate the base price for a mold based on various factors.
|
|
|
|
Args:
|
|
mold_main_type (str): The main type of the mold
|
|
mold_sub_type (str): The sub type of the mold
|
|
mold_specific_type (str): The specific type of the mold
|
|
sliders_count (int): Number of sliders
|
|
cavity_count (int): Number of cavities
|
|
digital_texture_type (str): Type of digital texture
|
|
complexity_high_sidewall (bool): Whether the mold has high sidewall complexity
|
|
|
|
Returns:
|
|
dict: A dictionary containing all cost components
|
|
"""
|
|
# Get cost factors from database (or fallback to defaults)
|
|
cost_factors, tax_rates, default_net_base = get_cost_factors()
|
|
|
|
# Start with the default net base
|
|
base_price = default_net_base
|
|
|
|
# Apply mold type factor
|
|
if mold_specific_type in cost_factors['mold']:
|
|
base_price *= cost_factors['mold'][mold_specific_type]
|
|
|
|
# Calculate complexity cost
|
|
complexity_cost = 0
|
|
# Add slider complexity
|
|
if sliders_count > 0:
|
|
complexity_cost += base_price * (sliders_count * cost_factors['complexity']['slider'])
|
|
|
|
# Add cavity complexity
|
|
if cavity_count > 1:
|
|
complexity_cost += base_price * ((cavity_count - 1) * cost_factors['complexity']['cavity'])
|
|
|
|
# Add high sidewall complexity
|
|
if complexity_high_sidewall:
|
|
complexity_cost += base_price * cost_factors['complexity']['high_sidewall']
|
|
|
|
# Calculate texture cost
|
|
texture_cost = 0
|
|
if digital_texture_type in cost_factors['texture']:
|
|
texture_cost = base_price * cost_factors['texture'][digital_texture_type]
|
|
|
|
# Calculate total cost
|
|
total_cost = base_price + complexity_cost + texture_cost
|
|
|
|
return {
|
|
'base_price': round(base_price, 2),
|
|
'complexity_cost': round(complexity_cost, 2),
|
|
'texture_cost': round(texture_cost, 2),
|
|
'total_cost': round(total_cost, 2)
|
|
} |