sync: Auto-sync from ACG-M-L5090 at 2026-02-01 16:23:43
This commit is contained in:
399
projects/msp-pricing/calculators/complete-pricing-calculator.py
Normal file
399
projects/msp-pricing/calculators/complete-pricing-calculator.py
Normal file
@@ -0,0 +1,399 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Complete MSP Pricing Calculator
|
||||
Arizona Computer Guru - GPS + Web/Email Hosting
|
||||
"""
|
||||
|
||||
# ============================================================================
|
||||
# GPS ENDPOINT MONITORING
|
||||
# ============================================================================
|
||||
|
||||
GPS_TIERS = {
|
||||
'basic': {
|
||||
'name': 'GPS-BASIC: Essential Protection',
|
||||
'price_per_endpoint': 19,
|
||||
},
|
||||
'pro': {
|
||||
'name': 'GPS-PRO: Business Protection (MOST POPULAR)',
|
||||
'price_per_endpoint': 26,
|
||||
},
|
||||
'advanced': {
|
||||
'name': 'GPS-ADVANCED: Maximum Protection',
|
||||
'price_per_endpoint': 39,
|
||||
}
|
||||
}
|
||||
|
||||
EQUIPMENT_PACK = {
|
||||
'base_price': 25,
|
||||
'base_devices': 10,
|
||||
'additional_device_price': 3
|
||||
}
|
||||
|
||||
SUPPORT_PLANS = {
|
||||
'essential': {'name': 'Essential Support', 'price': 200, 'hours': 2},
|
||||
'standard': {'name': 'Standard Support (MOST POPULAR)', 'price': 380, 'hours': 4},
|
||||
'premium': {'name': 'Premium Support', 'price': 540, 'hours': 6},
|
||||
'priority': {'name': 'Priority Support', 'price': 850, 'hours': 10}
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# WEB HOSTING
|
||||
# ============================================================================
|
||||
|
||||
WEB_HOSTING = {
|
||||
'starter': {
|
||||
'name': 'Starter Hosting',
|
||||
'price': 15,
|
||||
'storage_gb': 5,
|
||||
'websites': 1
|
||||
},
|
||||
'business': {
|
||||
'name': 'Business Hosting (MOST POPULAR)',
|
||||
'price': 35,
|
||||
'storage_gb': 25,
|
||||
'websites': 5
|
||||
},
|
||||
'commerce': {
|
||||
'name': 'Commerce Hosting',
|
||||
'price': 65,
|
||||
'storage_gb': 50,
|
||||
'websites': 'unlimited'
|
||||
}
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# EMAIL HOSTING
|
||||
# ============================================================================
|
||||
|
||||
WHM_EMAIL = {
|
||||
'base_price_per_mailbox': 2,
|
||||
'included_storage_gb': 5,
|
||||
'storage_block_price': 2, # Per 5GB block
|
||||
'storage_block_size_gb': 5
|
||||
}
|
||||
|
||||
M365_PLANS = {
|
||||
'basic': {
|
||||
'name': 'M365 Business Basic',
|
||||
'price_per_user': 7,
|
||||
'storage_gb': 50
|
||||
},
|
||||
'standard': {
|
||||
'name': 'M365 Business Standard (MOST POPULAR)',
|
||||
'price_per_user': 14,
|
||||
'storage_gb': 50
|
||||
},
|
||||
'premium': {
|
||||
'name': 'M365 Business Premium',
|
||||
'price_per_user': 24,
|
||||
'storage_gb': 50
|
||||
},
|
||||
'exchange': {
|
||||
'name': 'Exchange Online Plan 1',
|
||||
'price_per_user': 5,
|
||||
'storage_gb': 50
|
||||
}
|
||||
}
|
||||
|
||||
EMAIL_SECURITY_ADDON = {
|
||||
'price_per_mailbox': 3,
|
||||
'name': 'Email Security & Filtering (MailProtector/INKY)'
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# ADD-ON SERVICES
|
||||
# ============================================================================
|
||||
|
||||
ADDONS = {
|
||||
'dedicated_ip': {'name': 'Dedicated IP', 'price': 5},
|
||||
'premium_ssl': {'name': 'SSL Certificate (Premium)', 'price': 6.25}, # $75/year / 12
|
||||
'offsite_backup': {'name': 'Daily Offsite Backup', 'price': 10},
|
||||
'web_storage_10gb': {'name': 'Additional Web Storage (10GB)', 'price': 5}
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# CALCULATOR FUNCTIONS
|
||||
# ============================================================================
|
||||
|
||||
def calculate_whm_email(mailboxes, storage_gb_per_mailbox=5, include_security=False):
|
||||
"""
|
||||
Calculate WHM email hosting costs
|
||||
|
||||
Args:
|
||||
mailboxes: Number of mailboxes
|
||||
storage_gb_per_mailbox: Storage per mailbox in GB
|
||||
include_security: Add email security filtering
|
||||
"""
|
||||
base_cost = mailboxes * WHM_EMAIL['base_price_per_mailbox']
|
||||
|
||||
# Calculate storage blocks needed
|
||||
if storage_gb_per_mailbox > WHM_EMAIL['included_storage_gb']:
|
||||
additional_gb = storage_gb_per_mailbox - WHM_EMAIL['included_storage_gb']
|
||||
blocks_needed = -(-additional_gb // WHM_EMAIL['storage_block_size_gb']) # Ceiling division
|
||||
storage_cost = mailboxes * blocks_needed * WHM_EMAIL['storage_block_price']
|
||||
else:
|
||||
blocks_needed = 0
|
||||
storage_cost = 0
|
||||
|
||||
total_mailbox_cost = base_cost + storage_cost
|
||||
|
||||
# Email security
|
||||
security_cost = mailboxes * EMAIL_SECURITY_ADDON['price_per_mailbox'] if include_security else 0
|
||||
|
||||
total_cost = total_mailbox_cost + security_cost
|
||||
|
||||
return {
|
||||
'mailboxes': mailboxes,
|
||||
'storage_per_mailbox_gb': storage_gb_per_mailbox,
|
||||
'base_cost': base_cost,
|
||||
'storage_cost': storage_cost,
|
||||
'security_cost': security_cost,
|
||||
'total_cost': total_cost,
|
||||
'cost_per_mailbox': total_cost / mailboxes if mailboxes > 0 else 0
|
||||
}
|
||||
|
||||
|
||||
def calculate_m365_email(users, plan='standard'):
|
||||
"""Calculate Microsoft 365 email costs"""
|
||||
plan_data = M365_PLANS.get(plan, M365_PLANS['standard'])
|
||||
|
||||
return {
|
||||
'users': users,
|
||||
'plan': plan_data['name'],
|
||||
'price_per_user': plan_data['price_per_user'],
|
||||
'total_cost': users * plan_data['price_per_user'],
|
||||
'storage_per_user_gb': plan_data['storage_gb']
|
||||
}
|
||||
|
||||
|
||||
def calculate_web_hosting(tier='business', extra_storage_gb=0):
|
||||
"""Calculate web hosting costs"""
|
||||
tier_data = WEB_HOSTING.get(tier, WEB_HOSTING['business'])
|
||||
|
||||
# Extra storage in 10GB increments
|
||||
extra_storage_cost = 0
|
||||
if extra_storage_gb > 0:
|
||||
blocks = -(-extra_storage_gb // 10) # Ceiling division
|
||||
extra_storage_cost = blocks * ADDONS['web_storage_10gb']['price']
|
||||
|
||||
return {
|
||||
'tier': tier_data['name'],
|
||||
'base_cost': tier_data['price'],
|
||||
'extra_storage_gb': extra_storage_gb,
|
||||
'extra_storage_cost': extra_storage_cost,
|
||||
'total_cost': tier_data['price'] + extra_storage_cost
|
||||
}
|
||||
|
||||
|
||||
def calculate_complete_quote(
|
||||
# GPS
|
||||
gps_endpoints=0,
|
||||
gps_tier='pro',
|
||||
equipment_devices=0,
|
||||
support_plan=None,
|
||||
|
||||
# Web Hosting
|
||||
web_hosting_tier=None,
|
||||
web_extra_storage_gb=0,
|
||||
|
||||
# Email
|
||||
email_type=None, # 'whm' or 'm365'
|
||||
email_users=0,
|
||||
whm_storage_gb=5,
|
||||
whm_security=False,
|
||||
m365_plan='standard',
|
||||
|
||||
# Add-ons
|
||||
dedicated_ip=False,
|
||||
premium_ssl=False,
|
||||
offsite_backup=False
|
||||
):
|
||||
"""
|
||||
Calculate complete quote including GPS, web hosting, and email
|
||||
"""
|
||||
result = {
|
||||
'gps': None,
|
||||
'web': None,
|
||||
'email': None,
|
||||
'addons': [],
|
||||
'totals': {}
|
||||
}
|
||||
|
||||
monthly_total = 0
|
||||
|
||||
# GPS Monitoring
|
||||
if gps_endpoints > 0:
|
||||
from gps_calculator import calculate_gps_quote
|
||||
gps_quote = calculate_gps_quote(
|
||||
endpoints=gps_endpoints,
|
||||
tier=gps_tier,
|
||||
equipment_devices=equipment_devices,
|
||||
support_plan=support_plan
|
||||
)
|
||||
result['gps'] = gps_quote
|
||||
monthly_total += gps_quote['totals']['monthly']
|
||||
|
||||
# Web Hosting
|
||||
if web_hosting_tier:
|
||||
web_quote = calculate_web_hosting(web_hosting_tier, web_extra_storage_gb)
|
||||
result['web'] = web_quote
|
||||
monthly_total += web_quote['total_cost']
|
||||
|
||||
# Email Hosting
|
||||
if email_type == 'whm' and email_users > 0:
|
||||
email_quote = calculate_whm_email(email_users, whm_storage_gb, whm_security)
|
||||
result['email'] = {'type': 'WHM Email', 'details': email_quote}
|
||||
monthly_total += email_quote['total_cost']
|
||||
elif email_type == 'm365' and email_users > 0:
|
||||
email_quote = calculate_m365_email(email_users, m365_plan)
|
||||
result['email'] = {'type': 'Microsoft 365', 'details': email_quote}
|
||||
monthly_total += email_quote['total_cost']
|
||||
|
||||
# Add-ons
|
||||
addon_cost = 0
|
||||
if dedicated_ip:
|
||||
result['addons'].append(ADDONS['dedicated_ip'])
|
||||
addon_cost += ADDONS['dedicated_ip']['price']
|
||||
if premium_ssl:
|
||||
result['addons'].append(ADDONS['premium_ssl'])
|
||||
addon_cost += ADDONS['premium_ssl']['price']
|
||||
if offsite_backup:
|
||||
result['addons'].append(ADDONS['offsite_backup'])
|
||||
addon_cost += ADDONS['offsite_backup']['price']
|
||||
|
||||
monthly_total += addon_cost
|
||||
|
||||
# Totals
|
||||
result['totals'] = {
|
||||
'monthly': monthly_total,
|
||||
'annual': monthly_total * 12,
|
||||
'addon_cost': addon_cost
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def print_complete_quote(quote):
|
||||
"""Print formatted complete quote"""
|
||||
print("\n" + "="*70)
|
||||
print("COMPLETE MSP PRICING QUOTE - ARIZONA COMPUTER GURU")
|
||||
print("="*70)
|
||||
|
||||
# GPS Section
|
||||
if quote['gps']:
|
||||
print("\n[GPS ENDPOINT MONITORING & SUPPORT]")
|
||||
gps = quote['gps']
|
||||
print(f" {gps['gps']['tier']}")
|
||||
print(f" {gps['gps']['endpoints']} endpoints × ${gps['gps']['price_per_endpoint']} = ${gps['gps']['monthly_cost']}")
|
||||
|
||||
if gps['equipment']['devices'] > 0:
|
||||
print(f" Equipment Pack: {gps['equipment']['devices']} devices = ${gps['equipment']['monthly_cost']}")
|
||||
|
||||
if gps['support']['monthly_cost'] > 0:
|
||||
print(f" {gps['support']['plan']}: ${gps['support']['monthly_cost']} ({gps['support']['hours_included']} hrs)")
|
||||
|
||||
# Web Hosting Section
|
||||
if quote['web']:
|
||||
print("\n[WEB HOSTING]")
|
||||
web = quote['web']
|
||||
print(f" {web['tier']}: ${web['base_cost']}")
|
||||
if web['extra_storage_gb'] > 0:
|
||||
print(f" Extra Storage ({web['extra_storage_gb']}GB): ${web['extra_storage_cost']}")
|
||||
|
||||
# Email Section
|
||||
if quote['email']:
|
||||
print("\n[EMAIL HOSTING]")
|
||||
email = quote['email']
|
||||
print(f" {email['type']}")
|
||||
|
||||
if email['type'] == 'WHM Email':
|
||||
details = email['details']
|
||||
print(f" {details['mailboxes']} mailboxes × {details['storage_per_mailbox_gb']}GB")
|
||||
print(f" Base: ${details['base_cost']}")
|
||||
if details['storage_cost'] > 0:
|
||||
print(f" Additional Storage: ${details['storage_cost']}")
|
||||
if details['security_cost'] > 0:
|
||||
print(f" Security Add-on: ${details['security_cost']}")
|
||||
else: # M365
|
||||
details = email['details']
|
||||
print(f" {details['plan']}")
|
||||
print(f" {details['users']} users × ${details['price_per_user']} = ${details['total_cost']}")
|
||||
|
||||
# Add-ons
|
||||
if quote['addons']:
|
||||
print("\n[ADD-ON SERVICES]")
|
||||
for addon in quote['addons']:
|
||||
print(f" {addon['name']}: ${addon['price']}")
|
||||
|
||||
# Totals
|
||||
print("\n" + "-"*70)
|
||||
print(f"MONTHLY TOTAL: ${quote['totals']['monthly']}")
|
||||
print(f"ANNUAL TOTAL: ${quote['totals']['annual']}")
|
||||
print("="*70 + "\n")
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# EXAMPLE USAGE
|
||||
# ============================================================================
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("\nCOMPLETE MSP PRICING CALCULATOR")
|
||||
print("Arizona Computer Guru")
|
||||
print("="*70)
|
||||
|
||||
# Example 1: Small Office - GPS + Web + WHM Email
|
||||
print("\n\nExample 1: Small Office")
|
||||
print("10 GPS endpoints + Website + 5 WHM email users")
|
||||
quote1 = calculate_complete_quote(
|
||||
gps_endpoints=10,
|
||||
gps_tier='pro',
|
||||
support_plan='standard',
|
||||
web_hosting_tier='business',
|
||||
email_type='whm',
|
||||
email_users=5,
|
||||
whm_storage_gb=10,
|
||||
whm_security=True
|
||||
)
|
||||
print_complete_quote(quote1)
|
||||
|
||||
# Example 2: Modern Business - GPS + Web + M365
|
||||
print("\n\nExample 2: Modern Business")
|
||||
print("22 GPS endpoints + Website + 15 M365 users")
|
||||
quote2 = calculate_complete_quote(
|
||||
gps_endpoints=22,
|
||||
gps_tier='pro',
|
||||
support_plan='premium',
|
||||
web_hosting_tier='business',
|
||||
email_type='m365',
|
||||
email_users=15,
|
||||
m365_plan='standard'
|
||||
)
|
||||
print_complete_quote(quote2)
|
||||
|
||||
# Example 3: E-Commerce Business
|
||||
print("\n\nExample 3: E-Commerce Business")
|
||||
print("42 GPS endpoints + Commerce hosting + 20 M365 users + Dedicated IP")
|
||||
quote3 = calculate_complete_quote(
|
||||
gps_endpoints=42,
|
||||
gps_tier='pro',
|
||||
support_plan='priority',
|
||||
web_hosting_tier='commerce',
|
||||
email_type='m365',
|
||||
email_users=20,
|
||||
m365_plan='standard',
|
||||
dedicated_ip=True,
|
||||
premium_ssl=True
|
||||
)
|
||||
print_complete_quote(quote3)
|
||||
|
||||
# Example 4: Web + Email Only (No GPS)
|
||||
print("\n\nExample 4: Web & Email Only")
|
||||
print("Small business - Website + 8 WHM email users")
|
||||
quote4 = calculate_complete_quote(
|
||||
web_hosting_tier='business',
|
||||
email_type='whm',
|
||||
email_users=8,
|
||||
whm_storage_gb=10,
|
||||
whm_security=True
|
||||
)
|
||||
print_complete_quote(quote4)
|
||||
244
projects/msp-pricing/calculators/gps-calculator.py
Normal file
244
projects/msp-pricing/calculators/gps-calculator.py
Normal file
@@ -0,0 +1,244 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
GPS Pricing Calculator
|
||||
Arizona Computer Guru - MSP Pricing Tool
|
||||
"""
|
||||
|
||||
# Pricing Constants
|
||||
GPS_TIERS = {
|
||||
'basic': {
|
||||
'name': 'GPS-BASIC: Essential Protection',
|
||||
'price_per_endpoint': 19,
|
||||
'features': [
|
||||
'24/7 System Monitoring & Alerting',
|
||||
'Automated Patch Management',
|
||||
'Remote Management & Support',
|
||||
'Endpoint Security (Antivirus)',
|
||||
'Monthly Health Reports'
|
||||
]
|
||||
},
|
||||
'pro': {
|
||||
'name': 'GPS-PRO: Business Protection (MOST POPULAR)',
|
||||
'price_per_endpoint': 26,
|
||||
'features': [
|
||||
'All GPS-Basic features',
|
||||
'Advanced EDR',
|
||||
'Email Security',
|
||||
'Dark Web Monitoring',
|
||||
'Security Training',
|
||||
'Cloud Monitoring (M365/Google)'
|
||||
]
|
||||
},
|
||||
'advanced': {
|
||||
'name': 'GPS-ADVANCED: Maximum Protection',
|
||||
'price_per_endpoint': 39,
|
||||
'features': [
|
||||
'All GPS-Pro features',
|
||||
'Advanced Threat Intelligence',
|
||||
'Ransomware Rollback',
|
||||
'Compliance Tools (HIPAA, PCI-DSS, SOC 2)',
|
||||
'Priority Response',
|
||||
'Enhanced SaaS Backup'
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
EQUIPMENT_PACK = {
|
||||
'base_price': 25, # Up to 10 devices
|
||||
'base_devices': 10,
|
||||
'additional_device_price': 3
|
||||
}
|
||||
|
||||
SUPPORT_PLANS = {
|
||||
'essential': {
|
||||
'name': 'Essential Support',
|
||||
'price': 200,
|
||||
'hours_included': 2,
|
||||
'effective_rate': 100,
|
||||
'response_time': 'Next business day',
|
||||
'coverage': 'Business hours'
|
||||
},
|
||||
'standard': {
|
||||
'name': 'Standard Support (MOST POPULAR)',
|
||||
'price': 380,
|
||||
'hours_included': 4,
|
||||
'effective_rate': 95,
|
||||
'response_time': '8-hour guarantee',
|
||||
'coverage': 'Business hours'
|
||||
},
|
||||
'premium': {
|
||||
'name': 'Premium Support',
|
||||
'price': 540,
|
||||
'hours_included': 6,
|
||||
'effective_rate': 90,
|
||||
'response_time': '4-hour guarantee',
|
||||
'coverage': 'After-hours emergency'
|
||||
},
|
||||
'priority': {
|
||||
'name': 'Priority Support',
|
||||
'price': 850,
|
||||
'hours_included': 10,
|
||||
'effective_rate': 85,
|
||||
'response_time': '2-hour guarantee',
|
||||
'coverage': '24/7 emergency'
|
||||
}
|
||||
}
|
||||
|
||||
BLOCK_TIME = {
|
||||
'10hr': {'hours': 10, 'price': 1500, 'rate': 150},
|
||||
'20hr': {'hours': 20, 'price': 2600, 'rate': 130},
|
||||
'30hr': {'hours': 30, 'price': 3000, 'rate': 100}
|
||||
}
|
||||
|
||||
OVERAGE_RATE = 175
|
||||
|
||||
|
||||
def calculate_equipment_pack(num_devices):
|
||||
"""Calculate equipment pack pricing"""
|
||||
if num_devices == 0:
|
||||
return 0
|
||||
if num_devices <= EQUIPMENT_PACK['base_devices']:
|
||||
return EQUIPMENT_PACK['base_price']
|
||||
else:
|
||||
additional = num_devices - EQUIPMENT_PACK['base_devices']
|
||||
return EQUIPMENT_PACK['base_price'] + (additional * EQUIPMENT_PACK['additional_device_price'])
|
||||
|
||||
|
||||
def calculate_gps_quote(endpoints, tier='pro', equipment_devices=0, support_plan=None, block_time=None):
|
||||
"""
|
||||
Calculate a complete GPS quote
|
||||
|
||||
Args:
|
||||
endpoints: Number of endpoints
|
||||
tier: GPS tier (basic, pro, advanced)
|
||||
equipment_devices: Number of equipment devices
|
||||
support_plan: Support plan key (essential, standard, premium, priority)
|
||||
block_time: Block time key (10hr, 20hr, 30hr)
|
||||
|
||||
Returns:
|
||||
dict with pricing breakdown
|
||||
"""
|
||||
# GPS Monitoring
|
||||
gps_tier_data = GPS_TIERS.get(tier, GPS_TIERS['pro'])
|
||||
gps_cost = endpoints * gps_tier_data['price_per_endpoint']
|
||||
|
||||
# Equipment Pack
|
||||
equipment_cost = calculate_equipment_pack(equipment_devices)
|
||||
|
||||
# Support Plan
|
||||
support_cost = 0
|
||||
support_hours = 0
|
||||
support_data = None
|
||||
if support_plan:
|
||||
support_data = SUPPORT_PLANS.get(support_plan)
|
||||
if support_data:
|
||||
support_cost = support_data['price']
|
||||
support_hours = support_data['hours_included']
|
||||
|
||||
# Block Time (one-time or as needed)
|
||||
block_cost = 0
|
||||
block_hours = 0
|
||||
if block_time:
|
||||
block_data = BLOCK_TIME.get(block_time)
|
||||
if block_data:
|
||||
block_cost = block_data['price']
|
||||
block_hours = block_data['hours']
|
||||
|
||||
# Calculate totals
|
||||
monthly_total = gps_cost + equipment_cost + support_cost
|
||||
annual_total = monthly_total * 12
|
||||
|
||||
# Per endpoint cost
|
||||
total_endpoints = endpoints + equipment_devices
|
||||
per_endpoint_cost = monthly_total / total_endpoints if total_endpoints > 0 else 0
|
||||
|
||||
return {
|
||||
'gps': {
|
||||
'tier': gps_tier_data['name'],
|
||||
'endpoints': endpoints,
|
||||
'price_per_endpoint': gps_tier_data['price_per_endpoint'],
|
||||
'monthly_cost': gps_cost
|
||||
},
|
||||
'equipment': {
|
||||
'devices': equipment_devices,
|
||||
'monthly_cost': equipment_cost
|
||||
},
|
||||
'support': {
|
||||
'plan': support_data['name'] if support_data else 'None',
|
||||
'monthly_cost': support_cost,
|
||||
'hours_included': support_hours,
|
||||
'effective_rate': support_data['effective_rate'] if support_data else 0
|
||||
},
|
||||
'block_time': {
|
||||
'hours': block_hours,
|
||||
'cost': block_cost
|
||||
},
|
||||
'totals': {
|
||||
'monthly': monthly_total,
|
||||
'annual': annual_total,
|
||||
'per_endpoint': round(per_endpoint_cost, 2)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def print_quote(quote):
|
||||
"""Print formatted quote"""
|
||||
print("\n" + "="*60)
|
||||
print("GPS PRICING QUOTE")
|
||||
print("="*60)
|
||||
|
||||
print(f"\nGPS Monitoring: {quote['gps']['tier']}")
|
||||
print(f" {quote['gps']['endpoints']} endpoints × ${quote['gps']['price_per_endpoint']}/month = ${quote['gps']['monthly_cost']}")
|
||||
|
||||
if quote['equipment']['devices'] > 0:
|
||||
print(f"\nEquipment Pack:")
|
||||
print(f" {quote['equipment']['devices']} devices = ${quote['equipment']['monthly_cost']}/month")
|
||||
|
||||
if quote['support']['monthly_cost'] > 0:
|
||||
print(f"\nSupport Plan: {quote['support']['plan']}")
|
||||
print(f" ${quote['support']['monthly_cost']}/month ({quote['support']['hours_included']} hours included)")
|
||||
print(f" Effective rate: ${quote['support']['effective_rate']}/hour")
|
||||
|
||||
if quote['block_time']['hours'] > 0:
|
||||
print(f"\nPrepaid Block Time:")
|
||||
print(f" {quote['block_time']['hours']} hours = ${quote['block_time']['cost']} (never expires)")
|
||||
|
||||
print("\n" + "-"*60)
|
||||
print(f"MONTHLY TOTAL: ${quote['totals']['monthly']}")
|
||||
print(f"ANNUAL TOTAL: ${quote['totals']['annual']}")
|
||||
print(f"Per Endpoint/Device Cost: ${quote['totals']['per_endpoint']}/month")
|
||||
print("="*60 + "\n")
|
||||
|
||||
|
||||
# Example usage
|
||||
if __name__ == "__main__":
|
||||
print("GPS PRICING CALCULATOR - Arizona Computer Guru")
|
||||
print("="*60)
|
||||
|
||||
# Example 1: Small Office
|
||||
print("\nExample 1: Small Office (10 endpoints + 4 devices)")
|
||||
quote1 = calculate_gps_quote(
|
||||
endpoints=10,
|
||||
tier='pro',
|
||||
equipment_devices=4,
|
||||
support_plan='standard'
|
||||
)
|
||||
print_quote(quote1)
|
||||
|
||||
# Example 2: Growing Business
|
||||
print("\nExample 2: Growing Business (22 endpoints)")
|
||||
quote2 = calculate_gps_quote(
|
||||
endpoints=22,
|
||||
tier='pro',
|
||||
support_plan='premium'
|
||||
)
|
||||
print_quote(quote2)
|
||||
|
||||
# Example 3: Established Company
|
||||
print("\nExample 3: Established Company (42 endpoints)")
|
||||
quote3 = calculate_gps_quote(
|
||||
endpoints=42,
|
||||
tier='pro',
|
||||
support_plan='priority'
|
||||
)
|
||||
print_quote(quote3)
|
||||
Reference in New Issue
Block a user