--- /dev/null
+recursive-include matos/templates *.txt *.html
+include AUTHORS
+include COPYING
--- /dev/null
+# -*- 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
+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})
--- /dev/null
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block more-user-links %}
+<a href="{% url 'pieces-list' %}">{% trans 'Inventory' %}</a>
+{% endblock %}
--- /dev/null
+{% 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 %}
--- /dev/null
+{% 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 %}
--- /dev/null
+{% 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 %}
+
--- /dev/null
+{% 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 %}
--- /dev/null
+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'),
+)
-# 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')
--- /dev/null
+#! /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,
+)