Загрузка данных
# src/main.py
from config import PRICES, URGENCY, PROMOCODES
from logger import log_start, log_input, log_result, log_error
from receipt import print_receipt
LABOR_PRICES = PRICES
PARTS_PRICES = {
"iPhone": {"screen": 5000, "battery": 2500, "motherboard": 8000, "charging_port": 1500, "buttons": 800, "water_damage": 0},
"Samsung": {"screen": 4000, "battery": 2000, "motherboard": 7000, "charging_port": 1200, "buttons": 700, "water_damage": 0},
"Xiaomi": {"screen": 3000, "battery": 1500, "motherboard": 6000, "charging_port": 1000, "buttons": 600, "water_damage": 0},
"Google Pixel": {"screen": 4500, "battery": 2200, "motherboard": 7500, "charging_port": 1300, "buttons": 750, "water_damage": 0},
"Other": {"screen": 2500, "battery": 1200, "motherboard": 5000, "charging_port": 800, "buttons": 500, "water_damage": 0}
}
PARTS_ANALOG = {
"iPhone": {"screen": 3500, "battery": 1800, "motherboard": 5000, "charging_port": 1000, "buttons": 500, "water_damage": 0},
"Samsung": {"screen": 3000, "battery": 1500, "motherboard": 4500, "charging_port": 800, "buttons": 450, "water_damage": 0},
"Xiaomi": {"screen": 2500, "battery": 1200, "motherboard": 4000, "charging_port": 700, "buttons": 400, "water_damage": 0},
"Google Pixel": {"screen": 3200, "battery": 1600, "motherboard": 4800, "charging_port": 900, "buttons": 500, "water_damage": 0},
"Other": {"screen": 2000, "battery": 1000, "motherboard": 3500, "charging_port": 600, "buttons": 350, "water_damage": 0}
}
REPAIR_LIST = ["Замена экрана", "Замена аккумулятора", "Ремонт материнской платы", "Замена разъема зарядки", "Ремонт кнопок", "Восстановление после воды"]
REPAIR_KEYS = ["screen", "battery", "motherboard", "charging_port", "buttons", "water_damage"]
MODEL_LIST = ["iPhone", "Samsung", "Xiaomi", "Google Pixel", "Другие"]
MODEL_KEYS = ["iPhone", "Samsung", "Xiaomi", "Google Pixel", "Other"]
URGENCY_LIST = ["Обычный", "Срочный (+30%)", "Экстренный (+50%)"]
URGENCY_KEYS = ["normal", "urgent", "emergency"]
URGENCY_VALUES = [1.0, 1.3, 1.5]
PARTS_TYPE_LIST = ["Оригинал", "Аналог"]
def get_model_key(name):
for i, n in enumerate(MODEL_LIST):
if n == name:
return MODEL_KEYS[i]
return "Other"
def get_repair_key(name):
for i, n in enumerate(REPAIR_LIST):
if n == name:
return REPAIR_KEYS[i]
return "screen"
def get_urgency_value(name):
for i, n in enumerate(URGENCY_LIST):
if n == name:
return URGENCY_VALUES[i]
return 1.0
def get_urgency_key(name):
for i, n in enumerate(URGENCY_LIST):
if n == name:
return URGENCY_KEYS[i]
return "normal"
def get_model():
print("\nВыберите модель телефона:")
for i, model in enumerate(MODEL_LIST, 1):
print(f"{i}. {model}")
while True:
try:
choice = int(input("Введите номер (1-5): "))
if 1 <= choice <= len(MODEL_LIST):
return MODEL_LIST[choice - 1]
print("Ошибка: введите число от 1 до 5")
except ValueError:
print("Ошибка: введите число")
def get_repair():
print("\nВыберите тип ремонта:")
for i, repair in enumerate(REPAIR_LIST, 1):
print(f"{i}. {repair}")
while True:
try:
choice = int(input("Введите номер (1-6): "))
if 1 <= choice <= len(REPAIR_LIST):
return REPAIR_LIST[choice - 1]
print("Ошибка: введите число от 1 до 6")
except ValueError:
print("Ошибка: введите число")
def get_parts_type():
print("\nВыберите тип запчасти:")
for i, ptype in enumerate(PARTS_TYPE_LIST, 1):
print(f"{i}. {ptype}")
while True:
try:
choice = int(input("Введите номер (1-2): "))
if 1 <= choice <= len(PARTS_TYPE_LIST):
return PARTS_TYPE_LIST[choice - 1]
print("Ошибка: введите число от 1 до 2")
except ValueError:
print("Ошибка: введите число")
def get_urgency():
print("\nВыберите срочность:")
for i, urgency in enumerate(URGENCY_LIST, 1):
print(f"{i}. {urgency}")
while True:
try:
choice = int(input("Введите номер (1-3): "))
if 1 <= choice <= len(URGENCY_LIST):
return URGENCY_LIST[choice - 1]
print("Ошибка: введите число от 1 до 3")
except ValueError:
print("Ошибка: введите число")
def get_services():
print("\nДополнительные услуги:")
visit = input("Выезд мастера (+500 руб)? (y/n): ").lower()
glass = input("Защитное стекло (+300 руб)? (y/n): ").lower()
total = 0
if visit == 'y':
total += 500
if glass == 'y':
total += 300
return total
def get_promocode():
return input("Введите промокод (или Enter): ").strip().upper()
def calculate_total():
model_name = get_model()
model = get_model_key(model_name)
repair_name = get_repair()
repair = get_repair_key(repair_name)
parts_type = get_parts_type()
if repair == "water_damage":
parts = 0
print("\nЗапчасти не требуются")
else:
if parts_type == "Оригинал":
parts = PARTS_PRICES.get(model, {}).get(repair, 3000)
else:
parts = PARTS_ANALOG.get(model, {}).get(repair, 2000)
print(f"\nСтоимость запчасти: {parts} руб")
labor = LABOR_PRICES.get(model, {}).get(repair, 1500)
print(f"Стоимость работы: {labor} руб")
diagnostics = 0 if repair == "motherboard" else 500
if diagnostics > 0:
print(f"Диагностика: {diagnostics} руб")
services = get_services()
if services > 0:
print(f"Услуги: {services} руб")
urgency_name = get_urgency()
urgency = get_urgency_key(urgency_name)
multiplier = get_urgency_value(urgency_name)
promocode = get_promocode()
subtotal = labor + parts + diagnostics + services
total = subtotal * multiplier
discount = 0
if promocode == "SERVICE10":
discount = total * 0.10
total = total - discount
print(f"Промокод SERVICE10: скидка 10% ({discount} руб)")
elif promocode == "REMONT26":
discount = labor * 0.15
total = total - discount
print(f"Промокод REMONT26: скидка 15% на работу ({discount} руб)")
print("\n" + "=" * 40)
print(" ЧЕК")
print("=" * 40)
print(f"Модель: {model_name}")
print(f"Ремонт: {repair_name}")
print(f"Тип запчасти: {parts_type}")
print("-" * 40)
print(f"Стоимость работы: {labor} руб")
print(f"Стоимость запчасти: {parts} руб")
print(f"Диагностика: {diagnostics} руб")
print(f"Услуги: {services} руб")
print(f"Срочность: {urgency_name}")
print(f"Коэффициент: x{multiplier}")
if discount > 0:
print(f"Скидка: -{discount} руб")
print("-" * 40)
print(f"ИТОГО К ОПЛАТЕ: {total:.2f} руб")
print("=" * 40)
print("Спасибо за обращение!")
def main():
try:
log_start()
calculate_total()
except Exception as e:
log_error(str(e))
print(f"Ошибка: {e}")
if __name__ == "__main__":
main()