This commit is contained in:
tomtom5152
2015-01-28 16:59:54 +00:00
3 changed files with 85 additions and 30 deletions

View File

@@ -1,276 +0,0 @@
__author__ = 'Ghost'
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PyRIGS.settings")
import django
django.setup()
from django.db import connections
from django.core.exceptions import ObjectDoesNotExist
from django.db.utils import ConnectionDoesNotExist
from django.db import transaction
from RIGS import models
import reversion
from datetime import datetime
def fix_email(email):
if not (email is None or email is "") and ("@" not in email):
email += "@nottingham.ac.uk"
return email
def setup_cursor():
try:
cursor = connections['legacy'].cursor()
return cursor
except ConnectionDoesNotExist:
print("Legacy database is not configured")
print(connections._databases)
return None
def clean_ascii(text):
return ''.join([i if ord(i) < 128 else '' for i in text])
def import_users(delete=False):
if(delete):
models.Event.objects.get(is_rig=False).delete()
cursor = setup_cursor()
if cursor is None:
return
sql = """SELECT `id`, `login`, `email`, `first_name`, `last_name`, `verified`, `initials`, `phone_number` FROM `users`"""
cursor.execute(sql)
for row in cursor.fetchall():
try:
object = models.Profile.objects.get(pk=row[0])
object.first_name = row[3]
object.last_name = row[4]
object.initials = row[6]
object.phone = row[7]
object.save()
print("Updated " + str(object))
except ObjectDoesNotExist:
object = models.Profile(pk=row[0], username=row[1], email=row[2], first_name=row[3], last_name=row[4],
is_active=row[5], initials=row[6], phone=row[7])
object.set_unusable_password()
object.save()
print("Created " + str(object))
def import_people(delete=False):
if(delete):
models.Event.objects.get(is_rig=False).delete()
cursor = setup_cursor()
if cursor is None:
return
sql = """SELECT `id`, `name`, `phone`, `email`, `address`, `status` FROM `people`"""
cursor.execute(sql)
resp = cursor.fetchall()
for row in resp:
email = row[3]
fix_email(email)
notes = ""
if row[5] != "Normal":
notes = row[5]
person, created = models.Person.objects.get_or_create(pk=row[0], name=row[1], phone=row[2], email=email,
address=row[4], notes=notes)
if created:
print("Created: " + person.__str__())
with transaction.atomic(), reversion.create_revision():
person.save()
else:
print("Found: " + person.__str__())
def import_organisations(delete=False):
if(delete):
models.Event.objects.get(is_rig=False).delete()
cursor = setup_cursor()
if cursor is None:
return
sql = """SELECT `id`, `name`, `phone`, `address`, `union_account`, `status` FROM `organisations`"""
cursor.execute(sql)
for row in cursor.fetchall():
notes = ""
if row[5] != "Normal":
notes = row[5]
object, created = models.Organisation.objects.get_or_create(pk=row[0], name=row[1], phone=row[2],
address=row[3],
union_account=row[4], notes=notes)
if created:
print("Created: " + object.__str__())
with transaction.atomic(), reversion.create_revision():
object.save()
else:
print("Found: " + object.__str__())
def import_vat_rates(delete=False):
if(delete):
models.Event.objects.get(is_rig=False).delete()
cursor = setup_cursor()
if cursor is None:
return
sql = """SELECT `id`, `start_date`, `start_time`, `comment`, `rate` FROM `vat_rates`"""
cursor.execute(sql)
for row in cursor.fetchall():
start_at = datetime.combine(row[1], row[2])
object, created = models.VatRate.objects.get_or_create(pk=row[0], start_at=start_at,
comment=row[3], rate=row[4])
if created:
print("Created: " + object.__str__())
with transaction.atomic(), reversion.create_revision():
object.save()
else:
print("Found: " + object.__str__())
def import_venues(delete=False):
if delete:
models.Venue.objects.all().delete()
cursor = setup_cursor()
if cursor is None:
return
sql = """SELECT `venue`, `threephasepower` FROM `eventdetails` GROUP BY `venue` WHERE `venue` IS NOT NULL"""
cursor.execute(sql)
for row in cursor.fetchall():
print(("Searching for %s", row[0]))
try:
object = models.Venue.objects.get(name__iexact=row[0])
if not object.three_phase_available and row[1]:
with transaction.atomic(), reversion.create_revision():
object.three_phase_available = row[1]
object.save()
except ObjectDoesNotExist:
with transaction.atomic(), reversion.create_revision():
object = models.Venue(name=row[0], three_phase_available=row[1])
object.save()
def import_rigs(delete=False):
if delete:
models.Event.objects.all().delete()
cursor = setup_cursor()
if cursor is None:
return
sql = """SELECT r.id, event, person_id, organisation_id, venue, description, status, start_date, start_time, end_date, end_time, access_date, access_time, meet_date, meet_time, meet_info, based_on_id, based_on_type, dry_hire, user_id, payment_method, order_no, payment_received, collectorsid FROM eventdetails AS e INNER JOIN rigs AS r ON e.describable_id = r.id WHERE describable_type = 'Rig' AND venue IS NOT NULL"""
cursor.execute(sql)
for row in cursor.fetchall():
print(row)
person = models.Person.objects.get(pk=row[2])
if row[3]:
organisation = models.Organisation.objects.get(pk=row[3])
else:
organisation = None
venue = models.Venue.objects.get(name__iexact=row[4])
status = {
'Booked': models.Event.BOOKED,
'Provisional': models.Event.PROVISIONAL,
'Cancelled': models.Event.CANCELLED,
}
mic = models.Profile.objects.get(pk=row[19])
if row[16] and row[17] == "Rig":
try:
based_on = models.Event.objects.get(pk=row[16])
except ObjectDoesNotExist:
based_on = None
else:
based_on = None
with transaction.atomic(), reversion.create_revision():
try:
object = models.Event.objects.get(pk=row[0])
except ObjectDoesNotExist:
object = models.Event(pk=row[0])
object.name = clean_ascii(row[1])
object.person = person
object.organisation = organisation
object.venue = venue
object.notes = clean_ascii(row[5])
object.status = status[row[6]]
object.start_date = row[7]
object.start_time = row[8]
object.end_date = row[9]
object.end_time = row[10]
if row[11] and row[12]:
object.access_at = datetime.combine(row[11], row[12])
if row[13] and row[14]:
object.meet_at = datetime.combine(row[13], row[14])
object.meet_info = row[15]
object.based_on = based_on
object.dry_hire = row[18]
object.is_rig = True
object.mic = mic
object.payment_method = row[20]
object.purchase_order = row[21]
object.payment_received = row[22]
object.collector = row[23]
object.save()
def import_eventitem(delete=True):
if delete:
models.EventItem.objects.all().delete()
cursor = setup_cursor()
if cursor is None:
return
sql = """SELECT i.id, r.id, i.name, i.description, i.quantity, i.cost, i.sortorder FROM rig_items AS i INNER JOIN eventdetails AS e ON i.eventdetail_id = e.id INNER JOIN rigs AS r ON e.describable_id = r.id"""
cursor.execute(sql)
for row in cursor.fetchall():
print(row)
with transaction.atomic():
try:
event = models.Event.objects.get(pk=row[1])
except ObjectDoesNotExist:
continue
try:
object = models.EventItem.objects.get(pk=row[0])
except ObjectDoesNotExist:
object = models.EventItem(pk=row[0])
object.event = event
object.name = clean_ascii(row[2])
object.description = clean_ascii(row[3])
object.quantity = row[4]
object.cost = row[5]
object.order = row[6] if row[6] else 0
object.save()
with reversion.create_revision():
event.save()
def import_nonrigs(delete=False):
if(delete):
models.Event.objects.get(is_rig=False).delete()
cursor = setup_cursor()
if cursor is None:
return
sql = """SELECT name, start_date, start_time, end_date, end_time, description, user_id FROM non_rigs WHERE active = 1;"""
cursor.execute(sql)
for row in cursor.fetchall():
print(row)
with transaction.atomic(), reversion.create_revision():
event = models.Event()
event.name = row[0]
event.start_date = row[1]
event.start_time = row[2]
event.end_date = row[3]
event.end_time = row[4]
event.description = row[5]
event.mic = models.Profile.objects.get(pk=row[6])
event.save()
def main():
import_users()
import_people()
import_organisations()
import_vat_rates()
import_venues(False)
import_rigs(False)
import_eventitem(False)
import_nonrigs(False)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
('RIGS', '0015_auto_20141208_0233'),
]
operations = [
migrations.CreateModel(
name='Invoice',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('invoice_date', models.DateField(auto_now_add=True)),
('void', models.BooleanField()),
('event', models.OneToOneField(to='RIGS.Event')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Payment',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('date', models.DateField()),
('amount', models.DecimalField(help_text=b'Please use ex. VAT', max_digits=10, decimal_places=2)),
('method', models.CharField(max_length=2, choices=[(b'C', b'Cash'), (b'I', b'Internal'), (b'E', b'External'), (b'SU', b'SU Core'), (b'M', b'Members')])),
('invoice', models.ForeignKey(to='RIGS.Invoice')),
],
options={
},
bases=(models.Model,),
),
migrations.AlterField(
model_name='event',
name='mic',
field=models.ForeignKey(related_name='event_mic', verbose_name=b'MIC', blank=True, to=settings.AUTH_USER_MODEL, null=True),
preserve_default=True,
),
]