add addons to services
This commit is contained in:
parent
b96b186875
commit
22e527bcd9
8 changed files with 1039 additions and 4 deletions
|
@ -25,6 +25,9 @@ from ..models import (
|
|||
VSHNAppCatBaseFee,
|
||||
VSHNAppCatPrice,
|
||||
VSHNAppCatUnitRate,
|
||||
VSHNAppCatAddon,
|
||||
VSHNAppCatAddonBaseFee,
|
||||
VSHNAppCatAddonUnitRate,
|
||||
ProgressiveDiscountModel,
|
||||
DiscountTier,
|
||||
ExternalPricePlans,
|
||||
|
@ -297,6 +300,15 @@ class VSHNAppCatUnitRateInline(admin.TabularInline):
|
|||
fields = ("currency", "service_level", "amount")
|
||||
|
||||
|
||||
class VSHNAppCatAddonInline(admin.TabularInline):
|
||||
"""Inline admin for VSHNAppCatAddon model within the VSHNAppCatPrice admin"""
|
||||
|
||||
model = VSHNAppCatAddon
|
||||
extra = 1
|
||||
fields = ("name", "addon_type", "mandatory", "active")
|
||||
show_change_link = True
|
||||
|
||||
|
||||
class DiscountTierInline(admin.TabularInline):
|
||||
"""Inline admin for DiscountTier model"""
|
||||
|
||||
|
@ -330,7 +342,7 @@ class VSHNAppCatPriceAdmin(admin.ModelAdmin):
|
|||
)
|
||||
list_filter = ("variable_unit", "service", "discount_model")
|
||||
search_fields = ("service__name",)
|
||||
inlines = [VSHNAppCatBaseFeeInline, VSHNAppCatUnitRateInline]
|
||||
inlines = [VSHNAppCatBaseFeeInline, VSHNAppCatUnitRateInline, VSHNAppCatAddonInline]
|
||||
|
||||
def admin_display_base_fees(self, obj):
|
||||
"""Display base fees in admin list view"""
|
||||
|
@ -542,3 +554,84 @@ class ExternalPricePlansAdmin(ImportExportModelAdmin):
|
|||
return f"{count} plan{'s' if count != 1 else ''}"
|
||||
|
||||
display_compare_to_count.short_description = "Compare To"
|
||||
|
||||
|
||||
class VSHNAppCatAddonBaseFeeInline(admin.TabularInline):
|
||||
"""Inline admin for VSHNAppCatAddonBaseFee model"""
|
||||
|
||||
model = VSHNAppCatAddonBaseFee
|
||||
extra = 1
|
||||
fields = ("currency", "amount")
|
||||
|
||||
|
||||
class VSHNAppCatAddonUnitRateInline(admin.TabularInline):
|
||||
"""Inline admin for VSHNAppCatAddonUnitRate model"""
|
||||
|
||||
model = VSHNAppCatAddonUnitRate
|
||||
extra = 1
|
||||
fields = ("currency", "service_level", "amount")
|
||||
|
||||
|
||||
class VSHNAppCatAddonInline(admin.TabularInline):
|
||||
"""Inline admin for VSHNAppCatAddon model within the VSHNAppCatPrice admin"""
|
||||
|
||||
model = VSHNAppCatAddon
|
||||
extra = 1
|
||||
fields = ("name", "addon_type", "mandatory", "active", "order")
|
||||
show_change_link = True
|
||||
|
||||
|
||||
@admin.register(VSHNAppCatAddon)
|
||||
class VSHNAppCatAddonAdmin(admin.ModelAdmin):
|
||||
"""Admin configuration for VSHNAppCatAddon model"""
|
||||
|
||||
list_display = (
|
||||
"name",
|
||||
"vshn_appcat_price_config",
|
||||
"addon_type",
|
||||
"mandatory",
|
||||
"active",
|
||||
"display_pricing",
|
||||
"order",
|
||||
)
|
||||
list_filter = (
|
||||
"addon_type",
|
||||
"mandatory",
|
||||
"active",
|
||||
"vshn_appcat_price_config__service",
|
||||
)
|
||||
search_fields = (
|
||||
"name",
|
||||
"description",
|
||||
"commercial_description",
|
||||
"vshn_appcat_price_config__service__name",
|
||||
)
|
||||
ordering = ("vshn_appcat_price_config__service__name", "order", "name")
|
||||
|
||||
# Different inlines based on addon type
|
||||
inlines = [VSHNAppCatAddonBaseFeeInline, VSHNAppCatAddonUnitRateInline]
|
||||
|
||||
def display_pricing(self, obj):
|
||||
"""Display pricing information based on addon type"""
|
||||
if obj.addon_type == "BF": # Base Fee
|
||||
fees = obj.base_fees.all()
|
||||
if not fees:
|
||||
return "No base fees set"
|
||||
return format_html(
|
||||
"<br>".join([f"{fee.amount} {fee.currency}" for fee in fees])
|
||||
)
|
||||
elif obj.addon_type == "UR": # Unit Rate
|
||||
rates = obj.unit_rates.all()
|
||||
if not rates:
|
||||
return "No unit rates set"
|
||||
return format_html(
|
||||
"<br>".join(
|
||||
[
|
||||
f"{rate.amount} {rate.currency} ({rate.get_service_level_display()})"
|
||||
for rate in rates
|
||||
]
|
||||
)
|
||||
)
|
||||
return "Unknown addon type"
|
||||
|
||||
display_pricing.short_description = "Pricing"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue