diff --git a/.github/actions/pelican-to-github-pages/action.yml b/.github/actions/pelican-to-github-pages/action.yml index 3de2dc4f..c3e18240 100644 --- a/.github/actions/pelican-to-github-pages/action.yml +++ b/.github/actions/pelican-to-github-pages/action.yml @@ -8,7 +8,7 @@ branding: runs: using: 'docker' - image: 'Dockerfile' + image: 'Dockerfile/Dockerfile' inputs: GH_PAGES_BRANCH: diff --git a/.github/workflows/pubish_org_eleicoes.yml b/.github/workflows/pubish_org_eleicoes.yml new file mode 100644 index 00000000..ae142d4a --- /dev/null +++ b/.github/workflows/pubish_org_eleicoes.yml @@ -0,0 +1,47 @@ +name: Publish Eleições / CMS docker image +on: + push: + paths: + - 'app/contrib/**' + - 'app/project/**' + - 'app/tailwind/**' + - 'app/admin_styled/**' + - 'app/org_eleicoes/**' + branches: + - main + - 'release/**' + - 'feature/**' + - 'hotfix/**' + tags: + - v* + +jobs: + build-docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: nossas/eleicoes-cms + + - name: Build and Push + uses: docker/build-push-action@v3 + with: + context: ./app + file: app/org_eleicoes/Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/.github/workflows/publish_org_amazonia_de_pe.yml b/.github/workflows/publish_org_amazonia_de_pe.yml new file mode 100644 index 00000000..e2f7aa89 --- /dev/null +++ b/.github/workflows/publish_org_amazonia_de_pe.yml @@ -0,0 +1,47 @@ +name: Publish Amazônia de Pé / CMS docker image +on: + push: + paths: + - 'app/contrib/**' + - 'app/project/**' + - 'app/tailwind/**' + - 'app/admin_styled/**' + - 'app/org_amazonia_de_pe/**' + branches: + - main + - 'release/**' + - 'feature/**' + - 'hotfix/**' + tags: + - v* + +jobs: + build-docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: nossas/amazoniadepe-cms + + - name: Build and Push + uses: docker/build-push-action@v3 + with: + context: ./app + file: app/org_amazonia_de_pe/Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish_org_nossas.yml similarity index 72% rename from .github/workflows/publish.yml rename to .github/workflows/publish_org_nossas.yml index d06b36f9..74d44c04 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish_org_nossas.yml @@ -1,13 +1,20 @@ -name: Publish Bonde CMS docker image +name: Publish NOSSAS / CMS docker image on: - pull_request: push: + paths: + - 'app/contrib/**' + - 'app/project/**' + - 'app/tailwind/**' + - 'app/admin_styled/**' + - 'app/org_nossas/**' branches: - main + - 'release/**' + - 'feature/**' + - 'hotfix/**' tags: - v* - jobs: build-docker: runs-on: ubuntu-latest @@ -28,13 +35,13 @@ jobs: id: meta uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 with: - images: nossas/cms + images: nossas/nossas-cms - name: Build and Push uses: docker/build-push-action@v3 with: context: ./app - file: Dockerfile + file: app/org_nossas/Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 19b0ad29..5144d49b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,8 @@ __pycache__ *.sqlite3 media staticfiles - +testimage.jpeg +*.DS_Store # Pelican docs/output diff --git a/Dockerfile.amazoniadepe b/Dockerfile.amazoniadepe new file mode 100644 index 00000000..b58fa232 --- /dev/null +++ b/Dockerfile.amazoniadepe @@ -0,0 +1,63 @@ +# Build staticfiles +FROM node:18-alpine AS node-builder + +WORKDIR /app + +COPY . . + +WORKDIR /app/tailwind + +RUN npm i + +RUN npm run page:build + +RUN npm run admin:build + +# Use an official Python runtime based on Debian 10 "buster" as a parent image. +FROM python:slim-buster + +# Port used by this container to serve HTTP. +EXPOSE 8000 + +# Set environment variables. +# 1. Force Python stdout and stderr streams to be unbuffered. +# 2. Set PORT variable that is used by Gunicorn. This should match "EXPOSE" +# command. +ENV PYTHONUNBUFFERED=1 \ + PORT=8000 + +# Install system packages required by Django CMS and Django. +RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \ + build-essential \ + cargo \ + libssl-dev \ + libffi-dev \ + sox \ + ffmpeg \ + libcairo2 \ + libcairo2-dev \ + python3-dev \ + git \ +&& rm -rf /var/lib/apt/lists/* + +# Install the application server. +RUN pip install uwsgi django-storages boto3 django-prometheus + +# Install the project requirements. +COPY org_amazonia_de_pe/requirements.txt / +RUN pip install -r requirements.txt + +# Use /app folder as a directory where the source code is stored. +WORKDIR /app + +# Copy the source code of the project into the container. +COPY --from=node-builder /app ./ + +RUN python manage.py collectstatic --noinput --clear -i tailwindcss + +# Runtime command that executes when "docker run" is called. + +# Check traefik + etcd configs to running domains +ENV ENABLE_CHECK_TRAEFIK=True + +CMD ["uwsgi", "--ini", "/app/wsgi.ini"] diff --git a/Dockerfile.eleicoes b/Dockerfile.eleicoes new file mode 100644 index 00000000..bad842b3 --- /dev/null +++ b/Dockerfile.eleicoes @@ -0,0 +1,63 @@ +# Build staticfiles +FROM node:18-alpine AS node-builder + +WORKDIR /app + +COPY . . + +WORKDIR /app/tailwind + +RUN npm i + +RUN npm run page:build + +RUN npm run admin:build + +# Use an official Python runtime based on Debian 10 "buster" as a parent image. +FROM python:slim-buster + +# Port used by this container to serve HTTP. +EXPOSE 8000 + +# Set environment variables. +# 1. Force Python stdout and stderr streams to be unbuffered. +# 2. Set PORT variable that is used by Gunicorn. This should match "EXPOSE" +# command. +ENV PYTHONUNBUFFERED=1 \ + PORT=8000 + +# Install system packages required by Django CMS and Django. +RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \ + build-essential \ + cargo \ + libssl-dev \ + libffi-dev \ + sox \ + ffmpeg \ + libcairo2 \ + libcairo2-dev \ + python3-dev \ + git \ +&& rm -rf /var/lib/apt/lists/* + +# Install the application server. +RUN pip install uwsgi django-storages boto3 django-prometheus + +# Install the project requirements. +COPY org_eleicoes/requirements.txt / +RUN pip install -r requirements.txt + +# Use /app folder as a directory where the source code is stored. +WORKDIR /app + +# Copy the source code of the project into the container. +COPY --from=node-builder /app ./ + +RUN python manage.py collectstatic --noinput --clear -i tailwindcss + +# Runtime command that executes when "docker run" is called. + +# Check traefik + etcd configs to running domains +ENV ENABLE_CHECK_TRAEFIK=True + +CMD ["uwsgi", "--ini", "/app/wsgi.ini"] diff --git a/Dockerfile.nossas b/Dockerfile.nossas new file mode 100644 index 00000000..5e274374 --- /dev/null +++ b/Dockerfile.nossas @@ -0,0 +1,63 @@ +# Build staticfiles +FROM node:18-alpine AS node-builder + +WORKDIR /app + +COPY . . + +WORKDIR /app/tailwind + +RUN npm i + +RUN npm run page:build + +RUN npm run admin:build + +# Use an official Python runtime based on Debian 10 "buster" as a parent image. +FROM python:slim-buster + +# Port used by this container to serve HTTP. +EXPOSE 8000 + +# Set environment variables. +# 1. Force Python stdout and stderr streams to be unbuffered. +# 2. Set PORT variable that is used by Gunicorn. This should match "EXPOSE" +# command. +ENV PYTHONUNBUFFERED=1 \ + PORT=8000 + +# Install system packages required by Django CMS and Django. +RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \ + build-essential \ + cargo \ + libssl-dev \ + libffi-dev \ + sox \ + ffmpeg \ + libcairo2 \ + libcairo2-dev \ + python3-dev \ + git \ +&& rm -rf /var/lib/apt/lists/* + +# Install the application server. +RUN pip install uwsgi django-storages boto3 django-prometheus + +# Install the project requirements. +COPY org_nossas/requirements.txt / +RUN pip install -r requirements.txt + +# Use /app folder as a directory where the source code is stored. +WORKDIR /app + +# Copy the source code of the project into the container. +COPY --from=node-builder /app ./ + +RUN python manage.py collectstatic --noinput --clear -i tailwindcss + +# Runtime command that executes when "docker run" is called. + +# Check traefik + etcd configs to running domains +ENV ENABLE_CHECK_TRAEFIK=True + +CMD ["uwsgi", "--ini", "/app/wsgi.ini"] diff --git a/app/.coveragerc b/app/.coveragerc index b71a4342..59d5f92c 100644 --- a/app/.coveragerc +++ b/app/.coveragerc @@ -1,3 +1,3 @@ [run] omit = tests/*, */settings*, tests* -include = contrib/ds/* \ No newline at end of file +include = contrib/ds/*, org_eleicoes/votepeloclima/* \ No newline at end of file diff --git a/app/contrib/bonde/admin.py b/app/contrib/bonde/admin.py index b0395038..8daf8766 100644 --- a/app/contrib/bonde/admin.py +++ b/app/contrib/bonde/admin.py @@ -5,6 +5,10 @@ # Register your models here. from django.utils.translation import gettext_lazy as _ +from django.core.mail import EmailMultiAlternatives +from django.template import Context, Template + +from djangocms_text_ckeditor.widgets import TextEditorWidget from djangocms_form_builder import actions from .api import create_form_entry @@ -33,3 +37,60 @@ def execute(self, form, request): if len(list(filter(lambda x: not x, settings.values()))) == 0: create_form_entry(settings, **form.cleaned_data) + + + +@actions.register +class IntegrateWithEmail(actions.FormAction): + verbose_name = _("Integração com o EMAIL") + + class Meta: + entangled_fields = { + "action_parameters": ["subject", "to_email", "email_text_html"] + } + + # name = forms.CharField(label="Nome", required=False) + to_email = forms.EmailField(label="Email", required=False) + subject = forms.CharField( + label="Assunto", + required=False, + help_text="Você pode usar {{FieldName}} para inserir uma informaçâo do formulário nesse texto.", + ) + email_text_html = forms.CharField( + label="Corpo do e-mail", + help_text="Você pode usar {{FieldName}} para inserir uma informaçâo do formulário nesse texto.", + required=False, + widget=TextEditorWidget + ) + + def execute(self, form, request): + # name = self.get_parameter(form, "name") + to_email = self.get_parameter(form, "to_email") + subject_text = self.get_parameter(form, "subject") + email_text_html = self.get_parameter(form, "email_text_html") + + # context = form.cleaned_data + # email_template_name = "forms/body.html" + # html_email_template_name = email_template_name + # import ipdb;ipdb.set_trace() + # if to_email and body_text and subject_text: + """ + Send a django.core.mail.EmailMultiAlternatives to `to_email`. + """ + from_email = form.cleaned_data.get("email") + context = Context({**form.cleaned_data}) + # subject = loader.render_to_string(subject_template_name, context) + # Email subject *must not* contain newlines + # subject = "".join(subject.splitlines()) + + subject = Template(subject_text).render(context) + body = Template(email_text_html).render(context) + + # import ipdb;ipdb.set_trace() + email_message = EmailMultiAlternatives(subject, body, from_email, [to_email]) + email_message.attach_alternative(body, "text/html") + email_message.send() + +# TODO: +# Adicionar campos do formulário no contexto do assunto +# \ No newline at end of file diff --git a/app/contrib/bonde/models.py b/app/contrib/bonde/models.py index 9b53d522..8533b2b3 100644 --- a/app/contrib/bonde/models.py +++ b/app/contrib/bonde/models.py @@ -336,14 +336,14 @@ class BondeBasePluginModel(CMSPlugin): class Meta: abstract = True - def get_widget(self) -> Widget | None: + def get_widget(self): if not self.reference_id: return None return Widget.objects.get(id=self.reference_id) @property - def widget(self) -> Widget | None: + def widget(self): return self.get_widget() @@ -357,3 +357,27 @@ class Meta: @property def render_success(self): return "forms/success.html" + + +class PlacesIBGE(models.Model): + uf = models.CharField(max_length=2) + nome_uf = models.CharField(max_length=100) + regiao_geografica_intermediaria = models.CharField(max_length=10) + nome_regiao_geografica_intermediaria = models.CharField(max_length=100) + regiao_geografica_imediata = models.CharField(max_length=10) + nome_regiao_geografica_imediata = models.CharField(max_length=100) + mesorregiao_geografica = models.CharField(max_length=10) + nome_mesorregiao = models.CharField(max_length=100) + microrregiao_geografica = models.CharField(max_length=10) + nome_microrregiao = models.CharField(max_length=100) + municipio = models.CharField(max_length=10) + codigo_municipio_completo = models.CharField(max_length=10) + nome_municipio = models.CharField(max_length=100) + distrito = models.CharField(max_length=10) + codigo_distrito_completo = models.CharField(max_length=15, primary_key=True) + nome_distrito = models.CharField(max_length=100) + sigla_uf = models.CharField(max_length=2) + + class Meta: + managed = False + db_table = 'places_ibge' diff --git a/app/contrib/ds/models.py b/app/contrib/ds/models.py index be3612fb..1a59b820 100644 --- a/app/contrib/ds/models.py +++ b/app/contrib/ds/models.py @@ -57,6 +57,8 @@ "Arvo", "Asap", "Avenir Next LT Pro", + "Agrandir Grand", + "Arial", "Baloo Bhai", "Bebas Neue Pro", "Bitter", diff --git a/app/contrib/ds/templates/ds/base.html b/app/contrib/ds/templates/ds/base.html index f94b7cf5..12d689bf 100644 --- a/app/contrib/ds/templates/ds/base.html +++ b/app/contrib/ds/templates/ds/base.html @@ -30,6 +30,19 @@ +{% endcompress %} +{% endblock %} + +{% block content %} +
+
+
+

Conheça candidaturas da sua cidade

+

Use os filtros para descobrir candidaturas comprometidas com políticas climáticas! +

+
+ +
+
+ {% crispy form.header %} + +
+
+ +
+ +
+ +
+
+ {% for candidature in candidatures %} +
+
+ + Foto de {{ candidature.legal_name }} + {% if candidature.get_election_result == "segundo_turno" %} + 2º Turno + {% endif %} + {% if candidature.get_election_result == "eleita" %} + Eleito/a + {% endif %} + +
+

{{ candidature.get_city_display }} - {{ candidature.get_state_display }}

+
+
{{ candidature.ballot_name|title }}
+
+
+
{{ candidature.get_intended_position_display }} | {{ candidature.get_political_party_display }} | {{ candidature.number_id }}
+

+ {{ candidature.get_proposes_display|join:" / "|escape }} +

+
+ +
+
+ {% empty %} +
+ +
Infelizmente nenhuma candidatura foi encontrada
+

Tente ajustar os filtros para encontrar uma candidatura que se alinhe com suas prioridades climáticas.

+ +
+ {% endfor %} +
+
    +
  • + + + +
  • + + + {% for page_number in page_obj.paginator.page_range %} + {% if page_number == 1 or page_number == page_obj.paginator.num_pages %} +
  • + + {{ page_number }} + +
  • + {% elif page_number >= page_obj.number|add:'-3' and page_number <= page_obj.number|add:'3' %} +
  • + + {{ page_number }} + +
  • + {% elif page_number == page_obj.number|add:'-4' or page_number == page_obj.number|add:'4' %} +
  • + ... +
  • + {% endif %} + {% endfor %} + +
  • + + + +
  • +
+
+
+
+{% endblock %} + +{% block footer_js %} + +{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/captcha.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/captcha.html new file mode 100644 index 00000000..7f086a12 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/captcha.html @@ -0,0 +1,27 @@ +{% extends "candidature/wizard_form.html" %} +{% load crispy_forms_tags %} + +{% block before_form %} +
+

Vamos começar?

+

Inscreva-se e aumente a visibilidade da sua candidatura! +

O processo de cadastro é simples e leva cerca de 15 minutos. Você precisará aceitar alguns compromissos básicos, preencher suas informações pessoais, fornecer detalhes sobre sua candidatura e trajetória, e incluir suas propostas sobre a agenda climática.

+

Após finalizar, você terá acesso a uma área exclusiva onde poderá ver e editar seu perfil, além de acessar ferramentas para compartilhar sua campanha. Vamos lá?

+

Encontre materiais de apoio para entender o cadastro e fortalecer sua candidatura neste link.

+
+{% endblock %} + +{% block form_fields %}{% endblock %} + +{% block form_actions %} +
+
+ {% crispy wizard.form %} +
+
+ {% if wizard.steps.next %} + + {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/checkout.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/checkout.html new file mode 100644 index 00000000..8e0a0f7e --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/checkout.html @@ -0,0 +1,44 @@ +{% extends "candidature/wizard_base.html" %} +{% load i18n crispy_forms_tags %} + +{% block main %} +
+
+

Para finalizar, confirme suas informações

+

Confira suas informações e, ao final da página, aceite os termos de privacidade e clique em 'Concluir Cadastro'. Somente assim seu cadastro será submetido.

+
+
+ {% for step in checkout_steps %} + {% if step.name == 'checkout' %} + + {% csrf_token %} + {{ wizard.form.media }} + {{ wizard.management_form }} +
+
+ {{ wizard.form|crispy }} +
+ +
+ + {% else %} +
+
+
{{ step.title }}
+ {% if step.edit_url %} + Editar + {% endif %} +
+ {% if step.form.helper %} + {% crispy step.form step.form.helper %} + {% else %} + {{ step.form|crispy }} + {% endif %} +
+ {% endif %} + {% endfor %} +
+
+{% endblock %} + +{% block screenside %}{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/compromissos.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/compromissos.html new file mode 100644 index 00000000..8e272851 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/compromissos.html @@ -0,0 +1,5 @@ +{% extends "candidature/wizard_form.html" %} + +{% block form_fields %} +{{ wizard.form }} +{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/dashboard.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/dashboard.html new file mode 100644 index 00000000..8e897bb0 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/dashboard.html @@ -0,0 +1,143 @@ +{% extends "votepeloclima/base.html" %} +{% load static crispy_forms_filters social_share %} + +{% block head_css %} +{{ block.super }} + +{% endblock %} + +{% block content %} +
+
+
+
+

Olá, {{ request.user.first_name }}!

+

Gerencie suas informações de candidatura, edite seus dados e compartilhe seu perfil com os eleitores.

+ + +
+ +
+ + {{ flow.get_status_display }} +
+ {% if flow.status == "draft" %} +
+

Seu cadastro está incompleto e seu perfil não está ativo. Por favor, complete as informações necessárias para ativar seu perfil e torná-lo visível aos eleitores. Clique em "Continuar Cadastro" para finalizar o cadastro.

+ <{% if checkout_is_valid %}a href="{% url 'register_step' step='checkout' %}"{% else %}button type="button" disabled{% endif %} class="btn btn-secondary text-uppercase">Submeter para análise +
+ {% elif flow.status == "editing" %} +
+

Sua edição está incompleta e seu perfil está ativo. Você pode desativar seu perfil para que ele não fique público durante o processo de edição, se preferir.

+ <{% if checkout_is_valid %}a href="{% url 'register_step' step='checkout' %}"{% else %}button type="button" disabled{% endif %} class="btn btn-secondary text-uppercase">Submeter para análise +
+ {% elif flow.status == "invalid" %} +
+

{{ flow.invalid_reason }}

+
+ {% elif flow.status == "submitted" %} +
+

Estamos verificando suas informações, este processo pode levar até 24 horas. Assim que a verificação for concluída te enviaremos um e-mail com o link do seu perfil.

+
+ {% endif %} +
+ +
+
+
+
+ <{% if is_public %}a href="{% url 'candidate_profile' slug=flow.candidature.slug %}"{% else %}button disabled{% endif %} class="btn btn-secondary text-uppercase">Visualizar perfil + + {% if flow.status == "draft" or flow.status == "editing" %} + Editar informações + {% else %} +
+ {% csrf_token %} + +
+ {% endif %} +
+
+
+
+ {% for checkout_step in checkout_steps %} +
+

+ +

+
+
+ {% if checkout_step.form.helper %} + {% crispy checkout_step.form checkout_step.form.helper %} + {% else %} + {% crispy checkout_step.form %} + {% endif %} +
+
+
+ {% endfor %} +
+
+
+
+
+
+
+

Outras informações

+

Compartilhe seu perfil com eleitores e ajude a divulgar suas propostas. Para mais detalhes sobre o processo de verificação, acesse o link abaixo. Se precisar de suporte ou tiver dúvidas, entre em contato conosco. Se preferir remover seu perfil e dados da plataforma, você pode excluir seu cadastro a qualquer momento.

+ +
+
+ {% if is_public and candidature %} +
+

Compartilhe seu perfil:

+
+ {% with request.scheme|add:"://"|add:request.get_host as base_url %} + + + WhatsApp + + + + Twitter + + + + LinkedIn + + + + Facebook + + + {% endwith %} +
+
+ {% endif %} +
+
+ +
+{% endblock %} + +{% block footer_js %} + +{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_approved.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_approved.html new file mode 100644 index 00000000..ec82f20a --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_approved.html @@ -0,0 +1,18 @@ +{% extends "votepeloclima/base_mail.html" %} + +{% block content %} +

Oi {{ user.first_name }},

+ +{% if not user.is_active %} +

Seu perfil foi aprovado e já está disponível no Vote Pelo Clima! Agora, basta definir uma senha segura para começar a + usar todos os recursos disponíveis na plataforma. Assim, você poderá editar suas informações, acessar links de + compartilhamento e gerenciar sua conta:

+Criar senha +{% else %} +

Seu perfil foi aprovado e já está disponível no Vote Pelo Clima! Você pode acessar a nossa plataforma para editar suas informações, acessar links de compartilhamento e gerenciar sua conta.

+Ir para Vote Pelo Clima +{% endif %} + +

É um prazer ter você conosco!

+

Qualquer dúvida, é só responder retornando esse e-mail.

+{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_approved_subject.txt b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_approved_subject.txt new file mode 100644 index 00000000..6fe1f720 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_approved_subject.txt @@ -0,0 +1 @@ +Seu perfil está no ar 🎉 \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_done.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_done.html new file mode 100644 index 00000000..436b0f7e --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_done.html @@ -0,0 +1,21 @@ +{% extends "votepeloclima/base_mail.html" %} + +{% block content %} +

Oi {{user.first_name}},

+ +

Recebemos seu cadastro e estamos validando as informações para garantir que tudo esteja correto. Assim que a + verificação for concluída, enviaremos um novo e-mail com o link do seu perfil para que você possa começar a + divulgá-lo.

+ +{% if not user.is_active %} +

Enquanto isso, você pode se antecipar e definir uma senha segura para acessar a plataforma:

+Criar senha +

Seu nome de usuário, caso tenha esquecido: {{user.username}}

+

Por ora, é isso! Ficamos felizes em ter você conosco.

+{% else %} +

Ficamos felizes em ter você conosco.

+{% endif %} + +

Qualquer dúvida, é só responder retornando esse e-mail.

+{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_done_subject.txt b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_done_subject.txt new file mode 100644 index 00000000..159d78d0 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_done_subject.txt @@ -0,0 +1 @@ +Seu cadastro foi concluído! 🪴 \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_incomplete.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_incomplete.html new file mode 100644 index 00000000..dd592c7f --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_incomplete.html @@ -0,0 +1,12 @@ +{% extends "votepeloclima/base_mail.html" %} + +{% block content %} +

Oi {{user.first_name}},

+ +

Você iniciou seu cadastro na plataforma Vote pelo Clima! Faltam poucos passos para se conectar com novos eleitores e mostrar que sua candidatura é comprometida com a justiça climática.

+ +

Caso tenha que sair antes de finalizar o cadastro, você pode continuar de onde parou quando estiver pronta/o. Para isso, é só definir uma senha para acessar a plataforma e criar seu perfil:

+Criar senha + +

Obs: Caso você tenha concluído seu cadastro na plataforma, é só ignorar essa mensagem e acompanhar os próximos e-mails.

+{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_incomplete_subject.txt b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_incomplete_subject.txt new file mode 100644 index 00000000..3bd54ba9 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_incomplete_subject.txt @@ -0,0 +1 @@ +Seja bem vinda/o ao Vote Pelo Clima ✨ \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_invalid.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_invalid.html new file mode 100644 index 00000000..afcd499f --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_invalid.html @@ -0,0 +1,15 @@ +{% extends "votepeloclima/base_mail.html" %} + +{% block content %} +

Oi {{user.first_name}},

+ +{% if not user.is_active %} +

Durante a validação do seu cadastro, identificamos um problema que impede sua aprovação no momento. Para acessar a área da candidatura e ver mais detalhes, você precisa criar uma senha:

+Criar senha +{% else %} +

Durante a validação do seu cadastro, identificamos um problema que impede sua aprovação no momento. Por favor, acesse a área da candidatura para saber mais detalhes:

+Ver área da candidatura +{% endif %} + +

Se precisar de ajuda ou tiver dúvidas, estamos à disposição para ajudar.

+{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_invalid_subject.txt b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_invalid_subject.txt new file mode 100644 index 00000000..482e8bf0 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/emails/register_invalid_subject.txt @@ -0,0 +1 @@ +Encontramos um problema no seu cadastro 😔 \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/informacoes_pessoais.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/informacoes_pessoais.html new file mode 100644 index 00000000..771dd43c --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/informacoes_pessoais.html @@ -0,0 +1,7 @@ +{% extends "candidature/wizard_form.html" %} + +{% block form_fields %} +{{block.super}} + +

Suas informações são usadas apenas para verificação e segurança. O processo será salvo pelo seu e-mail e, no final do cadastro, você criará uma senha e um login para acessar a Área da Candidatura.

+{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/not_approved.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/not_approved.html new file mode 100644 index 00000000..e357f8e0 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/not_approved.html @@ -0,0 +1,11 @@ +{% extends "votepeloclima/base.html" %} +{% load crispy_forms_filters %} + +{% block content %} +
+
+

Candidatura aguardando verificações

+

A candidatura de {{ candidature.ballot_name }} ainda não foi aprovada.

+
+
+{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/suas_propostas.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/suas_propostas.html new file mode 100644 index 00000000..52ab3000 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/suas_propostas.html @@ -0,0 +1,33 @@ +{% extends "candidature/wizard_form.html" %} +{% load i18n crispy_forms_tags %} + +{% block before_form %} +
+

Suas propostas

+

Escolha até 3 pautas que você defenderá e descreva suas propostas para cada uma delas. Essas informações ajudarão os eleitores a entender melhor suas prioridades e ações.

+
+{% endblock %} + +{% block form_fields %} +
+
+
Selecione até 3 pautas prioritárias
+
+ {% if wizard.form.forms %} + {{ wizard.form.management_form }} + {% for form in wizard.form.forms %} + {{ form|crispy }} + {% endfor %} + {% else %} + {{ wizard.form|crispy }} + {% endif %} +
+
+
+
Descreva suas propostas
+
+
+
+{% endblock %} + +{% block screenside %}{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/submitted.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/submitted.html new file mode 100644 index 00000000..a73eb52e --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/submitted.html @@ -0,0 +1,21 @@ +{% extends "votepeloclima/base.html" %} + +{% block content %} +
+ {% block screenside %} +
+
+ {% endblock %} +
+ +
+

Agora é só aguardar!

+

Estamos verificando suas informações e, em breve, você receberá um e-mail com a confirmação do seu perfil.

+

Enquanto isso, você pode acessar a área da candidatura para acompanhar o status ou fazer ajustes, se necessário.

+
+ Prazo previsto: Até 24h +
+
+{% endblock %} + +{% block footer %}{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/templatetags/social_media.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/templatetags/social_media.html new file mode 100644 index 00000000..fd35c9ee --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/templatetags/social_media.html @@ -0,0 +1,5 @@ +{% if url and kind %} + + + +{% endif %} diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/wizard_base.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/wizard_base.html new file mode 100644 index 00000000..1fb65829 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/wizard_base.html @@ -0,0 +1,22 @@ +{% extends "votepeloclima/base.html" %} +{% load static %} + +{% block content %} +
+
+ {% widthratio wizard.steps.step1 wizard.steps.count 100 as progress %} +
+
+
+ {% block main %}{% endblock %} +
+ {% block screenside %} +
+
+
+
+ {% endblock %} +
+{% endblock %} + +{% block footer %}{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/candidature/wizard_form.html b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/wizard_form.html new file mode 100644 index 00000000..a1214620 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/candidature/wizard_form.html @@ -0,0 +1,41 @@ +{% extends "candidature/wizard_base.html" %} +{% load i18n crispy_forms_tags %} + +{% block main %} +
+ {% block before_form %} +
+

{{ step_title }}

+

{{ step_description }}

+
+ {% endblock %} +
+ {% csrf_token %} + {{ wizard.management_form }} + + {% block form_fields %} + {% if wizard.form.helper %} + {% crispy wizard.form wizard.form.helper %} + {% else %} + {{ wizard.form|crispy }} + {% endif %} + {% endblock %} + + {% block form_actions %} +
+ {% if wizard.steps.prev %} + + {% endif %} + {% if wizard.steps.next and not editing %} + + {% elif editing %} + + {% endif %} +
+ {% endblock %} + + {{ wizard.form.media }} +
+ {% block after_form %}{% endblock %} +
+{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/crispy/file_field.html b/app/org_eleicoes/votepeloclima/candidature/templates/crispy/file_field.html new file mode 100644 index 00000000..04837ac5 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/crispy/file_field.html @@ -0,0 +1,50 @@ +{% load crispy_forms_field %} + + + {% if field.label and form_show_labels %} + + {% endif %} + {% for widget in field.subwidgets %} + + {% if widget.data.is_initial and not widget.data.attrs.disabled %} +
+ {{ widget.data.initial_text }} +
+ + {{ field.value.name }} + + {% if not widget.data.required and not widget.data.attrs.disabled %} + + + + + + + {% endif %} +
+
+ {% endif %} + + {% if widget.data.attrs.disabled and field.value %} +
+ + {% if field.name == "photo" %} + + {% elif field.name == "video" %} + + {% endif %} + +
+ {% else %} + + + {% include 'bootstrap5/layout/help_text_and_errors.html' %} + + {% endif %} + {% endfor %} + diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/crispy/no_crispy_field.html b/app/org_eleicoes/votepeloclima/candidature/templates/crispy/no_crispy_field.html new file mode 100644 index 00000000..aaa59ded --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/crispy/no_crispy_field.html @@ -0,0 +1,14 @@ +{% load crispy_forms_tags %} +
+ <{% if field.use_fieldset %}legend{% else %}label{% endif %} + {% if field.id_for_label %}for="{{ field.id_for_label }}"{% endif %} class="{% if 'form-horizontal' in form_class %}col-form-label pt-0{% else %}form-label{% endif %}{% if label_class %} {{ label_class }}{% endif %}{% if field.field.required %} requiredField{% endif %}"> + {{ field.label }}{% if field.field.required %}*{% endif %} + + {{ field }} + {% if field.help_text %} + {{ field.help_text }} + {% endif %} + {% for error in field.errors %} +
{{ error }}
+ {% endfor %} +
\ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/button_input_option.html b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/button_input_option.html new file mode 100644 index 00000000..0db4cb2f --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/button_input_option.html @@ -0,0 +1,2 @@ + +{% if widget.wrap_label %}{% endif %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/button_input_select.html b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/button_input_select.html new file mode 100644 index 00000000..bc9bf512 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/button_input_select.html @@ -0,0 +1,5 @@ +{% with id=widget.attrs.id %}{% for group, options, index in widget.optgroups %}{% if group %} +
{% endif %}{% for option in options %}
+ {% include option.template_name with widget=option %}
{% endfor %}{% if group %} +
{% endif %}{% endfor %} +{% endwith %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/checkbox_select_multiple.html b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/checkbox_select_multiple.html new file mode 100644 index 00000000..a6ad9d5b --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/checkbox_select_multiple.html @@ -0,0 +1,13 @@ +{% for group, options, index in widget.optgroups %} + {% for option in options %} +
+ + +
+ {% endfor %} +{% endfor %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/inline_array.html b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/inline_array.html new file mode 100644 index 00000000..967232fe --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/inline_array.html @@ -0,0 +1,33 @@ +
+
    + {% for subwidget in widget.subwidgets %} + {% if subwidget.value or forloop.counter < 3 %} +
  1. +
    + {% if widget.item_label %} + {{widget.item_label}} + {% endif %} + + {% if not subwidget.attrs.disabled %} + + {% endif %} +
    +
  2. + {% endif %} + {% endfor %} +
+
+{% if not widget.attrs.disabled %} + +{% endif %} diff --git a/app/nossas/plugins/__init__.py b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/nop.html similarity index 100% rename from app/nossas/plugins/__init__.py rename to app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/nop.html diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/switch.html b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/switch.html new file mode 100644 index 00000000..73a75403 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/switch.html @@ -0,0 +1,7 @@ +
+ + +
\ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/textarea.html b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/textarea.html new file mode 100644 index 00000000..3f3bef34 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/textarea.html @@ -0,0 +1,5 @@ +
+{% if widget.label %}{% endif %} + +{% if widget.help_text %}
{{widget.help_text}}
{% endif %} +
\ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/toggle_button.html b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/toggle_button.html new file mode 100644 index 00000000..89c5318f --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templates/forms/widgets/toggle_button.html @@ -0,0 +1,7 @@ +
+ + +
\ No newline at end of file diff --git a/app/nossas/plugins/forms/__init__.py b/app/org_eleicoes/votepeloclima/candidature/templatetags/__init__.py similarity index 100% rename from app/nossas/plugins/forms/__init__.py rename to app/org_eleicoes/votepeloclima/candidature/templatetags/__init__.py diff --git a/app/org_eleicoes/votepeloclima/candidature/templatetags/social_media_tags.py b/app/org_eleicoes/votepeloclima/candidature/templatetags/social_media_tags.py new file mode 100644 index 00000000..cea84ea9 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templatetags/social_media_tags.py @@ -0,0 +1,48 @@ +import re +from django import template + +register = template.Library() + +pattern = re.compile( + r"(?:https?:\/\/)?(?:www\.)?(?:x|medium|facebook|linkedin\.com\/in|vimeo|instagram)(?:\.com\/)?(?:in\/)?@?([a-zA-Z0-9-_.]+)" +) + +def url_parse(value: str, social_media_type): + """Parse social media URL to standardize""" + urls = { + "x": "https://x.com/", + "instagram": "https://instagram.com/", + "facebook": "https://facebook.com/", + "linkedin": "https://linkedin.com/in/", + } + base_url = urls.get(social_media_type, None) + + result = re.search(pattern, value) + + if result: + result = result.group(1) + + if not result or not base_url: + if not value.startswith("http://") and not value.startswith("https://"): + value = "https://" + value + return value + + if result and base_url: + return f"{base_url}{result}" + + return value + + +@register.inclusion_tag("candidature/templatetags/social_media.html") +def render_social_media(url): + if url and "instagram" in url: + return {"url": url_parse(url, "instagram"), "kind": "instagram"} + elif url and "facebook" in url: + return {"url": url_parse(url, "facebook"), "kind": "facebook"} + elif url and "linkedin" in url: + return {"url": url_parse(url, "linkedin"), "kind": "linkedin"} + elif url and "x" in url: + return {"url": url_parse(url, "x"), "kind": "x"} + + + return {} diff --git a/app/org_eleicoes/votepeloclima/candidature/templatetags/social_share.py b/app/org_eleicoes/votepeloclima/candidature/templatetags/social_share.py new file mode 100644 index 00000000..23f9d349 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templatetags/social_share.py @@ -0,0 +1,32 @@ +from django import template +from urllib.parse import urlencode + +register = template.Library() + +@register.simple_tag +def share_url(base_url, slug, platform): + url = f"{base_url}/c/{slug}" + + if platform == 'whatsapp': + text = ("Oi! As eleições estão chegando e o futuro da nossa cidade depende do nosso voto. " + "Compartilho com você uma das candidaturas comprometidas na luta pelo meio ambiente e contra as ameaças climáticas. " + "Conheça as propostas na plataforma *Vote pelo Clima!*") + return f"https://wa.me/?text={urlencode({'text': text})}{url}" + + elif platform == 'twitter': + text = ("O clima mudou. A política precisa mudar. #VotePeloClima é a plataforma que reúne candidaturas de todo o Brasil " + "comprometidas com a pauta climática, eu sou uma delas! Acesse o perfil e conheça as propostas.") + return f"https://twitter.com/intent/tweet?url={url}&{urlencode({'text': text})}" + + elif platform == 'linkedin': + title = "O clima mudou. A política precisa mudar." + summary = ("#VotePeloClima é a plataforma que reúne candidaturas de todo o Brasil comprometidas com a pauta climática, " + "eu sou uma delas! Acesse o perfil e conheça as propostas.") + return f"https://www.linkedin.com/shareArticle?mini=true&url={url}&{urlencode({'title': title, 'summary': summary})}" + + elif platform == 'facebook': + quote = ("O clima mudou. A política precisa mudar. #VotePeloClima é a plataforma que reúne candidaturas de todo o Brasil " + "comprometidas com a pauta climática, eu sou uma delas! Acesse o perfil e conheça as propostas.") + return f"https://www.facebook.com/sharer/sharer.php?u={url}&{urlencode({'quote': quote})}" + + return url \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/templatetags/url_tags.py b/app/org_eleicoes/votepeloclima/candidature/templatetags/url_tags.py new file mode 100644 index 00000000..f11f2838 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/templatetags/url_tags.py @@ -0,0 +1,12 @@ +from django import template + +register = template.Library() + +@register.simple_tag(takes_context=True) +def url_replace(context, **kwargs): + query = context['request'].GET.copy() + for key in kwargs.keys(): + if key in query: + del(query[key]) + query.update(kwargs) + return query.urlencode() \ No newline at end of file diff --git a/app/nossas/plugins/migrations/__init__.py b/app/org_eleicoes/votepeloclima/candidature/tests/__init__.py similarity index 100% rename from app/nossas/plugins/migrations/__init__.py rename to app/org_eleicoes/votepeloclima/candidature/tests/__init__.py diff --git a/app/org_eleicoes/votepeloclima/candidature/tests/test_dashboard_view.py b/app/org_eleicoes/votepeloclima/candidature/tests/test_dashboard_view.py new file mode 100644 index 00000000..3a7736e8 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/tests/test_dashboard_view.py @@ -0,0 +1,59 @@ +import pytest + +from django.test import override_settings +from django.urls import path, reverse + +from model_bakery import baker + + +@pytest.fixture(autouse=True) +def setup_urls(): + from django.contrib.sites.models import Site + from contrib.ds.models import Theme + from org_eleicoes.votepeloclima.urls import urlpatterns, include + + site = Site.objects.get(id=1) + site.domain = "testserver" + site.save() + + Theme.objects.create(site=site, scss_json={"colors": {}}) + + urlpatterns = [ + path("oauth/", include(("contrib.oauth.urls", "oauth"))), + ] + urlpatterns + + with override_settings( + ROOT_URLCONF=type('DynamicUrlConf', (object,), {'urlpatterns': urlpatterns}), + DEBUG=True + ): + yield + + +@pytest.mark.django_db +def test_redirect_dashboard_when_not_logged(client): + response = client.get(reverse("dashboard")) + + assert response.status_code == 302 + assert response.url.startswith(reverse("oauth:login") + "?next=") + + +@pytest.mark.django_db +def test_get_dashboard_when_logged(client): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.choices import CandidatureFlowStatus + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow, Candidature + + user = User.objects.create_user(username="test@localhost", password="test123") + candidature = baker.make(Candidature, proposes=[], appointments=[]) + flow = baker.make(CandidatureFlow, candidature=candidature, user=user, status=CandidatureFlowStatus.submitted) + + assert flow.status == CandidatureFlowStatus.submitted + + client.login(username="test@localhost", password="test123") + response = client.post(reverse("dashboard"), data={"request_change": True}) + + assert response.status_code == 302 + assert CandidatureFlow.objects.first().status == CandidatureFlowStatus.editing + + + diff --git a/app/org_eleicoes/votepeloclima/candidature/tests/test_inline_array.py b/app/org_eleicoes/votepeloclima/candidature/tests/test_inline_array.py new file mode 100644 index 00000000..0708e353 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/tests/test_inline_array.py @@ -0,0 +1,24 @@ +from django import forms + +from cms.test_utils.testcases import CMSTestCase + +from ..fields import InlineArrayWidget, InlineArrayField + + +# Create your tests here. +class InlineArrayTestCase(CMSTestCase): + def test_inline_array_widget_render(self): + widget = InlineArrayWidget(widget=forms.URLInput, size=3) + name = 'social_media' + value = ["http://nosssas.com", "http://nosssas.org", "http://nosssas.net"] + html = widget.render(name, value) + + self.assertIn('http://nosssas.com', html) + self.assertIn('http://nosssas.org', html) + self.assertIn('http://nosssas.net', html) + + def test_inline_array_field_clean(self): + field = InlineArrayField(forms.URLField(), size=3, required=False) + value = ["http://nossas.com", "http://nossas.org", "http://nossas.net"] + cleaned_value = field.clean(value) + self.assertEqual(cleaned_value, value) diff --git a/app/org_eleicoes/votepeloclima/candidature/tests/test_views_checkout.py b/app/org_eleicoes/votepeloclima/candidature/tests/test_views_checkout.py new file mode 100644 index 00000000..5fe6235f --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/tests/test_views_checkout.py @@ -0,0 +1,128 @@ +import pytest +from collections import OrderedDict + +from formtools.wizard.views import StepsHelper, normalize_name + +from org_eleicoes.votepeloclima.candidature.views.base import CandidatureBaseView +from org_eleicoes.votepeloclima.candidature.forms import ( + ProfileForm, + AppointmentForm, + CheckoutForm, + register_form_list, +) + + +def test_add_form_title_context(mocker): + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), {"is_secure": lambda: False, "user": None}) + view.prefix = normalize_name(view.__class__.__name__) + view.steps = StepsHelper(view) + view.storage = type( + "SessionStorage", + (object,), + {"data": {}, "extra_data": {}, "current_step": "complemente-seu-perfil"}, + ) + + form = ProfileForm() + + with mocker.patch.object( + view, "get_form_list", return_value=OrderedDict(view.form_list) + ): + context = view.get_context_data(form) + + assert "step_title" in context + assert context["step_title"] == form.Meta.title + + +def test_add_form_description_context(mocker): + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), {"is_secure": lambda: False, "user": None}) + view.prefix = normalize_name(view.__class__.__name__) + view.steps = StepsHelper(view) + view.storage = type( + "SessionStorage", + (object,), + {"data": {}, "extra_data": {}, "current_step": "compromissos"}, + ) + + form = AppointmentForm() + + with mocker.patch.object( + view, "get_form_list", return_value=OrderedDict(view.form_list) + ): + context = view.get_context_data(form) + + assert "step_description" in context + assert context["step_description"] == form.Meta.description + + +@pytest.mark.django_db +def test_context_checkout_steps_with_forms_filleds_and_disabled(mocker): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + + user = User.objects.create(email="test@localhost", username="test@localhost") + instance = CandidatureFlow.objects.create(user=user) + + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), {"is_secure": lambda: False, "user": None}) + view.prefix = normalize_name(view.__class__.__name__) + view.steps = StepsHelper(view) + view.storage = type( + "SessionStorage", + (object,), + {"data": {}, "extra_data": {}, "current_step": "checkout"}, + ) + + with mocker.patch.object( + view, "get_current_user", return_value=user + ) and mocker.patch.object( + view, "get_form_list", return_value=OrderedDict(view.form_list) + ): + form = CheckoutForm() + context = view.get_context_data(form) + + assert len(context["checkout_steps"]) == len(register_form_list) - 2 + + for step in context["checkout_steps"]: + assert step["form"].instance == instance + assert step["form"].disabled == True + + +@pytest.mark.django_db +def test_flag_editing_when_process_step_next_is_checkout(mocker): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + from org_eleicoes.votepeloclima.candidature.forms import ProfileForm + + user = User.objects.create(email="test@localhost", username="test@localhost") + instance = CandidatureFlow.objects.create(user=user) + + view = CandidatureBaseView() + + extra_data = {} + view.storage = type( + "SessionStorage", + (object,), + { + "data": {}, + "extra_data": extra_data, + "current_step": "complemente-seu-perfil", + }, + ) + view.request = type("WSGIRequest", (object,), {"is_secure": lambda: False}) + + mocker.patch.object(view, "get_next_step", return_value="checkout") + + data = { + "candidature_base_view-current_step": "complemente-seu-perfil" + } + + form = ProfileForm(data=data) + + with mocker.patch.object( + view, "get_current_user", return_value=user + ): + view.process_step(form) + + assert extra_data.get("editing") == True diff --git a/app/org_eleicoes/votepeloclima/candidature/tests/test_views_methods.py b/app/org_eleicoes/votepeloclima/candidature/tests/test_views_methods.py new file mode 100644 index 00000000..20b84c8b --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/tests/test_views_methods.py @@ -0,0 +1,408 @@ +import pytest + +from collections import OrderedDict +from django.test import RequestFactory +from django.contrib.auth.models import AnonymousUser +from django.test import override_settings +from django.urls import path, include + +from org_eleicoes.votepeloclima.candidature.views.base import CandidatureBaseView +from org_eleicoes.votepeloclima.candidature.views.create import CreateUpdateCandidatureView + + +@pytest.fixture +def setup_oauth_urls(): + """Setup oauth apphook urls""" + from org_eleicoes.votepeloclima.urls import urlpatterns + + urlpatterns = [ + path("oauth/", include(("contrib.oauth.urls", "oauth"))), + ] + urlpatterns + + with override_settings( + ROOT_URLCONF=type('DynamicUrlConf', (object,), {'urlpatterns': urlpatterns}), + DEBUG=True + ): + yield + + +def test_base_view_form_list(): + from org_eleicoes.votepeloclima.candidature.forms import register_form_list + + assert CandidatureBaseView.form_list == register_form_list + + +def test_base_view_file_storage(): + from django.core.files.storage import default_storage + + assert CandidatureBaseView.file_storage == default_storage + + +def test_inherit_add_and_edit_base_view(): + assert issubclass(CreateUpdateCandidatureView, CandidatureBaseView) + + +def test_get_current_user_when_init_view(): + view = CandidatureBaseView() + with pytest.raises(NotImplementedError): + view.get_current_user() + + +@pytest.mark.django_db +def test_get_current_user_create(mocker): + view = CreateUpdateCandidatureView() + view.request = type("WSGIRequest", (object,), {"is_secure": lambda: False, "user": None}) + + spy_cleaned_data = mocker.spy(view, "get_cleaned_data_for_step") + + user = view.get_current_user() + spy_cleaned_data.assert_called_once_with("informacoes-pessoais") + + assert user is None + + +@pytest.mark.django_db +def test_get_current_user_create_with_email(mocker): + from django.contrib.auth.models import User + + view = CreateUpdateCandidatureView() + view.request = type("WSGIRequest", (object,), {"is_secure": lambda: False, "user": None}) + + email = "test@localhost" + user = User.objects.create(username=email, email=email) + + with mocker.patch.object( + view, + "get_cleaned_data_for_step", + return_value={"properties": {"email": user.email}}, + ): + assert view.get_current_user() == user + + +@pytest.mark.django_db +def test_get_instance_without_info(): + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), {"user": AnonymousUser()}) + view.storage = type("SessionStorage", (object,), {"data": {}}) + + assert view.instance is None + + +@pytest.mark.django_db +def test_get_instance_with_email(): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + + view = CandidatureBaseView() + email = "test@localhost" + user = User.objects.create(username=email, email=email) + flow = CandidatureFlow.objects.create(user=user) + data = { + "step_data": {"informacoes-pessoais": {"informacoes-pessoais-email": [email]}} + } + + view.request = type("WSGIRequest", (object,), {"user": AnonymousUser()}) + view.storage = type("SessionStorage", (object,), {"data": data}) + + assert view.instance == flow + + +@pytest.mark.django_db +def test_get_instance_with_email(): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + + view = CandidatureBaseView() + email = "test@localhost" + data = { + "step_data": {"informacoes-pessoais": {"informacoes-pessoais-email": [email]}} + } + + view.request = type("WSGIRequest", (object,), {"user": AnonymousUser()}) + view.storage = type("SessionStorage", (object,), {"data": data}) + + assert view.instance is None + + +@pytest.mark.django_db +def test_get_instance_with_request_user(): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + + view = CandidatureBaseView() + email = "test@localhost" + user = User.objects.create(username=email, email=email) + flow = CandidatureFlow.objects.create(user=user) + + view.request = type("WSGIRequest", (object,), {"user": user}) + + assert view.instance == flow + + +@pytest.mark.django_db +def test_remove_process_step_files(): + view = CandidatureBaseView() + + assert view.process_step_files("") is None + + +@pytest.mark.django_db +def test_create_user_when_process_step_infos(mocker, setup_oauth_urls): + import datetime + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.forms import PersonalForm + + initial_data = { + "legal_name": "Test Surname", + "ballot_name": "Test", + "birth_date": datetime.date(1992, 10, 12), + "email": "test@localhost", + "cpf": "123.456.789-01" + } + form = PersonalForm(data=initial_data) + + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), { + "user": AnonymousUser, + "is_secure": lambda: False + }) + + cleaned_data = { + "view_name-current_step": "informacoes-pessoais", + "informacoes-pessoais-email": "test@localhost", + "informacoes-pessoais-legal_name": "Test Surname" + } + + # + with mocker.patch.object( + view, "get_current_user", return_value=None + ) and mocker.patch.object( + view, "get_prefix", return_value="view_name" + ) and mocker.patch.object( + view, "get_form_step_data", return_value=cleaned_data + ) and mocker.patch.object( + view, "get_cleaned_data_for_step", return_value={} + ) and mocker.patch.object( + view, "get_form_list", return_value=OrderedDict(view.form_list) + ): + # Fake form response in get_form_step_data + view.process_step(form=form) + + user = User.objects.get(email="test@localhost") + + assert user.username == "test@localhost" + assert user.first_name == "Test" + assert user.last_name == "Surname" + assert user.is_active == False + + +@pytest.mark.django_db +def test_create_user_and_sendmail_when_is_new(mocker, setup_oauth_urls): + mocker.patch("org_eleicoes.votepeloclima.candidature.views.base.send_confirmation_email") + + import datetime + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.forms import PersonalForm + from org_eleicoes.votepeloclima.candidature.views.base import CandidatureBaseView, send_confirmation_email + + + initial_data = { + "legal_name": "Test Surname", + "ballot_name": "Test", + "birth_date": datetime.date(1992, 10, 12), + "email": "test@localhost", + "cpf": "123.456.789-01" + } + form = PersonalForm(data=initial_data) + + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), { + "is_secure": lambda: False + }) + + cleaned_data = { + "view_name-current_step": "informacoes-pessoais", + "informacoes-pessoais-email": "test@localhost", + "informacoes-pessoais-legal_name": "Test Surname" + } + + with mocker.patch.object( + view, "get_current_user", return_value=None + ) and mocker.patch.object( + view, "get_prefix", return_value="view_name" + ) and mocker.patch.object( + view, "get_form_step_data", return_value=cleaned_data + ) and mocker.patch.object( + view, "get_cleaned_data_for_step", return_value={} + ) and mocker.patch.object( + view, "get_form_list", return_value=OrderedDict(view.form_list) + ): + # Fake form response in get_form_step_data + view.process_step(form=form) + + send_confirmation_email.assert_called_once_with( + user=User.objects.get(email="test@localhost"), + request=view.request + ) + + +@pytest.mark.django_db +def test_upsert_instance_create_flow_personal_step(mocker): + import datetime + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.forms import PersonalForm + + user = User.objects.create(**{"username": "test@localhost", "email": "test@localhost"}) + current_step = "informacoes-pessoais" + + appoitments = {"appointment_1": True,"appointment_2": True} + initial_data = { + "legal_name": "Test Surname", + "ballot_name": "Test", + "birth_date": datetime.date(1992, 10, 12), + "email": "test@localhost", + "cpf": "123.456.789-01" + } + form = PersonalForm(data=initial_data) + + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), {"is_secure": lambda: False, "user": None}) + with mocker.patch.object( + view, "get_cleaned_data_for_step", return_value=appoitments + ): + + instance, created = view.upsert_instance(form, current_step, user) + + assert created == True + assert instance.properties == { + **appoitments, + **initial_data + } + + +@pytest.mark.django_db +def test_upsert_instance_update_flow_personal_step(mocker): + import datetime + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + from org_eleicoes.votepeloclima.candidature.forms import PersonalForm + + user = User.objects.create(**{"username": "test@localhost", "email": "test@localhost"}) + flow = CandidatureFlow.objects.create(user=user) + current_step = "informacoes-pessoais" + + appoitments = {"appointment_1": True,"appointment_2": True} + initial_data = { + "legal_name": "Test Surname", + "ballot_name": "Test", + "birth_date": datetime.date(1992, 10, 12), + "email": "test@localhost", + "cpf": "123.456.789-01" + } + form = PersonalForm(data=initial_data) + + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), {"is_secure": lambda: False, "user": None}) + with mocker.patch.object( + view, "get_cleaned_data_for_step", return_value=appoitments + ): + + instance, created = view.upsert_instance(form, current_step, user) + + assert created == False + assert instance.id == flow.id + assert instance.properties == initial_data + + +@pytest.mark.django_db +def test_call_upsert_instance_when_user(mocker): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.forms import ApplicationForm + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + + user = User.objects.create(username="test@localhost", email="test@localhost") + CandidatureFlow.objects.create(user=user) + + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), { + "is_secure": lambda: False + }) + + form_data = { + "candidature_base_view-current_step": "informacoes-de-candidatura" + } + initial_data = { + "number_id": 13, + "intended_position": "prefeitura", + "state": "11", + "city": "1101", + "political_party": "pt" + } + form = ApplicationForm(data=initial_data) + + upsert_instance_spy = mocker.spy(view, "upsert_instance") + + with mocker.patch.object( + view, "get_current_user", return_value=user + ) and mocker.patch.object( + view, "get_form_step_data", return_value=form_data + ) and mocker.patch.object( + view, "get_form_list", return_value=OrderedDict(view.form_list) + ): + view.process_step(form) + + upsert_instance_spy.assert_called_once_with( + form, "informacoes-de-candidatura", user + ) + + +@pytest.mark.django_db +def test_form_instance_none(): + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), { + "is_secure": lambda: False, + "user": None, + }) + + assert view.get_form_instance("step") is None + + +@pytest.mark.django_db +def test_form_instance_by_user(): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + + user = User.objects.create(username="test@localhost", email="test@localhost") + instance = CandidatureFlow.objects.create(user=user) + + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), { + "is_secure": lambda: False, + "user": user, + }) + + assert view.get_form_instance("step") == instance + + +@pytest.mark.django_db +def test_form_instance_by_storage(): + from django.contrib.auth.models import User + from org_eleicoes.votepeloclima.candidature.models import CandidatureFlow + + user = User.objects.create(username="test@localhost", email="test@localhost") + instance = CandidatureFlow.objects.create(user=user) + + view = CandidatureBaseView() + view.request = type("WSGIRequest", (object,), { + "is_secure": lambda: False, + "user": AnonymousUser(), + }) + view.storage = type("SessionStorage", (object,), {"data": { + "step_data": { + "informacoes-pessoais": { + "informacoes-pessoais-email": ["test@localhost"] + } + } + }}) + + assert view.get_form_instance("informacoes-pessoais") == instance \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/tests/test_views_requests.py b/app/org_eleicoes/votepeloclima/candidature/tests/test_views_requests.py new file mode 100644 index 00000000..a50c82c3 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/tests/test_views_requests.py @@ -0,0 +1,37 @@ +import pytest + +from django.test import override_settings +from django.urls import path, re_path, reverse + +from org_eleicoes.votepeloclima.candidature.views.base import CandidatureBaseView + + +@pytest.fixture(autouse=True) +def setup_view_urls(): + from django.contrib.sites.models import Site + from org_eleicoes.votepeloclima.urls import urlpatterns + + Site.objects.filter(id=1).update(domain="testserver") + + view = CandidatureBaseView.as_view( + url_name="step", + done_step_name="done" + ) + + urlpatterns = [ + re_path(r"^step/(?P.+)/$", view, name="step"), + path('step/', view, name="step_index"), + ] + urlpatterns + + with override_settings( + ROOT_URLCONF=type('DynamicUrlConf', (object,), {'urlpatterns': urlpatterns}), + DEBUG=True + ): + yield + + +@pytest.mark.django_db +def test_get_base_view_index_with_redirect(client): + response = client.get(reverse("step_index")) + + assert response.status_code == 302 \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/tests/tests_templatetags.py b/app/org_eleicoes/votepeloclima/candidature/tests/tests_templatetags.py new file mode 100644 index 00000000..69b5047e --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/tests/tests_templatetags.py @@ -0,0 +1,50 @@ +import pytest +from django.template import Context, Template + +from ..templatetags.social_media_tags import url_parse, render_social_media + +@pytest.mark.parametrize( + "input_url, social_media_type, expected", + [ + ("https://x.com/testuser", "x", "https://x.com/testuser"), + ("http://instagram.com/testuser", "instagram", "https://instagram.com/testuser"), + ("www.facebook.com/testuser", "facebook", "https://facebook.com/testuser"), + ("linkedin.com/in/testuser", "linkedin", "https://linkedin.com/in/testuser"), + ("https://medium.com/@testuser", "medium", "https://medium.com/@testuser"), + ("vimeo.com/testuser", "vimeo", "https://vimeo.com/testuser"), + ], +) +def test_url_parse(input_url, social_media_type, expected): + assert url_parse(input_url, social_media_type) == expected + +@pytest.mark.parametrize( + "input_url, expected_kind, expected_url", + [ + ("https://instagram.com/testuser", "instagram", "https://instagram.com/testuser"), + ("http://www.facebook.com/testuser", "facebook", "https://facebook.com/testuser"), + ("linkedin.com/in/testuser", "linkedin", "https://linkedin.com/in/testuser"), + ("https://x.com/testuser", "x", "https://x.com/testuser"), + ("http://www.instagram.com/testuser", "instagram", "https://instagram.com/testuser"), + ("https://unknown.com/testuser", None, None), + ], +) +def test_render_social_media(input_url, expected_kind, expected_url): + context = render_social_media(input_url) + assert context.get("kind") == expected_kind + assert context.get("url") == expected_url + + +def test_template_render_social_media(): + template = Template( + '{% load social_media_tags %}{% render_social_media url %}' + ) + + context = Context({"url": "linkedin.com/in/testuser"}) + rendered = template.render(context) + + assert 'https://linkedin.com/in/testuser' in rendered + + context = Context({"url": "instagram.com/testuser"}) + rendered = template.render(context) + + assert 'https://instagram.com/testuser' in rendered diff --git a/app/org_eleicoes/votepeloclima/candidature/views/__init__.py b/app/org_eleicoes/votepeloclima/candidature/views/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/views/__init__.py @@ -0,0 +1 @@ + diff --git a/app/org_eleicoes/votepeloclima/candidature/views/base.py b/app/org_eleicoes/votepeloclima/candidature/views/base.py new file mode 100644 index 00000000..b8d23741 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/views/base.py @@ -0,0 +1,247 @@ +import hashlib + +from django.core.files.storage import default_storage +from django.contrib.auth.models import User, AnonymousUser +from django.db.utils import IntegrityError +from django.core.exceptions import ObjectDoesNotExist +from django.http import Http404 +from django.urls import reverse + +from formtools.wizard.views import NamedUrlSessionWizardView +from contrib.oauth.utils import send_mail +from contrib.oauth.models import Token + +from ..choices import CandidatureFlowStatus +from ..models import CandidatureFlow +from ..forms.register import register_form_list + + +def files_is_equal(file1, file2): + hash1_sha256 = hashlib.sha256() + for block in iter(lambda: file1.read(4096), b""): + hash1_sha256.update(block) + + hash2_sha256 = hashlib.sha256() + for block in iter(lambda: file2.read(4096), b""): + hash2_sha256.update(block) + + return hash1_sha256.hexdigest() == hash2_sha256.hexdigest() + + +class CandidatureBaseView(NamedUrlSessionWizardView): + form_list = register_form_list + file_storage = default_storage + template_name = "candidature/wizard_form.html" + steps_not_editable = ("informacoes-pessoais", "informacoes-de-candidatura") + + _instance = None + + def get_instance(self): + if not self._instance and isinstance(self.request.user, AnonymousUser): + step_name = "informacoes-pessoais" + email = ( + self.storage.data.get("step_data", {}) + .get(step_name, {}) + .get(f"{step_name}-email", [None])[0] + ) + try: + user = User.objects.get(email=email) + self._instance = user.candidatureflow + except User.DoesNotExist: + pass + except ObjectDoesNotExist: + pass + + elif isinstance(self.request.user, User): + self._instance = self.request.user.candidatureflow + + return self._instance + + instance = property(get_instance) + + def render_done(self, form, **kwargs): + """Válida o captcha respondido na primeira etapa do formulário""" + revalid = True + return super().render_done(form, **kwargs) + + def get_current_user(self): + raise NotImplementedError("Should be implement get_current_user") + + def save_obj(self, instance, form): + if form.is_valid(): + for field, value in form.cleaned_data.items(): + if field == "properties": + instance.properties.update(value) + elif field not in ("photo", "video"): + setattr(instance, field, value) + else: + instance_field = getattr(instance, field) + if not instance_field: + setattr(instance, field, value) + elif not files_is_equal(instance_field.file, value.file): + # Remove old files + instance_field.delete() + setattr(instance, field, value) + + instance.save() + + return instance + + def upsert_instance(self, form, current_step, user): + instance, created = CandidatureFlow.objects.get_or_create(user=user) + + if created: + for step, FormClass in register_form_list[1:]: + if step == current_step: + break + + data = self.get_cleaned_data_for_step(step) + if "properties" in data: + data.update(data.get("properties")) + + instance = self.save_obj(instance, form=FormClass(data=data)) + + self.save_obj(instance, form) + + return instance, created + + def process_step_files(self, form): + # Save file method on save_obj in model + return None + + def process_step(self, form): + form_data = super().process_step(form) + current_step = form_data[f"{self.get_prefix(self.request)}-current_step"] + user = self.get_current_user() + + if current_step == "informacoes-pessoais" and not user: + email = form_data[current_step + "-email"] + name = form_data[current_step + "-legal_name"] + + values = { + "username": email, + "email": email, + "first_name": name.split(" ")[0], + "last_name": " ".join(name.split(" ")[1:]), + } + + user, created = User.objects.get_or_create(**values) + + if created: + user.is_active = False + user.save() + + Token.objects.create(user=user) + + send_mail( + user=user, + request=self.request, + email_template_name="candidature/emails/register_incomplete.html", + subject_template_name="candidature/emails/register_incomplete_subject.txt" + ) + + if user: + self.upsert_instance(form, current_step, user) + + if self.get_next_step(step=current_step) == "checkout": + self.storage.extra_data["editing"] = True + + return form_data + + def get_form_instance(self, step): + return self.instance + + def get_template_names(self): + if self.steps.current == "checkout": + return "candidature/checkout.html" + elif self.steps.current == "suas-propostas": + return "candidature/suas_propostas.html" + elif self.steps.current == "captcha": + return "candidature/captcha.html" + elif self.steps.current == "informacoes-pessoais": + return "candidature/informacoes_pessoais.html" + elif self.steps.current == "compromissos": + return "candidature/compromissos.html" + return super().get_template_names() + + def get_context_data(self, form, **kwargs): + context = super().get_context_data(form, **kwargs) + instance = self.instance + + if hasattr(form.Meta, "title"): + context.update({"step_title": form.Meta.title}) + + if hasattr(form.Meta, "description"): + context.update({"step_description": form.Meta.description}) + + if self.steps.next: + next_form_class = self.get_form_list().get(self.steps.next) + if hasattr(next_form_class.Meta, "title"): + context.update({"next_step_title": next_form_class.Meta.title}) + + if instance and instance.status == "editing": + context.update({"editing": True}) + + checkout_steps = [] + if self.steps.current == "checkout": + user = self.get_current_user() + instance = CandidatureFlow.objects.get(user=user) + + for step, form_class in self.get_form_list().items(): + if step not in ["captcha", "compromissos"]: + edit_url = reverse("register_step", kwargs={"step": step}) + editable = instance.status == CandidatureFlowStatus.draft or ( + instance.status == CandidatureFlowStatus.editing + and step + not in self.steps_not_editable + ) + checkout_steps.append( + dict( + name=step, + title=getattr(form_class.Meta, "title"), + edit_url=edit_url if editable else None, + form=form_class(disabled=True, instance=instance), + ) + ) + context.update({"checkout_steps": checkout_steps}) + + return context + + def dispatch(self, request, *args, **kwargs): + response = super().dispatch(request, *args, **kwargs) + + if request.user.is_authenticated and request.user.is_staff: + raise Http404("Staff users isn't permissions to create Candidature") + + + if isinstance(request.user, User): + try: + instance = CandidatureFlow.objects.get(user=request.user) + if instance.status == CandidatureFlowStatus.editing and self.storage.current_step in self.steps_not_editable: + raise Http404() + except CandidatureFlow.DoesNotExist: + pass + + return response + + def post(self, *args, **kwargs): + request = self.request + try: + if "wizard_goto_last" in request.POST: + form = self.get_form(data=request.POST, files=request.FILES) + + if form.is_valid(): + self.storage.set_step_data(self.steps.current, self.process_step(form)) + self.storage.set_step_files( + self.steps.current, self.process_step_files(form) + ) + # Move to last step + self.storage.current_step = self.steps.all[-1] + return self.render(self.get_form()) + + return super().post(*args, **kwargs) + except IntegrityError: + # Evita problemas com e-mails duplicados + form = self.get_form(data=request.POST, files=request.FILES) + form.add_error("email", "Esse e-mail já possui um cadastro em andamento, por favor, cadastre uma senha e/ou faça login.") + return self.render(form) diff --git a/app/org_eleicoes/votepeloclima/candidature/views/create.py b/app/org_eleicoes/votepeloclima/candidature/views/create.py new file mode 100644 index 00000000..23d26a02 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/views/create.py @@ -0,0 +1,70 @@ +from collections import OrderedDict +from django.contrib.auth.models import User +from django.shortcuts import render + +from contrib.oauth.utils import send_mail + +from .base import CandidatureBaseView +from ..choices import CandidatureFlowStatus +from ..models import CandidatureFlow + + +class CreateUpdateCandidatureView(CandidatureBaseView): + + def get_current_user(self): + data = self.get_cleaned_data_for_step("informacoes-pessoais") + user = self.request.user if isinstance(self.request.user, User) else None + + if data and not user: + return User.objects.get(email=data["properties"]["email"]) + + return user + + def render_done(self, form, **kwargs): + """ + This method gets called when all forms passed. The method should also + re-validate all steps to prevent manipulation. If any form fails to + validate, `render_revalidation_failure` should get called. + If everything is fine call `done`. + """ + + if isinstance(self.request.user, User): + final_forms = OrderedDict() + # walk through the form list and try to validate the data again. + for step_name, form_class in self.get_form_list().items(): + instance = CandidatureFlow.objects.get(user=self.request.user) + form_obj = form_class(instance=instance, data=instance.properties) + + if not form_obj.is_valid() and step_name != "captcha": # Revalidation only draft + return self.render_revalidation_failure(step_name, form_obj, **kwargs) + final_forms[step_name] = form_obj + + # render the done view and reset the wizard before returning the + # response. This is needed to prevent from rendering done with the + # same data twice. + done_response = self.done(list(final_forms.values()), form_dict=final_forms, **kwargs) + self.storage.reset() + return done_response + + return super().render_done(form, **kwargs) + + def done(self, form_list, form_dict, **kwargs): + user = self.get_current_user() + flow = CandidatureFlow.objects.get(user=user) + + if flow.status == "draft": + flow.status = CandidatureFlowStatus.submitted + flow.save() + + # Envia e-mail para cadastro enviado pela primeira vez + send_mail( + user=user, + request=self.request, + email_template_name="candidature/emails/register_done.html", + subject_template_name="candidature/emails/register_done_subject.txt" + ) + else: + flow.status = CandidatureFlowStatus.submitted + flow.save() + + return render(self.request, "candidature/submitted.html") \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/candidature/views/filters.py b/app/org_eleicoes/votepeloclima/candidature/views/filters.py new file mode 100644 index 00000000..a3c043d4 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/views/filters.py @@ -0,0 +1,101 @@ +from django.db.models import Q +from django.views.generic import ListView + +from ..models import CandidatureFlowStatus, Candidature +from ..forms.filters import FilterFactoryForm +from ..choices import ElectionStatus + + +class CandidatureSearchView(ListView): + model = Candidature + template_name = "candidature/candidature_search.html" + context_object_name = "candidatures" + paginate_by = 12 + + search_filter_fields = [ + "legal_name", + "ballot_name", + "proposes", + "milestones", + "short_description", + ] + unique_filter_fields = ["political_party", "state", "city", "intended_position"] + multiple_filter_fields = ["gender", "color", "proposes", "sexuality"] + + def get_queryset(self): + queryset = super().get_queryset() + + # Retorna apenas Candidaturas que já tiveram status valido em algum momento do preenchimento + queryset = queryset.filter( + candidatureflow__status__in=[ + CandidatureFlowStatus.is_valid, + CandidatureFlowStatus.editing, + ] + ) + + # Filtra por valores selecionado pelo usuário + form = FilterFactoryForm(data=self.request.GET or None) + + if form.is_valid(): + cleaned_data = form.cleaned_data + + # Filtros AND + for field_name in self.unique_filter_fields: + value = cleaned_data.get(field_name) + if value: + queryset = queryset.filter(**{field_name: value}) + + # Filters OR with Text search ICONTAINS + query = Q() + for field_name in self.search_filter_fields: + value = cleaned_data.get("keyword") + if value: + query |= Q(**{f"{field_name}__icontains": value}) + + queryset = queryset.filter(query) + + self.multiple_filter_fields + + # Filters OR with Multiple Choice + for field_name in self.multiple_filter_fields: + query = Q() + values = cleaned_data.get(field_name) + for value in values: + if field_name == "proposes": + query |= ~Q(**{f"{field_name}__{value}__exact": ""}) + else: + query |= Q(**{f"{field_name}__exact": value}) + + # Filter is concatenate with AND by field multiple value + queryset = queryset.filter(query) + + # Filtra apenas mandato coletivo + mandate_type = self.request.GET.get("mandate_type") + if mandate_type: + queryset = queryset.filter( + is_collective_mandate=( + True if mandate_type == "coletivo" else False + ) + ) + + election_status = cleaned_data.get("election_status", "second_round") + else: + election_status = "second_round" + + # Filtra com base no status da eleição + if election_status == "second_round": + # Filtra candidaturas que foram para o 2º turno + queryset = queryset.filter(election_results__status=ElectionStatus.segundo_turno) + elif election_status == "elected": + # Filtra candidaturas eleitas + queryset = queryset.filter(election_results__status=ElectionStatus.eleita) + + return queryset + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + form = FilterFactoryForm(data=self.request.GET or None) + context.update({"form": form}) + + return context diff --git a/app/org_eleicoes/votepeloclima/candidature/views/oauth.py b/app/org_eleicoes/votepeloclima/candidature/views/oauth.py new file mode 100644 index 00000000..bbc63ee0 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/views/oauth.py @@ -0,0 +1,187 @@ +import json + +from datetime import datetime +from functools import reduce +from collections import OrderedDict +# from typing import TypedDict + +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import TemplateView, View +from django.views.decorators.csrf import csrf_exempt +from django.http.response import JsonResponse +from django.shortcuts import redirect +from django.urls import reverse_lazy, reverse +from django.utils.decorators import method_decorator + +from contrib.oauth.utils import send_mail +from contrib.oauth.mixins import JsonLoginRequiredMixin + +from ..choices import CandidatureFlowStatus +from ..models import CandidatureFlow, Candidature +from ..forms.register import register_form_list, ProposeForm, AppointmentForm + +disable_edit_steps = [ + "informacoes-pessoais", + "informacoes-de-candidatura", + "captcha", + "compromissos", +] + + +class DashboardView(LoginRequiredMixin, TemplateView): + template_name = "candidature/dashboard.html" + login_url = reverse_lazy("oauth:login") + steps_hide_on_checkout = ("captcha", "checkout", "compromissos") + + def get_checkout_steps(self): + checkout_steps = [] + + for step_name, form_class in register_form_list: + if step_name not in self.steps_hide_on_checkout: + obj = CandidatureFlow.objects.get(user=self.request.user) + form = form_class(instance=obj, data=obj.properties, disabled=True) + step_dict = dict( + name=step_name, + form=form, + is_valid=form.is_valid(), + ) + + checkout_steps.append(step_dict) + + return checkout_steps + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + if not self.request.user.is_staff: + flow = self.request.user.candidatureflow + checkout_steps = self.get_checkout_steps() + is_valid = reduce( + lambda x, y: x and y, + list(map(lambda x: x.get("is_valid"), checkout_steps)), + ) + + is_public = flow.status in [CandidatureFlowStatus.is_valid, CandidatureFlowStatus.editing] and flow.candidature + + context.update( + { + "flow": flow, + "checkout_steps": checkout_steps, + "checkout_is_valid": is_valid, + "is_public": is_public, + "candidature": flow.candidature if is_public else None, + } + ) + + return context + + def post(self, request, *args, **kwargs): + if "request_change" in request.POST: + flow = request.user.candidatureflow + flow.status = CandidatureFlowStatus.editing + flow.save() + + return redirect(reverse("register_step", kwargs={"step": "checkout"})) + + return super().post(request, *args, **kwargs) + + +# Validation = TypedDict("Validation", { +# "status": str, +# "slug": str, +# "name": str, +# "content": str | None +# }) + + +@method_decorator(csrf_exempt, name="dispatch") +class UpdateCandidatureStatusView(JsonLoginRequiredMixin, View): + + def post(self, request, *args, **kwargs): + validation = json.loads(request.body) + instance = CandidatureFlow.objects.get(user=request.user) + instance.validations = instance.validations or {} + + if instance.status == "submitted" and validation.get("status") == "validating": + instance.validations.update({ + validation.get("slug"): { + "date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "content": validation.get("content"), + "name": validation.get("name"), + "status": CandidatureFlowStatus.is_valid + } + }) + + instance.save() + elif instance.status == "submitted" and validation.get("status") == CandidatureFlowStatus.invalid: + instance.validations.update({ + validation.get("slug"): { + "date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "content": validation.get("content"), + "name": validation.get("name"), + "status": CandidatureFlowStatus.invalid + } + }) + + instance.status = CandidatureFlowStatus.invalid + instance.save() + + # Perfil Reprovado envia e-mail + send_mail( + user=request.user, + request=request, + email_template_name="candidature/emails/register_done.html", + subject_template_name="candidature/emails/register_done_subject.txt" + ) + + return JsonResponse({"message": "fail"}, status=200) + elif instance.status == "submitted" and validation.get("status") == CandidatureFlowStatus.is_valid: + instance.validations.update({ + validation.get("slug"): { + "date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "content": validation.get("content"), + "name": validation.get("name"), + "status": CandidatureFlowStatus.is_valid + } + }) + + instance.status = CandidatureFlowStatus.is_valid + + values = {} + for step, form_class in OrderedDict(register_form_list).items(): + if step not in ("captcha", "checkout"): + form = form_class( + instance=CandidatureFlow.objects.get(user=request.user), + data=instance.properties, + ) + if form.is_valid(): + if isinstance(form, ProposeForm): + # TODO: Mudar depois de mergear para proposes + values.update( + {"proposes": form.cleaned_data.get("properties")} + ) + elif isinstance(form, AppointmentForm): + values.update( + {"appointments": form.cleaned_data.get("properties")} + ) + else: + cleaned = form.cleaned_data.copy() + properties = cleaned.pop("properties", {}) + values.update({**properties, **cleaned}) + + if instance.candidature: + Candidature.objects.filter(id=instance.candidature.id).update(**values) + else: + instance.candidature = Candidature.objects.create(**values) + + instance.save() + + # Perfil Aprovado envia e-mail + send_mail( + user=request.user, + request=request, + email_template_name="candidature/emails/register_approved.html", + subject_template_name="candidature/emails/register_approved_subject.txt" + ) + + return JsonResponse({"message": "success"}, status=200) diff --git a/app/org_eleicoes/votepeloclima/candidature/views/public.py b/app/org_eleicoes/votepeloclima/candidature/views/public.py new file mode 100644 index 00000000..1e6d8333 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/candidature/views/public.py @@ -0,0 +1,32 @@ +from django.http import JsonResponse +from django.views import View +from django.views.generic.detail import DetailView + +from ..models import CandidatureFlowStatus, Candidature +from ..locations_utils import get_choices + + +class AddressView(View): + + def get(self, request, *args, **kwargs): + state = request.GET.get("state") + cities = get_choices(state) + return JsonResponse( + [{"code": code, "name": name} for code, name in cities], safe=False + ) + + +class PublicCandidatureView(DetailView): + model = Candidature + template_name = "candidature/candidate_profile.html" + + def get_queryset(self): + qs = super().get_queryset() + # Retorna apenas Candidaturas que já tiveram status valido em algum momento do preenchimento + qs = qs.filter( + candidatureflow__status__in=[ + CandidatureFlowStatus.is_valid, + CandidatureFlowStatus.editing, + ] + ) + return qs diff --git a/app/org_eleicoes/votepeloclima/settings/__init__.py b/app/org_eleicoes/votepeloclima/settings/__init__.py new file mode 100644 index 00000000..773cfc46 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/settings/__init__.py @@ -0,0 +1 @@ +from .base import * \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/settings/base.py b/app/org_eleicoes/votepeloclima/settings/base.py new file mode 100644 index 00000000..954ccfd3 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/settings/base.py @@ -0,0 +1,206 @@ +from pathlib import Path +from django.urls import reverse_lazy +from project.settings import * + + +# Root folder to this site +SITE_DIR = Path(__file__).resolve().parent.parent + +# Databases + +DEFAULT_DB_SQLITE = BASE_DIR / "votepeloclima.sqlite3" + +DATABASES.update( + { + "default": env.db_url("CMS_DATABASE_URL", f"sqlite:///{DEFAULT_DB_SQLITE}"), + } +) + +# Installed apps + +INSTALLED_APPS = [ + # "admin_styled", + # "tailwind", + # Override third apps templates + "contrib.ds.admin_style", + "djangocms_admin_style", + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + # http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development + "whitenoise.runserver_nostatic", + "django.contrib.staticfiles", + "django.contrib.sites", + # + "adminsortable2", + # Django CMS + "cms", + "menus", + "treebeard", + "sekizai", + # Django Filer - optional, but used in most projects + "filer", + "easy_thumbnails", + # some content plugins - optional, but used in most projects + "djangocms_picture", + "djangocms_text_ckeditor", + "djangocms_video", + "djangocms_snippet", + # Third apps + "colorfield", + "compressor", + "captcha", + "django_select2", + "django_jsonform", + "djangocms_form_builder", + "formtools", + "crispy_forms", + "crispy_bootstrap5", + "bootstrap_datepicker_plus", + # My Apps + "contrib.bonde", + "contrib.ga", + + "contrib.ds", + "contrib.ds.accordion", + "contrib.ds.blocks", + "contrib.ds.card", + "contrib.ds.carousel", + "contrib.ds.counter", + "contrib.ds.grid", + "contrib.ds.link", + "contrib.ds.picture", + "contrib.ds.tooltip", + # Project Apps + "contrib.partners", + "contrib.oauth", + "org_eleicoes.votepeloclima", + "org_eleicoes.votepeloclima.candidature", +] + +MIDDLEWARE = [ + # "django_prometheus.middleware.PrometheusBeforeMiddleware", + # + "django.middleware.security.SecurityMiddleware", + "project.middleware.WwwRedirectMiddleware", + "project.middleware.DomainRedirectMiddleware", + "whitenoise.middleware.WhiteNoiseMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", + "contrib.bonde.middleware.SiteMiddleware", + "cms.middleware.user.CurrentUserMiddleware", + "cms.middleware.page.CurrentPageMiddleware", + "cms.middleware.toolbar.ToolbarMiddleware", + "cms.middleware.language.LanguageCookieMiddleware", + "contrib.oauth.middleware.NoDjangoAdminForEndUserMiddleware", + "contrib.oauth.middleware.TokenAuthMiddleware", + # + # "django_prometheus.middleware.PrometheusAfterMiddleware", +] + +# URLs + +ROOT_URLCONF = "org_eleicoes.votepeloclima.urls" + + +AUTHENTICATION_BACKENDS = [ + 'contrib.oauth.backends.OAuthBackend', + 'django.contrib.auth.backends.ModelBackend', + ] + AUTHENTICATION_BACKENDS + +# Static files + +STATICFILES_FINDERS += [ + # + "compressor.finders.CompressorFinder", +] + +COMPRESS_PRECOMPILERS = (("text/x-scss", "django_libsass.SassCompiler"),) + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.template.context_processors.i18n", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + "sekizai.context_processors.sekizai", + "contrib.ga.context_processors.ga", + "django.template.context_processors.request", + ], + }, + }, +] + +# DjangoCMS +# Configurações inicials + +CMS_TEMPLATES = [ + ("votepeloclima/base.html", "Vote pelo Clima"), + ("ds/base.html", "[DS] Padrão"), + ("ds/base_navbar_footer.html", "[DS] Navbar + Footer"), + # ("ga/base.html", "Base Google Analytics"), +] + +CMS_PLACEHOLDER_CONF = {} + +DJANGOCMS_PICTURE_RESPONSIVE_IMAGES = True + +# DjangoCMS Form Builder Submodule + +DJANGOCMS_FORMS_REQUIRED_CSS_CLASS = "required" + +DJANGOCMS_FORMS_FORM_PLUGIN_CHILD_CLASSES = [ + "BlockPlugin", + "ButtonPlugin", +] + +# CKEDITOR_SETTINGS = { +# **CKEDITOR_SETTINGS, +# "colorButton_colors": "0F5427,20A54B,D8952A,F0A42B,C32C18,EA4F83,1D3D90,080808,222222,555555,F5F4F0,FFFFFF", +# } + +DEFAULT_FROM_EMAIL = env("DEFAULT_FROM_EMAIL", default="Vote pelo Clima ") + +EMAIL_HOST = env("SMTP_HOST", default="localhost") + +EMAIL_PORT = env("SMTP_PORT", default=1025) + +EMAIL_HOST_USER = env("SMTP_USER", default="") + +EMAIL_HOST_PASSWORD = env("SMTP_PASS", default="") + +EMAIL_USE_TLS = env("SMTP_USE_TLS", default=False) + +EMAIL_USE_SSL = env("SMTP_USE_SSL", default=False) + +# Django Crispy Forms + +CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" + +CRISPY_TEMPLATE_PACK = "bootstrap5" + +# Oauth App +OAUTH_REDIRECT_LOGIN_URL = reverse_lazy("dashboard") + +# Domain Redirect Settings +REDIRECT_MIDDLEWARE_ROOT_DOMAIN = env("REDIRECT_MIDDLEWARE_ROOT_DOMAIN", default="localhost") + +REDIRECT_MIDDLEWARE_LIST_DOMAIN = env.list("REDIRECT_MIDDLEWARE_LIST_DOMAIN", default=["localhost.dev","localhost.devel"]) + +THUMBNAIL_ALIASES = { + '': { + "profile-photo": {"size": (1080, 1350), "crop": True}, + }, +} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/settings/production.py b/app/org_eleicoes/votepeloclima/settings/production.py new file mode 100644 index 00000000..6af4a51e --- /dev/null +++ b/app/org_eleicoes/votepeloclima/settings/production.py @@ -0,0 +1,49 @@ +from .base import * + +import ast + +ADMINS = env("ADMINS", default="('Admin', 'admin@localhost'),") + +ADMINS = ast.literal_eval(f"[{ADMINS}]") + +SERVER_EMAIL = env("SERVER_EMAIL", default="no-reply@nossas.org") + +INSTALLED_APPS += [ + "storages", +] + +# Storages + +AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID") + +AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY") + +AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME", default="votepeloclima") + +AWS_S3_ENDPOINT_URL = env("AWS_S3_ENDPOINT_URL", default=None) + +AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME", default="us-east-1") + +# +AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com" + +# +PUBLIC_MEDIA_LOCATION = "media" + +MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/{PUBLIC_MEDIA_LOCATION}/" + +DEFAULT_FILE_STORAGE = "project.storages.PublicMediaStorage" + +THUMBNAIL_DEFAULT_STORAGE = DEFAULT_FILE_STORAGE + +if not DEBUG: + + PUBLIC_STATIC_LOCATION = "static" + + STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/{PUBLIC_STATIC_LOCATION}/" + + STATICFILES_STORAGE = 'project.storages.PublicStaticStorage' + + COMPRESS_STORAGE = STATICFILES_STORAGE + + COMPRESS_URL = STATIC_URL diff --git a/app/org_eleicoes/votepeloclima/settings/test.py b/app/org_eleicoes/votepeloclima/settings/test.py new file mode 100644 index 00000000..13f9df8a --- /dev/null +++ b/app/org_eleicoes/votepeloclima/settings/test.py @@ -0,0 +1,10 @@ +from .base import * + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": ":memory:", + } +} + +EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend" \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/static/imgs/bg-steps.svg b/app/org_eleicoes/votepeloclima/static/imgs/bg-steps.svg new file mode 100644 index 00000000..d2e15790 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/static/imgs/bg-steps.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/org_eleicoes/votepeloclima/static/imgs/logo-clima-de-eleicao.png b/app/org_eleicoes/votepeloclima/static/imgs/logo-clima-de-eleicao.png new file mode 100644 index 00000000..817857a2 Binary files /dev/null and b/app/org_eleicoes/votepeloclima/static/imgs/logo-clima-de-eleicao.png differ diff --git a/app/org_eleicoes/votepeloclima/static/imgs/logo-footer.svg b/app/org_eleicoes/votepeloclima/static/imgs/logo-footer.svg new file mode 100644 index 00000000..1c66abaa --- /dev/null +++ b/app/org_eleicoes/votepeloclima/static/imgs/logo-footer.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/org_eleicoes/votepeloclima/static/imgs/logo-nossas.png b/app/org_eleicoes/votepeloclima/static/imgs/logo-nossas.png new file mode 100644 index 00000000..90f2ad6c Binary files /dev/null and b/app/org_eleicoes/votepeloclima/static/imgs/logo-nossas.png differ diff --git a/app/org_eleicoes/votepeloclima/static/js/toggle_password.js b/app/org_eleicoes/votepeloclima/static/js/toggle_password.js new file mode 100644 index 00000000..6f067fe6 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/static/js/toggle_password.js @@ -0,0 +1,14 @@ +document.getElementById('togglePassword').addEventListener('click', function () { + var passwordInput = document.getElementById('id_password'); + var toggleIcon = document.getElementById('toggleIcon'); + + if (passwordInput.type === 'password') { + passwordInput.type = 'text'; + toggleIcon.classList.remove('bi-eye-slash'); + toggleIcon.classList.add('bi-eye'); + } else { + passwordInput.type = 'password'; + toggleIcon.classList.remove('bi-eye'); + toggleIcon.classList.add('bi-eye-slash'); + } +}); diff --git a/app/org_eleicoes/votepeloclima/static/scss/custom.scss b/app/org_eleicoes/votepeloclima/static/scss/custom.scss new file mode 100644 index 00000000..475f01c1 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/static/scss/custom.scss @@ -0,0 +1,272 @@ +// +h1 { + font-size: 48px; +} + +h2 { + font-size: 40px; +} + +h3 { + font-size: 32px; +} + +// Subtitles +h4 { + font-size: 24px; +} + +h5 { + font-size: 20px; +} + +h6 { + font-size: 18px; +} + +.fw-bold { + font-weight: 900 !important; +} + +.fw-semibold { + font-weight: 700 !important; +} + +.fw-normal { + font-weight: 400 !important; +} + +.fw-light { + font-weight: 200 !important; +} + +.form-control, .form-control:focus, .form-select { + background-color: white; +} + +.asteriskField { + margin-left: 3px; + color: var(--bs-danger); +} + +.form-check-input:checked { + background-color: var(--bs-secondary); + border: none; +} + +legend.form-label { + font-size: 18px; + font-weight: bold; +} + +#inline-array { + ol { + li { + span.text-nowrap { + font-size: 14px; + } + } + } +} + +#accordionCheckoutSteps { + .accordion-item { + margin-bottom: 20px; + border-top: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); + border-right: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); + border-bottom: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); + border-left: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); + + border-top-left-radius: 10px; + border-bottom-left-radius: 10px; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + + .accordion-button { + border-radius: 10px; + } + + .accordion-button:not(.collapsed) { + box-shadow: none; + } + } + + .accordion-item:not(:first-of-type) { + border-top: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); + } +} + +// Custom select2 +.select2-container { + .select2-selection--single { + height: 36px !important; + padding: 4px 0; + } +} + +.select2-container--default { + .select2-selection--single { + border-color: var(--bs-border-color) !important; + + .select2-selection__placeholder { + color: #000 !important; + } + + .select2-selection__arrow { + top: 5px !important; + right: 7px !important; + } + } +} + +// Create new class +.toogle-button { + + .btn { + padding-top: 14px; + padding-bottom: 14px; + } + + .btn-check:checked + .btn { + border-color: var(--bs-btn-active-border-color)!important; + } +} + +#dropzone { + > div:not(:last-child) { + border-bottom: 1px solid var(--bs-gray-400); + padding-bottom: 25px; + } +} + +.form-switch { + label { + cursor: pointer; + + .form-text { + margin-left: -36px; + } + } + + input:not([disabled]) + label { + &:hover { + color: var(--bs-secondary); + + .form-text { + color: var(--bs-secondary); + } + } + } +} + +// Cadastro +.candidate-signup { + padding: 0 72px; +} + +@media (max-width: 992px) { + .candidate-signup { + padding: 0 20px; + + h2 { + font-size: 28px; + } + } +} + +.btn-inline-delete { + padding: 6px 12px; +} + +// Login e Recuperar +.candidate-login, +.candidate-reset-password { + padding: 0 72px; +} + +@media (max-width: 992px) { + .candidate-login, + .candidate-reset-password { + padding: 0 20px; + + h2 { + font-size: 40px; + } + } +} + +// Dashboard +@media (max-width: 992px) { + .dashboard { + h2 { + font-size: 32px; + } + } +} + + +// Perfil da Candidatura +.candidature-profile { + .candidature-profile-info p { + text-transform: lowercase; + + &::first-letter { + text-transform: uppercase; + } + + } +} +@media (max-width: 992px) { + .candidature-profile { + h2 { + font-size: 32px; + } + + h3 { + font-size: 24px; + } + } +} + +@media (min-width: 1200px) { + .candidature-profile { + .candidature-profile-photo { + margin-right: 2.5rem; + } + } +} + +.candidature-video { + max-height: 600px; +} + +#carouselControls { + .carousel-item > div { + min-height: 230px; + } +} + +// Partner Tag +.partners-list { + a, + div { + display: flex; + justify-content: center; + align-items: center; + } + + img { + width: 125px; + height: 70px; + object-fit: contain; + object-position: center; + } +} + + +.checkout-step { + .form-check-input[type="checkbox"]:not(:checked) { + background-color: white; + border-color: #c7c7c7; + } +} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/static/scss/icons.scss b/app/org_eleicoes/votepeloclima/static/scss/icons.scss new file mode 100644 index 00000000..0c7108e9 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/static/scss/icons.scss @@ -0,0 +1,359 @@ +.ds-icon-wrapper { + display: block; + width: 64px; + height: 32px; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-wrapper-2 { + display: block; + width: 64px; + height: 32px; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-pin { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-pencil { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-confirm { + width: 32px; + height: 33px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-warning { + width: 48px; + height: 49px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +// Redes Sociais da Candidatura +.ds-icon-facebook-cinza { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-instagram-cinza { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-linkedin-cinza { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-whatsapp-cinza { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-x-cinza { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +// Botões Compartilhar +.ds-icon-facebook { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-instagram { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-linkedin { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-whatsapp { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-x { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-anchor { + width: 16px; + height: 16px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +// Compromissos Perfil +.ds-icon-compromisso-laranja-1 { + width: 80px; + height: 80px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-laranja-2 { + width: 80px; + height: 80px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-laranja-3 { + width: 80px; + height: 80px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-compromisso-laranja-4 { + width: 80px; + height: 80px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-laranja-5 { + width: 80px; + height: 80px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-laranja-6 { + width: 80px; + height: 80px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-laranja-7 { + width: 80px; + height: 80px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-laranja-8 { + width: 80px; + height: 80px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +// Compromissos Cadastro +.ds-icon-compromisso-1 { + width: 32px; + height: 32px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-2 { + width: 32px; + height: 32px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-3 { + width: 32px; + height: 32px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-4 { + width: 32px; + height: 32px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-5 { + width: 32px; + height: 32px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-6 { + width: 32px; + height: 32px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-compromisso-7 { + width: 32px; + height: 32px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,') +} + +.ds-icon-compromisso-8 { + width: 32px; + height: 32px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-submitted { + width: 48px; + height: 49px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-search { + width: 22px; + height: 22px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-icon-search-green { + width: 32px; + height: 33px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-sidebar-bars { + width: 16px; + height: 17px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-sidebar-arrow { + width: 16px; + height: 17px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-paginator-previous { + width: 12px; + height: 13px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} + +.ds-paginator-next { + width: 12px; + height: 13px; + background-size: contain; + background-repeat: no-repeat; + display: inline-block; + background-image: url('data:image/svg+xml,'); +} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/static/scss/screenside.scss b/app/org_eleicoes/votepeloclima/static/scss/screenside.scss new file mode 100644 index 00000000..531d9da3 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/static/scss/screenside.scss @@ -0,0 +1,6 @@ +.screenside { + height: 100%; + width: 425px; + background-repeat: no-repeat; + background-size: cover; +} diff --git a/app/org_eleicoes/votepeloclima/templates/errors/404.html b/app/org_eleicoes/votepeloclima/templates/errors/404.html new file mode 100644 index 00000000..97324201 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/errors/404.html @@ -0,0 +1,21 @@ +{% extends "votepeloclima/base.html" %} +{% load static %} + +{% block content %} +
+
+
+
+
+
+
+ {% block main %} + +

Página não
encontrada

+

Não conseguimos encontrar esta página. Confira se o link está correto. Se o erro persistir, entre em contato com a gente em votepeloclima@nossas.org

+ + {% endblock %} +
+
+
+{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/templates/errors/500.html b/app/org_eleicoes/votepeloclima/templates/errors/500.html new file mode 100644 index 00000000..754fbe66 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/errors/500.html @@ -0,0 +1,7 @@ +{% extends "errors/404.html" %} + +{% block main %} +

Erro interno do Servidor

+

Houve algum problema no servidor, se o erro persistir entre em contato com suporte@votepeloclima.org

+ +{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/templates/oauth/change_password.html b/app/org_eleicoes/votepeloclima/templates/oauth/change_password.html new file mode 100644 index 00000000..4f4629a3 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/oauth/change_password.html @@ -0,0 +1,21 @@ +{% extends 'votepeloclima/base.html' %} +{% load crispy_forms_filters static %} + +{% block content %} +
+
+
+
+
+

CRIE UMA SENHA

+

Acesse a área restrita das candidaturas para verificar, editar e compartilhar suas informações.

+
+ {% csrf_token %} + {{ form|crispy }} +
+ +
+
+
+
+{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/templates/oauth/email/password_reset_confirm.html b/app/org_eleicoes/votepeloclima/templates/oauth/email/password_reset_confirm.html new file mode 100644 index 00000000..9e3cce11 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/oauth/email/password_reset_confirm.html @@ -0,0 +1,10 @@ +{% extends "votepeloclima/base_mail.html" %} +{% block content %} +

Oi {{user.first_name}},

+ +

Recebemos uma solicitação para redefinir sua senha. Para continuar, clique no link abaixo:

+ +

Redefinir senha

+ +

Caso você não tenha solicitado a redefinição de senha, ignore essa mensagem. Sua senha atual permanecerá segura!

+{% endblock %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/templates/oauth/email/password_reset_subject.txt b/app/org_eleicoes/votepeloclima/templates/oauth/email/password_reset_subject.txt new file mode 100644 index 00000000..ae7162d2 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/oauth/email/password_reset_subject.txt @@ -0,0 +1 @@ +Redefinição de senha \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/templates/oauth/login.html b/app/org_eleicoes/votepeloclima/templates/oauth/login.html new file mode 100644 index 00000000..9ebafdc9 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/oauth/login.html @@ -0,0 +1,46 @@ +{% extends 'votepeloclima/base.html' %} +{% load static crispy_forms_filters %} + +{% block content %} +
+
+
+
+ +
+{% endblock %} + +{% block footer %}{% endblock %} + + +{% block footer_js %} + +{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/templates/oauth/password_reset_done.html b/app/org_eleicoes/votepeloclima/templates/oauth/password_reset_done.html new file mode 100644 index 00000000..7aa29cbd --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/oauth/password_reset_done.html @@ -0,0 +1,14 @@ +{% extends 'votepeloclima/base.html' %} +{% load crispy_forms_filters static %} + +{% block content %} +
+
+
+
+
+

E-mail enviado

+

Confira na sua caixa de mensagem

+
+
+{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/templates/oauth/password_reset_form.html b/app/org_eleicoes/votepeloclima/templates/oauth/password_reset_form.html new file mode 100644 index 00000000..5d3e41f3 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/oauth/password_reset_form.html @@ -0,0 +1,25 @@ +{% extends 'votepeloclima/base.html' %} +{% load static crispy_forms_filters %} + +{% block content %} +
+
+
+
+
+

Recuperar acesso

+

Insira seu e-mail abaixo para receber um link que permitirá criar uma nova senha. Este link será enviado para o endereço de e-mail registrado e você poderá usá-lo para finalizar seu cadastro ou redefinir sua senha esquecida.

+
+ {% csrf_token %} +
+ + {{ form.email.errors }} + +
+
+ +
+
+
+
+{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/templates/votepeloclima/base.html b/app/org_eleicoes/votepeloclima/templates/votepeloclima/base.html new file mode 100644 index 00000000..9174e676 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/votepeloclima/base.html @@ -0,0 +1,97 @@ +{% extends "ds/base.html" %} +{% load static cms_tags menu_tags compress partners_tags %} + +{% block head_css %} +{{block.super}} +{% compress css %} + +{% endcompress %} +{% endblock %} + +{% block navbar %} + +{% endblock %} + +{% block content %} +{% placeholder "content" %} +{% endblock %} + +{% block footer %} +
+
+
+
+ Vote Pelo Clima +

Vote pelo Clima é uma iniciativa para fortalecer a democracia por meio da participação popular nas eleições municipais, com ênfase na crise climática. Nosso objetivo é dar visibilidade a candidaturas comprometidas em enfrentar amplamente as mudanças climáticas nas cidades

+ +
+
+
Realização
+ +
+
+

© 2024. Nossas e Clima de Eleição. Direitos reservados.

+
+
+
+
Quem assina
+
+ {% show_partners %} +
+
+
+
+
+{% endblock %} diff --git a/app/org_eleicoes/votepeloclima/templates/votepeloclima/base_mail.html b/app/org_eleicoes/votepeloclima/templates/votepeloclima/base_mail.html new file mode 100644 index 00000000..a5b567ed --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/votepeloclima/base_mail.html @@ -0,0 +1,11 @@ +{% autoescape off %} +{% block content %}{% endblock %} + +{% block signature %} +

+ Obrigada, +
+ Equipe Vote Pelo Clima +

+{% endblock %} +{% endautoescape %} \ No newline at end of file diff --git a/app/org_eleicoes/votepeloclima/templates/votepeloclima/home.html b/app/org_eleicoes/votepeloclima/templates/votepeloclima/home.html new file mode 100644 index 00000000..0f056bb5 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/votepeloclima/home.html @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Home + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +

O CLIMA MUDOU. 

+ +

A POLÍTICA PRECISA MUDAR.

+ +

De Norte a Sul, o Brasil sofre com enchentes, secas, queimadas e calor recorde nas cidades. Não restam dúvidas de que o clima mudou. Nestas eleições, precisamos mudar a política também!

+ +

Vote pelo Clima é a plataforma que conecta eleitores a candidaturas comprometidas com a construção de políticas para enfrentar a crise climática e prevenir novos desastres.

+ +

É hora de agir! O futuro de nossas cidades depende do seu voto. 

+ +

 

+ + + + + SOU CANDIDATO/A + + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + +

 

+ +

Vote pelo Clima é uma iniciativa para fortalecer a democracia por meio da participação popular nas eleições municipais, com ênfase na crise climática. Nosso objetivo é dar visibilidade a candidaturas comprometidas em enfrentar amplamente as mudanças climáticas nas cidades.

+ +

 

REALIZAÇÃO

+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + +
+
+ + + + + + + + + + + + + diff --git a/app/org_eleicoes/votepeloclima/templates/votepeloclima/logo-navbar.svg b/app/org_eleicoes/votepeloclima/templates/votepeloclima/logo-navbar.svg new file mode 100644 index 00000000..1879f6c6 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/votepeloclima/logo-navbar.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/org_eleicoes/votepeloclima/templates/votepeloclima/menu_item.html b/app/org_eleicoes/votepeloclima/templates/votepeloclima/menu_item.html new file mode 100644 index 00000000..d47ba978 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/templates/votepeloclima/menu_item.html @@ -0,0 +1,7 @@ +{% load menu_tags %} + +{% for child in children %} + +{% endfor %} diff --git a/app/org_eleicoes/votepeloclima/urls.py b/app/org_eleicoes/votepeloclima/urls.py new file mode 100644 index 00000000..eb2b2d43 --- /dev/null +++ b/app/org_eleicoes/votepeloclima/urls.py @@ -0,0 +1,55 @@ +"""project URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" + +from django.conf.urls.static import static +from django.conf import settings +from django.contrib import admin +from django.contrib.staticfiles.urls import staticfiles_urlpatterns +from django.urls import path, include, re_path + +from .candidature.views.create import CreateUpdateCandidatureView +from .candidature.views.oauth import DashboardView, UpdateCandidatureStatusView +from .candidature.views.public import AddressView, PublicCandidatureView +from .candidature.views.filters import CandidatureSearchView + +register_view = CreateUpdateCandidatureView.as_view(url_name="register_step", done_step_name="concluir") + +urlpatterns = [ + # LoginRequired + path("area-da-candidatura/", DashboardView.as_view(), name="dashboard"), + # Public Routers + re_path(r"^candidatura/cadastro/(?P.+)/$", register_view, name="register_step",), + path("candidatura/cadastro/", register_view, name="register"), + path('candidatura/busca/', CandidatureSearchView.as_view(), name='candidature_search'), + re_path(r"^c(andidatura)*/(?P.+)/$", PublicCandidatureView.as_view(), name='candidate_profile'), + # API + path('api/candidatura/buscar-endereco/', AddressView.as_view(), name='address'), + path("api/candidatura/validar/", UpdateCandidatureStatusView.as_view()), + # Manage + path("admin/", admin.site.urls), + path("select2/", include("django_select2.urls")), + path("", include("cms.urls")), +] + +urlpatterns += staticfiles_urlpatterns() + +handler404 = "contrib.frontend.views.error_404" +handler500 = "contrib.frontend.views.error_500" + +if settings.DEBUG: + urlpatterns.extend(static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)) + +# urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/app/org_nossas/Dockerfile b/app/org_nossas/Dockerfile new file mode 100644 index 00000000..5e274374 --- /dev/null +++ b/app/org_nossas/Dockerfile @@ -0,0 +1,63 @@ +# Build staticfiles +FROM node:18-alpine AS node-builder + +WORKDIR /app + +COPY . . + +WORKDIR /app/tailwind + +RUN npm i + +RUN npm run page:build + +RUN npm run admin:build + +# Use an official Python runtime based on Debian 10 "buster" as a parent image. +FROM python:slim-buster + +# Port used by this container to serve HTTP. +EXPOSE 8000 + +# Set environment variables. +# 1. Force Python stdout and stderr streams to be unbuffered. +# 2. Set PORT variable that is used by Gunicorn. This should match "EXPOSE" +# command. +ENV PYTHONUNBUFFERED=1 \ + PORT=8000 + +# Install system packages required by Django CMS and Django. +RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \ + build-essential \ + cargo \ + libssl-dev \ + libffi-dev \ + sox \ + ffmpeg \ + libcairo2 \ + libcairo2-dev \ + python3-dev \ + git \ +&& rm -rf /var/lib/apt/lists/* + +# Install the application server. +RUN pip install uwsgi django-storages boto3 django-prometheus + +# Install the project requirements. +COPY org_nossas/requirements.txt / +RUN pip install -r requirements.txt + +# Use /app folder as a directory where the source code is stored. +WORKDIR /app + +# Copy the source code of the project into the container. +COPY --from=node-builder /app ./ + +RUN python manage.py collectstatic --noinput --clear -i tailwindcss + +# Runtime command that executes when "docker run" is called. + +# Check traefik + etcd configs to running domains +ENV ENABLE_CHECK_TRAEFIK=True + +CMD ["uwsgi", "--ini", "/app/wsgi.ini"] diff --git a/app/nossas/plugins/templatetags/__init__.py b/app/org_nossas/__init__.py similarity index 100% rename from app/nossas/plugins/templatetags/__init__.py rename to app/org_nossas/__init__.py diff --git a/app/nossas/publications/__init__.py b/app/org_nossas/nossas/__init__.py similarity index 100% rename from app/nossas/publications/__init__.py rename to app/org_nossas/nossas/__init__.py diff --git a/app/nossas/admin.py b/app/org_nossas/nossas/admin.py similarity index 100% rename from app/nossas/admin.py rename to app/org_nossas/nossas/admin.py diff --git a/app/nossas/apps.py b/app/org_nossas/nossas/apps.py similarity index 80% rename from app/nossas/apps.py rename to app/org_nossas/nossas/apps.py index 023f1bc4..f611a23e 100644 --- a/app/nossas/apps.py +++ b/app/org_nossas/nossas/apps.py @@ -3,4 +3,4 @@ class NossasConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'nossas' \ No newline at end of file + name = 'org_nossas.nossas' \ No newline at end of file diff --git a/app/nossas/publications/migrations/__init__.py b/app/org_nossas/nossas/apps/__init__.py similarity index 100% rename from app/nossas/publications/migrations/__init__.py rename to app/org_nossas/nossas/apps/__init__.py diff --git a/app/nossas/apps/admin/__init__.py b/app/org_nossas/nossas/apps/admin/__init__.py similarity index 100% rename from app/nossas/apps/admin/__init__.py rename to app/org_nossas/nossas/apps/admin/__init__.py diff --git a/app/nossas/apps/admin/campaigns.py b/app/org_nossas/nossas/apps/admin/campaigns.py similarity index 97% rename from app/nossas/apps/admin/campaigns.py rename to app/org_nossas/nossas/apps/admin/campaigns.py index 00dbbdef..ffe19c2b 100644 --- a/app/nossas/apps/admin/campaigns.py +++ b/app/org_nossas/nossas/apps/admin/campaigns.py @@ -5,7 +5,7 @@ from django.utils.translation import gettext_lazy as _ from django.utils.safestring import mark_safe -from nossas.apps.baseadmin import OnSiteAdmin +from org_nossas.nossas.apps.baseadmin import OnSiteAdmin from ..models.campaigns import Campaign, CampaignGroup from ..utils import import_mobilization diff --git a/app/nossas/apps/admin/institutional.py b/app/org_nossas/nossas/apps/admin/institutional.py similarity index 100% rename from app/nossas/apps/admin/institutional.py rename to app/org_nossas/nossas/apps/admin/institutional.py diff --git a/app/nossas/apps/admin/jobs.py b/app/org_nossas/nossas/apps/admin/jobs.py similarity index 76% rename from app/nossas/apps/admin/jobs.py rename to app/org_nossas/nossas/apps/admin/jobs.py index 2935b688..ffd57d69 100644 --- a/app/nossas/apps/admin/jobs.py +++ b/app/org_nossas/nossas/apps/admin/jobs.py @@ -1,6 +1,6 @@ from django.contrib import admin -from nossas.apps.baseadmin import OnSiteAdmin +from org_nossas.nossas.apps.baseadmin import OnSiteAdmin from ..models.jobs import Job diff --git a/app/nossas/apps/admin/teams.py b/app/org_nossas/nossas/apps/admin/teams.py similarity index 94% rename from app/nossas/apps/admin/teams.py rename to app/org_nossas/nossas/apps/admin/teams.py index c33d2316..2eebbfb4 100644 --- a/app/nossas/apps/admin/teams.py +++ b/app/org_nossas/nossas/apps/admin/teams.py @@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _ from adminsortable2.admin import SortableStackedInline, SortableAdminBase -from nossas.apps.baseadmin import OnSiteAdmin +from org_nossas.nossas.apps.baseadmin import OnSiteAdmin from ..models.teams import MemberGroup, Member diff --git a/app/nossas/apps/admin/timeline.py b/app/org_nossas/nossas/apps/admin/timeline.py similarity index 92% rename from app/nossas/apps/admin/timeline.py rename to app/org_nossas/nossas/apps/admin/timeline.py index dfbfd99d..338f0911 100644 --- a/app/nossas/apps/admin/timeline.py +++ b/app/org_nossas/nossas/apps/admin/timeline.py @@ -1,7 +1,7 @@ from django.contrib import admin from ..models.timeline import TimelineEvent -from nossas.apps.baseadmin import OnSiteAdmin +from org_nossas.nossas.apps.baseadmin import OnSiteAdmin from ..forms.timeline import TimelineEventForm diff --git a/app/nossas/apps/apps.py b/app/org_nossas/nossas/apps/apps.py similarity index 82% rename from app/nossas/apps/apps.py rename to app/org_nossas/nossas/apps/apps.py index 7a2089eb..f27ab8ce 100644 --- a/app/nossas/apps/apps.py +++ b/app/org_nossas/nossas/apps/apps.py @@ -3,5 +3,5 @@ class CampaignsConfig(AppConfig): - name = "nossas.apps" + name = "org_nossas.nossas.apps" verbose_name = _("Aplicativos | NOSSAS") \ No newline at end of file diff --git a/app/nossas/apps/baseadmin.py b/app/org_nossas/nossas/apps/baseadmin.py similarity index 100% rename from app/nossas/apps/baseadmin.py rename to app/org_nossas/nossas/apps/baseadmin.py diff --git a/app/nossas/apps/basemodel.py b/app/org_nossas/nossas/apps/basemodel.py similarity index 100% rename from app/nossas/apps/basemodel.py rename to app/org_nossas/nossas/apps/basemodel.py diff --git a/app/nossas/apps/cms_apps/__init__.py b/app/org_nossas/nossas/apps/cms_apps/__init__.py similarity index 100% rename from app/nossas/apps/cms_apps/__init__.py rename to app/org_nossas/nossas/apps/cms_apps/__init__.py diff --git a/app/nossas/apps/cms_apps/campaigns.py b/app/org_nossas/nossas/apps/cms_apps/campaigns.py similarity index 84% rename from app/nossas/apps/cms_apps/campaigns.py rename to app/org_nossas/nossas/apps/cms_apps/campaigns.py index d4d40a22..5e626b9e 100644 --- a/app/nossas/apps/cms_apps/campaigns.py +++ b/app/org_nossas/nossas/apps/cms_apps/campaigns.py @@ -10,4 +10,4 @@ class CampaignsApphook(CMSApp): name = _("Campanhas") def get_urls(self, page=None, language=None, **kwargs): - return ["nossas.apps.urls.campaigns"] + return ["org_nossas.nossas.apps.urls.campaigns"] diff --git a/app/nossas/apps/cms_apps/jobs.py b/app/org_nossas/nossas/apps/cms_apps/jobs.py similarity index 84% rename from app/nossas/apps/cms_apps/jobs.py rename to app/org_nossas/nossas/apps/cms_apps/jobs.py index 7a84d9a9..65326ae1 100644 --- a/app/nossas/apps/cms_apps/jobs.py +++ b/app/org_nossas/nossas/apps/cms_apps/jobs.py @@ -10,4 +10,4 @@ class JobsApphook(CMSApp): name = _("Vagas") def get_urls(self, page=None, language=None, **kwargs): - return ["nossas.apps.urls.jobs"] + return ["org_nossas.nossas.apps.urls.jobs"] diff --git a/app/nossas/apps/cms_plugins/__init__.py b/app/org_nossas/nossas/apps/cms_plugins/__init__.py similarity index 100% rename from app/nossas/apps/cms_plugins/__init__.py rename to app/org_nossas/nossas/apps/cms_plugins/__init__.py diff --git a/app/nossas/apps/cms_plugins/campaigns.py b/app/org_nossas/nossas/apps/cms_plugins/campaigns.py similarity index 100% rename from app/nossas/apps/cms_plugins/campaigns.py rename to app/org_nossas/nossas/apps/cms_plugins/campaigns.py diff --git a/app/nossas/apps/cms_plugins/jobs.py b/app/org_nossas/nossas/apps/cms_plugins/jobs.py similarity index 100% rename from app/nossas/apps/cms_plugins/jobs.py rename to app/org_nossas/nossas/apps/cms_plugins/jobs.py diff --git a/app/nossas/apps/cms_plugins/teams.py b/app/org_nossas/nossas/apps/cms_plugins/teams.py similarity index 100% rename from app/nossas/apps/cms_plugins/teams.py rename to app/org_nossas/nossas/apps/cms_plugins/teams.py diff --git a/app/nossas/apps/cms_plugins/timeline.py b/app/org_nossas/nossas/apps/cms_plugins/timeline.py similarity index 100% rename from app/nossas/apps/cms_plugins/timeline.py rename to app/org_nossas/nossas/apps/cms_plugins/timeline.py diff --git a/app/nossas/apps/cms_toolbars.py b/app/org_nossas/nossas/apps/cms_toolbars.py similarity index 100% rename from app/nossas/apps/cms_toolbars.py rename to app/org_nossas/nossas/apps/cms_toolbars.py diff --git a/app/org_nossas/nossas/apps/forms/__init__.py b/app/org_nossas/nossas/apps/forms/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/apps/forms/campaigns.py b/app/org_nossas/nossas/apps/forms/campaigns.py similarity index 100% rename from app/nossas/apps/forms/campaigns.py rename to app/org_nossas/nossas/apps/forms/campaigns.py diff --git a/app/nossas/apps/forms/institutional.py b/app/org_nossas/nossas/apps/forms/institutional.py similarity index 100% rename from app/nossas/apps/forms/institutional.py rename to app/org_nossas/nossas/apps/forms/institutional.py diff --git a/app/nossas/apps/forms/timeline.py b/app/org_nossas/nossas/apps/forms/timeline.py similarity index 91% rename from app/nossas/apps/forms/timeline.py rename to app/org_nossas/nossas/apps/forms/timeline.py index 0c3a083f..691f1231 100644 --- a/app/nossas/apps/forms/timeline.py +++ b/app/org_nossas/nossas/apps/forms/timeline.py @@ -2,7 +2,7 @@ from django.utils.functional import lazy from django.utils.translation import gettext_lazy as _ -from nossas.design.widgets import CharsLeftTextInput, CharsLeftTextarea +from org_nossas.nossas.design.widgets import CharsLeftTextInput, CharsLeftTextarea from ..models.timeline import TimelineEvent diff --git a/app/org_nossas/nossas/apps/management/__init__.py b/app/org_nossas/nossas/apps/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/org_nossas/nossas/apps/management/commands/__init__.py b/app/org_nossas/nossas/apps/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/apps/management/commands/import_campaigns.py b/app/org_nossas/nossas/apps/management/commands/import_campaigns.py similarity index 100% rename from app/nossas/apps/management/commands/import_campaigns.py rename to app/org_nossas/nossas/apps/management/commands/import_campaigns.py diff --git a/app/nossas/apps/migrations/0001_initial.py b/app/org_nossas/nossas/apps/migrations/0001_initial.py similarity index 100% rename from app/nossas/apps/migrations/0001_initial.py rename to app/org_nossas/nossas/apps/migrations/0001_initial.py diff --git a/app/nossas/apps/migrations/0002_delete_campaignlistpluginmodel.py b/app/org_nossas/nossas/apps/migrations/0002_delete_campaignlistpluginmodel.py similarity index 100% rename from app/nossas/apps/migrations/0002_delete_campaignlistpluginmodel.py rename to app/org_nossas/nossas/apps/migrations/0002_delete_campaignlistpluginmodel.py diff --git a/app/nossas/apps/migrations/0003_job.py b/app/org_nossas/nossas/apps/migrations/0003_job.py similarity index 100% rename from app/nossas/apps/migrations/0003_job.py rename to app/org_nossas/nossas/apps/migrations/0003_job.py diff --git a/app/nossas/apps/migrations/0004_institutionalinformation.py b/app/org_nossas/nossas/apps/migrations/0004_institutionalinformation.py similarity index 100% rename from app/nossas/apps/migrations/0004_institutionalinformation.py rename to app/org_nossas/nossas/apps/migrations/0004_institutionalinformation.py diff --git a/app/nossas/apps/migrations/0005_member_membergroup.py b/app/org_nossas/nossas/apps/migrations/0005_member_membergroup.py similarity index 100% rename from app/nossas/apps/migrations/0005_member_membergroup.py rename to app/org_nossas/nossas/apps/migrations/0005_member_membergroup.py diff --git a/app/nossas/apps/migrations/0006_auto_20240130_0955.py b/app/org_nossas/nossas/apps/migrations/0006_auto_20240130_0955.py similarity index 100% rename from app/nossas/apps/migrations/0006_auto_20240130_0955.py rename to app/org_nossas/nossas/apps/migrations/0006_auto_20240130_0955.py diff --git a/app/nossas/apps/migrations/0007_navigatecampaigns.py b/app/org_nossas/nossas/apps/migrations/0007_navigatecampaigns.py similarity index 100% rename from app/nossas/apps/migrations/0007_navigatecampaigns.py rename to app/org_nossas/nossas/apps/migrations/0007_navigatecampaigns.py diff --git a/app/nossas/apps/migrations/0008_alter_navigatecampaigns_related_campaign.py b/app/org_nossas/nossas/apps/migrations/0008_alter_navigatecampaigns_related_campaign.py similarity index 100% rename from app/nossas/apps/migrations/0008_alter_navigatecampaigns_related_campaign.py rename to app/org_nossas/nossas/apps/migrations/0008_alter_navigatecampaigns_related_campaign.py diff --git a/app/nossas/apps/migrations/0009_member_my_order_and_more.py b/app/org_nossas/nossas/apps/migrations/0009_member_my_order_and_more.py similarity index 100% rename from app/nossas/apps/migrations/0009_member_my_order_and_more.py rename to app/org_nossas/nossas/apps/migrations/0009_member_my_order_and_more.py diff --git a/app/nossas/apps/migrations/0010_alter_member_options_alter_membergroup_options_and_more.py b/app/org_nossas/nossas/apps/migrations/0010_alter_member_options_alter_membergroup_options_and_more.py similarity index 100% rename from app/nossas/apps/migrations/0010_alter_member_options_alter_membergroup_options_and_more.py rename to app/org_nossas/nossas/apps/migrations/0010_alter_member_options_alter_membergroup_options_and_more.py diff --git a/app/nossas/apps/migrations/0011_alter_membergroup_options_alter_member_my_order_and_more.py b/app/org_nossas/nossas/apps/migrations/0011_alter_membergroup_options_alter_member_my_order_and_more.py similarity index 100% rename from app/nossas/apps/migrations/0011_alter_membergroup_options_alter_member_my_order_and_more.py rename to app/org_nossas/nossas/apps/migrations/0011_alter_membergroup_options_alter_member_my_order_and_more.py diff --git a/app/nossas/apps/migrations/0012_ourcitiesproject_name_alter_ourcitiesproject_url.py b/app/org_nossas/nossas/apps/migrations/0012_ourcitiesproject_name_alter_ourcitiesproject_url.py similarity index 100% rename from app/nossas/apps/migrations/0012_ourcitiesproject_name_alter_ourcitiesproject_url.py rename to app/org_nossas/nossas/apps/migrations/0012_ourcitiesproject_name_alter_ourcitiesproject_url.py diff --git a/app/nossas/apps/migrations/0013_ourcitiesproject_hide_border.py b/app/org_nossas/nossas/apps/migrations/0013_ourcitiesproject_hide_border.py similarity index 100% rename from app/nossas/apps/migrations/0013_ourcitiesproject_hide_border.py rename to app/org_nossas/nossas/apps/migrations/0013_ourcitiesproject_hide_border.py diff --git a/app/nossas/apps/migrations/0014_navigatecampaigns_related_campaigns_and_more.py b/app/org_nossas/nossas/apps/migrations/0014_navigatecampaigns_related_campaigns_and_more.py similarity index 100% rename from app/nossas/apps/migrations/0014_navigatecampaigns_related_campaigns_and_more.py rename to app/org_nossas/nossas/apps/migrations/0014_navigatecampaigns_related_campaigns_and_more.py diff --git a/app/nossas/apps/migrations/0015_alter_navigatecampaigns_related_campaigns_and_more.py b/app/org_nossas/nossas/apps/migrations/0015_alter_navigatecampaigns_related_campaigns_and_more.py similarity index 100% rename from app/nossas/apps/migrations/0015_alter_navigatecampaigns_related_campaigns_and_more.py rename to app/org_nossas/nossas/apps/migrations/0015_alter_navigatecampaigns_related_campaigns_and_more.py diff --git a/app/nossas/apps/migrations/0016_alter_timelineevent_options_timelineevent_day_and_more.py b/app/org_nossas/nossas/apps/migrations/0016_alter_timelineevent_options_timelineevent_day_and_more.py similarity index 100% rename from app/nossas/apps/migrations/0016_alter_timelineevent_options_timelineevent_day_and_more.py rename to app/org_nossas/nossas/apps/migrations/0016_alter_timelineevent_options_timelineevent_day_and_more.py diff --git a/app/nossas/apps/migrations/0017_alter_campaign_managers_alter_campaigngroup_managers_and_more.py b/app/org_nossas/nossas/apps/migrations/0017_alter_campaign_managers_alter_campaigngroup_managers_and_more.py similarity index 100% rename from app/nossas/apps/migrations/0017_alter_campaign_managers_alter_campaigngroup_managers_and_more.py rename to app/org_nossas/nossas/apps/migrations/0017_alter_campaign_managers_alter_campaigngroup_managers_and_more.py diff --git a/app/org_nossas/nossas/apps/migrations/__init__.py b/app/org_nossas/nossas/apps/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/apps/models/__init__.py b/app/org_nossas/nossas/apps/models/__init__.py similarity index 100% rename from app/nossas/apps/models/__init__.py rename to app/org_nossas/nossas/apps/models/__init__.py diff --git a/app/nossas/apps/models/campaigns.py b/app/org_nossas/nossas/apps/models/campaigns.py similarity index 99% rename from app/nossas/apps/models/campaigns.py rename to app/org_nossas/nossas/apps/models/campaigns.py index 36e145c0..762667fb 100644 --- a/app/nossas/apps/models/campaigns.py +++ b/app/org_nossas/nossas/apps/models/campaigns.py @@ -10,7 +10,7 @@ from tag_fields.managers import ModelTagsManager from translated_fields import TranslatedField -from nossas.apps.basemodel import OnSiteBaseModel +from org_nossas.nossas.apps.basemodel import OnSiteBaseModel class CampaignGroup(OnSiteBaseModel): diff --git a/app/nossas/apps/models/institutional.py b/app/org_nossas/nossas/apps/models/institutional.py similarity index 100% rename from app/nossas/apps/models/institutional.py rename to app/org_nossas/nossas/apps/models/institutional.py diff --git a/app/nossas/apps/models/jobs.py b/app/org_nossas/nossas/apps/models/jobs.py similarity index 96% rename from app/nossas/apps/models/jobs.py rename to app/org_nossas/nossas/apps/models/jobs.py index b75b5ee6..549f00d2 100644 --- a/app/nossas/apps/models/jobs.py +++ b/app/org_nossas/nossas/apps/models/jobs.py @@ -5,7 +5,7 @@ from djangocms_text_ckeditor.fields import HTMLField from filer.fields.image import FilerImageField -from nossas.apps.basemodel import OnSiteBaseModel +from org_nossas.nossas.apps.basemodel import OnSiteBaseModel class JobStatus(models.TextChoices): diff --git a/app/nossas/apps/models/teams.py b/app/org_nossas/nossas/apps/models/teams.py similarity index 96% rename from app/nossas/apps/models/teams.py rename to app/org_nossas/nossas/apps/models/teams.py index 070c5d4e..223ef876 100644 --- a/app/nossas/apps/models/teams.py +++ b/app/org_nossas/nossas/apps/models/teams.py @@ -3,7 +3,7 @@ from filer.fields.image import FilerImageField from translated_fields import TranslatedField -from nossas.apps.basemodel import OnSiteBaseModel +from org_nossas.nossas.apps.basemodel import OnSiteBaseModel class MemberGroup(OnSiteBaseModel): diff --git a/app/nossas/apps/models/timeline.py b/app/org_nossas/nossas/apps/models/timeline.py similarity index 96% rename from app/nossas/apps/models/timeline.py rename to app/org_nossas/nossas/apps/models/timeline.py index 12b4eeda..be138985 100644 --- a/app/nossas/apps/models/timeline.py +++ b/app/org_nossas/nossas/apps/models/timeline.py @@ -4,7 +4,7 @@ from filer.fields.image import FilerImageField -from nossas.apps.basemodel import OnSiteBaseModel +from org_nossas.nossas.apps.basemodel import OnSiteBaseModel class TimelineEventContext(models.TextChoices): diff --git a/app/nossas/apps/search_indexes.py b/app/org_nossas/nossas/apps/search_indexes.py similarity index 100% rename from app/nossas/apps/search_indexes.py rename to app/org_nossas/nossas/apps/search_indexes.py diff --git a/app/nossas/apps/static/campaigns/css/admin.css b/app/org_nossas/nossas/apps/static/campaigns/css/admin.css similarity index 100% rename from app/nossas/apps/static/campaigns/css/admin.css rename to app/org_nossas/nossas/apps/static/campaigns/css/admin.css diff --git a/app/nossas/apps/static/campaigns/js/campaign-select2.js b/app/org_nossas/nossas/apps/static/campaigns/js/campaign-select2.js similarity index 100% rename from app/nossas/apps/static/campaigns/js/campaign-select2.js rename to app/org_nossas/nossas/apps/static/campaigns/js/campaign-select2.js diff --git a/app/nossas/apps/static/timeline/icons/cobogo-branco.svg b/app/org_nossas/nossas/apps/static/timeline/icons/cobogo-branco.svg similarity index 100% rename from app/nossas/apps/static/timeline/icons/cobogo-branco.svg rename to app/org_nossas/nossas/apps/static/timeline/icons/cobogo-branco.svg diff --git a/app/nossas/apps/static/timeline/js/timeline-filter-select.js b/app/org_nossas/nossas/apps/static/timeline/js/timeline-filter-select.js similarity index 100% rename from app/nossas/apps/static/timeline/js/timeline-filter-select.js rename to app/org_nossas/nossas/apps/static/timeline/js/timeline-filter-select.js diff --git a/app/nossas/apps/templates/admin/campaigns/changelist.html b/app/org_nossas/nossas/apps/templates/admin/campaigns/changelist.html similarity index 100% rename from app/nossas/apps/templates/admin/campaigns/changelist.html rename to app/org_nossas/nossas/apps/templates/admin/campaigns/changelist.html diff --git a/app/nossas/apps/templates/admin/institutional/change_form.html b/app/org_nossas/nossas/apps/templates/admin/institutional/change_form.html similarity index 100% rename from app/nossas/apps/templates/admin/institutional/change_form.html rename to app/org_nossas/nossas/apps/templates/admin/institutional/change_form.html diff --git a/app/nossas/apps/templates/nossas/campaigns/campaign_detail.html b/app/org_nossas/nossas/apps/templates/nossas/campaigns/campaign_detail.html similarity index 100% rename from app/nossas/apps/templates/nossas/campaigns/campaign_detail.html rename to app/org_nossas/nossas/apps/templates/nossas/campaigns/campaign_detail.html diff --git a/app/nossas/apps/templates/nossas/jobs/job_detail.html b/app/org_nossas/nossas/apps/templates/nossas/jobs/job_detail.html similarity index 100% rename from app/nossas/apps/templates/nossas/jobs/job_detail.html rename to app/org_nossas/nossas/apps/templates/nossas/jobs/job_detail.html diff --git a/app/nossas/apps/templates/nossas/jobs/plugins/slider_jobs_item.html b/app/org_nossas/nossas/apps/templates/nossas/jobs/plugins/slider_jobs_item.html similarity index 100% rename from app/nossas/apps/templates/nossas/jobs/plugins/slider_jobs_item.html rename to app/org_nossas/nossas/apps/templates/nossas/jobs/plugins/slider_jobs_item.html diff --git a/app/nossas/apps/templates/nossas/jobs/plugins/slider_jobs_plugin.html b/app/org_nossas/nossas/apps/templates/nossas/jobs/plugins/slider_jobs_plugin.html similarity index 100% rename from app/nossas/apps/templates/nossas/jobs/plugins/slider_jobs_plugin.html rename to app/org_nossas/nossas/apps/templates/nossas/jobs/plugins/slider_jobs_plugin.html diff --git a/app/nossas/apps/templates/plugins/filter_campaign_list_plugin.html b/app/org_nossas/nossas/apps/templates/plugins/filter_campaign_list_plugin.html similarity index 100% rename from app/nossas/apps/templates/plugins/filter_campaign_list_plugin.html rename to app/org_nossas/nossas/apps/templates/plugins/filter_campaign_list_plugin.html diff --git a/app/nossas/apps/templates/plugins/filter_campaign_list_plugin_item.html b/app/org_nossas/nossas/apps/templates/plugins/filter_campaign_list_plugin_item.html similarity index 100% rename from app/nossas/apps/templates/plugins/filter_campaign_list_plugin_item.html rename to app/org_nossas/nossas/apps/templates/plugins/filter_campaign_list_plugin_item.html diff --git a/app/nossas/apps/templates/plugins/navigate_campaigns_plugin.html b/app/org_nossas/nossas/apps/templates/plugins/navigate_campaigns_plugin.html similarity index 100% rename from app/nossas/apps/templates/plugins/navigate_campaigns_plugin.html rename to app/org_nossas/nossas/apps/templates/plugins/navigate_campaigns_plugin.html diff --git a/app/nossas/apps/templates/plugins/our_cities_plugin.html b/app/org_nossas/nossas/apps/templates/plugins/our_cities_plugin.html similarity index 100% rename from app/nossas/apps/templates/plugins/our_cities_plugin.html rename to app/org_nossas/nossas/apps/templates/plugins/our_cities_plugin.html diff --git a/app/nossas/apps/templates/plugins/team_accordion_plugin.html b/app/org_nossas/nossas/apps/templates/plugins/team_accordion_plugin.html similarity index 100% rename from app/nossas/apps/templates/plugins/team_accordion_plugin.html rename to app/org_nossas/nossas/apps/templates/plugins/team_accordion_plugin.html diff --git a/app/nossas/apps/templates/plugins/timeline_detail.html b/app/org_nossas/nossas/apps/templates/plugins/timeline_detail.html similarity index 100% rename from app/nossas/apps/templates/plugins/timeline_detail.html rename to app/org_nossas/nossas/apps/templates/plugins/timeline_detail.html diff --git a/app/nossas/apps/templates/plugins/timeline_list.html b/app/org_nossas/nossas/apps/templates/plugins/timeline_list.html similarity index 100% rename from app/nossas/apps/templates/plugins/timeline_list.html rename to app/org_nossas/nossas/apps/templates/plugins/timeline_list.html diff --git a/app/nossas/apps/templates/plugins/timeline_plugin.html b/app/org_nossas/nossas/apps/templates/plugins/timeline_plugin.html similarity index 100% rename from app/nossas/apps/templates/plugins/timeline_plugin.html rename to app/org_nossas/nossas/apps/templates/plugins/timeline_plugin.html diff --git a/app/nossas/apps/templates/search/indexes/apps/campaign_text.txt b/app/org_nossas/nossas/apps/templates/search/indexes/apps/campaign_text.txt similarity index 100% rename from app/nossas/apps/templates/search/indexes/apps/campaign_text.txt rename to app/org_nossas/nossas/apps/templates/search/indexes/apps/campaign_text.txt diff --git a/app/nossas/apps/templates/team/member_modal.html b/app/org_nossas/nossas/apps/templates/team/member_modal.html similarity index 100% rename from app/nossas/apps/templates/team/member_modal.html rename to app/org_nossas/nossas/apps/templates/team/member_modal.html diff --git a/app/org_nossas/nossas/apps/urls/__init__.py b/app/org_nossas/nossas/apps/urls/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/apps/urls/campaigns.py b/app/org_nossas/nossas/apps/urls/campaigns.py similarity index 100% rename from app/nossas/apps/urls/campaigns.py rename to app/org_nossas/nossas/apps/urls/campaigns.py diff --git a/app/nossas/apps/urls/institutional.py b/app/org_nossas/nossas/apps/urls/institutional.py similarity index 100% rename from app/nossas/apps/urls/institutional.py rename to app/org_nossas/nossas/apps/urls/institutional.py diff --git a/app/nossas/apps/urls/jobs.py b/app/org_nossas/nossas/apps/urls/jobs.py similarity index 100% rename from app/nossas/apps/urls/jobs.py rename to app/org_nossas/nossas/apps/urls/jobs.py diff --git a/app/nossas/apps/utils.py b/app/org_nossas/nossas/apps/utils.py similarity index 100% rename from app/nossas/apps/utils.py rename to app/org_nossas/nossas/apps/utils.py diff --git a/app/org_nossas/nossas/apps/views/__init__.py b/app/org_nossas/nossas/apps/views/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/apps/views/campaigns.py b/app/org_nossas/nossas/apps/views/campaigns.py similarity index 100% rename from app/nossas/apps/views/campaigns.py rename to app/org_nossas/nossas/apps/views/campaigns.py diff --git a/app/nossas/apps/views/institutional.py b/app/org_nossas/nossas/apps/views/institutional.py similarity index 100% rename from app/nossas/apps/views/institutional.py rename to app/org_nossas/nossas/apps/views/institutional.py diff --git a/app/nossas/apps/views/jobs.py b/app/org_nossas/nossas/apps/views/jobs.py similarity index 100% rename from app/nossas/apps/views/jobs.py rename to app/org_nossas/nossas/apps/views/jobs.py diff --git a/app/org_nossas/nossas/design/__init__.py b/app/org_nossas/nossas/design/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/design/cms_menus.py b/app/org_nossas/nossas/design/cms_menus.py similarity index 100% rename from app/nossas/design/cms_menus.py rename to app/org_nossas/nossas/design/cms_menus.py diff --git a/app/nossas/design/cms_plugins.py b/app/org_nossas/nossas/design/cms_plugins.py similarity index 100% rename from app/nossas/design/cms_plugins.py rename to app/org_nossas/nossas/design/cms_plugins.py diff --git a/app/nossas/design/fields.py b/app/org_nossas/nossas/design/fields.py similarity index 100% rename from app/nossas/design/fields.py rename to app/org_nossas/nossas/design/fields.py diff --git a/app/nossas/design/forms.py b/app/org_nossas/nossas/design/forms.py similarity index 100% rename from app/nossas/design/forms.py rename to app/org_nossas/nossas/design/forms.py diff --git a/app/org_nossas/nossas/design/migrations/__init__.py b/app/org_nossas/nossas/design/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/design/models.py b/app/org_nossas/nossas/design/models.py similarity index 100% rename from app/nossas/design/models.py rename to app/org_nossas/nossas/design/models.py diff --git a/app/nossas/design/static/bootstrap/js/index.esm.js b/app/org_nossas/nossas/design/static/bootstrap/js/index.esm.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/index.esm.js rename to app/org_nossas/nossas/design/static/bootstrap/js/index.esm.js diff --git a/app/nossas/design/static/bootstrap/js/index.umd.js b/app/org_nossas/nossas/design/static/bootstrap/js/index.umd.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/index.umd.js rename to app/org_nossas/nossas/design/static/bootstrap/js/index.umd.js diff --git a/app/nossas/design/static/bootstrap/js/src/alert.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/alert.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/alert.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/alert.js diff --git a/app/nossas/design/static/bootstrap/js/src/base-component.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/base-component.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/base-component.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/base-component.js diff --git a/app/nossas/design/static/bootstrap/js/src/button.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/button.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/button.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/button.js diff --git a/app/nossas/design/static/bootstrap/js/src/carousel.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/carousel.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/carousel.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/carousel.js diff --git a/app/nossas/design/static/bootstrap/js/src/collapse.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/collapse.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/collapse.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/collapse.js diff --git a/app/nossas/design/static/bootstrap/js/src/dom/data.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/dom/data.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/dom/data.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/dom/data.js diff --git a/app/nossas/design/static/bootstrap/js/src/dom/event-handler.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/dom/event-handler.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/dom/event-handler.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/dom/event-handler.js diff --git a/app/nossas/design/static/bootstrap/js/src/dom/manipulator.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/dom/manipulator.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/dom/manipulator.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/dom/manipulator.js diff --git a/app/nossas/design/static/bootstrap/js/src/dom/selector-engine.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/dom/selector-engine.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/dom/selector-engine.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/dom/selector-engine.js diff --git a/app/nossas/design/static/bootstrap/js/src/dropdown.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/dropdown.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/dropdown.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/dropdown.js diff --git a/app/nossas/design/static/bootstrap/js/src/modal.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/modal.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/modal.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/modal.js diff --git a/app/nossas/design/static/bootstrap/js/src/offcanvas.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/offcanvas.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/offcanvas.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/offcanvas.js diff --git a/app/nossas/design/static/bootstrap/js/src/popover.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/popover.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/popover.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/popover.js diff --git a/app/nossas/design/static/bootstrap/js/src/scrollspy.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/scrollspy.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/scrollspy.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/scrollspy.js diff --git a/app/nossas/design/static/bootstrap/js/src/tab.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/tab.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/tab.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/tab.js diff --git a/app/nossas/design/static/bootstrap/js/src/toast.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/toast.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/toast.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/toast.js diff --git a/app/nossas/design/static/bootstrap/js/src/tooltip.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/tooltip.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/tooltip.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/tooltip.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/backdrop.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/backdrop.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/backdrop.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/backdrop.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/component-functions.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/component-functions.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/component-functions.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/component-functions.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/config.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/config.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/config.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/config.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/focustrap.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/focustrap.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/focustrap.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/focustrap.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/index.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/index.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/index.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/index.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/sanitizer.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/sanitizer.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/sanitizer.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/sanitizer.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/scrollbar.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/scrollbar.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/scrollbar.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/scrollbar.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/swipe.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/swipe.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/swipe.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/swipe.js diff --git a/app/nossas/design/static/bootstrap/js/src/util/template-factory.js b/app/org_nossas/nossas/design/static/bootstrap/js/src/util/template-factory.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/src/util/template-factory.js rename to app/org_nossas/nossas/design/static/bootstrap/js/src/util/template-factory.js diff --git a/app/nossas/design/static/bootstrap/js/tests/README.md b/app/org_nossas/nossas/design/static/bootstrap/js/tests/README.md similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/README.md rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/README.md diff --git a/app/nossas/design/static/bootstrap/js/tests/browsers.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/browsers.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/browsers.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/browsers.js diff --git a/app/nossas/design/static/bootstrap/js/tests/helpers/fixture.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/helpers/fixture.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/helpers/fixture.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/helpers/fixture.js diff --git a/app/nossas/design/static/bootstrap/js/tests/integration/bundle-modularity.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/bundle-modularity.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/integration/bundle-modularity.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/bundle-modularity.js diff --git a/app/nossas/design/static/bootstrap/js/tests/integration/bundle.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/bundle.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/integration/bundle.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/bundle.js diff --git a/app/nossas/design/static/bootstrap/js/tests/integration/index.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/index.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/integration/index.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/index.html diff --git a/app/nossas/design/static/bootstrap/js/tests/integration/rollup.bundle-modularity.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/rollup.bundle-modularity.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/integration/rollup.bundle-modularity.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/rollup.bundle-modularity.js diff --git a/app/nossas/design/static/bootstrap/js/tests/integration/rollup.bundle.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/rollup.bundle.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/integration/rollup.bundle.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/integration/rollup.bundle.js diff --git a/app/nossas/design/static/bootstrap/js/tests/karma.conf.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/karma.conf.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/karma.conf.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/karma.conf.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/alert.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/alert.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/alert.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/alert.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/base-component.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/base-component.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/base-component.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/base-component.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/button.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/button.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/button.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/button.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/carousel.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/carousel.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/carousel.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/carousel.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/collapse.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/collapse.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/collapse.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/collapse.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/dom/data.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dom/data.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/dom/data.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dom/data.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/dom/event-handler.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dom/event-handler.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/dom/event-handler.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dom/event-handler.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/dom/manipulator.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dom/manipulator.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/dom/manipulator.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dom/manipulator.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/dom/selector-engine.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dom/selector-engine.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/dom/selector-engine.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dom/selector-engine.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/dropdown.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dropdown.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/dropdown.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/dropdown.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/jquery.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/jquery.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/jquery.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/jquery.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/modal.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/modal.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/modal.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/modal.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/offcanvas.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/offcanvas.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/offcanvas.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/offcanvas.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/popover.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/popover.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/popover.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/popover.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/scrollspy.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/scrollspy.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/scrollspy.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/scrollspy.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/tab.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/tab.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/tab.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/tab.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/toast.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/toast.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/toast.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/toast.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/tooltip.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/tooltip.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/tooltip.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/tooltip.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/backdrop.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/backdrop.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/backdrop.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/backdrop.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/component-functions.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/component-functions.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/component-functions.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/component-functions.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/config.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/config.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/config.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/config.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/focustrap.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/focustrap.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/focustrap.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/focustrap.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/index.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/index.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/index.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/index.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/sanitizer.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/sanitizer.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/sanitizer.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/sanitizer.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/scrollbar.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/scrollbar.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/scrollbar.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/scrollbar.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/swipe.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/swipe.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/swipe.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/swipe.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/unit/util/template-factory.spec.js b/app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/template-factory.spec.js similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/unit/util/template-factory.spec.js rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/unit/util/template-factory.spec.js diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/alert.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/alert.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/alert.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/alert.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/button.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/button.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/button.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/button.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/carousel.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/carousel.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/carousel.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/carousel.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/collapse.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/collapse.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/collapse.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/collapse.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/dropdown.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/dropdown.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/dropdown.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/dropdown.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/input.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/input.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/input.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/input.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/modal.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/modal.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/modal.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/modal.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/popover.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/popover.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/popover.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/popover.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/scrollspy.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/scrollspy.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/scrollspy.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/scrollspy.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/tab.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/tab.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/tab.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/tab.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/toast.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/toast.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/toast.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/toast.html diff --git a/app/nossas/design/static/bootstrap/js/tests/visual/tooltip.html b/app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/tooltip.html similarity index 100% rename from app/nossas/design/static/bootstrap/js/tests/visual/tooltip.html rename to app/org_nossas/nossas/design/static/bootstrap/js/tests/visual/tooltip.html diff --git a/app/nossas/design/static/bootstrap/scss/_accordion.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_accordion.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_accordion.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_accordion.scss diff --git a/app/nossas/design/static/bootstrap/scss/_alert.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_alert.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_alert.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_alert.scss diff --git a/app/nossas/design/static/bootstrap/scss/_badge.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_badge.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_badge.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_badge.scss diff --git a/app/nossas/design/static/bootstrap/scss/_breadcrumb.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_breadcrumb.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_breadcrumb.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_breadcrumb.scss diff --git a/app/nossas/design/static/bootstrap/scss/_button-group.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_button-group.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_button-group.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_button-group.scss diff --git a/app/nossas/design/static/bootstrap/scss/_buttons.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_buttons.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_buttons.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_buttons.scss diff --git a/app/nossas/design/static/bootstrap/scss/_card.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_card.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_card.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_card.scss diff --git a/app/nossas/design/static/bootstrap/scss/_carousel.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_carousel.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_carousel.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_carousel.scss diff --git a/app/nossas/design/static/bootstrap/scss/_close.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_close.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_close.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_close.scss diff --git a/app/nossas/design/static/bootstrap/scss/_containers.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_containers.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_containers.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_containers.scss diff --git a/app/nossas/design/static/bootstrap/scss/_dropdown.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_dropdown.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_dropdown.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_dropdown.scss diff --git a/app/nossas/design/static/bootstrap/scss/_forms.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_forms.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_forms.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_forms.scss diff --git a/app/nossas/design/static/bootstrap/scss/_functions.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_functions.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_functions.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_functions.scss diff --git a/app/nossas/design/static/bootstrap/scss/_grid.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_grid.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_grid.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_grid.scss diff --git a/app/nossas/design/static/bootstrap/scss/_helpers.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_helpers.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_helpers.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_helpers.scss diff --git a/app/nossas/design/static/bootstrap/scss/_images.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_images.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_images.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_images.scss diff --git a/app/nossas/design/static/bootstrap/scss/_list-group.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_list-group.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_list-group.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_list-group.scss diff --git a/app/nossas/design/static/bootstrap/scss/_maps.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_maps.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_maps.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_maps.scss diff --git a/app/nossas/design/static/bootstrap/scss/_mixins.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_mixins.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_mixins.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_mixins.scss diff --git a/app/nossas/design/static/bootstrap/scss/_modal.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_modal.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_modal.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_modal.scss diff --git a/app/nossas/design/static/bootstrap/scss/_nav.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_nav.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_nav.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_nav.scss diff --git a/app/nossas/design/static/bootstrap/scss/_navbar.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_navbar.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_navbar.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_navbar.scss diff --git a/app/nossas/design/static/bootstrap/scss/_offcanvas.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_offcanvas.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_offcanvas.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_offcanvas.scss diff --git a/app/nossas/design/static/bootstrap/scss/_pagination.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_pagination.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_pagination.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_pagination.scss diff --git a/app/nossas/design/static/bootstrap/scss/_placeholders.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_placeholders.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_placeholders.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_placeholders.scss diff --git a/app/nossas/design/static/bootstrap/scss/_popover.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_popover.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_popover.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_popover.scss diff --git a/app/nossas/design/static/bootstrap/scss/_progress.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_progress.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_progress.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_progress.scss diff --git a/app/nossas/design/static/bootstrap/scss/_reboot.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_reboot.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_reboot.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_reboot.scss diff --git a/app/nossas/design/static/bootstrap/scss/_root.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_root.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_root.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_root.scss diff --git a/app/nossas/design/static/bootstrap/scss/_spinners.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_spinners.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_spinners.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_spinners.scss diff --git a/app/nossas/design/static/bootstrap/scss/_tables.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_tables.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_tables.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_tables.scss diff --git a/app/nossas/design/static/bootstrap/scss/_toasts.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_toasts.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_toasts.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_toasts.scss diff --git a/app/nossas/design/static/bootstrap/scss/_tooltip.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_tooltip.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_tooltip.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_tooltip.scss diff --git a/app/nossas/design/static/bootstrap/scss/_transitions.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_transitions.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_transitions.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_transitions.scss diff --git a/app/nossas/design/static/bootstrap/scss/_type.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_type.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_type.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_type.scss diff --git a/app/nossas/design/static/bootstrap/scss/_utilities.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_utilities.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_utilities.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_utilities.scss diff --git a/app/nossas/design/static/bootstrap/scss/_variables-dark.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_variables-dark.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_variables-dark.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_variables-dark.scss diff --git a/app/nossas/design/static/bootstrap/scss/_variables.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/_variables.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/_variables.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/_variables.scss diff --git a/app/nossas/design/static/bootstrap/scss/bootstrap-grid.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/bootstrap-grid.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/bootstrap-grid.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/bootstrap-grid.scss diff --git a/app/nossas/design/static/bootstrap/scss/bootstrap-reboot.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/bootstrap-reboot.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/bootstrap-reboot.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/bootstrap-reboot.scss diff --git a/app/nossas/design/static/bootstrap/scss/bootstrap-utilities.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/bootstrap-utilities.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/bootstrap-utilities.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/bootstrap-utilities.scss diff --git a/app/nossas/design/static/bootstrap/scss/bootstrap.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/bootstrap.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/bootstrap.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/bootstrap.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_floating-labels.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_floating-labels.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_floating-labels.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_floating-labels.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_form-check.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-check.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_form-check.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-check.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_form-control.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-control.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_form-control.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-control.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_form-range.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-range.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_form-range.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-range.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_form-select.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-select.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_form-select.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-select.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_form-text.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-text.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_form-text.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_form-text.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_input-group.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_input-group.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_input-group.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_input-group.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_labels.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_labels.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_labels.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_labels.scss diff --git a/app/nossas/design/static/bootstrap/scss/forms/_validation.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/forms/_validation.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/forms/_validation.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/forms/_validation.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_clearfix.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_clearfix.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_clearfix.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_clearfix.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_color-bg.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_color-bg.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_color-bg.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_color-bg.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_colored-links.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_colored-links.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_colored-links.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_colored-links.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_focus-ring.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_focus-ring.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_focus-ring.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_focus-ring.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_icon-link.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_icon-link.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_icon-link.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_icon-link.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_position.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_position.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_position.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_position.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_ratio.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_ratio.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_ratio.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_ratio.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_stacks.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_stacks.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_stacks.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_stacks.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_stretched-link.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_stretched-link.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_stretched-link.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_stretched-link.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_text-truncation.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_text-truncation.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_text-truncation.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_text-truncation.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_visually-hidden.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_visually-hidden.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_visually-hidden.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_visually-hidden.scss diff --git a/app/nossas/design/static/bootstrap/scss/helpers/_vr.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_vr.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/helpers/_vr.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/helpers/_vr.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_alert.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_alert.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_alert.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_alert.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_backdrop.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_backdrop.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_backdrop.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_backdrop.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_banner.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_banner.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_banner.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_banner.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_border-radius.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_border-radius.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_border-radius.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_border-radius.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_box-shadow.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_box-shadow.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_box-shadow.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_box-shadow.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_breakpoints.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_breakpoints.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_breakpoints.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_breakpoints.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_buttons.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_buttons.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_buttons.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_buttons.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_caret.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_caret.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_caret.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_caret.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_clearfix.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_clearfix.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_clearfix.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_clearfix.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_color-mode.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_color-mode.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_color-mode.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_color-mode.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_color-scheme.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_color-scheme.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_color-scheme.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_color-scheme.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_container.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_container.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_container.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_container.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_deprecate.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_deprecate.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_deprecate.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_deprecate.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_forms.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_forms.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_forms.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_forms.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_gradients.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_gradients.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_gradients.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_gradients.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_grid.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_grid.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_grid.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_grid.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_image.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_image.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_image.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_image.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_list-group.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_list-group.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_list-group.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_list-group.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_lists.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_lists.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_lists.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_lists.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_pagination.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_pagination.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_pagination.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_pagination.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_reset-text.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_reset-text.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_reset-text.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_reset-text.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_resize.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_resize.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_resize.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_resize.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_table-variants.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_table-variants.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_table-variants.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_table-variants.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_text-truncate.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_text-truncate.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_text-truncate.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_text-truncate.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_transition.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_transition.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_transition.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_transition.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_utilities.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_utilities.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_utilities.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_utilities.scss diff --git a/app/nossas/design/static/bootstrap/scss/mixins/_visually-hidden.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_visually-hidden.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/mixins/_visually-hidden.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/mixins/_visually-hidden.scss diff --git a/app/nossas/design/static/bootstrap/scss/tests/jasmine.js b/app/org_nossas/nossas/design/static/bootstrap/scss/tests/jasmine.js similarity index 100% rename from app/nossas/design/static/bootstrap/scss/tests/jasmine.js rename to app/org_nossas/nossas/design/static/bootstrap/scss/tests/jasmine.js diff --git a/app/nossas/design/static/bootstrap/scss/tests/mixins/_color-modes.test.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/tests/mixins/_color-modes.test.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/tests/mixins/_color-modes.test.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/tests/mixins/_color-modes.test.scss diff --git a/app/nossas/design/static/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss diff --git a/app/nossas/design/static/bootstrap/scss/tests/mixins/_utilities.test.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/tests/mixins/_utilities.test.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/tests/mixins/_utilities.test.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/tests/mixins/_utilities.test.scss diff --git a/app/nossas/design/static/bootstrap/scss/tests/sass-true/register.js b/app/org_nossas/nossas/design/static/bootstrap/scss/tests/sass-true/register.js similarity index 100% rename from app/nossas/design/static/bootstrap/scss/tests/sass-true/register.js rename to app/org_nossas/nossas/design/static/bootstrap/scss/tests/sass-true/register.js diff --git a/app/nossas/design/static/bootstrap/scss/tests/sass-true/runner.js b/app/org_nossas/nossas/design/static/bootstrap/scss/tests/sass-true/runner.js similarity index 100% rename from app/nossas/design/static/bootstrap/scss/tests/sass-true/runner.js rename to app/org_nossas/nossas/design/static/bootstrap/scss/tests/sass-true/runner.js diff --git a/app/nossas/design/static/bootstrap/scss/tests/utilities/_api.test.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/tests/utilities/_api.test.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/tests/utilities/_api.test.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/tests/utilities/_api.test.scss diff --git a/app/nossas/design/static/bootstrap/scss/utilities/_api.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/utilities/_api.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/utilities/_api.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/utilities/_api.scss diff --git a/app/nossas/design/static/bootstrap/scss/vendor/_rfs.scss b/app/org_nossas/nossas/design/static/bootstrap/scss/vendor/_rfs.scss similarity index 100% rename from app/nossas/design/static/bootstrap/scss/vendor/_rfs.scss rename to app/org_nossas/nossas/design/static/bootstrap/scss/vendor/_rfs.scss diff --git a/app/nossas/design/static/charsleft-widget/css/charsleft.css b/app/org_nossas/nossas/design/static/charsleft-widget/css/charsleft.css similarity index 100% rename from app/nossas/design/static/charsleft-widget/css/charsleft.css rename to app/org_nossas/nossas/design/static/charsleft-widget/css/charsleft.css diff --git a/app/nossas/design/static/charsleft-widget/js/charsleft-textarea.js b/app/org_nossas/nossas/design/static/charsleft-widget/js/charsleft-textarea.js similarity index 100% rename from app/nossas/design/static/charsleft-widget/js/charsleft-textarea.js rename to app/org_nossas/nossas/design/static/charsleft-widget/js/charsleft-textarea.js diff --git a/app/nossas/design/static/charsleft-widget/js/charsleft.js b/app/org_nossas/nossas/design/static/charsleft-widget/js/charsleft.js similarity index 100% rename from app/nossas/design/static/charsleft-widget/js/charsleft.js rename to app/org_nossas/nossas/design/static/charsleft-widget/js/charsleft.js diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Bold.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Bold.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Bold.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Bold.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Bold.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Bold.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Bold.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Bold.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-BoldItalic.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-BoldItalic.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-BoldItalic.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-BoldItalic.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-BoldItalic.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-BoldItalic.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-BoldItalic.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-BoldItalic.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Book.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Book.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Book.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Book.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Book.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Book.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Book.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Book.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-BookItalic.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-BookItalic.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-BookItalic.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-BookItalic.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-BookItalic.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-BookItalic.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-BookItalic.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-BookItalic.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Italic.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Italic.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Italic.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Italic.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Italic.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Italic.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Italic.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Italic.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Light.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Light.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Light.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Light.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Light.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Light.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Light.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Light.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-LightItalic.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-LightItalic.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-LightItalic.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-LightItalic.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-LightItalic.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-LightItalic.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-LightItalic.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-LightItalic.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Regular.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Regular.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Regular.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Regular.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Regular.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Regular.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Regular.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Regular.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Thin.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Thin.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Thin.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Thin.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-Thin.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Thin.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-Thin.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-Thin.woff2 diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-ThinItalic.woff b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-ThinItalic.woff similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-ThinItalic.woff rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-ThinItalic.woff diff --git a/app/nossas/design/static/design/fonts/BebasNeuePro-ThinItalic.woff2 b/app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-ThinItalic.woff2 similarity index 100% rename from app/nossas/design/static/design/fonts/BebasNeuePro-ThinItalic.woff2 rename to app/org_nossas/nossas/design/static/design/fonts/BebasNeuePro-ThinItalic.woff2 diff --git a/app/nossas/design/static/design/icons/icon-amarelo.svg b/app/org_nossas/nossas/design/static/design/icons/icon-amarelo.svg similarity index 100% rename from app/nossas/design/static/design/icons/icon-amarelo.svg rename to app/org_nossas/nossas/design/static/design/icons/icon-amarelo.svg diff --git a/app/nossas/design/static/design/icons/icon-azul.svg b/app/org_nossas/nossas/design/static/design/icons/icon-azul.svg similarity index 100% rename from app/nossas/design/static/design/icons/icon-azul.svg rename to app/org_nossas/nossas/design/static/design/icons/icon-azul.svg diff --git a/app/nossas/design/static/design/icons/icon-laranja.svg b/app/org_nossas/nossas/design/static/design/icons/icon-laranja.svg similarity index 100% rename from app/nossas/design/static/design/icons/icon-laranja.svg rename to app/org_nossas/nossas/design/static/design/icons/icon-laranja.svg diff --git a/app/nossas/design/static/design/icons/icon-rosa.svg b/app/org_nossas/nossas/design/static/design/icons/icon-rosa.svg similarity index 100% rename from app/nossas/design/static/design/icons/icon-rosa.svg rename to app/org_nossas/nossas/design/static/design/icons/icon-rosa.svg diff --git a/app/nossas/design/static/design/icons/icon-verde.svg b/app/org_nossas/nossas/design/static/design/icons/icon-verde.svg similarity index 100% rename from app/nossas/design/static/design/icons/icon-verde.svg rename to app/org_nossas/nossas/design/static/design/icons/icon-verde.svg diff --git a/app/nossas/design/static/design/icons/icon-vermelho.svg b/app/org_nossas/nossas/design/static/design/icons/icon-vermelho.svg similarity index 100% rename from app/nossas/design/static/design/icons/icon-vermelho.svg rename to app/org_nossas/nossas/design/static/design/icons/icon-vermelho.svg diff --git a/app/nossas/design/static/design/img/dummy/exemplo-pessoa-depoimento.png b/app/org_nossas/nossas/design/static/design/img/dummy/exemplo-pessoa-depoimento.png similarity index 100% rename from app/nossas/design/static/design/img/dummy/exemplo-pessoa-depoimento.png rename to app/org_nossas/nossas/design/static/design/img/dummy/exemplo-pessoa-depoimento.png diff --git a/app/nossas/design/static/design/js/megamenu.js b/app/org_nossas/nossas/design/static/design/js/megamenu.js similarity index 100% rename from app/nossas/design/static/design/js/megamenu.js rename to app/org_nossas/nossas/design/static/design/js/megamenu.js diff --git a/app/nossas/design/static/design/scss/accordion.scss b/app/org_nossas/nossas/design/static/design/scss/accordion.scss similarity index 100% rename from app/nossas/design/static/design/scss/accordion.scss rename to app/org_nossas/nossas/design/static/design/scss/accordion.scss diff --git a/app/nossas/design/static/design/scss/box.scss b/app/org_nossas/nossas/design/static/design/scss/box.scss similarity index 100% rename from app/nossas/design/static/design/scss/box.scss rename to app/org_nossas/nossas/design/static/design/scss/box.scss diff --git a/app/nossas/design/static/design/scss/breadcrumb.scss b/app/org_nossas/nossas/design/static/design/scss/breadcrumb.scss similarity index 100% rename from app/nossas/design/static/design/scss/breadcrumb.scss rename to app/org_nossas/nossas/design/static/design/scss/breadcrumb.scss diff --git a/app/nossas/design/static/design/scss/campaign.scss b/app/org_nossas/nossas/design/static/design/scss/campaign.scss similarity index 100% rename from app/nossas/design/static/design/scss/campaign.scss rename to app/org_nossas/nossas/design/static/design/scss/campaign.scss diff --git a/app/nossas/design/static/design/scss/card.scss b/app/org_nossas/nossas/design/static/design/scss/card.scss similarity index 100% rename from app/nossas/design/static/design/scss/card.scss rename to app/org_nossas/nossas/design/static/design/scss/card.scss diff --git a/app/nossas/design/static/design/scss/forms.scss b/app/org_nossas/nossas/design/static/design/scss/forms.scss similarity index 100% rename from app/nossas/design/static/design/scss/forms.scss rename to app/org_nossas/nossas/design/static/design/scss/forms.scss diff --git a/app/nossas/design/static/design/scss/graphics.scss b/app/org_nossas/nossas/design/static/design/scss/graphics.scss similarity index 100% rename from app/nossas/design/static/design/scss/graphics.scss rename to app/org_nossas/nossas/design/static/design/scss/graphics.scss diff --git a/app/nossas/design/static/design/scss/header.scss b/app/org_nossas/nossas/design/static/design/scss/header.scss similarity index 100% rename from app/nossas/design/static/design/scss/header.scss rename to app/org_nossas/nossas/design/static/design/scss/header.scss diff --git a/app/nossas/design/static/design/scss/navbar.scss b/app/org_nossas/nossas/design/static/design/scss/navbar.scss similarity index 100% rename from app/nossas/design/static/design/scss/navbar.scss rename to app/org_nossas/nossas/design/static/design/scss/navbar.scss diff --git a/app/nossas/design/static/design/scss/nossas.scss b/app/org_nossas/nossas/design/static/design/scss/nossas.scss similarity index 100% rename from app/nossas/design/static/design/scss/nossas.scss rename to app/org_nossas/nossas/design/static/design/scss/nossas.scss diff --git a/app/nossas/design/static/design/scss/paginator.scss b/app/org_nossas/nossas/design/static/design/scss/paginator.scss similarity index 100% rename from app/nossas/design/static/design/scss/paginator.scss rename to app/org_nossas/nossas/design/static/design/scss/paginator.scss diff --git a/app/nossas/design/static/design/scss/pdfviewer.scss b/app/org_nossas/nossas/design/static/design/scss/pdfviewer.scss similarity index 100% rename from app/nossas/design/static/design/scss/pdfviewer.scss rename to app/org_nossas/nossas/design/static/design/scss/pdfviewer.scss diff --git a/app/nossas/design/static/design/scss/reset.scss b/app/org_nossas/nossas/design/static/design/scss/reset.scss similarity index 100% rename from app/nossas/design/static/design/scss/reset.scss rename to app/org_nossas/nossas/design/static/design/scss/reset.scss diff --git a/app/nossas/design/static/design/scss/team.scss b/app/org_nossas/nossas/design/static/design/scss/team.scss similarity index 100% rename from app/nossas/design/static/design/scss/team.scss rename to app/org_nossas/nossas/design/static/design/scss/team.scss diff --git a/app/nossas/design/static/design/scss/typography.scss b/app/org_nossas/nossas/design/static/design/scss/typography.scss similarity index 100% rename from app/nossas/design/static/design/scss/typography.scss rename to app/org_nossas/nossas/design/static/design/scss/typography.scss diff --git a/app/nossas/design/static/design/scss/video.scss b/app/org_nossas/nossas/design/static/design/scss/video.scss similarity index 100% rename from app/nossas/design/static/design/scss/video.scss rename to app/org_nossas/nossas/design/static/design/scss/video.scss diff --git a/app/nossas/design/static/design/svg/empatico-header-desktop.svg b/app/org_nossas/nossas/design/static/design/svg/empatico-header-desktop.svg similarity index 100% rename from app/nossas/design/static/design/svg/empatico-header-desktop.svg rename to app/org_nossas/nossas/design/static/design/svg/empatico-header-desktop.svg diff --git a/app/nossas/design/static/design/svg/empatico-header-mobile.svg b/app/org_nossas/nossas/design/static/design/svg/empatico-header-mobile.svg similarity index 100% rename from app/nossas/design/static/design/svg/empatico-header-mobile.svg rename to app/org_nossas/nossas/design/static/design/svg/empatico-header-mobile.svg diff --git a/app/nossas/design/static/design/svg/empatico.svg b/app/org_nossas/nossas/design/static/design/svg/empatico.svg similarity index 100% rename from app/nossas/design/static/design/svg/empatico.svg rename to app/org_nossas/nossas/design/static/design/svg/empatico.svg diff --git a/app/nossas/design/static/design/svg/empty.svg b/app/org_nossas/nossas/design/static/design/svg/empty.svg similarity index 100% rename from app/nossas/design/static/design/svg/empty.svg rename to app/org_nossas/nossas/design/static/design/svg/empty.svg diff --git a/app/nossas/design/static/design/svg/hub-header-desktop.svg b/app/org_nossas/nossas/design/static/design/svg/hub-header-desktop.svg similarity index 100% rename from app/nossas/design/static/design/svg/hub-header-desktop.svg rename to app/org_nossas/nossas/design/static/design/svg/hub-header-desktop.svg diff --git a/app/nossas/design/static/design/svg/hub-header-mobile.svg b/app/org_nossas/nossas/design/static/design/svg/hub-header-mobile.svg similarity index 100% rename from app/nossas/design/static/design/svg/hub-header-mobile.svg rename to app/org_nossas/nossas/design/static/design/svg/hub-header-mobile.svg diff --git a/app/nossas/design/static/design/svg/hub-icon.svg b/app/org_nossas/nossas/design/static/design/svg/hub-icon.svg similarity index 100% rename from app/nossas/design/static/design/svg/hub-icon.svg rename to app/org_nossas/nossas/design/static/design/svg/hub-icon.svg diff --git a/app/nossas/design/static/design/svg/hub.svg b/app/org_nossas/nossas/design/static/design/svg/hub.svg similarity index 100% rename from app/nossas/design/static/design/svg/hub.svg rename to app/org_nossas/nossas/design/static/design/svg/hub.svg diff --git a/app/nossas/design/static/design/svg/impacto-header-desktop.svg b/app/org_nossas/nossas/design/static/design/svg/impacto-header-desktop.svg similarity index 100% rename from app/nossas/design/static/design/svg/impacto-header-desktop.svg rename to app/org_nossas/nossas/design/static/design/svg/impacto-header-desktop.svg diff --git a/app/nossas/design/static/design/svg/impacto-header-mobile.svg b/app/org_nossas/nossas/design/static/design/svg/impacto-header-mobile.svg similarity index 100% rename from app/nossas/design/static/design/svg/impacto-header-mobile.svg rename to app/org_nossas/nossas/design/static/design/svg/impacto-header-mobile.svg diff --git a/app/nossas/design/static/design/svg/impacto.svg b/app/org_nossas/nossas/design/static/design/svg/impacto.svg similarity index 100% rename from app/nossas/design/static/design/svg/impacto.svg rename to app/org_nossas/nossas/design/static/design/svg/impacto.svg diff --git a/app/nossas/design/static/design/svg/impulsionador-icon.svg b/app/org_nossas/nossas/design/static/design/svg/impulsionador-icon.svg similarity index 100% rename from app/nossas/design/static/design/svg/impulsionador-icon.svg rename to app/org_nossas/nossas/design/static/design/svg/impulsionador-icon.svg diff --git a/app/nossas/design/static/design/svg/questionador-header-desktop.svg b/app/org_nossas/nossas/design/static/design/svg/questionador-header-desktop.svg similarity index 100% rename from app/nossas/design/static/design/svg/questionador-header-desktop.svg rename to app/org_nossas/nossas/design/static/design/svg/questionador-header-desktop.svg diff --git a/app/nossas/design/static/design/svg/questionador-header-mobile.svg b/app/org_nossas/nossas/design/static/design/svg/questionador-header-mobile.svg similarity index 100% rename from app/nossas/design/static/design/svg/questionador-header-mobile.svg rename to app/org_nossas/nossas/design/static/design/svg/questionador-header-mobile.svg diff --git a/app/nossas/design/static/design/svg/questionador-icon.svg b/app/org_nossas/nossas/design/static/design/svg/questionador-icon.svg similarity index 100% rename from app/nossas/design/static/design/svg/questionador-icon.svg rename to app/org_nossas/nossas/design/static/design/svg/questionador-icon.svg diff --git a/app/nossas/design/static/design/svg/questionador.svg b/app/org_nossas/nossas/design/static/design/svg/questionador.svg similarity index 100% rename from app/nossas/design/static/design/svg/questionador.svg rename to app/org_nossas/nossas/design/static/design/svg/questionador.svg diff --git a/app/nossas/design/static/pdf.js/build/pdf.mjs b/app/org_nossas/nossas/design/static/pdf.js/build/pdf.mjs similarity index 100% rename from app/nossas/design/static/pdf.js/build/pdf.mjs rename to app/org_nossas/nossas/design/static/pdf.js/build/pdf.mjs diff --git a/app/nossas/design/static/pdf.js/build/pdf.mjs.map b/app/org_nossas/nossas/design/static/pdf.js/build/pdf.mjs.map similarity index 100% rename from app/nossas/design/static/pdf.js/build/pdf.mjs.map rename to app/org_nossas/nossas/design/static/pdf.js/build/pdf.mjs.map diff --git a/app/nossas/design/static/pdf.js/build/pdf.sandbox.mjs b/app/org_nossas/nossas/design/static/pdf.js/build/pdf.sandbox.mjs similarity index 100% rename from app/nossas/design/static/pdf.js/build/pdf.sandbox.mjs rename to app/org_nossas/nossas/design/static/pdf.js/build/pdf.sandbox.mjs diff --git a/app/nossas/design/static/pdf.js/build/pdf.sandbox.mjs.map b/app/org_nossas/nossas/design/static/pdf.js/build/pdf.sandbox.mjs.map similarity index 100% rename from app/nossas/design/static/pdf.js/build/pdf.sandbox.mjs.map rename to app/org_nossas/nossas/design/static/pdf.js/build/pdf.sandbox.mjs.map diff --git a/app/nossas/design/static/pdf.js/build/pdf.worker.mjs b/app/org_nossas/nossas/design/static/pdf.js/build/pdf.worker.mjs similarity index 100% rename from app/nossas/design/static/pdf.js/build/pdf.worker.mjs rename to app/org_nossas/nossas/design/static/pdf.js/build/pdf.worker.mjs diff --git a/app/nossas/design/static/pdf.js/build/pdf.worker.mjs.map b/app/org_nossas/nossas/design/static/pdf.js/build/pdf.worker.mjs.map similarity index 100% rename from app/nossas/design/static/pdf.js/build/pdf.worker.mjs.map rename to app/org_nossas/nossas/design/static/pdf.js/build/pdf.worker.mjs.map diff --git a/app/nossas/design/templates/design/admin/ui_cms_plugin_change_form.html b/app/org_nossas/nossas/design/templates/design/admin/ui_cms_plugin_change_form.html similarity index 100% rename from app/nossas/design/templates/design/admin/ui_cms_plugin_change_form.html rename to app/org_nossas/nossas/design/templates/design/admin/ui_cms_plugin_change_form.html diff --git a/app/nossas/design/templates/design/fields/background_select.html b/app/org_nossas/nossas/design/templates/design/fields/background_select.html similarity index 100% rename from app/nossas/design/templates/design/fields/background_select.html rename to app/org_nossas/nossas/design/templates/design/fields/background_select.html diff --git a/app/nossas/design/templates/design/fields/background_select_option.html b/app/org_nossas/nossas/design/templates/design/fields/background_select_option.html similarity index 100% rename from app/nossas/design/templates/design/fields/background_select_option.html rename to app/org_nossas/nossas/design/templates/design/fields/background_select_option.html diff --git a/app/nossas/design/templates/design/fields/graphic_element_select.html b/app/org_nossas/nossas/design/templates/design/fields/graphic_element_select.html similarity index 100% rename from app/nossas/design/templates/design/fields/graphic_element_select.html rename to app/org_nossas/nossas/design/templates/design/fields/graphic_element_select.html diff --git a/app/nossas/design/templates/design/fields/graphic_element_select_option.html b/app/org_nossas/nossas/design/templates/design/fields/graphic_element_select_option.html similarity index 100% rename from app/nossas/design/templates/design/fields/graphic_element_select_option.html rename to app/org_nossas/nossas/design/templates/design/fields/graphic_element_select_option.html diff --git a/app/nossas/design/templates/design/fields/graphic_icon_select_option.html b/app/org_nossas/nossas/design/templates/design/fields/graphic_icon_select_option.html similarity index 100% rename from app/nossas/design/templates/design/fields/graphic_icon_select_option.html rename to app/org_nossas/nossas/design/templates/design/fields/graphic_icon_select_option.html diff --git a/app/nossas/design/templates/design/fields/multiple_svg_select.html b/app/org_nossas/nossas/design/templates/design/fields/multiple_svg_select.html similarity index 100% rename from app/nossas/design/templates/design/fields/multiple_svg_select.html rename to app/org_nossas/nossas/design/templates/design/fields/multiple_svg_select.html diff --git a/app/nossas/design/templates/design/fields/multiple_svg_select_option.html b/app/org_nossas/nossas/design/templates/design/fields/multiple_svg_select_option.html similarity index 100% rename from app/nossas/design/templates/design/fields/multiple_svg_select_option.html rename to app/org_nossas/nossas/design/templates/design/fields/multiple_svg_select_option.html diff --git a/app/nossas/design/templates/design/fields/svg_select.html b/app/org_nossas/nossas/design/templates/design/fields/svg_select.html similarity index 100% rename from app/nossas/design/templates/design/fields/svg_select.html rename to app/org_nossas/nossas/design/templates/design/fields/svg_select.html diff --git a/app/nossas/design/templates/design/fields/svg_select_option.html b/app/org_nossas/nossas/design/templates/design/fields/svg_select_option.html similarity index 100% rename from app/nossas/design/templates/design/fields/svg_select_option.html rename to app/org_nossas/nossas/design/templates/design/fields/svg_select_option.html diff --git a/app/nossas/design/templates/design/icones/ativista-circle.svg b/app/org_nossas/nossas/design/templates/design/icones/ativista-circle.svg similarity index 100% rename from app/nossas/design/templates/design/icones/ativista-circle.svg rename to app/org_nossas/nossas/design/templates/design/icones/ativista-circle.svg diff --git a/app/nossas/design/templates/design/icones/ativista-rect.svg b/app/org_nossas/nossas/design/templates/design/icones/ativista-rect.svg similarity index 100% rename from app/nossas/design/templates/design/icones/ativista-rect.svg rename to app/org_nossas/nossas/design/templates/design/icones/ativista-rect.svg diff --git a/app/nossas/design/templates/design/icones/ativista.svg b/app/org_nossas/nossas/design/templates/design/icones/ativista.svg similarity index 100% rename from app/nossas/design/templates/design/icones/ativista.svg rename to app/org_nossas/nossas/design/templates/design/icones/ativista.svg diff --git a/app/nossas/design/templates/design/icones/coletivo-circle.svg b/app/org_nossas/nossas/design/templates/design/icones/coletivo-circle.svg similarity index 100% rename from app/nossas/design/templates/design/icones/coletivo-circle.svg rename to app/org_nossas/nossas/design/templates/design/icones/coletivo-circle.svg diff --git a/app/nossas/design/templates/design/icones/coletivo-rect.svg b/app/org_nossas/nossas/design/templates/design/icones/coletivo-rect.svg similarity index 100% rename from app/nossas/design/templates/design/icones/coletivo-rect.svg rename to app/org_nossas/nossas/design/templates/design/icones/coletivo-rect.svg diff --git a/app/nossas/design/templates/design/icones/coletivo.svg b/app/org_nossas/nossas/design/templates/design/icones/coletivo.svg similarity index 100% rename from app/nossas/design/templates/design/icones/coletivo.svg rename to app/org_nossas/nossas/design/templates/design/icones/coletivo.svg diff --git a/app/nossas/design/templates/design/icones/empatico-circle.svg b/app/org_nossas/nossas/design/templates/design/icones/empatico-circle.svg similarity index 100% rename from app/nossas/design/templates/design/icones/empatico-circle.svg rename to app/org_nossas/nossas/design/templates/design/icones/empatico-circle.svg diff --git a/app/nossas/design/templates/design/icones/empatico-rect.svg b/app/org_nossas/nossas/design/templates/design/icones/empatico-rect.svg similarity index 100% rename from app/nossas/design/templates/design/icones/empatico-rect.svg rename to app/org_nossas/nossas/design/templates/design/icones/empatico-rect.svg diff --git a/app/nossas/design/templates/design/icones/empatico.svg b/app/org_nossas/nossas/design/templates/design/icones/empatico.svg similarity index 100% rename from app/nossas/design/templates/design/icones/empatico.svg rename to app/org_nossas/nossas/design/templates/design/icones/empatico.svg diff --git a/app/nossas/design/templates/design/icones/empty.svg b/app/org_nossas/nossas/design/templates/design/icones/empty.svg similarity index 100% rename from app/nossas/design/templates/design/icones/empty.svg rename to app/org_nossas/nossas/design/templates/design/icones/empty.svg diff --git a/app/nossas/design/templates/design/icones/hub-circle.svg b/app/org_nossas/nossas/design/templates/design/icones/hub-circle.svg similarity index 100% rename from app/nossas/design/templates/design/icones/hub-circle.svg rename to app/org_nossas/nossas/design/templates/design/icones/hub-circle.svg diff --git a/app/nossas/design/templates/design/icones/hub-rect.svg b/app/org_nossas/nossas/design/templates/design/icones/hub-rect.svg similarity index 100% rename from app/nossas/design/templates/design/icones/hub-rect.svg rename to app/org_nossas/nossas/design/templates/design/icones/hub-rect.svg diff --git a/app/nossas/design/templates/design/icones/hub.svg b/app/org_nossas/nossas/design/templates/design/icones/hub.svg similarity index 100% rename from app/nossas/design/templates/design/icones/hub.svg rename to app/org_nossas/nossas/design/templates/design/icones/hub.svg diff --git a/app/nossas/design/templates/design/icones/impacto-circle.svg b/app/org_nossas/nossas/design/templates/design/icones/impacto-circle.svg similarity index 100% rename from app/nossas/design/templates/design/icones/impacto-circle.svg rename to app/org_nossas/nossas/design/templates/design/icones/impacto-circle.svg diff --git a/app/nossas/design/templates/design/icones/impacto-rect.svg b/app/org_nossas/nossas/design/templates/design/icones/impacto-rect.svg similarity index 100% rename from app/nossas/design/templates/design/icones/impacto-rect.svg rename to app/org_nossas/nossas/design/templates/design/icones/impacto-rect.svg diff --git a/app/nossas/design/templates/design/icones/impacto.svg b/app/org_nossas/nossas/design/templates/design/icones/impacto.svg similarity index 100% rename from app/nossas/design/templates/design/icones/impacto.svg rename to app/org_nossas/nossas/design/templates/design/icones/impacto.svg diff --git a/app/nossas/design/templates/design/icones/impulsionador-circle.svg b/app/org_nossas/nossas/design/templates/design/icones/impulsionador-circle.svg similarity index 100% rename from app/nossas/design/templates/design/icones/impulsionador-circle.svg rename to app/org_nossas/nossas/design/templates/design/icones/impulsionador-circle.svg diff --git a/app/nossas/design/templates/design/icones/impulsionador-rect.svg b/app/org_nossas/nossas/design/templates/design/icones/impulsionador-rect.svg similarity index 100% rename from app/nossas/design/templates/design/icones/impulsionador-rect.svg rename to app/org_nossas/nossas/design/templates/design/icones/impulsionador-rect.svg diff --git a/app/nossas/design/templates/design/icones/impulsionador.svg b/app/org_nossas/nossas/design/templates/design/icones/impulsionador.svg similarity index 100% rename from app/nossas/design/templates/design/icones/impulsionador.svg rename to app/org_nossas/nossas/design/templates/design/icones/impulsionador.svg diff --git a/app/nossas/design/templates/design/icones/mobilizador-circle.svg b/app/org_nossas/nossas/design/templates/design/icones/mobilizador-circle.svg similarity index 100% rename from app/nossas/design/templates/design/icones/mobilizador-circle.svg rename to app/org_nossas/nossas/design/templates/design/icones/mobilizador-circle.svg diff --git a/app/nossas/design/templates/design/icones/mobilizador-rect.svg b/app/org_nossas/nossas/design/templates/design/icones/mobilizador-rect.svg similarity index 100% rename from app/nossas/design/templates/design/icones/mobilizador-rect.svg rename to app/org_nossas/nossas/design/templates/design/icones/mobilizador-rect.svg diff --git a/app/nossas/design/templates/design/icones/mobilizador.svg b/app/org_nossas/nossas/design/templates/design/icones/mobilizador.svg similarity index 100% rename from app/nossas/design/templates/design/icones/mobilizador.svg rename to app/org_nossas/nossas/design/templates/design/icones/mobilizador.svg diff --git a/app/nossas/design/templates/design/icones/questionador-circle.svg b/app/org_nossas/nossas/design/templates/design/icones/questionador-circle.svg similarity index 100% rename from app/nossas/design/templates/design/icones/questionador-circle.svg rename to app/org_nossas/nossas/design/templates/design/icones/questionador-circle.svg diff --git a/app/nossas/design/templates/design/icones/questionador-rect.svg b/app/org_nossas/nossas/design/templates/design/icones/questionador-rect.svg similarity index 100% rename from app/nossas/design/templates/design/icones/questionador-rect.svg rename to app/org_nossas/nossas/design/templates/design/icones/questionador-rect.svg diff --git a/app/nossas/design/templates/design/icones/questionador.svg b/app/org_nossas/nossas/design/templates/design/icones/questionador.svg similarity index 100% rename from app/nossas/design/templates/design/icones/questionador.svg rename to app/org_nossas/nossas/design/templates/design/icones/questionador.svg diff --git a/app/nossas/design/templates/design/svg/page-indicator.svg b/app/org_nossas/nossas/design/templates/design/svg/page-indicator.svg similarity index 100% rename from app/nossas/design/templates/design/svg/page-indicator.svg rename to app/org_nossas/nossas/design/templates/design/svg/page-indicator.svg diff --git a/app/nossas/design/templates/design/svg/page-next.svg b/app/org_nossas/nossas/design/templates/design/svg/page-next.svg similarity index 100% rename from app/nossas/design/templates/design/svg/page-next.svg rename to app/org_nossas/nossas/design/templates/design/svg/page-next.svg diff --git a/app/nossas/design/templates/design/svg/page-previous.svg b/app/org_nossas/nossas/design/templates/design/svg/page-previous.svg similarity index 100% rename from app/nossas/design/templates/design/svg/page-previous.svg rename to app/org_nossas/nossas/design/templates/design/svg/page-previous.svg diff --git a/app/nossas/design/templates/djangocms_frontend/admin/base.html b/app/org_nossas/nossas/design/templates/djangocms_frontend/admin/base.html similarity index 100% rename from app/nossas/design/templates/djangocms_frontend/admin/base.html rename to app/org_nossas/nossas/design/templates/djangocms_frontend/admin/base.html diff --git a/app/nossas/design/templates/djangocms_picture/background/picture.html b/app/org_nossas/nossas/design/templates/djangocms_picture/background/picture.html similarity index 100% rename from app/nossas/design/templates/djangocms_picture/background/picture.html rename to app/org_nossas/nossas/design/templates/djangocms_picture/background/picture.html diff --git a/app/nossas/design/templates/djangocms_picture/default/picture.html b/app/org_nossas/nossas/design/templates/djangocms_picture/default/picture.html similarity index 100% rename from app/nossas/design/templates/djangocms_picture/default/picture.html rename to app/org_nossas/nossas/design/templates/djangocms_picture/default/picture.html diff --git a/app/nossas/design/templates/djangocms_picture/full_width/picture.html b/app/org_nossas/nossas/design/templates/djangocms_picture/full_width/picture.html similarity index 100% rename from app/nossas/design/templates/djangocms_picture/full_width/picture.html rename to app/org_nossas/nossas/design/templates/djangocms_picture/full_width/picture.html diff --git a/app/nossas/design/templates/djangocms_video/default/video_player.html b/app/org_nossas/nossas/design/templates/djangocms_video/default/video_player.html similarity index 100% rename from app/nossas/design/templates/djangocms_video/default/video_player.html rename to app/org_nossas/nossas/design/templates/djangocms_video/default/video_player.html diff --git a/app/nossas/design/templates/nossas/base.html b/app/org_nossas/nossas/design/templates/nossas/base.html similarity index 100% rename from app/nossas/design/templates/nossas/base.html rename to app/org_nossas/nossas/design/templates/nossas/base.html diff --git a/app/nossas/design/templates/nossas/footer_menu.html b/app/org_nossas/nossas/design/templates/nossas/footer_menu.html similarity index 100% rename from app/nossas/design/templates/nossas/footer_menu.html rename to app/org_nossas/nossas/design/templates/nossas/footer_menu.html diff --git a/app/nossas/design/templates/nossas/footer_submenu.html b/app/org_nossas/nossas/design/templates/nossas/footer_submenu.html similarity index 100% rename from app/nossas/design/templates/nossas/footer_submenu.html rename to app/org_nossas/nossas/design/templates/nossas/footer_submenu.html diff --git a/app/nossas/design/templates/nossas/graphics/cobogo_rosa.svg b/app/org_nossas/nossas/design/templates/nossas/graphics/cobogo_rosa.svg similarity index 100% rename from app/nossas/design/templates/nossas/graphics/cobogo_rosa.svg rename to app/org_nossas/nossas/design/templates/nossas/graphics/cobogo_rosa.svg diff --git a/app/nossas/design/templates/nossas/graphics/group_18.svg b/app/org_nossas/nossas/design/templates/nossas/graphics/group_18.svg similarity index 100% rename from app/nossas/design/templates/nossas/graphics/group_18.svg rename to app/org_nossas/nossas/design/templates/nossas/graphics/group_18.svg diff --git a/app/nossas/design/templates/nossas/graphics/group_20.svg b/app/org_nossas/nossas/design/templates/nossas/graphics/group_20.svg similarity index 100% rename from app/nossas/design/templates/nossas/graphics/group_20.svg rename to app/org_nossas/nossas/design/templates/nossas/graphics/group_20.svg diff --git a/app/nossas/design/templates/nossas/graphics/group_21.svg b/app/org_nossas/nossas/design/templates/nossas/graphics/group_21.svg similarity index 100% rename from app/nossas/design/templates/nossas/graphics/group_21.svg rename to app/org_nossas/nossas/design/templates/nossas/graphics/group_21.svg diff --git a/app/nossas/design/templates/nossas/graphics/group_30.svg b/app/org_nossas/nossas/design/templates/nossas/graphics/group_30.svg similarity index 100% rename from app/nossas/design/templates/nossas/graphics/group_30.svg rename to app/org_nossas/nossas/design/templates/nossas/graphics/group_30.svg diff --git a/app/nossas/design/templates/nossas/graphics/group_30_90deg.svg b/app/org_nossas/nossas/design/templates/nossas/graphics/group_30_90deg.svg similarity index 100% rename from app/nossas/design/templates/nossas/graphics/group_30_90deg.svg rename to app/org_nossas/nossas/design/templates/nossas/graphics/group_30_90deg.svg diff --git a/app/nossas/design/templates/nossas/home.html b/app/org_nossas/nossas/design/templates/nossas/home.html similarity index 100% rename from app/nossas/design/templates/nossas/home.html rename to app/org_nossas/nossas/design/templates/nossas/home.html diff --git a/app/nossas/design/templates/nossas/includes/breadcrumb.html b/app/org_nossas/nossas/design/templates/nossas/includes/breadcrumb.html similarity index 100% rename from app/nossas/design/templates/nossas/includes/breadcrumb.html rename to app/org_nossas/nossas/design/templates/nossas/includes/breadcrumb.html diff --git a/app/nossas/design/templates/nossas/includes/i18n.html b/app/org_nossas/nossas/design/templates/nossas/includes/i18n.html similarity index 100% rename from app/nossas/design/templates/nossas/includes/i18n.html rename to app/org_nossas/nossas/design/templates/nossas/includes/i18n.html diff --git a/app/nossas/design/templates/nossas/includes/menu/button.html b/app/org_nossas/nossas/design/templates/nossas/includes/menu/button.html similarity index 100% rename from app/nossas/design/templates/nossas/includes/menu/button.html rename to app/org_nossas/nossas/design/templates/nossas/includes/menu/button.html diff --git a/app/nossas/design/templates/nossas/includes/menu/content.html b/app/org_nossas/nossas/design/templates/nossas/includes/menu/content.html similarity index 100% rename from app/nossas/design/templates/nossas/includes/menu/content.html rename to app/org_nossas/nossas/design/templates/nossas/includes/menu/content.html diff --git a/app/nossas/design/templates/nossas/mega_menu.html b/app/org_nossas/nossas/design/templates/nossas/mega_menu.html similarity index 100% rename from app/nossas/design/templates/nossas/mega_menu.html rename to app/org_nossas/nossas/design/templates/nossas/mega_menu.html diff --git a/app/nossas/design/templates/nossas/menu.html b/app/org_nossas/nossas/design/templates/nossas/menu.html similarity index 100% rename from app/nossas/design/templates/nossas/menu.html rename to app/org_nossas/nossas/design/templates/nossas/menu.html diff --git a/app/nossas/design/templates/nossas/page.html b/app/org_nossas/nossas/design/templates/nossas/page.html similarity index 100% rename from app/nossas/design/templates/nossas/page.html rename to app/org_nossas/nossas/design/templates/nossas/page.html diff --git a/app/nossas/design/templates/nossas/submenu.html b/app/org_nossas/nossas/design/templates/nossas/submenu.html similarity index 100% rename from app/nossas/design/templates/nossas/submenu.html rename to app/org_nossas/nossas/design/templates/nossas/submenu.html diff --git a/app/nossas/design/templates/nossas/svg/alert-circle.svg b/app/org_nossas/nossas/design/templates/nossas/svg/alert-circle.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/alert-circle.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/alert-circle.svg diff --git a/app/nossas/design/templates/nossas/svg/alert-triangle.svg b/app/org_nossas/nossas/design/templates/nossas/svg/alert-triangle.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/alert-triangle.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/alert-triangle.svg diff --git a/app/nossas/design/templates/nossas/svg/award.svg b/app/org_nossas/nossas/design/templates/nossas/svg/award.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/award.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/award.svg diff --git a/app/nossas/design/templates/nossas/svg/brand-lg.svg b/app/org_nossas/nossas/design/templates/nossas/svg/brand-lg.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/brand-lg.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/brand-lg.svg diff --git a/app/nossas/design/templates/nossas/svg/brand.svg b/app/org_nossas/nossas/design/templates/nossas/svg/brand.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/brand.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/brand.svg diff --git a/app/nossas/design/templates/nossas/svg/chevron-down.svg b/app/org_nossas/nossas/design/templates/nossas/svg/chevron-down.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/chevron-down.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/chevron-down.svg diff --git a/app/nossas/design/templates/nossas/svg/circle-close.svg b/app/org_nossas/nossas/design/templates/nossas/svg/circle-close.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/circle-close.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/circle-close.svg diff --git a/app/nossas/design/templates/nossas/svg/clock.svg b/app/org_nossas/nossas/design/templates/nossas/svg/clock.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/clock.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/clock.svg diff --git a/app/nossas/design/templates/nossas/svg/dollar-sign.svg b/app/org_nossas/nossas/design/templates/nossas/svg/dollar-sign.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/dollar-sign.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/dollar-sign.svg diff --git a/app/nossas/design/templates/nossas/svg/facebook.svg b/app/org_nossas/nossas/design/templates/nossas/svg/facebook.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/facebook.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/facebook.svg diff --git a/app/nossas/design/templates/nossas/svg/instagram.svg b/app/org_nossas/nossas/design/templates/nossas/svg/instagram.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/instagram.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/instagram.svg diff --git a/app/nossas/design/templates/nossas/svg/linkedin.svg b/app/org_nossas/nossas/design/templates/nossas/svg/linkedin.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/linkedin.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/linkedin.svg diff --git a/app/nossas/design/templates/nossas/svg/list.svg b/app/org_nossas/nossas/design/templates/nossas/svg/list.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/list.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/list.svg diff --git a/app/nossas/design/templates/nossas/svg/menu.svg b/app/org_nossas/nossas/design/templates/nossas/svg/menu.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/menu.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/menu.svg diff --git a/app/nossas/design/templates/nossas/svg/search.svg b/app/org_nossas/nossas/design/templates/nossas/svg/search.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/search.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/search.svg diff --git a/app/nossas/design/templates/nossas/svg/twitter.svg b/app/org_nossas/nossas/design/templates/nossas/svg/twitter.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/twitter.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/twitter.svg diff --git a/app/nossas/design/templates/nossas/svg/whatsapp.svg b/app/org_nossas/nossas/design/templates/nossas/svg/whatsapp.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/whatsapp.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/whatsapp.svg diff --git a/app/nossas/design/templates/nossas/svg/youtube.svg b/app/org_nossas/nossas/design/templates/nossas/svg/youtube.svg similarity index 100% rename from app/nossas/design/templates/nossas/svg/youtube.svg rename to app/org_nossas/nossas/design/templates/nossas/svg/youtube.svg diff --git a/app/org_nossas/nossas/design/templatetags/__init__.py b/app/org_nossas/nossas/design/templatetags/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/design/templatetags/design_tags.py b/app/org_nossas/nossas/design/templatetags/design_tags.py similarity index 100% rename from app/nossas/design/templatetags/design_tags.py rename to app/org_nossas/nossas/design/templatetags/design_tags.py diff --git a/app/nossas/design/widgets.py b/app/org_nossas/nossas/design/widgets.py similarity index 100% rename from app/nossas/design/widgets.py rename to app/org_nossas/nossas/design/widgets.py diff --git a/app/nossas/locale/en/LC_MESSAGES/django.mo b/app/org_nossas/nossas/locale/en/LC_MESSAGES/django.mo similarity index 100% rename from app/nossas/locale/en/LC_MESSAGES/django.mo rename to app/org_nossas/nossas/locale/en/LC_MESSAGES/django.mo diff --git a/app/nossas/locale/en/LC_MESSAGES/django.po b/app/org_nossas/nossas/locale/en/LC_MESSAGES/django.po similarity index 100% rename from app/nossas/locale/en/LC_MESSAGES/django.po rename to app/org_nossas/nossas/locale/en/LC_MESSAGES/django.po diff --git a/app/nossas/migrations/0001_initial.py b/app/org_nossas/nossas/migrations/0001_initial.py similarity index 100% rename from app/nossas/migrations/0001_initial.py rename to app/org_nossas/nossas/migrations/0001_initial.py diff --git a/app/nossas/migrations/0002_alter_styleguidemodel_name.py b/app/org_nossas/nossas/migrations/0002_alter_styleguidemodel_name.py similarity index 100% rename from app/nossas/migrations/0002_alter_styleguidemodel_name.py rename to app/org_nossas/nossas/migrations/0002_alter_styleguidemodel_name.py diff --git a/app/org_nossas/nossas/migrations/__init__.py b/app/org_nossas/nossas/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/models.py b/app/org_nossas/nossas/models.py similarity index 100% rename from app/nossas/models.py rename to app/org_nossas/nossas/models.py diff --git a/app/org_nossas/nossas/plugins/__init__.py b/app/org_nossas/nossas/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/plugins/cms_plugins/__init__.py b/app/org_nossas/nossas/plugins/cms_plugins/__init__.py similarity index 100% rename from app/nossas/plugins/cms_plugins/__init__.py rename to app/org_nossas/nossas/plugins/cms_plugins/__init__.py diff --git a/app/nossas/plugins/cms_plugins/accordion.py b/app/org_nossas/nossas/plugins/cms_plugins/accordion.py similarity index 97% rename from app/nossas/plugins/cms_plugins/accordion.py rename to app/org_nossas/nossas/plugins/cms_plugins/accordion.py index c6cebeb6..d371248b 100644 --- a/app/nossas/plugins/cms_plugins/accordion.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/accordion.py @@ -3,7 +3,7 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from nossas.plugins.models.accordionmodel import AccordionItem +from org_nossas.nossas.plugins.models.accordionmodel import AccordionItem @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/box.py b/app/org_nossas/nossas/plugins/cms_plugins/box.py similarity index 95% rename from app/nossas/plugins/cms_plugins/box.py rename to app/org_nossas/nossas/plugins/cms_plugins/box.py index 36a1872e..f875dfb0 100644 --- a/app/nossas/plugins/cms_plugins/box.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/box.py @@ -4,9 +4,9 @@ from cms.plugin_pool import plugin_pool from djangocms_text_ckeditor.utils import plugin_to_tag -from nossas.design.cms_plugins import UICMSPluginBase -from nossas.plugins.models.boxmodel import Box -from nossas.plugins.forms.boxform import BoxPluginForm, LayoutBoxPluginForm +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.plugins.models.boxmodel import Box +from org_nossas.nossas.plugins.forms.boxform import BoxPluginForm, LayoutBoxPluginForm @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/breadcrumb.py b/app/org_nossas/nossas/plugins/cms_plugins/breadcrumb.py similarity index 86% rename from app/nossas/plugins/cms_plugins/breadcrumb.py rename to app/org_nossas/nossas/plugins/cms_plugins/breadcrumb.py index 318e27f8..f9c152e9 100644 --- a/app/nossas/plugins/cms_plugins/breadcrumb.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/breadcrumb.py @@ -1,7 +1,7 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase from ..forms.breadcrumbform import BreadcrumbPluginForm from ..models.breadcrumbmodel import Breadcrumb diff --git a/app/nossas/plugins/cms_plugins/breakline.py b/app/org_nossas/nossas/plugins/cms_plugins/breakline.py similarity index 100% rename from app/nossas/plugins/cms_plugins/breakline.py rename to app/org_nossas/nossas/plugins/cms_plugins/breakline.py diff --git a/app/nossas/plugins/cms_plugins/button.py b/app/org_nossas/nossas/plugins/cms_plugins/button.py similarity index 81% rename from app/nossas/plugins/cms_plugins/button.py rename to app/org_nossas/nossas/plugins/cms_plugins/button.py index 782115cd..41af6e7f 100644 --- a/app/nossas/plugins/cms_plugins/button.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/button.py @@ -4,7 +4,7 @@ from djangocms_frontend.contrib.link.cms_plugins import LinkPlugin -from nossas.plugins.forms.buttonform import LinkButtonForm +from org_nossas.nossas.plugins.forms.buttonform import LinkButtonForm @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/card.py b/app/org_nossas/nossas/plugins/cms_plugins/card.py similarity index 97% rename from app/nossas/plugins/cms_plugins/card.py rename to app/org_nossas/nossas/plugins/cms_plugins/card.py index 638554cd..a5c2294f 100644 --- a/app/nossas/plugins/cms_plugins/card.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/card.py @@ -2,7 +2,7 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase from ..models.cardmodel import Card from ..forms.cardform import CreateCardPluginForm, CardPluginForm diff --git a/app/nossas/plugins/cms_plugins/container.py b/app/org_nossas/nossas/plugins/cms_plugins/container.py similarity index 84% rename from app/nossas/plugins/cms_plugins/container.py rename to app/org_nossas/nossas/plugins/cms_plugins/container.py index f5936eb4..996d533d 100644 --- a/app/nossas/plugins/cms_plugins/container.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/container.py @@ -2,10 +2,10 @@ from cms.plugin_pool import plugin_pool -from nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase -from nossas.plugins.models.containermodel import Container -from nossas.plugins.forms.containerform import ContainerPluginForm +from org_nossas.nossas.plugins.models.containermodel import Container +from org_nossas.nossas.plugins.forms.containerform import ContainerPluginForm @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/footer.py b/app/org_nossas/nossas/plugins/cms_plugins/footer.py similarity index 100% rename from app/nossas/plugins/cms_plugins/footer.py rename to app/org_nossas/nossas/plugins/cms_plugins/footer.py diff --git a/app/nossas/plugins/cms_plugins/gallery.py b/app/org_nossas/nossas/plugins/cms_plugins/gallery.py similarity index 100% rename from app/nossas/plugins/cms_plugins/gallery.py rename to app/org_nossas/nossas/plugins/cms_plugins/gallery.py diff --git a/app/nossas/plugins/cms_plugins/grid.py b/app/org_nossas/nossas/plugins/cms_plugins/grid.py similarity index 94% rename from app/nossas/plugins/cms_plugins/grid.py rename to app/org_nossas/nossas/plugins/cms_plugins/grid.py index 83516f04..09fa17c6 100644 --- a/app/nossas/plugins/cms_plugins/grid.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/grid.py @@ -3,7 +3,7 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from nossas.plugins.models.gridmodel import Grid, Column, layout_dict +from org_nossas.nossas.plugins.models.gridmodel import Grid, Column, layout_dict @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/header.py b/app/org_nossas/nossas/plugins/cms_plugins/header.py similarity index 88% rename from app/nossas/plugins/cms_plugins/header.py rename to app/org_nossas/nossas/plugins/cms_plugins/header.py index 6cb75841..5b4fc627 100644 --- a/app/nossas/plugins/cms_plugins/header.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/header.py @@ -3,10 +3,10 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase -from nossas.plugins.models.headermodel import Header, HeaderImage -from nossas.plugins.forms.headerform import HeaderPluginForm, HeaderImagePluginForm +from org_nossas.nossas.plugins.models.headermodel import Header, HeaderImage +from org_nossas.nossas.plugins.forms.headerform import HeaderPluginForm, HeaderImagePluginForm @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/headline.py b/app/org_nossas/nossas/plugins/cms_plugins/headline.py similarity index 60% rename from app/nossas/plugins/cms_plugins/headline.py rename to app/org_nossas/nossas/plugins/cms_plugins/headline.py index 93860115..07003bcc 100644 --- a/app/nossas/plugins/cms_plugins/headline.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/headline.py @@ -1,8 +1,8 @@ from cms.plugin_pool import plugin_pool -from nossas.design.cms_plugins import UICMSPluginBase -from nossas.plugins.models.headlinemodel import Headline -from nossas.plugins.forms.headlineform import HeadlineForm +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.plugins.models.headlinemodel import Headline +from org_nossas.nossas.plugins.forms.headlineform import HeadlineForm @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/navbar.py b/app/org_nossas/nossas/plugins/cms_plugins/navbar.py similarity index 59% rename from app/nossas/plugins/cms_plugins/navbar.py rename to app/org_nossas/nossas/plugins/cms_plugins/navbar.py index b3d04d5e..95896722 100644 --- a/app/nossas/plugins/cms_plugins/navbar.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/navbar.py @@ -1,9 +1,9 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from nossas.design.cms_plugins import UICMSPluginBase -from nossas.plugins.models.navbarmodel import Navbar -from nossas.plugins.forms.navbarform import NavbarPluginForm +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.plugins.models.navbarmodel import Navbar +from org_nossas.nossas.plugins.forms.navbarform import NavbarPluginForm @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/pdf.py b/app/org_nossas/nossas/plugins/cms_plugins/pdf.py similarity index 100% rename from app/nossas/plugins/cms_plugins/pdf.py rename to app/org_nossas/nossas/plugins/cms_plugins/pdf.py diff --git a/app/nossas/plugins/cms_plugins/slider.py b/app/org_nossas/nossas/plugins/cms_plugins/slider.py similarity index 88% rename from app/nossas/plugins/cms_plugins/slider.py rename to app/org_nossas/nossas/plugins/cms_plugins/slider.py index e2e593fb..e8fe9b79 100644 --- a/app/nossas/plugins/cms_plugins/slider.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/slider.py @@ -3,9 +3,9 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool -from nossas.design.cms_plugins import UICMSPluginBase -from nossas.plugins.models.slidermodel import FullPageSlider -from nossas.plugins.forms.sliderform import FullPageSliderPluginForm +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.plugins.models.slidermodel import FullPageSlider +from org_nossas.nossas.plugins.forms.sliderform import FullPageSliderPluginForm @plugin_pool.register_plugin diff --git a/app/nossas/plugins/cms_plugins/socialshare.py b/app/org_nossas/nossas/plugins/cms_plugins/socialshare.py similarity index 91% rename from app/nossas/plugins/cms_plugins/socialshare.py rename to app/org_nossas/nossas/plugins/cms_plugins/socialshare.py index 168537ef..3309f05c 100644 --- a/app/nossas/plugins/cms_plugins/socialshare.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/socialshare.py @@ -1,7 +1,7 @@ from cms.api import add_plugin from cms.plugin_pool import plugin_pool -from nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase from django.utils.translation import gettext_lazy as _ diff --git a/app/nossas/plugins/cms_plugins/video.py b/app/org_nossas/nossas/plugins/cms_plugins/video.py similarity index 95% rename from app/nossas/plugins/cms_plugins/video.py rename to app/org_nossas/nossas/plugins/cms_plugins/video.py index cdf324bf..257c740f 100644 --- a/app/nossas/plugins/cms_plugins/video.py +++ b/app/org_nossas/nossas/plugins/cms_plugins/video.py @@ -4,7 +4,7 @@ from djangocms_video.cms_plugins import VideoPlayerPlugin as BaseVideoPlayerPlugin from djangocms_video.forms import VideoPlayerPluginForm as BaseVideoPlayerPluginForm -from nossas.design.cms_plugins import UICMSPluginBase +from org_nossas.nossas.design.cms_plugins import UICMSPluginBase plugin_pool.unregister_plugin(BaseVideoPlayerPlugin) diff --git a/app/org_nossas/nossas/plugins/forms/__init__.py b/app/org_nossas/nossas/plugins/forms/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/plugins/forms/boxform.py b/app/org_nossas/nossas/plugins/forms/boxform.py similarity index 82% rename from app/nossas/plugins/forms/boxform.py rename to app/org_nossas/nossas/plugins/forms/boxform.py index 5cef1e4f..8a3aff3e 100644 --- a/app/nossas/plugins/forms/boxform.py +++ b/app/org_nossas/nossas/plugins/forms/boxform.py @@ -1,9 +1,9 @@ from django import forms from django.db.models import TextChoices -from nossas.design.forms import UIBackgroundFormMixin, CORES_TEMAS, UIBackgroundSelect +from org_nossas.nossas.design.forms import UIBackgroundFormMixin, CORES_TEMAS, UIBackgroundSelect -from nossas.plugins.models.boxmodel import Box +from org_nossas.nossas.plugins.models.boxmodel import Box class BoxLayoutChoices(TextChoices): diff --git a/app/nossas/plugins/forms/breadcrumbform.py b/app/org_nossas/nossas/plugins/forms/breadcrumbform.py similarity index 79% rename from app/nossas/plugins/forms/breadcrumbform.py rename to app/org_nossas/nossas/plugins/forms/breadcrumbform.py index 6457e0ed..4e75d246 100644 --- a/app/nossas/plugins/forms/breadcrumbform.py +++ b/app/org_nossas/nossas/plugins/forms/breadcrumbform.py @@ -1,6 +1,6 @@ from django import forms -from nossas.design.fields import GraphicIconRadioSelect +from org_nossas.nossas.design.fields import GraphicIconRadioSelect from ..models.breadcrumbmodel import Breadcrumb diff --git a/app/nossas/plugins/forms/buttonform.py b/app/org_nossas/nossas/plugins/forms/buttonform.py similarity index 92% rename from app/nossas/plugins/forms/buttonform.py rename to app/org_nossas/nossas/plugins/forms/buttonform.py index 73c7860e..d0b1d2cd 100644 --- a/app/nossas/plugins/forms/buttonform.py +++ b/app/org_nossas/nossas/plugins/forms/buttonform.py @@ -7,7 +7,7 @@ from djangocms_frontend.fields import ColoredButtonGroup # from djangocms_frontend import settings -from nossas.design.forms import EMPTY_CHOICES +from org_nossas.nossas.design.forms import EMPTY_CHOICES # from nossas.plugins.models.buttonmodel import Button diff --git a/app/nossas/plugins/forms/cardform.py b/app/org_nossas/nossas/plugins/forms/cardform.py similarity index 93% rename from app/nossas/plugins/forms/cardform.py rename to app/org_nossas/nossas/plugins/forms/cardform.py index 21943573..7c44b2b3 100644 --- a/app/nossas/plugins/forms/cardform.py +++ b/app/org_nossas/nossas/plugins/forms/cardform.py @@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _ # from cms.forms.fields import PageSelectFormField as PageSearchField -from nossas.design.fields import Select2PageSearchField +from org_nossas.nossas.design.fields import Select2PageSearchField from ..models.cardmodel import Card diff --git a/app/nossas/plugins/forms/containerform.py b/app/org_nossas/nossas/plugins/forms/containerform.py similarity index 74% rename from app/nossas/plugins/forms/containerform.py rename to app/org_nossas/nossas/plugins/forms/containerform.py index c1d946e6..ac628b4e 100644 --- a/app/nossas/plugins/forms/containerform.py +++ b/app/org_nossas/nossas/plugins/forms/containerform.py @@ -1,12 +1,12 @@ from django import forms -from nossas.design.forms import ( +from org_nossas.nossas.design.forms import ( UIBackgroundFormMixin, UIPaddingFormMixin, UIBorderFormMixin, ) -from nossas.plugins.models.containermodel import Container +from org_nossas.nossas.plugins.models.containermodel import Container class ContainerPluginForm( diff --git a/app/nossas/plugins/forms/headerform.py b/app/org_nossas/nossas/plugins/forms/headerform.py similarity index 67% rename from app/nossas/plugins/forms/headerform.py rename to app/org_nossas/nossas/plugins/forms/headerform.py index 5824a0c9..3fa9e7a9 100644 --- a/app/nossas/plugins/forms/headerform.py +++ b/app/org_nossas/nossas/plugins/forms/headerform.py @@ -1,9 +1,9 @@ from django import forms -from nossas.design.fields import GraphicElementRadioSelect, GraphicIconRadioSelect -from nossas.design.forms import UIBackgroundFormMixin +from org_nossas.nossas.design.fields import GraphicElementRadioSelect, GraphicIconRadioSelect +from org_nossas.nossas.design.forms import UIBackgroundFormMixin -from nossas.plugins.models.headermodel import Header, HeaderImage +from org_nossas.nossas.plugins.models.headermodel import Header, HeaderImage class HeaderPluginForm(UIBackgroundFormMixin, forms.ModelForm): diff --git a/app/nossas/plugins/forms/headlineform.py b/app/org_nossas/nossas/plugins/forms/headlineform.py similarity index 100% rename from app/nossas/plugins/forms/headlineform.py rename to app/org_nossas/nossas/plugins/forms/headlineform.py diff --git a/app/nossas/plugins/forms/navbarform.py b/app/org_nossas/nossas/plugins/forms/navbarform.py similarity index 57% rename from app/nossas/plugins/forms/navbarform.py rename to app/org_nossas/nossas/plugins/forms/navbarform.py index 674deab0..6b9b026f 100644 --- a/app/nossas/plugins/forms/navbarform.py +++ b/app/org_nossas/nossas/plugins/forms/navbarform.py @@ -1,8 +1,8 @@ from django import forms -from nossas.design.forms import UIBackgroundFormMixin +from org_nossas.nossas.design.forms import UIBackgroundFormMixin -from nossas.plugins.models.navbarmodel import Navbar +from org_nossas.nossas.plugins.models.navbarmodel import Navbar class NavbarPluginForm(UIBackgroundFormMixin, forms.ModelForm): diff --git a/app/nossas/plugins/forms/sliderform.py b/app/org_nossas/nossas/plugins/forms/sliderform.py similarity index 67% rename from app/nossas/plugins/forms/sliderform.py rename to app/org_nossas/nossas/plugins/forms/sliderform.py index 418b9e30..3b8d3e90 100644 --- a/app/nossas/plugins/forms/sliderform.py +++ b/app/org_nossas/nossas/plugins/forms/sliderform.py @@ -1,8 +1,8 @@ from django import forms -from nossas.design.forms import UIBackgroundFormMixin +from org_nossas.nossas.design.forms import UIBackgroundFormMixin -from nossas.plugins.models.slidermodel import FullPageSlider +from org_nossas.nossas.plugins.models.slidermodel import FullPageSlider class FullPageSliderPluginForm(UIBackgroundFormMixin, forms.ModelForm): diff --git a/app/nossas/plugins/forms/socialshareform.py b/app/org_nossas/nossas/plugins/forms/socialshareform.py similarity index 92% rename from app/nossas/plugins/forms/socialshareform.py rename to app/org_nossas/nossas/plugins/forms/socialshareform.py index 76b91d2e..334c36c7 100644 --- a/app/nossas/plugins/forms/socialshareform.py +++ b/app/org_nossas/nossas/plugins/forms/socialshareform.py @@ -1,6 +1,6 @@ from django import forms -from nossas.plugins.models.socialsharemodel import SocialSharePluginModel +from org_nossas.nossas.plugins.models.socialsharemodel import SocialSharePluginModel class SocialShareIconSelect(forms.CheckboxSelectMultiple): template_name = "design/fields/multiple_svg_select.html" diff --git a/app/nossas/plugins/migrations/0001_initial.py b/app/org_nossas/nossas/plugins/migrations/0001_initial.py similarity index 81% rename from app/nossas/plugins/migrations/0001_initial.py rename to app/org_nossas/nossas/plugins/migrations/0001_initial.py index 9a2aba32..6b1268d3 100644 --- a/app/nossas/plugins/migrations/0001_initial.py +++ b/app/org_nossas/nossas/plugins/migrations/0001_initial.py @@ -2,7 +2,7 @@ from django.db import migrations, models import django.db.models.deletion -import nossas.design.models +import org_nossas.nossas.design.models class Migration(migrations.Migration): @@ -23,7 +23,7 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, - bases=(nossas.design.models.UIBackgroundMixin, nossas.design.models.UIPaddingMixin, nossas.design.models.UIBorderMixin, 'cms.cmsplugin'), + bases=(org_nossas.nossas.design.models.UIBackgroundMixin, org_nossas.nossas.design.models.UIPaddingMixin, org_nossas.nossas.design.models.UIBorderMixin, 'cms.cmsplugin'), ), migrations.CreateModel( name='Button', @@ -34,7 +34,7 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, - bases=(nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), + bases=(org_nossas.nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), ), migrations.CreateModel( name='FullPageSlider', @@ -45,7 +45,7 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, - bases=(nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), + bases=(org_nossas.nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), ), migrations.CreateModel( name='Navbar', @@ -56,6 +56,6 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, - bases=(nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), + bases=(org_nossas.nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), ), ] diff --git a/app/nossas/plugins/migrations/0002_fullpageslider_background_image.py b/app/org_nossas/nossas/plugins/migrations/0002_fullpageslider_background_image.py similarity index 100% rename from app/nossas/plugins/migrations/0002_fullpageslider_background_image.py rename to app/org_nossas/nossas/plugins/migrations/0002_fullpageslider_background_image.py diff --git a/app/nossas/plugins/migrations/0002_grid.py b/app/org_nossas/nossas/plugins/migrations/0002_grid.py similarity index 85% rename from app/nossas/plugins/migrations/0002_grid.py rename to app/org_nossas/nossas/plugins/migrations/0002_grid.py index a35bdc07..ac75f8f9 100644 --- a/app/nossas/plugins/migrations/0002_grid.py +++ b/app/org_nossas/nossas/plugins/migrations/0002_grid.py @@ -2,7 +2,7 @@ from django.db import migrations, models import django.db.models.deletion -import nossas.design.models +import org_nossas.nossas.design.models class Migration(migrations.Migration): @@ -22,6 +22,6 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, - bases=(nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), + bases=(org_nossas.nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), ), ] diff --git a/app/nossas/plugins/migrations/0003_auto_20240111_2218.py b/app/org_nossas/nossas/plugins/migrations/0003_auto_20240111_2218.py similarity index 96% rename from app/nossas/plugins/migrations/0003_auto_20240111_2218.py rename to app/org_nossas/nossas/plugins/migrations/0003_auto_20240111_2218.py index 2976e881..fc5cbc3e 100644 --- a/app/nossas/plugins/migrations/0003_auto_20240111_2218.py +++ b/app/org_nossas/nossas/plugins/migrations/0003_auto_20240111_2218.py @@ -2,7 +2,7 @@ from django.db import migrations, models import django.db.models.deletion -import nossas.design.models +import org_nossas.nossas.design.models class Migration(migrations.Migration): @@ -25,7 +25,7 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, - bases=(nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), + bases=(org_nossas.nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), ), migrations.AddField( model_name='grid', diff --git a/app/nossas/plugins/migrations/0004_auto_20240111_2221.py b/app/org_nossas/nossas/plugins/migrations/0004_auto_20240111_2221.py similarity index 100% rename from app/nossas/plugins/migrations/0004_auto_20240111_2221.py rename to app/org_nossas/nossas/plugins/migrations/0004_auto_20240111_2221.py diff --git a/app/nossas/plugins/migrations/0005_auto_20240115_1507.py b/app/org_nossas/nossas/plugins/migrations/0005_auto_20240115_1507.py similarity index 100% rename from app/nossas/plugins/migrations/0005_auto_20240115_1507.py rename to app/org_nossas/nossas/plugins/migrations/0005_auto_20240115_1507.py diff --git a/app/nossas/plugins/migrations/0006_merge_20240116_2039.py b/app/org_nossas/nossas/plugins/migrations/0006_merge_20240116_2039.py similarity index 100% rename from app/nossas/plugins/migrations/0006_merge_20240116_2039.py rename to app/org_nossas/nossas/plugins/migrations/0006_merge_20240116_2039.py diff --git a/app/nossas/plugins/migrations/0007_auto_20240116_2039.py b/app/org_nossas/nossas/plugins/migrations/0007_auto_20240116_2039.py similarity index 100% rename from app/nossas/plugins/migrations/0007_auto_20240116_2039.py rename to app/org_nossas/nossas/plugins/migrations/0007_auto_20240116_2039.py diff --git a/app/nossas/plugins/migrations/0008_accordion.py b/app/org_nossas/nossas/plugins/migrations/0008_accordion.py similarity index 100% rename from app/nossas/plugins/migrations/0008_accordion.py rename to app/org_nossas/nossas/plugins/migrations/0008_accordion.py diff --git a/app/nossas/plugins/migrations/0009_container.py b/app/org_nossas/nossas/plugins/migrations/0009_container.py similarity index 86% rename from app/nossas/plugins/migrations/0009_container.py rename to app/org_nossas/nossas/plugins/migrations/0009_container.py index 653cd6c5..761b7d80 100644 --- a/app/nossas/plugins/migrations/0009_container.py +++ b/app/org_nossas/nossas/plugins/migrations/0009_container.py @@ -2,7 +2,7 @@ from django.db import migrations, models import django.db.models.deletion -import nossas.design.models +import org_nossas.nossas.design.models class Migration(migrations.Migration): @@ -22,6 +22,6 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, - bases=(nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), + bases=(org_nossas.nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), ), ] diff --git a/app/nossas/plugins/migrations/0010_auto_20240117_2048.py b/app/org_nossas/nossas/plugins/migrations/0010_auto_20240117_2048.py similarity index 100% rename from app/nossas/plugins/migrations/0010_auto_20240117_2048.py rename to app/org_nossas/nossas/plugins/migrations/0010_auto_20240117_2048.py diff --git a/app/nossas/plugins/migrations/0011_auto_20240117_2129.py b/app/org_nossas/nossas/plugins/migrations/0011_auto_20240117_2129.py similarity index 100% rename from app/nossas/plugins/migrations/0011_auto_20240117_2129.py rename to app/org_nossas/nossas/plugins/migrations/0011_auto_20240117_2129.py diff --git a/app/nossas/plugins/migrations/0012_alter_column_alignment_y.py b/app/org_nossas/nossas/plugins/migrations/0012_alter_column_alignment_y.py similarity index 100% rename from app/nossas/plugins/migrations/0012_alter_column_alignment_y.py rename to app/org_nossas/nossas/plugins/migrations/0012_alter_column_alignment_y.py diff --git a/app/nossas/plugins/migrations/0013_auto_20240124_1410.py b/app/org_nossas/nossas/plugins/migrations/0013_auto_20240124_1410.py similarity index 88% rename from app/nossas/plugins/migrations/0013_auto_20240124_1410.py rename to app/org_nossas/nossas/plugins/migrations/0013_auto_20240124_1410.py index 90d18a47..dd4cc20b 100644 --- a/app/nossas/plugins/migrations/0013_auto_20240124_1410.py +++ b/app/org_nossas/nossas/plugins/migrations/0013_auto_20240124_1410.py @@ -2,7 +2,7 @@ from django.db import migrations, models import django.db.models.deletion -import nossas.design.models +import org_nossas.nossas.design.models class Migration(migrations.Migration): @@ -22,7 +22,7 @@ class Migration(migrations.Migration): options={ 'abstract': False, }, - bases=(nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), + bases=(org_nossas.nossas.design.models.UIBackgroundMixin, 'cms.cmsplugin'), ), migrations.AlterField( model_name='accordion', diff --git a/app/nossas/plugins/migrations/0014_header_picture.py b/app/org_nossas/nossas/plugins/migrations/0014_header_picture.py similarity index 100% rename from app/nossas/plugins/migrations/0014_header_picture.py rename to app/org_nossas/nossas/plugins/migrations/0014_header_picture.py diff --git a/app/nossas/plugins/migrations/0014_headline.py b/app/org_nossas/nossas/plugins/migrations/0014_headline.py similarity index 100% rename from app/nossas/plugins/migrations/0014_headline.py rename to app/org_nossas/nossas/plugins/migrations/0014_headline.py diff --git a/app/nossas/plugins/migrations/0015_auto_20240129_1747.py b/app/org_nossas/nossas/plugins/migrations/0015_auto_20240129_1747.py similarity index 100% rename from app/nossas/plugins/migrations/0015_auto_20240129_1747.py rename to app/org_nossas/nossas/plugins/migrations/0015_auto_20240129_1747.py diff --git a/app/nossas/plugins/migrations/0016_merge_0014_header_picture_0015_auto_20240129_1747.py b/app/org_nossas/nossas/plugins/migrations/0016_merge_0014_header_picture_0015_auto_20240129_1747.py similarity index 100% rename from app/nossas/plugins/migrations/0016_merge_0014_header_picture_0015_auto_20240129_1747.py rename to app/org_nossas/nossas/plugins/migrations/0016_merge_0014_header_picture_0015_auto_20240129_1747.py diff --git a/app/nossas/plugins/migrations/0017_card.py b/app/org_nossas/nossas/plugins/migrations/0017_card.py similarity index 100% rename from app/nossas/plugins/migrations/0017_card.py rename to app/org_nossas/nossas/plugins/migrations/0017_card.py diff --git a/app/nossas/plugins/migrations/0018_header_graphic_element.py b/app/org_nossas/nossas/plugins/migrations/0018_header_graphic_element.py similarity index 100% rename from app/nossas/plugins/migrations/0018_header_graphic_element.py rename to app/org_nossas/nossas/plugins/migrations/0018_header_graphic_element.py diff --git a/app/nossas/plugins/migrations/0019_auto_20240131_1518.py b/app/org_nossas/nossas/plugins/migrations/0019_auto_20240131_1518.py similarity index 100% rename from app/nossas/plugins/migrations/0019_auto_20240131_1518.py rename to app/org_nossas/nossas/plugins/migrations/0019_auto_20240131_1518.py diff --git a/app/nossas/plugins/migrations/0020_headerimage.py b/app/org_nossas/nossas/plugins/migrations/0020_headerimage.py similarity index 100% rename from app/nossas/plugins/migrations/0020_headerimage.py rename to app/org_nossas/nossas/plugins/migrations/0020_headerimage.py diff --git a/app/nossas/plugins/migrations/0021_auto_20240131_1937.py b/app/org_nossas/nossas/plugins/migrations/0021_auto_20240131_1937.py similarity index 100% rename from app/nossas/plugins/migrations/0021_auto_20240131_1937.py rename to app/org_nossas/nossas/plugins/migrations/0021_auto_20240131_1937.py diff --git a/app/nossas/plugins/migrations/0022_breadcrumb.py b/app/org_nossas/nossas/plugins/migrations/0022_breadcrumb.py similarity index 100% rename from app/nossas/plugins/migrations/0022_breadcrumb.py rename to app/org_nossas/nossas/plugins/migrations/0022_breadcrumb.py diff --git a/app/nossas/plugins/migrations/0023_auto_20240201_1416.py b/app/org_nossas/nossas/plugins/migrations/0023_auto_20240201_1416.py similarity index 100% rename from app/nossas/plugins/migrations/0023_auto_20240201_1416.py rename to app/org_nossas/nossas/plugins/migrations/0023_auto_20240201_1416.py diff --git a/app/nossas/plugins/migrations/0024_container_fluid.py b/app/org_nossas/nossas/plugins/migrations/0024_container_fluid.py similarity index 100% rename from app/nossas/plugins/migrations/0024_container_fluid.py rename to app/org_nossas/nossas/plugins/migrations/0024_container_fluid.py diff --git a/app/nossas/plugins/migrations/0025_alter_breadcrumb_graphic_icon.py b/app/org_nossas/nossas/plugins/migrations/0025_alter_breadcrumb_graphic_icon.py similarity index 100% rename from app/nossas/plugins/migrations/0025_alter_breadcrumb_graphic_icon.py rename to app/org_nossas/nossas/plugins/migrations/0025_alter_breadcrumb_graphic_icon.py diff --git a/app/nossas/plugins/migrations/0026_socialsharepluginmodel.py b/app/org_nossas/nossas/plugins/migrations/0026_socialsharepluginmodel.py similarity index 100% rename from app/nossas/plugins/migrations/0026_socialsharepluginmodel.py rename to app/org_nossas/nossas/plugins/migrations/0026_socialsharepluginmodel.py diff --git a/app/nossas/plugins/migrations/0027_socialsharepluginmodel_attributes.py b/app/org_nossas/nossas/plugins/migrations/0027_socialsharepluginmodel_attributes.py similarity index 100% rename from app/nossas/plugins/migrations/0027_socialsharepluginmodel_attributes.py rename to app/org_nossas/nossas/plugins/migrations/0027_socialsharepluginmodel_attributes.py diff --git a/app/nossas/plugins/migrations/0028_auto_20240220_2350.py b/app/org_nossas/nossas/plugins/migrations/0028_auto_20240220_2350.py similarity index 100% rename from app/nossas/plugins/migrations/0028_auto_20240220_2350.py rename to app/org_nossas/nossas/plugins/migrations/0028_auto_20240220_2350.py diff --git a/app/nossas/plugins/migrations/0029_auto_20240208_2051.py b/app/org_nossas/nossas/plugins/migrations/0029_auto_20240208_2051.py similarity index 100% rename from app/nossas/plugins/migrations/0029_auto_20240208_2051.py rename to app/org_nossas/nossas/plugins/migrations/0029_auto_20240208_2051.py diff --git a/app/nossas/plugins/migrations/0029_auto_20240221_0525.py b/app/org_nossas/nossas/plugins/migrations/0029_auto_20240221_0525.py similarity index 100% rename from app/nossas/plugins/migrations/0029_auto_20240221_0525.py rename to app/org_nossas/nossas/plugins/migrations/0029_auto_20240221_0525.py diff --git a/app/nossas/plugins/migrations/0030_auto_20240304_1636.py b/app/org_nossas/nossas/plugins/migrations/0030_auto_20240304_1636.py similarity index 100% rename from app/nossas/plugins/migrations/0030_auto_20240304_1636.py rename to app/org_nossas/nossas/plugins/migrations/0030_auto_20240304_1636.py diff --git a/app/nossas/plugins/migrations/0030_remove_socialsharepluginmodel_title.py b/app/org_nossas/nossas/plugins/migrations/0030_remove_socialsharepluginmodel_title.py similarity index 100% rename from app/nossas/plugins/migrations/0030_remove_socialsharepluginmodel_title.py rename to app/org_nossas/nossas/plugins/migrations/0030_remove_socialsharepluginmodel_title.py diff --git a/app/nossas/plugins/migrations/0031_merge_20240304_1408.py b/app/org_nossas/nossas/plugins/migrations/0031_merge_20240304_1408.py similarity index 100% rename from app/nossas/plugins/migrations/0031_merge_20240304_1408.py rename to app/org_nossas/nossas/plugins/migrations/0031_merge_20240304_1408.py diff --git a/app/nossas/plugins/migrations/0032_merge_20240304_2135.py b/app/org_nossas/nossas/plugins/migrations/0032_merge_20240304_2135.py similarity index 100% rename from app/nossas/plugins/migrations/0032_merge_20240304_2135.py rename to app/org_nossas/nossas/plugins/migrations/0032_merge_20240304_2135.py diff --git a/app/nossas/plugins/migrations/0033_fullpageslider_x_and_y_center_and_more.py b/app/org_nossas/nossas/plugins/migrations/0033_fullpageslider_x_and_y_center_and_more.py similarity index 100% rename from app/nossas/plugins/migrations/0033_fullpageslider_x_and_y_center_and_more.py rename to app/org_nossas/nossas/plugins/migrations/0033_fullpageslider_x_and_y_center_and_more.py diff --git a/app/nossas/plugins/migrations/0034_fullpageslider_background_size.py b/app/org_nossas/nossas/plugins/migrations/0034_fullpageslider_background_size.py similarity index 100% rename from app/nossas/plugins/migrations/0034_fullpageslider_background_size.py rename to app/org_nossas/nossas/plugins/migrations/0034_fullpageslider_background_size.py diff --git a/app/nossas/plugins/migrations/0035_grid_grid_layout_mobile_and_more.py b/app/org_nossas/nossas/plugins/migrations/0035_grid_grid_layout_mobile_and_more.py similarity index 100% rename from app/nossas/plugins/migrations/0035_grid_grid_layout_mobile_and_more.py rename to app/org_nossas/nossas/plugins/migrations/0035_grid_grid_layout_mobile_and_more.py diff --git a/app/nossas/plugins/migrations/0036_remove_headline_title_alter_grid_grid_gap_and_more.py b/app/org_nossas/nossas/plugins/migrations/0036_remove_headline_title_alter_grid_grid_gap_and_more.py similarity index 100% rename from app/nossas/plugins/migrations/0036_remove_headline_title_alter_grid_grid_gap_and_more.py rename to app/org_nossas/nossas/plugins/migrations/0036_remove_headline_title_alter_grid_grid_gap_and_more.py diff --git a/app/org_nossas/nossas/plugins/migrations/__init__.py b/app/org_nossas/nossas/plugins/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/plugins/models/__init__.py b/app/org_nossas/nossas/plugins/models/__init__.py similarity index 100% rename from app/nossas/plugins/models/__init__.py rename to app/org_nossas/nossas/plugins/models/__init__.py diff --git a/app/nossas/plugins/models/accordionmodel.py b/app/org_nossas/nossas/plugins/models/accordionmodel.py similarity index 100% rename from app/nossas/plugins/models/accordionmodel.py rename to app/org_nossas/nossas/plugins/models/accordionmodel.py diff --git a/app/nossas/plugins/models/boxmodel.py b/app/org_nossas/nossas/plugins/models/boxmodel.py similarity index 74% rename from app/nossas/plugins/models/boxmodel.py rename to app/org_nossas/nossas/plugins/models/boxmodel.py index 8407a6fc..4d668609 100644 --- a/app/nossas/plugins/models/boxmodel.py +++ b/app/org_nossas/nossas/plugins/models/boxmodel.py @@ -1,6 +1,6 @@ from django.db import models -from nossas.design.models import UIBackgroundMixin, NamingPluginMixin, UICMSPlugin +from org_nossas.nossas.design.models import UIBackgroundMixin, NamingPluginMixin, UICMSPlugin class Box(UIBackgroundMixin, NamingPluginMixin, UICMSPlugin): diff --git a/app/nossas/plugins/models/breadcrumbmodel.py b/app/org_nossas/nossas/plugins/models/breadcrumbmodel.py similarity index 83% rename from app/nossas/plugins/models/breadcrumbmodel.py rename to app/org_nossas/nossas/plugins/models/breadcrumbmodel.py index 9446ca86..2780cf8b 100644 --- a/app/nossas/plugins/models/breadcrumbmodel.py +++ b/app/org_nossas/nossas/plugins/models/breadcrumbmodel.py @@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPlugin -from nossas.design.fields import GraphicIconCircleChoices +from org_nossas.nossas.design.fields import GraphicIconCircleChoices class Breadcrumb(CMSPlugin): diff --git a/app/org_nossas/nossas/plugins/models/buttonmodel.py b/app/org_nossas/nossas/plugins/models/buttonmodel.py new file mode 100644 index 00000000..8cb0badd --- /dev/null +++ b/app/org_nossas/nossas/plugins/models/buttonmodel.py @@ -0,0 +1,5 @@ +from org_nossas.nossas.design.models import UICMSPlugin, UIBackgroundMixin + + +class Button(UIBackgroundMixin, UICMSPlugin): + pass \ No newline at end of file diff --git a/app/nossas/plugins/models/cardmodel.py b/app/org_nossas/nossas/plugins/models/cardmodel.py similarity index 98% rename from app/nossas/plugins/models/cardmodel.py rename to app/org_nossas/nossas/plugins/models/cardmodel.py index 5987c876..f6791fad 100644 --- a/app/nossas/plugins/models/cardmodel.py +++ b/app/org_nossas/nossas/plugins/models/cardmodel.py @@ -4,7 +4,7 @@ from cms.models import CMSPlugin, Page from filer.fields.file import FilerFileField -from nossas.design.models import NamingPluginMixin +from org_nossas.nossas.design.models import NamingPluginMixin TARGET_CHOICES = ( diff --git a/app/nossas/plugins/models/containermodel.py b/app/org_nossas/nossas/plugins/models/containermodel.py similarity index 91% rename from app/nossas/plugins/models/containermodel.py rename to app/org_nossas/nossas/plugins/models/containermodel.py index 9f195242..b017aac6 100644 --- a/app/nossas/plugins/models/containermodel.py +++ b/app/org_nossas/nossas/plugins/models/containermodel.py @@ -1,7 +1,7 @@ from django.db import models from django.utils.translation import gettext_lazy as _ -from nossas.design.models import ( +from org_nossas.nossas.design.models import ( UICMSPlugin, UIBackgroundMixin, UIPaddingMixin, diff --git a/app/nossas/plugins/models/gridmodel.py b/app/org_nossas/nossas/plugins/models/gridmodel.py similarity index 100% rename from app/nossas/plugins/models/gridmodel.py rename to app/org_nossas/nossas/plugins/models/gridmodel.py diff --git a/app/nossas/plugins/models/headermodel.py b/app/org_nossas/nossas/plugins/models/headermodel.py similarity index 81% rename from app/nossas/plugins/models/headermodel.py rename to app/org_nossas/nossas/plugins/models/headermodel.py index 398ed931..79bce078 100644 --- a/app/nossas/plugins/models/headermodel.py +++ b/app/org_nossas/nossas/plugins/models/headermodel.py @@ -4,8 +4,8 @@ from cms.plugin_base import CMSPlugin from filer.fields.image import FilerImageField -from nossas.design.fields import GraphicElementChoices, GraphicIconChoices -from nossas.design.models import UICMSPlugin, UIBackgroundMixin, NamingPluginMixin +from org_nossas.nossas.design.fields import GraphicElementChoices, GraphicIconChoices +from org_nossas.nossas.design.models import UICMSPlugin, UIBackgroundMixin, NamingPluginMixin class Header(UIBackgroundMixin, NamingPluginMixin, UICMSPlugin): diff --git a/app/nossas/plugins/models/headlinemodel.py b/app/org_nossas/nossas/plugins/models/headlinemodel.py similarity index 100% rename from app/nossas/plugins/models/headlinemodel.py rename to app/org_nossas/nossas/plugins/models/headlinemodel.py diff --git a/app/nossas/plugins/models/navbarmodel.py b/app/org_nossas/nossas/plugins/models/navbarmodel.py similarity index 67% rename from app/nossas/plugins/models/navbarmodel.py rename to app/org_nossas/nossas/plugins/models/navbarmodel.py index 6aca897d..632589b1 100644 --- a/app/nossas/plugins/models/navbarmodel.py +++ b/app/org_nossas/nossas/plugins/models/navbarmodel.py @@ -1,4 +1,4 @@ -from nossas.design.models import UICMSPlugin, UIBackgroundMixin +from org_nossas.nossas.design.models import UICMSPlugin, UIBackgroundMixin class Navbar(UIBackgroundMixin, UICMSPlugin): diff --git a/app/nossas/plugins/models/pdfmodel.py b/app/org_nossas/nossas/plugins/models/pdfmodel.py similarity index 100% rename from app/nossas/plugins/models/pdfmodel.py rename to app/org_nossas/nossas/plugins/models/pdfmodel.py diff --git a/app/nossas/plugins/models/slidermodel.py b/app/org_nossas/nossas/plugins/models/slidermodel.py similarity index 93% rename from app/nossas/plugins/models/slidermodel.py rename to app/org_nossas/nossas/plugins/models/slidermodel.py index 0f581012..7603d7e3 100644 --- a/app/nossas/plugins/models/slidermodel.py +++ b/app/org_nossas/nossas/plugins/models/slidermodel.py @@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _ from filer.fields.image import FilerImageField -from nossas.design.models import ( +from org_nossas.nossas.design.models import ( UICMSPlugin, UIBackgroundMixin, ) diff --git a/app/nossas/plugins/models/socialsharemodel.py b/app/org_nossas/nossas/plugins/models/socialsharemodel.py similarity index 100% rename from app/nossas/plugins/models/socialsharemodel.py rename to app/org_nossas/nossas/plugins/models/socialsharemodel.py diff --git a/app/nossas/plugins/templates/nossas/admin/link.html b/app/org_nossas/nossas/plugins/templates/nossas/admin/link.html similarity index 100% rename from app/nossas/plugins/templates/nossas/admin/link.html rename to app/org_nossas/nossas/plugins/templates/nossas/admin/link.html diff --git a/app/nossas/plugins/templates/nossas/plugins/accordion.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/accordion.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/accordion.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/accordion.html diff --git a/app/nossas/plugins/templates/nossas/plugins/accordion_item.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/accordion_item.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/accordion_item.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/accordion_item.html diff --git a/app/nossas/plugins/templates/nossas/plugins/box.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/box.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/box.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/box.html diff --git a/app/nossas/plugins/templates/nossas/plugins/breadcrumb.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/breadcrumb.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/breadcrumb.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/breadcrumb.html diff --git a/app/nossas/plugins/templates/nossas/plugins/breakline.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/breakline.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/breakline.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/breakline.html diff --git a/app/nossas/plugins/templates/nossas/plugins/button.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/button.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/button.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/button.html diff --git a/app/nossas/plugins/templates/nossas/plugins/card.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/card.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/card.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/card.html diff --git a/app/nossas/plugins/templates/nossas/plugins/column.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/column.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/column.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/column.html diff --git a/app/nossas/plugins/templates/nossas/plugins/container.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/container.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/container.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/container.html diff --git a/app/nossas/plugins/templates/nossas/plugins/full_page_slider_content.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/full_page_slider_content.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/full_page_slider_content.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/full_page_slider_content.html diff --git a/app/nossas/plugins/templates/nossas/plugins/gallery.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/gallery.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/gallery.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/gallery.html diff --git a/app/nossas/plugins/templates/nossas/plugins/grid.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/grid.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/grid.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/grid.html diff --git a/app/nossas/plugins/templates/nossas/plugins/header.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/header.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/header.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/header.html diff --git a/app/nossas/plugins/templates/nossas/plugins/header_image.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/header_image.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/header_image.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/header_image.html diff --git a/app/nossas/plugins/templates/nossas/plugins/headline.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/headline.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/headline.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/headline.html diff --git a/app/nossas/plugins/templates/nossas/plugins/navbar.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/navbar.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/navbar.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/navbar.html diff --git a/app/nossas/plugins/templates/nossas/plugins/pdf.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/pdf.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/pdf.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/pdf.html diff --git a/app/nossas/plugins/templates/nossas/plugins/site_footer.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/site_footer.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/site_footer.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/site_footer.html diff --git a/app/nossas/plugins/templates/nossas/plugins/slider.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/slider.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/slider.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/slider.html diff --git a/app/nossas/plugins/templates/nossas/plugins/slider_content.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/slider_content.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/slider_content.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/slider_content.html diff --git a/app/nossas/plugins/templates/nossas/plugins/social-media/facebook.svg b/app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/facebook.svg similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/social-media/facebook.svg rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/facebook.svg diff --git a/app/nossas/plugins/templates/nossas/plugins/social-media/linkedin.svg b/app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/linkedin.svg similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/social-media/linkedin.svg rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/linkedin.svg diff --git a/app/nossas/plugins/templates/nossas/plugins/social-media/mail.svg b/app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/mail.svg similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/social-media/mail.svg rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/mail.svg diff --git a/app/nossas/plugins/templates/nossas/plugins/social-media/twitter.svg b/app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/twitter.svg similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/social-media/twitter.svg rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/twitter.svg diff --git a/app/nossas/plugins/templates/nossas/plugins/social-media/whatsapp.svg b/app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/whatsapp.svg similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/social-media/whatsapp.svg rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/social-media/whatsapp.svg diff --git a/app/nossas/plugins/templates/nossas/plugins/social_share.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/social_share.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/social_share.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/social_share.html diff --git a/app/nossas/plugins/templates/nossas/plugins/testimony.html b/app/org_nossas/nossas/plugins/templates/nossas/plugins/testimony.html similarity index 100% rename from app/nossas/plugins/templates/nossas/plugins/testimony.html rename to app/org_nossas/nossas/plugins/templates/nossas/plugins/testimony.html diff --git a/app/org_nossas/nossas/plugins/templatetags/__init__.py b/app/org_nossas/nossas/plugins/templatetags/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/plugins/templatetags/slider_tags.py b/app/org_nossas/nossas/plugins/templatetags/slider_tags.py similarity index 100% rename from app/nossas/plugins/templatetags/slider_tags.py rename to app/org_nossas/nossas/plugins/templatetags/slider_tags.py diff --git a/app/org_nossas/nossas/publications/__init__.py b/app/org_nossas/nossas/publications/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/publications/admin.py b/app/org_nossas/nossas/publications/admin.py similarity index 87% rename from app/nossas/publications/admin.py rename to app/org_nossas/nossas/publications/admin.py index 55f48a04..2eb040a8 100644 --- a/app/nossas/publications/admin.py +++ b/app/org_nossas/nossas/publications/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin # TODO: Mover esses imports para base de aplicativos e plugins -from nossas.apps.baseadmin import OnSiteAdmin +from org_nossas.nossas.apps.baseadmin import OnSiteAdmin from .models import Publication from .forms import PublicationForm diff --git a/app/nossas/publications/apps.py b/app/org_nossas/nossas/publications/apps.py similarity index 80% rename from app/nossas/publications/apps.py rename to app/org_nossas/nossas/publications/apps.py index b9aaf24d..e19bf063 100644 --- a/app/nossas/publications/apps.py +++ b/app/org_nossas/nossas/publications/apps.py @@ -3,5 +3,5 @@ class PublicationsConfig(AppConfig): - name = "nossas.publications" + name = "org_nossas.nossas.publications" verbose_name = _("Aplicativos | Publicações") \ No newline at end of file diff --git a/app/nossas/publications/cms_apps.py b/app/org_nossas/nossas/publications/cms_apps.py similarity index 82% rename from app/nossas/publications/cms_apps.py rename to app/org_nossas/nossas/publications/cms_apps.py index 29775daa..f188f709 100644 --- a/app/nossas/publications/cms_apps.py +++ b/app/org_nossas/nossas/publications/cms_apps.py @@ -10,7 +10,7 @@ class PublicationsApphook(CMSApp): name = _("Publicações") def get_urls(self, page=None, language=None, **kwargs): - return ["nossas.publications.urls"] + return ["org_nossas.nossas.publications.urls"] @@ -20,4 +20,4 @@ class SearchApphook(CMSApp): name = _("Buscador") def get_urls(self, page=None, language=None, **kwargs): - return ["nossas.urls_search"] \ No newline at end of file + return ["org_nossas.nossas.urls_search"] \ No newline at end of file diff --git a/app/nossas/publications/cms_plugins.py b/app/org_nossas/nossas/publications/cms_plugins.py similarity index 100% rename from app/nossas/publications/cms_plugins.py rename to app/org_nossas/nossas/publications/cms_plugins.py diff --git a/app/nossas/publications/forms.py b/app/org_nossas/nossas/publications/forms.py similarity index 93% rename from app/nossas/publications/forms.py rename to app/org_nossas/nossas/publications/forms.py index cbea5b28..0ecb0cad 100644 --- a/app/nossas/publications/forms.py +++ b/app/org_nossas/nossas/publications/forms.py @@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _ from cms.models import Page -from nossas.design.fields import Select2PageSearchField +from org_nossas.nossas.design.fields import Select2PageSearchField from .models import Publication, PublicationList from .widgets import Select2CategorySelectWidget diff --git a/app/nossas/publications/migrations/0001_initial.py b/app/org_nossas/nossas/publications/migrations/0001_initial.py similarity index 100% rename from app/nossas/publications/migrations/0001_initial.py rename to app/org_nossas/nossas/publications/migrations/0001_initial.py diff --git a/app/nossas/publications/migrations/0002_remove_publication_classification_publication_parent_and_more.py b/app/org_nossas/nossas/publications/migrations/0002_remove_publication_classification_publication_parent_and_more.py similarity index 100% rename from app/nossas/publications/migrations/0002_remove_publication_classification_publication_parent_and_more.py rename to app/org_nossas/nossas/publications/migrations/0002_remove_publication_classification_publication_parent_and_more.py diff --git a/app/nossas/publications/migrations/0003_alter_publication_tags.py b/app/org_nossas/nossas/publications/migrations/0003_alter_publication_tags.py similarity index 100% rename from app/nossas/publications/migrations/0003_alter_publication_tags.py rename to app/org_nossas/nossas/publications/migrations/0003_alter_publication_tags.py diff --git a/app/nossas/publications/migrations/0004_publication_slug_alter_publication_unique_together.py b/app/org_nossas/nossas/publications/migrations/0004_publication_slug_alter_publication_unique_together.py similarity index 100% rename from app/nossas/publications/migrations/0004_publication_slug_alter_publication_unique_together.py rename to app/org_nossas/nossas/publications/migrations/0004_publication_slug_alter_publication_unique_together.py diff --git a/app/nossas/publications/migrations/0005_alter_publication_managers_publication_external_link.py b/app/org_nossas/nossas/publications/migrations/0005_alter_publication_managers_publication_external_link.py similarity index 100% rename from app/nossas/publications/migrations/0005_alter_publication_managers_publication_external_link.py rename to app/org_nossas/nossas/publications/migrations/0005_alter_publication_managers_publication_external_link.py diff --git a/app/nossas/publications/migrations/0006_publicationlist.py b/app/org_nossas/nossas/publications/migrations/0006_publicationlist.py similarity index 100% rename from app/nossas/publications/migrations/0006_publicationlist.py rename to app/org_nossas/nossas/publications/migrations/0006_publicationlist.py diff --git a/app/org_nossas/nossas/publications/migrations/__init__.py b/app/org_nossas/nossas/publications/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/nossas/publications/models.py b/app/org_nossas/nossas/publications/models.py similarity index 97% rename from app/nossas/publications/models.py rename to app/org_nossas/nossas/publications/models.py index d37ca922..2b472491 100644 --- a/app/nossas/publications/models.py +++ b/app/org_nossas/nossas/publications/models.py @@ -9,7 +9,7 @@ from translated_fields import TranslatedField # TODO: Mover esses imports para base de aplicativos e plugins -from nossas.apps.basemodel import OnSiteBaseModel +from org_nossas.nossas.apps.basemodel import OnSiteBaseModel class Publication(OnSiteBaseModel): diff --git a/app/nossas/publications/search_indexes.py b/app/org_nossas/nossas/publications/search_indexes.py similarity index 100% rename from app/nossas/publications/search_indexes.py rename to app/org_nossas/nossas/publications/search_indexes.py diff --git a/app/nossas/publications/templates/nossas/publications/detail.html b/app/org_nossas/nossas/publications/templates/nossas/publications/detail.html similarity index 100% rename from app/nossas/publications/templates/nossas/publications/detail.html rename to app/org_nossas/nossas/publications/templates/nossas/publications/detail.html diff --git a/app/nossas/publications/templates/nossas/publications/publication_list_plugin.html b/app/org_nossas/nossas/publications/templates/nossas/publications/publication_list_plugin.html similarity index 100% rename from app/nossas/publications/templates/nossas/publications/publication_list_plugin.html rename to app/org_nossas/nossas/publications/templates/nossas/publications/publication_list_plugin.html diff --git a/app/nossas/publications/templates/search/indexes/publications/publication_text.txt b/app/org_nossas/nossas/publications/templates/search/indexes/publications/publication_text.txt similarity index 100% rename from app/nossas/publications/templates/search/indexes/publications/publication_text.txt rename to app/org_nossas/nossas/publications/templates/search/indexes/publications/publication_text.txt diff --git a/app/nossas/publications/urls.py b/app/org_nossas/nossas/publications/urls.py similarity index 100% rename from app/nossas/publications/urls.py rename to app/org_nossas/nossas/publications/urls.py diff --git a/app/nossas/publications/views.py b/app/org_nossas/nossas/publications/views.py similarity index 100% rename from app/nossas/publications/views.py rename to app/org_nossas/nossas/publications/views.py diff --git a/app/nossas/publications/widgets.py b/app/org_nossas/nossas/publications/widgets.py similarity index 93% rename from app/nossas/publications/widgets.py rename to app/org_nossas/nossas/publications/widgets.py index adf1f006..7c8a5a94 100644 --- a/app/nossas/publications/widgets.py +++ b/app/org_nossas/nossas/publications/widgets.py @@ -3,7 +3,7 @@ from cms.models import Page from django_select2.forms import ModelSelect2Widget -from nossas.design.fields import Select2PageSearchFieldMixin +from org_nossas.nossas.design.fields import Select2PageSearchFieldMixin class Select2CategorySelectWidget(Select2PageSearchFieldMixin, ModelSelect2Widget): diff --git a/app/org_nossas/nossas/settings/__init__.py b/app/org_nossas/nossas/settings/__init__.py new file mode 100644 index 00000000..773cfc46 --- /dev/null +++ b/app/org_nossas/nossas/settings/__init__.py @@ -0,0 +1 @@ +from .base import * \ No newline at end of file diff --git a/app/nossas/settings.py b/app/org_nossas/nossas/settings/base.py similarity index 96% rename from app/nossas/settings.py rename to app/org_nossas/nossas/settings/base.py index 1e533091..eb81148e 100644 --- a/app/nossas/settings.py +++ b/app/org_nossas/nossas/settings/base.py @@ -17,7 +17,7 @@ # Used to override plugins template INSTALLED_APPS = ( [ - "nossas.design", + "org_nossas.nossas.design", "haystack", ] + INSTALLED_APPS @@ -26,11 +26,11 @@ # Build Bootstrap SCSS "compressor", # - "nossas", - "nossas.apps", - "nossas.plugins", + "org_nossas.nossas", + "org_nossas.nossas.apps", + "org_nossas.nossas.plugins", # - "nossas.publications", + "org_nossas.nossas.publications", # Override HTMLs "djangocms_frontend", "djangocms_frontend.contrib.utilities", @@ -83,7 +83,7 @@ # URLs -ROOT_URLCONF = "nossas.urls" +ROOT_URLCONF = "org_nossas.nossas.urls" # CMS diff --git a/app/nossas/settings_prod.py b/app/org_nossas/nossas/settings/production.py similarity index 90% rename from app/nossas/settings_prod.py rename to app/org_nossas/nossas/settings/production.py index 272dcea2..15f9c0c5 100644 --- a/app/nossas/settings_prod.py +++ b/app/org_nossas/nossas/settings/production.py @@ -1,4 +1,4 @@ -from .settings import * +from .base import * MIDDLEWARE = ( @@ -8,7 +8,7 @@ ) -INSTALLED_APPS += ["project", "storages", "django_prometheus"] +INSTALLED_APPS += ["storages", "django_prometheus"] # aws settings AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID") diff --git a/app/nossas/templates/search/search.html b/app/org_nossas/nossas/templates/search/search.html similarity index 100% rename from app/nossas/templates/search/search.html rename to app/org_nossas/nossas/templates/search/search.html diff --git a/app/nossas/templates/section-icons.html b/app/org_nossas/nossas/templates/section-icons.html similarity index 100% rename from app/nossas/templates/section-icons.html rename to app/org_nossas/nossas/templates/section-icons.html diff --git a/app/nossas/templates/styleguide.html b/app/org_nossas/nossas/templates/styleguide.html similarity index 100% rename from app/nossas/templates/styleguide.html rename to app/org_nossas/nossas/templates/styleguide.html diff --git a/app/org_nossas/nossas/urls.py b/app/org_nossas/nossas/urls.py new file mode 100644 index 00000000..bd178dab --- /dev/null +++ b/app/org_nossas/nossas/urls.py @@ -0,0 +1,35 @@ +from django.conf.urls.static import static +from django.conf import settings +from django.contrib import admin +from django.contrib.staticfiles.urls import staticfiles_urlpatterns +from django.urls import path, include + +from .views import StyleGuideView + + +urlpatterns = [ + path("i18n/", include("django.conf.urls.i18n")), + path( + "institutional/", + include( + ("org_nossas.nossas.apps.urls.institutional", "institutional"), + namespace="institutional", + ), + ), + path("styleguide/", StyleGuideView.as_view()), + path("monitoring/", include("django_prometheus.urls")), + path("admin/", admin.site.urls), + path("select2/", include("django_select2.urls")), + path("actions/", include("contrib.actions.pressure.urls")), + path("", include("cms.urls")), +] + +urlpatterns += staticfiles_urlpatterns() + +handler404 = "contrib.frontend.views.error_404" +handler500 = "contrib.frontend.views.error_500" + +if settings.DEBUG: + urlpatterns.extend(static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)) + +# urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \ No newline at end of file diff --git a/app/nossas/urls_search.py b/app/org_nossas/nossas/urls_search.py similarity index 100% rename from app/nossas/urls_search.py rename to app/org_nossas/nossas/urls_search.py diff --git a/app/nossas/views.py b/app/org_nossas/nossas/views.py similarity index 100% rename from app/nossas/views.py rename to app/org_nossas/nossas/views.py diff --git a/app/org_nossas/requirements.txt b/app/org_nossas/requirements.txt new file mode 100644 index 00000000..71c2ee08 --- /dev/null +++ b/app/org_nossas/requirements.txt @@ -0,0 +1,44 @@ +django==4.2 +django-environ +psycopg2-binary +django-select2 +django-compressor==4.4 +django-sass-processor==1.4 +django-entangled==0.5.4 +django-formtools +django-recaptcha==3 +django-jsonform>=2.21.2 +django-libsass==0.9 +django-colorfield +django-tag-fields +django-admin-sortable2==2.1.10 +# Django CMS +django-cms==3.11.5 +djangocms-admin-style==3.2.4 +djangocms-text-ckeditor +djangocms-picture +djangocms-video +djangocms_snippet +djangocms-frontend>=1.2.1 +django-prometheus +# Authentication all platforms +bcrypt +whitenoise +svglib +reportlab +django-social-share +pyjwt +requests +# Domains +etcd3-py>=0.1.6 +dnspython>=2.4.2 +# Nossas +django-haystack==3.2.1 +django-translated-fields>=0.12.0 +git+https://github.com/nossas/djangocms-form-builder.git@feature/add-input-fields-on-form-plugin +# Tests +pytest +pytest-django +pytest-cov +pytest-mock +mock diff --git a/app/project/management/__init__.py b/app/project/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/project/management/commands/__init__.py b/app/project/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/app/project/management/commands/create_site.py b/app/project/management/commands/create_site.py new file mode 100644 index 00000000..c81e4066 --- /dev/null +++ b/app/project/management/commands/create_site.py @@ -0,0 +1,133 @@ +import os +from pathlib import Path +from django.core.management.base import BaseCommand +from django.core.management import CommandError + +class Command(BaseCommand): + help = 'Cria um novo app/site em um grupo específico' + + def add_arguments(self, parser): + parser.add_argument('group', type=str, help='Nome do grupo onde o app será criado') + parser.add_argument('app_name', type=str, help='Nome do novo app/site') + + def handle(self, *args, **kwargs): + group = kwargs['group'] + app_name = kwargs['app_name'] + + base_dir = Path(__file__).resolve().parent.parent.parent.parent + group_dir = base_dir / group + app_dir = group_dir / app_name + settings_dir = app_dir / 'settings' + urls_file = app_dir / 'urls.py' + + try: + # Verifica se o grupo já existe + if not group_dir.exists(): + self.stdout.write(self.style.WARNING(f'O grupo {group} não existe. Deseja criar? [S/N]')) + choice = input().lower() + if choice != 's': + raise CommandError(f'Criação cancelada. O grupo {group} não existe.') + + # Cria o diretório do grupo + os.makedirs(group_dir) + + # Cria o arquivo __init__.py no diretório do grupo + with open(group_dir / '__init__.py', 'w') as f: + f.write('') + + # Cria as pastas necessárias + os.makedirs(settings_dir) + + # Cria os arquivos __init__.py + with open(app_dir / '__init__.py', 'w') as f: + f.write('') + with open(settings_dir / '__init__.py', 'w') as f: + f.write('from .base import *\n') + + # Cria o arquivo base.py dentro de settings + with open(settings_dir / 'base.py', 'w') as f: + f.write(self.get_base_settings_content(group, app_name)) + + # Cria o arquivo urls.py + with open(urls_file, 'w') as f: + f.write(self.get_urls_content()) + + self.stdout.write(self.style.SUCCESS(f'App/site {app_name} criado com sucesso em {group_dir}')) + + except FileExistsError: + raise CommandError(f'O diretório {settings_dir} já existe.') + + except Exception as e: + self.stdout.write(self.style.ERROR(f'Erro ao criar o app/site: {str(e)}')) + + def get_base_settings_content(self, group, app_name): + return f""" +from project.settings.base import * +from pathlib import Path + +SITE_DIR = Path(__file__).resolve().parent + +DEFAULT_DB_SQLITE = BASE_DIR / "{app_name}.sqlite3" + +DATABASES.update( + {{ + "default": env.db_url("CMS_DATABASE_URL", f"sqlite:///{{DEFAULT_DB_SQLITE}}"), + }} +) + +INSTALLED_APPS += [ + "{group}.{app_name}", +] + +ROOT_URLCONF = "{group}.{app_name}.urls" + +STATICFILES_FINDERS += [ + "compressor.finders.CompressorFinder", +] + +COMPRESS_PRECOMPILERS = (("text/x-scss", "django_libsass.SassCompiler"),) + +# DjangoCMS +CMS_TEMPLATES = [ + ("ds/base.html", "[DS] Padrão"), + ("ds/base_navbar_footer.html", "[DS] Navbar + Footer"), +] + +CMS_PLACEHOLDER_CONF = {{}} + +DJANGOCMS_PICTURE_RESPONSIVE_IMAGES = True + +# DjangoCMS Form Builder Submodule +DJANGOCMS_FORMS_REQUIRED_CSS_CLASS = "required" +DJANGOCMS_FORMS_FORM_PLUGIN_CHILD_CLASSES = [ + "BlockPlugin", + "ButtonPlugin", +] +""" + + def get_urls_content(self): + return """ +from django.conf.urls.static import static +from django.conf import settings +from django.contrib import admin +from django.contrib.staticfiles.urls import staticfiles_urlpatterns +from django.urls import path, include + + +urlpatterns = [ + # path("monitoring/", include("django_prometheus.urls")), + path("admin/", admin.site.urls), + path("select2/", include("django_select2.urls")), + path("", include("cms.urls")), +] + +urlpatterns += staticfiles_urlpatterns() + +handler404 = "contrib.frontend.views.error_404" +handler500 = "contrib.frontend.views.error_500" + +if settings.DEBUG: + urlpatterns.extend(static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)) + +# urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) +""" \ No newline at end of file diff --git a/app/project/middleware.py b/app/project/middleware.py index 1f2380eb..26278068 100644 --- a/app/project/middleware.py +++ b/app/project/middleware.py @@ -1,5 +1,6 @@ from django.utils.deprecation import MiddlewareMixin from django.http import HttpResponsePermanentRedirect +from django.conf import settings class WwwRedirectMiddleware(MiddlewareMixin): @@ -10,3 +11,22 @@ def process_request(self, request): domain = host.split("www.")[1] return HttpResponsePermanentRedirect(f"https://{domain}" + request.path) + + +class DomainRedirectMiddleware(MiddlewareMixin): + + def process_request(self, request): + host = request.get_host().partition(":")[0] + + if host in self.redirect_domains: + return HttpResponsePermanentRedirect( + f"https://{self.domain}" + request.path + ) + + @property + def domain(self): + return getattr(settings, "REDIRECT_MIDDLEWARE_ROOT_DOMAIN", "") + + @property + def redirect_domains(self): + return getattr(settings, "REDIRECT_MIDDLEWARE_LIST_DOMAIN", []) diff --git a/app/project/settings/__init__.py b/app/project/settings/__init__.py index 47efff50..a4688f80 100644 --- a/app/project/settings/__init__.py +++ b/app/project/settings/__init__.py @@ -1,3 +1,3 @@ -from .base import * +from .django_settings import * from .cms import * \ No newline at end of file diff --git a/app/project/settings/cms.py b/app/project/settings/cms.py index da049135..3914af98 100644 --- a/app/project/settings/cms.py +++ b/app/project/settings/cms.py @@ -2,9 +2,7 @@ # https://docs.django-cms.org/en/latest/how_to/install.html#templates CMS_TEMPLATES = [ - ("ga/base.html", "Base Google Analytics"), - ("frontend/landpage/page.html", "Landpage"), - ("eleicao/eleicao_template.html", "A Eleição do Ano"), + ("ga/base.html", "Base Google Analytics") ] # Placeholder diff --git a/app/project/settings/base.py b/app/project/settings/django_settings.py similarity index 99% rename from app/project/settings/base.py rename to app/project/settings/django_settings.py index 0f5563ea..ea4b77f3 100644 --- a/app/project/settings/base.py +++ b/app/project/settings/django_settings.py @@ -91,14 +91,16 @@ "contrib.frontend.grid", "contrib.frontend.maps", "contrib.ga", + "contrib.partners", # # "contrib.domains.route53", # "contrib.domains.traefik", # Experimentação - "eleicao", "django_social_share", # # "django_prometheus" + + 'project', ] MIDDLEWARE = [ @@ -106,7 +108,6 @@ # "django.middleware.security.SecurityMiddleware", "project.middleware.WwwRedirectMiddleware", - "eleicao.middleware.EleicaoRedirectMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", diff --git a/app/project/storages.py b/app/project/storages.py index ec1ba8e4..edb64b1a 100644 --- a/app/project/storages.py +++ b/app/project/storages.py @@ -2,7 +2,7 @@ from storages.backends.s3boto3 import S3Boto3Storage -class StaticStorage(S3Boto3Storage): +class PublicStaticStorage(S3Boto3Storage): location = 'static' # default_acl = 'public-read' diff --git a/app/requirements.txt b/app/requirements.txt index 58728ecf..bf73698f 100644 --- a/app/requirements.txt +++ b/app/requirements.txt @@ -9,7 +9,9 @@ django-formtools django-recaptcha==3 django-jsonform>=2.21.2 django-libsass==0.9 +django-storages==1.14.4 django-colorfield +django-bootstrap-datepicker-plus==5.0.5 django-tag-fields django-admin-sortable2==2.1.10 # Django CMS diff --git a/app/wsgi.ini b/app/wsgi.ini index 0eff278f..2ac17f36 100644 --- a/app/wsgi.ini +++ b/app/wsgi.ini @@ -6,4 +6,4 @@ processes = 4 threads = 2 http = 0.0.0.0:8000 die-on-term = true -buffer-size=65535 \ No newline at end of file +buffer-size=131070 \ No newline at end of file diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 89170b16..9a8e303c 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -1,18 +1,19 @@ services: - cms: - image: ${DOCKER_IMAGE:-nossas/cms:latest} + eleicaodoano: + image: ${ELEICOES_DOCKER_IMAGE:-nossas/eleicoes-cms:latest} restart: "${DOCKER_RESTART_POLICY:-unless-stopped}" pull_policy: always environment: + - DJANGO_SETTINGS_MODULE=org_eleicoes.eleicaodoano.settings - DEBUG=${DEBUG:-True} - ALLOWED_HOSTS=${ALLOWED_HOSTS:-"docker.localhost"} - - CMS_DATABASE_URL=${CMS_DATABASE_URL} + - CMS_DATABASE_URL=${ELEICAODOANO_DATABASE_URL} - BONDE_DATABASE_URL=${BONDE_DATABASE_URL} - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - AWS_STORAGE_BUCKET_NAME=${AWS_STORAGE_BUCKET_NAME} - - RECAPTCHA_PUBLIC_KEY=${RECAPTCHA_PUBLIC_KEY} - - RECAPTCHA_PRIVATE_KEY=${RECAPTCHA_PRIVATE_KEY} + - RECAPTCHA_PUBLIC_KEY=${ELEICAODOANO_RECAPTCHA_PUBLIC_KEY} + - RECAPTCHA_PRIVATE_KEY=${ELEICAODOANO_RECAPTCHA_PRIVATE_KEY} - DISABLE_RECAPTCHA=${DISABLE_RECAPTCHA} - BONDE_ACTION_API_URL=${BONDE_ACTION_API_URL} - BONDE_ACTION_SECRET_KEY=${BONDE_ACTION_SECRET_KEY} @@ -20,18 +21,51 @@ services: - ETCD_PORT=${ETCD_PORT:-2379} labels: - traefik.enable=true - - traefik.http.routers.cms.priority=10 - - traefik.http.services.cms.loadbalancer.server.port=8000 - - traefik.http.routers.cms.tls=true - - traefik.http.routers.cms.tls.certresolver=myresolver - - traefik.http.routers.cms.rule=${TRAEFIK_ROUTERS_RULE:-"HostRegexp(`cms.staging.bonde.org`)"} - + - traefik.http.routers.eleicaodoano.priority=10 + - traefik.http.services.eleicaodoano.loadbalancer.server.port=8000 + - traefik.http.routers.eleicaodoano.tls=true + - traefik.http.routers.eleicaodoano.tls.certresolver=myresolver + - traefik.http.routers.eleicaodoano.rule=${ELEICAODOANO_TRAEFIK_ROUTERS_RULE:-HostRegexp(`eleicaodoano.staging.bonde.org`,`www.eleicaodoano.staging.bonde.org`)} + + votepeloclima: + image: ${ELEICOES_DOCKER_IMAGE:-nossas/eleicoes-cms:latest} + restart: "${DOCKER_RESTART_POLICY:-unless-stopped}" + pull_policy: always + environment: + - DJANGO_SETTINGS_MODULE=org_eleicoes.votepeloclima.settings.production + - DEBUG=${DEBUG:-True} + - ALLOWED_HOSTS=${ALLOWED_HOSTS:-"docker.localhost"} + - CMS_DATABASE_URL=${VOTEPELOCLIMA_DATABASE_URL} + - BONDE_DATABASE_URL=${BONDE_DATABASE_URL} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} + - AWS_S3_REGION_NAME=${AWS_S3_REGION_NAME:-"us-east-1"} + - AWS_STORAGE_BUCKET_NAME=${VOTEPELOCLIMA_AWS_STORAGE_BUCKET_NAME} + - RECAPTCHA_PUBLIC_KEY=${VOTEPELOCLIMA_RECAPTCHA_PUBLIC_KEY} + - RECAPTCHA_PRIVATE_KEY=${VOTEPELOCLIMA_RECAPTCHA_PRIVATE_KEY} + - DISABLE_RECAPTCHA=${DISABLE_RECAPTCHA} + - BONDE_ACTION_API_URL=${BONDE_ACTION_API_URL} + - BONDE_ACTION_SECRET_KEY=${BONDE_ACTION_SECRET_KEY} + - ETCD_HOST=${ETCD_HOST:-etcd} + - ETCD_PORT=${ETCD_PORT:-2379} + - SMTP_HOST=${SMTP_HOST:-fake-smtp} + - SMTP_PORT=${SMTP_PORT:-1025} + - SMTP_USER=${SMTP_USER:-user} + - SMTP_PASS=${SMTP_PASS:-pass} + labels: + - traefik.enable=true + - traefik.http.routers.votepeloclima.priority=10 + - traefik.http.services.votepeloclima.loadbalancer.server.port=8000 + - traefik.http.routers.votepeloclima.tls=true + - traefik.http.routers.votepeloclima.tls.certresolver=myresolver + - traefik.http.routers.votepeloclima.rule=${VOTEPELOCLIMA_TRAEFIK_ROUTERS_RULE:-HostRegexp(`votepeloclima.staging.bonde.org`,`www.votepeloclima.staging.bonde.org`)} + nossas: - image: ${NOSSAS_DOCKER_IMAGE:-nossas/cms:latest} + image: ${NOSSAS_DOCKER_IMAGE:-nossas/nossas-cms:latest} restart: "${DOCKER_RESTART_POLICY:-unless-stopped}" pull_policy: always environment: - - DJANGO_SETTINGS_MODULE=nossas.settings_prod + - DJANGO_SETTINGS_MODULE=org_nossas.nossas.settings.production - DEBUG=${DEBUG:-True} - ALLOWED_HOSTS=${ALLOWED_HOSTS:-"docker.localhost"} - CMS_DATABASE_URL=${NOSSAS_DATABASE_URL} @@ -39,8 +73,6 @@ services: - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - AWS_STORAGE_BUCKET_NAME=${AWS_STORAGE_BUCKET_NAME} - - RECAPTCHA_PUBLIC_KEY=${RECAPTCHA_PUBLIC_KEY} - - RECAPTCHA_PRIVATE_KEY=${RECAPTCHA_PRIVATE_KEY} - DISABLE_RECAPTCHA=${DISABLE_RECAPTCHA} - BONDE_ACTION_API_URL=${BONDE_ACTION_API_URL} - BONDE_ACTION_SECRET_KEY=${BONDE_ACTION_SECRET_KEY} @@ -52,14 +84,14 @@ services: - traefik.http.services.nossas.loadbalancer.server.port=8000 - traefik.http.routers.nossas.tls=true - traefik.http.routers.nossas.tls.certresolver=myresolver - - traefik.http.routers.nossas.rule=${NOSSAS_TRAEFIK_ROUTERS_RULE:-"HostRegexp(`nossas.staging.bonde.org`)"} + - traefik.http.routers.nossas.rule=${NOSSAS_TRAEFIK_ROUTERS_RULE:-HostRegexp(`nossas.staging.bonde.org`,`www.nossas.staging.bonde.org`)} - adp: - image: ${ADP_DOCKER_IMAGE:-nossas/cms:latest} + observatorio: + image: ${ADP_DOCKER_IMAGE:-nossas/amazoniadepe-cms:latest} restart: "${DOCKER_RESTART_POLICY:-unless-stopped}" pull_policy: always environment: - - DJANGO_SETTINGS_MODULE=adp.settings.production + - DJANGO_SETTINGS_MODULE=org_amazonia_de_pe.adp.settings.production - DEBUG=${DEBUG:-True} - ALLOWED_HOSTS=${ALLOWED_HOSTS:-"docker.localhost"} - CMS_DATABASE_URL=${ADP_DATABASE_URL} @@ -67,8 +99,6 @@ services: - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - AWS_STORAGE_BUCKET_NAME=${AWS_STORAGE_BUCKET_NAME} - - RECAPTCHA_PUBLIC_KEY=${RECAPTCHA_PUBLIC_KEY} - - RECAPTCHA_PRIVATE_KEY=${RECAPTCHA_PRIVATE_KEY} - DISABLE_RECAPTCHA=${DISABLE_RECAPTCHA} - BONDE_ACTION_API_URL=${BONDE_ACTION_API_URL} - BONDE_ACTION_SECRET_KEY=${BONDE_ACTION_SECRET_KEY} @@ -76,13 +106,13 @@ services: - ETCD_PORT=${ETCD_PORT:-2379} labels: - traefik.enable=true - - traefik.http.routers.adp.priority=10 - - traefik.http.services.adp.loadbalancer.server.port=8000 - - traefik.http.routers.adp.tls=true - - traefik.http.routers.adp.tls.certresolver=myresolver - - traefik.http.routers.adp.rule=${ADP_TRAEFIK_ROUTERS_RULE:-"HostRegexp(`adp.staging.bonde.org`)"} - - adp-mapa: + - traefik.http.routers.observatorio.priority=10 + - traefik.http.services.observatorio.loadbalancer.server.port=8000 + - traefik.http.routers.observatorio.tls=true + - traefik.http.routers.observatorio.tls.certresolver=myresolver + - traefik.http.routers.observatorio.rule=${ADP_TRAEFIK_ROUTERS_RULE:-HostRegexp(`observatorio.staging.bonde.org`, `www.observatorio.staging.bonde.org`)} + + observatorio-mapa: image: ${ADP_MAPA_DOCKER_IMAGE:-nossas/fpnd-mapa:v1.0} restart: "${DOCKER_RESTART_POLICY:-unless-stopped}" pull_policy: always @@ -94,11 +124,11 @@ services: - MY_APP_URL_MVT=${ADP_MAPA_URL_MVT} labels: - traefik.enable=true - - traefik.http.routers.adp-mapa.priority=10 - - traefik.http.services.adp-mapa.loadbalancer.server.port=80 - - traefik.http.routers.adp-mapa.tls=true - - traefik.http.routers.adp-mapa.tls.certresolver=myresolver - - traefik.http.routers.adp-mapa.rule=${ADP_MAPA_TRAEFIK_ROUTERS_RULE:-"HostRegexp(`adp-mapa.staging.bonde.org`)"} + - traefik.http.routers.observatorio-mapa.priority=10 + - traefik.http.services.observatorio-mapa.loadbalancer.server.port=80 + - traefik.http.routers.observatorio-mapa.tls=true + - traefik.http.routers.observatorio-mapa.tls.certresolver=myresolver + - traefik.http.routers.observatorio-mapa.rule=${ADP_MAPA_TRAEFIK_ROUTERS_RULE:-HostRegexp(`observatorio-mapa.staging.bonde.org`)} networks: default: diff --git a/submodules/djangocms-form-builder b/submodules/djangocms-form-builder index b5754ecb..ae48b600 160000 --- a/submodules/djangocms-form-builder +++ b/submodules/djangocms-form-builder @@ -1 +1 @@ -Subproject commit b5754ecb16d10c6830f2a8e9f50cdb52131acaf1 +Subproject commit ae48b600a115d6724d3062f8d21186c8b5fb25f5