Compare commits
2 commits
3519da52aa
...
1c94a4578f
Author | SHA1 | Date | |
---|---|---|---|
1c94a4578f | |||
7f7e5baa98 |
7 changed files with 115 additions and 2 deletions
|
@ -52,13 +52,14 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
mkdir -p $HOME/.kube
|
mkdir -p $HOME/.kube
|
||||||
echo "${{ secrets.KUBECONFIG }}" > $HOME/.kube/config
|
echo "${{ secrets.KUBECONFIG }}" > $HOME/.kube/config
|
||||||
|
cat $HOME/.kube/config
|
||||||
chmod 600 $HOME/.kube/config
|
chmod 600 $HOME/.kube/config
|
||||||
|
|
||||||
- name: Deploy to OpenShift
|
- name: Deploy to OpenShift
|
||||||
uses: docker://docker.io/appuio/oc:v4.16
|
uses: docker://docker.io/appuio/oc:v4.16
|
||||||
with:
|
with:
|
||||||
entrypoint: /bin/bash
|
entrypoint: /bin/bash
|
||||||
args: -c "oc -n ${NAMESPACE} apply --overwrite -f deployment/ && oc -n ${NAMESPACE} rollout restart deployment/servala"
|
args: -c "echo $KUBECONFIG && cat $KUBECONFIG && oc -n ${NAMESPACE} apply --overwrite -f deployment/ && oc -n ${NAMESPACE} rollout restart deployment/servala"
|
||||||
env:
|
env:
|
||||||
NAMESPACE: ${{ vars.NAMESPACE }}
|
NAMESPACE: ${{ vars.NAMESPACE }}
|
||||||
KUBECONFIG: $HOME/.kube/config
|
KUBECONFIG: $HOME/.kube/config
|
||||||
|
|
|
@ -11,6 +11,7 @@ from .models import (
|
||||||
ReusableText,
|
ReusableText,
|
||||||
Service,
|
Service,
|
||||||
ServiceOffering,
|
ServiceOffering,
|
||||||
|
WebsiteFaq,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -126,3 +127,10 @@ class ConsultingPartnerAdmin(admin.ModelAdmin):
|
||||||
class LeadAdmin(admin.ModelAdmin):
|
class LeadAdmin(admin.ModelAdmin):
|
||||||
list_display = ("name", "company", "created_at", "odoo_lead_id")
|
list_display = ("name", "company", "created_at", "odoo_lead_id")
|
||||||
search_fields = ("name", "company")
|
search_fields = ("name", "company")
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(WebsiteFaq)
|
||||||
|
class WebsiteFaqAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ("question", "order")
|
||||||
|
search_fields = ("question", "answer")
|
||||||
|
ordering = ("order",)
|
||||||
|
|
32
hub/services/migrations/0018_websitefaq.py
Normal file
32
hub/services/migrations/0018_websitefaq.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# Generated by Django 5.1.5 on 2025-03-06 10:18
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("services", "0017_service_tagline"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="WebsiteFaq",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("question", models.CharField(max_length=200)),
|
||||||
|
("answer", models.TextField()),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"ordering": ["question"],
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Generated by Django 5.1.5 on 2025-03-06 10:30
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("services", "0018_websitefaq"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name="websitefaq",
|
||||||
|
options={"ordering": ["order"]},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="websitefaq",
|
||||||
|
name="order",
|
||||||
|
field=models.IntegerField(default=0),
|
||||||
|
),
|
||||||
|
]
|
|
@ -337,3 +337,15 @@ class Lead(models.Model):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.name} - {self.company} ({self.service})"
|
return f"{self.name} - {self.company} ({self.service})"
|
||||||
|
|
||||||
|
|
||||||
|
class WebsiteFaq(models.Model):
|
||||||
|
question = models.CharField(max_length=200)
|
||||||
|
answer = ProseEditorField()
|
||||||
|
order = models.IntegerField(default=0)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ["order"]
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.question
|
||||||
|
|
|
@ -184,4 +184,39 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
<section class="section">
|
||||||
|
<div class="container mx-auto px-20 px-lg-0 pt-80 pb-60">
|
||||||
|
<header class="section__header text-center mb-30">
|
||||||
|
<h2 class="section-heading-h2 fs-40 fs-lg-64">Frequenty Asked Questions</h2>
|
||||||
|
<div class="section__desc fw-medium fs-20 w-lg-40 mx-auto">
|
||||||
|
<p>Still need more information? Read our FAQ or contact us to learn more about the Servala.</p>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div x-data="{ open: null }" class="section__faq">
|
||||||
|
{% for faq in websitefaqs %}
|
||||||
|
<div class="section__faq-item">
|
||||||
|
<div class="faq-item__header">
|
||||||
|
<button @click="open === {{ faq.id }} ? open = null : open = {{ faq.id }}"
|
||||||
|
class="faq-item__button w-100 d-flex justify-content-between align-items-center px-0" type="button">
|
||||||
|
<span class="faq-item__title fw-semibold mb-0">{{ faq.question }}</span>
|
||||||
|
<div class="faq-icon">
|
||||||
|
<svg width="16" height="16" class="svg-icon transition-all duration-200"
|
||||||
|
:class="{'svg-active rotate-180': open === 0 }" viewBox="0 0 16 16" fill="none"
|
||||||
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
|
d="M1.64592 4.64592C1.69236 4.59935 1.74754 4.56241 1.80828 4.5372C1.86903 4.512 1.93415 4.49902 1.99992 4.49902C2.06568 4.49902 2.13081 4.512 2.19155 4.5372C2.2523 4.56241 2.30747 4.59935 2.35392 4.64592L7.99992 10.2929L13.6459 4.64592C13.6924 4.59943 13.7476 4.56255 13.8083 4.53739C13.8691 4.51223 13.9342 4.49929 13.9999 4.49929C14.0657 4.49929 14.1308 4.51223 14.1915 4.53739C14.2522 4.56255 14.3074 4.59943 14.3539 4.64592C14.4004 4.6924 14.4373 4.74759 14.4624 4.80833C14.4876 4.86907 14.5005 4.93417 14.5005 4.99992C14.5005 5.06566 14.4876 5.13076 14.4624 5.1915C14.4373 5.25224 14.4004 5.30743 14.3539 5.35392L8.35392 11.3539C8.30747 11.4005 8.2523 11.4374 8.19155 11.4626C8.1308 11.4878 8.06568 11.5008 7.99992 11.5008C7.93415 11.5008 7.86903 11.4878 7.80828 11.4626C7.74754 11.4374 7.69236 11.4005 7.64592 11.3539L1.64592 5.35392C1.59935 5.30747 1.56241 5.2523 1.5372 5.19155C1.512 5.13081 1.49902 5.06568 1.49902 4.99992C1.49902 4.93415 1.512 4.86903 1.5372 4.80828C1.56241 4.74754 1.59935 4.69236 1.64592 4.64592Z"
|
||||||
|
fill="#3C4043" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div x-cloak x-show="open === {{ faq.id }}" class="pt-2" x-collapse>
|
||||||
|
<p class="faq-description lh-base">{{ faq.answer|safe }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -1,5 +1,5 @@
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from hub.services.models import Service, CloudProvider, ConsultingPartner
|
from hub.services.models import Service, CloudProvider, ConsultingPartner, WebsiteFaq
|
||||||
|
|
||||||
|
|
||||||
def homepage(request):
|
def homepage(request):
|
||||||
|
@ -13,10 +13,13 @@ def homepage(request):
|
||||||
is_featured=True
|
is_featured=True
|
||||||
).prefetch_related("services", "cloud_providers")[:4]
|
).prefetch_related("services", "cloud_providers")[:4]
|
||||||
|
|
||||||
|
websitefaqs = WebsiteFaq.objects.all().order_by("order")
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
"featured_services": featured_services,
|
"featured_services": featured_services,
|
||||||
"featured_providers": featured_providers,
|
"featured_providers": featured_providers,
|
||||||
"featured_partners": featured_partners,
|
"featured_partners": featured_partners,
|
||||||
|
"websitefaqs": websitefaqs,
|
||||||
}
|
}
|
||||||
|
|
||||||
return render(request, "services/homepage.html", context)
|
return render(request, "services/homepage.html", context)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue