Skip to content

Commit 41a8b37

Browse files
authored
Sponsor brochure updates (#4156)
1 parent 2e8497e commit 41a8b37

File tree

11 files changed

+98
-42
lines changed

11 files changed

+98
-42
lines changed

backend/api/conferences/types.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ def is_running(self, info: Info) -> bool:
378378

379379
@strawberry.field
380380
def sponsor_benefits(self) -> list[SponsorBenefit]:
381-
benefits = self.sponsor_benefits.all()
381+
benefits = self.sponsor_benefits.order_by("order").all()
382382

383383
return [
384384
SponsorBenefit(
@@ -391,9 +391,13 @@ def sponsor_benefits(self) -> list[SponsorBenefit]:
391391

392392
@strawberry.field
393393
def sponsor_levels(self) -> list[SponsorLevel]:
394-
levels = SponsorLevelModel.objects.filter(conference=self).prefetch_related(
395-
"sponsorlevelbenefit_set",
396-
"sponsorlevelbenefit_set__benefit",
394+
levels = (
395+
SponsorLevelModel.objects.filter(conference=self)
396+
.prefetch_related(
397+
"sponsorlevelbenefit_set",
398+
"sponsorlevelbenefit_set__benefit",
399+
)
400+
.order_by("order")
397401
)
398402

399403
return [
@@ -416,7 +420,7 @@ def sponsor_levels(self) -> list[SponsorLevel]:
416420

417421
@strawberry.field
418422
def sponsor_special_options(self) -> list[SponsorSpecialOption]:
419-
options = self.sponsor_special_options.all()
423+
options = self.sponsor_special_options.order_by("order").all()
420424

421425
return [
422426
SponsorSpecialOption(

backend/sponsors/admin.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@ class SponsorAdmin(OrderedModelAdmin):
2222

2323

2424
@admin.register(SponsorBenefit)
25-
class SponsorBenefitAdmin(admin.ModelAdmin):
26-
list_display = ("name", "conference", "category")
27-
list_filter = ("category",)
25+
class SponsorBenefitAdmin(OrderedModelAdmin, admin.ModelAdmin):
26+
list_display = ("name", "conference", "category", "order", "move_up_down_links")
27+
list_filter = (
28+
"conference",
29+
"category",
30+
)
2831

2932

3033
class SponsorLevelBenefitInline(admin.TabularInline):
@@ -43,8 +46,8 @@ class SponsorLevelAdmin(OrderedModelAdmin):
4346

4447

4548
@admin.register(SponsorSpecialOption)
46-
class SponsorSpecialOptionAdmin(admin.ModelAdmin):
47-
list_display = ("name", "conference", "price")
49+
class SponsorSpecialOptionAdmin(OrderedModelAdmin, admin.ModelAdmin):
50+
list_display = ("name", "conference", "price", "move_up_down_links")
4851
list_filter = ("conference",)
4952

5053

backend/sponsors/management/commands/fill_sponsor_data.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,43 +25,43 @@ def handle(self, *args, **kwargs):
2525
levels = [
2626
{
2727
"name": "Keystone",
28-
"price": "€ 10,000",
28+
"price": 10_000,
2929
"slots": 1,
3030
"highlight_color": "blue",
3131
},
3232
{
3333
"name": "Gold",
34-
"price": "€ 7,000",
34+
"price": 7_000,
3535
"slots": 2,
3636
"highlight_color": "yellow",
3737
},
3838
{
3939
"name": "Silver",
40-
"price": "€ 5,000",
40+
"price": 5_000,
4141
"slots": 5,
4242
"highlight_color": "gray",
4343
},
4444
{
4545
"name": "Bronze",
46-
"price": "€ 3,000",
46+
"price": 3_000,
4747
"slots": 0,
4848
"highlight_color": "brown",
4949
},
5050
{
5151
"name": "Patron",
52-
"price": "€ 1,000",
52+
"price": 2_000,
5353
"slots": 0,
5454
"highlight_color": "purple",
5555
},
5656
{
5757
"name": "Startup",
58-
"price": "€ 500",
58+
"price": 500,
5959
"slots": 0,
6060
"highlight_color": "green",
6161
},
6262
{
6363
"name": "Diversity",
64-
"price": "€ 1,000",
64+
"price": 1_000,
6565
"slots": 0,
6666
"highlight_color": "pink",
6767
},
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Generated by Django 5.1.1 on 2024-11-09 18:30
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('sponsors', '0013_sponsorlevel_price_sponsorlevel_slots_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name='sponsorbenefit',
15+
options={'ordering': ('order',), 'verbose_name': 'sponsor benefit', 'verbose_name_plural': 'sponsor benefits'},
16+
),
17+
migrations.AlterModelOptions(
18+
name='sponsorspecialoption',
19+
options={'ordering': ('order',), 'verbose_name': 'special option', 'verbose_name_plural': 'special options'},
20+
),
21+
migrations.AddField(
22+
model_name='sponsorbenefit',
23+
name='order',
24+
field=models.PositiveIntegerField(db_index=True, default=0, editable=False, verbose_name='order'),
25+
preserve_default=False,
26+
),
27+
migrations.AddField(
28+
model_name='sponsorspecialoption',
29+
name='order',
30+
field=models.PositiveIntegerField(db_index=True, default=0, editable=False, verbose_name='order'),
31+
preserve_default=False,
32+
),
33+
]

backend/sponsors/models.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,7 @@ class Meta(OrderedModel.Meta):
7171
unique_together = ["name", "conference"]
7272

7373

74-
class SponsorBenefit(TimeStampedModel):
75-
conference = models.ForeignKey(
76-
"conferences.Conference",
77-
on_delete=models.CASCADE,
78-
related_name="sponsor_benefits",
79-
)
80-
74+
class SponsorBenefit(OrderedModel, TimeStampedModel):
8175
class Category(models.TextChoices):
8276
CONTENT = "content", _("Sponsored Content")
8377
BOOTH = "booth", _("Booth")
@@ -86,11 +80,19 @@ class Category(models.TextChoices):
8680
RECRUITING = "recruiting", _("Recruiting")
8781
ATTENDEE_INTERACTION = "attendee_interaction", _("Attendee Interaction")
8882

83+
conference = models.ForeignKey(
84+
"conferences.Conference",
85+
on_delete=models.CASCADE,
86+
related_name="sponsor_benefits",
87+
)
88+
8989
name = I18nCharField(_("name"), max_length=100)
9090
category = models.CharField(_("category"), max_length=100, choices=Category.choices)
9191
description = I18nTextField(_("description"), blank=True)
9292

93-
class Meta:
93+
order_with_respect_to = "conference"
94+
95+
class Meta(OrderedModel.Meta):
9496
unique_together = ["name", "conference"]
9597
verbose_name = _("sponsor benefit")
9698
verbose_name_plural = _("sponsor benefits")
@@ -119,7 +121,7 @@ def __str__(self):
119121
return f"{self.sponsor_level} - {self.benefit} ({self.value})"
120122

121123

122-
class SponsorSpecialOption(models.Model):
124+
class SponsorSpecialOption(OrderedModel, models.Model):
123125
conference = models.ForeignKey(
124126
"conferences.Conference",
125127
on_delete=models.CASCADE,
@@ -128,8 +130,9 @@ class SponsorSpecialOption(models.Model):
128130
name = models.CharField(_("name"), max_length=255)
129131
description = models.TextField(_("description"))
130132
price = models.DecimalField(_("price"), max_digits=10, decimal_places=2)
133+
order_with_respect_to = "conference"
131134

132-
class Meta:
135+
class Meta(OrderedModel.Meta):
133136
verbose_name = _("special option")
134137
verbose_name_plural = _("special options")
135138
unique_together = ["name", "conference"]

frontend/src/components/brochure/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ export function Brochure({
5555
/>
5656
<OptionsPage
5757
options={conference.sponsorBenefits}
58-
title="Options"
58+
title="Services Details"
5959
background="bg-yellow"
6060
/>
6161
<OptionsPage
6262
options={conference.sponsorSpecialOptions}
63-
title="Special Options"
63+
title="Available Upgrades"
6464
background="bg-green"
6565
/>
6666
<TestimonialsPage testimonials={testimonials} />

frontend/src/components/brochure/options-page.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import clsx from "clsx";
2+
import { compile } from "~/helpers/markdown";
3+
import { humanizeText } from "./utils";
24

35
export const OptionsPage = ({
46
title,
@@ -17,12 +19,12 @@ export const OptionsPage = ({
1719
{options.map((option) => (
1820
<div key={option.name}>
1921
<dt className="font-bold break-after-avoid pt-[0.3cm]">
20-
{option.name}
22+
{humanizeText(option.name)}
2123
{option.price && (
2224
<span className="text-sm font-normal"> - {option.price}</span>
2325
)}
2426
</dt>
25-
<dd>{option.description}</dd>
27+
<dd>{compile(option.description).tree}</dd>
2628
</div>
2729
))}
2830
</dl>

frontend/src/components/brochure/pricing-page.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import clsx from "clsx";
2+
import { humanizeText } from "./utils";
23

34
export type Benefit = {
45
name: string;
@@ -35,7 +36,7 @@ const TableSection = ({
3536
return (
3637
<tr>
3738
<td className="uppercase font-bold text-coral px-[0.5cm] pt-[0.5cm] bg-cream">
38-
{title}
39+
{humanizeText(title)}
3940
</td>
4041
{new Array(totalPackages).fill(null).map((_, i) => (
4142
<td className={clsx("border-l", getBackgroundColor(i))} />
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const humanizeText = (text: string) => {
2+
return text.replace("_", " ");
3+
};

frontend/src/components/brochure/why-sponsor-page.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SnakeDNA } from "@python-italia/pycon-styleguide/illustrations";
1+
import { Text } from "@python-italia/pycon-styleguide";
22
import { compile } from "~/helpers/markdown";
33

44
const Snake1 = (props: React.SVGProps<SVGSVGElement>) => (
@@ -192,9 +192,16 @@ export function WhySponsorPage({
192192
<Snake3 className="size-[4cm] border-black border-4 bg-yellow -translate-y-32" />
193193
</div>
194194

195-
<p className="bg-pink border-4 border-black px-[0.5cm] py-[0.5cm] w-[50%] self-end">
196-
{compile(whySponsor.text).tree}
197-
</p>
195+
<div className="flex justify-between">
196+
<div className="self-end bg-green w-[30%] px-[0.5cm] py-[0.5cm] border-4 border-black">
197+
<span className="font-sans break-words transition-colors font-medium whitespace-pre-wrap select-auto">
198+
Get in touch, we’d be happy to take care of your ideas!
199+
</span>
200+
</div>
201+
<p className="bg-pink border-4 border-black px-[0.5cm] py-[0.5cm] w-[50%] self-end">
202+
{compile(whySponsor.text).tree}
203+
</p>
204+
</div>
198205
</div>
199206
</div>
200207
);

0 commit comments

Comments
 (0)