Browse Source

Merge branch 'master' of git.illyse.org:coin

Sébastien Dufromentel 11 years ago
parent
commit
8e90ef6ee0

+ 7 - 4
coin/billing/admin.py

@@ -8,10 +8,13 @@ class InvoiceDetailInline(admin.StackedInline):
     extra = 0
 
 
+class PaymentInline(admin.StackedInline):
+    model = Payment
+    extra = 0
+
+
 class InvoiceAdmin(admin.ModelAdmin):
-    inlines = [InvoiceDetailInline]
+    inlines = [InvoiceDetailInline, PaymentInline]
 
 
-admin.site.register(Invoice,InvoiceAdmin)
-admin.site.register(InvoiceDetail,)
-admin.site.register(Payment,)
+admin.site.register(Invoice,InvoiceAdmin)

+ 80 - 0
coin/billing/migrations/0003_auto__add_field_invoice_number__chg_field_invoice_date__chg_field_paym.py

@@ -0,0 +1,80 @@
+# -*- 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 field 'Invoice.number'
+        db.add_column(u'billing_invoice', 'number',
+                      self.gf('django.db.models.fields.CharField')(default=0, max_length=25),
+                      keep_default=False)
+
+
+        # Changing field 'Invoice.date'
+        db.alter_column(u'billing_invoice', 'date', self.gf('django.db.models.fields.DateField')(null=True))
+
+        # Changing field 'Payment.date'
+        db.alter_column(u'billing_payment', 'date', self.gf('django.db.models.fields.DateField')())
+
+    def backwards(self, orm):
+        # Deleting field 'Invoice.number'
+        db.delete_column(u'billing_invoice', 'number')
+
+
+        # Changing field 'Invoice.date'
+        db.alter_column(u'billing_invoice', 'date', self.gf('django.db.models.fields.DateField')(auto_now_add=True, null=True))
+
+        # Changing field 'Payment.date'
+        db.alter_column(u'billing_payment', 'date', self.gf('django.db.models.fields.DateField')(auto_now_add=True))
+
+    models = {
+        u'billing.invoice': {
+            'Meta': {'object_name': 'Invoice'},
+            'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '5', 'decimal_places': '2'}),
+            'date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True'}),
+            'date_due': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 2, 28, 0, 0)', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'number': ('django.db.models.fields.CharField', [], {'max_length': '25'}),
+            'offer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['offers.Offer']"}),
+            'period_from': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 2, 1, 0, 0)', 'null': 'True'}),
+            'period_to': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 2, 28, 0, 0)', 'null': 'True'}),
+            'status': ('django.db.models.fields.CharField', [], {'default': "'open'", 'max_length': '50'})
+        },
+        u'billing.invoicedetail': {
+            'Meta': {'object_name': 'InvoiceDetail'},
+            'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '5', 'decimal_places': '2'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'invoice': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['billing.Invoice']"}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'quantity': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'tax': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True'})
+        },
+        u'billing.payment': {
+            'Meta': {'object_name': 'Payment'},
+            'amount': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '7', 'decimal_places': '2'}),
+            'date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'invoce': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['billing.Invoice']"}),
+            'payment_means': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
+        },
+        u'offers.offer': {
+            'Meta': {'object_name': 'Offer'},
+            'billing_period': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'initial_fees': ('django.db.models.fields.DecimalField', [], {'max_digits': '5', 'decimal_places': '2'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'period_fees': ('django.db.models.fields.DecimalField', [], {'max_digits': '5', 'decimal_places': '2'}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['offers.Service']"})
+        },
+        u'offers.service': {
+            'Meta': {'object_name': 'Service'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        }
+    }
+
+    complete_apps = ['billing']

+ 80 - 0
coin/billing/migrations/0004_auto__add_field_invoicedetail_offer__del_field_invoice_offer.py

@@ -0,0 +1,80 @@
+# -*- 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 field 'InvoiceDetail.offer'
+        db.add_column(u'billing_invoicedetail', 'offer',
+                      self.gf('django.db.models.fields.related.ForeignKey')(to=orm['offers.Offer'], null=True),
+                      keep_default=False)
+
+        # Deleting field 'Invoice.offer'
+        db.delete_column(u'billing_invoice', 'offer_id')
+
+
+    def backwards(self, orm):
+        # Deleting field 'InvoiceDetail.offer'
+        db.delete_column(u'billing_invoicedetail', 'offer_id')
+
+
+        # User chose to not deal with backwards NULL issues for 'Invoice.offer'
+        raise RuntimeError("Cannot reverse this migration. 'Invoice.offer' and its values cannot be restored.")
+        
+        # The following code is provided here to aid in writing a correct migration        # Adding field 'Invoice.offer'
+        db.add_column(u'billing_invoice', 'offer',
+                      self.gf('django.db.models.fields.related.ForeignKey')(to=orm['offers.Offer']),
+                      keep_default=False)
+
+
+    models = {
+        u'billing.invoice': {
+            'Meta': {'object_name': 'Invoice'},
+            'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '5', 'decimal_places': '2'}),
+            'date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today', 'null': 'True'}),
+            'date_due': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 2, 28, 0, 0)', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'number': ('django.db.models.fields.CharField', [], {'max_length': '25'}),
+            'period_from': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 2, 1, 0, 0)', 'null': 'True'}),
+            'period_to': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 2, 28, 0, 0)', 'null': 'True'}),
+            'status': ('django.db.models.fields.CharField', [], {'default': "'open'", 'max_length': '50'})
+        },
+        u'billing.invoicedetail': {
+            'Meta': {'object_name': 'InvoiceDetail'},
+            'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '5', 'decimal_places': '2'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'invoice': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['billing.Invoice']"}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'offer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['offers.Offer']", 'null': 'True'}),
+            'quantity': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'tax': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True'})
+        },
+        u'billing.payment': {
+            'Meta': {'object_name': 'Payment'},
+            'amount': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '7', 'decimal_places': '2'}),
+            'date': ('django.db.models.fields.DateField', [], {'default': 'datetime.date.today'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'invoce': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['billing.Invoice']"}),
+            'payment_means': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
+        },
+        u'offers.offer': {
+            'Meta': {'object_name': 'Offer'},
+            'billing_period': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'initial_fees': ('django.db.models.fields.DecimalField', [], {'max_digits': '5', 'decimal_places': '2'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'period_fees': ('django.db.models.fields.DecimalField', [], {'max_digits': '5', 'decimal_places': '2'}),
+            'service': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['offers.Service']"})
+        },
+        u'offers.service': {
+            'Meta': {'object_name': 'Service'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        }
+    }
+
+    complete_apps = ['billing']

+ 56 - 19
coin/billing/models.py

@@ -1,38 +1,75 @@
 # -*- coding: utf-8 -*-
+import datetime
+import calendar
 from django.db import models
-from coin.offers.models import Offer 
+from coin.offers.models import Offer
+
 
 class Invoice(models.Model):
 
     INVOICES_STATUS_CHOICES = (
-        ('open', 'A payer'),
-        ('closed', 'Reglée'),
-        ('trouble', 'Litige')
+        ('open', u'A payer'),
+        ('closed', u'Reglée'),
+        ('trouble', u'Litige')
     )
 
+    number = models.CharField(max_length=25)
+
     status = models.CharField(max_length=50, choices=INVOICES_STATUS_CHOICES,
-                              default='open')
-    amount = models.DecimalField(max_digits=5, decimal_places=2)
-    date = models.DateField(auto_now_add=True, null=True)
-    period_from = models.DateField(auto_now_add=False, null=True)
-    period_to = models.DateField(auto_now_add=False, null=True)
-    date_due = models.DateField(auto_now_add=False, null=True)
-    offer = models.ForeignKey(Offer)
+                              default='open',
+                              verbose_name='Statut')
+    amount = models.DecimalField(max_digits=5, decimal_places=2,
+                                 verbose_name='Montant')
+    date = models.DateField(default=datetime.date.today, null=True)
+    period_from = models.DateField(
+        default=datetime.date(datetime.date.today().year,
+                              datetime.date.today().month, 1),
+        null=True,
+        verbose_name=u'Début de période de facturation')
+    period_to = models.DateField(
+        default=(datetime.date(datetime.date.today().year,
+                               datetime.date.today().month + 1, 1) -
+                 datetime.timedelta(days=1)),
+        null=True,
+        verbose_name=u'Fin de période de facturation')
+    date_due = models.DateField(
+        default=(datetime.date(datetime.date.today().year,
+                               datetime.date.today().month + 1, 1) -
+                 datetime.timedelta(days=1)),
+        null=True,
+        verbose_name=u'Date d\'échéance de paiement')
+
+    def __unicode__(self):
+        return u'#%s %s€ %s' % (self.number, self.amount, self.date_due)
+
+    class Meta:
+        verbose_name = 'facture'
+
 
 class InvoiceDetail(models.Model):
 
     label = models.CharField(max_length=100)
-    amount = models.DecimalField(max_digits=5, decimal_places=2)
-    quantity = models.IntegerField(null=True)
-    tax = models.IntegerField(null=True)
-    invoice = models.ForeignKey(Invoice)
+    amount = models.DecimalField(max_digits=5, decimal_places=2,
+                                 verbose_name='Montant')
+    quantity = models.IntegerField(null=True, verbose_name=u'Quantité')
+    tax = models.IntegerField(null=True, default=0, verbose_name='TVA')
+    invoice = models.ForeignKey(Invoice, verbose_name='Facture')
+    offer = models.ForeignKey(Offer, null=True, verbose_name='Offre')
 
     def __unicode__(self):
         return self.label
 
+    class Meta:
+        verbose_name = 'détail de facture'
+
 
 class Payment(models.Model):
-    payment_means = models.CharField(max_length=100, null=True)
-    amount = models.DecimalField(max_digits=7, decimal_places=2, null=True)
-    date = models.DateField(auto_now_add=True)
-    invoce = models.ForeignKey(Invoice)
+    payment_means = models.CharField(max_length=100, null=True,
+                                     verbose_name='Moyen de paiement')
+    amount = models.DecimalField(max_digits=7, decimal_places=2, null=True,
+                                 verbose_name='Montant')
+    date = models.DateField(default=datetime.date.today)
+    invoce = models.ForeignKey(Invoice, verbose_name='Facture')
+
+    class Meta:
+        verbose_name = 'paiement'

+ 1 - 1
requirements.txt

@@ -6,4 +6,4 @@ python-ldap==2.4.13
 wsgiref==0.1.2
 python-dateutil==2.2
 django-autocomplete-light==2.0.0a8
-django-netfields==0.2.1
+-e git+https://github.com/jmacul2/django-postgresql-netfields@2d6e597c3d65ba8b0e1f6e3183869216e990e915#egg=django-netfields