data bulk creation on synchronizing
This commit is contained in:
parent
346e5d61a0
commit
234bae2b9f
|
@ -0,0 +1,118 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from south.utils import datetime_utils as datetime
|
||||
from south.db import db
|
||||
from south.v2 import SchemaMigration
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Migration(SchemaMigration):
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Changing field 'LiaisonNameidFamille.famille'
|
||||
db.alter_column(u'data_liaisonnameidfamille', 'famille_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['data.Famille'], null=True))
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Changing field 'LiaisonNameidFamille.famille'
|
||||
db.alter_column(u'data_liaisonnameidfamille', 'famille_id', self.gf('django.db.models.fields.related.ForeignKey')(default='', to=orm['data.Famille']))
|
||||
|
||||
models = {
|
||||
u'data.enfant': {
|
||||
'Meta': {'object_name': 'Enfant'},
|
||||
'date_naissance': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'famille': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['data.Famille']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'id_enfant': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
|
||||
'nom': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
|
||||
'prenom': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
|
||||
'sexe': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True'})
|
||||
},
|
||||
u'data.facture': {
|
||||
'Meta': {'object_name': 'Facture'},
|
||||
'active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'date_envoi_dernier_mail': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'date_generation': ('django.db.models.fields.DateField', [], {}),
|
||||
'date_limite_paie': ('django.db.models.fields.DateField', [], {}),
|
||||
'date_reponse_tipi': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'debut_pge': ('django.db.models.fields.DateField', [], {}),
|
||||
'devise': ('django.db.models.fields.CharField', [], {'max_length': '3'}),
|
||||
'famille': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['data.Famille']"}),
|
||||
'fin_pge': ('django.db.models.fields.DateField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'id_payeur_par_defaut': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
|
||||
'montant': ('django.db.models.fields.DecimalField', [], {'max_digits': '6', 'decimal_places': '2'}),
|
||||
'montant_regle': ('django.db.models.fields.DecimalField', [], {'max_digits': '6', 'decimal_places': '2'}),
|
||||
'nom_payeur': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'paye': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'prelevement_automatique': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'prenom_payeur': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||
'solde': ('django.db.models.fields.DecimalField', [], {'max_digits': '6', 'decimal_places': '2'}),
|
||||
'statut_tipi': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
u'data.famille': {
|
||||
'Meta': {'object_name': 'Famille'},
|
||||
'appartement': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'batiment': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'btq': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'code_postal': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'}),
|
||||
'code_secret': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
|
||||
'commune': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'complement_adresse': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'login': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'nombre_enfants': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
|
||||
'pays': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
|
||||
'personnes': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['data.Personne']", 'through': u"orm['data.LiaisonParentFamille']", 'symmetrical': 'False'}),
|
||||
'qf_ccas': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
|
||||
'qf_vo': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
|
||||
'rue': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
|
||||
'voie': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
u'data.invoicenotificationemail': {
|
||||
'Meta': {'object_name': 'InvoiceNotificationEmail'},
|
||||
'date_sent': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'invoice_number': ('django.db.models.fields.CharField', [], {'max_length': '64'})
|
||||
},
|
||||
u'data.liaisonnameidfamille': {
|
||||
'Meta': {'unique_together': "(('name_id', 'famille'),)", 'object_name': 'LiaisonNameidFamille'},
|
||||
'famille': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['data.Famille']", 'null': 'True'}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'link_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'name_id': ('django.db.models.fields.CharField', [], {'max_length': '256', 'db_index': 'True'})
|
||||
},
|
||||
u'data.liaisonparentfamille': {
|
||||
'Meta': {'object_name': 'LiaisonParentFamille'},
|
||||
'famille': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['data.Famille']"}),
|
||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'personne': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['data.Personne']"})
|
||||
},
|
||||
u'data.personne': {
|
||||
'Meta': {'object_name': 'Personne'},
|
||||
'appartement': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'batiment': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'btq': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'cai': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'code_postal': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'}),
|
||||
'commune': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'complement_adresse': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
|
||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name_id': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '256', 'null': 'True', 'blank': 'True'}),
|
||||
'nom': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}),
|
||||
'numero_allocation': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'pays': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'prenom': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}),
|
||||
'regime': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'rue': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
|
||||
'sexe': ('django.db.models.fields.CharField', [], {'max_length': '1', 'null': 'True'}),
|
||||
'telephone_domicile': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'telephone_portable': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'telephone_portable_professionnel': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||
'voie': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['data']
|
|
@ -3,7 +3,7 @@ import shutil
|
|||
from os import path
|
||||
from datetime import datetime
|
||||
|
||||
from django.db import models
|
||||
from django.db import models, transaction
|
||||
from django.conf import settings
|
||||
|
||||
SEXES = (
|
||||
|
@ -59,6 +59,7 @@ class PersonneManager(models.Manager):
|
|||
params[key] = value.decode('utf-8')
|
||||
|
||||
objs += (Personne(**params), )
|
||||
|
||||
self.all().delete()
|
||||
self.bulk_create(objs)
|
||||
|
||||
|
@ -85,13 +86,15 @@ class FamilleManager(models.Manager):
|
|||
'ID_PER2': 'pers2'
|
||||
}
|
||||
|
||||
|
||||
def synchronize(self, source_file):
|
||||
|
||||
with open(source_file) as source:
|
||||
csv_reader = reader(source, delimiter = ';')
|
||||
caption = csv_reader.next()
|
||||
attrs = map(lambda e: self.attribute_mappings[e], caption)
|
||||
ids = ()
|
||||
families = ()
|
||||
families_links = ()
|
||||
|
||||
for row in csv_reader:
|
||||
params = dict(zip(attrs, row))
|
||||
|
@ -103,36 +106,21 @@ class FamilleManager(models.Manager):
|
|||
for key, value in params.iteritems():
|
||||
params[key] = unicode(value, 'utf-8')
|
||||
|
||||
try:
|
||||
obj = self.get(pk = obj_id)
|
||||
obj_id = params.pop('id')
|
||||
ids += (obj_id, )
|
||||
updated = False
|
||||
for attr, value in params.iteritems():
|
||||
if getattr(obj, attr) != value:
|
||||
setattr(obj, attr, value)
|
||||
updated = True
|
||||
if updated:
|
||||
try:
|
||||
obj.save()
|
||||
except Exception, e:
|
||||
print "Family update error: %s for %s" % (e, row)
|
||||
except models.ObjectDoesNotExist:
|
||||
try:
|
||||
obj = self.create(**params)
|
||||
except Exception, e:
|
||||
print "Family create error: %s for %s" % (e, row)
|
||||
families += (Famille(**params),)
|
||||
|
||||
for person in (pers1, pers2):
|
||||
try:
|
||||
member = Personne.objects.get(pk = person)
|
||||
if not LiaisonParentFamille.objects.filter(famille = obj,
|
||||
personne = member):
|
||||
LiaisonParentFamille.objects.create(famille = obj,
|
||||
personne = member)
|
||||
member = Personne.objects.get(pk=person)
|
||||
famille = self.get(pk=obj_id)
|
||||
families_links += (LiaisonParentFamille(famille = famille,
|
||||
personne = member),)
|
||||
except:
|
||||
pass
|
||||
self.exclude(id__in=ids).delete()
|
||||
|
||||
self.all().delete()
|
||||
self.bulk_create(families)
|
||||
LiaisonParentFamille.objects.all().delete()
|
||||
LiaisonParentFamille.objects.bulk_create(families_links)
|
||||
|
||||
class FactureManager(models.Manager):
|
||||
|
||||
|
@ -273,7 +261,7 @@ class LiaisonNameidFamille(models.Model):
|
|||
the family(children, invoices, etc)
|
||||
"""
|
||||
name_id = models.CharField(max_length = 256, db_index = True)
|
||||
famille = models.ForeignKey('Famille')
|
||||
famille = models.ForeignKey('Famille', null=True)
|
||||
link_date = models.DateTimeField(auto_now_add = True)
|
||||
|
||||
class Meta:
|
||||
|
|
Reference in New Issue