Initial commit
This commit is contained in:
90
templates/careers/apply.html
Normal file
90
templates/careers/apply.html
Normal file
@@ -0,0 +1,90 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Postuler — {{ job.title }} — Jool International{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<link rel="stylesheet" href="{% static 'css/careers.css' %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="apply-wrapper">
|
||||
<a href="{{ job.get_absolute_url }}" class="apply-job-ref">
|
||||
<span class="material-icons-round">arrow_back</span> {{ job.title }}
|
||||
</a>
|
||||
<h1 class="apply-title">Votre candidature</h1>
|
||||
<p class="apply-subtitle">Complétez le formulaire ci-dessous. Tous les champs marqués d'un * sont obligatoires.</p>
|
||||
|
||||
<form method="post" enctype="multipart/form-data" novalidate>
|
||||
{% csrf_token %}
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label class="form-label required" for="{{ form.first_name.id_for_label }}">{{ form.first_name.label }}</label>
|
||||
{{ form.first_name }}
|
||||
{% if form.first_name.errors %}
|
||||
{% for error in form.first_name.errors %}<p class="form-error">{{ error }}</p>{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label required" for="{{ form.last_name.id_for_label }}">{{ form.last_name.label }}</label>
|
||||
{{ form.last_name }}
|
||||
{% if form.last_name.errors %}
|
||||
{% for error in form.last_name.errors %}<p class="form-error">{{ error }}</p>{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label class="form-label required" for="{{ form.email.id_for_label }}">{{ form.email.label }}</label>
|
||||
{{ form.email }}
|
||||
{% if form.email.errors %}
|
||||
{% for error in form.email.errors %}<p class="form-error">{{ error }}</p>{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="{{ form.phone.id_for_label }}">{{ form.phone.label }}</label>
|
||||
{{ form.phone }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="{{ form.linkedin_url.id_for_label }}">{{ form.linkedin_url.label }}</label>
|
||||
{{ form.linkedin_url }}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label required" for="{{ form.cover_letter.id_for_label }}">{{ form.cover_letter.label }}</label>
|
||||
{{ form.cover_letter }}
|
||||
{% if form.cover_letter.errors %}
|
||||
{% for error in form.cover_letter.errors %}<p class="form-error">{{ error }}</p>{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label required" for="{{ form.cv_file.id_for_label }}">{{ form.cv_file.label }}</label>
|
||||
{{ form.cv_file }}
|
||||
<p class="form-help">{{ form.cv_file.help_text }}</p>
|
||||
{% if form.cv_file.errors %}
|
||||
{% for error in form.cv_file.errors %}<p class="form-error">{{ error }}</p>{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="{{ form.portfolio_url.id_for_label }}">{{ form.portfolio_url.label }}</label>
|
||||
{{ form.portfolio_url }}
|
||||
</div>
|
||||
|
||||
{% if form.non_field_errors %}
|
||||
<div style="background:#fff3cd;border:1px solid #ffc107;color:#856404;padding:14px 18px;border-radius:12px;margin-bottom:20px;">
|
||||
{% for error in form.non_field_errors %}<p>{{ error }}</p>{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<button type="submit" class="btn-submit">
|
||||
<span class="material-icons-round">send</span> Envoyer ma candidature
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
22
templates/careers/apply_success.html
Normal file
22
templates/careers/apply_success.html
Normal file
@@ -0,0 +1,22 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Candidature envoyée — Jool International{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<link rel="stylesheet" href="{% static 'css/careers.css' %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="success-wrapper">
|
||||
<div class="success-icon">
|
||||
<span class="material-icons-round">check_circle</span>
|
||||
</div>
|
||||
<h1 class="success-title">Candidature reçue !</h1>
|
||||
<p class="success-body">
|
||||
Merci pour votre intérêt pour le poste de <strong>{{ job.title }}</strong>.<br>
|
||||
Nous avons bien reçu votre dossier et vous contacterons dans les plus brefs délais.
|
||||
</p>
|
||||
<a href="{% url 'careers:job_list' %}" class="btn-back">Voir toutes les offres</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
12
templates/careers/emails/application_received_body.txt
Normal file
12
templates/careers/emails/application_received_body.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
Bonjour {{ application.first_name }},
|
||||
|
||||
Nous avons bien reçu votre candidature pour le poste de :
|
||||
{{ application.job.title }} ({{ application.job.get_contract_type_display }})
|
||||
{{ application.job.location }}
|
||||
|
||||
Votre dossier est en cours d'examen par notre équipe RH. Nous vous contacterons dans les meilleurs délais.
|
||||
|
||||
Merci pour votre intérêt pour Jool International.
|
||||
|
||||
Cordialement,
|
||||
L'équipe Jool International
|
||||
@@ -0,0 +1 @@
|
||||
Candidature reçue — {{ application.job.title }} | Jool International
|
||||
16
templates/careers/emails/new_application_admin_body.txt
Normal file
16
templates/careers/emails/new_application_admin_body.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Nouvelle candidature reçue.
|
||||
|
||||
POSTE : {{ application.job.title }} ({{ application.job.get_contract_type_display }})
|
||||
CANDIDAT: {{ application.full_name }}
|
||||
EMAIL : {{ application.email }}
|
||||
TEL : {{ application.phone|default:"—" }}
|
||||
LinkedIn: {{ application.linkedin_url|default:"—" }}
|
||||
Portfolio: {{ application.portfolio_url|default:"—" }}
|
||||
|
||||
LETTRE DE MOTIVATION :
|
||||
{{ application.cover_letter }}
|
||||
|
||||
CV : voir l'interface d'administration Django.
|
||||
|
||||
---
|
||||
Gérer cette candidature : http://localhost:8000/admin/careers/jobapplication/
|
||||
@@ -0,0 +1 @@
|
||||
Nouvelle candidature — {{ application.job.title }} — {{ application.full_name }}
|
||||
63
templates/careers/job_detail.html
Normal file
63
templates/careers/job_detail.html
Normal file
@@ -0,0 +1,63 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}{{ job.title }} — Carrières Jool International{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<link rel="stylesheet" href="{% static 'css/careers.css' %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="job-detail-hero">
|
||||
<div class="job-detail-breadcrumb">
|
||||
<a href="{% url 'careers:job_list' %}">Carrières</a> › {{ job.title }}
|
||||
</div>
|
||||
<h1 class="job-detail-title">{{ job.title }}</h1>
|
||||
<div class="job-detail-tags">
|
||||
<span class="job-tag"><span class="material-icons-round">work</span> {{ job.get_contract_type_display }}</span>
|
||||
<span class="job-tag"><span class="material-icons-round">location_on</span> {{ job.location }}</span>
|
||||
<span class="job-tag"><span class="material-icons-round">category</span> {{ job.get_department_display }}</span>
|
||||
{% if job.is_remote %}<span class="job-tag"><span class="material-icons-round">wifi</span> Télétravail possible</span>{% endif %}
|
||||
{% if job.salary_range %}<span class="job-tag"><span class="material-icons-round">payments</span> {{ job.salary_range }}</span>{% endif %}
|
||||
</div>
|
||||
{% if job.is_open %}
|
||||
<a href="{% url 'careers:apply' slug=job.slug %}" class="btn-apply-lg">
|
||||
<span class="material-icons-round">send</span> Postuler maintenant
|
||||
</a>
|
||||
{% else %}
|
||||
<div class="job-closed-banner">
|
||||
<span class="material-icons-round">info</span>
|
||||
Cette offre n'accepte plus de candidatures.
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="job-detail-body">
|
||||
{% if job.application_deadline %}
|
||||
<p style="color:#888;font-size:13px;margin-bottom:32px;">
|
||||
<span class="material-icons-round" style="font-size:15px;vertical-align:middle;">event</span>
|
||||
Date limite : {{ job.application_deadline|date:"d/m/Y" }}
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<div class="job-section-title">Description du poste</div>
|
||||
<div>{{ job.description|linebreaks }}</div>
|
||||
|
||||
<div class="job-section-title">Compétences requises</div>
|
||||
<div>{{ job.requirements|linebreaks }}</div>
|
||||
|
||||
{% if job.nice_to_have %}
|
||||
<div class="job-section-title">Compétences souhaitées</div>
|
||||
<div>{{ job.nice_to_have|linebreaks }}</div>
|
||||
{% endif %}
|
||||
|
||||
{% if job.is_open %}
|
||||
<div style="margin-top:48px;padding-top:32px;border-top:1px solid var(--gray);text-align:center;">
|
||||
<p style="color:#555;margin-bottom:20px;">Ce poste vous correspond ? Envoyez votre candidature dès maintenant.</p>
|
||||
<a href="{% url 'careers:apply' slug=job.slug %}" class="btn-apply-lg">
|
||||
<span class="material-icons-round">send</span> Postuler
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
50
templates/careers/job_list.html
Normal file
50
templates/careers/job_list.html
Normal file
@@ -0,0 +1,50 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}Carrières — Jool International{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<link rel="stylesheet" href="{% static 'css/careers.css' %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="careers-hero reveal">
|
||||
<h1>Rejoignez l'aventure <span>Jool</span></h1>
|
||||
<p>Nous construisons l'avenir de l'agriculture africaine. Découvrez nos opportunités et faites partie de l'équipe.</p>
|
||||
</div>
|
||||
|
||||
<div class="careers-filters">
|
||||
<span class="filter-label">Département :</span>
|
||||
<a href="{% url 'careers:job_list' %}" class="filter-chip {% if not active_dept %}active{% endif %}">Tous</a>
|
||||
{% for value, label in departments %}
|
||||
<a href="?dept={{ value }}" class="filter-chip {% if active_dept == value %}active{% endif %}">{{ label }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="jobs-grid">
|
||||
{% for job in jobs %}
|
||||
<div class="job-card reveal">
|
||||
<div class="job-card-header">
|
||||
<span class="job-dept-badge">{{ job.get_department_display }}</span>
|
||||
<span class="job-contract">{{ job.get_contract_type_display }}</span>
|
||||
</div>
|
||||
<div class="job-card-title">{{ job.title }}</div>
|
||||
<div class="job-card-meta">
|
||||
<span><span class="material-icons-round">location_on</span> {{ job.location }}</span>
|
||||
{% if job.is_remote %}<span><span class="material-icons-round">wifi</span> Télétravail</span>{% endif %}
|
||||
{% if job.salary_range %}<span><span class="material-icons-round">payments</span> {{ job.salary_range }}</span>{% endif %}
|
||||
</div>
|
||||
<div class="job-card-footer">
|
||||
<a href="{{ job.get_absolute_url }}" class="btn-apply">Voir l'offre</a>
|
||||
{% if job.application_deadline %}
|
||||
<span class="job-deadline">Jusqu'au {{ job.application_deadline|date:"d/m/Y" }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% empty %}
|
||||
<div class="jobs-empty">
|
||||
<p>Aucune offre disponible pour le moment.<br>Revenez bientôt !</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user