]> git.0d.be Git - django-panik-matos.git/commitdiff
initial models and views
authorFrédéric Péters <fpeters@0d.be>
Sat, 28 Jun 2014 09:44:19 +0000 (11:44 +0200)
committerFrédéric Péters <fpeters@0d.be>
Sat, 28 Jun 2014 09:44:19 +0000 (11:44 +0200)
12 files changed:
MANIFEST.in [new file with mode: 0644]
matos/migrations/0001_initial.py [new file with mode: 0644]
matos/migrations/__init__.py [new file with mode: 0644]
matos/models.py
matos/templates/matos/base.html [new file with mode: 0644]
matos/templates/matos/piece_confirm_delete.html [new file with mode: 0644]
matos/templates/matos/piece_detail.html [new file with mode: 0644]
matos/templates/matos/piece_form.html [new file with mode: 0644]
matos/templates/matos/piece_list.html [new file with mode: 0644]
matos/urls.py [new file with mode: 0644]
matos/views.py
setup.py [new file with mode: 0644]

diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644 (file)
index 0000000..3a839ef
--- /dev/null
@@ -0,0 +1,3 @@
+recursive-include matos/templates *.txt *.html
+include AUTHORS
+include COPYING
diff --git a/matos/migrations/0001_initial.py b/matos/migrations/0001_initial.py
new file mode 100644 (file)
index 0000000..e8773e9
--- /dev/null
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Adding model 'Piece'
+        db.create_table(u'matos_piece', (
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('title', self.gf('django.db.models.fields.CharField')(max_length=50)),
+            ('reference', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)),
+            ('comment', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('location', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('image', self.gf('django.db.models.fields.files.ImageField')(max_length=250, null=True, blank=True)),
+            ('rentable', self.gf('django.db.models.fields.BooleanField')(default=False)),
+            ('purchase_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
+            ('purchase_price', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=10, decimal_places=2, blank=True)),
+            ('creation_timestamp', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, null=True, blank=True)),
+            ('last_update_timestamp', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, null=True, blank=True)),
+        ))
+        db.send_create_signal(u'matos', ['Piece'])
+
+
+    def backwards(self, orm):
+        # Deleting model 'Piece'
+        db.delete_table(u'matos_piece')
+
+
+    models = {
+        u'matos.piece': {
+            'Meta': {'ordering': "['title']", 'object_name': 'Piece'},
+            'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'creation_timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}),
+            'last_update_timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
+            'location': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'purchase_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+            'purchase_price': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '10', 'decimal_places': '2', 'blank': 'True'}),
+            'reference': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
+            'rentable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        }
+    }
+
+    complete_apps = ['matos']
\ No newline at end of file
diff --git a/matos/migrations/__init__.py b/matos/migrations/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
index 71a836239075aa6e6e4ecb700e9c42c95c022d91..2e1973ac6b1ac2fb1034349c9fed7e2a9b10cc60 100644 (file)
@@ -1,3 +1,29 @@
+from django.core.urlresolvers import reverse
 from django.db import models
+from django.utils.translation import ugettext_lazy as _
 
-# Create your models here.
+class Piece(models.Model):
+
+    class Meta:
+        verbose_name = _('Piece')
+        verbose_name_plural = _('Pieces')
+        ordering = ['title']
+
+    title = models.CharField(_('Title'), max_length=50)
+    reference = models.CharField(_('Reference'), max_length=50, blank=True)
+    comment = models.TextField(_('Comment'), blank=True)
+    location = models.TextField(_('Location'), blank=True)
+    image = models.ImageField(_('Picture'),
+            upload_to='matos', max_length=250, null=True, blank=True)
+
+    rentable = models.BooleanField(_('Rentable'), default=False)
+
+    purchase_date = models.DateField(_('Purchase Date'), null=True, blank=True)
+    purchase_price = models.DecimalField(_('Purchase Price'),
+            max_digits=10, decimal_places=2, null=True, blank=True)
+
+    creation_timestamp = models.DateTimeField(auto_now_add=True, null=True)
+    last_update_timestamp = models.DateTimeField(auto_now=True, null=True)
+
+    def get_absolute_url(self):
+        return reverse('piece-view', kwargs={'pk': self.id})
diff --git a/matos/templates/matos/base.html b/matos/templates/matos/base.html
new file mode 100644 (file)
index 0000000..57c840e
--- /dev/null
@@ -0,0 +1,6 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block more-user-links %}
+<a href="{% url 'pieces-list' %}">{% trans 'Inventory' %}</a>
+{% endblock %}
diff --git a/matos/templates/matos/piece_confirm_delete.html b/matos/templates/matos/piece_confirm_delete.html
new file mode 100644 (file)
index 0000000..7b97c2c
--- /dev/null
@@ -0,0 +1,16 @@
+{% extends "matos/base.html" %}
+{% load i18n %}
+
+{% block appbar %}
+<h2>{{ object.title }}</h2>
+<span><a href="{% url 'piece-view' pk=object.id %}">{% trans 'Back to Piece' %}</a></span>
+{% endblock %}
+
+{% block content %}
+
+<form method="post">
+{% csrf_token %}
+<button>{% trans 'Confirm Deletion' %}</button>
+</form>
+
+{% endblock %}
diff --git a/matos/templates/matos/piece_detail.html b/matos/templates/matos/piece_detail.html
new file mode 100644 (file)
index 0000000..7f24e6a
--- /dev/null
@@ -0,0 +1,55 @@
+{% extends "matos/base.html" %}
+{% load i18n %}
+
+{% block appbar %}
+<h2>{{ object.title }}</h2>
+<span><a href="{% url 'pieces-list' %}">{% trans 'Back to inventory' %}</a></span>
+{% endblock %}
+
+{% block content %}
+
+<p>
+{% if perms.matos.edit_piece %}
+<a class="big-friendly-button" href="{% url 'piece-update' pk=piece.id %}">{% trans 'Edit Details' %}</a>
+{% endif %}
+{% if perms.matos.delete_piece %}
+<a class="big-friendly-button actually-not-that-friendly"
+        href="{% url 'piece-delete' pk=piece.id %}">{% trans 'Delete' %}</a>
+{% endif %}
+</p>
+
+
+<div id="piece-details">
+
+{% if object.image %}
+<img src="{{ object.image.url }}"/>
+{% endif %}
+
+<ul>
+{% if object.reference %}
+<li>{% trans 'Reference' %}: {{ object.reference }}</li>
+{% endif %}
+{% if object.purchase_date %}
+<li>{% trans 'Purchase Date' %}: {{ object.purchase_date }}</li>
+{% endif %}
+{% if object.purchase_price %}
+<li>{% trans 'Purchase Price' %}: {{ object.purchase_price }} €</li>
+{% endif %}
+</ul>
+</div>
+
+{% if object.comment %}
+<h3>{% trans 'Comment' %}</h3>
+<p>
+{{ object.comment }}
+</p>
+{% endif %}
+
+{% if object.location %}
+<h3>{% trans 'Location' %}</h3>
+<p>
+{{ object.location }}
+</p>
+{% endif %}
+
+{% endblock %}
diff --git a/matos/templates/matos/piece_form.html b/matos/templates/matos/piece_form.html
new file mode 100644 (file)
index 0000000..594a313
--- /dev/null
@@ -0,0 +1,31 @@
+{% extends "matos/base.html" %}
+{% load i18n %}
+
+{% block extrascripts %}
+<script src="{{ STATIC_URL }}ckeditor/ckeditor/ckeditor.js">
+</script>
+{% endblock %}
+
+{% block appbar %}
+{% if object %}
+<h2>{{ object.title }}</h2>
+<span><a href="{% url 'piece-view' pk=object.id %}">{% trans 'Back to Piece' %}</a></span>
+{% else %}
+<h2>{% trans 'New Piece' %}</h2>
+<span><a href="{% url 'pieces-list' %}">{% trans 'Back to inventory' %}</a></span>
+{% endif %}
+{% endblock %}
+
+
+{% block content %}
+    <form method="post" enctype="multipart/form-data">
+      <div id="form-content">
+        {% csrf_token %}
+        {{ form.as_p }}
+      </div>
+      {% block buttons %}
+      <button>{% trans 'Save' %}</button>
+      {% endblock %}
+    </form>
+{% endblock %}
+
diff --git a/matos/templates/matos/piece_list.html b/matos/templates/matos/piece_list.html
new file mode 100644 (file)
index 0000000..25d4dc2
--- /dev/null
@@ -0,0 +1,19 @@
+{% extends "matos/base.html" %}
+
+{% block appbar %}
+<h2>Matériel</h2>
+{% endblock %}
+
+{% block content %}
+
+<ul class="pieces-list">
+{% for piece in object_list %}
+<li><a href="{% url 'piece-view' pk=piece.id %}">{{ piece.title }}</a></li>
+{% endfor %}
+</ul>
+
+{% if perms.matos.add_piece %}
+<a class="big-friendly-button" href="{% url 'piece-create' %}">Nouvelle pièce</a>
+{% endif %}
+
+{% endblock %}
diff --git a/matos/urls.py b/matos/urls.py
new file mode 100644 (file)
index 0000000..3252884
--- /dev/null
@@ -0,0 +1,11 @@
+from django.conf.urls import patterns, url
+
+from .views import *
+
+urlpatterns = patterns('',
+    url(r'^$', PieceListView.as_view(), name='pieces-list'),
+    url(r'^piece/new$', PieceCreateView.as_view(), name='piece-create'),
+    url(r'^piece/(?P<pk>\d+)/$', PieceDetailView.as_view(), name='piece-view'),
+    url(r'^piece/(?P<pk>\d+)/update', PieceUpdateView.as_view(), name='piece-update'),
+    url(r'^piece/(?P<pk>\d+)/delete$', PieceDeleteView.as_view(), name='piece-delete'),
+)
index 60f00ef0ef347811e7b0c0921b7fda097acd9fcc..7275b4c1656e0ce4610ae5c7ec49287e4080dd9f 100644 (file)
@@ -1 +1,30 @@
-# Create your views here.
+from django.core.urlresolvers import reverse
+
+from django.views.generic.list import ListView
+from django.views.generic.detail import DetailView
+from django.views.generic.edit import CreateView, UpdateView, DeleteView
+
+from .models import Piece
+
+
+class PieceListView(ListView):
+    model = Piece
+
+
+class PieceDetailView(DetailView):
+    model = Piece
+
+
+class PieceCreateView(CreateView):
+    model = Piece
+
+
+class PieceUpdateView(UpdateView):
+    model = Piece
+
+
+class PieceDeleteView(DeleteView):
+    model = Piece
+
+    def get_success_url(self):
+        return reverse('pieces-list')
diff --git a/setup.py b/setup.py
new file mode 100644 (file)
index 0000000..e2bc48c
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,40 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+
+try:
+    from setuptools import setup
+except ImportError:
+    from ez_setup import use_setuptools
+    use_setuptools()
+    from setuptools import setup
+
+
+setup(
+    name='matos',
+    version='0.1',
+    description='Matos',
+    author='Frederic Peters',
+    author_email='fred@radiopanik.org',
+    packages=[
+        'matos',
+        'emissions.migrations',
+    ],
+    package_data={
+        'emissions': [
+            'templates/matos/*',
+        ]
+    },
+    classifiers=[
+        'Development Status :: 4 - Beta',
+        'Environment :: Web Environment',
+        'Framework :: Django',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
+        'Operating System :: OS Independent',
+        'Programming Language :: Python',
+        'Programming Language :: Python :: 2',
+        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
+        'Topic :: Multimedia :: Sound/Audio',
+    ],
+    zip_safe=False,
+)