summaryrefslogtreecommitdiff
path: root/bak
diff options
context:
space:
mode:
authorluxagraf <sng@luxagraf.net>2025-01-03 18:46:40 -0600
committerluxagraf <sng@luxagraf.net>2025-01-03 18:46:40 -0600
commitfe7d43f308bbc3953d4a88480b8088d12cbcb0b6 (patch)
tree3aa10d1ac8e041ad2b78a5acf6b29febad6a5fe3 /bak
parentdf3bc581e496412ef8c263dbf1cfe00f184e4e59 (diff)
archived old not used apps
Diffstat (limited to 'bak')
-rw-r--r--bak/unused_apps/budget/0007_luxpurchase_cat.py20
-rw-r--r--bak/unused_apps/budget/admin.py32
-rw-r--r--bak/unused_apps/budget/migrations/0001_initial.py36
-rw-r--r--bak/unused_apps/budget/migrations/0002_alter_luxpurchase_amount.py18
-rw-r--r--bak/unused_apps/budget/migrations/0003_alter_luxpurchase_category_alter_luxpurchase_source.py23
-rw-r--r--bak/unused_apps/budget/migrations/0004_alter_luxpurchase_source.py19
-rw-r--r--bak/unused_apps/budget/migrations/0005_luxspendingcategory_luxfixedmonthly.py33
-rw-r--r--bak/unused_apps/budget/migrations/0006_remove_luxfixedmonthly_cat_and_more.py23
-rw-r--r--bak/unused_apps/budget/migrations/0007_luxpurchase_cat.py19
-rw-r--r--bak/unused_apps/budget/migrations/0008_remove_luxpurchase_category.py17
-rw-r--r--bak/unused_apps/budget/migrations/0009_rename_cat_luxpurchase_category.py18
-rw-r--r--bak/unused_apps/budget/migrations/0010_luxfixedmonthly_amount.py18
-rw-r--r--bak/unused_apps/budget/migrations/0011_luxpaymentmethod_alter_luxfixedmonthly_amount_and_more.py31
-rw-r--r--bak/unused_apps/budget/migrations/__init__.py0
-rw-r--r--bak/unused_apps/budget/models.py80
-rw-r--r--bak/unused_apps/budget/templates/budget/base.html35
-rw-r--r--bak/unused_apps/budget/templates/budget/create_cat_form.html26
-rw-r--r--bak/unused_apps/budget/templates/budget/create_form.html26
-rw-r--r--bak/unused_apps/budget/templates/budget/luxpurchase_list.html58
-rw-r--r--bak/unused_apps/budget/templates/budget/update_form.html20
-rw-r--r--bak/unused_apps/budget/urls.py29
-rw-r--r--bak/unused_apps/budget/views.py57
-rw-r--r--bak/unused_apps/resume/admin.py59
-rw-r--r--bak/unused_apps/resume/build.py75
-rw-r--r--bak/unused_apps/resume/migrations/0001_initial.py49
-rw-r--r--bak/unused_apps/resume/migrations/0002_auto_20151207_2105.py25
-rw-r--r--bak/unused_apps/resume/migrations/0003_auto_20151211_1925.py19
-rw-r--r--bak/unused_apps/resume/migrations/0004_job_resume.py37
-rw-r--r--bak/unused_apps/resume/migrations/0005_job_slug.py18
-rw-r--r--bak/unused_apps/resume/migrations/0006_auto_20190112_1257.py22
-rw-r--r--bak/unused_apps/resume/migrations/0007_auto_20190113_1128.py18
-rw-r--r--bak/unused_apps/resume/migrations/0008_auto_20190113_1139.py24
-rw-r--r--bak/unused_apps/resume/migrations/0009_job_body_html.py18
-rw-r--r--bak/unused_apps/resume/migrations/0010_auto_20190113_1147.py25
-rw-r--r--bak/unused_apps/resume/migrations/0011_auto_20190114_0227.py23
-rw-r--r--bak/unused_apps/resume/migrations/__init__.py0
-rw-r--r--bak/unused_apps/resume/models.py98
-rw-r--r--bak/unused_apps/resume/urls.py48
-rw-r--r--bak/unused_apps/resume/views.py60
39 files changed, 1256 insertions, 0 deletions
diff --git a/bak/unused_apps/budget/0007_luxpurchase_cat.py b/bak/unused_apps/budget/0007_luxpurchase_cat.py
new file mode 100644
index 0000000..b7bb553
--- /dev/null
+++ b/bak/unused_apps/budget/0007_luxpurchase_cat.py
@@ -0,0 +1,20 @@
+# Generated by Django 4.0.6 on 2022-11-12 12:53
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0006_remove_luxfixedmonthly_cat_and_more'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='luxpurchase',
+ name='cat',
+ field=models.ForeignKey(default='Grocery & Home', on_delete=django.db.models.deletion.CASCADE, to='budget.luxspendingcategory'),
+ preserve_default=False,
+ ),
+ ]
diff --git a/bak/unused_apps/budget/admin.py b/bak/unused_apps/budget/admin.py
new file mode 100644
index 0000000..0f578fb
--- /dev/null
+++ b/bak/unused_apps/budget/admin.py
@@ -0,0 +1,32 @@
+from django.contrib import admin
+from .models import LuxSource, LuxPurchase, LuxSpendingCategory, LuxFixedMonthly, LuxPaymentMethod
+
+
+@admin.register(LuxSpendingCategory)
+class SourceAdmin(admin.ModelAdmin):
+ list_display = ('name',)
+
+
+@admin.register(LuxSource)
+class SourceAdmin(admin.ModelAdmin):
+ list_display = ('name',)
+
+
+@admin.register(LuxPurchase)
+class PurchaseAdmin(admin.ModelAdmin):
+ list_display = ('source', 'amount', 'category' )
+ search_fields = ['source', 'amount']
+ list_filter = ('category',)
+
+ class Media:
+ js = ('next-prev-links.js',)
+
+
+@admin.register(LuxFixedMonthly)
+class LuxFixedMonthlyAdmin(admin.ModelAdmin):
+ list_display = ('name', 'amount', 'category', 'payment_method')
+
+
+@admin.register(LuxPaymentMethod)
+class LuxPaymentMethodAdmin(admin.ModelAdmin):
+ list_display = ('name',)
diff --git a/bak/unused_apps/budget/migrations/0001_initial.py b/bak/unused_apps/budget/migrations/0001_initial.py
new file mode 100644
index 0000000..30bd5a1
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0001_initial.py
@@ -0,0 +1,36 @@
+# Generated by Django 4.0.6 on 2022-11-11 17:50
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='LuxSource',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=200)),
+ ('date_recorded', models.DateTimeField(auto_now_add=True)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='LuxPurchase',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('amount', models.IntegerField()),
+ ('category', models.IntegerField(choices=[(0, 'Grocery and Home'), (1, 'Gas'), (2, 'Bus'), (3, 'Lodging'), (4, 'Books'), (5, 'Clothes'), (6, 'Eating Out'), (7, 'Misc')], default=0)),
+ ('date_recorded', models.DateTimeField(auto_now_add=True)),
+ ('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='budget.luxsource')),
+ ],
+ options={
+ 'ordering': ('-date_recorded',),
+ },
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0002_alter_luxpurchase_amount.py b/bak/unused_apps/budget/migrations/0002_alter_luxpurchase_amount.py
new file mode 100644
index 0000000..06400dd
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0002_alter_luxpurchase_amount.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.0.6 on 2022-11-11 18:06
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='luxpurchase',
+ name='amount',
+ field=models.DecimalField(decimal_places=2, max_digits=6),
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0003_alter_luxpurchase_category_alter_luxpurchase_source.py b/bak/unused_apps/budget/migrations/0003_alter_luxpurchase_category_alter_luxpurchase_source.py
new file mode 100644
index 0000000..a880acf
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0003_alter_luxpurchase_category_alter_luxpurchase_source.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.0.6 on 2022-11-12 10:18
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0002_alter_luxpurchase_amount'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='luxpurchase',
+ name='category',
+ field=models.IntegerField(choices=[(0, 'Grocery & Home'), (1, 'Gas'), (2, 'Bus'), (3, 'Lodging'), (4, 'Books'), (5, 'Clothes'), (6, 'Eating Out'), (7, 'Misc')], default=0),
+ ),
+ migrations.AlterField(
+ model_name='luxpurchase',
+ name='source',
+ field=models.IntegerField(choices=[(0, 'Walmart'), (1, 'Grocery Store'), (2, 'Gas Station'), (3, 'Amazon')], default=0),
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0004_alter_luxpurchase_source.py b/bak/unused_apps/budget/migrations/0004_alter_luxpurchase_source.py
new file mode 100644
index 0000000..0eab270
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0004_alter_luxpurchase_source.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.0.6 on 2022-11-12 10:46
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0003_alter_luxpurchase_category_alter_luxpurchase_source'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='luxpurchase',
+ name='source',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='budget.luxsource'),
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0005_luxspendingcategory_luxfixedmonthly.py b/bak/unused_apps/budget/migrations/0005_luxspendingcategory_luxfixedmonthly.py
new file mode 100644
index 0000000..66af470
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0005_luxspendingcategory_luxfixedmonthly.py
@@ -0,0 +1,33 @@
+# Generated by Django 4.0.6 on 2022-11-12 12:52
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0004_alter_luxpurchase_source'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='LuxSpendingCategory',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=200)),
+ ('date_recorded', models.DateTimeField(auto_now_add=True)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='LuxFixedMonthly',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=200)),
+ ('category', models.IntegerField(choices=[(0, 'Grocery & Home'), (1, 'Gas'), (2, 'Bus'), (3, 'Lodging'), (4, 'Books'), (5, 'Clothes'), (6, 'Eating Out'), (7, 'Misc')], default=0)),
+ ('date_recorded', models.DateTimeField(auto_now_add=True)),
+ ('cat', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='budget.luxspendingcategory')),
+ ('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='budget.luxsource')),
+ ],
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0006_remove_luxfixedmonthly_cat_and_more.py b/bak/unused_apps/budget/migrations/0006_remove_luxfixedmonthly_cat_and_more.py
new file mode 100644
index 0000000..3631cc3
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0006_remove_luxfixedmonthly_cat_and_more.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.0.6 on 2022-11-12 12:53
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0005_luxspendingcategory_luxfixedmonthly'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='luxfixedmonthly',
+ name='cat',
+ ),
+ migrations.AlterField(
+ model_name='luxfixedmonthly',
+ name='category',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='budget.luxspendingcategory'),
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0007_luxpurchase_cat.py b/bak/unused_apps/budget/migrations/0007_luxpurchase_cat.py
new file mode 100644
index 0000000..7a8e548
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0007_luxpurchase_cat.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.0.6 on 2022-11-12 12:56
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0006_remove_luxfixedmonthly_cat_and_more'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='luxpurchase',
+ name='cat',
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='budget.luxspendingcategory'),
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0008_remove_luxpurchase_category.py b/bak/unused_apps/budget/migrations/0008_remove_luxpurchase_category.py
new file mode 100644
index 0000000..7e2a0b9
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0008_remove_luxpurchase_category.py
@@ -0,0 +1,17 @@
+# Generated by Django 4.0.6 on 2022-11-12 13:15
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0007_luxpurchase_cat'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='luxpurchase',
+ name='category',
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0009_rename_cat_luxpurchase_category.py b/bak/unused_apps/budget/migrations/0009_rename_cat_luxpurchase_category.py
new file mode 100644
index 0000000..c0efeff
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0009_rename_cat_luxpurchase_category.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.0.6 on 2022-11-12 13:16
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0008_remove_luxpurchase_category'),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name='luxpurchase',
+ old_name='cat',
+ new_name='category',
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0010_luxfixedmonthly_amount.py b/bak/unused_apps/budget/migrations/0010_luxfixedmonthly_amount.py
new file mode 100644
index 0000000..15461d4
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0010_luxfixedmonthly_amount.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.0.6 on 2022-11-13 10:48
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0009_rename_cat_luxpurchase_category'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='luxfixedmonthly',
+ name='amount',
+ field=models.DecimalField(decimal_places=2, max_digits=6, null=True),
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/0011_luxpaymentmethod_alter_luxfixedmonthly_amount_and_more.py b/bak/unused_apps/budget/migrations/0011_luxpaymentmethod_alter_luxfixedmonthly_amount_and_more.py
new file mode 100644
index 0000000..4186c52
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/0011_luxpaymentmethod_alter_luxfixedmonthly_amount_and_more.py
@@ -0,0 +1,31 @@
+# Generated by Django 4.0.6 on 2022-11-13 11:11
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('budget', '0010_luxfixedmonthly_amount'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='LuxPaymentMethod',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=200)),
+ ],
+ ),
+ migrations.AlterField(
+ model_name='luxfixedmonthly',
+ name='amount',
+ field=models.DecimalField(decimal_places=2, max_digits=6),
+ ),
+ migrations.AddField(
+ model_name='luxfixedmonthly',
+ name='payment_method',
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='budget.luxpaymentmethod'),
+ ),
+ ]
diff --git a/bak/unused_apps/budget/migrations/__init__.py b/bak/unused_apps/budget/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bak/unused_apps/budget/migrations/__init__.py
diff --git a/bak/unused_apps/budget/models.py b/bak/unused_apps/budget/models.py
new file mode 100644
index 0000000..512b019
--- /dev/null
+++ b/bak/unused_apps/budget/models.py
@@ -0,0 +1,80 @@
+import calendar
+import datetime
+from django.db import models
+from django.db.models import Sum
+from django.urls import reverse
+from django.utils import timezone
+
+
+class LuxSource(models.Model):
+ name = models.CharField(max_length=200)
+ date_recorded = models.DateTimeField(auto_now_add=True)
+
+ def __str__(self):
+ return self.name
+
+
+class LuxSpendingCategory(models.Model):
+ name = models.CharField(max_length=200)
+ date_recorded = models.DateTimeField(auto_now_add=True)
+
+ def __str__(self):
+ return self.name
+
+
+class LuxPaymentMethod(models.Model):
+ name = models.CharField(max_length=200)
+
+ def __str__(self):
+ return self.name
+
+
+class LuxFixedMonthly(models.Model):
+ name = models.CharField(max_length=200)
+ amount = models.DecimalField(max_digits=6, decimal_places=2)
+ source = models.ForeignKey(LuxSource, on_delete=models.CASCADE)
+ category = models.ForeignKey(LuxSpendingCategory, on_delete=models.CASCADE)
+ payment_method = models.ForeignKey(LuxPaymentMethod, null=True, on_delete=models.CASCADE)
+ date_recorded = models.DateTimeField(auto_now_add=True)
+
+ def __str__(self):
+ return self.name
+
+
+class LuxPurchaseStatsManager(models.Manager):
+
+ def get_monthly_spending(self, month=timezone.now().month):
+ last_day = calendar.monthrange(timezone.now().year, month)[1]
+ start_date = datetime.date(timezone.now().year, month, 1)
+ end_date = datetime.date(timezone.now().year, month, last_day)
+ return self.filter(date_recorded__range=(start_date, end_date)).aggregate(Sum('amount'))
+
+ def get_monthly_spending_by_category(self, cat, number_of_months=1):
+ cat = LuxSpendingCategory.objects.get(name=cat)
+ today = timezone.now()
+ month = today.replace(day=1).month
+ start_month = month - number_of_months + 1
+ start_date = datetime.date(timezone.now().year, start_month, 1)
+ last_day = calendar.monthrange(timezone.now().year, month)[1]
+ end_date = datetime.date(timezone.now().year, month, last_day)
+ return self.filter(date_recorded__range=(start_date, end_date)).filter(category=cat).aggregate(Sum('amount'))
+
+
+class LuxPurchase(models.Model):
+ amount = models.DecimalField(max_digits=6, decimal_places=2)
+ source = models.ForeignKey(LuxSource, on_delete=models.CASCADE)
+ category = models.ForeignKey(LuxSpendingCategory, null=True, on_delete=models.CASCADE)
+ date_recorded = models.DateTimeField(auto_now_add=True)
+
+ class Meta:
+ ordering = ('-date_recorded',)
+
+ def __str__(self):
+ return "%s - %s" %(self.amount, self.source.name)
+
+ def get_absolute_url(self):
+ return reverse("luxbudget:detail", kwargs={"pk": self.pk})
+
+ objects = models.Manager() # The default manager.
+ stats = LuxPurchaseStatsManager()
+
diff --git a/bak/unused_apps/budget/templates/budget/base.html b/bak/unused_apps/budget/templates/budget/base.html
new file mode 100644
index 0000000..9d6bfd0
--- /dev/null
+++ b/bak/unused_apps/budget/templates/budget/base.html
@@ -0,0 +1,35 @@
+<html>
+<head>
+ <title>{% block pagetitle %}Luxagraf - Trading{% endblock %}</title>
+ <meta charset="utf-8">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ {%block stylesheet%}<link rel="stylesheet"
+ href="/media/trading.css{%comment%}?{% now "u" %}{%endcomment%}"
+ media="screen">{%endblock%}
+ <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+<style>
+ select {
+ border: 1px solid #dedddd;
+ border-radius: 4px;
+ padding: 2.2rem 0 0.75rem 0.75rem;
+ width: 96%;
+ font-size: 24px;
+ font-size: 1.5rem;
+ }
+</style>
+ {%block extrahead%}{%endblock%}
+</head>
+ </head>
+ <body>
+ <nav>
+ <span class="nav-item"><a href="{% url 'luxbudget:list' %}">Home</a></span>
+ <span class="nav-item"><a href="{% url 'luxbudget:createcatview' %}">Add Cat</a></span>
+ </nav>
+ {% block content %}
+ {% endblock %}
+ </body>
+ {% block js %}
+ {% endblock %}
+</html>
+
diff --git a/bak/unused_apps/budget/templates/budget/create_cat_form.html b/bak/unused_apps/budget/templates/budget/create_cat_form.html
new file mode 100644
index 0000000..03e996a
--- /dev/null
+++ b/bak/unused_apps/budget/templates/budget/create_cat_form.html
@@ -0,0 +1,26 @@
+{% extends 'budget/base.html' %}
+{% load typogrify_tags %}
+ {% block pagetitle %}Luxagraf - Record Purchase{% endblock %}
+ {% block content %}
+ <form id="id_form" action="{% url 'luxbudget:createcatview' %}" method="post" class="big">{% csrf_token %}
+ {% for field in form %}
+ <fieldset>
+ {{ field.errors }}
+ {% if field.name == 'status'%}
+ <label class="hide" for="id_status">Status:</label>{{ field }}
+ {% else %}
+ {{ field.label_tag }} {{ field }}
+ {% endif %}
+ {% if field.help_text %}
+ <p class="help">{{ field.help_text|safe }}</p>
+ {% endif %}
+ </fieldset>
+{% endfor %}
+ <div class="flex">
+ <input type="submit" name="post" class="btn" value="record purchase"/>
+ </div>
+ </form>
+ {% endblock %}
+
+ {% block js %}
+ {% endblock %}
diff --git a/bak/unused_apps/budget/templates/budget/create_form.html b/bak/unused_apps/budget/templates/budget/create_form.html
new file mode 100644
index 0000000..2d38acf
--- /dev/null
+++ b/bak/unused_apps/budget/templates/budget/create_form.html
@@ -0,0 +1,26 @@
+{% extends 'budget/base.html' %}
+{% load typogrify_tags %}
+ {% block pagetitle %}Luxagraf - Record Purchase{% endblock %}
+ {% block content %}
+ <form id="id_form" action="{% url 'luxbudget:createview' %}" method="post" class="big">{% csrf_token %}
+ {% for field in form %}
+ <fieldset>
+ {{ field.errors }}
+ {% if field.name == 'status'%}
+ <label class="hide" for="id_status">Status:</label>{{ field }}
+ {% else %}
+ {{ field.label_tag }} {{ field }}
+ {% endif %}
+ {% if field.help_text %}
+ <p class="help">{{ field.help_text|safe }}</p>
+ {% endif %}
+ </fieldset>
+{% endfor %}
+ <div class="flex">
+ <input type="submit" name="post" class="btn" value="record purchase"/>
+ </div>
+ </form>
+ {% endblock %}
+
+ {% block js %}
+ {% endblock %}
diff --git a/bak/unused_apps/budget/templates/budget/luxpurchase_list.html b/bak/unused_apps/budget/templates/budget/luxpurchase_list.html
new file mode 100644
index 0000000..c03f14d
--- /dev/null
+++ b/bak/unused_apps/budget/templates/budget/luxpurchase_list.html
@@ -0,0 +1,58 @@
+{% extends 'budget/base.html' %}
+{% load typogrify_tags %}
+ {% block pagetitle %}Luxagraf - Record Purchase{% endblock %}
+ {% block content %}
+ <a href="record" class="btn" >Add New</a>
+ <h3>Recent Purchases</h3>
+ <table>
+ <thead>
+ <tr>
+ <th>Date</th>
+ <th>Store</th>
+ <th>Category</th>
+ <th>Amount</th>
+ </tr>
+ </thead>
+ {% for object in object_list %}
+ <tr>
+ <td><a href="{{object.get_absolute_url}}">{{object.date_recorded|date:"m/j"}}</a></td>
+ <td>{{object.source.name}}</td>
+ <td>{{object.category.name}}</td>
+ <td>${{object.amount}}</td>
+ </tr>
+ {% endfor %}
+ <tr>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="right">{{month}} Total:</td>
+ <td>${{monthly_spending.amount__sum}}</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="right">{{month}} Food Total:</td>
+ <td>${{food_total.amount__sum}}</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ <td class="right">{{month}} Lodging Total:</td>
+ <td>${{lodge_total.amount__sum}}</td>
+ </tr>
+ </table>
+
+ <h3>Previous Monthly Spending</h3>
+ {{month_1}}: {{monthly_spending_1.amount__sum}}
+ {{month_2}}: {{monthly_spending_2.amount__sum}}
+ {{month_3}}: {{monthly_spending_3.amount__sum}}
+
+
+ <h3>Spending by Category (Last 3 Months)</h3>
+
+ {{cat.amount__sum}}
+ {% endblock %}
+
+
diff --git a/bak/unused_apps/budget/templates/budget/update_form.html b/bak/unused_apps/budget/templates/budget/update_form.html
new file mode 100644
index 0000000..b19efaa
--- /dev/null
+++ b/bak/unused_apps/budget/templates/budget/update_form.html
@@ -0,0 +1,20 @@
+{% extends 'budget/base.html' %}
+{% load typogrify_tags %}
+{% block content %}
+ <form id="id_form" action="" method="post" class="big">{% csrf_token %}
+ {% for field in form %}
+ <fieldset>
+ {{ field.errors }}
+ {% if field.name == 'status'%}
+ <label class="hide" for="id_status">Status:</label>{{ field }}
+ {% else %}
+ {{ field.label_tag }} {{ field }}
+ {% endif %}
+ {% if field.help_text %}
+ <p class="help">{{ field.help_text|safe }}</p>
+ {% endif %}
+ </fieldset>
+{% endfor %}
+ <input type="submit" name="post" class="btn" value="update purchase"/>
+ </form>
+ {% endblock %}
diff --git a/bak/unused_apps/budget/urls.py b/bak/unused_apps/budget/urls.py
new file mode 100644
index 0000000..ef7852f
--- /dev/null
+++ b/bak/unused_apps/budget/urls.py
@@ -0,0 +1,29 @@
+from django.urls import path, re_path
+
+from . import views
+
+app_name = "luxbudget"
+
+urlpatterns = [
+ path(
+ 'cat',
+ views.LuxSourceModelFormView.as_view(),
+ name='createcatview'
+ ),
+ path(
+ 'record',
+ views.PurchaseModelFormView.as_view(),
+ name='createview'
+ ),
+ path(
+ 'purchase/<pk>',
+ views.PurchaseUpdateView.as_view(),
+ name='detail'
+ ),
+ path(
+ '',
+ views.LuxPurchaseListView.as_view(),
+ {'page':1},
+ name='list'
+ ),
+]
diff --git a/bak/unused_apps/budget/views.py b/bak/unused_apps/budget/views.py
new file mode 100644
index 0000000..6a34b1e
--- /dev/null
+++ b/bak/unused_apps/budget/views.py
@@ -0,0 +1,57 @@
+import datetime
+from django.shortcuts import render
+from django.views.generic.edit import CreateView, UpdateView
+from django.utils import timezone
+from utils.views import PaginatedListView
+from .models import LuxPurchase, LuxSource
+
+class LuxSourceModelFormView(CreateView):
+ model = LuxSource
+ fields = ['name']
+ success_url = '/spending/'
+ template_name = 'budget/create_cat_form.html'
+
+
+class PurchaseModelFormView(CreateView):
+ model = LuxPurchase
+ fields = ['amount', 'source', 'category']
+ success_url = '/spending/'
+ template_name = 'budget/create_form.html'
+
+
+class PurchaseUpdateView(UpdateView):
+ model = LuxPurchase
+ fields = ['amount', 'source', 'category']
+ success_url = '/spending/'
+ template_name = 'budget/update_form.html'
+
+
+class LuxPurchaseListView(PaginatedListView):
+ model = LuxPurchase
+
+ def get_queryset(self):
+ queryset = super(LuxPurchaseListView, self).get_queryset()
+ return queryset[:30]
+
+ def get_context_data(self, **kwargs):
+ '''
+ Get Monthly Spending for a nice bar chart
+ '''
+ # Call the base implementation first to get a context
+ context = super(LuxPurchaseListView, self).get_context_data(**kwargs)
+ context['monthly_spending'] = LuxPurchase.stats.get_monthly_spending()
+ today = timezone.now()
+ first = today.replace(day=1)
+ month_1 = first - datetime.timedelta(days=1)
+ month_2 = month_1.replace(day=1) - datetime.timedelta(days=1)
+ month_3 = month_2.replace(day=1) - datetime.timedelta(days=1)
+ context['month'] = today.strftime('%h')
+ context['monthly_spending_1'] = LuxPurchase.stats.get_monthly_spending(month_1.month)
+ context['month_1'] = month_1.strftime('%h')
+ context['monthly_spending_2'] = LuxPurchase.stats.get_monthly_spending(month_2.month)
+ context['month_2'] = month_2.strftime('%h')
+ context['monthly_spending_3'] = LuxPurchase.stats.get_monthly_spending(month_3.month)
+ context['month_3'] = month_3.strftime('%h')
+ context['food_total'] = LuxPurchase.stats.get_monthly_spending_by_category("Grocery/Home", 1)
+ context['lodge_total'] = LuxPurchase.stats.get_monthly_spending_by_category("Lodging", 1)
+ return context
diff --git a/bak/unused_apps/resume/admin.py b/bak/unused_apps/resume/admin.py
new file mode 100644
index 0000000..8646cca
--- /dev/null
+++ b/bak/unused_apps/resume/admin.py
@@ -0,0 +1,59 @@
+from django.contrib import admin
+
+from utils.widgets import LGEntryForm
+from .models import Publisher, PubItem, Job, Resume
+
+
+@admin.register(Job)
+class JobAdmin(admin.ModelAdmin):
+ pass
+
+
+@admin.register(Resume)
+class ResumeAdmin(admin.ModelAdmin):
+ fieldsets = (
+ ('', {
+ 'fields': (
+ 'title',
+ 'profile',
+ 'skills',
+ 'jobs',
+ 'slug',
+ ),
+ 'classes': (
+ 'show',
+ 'extrapretty',
+ 'wide'
+ )
+ }
+ ),
+ )
+
+
+@admin.register(Publisher)
+class PublisherAdmin(admin.ModelAdmin):
+ pass
+
+
+@admin.register(PubItem)
+class PubItemAdmin(admin.ModelAdmin):
+ form = LGEntryForm
+ list_display = ('title', 'pub_date', 'publisher', 'admin_link')
+ fieldsets = (
+ ('', {
+ 'fields': (
+ 'title',
+ 'body_markdown',
+ 'slug',
+ 'pub_date',
+ 'url',
+ 'publisher',
+ ),
+ 'classes': (
+ 'show',
+ 'extrapretty',
+ 'wide'
+ )
+ }
+ ),
+ )
diff --git a/bak/unused_apps/resume/build.py b/bak/unused_apps/resume/build.py
new file mode 100644
index 0000000..4f051d5
--- /dev/null
+++ b/bak/unused_apps/resume/build.py
@@ -0,0 +1,75 @@
+import os
+from django.urls import reverse
+from builder.base import BuildNew
+from pages.models import Page
+
+from .models import Publisher
+
+
+class BuildPubs(BuildNew):
+
+ def build(self):
+ self.build_detail_view()
+ self.build_publisher_list()
+ self.build_list_view(
+ base_path=reverse("resume:list"),
+ paginate_by=9999
+ )
+
+ def get_model_queryset(self):
+ return self.model.objects.all()
+
+ def build_detail_view(self):
+ for obj in self.get_model_queryset():
+ url = obj.get_absolute_url()
+ print(url)
+ path, slug = os.path.split(url)
+ path = '%s/' % path
+ # write html
+ response = self.client.get(url)
+ print(path, slug)
+ self.write_file(path, response.content, filename=slug)
+
+ def build_publisher_list(self):
+ publishers = Publisher.objects.all()
+ for publisher in publishers:
+ self.build_list_view(
+ base_path=reverse("resume:list_by_publisher", kwargs={'publisher': publisher.slug, }),
+ paginate_by=9999
+ )
+
+
+class BuildResume(BuildNew):
+
+ def build(self):
+ self.build_pages()
+
+ def get_model_queryset(self):
+ return self.model.objects.all()
+
+ def build_pages(self):
+ '''
+ build out /work/index.html and work/resume.html
+ '''
+ pages = self.get_model_queryset().filter(app="resume", build=True)
+ for obj in pages:
+ path = "work/"
+ if obj.slug == "profile":
+ url = '/work/'
+ slug = "index"
+ else:
+ url = "/%s%s/" % (path, obj.slug)
+ slug = obj.slug
+ # write html
+ response = self.client.get(url, HTTP_HOST='127.0.0.1')
+ self.write_file(path, response.content, filename=slug)
+
+
+def pub_builder():
+ j = BuildPubs("resume", "pubitem")
+ j.build()
+
+
+def resume_builder():
+ j = BuildResume("pages", "page")
+ j.build()
diff --git a/bak/unused_apps/resume/migrations/0001_initial.py b/bak/unused_apps/resume/migrations/0001_initial.py
new file mode 100644
index 0000000..14c9348
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0001_initial.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9 on 2015-12-07 21:04
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='PubItem',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(max_length=200)),
+ ('slug', models.CharField(max_length=50)),
+ ('body_markdown', models.TextField(blank=True, null=True)),
+ ('body_html', models.TextField(blank=True, null=True)),
+ ('url', models.CharField(blank=True, max_length=200, null=True)),
+ ('pub_date', models.DateTimeField(verbose_name='Date published')),
+ ],
+ options={
+ 'ordering': ('-pub_date',),
+ },
+ ),
+ migrations.CreateModel(
+ name='Publisher',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=200)),
+ ('slug', models.SlugField()),
+ ('body_markdown', models.TextField(blank=True, null=True)),
+ ('body_html', models.TextField(blank=True, null=True)),
+ ('url', models.CharField(blank=True, max_length=200, null=True)),
+ ('payment_time', models.DecimalField(decimal_places=0, max_digits=2)),
+ ],
+ ),
+ migrations.AddField(
+ model_name='pubitem',
+ name='publisher',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resume.Publisher'),
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0002_auto_20151207_2105.py b/bak/unused_apps/resume/migrations/0002_auto_20151207_2105.py
new file mode 100644
index 0000000..7ac653f
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0002_auto_20151207_2105.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9 on 2015-12-07 21:05
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='publisher',
+ options={'ordering': ('-order',)},
+ ),
+ migrations.AddField(
+ model_name='publisher',
+ name='order',
+ field=models.DecimalField(decimal_places=0, default=1, max_digits=1),
+ preserve_default=False,
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0003_auto_20151211_1925.py b/bak/unused_apps/resume/migrations/0003_auto_20151211_1925.py
new file mode 100644
index 0000000..77e3049
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0003_auto_20151211_1925.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9 on 2015-12-11 19:25
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0002_auto_20151207_2105'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='publisher',
+ options={'ordering': ('order',)},
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0004_job_resume.py b/bak/unused_apps/resume/migrations/0004_job_resume.py
new file mode 100644
index 0000000..e056fec
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0004_job_resume.py
@@ -0,0 +1,37 @@
+# Generated by Django 2.1.1 on 2019-01-12 12:45
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0003_auto_20151211_1925'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Job',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(max_length=200)),
+ ('employer', models.CharField(max_length=200)),
+ ('date_start', models.DateField(verbose_name='Date Start')),
+ ('date_end', models.DateField(blank=True, null=True, verbose_name='Date End')),
+ ('body_markdown', models.TextField(blank=True, null=True)),
+ ],
+ options={
+ 'ordering': ('-date_end',),
+ },
+ ),
+ migrations.CreateModel(
+ name='Resume',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(max_length=200)),
+ ('profile', models.TextField()),
+ ('skills', models.TextField()),
+ ('experience', models.ManyToManyField(to='resume.Job')),
+ ],
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0005_job_slug.py b/bak/unused_apps/resume/migrations/0005_job_slug.py
new file mode 100644
index 0000000..d18baeb
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0005_job_slug.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.1.1 on 2019-01-12 12:56
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0004_job_resume'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='job',
+ name='slug',
+ field=models.CharField(blank=True, max_length=50),
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0006_auto_20190112_1257.py b/bak/unused_apps/resume/migrations/0006_auto_20190112_1257.py
new file mode 100644
index 0000000..9ee8f1b
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0006_auto_20190112_1257.py
@@ -0,0 +1,22 @@
+# Generated by Django 2.1.1 on 2019-01-12 12:57
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0005_job_slug'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='job',
+ name='slug',
+ ),
+ migrations.AddField(
+ model_name='resume',
+ name='slug',
+ field=models.CharField(blank=True, max_length=50),
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0007_auto_20190113_1128.py b/bak/unused_apps/resume/migrations/0007_auto_20190113_1128.py
new file mode 100644
index 0000000..a635258
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0007_auto_20190113_1128.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.1.1 on 2019-01-13 11:28
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0006_auto_20190112_1257'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='job',
+ name='employer',
+ field=models.CharField(max_length=200, null=True),
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0008_auto_20190113_1139.py b/bak/unused_apps/resume/migrations/0008_auto_20190113_1139.py
new file mode 100644
index 0000000..29d975d
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0008_auto_20190113_1139.py
@@ -0,0 +1,24 @@
+# Generated by Django 2.1.1 on 2019-01-13 11:39
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0007_auto_20190113_1128'),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name='resume',
+ old_name='experience',
+ new_name='jobs',
+ ),
+ migrations.AlterField(
+ model_name='job',
+ name='employer',
+ field=models.CharField(blank=True, default='', max_length=200),
+ preserve_default=False,
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0009_job_body_html.py b/bak/unused_apps/resume/migrations/0009_job_body_html.py
new file mode 100644
index 0000000..fdeea15
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0009_job_body_html.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.1.1 on 2019-01-13 11:46
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0008_auto_20190113_1139'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='job',
+ name='body_html',
+ field=models.TextField(blank=True, null=True),
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0010_auto_20190113_1147.py b/bak/unused_apps/resume/migrations/0010_auto_20190113_1147.py
new file mode 100644
index 0000000..879bd55
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0010_auto_20190113_1147.py
@@ -0,0 +1,25 @@
+# Generated by Django 2.1.1 on 2019-01-13 11:47
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0009_job_body_html'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='job',
+ name='body_html',
+ field=models.TextField(blank=True, default=''),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='job',
+ name='body_markdown',
+ field=models.TextField(blank=True, default=''),
+ preserve_default=False,
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/0011_auto_20190114_0227.py b/bak/unused_apps/resume/migrations/0011_auto_20190114_0227.py
new file mode 100644
index 0000000..7656c6e
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/0011_auto_20190114_0227.py
@@ -0,0 +1,23 @@
+# Generated by Django 2.1.1 on 2019-01-14 02:27
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('resume', '0010_auto_20190113_1147'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='resume',
+ name='profile_html',
+ field=models.TextField(blank=True),
+ ),
+ migrations.AddField(
+ model_name='resume',
+ name='skills_html',
+ field=models.TextField(blank=True),
+ ),
+ ]
diff --git a/bak/unused_apps/resume/migrations/__init__.py b/bak/unused_apps/resume/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bak/unused_apps/resume/migrations/__init__.py
diff --git a/bak/unused_apps/resume/models.py b/bak/unused_apps/resume/models.py
new file mode 100644
index 0000000..bac3115
--- /dev/null
+++ b/bak/unused_apps/resume/models.py
@@ -0,0 +1,98 @@
+from django.db import models
+from django.utils.encoding import force_str
+from django.urls import reverse
+from django.template.defaultfilters import slugify
+
+from utils.util import markdown_to_html
+
+
+class Publisher(models.Model):
+ name = models.CharField(max_length=200)
+ slug = models.SlugField(max_length=50)
+ body_markdown = models.TextField(null=True, blank=True)
+ body_html = models.TextField(null=True, blank=True)
+ url = models.CharField(max_length=200, blank=True, null=True)
+ payment_time = models.DecimalField(max_digits=2, decimal_places=0)
+ order = models.DecimalField(max_digits=1, decimal_places=0)
+
+ class Meta:
+ ordering = ('order',)
+
+ def __str__(self):
+ return self.name
+
+ def save(self, *args, **kwargs):
+ if self.body_markdown:
+ self.body_html = markdown_to_html(self.body_markdown)
+ super(Publisher, self).save()
+
+
+class PubItem(models.Model):
+ title = models.CharField(max_length=200)
+ slug = models.CharField(max_length=50)
+ body_markdown = models.TextField(null=True, blank=True)
+ body_html = models.TextField(null=True, blank=True)
+ url = models.CharField(max_length=200, blank=True, null=True)
+ pub_date = models.DateTimeField('Date published')
+ publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
+
+ class Meta:
+ ordering = ('-pub_date',)
+
+ def __str__(self):
+ return self.title
+
+ def get_absolute_url(self):
+ return reverse("resume:detail", kwargs={"publisher": self.publisher.slug, "slug": self.slug})
+
+ def admin_link(self):
+ return force_str('<a href="%s">Visit Site</a>' % (self.url))
+ admin_link.allow_tags = True
+ admin_link.short_description = 'Live Article'
+
+ def save(self, *args, **kwargs):
+ if self.body_markdown:
+ self.body_html = markdown_to_html(self.body_markdown)
+ super(PubItem, self).save()
+
+
+class Job(models.Model):
+ title = models.CharField(max_length=200)
+ employer = models.CharField(max_length=200, blank=True)
+ date_start = models.DateField('Date Start')
+ date_end = models.DateField('Date End', null=True, blank=True)
+ body_markdown = models.TextField(blank=True)
+ body_html = models.TextField(blank=True)
+
+ class Meta:
+ ordering = ('-date_end',)
+
+ def __str__(self):
+ return '{} - {}'.format(self.title, self.employer) # py3.1+ only
+
+ def save(self, *args, **kwargs):
+ if self.body_markdown:
+ self.body_html = markdown_to_html(self.body_markdown)
+ super(Job, self).save()
+
+
+class Resume(models.Model):
+ title = models.CharField(max_length=200)
+ slug = models.CharField(max_length=50, blank=True)
+ profile = models.TextField()
+ profile_html = models.TextField(blank=True)
+ skills = models.TextField()
+ skills_html = models.TextField(blank=True)
+ jobs = models.ManyToManyField(Job)
+
+ def __str__(self):
+ return self.title
+
+ def save(self, *args, **kwargs):
+ if self._state.adding and not self.slug:
+ self.slug = slugify(self.title)
+ if self.skills:
+ self.skills_html = markdown_to_html(self.skills)
+ if self.profile:
+ self.profile_html = markdown_to_html(self.profile)
+ super(Resume, self).save()
diff --git a/bak/unused_apps/resume/urls.py b/bak/unused_apps/resume/urls.py
new file mode 100644
index 0000000..de95866
--- /dev/null
+++ b/bak/unused_apps/resume/urls.py
@@ -0,0 +1,48 @@
+from django.urls import path, re_path
+from django.views.generic.base import RedirectView
+
+from . import views
+
+app_name = "resume"
+
+urlpatterns = [
+ path(
+ r'pubs/<str:publisher>/<int:page>/',
+ views.ByPublisherListView.as_view(),
+ name='list_by_publisher',
+ ),
+ path(
+ r'pubs/<str:publisher>/',
+ views.ByPublisherListView.as_view(),
+ {'page': 1},
+ name='list_by_publisher',
+ ),
+ path(
+ r'pubs/<str:page>/',
+ views.PublisherListView.as_view(),
+ name='list',
+ ),
+ path(
+ r'pubs/',
+ views.PublisherListView.as_view(),
+ {'page': 1},
+ name="list"
+ ),
+ path(
+ r'pubs/<str:publisher>/<str:slug>',
+ views.PubItemDetailView.as_view(),
+ name='detail',
+ ),
+ path(
+ r'<str:slug>/',
+ views.PageView.as_view(),
+ {'path': 'work'},
+ name="pages"
+ ),
+ path(
+ r'',
+ views.PageView.as_view(),
+ {'path': 'work', 'slug': 'profile'},
+ name="pages"
+ ),
+]
diff --git a/bak/unused_apps/resume/views.py b/bak/unused_apps/resume/views.py
new file mode 100644
index 0000000..3d0cd8d
--- /dev/null
+++ b/bak/unused_apps/resume/views.py
@@ -0,0 +1,60 @@
+from django.views.generic.detail import DetailView
+from django.views.generic.base import TemplateView
+from django.shortcuts import get_object_or_404
+from utils.views import PaginatedListView
+
+from .models import PubItem, Publisher, Resume
+from pages.models import Page
+
+
+class PublisherListView(PaginatedListView):
+ model = Publisher
+ template_name = 'archives/resume-pubs.html'
+
+ def get_queryset(self):
+ return PubItem.objects.all()
+
+ def get_context_data(self, **kwargs):
+ # Call the base implementation first to get a context
+ context = super(PublisherListView, self).get_context_data(**kwargs)
+ context['pub_list'] = Publisher.objects.all()
+ return context
+
+
+class ByPublisherListView(PaginatedListView):
+ template_name = 'archives/resume-pubs-by-pub.html'
+
+ def get_queryset(self):
+ print(self.kwargs['publisher'])
+ return PubItem.objects.filter(publisher__slug=self.kwargs['publisher'])
+
+ def get_context_data(self, **kwargs):
+ # Call the base implementation first to get a context
+ context = super(ByPublisherListView, self).get_context_data(**kwargs)
+ context['publisher'] = Publisher.objects.get(slug=self.kwargs['publisher'])
+ return context
+
+
+class PubItemDetailView(DetailView):
+ model = PubItem
+ template_name = "details/pubs.html"
+ slug_field = "slug"
+
+
+class PageView(DetailView):
+ model = Page
+ slug_field = "slug"
+
+ def get_object(self, **kwargs):
+ print("calling page view")
+ return get_object_or_404(Page, path=self.kwargs['path'], slug=self.kwargs['slug'])
+
+ def get_template_names(self):
+ return ["details/%s.html" % self.object.slug, 'details/page.html']
+
+ def get_context_data(self, **kwargs):
+ # Call the base implementation first to get a context
+ context = super(PageView, self).get_context_data(**kwargs)
+ if self.kwargs['slug'] == 'resume':
+ context['resume'] = Resume.objects.get(title='base')
+ return context