diff --git a/resume_manager_core/fixtures/resume_manager/resume_sections.json b/resume_manager_core/fixtures/resume_manager/resume_sections.json index ef7871888284669705ee682da42b0c2f017cf23d..8b5f0a3bbb2acca568598ef343076fe33ec68176 100644 --- a/resume_manager_core/fixtures/resume_manager/resume_sections.json +++ b/resume_manager_core/fixtures/resume_manager/resume_sections.json @@ -72,5 +72,48 @@ "date_created": "2023-01-01T08:00:00.000Z", "date_modified": "2023-01-01T08:00:00.000Z" } +}, +{ + "model": "resume_manager_core.resumesection", + "pk": 7, + "fields": { + "resume": 1, + "parent_section": 3, + "name": "Contact Info", + "css": [], + "display_category": 3, + "separator_before": true, + "date_created": "2023-01-01T08:00:00.000Z", + "date_modified": "2023-01-01T08:00:00.000Z" + } +}, +{ + "model": "resume_manager_core.resumesection", + "pk": 8, + "fields": { + "resume": 1, + "parent_section": 3, + "name": "Education", + "css": [], + "display_category": 4, + "separator_before": true, + "date_created": "2023-01-01T08:00:00.000Z", + "date_modified": "2023-01-01T08:00:00.000Z" + } +}, +{ + "model": "resume_manager_core.resumesection", + "pk": 9, + "fields": { + "resume": 1, + "parent_section": 3, + "name": "Skills", + "css": [], + "display_category": 5, + "separator_before": true, + "separator_after": true, + "date_created": "2023-01-01T08:00:00.000Z", + "date_modified": "2023-01-01T08:00:00.000Z" + } } ] diff --git a/resume_manager_core/fixtures/resume_manager/section_css.json b/resume_manager_core/fixtures/resume_manager/section_css.json index ebac4180a6e08b50232471d9c67fcfd362be78cf..34736361fcd04d7300320952178f13c651dedea6 100644 --- a/resume_manager_core/fixtures/resume_manager/section_css.json +++ b/resume_manager_core/fixtures/resume_manager/section_css.json @@ -218,5 +218,45 @@ "date_created": "2023-01-01T08:00:00.000Z", "date_modified": "2023-01-01T08:00:00.000Z" } +}, +{ + "model": "resume_manager_core.sectioncss", + "pk": 23, + "fields": { + "name": "border-top", + "css_classes": "border-top", + "date_created": "2023-01-01T08:00:00.000Z", + "date_modified": "2023-01-01T08:00:00.000Z" + } +}, +{ + "model": "resume_manager_core.sectioncss", + "pk": 24, + "fields": { + "name": "border-right", + "css_classes": "border-right", + "date_created": "2023-01-01T08:00:00.000Z", + "date_modified": "2023-01-01T08:00:00.000Z" + } +}, +{ + "model": "resume_manager_core.sectioncss", + "pk": 25, + "fields": { + "name": "border-bottom", + "css_classes": "border-bottom", + "date_created": "2023-01-01T08:00:00.000Z", + "date_modified": "2023-01-01T08:00:00.000Z" + } +}, +{ + "model": "resume_manager_core.sectioncss", + "pk": 26, + "fields": { + "name": "border-left", + "css_classes": "border-left", + "date_created": "2023-01-01T08:00:00.000Z", + "date_modified": "2023-01-01T08:00:00.000Z" + } } ] diff --git a/resume_manager_core/models.py b/resume_manager_core/models.py index 6688dd2761640818c0681fdaad05be1d731efde1..220b3ee4366c7f8bfde3a33c5e6791e54e6e8000 100644 --- a/resume_manager_core/models.py +++ b/resume_manager_core/models.py @@ -84,16 +84,21 @@ class ResumeSection(WorkspaceModel): css = models.ManyToManyField('SectionCss', related_name='section') resume = models.ForeignKey('Resume', on_delete=models.CASCADE) parent_section = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, null=True) - display_category = models.PositiveSmallIntegerField(choices=DISPLAY_CATEGORY_CHOICES, default=0) # Model fields. name = models.CharField(max_length=settings.MAX_LENGTH) + display_category = models.PositiveSmallIntegerField(choices=DISPLAY_CATEGORY_CHOICES, default=0) + separator_before = models.BooleanField(default=False) + separator_after = models.BooleanField(default=False) # Field helper text. css.help_text = 'CSS stylings to apply to section.' resume.help_text = 'Resume that section applies to.' parent_section.help_text = 'Parent section/subsection to nest within.' name.help_text = 'Name to help identify section purpose.' + display_category.help_text = 'Indicates what content (if any) should display in section.' + separator_before.help_text = 'Indicates if a separator should be placed before section elements.' + separator_after.help_text = 'indicates if a separator should be placed after section elements.' class Meta: verbose_name = 'Resume Section' diff --git a/resume_manager_core/static/resume_manager_core/css/sass/src/_resume_blocky.scss b/resume_manager_core/static/resume_manager_core/css/sass/src/_resume_blocky.scss index 940566c6d0f0f8c818dd73a3a3c469377eb43250..086aad46f91cec4a5862ff12e89346e2b6aa2a8c 100644 --- a/resume_manager_core/static/resume_manager_core/css/sass/src/_resume_blocky.scss +++ b/resume_manager_core/static/resume_manager_core/css/sass/src/_resume_blocky.scss @@ -96,6 +96,10 @@ html { padding: 0; } + div { + padding: 5px; + } + p { width: 100%; height: 100%; @@ -114,11 +118,33 @@ html { } .flex-horizontal { - flex-direction: horizontal; + flex-direction: row; + + hr { + height: 95%; + margin-top: 20px; + margin-right: 15px; + margin-bottom: 20px; + margin-left: 15px; + } } .flex-vertical { - flex-direction: vertical; + flex-direction: column; + + hr { + width: 95%; + margin-top: 15px; + margin-right: 20px; + margin-bottom: 15px; + margin-left: 20px; + } + } + + hr { + color: black; + background-color: black; + border-color: black; } li.no-bullet { @@ -134,19 +160,19 @@ html { } .border-top { - border: 1px solid black; + border-top: 1px solid black; } .border-right { - border: 1px solid black; + border-right: 1px solid black; } .border-bottom { - border: 1px solid black; + border-bottom: 1px solid black; } .border-left { - border: 1px solid black; + border-left: 1px solid black; } .color-section { diff --git a/resume_manager_core/templates/resume_manager/_display_recurse.html b/resume_manager_core/templates/resume_manager/_display_recurse.html index 76c677f257e3cf485c6f39468683af3ac86b434e..5b1458a36a8cb9a85a0d8c658c24d7c0f1b01328 100644 --- a/resume_manager_core/templates/resume_manager/_display_recurse.html +++ b/resume_manager_core/templates/resume_manager/_display_recurse.html @@ -2,11 +2,31 @@ {% for data in data_subsection %} + + {% if data.separator_before %} + <hr> + {% endif %} + <div class="{{ data.section_css }}"> - {% if data.section.title %} - <h3>{{ data.section.title }}</h3> + {% if data.display_category == 'Name' %} + <h2>{{ content.name }}</h2> + {% elif data.display_category == 'Profession' %} + <h2>{{ content.profession }}</h2> + {% elif data.display_category == 'Contact' %} + <p>CONTACT INFO HERE</p> + {% elif data.display_category == 'Education' %} + <p>EDUCATION HERE</p> + {% elif data.display_category == 'Experience' %} + <p>EXPERIENCE HERE</p> + {% elif data.display_category == 'Skills' %} + <p>SKILLS HERE</p> {% endif %} + + + + + {% if data.section_header %} <p>{{ data.section_header }}</p> {% endif %} @@ -44,6 +64,11 @@ </ul> {% endif %} - {% include 'resume_manager/_display_recurse.html' with data_subsection=data.section_children %} + {% include 'resume_manager/_display_recurse.html' with data_subsection=data.section_children name=name profession=profession %} </div> + + {% if data.separator_after %} + <hr> + {% endif %} + {% endfor %} diff --git a/resume_manager_core/templates/resume_manager/_display_recurse_debug.html b/resume_manager_core/templates/resume_manager/_display_recurse_debug.html index 461c94a04beafe460a45a33242d604cd3a321fb3..8a79d4774b29f0c6887d20d10c627b5266064cf2 100644 --- a/resume_manager_core/templates/resume_manager/_display_recurse_debug.html +++ b/resume_manager_core/templates/resume_manager/_display_recurse_debug.html @@ -4,7 +4,7 @@ <ul> {% for data in data_subsection %} <li> - <p>Element: {{ data.section }} || CSS Classes: {{ data.section_css }}</p> + <p>Element: {{ data.section }} || Display: {{ data.display_category }} || CSS Classes: {{ data.section_css }}</p> {% include 'resume_manager/_display_recurse_debug.html' with data_subsection=data.section_children %} </li> diff --git a/resume_manager_core/templates/resume_manager/display.html b/resume_manager_core/templates/resume_manager/display.html index 0dbd5bd5a7acfc24229c4f89b6d03acb13519b56..39869f7f95d9e8fccf97fe4e7d11fa13e2b9701b 100644 --- a/resume_manager_core/templates/resume_manager/display.html +++ b/resume_manager_core/templates/resume_manager/display.html @@ -33,7 +33,13 @@ {% block body %} <body class="{{ resume_theme.css_classes }}"> - {% include 'resume_manager/_display_recurse.html' with data_subsection=resume_data %} + {% include 'resume_manager/_display_recurse.html' with data_subsection=resume_data content=resume_content %} + + + <hr> + + <p>User & Profession:</p> + <p>{{ resume_content.name }} || {{ resume_content.profession }}</p> <hr> diff --git a/resume_manager_core/views.py b/resume_manager_core/views.py index 8ae43f9f04285663bf81d1d99cf6a9216e72585e..46672c1ac288dfab8540f04e52e144aab396c903 100644 --- a/resume_manager_core/views.py +++ b/resume_manager_core/views.py @@ -12,6 +12,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.shortcuts import get_object_or_404, redirect from django.views.generic import DetailView, ListView, UpdateView from django.urls import reverse +from django.utils.safestring import mark_safe # Internal Imports. from .models import ( @@ -90,6 +91,10 @@ class DisplayResume(DetailView): # Call parent logic. context = super().get_context_data(**kwargs) + # Get general resume data. + user_name = '{0} {1}'.format(self.resume.user.first_name, self.resume.user.last_name) + user_profession = mark_safe(self.resume.profession) + # Get all sections for resume. resume_sections = ResumeSection.objects.filter(resume=self.resume) @@ -128,13 +133,27 @@ class DisplayResume(DetailView): 'section': resume_page, 'section_children': section_children_data, 'section_css': section_css_data, + 'separator_before': False, + 'separator_after': False, + 'display_category': 'None', }) + # Pull together possible resume content. + resume_content = { + 'name': user_name, + 'profession': user_profession, + 'contact': None, + 'education': None, + 'experience': None, + 'skills': None, + } + # Update template context. context.update({ 'resume': self.resume, 'resume_theme': self.resume.theme, 'resume_data': resume_data, + 'resume_content': resume_content, }) # Return updated context. @@ -181,6 +200,9 @@ class DisplayResume(DetailView): 'section': current_section, 'section_children': section_children_data, 'section_css': section_css_data, + 'separator_before': current_section.separator_before, + 'separator_after': current_section.separator_after, + 'display_category': ResumeSection.DISPLAY_CATEGORY_CHOICES[current_section.display_category][1], # 'section_header': section_header, # 'section_key_value_pairs': section_key_value_pairs, # 'section_items': section_items,